# Fonction PCODE ID = 660004265
REGISTRE ENTIER multidistribution
REGISTRE POINTEUR IMSI
REGISTRE ENTIER CRA_A_ENRICHIR
REGISTRE ENTIER type_cra
REGISTRE ENTIER date_trait_cra
REGISTRE ENTIER date_fin_cra
REGISTRE ARTOBJ article
REGISTRE ENTIER instanceECC
REGISTRE POINTEUR str_ECC

DEFINITION    Cpt1500   1500
DEFINITION    Cpt1502   1502
DEFINITION    Cpt1510   1510
DEFINITION    Oui   1
DEFINITION    MODULE    0xA000
DEFINITION    ERR_TabExt  0x0A0
DEFINITION    ERR_valo    0x020
DEFINITION    ERR_dup     0x0D0
DEFINITION    ERR_synt    0x070

REGISTRE POINTEUR pt_ECCdist
REGISTRE POINTEUR pt_BUF1
REGISTRE POINTEUR pt_BUF2
REGISTRE POINTEUR pt_BUF3
REGISTRE POINTEUR pt_format
REGISTRE POINTEUR pt_dcb_IMSI
REGISTRE ENTIER   CRA_A_ENRICHIR_ENRICHISSEMENT
REGISTRE ENTIER   TRAI_KO
REGISTRE ENTIER   TRAI_OK
REGISTRE ENTIER   res
REGISTRE ENTIER   instRJP
REGISTRE ENTIER   lg_imsi
REGISTRE ENTIER   erreur
REGISTRE ENTIER   lg_MSISDN
REGISTRE ENTIER   EFFICACE
REGISTRE ENTIER     ERROR
REGISTRE ENTIER     code_rejet
REGISTRE ENTIER   val_GretaTag
REGISTRE ENTIER   val_GMSCForwTerm
REGISTRE ENTIER   val_FilterNumber
REGISTRE ENTIER   flag_supp
# Debut modif duplication
REGISTRE ENTIER   FormatDist
# Fin modif duplication
REGISTRE ENTIER   RedirectReason

multidistribution = depilerENTIER()
IMSI = depilerPOINTEUR()
CRA_A_ENRICHIR = depilerENTIER()
type_cra = depilerENTIER()
date_trait_cra = depilerENTIER()
date_fin_cra = depilerENTIER()
article = depilerARTOBJ()
instanceECC = depilerENTIER()
str_ECC = depilerPOINTEUR()

pt_BUF1 = "pt_BUF1"
pt_BUF2 = "pt_BUF2"
pt_BUF3 = "pt_BUF356156516516516516151615116156115161516151615161516151615611516151615161511615611561356156516516516516151615116156115161516151615161516151615611516151615161511615611561"

i_strcpy(pt_BUF1,"")
i_strcpy(pt_BUF2,"")
i_strcpy(pt_BUF3,"")

pt_format = "P_Oui_TLVxx"
pt_dcb_IMSI = "9988776655443321"
CRA_A_ENRICHIR_ENRICHISSEMENT = 0
TRAI_KO = -1
TRAI_OK = 0
EFFICACE = 1
code_rejet = 0
ERROR = 0
val_GretaTag = -1
val_GMSCForwTerm = -1
val_FilterNumber = -1
flag_supp = 0

# Debut modif duplication
# Valeur des bits du champ FormatDist de l'enveloppe
# bit A : le CRA a deja ete distribue a une application principale
# bit B : la duplication du CRA vers le format 4.0 a ete faite precedemment
# bit C :                "                     3.3                "
# bit D :                "                     3.2                "
# bit H :                "                     2.8                "
# les bits E, F et G (anciennement marque de duplication vers les formats 3.1, 3.0 et 2.9) sont disponibles
#  RQ : l optimisation de la duplication en exploitant ce champ n est realisee que pour le 1er "troncon" d un CRA multidistribue

FormatDist = i_get_attr_val("FormatDist")
SI FormatDist == -1
ALORS
  FormatDist = 0
FINSI

SI (multidistribution == 1)
ALORS
  FormatDist = FormatDist & 0x80
FINSI
# Fin modif duplication

# Recherche de l ECC dans la table extrene Format ECC :
pt_format = i_get_tab_field("Format_ECC", date_trait_cra, str_ECC)

