FVERS = 2
REFOBJET : ID = 860025995 ; ID_INIT = 800009794 ; NOM = Tfe6dc ; VERSION = V54 ; DATE = 10/04/14-12:18:07 ( 1397132287 ) ; CAT = 7 ; ETAT = 0 ; NB_FILS =0 ; ID_FILS = 
ID_EST = 860000099
COMMENT = "25/03/2014 - DRE - G4R6 : Lot2 prise en compte des nouveaux Type Control envoy?s par la base (C+S )  #PKH 09/11/2007 G3R3Cv ajout du REJET6 (14)"
CREATEUR = drey
# DEBUT_CORPS
PCODE_PERE=
####################################################################
# Pcode de TRAITEMENT Tfe6dc
#	article DC VN6 sur faisceau entrant
# En entree: (1er passage et recyclage)
#	Article Tfe6dc (domaine ILA=Lnumeris)
#	Domaine article: Dvn6dc
#
# En sortie:
#       Article OK:
#               Article Tfe6dc (domaine ILA=Lrmobile)
#
#       Article ERRONE:
#               Article Tfe6dc (domaine ILA=Lrmobile)
#
# 21/10/2002 - PSA : FO61 : Modif des indices pour ajout CE
# 03/01/2003 - RBE : Modif. DOM sur i_normal
# 29/04/2003 - RBE : C14 : Utilisation de i_get_art_field au lieu 
#		     de i_get_artobj_attr
# 04/11/2003 - MCH : FO466 : remplacement ajou_tlv par ajoutchampNum
# 02/01/2004 - RBE : Mise a jour des codes erreur pour envoi en errone (code rejet)
# 25/03/2004 - RBE : Inversion dans le code_rejet de efficace et inefficace
# 07/10/2004 - PSA : Cm : FO714  suppression cpt ANO
# 09/05/2005 - JLG : G2R1Ch REJET2
# 09/05/2005 - JLG - FO1276
# 30/05/2005 - JLG THE - Fusion G2R1Ca
# 19/07/2005 - PSA - FO 1386 et 1387 : normalisation  demandeur/demande
# 21/07/2005 - PSA - Cj : traitement Mayotte
# 22/09/2005 - PSA - FO1478
# 25/11/2005 - PKH - G2R2Ca deplacement du test d inefficacite apres la normalisation
# 17/03/2006 - FAL - G2R2Cd Z9
# 27/09/2006 - JLG : G2R2Cv REJET3 (119 enfance maltraitee)
# 10/01/2007 - FAL - FO2086 core lors appel BNC cas duree trop longue 18h en commut et 19h pour PLATINE 
# 06/11/2007 - PKH - G3R3Cv ajout REJET6 dans le cadre des appels 118 PDT & kiosque
# 03/10/2011 - RHE - VerifPcode
# 25/03/2014 - DRE - G4R6 : Lot2 prise en compte des nouveaux Type Control envoy?s par la base (C+S )
####################################################################

#FO2086
DEFINITION	C_Article	"Tfe6dc"

#////////////////////////////////////////////////////////////
# Codes de consultation des parametres de proc_copo 
#////////////////////////////////////////////////////////////
# VerifPcode - RHE # DEFINITION	COD_NBAR	1
# VerifPcode - RHE # DEFINITION	COD_Q		2
# VerifPcode - RHE # DEFINITION	COD_D		3
# VerifPcode - RHE # DEFINITION	COD_C		4
# VerifPcode - RHE # DEFINITION	COD_P		5
# VerifPcode - RHE # DEFINITION	COD_TAXE	6
# VerifPcode - RHE # DEFINITION	COD_CT	7
# VerifPcode - RHE # DEFINITION	COD_HF	8

# Indice interne de la base de comptage pour le telephone
#
DEFINITION	BASE_TELEPHONE	1

DEFINITION	AUT_BIDON	"BIDON"
#
# Indice de la loi de calcul de taxation pour le telephone 
#
# VerifPcode - RHE # DEFINITION	CODE_TELEPHONE	1
DEFINITION	CODE_NUMERIS	3
#
# Definition des resultats supplementaires retournes par le calcul de taxation.
#
# VerifPcode - RHE # DEFINITION	RES_TYPCOM	0
DEFINITION	RES_CLDEST	1
DEFINITION	RES_TYPCPT	2
# VerifPcode - RHE # DEFINITION	RES_CODCIR	3

