DEFINITION ZONE_METRO_860026284 7
DEFINITION TABLE_DECALAGE_860026284 1
DEFINITION C_InstCOMPTI_860026284 "COMPTI"
DEFINITION C_InstSYMPH_860026284 "SYMP"
DEFINITION C_Article_860026284 "Tindc2r"
DEFINITION C_TcomptiHD_860026284 "TcomptiHD"
DEFINITION C_TSymTindc2r_860026284 "TsymTindc2r"
REGISTRE ENTIER bCOMPTI_860026284
REGISTRE ENTIER instCOMPTI_860026284
REGISTRE ENTIER instSYMPH_860026284
REGISTRE ENTIER ICAR_UTC_860026284
REGISTRE ENTIER ICAR_METROPOLE_860026284
REGISTRE ENTIER DUREM_860026284
REGISTRE ENTIER DUR_860026284
REGISTRE ENTIER DATE_860026284
REGISTRE ENTIER erreur_860026284
REGISTRE ENTIER res_860026284
REGISTRE ENTIER champ1_860026284
REGISTRE ENTIER champ2_860026284
REGISTRE ENTIER indice_860026284
REGISTRE ENTIER indice_diese_860026284
REGISTRE ENTIER indice_max_860026284
REGISTRE ENTIER nombre_diese_860026284
REGISTRE ENTIER nombre_virg_860026284
REGISTRE ENTIER auth_860026284
REGISTRE ENTIER stopinfo_connect_860026284
REGISTRE ENTIER stopinfo_disc_860026284
REGISTRE ENTIER code_errone_860026284
REGISTRE ENTIER taille_champ_860026284
REGISTRE ENTIER valeur_860026284
REGISTRE ENTIER valeur1_860026284
REGISTRE ENTIER valeur2_860026284
REGISTRE ENTIER diff_860026284
REGISTRE ENTIER diviseur_860026284
REGISTRE ENTIER IN_BYTES_860026284
REGISTRE ENTIER OUT_BYTES_860026284
REGISTRE ENTIER CRIT_COMP_860026284
REGISTRE POINTEUR pt_PRNAME_860026284
REGISTRE POINTEUR pt_SGTQS_860026284
REGISTRE POINTEUR pt_BUF_860026284
REGISTRE POINTEUR pt_temp_860026284
REGISTRE POINTEUR pt_auth_860026284
REGISTRE POINTEUR pt_CLIENTID_860026284
REGISTRE POINTEUR pt_resul_860026284
REGISTRE POINTEUR pt_car_860026284
REGISTRE POINTEUR pt_ECC_FACT_860026284
############################################################################
#
# Fichier : Tindc2r.src
#
#
# Distribution :  DC Internet IPADSL haut debit
#
# En entree :
#    Article : Tindc2r
#
# En sortie :
#      COMPTISSIMO - g_iartout5
#
# HISTORIQUE :
#	27/08/03 - PSA creation
#	12/11/03 - NSA evolution des specifs
#	28/11/03 - NSA tests presence champs T3fipnetmask,T3sessionid,T3sranid,T3nasipaddr avant suppression
#	02/12/03 - NSA evolution des spec.
#	12/02/04 - NSA Ajout de l'envoi vers Symphonie
#	02/04/04 - NSA FO 594,595,596,602,605,587
#	06/05/04 - NSA Utilisation du verbe IntToIpAddr,FO661 et 662:pas de creation de champ outoctvsa et inoctvsa si abents en entreeI
#		 - NSA FO669, FO659 :date de debut pour Symph
#	03/11/04 - DRE - FO 933 Champ VPN_NAME pour Internet RTC et ADSL
#	14/01/05 - DRE - FO 1052 distribution a Comptissimo de ADIP
#	18/05/05 - DRE - G2R1CaNG Modification de la distribution a COMPTISSIMO
#	08/06/05 - DRE - FO 1349 Modif valeur de IN_BYTES et OUT_BYTES
#	08/06/05 - DRE - FO 1345 ajout champ Acc_Session_Id pour Comptissimo
#	13/10/05 - DRE - FO 1498 Ajouter le champ DUR avec pour valeur FFFFFFFF si le champ DUR est absent en entree
#	24/11/05 - PSA - G2R1CaNG : FO 1590
#	12/01/06 - DRE - FO 1674
#	22/03/06 - DRE - FO 1757
#	23/03/06 - DRE - reprise FO 1738 + mail Pierre Boulet du 21/03/06 17h30
#	15/05/06 - RHE - FO 1780 modification de distribution pour COMPTISSIMO
#	22/06/06 - PKH - FO1844 Correction: envoye de la date debut ` symphonier au lieu de fin
#	29/06/06 - DRE - FO1856 ajout controle de presence du champ PRNAME
#	30/09/11 - THE - VerifPcode
#
############################################################################
#
############################################################################
# Declarations
############################################################################


# Booleens
# Variables d instance
# Divers
#Variables fonctionnelles du module

# Pointeurs

#---------------------------------------------------------------------------
# INITIALISATION
#---------------------------------------------------------------------------
instCOMPTI_860026284 = 0
instSYMPH_860026284 = 0

indice_max_860026284 = 0
indice_860026284 = 0
champ1_860026284 = 0
champ2_860026284 = 0
nombre_diese_860026284=0
indice_diese_860026284=0
nombre_virg_860026284=0
auth_860026284=0
stopinfo_connect_860026284=0
stopinfo_disc_860026284=0
code_errone_860026284=0
taille_champ_860026284=0
diff_860026284 = 0

DATE_860026284 = -1
ICAR_UTC_860026284 = -1
ICAR_METROPOLE_860026284 = -1
CRIT_COMP_860026284 = 0

