DEFINITION FAUX_660004606 0
DEFINITION VRAI_660004606 1
DEFINITION NUMTAB_660004606 4
DEFINITION TRAI_OK_660004606 0
DEFINITION TRAI_KO_660004606 -1
DEFINITION TRAI_REDISTRIBUTION_660004606 -2
DEFINITION Multidistribution_Non_660004606 0
DEFINITION Multidistribution_Oui_660004606 1
DEFINITION DISTRIBUTION_SPECIALE_660004606 0
DEFINITION DISTRIBUTION_INCONNU_660004606 1
DEFINITION DISTRIBUTION_AIG_IMSI_660004606 2
DEFINITION C_Article_660004606 "Tcb"
DEFINITION C_Tdpv_660004606 "Tdpvgsm"
REGISTRE ENTIER critere_660004606
REGISTRE ENTIER multi_dest_660004606
REGISTRE ENTIER incrementation1502_660004606
REGISTRE ENTIER recordtype_660004606
REGISTRE ENTIER ratingflag_660004606
REGISTRE ENTIER efficiency_660004606
REGISTRE ENTIER duree_660004606
REGISTRE ENTIER teleservice_660004606
REGISTRE ENTIER mobilecoverage_660004606
REGISTRE ENTIER termination_660004606
REGISTRE ENTIER euros_660004606
REGISTRE ENTIER chgchar_660004606
REGISTRE ENTIER chargingid_660004606
REGISTRE ENTIER EEC_audit_660004606
REGISTRE ENTIER bloc_audit_660004606
REGISTRE ENTIER DC_audit_660004606
REGISTRE ENTIER comid_num_660004606
REGISTRE ENTIER identifiant_660004606
REGISTRE ENTIER num_occ_660004606
REGISTRE ENTIER nb_passage_660004606
REGISTRE ENTIER nb_UT_660004606
REGISTRE ENTIER erreur_660004606
REGISTRE ENTIER ICAR_ABS_660004606
REGISTRE ENTIER date_audit_660004606
REGISTRE ENTIER date_fin_660004606
REGISTRE ENTIER date_audit_gmt_660004606
REGISTRE ENTIER date_dc_gmt_660004606
REGISTRE ENTIER code_errone_660004606
REGISTRE ENTIER EFFICACE_660004606
REGISTRE ENTIER res_660004606
REGISTRE ENTIER longueur_660004606
REGISTRE ENTIER taille_660004606
REGISTRE ENTIER index_660004606
REGISTRE ENTIER index2_660004606
REGISTRE ENTIER car_660004606
REGISTRE ENTIER flag_660004606
REGISTRE ENTIER dcOK_660004606
REGISTRE ENTIER flag_rdt_660004606
REGISTRE ENTIER SMS_long_660004606
REGISTRE ENTIER trvolume_660004606
REGISTRE ENTIER Nbtotal_660004606
REGISTRE ENTIER XMS_multi_660004606
REGISTRE ENTIER recipientnb_660004606
REGISTRE ENTIER Indice_I_660004606
REGISTRE ENTIER Indice_J_660004606
REGISTRE ENTIER Increment_660004606
REGISTRE ENTIER L_NDR_660004606
REGISTRE ENTIER TransactionTy2_660004606
REGISTRE ENTIER trvolumeMoReste_660004606
REGISTRE ENTIER trvolumeMo_660004606
REGISTRE ENTIER GPRS_grosvolume_660004606
REGISTRE ENTIER Nb_cras_decoupes_660004606
REGISTRE ENTIER Indice_grosvolume_660004606
REGISTRE ENTIER Volume_restantMo_660004606
REGISTRE ENTIER Vol_Max_GPRS_660004606
REGISTRE ENTIER capacite_660004606
REGISTRE ENTIER b_roaming_90_660004606
REGISTRE ENTIER b_roaming_80_660004606
REGISTRE POINTEUR pt_PLMNid_660004606
REGISTRE POINTEUR pt_Visitednetwork_660004606
REGISTRE POINTEUR pt_MCCMNC_660004606
REGISTRE POINTEUR pt_TADIG_660004606
REGISTRE POINTEUR pt_LAC_660004606
REGISTRE POINTEUR pt_CI_RAC_SAC_660004606
REGISTRE POINTEUR pt_3G_660004606
REGISTRE POINTEUR pt_4G_ECI_660004606
REGISTRE POINTEUR pt_UsrChannelID_660004606
REGISTRE POINTEUR pt_Local_660004606
REGISTRE POINTEUR pt_Local_DCB_660004606
REGISTRE POINTEUR ptr_Vol_Max_GPRS_660004606
REGISTRE POINTEUR pt_1_660004606
REGISTRE POINTEUR pt_2_660004606
REGISTRE POINTEUR pt_3_660004606
REGISTRE POINTEUR pt_deb_660004606
REGISTRE POINTEUR pt_marque_audit_660004606
REGISTRE POINTEUR pt_ServiceId_660004606
REGISTRE POINTEUR pt_ServiceId_DCB_660004606
REGISTRE POINTEUR pt_APN_660004606
REGISTRE POINTEUR pt_AX_IDEMET_660004606
REGISTRE POINTEUR pt_ratingflag_660004606
REGISTRE POINTEUR pt_cle_660004606
######################################################################
# DISTRIBUTION  Tcb_dist.src
# Article Tcb, chp ChargingType :
# "VO"  for voucher
# "SU"  for subscriber
# "RI"  for roaming in
# "RO"  for roaming out
# "RR"  for roaming out to be transmitted by SARAT
# "RT"  for roaming out to be filtered by SARAT
# "RIR"   for roaming in, from non TAP operator
# "RIT"   for roaming in, from TAP operator
#
######################################################################
# HISTORIQUE
# creation 28/02/2006
# 20/03/06 JLG compteur redistribution
# 21/03/06 JLG FO 144, 145, 146, 147, 151
# 30/03/06 JLG FO 144 1er octet 00, FO 150 variable multi_dest, FO 159
# 12/05/06 PSA Appel fonction i_incr_redist_dist pour compteur redistribution
# 24/08/06 JLG CcME lot2 (nouveaux recordtype 0x13 et 0x3C donc type 0x11 et 0x30)
# 31/08/06 JLG FO 269 Evolution : Modification du format du champ ServiceTy
# 01/09/06 JLG report FO CaME : 240, 242
# 04/09/06 JLG FO 240 complements
# 05/09/06 JLG FO 280
# 08/09/06 JLG FO 287
# 25/10/06 FO318 ICAR_ABS
# 29/11/06 FO364 parametre T3T13 present que pour RecorType = 0x13
# 26/12/06 G3R0CdME Spec Traitement S3F0 : ajout du T3t60
# 22/01/06 FO 412
# 09/02/07 Report CcME FO419 Conversion champ InterpServiceId en dcb sans mettre le premier octet a 00
# 05/03/07 FO 437 G3R0CdME : incrementation des compteurs 1502/1510 par 1er DC d'une multi-distribution
# 23/05/07 FO 516 Reprise de la correction BULL sur Prod
# 18/06/07 FO 516 Test fait en traitement
# 09/08/07 Creation enveloppe optionnelle E_Redist2
# 26/11/07 RHE G1R5: Distribution _Speciale pour les recordtype = 0x90 (filtre provisoire pour la G1R5 a retirer en G1R6)
# 04/12/07 PSA G1R6 : Modif critere distribution, mises au format V3t3, V4t20.1, T3t41
# 17/01/08 PSA G1R6 : FO 619 : mise au format V4t20.2
# 27/03/08 BEA G1R6 FO 666
# 09/04/08 PKH G1R6 lot4 TT 00089 Ecrasement V4t20.2 par 00
# 17/04/08 PKH G1R6 lot4 TT 00092 Correction du cadrage et bourrage sur les champs totVolOut et totVolIn du Tdpvgsm cas type= 0x90
# 23/10/08 PKH G2R1 lot1 Decoupage des CRAs DATA selon le volume
# 21/11/08 PKH G2R1 lot1 correction QC251
# 19/12/08 JLG G2R1 lot4 G2R1 lot4, ITEM : Optimisation des CRAs Level (Item Cras Level et cras stop Champ V3T3 local)
# 09/01/09 JLG QC295 (hors ITEM G2R1 lot4) : Type CB Message d'erreur quand champ UsrChannelID absent
# 02/03/09 PKH G2R1 lot4 QC343 Correction cas GROS VOLUME : V3t7 estalloc avec ICAR_ABS+ Indice_grosvolume-1
# 30/10/09 JLG QC490 G2R5 alarme 1444
# 17/05/10 JLG G3R1 item IPV6 : Modification des champs V3T20.7 et V3T20.8
# 14/09/10 JLG G3R1 lot4 item Differentiation idemet entre CB et CMM par la table VariableContexte
# 22/11/10 JLG G3R1lot4 Verification/Correction des variables (constantes, entiers, pointeurs)
# 22/07/11 JLG G3R4 lot2 item identification operateur roaming Code TADIG
# 26/08/11 PKH QC921 Correction alimentation du champ T3t51 du Tdpvgsm si Tcb::tadigCode est absent
# 26/08/11 PKH QC919 Correction intitule de l alarme 7518 interrogation de la table ext MCCMNC avec la cle
# 29/08/11 JLG QC920 Evolution spec :Modification des conditions de recherche en table MCCMNC_TADIG
# 12/09/11 JLG QC921, 929 : TCB pb d'alimentation de V3T51 avec la valeur de retour de la table MCCMNC_TADIG
# 29/02/2012 - JLG -G3R6 QC1005 modif alarme retour aiguillage
# 17/06/2013 - PKH - G3R10 lot3 LTE Evolution DCB
# 26/06/2013 - RHE - G3R10 lot3: LTE Evolution DCB - Compteur 4G (1533), alimentation T3t3 (local)
# 27/06/2013 - RHE - G3R10 QC1230: alimention T3t16
# 29/07/2013 - PKH - QC1253 Evol specif sur valorisation variable fonctionnelle trop restrictive pour recherche valeur LAC,CI,RAC et SAC(hors 4G)
# 02/08/2013 -PKH - QC1261 Correction valorisation champ dpvgsm V3t3 lorsque PLMNid <> 20801
# 19/08/13 JLG QC1253 incorrecte suite correction QC1261 => correction des deux QC
# 11/02/2014 - JLG -G5R1 QC1331, Built 3 : Changement Marque Audit
# 02/07/2014 - JLG -G5R1 QC1405, champ eec du DPV si g_ieec > 500
#####################################################################

# ftab_normal (table d'indices des automates) :











#FO318







#G2R1
#Trvolume en MegaOctets

#G3R4 lot2

#G3R10 lot3



####################

############################################################################
# Allocation memoire
############################################################################

# pt_1 : 256 octets
pt_1_660004606    = "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
pt_2_660004606    = "2222222222222222222222222222222222222222222222222222222222222222222222222"
pt_3_660004606    = "3333333333333333333333333333333333333333333333333333333333333333333333333"

pt_deb_660004606    = "5555555555555555555555555555555555555555555555555555555555555555555555555"
pt_marque_audit_660004606 = "6666666666666666666666666666666666666666666666"

pt_ServiceId_660004606 = "7777777777777777777777777777777777777777777777777777777777777777777777777"
pt_ServiceId_DCB_660004606 = "999999999999999999999999999999999999999999999999999999999999999999999999999999"
pt_APN_660004606 = "pt_APN888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
pt_AX_IDEMET_660004606 = "pt_AX_IDEMET11111111"
pt_ratingflag_660004606 ="pt_ratingflag"

#G3R4 lot2 TADIG
pt_PLMNid_660004606          = "pt_PLMNid_11111111111"
pt_Visitednetwork_660004606  = "pt_Visitednetwork_222"
pt_MCCMNC_660004606          = "pt_MCCMNC_33333333333"
pt_TADIG_660004606           = "pt_TADIG_444444444444"
pt_cle_660004606             = "pt_cle_15151515151515"
#G2R1
ptr_Vol_Max_GPRS_660004606  = "4444444444444444444444444444444444444444444444444444444444444444444"
i_strcpy(pt_ServiceId_660004606,"")
i_strcpy(pt_ServiceId_DCB_660004606,"")
i_strcpy (ptr_Vol_Max_GPRS_660004606,"")
i_strcpy(pt_deb_660004606,"")
i_strcpy(pt_marque_audit_660004606,"")
i_strcpy(pt_cle_660004606,"")