# Ajout pour module CNET statistiques
# Definition des types de communication. Cette valeur est retournee par le
# calcul de taxation dans le resultat supplementaire RES_TYPCOM
#
# VerifPcode - RHE # DEFINITION	COM_LOCAL	3
# VerifPcode - RHE # DEFINITION	COM_INTERURB	2
# VerifPcode - RHE # DEFINITION	COM_NATIONAL	1
# VerifPcode - RHE # DEFINITION	COM_INTERNAT	0
#
# Definition des types de controle de taxation. Cette valeur est retournee
# par le calcul de taxation dans le resultat supplementaire RES_TYPCPT.
#
# VerifPcode - RHE # DEFINITION	CPT_NOT		0
# VerifPcode - RHE # DEFINITION	CPT_MAX		1
# VerifPcode - RHE # DEFINITION	CPT_MIN		2
# VerifPcode - RHE # DEFINITION	CPT_EGAL	3
# VerifPcode - RHE # DEFINITION	CPT_IMP		4
# VerifPcode - RHE # DEFINITION	CPT_MAX_NOMODIF	5
# VerifPcode - RHE # DEFINITION	CPT_REJET	11
DEFINITION	CPT_REJET2	10
DEFINITION	CPT_REJET3	12
DEFINITION  CPT_REJET6      14
#
# Valeur des codes d'action (collecte temps reel, collecte BM ou recyclage)
#
# VerifPcode - RHE # DEFINITION	TVAL_COLLECT	1
# VerifPcode - RHE # DEFINITION	TVAL_RECYCLE	2
# VerifPcode - RHE # DEFINITION	TVAL_BM		3
#
# valeurs des seuils utilises dans le controle de taxation
#
DEFINITION	S1		109225
# a diviser par 100 
# VerifPcode - RHE # DEFINITION	S2		205
# a diviser par 100 
# VerifPcode - RHE # DEFINITION	S3		110
# VerifPcode - RHE # DEFINITION	S4		1

# Declaration des variables pour la fonction de normalisation.
# Codes de retour de la fonction i_normal

#############################################
#
# VerifPcode - RHE # DEFINITION	RET_NO_SELTRANS	0
# VerifPcode - RHE # DEFINITION	RET_SELTRANS_FT	1
DEFINITION	RET_SELTRANS	2

#
# Nom de l'automate du numero demandeur et demande
DEFINITION AUT_NDE "ATL_ZN_NDE2+"

# indexe dans g_icopo.SUP[] du 'code classe de destination'
DEFINITION	RES_TTRAFIC	1
# CCD pour FCT
DEFINITION 	CCD_FCT		0x18
#DRE G4R6 lot2
DEFINITION	CPT_CPS_Loc	16
DEFINITION	CPT_CPS_RI	17
#\DRE G4R6 lot2


REGISTRE ENTIER	stocke_date
REGISTRE ENTIER	type_cpt
REGISTRE ENTIER	ta
# VerifPcode - RHE # REGISTRE ENTIER	tc
# VerifPcode - RHE # REGISTRE ENTIER	tr

REGISTRE ENTIER	sdate
REGISTRE ENTIER	duree
# VerifPcode - RHE # REGISTRE ENTIER	dr

REGISTRE ENTIER	code_rejet
REGISTRE ENTIER	val_REJET
REGISTRE ENTIER	erreur
REGISTRE ENTIER	cr

REGISTRE ENTIER	SUP
REGISTRE ENTIER	CAX
REGISTRE ENTIER	SCT
REGISTRE ENTIER	TAP
REGISTRE ENTIER	T3cap2
REGISTRE ENTIER	T3cab


REGISTRE ENTIER	T3cle
REGISTRE ENTIER	T3cha
REGISTRE ENTIER	MES1
REGISTRE ENTIER	MES2
REGISTRE ENTIER	categ
REGISTRE ENTIER	code_dest
REGISTRE ENTIER	nocodedest
REGISTRE ENTIER service

REGISTRE ENTIER	secretndr
REGISTRE ENTIER seltrans
REGISTRE ENTIER modif_article
REGISTRE ENTIER pos_deb

# Ajout pour module CNET statistiques
REGISTRE ENTIER flag_stat
# fin ajout CNET

#	Ajout du parametre de calcul de trafic
#REGISTRE ENTIER	pos_CTT

# Test presence NDE (EV576)
REGISTRE ENTIER 	nde

REGISTRE ENTIER 	lg_NDE


#############################################
# Declaration des variables pour selection
# du transporteur
#############################################
# 0 : le champ n'existe pas, 1 le champ est present.
REGISTRE ENTIER	beta
REGISTRE ENTIER	betav

# code 'classe de destination'
REGISTRE ENTIER type_traf

#DRE G4R6 Lot2
REGISTRE ENTIER indice 
REGISTRE ENTIER res 

# drapeau, si calcul du trafic est valid
# VerifPcode - RHE # REGISTRE ENTIER CALC_TRAFIC
# VerifPcode - RHE # REGISTRE ENTIER flag

# PROC_COPO PML+LI 10/08/95 et LI 18/09/95
# VerifPcode - RHE # REGISTRE ENTIER		P
# VerifPcode - RHE # REGISTRE ENTIER		Q
REGISTRE POINTEUR	pt_memo
REGISTRE POINTEUR	pt_NDE

