DEFINITION NUMTABSEL_860027503 0
DEFINITION NUMTAB_860027503 1
DEFINITION CATEG_860027503 0
DEFINITION CODE_ARTICLE_860027503 3
DEFINITION BASE_860027503 1
DEFINITION RES_CLDEST_860027503 1
DEFINITION RES_TYPCTR_860027503 2
DEFINITION RES_CODCIR_860027503 3
DEFINITION RES_CODCIRDR_860027503 5
DEFINITION RES_UNITE_860027503 6
DEFINITION UTC_860027503 0
DEFINITION UTCDR_860027503 100
DEFINITION MILEURO_860027503 10
DEFINITION MILEURODR_860027503 110
DEFINITION COEFF_860027503 94
DEFINITION CPT_REJET_860027503 11
DEFINITION CPT_REJET2_860027503 10
DEFINITION CPT_REJET3_860027503 12
DEFINITION CPT_REJET5_860027503 9
DEFINITION T_Inter_BTIP_ETEL_860027503 "Inter_BTIP_ETEL"
REGISTRE ENTIER efficace_860027503
REGISTRE ENTIER tap_860027503
REGISTRE ENTIER hlahm1_860027503
REGISTRE ENTIER icar_abs_860027503
REGISTRE ENTIER erreur_860027503
REGISTRE ENTIER champ1_860027503
REGISTRE ENTIER champ2_860027503
REGISTRE ENTIER prefixe_860027503
REGISTRE ENTIER numzone_860027503
REGISTRE ENTIER vcdr2_860027503
REGISTRE ENTIER unite_860027503
REGISTRE ENTIER vc_860027503
REGISTRE ENTIER longueur_860027503
REGISTRE ENTIER typ_ctr_860027503
REGISTRE ENTIER code_rejet_860027503
REGISTRE ENTIER nb_supp_860027503
REGISTRE ENTIER existe_860027503
REGISTRE ENTIER mevo_860027503
REGISTRE ENTIER CCD_860027503
REGISTRE ENTIER AUDIOTEL_860027503
REGISTRE ENTIER RecalculCallType_860027503
REGISTRE ENTIER idus_ok_860027503
REGISTRE ENTIER idus_inter_860027503
REGISTRE ENTIER REJET_860027503
REGISTRE ENTIER gmt_date_860027503
REGISTRE ENTIER SANS_IDUS_860027503
REGISTRE ENTIER Inter_etel_VoIpVPN_860027503
REGISTRE ENTIER Inter_longueur_prefixe_860027503
REGISTRE ENTIER val_DETR_INF_860027503
REGISTRE POINTEUR pt_champs_conc_860027503
REGISTRE POINTEUR pt_champ1_860027503
REGISTRE POINTEUR pt_champ2_860027503
REGISTRE POINTEUR pt_call_type_860027503
REGISTRE POINTEUR pt_DETR_NUM_860027503
REGISTRE POINTEUR pt_DETR_NUM_DCB_860027503
REGISTRE POINTEUR pt_TerminCallee_860027503
REGISTRE POINTEUR pt_TerminCallee_sans_33_860027503
REGISTRE POINTEUR pt_TerminCallee_sans_33pref_860027503
REGISTRE POINTEUR pt_len_prefixe_860027503
REGISTRE POINTEUR pt_CdidentityPU_860027503
REGISTRE POINTEUR pt_VtrunkIN_860027503
REGISTRE POINTEUR pt_TerminCallee_sans_33pref33_860027503
REGISTRE POINTEUR pt_DEDE_NORM_860027503