#Pointeurs
pt_PRNAME_860026284	 = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
pt_SGTQS_860026284	 = "XXXXXXXXXXXXXXXX"
pt_BUF_860026284		 = "123456789123456789123456123451234567891234567891234561234512345678912345678912345612345123456789123456789123456123451234567891234567891234561234512345678912345678912345612345123456789123456789123456123451234567891234567891234561234512345678912345678912345612345"
pt_temp_860026284		 = "999912345999999999123459999123459999999991234599991234599999999912345999912345999999999123459999123459999999991234599991234599999999912345999912345999999999123459999123459999999991234599991234599999999912345999912345999999999123459999123459999999991234599991234"
pt_auth_860026284		 = "pt_auth987654325999999999123459999123459999999991234599991234599999999912345999912345999999999123459999123459999999991234599991234599999999912345999912345999999999123459999123459999999991234599991234599999999912345999912345999999999123459999123459999999991234599991234\
99991234599999999912345999912345999999999123459999123459999999991234599991234599999999912345999912345999999999123459999123459999999991234599991234599999999912345999912345999999999123459999123459999999991234599991234599999999912345999912345999999999123459999123555555554"
pt_CLIENTID_860026284	 = "444444444423456789123456123451234567891234567891234561234512345678912345678912345612345123456789123456789123456123451234567891234567891234561234512345678912345678912345612345123456789123456789123456123451234567891234567891234561234512345678912345678912345612345"
pt_resul_860026284	 = "555555555523456789123456123451234567891234567891234561234512345678912345678912345612345123456789123456789123456123451234567891234567891234561234512345678912345678912345612345123456789123456789123456123451234567891234567891234561234512345678912345678912345612345"
pt_car_860026284		 = "33"
pt_ECC_FACT_860026284	 = "88888888888888888888"

i_strcpy(pt_ECC_FACT_860026284," ")
# VerifPcode
i_strcpy(pt_PRNAME_860026284," ")
i_strcpy(pt_SGTQS_860026284," ")
i_strcpy(pt_BUF_860026284," ")
i_strcpy(pt_auth_860026284," ")
i_strcpy(pt_resul_860026284," ")
i_strcpy(pt_car_860026284," ")


############################################################################
# Variables globales
############################################################################

#---------------------------------------------------------------------------
#DUREM et DUR
#---------------------------------------------------------------------------

# : on verifie aussi la presence du T3ibytes (qui contient les attributs VSA) puisqu'il enrichira INOCTVSA par la suite
IN_BYTES_860026284 = 0

SI ( i_valid_field_n(g_iartin, $Tindc2r::T3inoctvsa) || i_valid_field_n(g_iartin, $Tindc2r::T3ibytes) )
ALORS
	IN_BYTES_860026284 = 1
FINSI

# : on verifie aussi la presence du T3obytes (qui contient les attributs VSA) puisqu'il enrichira OUTOCTVSA par la suite
OUT_BYTES_860026284 = 0

SI ( i_valid_field_n(g_iartin, $Tindc2r::T3outoctvsa) || i_valid_field_n(g_iartin, $Tindc2r::T3obytes) )
ALORS
	OUT_BYTES_860026284 = 1
FINSI

SI( i_valid_field_n(g_iartin,$Tindc2r::DUREM))
ALORS
	DUREM_860026284= i_get_art_field (g_iartin, $DUREM)
SINON
	DUREM_860026284=0
FINSI

SI( i_valid_field_n(g_iartin,$Tindc2r::DUR))
ALORS
	DUR_860026284= i_get_art_field (g_iartin, $DUR)
SINON
	DUR_860026284=0
FINSI

SI( i_valid_field_n(g_iartin,$Tindc2r::IDUS_NUM) &&  i_valid_field_n(g_iartin,$Tindc2r::DATE) && i_valid_field_n(g_iartin,$Tindc2r::RNAME))
ALORS
	CRIT_COMP_860026284 = 1
FINSI

#SGTQS
i_strcpy(pt_SGTQS_860026284,i_LireEECSGTQS( g_ieec ))

#---------------------------------------------------------------------------
#             DATES
#---------------------------------------------------------------------------

SI( i_valid_field_n(g_iartin,$Tindc2r::DATE))
ALORS
	#date entree du DC (UTC)
	DATE_860026284 = i_get_art_field(g_iartin,$Tindc2r::DATE)

	#date debut du DC (UTC)
	ICAR_UTC_860026284= DATE_860026284-DUREM_860026284-DUR_860026284

	#date entree du DC (Metropole)
	ICAR_METROPOLE_860026284 = i_DHgetLocalTime(TABLE_DECALAGE_860026284, ZONE_METRO_860026284, DATE_860026284)
FINSI

############################################################################
# Recherche Instances des ECC
############################################################################

#trace("----------- Recherche des instances --------------")

#---------------------------------------------------------------------------
#  COMPTISSIMO
#---------------------------------------------------------------------------

instCOMPTI_860026284=i_LireInstanceECC(C_InstCOMPTI_860026284)
SI (instCOMPTI_860026284 <= 0)
ALORS
	trace( "instance COMPTISSIMO nulle! (ou erreur)=> envoi vers cette ECC impossible" )
	code_errone_860026284 = 0xA0B2
	erreur_860026284 = i_PlvMessEmettre(8601,2,g_iartin,"",3,code_errone_860026284,C_InstCOMPTI_860026284,C_Article_860026284)
	SAUT DISTRI_ERR
FINSI

#---------------------------------------------------------------------------
#  POP_RAN_NAME != WOO_DEDIE_TPC_NORD ou WOO_DEDIE_TPC_SUD
#---------------------------------------------------------------------------

SI (i_valid_field_n(g_iartin, $Tindc2r::PRNAME))
ALORS
	erreur_860026284 = i_get_art_str( g_iartin, $Tindc2r::PRNAME, pt_BUF_860026284 )
	SI (i_strcmp(pt_BUF_860026284, "WOO_DEDIE_TPC_NORD") == 0) || (i_strcmp(pt_BUF_860026284, "WOO_DEDIE_TPC_SUD") == 0)
	ALORS
		bCOMPTI_860026284=0
	SINON
		bCOMPTI_860026284=1
	FINSI