# Si erreur lors de la recherche dans la table retour KO
# QC776 emission alarme 7516
SI (pt_format == g_inull)
ALORS
# QC 796 pas de stockage en errone et alarme differenciee si le CRA a deja ete distribue a une application principale (bit A de FormatDist a 1)
  SI ( FormatDist & 0x80 ) == 0x80
  ALORS
    erreur = i_format_str2( pt_BUF3, "%s%s",  str_ECC, " non trouve dans la table")
    erreur = i_PlvMessEmettre(7517, 2, g_iartin, "", 1, pt_BUF3, 0, 0)
    RETOUR TRAI_OK
  SINON
    ERROR = ERR_TabExt
    code_rejet = MODULE + ERROR + EFFICACE
    erreur = i_format_str2( pt_BUF3, "%s%s","Non trouve dans Format_ECC : ", str_ECC)
    erreur = i_PlvMessEmettre(7516, 2, g_iartin, "", 2, code_rejet, pt_BUF3, 0)
    RETOUR TRAI_KO
  FINSI
FINSI


# Debut modif duplication

# ECC gros volumes EIRGSM, I2GGSM, IRIGSM
# Le pointeur pt_ECCdist ne doit pas etre initialise
pt_ECCdist = "1111"
#trace2("<<<__LINE__<<<__FILE<< pt_ECCdist=<%s>, str_ECC=<%s>",pt_ECCdist,str_ECC)
SI ( i_strcmp(str_ECC, "EIRGSM")==0 || i_strcmp(str_ECC, "I2GGSM")==0 || i_strcmp(str_ECC, "IRIGSM")==0 )
ALORS

  SI ( i_strcmp(str_ECC, "EIRGSM")==0 )
  ALORS
    # QC726
    res = i_LireInstanceECC("EIR2GSM")
    SI (!res)
    ALORS
      SAUT FIN_ECCgrosVOLUME
    FINSI
    SI (i_strplcmp( pt_ECCdist, "1", 0, 1) == 0)
    ALORS
      i_strcpy(pt_BUF1,"2")
      i_get_sub_str (pt_ECCdist, 1, -1, pt_BUF2)
      erreur= i_format_str2( pt_ECCdist, "%s%s", pt_BUF1, pt_BUF2)
      instanceECC = res
    SINON
      i_strcpy(pt_BUF1,"1")
      i_get_sub_str (pt_ECCdist, 1, -1, pt_BUF2)
      erreur= i_format_str2( pt_ECCdist, "%s%s", pt_BUF1, pt_BUF2)
    FINSI
  FINSI

  SI ( i_strcmp(str_ECC, "I2GGSM")==0 )
  ALORS
    # QC726
    res = i_LireInstanceECC("I2G2GSM")
    SI (!res)
    ALORS
      SAUT FIN_ECCgrosVOLUME
    FINSI
    SI (i_strplcmp( pt_ECCdist, "1", 2, 1) == 0)
    ALORS
      i_get_sub_str (pt_ECCdist, 0, 1, pt_BUF1)
      i_get_sub_str (pt_ECCdist, 3, -1, pt_BUF2)
      erreur= i_format_str2( pt_ECCdist, "%s2%s", pt_BUF1, pt_BUF2)
      instanceECC = res
    SINON
      i_get_sub_str (pt_ECCdist, 0, 1, pt_BUF1)
      i_get_sub_str (pt_ECCdist, 3, -1, pt_BUF2)
      erreur= i_format_str2( pt_ECCdist, "%s1%s", pt_BUF1, pt_BUF2)
    FINSI
  FINSI

  SI ( i_strcmp(str_ECC, "IRIGSM")==0 )
  ALORS
    # QC726
    res = i_LireInstanceECC("IRI2GSM")
    SI (!res)
    ALORS
      SAUT FIN_ECCgrosVOLUME
    FINSI
    SI (i_strplcmp( pt_ECCdist, "1", 3, 1) == 0)
    ALORS
      i_get_sub_str (pt_ECCdist, 0, 2, pt_BUF1)
      i_strcpy(pt_BUF2,"2")
      erreur= i_format_str2( pt_ECCdist, "%s%s", pt_BUF1, pt_BUF2)
      instanceECC = res
    SINON
      i_get_sub_str (pt_ECCdist, 0, 2, pt_BUF1)
      i_strcpy(pt_BUF2,"1")
      erreur= i_format_str2( pt_ECCdist, "%s%s", pt_BUF1, pt_BUF2)
    FINSI
  FINSI