#G3R10lot3
pt_LAC_660004606 = "pt_3G_LAC987656786767667"
pt_CI_RAC_SAC_660004606 = "pt_3G_CI_RAC_SAC654784356"
pt_3G_660004606 = "pt_3G7654356778987643298765434356675312345"
pt_4G_ECI_660004606 = "pt_4G_ECI70453234654341098775654"
pt_UsrChannelID_660004606 = "pt_UsrChannelID987654345678912345567771115555551551111444444444444444"
pt_Local_660004606 = "pt_Local76543567789876432987654343566753"
pt_Local_DCB_660004606 = "pt_LocalDCB7654356778987643298765434356675376543567789876432987654343566753"
i_strcpy(pt_LAC_660004606,"")
i_strcpy(pt_CI_RAC_SAC_660004606,"")
i_strcpy(pt_3G_660004606,"")
i_strcpy(pt_4G_ECI_660004606,"")
i_strcpy(pt_UsrChannelID_660004606,"")
i_strcpy(pt_Local_660004606,"")
i_strcpy(pt_Local_DCB_660004606,"")

EFFICACE_660004606 = 2
SMS_long_660004606 = FAUX_660004606
L_NDR_660004606 = 0
incrementation1502_660004606 = FAUX_660004606
TransactionTy2_660004606 = FAUX_660004606
#G2R1
trvolumeMoReste_660004606=0
trvolumeMo_660004606=0
GPRS_grosvolume_660004606 = 0
Nb_cras_decoupes_660004606 = 0
Indice_grosvolume_660004606 = 0
Vol_Max_GPRS_660004606 = 0
capacite_660004606 = 0
trvolume_660004606 = 0
Volume_restantMo_660004606 = 0

trace("[Tcb_dis] =========== debut Pcode DISTRIBUTION  =============")
# erreur = i_fdump_art(g_iartin)


##################################################################################
# Identification de la provenance de l'article
# flag_rdt : nb de passage en redistribution (lecture de l'enveloppe obligatoire)
##################################################################################
flag_rdt_660004606 = -1
flag_rdt_660004606 = i_LireRedistCpt()

SI (flag_rdt_660004606 == 0)
ALORS
  erreur_660004606 = i_add_opt( "E_Redistri2" )
FINSI
erreur_660004606 = i_set_attr_val_n( $E_Redistri2::EnvoiRedis, 0)

########################################################
# Cpt applicatif CPT_RDT=1509 (REDISTRIBUTION)
########################################################
# FE_0028 comptabilisation des CRAs issus de la redistribution
date_fin_660004606=i_get_art_field(g_iartin,$Tcb::dfin)
erreur_660004606= i_incr_redist_dist_660004265(date_fin_660004606)


############################################################################
# Variables fonctionnelles
############################################################################

########### Creation article conversion Conv_URS (g_iartout9)
erreur_660004606 = i_cree_art("Conv_URS",g_iartout9)


########### Date_Audit
date_audit_gmt_660004606=i_date_audit()
date_audit_660004606 = i_DHgetLocalTime(NUMTAB_660004606, 7, date_audit_gmt_660004606)
trace1("[Tcb_dis]   date_audit=0x%x",date_audit_660004606)

########### chps obligatoires numeriques hexa
recordtype_660004606 = 0
recordtype_660004606 = i_get_art_field(g_iartin, $Tcb::RecordType)

ratingflag_660004606 = 0
i_strcpy(pt_ratingflag_660004606,"")
ratingflag_660004606 = i_get_art_field(g_iartin, $Tcb::ratingFlag)
erreur_660004606 = i_get_art_str(g_iartin, $Tcb::ratingFlag, pt_ratingflag_660004606)

mobilecoverage_660004606 = 0
mobilecoverage_660004606 = i_get_art_field(g_iartin, $Tcb::mobileCoverage)

termination_660004606 = 0
termination_660004606 = i_get_art_field(g_iartin, $Tcb::Termination)

#trace1("recordtype = 0x%x", recordtype)
#trace1("mobilecoverage = 0x%x", recordtype)

#G3R10 lot3
#Information de localisation hors 4G
#QC1253 Correction specif trop restrictive
SI ((recordtype_660004606 == 0x90 && mobilecoverage_660004606 != 0x06))
ALORS
  SI (i_valid_field_n(g_iartin, $Tcb::UsrChannelID))
  ALORS
    SI (i_get_art_field (g_iartin, $Tcb::UsrChannelID - 1) == 16)
    ALORS
      erreur_660004606 = i_get_art_str(g_iartin, $Tcb::UsrChannelID, pt_UsrChannelID_660004606)
      #trace2(">>>__LINE__>>>__FILE__>>> pt_UsrChannelID = <%s>",pt_UsrChannelID,"")
      SI  (i_strplcmp ( pt_UsrChannelID_660004606, "0000", 0, 4)== 0 && i_strplcmp ( pt_UsrChannelID_660004606, "0000", 8, 4)== 0)
      ALORS
        i_get_sub_str(pt_UsrChannelID_660004606, 4, 7, pt_LAC_660004606)
        i_get_sub_str(pt_UsrChannelID_660004606, 12, 15, pt_CI_RAC_SAC_660004606)
        #trace2(">>>__LINE__>>>__FILE__>>> pt_LAC = <%s>",pt_LAC,"")
        #trace2(">>>__LINE__>>>__FILE__>>> pt_CI_RAC_SAC = <%s>",pt_CI_RAC_SAC,"")
      FINSI
    FINSI
  FINSI
FINSI

#G3R10 lot3
#information de localisation 4G

SI (recordtype_660004606 == 0x90 && mobilecoverage_660004606 == 0x06)
ALORS
  SI (i_valid_field_n(g_iartin, $Tcb::UsrChannelID))
  ALORS
    SI (i_get_art_field (g_iartin, $Tcb::UsrChannelID - 1) == 16)
    ALORS
      erreur_660004606 = i_get_art_str(g_iartin, $Tcb::UsrChannelID, pt_UsrChannelID_660004606)
      #trace2(">>>__LINE__>>>__FILE__>>> pt_UsrChannelID = <%s>",pt_UsrChannelID,"")
      SI (i_strplcmp ( pt_UsrChannelID_660004606, "000000000", 0, 9)== 0)
      ALORS
        i_get_sub_str(pt_UsrChannelID_660004606, 9, 15, pt_4G_ECI_660004606)
        #trace2(">>>__LINE__>>>__FILE__>>> pt_4G_ECI = <%s>",pt_4G_ECI,"")
      FINSI
    FINSI
  FINSI
FINSI


########### ICAR_ABS
#FO318
date_dc_gmt_660004606 =i_get_art_field(g_iartin,$Tcb::DATE)
ICAR_ABS_660004606 = i_DHgetLocalTime(NUMTAB_660004606, 7, date_dc_gmt_660004606)
trace1("[Tcb_dis] ICAR_ABS = 0x%x",ICAR_ABS_660004606)

########### num_occ (position du destinataire traite)
# variable initialisee a 1
num_occ_660004606 = 1

########### nb_UT
nb_UT_660004606 = 0

########### Userlogin_name
SI recordtype_660004606 == 0x80
ALORS
  erreur_660004606 = i_set_art_field(g_iartout9, $Conv_URS::userlognameH, 0x00)
  i_strcpy(pt_1_660004606," ")
  erreur_660004606 = i_get_art_str(g_iartin, $Tcb::UserLogin, pt_1_660004606)
  #trace2("[Tcb_dis] valeur UserLogin : %s",pt_1,"")

  longueur_660004606=0
  longueur_660004606 = i_strlen(pt_1_660004606) - 1
  index_660004606 = 0
  POINT BOUCLE4
  SI (index_660004606 >= longueur_660004606)
  ALORS
    trace("[Tcb_dis] ERREUR car @ non trouve dans UserLogin")
    code_errone_660004606 = 0xA070
    code_errone_660004606 = code_errone_660004606 + EFFICACE_660004606
    erreur_660004606 = i_PlvMessEmettre(6455,2,g_iartin,"",3, code_errone_660004606, C_Article_660004606, recordtype_660004606)
    SAUT DISTRI_ERR
  FINSI
  i_strcpy(pt_2_660004606," ")
  i_get_sub_str(pt_1_660004606, index_660004606, index_660004606, pt_2_660004606)
  #trace2( "[Tcb_dis] valeur UserLogin : %s",pt_2,"")
  SI (i_strcmp("@", pt_2_660004606) != 0)
  ALORS
    index_660004606 = index_660004606 + 1
    SAUT BOUCLE4
  FINSI
  index_660004606 = index_660004606 - 1
  i_strcpy(pt_2_660004606," ")
  i_get_sub_str(pt_1_660004606, 0, index_660004606, pt_2_660004606)
  #trace2( " valeur Userlogin_name : %s",pt_2,"")
  erreur_660004606=i_set_art_str(g_iartout9, $Conv_URS::userlognameA, pt_2_660004606)
  taille_660004606 = 0
  taille_660004606 = (i_strlen(pt_2_660004606) + 1) * 8
  trace1("[Tcb_dis] taille de userlogname =%d",taille_660004606)
  erreur_660004606 = i_resize_tlv(g_iartout9, "T2_userlogname", "userlogname",taille_660004606)

  ########### Userlogin_realm
  index_660004606=index_660004606+1
  i_strcpy(pt_2_660004606," ")
  i_get_sub_str(pt_1_660004606, index_660004606, longueur_660004606, pt_2_660004606)
  #trace2( " valeur userlogin_realm : %s",pt_2,"")
  erreur_660004606=i_set_art_str(g_iartout9, $Conv_URS::userlogrealmA, pt_2_660004606)
  taille_660004606 = 0
  taille_660004606 = (i_strlen(pt_2_660004606))
  trace1("[Tcb_dis] taille de userlogrealmA =%d",taille_660004606)
  erreur_660004606 = i_resize_tlv(g_iartout9, "T2_userlogrealm", "userlogrealmA",taille_660004606)
SINON
  trace1("[Tcb_dis] pas de Userlogin_name ni de Userlogin_realm car recordtype != 0x80 mais = 0x%x",recordtype_660004606)
FINSI

#QC1331
########### identifiant = num audit
pt_marque_audit_660004606=i_LireMarqueAudit()
# Recuperation de l'horadatage

# Recuperation identifiant EEC (6eme octet) EEC
# Masquage des 6 bits de poids faible
EEC_audit_660004606 = i_strtab(pt_marque_audit_660004606, 12) & 0x3f
#trace1("[Tcb_dis] EEC_audit : %d", EEC_audit)

# Recuperation position du bloc dans le fichier(7 et 8eme octet)
# Masquage des 15 bits de poids faible
bloc_audit_660004606 =  ( ( i_strtab(pt_marque_audit_660004606, 15) * 256) + i_strtab(pt_marque_audit_660004606, 14) ) & 0x7fff
#trace1("[Tcb_dis] bloc_audit : %d", bloc_audit)

# Recuperation position du DC dans le bloc (11 et 12eme octet)
# Masquage des 10 bits de poids faible
DC_audit_660004606 = ( ( i_strtab(pt_marque_audit_660004606, 9) * 256 )+ i_strtab(pt_marque_audit_660004606, 8) ) & 0x3ff
#trace1("[Tcb_dis] DC_audit : %d", DC_audit)

# Calcul  identifiant audit de com
comid_num_660004606 = (EEC_audit_660004606 * 33554432) + (bloc_audit_660004606 * 1024) + DC_audit_660004606
#trace1("[Tcb_dis] comid_num : %d", comid_num)
identifiant_660004606 = comid_num_660004606



# G3R4 lot2, Variables fonctionnelles b_roaming_90, b_roaming_80, pt_PLMNid et pt_Visitednetwork
#QC920, 821, 929 : evolution spec
b_roaming_90_660004606 = 0
b_roaming_80_660004606 = 0

SI (recordtype_660004606 == 0x90)
ALORS
  i_strcpy(pt_PLMNid_660004606,"")
  erreur_660004606 = i_get_art_str(g_iartin, $Tcb::PLMNid, pt_PLMNid_660004606)
  SI (i_strlen(pt_PLMNid_660004606) > 6)
  ALORS
    i_get_sub_str (pt_PLMNid_660004606, 0, 5, pt_PLMNid_660004606)
  FINSI
  SI (i_strplcmp( pt_PLMNid_660004606, "208", 0, 3) !=0 && i_strcmp(pt_PLMNid_660004606, "") !=0)
  ALORS
    b_roaming_90_660004606 = 1
  FINSI
FINSI

SI (recordtype_660004606 == 0x80)
ALORS
  i_strcpy(pt_Visitednetwork_660004606,"")
  erreur_660004606 = i_get_art_str(g_iartin, $Tcb::VisitNetID, pt_Visitednetwork_660004606)
  SI (i_strlen(pt_Visitednetwork_660004606) > 6)
  ALORS
    i_get_sub_str (pt_Visitednetwork_660004606, 0, 5, pt_Visitednetwork_660004606)
  FINSI
  SI (i_strplcmp( pt_Visitednetwork_660004606, "208", 0, 3) !=0 && i_strcmp(pt_Visitednetwork_660004606, "") !=0)
  ALORS
    b_roaming_80_660004606 = 1
  FINSI
