DEFINITION Multidistribution_Non_660004621 0
DEFINITION DISTRIBUTION_INCONNU_660004621 1
DEFINITION C_Article_660004621 "Tincc"
DEFINITION C_Tdpv_660004621 "Tdpvgsm"
DEFINITION NUMTAB_660004621 4
DEFINITION TRAI_KO_660004621 -1
DEFINITION SvcKeySimRing_660004621 0x97
REGISTRE ENTIER date_plat_660004621
REGISTRE ENTIER erreur_660004621
REGISTRE ENTIER date_audit_660004621
REGISTRE ENTIER date_fin_660004621
REGISTRE ENTIER Nb_redist_660004621
REGISTRE ENTIER date_660004621
REGISTRE ENTIER ICAR_ABS_660004621
REGISTRE ENTIER code_errone_660004621
REGISTRE ENTIER EFFICACE_660004621
REGISTRE ENTIER type_660004621
REGISTRE ENTIER longueur_660004621
REGISTRE ENTIER index_660004621
REGISTRE ENTIER VAR_660004621
REGISTRE ENTIER NB_UT_660004621
REGISTRE ENTIER svckey_660004621
REGISTRE ENTIER Code_Pays_VLR_660004621
REGISTRE ENTIER TelSvcI_660004621
REGISTRE POINTEUR pt_1_660004621
REGISTRE POINTEUR pt_idemet_660004621
REGISTRE POINTEUR pt_DestNum1_660004621
REGISTRE POINTEUR pt_DestNum2_660004621
REGISTRE POINTEUR pt_local_660004621
######################################################################
# DISTRIBUTION	Tincc_dist.src
#	Article Tincc 
#
######################################################################
#	HISTORIQUE
#	creation 10/01/2006
# 19/04/06 FO 181 stockage en errone
# 12/05/06 PSA Appel fonction i_incr_redist_dist pour compteur redistribution
# 12/07/06 THE G2R0CbME FO 238
# 14/08/06 PKH G3R0CcME GRETA-ITX (tempd d'attente gratuit) 
# 01/09/06 JLG report FO CaME : 240, 242
# 04/09/06 JLG FO 240 complements
# 03/10/06 DRE G3R0CdME spec Traitement INCC S3F0
# 17/10/06 DRE G3R0CdME spec Traitement INCC S3F1
# 28/11/06 DRE G3R0CdME FO 359 (regles de Normalisation sur le V4t18.4)
# 12/12/06 DRE FO 379 spec INCC_GRETA_ORLCF S3F4.doc
#		- Modification des valeurs des champs suivants :V3t1.7, V3t1.9, V3t1.10
#		- Ajout des sous valeurs du champ T4t18.5
# 09/08/07 Creation enveloppe optionnelle E_Redist2
# 05/09/07 JLG G1R5     spec Traitement INCC S6F1
# 21/09/07 JLG G1R5     spec Traitement INCC S6F2
# 24/09/07 JLG G1R5     FO595 Echec de Normalisation
# 31/10/07 RHE G1R5     FO606  modification pour le calcul du champ teleservice V3t1.8
# 22/04/08 PKH G1R7 TT 86 incrementation du CPT 1502 en commentaire
# 11/09/09 PKH G2R3 QC425 modification interro de la table FILTRE_DISE_LOC 
# 18/08/09 PKH G2R3 QC428 interro avec le champ SCPIN au lieu  TransNb
# 21/08/09 PKH G2R3 suite de QC428 interro avec le champ SCPIN au lieu de CalledNb dans le cas TransNb absent
# 09/11/09 PSA G2R5 prise en compte SimRing
# 21/01/10 JLGTHE G2R6 Service AVME pour MIPC Modification duplication du champ V3t1.4
# 04/02/10 JLG G2R6 lot3 : AVME pour MIPC (evolution) Type de distribution "Inconnu"
# 16/02/10 JLG G2R6 QC517, 556 evolution spec sur champ RedirReason (offre SimRing)
# 31/05/10 JLG G2R6 QC649
# 08/12/10 JLG G3R1lot4 Verification/Correction des variables (constantes, entiers, pointeurs)
# 10/03/11 JLG G3R2C4 fusion G3R2C3 avec G3R1C600 (modif pour SimRing)
# 29/02/2012 - JLG -G3R6 QC1005 modif alarme retour aiguillage
# 02/07/2014 - JLG -G5R1 QC1405, champ eec du DPV si g_ieec > 500
#####################################################################