pt_memo = "1111111111111111111111111111111111"
pt_NDE = "33333333333333333333333333333333333333333333333333"

i_strcpy(pt_memo,"")
i_strcpy(pt_NDE,"")

trace( "[Tfe6dc_trt] Debut du pcode de traitement ***" )

#####################################################################
# DEBUT DES TRAITEMENTS
#####################################################################
#
	trace("[Tfe6dc_trt]Article DC faisceau entrant non GSM VN6 ou VN7")
#
# par defaut, il n'y a pas de code transporteur dans l'article.
# Toujours vrai pour types d'article VN3 et VN5.
#
beta  = 0
betav = 0

type_cpt = 0

# Ajout pour module CNET statistiques
flag_stat = 0
# fin ajout

# Initialisation des parametres pour code classe destination
nocodedest = 0
# fin de l'initialisation

# Initialisation des parametres pour les CS
MES1    = 0xFF
MES2    = 0xFF
T3cle   = 0
service = 0
# fin de l'initialisation

# Initialisation du parametre pour palliatif du NDE

# fin de l'initialisation

# Initialisation pour le secret du demandeur
secretndr = 0

# Detection de la modification g_iartin en g_iartout7
modif_article = 0

# par defaut il n'y a pas de selection du transporteur
seltrans = 0

# Initialisation du parametre de position du 16XY ou du E
pos_deb = 0

lg_NDE = 0

#####################################################################
# Recuperation valeur de la taxe:
#	Soit le niveau T3cap2 est present:
#	dans ce cas on recupere la taxe indiquee dans ce niveau
#
#	Soit le niveau T3cab est present:
#	dans ce cas on recupere la taxe indiquee dans ce niveau
#
# On verifie qu'un seul de ces niveaux est present a la fois
#
# On en profite pour recuperer le champ CAX (categorie de taxation),
# le champ TAP (type d'appel) et la duree.
#####################################################################

T3cap2 = i_valid_field_n(g_iartin,$Tfe6dc::T3cap2)
T3cab  = i_valid_field_n(g_iartin,$Tfe6dc::T3cab)

SI T3cap2 > 0
ALORS

    trace( "[Tfe6dc_trt] T3cap2 present" )

	#####################################################################
	#	Test 175 : champs T3cap2 et T3cab presents
	#####################################################################
	SI T3cab > 0
	ALORS

		trace( "[Tfe6dc_trt] T3cab present : Presence simultanee de T3cap2 et T3cab" )

		code_rejet   = 0x50F2
		erreur       = i_PlvMessEmettre(6850, 2, g_iartin, "", 1, code_rejet, 0, 0 )
		SAUT STOCKE_ERRONE
	FINSI

	ta  = i_get_art_field( g_iartin, $Tfe6dc::TAXE:0 )
	CAX = i_get_art_field( g_iartin, $Tfe6dc::CAX:0 )
	SUP = i_get_art_field( g_iartin, $Tfe6dc::SUP:0 )
	TAP = i_get_art_field( g_iartin, $Tfe6dc::TAP:0 )
	duree = i_get_art_field( g_iartin, $Tfe6dc::DUREE:0 )
SINON

	trace( "[Tfe6dc_trt] T3cap2 absent" )

	#####################################################################
	#	Test 176 : champs T3cap2 et T3cab absents
	#####################################################################
	SI T3cab <= 0
	ALORS

		trace( "[Tfe6dc_trt] T3cab et T3cap2 simultanement absents" )

		code_rejet   = 0x50F2
		erreur       = i_PlvMessEmettre(6851, 2, g_iartin, "", 1, code_rejet, 0, 0 )
		SAUT STOCKE_ERRONE
	FINSI

	trace("[Tfe6dc_trt]T3cab present")
	ta = i_get_art_field(g_iartin,$Tfe6dc::TAXE:1)
	CAX = i_get_art_field(g_iartin,$Tfe6dc::CAX:1)
	SUP = i_get_art_field(g_iartin,$Tfe6dc::SUP:1)
	TAP = i_get_art_field(g_iartin,$Tfe6dc::TAP:1)
	duree = i_get_art_field(g_iartin,$Tfe6dc::DUREE:1)
FINSI


#FO2086 
#trace1(" FO2086 duree %d ",duree)
SI (duree > 0x10B30)
ALORS
   	#trace("[Tfe6dc_trt] Duree trop longue")
	code_rejet = 0x5022
	erreur     = i_PlvMessEmettre(6927,2,g_iartin,"",2,code_rejet,C_Article,0)
	SAUT STOCKE_ERRONE
FINSI


SI (SUP == 0xFF)
ALORS
	SUP = 0
FINSI

