DEFINITION CPT_840008398 1501
DEFINITION CPT_3G_840008398 1504
DEFINITION CPT_1534_840008398 1534
DEFINITION CPT_1535_840008398 1535
DEFINITION INCREMENT_840008398 1
DEFINITION MODULE_TRAIT_840008398 0x5000
DEFINITION ERR_SEM_840008398 0x040
DEFINITION ERR_SYNTAX_840008398 0x070
DEFINITION ERR_CROISE_840008398 0x0F0
DEFINITION GGSN_840008398 19
DEFINITION SGSN_840008398 18
REGISTRE ENTIER recordtype_840008398
REGISTRE ENTIER val_champ_840008398
REGISTRE ENTIER chargingCharac_840008398
REGISTRE ENTIER valid_chp_840008398
REGISTRE ENTIER present1_840008398
REGISTRE ENTIER present2_840008398
REGISTRE ENTIER present3_840008398
REGISTRE ENTIER present4_840008398
REGISTRE ENTIER erreur_840008398
REGISTRE ENTIER X_840008398
REGISTRE ENTIER Y_840008398
REGISTRE ENTIER Z_840008398
REGISTRE ENTIER date_840008398
REGISTRE ENTIER chgTime_present_840008398
REGISTRE ENTIER NB_VolUp_840008398
REGISTRE ENTIER NB_VolDo_840008398
REGISTRE ENTIER indiceUp_840008398
REGISTRE ENTIER indice_840008398
REGISTRE ENTIER SomVolUp_840008398
REGISTRE ENTIER SomVolDo_840008398
REGISTRE ENTIER qoSIVolGprsUp_val_840008398
REGISTRE ENTIER qoSIVolGprsDo_val_840008398
REGISTRE ENTIER date_art_840008398
REGISTRE ENTIER seqNum_840008398
REGISTRE POINTEUR pt_val_Filt_Gprs_Null_840008398
REGISTRE POINTEUR str_accPtName_840008398
REGISTRE POINTEUR ptr_accPtName_840008398
REGISTRE POINTEUR pt_buffer_840008398
REGISTRE POINTEUR pt_val_chgChar_840008398
REGISTRE POINTEUR pt_chgChar_840008398
REGISTRE ENTIER code_rejet_840008398
REGISTRE ENTIER EFFICACE_840008398
REGISTRE ENTIER MODULE_840008398
REGISTRE ENTIER ERREUR_840008398
REGISTRE ENTIER WLAN_840008398
REGISTRE ENTIER UMTS_840008398
REGISTRE ENTIER rattype_840008398
REGISTRE ENTIER PresenceRatType_840008398
REGISTRE ENTIER b_ACTIV_TrouNoir_840008398
# ######################################################################################################
# Traitement : Tbgw_gsn_trt.src
# Correction de la somme des volumes, troncature sur 4 octets de poids faibles
# Les fonctions de manipulation des floats ne sont pas adequates dans ce contexte
# FO 511 : Controle de presence de T3t11 et T3t34 pour els CRAS GGSN
########################################################################################################
#
# 26/09/08 URS G1R9 QC217 (171) : modif envoi en Elimine
# 07/01/11 - BEA - G3R1 lot4 Verification/Correction des variables (constantes, entiers, pointeurs)
# 07/07/11 - JLG - G3R4 Prise en compte des CRA GGSN avec RecordSequenceNumber =1
# 07/09/11 - JLG - G3R3C11 QC928 [3GDT] Prise en compte de toutes les valeurs du champ ratType
# 12/10/11 - JLG - G3R4C5 QC949 [3GDT] evolution spec : ratType=3 envoi dans les elimines divers au lieu des errones
# 21/01/13- PKH - G3R9 : Item OBIWAM
# 18/06/13 -JLG- G3R10 : lot3 Item Evolutions CRAs Sgsn et Ggsn
# 31/07/13 -PKH- QC1260 controler la presence du champ ratType avant de faire les controles
# 10/09/13 - JLG - G3R10 lot4 correction capacitaire : QC1249, 1250, 1276
########################################################################################################




# Initialisations
EFFICACE_840008398 = 1
MODULE_840008398 = MODULE_TRAIT_840008398
ERREUR_840008398 = 0
code_rejet_840008398 = 0
WLAN_840008398 = 0
PresenceRatType_840008398 = 0

trace("## debut PCode de traitement Tbgw_gsn ##")