############################################################################
#	Pcode de TRAITEMENT Tetelephonie_trt
#	Article DC Etelephonie en entree de Platine
#	Pcode de traitement
#	2004 - PSA- Creation
# Historique
#	05/05/04 - NSA - FO 665 - Pb sur longueur DETR_NUM
#			FO654 - Retour ` la ligne entre 2 pointeurs
#			FO666 - Appel vers Messagerie Vocale 300000
#	17/05/04 - PSA - Developpement G2R0Ce
#	07/07/04 - DRE - Developpement G2ROCb ouverture Etelephonie vers SRP et 12
#	09/07/04 - DRE - Ajout test pour Unite = 10 (MILEURO)
#	09/08/04 - PSA - FO778 : report sur Cb
#	20/09/04 - PSA - Fusion Cm = Cl + Cb (report des FO 858 et 864)
# 	24/09/04 - PSA - FO885 DETR enrichi meme pour les inefficaces
#	01/10/04 - PSA - FO892 pas d appel BNC si CALL_TYPE a 6 et demandeur international
#	16/12/04 - THE - FO969 aiguillage pour les appels du 12
#	17/01/05 - DRE - Reprise de la FO 969
#	15/02/05 - RBE - FO1121 : Redressement Nbre d'UT pour FCT
#	01/04/05 - DRE - G2R1Cm (Facturation des appels vers SRP tiers avec ITX depuis des origines IP)
#			 Mise a jour champ TYPCTR dans l'ajoutCE T4REJET
#	22/04/05 - PSA - FO1259
#	31/05/05 - JLG THE - Fusion G2R1Ca de la G2R1Ch REJET2 (REJET=2)
#	14/06/05 - THE - FO 1342 (Code Art ` 1)
#	28/06/05 - THE - FO 1365 (code Art = 3 et categ = 0
#	19/08/05 - RBE - FO 1409 Modification traitement DETR_NUM
#	23/08/05 - DRE - correction de la Modif traitement DETR_NUM
#	03/10/05 - PSA - G2R1Co : filtrage des appels vers le 119 (REJET3)
#	12/07/06 - FAL - G2R1Cu FO1884 RTC-ip et RTC-ip Service vers symphonie meme si err BNC
#	13/09/06 - DRE - G2R2Ct interrogation table NARxyz pour 118_FRT avec ETELxxxxxxxxx
#	09/10/06 - JLG - G2R2Cv FO1987 Nouvelle Enveloppe E_RPV (modif L1 et T1)
# 	14/11/06 - JLG - G2R2Cv type_ctr=13 valeur possible (rejet4)
#	06/12/06 - JLG - G2R2Cv FO2065 rajout typ_ctr valeur possible = 7
#	01/02/07 - FAL - G3R0Ca FO2108 RTC-ip et RTC-ip Service vers symphonie meme si err de normalisation
#	06/02/07 - THE - G3R0Ct
#   	15/02/07 - DRE - G3ROCt FO2113
#	01/03/07 - FAL - G3R0Cw suppression FCT (suppression de vcUT fin FO1121 )
#   	28/12/07 - PKH - G3R5 lot2 suppression test croise sur champ SelectorIN et OriginCaller
#	25/03/08 - JLG - G3R6 evol spec 21.1 FO 2357 suppresion controle TYPCTR
#	26/05/10 - THE - G3R17 QC365 Pb si Demande inconnu et duree a zero suite envoi sur film
#	26/05/10 - THE-DRE - G3R20 Prise en compte AVP530
#	15/07/11 - RHE - G3R21CY
#	25/07/11 - RHE - G3R22 QC503 Prefixe non retire a tort
#	01/08/11 - RHE - G3R22 QC506 probleme de calcul de longueur pour un Dde court
# 	01/09/11 - DRE - G3R22 QC515 Evolution demande pour retirer le CC derriere le prefixe (33pref33)
#	12/10/2011 RHE VerifPcode
# 	03/11/11 - THE - G3R22 QC534 Champ DETR_INF
#	22/11/11 - RHE - G3R23 suppression interrogation NARxyz
#	05/12/11 - DRE - G3R23 QC555 initialisation pt_call_type + modification mise a jour champ CALL_TYPE
#	09/02/12 - DRE - G3R23 QC572 mise a jour champ CALL_TYPE pour article inefficace
# 	11/04/14 - PSA - G4R6 lot 3 : C+S appelant
#
############################################################################

# Constantes


# Variables fonctionnelles globales

# Divers
#DRE - G3R22 QC515
# G4R6 lot 3 


############################
# Initialisation variables #
############################

AUDIOTEL_860027503 = 0
CCD_860027503 = 0
mevo_860027503 =0
existe_860027503 = 0
tap_860027503 = 0
prefixe_860027503 = 0
champ1_860027503 = 0
champ2_860027503 = 0
hlahm1_860027503 = 0
numzone_860027503 = 0
# VerifPcode - RHE # dede = 0
vcdr2_860027503 = 0
unite_860027503 = 0
longueur_860027503 = 0
typ_ctr_860027503 = 0
nb_supp_860027503 = 0
RecalculCallType_860027503 = 0
idus_ok_860027503 = 0
idus_inter_860027503 = 0
gmt_date_860027503 = 0
SANS_IDUS_860027503 = 0
Inter_etel_VoIpVPN_860027503 = 0
Inter_longueur_prefixe_860027503 = -1
val_DETR_INF_860027503 = 0

pt_champs_conc_860027503	 = "908674593789458995682349856890867459378945899568234985689086745937894589956823498568908674593789458995682349856"
# VerifPcode - RHE #
#pt_champ1	 = "223456789022345678902234567890223456789022345678902234567890223456789022345678902234567890223422345678902234567"
pt_champ1_860027503	 = "223456789022345678902234567890223456789022345678902234567890223456789022345678902234567890223422345678902234567890123456789012345678"
pt_champ2_860027503	 = "444456789022345678902234567890223456789022345678902234567890223456789022345678902234567890223422345678902234567"
pt_call_type_860027503	 = "1234"
#pt_DEDE_118FT	 = "999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888999888"
#pt_DETR_NUM	 = "555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555"
pt_DETR_NUM_860027503	 = "555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555012345678901234567890"
#pt_DETR_NUM_DCB = "pt_DETR_NUM_DCB0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
pt_DETR_NUM_DCB_860027503 = "pt_DETR_NUM_DCB012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456"
#pt_TerminCallee = "pt_TerminCallee0123456789"
pt_TerminCallee_860027503 = "pt_TerminCallee012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456"
#pt_TerminCallee_sans_33 = "pt_TerminCallee_sans_330123456789"
pt_TerminCallee_sans_33_860027503 = "pt_TerminCallee_sans_338901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456"
#pt_TerminCallee_sans_33pref = "pt_TerminCallee_sans_33pref0123456789"
pt_TerminCallee_sans_33pref_860027503 = "pt_TerminCallee_sans_33pref234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456"
pt_len_prefixe_860027503 = "pt_len_prefixe0123456789"
#pt_CdidentityPU  = "pt_CdidentityPU0123456789"
pt_CdidentityPU_860027503  = "pt_CdidentityPU01234567890123456789"
#pt_VtrunkIN = "pt_VtrunkIN0123456789"
pt_VtrunkIN_860027503 = "pt_VtrunkIN012345678901234567890123"

#DRE - G3R22 QC515
#pt_TerminCallee_sans_33pref33 = "pt_TerminCallee_sans_33pref330123456789"
pt_TerminCallee_sans_33pref33_860027503 = "pt_TerminCallee_sans_33pref334567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456"
# G4R6 lot 3 
pt_DEDE_NORM_860027503 = "777777777777777777777777777777777777777777777777777777777777777777"