FINSI
# / ECC gros volumes
POINT FIN_ECCgrosVOLUME

# G3R2 : le format en entree devient le 4.0
SI ( FormatDist & 0x40 ) != 0x40
ALORS
  # QC 373 erreur = i_dup_art_id(article, g_iartout2)
  erreur = i_dup_art_tab(article, g_iartout2, "Tdpvgsm")
  FormatDist = FormatDist | 0x40
  erreur = i_set_attr_val("FormatDist", FormatDist)
#debutpk-------------------
  #Suppression du champ T3t99 si informations non pertinantes
  SI (i_valid_field(g_iartout2,"T3t99"))
  ALORS
    flag_supp = 0
    val_GretaTag = i_get_art_field(g_iartout2, $Tdpvgsm::GretaTag)
    val_GMSCForwTerm = i_get_art_field(g_iartout2, $Tdpvgsm::GMSCForwTerm)
    val_FilterNumber = i_get_art_field(g_iartout2, $Tdpvgsm::FilterNumber)

    SI (val_GretaTag==0xFF)
    ALORS
      flag_supp = flag_supp + 1
      erreur=i_supprChamp(g_iartout2,"T4t99.1")
    FINSI

    SI (val_GMSCForwTerm==0xFF)
    ALORS
      flag_supp = flag_supp + 1
      erreur=i_supprChamp(g_iartout2,"T4t99.2")
    FINSI

    SI (val_FilterNumber==0)
    ALORS
      flag_supp = flag_supp + 1
      erreur=i_supprChamp(g_iartout2,"T4t99.3")
    FINSI

    SI (flag_supp == 3)
    ALORS
      erreur=i_supprChamp(g_iartout2,"T3t99")
    FINSI
  FINSI

#finpk---------------------
FINSI
# Fin modif duplication

# Si CRA a enrichir et enrichissement a faire pour l ECC
# Creation de l article format pivot enrichi avec l IMSI
#QC458
SI (CRA_A_ENRICHIR == Oui)
ALORS
  CRA_A_ENRICHIR_ENRICHISSEMENT = 1
  lg_imsi = i_conv_ascii_dcb(IMSI, pt_dcb_IMSI)
  erreur = i_memcpy_art_field_n(g_iartout2, $Tdpvgsm::IMSI, pt_dcb_IMSI, lg_imsi)

FINSI


# Format TLV 4.0
# Si CRA a enrichir et enrichissement a faire pour l ECC

SI ( !i_strplcmp(pt_format, "TLV40", 6, 5) )
ALORS
  res = i_stocke_art_iecc(g_iartout2, instanceECC)
  SI (i_strplcmp(pt_format, "P_", 0, 2) == 0)
  ALORS
    FormatDist = FormatDist | 0x80
    erreur = i_set_attr_val("FormatDist", FormatDist)
  FINSI

  SI (multidistribution)
  ALORS
    # comptage du CRA par ECC
    erreur = i_incr_cpt(Cpt1500, type_cra, instanceECC, 0, date_fin_cra, 1)
  SINON
    # comptage du CRA par ECC
    erreur = i_incr_cpt(Cpt1502, type_cra, instanceECC, 0, date_trait_cra, 1)
    erreur = i_incr_cpt(Cpt1510, type_cra, instanceECC, 0, date_fin_cra, 1)
  FINSI

  #erreur comptage cra
  SI (erreur < 0 )
  ALORS
    trace1("ERR comptage CRA TLV 4.0 : err = <%d>", res)
    ERROR = ERR_valo
    code_rejet = MODULE + ERROR + EFFICACE
    erreur = i_PlvMessEmettre(7520, 2, g_iartin, "", 2, code_rejet, "TLV 4.0", 0)
    RETOUR TRAI_KO
  FINSI
  RETOUR TRAI_OK
FINSI


# Format TLV 3.3
# Si CRA a enrichir et enrichissement a faire pour l ECC