FINSI

#---------------------------------------------------------------------------
#  Ajout de COMPTISSIMO a la liste des ECC suivant criteres : IN_BYTES = 1 et OUT_BYTES = 1
#---------------------------------------------------------------------------

SI ( IN_BYTES_860026284 == 1 && OUT_BYTES_860026284 == 1 && CRIT_COMP_860026284 == 1 && bCOMPTI_860026284 == 1)
ALORS
	erreur_860026284 = i_AjouterCouranteECC(instCOMPTI_860026284)
FINSI

#---------------------------------------------------------------------------
#  SYMPHONIE
#---------------------------------------------------------------------------

instSYMPH_860026284=i_LireInstanceECC(C_InstSYMPH_860026284)
#trace1("instSYMPH=<%d>",instSYMPH)
SI (!instSYMPH_860026284 )
ALORS
	trace("pas d instance SYMPHONIE")
	code_errone_860026284 = 0xA0B2
	erreur_860026284 = i_PlvMessEmettre(8601,2,g_iartin,"",3,code_errone_860026284,C_InstSYMPH_860026284,C_Article_860026284)
	SAUT DISTRI_ERR
FINSI

#---------------------------------------------------------------------------
#  Ajout de SYMPHONIE a la liste des ECC (Aucun critere de distribution)
#---------------------------------------------------------------------------

erreur_860026284 = i_AjouterCouranteECC(instSYMPH_860026284)

#------------------------------
# Duplication COMPTISSIMO
#------------------------------