###########################################################################
# Determination type de date et conversion fin de comm -> debut de comm
# Si SCT : bits BC = 00: heure fin de comm
# Si SCT : bits BC = 01: heure debut de comm
#
###########################################################################

sdate = i_get_art_field(g_iartin, $Tfe6dc::DATE)

# ENVELOPPE OPTIONNELLE OBSOLETE APRES FO1172:
#---------------------
#  AJOUT ENVELOPPE Optionelle
# (Contient le champs DATE qui permet de conserver la valeur du champ DATE en entree de Platine)
#---------------------
# Creation de l'enveloppe
#erreur=i_add_opt( "E_Tfe6dc")
# champ T1 ( 0x0A pour la reconnaissance de l'enveloppe,
# par l'arbre de reconnaissance Dopt )
#erreur=i_set_attr_val_n( $E_Tfe6dc::T1,0x0A)
# champ L1
#erreur=i_set_attr_val_n( $E_Tfe6dc::L1,0x05)
# DATE [5 octet]
#erreur=i_set_attr_val_n( $E_Tfe6dc::DATE,sdate)


SCT = g_iartin.SCT

#
#==== Affectation du champ "DATE" (seulement s'il y a changement d'ICAR)
#==== Et modification du champ SCT si changement d'ICAR
#
SI ((SCT & 0x60) == 0x00)
ALORS

	trace( "[Tfe6dc_trt] DATE = heure de fin de comm : conversion en debut de comm" )

	sdate = sdate - duree
	erreur = i_set_art_date(g_iartin,sdate)
	g_iartin.SCT = SCT | 0x20
	
	SAUT FIN_SCT
FINSI

SI ((SCT & 0x60) == 0x20)
ALORS

	trace( "[Tfe6dc_trt] DATE = heure de debut de comm" )

	SAUT FIN_SCT
FINSI

#####################################################################
#	Test 178 : bits BC champ SCT != 00, 01
#####################################################################
SI TAP & 0x40
ALORS
	code_rejet   = 0x5040
SINON
	code_rejet   = 0x5041
FINSI
erreur = i_PlvMessEmettre(6853,2,g_iartin,"",2,code_rejet,SCT,0)


	trace( "[Tfe6dc_trt] Erreur test 178" )

SAUT STOCKE_ERRONE

POINT FIN_SCT

#####################################################################
#	Determination de la date de stockage
#####################################################################

stocke_date = i_get_art_stocke_date(g_iartin,DATE_PLUS_DUREE)


#
###########################################################################
# Controle du champ "type d'appel"
#==== Si bit b = 1 => article inefficace
#==== Si bits a = 1 et c = 1 => erreur
###########################################################################

#####################################################################
#	Test 180 : bit B champ TAP == 1 (inefficace)
#####################################################################
#####################################################################
#	Test 180 : bit B champ TAP == 1 (inefficace)
#  - G2R2Ca - 02/12/2005  Deplacement du test d'inefficaciti apres la normalisation
######################################################################

SI TAP & 0x40
ALORS
	SI duree == 0
	ALORS
		T3cha = i_valid_field_n(g_iartin,$Tfe6dc::T3cha)
		T3cle = i_valid_field_n(g_iartin,$Tfe6dc::T3cle)

		SI T3cle > 0
		ALORS
			service = 1
		FINSI

		SI T3cha > 0
		ALORS
			MES1 = i_get_art_field( g_iartin, $Tfe6dc::MES1 )
			MES2 = i_get_art_field( g_iartin, $Tfe6dc::MES2 )
		FINSI

		SI ((service == 1) || (MES1 != 0xFF) || (MES2 != 0xFF))	
		ALORS
			# Test : champs NDE absent si non ineff (EV576)
			nde = i_valid_field_n(g_iartin, $Tfe6dc::NDE)
			SI (nde == 0)
			ALORS
				code_rejet   = 0x5041
				erreur       = i_PlvMessEmettre(6929,2,g_iartin,"",0,0,0,0)

				trace( "[Tfe6dc_trt] Erreur test 180" )

				SAUT STOCKE_ERRONE
			FINSI
		FINSI


	trace( "[Tfe6dc_trt] Article inefficace : stockage en PRT" )

###########################################################################################
# PKH -G2R2Ca SAUT STOCK_OK_PRT pour les dc inefficaces deplace apres la normalisation 
###########################################################################################		
		#SAUT STOCKE_OK_PRT

		
	FINSI

	trace( "[Tfe6dc_trt] Article inefficace : stockage en PRT" )


	#SAUT STOCKE_OK_PRT
FINSI



#####################################################################
#	Test : champs NDE absent si non ineff (EV576)
#####################################################################
nde = i_valid_field_n(g_iartin, $Tfe6dc::NDE)
SI (nde == 0)
ALORS
	code_rejet = 0x5041
	erreur = i_PlvMessEmettre(6929,2,g_iartin,"",0,0,0,0)
        trace ("[Tfe6dc_trt]Erreur test du champ NDE")
	SAUT STOCKE_ERRONE