FINSI


SI (!i_valid_field_n(g_iartin, $Tcb::tadigCode) && (b_roaming_80_660004606 || b_roaming_90_660004606))
ALORS
  # G3R4 lot2, Variables fonctionnelles pt_TADIG et pt_MCCMNC
  i_strcpy(pt_TADIG_660004606,"")
  i_strcpy(pt_MCCMNC_660004606,"")

  SI b_roaming_90_660004606
  ALORS
    # recordtype est forcement == 0x90
    i_strcpy(pt_cle_660004606,pt_PLMNid_660004606)
    # pt_MCCMNC contiendra la valeur de retour TADIG_MCCMNC
    i_strcpy(pt_MCCMNC_660004606, i_get_tab_field("MCCMNC_TADIG", ICAR_ABS_660004606, pt_PLMNid_660004606))
  SINON
    #recordtype est forcement == 0x80
    i_strcpy(pt_cle_660004606,pt_Visitednetwork_660004606)
    # pt_MCCMNC contiendra la valeur de retour TADIG_MCCMNC
    i_strcpy(pt_MCCMNC_660004606, i_get_tab_field("MCCMNC_TADIG", ICAR_ABS_660004606, pt_Visitednetwork_660004606))
  FINSI
  # SI clef trouvee dans la table MCCMNC_TADIG
  SI (i_strcmp(pt_MCCMNC_660004606,"") != 0)
  ALORS
    # pt_MCCMNC contiend au depart l'ensemble TADIG_MCCMNC
    # pt_MCCMNC contiendra la partie MCCMNC et pt_TADIG la partie TADIG apres i_recupererValeur
    erreur_660004606 = i_recupererValeur(pt_MCCMNC_660004606,pt_TADIG_660004606,6,'-')
    SI (i_strcmp (pt_MCCMNC_660004606,g_inull) == 0)
    ALORS
      # si retour MCCMNC null (fictive) => cle (pt_PLMNid ou pt_Visitednetwork)
      i_strcpy(pt_MCCMNC_660004606, pt_cle_660004606)
    FINSI
  SINON
    # clef n'est pas trouvee dans la table MCCMNC_TADIG
    trace ("<<__LINE__>> ========= Erreur TADIG/MCCMNC envoie en errone ============")
    code_errone_660004606 = 0xA0A0
    code_errone_660004606 = code_errone_660004606 + EFFICACE_660004606
    #QC919
    erreur_660004606=i_PlvMessEmettre(7518, 2, g_iartin, "", 3, code_errone_660004606,"Tcb - MCCMNC_TADIG", pt_cle_660004606)
    SAUT DISTRI_ERR
  FINSI
FINSI
# \G3R4 lot2

########### Multi_destinataire : multi_dest (5 chps x 19 dest supp = 95 possibilites)
multi_dest_660004606 = Multidistribution_Non_660004606
nb_passage_660004606=1

########### determination si transactio type a 2
SI i_valid_field_n(g_iartin, $Tcb::TransactionTy)
ALORS
  erreur_660004606 = i_get_art_str(g_iartin, $Tcb::TransactionTy, pt_1_660004606)
  SI i_strcmp(pt_1_660004606, "2") == 0
  ALORS
    TransactionTy2_660004606 = VRAI_660004606
  FINSI
FINSI

POINT DEB_MDEST

SI recordtype_660004606 == 0x40
ALORS
  SI (i_valid_field_n(g_iartin, $Tcb::CalledMSISDN01+ (nb_passage_660004606*3) - 3))
  ALORS
    multi_dest_660004606 = Multidistribution_Oui_660004606
    SAUT FIN_MDEST
  SINON
    SI nb_passage_660004606<95
    ALORS
      nb_passage_660004606=nb_passage_660004606+1
      SAUT DEB_MDEST
    FINSI
  FINSI
FINSI


POINT FIN_MDEST
nb_passage_660004606=1
# SMS_long et Nbtotal
SMS_long_660004606 = FAUX_660004606
Nbtotal_660004606 = 1
trvolume_660004606 = 0
SI i_valid_field_n(g_iartin, $Tcb::TrVolume)
ALORS
  trvolume_660004606 = i_get_art_field(g_iartin, $Tcb::TrVolume)
FINSI

# G2R1
# en tenant compte de longueur max de TrVolumeT = 6 octets, trvolumeMo en MegaOctets
longueur_660004606 = g_iartin.TrVolumeT!NELEM

# definitions :  1 ko = 2 exp 10 octets =                0x400     =       1 024 octets
#                1 Mo = 2 exp 20 octets = (1024) exp 2 = 0x100000  =   1 048 576 octets
#              200 Mo =                                  0xC800000 = 209 715 200 octets

# 1 MegaOctet= 0x100000
SI longueur_660004606 == 6
ALORS
  # trvolumeMo : nb de MegaOctets, trvolumeMoReste : nb d'octets restant
  trvolumeMo_660004606 = g_iartin.TrVolumeT[0] * 0x100000 + g_iartin.TrVolumeT[1] * 0x1000 + g_iartin.TrVolumeT[2] * 0x10 + g_iartin.TrVolumeT[3] / 0x10
  trvolumeMoReste_660004606= (g_iartin.TrVolumeT[3] - (g_iartin.TrVolumeT[3] / 0x10) * 0x10) * 0x10000 + g_iartin.TrVolumeT[4] * 0x100 + g_iartin.TrVolumeT[5]
FINSI

SI longueur_660004606 == 5
ALORS
  # trvolumeMo : nb de MegaOctets, trvolumeMoReste : nb d'octets restant
  trvolumeMo_660004606 = g_iartin.TrVolumeT[0] * 0x1000 + g_iartin.TrVolumeT[1] * 0x10 + g_iartin.TrVolumeT[2] / 0x10
  trvolumeMoReste_660004606= (g_iartin.TrVolumeT[2] - (g_iartin.TrVolumeT[2] / 0x10) * 0x10) * 0x10000 + g_iartin.TrVolumeT[3] * 0x100 + g_iartin.TrVolumeT[4]
FINSI

SI longueur_660004606 == 4
ALORS
  # trvolumeMo : nb de MegaOctets, trvolumeMoReste : nb d'octets restant
  trvolumeMo_660004606 = g_iartin.TrVolumeT[0] * 0x10 + g_iartin.TrVolumeT[1] / 0x10
  trvolumeMoReste_660004606= (g_iartin.TrVolumeT[1] - (g_iartin.TrVolumeT[1] / 0x10) * 0x10) * 0x10000 + g_iartin.TrVolumeT[2] * 0x100 + g_iartin.TrVolumeT[3]
FINSI

SI longueur_660004606 < 4
ALORS
  # trvolumeMo : nb de MegaOctets, trvolumeMoReste : nb d'octets restant
  trvolumeMo_660004606 = trvolume_660004606 / 0x100000
  trvolumeMoReste_660004606 = trvolume_660004606 - (trvolumeMo_660004606 * 0x100000)
FINSI
# \G2R1

# longueur max de TrVolume reduite a 4 octets
SI recordtype_660004606 == 0x13
ALORS
  SI trvolume_660004606 > 0xA0
  ALORS
    SMS_long_660004606 = VRAI_660004606
    multi_dest_660004606 = Multidistribution_Oui_660004606
    SI (trvolume_660004606 % 0xA0 == 0)
    ALORS
      Nbtotal_660004606 = trvolume_660004606 / 0xA0
    SINON
      Nbtotal_660004606 = (trvolume_660004606 / 0xA0) + 1
    FINSI
  FINSI
FINSI


# XMS_multi
XMS_multi_660004606 = FAUX_660004606
recipientnb_660004606 = 1
SI i_valid_field_n(g_iartin, $Tcb::RecipientNb)
ALORS
  recipientnb_660004606 = i_get_art_field(g_iartin, $Tcb::RecipientNb)
FINSI

SI recordtype_660004606 == 0x13 || recordtype_660004606 == 0x3C
ALORS
  SI recipientnb_660004606 > 1
  ALORS
    XMS_multi_660004606 = VRAI_660004606
    multi_dest_660004606 = Multidistribution_Oui_660004606
  FINSI
FINSI


# Indice_I
Indice_I_660004606 = 0
SI i_valid_field_n(g_iartin, $Tcb::SMSNb)
ALORS
  Indice_I_660004606 = i_get_art_field(g_iartin, $Tcb::SMSNb)
FINSI

# Indice_J (initialisation)
Indice_J_660004606 = 0

# Increment calcule plus bas

#G2R1 lot1

# Vol_Max_GPRS (table externe) en MegaOctets et trvolumeMo en MegaOctets
# definitions :  1 ko = 2 exp 10 octets =                0x400     =       1 024 octets
#                1 Mo = 2 exp 20 octets = (1024) exp 2 = 0x100000  =   1 048 576 octets
#              200 Mo =                                  0xC800000 = 209 715 200 octets
SI (recordtype_660004606 == 0x90  && TransactionTy2_660004606 == FAUX_660004606)
ALORS
  i_strcpy(ptr_Vol_Max_GPRS_660004606, i_get_tab_field("VariableContexte", ICAR_ABS_660004606, "VOLUME_MAX_GPRS"))
  ##trace2("ptr_Vol_Max_GPRS=%s",ptr_Vol_Max_GPRS,"")
  Vol_Max_GPRS_660004606 = CONV_ASCIINUMDEC_INT_660004265(ptr_Vol_Max_GPRS_660004606)
  capacite_660004606 = 100 * Vol_Max_GPRS_660004606

  SI (capacite_660004606 > trvolumeMo_660004606)
  ALORS
    SI (trvolumeMo_660004606 >= Vol_Max_GPRS_660004606)
    ALORS
      GPRS_grosvolume_660004606 = VRAI_660004606
    FINSI
  SINON
    SI (capacite_660004606 == trvolumeMo_660004606 && trvolumeMoReste_660004606 == 0)
    ALORS
      GPRS_grosvolume_660004606 = VRAI_660004606
    FINSI
  FINSI
FINSI
#trace1("bidon   >>>__LINE__>>> GPRS_grosvolume = <%d>",GPRS_grosvolume)
#trace1("bidon   >>>__LINE__>>> trvolumeMo = <0x%x>",trvolumeMo)
#trace1("bidon   >>>__LINE__>>> capacite = <0x%x>",capacite)

# nombre de cra decoupes
SI GPRS_grosvolume_660004606
ALORS
  SI ((trvolumeMo_660004606 % Vol_Max_GPRS_660004606==0) && trvolumeMoReste_660004606 == 0)
  ALORS
    Nb_cras_decoupes_660004606 = trvolumeMo_660004606 / Vol_Max_GPRS_660004606
  SINON
    Nb_cras_decoupes_660004606 = (trvolumeMo_660004606 / Vol_Max_GPRS_660004606) + 1
  FINSI
FINSI
#\G2R1


############################################################################
# Duplication Tdpv33 (g_iartout)
############################################################################
#Duplication article d entree vers DPV TLV

SI (i_dup_art_tab( g_iartin, g_iartout, C_Tdpv_660004606))
ALORS
  trace("ERREUR de duplication")
  code_errone_660004606 = 0xA0D0
  code_errone_660004606 = code_errone_660004606 + EFFICACE_660004606
  erreur_660004606 = i_PlvMessEmettre(7502,2,g_iartin,"",2,code_errone_660004606, C_Article_660004606, 0)
  SAUT DISTRI_ERR
FINSI

#############################
# PORTABILITE
#############################
# realise para la fonction de distri



############################################################################
# Mises au format DPV33, FO 1582
############################################################################

dcOK_660004606 = FAUX_660004606

#T3t1
#V3t1.1 type           :D      :-      :1VAL :RecordType
SI recordtype_660004606 == 0x13
ALORS
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::type, 0x11)
FINSI
SI recordtype_660004606 == 0x3C
ALORS
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::type, 0x30)
FINSI

#V3t1.2 tentite        :-      :-      :MSET :0B:1

#V3t1.3 idemet         :-      :-      :MSET :FF
#  valeurs possibles : (retour table VariableContexte ou 33027000000FFFFFF ou 33028000000FFFFFF)

# G3R1 lot4
i_strcpy(pt_AX_IDEMET_660004606, "")
i_strcpy(pt_1_660004606, "AX_IDEMET_")
i_strcpy(pt_2_660004606, "")
i_strcpy(pt_3_660004606, "")
erreur_660004606 = i_format_str2( pt_2_660004606, "%s%s", pt_1_660004606, i_LireEECSGTQS(g_ieec))
erreur_660004606 = i_format_str2( pt_3_660004606, "%s%s", pt_2_660004606, pt_ratingflag_660004606)

i_strcpy(pt_AX_IDEMET_660004606, i_get_tab_field("VariableContexte", ICAR_ABS_660004606, pt_3_660004606))