pt_val_Filt_Gprs_Null_840008398 = "11223334445566"
i_strcpy(pt_val_Filt_Gprs_Null_840008398,"")
#AccessPointNameNI est de taille 63 max
str_accPtName_840008398  = "str_accPtName01234567890123456789012345678901234567890123456789"
ptr_accPtName_840008398  = "ptr_accPtName01234567890123456789012345678901234567890123456789"
pt_buffer_840008398    = "str012345678901234567890123456789012345678901234567890000000000GSN_APN_Prepaid_123"
pt_chgChar_840008398     = "00000005"
pt_val_chgChar_840008398   = "GSN_chgCharNotBGw_00000005"

i_strcpy(str_accPtName_840008398, "")
i_strcpy(ptr_accPtName_840008398, "")
i_strcpy(pt_buffer_840008398, "")
i_strcpy(pt_chgChar_840008398, "")
i_strcpy(pt_val_chgChar_840008398, "")

# initialisation du recordType
recordtype_840008398 = i_get_art_field(g_iartin, $Tbgw_gsn::recordType)

#Calcul de la somme des Volumes Down
#**************************la somme des Vol Up ***************************
present3_840008398 =  i_valid_field_n(g_iartin,$Tbgw_gsn::qoSIVolGprsUp-2)
SI (present3_840008398)
ALORS
  NB_VolUp_840008398 = i_get_art_field(g_iartin, $Tbgw_gsn::qoSIVolGprsUp -1)/4
  indiceUp_840008398 =0
# SomVolUp = i_entier_to_float(0)
  SomVolUp_840008398 = 0
  POINT BOUCLE_UP
  SI (indiceUp_840008398 < NB_VolUp_840008398)
  ALORS
    qoSIVolGprsUp_val_840008398 = i_get_art_fieldtab(g_iartin, $Tbgw_gsn::qoSIVolGprsUp, indiceUp_840008398)
    SomVolUp_840008398 = (qoSIVolGprsUp_val_840008398 + SomVolUp_840008398)&0xFFFFFFFF
    indiceUp_840008398 = indiceUp_840008398 + 1
    SAUT BOUCLE_UP
  FINSI
FINSI

#************************ la somme des Vol Down*************************
present4_840008398 =  i_valid_field_n(g_iartin,$Tbgw_gsn::qoSIVolGprsDo-2)
SI (present4_840008398)
ALORS
  NB_VolDo_840008398 = i_get_art_field(g_iartin, $Tbgw_gsn::qoSIVolGprsDo -1)/4
  indice_840008398 =0
# SomVolDo = i_entier_to_float(0)
  SomVolDo_840008398 = 0
  POINT BOUCLE_Do
  SI (indice_840008398 < NB_VolDo_840008398)
  ALORS
    qoSIVolGprsDo_val_840008398 = i_get_art_fieldtab(g_iartin,$Tbgw_gsn::qoSIVolGprsDo, indice_840008398)
    SomVolDo_840008398 = (qoSIVolGprsDo_val_840008398+ SomVolDo_840008398)&0xFFFFFFFF
    indice_840008398 = indice_840008398 + 1
    SAUT BOUCLE_Do
  FINSI
FINSI

#####################################################################
# test champs obligatoires pour les traitements
#####################################################################

## OGA 511
# Test de presence de T3t11  pour les CRAS GGSN
# on test sur la longuer L3t11, celle-ci doit etre superieure a 8 octets (T4t11+L4t11+V4t11)

SI ( i_get_art_field(g_iartin, $Tbgw_gsn::T3t11+1) < 8 && recordtype_840008398 == GGSN_840008398 )
ALORS
  trace("Erreur CRA GGSN , le champ servedIPAddress est absent")
  ERREUR_840008398 = ERR_SEM_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8700, 2, g_iartin, "", 2, code_rejet_840008398, "servedIPAddress", 0)
  SAUT  STOCKE_ERRONE
FINSI

# Test de presence de T3t34  pour les CRAS GGSN
# on test sur la longuer L3t34, celle-ci doit etre superieure a 8 octets (T4t11+L4t11+V4t11)

SI ( i_get_art_field(g_iartin, $Tbgw_gsn::T3t34+1) < 8 && recordtype_840008398 == GGSN_840008398 )
ALORS
  trace("Erreur CRA GGSN , le champ sgsnIPAddress est absent")
  ERREUR_840008398 = ERR_SEM_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8700, 2, g_iartin, "", 2, code_rejet_840008398, "sgsnIPAddress", 0)
  SAUT  STOCKE_ERRONE