FINSI

#####################################################################
#	Test 181 : bits AC champ TAP == 11
#####################################################################
# test des bits a et c uniquement
SI ((TAP & 0xa0)  == 0xa0)
ALORS	
	code_rejet = 0x5041
	erreur = i_PlvMessEmettre(6854,2,g_iartin,"",1,code_rejet,0,0)
	SAUT STOCKE_ERRONE
FINSI

#
#==================================================================
#====================		TRAITEMENT	===================
#==================================================================
#

#####################################################################
#	test 4 : TA > S1
#####################################################################


SI ta > S1
ALORS
        code_rejet = 0x5031
        erreur = i_PlvMessEmettre(6855,2,g_iartin,"",2,code_rejet,ta,0)	
        SAUT STOCKE_ERRONE
FINSI


#####################################################################
#	 Article Mayotte expe : - NDR commence par 269
#                               - NDE sur 6 digits et commence par 6
#                               - pas de test sur transgroupe (car impossible pour un faisceau entrant)
#####################################################################

SI i_valid_field_n(g_iartin,$Tfe6dc::NDE)
ALORS
	erreur = i_get_art_str(g_iartin,$Tfe6dc::NDE, pt_NDE)
	lg_NDE = i_strlen(pt_NDE)

	SI ((g_iartin.NDR[0] == 0x2) && (g_iartin.NDR[1] == 0x6) && (g_iartin.NDR[2] == 0x9)) && 
    	    (lg_NDE == 6) && (g_iartin.NDE[0] == 0x6)
	ALORS
		SAUT STOCKE_DIV
	FINSI 
FINSI


#####################################################################
#   SECRET DU DEMANDEUR
#####################################################################
# Detection 3651 ou *31*
SI (((g_iartin.NDE[0] == 0x3) && (g_iartin.NDE[1] == 0x6) &&
	(g_iartin.NDE[2] == 0x5) && (g_iartin.NDE[3] == 0x1)) ||
	((g_iartin.NDE[0] == 0xB) && (g_iartin.NDE[1] == 0x3) &&
	(g_iartin.NDE[2] == 0x1) && (g_iartin.NDE[3] == 0xB)))
ALORS
	trace("[Tfe6dc_trt]Secret du demandeur : suppression de '3651' ou de '*31*'")
	secretndr = 1
#	Enlever 3651 (ou *31*) pour appel a i_comptage
	pos_deb = i_supp_quart_name("NDE",0,4,15,g_iartin,g_iartout7)
	modif_article = 1
FINSI


#####################################################################
#   SELECTION DU TRANSPORTEUR
#
# La plupart des traitements concernants la selection du
# transporteur et la numerotation courte des DOM, a ete deporte dans
# les nouveaux automates de normalisation 
#####################################################################

# Test de la presence du champ BETA et BETAV dans l'article (present si beta > 0)
beta  = i_valid_field_n( g_iartin, $Tfe6dc::BETA )
betav = i_valid_field_n( g_iartin, $Tfe6dc::BETAV )


 trace("[Tfe6dc_trt]traitement du numero demande")
SI ( modif_article == 1 )
ALORS
 trace("[Tfe6dc_trt]Traitement COCA avec utilisation g_iartout7")

#
# 	Ajout de 16XY devant le NDE :
# 	Si le code du transporteur (COCA ou COCAV) est present dans l'article 
# 	et si le NDE debute par 0, on effectue l'ajout (beta ou betav si beta absent)
#
	SI ( (betav>0) && (g_iartout7.NDE[0] == 0x0) )
	ALORS
	    # Ajout de 16XY devant le NDE
	     trace("[Tfe6dc_trt]champ betav present et NDE commence par '0' : ajout de 16XY")
	    erreur = i_add_quart_name( "NDE", 0, 15, "1600", g_iartout7, g_iartout7 )

	    # On renseigne XY = T3cocav/BETAV :
	    # En VN7, le code du transporteur sera toujours sur 2 digits
	    g_iartout7.NDE[2] = g_iartout7.BETAV[0]
	    g_iartout7.NDE[3] = g_iartout7.BETAV[1] 

	FINSI
SINON

 trace("[Tfe6dc_trt]Traitement COCA avec utilisation g_iartin")

