DEFINITION RES_CLDEST_860026526 1
DEFINITION RES_TYPCTR_860026526 2
DEFINITION RES_CODCIR_860026526 3
DEFINITION RES_CCDEUR_860026526 5
DEFINITION RES_UNITE_860026526 6
DEFINITION CTR_NOT_860026526 0
DEFINITION CTR_EGAL_860026526 3
DEFINITION CTR_RJT8_860026526 8
DEFINITION CTR_RJT11_860026526 11
DEFINITION CTR_15_860026526 15
DEFINITION CTR_16_860026526 16
DEFINITION CTR_17_860026526 17
DEFINITION CREJ_ERR00_860026526 0x5041
DEFINITION BASE_PASTEL_860026526 1
DEFINITION CODE_SCT_860026526 2
DEFINITION S_860026526 10
DEFINITION S1_860026526 109225
DEFINITION S2_860026526 1000
DEFINITION VALEUR_UT_860026526 103
DEFINITION ARTICLE_860026526 "DC Carte FT"
DEFINITION NUMTAB_860026526 0
DEFINITION NUMTABSEL_860026526 0
REGISTRE ENTIER ICAR_ABS_860026526
REGISTRE ENTIER HLAHM1_860026526
REGISTRE ENTIER UNITE_860026526
REGISTRE ENTIER VA_860026526
REGISTRE ENTIER DA_860026526
REGISTRE ENTIER VC_860026526
REGISTRE ENTIER V_860026526
REGISTRE ENTIER CCD_860026526
REGISTRE ENTIER CODCIRDR_860026526
REGISTRE ENTIER CODCIR_860026526
REGISTRE ENTIER TAX1_860026526
REGISTRE ENTIER A1_860026526
REGISTRE ENTIER A2_860026526
REGISTRE ENTIER CATEG_860026526
REGISTRE ENTIER ZAB_DOM_860026526
REGISTRE ENTIER IDUS_PRESENT_860026526
REGISTRE ENTIER numzone_860026526
REGISTRE ENTIER CDEUR_860026526
REGISTRE ENTIER SCT_860026526
REGISTRE ENTIER TAP_860026526
REGISTRE ENTIER IDUS_INF_860026526
REGISTRE ENTIER erreur_860026526
REGISTRE ENTIER erreur_norm_860026526
REGISTRE ENTIER code_errone_860026526
REGISTRE ENTIER ROAMING_860026526
REGISTRE ENTIER TAXE_PRESENTE_860026526
REGISTRE ENTIER INDICE_NDE_860026526
REGISTRE ENTIER INF_INI_860026526
REGISTRE ENTIER MODIF_860026526
REGISTRE ENTIER TAILLE_860026526
REGISTRE ENTIER VC_UT_860026526
REGISTRE ENTIER TYPECTR_860026526
REGISTRE ENTIER LOI_860026526
REGISTRE ENTIER nelem_860026526
REGISTRE ENTIER scom_860026526
REGISTRE POINTEUR pt_dede_num_860026526
REGISTRE POINTEUR pt_idus_num_860026526
############################################################################
#
# Fichier : Tcp4dcOSAB.src
#
# Traitement 
#
# Communications  efficaces RI OSA-PARLAY Carte FT 
#  
#
# Historique:
#		23/02/07 - DRE - G3R0Cv Migration RI CARTE vers RI OSA-PARLAY
#		08/04/08 - BDE FAL - G3R6Cy Migration SI CARTE FT
#		28/07/09 - THE - G3R14 QC 262 suppression message 6210 pour Test 208E : DA = 0 et VC = 0
#		03/10/2011 RHE VerifPcode
#		30/10/2014 DRE G4R7 QC853 : Prendre en compte les nouvelles valeurs de typctr (16 et 17) en retour de BNC afin deviter le message derreur dans CEM
#
############################################################################

#
# Definition des resultats supplementaires retournes par le calcul de taxation.
#

#
# Definition des types de controle de taxation. Cette valeur est retournee
# par le calcul de taxation dans le resultat supplementaire RES_TYPCTR.
#
#G3R6Cy
#G4R7 QC853

#
# Definition des codes de rejet. Le code apparait:
# - dans le fichier des articles rejetes.
#

#
# Constantes
#

#
# Variables fonctionnelles globales
#

#
# Variables fonctionnelles du module
#

#
# Variables et constantes utilisees pour le calcul du decalage horaire
#


#
# Variables diverses
#



trace("------------------------------------------------------------")