SI ( !i_strplcmp(pt_format, "TLV33", 6, 5) )
ALORS
  SI ( FormatDist & 0x01 ) != 0x01
  ALORS
    erreur = i_dup_art_tab(g_iartout2, g_iartout14, "Tdpvgsm33")

    SI ( erreur != 0)
    ALORS
      trace1("ERR duplication vers 2-14 Tdpvgsm33 : err = <%d>", erreur)
      ERROR = ERR_dup
      code_rejet = MODULE + ERROR + EFFICACE
      erreur = i_PlvMessEmettre(7502,2,g_iartin,"",2, code_rejet, "MiseAuFormat DPV33", 0)
      RETOUR TRAI_KO
    FINSI

#G3R2 si V3t65 present => a recopier dans V3t1.17
    SI (i_valid_field_n(g_iartout2, $Tdpvgsm::RedirectReason))
    ALORS
      RedirectReason = i_get_art_field(g_iartout2, $Tdpvgsm::RedirectReason)
      erreur = i_set_art_field(g_iartout14, $Tdpvgsm33::chgcar, RedirectReason)
    FINSI
    FormatDist = FormatDist | 0x01
    SI (i_strplcmp(pt_format, "P_", 0, 2) == 0)
    ALORS
      FormatDist = FormatDist | 0x80
    FINSI

    erreur = i_set_attr_val("FormatDist", FormatDist)
  FINSI
  res = i_stocke_art_iecc(g_iartout14, instanceECC)
  SI (multidistribution)
  ALORS
    # comptage du CRA par ECC
    erreur = i_incr_cpt(Cpt1500, type_cra, instanceECC, 0, date_fin_cra, 1)
  SINON
    # comptage du CRA par ECC
    erreur = i_incr_cpt(Cpt1502, type_cra, instanceECC, 0, date_trait_cra, 1)
    erreur = i_incr_cpt(Cpt1510, type_cra, instanceECC, 0, date_fin_cra, 1)
  FINSI

  #erreur comptage cra
  SI (erreur < 0 )
  ALORS
    trace1("ERR comptage CRA TLV 3.3 : err = <%d>", res)
    ERROR = ERR_valo
    code_rejet = MODULE + ERROR + EFFICACE
    erreur = i_PlvMessEmettre(7520, 2, g_iartin, "", 2, code_rejet, "TLV 3.3", 0)
    RETOUR TRAI_KO
  FINSI
  RETOUR TRAI_OK
FINSI


# Format TLV 3.2
# Si CRA a enrichir et enrichissement a faire pour l ECC