FINSI
## FIN OGA 511

SI ( !i_valid_field_n(g_iartin, $Tbgw_gsn::accessPtNameNI) )
ALORS
  trace("erreur champ accessPtNameNI absent")
  ERREUR_840008398 = ERR_SEM_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8700, 2, g_iartin, "", 2, code_rejet_840008398, "accessPtNameNI", 0)
  SAUT  STOCKE_ERRONE
FINSI

SI ( !i_valid_field_n(g_iartin, $Tbgw_gsn::accessPtNameOI) && recordtype_840008398 == SGSN_840008398 )
ALORS
  trace("erreur champ accessPtNameOI absent")
  ERREUR_840008398 = ERR_SEM_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8700, 2, g_iartin, "", 2, code_rejet_840008398, "accessPtNameOI", 0)
  SAUT  STOCKE_ERRONE
FINSI

#####################################################################
# Filtrage des GPRS de volume nul (si filtrage active)
#####################################################################

date_art_840008398 = i_get_art_field(g_iartin,$Tbgw_gsn::recOpenTime)

#QC1249, 1250, 1276
b_ACTIV_TrouNoir_840008398 = -1

SI (recordtype_840008398 == GGSN_840008398)
ALORS
  i_strcpy(pt_buffer_840008398,"")
  i_strcpy(pt_buffer_840008398, i_get_tab_field("VariableContexte", date_art_840008398, "FILT_GGSN_NUL"))
  SI (i_strcmp(pt_buffer_840008398, g_inull) == 0)
  ALORS
    SAUT FIN_FILTRE_VOLNUL
  SINON
    SI (i_strcmp(pt_buffer_840008398, "1") == 0)
    ALORS
      b_ACTIV_TrouNoir_840008398 = 1
    SINON
      SI (i_strcmp(pt_buffer_840008398, "0") == 0)
      ALORS
        b_ACTIV_TrouNoir_840008398 = 0
      SINON
        SAUT FIN_FILTRE_VOLNUL
      FINSI
    FINSI
  FINSI
FINSI

SI (recordtype_840008398 == SGSN_840008398)
ALORS
  i_strcpy(pt_buffer_840008398,"")
  i_strcpy(pt_buffer_840008398, i_get_tab_field("VariableContexte", date_art_840008398, "FILT_SGSN_NUL"))
  SI (i_strcmp(pt_buffer_840008398, g_inull) == 0)
  ALORS
    SAUT FIN_FILTRE_VOLNUL
  SINON
    SI (i_strcmp(pt_buffer_840008398, "1") == 0)
    ALORS
      b_ACTIV_TrouNoir_840008398 = 1
    SINON
      SI (i_strcmp(pt_buffer_840008398, "0") == 0)
      ALORS
        b_ACTIV_TrouNoir_840008398 = 0
      SINON
        SAUT FIN_FILTRE_VOLNUL
      FINSI
    FINSI
  FINSI
FINSI

SI (SomVolDo_840008398 == 0 && SomVolUp_840008398 == 0 && b_ACTIV_TrouNoir_840008398 != -1)
ALORS
  SI (b_ACTIV_TrouNoir_840008398 == 1)
  ALORS
    trace("Tbgw_gsn_Tr : la somme des volume UP et Down est Null et b_ACTIV_TrouNoir  vers elimines TROU NOIR")
    # Incremenation des compteurs (1534 et 1535) pour les CRA elimines non stockes
    #X = g_ieec
    #Y = 0
    #Z = 0
    #CPT_1534=1534
    #CPT_1535=1535
    erreur_840008398=i_incr_cpt(CPT_1534_840008398, g_ieec, 0, 0, date_art_840008398, INCREMENT_840008398)
    erreur_840008398=i_incr_cpt(CPT_1535_840008398, g_ieec, 0, 0, i_DHgetLocalTime(4, 7, i_cur_time()), INCREMENT_840008398)
    RETOUR TRAIT_OK

  SINON
    trace("Tbgw_gsn_tr : la somme des volume UP et Down est Null vers elimines DIVERS")
    SAUT STOCKE_ELIMINE_DIVERS
  FINSI
FINSI

POINT FIN_FILTRE_VOLNUL
#/QC1249 et 1250 1276