SI (i_strcmp(pt_AX_IDEMET_660004606,g_inull)) != 0
ALORS
  longueur_660004606= 0
  longueur_660004606=i_strlen(pt_AX_IDEMET_660004606)
  taille_660004606=longueur_660004606*8
  erreur_660004606 = i_set_art_str(g_iartout9,$Conv_URS::recipAddAlp, pt_AX_IDEMET_660004606)
  index_660004606=0
  POINT BOUCLEidemet
  SI (index_660004606 < longueur_660004606)
  ALORS
    SI (g_iartout9.recipAddHex[index_660004606] < 0x3A)
    ALORS
      g_iartout.idemet[index_660004606]=g_iartout9.recipAddHex[index_660004606] - 0x30
    FINSI
    SI (g_iartout9.recipAddHex[index_660004606] > 0x40) && (g_iartout9.recipAddHex[index_660004606] < 0x47)
    ALORS
      g_iartout.idemet[index_660004606]=g_iartout9.recipAddHex[index_660004606] - 0x37
    FINSI
    SI (g_iartout9.recipAddHex[index_660004606] > 0x60) && (g_iartout9.recipAddHex[index_660004606] < 0x67)
    ALORS
      g_iartout.idemet[index_660004606]=g_iartout9.recipAddHex[index_660004606] - 0x57
    FINSI
    index_660004606=index_660004606+1
    SAUT BOUCLEidemet
  FINSI
SINON
  g_iartout.idemet[0]= 0x3
  g_iartout.idemet[1]= 0x3
  g_iartout.idemet[2]= 0x0
  g_iartout.idemet[3]= 0x2
  SI ratingflag_660004606==0
  ALORS
    g_iartout.idemet[4]= 0x7
  SINON
    g_iartout.idemet[4]= 0x8
  FINSI
  g_iartout.idemet[5]= 0x0
  g_iartout.idemet[6]= 0x0
  g_iartout.idemet[7]= 0x0
  g_iartout.idemet[8]= 0x0
  g_iartout.idemet[9]= 0x0
  g_iartout.idemet[10]= 0x0
FINSI

#V3t1.4 IMSI           :-      :-      :MSET :99:8
# valeurs possibles : (5555555555555555F ou 999999999999999F ou IMSI)

SI recordtype_660004606 == 0x80 && (! i_valid_field_n(g_iartin, $Tcb::IMSI))
ALORS
  i_strcpy(pt_1_660004606, "")
  erreur_660004606 = i_get_art_str(g_iartin, $Tcb::UserLogin, pt_1_660004606)
  i_get_sub_str(pt_1_660004606, 0, 0, pt_deb_660004606)
  SI (i_strcmp("D", pt_deb_660004606) == 0) || (i_strcmp("d", pt_deb_660004606) == 0)
  ALORS
    car_660004606=0x5
  SINON
    car_660004606=0x9
  FINSI
  longueur_660004606 = g_iartout.IMSI!NELEM - 1
  index_660004606 = 0
  POINT BOUCLE2
  SI index_660004606 < longueur_660004606
  ALORS
    g_iartout.IMSI[index_660004606]= car_660004606
    index_660004606 = index_660004606 + 1
    SAUT BOUCLE2
  FINSI
  g_iartout.IMSI[index_660004606]= 0xF
SINON
  erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::IMSI, $Tdpvgsm::IMSI)
FINSI

#V3t1.5 DATE           :-      :-      :1VAL :DATE
#erreur = i_set_art_field(g_iartout, $Tdpvgsm::DATE,ICAR_ABS+num_occ-1)
# Calculer et stocker plus bas

#V3t1.6 DUREE          :-      :-      :MSET :00
duree_660004606=0
SI recordtype_660004606 == 0x13 || recordtype_660004606 == 0x3C
ALORS
  SI SMS_long_660004606
  ALORS
    duree_660004606 = 0xA0
  SINON
    duree_660004606 = trvolume_660004606
  FINSI
SINON
  SI (i_valid_field_n(g_iartin, $Tcb::DUREE))
  ALORS
    duree_660004606 = i_get_art_field(g_iartin, $Tcb::DUREE)
  FINSI
FINSI
erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::DUREE,duree_660004606)

#V3t1.7 svcsup         :D      :-      :1VAL :bearerServ
#V3t1.8 tlserv         :-      :-      :MSET :FF:1
SI recordtype_660004606 == 0x90 || recordtype_660004606 == 0x00 || recordtype_660004606 == 0x13 || recordtype_660004606 == 0x3C
ALORS
  SI (i_valid_field_n(g_iartin, $Tcb::teleservice))
  ALORS
    teleservice_660004606 = i_get_art_field(g_iartin, $Tcb::teleservice)
    erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::tlserv,teleservice_660004606)
  FINSI
FINSI
SI recordtype_660004606 == 0x40
ALORS
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::tlserv,0x11)
FINSI

#V3t1.9 support1       :-      :-      :MSET :FF:1
SI recordtype_660004606 == 0x00
ALORS
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::support1,0x00)
FINSI

#V3t1.10 systype        :-      :-      :MSET :FF:1
SI mobilecoverage_660004606 != 0x03 && recordtype_660004606 != 0x13 && recordtype_660004606 != 0x3C
ALORS
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::systype,mobilecoverage_660004606)
FINSI

#V3t1.11 reserve2       :-      :-      :MSET :FF:1
#V3t1.12 origine        :-      :-      :MSET :FF:1
SI recordtype_660004606 == 0x40
ALORS
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::origine,0x00)
FINSI

#V3t1.13 indeff         :-      :-      :MSET :00:1
SI recordtype_660004606 == 0x90 || recordtype_660004606 == 0x00
ALORS
  efficiency_660004606 = i_get_art_field(g_iartin, $Tcb::Efficiency)
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::indeff,efficiency_660004606)
FINSI

#V3t1.14 tterm          :-      :-      :MSET :00:1
SI recordtype_660004606 != 0x40 && recordtype_660004606 != 0x13 && recordtype_660004606 != 0x3C
ALORS
  SI termination_660004606 == 0xFF
  ALORS
    erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::tterm,0xFF)
  SINON
    SI termination_660004606 != 0x64
    ALORS
      erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::tterm,0x10)
    FINSI
  FINSI
FINSI

#V3t1.15 indtax         :-      :-      :MSET :FF:1
#V3t1.16 nbUT           :-      :-      :MSET :FF:4
# Voir calcul plus bas necessite champ idpart renseigne dans g_iartout

#V3t1.17 chgcar         :-      :-      :MSET :FF:2
chgchar_660004606 = 0xffff
SI recordtype_660004606 == 0x90
ALORS
  SI (i_valid_field_n(g_iartin, $Tcb::ChgChar))
  ALORS
    chgchar_660004606 = i_get_art_field(g_iartin, $Tcb::ChgChar)
    erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::chgcar,chgchar_660004606)
  FINSI
FINSI
SI recordtype_660004606 == 0x80
ALORS
  SI (i_valid_field_n(g_iartin, $Tcb::ChargingType))
  ALORS
    erreur_660004606 = i_get_art_str(g_iartin, $Tcb::ChargingType, pt_1_660004606)

    SI (i_strcmp("RO", pt_1_660004606) == 0)
    ALORS
      chgchar_660004606 = 0x1001
      SAUT FIN_CH1
    FINSI
    SI (i_strcmp("RI", pt_1_660004606) == 0)
    ALORS
      chgchar_660004606 = 0x1002
      SAUT FIN_CH1
    FINSI
    SI (i_strcmp("VO", pt_1_660004606) == 0)
    ALORS
      chgchar_660004606 = 0x1004
      SAUT FIN_CH1
    FINSI
    SI (i_strcmp("SU", pt_1_660004606) == 0)
    ALORS
      chgchar_660004606 = 0x1008
      SAUT FIN_CH1
    FINSI
    SI (i_strcmp("RR", pt_1_660004606) == 0)
    ALORS
      chgchar_660004606 = 0x100A
      SAUT FIN_CH1
    FINSI
    SI (i_strcmp("RT", pt_1_660004606) == 0)
    ALORS
      chgchar_660004606 = 0x100C
      SAUT FIN_CH1
    FINSI
    SI (i_strcmp("RIR", pt_1_660004606) == 0)
    ALORS
      chgchar_660004606 = 0x100D
      SAUT FIN_CH1
    FINSI
    SI (i_strcmp("RIT", pt_1_660004606) == 0)
    ALORS
      chgchar_660004606 = 0x100E
    FINSI
    SI (i_strcmp("RX", pt_1_660004606) == 0)
    ALORS
      chgchar_660004606 = 0x100B
    FINSI
    SI (i_strcmp("RZ", pt_1_660004606) == 0)
    ALORS
      chgchar_660004606 = 0x100F
    FINSI
    POINT FIN_CH1
    erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::chgcar,chgchar_660004606)
  FINSI
FINSI

#V3t1.18 couleur        :-      :-      :MSET :FF:1
SI recordtype_660004606 == 0x00
ALORS
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::couleur,0x02)
FINSI

#T3t2
#idpart         :-      :-      :MSET :FF
SI recordtype_660004606 == 0x90 && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t2))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t2")
  SAUT FIN_T3t2
FINSI
SI recordtype_660004606 == 0x40
ALORS
#FO419 URSLYON debut 5/02/2007

  erreur_660004606 = i_get_art_str(g_iartin, $Tcb::InterpServiceId, pt_ServiceId_660004606)
  L_NDR_660004606 = i_conv_ascii_dcb(pt_ServiceId_660004606, pt_ServiceId_DCB_660004606)
  erreur_660004606 = i_memcpy_art_field_n(g_iartout,$Tdpvgsm::idpart,pt_ServiceId_DCB_660004606, L_NDR_660004606)
  erreur_660004606 = i_resize_tlv(g_iartout,"T3t2","idpart",L_NDR_660004606 * 8)
#FO419 URSLYON FIN 5/02/2007
FINSI
SI recordtype_660004606 == 0x80
ALORS
  erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout9, $Tcb::HotspotIDT, $Conv_URS::NOS3_NUM)
  erreur_660004606 = i_set_art_field(g_iartout9, $Conv_URS::NOS3_INF, 0x00)
  erreur_660004606 = i_dup_chp_1val(g_iartout9, g_iartout, $Conv_URS::NOS3, $Tdpvgsm::idpart)
FINSI
SI recordtype_660004606 == 0x00 || recordtype_660004606 == 0x13 || recordtype_660004606 == 0x3C
ALORS
  erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::CalledMSISDN1, $Tdpvgsm::idpart)
FINSI
POINT FIN_T3t2

#T3t3
#local          :-      :-      :MSET :FF
SI (recordtype_660004606 == 0x13 || recordtype_660004606 == 0x3C)
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t3")
  SAUT FIN_T3t3
FINSI

# G3R10 lot3
#PK QC1261
# QC1261 + QC1253
SI recordtype_660004606 == 0x90
ALORS
  # PLMN : Public Land Mobile Network
  erreur_660004606 = i_get_art_str(g_iartin, $Tcb::PLMNid, pt_1_660004606)
  #trace2(">>>__LINE__>>>__FILE__>>> PLMNid (pt_1) = <%s>",pt_1,"")
  # si MCC (Mobile Country Code : 208 pour la France) + MNC (Mobile Network Code : 01 pour Orange) = 20801
  SI (i_strcmp(pt_1_660004606, "20801") == 0 )
  ALORS
    # si 3G_LAC et 3G_CI_RAC_SAC valorises
    #trace2(">>>__LINE__>>>__FILE__>>> pt_LAC = <%s>",pt_LAC,"")
    #trace2(">>>__LINE__>>>__FILE__>>> pt_CI_RAC_SAC = <%s>",pt_CI_RAC_SAC,"")
    SI (i_strlen(pt_LAC_660004606) == 4 && i_strlen(pt_CI_RAC_SAC_660004606)==4)
    ALORS
      erreur_660004606= i_format_str2( pt_3G_660004606, "%s%s", pt_LAC_660004606, pt_CI_RAC_SAC_660004606)
      #trace2(">>>__LINE__>>>__FILE__>>> pt_3G = <%s>",pt_3G,"")
      erreur_660004606= i_format_str2( pt_Local_660004606, "%s%s", pt_1_660004606, pt_3G_660004606)
      #trace2(">>>__LINE__>>>__FILE__>>> pt_Local = <%s>",pt_Local,"")
      longueur_660004606 = i_conv_ascii_dcb(pt_Local_660004606, pt_Local_DCB_660004606)
      erreur_660004606 = i_memcpy_art_field_n(g_iartout, $Tdpvgsm::local, pt_Local_DCB_660004606, longueur_660004606)
      erreur_660004606 = i_resize_tlv(g_iartout,"T3t3","local",longueur_660004606 * 8)

    SINON
      # si 4G_ECI valorise
      #trace2(">>>__LINE__>>>__FILE__>>> pt_4G_ECI = <%s>",pt_4G_ECI,"")
      SI (i_strlen(pt_4G_ECI_660004606) == 7)
      ALORS
        erreur_660004606= i_format_str2( pt_Local_660004606, "%s%s", pt_1_660004606, pt_4G_ECI_660004606)
        #trace2(">>>__LINE__>>>__FILE__>>> pt_1 = <%s>",pt_1,"")
        #trace2(">>>__LINE__>>>__FILE__>>> pt_Local = <%s>",pt_Local,"")
        longueur_660004606 = i_conv_ascii_dcb(pt_Local_660004606, pt_Local_DCB_660004606)
        erreur_660004606 = i_memcpy_art_field_n(g_iartout, $Tdpvgsm::local, pt_Local_DCB_660004606, longueur_660004606)
        erreur_660004606 = i_resize_tlv(g_iartout,"T3t3","local",longueur_660004606 * 8)

      SINON
        erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::PLMNid, $Tdpvgsm::local)
      FINSI
    FINSI
  SINON
    erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::PLMNid, $Tdpvgsm::local)
  FINSI
  SAUT FIN_T3t3