#==============================================================================
# Initialisation des variables 
#==============================================================================
ICAR_ABS_860026526 = i_get_art_field(g_iartin,$Tcp4dcOSA::DATE)
DA_860026526 = i_get_art_field(g_iartin,$Tcp4dcOSA::DUREE)
VA_860026526 = 0
VC_860026526 = 0
TYPECTR_860026526 = 0
V_860026526 = 0
# VerifPcode - RHE # VCDR2 = 0
# VerifPcode - RHE # VCP1 = 0
CCD_860026526 = 0xFF
CODCIRDR_860026526 = 0xFFFFFF
CODCIR_860026526 = 0xFFFFFF
UNITE_860026526 = 0xFF
A1_860026526 = 0
A2_860026526 = 0
CATEG_860026526 = 0
VC_UT_860026526 = 0

ZAB_DOM_860026526 = 0
HLAHM1_860026526 = ICAR_ABS_860026526
IDUS_PRESENT_860026526 =  i_valid_field_n(g_iartin,$Tcp4dcOSA::IDUS_NUM)
numzone_860026526 = 0

SCT_860026526 = i_get_art_field(g_iartin,$Tcp4dcOSA::SCT)
CDEUR_860026526 = i_get_art_field(g_iartin, $Tcp4dcOSA::CDEUR_old)
VA_860026526 = i_get_art_field(g_iartin, $Tcp4dcOSA::CPTX_old)
nelem_860026526 = 0
scom_860026526 = 0
LOI_860026526 = 0
ROAMING_860026526 = 0
MODIF_860026526 = 0
erreur_norm_860026526 = 0
pt_dede_num_860026526 = "98765432109876543210"
pt_idus_num_860026526 = "87654321098765432109"

# VerifPcode - RHE #
i_strcpy(pt_dede_num_860026526,"")
i_strcpy(pt_idus_num_860026526,"")

erreur_860026526 = i_get_art_str(g_iartin,$Tcp4dcOSA::DEDE_NUM,pt_dede_num_860026526)


#==============================================================================
#				CONTROLES SEMANTIQUES
#==============================================================================

#	Champ GCP-SCT, si Eb BC = 10b ou 11b article errone
#	Remarque: seul le bit B est teste

SI ( SCT_860026526 & 0x40 )
ALORS
	code_errone_860026526 = CREJ_ERR00_860026526
	erreur_860026526 = i_PlvMessEmettre(6201,2,g_iartin,"",2,code_errone_860026526,ARTICLE_860026526,0)
	SAUT STOCKE_ERRONE
FINSI


#==============================================================================
#	Article a stocker en heure de debut
#==============================================================================

SI ( ( SCT_860026526 & 0x60 ) != 0x20 )
ALORS
	ICAR_ABS_860026526 = ICAR_ABS_860026526 - DA_860026526
	erreur_860026526 = i_set_art_field(g_iartin, $Tcp4dcOSA::DATE, ICAR_ABS_860026526)
	HLAHM1_860026526 = ICAR_ABS_860026526
	SCT_860026526 = SCT_860026526 | 0x20
	erreur_860026526 = i_set_art_field(g_iartin, $Tcp4dcOSA::SCT, SCT_860026526)
FINSI


#==============================================================================
#           Determination heure locale si appel DOM
#==============================================================================

SI ( IDUS_PRESENT_860026526 == 0 )
ALORS
	SAUT FIN_DOM
SINON
	IDUS_INF_860026526 = i_get_art_field(g_iartin,$Tcp4dcOSA::IDUS_INF)
	erreur_860026526 = i_get_art_str(g_iartin,$Tcp4dcOSA::IDUS_NUM,pt_idus_num_860026526)
FINSI

SI ( (g_iartin.IDUS_NUM[0] == 0x2) 
  && (g_iartin.IDUS_NUM[1] == 0x6) 
  && (g_iartin.IDUS_NUM[2] == 0x2) )
ALORS
	ZAB_DOM_860026526 = 1
	SAUT FIN_DEMANDEUR_DOM
FINSI

SI ( (g_iartin.IDUS_NUM[0] == 0x5) 
  && (g_iartin.IDUS_NUM[1] == 0x0) 
  && (g_iartin.IDUS_NUM[2] == 0x8) )
ALORS
	ZAB_DOM_860026526 = 1
	SAUT FIN_DEMANDEUR_DOM
FINSI

SI ( (g_iartin.IDUS_NUM[0] == 0x5) 
  && (g_iartin.IDUS_NUM[1] == 0x9) 
  && (g_iartin.IDUS_NUM[2] == 0x0) )
ALORS
	ZAB_DOM_860026526 = 1
	SAUT FIN_DEMANDEUR_DOM
FINSI

SI ( (g_iartin.IDUS_NUM[0] == 0x5) 
  && (g_iartin.IDUS_NUM[1] == 0x9) 
  && (g_iartin.IDUS_NUM[2] == 0x4) )