###########################################################################
# 3.2.3.3 Elimination des CRAs anciennement filtres par la Billing Gateway
# vers elimines divers
###########################################################################
chargingCharac_840008398 = i_get_art_field(g_iartin, $Tbgw_gsn::chargingCharac)
SI ( i_valid_field_n(g_iartin, $Tbgw_gsn::accessPtNameNI) )
ALORS
  ptr_accPtName_840008398 = i_get_art_fieldptr(g_iartin, $Tbgw_gsn::accessPtNameNI)
  i_get_sub_str(ptr_accPtName_840008398, 0, i_get_art_field(g_iartin, $Tbgw_gsn::accessPtNameNI-1)-1, str_accPtName_840008398)
  erreur_840008398 = i_format_str2(pt_buffer_840008398, "%s%s", "GSN_APN_Prepaid_", str_accPtName_840008398)

  erreur_840008398=i_EntierToString(chargingCharac_840008398, pt_chgChar_840008398, 4)
  erreur_840008398 = i_format_str2(pt_val_chgChar_840008398, "%s%s", "GSN_chgCharNotBGw_", pt_chgChar_840008398)
  trace2("# accPtName - pt_chgChar : <%s> - <%s>", pt_buffer_840008398, pt_val_chgChar_840008398)
# on cherche si APN et chargingCharectiric sont dans la table VariableContexte
# si elle sont presentes dans la table, ?a veut dire qu il faut filtrer ces CRAs

# filtrage CDRs Data et Content Billing
  SI ( (recordtype_840008398 == GGSN_840008398 || recordtype_840008398 == SGSN_840008398)
    &&  i_get_tab_field("VariableContexte", date_art_840008398, pt_val_chgChar_840008398) != g_inull
    &&  i_get_tab_field("VariableContexte", date_art_840008398, pt_buffer_840008398) != g_inull  )
  ALORS
    trace("Tbgw_gsn : CRA Data et Content Billing mis en elimine")
    SAUT STOCKE_ELIMINE_DIVERS
  FINSI
FINSI

# filtrage CDRs speciaux
SI ( (i_get_art_field(g_iartin, $Tbgw_gsn::cause) == 4)
  && (i_get_art_field(g_iartin,$Tbgw_gsn::seqNum) == 0x7FFFFFFF)
  && (SomVolUp_840008398==0) && (SomVolDo_840008398==0)
  && (i_get_art_field(g_iartin, $Tbgw_gsn::duration) == 0) )
ALORS
  #QC1249 et 1250
  SI (b_ACTIV_TrouNoir_840008398)
  ALORS
    trace("Tbgw_gsn_Tr : CRA special, la somme des volume UP et Down est Null et b_ACTIV_TrouNoir  vers elimines TROU NOIR")
    # Incremenation des compteurs (1534 et 1535) pour les CRA elimines non stockes
    #X = g_ieec
    #Y = 0
    #Z = 0
    #CPT_1534=1534
    #CPT_1535=1535
    erreur_840008398=i_incr_cpt(CPT_1534_840008398, g_ieec, 0, 0, date_art_840008398, INCREMENT_840008398)
    erreur_840008398=i_incr_cpt(CPT_1535_840008398, g_ieec, 0, 0, i_DHgetLocalTime(4, 7, i_cur_time()), INCREMENT_840008398)
    RETOUR TRAIT_OK

  SINON
    trace("Tbgw_gsn_tr : CRA special, la somme des volume UP et Down est Null vers elimines DIVERS")
    SAUT STOCKE_ELIMINE_DIVERS
  FINSI
FINSI

#QC1260 controle presence du champ ratType
SI (i_valid_field_n(g_iartin,$Tbgw_gsn::ratType))
ALORS
  PresenceRatType_840008398 = 1
  rattype_840008398 = i_get_art_field(g_iartin, $Tbgw_gsn::ratType)
#G3R10
  SI (rattype_840008398 == 0x04)
  ALORS
    SAUT STOCKE_ELIMINE_DIVERS
  FINSI
FINSI
#/G3R10

## filtrage CDRs initiaux dans les elimines
# G3R4  Prise en compte des CRA GGSN avec RecordSequenceNumber =1
i_strcpy(pt_buffer_840008398, "")
erreur_840008398 = i_format_str2(pt_buffer_840008398, "%s%s", "Filtre_GGSN_", i_LireEECSGTQS(g_ieec))
SI ( i_get_art_field(g_iartin,$Tbgw_gsn::seqNum) == 1 && recordtype_840008398 == GGSN_840008398 && i_get_tab_field("VariableContexte", date_art_840008398, pt_buffer_840008398) == g_inull  )
ALORS
  trace("Tbgw_gsn : CRA initial mis en elimine")
  SAUT STOCKE_ELM