FINSI

SI recordtype_660004606 == 0x00
ALORS
  erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::PLMNid, $Tdpvgsm::local)
  SAUT FIN_T3t3
FINSI

SI recordtype_660004606 == 0x40
ALORS
  erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::CallingMSISDN, $Tdpvgsm::local)
  SAUT FIN_T3t3
FINSI

SI recordtype_660004606 == 0x80
ALORS
  SI (i_valid_field_n(g_iartin, $Tcb::VisitNetID))
  ALORS
    erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::VisitNetID, $Tdpvgsm::local)
  SINON
    erreur_660004606 = i_memset_field_n(g_iartout,$Tdpvgsm::local,0x99)
    erreur_660004606 = i_set_art_fieldtab(g_iartout,$Tdpvgsm::local,9,0x0f)
    erreur_660004606 = i_resize_tlv(g_iartout, "T3t3", "local", 40)
  FINSI
FINSI
POINT FIN_T3t3

#T3t4
#MSISDN         :-      :-      :MSET :FF
SI recordtype_660004606 == 0x90 || recordtype_660004606 == 0x40 || recordtype_660004606 == 0x00 || recordtype_660004606 == 0x13 || recordtype_660004606 == 0x3C
ALORS
  erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::CallingMSISDN, $Tdpvgsm::MSISDN)
FINSI
SI recordtype_660004606 == 0x80
ALORS
  erreur_660004606 = i_dup_chp_1val(g_iartout9, g_iartout, $Conv_URS::userlogname, $Tdpvgsm::MSISDN)
FINSI

#T3t5
#IMEI           :-      :-      :1VAL :IMEI
SI (recordtype_660004606 != 0x90 && recordtype_660004606 != 0x00) && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t5))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t5")
FINSI

#T3t7: calculer et stocker  plus bas pour les autres cas de recordtype que 0x13 et 0x3C
#estalloc       :-      :-      :1VAL :DATE
SI (recordtype_660004606 == 0x13 || recordtype_660004606 == 0x3C) && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t7))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t7")
FINSI

#T3t13
#---FO364 URSLYON 29/11/06 debut

SI recordtype_660004606 != 0x13 &&  (i_valid_field_n(g_iartout, $Tdpvgsm::T3t13))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t13")
FINSI

#---FO364 FIN

#T4t13.2
#smid   :-  :-  :MSET :00
#T4t13.3
#svcPpMO  :-  :-  :MSET :00
#classeMO :-  :-  :MSET :00
#factdeMO :-  :-  :MSET :00
#demacqMO :-  :-  :MSET :00
#recacqMO :-  :-  :MSET :00
#PrepaidMO  :-  :-  :MSET :01


#T3t16
#TrSortant      :-      :-      :1VAL :PLMNid
#SI recordtype != 0x80 && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t16))
#ALORS
# erreur = i_supprChamp(g_iartout, "T3t16")
#FINSI
#G3R10 QC1230 TrSortant      :-      :-      :MSET :20
SI recordtype_660004606 != 0x80 && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t16))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t16")
SINON
  i_strcpy(pt_PLMNid_660004606,"")
  erreur_660004606 = i_get_art_str(g_iartin, $Tcb::PLMNid, pt_PLMNid_660004606)
  longueur_660004606 = i_strlen(pt_PLMNid_660004606)
  SI longueur_660004606 > 7
  ALORS
    longueur_660004606 = 7
  FINSI
  erreur_660004606 = i_memcpy_art_field_n(g_iartout, $Tdpvgsm::TrSortant, pt_PLMNid_660004606, longueur_660004606)
FINSI
#/G3R10


#T3t20
SI (recordtype_660004606 == 0x40 || recordtype_660004606 == 0x00 || recordtype_660004606 == 0x13 || recordtype_660004606 == 0x3C) && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t20))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t20")
  SAUT FIN_T3t20
FINSI

#T4t20.1
#PDPaddr        :-      :-      :MSET :FF
SI recordtype_660004606 == 0x90
ALORS
  erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::Username, $Tdpvgsm::PDPaddr)
FINSI

SI recordtype_660004606 == 0x80
ALORS
  erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::IPAdress, $Tdpvgsm::PDPaddr)
FINSI

#T4t20.2
#accPointName3  :-      :-      :MSET :FF
# QC490
SI recordtype_660004606 == 0x90
ALORS
  SI (i_valid_field_n(g_iartin, $Tcb::APN))
  ALORS
    i_strcpy(pt_APN_660004606," ")
    erreur_660004606=i_get_art_str(g_iartin,$Tcb::APN,pt_APN_660004606)
    longueur_660004606=i_strlen(pt_APN_660004606)
    SI (longueur_660004606 > 63)
    ALORS
      longueur_660004606= 63
      i_get_sub_str(pt_APN_660004606, 0, (taille_660004606 - 1), pt_APN_660004606)
    FINSI
    erreur_660004606=i_set_art_str(g_iartout9,$Conv_URS::APNA,pt_APN_660004606)
    erreur_660004606 = i_resize_tlv(g_iartout,"T4t20.2","accPointName3", longueur_660004606)
    erreur_660004606 = i_memcpy_art_field_n(g_iartout, $Tdpvgsm::accPointName3, i_get_art_fieldptr(g_iartout9, $Conv_URS::APNH), longueur_660004606)

  FINSI
FINSI

SI recordtype_660004606 == 0x80
ALORS
  SI (i_strcmp(pt_1_660004606,"VO") == 0) || (i_strcmp(pt_1_660004606,"SU") == 0) || (i_strcmp(pt_1_660004606,"RO") == 0) || (i_strcmp(pt_1_660004606,"RR") == 0) || (i_strcmp(pt_1_660004606,"RT") == 0) || (i_strcmp(pt_1_660004606,"RX") == 0) || (i_strcmp(pt_1_660004606,"RZ") == 0)
  ALORS
# FO 666  erreur = i_get_art_str(g_iartin, $Tcb::SubscriberID, pt_1)
    SI i_valid_field_n (g_iartin, $Tcb::SubscriberID)
    ALORS
      erreur_660004606 = i_get_art_str(g_iartin, $Tcb::SubscriberID, pt_1_660004606)
    SINON
      i_strcpy(pt_1_660004606,"wlan.orange.fr")
    FINSI
    #trace2(">>>__LINE__>>>__FILE__>>> SubscriberID = <%s>",pt_1,"")
  SINON
    i_strcpy(pt_1_660004606,"wlan.orange.fr")
    #trace2(">>>__LINE__>>>__FILE__>>> SubscriberID = <%s>",pt_1,"")
  FINSI
  longueur_660004606=i_strlen(pt_1_660004606)
  #trace2(">>>__LINE__>>>__FILE__>>> pt_1 = <%s>",pt_1,"")
  trace1(">>>__LINE__>>>__FILE__>>> longueur = <%d>",longueur_660004606)
  erreur_660004606 = i_set_art_str(g_iartout9, $Conv_URS::accpt3A, pt_1_660004606)
  erreur_660004606 = i_resize_tlv(g_iartout, "T4t20.2", "accPointName3", longueur_660004606)
  erreur_660004606 = i_memcpy_art_field_n(g_iartout, $Tdpvgsm::accPointName3, i_get_art_fieldptr(g_iartout9, $Conv_URS::accpt3T), longueur_660004606)
FINSI

#T4t20.3
#accPointName4  :-      :-      :MSET :FF
SI recordtype_660004606 == 0x80
ALORS
  erreur_660004606 = i_dup_chp_1val(g_iartout9, g_iartout, $Conv_URS::userlogrealmT, $Tdpvgsm::accPointName4)
SINON
  erreur_660004606 = i_supprChamp(g_iartout, "T4t20.3")
FINSI


#T4t20.4
#chargingID     :-      :-      :MSET :FF
SI recordtype_660004606 == 0x90
ALORS
  chargingid_660004606 = i_get_art_field(g_iartin, $Tcb::chargingId)
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::chargingID,chargingid_660004606)
FINSI
SI recordtype_660004606 == 0x80
ALORS
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::chargingID,identifiant_660004606)
FINSI

#G3R1
#T4t20.7
#RecEntId1      :-      :-      :MSET :FF
SI recordtype_660004606 == 0x90
ALORS
  SI (i_valid_field_n(g_iartin,$Tcb::GGSNAd))
  ALORS
    erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::GGSNAd, $Tdpvgsm::RecEntId1)
  SINON
    SI (i_valid_field_n(g_iartin,$Tcb::GGSNAdIPV6))
    ALORS
      erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::GGSNAdIPV6, $Tdpvgsm::RecEntId1)
    SINON
      erreur_660004606 = i_supprChamp(g_iartout, "T4t20.7")
    FINSI
  FINSI
FINSI

SI recordtype_660004606 == 0x80
ALORS
  erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::AccPointIdT, $Tdpvgsm::RecEntId1)
FINSI


#T4t20.8
#RecEntId2      :-      :-      :MSET :FF
SI (i_valid_field_n(g_iartin,$Tcb::SGSNAd))
ALORS
  erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::SGSNAd, $Tdpvgsm::RecEntId2)
SINON
  SI (i_valid_field_n(g_iartin,$Tcb::SGSNAdIPV6))
  ALORS
    erreur_660004606 = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::SGSNAdIPV6, $Tdpvgsm::RecEntId2)
  SINON
    erreur_660004606 = i_supprChamp(g_iartout, "T4t20.8")
  FINSI
FINSI

SI recordtype_660004606 == 0x80
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T4t20.8")
FINSI
#\G3R1

#T4t20.10
#totVolOut      :-      :-      :MSET :00

#G2R1 lot1 si  GPRS_grosvolume T4t20.10.1 calcule plus bas
SI !GPRS_grosvolume_660004606
ALORS
  SI recordtype_660004606 == 0x90
  ALORS
    #G1R6 TT00089
    #G1R6 lot4 TT00092
    SI TransactionTy2_660004606 == VRAI_660004606
    ALORS
      #-----
      SI (i_valid_field_n(g_iartin, $Tcb::UplinkTrafficT))
      ALORS
        longueur_660004606 = 0
        #longueur = g_iartin.UplinkTrafficT!NELEM - 1
        longueur_660004606 = i_get_art_field(g_iartin,$Tcb::UplinkTrafficT - 2)
        #trace1("----------longueur=%d-----------",longueur)
        index_660004606 = 5
        POINT BOUCLE_TotVoLO_1
        longueur_660004606 = longueur_660004606 - 1
        g_iartout.totVolOut[index_660004606]=g_iartin.UplinkTrafficT[longueur_660004606]
        #trace1("---------longueur=%d-----------",longueur)

        SI (longueur_660004606 > 0)
        ALORS
          index_660004606 = index_660004606 - 1
          #trace1("----------index=%d-----------",index)
          SAUT BOUCLE_TotVoLO_1
        FINSI
      FINSI
      #----
      #erreur = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::UplinkTrafficT, $Tdpvgsm::totVolOut)
    SINON
      SI (i_valid_field_n(g_iartin, $Tcb::TrVolumeT))
      ALORS
        longueur_660004606 = 0
        longueur_660004606 = i_get_art_field(g_iartin,$Tcb::TrVolumeT - 2)
        #trace1("----------longueur=%d-----------",longueur)
        index_660004606 = 5
        POINT BOUCLE_TotVoLO_2
        longueur_660004606 = longueur_660004606 - 1
        g_iartout.totVolOut[index_660004606]=g_iartin.TrVolumeT[longueur_660004606]
        #trace1("---------longueur=%d-----------",longueur)

        SI (longueur_660004606 > 0)
        ALORS
          index_660004606 = index_660004606 - 1
          #trace1("----------index=%d-----------",index)
          SAUT BOUCLE_TotVoLO_2
        FINSI
      FINSI
      #erreur = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::TrVolumeT, $Tdpvgsm::totVolOut)
    FINSI
  FINSI