SI ( !i_strplcmp(pt_format, "TLV32", 6, 5) )
ALORS
  SI (CRA_A_ENRICHIR_ENRICHISSEMENT)
  ALORS
    # Debut modif duplication
    SI ( FormatDist & 0x02 ) != 0x02
    ALORS
      erreur = i_dup_art_tab(g_iartout2, g_iartout4, "Tdpvgsm32")
      SI ( erreur != 0)
      ALORS
        trace1("ERR duplication vers Tdpvgsm32 2-4 : err = <%d>", erreur)
        ERROR = ERR_dup
        code_rejet = MODULE + ERROR + EFFICACE
        erreur = i_PlvMessEmettre(7502,2,g_iartin,"",2, code_rejet, "MiseAuFormat DPV32", 0)
        RETOUR TRAI_KO
      FINSI
      #QC803/
      #G3R2 si V3t65 present => a recopier dans V3t1.17
      SI (i_valid_field_n(g_iartout2, $Tdpvgsm::RedirectReason))
      ALORS
        RedirectReason = i_get_art_field(g_iartout2, $Tdpvgsm::RedirectReason)
        erreur = i_set_art_field(g_iartout4, $Tdpvgsm32::chgcar, RedirectReason)
      FINSI
      #/QC803

      FormatDist = FormatDist | 0x02
      SI (i_strplcmp(pt_format, "P_", 0, 2) == 0)
      ALORS
        FormatDist = FormatDist | 0x80
      FINSI
      erreur = i_set_attr_val("FormatDist", FormatDist)
    FINSI
    res = i_stocke_art_iecc(g_iartout4, instanceECC)
    # Fin modif duplication
  SINON
    # Debut modif duplication
    SI ( FormatDist & 0x02 ) != 0x02
    ALORS
      erreur = i_dup_art_tab(article, g_iartout4, "Tdpvgsm32")
      SI ( erreur != 0)
      ALORS
        trace1("ERR duplication vers Tdpvgsm32 1-4 : err = <%d>", erreur)
        ERROR = ERR_dup
        code_rejet = MODULE + ERROR + EFFICACE
        erreur = i_PlvMessEmettre(7502,2,g_iartin,"",2, code_rejet, "MiseAuFormat DPV32", 0)
        RETOUR TRAI_KO
      FINSI
      #G3R2 si V3t65 present => a recopier dans V3t1.17
      SI (i_valid_field_n(g_iartout2, $Tdpvgsm::RedirectReason))
      ALORS
        RedirectReason = i_get_art_field(g_iartout2, $Tdpvgsm::RedirectReason)
        erreur = i_set_art_field(g_iartout4, $Tdpvgsm32::chgcar, RedirectReason)
      FINSI

      FormatDist = FormatDist | 0x02
      SI (i_strplcmp(pt_format, "P_", 0, 2) == 0)
      ALORS
        FormatDist = FormatDist | 0x80
      FINSI
      erreur = i_set_attr_val("FormatDist", FormatDist)
    FINSI
    res = i_stocke_art_iecc(g_iartout4, instanceECC)
    # Fin modif duplication
  FINSI

  SI (multidistribution)
  ALORS
    # comptage du CRA par ECC
    erreur = i_incr_cpt(Cpt1500, type_cra, instanceECC, 0, date_fin_cra, 1)
  SINON
    # comptage du CRA par ECC
    erreur = i_incr_cpt(Cpt1502, type_cra, instanceECC, 0, date_trait_cra, 1)
    erreur = i_incr_cpt(Cpt1510, type_cra, instanceECC, 0, date_fin_cra, 1)
  FINSI

  #erreur comptage cra
  SI (erreur < 0 )
  ALORS
    trace1("ERR comptage CRA TLV 3.2 : err = <%d>", res)
    ERROR = ERR_valo
    code_rejet = MODULE + ERROR + EFFICACE
    erreur = i_PlvMessEmettre(7520, 2, g_iartin, "", 2, code_rejet, "TLV 3.2", 0)
    RETOUR TRAI_KO
  FINSI
  RETOUR TRAI_OK
FINSI


# Format TLV 2.8
# Si CRA a enrichir et enrichissement a faire pour l ECC