FINSI
#/G3R4

#############################################################################
#     test de semantique de recordType
##################################################################################
SI (recordtype_840008398 != SGSN_840008398  && recordtype_840008398 != GGSN_840008398)
ALORS
  trace("erreur semantique champ recordType different de 18 et de 19")
  ERREUR_840008398 = ERR_SEM_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398 = i_PlvMessEmettre(8701, 2, g_iartin, "", 3, code_rejet_840008398, "recordType",recordtype_840008398)
  SAUT  STOCKE_ERRONE
FINSI

#############################################################################
#  G3R10 : test semantique de systemType supprime
##################################################################################


#############################################################################
#     test de semantique de defTransHand si champ present
##################################################################################
val_champ_840008398 = i_get_art_field(g_iartin, $Tbgw_gsn::defTransHand)
SI ( (i_valid_field_n(g_iartin,$Tbgw_gsn::defTransHand)) && ( val_champ_840008398 != 0 ) && ( val_champ_840008398 != 1 ))
ALORS
  trace("erreur semantique champ defTransHand different de 0x01 et de 0x00")
  ERREUR_840008398 = ERR_SEM_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8701, 2, g_iartin, "", 3, code_rejet_840008398, "defTransHand",val_champ_840008398)
  SAUT  STOCKE_ERRONE
FINSI

#############################################################################
#     test de semantique de levelOfCAMServ si champ present
##################################################################################
val_champ_840008398 = i_get_art_field(g_iartin, $Tbgw_gsn::levelOfCAMServ)
SI ( (i_valid_field_n(g_iartin,$Tbgw_gsn::levelOfCAMServ)) && ( val_champ_840008398 != 0 ) && ( val_champ_840008398 != 1 ) && ( val_champ_840008398 != 2 ))
ALORS
  trace("erreur semantique champ levelOfCAMServ different de 0x00, 0x01 et 0x02")
  ERREUR_840008398 = ERR_SEM_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8701, 2, g_iartin, "", 3, code_rejet_840008398, "levelOfCAMServ",val_champ_840008398)
  SAUT  STOCKE_ERRONE
FINSI

#############################################################################
#     test de semantique de ratType si champ present
##################################################################################
#G3R10  : rattype != 4 deja elimine plus haut
#QC1260 controle presence de ratType avant le controle
SI (PresenceRatType_840008398 == 1)
ALORS
  SI (
    (recordtype_840008398 == SGSN_840008398 && rattype_840008398 != 1 && rattype_840008398 != 2) ||
    (recordtype_840008398 == GGSN_840008398 && rattype_840008398 != 1 && rattype_840008398 != 2 && rattype_840008398 != 3 && rattype_840008398 != 5)
    )
  ALORS
    trace("erreur semantique champ ratType present mais different pour SGSN de 0x01, 0x02, 0x04 et pour GGSN de 0x01, 0x02, 0x03, 0x04, 0x05")
    ERREUR_840008398 = ERR_SEM_840008398
    code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
    erreur_840008398=i_PlvMessEmettre(8701, 2, g_iartin, "", 3, code_rejet_840008398, "ratType",rattype_840008398)
    SAUT  STOCKE_ERRONE
  FINSI
FINSI

#############################################
#G3R10 lot3 valorisation du booleen UMTS
#############################################
SI (rattype_840008398 == 1 || rattype_840008398 == 5)
ALORS
  UMTS_840008398 = 1
FINSI

#/G3R10
#############################################
#G3R9 lot1 valorisation du booleen WLAN
#############################################
#  recordtype == 19 => GGSN
SI (recordtype_840008398 == GGSN_840008398 && rattype_840008398 == 3)
ALORS
  WLAN_840008398 = 1
FINSI

###################################################################################
# Test de la validite des champs recOpenTime,qoSChgTime,qoSI1chgTime,qoSI2chgTime,qoSI3chgTime
###################################################################################