####################

############################################################################
# Allocation memoire
############################################################################

pt_1_660004621		= "1111111111111111111111111111111111111111111111111111111111111111111111111"
pt_idemet_660004621	= "6666666666666666666666666666666666666666666666666666666666666666666666666"
pt_DestNum1_660004621 = "777777777777777777777777777777777777777777777"
pt_DestNum2_660004621 = "pt_DestNum29999999999999999999999999999999999"
pt_local_660004621 = "pt_local8888888888888888888888888888888888888888"

i_strcpy(pt_1_660004621,"")
i_strcpy(pt_local_660004621,"")
i_strcpy(pt_DestNum1_660004621,"")

EFFICACE_660004621 =1
type_660004621 = 0
Code_Pays_VLR_660004621 = 0xFF
TelSvcI_660004621 = 0xFF

trace("[Tincc_dist] =========== debut Pcode DISTRIBUTION  =============")

# erreur = i_fdump_art(g_iartin)

SI (i_LireRedistCpt() == 0)
ALORS
	erreur_660004621 = i_add_opt( "E_Redistri2" )
FINSI
erreur_660004621 = i_set_attr_val_n( $E_Redistri2::EnvoiRedis, 0)

############################################################################
# Variables fonctionnelles
############################################################################
########################################################
########### Date_Audit
date_audit_660004621=i_date_audit()
#trace1("[Tincc_dist] date_audit=%x",date_audit)

SI (i_valid_field_n(g_iartin, $Tincc::VLRNb))
ALORS
	Code_Pays_VLR_660004621 = ( g_iartin.VLRNb[0] * 10 ) + g_iartin.VLRNb[1]
FINSI

SI (i_valid_field_n(g_iartin, $Tincc::TelSvcI))
ALORS
	TelSvcI_660004621 = i_get_art_field(g_iartin, $Tincc::TelSvcI)
FINSI

SI (i_valid_field_n(g_iartin, $Tincc::TransNb))
ALORS
	erreur_660004621 = i_get_art_str(g_iartin, $Tincc::TransNb, pt_DestNum1_660004621)
SINON
	erreur_660004621 = i_get_art_str(g_iartin, $Tincc::CalledNb, pt_DestNum1_660004621)
FINSI

###########################################################################
# Duplication Tdpv33 (g_iartout)
############################################################################
#Duplication article d entree vers DPV TLV

	SI (i_dup_art_tab( g_iartin, g_iartout, C_Tdpv_660004621))
	ALORS
#		trace("ERREUR de duplication")
		code_errone_660004621 = 0xA0D0
		code_errone_660004621 = code_errone_660004621 + EFFICACE_660004621
		erreur_660004621 = i_PlvMessEmettre(6303,2,g_iartin,"",3,code_errone_660004621,C_Tdpv_660004621,0)
		SAUT DISTRI_ERR
	FINSI

erreur_660004621 = i_cree_art("Conv_URS",g_iartout10)

#############################
# REDISTRIBUTION
#############################
#Compteur de redistrib
##################################################################################
# la provenance de l'article 
# Nb_redist : nb de passage en redistribution (lecture de l'enveloppe obligatoire)
##################################################################################
Nb_redist_660004621 = -1
Nb_redist_660004621 = i_LireRedistCpt()

########################################################
# Cpt applicatif CPT_RDT=1509 (REDISTRIBUTION)
########################################################
# FE_0028 comptabilisation des CRAs issus de la redistribution
	date_fin_660004621=i_get_art_field(g_iartin,$Tincc::dfin)
	erreur_660004621= i_incr_redist_dist_660004265(date_fin_660004621)

#############################
# PORTABILITE
#############################

#############################
# PRE-VALORISATION
#############################
# dans mise au format dpv
#############################
# NORMALISATION et TRONCATURE
#############################
# dans mise au format dpv
############################################################################
# Mises au format DPV33
############################################################################
#trace("[Tincc_dis] Modif des champs Tdpvgsm")
########################## Modif des champs #############################
svckey_660004621 = 0
svckey_660004621=i_get_art_field(g_iartin,$Tincc::SvcKey)