FINSI


SI recordtype_660004606 == 0x80
ALORS
# erreur = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::UplinkTrafficT, $Tdpvgsm::totVolOut)
  SI i_valid_field_n(g_iartin, $Tcb::UplinkTrafficT)
  ALORS
    longueur_660004606 = 0
    longueur_660004606 = g_iartin.UplinkTrafficT!NELEM - 1
    index_660004606 = 5
    POINT BOUCLE_TotVolO_2
    g_iartout.totVolOut[index_660004606]= g_iartin.UplinkTrafficT[longueur_660004606]
    longueur_660004606 = longueur_660004606 - 1
    SI longueur_660004606 >= 0
    ALORS
      index_660004606 = index_660004606 - 1
      SAUT BOUCLE_TotVolO_2
    FINSI
  FINSI
FINSI

#totVolIn       :-      :-      :MSET :00
SI recordtype_660004606 == 0x90
ALORS
#G1R6 TT00089
#G1R6 lot4 TT00092
  SI TransactionTy2_660004606 == VRAI_660004606
  ALORS
#---------------------
    SI i_valid_field_n(g_iartin, $Tcb::DownlinkTrafT)
    ALORS
      longueur_660004606 = 0
      longueur_660004606 = i_get_art_field(g_iartin,$Tcb::DownlinkTrafT - 2)
      # trace1("----------longueur=%d-----------",longueur)
      index_660004606 = 5
      POINT BOUCLE_TotVoLO_3
      longueur_660004606 = longueur_660004606 - 1
      g_iartout.totVolIn[index_660004606]=g_iartin.DownlinkTrafT[longueur_660004606]
      #trace1("---------longueur=%d-----------",longueur)

      SI (longueur_660004606 > 0)
      ALORS
        index_660004606 = index_660004606 - 1
        #trace1("----------index=%d-----------",index)
        SAUT BOUCLE_TotVoLO_3
      FINSI
    FINSI
#--------------------
    #erreur = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::DownlinkTrafT, $Tdpvgsm::totVolIn)
  FINSI
FINSI
#/G1R6 lot4 TT00092

SI recordtype_660004606 == 0x80
ALORS
# erreur = i_dup_chp_1val(g_iartin, g_iartout, $Tcb::DownlinkTrafT, $Tdpvgsm::totVolIn)
  SI i_valid_field_n(g_iartin, $Tcb::DownlinkTrafT)
  ALORS
    longueur_660004606 = 0
    longueur_660004606 = g_iartin.DownlinkTrafT!NELEM - 1
    index_660004606 = 5
    POINT BOUCLE_TotVolI
    g_iartout.totVolIn[index_660004606]= g_iartin.DownlinkTrafT[longueur_660004606]
    longueur_660004606 = longueur_660004606 - 1
    SI longueur_660004606 >= 0
    ALORS
      index_660004606 = index_660004606 - 1
      SAUT BOUCLE_TotVolI
    FINSI
  FINSI
FINSI

POINT FIN_T3t20

#T3t26
#MMStypeOfCont  :-      :-      :MSET :00
# FO 269 Modification du format du champ ServiceTy
SI (recordtype_660004606 == 0x80 || recordtype_660004606 == 0x00 || recordtype_660004606 == 0x90 || recordtype_660004606 == 0x13) && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t26))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t26")
  SAUT FIN_T3t26
FINSI

index_660004606 = 0
longueur_660004606 = 0
res_660004606 = 0
longueur_660004606= i_get_art_field(g_iartin, $Tcb::ServiceTy -1)

POINT DEBUT1
SI g_iartin.ServiceTy[index_660004606]== 0x30
ALORS
  res_660004606=2 + res_660004606
FINSI
SI g_iartin.ServiceTy[index_660004606]== 0x31
ALORS
  res_660004606=4 + res_660004606
FINSI
SI g_iartin.ServiceTy[index_660004606]== 0x32
ALORS
  res_660004606=1 + res_660004606
FINSI
SI g_iartin.ServiceTy[index_660004606]== 0x33
ALORS
  res_660004606=8 + res_660004606
FINSI
index_660004606 = index_660004606+1
SI (index_660004606 < longueur_660004606)
ALORS
  SAUT DEBUT1
FINSI
erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::MMStypeOfCont,res_660004606)
POINT FIN_T3t26

#T3t29
#WlanHotSpotId  :-      :-      :1VAL :HotspotID
SI recordtype_660004606 != 0x80 && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t29))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t29")
FINSI

#T3t30
#T4t30.1
#timeInCE       :-      :-      :1VAL :DATE
erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::timeInCE,date_audit_660004606)

#T4t30.2
#eec            :-      :-      :MSET :00:1
# QC1405
SI (g_ieec > 500)
ALORS
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::eec, g_ieec - 500)
SINON
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::eec, g_ieec)
FINSI
#/QC1405

#T3t31
#WlanSubscribId :D      :-      :1VAL :UserLogin
SI recordtype_660004606 != 0x80 && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t31))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t31")
FINSI

#T3t32
#WlanAccPointId :-      :-      :MSET :20 (AccPointIdAscii)
SI recordtype_660004606 != 0x80 && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t32))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t32")
SINON
  erreur_660004606=i_get_art_str(g_iartin, $Tcb::AccPointIdAscii,pt_1_660004606)
  longueur_660004606 = i_strlen(pt_1_660004606)
  SI longueur_660004606 > 16
  ALORS
    i_get_sub_str(pt_1_660004606, 0, 15, pt_2_660004606)
    erreur_660004606=i_set_art_str(g_iartout, $Tdpvgsm::WlanAccPointId,pt_2_660004606)
  SINON
    erreur_660004606=i_set_art_str(g_iartout, $Tdpvgsm::WlanAccPointId,pt_1_660004606)
    erreur_660004606 = i_resize_tlv(g_iartout, "T3t32", "WlanAccPointId", longueur_660004606)
  FINSI
FINSI

#T3t35
#T4t35.1
#duration       :D      :-      :1VAL :TrDuration
SI recordtype_660004606 != 0x00
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T4t35.1")
FINSI

#T4t35.2 : Calculer et stocker plus bas et suppression eventuelle (pour recordtype != 0x13 et != 0x3c)
#occurenceNb    :-      :-      :MSET :01:1
SI recordtype_660004606 == 0x13 ||  recordtype_660004606 == 0x3C
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T4t35.2")
FINSI

#T4t35.3
#participantsNb :-      :-      :MSET :00
erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::participantsNb,recipientnb_660004606)

#T3t37
#CSDaddInfo     :-      :-      :MSET :01:3
SI i_get_art_field(g_iartin, $Tcb::mobileCoverage)== 0x01
ALORS
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::CSDaddInfo,0x080400)
SINON
  erreur_660004606 = i_supprChamp(g_iartout, "T3t37")
FINSI

#T3t39
#T4t39.6
#Amount         :-      :-      :1VAL :Euros
SI recordtype_660004606 != 0x40 && recordtype_660004606 != 0x80 && (i_valid_field_n(g_iartin, $Tcb::Euros))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T4t39.6")
FINSI

#T4t39.9
#flagPitOut     :-      :-      :1VAL :legalyBillDist

#T3t40
SI (recordtype_660004606 == 0x13 || recordtype_660004606 == 0x3C)
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t40")
  SAUT FIN_T3t40
FINSI
#T4t40.1
#userIdNet      :-      :-      :MSET :FF
longueur_660004606=0
flag_660004606=VRAI_660004606
SI recordtype_660004606 == 0x80
ALORS
  i_strcpy(pt_1_660004606," ")
  erreur_660004606 = i_get_art_str(g_iartin, $Tcb::UserLogin, pt_1_660004606)
SINON
  SI (i_valid_field_n(g_iartin, $Tcb::UserEmail))
  ALORS
    i_strcpy(pt_1_660004606," ")
    erreur_660004606 = i_get_art_str(g_iartin, $Tcb::UserEmail, pt_1_660004606)
  SINON
    SI (i_valid_field_n(g_iartin, $Tcb::UserPseudo))
    ALORS
      i_strcpy(pt_1_660004606," ")
      erreur_660004606 = i_get_art_str(g_iartin, $Tcb::UserPseudo, pt_1_660004606)
    SINON
      SI (i_valid_field_n(g_iartin, $Tcb::UserMMSid))
      ALORS
        i_strcpy(pt_1_660004606," ")
        erreur_660004606 = i_get_art_str(g_iartin, $Tcb::UserMMSid, pt_1_660004606)
      SINON
        SI (i_valid_field_n(g_iartin, $Tcb::UserChatId))
        ALORS
          i_strcpy(pt_1_660004606," ")
          erreur_660004606 = i_get_art_str(g_iartin, $Tcb::UserChatId, pt_1_660004606)
        SINON
          flag_660004606=FAUX_660004606
          erreur_660004606 = i_supprChamp(g_iartout, "T4t40.1")
        FINSI
      FINSI
    FINSI
  FINSI
FINSI
SI flag_660004606 ==VRAI_660004606
ALORS
  longueur_660004606=i_strlen(pt_1_660004606)
  erreur_660004606 = i_set_art_str(g_iartout, $Tdpvgsm::userIdNet, pt_1_660004606)
  erreur_660004606 = i_resize_tlv(g_iartout, "T4t40.1", "userIdNet", longueur_660004606)
FINSI


#T4t40.2
#CBusageInd     :-      :-      :MSET :00:1
SI (i_valid_field_n(g_iartin, $Tcb::UserEmail))
ALORS
  res_660004606 = 0x04
SINON
  SI (i_valid_field_n(g_iartin, $Tcb::UserPseudo))
  ALORS
    res_660004606 = 0x03
  SINON
    SI (i_valid_field_n(g_iartin, $Tcb::UserMMSid))
    ALORS
      res_660004606 = 0x01
    SINON
      SI (i_valid_field_n(g_iartin, $Tcb::UserChatId))
      ALORS
        res_660004606 = 0x02
      SINON
        res_660004606 = 0x00
      FINSI
    FINSI
  FINSI
FINSI
erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::CBusageInd,res_660004606 )
POINT FIN_T3t40

#T3t41
SI (i_valid_field_n(g_iartout, $Tdpvgsm::T3t41))
ALORS
  SI !((recordtype_660004606 == 0x40) || ((recordtype_660004606 == 0x90) && (TransactionTy2_660004606 == VRAI_660004606)))
  ALORS
    erreur_660004606 = i_supprChamp(g_iartout, "T3t41")
  FINSI
FINSI

#T4t41.2
#AttachNb       :-      :-      :1VAL :AttachmentNb
#T4t41.3
#AttachNb       :-      :-      :1VAL :AttachmentTy
#T4t41.5
#serviceID      :-      :-      :1VAL :InterpServiceId
#T4t41.6
#specifServVol  :-      :-      :1VAL :SpecifVolume
POINT FIN_T3t41

#T3t42
#PDPType        :-      :-      :1VAL :PDPTy
SI recordtype_660004606 != 0x90 && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t42))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t42")
FINSI

#T3t43
#T4t43.3
#transactionDesc:-      :-      :1VAL :TrDescription
SI recordtype_660004606 != 0x40 && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t43))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t43")
FINSI

#T3t44
#T4t44.1
#transactionID  :-      :-      :1VAL :TransactionIdT
SI recordtype_660004606 != 0x40 && recordtype_660004606 != 0x13 && recordtype_660004606 != 0x3C && (i_valid_field_n(g_iartout, $Tdpvgsm::transactionID))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T4t44.1")
FINSI
#T4t44.2
#transactionType:-      :-      :MSET :00
SI (recordtype_660004606 == 0x13 || recordtype_660004606 == 0x3C) && (i_valid_field_n(g_iartout, $Tdpvgsm::transactionType))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T4t44.2")
  SAUT FIN_T4t44_2
FINSI
SI i_valid_field_n(g_iartin, $Tcb::TransactionTy)
ALORS
  longueur_660004606 = 0
  longueur_660004606 = g_iartin.TransactionTy!NELEM - 1
  SI g_iartin.TransactionTy[longueur_660004606] == 0xF
  ALORS
    longueur_660004606 = longueur_660004606 - 1
  FINSI
  index_660004606 = 3
  POINT BOUCLE_TrTy
  g_iartout.transactionType[index_660004606]= g_iartin.TransactionTy[longueur_660004606]
  longueur_660004606 = longueur_660004606 - 1
  SI longueur_660004606 >= 0
  ALORS
    index_660004606 = index_660004606 - 1
    SAUT BOUCLE_TrTy
  FINSI
