FVERS = 2
REFOBJET : ID = 860026130 ; ID_INIT = 800009037 ; NOM = srp/SRP_CORR ; VERSION = V8 ; DATE = 29/04/14-12:40:48 ( 1398775248 ) ; CAT = 21 ; ETAT = 0 ; NB_FILS =0 ; ID_FILS = 
ID_EST = 860000101
COMMENT = "#28/04/2014 G4R6 QC809    #18/02/2011 G3R20 DRE THE - modification des regles de correlation ("
CREATEUR = drey
# DEBUT_CORPS
// Parametres des regles srp/SRP_CORR version B1 du 23/03/05-07h12m38s GMT (ID = 660008300)
// Regles de correlation pour la convergence AUDIO/LA
// Historique
//      PSA 06/12/04
//      Creation
//
// 	31/03/05 - PSA - FO 1213
// 	11/02/11 - DRE THE - G3R20 modification des regles de correlation ("suite" crise 51 Meteor)
// 	28/04/2014 - THE - Ajout ?context.TransformerDc avant ?context.EmettreDcCorrele QC809
//
//
//---------------------------------------------
import ilog.rules.compat.*;
import nts_interface_rules.*;

//---------------------------
//FONCTION : SRP_DELAI_MAX_CORR
//  temps maxi pour dedoublonner les DC (3600)
//---------------------------
function int SRP_DELAI_MAX_CORR(){
        return 3600;  //3600
};


//------------------------------------------------
// SRP : SRP_Dedoublonnage
//------------------------------------------------
rule SRP_Dedoublonnage
{
// + prioritaire que
priority = 600;
	when
	{
	?dcA: Article(
//		?dateCourante : ?context.LireDateCourante();
//		?dateCourante > dateEntree + SRP_DELAI_MAX_CORR();

		?REF_dcA      : LireChpNum("REF");
		?ICAR_dcA     : LireChpDate("DATE");
		?NDR_dcA      : LireChpCdc("IDUS_NUM");
		?SEQ_dcA      : LireChpNum("SEQ");
		);

	?dcB: Article(
		?this != ?dcA;

		?REF_dcB      : LireChpNum("REF");
		?REF_dcB      ==      ?REF_dcA;

		?ICAR_dcB     : LireChpDate("DATE");
		?ICAR_dcB     ==      ?ICAR_dcA;

		?NDR_dcB      : LireChpCdc("IDUS_NUM");
		?NDR_dcB      equals      ?NDR_dcA;

		?SEQ_dcB      : LireChpNum("SEQ");
		?SEQ_dcB      ==      ?SEQ_dcA;
		);
	}
	then
	{
		?context.Tracer("=======================================") ;
		?context.Tracer("--SRP---> Correlation SRP_Dedoublonnage") ;
		?context.Tracer("=======================================") ;

		?context.EliminerDc ( ?dcB );
	}
};

//------------------------------------------------
// SRP : SRP_Reroutage
//------------------------------------------------
rule SRP_Reroutage
{
// + prioritaire que
priority = 500;
	when
	{
	?dcA: Article(
		?dateCourante : ?context.LireDateCourante();
		?dateCourante > dateEntree + SRP_DELAI_MAX_CORR();

		?REROUT_TYPE_dcA      : LireChpNum("REROUT_TYPE");
		?REROUT_TYPE_dcA      == 0;

		?FINSER_CAUSE_dcA     : LireChpNum("FINSER_CAUSE");
		?FINSER_CAUSE_dcA     == 0;

		?REF_dcA              : LireChpNum("REF");
		?IDUS_NUM_dcA         : LireChpCdc("IDUS_NUM");

		?SEQ_dcA              : LireChpNum("SEQ");
		);

	?dcB: Article(
		?this != ?dcA;

		?OADC_CAU_dcB         : LireChpNum("OADC_COR");
		( ?OADC_CAU_dcB == 0xB ) || ( ?OADC_CAU_dcB == 0xC );

		?REF_dcB              : LireChpNum("REF");
		?REF_dcB              ==      ?REF_dcA;

		?IDUS_NUM_dcB         : LireChpCdc("IDUS_NUM");
		?IDUS_NUM_dcB         equals      ?IDUS_NUM_dcA;

		?SEQ_dcB              : LireChpNum("SEQ");
		?SEQ_dcB              >       ?SEQ_dcA;
		);

	not Article(
		?this != ?dcA;
		?this != ?dcB;

		?OADC_CAU_dcC         : LireChpNum("OADC_COR");
		( ?OADC_CAU_dcC == 0xB ) || ( ?OADC_CAU_dcC == 0xC );

		?REF_dcC              : LireChpNum("REF");
		?REF_dcA              ==      ?REF_dcC;

		?IDUS_NUM_dcC         : LireChpCdc("IDUS_NUM");
		?IDUS_NUM_dcA         equals      ?IDUS_NUM_dcC;

		?SEQ_dcC              : LireChpNum("SEQ");
		?SEQ_dcC              >       ?SEQ_dcA;
		?SEQ_dcC              <       ?SEQ_dcB;
		);
	}
	then
	{
		?context.Tracer("=======================================") ;
		?context.Tracer("--SRP---> Correlation SRP_Reroutage") ;
		?context.Tracer("=======================================") ;

		?dcA.EcrireChpNum("REROUT_TYPE", 2);
		update ?dcA;

		?dcB.EcrireChpNum("REROUT_TYPE", 2);
		update ?dcB;
	}
};