# Test de la validite du champ recOpenTime --format = aaaammjjhhmmss
#
# format a verifie ds pcode != format ds convertisseur --> m a j de convertisseur
erreur_840008398 = i_get_art_field(g_iartin, $Tbgw_gsn::recOpenTime)
SI (erreur_840008398 == -1)
ALORS
  trace("Tbgw_gsn : Le champ recOpenTime n'a pas un bon format => ERRONE")
  ERREUR_840008398 = ERR_SYNTAX_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8702, 2, g_iartin, "", 3, code_rejet_840008398, "recOpenTime","AAMMJJhhmmss en DCB")
  SAUT STOCKE_ERRONE
FINSI

# Test de la validite du champ qoSI1chgTime --format = aaaammjjhhmmss
#
# format a verifie ds pcode != format ds convertisseur --> m a j de convertisseur
chgTime_present_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::qoSI1ChgTime)
SI (chgTime_present_840008398)
ALORS
  erreur_840008398 = i_get_art_field(g_iartin, $Tbgw_gsn::qoSI1ChgTime)
  SI (erreur_840008398 == -1)
  ALORS
    trace("Tbgw_gsn : Le champ qoSI1chgTime n'a pas un bon format => ERRONE")
    ERREUR_840008398 = ERR_SYNTAX_840008398
    code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
    erreur_840008398=i_PlvMessEmettre(8702, 2, g_iartin, "", 3, code_rejet_840008398, "qoSI1ChgTime","AAMMJJhhmmss en DCB")
    SAUT STOCKE_ERRONE
  FINSI
FINSI

# Test de la validite du champ qoSI2chgTime --format = aaaammjjhhmmss
#
# format a verifie ds pcode != format ds convertisseur --> m a j de convertisseur
chgTime_present_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::qoSI2ChgTime)
SI (chgTime_present_840008398)
ALORS
  erreur_840008398 = i_get_art_field(g_iartin, $Tbgw_gsn::qoSI2ChgTime)
  SI (erreur_840008398 == -1)
  ALORS
    trace("Tbgw_gsn : Le champ qoSI2chgTime n'a pas un bon format => ERRONE")
    ERREUR_840008398 = ERR_SYNTAX_840008398
    code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
    erreur_840008398=i_PlvMessEmettre(8702, 2, g_iartin, "", 3, code_rejet_840008398, "qoSI2ChgTime","AAMMJJhhmmss en DCB")
    SAUT STOCKE_ERRONE
  FINSI
FINSI

# Test de la validite du champ qoSI3chgTime --format =aaaammjjhhmmss
#
# format a verifie ds pcode != format ds convertisseur --> m a j de convertisseur
chgTime_present_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::qoSI3ChgTime)
SI (chgTime_present_840008398)
ALORS
  erreur_840008398 = i_get_art_field(g_iartin, $Tbgw_gsn::qoSI3ChgTime)
  SI (erreur_840008398 == -1)
  ALORS
    trace("Tbgw_gsn : Le champ qoSI3chgTime n'a pas un bon format => ERRONE")
    ERREUR_840008398 = ERR_SYNTAX_840008398
    code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
    erreur_840008398=i_PlvMessEmettre(8702, 2, g_iartin, "", 3, code_rejet_840008398, "qoSI3ChgTime","AAMMJJhhmmss en DCB")
    SAUT STOCKE_ERRONE
  FINSI
FINSI

#####################################################################
# Controle syntaxique de l'article
#####################################################################
#
#=====  Test automatique du CRA  ========
#
erreur_840008398 = i_test_art(g_iartin)
SI (erreur_840008398)
ALORS
  trace("Test automatique: article errone")
  ERREUR_840008398 = ERR_SYNTAX_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8703, 2, g_iartin, "", 1, code_rejet_840008398, 0,0)
  SAUT STOCKE_ERRONE
FINSI

#==========test de servedMSISDN========================
valid_chp_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::servedMSISDN)
SI ( valid_chp_840008398 )
ALORS
  erreur_840008398 = i_test_field_ila_off_n(g_iartin,$Tbgw_gsn::servedMSISDN, "Lrnis", 1)
  SI (erreur_840008398)
  ALORS
    trace("Tbgw_gsn : Le champ servedMSISDN presente une syntaxe errone")
    ERREUR_840008398 = ERR_SYNTAX_840008398
    code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
    erreur_840008398=i_PlvMessEmettre(8702, 2, g_iartin, "", 3, code_rejet_840008398,"servedMSISDN", "RNIS")
    SAUT STOCKE_ERRONE
  FINSI
FINSI