SI ( !i_ChercherCouranteECC(instCOMPTI_860026284) )
ALORS
	#trace("Duplication vers COMPTISSIMO")
	SI ( i_dup_art(g_iartin, C_TcomptiHD_860026284, g_iartout5) )
	ALORS
		trace("ERREUR de duplication vers COMPTISSIMO")
		code_errone_860026284 = 0xA0D2
		erreur_860026284 = i_PlvMessEmettre(8602,2,g_iartin,"",3,code_errone_860026284,C_TcomptiHD_860026284,C_Article_860026284)
		SAUT DISTRI_ERR
	FINSI

	# MAJ pt_ECC_FACT
	i_strcpy(pt_ECC_FACT_860026284,"Compti")

	#------------------------------
	# Mise au format COMPTISSIMO
	#------------------------------

	# Suppression des champs

	SI( i_valid_field_n(g_iartout5,$TcomptiHD::T3fipnetmask))
	ALORS
		erreur_860026284 = i_supprChamp(g_iartout5, "T3fipnetmask")
	FINSI

	SI( i_valid_field_n(g_iartout5,$TcomptiHD::T3sranid))
	ALORS
		erreur_860026284 = i_supprChamp(g_iartout5, "T3sranid")
	FINSI

	SI( i_valid_field_n(g_iartout5,$TcomptiHD::T3nasipaddr))
	ALORS
		erreur_860026284 = i_supprChamp(g_iartout5, "T3nasipaddr")
	FINSI

	# Modification de champs avec prise en compte des variables globales

	#ADIP
	#Le but est de tranformer une adresse IP qui est Hexa en entree, en adresse decimale
	#Exemple : pour ac15fec2, on doit avoir 172021254194
	# Le champs d'entree ADIP a ete decoupe en 4 sous champs de 1 octet (ADIP1 a 4)
	SI i_valid_field_n(g_iartin,$T3adip)
	ALORS
		erreur_860026284=i_ajoutChampNum(g_iartout5,$TcomptiHD::T3adip,$TcomptiHD::ADIP3,1)
		erreur_860026284=i_ajoutChampNum(g_iartout5,$TcomptiHD::T3adip,$TcomptiHD::ADIP4,1)
		valeur_860026284 = 0
		indice_860026284 = 0

		POINT Boucle1

		# Autant de passage que d'octets en entree (ici 4 octets)
		valeur_860026284 = valeur_860026284 + 1
		# Lecture du champs ADIP1 a 4 suivant valeur
		valeur1_860026284 = i_get_art_field(g_iartin,$Tindc1r::ADIP+valeur_860026284)
		diviseur_860026284 = 100
		POINT BoucleADIP
		# Cette boucle est effectue 3 fois (ex: 0x82 = 130 en dec)
		# Prendre chaque digit (130 = 3 digits) de valeur1 et les copier dans ADIP de sortie

		valeur2_860026284 = valeur1_860026284 / diviseur_860026284
		erreur_860026284 = i_set_art_fieldtab(g_iartout5,$TcomptiHD::ADIP,indice_860026284,valeur2_860026284)
		valeur1_860026284 = valeur1_860026284 - ( valeur2_860026284 * diviseur_860026284 )
		diviseur_860026284 = diviseur_860026284 / 10
		indice_860026284 = indice_860026284 + 1

		SI (diviseur_860026284 != 0)
		ALORS
			SAUT BoucleADIP
		FINSI

		SI (valeur_860026284 < 5)
		ALORS
			# Octet suivant (jusqu'a 4)
			SAUT Boucle1
		FINSI
		# Fin BoucleADIP
		# Fin Boucle1
	FINSI

	#DUR
	# Ajouter uniquement le T3DUR si le T3 est absent en entree
	SI( !i_valid_field_n(g_iartin,$Tindc2r::DUR))
	ALORS
		erreur_860026284 = i_ajoutChamp(g_iartout5, "T3dur", "DUR", 0x00)
		erreur_860026284 = i_memset_field_n(g_iartout5,$TcomptiHD::DUR,0xFF)
	FINSI

	# ICAR
	erreur_860026284 = i_set_art_field( g_iartout5, $TcomptiHD::DATE, ICAR_METROPOLE_860026284)

	# PAS
	erreur_860026284 = i_ajoutChamp(g_iartout5, "T3pas", "PAS", 0)
	erreur_860026284 = i_set_art_str(g_iartout5, $TcomptiHD::PAS, pt_SGTQS_860026284)

	# pour USER et DOMAINE, remplacement des caracteres ASCII de valeur inferieur a 32 par le caractere -

	#UNAME
	SI (i_valid_field_n(g_iartin, $Tindc2r::UNAME))
	ALORS
		indice_max_860026284 = g_iartout5.UNAME!NELEM
		indice_860026284 = 0

		POINT BOUCLE_UNAME

		SI indice_860026284 < indice_max_860026284
		ALORS
			SI ( ( g_iartout5.UNAME[indice_860026284] < 0x20 ) || ( g_iartout5.UNAME[indice_860026284] == 0x3b ) )
			ALORS
				g_iartout5.UNAME[indice_860026284] = 0x2d
			FINSI

			indice_860026284 = indice_860026284 + 1
			SAUT BOUCLE_UNAME
		FINSI
	FINSI

	#DNAME
	SI (i_valid_field_n(g_iartin, $Tindc2r::DNAME))
	ALORS
		indice_max_860026284 = g_iartout5.DNAME!NELEM
		indice_860026284 = 0

		POINT BOUCLE_DNAME

		SI indice_860026284 < indice_max_860026284
		ALORS
			SI ( ( g_iartout5.DNAME[indice_860026284] < 0x20 ) || ( g_iartout5.DNAME[indice_860026284] == 0x3b ) )
			ALORS
				g_iartout5.DNAME[indice_860026284] = 0x2d
			FINSI

			indice_860026284 = indice_860026284 + 1
			SAUT BOUCLE_DNAME
		FINSI
	FINSI

	#VNAME
	SI (i_valid_field_n(g_iartin, $Tindc2r::VNAME))
	ALORS
		res_860026284 = i_is_field_blanc( g_iartin, $Tindc2r::VNAME)

		SI ( res_860026284 == 1 )
		ALORS
			erreur_860026284 = i_resize_tlv(g_iartout5, "T3vname", "VNAME", 5)
			erreur_860026284 = i_set_art_str(g_iartout5, $TcomptiHD::VNAME,"AUTRE")
		SINON
			erreur_860026284 = i_get_art_str( g_iartin, $Tindc2r::VNAME, pt_PRNAME_860026284 )
			erreur_860026284 = i_set_art_str( g_iartout5, $TcomptiHD::VNAME, pt_PRNAME_860026284 )
		FINSI
	SINON
		erreur_860026284 = i_ajoutChamp(g_iartout5, "T3vname", "VNAME", 0)
		erreur_860026284 = i_resize_tlv(g_iartout5, "T3vname", "VNAME", 5)
		erreur_860026284 = i_set_art_str(g_iartout5, $TcomptiHD::VNAME,"AUTRE")
	FINSI

	#INOCTVSA
	SI  !(i_valid_field_n(g_iartin, $Tindc2r::T3inoctvsa))
	ALORS
		SI ( i_valid_field_n(g_iartin, $Tindc2r::T3ibytes) )
		ALORS
			erreur_860026284 = i_ajoutChamp(g_iartout5, "T3inoctvsa", "INOCTVSA1", 1)
			champ2_860026284 = i_get_art_field( g_iartin, $Tindc2r::IBYTES )
			erreur_860026284 = i_supprChamp(g_iartout5, "T3ibytes")
			SI ( i_valid_field_n(g_iartin, $Tindc2r::T3ingigaw) )
			ALORS
				champ1_860026284 = i_get_art_field( g_iartin, $Tindc2r::INGIGAW)
				erreur_860026284 = i_supprChamp(g_iartout5, "T3ingigaw")
			SINON
				champ1_860026284 = 0
			FINSI
			diff_860026284 = champ2_860026284 - champ1_860026284

			# Application de l'algo de la FO 1590 : pour ne pas provoquer de depassement de capacite, on travaille par addition/soustraction
			# En considerant que INGIGAW=A et IBYTES=B l'algo devient :
			# - les 4 octets de droite valent B-A
			# - les 4 octets de gauche valent : A si A inferieur ou egal a B
			#                                   A - 1 si A est superieur a B
			#
			# A cause des bits de signes, on doit moduler l'algo et prendre en compte les valeurs negatives
			# On verifie aussi la presence de ingigaw car s'il est nul, l'algo est simplifie

			SI (champ1_860026284 != 0)
			ALORS
				# 4 cas sont a voir : A et B de memes signes, A et B de signe different

				SI (champ1_860026284 > 0) && (champ2_860026284 > 0)
				ALORS
					SI (champ1_860026284 > champ2_860026284)
					ALORS
						champ1_860026284 = champ1_860026284 - 1
					FINSI
					SAUT FIN_INOCTVSA
				FINSI

				SI (champ1_860026284 < 0) && (champ2_860026284 < 0)
				ALORS
					SI (champ1_860026284 > champ2_860026284)
					ALORS
						champ1_860026284 = champ1_860026284 - 1
					FINSI
					SAUT FIN_INOCTVSA
				FINSI

				SI (champ1_860026284 > 0) && (champ2_860026284 < 0)
				ALORS
					SAUT FIN_INOCTVSA
				FINSI

				SI (champ1_860026284 < 0) && (champ2_860026284 > 0)
				ALORS
					champ1_860026284 = champ1_860026284 - 1
					SAUT FIN_INOCTVSA
				FINSI
			FINSI

			POINT FIN_INOCTVSA
			erreur_860026284 = i_set_art_field( g_iartout5, $TcomptiHD::INOCTVSA2, diff_860026284 )
			erreur_860026284 = i_set_art_field( g_iartout5, $TcomptiHD::INOCTVSA1, champ1_860026284 )
		FINSI
	FINSI



	#OUTOCTVSA
	# FO 1590
	SI  !(i_valid_field_n(g_iartin, $Tindc2r::T3outoctvsa))
	ALORS
		SI ( i_valid_field_n(g_iartin, $Tindc2r::T3obytes) )
		ALORS
			erreur_860026284 = i_ajoutChamp(g_iartout5, "T3outoctvsa", "OUTOCTVSA1", 1)
			champ2_860026284 = i_get_art_field( g_iartin, $Tindc2r::OBYTES )
			erreur_860026284 = i_supprChamp(g_iartout5, "T3obytes")
			SI ( i_valid_field_n(g_iartin, $Tindc2r::T3outgigaw) )
			ALORS
				champ1_860026284 = i_get_art_field( g_iartin, $Tindc2r::OUTGIGAW)
				erreur_860026284 = i_supprChamp(g_iartout5, "T3outgigaw")
			SINON
				champ1_860026284 = 0
			FINSI

			diff_860026284 = champ2_860026284 - champ1_860026284

			# Application de l'algo de la FO 1590 : pour ne pas provoquer de depassement de capacite, on travaille par addition/soustraction
			# En considerant que OUTGIGAW=A et OBYTES=B l'algo devient :
			# - les 4 octets de droite valent B-A
			# - les 4 octets de gauche valent : A si A inferieur ou egal a B
			#                                   A - 1 si A est superieur a B
			#
			# A cause des bits de signes, on doit moduler l'algo et prendre en compte les valeurs negatives
			# On verifie aussi la presence de outgigaw car s'il est nul, l'algo est simplifie
			SI (champ1_860026284 != 0)
			ALORS

				# 4 cas sont a voir : A et B de memes signes, A et B de signe different
				SI (champ1_860026284 > 0) && (champ2_860026284 > 0)
				ALORS
					SI (champ1_860026284 > champ2_860026284)
					ALORS
						champ1_860026284 = champ1_860026284 - 1
					FINSI
					SAUT FIN_OUTOCTVSA
				FINSI

				SI (champ1_860026284 < 0) && (champ2_860026284 < 0)
				ALORS
					SI (champ1_860026284 > champ2_860026284)
					ALORS
						champ1_860026284 = champ1_860026284 - 1
					FINSI
					SAUT FIN_OUTOCTVSA
				FINSI

				SI (champ1_860026284 > 0) && (champ2_860026284 < 0)
				ALORS
					SAUT FIN_OUTOCTVSA
				FINSI

				SI (champ1_860026284 < 0) && (champ2_860026284 > 0)
				ALORS
					champ1_860026284 = champ1_860026284 - 1
					SAUT FIN_OUTOCTVSA
				FINSI
			FINSI

			POINT FIN_OUTOCTVSA
			erreur_860026284 = i_set_art_field( g_iartout5, $TcomptiHD::OUTOCTVSA2, diff_860026284 )
			erreur_860026284 = i_set_art_field( g_iartout5, $TcomptiHD::OUTOCTVSA1, champ1_860026284 )
		FINSI
	FINSI

	#INPACVSA
	SI ( !(i_valid_field_n(g_iartin, $Tindc2r::T3inpacvsa)) && i_valid_field_n(g_iartin, $Tindc2r::T3inpackets) )
	ALORS
		erreur_860026284 = i_ajoutChamp(g_iartout5, "T3inpacvsa", "INPACVSA1", 1)
		champ2_860026284 = i_get_art_field( g_iartin, $Tindc2r::INPACKETS )
		erreur_860026284 = i_set_art_field( g_iartout5, $TcomptiHD::INPACVSA1, 0)
		erreur_860026284 = i_set_art_field( g_iartout5, $TcomptiHD::INPACVSA2, champ2_860026284 )
		erreur_860026284 = i_supprChamp(g_iartout5, "T3inpackets")
	SINON
		SI (i_valid_field_n(g_iartin, $Tindc2r::T3inpackets))
		ALORS
			erreur_860026284 = i_supprChamp(g_iartout5, "T3inpackets")
		FINSI
	FINSI


	#OUTPACVSA
	SI ( !(i_valid_field_n(g_iartin, $Tindc2r::T3outpacvsa)) && i_valid_field_n(g_iartin, $Tindc2r::T3outpackets) )
	ALORS
		erreur_860026284 = i_ajoutChamp(g_iartout5, "T3outpacvsa", "OUTPACVSA1", 1)
		champ2_860026284 = i_get_art_field( g_iartin, $Tindc2r::OUTPACKETS )
		erreur_860026284 = i_set_art_field( g_iartout5, $TcomptiHD::OUTPACVSA1, 0)
		erreur_860026284 = i_set_art_field( g_iartout5, $TcomptiHD::OUTPACVSA2, champ2_860026284 )
		erreur_860026284 = i_supprChamp(g_iartout5, "T3outpackets")
	SINON
		SI (i_valid_field_n(g_iartin, $Tindc2r::T3outpackets))
		ALORS
			erreur_860026284 = i_supprChamp(g_iartout5, "T3outpackets")
		FINSI
	FINSI