# 	Ajout de 16XY devant le NDE :
# 	Si le code du transporteur (COCA ou COCAV) est present dans l'article 
# 	et si le NDE debute par 0, on effectue l'ajout (beta ou betav si beta absent)
#
	SI ( (betav>0) && (g_iartin.NDE[0] == 0x0) )
	ALORS
	    # Ajout de 16XY devant le NDE
	     trace("[Tfe6dc_trt]champ betav present et NDE commence par '0' : ajout de 16XY")
	    erreur = i_add_quart_name( "NDE", 0, 15, "1600", g_iartin, g_iartout7 )
	    
	    # On renseigne XY = T3cocav/BETAV :
	    # En VN7, le code du transporteur sera toujours sur 2 digits
	    # A revoir pour VN8 (on aura 3 digits Plus bourrage : XYZF) !!!
	    g_iartout7.NDE[2] = g_iartout7.BETAV[0]  
	    g_iartout7.NDE[3] = g_iartout7.BETAV[1]
	    modif_article = 1
	FINSI
FINSI

# Ajout PSA 19/07/05
#  Traitement specifique pour les cas ETSI national et internationnal
#####################################################################
SI ( modif_article == 1)
ALORS
#       Cas ETSI National
        SI ( (g_iartout7.INF_DEDE & 0xC0) == 0x80)
        ALORS
#               trace("Cas ETSI National : ajout de '0' au debut de NDE")
                erreur = i_add_quart_name("NDE",0,15,"0",g_iartout7,g_iartout7)
        SINON
#               Cas ETSI International
                SI ( (g_iartout7.INF_DEDE & 0xC0) == 0xC0)
                ALORS
#                   trace("Cas ETSI International : ajout de '00' au debut de NDE")
                        erreur = i_add_quart_name("NDE",0,15,"00",g_iartout7,g_iartout7)
                FINSI
        FINSI
SINON
#       Cas ETSI National
        SI ( (g_iartin.INF_DEDE & 0xC0) == 0x80)
        ALORS
#               trace("Cas ETSI National : ajout de '0' au debut de NDE")
                erreur = i_add_quart_name("NDE",0,15,"0",g_iartin,g_iartout7)
                modif_article = 1
        SINON
#               Cas ETSI International
                SI ( (g_iartin.INF_DEDE & 0xC0) == 0xC0)
                ALORS
#                       trace("Cas ETSI International : ajout de '00' au debut de NDE")
                        erreur = i_add_quart_name("NDE",0,15,"00",g_iartin,g_iartout7)
                        modif_article = 1
                FINSI
        FINSI
FINSI
# Fin ajout PSA 19/07/05


#####################################################################
#   Normalisation des numeros APPELANT et APPELE
#
# erreur = Valeur de retour de la normalisation :
#
# RET_SELTRANS : l'automate de normalisation du numero APPELE detecte
# une selection du transporteur en '16XY' ou en 'EZAB' avec E!=8 (FT);
# on ne fait pas de calcul de valorisation et CCD=0xFE et CTfe6dc=0x00FE.
#
# RET_SELTRANS_FT : le transporteur est France Telecom (par 'E=8'),
# l'automate normalise en remplacant le '8' par '0'; on effectue un
# calcul de valorisation.
#
# RET_NO_SELTRANS : Pas de selection du transporteur; on effectue un
# calcul de valorisation.
#
# En cas d'erreur de normalisation, on n'effectue pas de calcul de
# valorisation et CCD=0xFF et CTT=0x00FF (valeur par defaut)
#
# L'automate normalise un numero demande des DOM en numerotation
# abregee en lui ajoutant le '0ZAB' du numero APPELANT.
#
#####################################################################

SI (modif_article == 1)
ALORS
#	trace("Normalisation des NDEUR/NDE avec g_iartout7")
#fonction BNC_TYPCTR (NomBase,Code_article,CATEG,'**00',DEDE_DIST_N,Date_Locale(ddebut,IDUS_N),dduree)

	erreur = i_memcpy_art_field_n(g_icopo, $Tcopo::NDR,"**00", 5)
	
	erreur = i_normal(g_iartout7,$Tfe6dc::NDE , $Tfe6dc::NDE, g_icopo, $Tcopo::NDE, $Tcopo::NDE,3, AUT_BIDON , AUT_NDE)
SINON
#	trace("Normalisation des NDEUR/NDE avec g_iartin")
	erreur = i_memcpy_art_field_n(g_icopo, $Tcopo::NDR,"**00", 5)
	
	erreur = i_normal(g_iartin,$Tfe6dc::NDE , $Tfe6dc::NDE, g_icopo, $Tcopo::NDE, $Tcopo::NDE,3, AUT_BIDON , AUT_NDE)
FINSI


#####################################################################
#   Test 112 : normalisation NDR ou NDE impossible
#####################################################################

SI erreur < 0
ALORS
#        code_rejet = 0x5011
#	erreur = i_PlvMessEmettre(6857,2,g_iartin, "",2,code_rejet,g_ierrno,0)
#        SAUT STOCKE_ERRONE
	nocodedest = 1
	SAUT STOCKE_OK
FINSI