#i_strcpy(pt_DEDE_118FT,"")
i_strcpy(pt_DETR_NUM_860027503,"")
i_strcpy(pt_DETR_NUM_DCB_860027503,"")
i_strcpy(pt_TerminCallee_860027503, "")
i_strcpy(pt_TerminCallee_sans_33_860027503, "")
i_strcpy(pt_TerminCallee_sans_33pref_860027503, " ")
i_strcpy(pt_len_prefixe_860027503, "")
i_strcpy(pt_CdidentityPU_860027503, "")
i_strcpy(pt_VtrunkIN_860027503, "")
#DRE QC555
i_strcpy(pt_call_type_860027503, "0")

#DRE - G3R22 QC515
i_strcpy(pt_TerminCallee_sans_33pref33_860027503, " ")

i_strcpy(pt_champs_conc_860027503,"")
i_strcpy(pt_champ1_860027503,"")
i_strcpy(pt_champ2_860027503,"")

# G4R6 lot 3 
i_strcpy(pt_DEDE_NORM_860027503,"")


#trace (":__LINE__ #### DEBUT Pcode de Traitement <__FILE__> #### ")

# Duplication article entree pour retaillage des longueurs
erreur_860027503 = i_dup_art_id(g_iartin, g_iartout)

###############################################################################################
# Ajouts des champs qui seront utiles pour la distribution  et pour l appel BNC               #
###############################################################################################

erreur_860027503 = i_ajoutChampNum(g_iartout, $Tetelephonie::T4ccd,$Tetelephonie::CCD,2)

##############
# EFFICACITE #
##############

champ1_860027503 = i_get_art_field(g_iartout, $Tetelephonie::TerminCause)
champ2_860027503 = i_get_art_field(g_iartout, $Tetelephonie::Duree)

SI ( ( ( ( champ1_860027503 != 16 ) && ( champ1_860027503 != 31 ) )
|| !( i_valid_field_n(g_iartout, $Tetelephonie::StartTime ) ) )
&& ( champ2_860027503 == 0 ) )
ALORS
	efficace_860027503 = 0
	erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::EFFICACITE, 0)
SINON
	efficace_860027503 = 1
	erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::EFFICACITE, 1)
FINSI

################################################################
# Controles croises des champs : uniquement pour les efficaces #
################################################################
# suppresion controle croise champ T3SelectorIN et T3OriginCaller
SI (efficace_860027503 == 1)
ALORS
	SI ! ( i_valid_field_n(g_iartout, $Tetelephonie::T3SelectorIN) || i_valid_field_n(g_iartout, $Tetelephonie::T3OriginCaller) )
	ALORS
		SANS_IDUS_860027503 = 1
	FINSI

	SI ! ( i_valid_field_n(g_iartout, $Tetelephonie::T3CdidentityPU) || i_valid_field_n(g_iartout, $Tetelephonie::T3VtrunkIN) || i_valid_field_n(g_iartout, $Tetelephonie::T3TerminCallee))
	ALORS
		code_rejet_860027503 = 0x50F2
		i_strcpy(pt_champs_conc_860027503, "T3CdidentityPU, T3VtrunkIN et T3TerminCallee")
		erreur_860027503 = i_PlvMessEmettre(7660,2,g_iartin,"",2,code_rejet_860027503,pt_champs_conc_860027503,0)
		SAUT STOCKE_ERRONE
	FINSI
FINSI

#######################
# Messagerie vocale ? #
#######################

SI ( i_valid_field_n(g_iartout, $Tetelephonie::T3Callee) )
ALORS
	SI (g_iartout.Callee[0] == 3)
	ALORS
		mevo_860027503 = 1
	FINSI
FINSI

######################################################################################################
# Mise a jour des champs utilises pour l'appel a la BNC + MAJ ajout CE correspondants pour Symphonie #
######################################################################################################

# Champs IDUS_INF et IDUS_NUM
# On cherche a mettre a jour le champ IDUS pour calculer HLAHM1 meme si l article est inefficace

SI ( i_valid_field_n(g_iartout, $Tetelephonie::T3SelectorIN) )
ALORS
	idus_ok_860027503 = 1
	longueur_860027503 = ( i_get_art_field(g_iartin, $Tetelephonie::L3SelectorIN) - 1 ) * 8
	SI (g_iartout.SelectorIN[0] == 3) && (g_iartout.SelectorIN[1] == 3)
	ALORS
		# On se trouve dans le cas d'un numero de la forme [33] ZABPQMCDU..... (soit code pays FRANCE + numero)
		# On duplique l'ensemble du champ dans IDUSN INF+NUM puis on force les 2 premiers digits avec la valeur coherente pour le champ INF
		erreur_860027503 = i_dup_chp_1val(g_iartout, g_iartout, $Tetelephonie::SelectorIN, $Tetelephonie::IDUS)
		erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::IDUS_INF, 0x80)
	SINON
		# On se trouve dans le cas d'un numero de la forme I1I2I3....... (soit code pays + numero)
		# On duplique l'ensemble du champ dans IDUSN_NUM
		erreur_860027503 = i_dup_chp_1val(g_iartout, g_iartout, $Tetelephonie::SelectorIN, $Tetelephonie::IDUS_NUM)
		erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::IDUS_INF, 0xC0)
		idus_inter_860027503 = 1
	FINSI
