# Fonction PCODE ID = 860026233
REGISTRE ENTIER valeur
REGISTRE ARTOBJ artobj

################################################################################
# Module : CtrlDede.src
# controle des champs de DEDE
#    - des bits EFGH de DEDE_INF  ( A B C D E F G H = 0 0 0 0 1 1 1 1 )  = 0x0F
#      Bits EFGH = 0000 reserve
#    - de DEDE_NUM evaluation de DEDE_DIST_N possible (Codage DCB, bourrage 0xF)
################################################################################


REGISTRE ENTIER code_erreur
REGISTRE ENTIER erreur

# indices du champ dede
REGISTRE ENTIER ic_dede
REGISTRE ENTIER ic_longueur
REGISTRE ENTIER ic_dede_inf
REGISTRE ENTIER ic_dede_num
REGISTRE ENTIER dede_inf
REGISTRE ENTIER dede_num
REGISTRE ENTIER dede_num_longueur

# codes de rejet
DEFINITION ERR_SYNTAX   1
DEFINITION ERR_SEMANT   2
DEFINITION ERR_EXCLUSIF 3
DEFINITION ERR_TRANSAC  4


#
# recuperation des valeurs d'entree
#

valeur = depilerENTIER()
artobj = depilerARTOBJ()
trace1("distribution - Debut CtrlDede valeur %d", valeur)
# code_erreur initialise a 0 (pas d'erreur)
code_erreur = TRAIT_OK


#
# Identifier DEDE (de 1 a 6)
#
SI ( valeur == 1 )
ALORS
     # 1er dede (indice du champ dans l'article)
     # ic_dede = i_get_field_num(artobj, "T3dede1" )
     # SI ( ic_dede != 0 )
     # ALORS
     #      RETOUR code_erreur
     # FINSI

     ic_dede     = 74
SINON
     SI ( valeur == 2 )
     ALORS
          # 2e dede (indice du champ dans l'article)
          # ic_dede = i_get_field_num(artobj, "T3dede2")
          ic_dede     = 102
     SINON
          SI ( valeur == 3 )
          ALORS
               # 3e dede (indice du champ dans l'article)
               # ic_dede = i_get_field_num(artobj, "T3dede3")
               ic_dede     = 130
          SINON
               SI ( valeur == 4 )
               ALORS
                    # 4e dede (indice du champ dans l'article)
                    # ic_dede = i_get_field_num(artobj, "T3dede4")
                    ic_dede     = 158
               SINON
                    SI ( valeur == 5 )
                    ALORS
                         # 5e dede (indice du champ dans l'article)
                         # ic_dede = i_get_field_num(artobj, "T3dede5")
                         ic_dede     = 186
                    SINON
                         # 6e dede (indice du champ dans l'article)
                         # ic_dede = i_get_field_num(artobj, "T3dede6")
                         ic_dede     = 214
                    FINSI
               FINSI
          FINSI
     FINSI
FINSI

###################################################################################
#  Tester l'existence de DEDE - Type (T3 L3)
###################################################################################
SI ( i_valid_field_n( artobj, ic_dede) )
ALORS

     ic_longueur = ic_dede + 1
     ic_dede_inf = ic_dede + 2
     ic_dede_num = ic_dede + 3

     dede_num_longueur = i_get_art_field(artobj, ic_longueur)
     # longueur reelle de dede_num
     dede_num_longueur = dede_num_longueur - 1

     ##############################################################################
     #  Tester la validation de DEDE_INF nature de service - Type numerique
     ##############################################################################
     dede_inf = i_get_art_field(artobj, ic_dede_inf)
     SI ((dede_inf & 0x0F) != 0x00)
     ALORS
          trace1("Codage du champs TRAUDE%d/DEDE/INF incorrect", valeur)
          erreur = i_PlvMessEmettre(7502,1,artobj,"",0,0,0,0)
          code_erreur = ERR_SEMANT
     SINON
          #########################################################################
          # Evaluation de DEDE_NUM NAS (Codage DCB et bourrage a 0xF) -Type tableau
          #########################################################################

          trace1("Appel CtrlDCB ic_dede_num %d", ic_dede_num)
          trace1("Appel CtrlDCB dede_num_longueur %d", dede_num_longueur)

          code_erreur = CtrlDCB_860026233(artobj, ic_dede_num, 2*dede_num_longueur, 1)

     FINSI

FINSI

RETOUR code_erreur