############ V3t1.1 type : MSET :00:1
# G1R5
SI (svckey_660004621 == 0x43 || svckey_660004621 == 0x55 || svckey_660004621 == 0x95 || svckey_660004621 == SvcKeySimRing_660004621)
ALORS
	erreur_660004621 = i_set_art_field(g_iartout, $Tdpvgsm::type, 0x02)
FINSI
# /G1R5
############ V3t1.2 tentite : MSET :00:1

############ T3t1.3	idemet :MSET :FF:9 (defaut table dup)
########### ICAR_ABS
date_660004621 =i_get_art_field(g_iartin,$Tincc::DATE)
ICAR_ABS_660004621 =i_date_platine(g_ieec,g_iartin,date_660004621)


i_strcpy(pt_idemet_660004621, "")
# G1R5
# SPEC S6F2
SI (svckey_660004621 == 0x95)
	ALORS
	i_strcpy(pt_idemet_660004621, i_get_tab_field("VariableContexte", ICAR_ABS_660004621, "AX_IDEMET_HCE"))
SINON
	SI  (svckey_660004621 == SvcKeySimRing_660004621)
		ALORS
# On ne reteste pas la presence de RedirectionReason car c est un controle croise du traitement
		i_strcpy(pt_idemet_660004621, i_get_tab_field("VariableContexte", ICAR_ABS_660004621, "AX_IDEMET_SIMRING"))
	SINON
		SI (svckey_660004621 == 0x43) || (svckey_660004621 == 0x55)
			ALORS
			i_strcpy(pt_idemet_660004621, i_get_tab_field("VariableContexte", ICAR_ABS_660004621, "AX_IDEMET_ORLCF"))
		SINON
			i_strcpy(pt_idemet_660004621, i_get_tab_field("VariableContexte", ICAR_ABS_660004621, "AX_IDEMET_INCC"))
		FINSI
	FINSI
FINSI
# /G1R5

#trace2("[Tincc_dis] AX_IDEMET =%s",pt_idemet,"")

# AX_IDEMET resultat fonction recherchevaleurcleftable T3t1/V3t1.3

SI (i_strcmp(pt_idemet_660004621,g_inull)) != 0
ALORS
#	trace2("[Tincc_dis] AX_IDEMET != 0 =%s",pt_idemet,"")
	longueur_660004621= 0
	longueur_660004621=i_strlen(pt_idemet_660004621)
	erreur_660004621 = i_set_art_str(g_iartout10,$Conv_URS::RepTab, pt_idemet_660004621)
	index_660004621=0
	POINT BOUCLE0
	SI (index_660004621 < longueur_660004621)
	ALORS
		g_iartout10.ax_idemet[index_660004621]=g_iartout10.RepTab[index_660004621] - 0x30
		SI (g_iartout10.RepTab[index_660004621] > 0x40)
		ALORS
			g_iartout10.ax_idemet[index_660004621]=g_iartout10.RepTab[index_660004621] - 0x37
		FINSI
#		trace1("index=%d",index)
#		trace1("g_iartout10.ax_idemet=%x",g_iartout10.RepTab[index] - 0x30)
		index_660004621=index_660004621+1
		SAUT BOUCLE0
	FINSI

	erreur_660004621 = i_dup_chp_1val(g_iartout10, g_iartout, $Conv_URS::ax_idemet, $Tdpvgsm::idemet)

SINON
#	pt_idemet : "33032000000FFFFFFF"
#	longueur = g_iartout.idemet!NELEM
	g_iartout.idemet[0]= 0x3
	g_iartout.idemet[1]= 0x3
	g_iartout.idemet[2]= 0x0
	g_iartout.idemet[3]= 0x3
	g_iartout.idemet[4]= 0x2
	index_660004621 = 5
	POINT BOUCLE
	SI index_660004621 < 11
	ALORS
		g_iartout.idemet[index_660004621]= 0x0
		index_660004621 = index_660004621 + 1
		SAUT BOUCLE
	FINSI