SINON
  g_iartout.transactionType[3]= 0xF
  g_iartout.transactionType[2]= 0xF
  g_iartout.transactionType[1]= 0xF
  g_iartout.transactionType[0]= 0xF
FINSI
POINT FIN_T4t44_2

#T3t45
SI recordtype_660004606 != 0x40 && recordtype_660004606 != 0x13 && recordtype_660004606 != 0x3C && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t45))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t45")
  SAUT FIN_T3t45
FINSI

#T4t45.1
#providerID     :-      :-      :1VAL :ProviderId
SI (recordtype_660004606 == 0x13 || recordtype_660004606 == 0x3C) && (i_valid_field_n(g_iartout, $Tdpvgsm::providerID))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T4t45.1")
FINSI

#T4t45.4
#ratingLevel    :-      :-      :1VAL :ratingLevel
POINT FIN_T3t45

#T3t46
SI recordtype_660004606 == 0x13 || recordtype_660004606 == 0x3C
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t46")
  SAUT FIN_T3t46
FINSI
#T4t46.1
#TAEvolume      :-      :-      :1VAL :TrVolumeT
#T4t46.2
#TAEduration    :-      :-      :1VAL :TrDuration
POINT FIN_T3t46

#T3t47
SI recordtype_660004606 != 0x40 && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t47))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t47")
  SAUT FIN_T3t47
FINSI
#T4t47.3
#servPlatformID :-      :-      :MSET :FF
SI (i_valid_field_n(g_iartin, $Tcb::recEntityID))
ALORS
  erreur_660004606 = i_get_art_str(g_iartin, $Tcb::recEntityID, pt_1_660004606)
SINON
  SI ratingflag_660004606==0
  ALORS
    i_strcpy(pt_1_660004606,"234027000000FFFFFFFF")
  SINON
    i_strcpy(pt_1_660004606,"234028000000FFFFFFFF")
  FINSI
FINSI
erreur_660004606 = i_set_art_str(g_iartout, $Tdpvgsm::servPlatformID, pt_1_660004606)
POINT FIN_T3t47

#T3t49
SI recordtype_660004606 != 0x40 && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t49))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t49")
  SAUT FIN_T3t49
FINSI

#T4t49.1
#usrAccType     :-      :-      :1VAL :UsrAccessTyp
#T4t49.2
#usrChannelID   :-      :-      :1VAL :UsrChannelID
POINT FIN_T3t49

#T3t50
SI recordtype_660004606 == 0x13 || recordtype_660004606 == 0x3C
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t50")
  SAUT FIN_T3t50
FINSI

#T4t50.1
#partAccType    :-      :-      :1VAL :PartnerAccessTy
SI recordtype_660004606 != 0x40 && (i_valid_field_n(g_iartin, $Tcb::PartnerAccessTy))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T4t50.1")
FINSI

#T4t50.2
#partChannelID  :-      :-      :1VAL :PartChanID

#T4t50.3 calculer et stocker plus bas
#partTransID    :-      :-      :MSET :FF
POINT FIN_T3t50

# G3R4 lot2, Variables fonctionnelles b_roaming_90, b_roaming_80, pt_MCCMNC, pt_TADIG,  calculees plus haut
# G3R4 lot2, item Code TADIG
#T3t51/servPlatRoaInf :-      :-      :MSET :FF  (3 octets DCB)
SI (b_roaming_80_660004606 || b_roaming_90_660004606)
ALORS
  #QC921
  SI !i_valid_field_n(g_iartin, $Tcb::tadigCode)
  ALORS
    L_NDR_660004606 = i_conv_ascii_dcb(pt_MCCMNC_660004606, pt_1_660004606)
    erreur_660004606 = i_memcpy_art_field_n(g_iartout, $Tdpvgsm::servPlatRoaInf, pt_1_660004606, L_NDR_660004606)
    erreur_660004606 = i_resize_tlv(g_iartout,"T3t51","servPlatRoaInf",L_NDR_660004606 * 8)
  SINON
    SI b_roaming_90_660004606
    ALORS
      #recordtype est forcement == 0x90 (b_roaming_90)
      erreur_660004606 = i_memcpy_art_field_n(g_iartout,$Tdpvgsm::servPlatRoaInf,g_iartin.PLMNid[], 3)
    SINON
      #recordtype est forcement == 0x80 (b_roaming_80)
      erreur_660004606 = i_memcpy_art_field_n(g_iartout,$Tdpvgsm::servPlatRoaInf,g_iartin.VisitNetID[], 3)
    FINSI
  FINSI
SINON
  erreur_660004606 = i_supprChamp(g_iartout, "T3t51")
FINSI
# /G3R4 lot2

#T3t54
#GFlag1         :-      :-      :1VAL :ratingFlag

# G3R4 lot2
#T3t59 (present ou absent selon calcul de T4t59.2)
#V3t59.1/PrefixIMSIpart :-      :-      :MSET :FF (pas de calcul, 3 octets DCB)
#V3t59.2/LocalTADIG :-      :-      :MSET :FF (alphanumerique ascii 5 octets)
#V3t59.3/PrefixIMSIclt :-      :-      :MSET :FF (pas de calcul, 3 octets DCB)
SI (b_roaming_80_660004606 || b_roaming_90_660004606)
ALORS
  #T4t59.2 LocalTADIG alphanumerique ascii 5 octets
  SI i_valid_field_n(g_iartin, $Tcb::tadigCode)
  ALORS
    i_strcpy(pt_1_660004606,"")
    erreur_660004606 = i_get_art_str(g_iartin, $Tcb::tadigCode, pt_1_660004606)
    erreur_660004606 = i_set_art_str(g_iartout, $Tdpvgsm::LocalTADIG,pt_1_660004606)
  SINON
    erreur_660004606 = i_set_art_str(g_iartout, $Tdpvgsm::LocalTADIG,pt_TADIG_660004606)
  FINSI
SINON
  erreur_660004606 = i_supprChamp(g_iartout, "T3t59")
FINSI
# /G3R4 lot2


#V3t1.16
#nbUT           :-      :-      :MSET :FF:4
# Calcul ici car necessite champ idpart renseigne dans g_iartout
SI recordtype_660004606 == 0x40
ALORS
  euros_660004606 = i_get_art_field(g_iartin, $Tcb::Euros)
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::nbUT,euros_660004606)
SINON
  SI recordtype_660004606 == 0x00
  ALORS
    erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::indtax, 0x01)
    nb_UT_660004606 = preval_ut_660004265(g_iartout)
    SI (nb_UT_660004606 == -1 )
    ALORS
      trace("[Tcb_dis] erreur prevalorisation : retour preval == -1")
      code_errone_660004606 = 0xA030
      code_errone_660004606 = code_errone_660004606 + EFFICACE_660004606
      erreur_660004606 = i_PlvMessEmettre(7501,2,g_iartin,"",2,code_errone_660004606, C_Article_660004606, 0)
      SAUT DISTRI_ERR
    SINON
      SI (nb_UT_660004606 == -2 )
      ALORS
        trace("[Tcb_dis] pas de prevalorisation : retour preval == -2")
      SINON
        trace1("[Tcb_dis] Prevalorisation OK avec valeur : %d", nb_UT_660004606)
        erreur_660004606 = i_set_art_field(g_iartout,$Tdpvgsm::nbUT, nb_UT_660004606)
      FINSI
    FINSI
    erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::indtax, 0xFF)
  FINSI
FINSI


#*****************************************************************************************************
# SAUT vers DEB_13_3C pour les articles ayant leur recordtype = 0x13 ou 0x3C (type=0x11 SMS_long, type=0x30 XMS_multi)
SI recordtype_660004606 == 0x13 || recordtype_660004606 == 0x3C
ALORS
  SAUT DEB_13_3C
FINSI
#*************************************************************************************************



# g_iartout2 permet de garder les chps CalledMSISDNxx a longueurs initiales
SI (i_dup_art_id(g_iartout,g_iartout2))
ALORS
  #trace("[Tcb_dis]ERREUR envoi distri errone i_dup_art_id g_iartout2")
  code_errone_660004606 = 0xA0D0
  code_errone_660004606 = code_errone_660004606 + EFFICACE_660004606
  erreur_660004606 = i_PlvMessEmettre(7502,2,g_iartin,"",2,code_errone_660004606, C_Article_660004606, 0)
  SAUT DISTRI_ERR
FINSI
nb_passage_660004606=num_occ_660004606

# DEBUT BOUCLE MULTI_DESTINATAIRE types 0x00, 0x40, 0x80, 0x90 ********************************

POINT MULTI_DEST

SI nb_passage_660004606 > 20
ALORS
  SAUT DISTRI_FIN
FINSI


#T4t50.3
#partTransID    :-      :-      :MSET :FF
longueur_660004606=0
flag_660004606=VRAI_660004606
SI (i_valid_field_n(g_iartin, $Tcb::CalledMSISDN1 + (nb_passage_660004606*15) - 15))
ALORS
  erreur_660004606 = i_get_art_str(g_iartin, $Tcb::CalledMSISDN1 + (nb_passage_660004606*15) - 15, pt_1_660004606)
SINON
  SI (i_valid_field_n(g_iartin, $Tcb::EMailAdress1 + (nb_passage_660004606*15) - 15))
  ALORS
    erreur_660004606 = i_get_art_str(g_iartin, $Tcb::EMailAdress1 + (nb_passage_660004606*15) - 15, pt_1_660004606)
  SINON
    SI (i_valid_field_n(g_iartin, $Tcb::Pseudo1 + (nb_passage_660004606*15) - 15))
    ALORS
      erreur_660004606 = i_get_art_str(g_iartin, $Tcb::Pseudo1 + (nb_passage_660004606*15) - 15, pt_1_660004606)
    SINON
      SI (i_valid_field_n(g_iartin, $Tcb::MMSId1 + (nb_passage_660004606*15) - 15))
      ALORS
        erreur_660004606 = i_get_art_str(g_iartin, $Tcb::MMSId1 + (nb_passage_660004606*15) - 15, pt_1_660004606)
      SINON
        SI (i_valid_field_n(g_iartin, $Tcb::ChatId1 + (nb_passage_660004606*15) - 15))
        ALORS
          erreur_660004606 = i_get_art_str(g_iartin, $Tcb::ChatId1 + (nb_passage_660004606*15) - 15, pt_1_660004606)
        SINON
          flag_660004606=FAUX_660004606
          SI nb_passage_660004606 == 1
          ALORS
            erreur_660004606 = i_supprChamp(g_iartout, "T4t50.3")
          SINON
            num_occ_660004606=num_occ_660004606-1
            SI !GPRS_grosvolume_660004606
            ALORS
              SAUT NLLE_OCCUR
            FINSI
          FINSI
        FINSI
      FINSI
    FINSI
  FINSI
FINSI


SI flag_660004606 ==VRAI_660004606
ALORS
  longueur_660004606=i_strlen(pt_1_660004606)
  erreur_660004606 = i_set_art_str(g_iartout, $Tdpvgsm::partTransID, pt_1_660004606)
  erreur_660004606 = i_resize_tlv(g_iartout, "T4t50.3", "partTransID", longueur_660004606)
FINSI


#*****************************************************************************************************
#G2R1 lot1 SAUT vers GROS_VOLUME pour les cras  recordtype == 0x90  && TransactionTy2 == FAUX && GPRS_grosvolume = 1
SI GPRS_grosvolume_660004606
ALORS
  SAUT GROS_VOLUME
FINSI
#******************************************************************************************************


#DATE           :-      :-      :1VAL :DATE

#G2R1 lot1

SI !GPRS_grosvolume_660004606
ALORS
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::DATE,ICAR_ABS_660004606+num_occ_660004606-1)
FINSI

#T3t7
#estalloc       :-      :-      :1VAL :DATE
SI (recordtype_660004606 != 0x90 && recordtype_660004606 != 0x40) && (i_valid_field_n(g_iartout, $Tdpvgsm::T3t7))
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t7")
  SAUT FIN_T3t7
FINSI
SI multi_dest_660004606 == Multidistribution_Oui_660004606
ALORS
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::estalloc,ICAR_ABS_660004606+num_occ_660004606-1)
SINON
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::estalloc,ICAR_ABS_660004606)
FINSI
POINT FIN_T3t7

#G2R1 lot1
#T4t35.2
#occurenceNb    :-      :-      :MSET :01:1

SI !GPRS_grosvolume_660004606
ALORS

  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::occurenceNb,num_occ_660004606)
FINSI

#G3R0CdME
#T3t60
#GMULTI2
SI (recordtype_660004606 != 0x80) && i_valid_field_n(g_iartout, $Tdpvgsm::GMULTI2)
ALORS
  erreur_660004606 = i_supprChamp(g_iartout, "T3t60")
FINSI


# Cpt applicatifs (realise dans la fonction d'aiguillage)