# si on a une selection du transporteur en 16XY ou en EZAB (E!=8)
SI (erreur==RET_SELTRANS)
ALORS
	trace("[Tfe6dc_trt]Article avec selection du transporteur non FT : stockage en OK sans calcul de valo")
	seltrans = 1
	flag_stat = 1
	code_dest = g_icopo.SUP[RES_CLDEST]
	SI ( code_dest != CCD_FCT )
	ALORS
	    code_dest   = 0xFE
	FINSI
FINSI
# sinon
# selection transporteur FT (par EZAB avec E=8) ou pas de sel. trans.
# On effectue un calcul de valorisation.

	trace("[Tfe6dc_trt]Fin de la normalisation")

#####################################################################
# G2R2Ca -PKH- ICI apres normalisation test et envoie en STOCKE_OK_PRT les inefficaces
#############################################################################

SI TAP & 0x40
ALORS 
 
			SAUT STOCKE_OK_PRT 

FINSI 
 
 
 trace ("[Tfe6dc_trt]Calcul de valorisation")

#####################################################################
#	Initialisation de l'interface "proc_copo" et calcul taxation
#####################################################################

categ = (8 * CAX) + SUP

g_icopo.TAXE   = 0
g_icopo.CREDIT = 0
erreur = i_set_art_date(g_icopo,sdate)
g_icopo.DUREE  = duree
g_icopo.CODE   = CODE_NUMERIS
g_icopo.CATEG  = categ
#	g_icopo.CAX    = CAX
#	g_icopo.SUPPORT = SUP
g_icopo.SUP[0] = 0
g_icopo.SUP[1] = 0
g_icopo.SUP[2] = 0
g_icopo.SUP[3] = 0
g_icopo.SUP[4] = 0

#	PROC_COPO PML+LI 10/08/95 et LI 18/09/95
#	Memorisation des parametres de PROC_COPO

pt_memo = i_init_tax_param()

cr = i_comptage(g_icopo,BASE_TELEPHONE,sdate)

# Erreur retour BNC
SI cr != 0
ALORS
#        SI ((g_ierrno == 1100) && (seltrans == 1))
#        ALORS
		nocodedest = 1
                SAUT STOCKE_OK

#        FINSI

#        code_rejet = 0x5021
#        erreur = i_PlvMessEmettre(6858,2,g_iartin,"",2,code_rejet,g_ierrno,0)
#        SAUT STOCKE_ERRONE
FINSI


# G2R1Ch : REJET2

type_cpt = g_icopo.SUP[RES_TYPCPT]
#On conserve le type de trafic
## Maj CCD - G2R1Ch
code_dest = g_icopo.SUP[RES_CLDEST]
trace1("[Tfe6dc_trt] type_cpt retour de g_icopo.SUP[RES_TYPCPT]=%d",type_cpt)
trace1("[Tfe6dc_trt] code_dest retour de g_icopo.SUP[RES_CLDEST]=%d",code_dest)

# Ajout pour module CNET statistiques
flag_stat = 1
# fin ajout

#

#====================================================================
#==================== BRANCHEMENTS POUR STOCKAGE ====================
#====================================================================
#
#	Ajout du module CNET statistiques

POINT STOCKE_OK


trace( "[Tfe6dc_trt] Stockage de l'article" )



trace( "[Tfe6dc_trt] Ajout du T3=0x7E avec CCD = 0xFF et CTT = 0xFFFF" )

#FO466 : remplacement ajou_tlv par ajoutchampNum
erreur = i_ajoutChampNum(g_iartin,$Tfe6dc::T4ccd,$Tfe6dc::CCD,0)
erreur = i_ajoutChampNum(g_iartin,$Tfe6dc::T4typtra,$Tfe6dc::CTT,0)

# G2R1Ch : REJET2
val_REJET = 0
SI (type_cpt==CPT_REJET2)
ALORS
	trace("[Tfe6dc_trt]Ajout du champ REJET=2")
	val_REJET=2
	erreur=i_ajoutChampNum(g_iartin,$Tfe6dc::T4rejet,$Tfe6dc::REJET,0)
	erreur=i_set_art_field(g_iartin,$Tfe6dc::REJET,val_REJET)
FINSI

# G2R2Cv : REJET3
SI (type_cpt==CPT_REJET3)
ALORS
	trace("[Tfe6dc_trt]Ajout du champ REJET=3")
	val_REJET=3
	erreur=i_ajoutChampNum(g_iartin,$Tfe6dc::T4rejet,$Tfe6dc::REJET,0)
	erreur=i_set_art_field(g_iartin,$Tfe6dc::REJET,val_REJET)
FINSI

# G3R3Cv : REJET6
SI (type_cpt==CPT_REJET6)
ALORS
	trace("[Tfe6dc_trt]Ajout du champ REJET6=14")
	val_REJET=14
	erreur=i_ajoutChampNum(g_iartin,$Tfe6dc::T4rejet,$Tfe6dc::REJET,0)
	erreur=i_set_art_field(g_iartin,$Tfe6dc::REJET,val_REJET)