FINSI

############ V3t1.4 IMSI : MSET :FF:8
#trace("[Tincc_dis] IMSI")
# G2R6 lot3 AVME pour MIPC
erreur_660004621 = i_get_art_str(g_iartout, $Tdpvgsm::MSISDN, pt_1_660004621)
index_660004621 = 0
SI (i_strplcmp ( pt_1_660004621, "6", 2, 1) != 0 && i_strplcmp ( pt_1_660004621, "7", 2, 1) != 0)
ALORS
	POINT BOUC7
	SI index_660004621 < 15
	ALORS
		g_iartout.IMSI[index_660004621]= 0x7
		index_660004621 = index_660004621 + 1
		SAUT BOUC7
	FINSI
SINON
	POINT BOUC9
	SI index_660004621 < 15
	ALORS
		g_iartout.IMSI[index_660004621]= 0x9
		index_660004621 = index_660004621 + 1
		SAUT BOUC9
	FINSI
FINSI
# /G2R6 lot3 AVME pour MIPC

#trace("[Tincc_dis] Fin IMSI")

############ V3t1.5 DATE : 1VAL :DATE

############ V3t1.6 DUREE : 1VAL :DUREE

############ V3t1.7 svcsup : MSET :FF:1
# G1R5
SI (svckey_660004621 == 0x43 || svckey_660004621 == 0x55 || svckey_660004621 == 0x95 || svckey_660004621 == SvcKeySimRing_660004621)
ALORS
	SI (TelSvcI_660004621 == 0x01)
	ALORS
		erreur_660004621 = i_set_art_field(g_iartout, $Tdpvgsm::svcsup, 0x1F)
	FINSI
FINSI
# /G1R5

############ V3t1.8 tlserv : MSET :11:1
# G2R5 reprise complet avec ajout SimRing (algo precedent incorrect)
SI (svckey_660004621 == 0x43 || svckey_660004621 == 0x55 || svckey_660004621 == 0x95 || svckey_660004621 == SvcKeySimRing_660004621)
ALORS
	#QC649
	i_strcpy(pt_DestNum2_660004621, "")
	#/QC649
	erreur_660004621 = i_get_art_str(g_iartout, $Tdpvgsm::SCPIN, pt_DestNum2_660004621)
	SI ((i_strcmp(pt_DestNum2_660004621, "") != 0) && (table_exp_reg_660004265(pt_DestNum2_660004621, "FILTRE_DISE_LOC" , ICAR_ABS_660004621) == 1 ))
	ALORS
		erreur_660004621 = i_set_art_field(g_iartout,$Tdpvgsm::tlserv,0x03)
	SINON
		SI (svckey_660004621 == 0x43 || svckey_660004621 == 0x55)
		ALORS
			erreur_660004621 = i_set_art_field(g_iartout,$Tdpvgsm::tlserv,0x04)
		FINSI
	FINSI
FINSI


########### V3t1.9 support1 : MSET :00:1
# FO 379
SI (svckey_660004621 == 0x43) || (svckey_660004621 == 0x55 || svckey_660004621 == SvcKeySimRing_660004621)
ALORS
	erreur_660004621 = i_set_art_field(g_iartout, $Tdpvgsm::support1, 0xFF)
FINSI

############ V3t1.10 systype : MSET :00:1
# FO 379
erreur_660004621 = i_set_art_field(g_iartout, $Tdpvgsm::systype, 0xFF)

############ V3t1.11 reserve2 : MSET :FF:1

############ V3t1.12 origine : MSET :00:1
SI ( Code_Pays_VLR_660004621 != 33 ) && ( (svckey_660004621 == 0x43) || (svckey_660004621 == 0x55) || (svckey_660004621 == SvcKeySimRing_660004621))
ALORS
	erreur_660004621 = i_set_art_field(g_iartout,$Tdpvgsm::origine,0x01)
FINSI

############ V3T1.13 indeff : MSET :00:1

############ V3T1.14 tterm : MSET :00:1

############ V3T1.15 indtax : MSET :01:1    Pour appel Preval_

erreur_660004621 = i_set_art_field(g_iartout, $Tdpvgsm::indtax, 0x01)