ALORS
	ZAB_DOM_860026526 = 1
	SAUT FIN_DEMANDEUR_DOM
FINSI

SI ( (g_iartin.IDUS_NUM[0] == 0x5) 
  && (g_iartin.IDUS_NUM[1] == 0x9) 
  && (g_iartin.IDUS_NUM[2] == 0x6) )
ALORS
	ZAB_DOM_860026526 = 1
	SAUT FIN_DEMANDEUR_DOM
FINSI

SI ( (g_iartin.IDUS_NUM[0] == 0x2) 
  && (g_iartin.IDUS_NUM[1] == 0x6) 
  && (g_iartin.IDUS_NUM[2] == 0x9) )
ALORS
	ZAB_DOM_860026526 = 1
	SAUT FIN_DEMANDEUR_DOM
FINSI

# Les IDUS type FD DOM sont de type 9060xx ou 9061xx
# Pb : d autres indicatifs non DOM se trouvent dans cette plage de valeur
# On va considerer que potentiellement ce type d indicatif est DOM et c est
# l appel a la table de DH qui fera finalement foi
SI ((g_iartin.IDUS_NUM[0] == 0x9) && (g_iartin.IDUS_NUM[3] <= 0x1))
ALORS
	ZAB_DOM_860026526 = 1
SINON
	SAUT FIN_DOM
FINSI

POINT FIN_DEMANDEUR_DOM

# Calcul de l heure locale si besoin est

numzone_860026526 = i_DHgetZoneID(NUMTABSEL_860026526, g_iartin)
SI numzone_860026526 >= 0
ALORS
	HLAHM1_860026526 = i_DHgetLocalTime(NUMTAB_860026526, numzone_860026526, ICAR_ABS_860026526)
SINON
	ZAB_DOM_860026526 = 0
FINSI

POINT FIN_DOM


#==============================================================================
#              CONTROLES SYNTAXIQUES
#==============================================================================

erreur_860026526 = i_test_art(g_iartin)

SI erreur_860026526
ALORS
	code_errone_860026526 = CREJ_ERR00_860026526
	erreur_860026526 = i_PlvMessEmettre(6200,2,g_iartin,"",2,code_errone_860026526,ARTICLE_860026526,0)
	SAUT STOCKE_ERRONE
FINSI


#==============================================================================
#   Determination roaming si bits A, B et D IDUS,INF= 110  et bit A de TCP,TAP=0
#==============================================================================

SI (  ! (TAP_860026526 & 0x80) && ((IDUS_INF_860026526 & 0xD0) == 0xD0 ))
ALORS
	ROAMING_860026526 = 1
FINSI


#==============================================================================
#	Determination si carte plafonnee : bit G et H de GCP,SCT=1
#==============================================================================

SI ( SCT_860026526 & 0x03 ) == 0x03
ALORS
	V_860026526 = VA_860026526
	UNITE_860026526 = 0
#	test_ut = 1
	SAUT STOCKE_OK
FINSI


#==============================================================================
#	Determination si taxe presente : bit G de GCP,SCT=1
#==============================================================================

SI ( SCT_860026526 & 0x02 )
ALORS
	TAXE_PRESENTE_860026526 = 1
SINON
	TAXE_PRESENTE_860026526 = 0
FINSI


#==============================================================================
#	Test 208F : Detection des appels gratuits : Eb F=1 de TCP-TAP	
#==============================================================================

SI ( TAP_860026526 & 0x04 )
ALORS
	trace("*** Cet article constitue un appel gratuit ***")
#	VCP1 = 0
	V_860026526 = 0
	UNITE_860026526 = 0
#	base_ok = 0
#	test_ut = 1
	SAUT STOCKE_OK
FINSI

#==============================================================================
#	Test 201 : Incoherence du champ clef TCP-CDEUR
#==============================================================================

SI (CDEUR_860026526 != 0x00) && (CDEUR_860026526 != 0x09) && (CDEUR_860026526 != 0x0a) && (CDEUR_860026526 != 0x0f) && (CDEUR_860026526 != 0xf9) && (CDEUR_860026526 != 0x0b) && (CDEUR_860026526 != 0x0d)
ALORS
	erreur_860026526 = i_PlvMessEmettre(6202,2,g_iartin,"",2,ARTICLE_860026526,CDEUR_860026526,0)
#	trace1("Categorie demandeur      :%d", cdeur)
FINSI


#==============================================================================
#	Normalisation demandeur/demande
#==============================================================================