SI ( !i_strplcmp(pt_format, "TLV28", 6, 5) )
ALORS

  SI ((type_cra == 0x30)||(type_cra == 0x31)||(type_cra == 0x32)||(type_cra == 0x33)||(type_cra == 0x34)
    ||(type_cra == 0x35)||(type_cra == 0x36)||(type_cra == 0x37)||(type_cra == 0x38)
    ||(type_cra == 0x39)||(type_cra == 0x3A)||(type_cra == 0x3B)||(type_cra == 0x41)
    ||(type_cra == 0x42)||(type_cra == 0x43)||(type_cra == 0x45)||(type_cra == 0x50)
    ||(type_cra == 0x61)||(type_cra == 0x62)||(type_cra == 0x63)||(type_cra == 0x70)||(type_cra == 0x80))
  ALORS
    SI (i_strplcmp(pt_format, "P_", 0, 2) == 0)
    ALORS
      instRJP = i_LireInstanceECC("RJPGSM")
      res = i_stocke_art_iecc(article, instRJP)

      SI (multidistribution)
      ALORS
        # comptage du CRA par ECC
        erreur = i_incr_cpt(Cpt1500, type_cra, instRJP, 0, date_fin_cra, 1)
      SINON
        # comptage du CRA par ECC
        erreur = i_incr_cpt(Cpt1502, type_cra, instRJP, 0, date_trait_cra, 1)
        erreur = i_incr_cpt(Cpt1510, type_cra, instRJP, 0, date_fin_cra, 1)
      FINSI

      #erreur comptage cra
      SI (erreur < 0 )
      ALORS
        trace1("ERR comptage CRA TLV 2.8 : err = <%d>", res)
        ERROR = ERR_valo
        code_rejet = MODULE + ERROR + EFFICACE
        erreur = i_PlvMessEmettre(7520, 2, g_iartin, "", 2, code_rejet, "TLV 2.8", 0)
        RETOUR TRAI_KO
      FINSI
      RETOUR TRAI_OK

    SINON
      RETOUR TRAI_OK
    FINSI
  SINON

    SI (CRA_A_ENRICHIR_ENRICHISSEMENT)
    ALORS
      # Debut modif duplication
      SI ( FormatDist & 0x20 ) != 0x20
      ALORS
        erreur = i_dup_art_tab(g_iartout2, g_iartout12, "Tdpvgsm28")
        SI ( erreur != 0)
        ALORS
          trace1("ERR duplication vers 2-12 Tdpvgsm28 : err = <%d>", erreur)
          ERROR = ERR_dup
          code_rejet = MODULE + ERROR + EFFICACE
          erreur = i_PlvMessEmettre(7502,2,g_iartin,"",2, code_rejet, "MiseAuFormat DPV28", 0)
          RETOUR TRAI_KO
        FINSI
        FormatDist = FormatDist | 0x20
        SI (i_strplcmp(pt_format, "P_", 0, 2) == 0)
        ALORS
          FormatDist = FormatDist | 0x80
        FINSI
        erreur = i_set_attr_val("FormatDist", FormatDist)
      FINSI
      # Fin modif duplication
      SI ((i_valid_field_n(g_iartout12, $Tdpvgsm28::PDPAddr) == 0) &&
        (i_valid_field_n(g_iartout12, $Tdpvgsm28::accPointName3) == 0))
      ALORS
        erreur = i_retrait_tlv(g_iartout12, "T3t19", "")
        SI (erreur != 0)
        ALORS
          trace1("TLV28: Erreur retrait_tlv T3t19: %d", erreur)
          ERROR = ERR_dup
          code_rejet = MODULE + ERROR + EFFICACE
          erreur = i_PlvMessEmettre(7521,2,g_iartin,"",2, code_rejet, "T3t19", 0)
          RETOUR TRAI_KO
        FINSI
      FINSI
      SI (i_valid_field_n(article, $Tdpvgsm::MSISDN) )
      ALORS
        lg_MSISDN = i_get_art_field(article, $Tdpvgsm::MSISDN - 1)
        SI (lg_MSISDN > 8)
        ALORS
          erreur = i_resize_tlv(g_iartout12, "T3t4", "MSISDN", 64)
          SI (erreur != 0)
          ALORS
            trace1("TLV28: Erreur resize_tlv MSISDN: %d", erreur)
            ERROR = ERR_dup
            code_rejet = MODULE + ERROR + EFFICACE
            erreur = i_PlvMessEmettre(7522,2,g_iartin,"",2, code_rejet, "T3t4", 0)
            RETOUR TRAI_KO
          FINSI
        FINSI
      FINSI
      res = i_stocke_art_iecc(g_iartout12, instanceECC)
    SINON
      # Debut modif duplication
      SI ( FormatDist & 0x20 ) != 0x20
      ALORS
        erreur = i_dup_art_tab(article, g_iartout12, "Tdpvgsm28")
        SI ( erreur != 0)
        ALORS
          trace1("ERR duplication vers Tdpvgsm28 : err = <%d>", erreur)
          ERROR = ERR_dup
          code_rejet = MODULE + ERROR + EFFICACE
          erreur = i_PlvMessEmettre(7502,2,g_iartin,"",2, code_rejet, "MiseAuFormat DPV28", 0)
          RETOUR TRAI_KO
        FINSI
        FormatDist = FormatDist | 0x20
        SI (i_strplcmp(pt_format, "P_", 0, 2) == 0)
        ALORS
          FormatDist = FormatDist | 0x80
        FINSI
        erreur = i_set_attr_val("FormatDist", FormatDist)
      FINSI
      # Fin modif duplication
      SI ((i_valid_field_n(g_iartout12, $Tdpvgsm28::PDPAddr) == 0) &&
        (i_valid_field_n(g_iartout12, $Tdpvgsm28::accPointName3) == 0))
      ALORS
        erreur = i_retrait_tlv(g_iartout12, "T3t19", "")
        SI (erreur != 0)
        ALORS
          trace1("TLV28: Erreur retrait_tlv T3t19: %d", erreur)
          ERROR = ERR_dup
          code_rejet = MODULE + ERROR + EFFICACE
          erreur = i_PlvMessEmettre(7521,2,g_iartin,"",2, code_rejet, "T3t19", 0)
          RETOUR TRAI_KO
        FINSI
      FINSI
      SI (i_valid_field_n(article, $Tdpvgsm::MSISDN) )
      ALORS
        lg_MSISDN = i_get_art_field(article, $Tdpvgsm::MSISDN - 1)
        SI (lg_MSISDN > 8)
        ALORS
          erreur = i_resize_tlv(g_iartout12, "T3t4", "MSISDN", 64)
          SI (erreur != 0)
          ALORS
            trace1("TLV28: Erreur resize_tlv MSISDN: %d", erreur)
            ERROR = ERR_dup
            code_rejet = MODULE + ERROR + EFFICACE
            erreur = i_PlvMessEmettre(7522,2,g_iartin,"",2, code_rejet, "T3t4", 0)
            RETOUR TRAI_KO
          FINSI
        FINSI
      FINSI
      res = i_stocke_art_iecc(g_iartout12, instanceECC)
    FINSI

    SI (multidistribution)
    ALORS
      # comptage du CRA par ECC
      erreur = i_incr_cpt(Cpt1500, type_cra, instanceECC, 0, date_fin_cra, 1)
    SINON
      # comptage du CRA par ECC
      erreur = i_incr_cpt(Cpt1502, type_cra, instanceECC, 0, date_trait_cra, 1)
      erreur = i_incr_cpt(Cpt1510, type_cra, instanceECC, 0, date_fin_cra, 1)
    FINSI

    #erreur comptage cra
    SI (erreur < 0 )
    ALORS
      trace1("ERR comptage CRA TLV 2.8 : err = <%d>", res)
      ERROR = ERR_valo
      code_rejet = MODULE + ERROR + EFFICACE
      erreur = i_PlvMessEmettre(7520, 2, g_iartin, "", 2, code_rejet, "TLV 2.8", 0)
      RETOUR TRAI_KO
    FINSI
    RETOUR TRAI_OK
  FINSI