//------------------------------------------------
// SRP : SRP_SANS_Reroutage
//------------------------------------------------
rule SRP_SANS_Reroutage
{
// + prioritaire que
priority = 100;
	when
	{
	?dcA: Article(
		?dateCourante : ?context.LireDateCourante();
		?dateCourante > dateEntree + SRP_DELAI_MAX_CORR();

		?REROUT_TYPE_dcA      : LireChpNum("REROUT_TYPE");
		?OADC_CAU_dcA         : LireChpNum("OADC_COR");

		( ?REROUT_TYPE_dcA == 0 ) && ( ?OADC_CAU_dcA != 0xB ) && ( ?OADC_CAU_dcA != 0xC );

		?REF_dcA              : LireChpNum("REF");
		?IDUS_NUM_dcA         : LireChpCdc("IDUS_NUM");
		);

	not Article(
		?this != ?dcA;

		?REROUT_TYPE_dcC      : LireChpNum("REROUT_TYPE");
		?REROUT_TYPE_dcC      == 2;

		?REF_dcC              : LireChpNum("REF");
		?REF_dcC              ==      ?REF_dcA;

		?IDUS_NUM_dcC         : LireChpCdc("IDUS_NUM");
		?IDUS_NUM_dcA         equals      ?IDUS_NUM_dcC;
		);
	}
	then
	{
		?context.Tracer("=======================================") ;
		?context.Tracer("--SRP---> Correlation SRP_SANS_Reroutage") ;
		?context.Tracer("=======================================") ;

		?dcA.EcrireChpNum("REROUT_TYPE", 1);
		update ?dcA;

		?context.EmettreDcEltNonUtilise(?dcA);
	}
};


//------------------------------------------------
// SRP : SRP_PRE_AGREGATION
//------------------------------------------------
rule SRP_PRE_AGREGATION
{
// + prioritaire que
priority = 400;
	when
	{
	?dcA: Article(
		?dateCourante : ?context.LireDateCourante();
		?dateCourante > dateEntree + SRP_DELAI_MAX_CORR();

		?REROUT_TYPE_dcA      : LireChpNum("REROUT_TYPE");
		?REROUT_TYPE_dcA      != 3;

		?SEQ_dcA      : LireChpNum("SEQ");
		?SEQ_dcA      == 2;

		?REF_dcA      : LireChpNum("REF");
		?ICAR_dcA     : LireChpDate("DATE");
		?NDR_dcA      : LireChpCdc("IDUS_NUM");
		);

	?dcB: Article(
//		?this != ?dcA;

		?REROUT_TYPE_dcB      : LireChpNum("REROUT_TYPE");
		?REROUT_TYPE_dcB      == 2;

		?REF_dcB      : LireChpNum("REF");
		?REF_dcB      ==      ?REF_dcA;

		?ICAR_dcB     : LireChpDate("DATE");
      ?ICAR_dcB     ==      ?ICAR_dcA;

		?NDR_dcB      : LireChpCdc("IDUS_NUM");
		?NDR_dcB      equals      ?NDR_dcA;

		?SEQ_dcB      : LireChpNum("SEQ");
		?SEQ_dcB      >=       ?SEQ_dcA;
		);

	?dcC: Article(
		?this != ?dcA;
		?this != ?dcB;

		?SEQ_dcC      : LireChpNum("SEQ");
		( ?context.CalculerEtLogique(?SEQ_dcC, 1) == 1 );

		?REF_dcC      : LireChpNum("REF");
		?REF_dcC      ==      ?REF_dcA;
		);
	}
	then
	{
		?context.Tracer("=======================================") ;
		?context.Tracer("--SRP---> Correlation SRP_PRE_AGREGATION") ;
		?context.Tracer("=======================================") ;

		?dcA.EcrireChpNum("REROUT_TYPE", 3);
		update ?dcA;
		}
};