# Determination du champ demande a normaliser
# Si DECO sur un digit, il s agit d un numero mis en memoire par l abonne
# A ce moment la on normalise DEDE (donc sans prefixe avant le 0)
# Pour utiliser le meme automate dans les 2 cas, on force le quartet non 
# significatif de DECO-INF a 1 et dans l automate, on analyse cette valeur
# Dans le cas d un appel messagerie Appel differe, on force ce quartet a 2


# Verification du cas particulier Appel differe
erreur_860026526 = i_get_art_str(g_iartin,$Tcp4dcOSA::DEDE_NUM,pt_dede_num_860026526)
SI (!i_strcmp(pt_dede_num_860026526,"478107952")) || (!i_strcmp(pt_dede_num_860026526,"472116004"))
ALORS
	INDICE_NDE_860026526 = i_get_field_num(g_iartin, "DEDE")
	INF_INI_860026526 = i_get_art_field(g_iartin, $Tcp4dcOSA::DEDE_INF)
	MODIF_860026526 = 2
	erreur_860026526 = i_set_art_field(g_iartin, $Tcp4dcOSA::DEDE_INF, INF_INI_860026526 | 0x2)
	SAUT FIN_DEDE
FINSI

erreur_860026526 = i_get_art_str(g_iartin,$Tcp4dcOSA::DECO_NUM,pt_dede_num_860026526)
TAILLE_860026526 = i_strlen(pt_dede_num_860026526)

SI TAILLE_860026526 < 2
ALORS
	INDICE_NDE_860026526 = i_get_field_num(g_iartin, "DEDE")
SINON
	INDICE_NDE_860026526 = i_get_field_num(g_iartin, "DECO")
	INF_INI_860026526 = i_get_art_field(g_iartin, $Tcp4dcOSA::DECO_INF)
	MODIF_860026526 = 1
	erreur_860026526 = i_set_art_field(g_iartin, $Tcp4dcOSA::DECO_INF, INF_INI_860026526 | 0x1)
FINSI

POINT FIN_DEDE

#
# Demandeur
#
SI IDUS_PRESENT_860026526
ALORS
	SI ROAMING_860026526
	ALORS
		erreur_860026526 = i_memcpy_art_field_n(g_icopo, $Tcopo::NDR, "**15", 5)
		erreur_norm_860026526 = erreur_860026526
	SINON
		erreur_860026526 = i_normal(g_iartin, $Tcp4dcOSA::IDUS, $Tcp4dcOSA::IDUS, g_icopo, $Tcopo::NDR,$Tcopo::NDE ,3, "SCT_NDR", "BIDON")
		erreur_norm_860026526 = erreur_860026526
	FINSI
SINON
	erreur_860026526 = i_memcpy_art_field_n(g_icopo, $Tcopo::NDR, "**00", 5)
	erreur_norm_860026526 = erreur_860026526
FINSI

#
# Demande
#
# i_normal utilisant la normalisation du demandeur pour normaliser le demande, on fait ce double appel
# - normalisation du demandeur : on prend un champ qui existe (INDICE_NDE), on lui applique BIDON et on le stocke dans Tcopo::NDE
# - normalisation du demande : on a recupere 0 de la normalisation du demandeur, on normalise le demande en tenant compte de ce 0 et on stocke de nouveau ce resultat dans Tcopo::NDE
erreur_860026526 = i_normal(g_iartin, INDICE_NDE_860026526, INDICE_NDE_860026526, g_icopo, $Tcopo::NDE,$Tcopo::NDE ,3, "BIDON", "SCT_NDE")
erreur_norm_860026526 = erreur_norm_860026526 + erreur_860026526

# Si on a modifie un champ INF, on restaure sa valeur initiale
SI MODIF_860026526 == 1
ALORS
	erreur_860026526 = i_set_art_field(g_iartin, $Tcp4dcOSA::DECO_INF, INF_INI_860026526)
FINSI

SI MODIF_860026526 == 2
ALORS
	erreur_860026526 = i_set_art_field(g_iartin, $Tcp4dcOSA::DEDE_INF, INF_INI_860026526)
FINSI


#==============================================================================
#       Test 112 : Normalisation No DEUR ou No DE impossible
#==============================================================================

SI ( erreur_norm_860026526 < 0 )
ALORS
	code_errone_860026526=0x5011
	SI TAXE_PRESENTE_860026526
	ALORS
		erreur_860026526 = i_PlvMessEmettre(6203,2,g_iartin,"",2,code_errone_860026526,ARTICLE_860026526,0)
		SAUT STOCKE_ERRONE
	SINON
		erreur_860026526 = i_PlvMessEmettre(6218,2,g_iartin,"",2,ARTICLE_860026526,erreur_norm_860026526,0)
		SAUT STOCKE_RECYCLE
	FINSI