FINSI


#G3R3 lot3 Free
# Format FREE pour FREE ou MVNO (LICIA-FULL, OMEA)
# QC1077
SI ( !i_strplcmp(pt_format, "FREE", 6, 4) )
ALORS
  SI ( FormatDist & 0x01 ) != 0x01
  ALORS
    SI (!i_valid_field_n(g_iartout2, $Tdpvgsm::MSISDN))
    ALORS
      trace("ERR : FREEGSM, MSISDN obligatoire est absent")
      ERROR = ERR_synt
      code_rejet = MODULE + ERROR + EFFICACE
      #erreur = i_PlvMessEmettre(7523, 2, g_iartin, "", 3, code_rejet,"MiseAuFormat", "FREEGSM")
      erreur = i_PlvMessEmettre(7523, 2, g_iartin, "", 3, code_rejet,"MiseAuFormat", str_ECC)
      RETOUR TRAI_KO
    FINSI

    erreur = i_dup_art_tab(g_iartout2, g_iartout5, "TdpvgsmFree")
    SI ( erreur != 0)
    ALORS
      trace1("ERR duplication vers dpvFREE : err = <%d>", erreur)
      ERROR = ERR_dup
      code_rejet = MODULE + ERROR + EFFICACE
      #erreur = i_PlvMessEmettre(7519, 2, g_iartin, "", 3, code_rejet, "MiseAuFormat", "FREEGSM")
      erreur = i_PlvMessEmettre(7519, 2, g_iartin, "", 3, code_rejet, "MiseAuFormat", str_ECC)
      RETOUR TRAI_KO
    FINSI
  FINSI
  res = i_stocke_art_iecc(g_iartout5, instanceECC)

  SI (multidistribution)
  ALORS
    # comptage du CRA par ECC
    erreur = i_incr_cpt(Cpt1500, type_cra, instanceECC, 0, date_fin_cra, 1)
  SINON
    # comptage du CRA par ECC
    erreur = i_incr_cpt(Cpt1502, type_cra, instanceECC, 0, date_trait_cra, 1)
    erreur = i_incr_cpt(Cpt1510, type_cra, instanceECC, 0, date_fin_cra, 1)
  FINSI

  #erreur comptage cra
  SI (erreur < 0 )
  ALORS
    trace1("ERR comptage CRA FREE : err = <%d>", res)
    ERROR = ERR_valo
    code_rejet = MODULE + ERROR + EFFICACE
    #erreur = i_PlvMessEmettre(7520, 2, g_iartin, "", 2, code_rejet, "FREE", 0)
    erreur = i_PlvMessEmettre(7520, 2, g_iartin, "", 2, code_rejet, str_ECC, 0)
    RETOUR TRAI_KO
  FINSI
  RETOUR TRAI_OK