SINON
	SI ( i_valid_field_n(g_iartout, $Tetelephonie::T3OriginCaller) )
	ALORS
		idus_ok_860027503 = 1
		longueur_860027503 = ( i_get_art_field(g_iartin, $Tetelephonie::L3OriginCaller) - 1 ) * 8
		# On reprend le meme traitement que pour SelectorTagSW
		SI (g_iartout.OriginCaller[0] == 3) && (g_iartout.OriginCaller[1] == 3)
		ALORS
			erreur_860027503 = i_dup_chp_1val(g_iartout, g_iartout, $Tetelephonie::OriginCaller, $Tetelephonie::IDUS)
			erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::IDUS_INF, 0x80)
		SINON
			erreur_860027503 = i_dup_chp_1val(g_iartout, g_iartout, $Tetelephonie::OriginCaller, $Tetelephonie::IDUS_NUM)
			erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::IDUS_INF, 0xC0)
			idus_inter_860027503 = 1
		FINSI
	SINON
		# On force IDUS avec 00 0F
		longueur_860027503 = 8
		g_iartout.IDUS_NUM[0] = 0
		prefixe_860027503 = 0
	FINSI
FINSI

# on reinitialise IDUS INF+NUM a 000F et longueur a 8 pour les cas particuliers de champs ne comportant que le prefixe en entree

SI ( longueur_860027503 == 0 )
ALORS
	longueur_860027503 = 8
	g_iartout.IDUS_NUM[0] = 0
	prefixe_860027503 = 0
FINSI

erreur_860027503 = i_resize_tlv(g_iartout, "T4idus", "IDUS_NUM", longueur_860027503)

##########
# HLAHM1 #
##########

# On calcule HLAHM1 ici car il sert pour l appel a la BNC (si article efficace)
# et il est inutile de continuer les traitements (si article inefficace)

gmt_date_860027503 = i_get_art_field(g_iartout, $Tetelephonie::AuthorizeTime)
SI (idus_ok_860027503 == 1)
ALORS
	numzone_860027503 = i_DHgetZoneID(NUMTABSEL_860027503, g_iartout)
SINON
	# En l'absence de demandeur, on considere qu on est en metropole
	numzone_860027503 = 7
FINSI

hlahm1_860027503 = i_DHgetLocalTime(NUMTAB_860027503, numzone_860027503, gmt_date_860027503)


# Appel e-telephonie vers VoIpVPN (BTIP SIP)
# si Prefixe dans table Inter_BTIP_ETEL

SI ( i_valid_field_n(g_iartout, $Tetelephonie::T3TerminCallee) )
ALORS
	erreur_860027503 = i_get_art_str(g_iartout, $Tetelephonie::TerminCallee, pt_TerminCallee_860027503)

	SI !(i_strplcmp(pt_TerminCallee_860027503, "33", 0, 2))
	ALORS
		i_get_sub_str(pt_TerminCallee_860027503, 2,-1, pt_TerminCallee_sans_33_860027503)
	SINON
		i_strcpy(pt_TerminCallee_sans_33_860027503, pt_TerminCallee_860027503)
	FINSI

	i_strcpy(pt_len_prefixe_860027503, rechercheDicho_860027343(pt_TerminCallee_sans_33_860027503, T_Inter_BTIP_ETEL_860027503, gmt_date_860027503))
	SI (i_strcmp(pt_len_prefixe_860027503, g_inull) != 0)
	ALORS
		Inter_etel_VoIpVPN_860027503 = 1
		Inter_longueur_prefixe_860027503 = CONV_ASCIINUMDEC_INT_860027343(pt_len_prefixe_860027503)
		# G3R22 QC503 Prefixe non retire a tort
		#i_get_sub_str(pt_TerminCallee_sans_33, 0,(Inter_longueur_prefixe - 1), pt_TerminCallee_sans_33pref)
		i_get_sub_str(pt_TerminCallee_sans_33_860027503, Inter_longueur_prefixe_860027503, - 1, pt_TerminCallee_sans_33pref_860027503)

		#DRE - G3R22 QC515
		SI !(i_strplcmp(pt_TerminCallee_sans_33pref_860027503, "33", 0, 2))
		ALORS
			i_get_sub_str(pt_TerminCallee_sans_33pref_860027503, 2,-1, pt_TerminCallee_sans_33pref33_860027503)
		FINSI
		#\DRE - G3R22 QC515
	FINSI
	#trace2("__LINE__ ## TEST ## ======> pt_len_prefixe <%s> #### ",pt_len_prefixe ,"")
	#trace2("__LINE__ ## TEST ## ======> pt_TerminCallee_sans_33pref <%s> #### ",pt_TerminCallee_sans_33pref ,"")
	#trace1("__LINE__ ## TEST ## ======> Inter_longueur_prefixe = <%d> ", Inter_longueur_prefixe)
	#trace1("__LINE__ ## TEST ## ======> Inter_etel_VoIpVPN = <%d> ", Inter_etel_VoIpVPN)
FINSI

# Champs DETRN_INF
val_DETR_INF_860027503 = 0x00

SI ( i_valid_field_n(g_iartout, $Tetelephonie::T3CdidentityPU) )
ALORS
	SI (g_iartout.CdidentityPU[0] == 3) && (g_iartout.CdidentityPU[1] == 3)
	ALORS
		val_DETR_INF_860027503 = 0x80
	SINON
		val_DETR_INF_860027503 = 0xC0
	FINSI