FINSI


#==============================================================================
#	Calcul de la categorie et initialisation des champs de g_icopo
#==============================================================================

SI ZAB_DOM_860026526
ALORS
	erreur_860026526 = i_set_art_date(g_icopo, HLAHM1_860026526)
SINON
	erreur_860026526 = i_set_art_date(g_icopo, ICAR_ABS_860026526)
FINSI

g_icopo.DUREE = DA_860026526
g_icopo.CODE = CODE_SCT_860026526

A1_860026526 = CDEUR_860026526 & 0x0f

# Recuperation des bits 61, 62 et 63 de SCOM
# Par defaut, A2 est a 2
A2_860026526 = 2

SI ( i_valid_field_n(g_iartin, $Tcp4dcOSA::SCOM_VAL))
ALORS
	nelem_860026526 = g_iartin.SCOM_VAL!NELEM
	SI nelem_860026526 > 7
	ALORS
		scom_860026526 = g_iartin.SCOM_VAL[7]
		SI ( scom_860026526 & 0x07 ) == 0
		ALORS
			A2_860026526 = 2
		SINON
			SI ( scom_860026526 & 0x04 ) == 0x04
			ALORS
				A2_860026526 = 3
			SINON
				SI ( scom_860026526 & 0x02 ) == 0x02
				ALORS
					A2_860026526 = 4
				SINON
					A2_860026526 = 5
				FINSI
			FINSI
		FINSI
	FINSI
FINSI

CATEG_860026526 = A1_860026526 + (16 * A2_860026526)


#==============================================================================
#	Calcul de valorisation 
#==============================================================================

g_icopo.TAXE   = 0
g_icopo.CREDIT = 0
g_icopo.CATEG  = CATEG_860026526
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

SI ZAB_DOM_860026526 > 0
ALORS
	erreur_860026526 = i_comptage(g_icopo, BASE_PASTEL_860026526, HLAHM1_860026526)
SINON
	erreur_860026526 = i_comptage(g_icopo, BASE_PASTEL_860026526, ICAR_ABS_860026526)
FINSI


#==============================================================================
#	A partir d ici, on differencie les tests suivant que la valorisation
#	etait presente dans l article ou non
#==============================================================================

SI TAXE_PRESENTE_860026526
ALORS
	SAUT VALORISE
SINON
	SAUT NON_VALORISE
FINSI


#==============================================================================
#	Debut traitement article valorise 
#==============================================================================

POINT VALORISE

#==============================================================================
#	Test 6 : Calcul de valorisation impossible
#==============================================================================

SI ( erreur_860026526 )
ALORS
	code_errone_860026526 = 0x5021
	erreur_860026526 = i_PlvMessEmettre(6204,2,g_iartin,"",2,ARTICLE_860026526,g_ierrno,0)
#	VCP1 = VAP
#	test_ut = 1
#	base_ok = 0
	V_860026526 = VA_860026526
	UNITE_860026526 = 0
	SAUT STOCKE_OK
SINON
#	base_ok = 1
	CCD_860026526 = g_icopo.SUP[RES_CLDEST_860026526]
	CODCIR_860026526 = g_icopo.SUP[RES_CODCIR_860026526]
	CODCIRDR_860026526 = g_icopo.SUP[RES_CCDEUR_860026526]
FINSI


#==============================================================================
#	Test 240 : Resultat supplementaire de rang 6 incoherent
#==============================================================================

UNITE_860026526 = g_icopo.SUP[RES_UNITE_860026526]
LOI_860026526 = UNITE_860026526 / 100
TAX1_860026526 = g_icopo.TAXE
SI ((UNITE_860026526 == 10) || (g_icopo.SUP[RES_UNITE_860026526] == 110) || (g_icopo.SUP[RES_UNITE_860026526] == 0) || (g_icopo.SUP[RES_UNITE_860026526] == 100) || (g_icopo.SUP[RES_UNITE_860026526] == 8) || (g_icopo.SUP[RES_UNITE_860026526] == 108))
ALORS
	VC_860026526 = g_icopo.TAXE
	SI ((UNITE_860026526 == 10) || (g_icopo.SUP[RES_UNITE_860026526] == 110))
	ALORS
		VC_UT_860026526 = VC_860026526 / VALEUR_UT_860026526
		SI ( VC_860026526 - (VC_UT_860026526 * VALEUR_UT_860026526) ) > 0
		ALORS
			VC_UT_860026526 = VC_UT_860026526 + 1
		FINSI
	FINSI

	SI ((UNITE_860026526 == 0) || (g_icopo.SUP[RES_UNITE_860026526] == 100))
	ALORS
		VC_UT_860026526 = VC_860026526
	FINSI

	SI ((UNITE_860026526 == 8) || (g_icopo.SUP[RES_UNITE_860026526] == 108))
	ALORS
		VC_UT_860026526 = VC_860026526 / 1000
		SI ( VC_860026526 - (VC_UT_860026526 * 1000) ) > 100
		ALORS
			VC_UT_860026526 = VC_UT_860026526 + 1
		FINSI
	FINSI