############ V3T1.16 nbUT : MSET :00:4


#################
# appel preval
#################
# G1R5
# SPEC S6F2
SI (svckey_660004621 == 0x43) || (svckey_660004621 == 0x55) || (svckey_660004621 == 0x95) || (svckey_660004621 == SvcKeySimRing_660004621)
ALORS
	erreur_660004621 = i_set_art_field(g_iartout,$Tdpvgsm::nbUT, 0x00000000)
SINON
	NB_UT_660004621 = preval_ut_660004265(g_iartout)
	SI (NB_UT_660004621 == -1 )
	ALORS
		erreur_660004621 = i_stocke_art(g_iartin,0,PT_ERRONE,0)
		#trace("Fin traitement: erreur prevalorisation")
		RETOUR TRAIT_OK
	SINON
		SI (NB_UT_660004621 == -2 )
		ALORS
			trace("pas de prevalorisation : retour preval == -2")
		SINON
			trace1("Prevalorisation OK avec valeur : %d", NB_UT_660004621)
			erreur_660004621 = i_set_art_field(g_iartout,$Tdpvgsm::nbUT, NB_UT_660004621)
		FINSI
	FINSI
FINSI
# /G1R5
# indtax a 0xff apres appel prevalo
# G3R0CbME FO 238
# erreur = i_set_art_field(g_iartout, $Tdpvgsm::indtax, 0xff)

############ V3T1.17 chgcar : MSET :FF:2
# Evol QC517, 556
#G3R2

############ V3T1.18 portabilite couleur : MSET :FF:1

############ V3t2 idpart 
#idpart		:-      :E      :NORM :idpart:-:$INCC_TR_CD
# Le choix entre CallingNb et CalledNb est fait au traitement dans l ajout Platine

############ V3t3 local 
#local		:-      :-      :NORM :local:-:$INCC_LOCAL
# Le choix entre VLRNb, TransNb, CalledNb et LocationNb est fait au traitement dans l ajout Platine
# FO595
SI (i_valid_field_n(g_iartout, $Tdpvgsm::T3t3))
  ALORS
  erreur_660004621 = i_get_art_str(g_iartout, $Tdpvgsm::local, pt_local_660004621)
  SI (i_strcmp(pt_local_660004621, "") == 0)
    ALORS
    erreur_660004621 = i_supprChamp(g_iartout, "T3t3")
  FINSI
FINSI
  
############ V3t4 MSISDN 
#MSISDN		:-      :E      :NORM :msisdn:-:$INCC_CG
# Le choix entre OrigCalledNb et CallingNb est fait au traitement dans l ajout Platine

############ V3t11.1 nbsvcIN : MSET :01:1

############ V3t11.2 lstSVCIN : 1VAL :SvcKey
VAR_660004621=i_get_art_field(g_iartin,$Tincc::SvcKey)
g_iartout.lstSVCIN[0]= 0x0
g_iartout.lstSVCIN[1]= VAR_660004621

############ V3t11.3 SCPIN
#SCPIN		:-	:E	:NORM:scpin:-:$INCC_TR_CD
# Le choix entre TransNb et CalledNb est fait au traitement dans l ajout Platine

############ V3t18.4 C_DestNum1
# FO 359 DRE   copie de scpin dans C_DestNum1 par table de duplication, puis retirer le T4t18.4 si test NON OK
#C_DestNum1	:-	:E	:NORM:scpin:-:$INCC_TR_CD
SI !((svckey_660004621 == 0x43) || (svckey_660004621 == 0x55) || (svckey_660004621 == SvcKeySimRing_660004621))
ALORS
	erreur_660004621 = i_supprChamp(g_iartout, "T4t18.4")
FINSI

############ V3t18.5 C_Key1
SI (svckey_660004621 == 0x43) || (svckey_660004621 == 0x55)
ALORS
# FO 379
#	erreur = i_ajoutChamp(g_iartout, "T4t18.5","C_Key1",0)
	erreur_660004621 = i_ajoutChamp(g_iartout, "T4t18.5","",1)
	erreur_660004621 = i_set_art_field(g_iartout, $Tdpvgsm::C_Key1,svckey_660004621)