FINSI

#DRE G4R6 lot2
SI ( (type_cpt==CPT_CPS_Loc) || (type_cpt==CPT_CPS_RI) )
ALORS
	#trace("Ajout du champ REJET = CPS_Loc ou CPS_RI")
	val_REJET=type_cpt
	erreur=i_ajoutChampNum(g_iartin,$Tfe6dc::T4rejet,$Tfe6dc::REJET,0)
	erreur=i_set_art_field(g_iartin,$Tfe6dc::REJET,val_REJET)
FINSI
#\DRE G4R6 lot2



# si nocodedest est reste a 0, cela veut dire que l appel a i_comptage a ete
# realise et valide
# Dans le cas contraire, on laisse l ajout CE CCD a la valeur par defaut (FF)
SI (nocodedest == 0)
ALORS
	trace("[Tfe6dc_trt]Traitement: Appel a i_comptage realise et valide : maj CCD")
	erreur = i_set_art_field(g_iartin, $Tfe6dc::CCD, code_dest)
FINSI

SI (flag_stat == 1) && (nocodedest == 0)
ALORS
	type_traf = g_icopo.SUP[RES_TTRAFIC]
	erreur = i_set_art_field(g_iartin,$Tfe6dc::CTT,type_traf)
	trace1("[Tfe6dc_trt]Appel a i_comptage realise et valide : maj CTT type_traf=%d",type_traf)
FINSI
# XYZ trafic fin

# Ajout 0x00FE dans le cas de seltrans=1 et flag_stat=1
SI ((flag_stat == 1) && (seltrans == 1))
ALORS
	trace("[Tfe6dc_trt]Traitement: Selection transporteur non FT : maj CTT = 0x00FE et CCD = 0xFE")
	erreur = i_set_art_field( g_iartin, $Tfe6dc::CTT, code_dest )
	g_iartin.CCD = code_dest
FINSI

#DRE G4R6 lot2
SI ( i_valid_field_n(g_iartin, $NDE ) )
ALORS

	#Ajout NORMAL (NDE normalise)
	erreur=i_ajoutChampNum(g_iartin,$Tfe6dc::T4normal,$Tfe6dc::NORMAL,0)
	indice = 0
	POINT BOUCLE_NDE
	res = i_get_art_fieldtab(g_icopo, $Tcopo::NDE, indice)
	#        trace1(" element : %x",res)
	SI (res != 00)
	ALORS
		erreur = i_set_art_fieldtab(g_iartin, $Tfe6dc::NORMAL, indice, res-0x30)
		indice = indice + 1
		SAUT BOUCLE_NDE
	SINON
		erreur = i_set_art_fieldtab(g_iartin, $Tfe6dc::NORMAL, indice, 0xFF)
	FINSI
FINSI
#\DRE G4R6 lot2


POINT STOCKE_OK_PRT


trace( "[Tfe6dc_trt] Traitement: Stockage de l'article en OK ***" )


erreur = i_ajoutChampNum(g_iartin,$Tfe6dc::T4_CORR,$Tfe6dc::CORR_OK,0)
erreur = i_stocke_art( g_iartin, stocke_date, PT_OK, 0 )


trace( "[Tfe6dc_trt] Fin du pcode de traitement ***" )







RETOUR TRAIT_OK



#####################################################################
# POINT de branchement : stockage PT_ERRONE
#		correspond au cas d'erreur syntaxiques et semantiques
#####################################################################

POINT STOCKE_ERRONE

 	trace("[Tfe6dc_trt]Traitement Tfe6dc: Stockage de l'article en ERRONE")

# Retrait de l'enveloppe optionnelle E_GSM_nom:
erreur=i_del_opt()

stocke_date = i_get_art_stocke_date( g_iartin, DATE_PLUS_DUREE )

erreur = i_make_art_rej( g_iartin, g_iartout, code_rejet )
erreur = i_stocke_art  ( g_iartout, stocke_date, PT_ERRONE, 0 )


trace( "[Tfe6dc_trt] Fin du pcode de traitement STOCKE_ERRONE ***" )


RETOUR TRAIT_OK

###########################################################################
# Stockage en elimine   
###########################################################################
POINT STOCKE_ELM

trace( "[Tfe6dc_trt] Fin du Pcode de traitement : Stockage en ELIMINE" )

erreur = i_stocke_art( g_iartin, 0, PT_ELIMINE, 0 )

RETOUR TRAIT_OK

POINT STOCKE_DIV

trace( "[Tfe6dc_trt] Fin du Pcode de traitement : Stockage en DIVERS" )

erreur = i_stocke_art( g_iartin, 0, PT_DIVERS, 0 )

RETOUR TRAIT_OK

# ---------------------- fin pcode Tfe6dc_trt ---------------------------------# FIN_CORPS