SINON
	code_errone_860026526 = 0x5021
	erreur_860026526 = i_PlvMessEmettre(6205,2,g_iartin,"",2,ARTICLE_860026526,UNITE_860026526,0)
	SAUT STOCKE_OK
FINSI


#==============================================================================
#	Aiguillage selon type de controle
#==============================================================================

TYPECTR_860026526= g_icopo.SUP[RES_TYPCTR_860026526]

SI (TYPECTR_860026526 == CTR_EGAL_860026526)
ALORS
	#==============================================================================
	#	Debut Controle Egalite 
	#==============================================================================

	#==============================================================================
	#	Test 223 : VC = 0 et VA < S
	#==============================================================================
	SI VA_860026526 < S_860026526 && VC_860026526 == 0
	ALORS
		V_860026526 = VA_860026526
		UNITE_860026526 = 0 + (LOI_860026526 * 100)
		SAUT STOCKE_OK
	FINSI


	#==============================================================================
	#	Test 220 : VC = 0 et VA >= S
	#==============================================================================		
	SI VA_860026526 >= S_860026526 && VC_860026526 == 0
	ALORS
		code_errone_860026526  = 0x5031
		erreur_860026526 = i_PlvMessEmettre(6224,2,g_iartin,"",3,code_errone_860026526,VA_860026526,VC_860026526)
		SAUT STOCKE_ERRONE
	FINSI


	#==============================================================================
	#	Test 12: VA/VC > S2 
	#==============================================================================
	SI   ((VA_860026526*100) > (S2_860026526*VC_UT_860026526))
	ALORS
		code_errone_860026526 = 0x5031
		erreur_860026526 = i_PlvMessEmettre(6207,2,g_iartin,"",2,VA_860026526,VC_UT_860026526,0)
#		SAUT STOCKE_ERRONE
	FINSI

	#==============================================================================
	#	Test 100 : autres cas 
	#==============================================================================
	V_860026526 = VA_860026526
	UNITE_860026526 = 0 + (LOI_860026526 * 100)
	SAUT STOCKE_OK

	#==============================================================================
	#	Fin Controle Egalite 
	#==============================================================================
FINSI

#G4R7 QC853
#SI (TYPECTR == CTR_NOT) || (TYPECTR == CTR_RJT8) || (TYPECTR == CTR_RJT11) || (TYPECTR == CTR_15)
SI (TYPECTR_860026526 == CTR_NOT_860026526) || (TYPECTR_860026526 == CTR_RJT8_860026526) || (TYPECTR_860026526 == CTR_RJT11_860026526) || (TYPECTR_860026526 == CTR_15_860026526) || (TYPECTR_860026526 == CTR_16_860026526) || (TYPECTR_860026526 == CTR_17_860026526)
ALORS
	V_860026526 = VA_860026526
	UNITE_860026526 = 0 + (LOI_860026526 * 100)
	SAUT STOCKE_OK
FINSI


#==============================================================================
#	Test 104 : Type de controle = Autre
#==============================================================================

code_errone_860026526 = 0x5031
erreur_860026526 = i_PlvMessEmettre(6206,2,g_iartin,"",2,ARTICLE_860026526,TYPECTR_860026526,0)
SAUT STOCKE_OK

#==============================================================================
#	Fin traitement article valorise 
#==============================================================================


#==============================================================================
#	Debut traitement article non valorise 
#==============================================================================

POINT NON_VALORISE

#==============================================================================
#	Test 206 : Calcul de valorisation impossible
#==============================================================================

SI ( erreur_860026526 )
ALORS
	code_errone_860026526 = 0x5021
	erreur_860026526 = i_PlvMessEmettre(6219,2,g_iartin,"",2,ARTICLE_860026526,g_ierrno,0)
	SAUT STOCKE_RECYCLE
SINON
	CCD_860026526 = g_icopo.SUP[RES_CLDEST_860026526]
	CODCIR_860026526 = g_icopo.SUP[RES_CODCIR_860026526]
	CODCIRDR_860026526 = g_icopo.SUP[RES_CCDEUR_860026526]
FINSI


#==============================================================================
#	Test 240 : Resultat supplementaire de rang 6 incoherent
#==============================================================================