SINON
	SI ( i_valid_field_n(g_iartout, $Tetelephonie::T3VtrunkIN) )
	ALORS
		SI (g_iartout.VtrunkIN[0] == 3) && (g_iartout.VtrunkIN[1] == 3)
		ALORS
			val_DETR_INF_860027503 = 0x80
		SINON
			val_DETR_INF_860027503 = 0xC0
		FINSI
	SINON
		SI ( mevo_860027503 != 1 )
		ALORS
			SI ( i_valid_field_n(g_iartout, $Tetelephonie::T3TerminCallee) )
			ALORS
				SI (g_iartout.TerminCallee[0] == 3) && (g_iartout.TerminCallee[1] == 3)
				ALORS
					# G3R22 QC506
					longueur_860027503 = g_iartout.TerminCallee!NELEM
					#trace1("__LINE__ ## TEST ## ======> [DETRN_INF] longueur = <%d> ", longueur)
					SI (longueur_860027503 <= 8)
					ALORS
						val_DETR_INF_860027503 = 0x40
					SINON
						val_DETR_INF_860027503 = 0x80
					FINSI
					#G3R22 QC534
				SINON
					val_DETR_INF_860027503 = 0xC0
				FINSI
			SINON
				val_DETR_INF_860027503 = 0xC0
			FINSI
		FINSI
	FINSI
FINSI
erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::DETR_INF, val_DETR_INF_860027503)
#trace1("__LINE__ ## TEST ## ======> [DETRN_INF] val_DETR_INF = <0x%X> ", val_DETR_INF)

# Champs DETRN_NUM
i_strcpy(pt_DETR_NUM_860027503, "0")

SI ( i_valid_field_n(g_iartout, $Tetelephonie::T3CdidentityPU) )
ALORS
	erreur_860027503 = i_get_art_str(g_iartout, $Tetelephonie::CdidentityPU, pt_CdidentityPU_860027503)

	SI !(i_strplcmp(pt_CdidentityPU_860027503, "33", 0, 2))
	ALORS
		i_get_sub_str(pt_CdidentityPU_860027503, 2,-1, pt_DETR_NUM_860027503)
	SINON
		i_strcpy(pt_DETR_NUM_860027503, pt_CdidentityPU_860027503)
	FINSI
SINON
	SI ( i_valid_field_n(g_iartout, $Tetelephonie::T3VtrunkIN) )
	ALORS
		erreur_860027503 = i_get_art_str(g_iartout, $Tetelephonie::VtrunkIN, pt_VtrunkIN_860027503)

		SI !(i_strplcmp(pt_VtrunkIN_860027503, "33", 0, 2))
		ALORS
			i_get_sub_str(pt_VtrunkIN_860027503, 2,-1, pt_DETR_NUM_860027503)
		SINON
			i_strcpy(pt_DETR_NUM_860027503, pt_VtrunkIN_860027503)
		FINSI
	SINON
		SI ( mevo_860027503 != 1 )
		ALORS
			SI ( i_valid_field_n(g_iartout, $Tetelephonie::T3TerminCallee) )
			ALORS
				SI (val_DETR_INF_860027503 == 0x80 || val_DETR_INF_860027503 == 0x40)
				ALORS
					SI (Inter_etel_VoIpVPN_860027503 != 0)
					ALORS
						#DRE - G3R22 QC515
#						i_strcpy(pt_DETR_NUM, pt_TerminCallee_sans_33pref)
						i_strcpy(pt_DETR_NUM_860027503, pt_TerminCallee_sans_33pref33_860027503)
					SINON
						i_strcpy(pt_DETR_NUM_860027503, pt_TerminCallee_sans_33_860027503)
					FINSI
				SINON
					i_strcpy(pt_DETR_NUM_860027503, pt_TerminCallee_860027503)
				FINSI
			FINSI
		FINSI
	FINSI
FINSI
longueur_860027503  = i_conv_ascii_dcb(pt_DETR_NUM_860027503 , pt_DETR_NUM_DCB_860027503)
erreur_860027503 = i_memcpy_art_field_n(g_iartout,$Tetelephonie::DETR_NUM, pt_DETR_NUM_DCB_860027503, longueur_860027503)
erreur_860027503 = i_resize_tlv( g_iartout, "T4detr", "DETR_NUM", longueur_860027503 *8 )
#trace2("__LINE__ ## TEST ## ======> [DETR_NUM] pt_DETR_NUM <%s> #### ",pt_DETR_NUM ,"")

#DRE QC572 G3R23C5
#SI (efficace == 0)
#ALORS
#	SAUT STOCKE_OK_INEF
#FINSI

########################
# Gestion du CALL_TYPE #
########################

SI i_valid_field_n(g_iartout, $Tetelephonie::SelectorVP)
ALORS
	erreur_860027503 = i_get_art_str(g_iartout, $Tetelephonie::SelectorVP, pt_champ1_860027503)
	SI i_valid_field_n(g_iartout, $Tetelephonie::VtrunkVP)
	ALORS
		erreur_860027503 = i_get_art_str(g_iartout, $Tetelephonie::VtrunkVP, pt_champ2_860027503)
		SI (i_strcmp(pt_champ1_860027503, pt_champ2_860027503) == 0)
		ALORS
			SI (i_valid_field_n(g_iartout, $Tetelephonie::VtrunkSI) && i_valid_field_n(g_iartout, $Tetelephonie::SelectorSI))
			ALORS
				erreur_860027503 = i_get_art_str(g_iartout, $Tetelephonie::SelectorSI, pt_champ1_860027503)
				erreur_860027503 = i_get_art_str(g_iartout, $Tetelephonie::VtrunkSI, pt_champ2_860027503)
				SI (i_strcmp(pt_champ1_860027503, pt_champ2_860027503) == 0)
				ALORS
					i_strcpy(pt_call_type_860027503, "1")
				SINON
					i_strcpy(pt_call_type_860027503, "2")
				FINSI
			SINON
				i_strcpy(pt_call_type_860027503, "2")
			FINSI
		SINON
			i_strcpy(pt_call_type_860027503, "3")
		FINSI
	SINON
		SI i_valid_field_n(g_iartout, $Tetelephonie::Callee)
		ALORS
			RecalculCallType_860027503 = 1
			SI (g_iartout.Callee[0] == 3)
			ALORS
				i_strcpy(pt_call_type_860027503, "4")
			SINON
				erreur_860027503 = i_get_art_str(g_iartout, $Tetelephonie::Callee, pt_champ1_860027503)
				i_get_sub_str(pt_champ1_860027503, 0, 5, pt_champ2_860027503)
				SI   (i_strcmp("000000", pt_champ2_860027503) == 0) || (i_strcmp("000001", pt_champ2_860027503) == 0)
				ALORS
					i_get_sub_str(pt_champ1_860027503, 0, 11, pt_champ2_860027503)
					SI   (i_strcmp("000000338588", pt_champ2_860027503) == 0)
					ALORS
						i_strcpy(pt_call_type_860027503, "7")
					SINON
						i_get_sub_str(pt_champ1_860027503, 0, 16, pt_champ2_860027503)
						SI   (i_strcmp("00000033836591212", pt_champ2_860027503) == 0)
						ALORS
							i_strcpy(pt_call_type_860027503, "7")
						SINON
							i_strcpy(pt_call_type_860027503, "5")
						FINSI
					FINSI
				SINON
					i_strcpy(pt_call_type_860027503, "0")
				FINSI
			FINSI
		SINON
			i_strcpy(pt_call_type_860027503, "0")
		FINSI
	FINSI