#==========test de servedIMSI========================
erreur_840008398 = i_test_field_ila_off_n(g_iartin,$Tbgw_gsn::servedIMSI, "Lrnis", 1)
SI (erreur_840008398)
ALORS
  trace("Tbgw_gsn : Le champ servedIMSI presente une syntaxe errone")
  ERREUR_840008398 = ERR_SYNTAX_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8702, 2, g_iartin, "", 3, code_rejet_840008398,"servedIMSI", "RNIS")
  SAUT STOCKE_ERRONE
FINSI

###
##  ce tests ne peut pas etre fait ici (mais dnas le pcode de distri) car ici on n'a pas encore construit le cellIdFor1st
###
#===========test de cellIdFor1st==========================

#####################################################################
# Controle croises entre champs connus de l'article
#####################################################################

#=========test de presence de l'un de ces tags T4t11.1 et T4t11.2  en exclusion mutuelle
present1_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::servediPBinV4Ad-2)
present2_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::servediPBinV6Ad-2)

SI (present1_840008398 && present2_840008398 )
ALORS
  trace("Tbgw_gsn : presence de T4t11.1 et T4t11.2 -->errone")
  ERREUR_840008398 = ERR_CROISE_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8704, 2, g_iartin, "", 3, code_rejet_840008398,"servediPBinV4Ad", "servediPBinV6Ad")
  SAUT STOCKE_ERRONE
FINSI

#=========test de presence de l'un de ces tags T4t11.3 et T4t11.4 en exclusion mutuelle
present1_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::servediPTexV4Ad-2)
present2_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::servediPTexV6Ad-2)
SI (present1_840008398 && present2_840008398)
ALORS
  trace("Tbgw_gsn : presence de T4t11.3 et T4t11.4 -->errone")
  ERREUR_840008398 = ERR_CROISE_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8704, 2, g_iartin, "", 3, code_rejet_840008398,"servediPTexV4Ad", "servediPTexV6Ad")
  SAUT STOCKE_ERRONE
FINSI


#G3R10 Suppression du test : test de presence de l'un de ces tags T3t18 et T3t19 en exclusion mutuelle

#G3R10 Suppression du test : test de presence de l'un de ces tags T3t22 et T3t23 en exclusion mutuelle

#G3R10 Suppression du test : test de presence de l'un de ces tags T3t26 et T3t27 en exclusion mutuelle


#=====test de presence de l'un de ces deus tags T4t32.1 et T4t32.2 en exclusion mutuelle
present1_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::ggsniPBinV4Ad-2)
present2_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::ggsniPBinV6Ad-2)
SI (present1_840008398 && present2_840008398)
ALORS
  trace("Tbgw_gsn : presence de T4t32.1 et T4t32.2 -->errone")
  ERREUR_840008398 = ERR_CROISE_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8704, 2, g_iartin, "", 3, code_rejet_840008398, "ggsniPBinV4Ad" ,"ggsniPBinV6Ad")
  SAUT STOCKE_ERRONE
FINSI

#====test de presence de l'un de ces deus tags T4t32.3 et T4t32.4 en exclusion mutuelle
present1_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::ggsniPTextV4Ad-2)
present2_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::ggsniPTextV6Ad-2)
SI (present1_840008398 && present2_840008398)
ALORS
  trace("Tbgw_gsn : presence de T4t32.3 et T4t32.4 -->errone")
  ERREUR_840008398 = ERR_CROISE_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8704, 2, g_iartin, "", 3, code_rejet_840008398, "ggsniPTextV4Ad" ,"ggsniPTextV6Ad")
  SAUT STOCKE_ERRONE
FINSI

#=====test de presence de l'un de ces deus tags T4t34.1 et T4t34.2 en exclusion mutuelle
present1_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::sgsn1iPBinV4Ad-2)
present2_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::sgsn1iPBinV6Ad-2)
SI ((present1_840008398) && (present2_840008398))
ALORS
  trace("Tbgw_gsn : presence de T4t34.1 et T4t34.2 -->errone")
  ERREUR_840008398 = ERR_CROISE_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8704, 2, g_iartin, "", 3, code_rejet_840008398, "sgsn1iPBinV4Ad" ,"sgsn1iPBinV6Ad")
  SAUT STOCKE_ERRONE
FINSI