UNITE_860026526 = g_icopo.SUP[RES_UNITE_860026526]
TAX1_860026526 = g_icopo.TAXE
SI ((UNITE_860026526 == 10) || (g_icopo.SUP[RES_UNITE_860026526] == 110) || (g_icopo.SUP[RES_UNITE_860026526] == 0) || (g_icopo.SUP[RES_UNITE_860026526] == 100) || (g_icopo.SUP[RES_UNITE_860026526] == 8) || (g_icopo.SUP[RES_UNITE_860026526] == 108))
ALORS
	VC_860026526 = g_icopo.TAXE
	SI ((UNITE_860026526 == 10) || (g_icopo.SUP[RES_UNITE_860026526] == 110))
	ALORS
		VC_UT_860026526 = VC_860026526 / VALEUR_UT_860026526
		SI ( VC_860026526 - (VC_UT_860026526 * VALEUR_UT_860026526) ) > 0
		ALORS
			VC_UT_860026526 = VC_UT_860026526 + 1
		FINSI
	FINSI

	SI ((UNITE_860026526 == 0) || (g_icopo.SUP[RES_UNITE_860026526] == 100))
	ALORS
		VC_UT_860026526 = VC_860026526
	FINSI

	SI ((UNITE_860026526 == 8) || (g_icopo.SUP[RES_UNITE_860026526] == 108))
	ALORS
		VC_UT_860026526 = VC_860026526 / 1000
		SI ( VC_860026526 - (VC_UT_860026526 * 1000) ) > 100
		ALORS
			VC_UT_860026526 = VC_UT_860026526 + 1
		FINSI
	FINSI
SINON
	erreur_860026526 = i_PlvMessEmettre(6220,2,g_iartin,"",2,ARTICLE_860026526,UNITE_860026526,0)
	SAUT STOCKE_RECYCLE
FINSI


#==============================================================================
#	Test 204B : VC > S1 (test en UT)
#==============================================================================

SI VC_UT_860026526 > S1_860026526
ALORS
	V_860026526 = VC_860026526
	SAUT STOCKE_OK
FINSI

SI DA_860026526 == 0
ALORS
	SI VC_860026526 == 0
	ALORS
		#==============================================================================
		#	Test 208E : DA = 0 et VC = 0 
		#==============================================================================
		code_errone_860026526 = 0x5031
# QC 262	erreur = i_PlvMessEmettre(6210,2,g_iartin,"",1,ARTICLE,0,0)
		V_860026526 = VC_860026526
		SAUT STOCKE_OK
	SINON
		#==============================================================================
		#	Test 208B : DA = 0 et VC != 0 
		#==============================================================================
		code_errone_860026526 = 0x5031
		erreur_860026526 = i_PlvMessEmettre(6211,2,g_iartin,"",2,ARTICLE_860026526,VC_860026526,0)
		V_860026526 = VC_860026526
		SAUT STOCKE_OK
	FINSI
FINSI

#==============================================================================
#	Aiguillage selon type de controle
#==============================================================================
TYPECTR_860026526 = g_icopo.SUP[RES_TYPCTR_860026526]

#G4R7 QC853
#SI (TYPECTR == CTR_EGAL) || (TYPECTR == CTR_RJT8) || (TYPECTR == CTR_RJT11)|| (TYPECTR == CTR_15)
SI (TYPECTR_860026526 == CTR_EGAL_860026526) || (TYPECTR_860026526 == CTR_RJT8_860026526) || (TYPECTR_860026526 == CTR_RJT11_860026526)|| (TYPECTR_860026526 == CTR_15_860026526) || (TYPECTR_860026526 == CTR_16_860026526) || (TYPECTR_860026526 == CTR_17_860026526)
ALORS
	#==============================================================================
	#	Type de controle = Egalite ou Rejet
	#==============================================================================	
	V_860026526 = VC_860026526
	SAUT STOCKE_OK
FINSI

SI (TYPECTR_860026526 == CTR_NOT_860026526)
ALORS
	#==============================================================================
	#	Test 232 : Type de controle = Sans
	#==============================================================================	
	erreur_860026526 = i_PlvMessEmettre(6221,2,g_iartin,"",0,0,0,0)
	SAUT STOCKE_RECYCLE
FINSI


#==============================================================================
#	Test 104 : Type de controle = Autre
#==============================================================================

code_errone_860026526 = 0x5031
erreur_860026526 = i_PlvMessEmettre(6212,2,g_iartin,"",1,TYPECTR_860026526,0,0)
V_860026526 = VC_860026526
SAUT STOCKE_OK

#==============================================================================
#	Fin  traitement article non valorise
#==============================================================================


#==============================================================================
#				STOCKAGE DANS VALIDE
#==============================================================================