SINON
	SI i_valid_field_n(g_iartout, $Tetelephonie::Caller)
	ALORS
		SI ( g_iartout.Caller[0] == 0 )
		&& ( g_iartout.Caller[1] == 0 )
		&& ( g_iartout.Caller[2] == 0 )
		&& ( g_iartout.Caller[3] == 0 )
		&& ( g_iartout.Caller[4] == 0 )
		&& ( g_iartout.Caller[5] == 0 )
		ALORS
			SI i_valid_field_n(g_iartout, $Tetelephonie::Callee)
			ALORS
				SI (g_iartout.Callee[0] == 3)
				ALORS
					i_strcpy(pt_call_type_860027503, "8")
				SINON
					i_strcpy(pt_call_type_860027503, "6")
				FINSI
			SINON
				i_strcpy(pt_call_type_860027503, "6")
			FINSI
		SINON
			i_strcpy(pt_call_type_860027503, "0")
		FINSI
	SINON
		i_strcpy(pt_call_type_860027503, "0")
	FINSI
FINSI

#DRE QC572 G3R23C5
SI (efficace_860027503 == 0)
ALORS
	SAUT STOCKE_OK_INEF
FINSI

#DRE QC555
#erreur = i_set_art_str(g_iartout, $Tetelephonie::CALL_TYPE, pt_call_type)

# pas de normalisation et d appel BNC si appel RTC-IP (CALL-TYPE a 6) et demandeur international (IDUS_INF = 0xC0)

SI ( i_strcmp(pt_call_type_860027503, "6") == 0 ) && ( idus_inter_860027503 == 1 )
ALORS
	SAUT STOCKE_OK_INEF
FINSI

#######
# TAP #
#######

SI  ( ( i_strcmp(pt_call_type_860027503, "1") == 0 ) ||( i_strcmp(pt_call_type_860027503, "2") == 0 ) || ( i_strcmp(pt_call_type_860027503, "3") == 0 ) || ( i_strcmp(pt_call_type_860027503, "4") == 0 ) )
ALORS
	tap_860027503 = 0x80
FINSI

##################################################
# Normalisation pour appel a la base de comptage #
##################################################

# ATTENTION : si on normalise un numero trop long, procopo fait corer
# Pour pallier ce probleme, on limite les numeros passes en argument a 10 octets (soit, en comptant le INF, 18 digits)
# Dans le cas du MEMO VOCAL, on n effectue pas de valorisation

SI ( mevo_860027503 == 1 )
ALORS
	SAUT STOCKE_OK_INEF
FINSI

longueur_860027503=i_get_art_field(g_iartout,$Tetelephonie::L4idus)
SI longueur_860027503 > 10
ALORS
	nb_supp_860027503 = ((longueur_860027503 - 1) * 2) - 18
	erreur_860027503 = i_supp_quart_num($Tetelephonie::IDUS_NUM, 17, nb_supp_860027503, 0x0f, g_iartout, g_iartout10)
	existe_860027503 = 1
FINSI

longueur_860027503=i_get_art_field(g_iartout,$Tetelephonie::L4detr)
SI longueur_860027503 > 10
ALORS
	nb_supp_860027503 = ((longueur_860027503 - 1) * 2) - 18
	erreur_860027503 = i_supp_quart_num($Tetelephonie::DETR_NUM, 17, nb_supp_860027503, 0x0f, g_iartout, g_iartout10)
	existe_860027503 = 1
FINSI

SI ( existe_860027503 == 0 )
ALORS
	erreur_860027503 = i_dup_art_id(g_iartout, g_iartout10)
FINSI

SI (SANS_IDUS_860027503 ==1)
ALORS
	SAUT STOCKE_OK_INEF
FINSI

erreur_860027503 = i_normal(g_iartout10, $Tetelephonie::IDUS,$Tetelephonie::DETR, g_icopo, $Tcopo::NDR,$Tcopo::NDE ,3, "ETEL_NDR", "BIDON")