# !bREDIST signifie envoie et lecture requete OK
# bREDIST ==1 signifie Echec sur i_EnvoiReqConsTabDistDouble ou lecture requete impossible


#SAUT ECC_RJPGSM
#######################################
# DPV33 pour recordtype = 0x00, 0x40, 0x80 ou 0x90
# Appel fonction distribution TRAI_OK=0, TRAI_KO=-1, TRAI_REDISTRIBUTION=-2
#######################################
# G1R5: REJET des cras de type de CRA = 90 et Champ Transaction (V4t44.2) = 0002
# G1R5: filtre provisoire pour la G1R5 a retirer en G1R6
# G1R5: Distribution _Speciale pour les recordtype = 0x90.

#G2R1 lot1

SI !GPRS_grosvolume_660004606
ALORS
  SI recordtype_660004606 == 0x40 || recordtype_660004606 == 0x80 || recordtype_660004606 == 0x90
  ALORS
    critere_660004606=DISTRIBUTION_SPECIALE_660004606
  SINON
    critere_660004606=DISTRIBUTION_AIG_IMSI_660004606
  FINSI


  SI (incrementation1502_660004606 == FAUX_660004606)
  ALORS
    erreur_660004606 = aiguillage2_660004590 (g_iartin, g_iartout, critere_660004606, Multidistribution_Non_660004606)
    incrementation1502_660004606 = VRAI_660004606
  SINON
    erreur_660004606 = aiguillage2_660004590 (g_iartin, g_iartout, critere_660004606, multi_dest_660004606)
  FINSI

  SI erreur_660004606 == TRAI_REDISTRIBUTION_660004606
  ALORS
    trace( "[Tcb_dis] Stockage en redistribution")
    SAUT FIN_RDT
  FINSI
  SI erreur_660004606 == TRAI_KO_660004606
  ALORS
    trace1( "[Tcb_dis] DC du %d eme destinataire dans l artobj errone",nb_passage_660004606)
    SI nb_passage_660004606 > 20
    ALORS
      code_errone_660004606 = 0xA0B0
      code_errone_660004606 = code_errone_660004606 + EFFICACE_660004606
      erreur_660004606 = i_PlvMessEmettre(7500,2,g_iartin,"",3,code_errone_660004606,C_Article_660004606,recordtype_660004606)
      SAUT DISTRI_ERR
    FINSI
  FINSI
  SI erreur_660004606 == TRAI_OK_660004606
  ALORS
    dcOK_660004606 = VRAI_660004606
  FINSI
FINSI
POINT NLLE_OCCUR

########### num_occ (position du destinataire traite)
# variable initialisee a 1
num_occ_660004606 = num_occ_660004606 + 1
nb_passage_660004606 = nb_passage_660004606 + 1

# Recopie de g_iartout2 (initial) dans g_iartout pour les autres destinataires
SI flag_660004606 == VRAI_660004606
ALORS
  # si i_dup_art_id echoue, cad  retour != 0
  SI (i_dup_art_id(g_iartout2,g_iartout))
  ALORS
    trace("[Tcb_dis]ERREUR envoi distri errone i_dup_art_id g_iartout2 g_iartout")
    code_errone_660004606 = 0xA0D0
    code_errone_660004606 = code_errone_660004606 + EFFICACE_660004606
    erreur_660004606 = i_PlvMessEmettre(7502,2,g_iartin,"",2,code_errone_660004606, C_Article_660004606, 0)
    SAUT DISTRI_ERR
  FINSI
  # si i_rename_art echoue, cad  retour != 0
  SI (i_rename_art(g_iartout,"Tdpvgsm"))
  ALORS
    trace("[Tcb_dis]ERREUR envoi distri errone i_rename_art g_iartout ")
    code_errone_660004606 = 0xA0D0
    code_errone_660004606 = code_errone_660004606 + EFFICACE_660004606
    erreur_660004606 = i_PlvMessEmettre(7502,2,g_iartin,"",2,code_errone_660004606, C_Article_660004606, 0)
    SAUT DISTRI_ERR
  FINSI
FINSI


SI multi_dest_660004606 == Multidistribution_Oui_660004606
ALORS
  SAUT MULTI_DEST
SINON
  SAUT DISTRI_FIN
FINSI

# FIN BOUCLE MULTI_DESTINATAIRE types 0x00, 0x40, 0x80, 0x90 *****************************************




#*****************************************************************************************************
POINT DEB_13_3C

# DEBUT BOUCLE SMS_long ou XMS_multi avec recordtype 0x13 (type=0x11), recordtype 0x3C (type=0x30) ***
Indice_J_660004606 = 0
POINT P_SMS_LONG

SI !GPRS_grosvolume_660004606
ALORS
  # Increment et
  #DATE           :-      :-      :1VAL :DATE
  SI SMS_long_660004606 || XMS_multi_660004606
  ALORS
    Increment_660004606 = Indice_I_660004606 * Nbtotal_660004606 + Indice_J_660004606
    erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::DATE,ICAR_ABS_660004606+Increment_660004606)
  SINON
    erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::DATE,ICAR_ABS_660004606)
  FINSI
  Indice_J_660004606 = Indice_J_660004606 + 1


  #######################################
  # DPV33 pour recordtype = 0x13 ou 0x3C
  # Appel fonction distribution TRAI_OK=0, TRAI_KO=-1, TRAI_REDISTRIBUTION=-2
  #######################################
  # a modifier pour recordtype == 0x13 || recordtype == 0x3C : critere et multi_dest (calcule plus haut)
  critere_660004606 = DISTRIBUTION_INCONNU_660004606

  SI (incrementation1502_660004606 == FAUX_660004606)
  ALORS
    erreur_660004606 = aiguillage2_660004590 (g_iartin, g_iartout, critere_660004606, Multidistribution_Non_660004606)
    incrementation1502_660004606 = VRAI_660004606
  SINON
    erreur_660004606 = aiguillage2_660004590 (g_iartin, g_iartout, critere_660004606, multi_dest_660004606)
  FINSI


  SI erreur_660004606 == TRAI_REDISTRIBUTION_660004606
  ALORS
    trace( "[Tcb_dis] Stockage en redistribution")
    SAUT FIN_RDT
  FINSI
  SI erreur_660004606 == TRAI_KO_660004606
  ALORS
    trace1( "[Tcb_dis] DC du %d eme XMS_multi et/ou SMS_long  errone",nb_passage_660004606)
  FINSI

  SI erreur_660004606 == TRAI_OK_660004606
  ALORS
    dcOK_660004606 = VRAI_660004606
  FINSI

  SI Indice_J_660004606 < Nbtotal_660004606
  ALORS
    nb_passage_660004606 = nb_passage_660004606 + 1
    SAUT P_SMS_LONG
  FINSI
FINSI

# FIN BOUCLE SMS_long ou XMS_multi avec recordtype 0x13 (type=0x11), recordtype 0x3C (type=0x30) ***********
#***********************************************************************************************************

#G2R1 lot1 DEBUT Boucle cras GPRS gros volume G2R1

POINT GROS_VOLUME

SI GPRS_grosvolume_660004606
ALORS
  critere_660004606=DISTRIBUTION_SPECIALE_660004606
  SI (i_dup_art_id(g_iartout,g_iartout2))
  ALORS
    #trace("[Tcb_dis]ERREUR envoi distri errone i_dup_art_id g_iartout2")
    code_errone_660004606 = 0xA0D0
    code_errone_660004606 = code_errone_660004606 + EFFICACE_660004606
    erreur_660004606 = i_PlvMessEmettre(7502,2,g_iartin,"",2,code_errone_660004606, C_Article_660004606, 0)
    SAUT DISTRI_ERR
  FINSI

  POINT DECOUPAGE

  Indice_grosvolume_660004606 = Indice_grosvolume_660004606 + 1

  #V4t35.2 occurenceNb
  erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::occurenceNb,Indice_grosvolume_660004606)

  Volume_restantMo_660004606 = trvolumeMo_660004606 - ((Indice_grosvolume_660004606 - 1) * Vol_Max_GPRS_660004606)

  SI GPRS_grosvolume_660004606
  ALORS
    #V3t1.4 DATE
    #DATE         :-      :-      :1VAL :DATE
    erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::DATE,ICAR_ABS_660004606+Indice_grosvolume_660004606 - 1)

    #QC343 Correction estalloc en date ICAR_ABS+Indice_grosvolume - 1
    #V3t7 estalloc

    erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::estalloc,ICAR_ABS_660004606+Indice_grosvolume_660004606 - 1)

  FINSI

  #V3t1.6  duree

  SI (i_valid_field_n(g_iartin, $Tcb::DUREE))
  ALORS
    SI GPRS_grosvolume_660004606
    ALORS
      erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::DUREE,duree_660004606/Nb_cras_decoupes_660004606)
    FINSI
  SINON
    erreur_660004606 = i_set_art_field(g_iartout, $Tdpvgsm::DUREE,0x00)
  FINSI

  # V4t20.10.1 totVolOut
  SI GPRS_grosvolume_660004606
  ALORS
    SI (Indice_grosvolume_660004606 == Nb_cras_decoupes_660004606)
    ALORS
      erreur_660004606 = i_set_art_field(g_iartout9, $Conv_URS::DataVolumexx,(Volume_restantMo_660004606 * 0x100000 + trvolumeMoReste_660004606))
    SINON
      erreur_660004606 = i_set_art_field(g_iartout9, $Conv_URS::DataVolumexx,Vol_Max_GPRS_660004606  * 0x100000)
    FINSI
  FINSI

  erreur_660004606 = i_dup_chp_1val(g_iartout9, g_iartout, $Conv_URS::totVolxx, $Tdpvgsm::totVolOut)

  SI (Indice_grosvolume_660004606 == 1)

  ALORS
    erreur_660004606 = aiguillage2_660004590 (g_iartin, g_iartout, critere_660004606, Multidistribution_Non_660004606)
  SINON
    erreur_660004606 = aiguillage2_660004590 (g_iartin, g_iartout, critere_660004606, Multidistribution_Oui_660004606)
  FINSI

  SI  erreur_660004606 == TRAI_REDISTRIBUTION_660004606
  ALORS
    trace ("[Tcb_dis] Stockage en redistribution")
    SAUT FIN_RDT
  FINSI

  SI erreur_660004606 == TRAI_KO_660004606
  ALORS
    trace1( "[Tcb_dis] DC du %d eme decoupage errone",Indice_grosvolume_660004606)
    SAUT DISTRI_ERR
  FINSI

  SI erreur_660004606 == TRAI_OK_660004606
  ALORS
    dcOK_660004606 = VRAI_660004606
  FINSI

  SI (Indice_grosvolume_660004606 < Nb_cras_decoupes_660004606)
  ALORS
    SI (i_dup_art_id(g_iartout2,g_iartout))
    ALORS
      trace("[Tcb_dis]ERREUR envoi distri errone i_dup_art_id g_iartout2 g_iartout")
      code_errone_660004606 = 0xA0D0
      code_errone_660004606 = code_errone_660004606 + EFFICACE_660004606
      erreur_660004606 = i_PlvMessEmettre(7502,2,g_iartin,"",2,code_errone_660004606, C_Article_660004606, 0)
      SAUT DISTRI_ERR
    FINSI
    SAUT DECOUPAGE
  SINON
    SAUT DISTRI_FIN
  FINSI
FINSI
#***************************************************************************************************
# FIN Boucle cras GPRS gros volume G2E1 avec  recordtype == 0x90  && TransactionTy2 == FAUX && GPRS_grosvolume = 1
#****************************************************************************************************


POINT DISTRI_FIN
# SI aucun DC DPV33 de destinataires n'est OK => envoi de g_1artin dans les errones
SI dcOK_660004606 == FAUX_660004606
ALORS
  trace("<<<__LINE__<<<__FILE__<<< aucun DC DPV de destinataires n est OK => envoi de g_1artin dans les errones")
  code_errone_660004606 = 0xA0B0
  code_errone_660004606 = code_errone_660004606 + EFFICACE_660004606
  erreur_660004606 = i_PlvMessEmettre(7500,2,g_iartin,"",3,code_errone_660004606,C_Article_660004606,recordtype_660004606)
  SAUT DISTRI_ERR
FINSI
RETOUR TRAIT_OK

############################################################################
# Stockage en Errone (si aucun DC sortie DPV33 n'est bon)
############################################################################
POINT DISTRI_ERR
trace( "Stockage en errone de distribution")
res_660004606 = i_make_art_rej(g_iartin, g_iartout8, 0)
res_660004606 = i_stocke_art( g_iartout8, 0, PT_ERRONE, 0)
RETOUR TRAIT_OK

############################################################################
# Fin P_CODE DISTRI si redistribution
############################################################################
POINT FIN_RDT
RETOUR TRAIT_OK

#---------------------------------------FIN Tcb_dis.src-------------------