//------------------------------------------------
// SRP : SRP_AGREGATION
//------------------------------------------------
rule SRP_AGREGATION
{
// + prioritaire que
priority = 300;
	when
	{
	?dcA: Article(
		?dateCourante : ?context.LireDateCourante();
		?dateCourante > dateEntree + SRP_DELAI_MAX_CORR();

		?REROUT_TYPE_dcA : LireChpNum("REROUT_TYPE");
		?REROUT_TYPE_dcA == 3;

		?REF_dcA         : LireChpNum("REF");
		?DUR_dcA         : LireChpNum("DUREE");
		?NBUT_dcA        : LireChpNum("NBUT");
		?IDUS_NUM_dcA         : LireChpCdc("IDUS_NUM");
		);

	?dcB: Article(
		?this != ?dcA;

		?REF_dcB      : LireChpNum("REF");
		?DUR_dcB      : LireChpNum("DUREE");
		?NBUT_dcB     : LireChpNum("NBUT");

		?REF_dcB      ==      ?REF_dcA;

		?IDUS_NUM_dcB         : LireChpCdc("IDUS_NUM");
		?IDUS_NUM_dcA         equals      ?IDUS_NUM_dcB;
		);
	}
	then
	{
		?context.Tracer("=======================================") ;
		?context.Tracer("--SRP---> Correlation SRP_AGREGATION") ;
		?context.Tracer("=======================================") ;

		?dcA.EcrireChpNum("DUREE", ?DUR_dcA + ?DUR_dcB);
		?dcA.EcrireChpNum("NBUT", ?NBUT_dcA + ?NBUT_dcB);
		update ?dcA;
//		?context.EmettreDcCorrele ( ?dcA );

		?context.EliminerDc ( ?dcB );
	}
};


//------------------------------------------------
// SRP : SRP_POST_AGREGATION
//------------------------------------------------
rule SRP_POST_AGREGATION
{
// + prioritaire que
priority = 200;
	when
	{
	?dcA: Article(
		?dateCourante : ?context.LireDateCourante();
		?dateCourante > dateEntree + SRP_DELAI_MAX_CORR();

		?REROUT_TYPE_dcA : LireChpNum("REROUT_TYPE");
		?REROUT_TYPE_dcA == 3;

		?REF_dcA         : LireChpNum("REF");
		?IDUS_NUM_dcA    : LireChpCdc("IDUS_NUM");
		);

	not Article(
		?this != ?dcA;

		?REF_dcB      : LireChpNum("REF");

		?REF_dcB      ==      ?REF_dcA;

		?IDUS_NUM_dcB         : LireChpCdc("IDUS_NUM");
		?IDUS_NUM_dcA         equals      ?IDUS_NUM_dcB;
		);
	 }
	then
	{
		?context.Tracer("=======================================") ;
		?context.Tracer("--SRP---> Correlation SRP_POST_AGREGATION") ;
		?context.Tracer("=======================================") ;

//QC809
		?context.TransformerDc( ?dcA );
		?context.EmettreDcCorrele ( ?dcA );
	}
};


//------------------------------------------------
// SRP : SRP_ORPHELIN
//------------------------------------------------
rule SRP_ORPHELIN
{
// + prioritaire que
priority = 0;
	when
	{
	?dcA: Article(
		?dateCourante : ?context.LireDateCourante();
		?dateCourante > dateEntree + SRP_DELAI_MAX_CORR();
		);
	}
	then
	{
		?context.Tracer("=======================================") ;
		?context.Tracer("--SRP---> Correlation SRP_ORPHELIN") ;
		?context.Tracer("=======================================") ;

		?context.EliminerDc ( ?dcA );
	}
};

# FIN_CORPS