SI erreur_860027503
ALORS
	SI champ2_860027503 == 0
	ALORS
		efficace_860027503 = 0
		erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::EFFICACITE, 0)
		SAUT STOCKE_OK_INEF
	SINON
		SI (  (i_strcmp(pt_call_type_860027503, "6")==0) || (i_strcmp(pt_call_type_860027503, "8")==0)  )
		ALORS
			trace(" FO2108 erreur norm NDR mais calll type 6 ou 8 donc que pour SYMPHONIE")
			SAUT STOCKE_OK_INEF
		SINON
			code_rejet_860027503 = 0x5012
			erreur_860027503 = i_PlvMessEmettre(7665,2,g_iartout,"",1,code_rejet_860027503,0,0)
			SAUT STOCKE_ERRONE
		FINSI
	FINSI
FINSI

erreur_860027503=i_get_art_str(g_iartout10, $Tetelephonie::DETR_NUM, pt_DETR_NUM_860027503)
#trace2("__LINE__ ## TEST ## ======> [DETR_NUM] Valeur relue de pt_DETR_NUM <%s> #### ",pt_DETR_NUM ,"")


#G3R23
#erreur = i_format_str2( pt_champ1, "%s%s", "ETEL", pt_DETR_NUM )
#i_strcpy(pt_DEDE_118FT, i_get_tab_field( "NARxyz", gmt_date, pt_champ1 ))
#SI (i_strplcmp (pt_DEDE_118FT,"118",0,3) == 0)
#ALORS
#	erreur = i_memcpy_art_field_n(g_icopo, $Tcopo::NDE, pt_DEDE_118FT, 7)
#SINON
#	SI ( ( tap & 0x80 ) == 1 )
#	ALORS
#		erreur = i_memcpy_art_field_n(g_icopo, $Tcopo::NDE, "**117", 6)
#	SINON
#		erreur = i_normal(g_iartout10, $Tetelephonie::DETR,$Tetelephonie::DETR, g_icopo, $Tcopo::NDE,$Tcopo::NDE ,3, "BIDON", "ETEL_NDE")
#
#		SI erreur
#		ALORS
#			SI champ2 == 0
#			ALORS
#				efficace = 0
#				erreur = i_set_art_field(g_iartout, $Tetelephonie::EFFICACITE, 0)
#				SAUT STOCKE_OK_INEF
#			SINON
#				code_rejet = 0x5012
#				erreur = i_PlvMessEmettre(7666,2,g_iartout,"",1,code_rejet,0,0)
#				SAUT STOCKE_ERRONE
#			FINSI
#		FINSI
#	FINSI
#FINSI

SI ( ( tap_860027503 & 0x80 ) == 1 )
ALORS
	erreur_860027503 = i_memcpy_art_field_n(g_icopo, $Tcopo::NDE, "**117", 6)
SINON
	erreur_860027503 = i_normal(g_iartout10, $Tetelephonie::DETR,$Tetelephonie::DETR, g_icopo, $Tcopo::NDE,$Tcopo::NDE ,3, "BIDON", "ETEL_NDE")
	SI erreur_860027503
	ALORS
		SI champ2_860027503 == 0
		ALORS
			efficace_860027503 = 0
			erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::EFFICACITE, 0)
			SAUT STOCKE_OK_INEF
		SINON
			code_rejet_860027503 = 0x5012
			erreur_860027503 = i_PlvMessEmettre(7666,2,g_iartout,"",1,code_rejet_860027503,0,0)
			SAUT STOCKE_ERRONE
		FINSI
	FINSI
FINSI
#/G3R23


##########################
# Appel base de comptage #
##########################

# Initialisation de l'interface "proc_copo"

g_icopo.TAXE   = 0
g_icopo.CREDIT = 0
erreur_860027503 = i_set_art_date(g_icopo,hlahm1_860027503)
g_icopo.DUREE  = i_get_art_field(g_iartout, $Tetelephonie::Duree)
g_icopo.CODE   = CODE_ARTICLE_860027503
g_icopo.CATEG  = CATEG_860027503
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
g_icopo.SUP[5] = 0
g_icopo.SUP[6] = 0
g_icopo.SUP[7] = 0

erreur_860027503 = i_comptage(g_icopo,BASE_860027503,hlahm1_860027503)

##################################
# Erreur retour base de comptage #
##################################

SI (erreur_860027503 != 0)
ALORS
	SI ( (g_ierrno == 1100) && (champ2_860027503 == 0) )
	ALORS
		efficace_860027503=0
		erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::EFFICACITE, 0)
		SAUT STOCKE_OK_INEF
	SINON
		SI (  (i_strcmp(pt_call_type_860027503, "6")==0) || (i_strcmp(pt_call_type_860027503, "8")==0)  )
		ALORS
			#trace("  FO1884 erreur BNC mais calll type 6 ou 8 donc que pour SYMPHONIE")
			SAUT STOCKE_OK_INEF
		SINON
			code_rejet_860027503 = 0x5022
			erreur_860027503 = i_PlvMessEmettre(7662,2,g_iartout,"",2,code_rejet_860027503,g_ierrno,0)
			SAUT STOCKE_ERRONE
		FINSI
	FINSI
FINSI

############################################
# Controle sur l'unite renvoyee par la BNC #
############################################

vc_860027503 = g_icopo.TAXE
unite_860027503 = g_icopo.SUP[RES_UNITE_860027503]

SI (unite_860027503 == MILEURO_860027503 || unite_860027503 == MILEURODR_860027503 )
ALORS
	vcdr2_860027503 = g_icopo.TAXE
SINON
	SI ((unite_860027503 == UTC_860027503) || (unite_860027503 == UTCDR_860027503))
	ALORS
		vcdr2_860027503 = g_icopo.TAXE * COEFF_860027503
	SINON
		code_rejet_860027503 = 0x5022
		erreur_860027503 = i_PlvMessEmettre(7663,2,g_iartin,"",2,code_rejet_860027503,unite_860027503,0)
		SAUT STOCKE_ERRONE
	FINSI