FINSI

############ V4T30.1 date audit
####### date_plat
date_plat_660004621 = i_DHgetLocalTime(NUMTAB_660004621, 7, date_audit_660004621)
#trace1("======== date_plat = %d ========",date_plat)
erreur_660004621 = i_set_art_field(g_iartout, $Tdpvgsm::timeInCE,date_plat_660004621)

############ V4T30.2 EEC
# QC1405
SI (g_ieec > 500)
ALORS
  erreur_660004621 = i_set_art_field(g_iartout, $Tdpvgsm::eec, g_ieec - 500)
SINON
  erreur_660004621 = i_set_art_field(g_iartout, $Tdpvgsm::eec, g_ieec)
FINSI
#/QC1405

############ V3t38.5 originBearSrv
# G1R5 (ajout de ou svckey == 0x95)
SI (svckey_660004621 == 0x43) || (svckey_660004621 == 0x55) || (svckey_660004621 == 0x95) || (svckey_660004621 == SvcKeySimRing_660004621)
ALORS
	SI ( TelSvcI_660004621 == 0x01 )
	ALORS
		erreur_660004621 = i_ajoutChamp(g_iartout, "T4t38.5","originBearSrv",0)
		erreur_660004621 = i_set_art_field(g_iartout, $Tdpvgsm::originBearSrv,0x04)
	FINSI
FINSI

# G3R2
############ V3t65 RedirectReason
SI (svckey_660004621 == SvcKeySimRing_660004621) 
ALORS
	erreur_660004621 = i_ajoutChamp(g_iartout, "T3t65","RedirectReason",0)
	erreur_660004621 = i_set_art_field(g_iartout,$Tdpvgsm::RedirectReason, i_get_art_field(g_iartin, $Tincc::RedirReason))
FINSI

########################################################
# Cpt applicatifs
########################################################
#TT 86 G1R7 en commentaire le compteur 1502
# CPT = 1502
# X : type de CRA, Y : EEC, Z : inutilise, date : date_audit, Increment : 1

#Y = g_ieec
#X = type 
#Z = 0

#erreur=i_incr_cpt(CPT,X,Y,Z,date_plat,INCREMENT)

############################################################################
# Elimines explicites en DIVERS 
############################################################################
# Neant

############################################################################
# Attente requete Table de Distribution
############################################################################
# !bREDIST signifie envoie et lecture requete OK
# bREDIST ==1 signifie Echec sur i_EnvoiReqConsTabDistDouble ou lecture requete impossible

#---------------------------------------------------------------------------
# DPV33
#---------------------------------------------------------------------------

############################################################################
# Envoi vers IECC (dpv33)
############################################################################
#erreur = i_fdump_art(g_iartout)

#######################################
# Appel fonction distribution
#######################################
# G2R6 lot3 critere de distri inconu au lieu de aiguillage par IMSI
erreur_660004621 = aiguillage2_660004590 (g_iartin, g_iartout, DISTRIBUTION_INCONNU_660004621, Multidistribution_Non_660004621)
# /G2R6 lot3
# QC1005
SI (erreur_660004621 == TRAI_KO_660004621)
ALORS
	trace("<<<__LINE__<<<__FILE__<<< Erreur retour fonction aiguillage2")
#	code_errone = 0xA0B0
#	code_errone = code_errone + EFFICACE
#	erreur = i_PlvMessEmettre(7500,2,g_iartin,"",3,code_errone,C_Article,type)
	SAUT DISTRI_ERR
FINSI

#erreur = i_fdump_art(g_iartout)

RETOUR TRAIT_OK

#####################################################################
# POINT de branchement : stockage PT_OK
#####################################################################

POINT STOCKE_OK

erreur_660004621 = i_stocke_art(g_iartin, 0, PT_OK,0)

trace("Fin distribution Article Tincc")
RETOUR TRAIT_OK

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

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

erreur_660004621 = i_make_art_rej(g_iartin, g_iartout, 0)
erreur_660004621 = i_stocke_art(g_iartout, 0, PT_ERRONE, 0)

trace("Fin traitement Tincc")
RETOUR TRAIT_OK

#---------------------------------------FIN Tincc_dis.src-------------------