FINSI

#---------------------------------------------------------------------------
# SYMPHONIE
#---------------------------------------------------------------------------

SI ( !i_ChercherCouranteECC(instSYMPH_860026284) )
ALORS
	#------------------------------
	# Duplication de l article
	#---------------------------
	#trace("Duplication vers SYMPHONIE")

	SI ( i_dup_art_tab(g_iartin,g_iartout6,C_TSymTindc2r_860026284) )
	ALORS
		trace("Erreur de i_dup_art")
		code_errone_860026284 = 0xA0D2
		erreur_860026284 = i_PlvMessEmettre(8602,2,g_iartin,"",3,code_errone_860026284,C_TSymTindc2r_860026284,C_Article_860026284)
		SAUT  DISTRI_ERR
	FINSI

	#------------------------------
	# Mise au format
	#------------------------------

	#*** Champs obligatoires ***
	#------------------------------

	#RANTYPE
	erreur_860026284=i_set_art_str(g_iartout6,$TsymTindc2r::RANTYPE,"BAS")

	# SGTQS
	erreur_860026284 = i_set_art_str(g_iartout6, $TsymTindc2r::SGTQS, pt_SGTQS_860026284)

	# ECC FACT
	erreur_860026284 = i_set_art_str(g_iartout6, $TsymTindc2r::ECC_FACT, pt_ECC_FACT_860026284)

	# Optimisation des champs pour supprimer les blancs afin de ne pas depasser la taille_max des 1000 octets
	erreur_860026284=i_optimArtTLV(g_iartout6,g_iartout6)

	#*** Champs facultatifs ***
	#------------------------------

	SI( i_valid_field_n(g_iartin,$Tindc2r::IDUS_NUM))
	ALORS
		erreur_860026284 = i_ajoutChamp(g_iartout6, "T3idus", "IDUS_NUM", 0x01)

		#NDR et CLIENT_ID
		erreur_860026284=i_get_art_str(g_iartin,$IDUS_NUM,pt_BUF_860026284)
		indice_max_860026284 = i_strlen(pt_BUF_860026284)
		indice_860026284 = 0
		i_strcpy(pt_CLIENTID_860026284,"")
		i_strcpy(pt_temp_860026284,"")

		POINT BOUCLE_NDR

		SI indice_860026284 < indice_max_860026284
		ALORS
			i_get_sub_str(pt_BUF_860026284,indice_860026284,indice_860026284,pt_car_860026284)
			res_860026284=i_strcmp(pt_car_860026284,"#")

			SI ( res_860026284 == 0 )
			ALORS
				nombre_diese_860026284 = nombre_diese_860026284 + 1
				indice_diese_860026284 = indice_860026284
			FINSI
			res_860026284=i_strcmp(pt_car_860026284,",")

			SI ( res_860026284 == 0 )
			ALORS
				nombre_virg_860026284=nombre_virg_860026284+1
			FINSI

			SI ( (nombre_diese_860026284 == 1) && (indice_diese_860026284 != indice_860026284) )
			ALORS
				res_860026284= i_format_str2(pt_resul_860026284,"%s%s",pt_CLIENTID_860026284,pt_car_860026284)
				i_strcpy(pt_CLIENTID_860026284,pt_resul_860026284)
			FINSI
			res_860026284=i_strcmp(pt_car_860026284,"#")

			SI (( nombre_diese_860026284 > 2) ||( nombre_diese_860026284 == 2 && res_860026284 != 0))
			ALORS
				res_860026284= i_format_str2(pt_resul_860026284,"%s%s",pt_temp_860026284,pt_car_860026284)
				i_strcpy(pt_temp_860026284,pt_resul_860026284)
			FINSI
			indice_860026284 = indice_860026284 + 1
			SAUT BOUCLE_NDR
		FINSI

		SI (nombre_diese_860026284 == 5 && nombre_virg_860026284 == 1)
		ALORS
			erreur_860026284=i_set_art_str(g_iartout6,$TsymTindc2r::IDUS_NUM,pt_temp_860026284)
			erreur_860026284 = i_ajoutChamp(g_iartout6, "T3clientid", "CLIENTID", 0x01)
			erreur_860026284=i_set_art_str(g_iartout6,$TsymTindc2r::CLIENTID,pt_CLIENTID_860026284)
		SINON
			erreur_860026284=i_set_art_str(g_iartout6,$TsymTindc2r::IDUS_NUM,pt_BUF_860026284)
		FINSI
	FINSI

	#RNAME
	SI( i_valid_field_n(g_iartin,$Tindc2r::RNAME))
	ALORS
		erreur_860026284=i_get_art_str(g_iartin,$RNAME,pt_BUF_860026284)
		erreur_860026284 = i_ajoutChamp(g_iartout6, "T3rname", "RNAME", 0x01)
		erreur_860026284=i_set_art_str(g_iartout6,$TsymTindc2r::RNAME,pt_BUF_860026284)
	FINSI

	#Reprise FO 1738 + mail Pierre Boulet du 21/03/06 17h30
	# 22/06/06 champ DATE renseigni avec date debut

	#DATE ICAR_UTC
	erreur_860026284 = i_set_art_field(g_iartout6, $TsymTindc2r::DATE, ICAR_UTC_860026284 )

	#TYPORT=DEDE_NUM
	SI (i_valid_field_n(g_iartin, $Tindc2r::DEDE_NUM))
	ALORS
		erreur_860026284 = i_ajoutChamp(g_iartout6, "T3typort", "TYPORT", 0x01)
		erreur_860026284=i_get_art_str(g_iartin,$DEDE_NUM,pt_BUF_860026284)
		erreur_860026284 = i_set_art_str(g_iartout6, $TsymTindc2r::TYPORT,pt_BUF_860026284)
	FINSI

	#FAI
	SI( i_valid_field_n(g_iartin,$Tindc2r::UNAME_ASCII) )
	ALORS
		erreur_860026284=i_get_art_str(g_iartin,$UNAME_ASCII,pt_BUF_860026284)
		i_get_sub_str(pt_BUF_860026284,0,3,pt_temp_860026284)
		res_860026284=i_strcmp(pt_temp_860026284,"fti/")

		SI ( res_860026284 == 0)
		ALORS
			i_strcpy(pt_temp_860026284,"Wanadoo")
			erreur_860026284 = i_ajoutChamp(g_iartout6, "T3fai", "FAI", 0x01)
			erreur_860026284 = i_set_art_str(g_iartout6, $TsymTindc2r::FAI,pt_temp_860026284)
		SINON
			SI( i_valid_field_n(g_iartin,$Tindc2r::DNAME_ASCII) )
			ALORS
				erreur_860026284=i_get_art_str(g_iartin,$DNAME_ASCII,pt_temp_860026284)
				erreur_860026284 = i_ajoutChamp(g_iartout6, "T3fai", "FAI", 0x01)
				erreur_860026284 = i_set_art_str(g_iartout6, $TsymTindc2r::FAI,pt_temp_860026284)
			FINSI
		FINSI
		# Optimisation des champs pour supprimer les blancs afin de ne pas depasser la taille_max des 1000 octets
		erreur_860026284=i_optimArtTLV(g_iartout6,g_iartout6)
	FINSI

	#DUREM
	SI (i_valid_field_n(g_iartin, $Tindc2r::DUREM))
	ALORS
		erreur_860026284 = i_ajoutChamp(g_iartout6, "T3durem", "DUREM", 0x01)
		erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::DUREM, DUREM_860026284)
	FINSI

	#SESSION_ID
	SI (i_valid_field_n(g_iartin, $Tindc2r::SESSIONID))
	ALORS
		erreur_860026284 = i_ajoutChamp(g_iartout6, "T3sessionid", "SESSIONID", 0x01)
		erreur_860026284=i_get_art_str(g_iartin,$SESSIONID,pt_BUF_860026284)
		erreur_860026284=i_set_art_str(g_iartout6,$TsymTindc2r::SESSIONID,pt_BUF_860026284)
	FINSI

	# USERADIP (octets de ADIP separes par des points)
	SI( i_valid_field_n(g_iartin,$Tindc2r::ADIP))
	ALORS
		erreur_860026284 = i_ajoutChamp(g_iartout6, "T3adip", "", 0x01)
		i_IntToIpAddr( i_get_art_field (g_iartin, $ADIP),pt_resul_860026284)
		erreur_860026284 = i_set_art_str( g_iartout6,$TsymTindc2r::ADIP,pt_resul_860026284 )
	FINSI

	#STOPINFO
	SI( i_valid_field_n(g_iartin,$Tindc2r::DISC) || i_valid_field_n(g_iartin,$Tindc2r::TERM) )
	ALORS
		erreur_860026284 = i_ajoutChamp(g_iartout6, "T3stopinfo", "", 0x01)

		SI( i_valid_field_n(g_iartin,$Tindc2r::TERM))
		ALORS
			stopinfo_connect_860026284= i_get_art_field (g_iartin, $TERM)
		SINON
			stopinfo_connect_860026284= 0
		FINSI

		SI( i_valid_field_n(g_iartin,$Tindc2r::DISC))
		ALORS
			stopinfo_disc_860026284= i_get_art_field (g_iartin, $DISC)
		SINON
			stopinfo_disc_860026284= 0
		FINSI

		erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::STOPINFO_DISC, stopinfo_disc_860026284)
		erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::STOPINFO_CON, stopinfo_connect_860026284)

	FINSI

	#INPACKETS
	SI (i_valid_field_n(g_iartin, $Tindc2r::T3inpacvsa))
	ALORS
		erreur_860026284 = i_ajoutChamp(g_iartout6, "T3inpackets", "", 0x01)
		res_860026284= i_get_art_field (g_iartin, $INPACVSA1)
		erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::INPACVSA1, res_860026284)
		res_860026284= i_get_art_field (g_iartin, $INPACVSA2)
		erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::INPACVSA2, res_860026284)

	SINON
		SI (i_valid_field_n(g_iartin, $Tindc2r::INPACKETS))
		ALORS
			erreur_860026284 = i_ajoutChamp(g_iartout6, "T3inpackets", "", 0x01)
			erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::INPACVSA1, 0)
			res_860026284= i_get_art_field (g_iartin, $INPACKETS)
			erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::INPACVSA2, res_860026284)
		FINSI

	FINSI

	#OUTPACKETS
	SI (i_valid_field_n(g_iartin, $Tindc2r::T3outpacvsa))
	ALORS
		erreur_860026284 = i_ajoutChamp(g_iartout6, "T3outpackets", "", 0x01)
		res_860026284= i_get_art_field (g_iartin, $OUTPACVSA1)
		erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::OUTPACVSA1, res_860026284)
		res_860026284= i_get_art_field (g_iartin, $OUTPACVSA2)
		erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::OUTPACVSA2, res_860026284)

	SINON
		SI (i_valid_field_n(g_iartin, $Tindc2r::OUTPACKETS))
		ALORS
			erreur_860026284 = i_ajoutChamp(g_iartout6, "T3outpackets", "", 0x01)
			erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::OUTPACVSA1, 0)
			res_860026284= i_get_art_field (g_iartin, $OUTPACKETS)
			erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::OUTPACVSA2, res_860026284)
		FINSI
	FINSI

	#INOCTVSA
	SI (!i_valid_field_n(g_iartin, $Tindc2r::T3inoctvsa) && i_valid_field_n(g_iartin, $Tindc2r::T3ibytes) && i_valid_field_n(g_iartin, $Tindc2r::T3ingigaw) )
	ALORS
		erreur_860026284 = i_ajoutChamp(g_iartout6, "T3inoctvsa", "", 0x01)
		res_860026284= i_get_art_field (g_iartin, $INGIGAW)
		erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::INOCTVSA1, res_860026284)
		res_860026284= i_get_art_field (g_iartin, $IBYTES)
		erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::INOCTVSA2, res_860026284)
	SINON
		SI (i_valid_field_n(g_iartin, $Tindc2r::T3inoctvsa))
		ALORS
			erreur_860026284 = i_ajoutChamp(g_iartout6, "T3inoctvsa", "", 0x01)
			res_860026284= i_get_art_field (g_iartin, $INOCTVSA1)
			erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::INOCTVSA1, res_860026284)
			res_860026284= i_get_art_field (g_iartin, $INOCTVSA2)
			erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::INOCTVSA2, res_860026284)
		FINSI
	FINSI

	#OUTOCTVSA
	SI (!i_valid_field_n(g_iartin, $Tindc2r::T3outoctvsa) && i_valid_field_n(g_iartin, $Tindc2r::T3obytes) && i_valid_field_n(g_iartin, $Tindc2r::T3outgigaw) )
	ALORS
		erreur_860026284 = i_ajoutChamp(g_iartout6, "T3outoctvsa", "", 0x01)
		res_860026284= i_get_art_field (g_iartin, $OUTGIGAW)
		erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::OUTOCTVSA1, res_860026284)
		res_860026284= i_get_art_field (g_iartin, $OBYTES)
		erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::OUTOCTVSA2, res_860026284)
	SINON
		SI (i_valid_field_n(g_iartin, $Tindc2r::T3outoctvsa))
		ALORS
			erreur_860026284 = i_ajoutChamp(g_iartout6, "T3outoctvsa", "", 0x01)
			res_860026284= i_get_art_field (g_iartin, $OUTOCTVSA1)
			erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::OUTOCTVSA1, res_860026284)
			res_860026284= i_get_art_field (g_iartin, $OUTOCTVSA2)
			erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::OUTOCTVSA2, res_860026284)
		FINSI
	FINSI

	# STATUS
	SI (i_valid_field_n(g_iartin, $Tindc2r::STATUS))
	ALORS
		erreur_860026284 = i_ajoutChamp(g_iartout6, "T3status", "STATUS", 0x10)
		res_860026284= i_get_art_field (g_iartin, $STATUS)
		erreur_860026284 = i_set_art_field( g_iartout6, $TsymTindc2r::STATUS, res_860026284)
	FINSI

	#PRNAME
	SI (i_valid_field_n(g_iartin, $Tindc2r::T3prname))
	ALORS
		erreur_860026284 = i_ajoutChamp(g_iartout6, "T3prname", "PRNAME", 0x01)
		erreur_860026284=i_get_art_str(g_iartin,$PRNAME,pt_BUF_860026284)
		erreur_860026284=i_set_art_str(g_iartout6,$TsymTindc2r::PRNAME,pt_BUF_860026284)

	FINSI

	#AUTH = USER + DOMAIN
	SI (i_valid_field_n(g_iartin, $Tindc2r::UNAME) || i_valid_field_n(g_iartin, $Tindc2r::DNAME))
	ALORS
		SI (i_valid_field_n(g_iartin, $Tindc2r::UNAME))
		ALORS
			erreur_860026284=i_get_art_str(g_iartin,$UNAME_ASCII,pt_temp_860026284)
			auth_860026284=1
			erreur_860026284= i_format_str2(pt_BUF_860026284,"%s%s",pt_temp_860026284," ")
		FINSI

		#DOMAIN
		SI (i_valid_field_n(g_iartin, $Tindc2r::DNAME))
		ALORS
			erreur_860026284=i_get_art_str(g_iartin,$DNAME_ASCII,pt_temp_860026284)
			SI( auth_860026284==1)
			ALORS
				erreur_860026284= i_format_str2(pt_auth_860026284,"%s%s",pt_BUF_860026284,pt_temp_860026284)
			SINON
				i_strcpy(pt_auth_860026284,pt_temp_860026284)

			FINSI
			auth_860026284=2
		FINSI

		erreur_860026284 = i_ajoutChamp(g_iartout6, "T3auth", "AUTH", 0x01)

		SI(auth_860026284 ==1)
		ALORS
			taille_champ_860026284=i_strlen(pt_BUF_860026284)
			erreur_860026284=i_resize_tlv(g_iartout6,"T3auth","AUTH",taille_champ_860026284)
			erreur_860026284 = i_set_art_str(g_iartout6, $TsymTindc2r::AUTH,pt_BUF_860026284)
		SINON
			taille_champ_860026284=i_strlen(pt_auth_860026284)
			erreur_860026284=i_resize_tlv(g_iartout6,"T3auth","AUTH",taille_champ_860026284)
			erreur_860026284 = i_set_art_str(g_iartout6, $TsymTindc2r::AUTH,pt_auth_860026284)
		FINSI
		# supression des blancs de bourrage dans tous les champs
		erreur_860026284=i_optimArtTLV(g_iartout6,g_iartout6)
	FINSI
FINSI


############################################################################
# Envoi vers IECC
############################################################################

#---------------------------------------------------------------------------
# COMPTISSIMO
#---------------------------------------------------------------------------

SI ( !i_ChercherCouranteECC(instCOMPTI_860026284) )
ALORS
	res_860026284 = i_stocke_art_iecc(g_iartout5, instCOMPTI_860026284)
	trace("Emission vers COMPTISSIMO")
FINSI

#---------------------------------------------------------------------------
# SYMPHONIE
#---------------------------------------------------------------------------

SI ( !i_ChercherCouranteECC(instSYMPH_860026284) )
ALORS
	res_860026284 = i_stocke_art_iecc(g_iartout6,instSYMPH_860026284)
	trace("Emission vers SYMPHONIE")
FINSI

SAUT DISTRI_FIN

############################################################################
# Stockage en Errone
############################################################################

POINT DISTRI_ERR

trace("Stockage de l'article en ERRONE")

erreur_860026284 = i_make_art_rej(g_iartin, g_iartout,code_errone_860026284)
erreur_860026284 = i_stocke_art(g_iartout,0,PT_ERRONE,0)

SAUT DISTRI_FIN

POINT DISTRI_FIN

RETOUR TRAIT_OK