FINSI

#####################################
# Controle sur  le type de controle #
#####################################

typ_ctr_860027503 = g_icopo.SUP[RES_TYPCTR_860027503]
#trace1(" *** Cbb typ_ctr   <%d>",typ_ctr)
erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::TYPCTR, typ_ctr_860027503)


########################
# REJET
########################

#REJET G2R1Ch  service du "12" ou "118XYZ", "Audiotel" et certains 3BPQ
#REJET=1 si le retour de la fonction  BNC_TYPCTR = 11 (CPT_REJET)
#REJET=2 si  le retour de la fonction  BNC_TYPCTR = 10 (CPT_REJET2)
#REJET=3 si  le retour de la fonction  BNC_TYPCTR = 12 (CPT_REJET3) c-a-d appel vers le 119
#REJET=5 si  le retour de la fonction  BNC_TYPCTR = 9 (CPT_REJET5)
#REJET=0 sinon

REJET_860027503 = 0
SI (typ_ctr_860027503 == CPT_REJET_860027503)
ALORS
	REJET_860027503 = 1
SINON
	SI (typ_ctr_860027503 == CPT_REJET2_860027503)
	ALORS
		REJET_860027503 = 2
	SINON
		SI (typ_ctr_860027503 == CPT_REJET3_860027503)
		ALORS
			REJET_860027503 = 3
		SINON
			SI (typ_ctr_860027503 == CPT_REJET5_860027503)
			ALORS
				REJET_860027503 = 5
			FINSI
		FINSI
	FINSI
FINSI

# G4R6 lot 3 : C+S appelant
# Recuperation du demande utilise pour appel BNC
pt_DEDE_NORM_860027503 = i_get_art_fieldptr(g_icopo, $Tcopo::NDE)
erreur_860027503 = i_ajoutChamp(g_iartout, "T4dede_bnc", "DEDE_BNC", 0)
erreur_860027503 = i_resize_tlv(g_iartout, "T4dede_bnc", "DEDE_BNC", i_strlen(pt_DEDE_NORM_860027503))
erreur_860027503 = i_set_art_str(g_iartout, $Tetelephonie::DEDE_BNC, pt_DEDE_NORM_860027503)
# /G4R6

######################################
# POINT de branchement : stockage OK #
######################################

POINT STOCKE_OK

#########################################################
# Mise a jour des champs de l'ajout CE pour DC efficace #
# c-a-d appel BNC realise                               #
#########################################################

erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::CCD, g_icopo.SUP[RES_CLDEST_860027503])
erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::CODCIRDR, g_icopo.SUP[RES_CODCIRDR_860027503])
erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::CODCIR, g_icopo.SUP[RES_CODCIR_860027503])
erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::VCDR2, vcdr2_860027503)
erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::TAX1, vc_860027503)
erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::UNITE1, unite_860027503)
erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::REJET, REJET_860027503)

########################
# AUDIOTEL
########################

CCD_860027503 = i_get_art_field(g_iartout, $Tetelephonie::CCD)
SI (CCD_860027503 == 0x08 || CCD_860027503 == 0x18)
ALORS
	AUDIOTEL_860027503 = 1
FINSI

######################################################
# Recalcul de CALL_TYPE si AUDIOTEL ou REJET ou REJET2
######################################################

# On recalcul Call_Type car il depend du CCD renvoye par la base de comptage ou du type de controle

SI ( ( RecalculCallType_860027503 == 1 ) && ( ( AUDIOTEL_860027503 == 1 ) || ( REJET_860027503 == 1 ) || ( REJET_860027503 == 2 ) ) )
ALORS
	i_strcpy(pt_call_type_860027503, "7")
	#DRE QC555
#	erreur = i_set_art_str(g_iartout, $Tetelephonie::CALL_TYPE, pt_call_type)
FINSI

POINT STOCKE_OK_INEF

erreur_860027503 = i_set_art_field(g_iartout, $Tetelephonie::HLAHM1, hlahm1_860027503)

#DRE QC555
erreur_860027503 = i_set_art_str(g_iartout, $Tetelephonie::CALL_TYPE, pt_call_type_860027503)


# Creation de l'enveloppe optionnelle E_RPV
#---------------------

#  AJOUT ENVELOPPE Optionelle:
# Ajout enveloppe optionnelle E_RPV
# Contient la date metropole pour la distri
#---------------------

# Creation de l'enveloppe

erreur_860027503 = i_add_opt( "E_RPV" )

# champ T1 (=>  0x0C pour la reconnaissance de l'enveloppe,
# par l'arbre de reconnaissance Dopt )

# Champ L1 (taille champ Nom_EEC = 0x0B octets)

#---------------------
# Mise a jour de l'ENVELOPPE Optionelle:
# Contient la date de fin metropole necessaire pour les metachamps de distri

# Champ DATE
icar_abs_860027503 = i_get_art_field(g_iartout, $Tetelephonie::dfin)
erreur_860027503 = i_set_attr_val_n( $E_RPV::DATE_M, icar_abs_860027503)
#trace("Stockage OK ")
erreur_860027503 = i_stocke_art(g_iartout, 0, PT_OK, 0)

RETOUR TRAIT_OK

##########################################
# POINT de branchement : stockage ERRONE #
##########################################

POINT STOCKE_ERRONE
#trace("Stockage en ERRONE ")
erreur_860027503 = i_make_art_rej(g_iartin,g_iartout7,code_rejet_860027503)
erreur_860027503 = i_stocke_art(g_iartout7, 0,PT_ERRONE,0)

RETOUR TRAIT_OK

#---------------- Fin Tetelephonie_trt.src  -----------------