#=====test de presence de l'un de ces deus tags T4t34.3 et T4t34.4 en exclusion mutuelle
present1_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::sgsn1iPTextV4Ad-2)
present2_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::sgsn1iPTextV6Ad-2)
SI (present1_840008398 && present2_840008398)
ALORS
  trace("Tbgw_gsn : presence de T4t34.3 et T4t34.4-->errone")
  ERREUR_840008398 = ERR_CROISE_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8704, 2, g_iartin, "", 3, code_rejet_840008398, "sgsn1iPTextV4Ad" ,"sgsn1iPTextV6Ad")
  SAUT STOCKE_ERRONE
FINSI

#=====test de presence de l'un de ces deus tags T4t36.1 et T4t36.2 en exclusion mutuelle

present1_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::sgsn2iPBinV4Ad-2)
present2_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::sgsn2iPBinV6Ad-2)

SI (present1_840008398 && present2_840008398)
ALORS
  trace("Tbgw_gsn : presence de T4t36.1 et T4t36.2 -->errone")
  ERREUR_840008398 = ERR_CROISE_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8704, 2, g_iartin, "", 3, code_rejet_840008398, "sgsn2iPBinV4Ad" ,"sgsn2iPBinV6Ad")
  SAUT STOCKE_ERRONE
FINSI

#====test de presence de l'un de ces deus tags T4t37.1 et T4t37.2  en exclusion mutuelle
present1_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::sgsn2iPTextV4Ad-2)
present2_840008398 = i_valid_field_n(g_iartin, $Tbgw_gsn::sgsn2iPTextV6Ad-2)
SI (present1_840008398 && present2_840008398)
ALORS
  trace("Tbgw_gsn : presence de T4t36.3 et T4t36.4 -->errone")
  ERREUR_840008398 = ERR_CROISE_840008398
  code_rejet_840008398 = MODULE_840008398 + ERREUR_840008398 + EFFICACE_840008398
  erreur_840008398=i_PlvMessEmettre(8704, 2, g_iartin, "", 3, code_rejet_840008398, "sgsn2iPTextV4Ad" ,"sgsn2iPTextV6Ad")
  SAUT STOCKE_ERRONE
FINSI
#=====  FIN tests syntaxique ==========================================

###############################
# increment du compteur
###############################
Y_840008398 = g_ieec
X_840008398 = 0x90
Z_840008398=0
date_840008398 = i_DHgetLocalTime(4, 7, i_date_audit())
erreur_840008398=i_incr_cpt(CPT_840008398,X_840008398,Y_840008398,Z_840008398,date_840008398,INCREMENT_840008398)

# Incremenation du compteur 3G pour les CRA ayant un recordType = 18(0x12) et systemType = 01(0x01)
SI ( (recordtype_840008398 == SGSN_840008398 && rattype_840008398== 1) || (recordtype_840008398 == GGSN_840008398 && UMTS_840008398 && !WLAN_840008398) )
ALORS
  erreur_840008398=i_incr_cpt(CPT_3G_840008398,X_840008398,Y_840008398,Z_840008398,date_840008398,INCREMENT_840008398)
FINSI

#G3R9 lot1 Incremenation du compteur 3G pour les CRA ayant  WLAN = 1
SI (WLAN_840008398)
ALORS
  erreur_840008398=i_incr_cpt(CPT_3G_840008398,X_840008398,Y_840008398,Z_840008398,date_840008398,INCREMENT_840008398)
FINSI

trace("[Trait] Tbgw_gsn : Fin traitement OK ")
erreur_840008398 = i_stocke_art(g_iartin, 0, PT_OK, 0)
RETOUR TRAIT_OK


POINT STOCKE_ERRONE

erreur_840008398 = i_make_art_rej(g_iartin, g_iartout, code_rejet_840008398)
erreur_840008398 = i_stocke_art(g_iartout,0,PT_ERRONE,0)
trace("[Trait] Tbgw_gsn : Article ERRONE  => Fin de traitement")
RETOUR TRAIT_OK

POINT STOCKE_ELM

erreur_840008398 = i_stocke_art(g_iartin,0,PT_ELIMINE,0)
trace("[Trait] Tbgw_gsn : Article ELIMINE  => Fin de traitement")
RETOUR TRAIT_OK

POINT STOCKE_ELIMINE_DIVERS

erreur_840008398 = i_stocke_art(g_iartin,0,PT_DIVERS,0)
trace("[Trait] Tbgw_gsn : Article ELIMINE  => Fin de traitement")
RETOUR TRAIT_OK
#------------------ Fin Tbgw_gsn_trt.src ------------------------------------------