POINT	STOCKE_OK

#==============================================================================
#		    CREATION DU BLOC TLV <AJOUT CE> S'IL N'EXISTE PAS
#==============================================================================

SI ( ! i_valid_field_n(g_iartin, $Tcp4dcOSA::T3ace))
ALORS
	erreur_860026526 = i_ajoutChamp(g_iartin, "T4ccd", "", 7)
FINSI


#==============================================================================
#	Mise a jour des champs de l'ajout CE (pour les champs optionnels :
#	uniquement s ils sont significatifs)
#==============================================================================

erreur_860026526 = i_set_art_field(g_iartin, $Tcp4dcOSA::CCD, CCD_860026526)

erreur_860026526 = i_set_art_field(g_iartin, $Tcp4dcOSA::TAX1, V_860026526)
erreur_860026526 = i_set_art_field(g_iartin, $Tcp4dcOSA::UNITE1, UNITE_860026526)

SI (HLAHM1_860026526 != ICAR_ABS_860026526)
ALORS
	erreur_860026526 = i_set_art_field(g_iartin, $Tcp4dcOSA::HLAHM1, HLAHM1_860026526)
SINON
	erreur_860026526 = i_supprChamp(g_iartin, "T4hlahm1")
FINSI

SI ( CODCIRDR_860026526 != 0xFFFFFF)
ALORS
	erreur_860026526 = i_set_art_field(g_iartin, $Tcp4dcOSA::CODCIRDR, CODCIRDR_860026526)
SINON
	erreur_860026526 = i_supprChamp(g_iartin, "T4codcirdr")
FINSI

SI ( CODCIR_860026526 != 0xFFFFFF)
ALORS
	erreur_860026526 = i_set_art_field(g_iartin, $Tcp4dcOSA::CODCIR, CODCIR_860026526)
SINON
	erreur_860026526 = i_supprChamp(g_iartin, "T4codcir")
FINSI

#G3R6Cy il faut transmettre TYPECTR vers la distribution dans T4typctr 0x7E
erreur_860026526 = i_set_art_field(g_iartin, $Tcp4dcOSA::TYPCTR, TYPECTR_860026526)


#==============================================================================
#	Forcage du champ INF_IDUS a C0 pour NUM_IDUS type France Direct
#	Test fait sur CCDEUR (de type NON DOM) 
#==============================================================================

SI ( IDUS_PRESENT_860026526 )
ALORS
	TAILLE_860026526 = i_strlen(pt_idus_num_860026526)
	SI  ((g_iartin.IDUS_NUM[0] == 0x9) && (TAILLE_860026526 < 6) && ((CODCIRDR_860026526 & 0xFF000) != 0x97000))
	ALORS
		IDUS_INF_860026526 = IDUS_INF_860026526 | 0xC0
		erreur_860026526 = i_set_art_field(g_iartin, $Tcp4dcOSA::IDUS_INF, IDUS_INF_860026526)
	FINSI
FINSI


#==============================================================================
#	Retrait du T3tcp_new et stockage
#==============================================================================

erreur_860026526 = i_supprChamp(g_iartin, "T3tcp_new")

# Ajout de l enveloppe optionnelle
erreur_860026526 = i_add_opt ("Ecarte")
erreur_860026526 = i_set_attr_val_n($Ecarte::T1,0x0A)
#G3R6Cy c est automatique erreur = i_set_attr_val_n($Ecarte::L1,0x08)
erreur_860026526 = i_set_attr_val_n($Ecarte::Hdfin,ICAR_ABS_860026526 + DA_860026526)
erreur_860026526 = i_set_attr_val_n($Ecarte::Hduree,DA_860026526)

trace("Stockage en VALIDE Dcp4dc")
erreur_860026526 = i_stocke_art(g_iartin, 0, PT_OK, 0)

RETOUR TRAIT_OK


#==============================================================================
#				STOCKAGE DANS ERRONE
#==============================================================================

POINT	STOCKE_ERRONE

trace("Stockage en ERRONE")
erreur_860026526 = i_make_art_rej(g_iartin, g_iartout5, code_errone_860026526)
erreur_860026526 = i_stocke_art(g_iartout5, 0, PT_ERRONE, 0)

RETOUR TRAIT_OK

#==============================================================================
#			      STOCKAGE DANS RECYCLABLE
#==============================================================================

POINT	STOCKE_RECYCLE

#trace("Stockage en RECYCLE ")
#erreur = i_stocke_recycle(g_iartin, 0, PT_RECYCLE, 0, code_errone)
erreur_860026526 = i_stocke_art(g_iartin, 0, PT_RECYCLE, 0)

RETOUR TRAIT_OK