FINSI
#/G5R1


## #G3R6 LICIA-FULL MVNO OMEA
## # FORMAT MVNO
## SI ( !i_strplcmp(pt_format, "MVNO", 6, 4) )
## ALORS
##  SI ( FormatDist & 0x01 ) != 0x01
## ALORS
##
##    SI (!i_valid_field_n(g_iartout2, $Tdpvgsm::MSISDN))
##  ALORS
##      trace("ERR : MVNOGSM, MSISDN obligatoire est absent")
##      ERROR = ERR_synt
##      code_rejet = MODULE + ERROR + EFFICACE
##      erreur = i_PlvMessEmettre(7523, 2, g_iartin, "", 3, code_rejet,"MiseAuFormat", "MVNOGSM")
##      RETOUR TRAI_KO
##    FINSI
##
##    erreur = i_dup_art_tab(g_iartout2, g_iartout5, "TdpvgsmFree")
##    SI ( erreur != 0)
##  ALORS
##      trace1("ERR duplication vers TdpvgsmFree pour MVNO : err = <%d>", erreur)
##      ERROR = ERR_dup
##      code_rejet = MODULE + ERROR + EFFICACE
##      erreur = i_PlvMessEmettre(7519, 2, g_iartin, "", 3, code_rejet, "MiseAuFormat", "MVNOGSM")
##      RETOUR TRAI_KO
##    FINSI
##  FINSI
##  res = i_stocke_art_iecc(g_iartout5, instanceECC)
##
##  SI (multidistribution)
## ALORS
##    # comptage du CRA par ECC
##    erreur = i_incr_cpt(Cpt1500, type_cra, instanceECC, 0, date_fin_cra, 1)
##  SINON
##    # comptage du CRA par ECC
##    erreur = i_incr_cpt(Cpt1502, type_cra, instanceECC, 0, date_trait_cra, 1)
##    erreur = i_incr_cpt(Cpt1510, type_cra, instanceECC, 0, date_fin_cra, 1)
##  FINSI
##
##  #erreur comptage cra
##  SI (erreur < 0 )
## ALORS
##    trace1("ERR comptage CRA MVNO : err = <%d>", res)
##    ERROR = ERR_valo
##    code_rejet = MODULE + ERROR + EFFICACE
##    erreur = i_PlvMessEmettre(7520, 2, g_iartin, "", 2, code_rejet, "MVNO", 0)
##    RETOUR TRAI_KO
##  FINSI
##  RETOUR TRAI_OK
## FINSI
##
## #/G3R6 LICIA-FULL MVNO OMEA



# Format non gere dans le parametrage
# Differenciation a faire entre appli principale et secondaire
SI (i_strplcmp(pt_format, "S_", 0, 2) == 0)
ALORS
# Application secondaire
  erreur = i_format_str2( pt_BUF3, " format DPV <%s> pour ECC <%s> non gere dans le parametrage", pt_format, str_ECC)
  erreur = i_PlvMessEmettre(7517, 2, g_iartin, "", 1, pt_BUF3, 0, 0)
  RETOUR TRAI_OK
SINON
# Application principale
  ERROR = ERR_TabExt
  code_rejet = MODULE + ERROR + EFFICACE
  erreur = i_format_str2( pt_BUF3, " format DPV <%s> pour ECC <%s> non gere dans le parametrage", pt_format, str_ECC)
  erreur = i_PlvMessEmettre(7516, 2, g_iartin, "", 2, code_rejet, pt_BUF3, 0)
  RETOUR TRAI_KO
FINSI

