**********************************************************
*Cloture de la paie
*Programme chaine  partir d'un projet VB
*Vanessa
*
*GESTION DES CONGES (MENSUEL ET BASCULEMENT)
*STEPHANE
**********************************************************

**********************************************************
* RECAPITULATIF DES CORRECTIONS

* 22/05/01 -> INTEGRATION DE LA GESTION DE CONGES FRACT. + ANC. AVANT PRISE DES CONGES EN COURS ACQ.
* 28/02/01 -> CORRECTION BUG SUR SOLDE DES CONGES LORS DE CONGES POUR SOLDE
* 30/01/01 -> CORRECTION BUG SUR VALORISATION NB JOURS SUSP. CONTRAT (ATT.70)

**********************************************************
* RECAPITULATIF DES GOSUB

* 10  -> MAJ DU FICHIER HISTORCUMUL
* 11  -> GESTION DES TRANCHES B + C DANS HISTORCUMUL
* 50  -> MAJ DES CONGES PAYES
* 60  -> RECHERCHE DU NOMBRE DE JOURS DE CONGES
* 70  -> MAJ DES COMPTEURS DE CONGES
* 80  -> CALCUL DU TAUX HORAIRE + COEFFICIENT
* 100 -> MAJ DES CONGES EN-COURS D'ACQUISITION
* 200 -> GESTION DES ABSENCES
* 300 -> CALCUL DU NOMBRE DE JOURS D'ABSENCES (HORS MALADIE)
* 301 -> CALCUL DES DROITS AUX CONGES (TYPE 12 OU 13)
* 302 -> CALCUL DU NOMBRE CUMULE DE JOURS D'ABSENCES (JUIN->MAI)
* 303 -> CALCUL DU NOMBRE DE JOURS D'ABSENCES MALADIE
* 310 -> CALCUL DES DROITS AUX CONGES (MALADIE)
* 320 -> CALCUL DES DROITS AUX CONGES <> 01,12,13
* 500 -> GESTION DE BASCULEMENT DES COMPTEURS
* 600 -> GESTION DE BASCULEMENT DES COMPTEURS DE CONGES PAYES
* 700 -> GESTION DE BASCULEMENT DES COMPTEURS DE CONGES ANCIENNETE
* 800 -> GESTION DE BASCULEMENT DES COMPTEURS DE CONGES FRACTIONNEMENT
* 900 -> GESTION DES EFFECTIFS
* 901 -> RECHERCHE SI ETABLISSEMENT DEJA TRAITE
* 910 -> MAJ DU FICHIER ETABLISSEMENT
* 920 -> MAJ DU FICHIER ASSOCIATION

* 2000 --> Controles pour cration d'un nouveau DtailPrest (JEROME)
* 2001 --> Cration du nouveau DtailPrest suite  ensemble des controles valide (JEROME)
* 2010 --> Purge DETAILPREST, DETAILMANDAT & DETAILINTER si Priode < PriodePaie (JEROME)
* (60) --> Purge du DETAILADMIN aprs traitement (JEROME)
* 2050 --> RECHERCHE SI CONTRAT TOUJOURS EN COURS SUR MOIS SUIVANT...
* 2100 --> Controle pour cration DETAILADMIN, DETAILPREST, DETAILMANDAT & DETAILINTER (JEROME)
* 2101 --> cration DETAILADMIN  (JEROME)
* 2102 --> cration DETAILMANDAT (JEROME)
* 2103 --> cration DETAILPREST  (JEROME)
* 2104 --> cration DETAILINTER  (JEROME)
* 2200 --> PURGE DES FICHIERS ANOMALIESPAIE + ACOMPTEBULL

* Ouvertures des fichiers
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"

OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP 
OPEN "","ACOMPTEBULL" TO F.ACOMPTEBULL ELSE PRINT "OUVERTURE ACOMPTEBULL" ;* en suppression
OPEN "","ACTIVITES" TO F.ACTIVITE ELSE STOP
OPEN "","ANOMALIEPAIE" TO F.ANOMALIEPAIE ELSE STOP
OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE STOP
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP
OPEN "","CONSTANTESPAIE" TO F.CONSTANTESPAIE ELSE STOP
OPEN "","CONTRAT" TO F.CONTRAT ELSE PRINT "OUVERTURE CONTRAT" ;* en criture
OPEN "","CONTRATSPREV" TO F.CONTRATSPREV ELSE STOP
OPEN "","CONVENTIONCOL" TO F.CONVENTIONCOL ELSE STOP
OPEN "","DETAILADMIN" TO F.DETAILADMIN ELSE STOP
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE PRINT "OUVERTURE DETAILCALCUL" ;* en lecture
OPEN "","DETAILINTER" TO F.DETAILINTER ELSE STOP
OPEN "","DETAILMANDAT" TO F.DETAILMANDAT ELSE STOP
OPEN "","DETAILPREST" TO F.DETAILPREST ELSE STOP
OPEN "","ETABLISSEMENT" TO F.ETABLISSEMENT ELSE STOP
OPEN "","GRILLESCC" TO F.GRILLESCC ELSE STOP
OPEN "","HISTORCUMUL" TO F.HISTORCUMUL ELSE PRINT "OUVERTURE HISTORCUMUL" ;* en criture
OPEN "","PERIODESPAIE" TO F.PERIODESPAIE ELSE STOP
OPEN "","PROFIL" TO F.PROFIL ELSE STOP
OPEN "","RATTSALANT" TO F.RATTSALANT ELSE STOP
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE PRINT "OUVERTURE RUBSAISIE" ;* en lecture
OPEN "","RUBCHARGE" TO F.RUBCHARGE ELSE PRINT "OUVERTURE RUBCHARGE" ;* en lecture
OPEN "","TABLES" TO F.TABLES ELSE STOP
OPEN "","TRANCHE" TO F.TRANCHE ELSE STOP

* SPECIF TROYES
OPEN "","DETAILFEDE" TO F.DETAILFEDE ELSE PRINT ""

*********************************************************
* Recuperation des arguments
PROCREAD ARGUMENTS ELSE STOP
W_RangPeriode=INDEX(ARGUMENTS," ",1)
W_PERIODEFACT=ARGUMENTS[W_RangPeriode+1,6]
W_Nom=INDEX(ARGUMENTS," ",2)
W_RequeteContrat=ARGUMENTS[W_Nom+1,999]
*********************************************************

W_EURO=0

* REGARDE SI TRAITEMENT EN EUROS
READ ENR_CONSTANTESPAIE FROM F.CONSTANTESPAIE,"1" ELSE STOP
READ ENR_PERIODESPAIE FROM F.PERIODESPAIE,"1" ELSE STOP
READ ENR_TABLES FROM F.TABLES,"NATURECONTRAT" ELSE STOP

IF INT(ICONV("01/":ENR_PERIODESPAIE<1>[5,2]:"/":ENR_PERIODESPAIE<1>[1,4],"D4/"))>=INT(ENR_CONSTANTESPAIE<9>) THEN
   W_PASSAGEEURO=1
   W_EURO="6,55957"
END ELSE
   W_PASSAGEEURO=0
END

* SELECTION CONTRATSPREV POUR CONNAITRE LES COMPLEMENTS MALADIE/ACCIDENT
GOSUB 304

W_DebMois=ICONV("01/":W_PERIODEFACT[5,2]:"/":W_PERIODEFACT[1,4],"D4/")
W_FinMois=W_DebMois+32
W_FinMois=OCONV(W_FinMois,"D4/")
W_FinMois="01/":W_FinMois[4,7]
W_FinMois=ICONV(W_FinMois,"D4/")-1
W_NbJourMois=W_FinMois-W_DebMois+1
W_NbJourMois=W_NbJourMois * 100

* Requete sur CONTRAT
  W_EFFECTIFPHYSIQUE=""
  W_EFFECTIFTP=""
  W_EFFECTIFPHYSIQUETOTAL=0
  W_EFFECTIFTPTOTAL=0

  W_EFFECTIFPHYSIQUE26ANS=""
  W_EFFECTIFTP26ANS=""
  W_EFFECTIFPHYSIQUETOTAL26ANS=0
  W_EFFECTIFTPTOTAL26ANS=0

  W_HORAIRETP=""
  W_HORAIREHEBDO=""
  W_ETABLISSEMENT=""
  W_NBETABLISSEMENT=0
  W_HEURESARRET=0
  W_RUBAFFECT=""
  W_CODEABSENCE=""
  W_NBJOURABS2=0

* INITIALISE LES LISTES A VIDE
LISTEABSENCESAIDANT=""
LISTANOMALIEPAIE=""
LISTACOMPTEBULL=""
LISTEMALADIEAIDANT=""
REQUETECONTRAT=""
REQUETEDETAIL=""

   IF W_PERIODEFACT = "200306" OR W_PERIODEFACT = "200406" OR W_PERIODEFACT = "200506" THEN
	CALL MajGrilleCloture(W_RequeteContrat,W_PERIODEFACT)
   END

   W_Fini="FAUX"
   EXECUTE W_RequeteContrat
   EXECUTE 'SAUVE-LISTE REQUETECONTRAT'
   EXECUTE 'LISTE REQUETECONTRAT' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1>=209 THEN 
        STOP
   END

   SELECT F.CONTRAT TO REQUETECONTRAT
	
	* SAUVEGARDE PROCHAINE PERIODE DE TRAITEMENT POUR REMPLISSAGE AUTO DETAILXXXX
	* JEROME
	W_PROCHAINEPERIODE=W_PERIODEFACT+1
	IF W_PROCHAINEPERIODE[5,2]="13" THEN
		W_PROCHAINEPERIODE=W_PROCHAINEPERIODE[1,4]+1:"01"
	END
   W_NbContratsTraites = 0
   W_DernierContratTraite = ""

   LOOP
      READNEXT W_CleContrat FROM REQUETECONTRAT ELSE W_Fini="VRAI"
	
	DELETE F.RATTSALANT,W_CleContrat

      W_AFFECTCONGESMOIS="FAUX"
      W_CODEAIDANT=W_CleContrat[1,5]

   WHILE W_Fini="FAUX" DO
	W_NbContratsTraites = W_NbContratsTraites + 1
	W_DernierContratTraite = W_CleContrat[1,5]

      READ ENR_CONTRAT FROM F.CONTRAT,W_CleContrat ELSE ENR_CONTRAT="" 
      IF ENR_CONTRAT<81><>"" THEN
          GOSUB 10 
          ENR_CONTRAT<63>=ENR_CONTRAT<81>
          ENR_CONTRAT<81>=""
      END

      READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,ENR_CONTRAT<1> ELSE ENR_CONVENTIOLCOL=""

      W_PERIODE=W_PERIODEFACT
      W_CODECONTRAT=W_CleContrat
      W_CODECONVENTION=ENR_CONTRAT<1>
      W_DEBUTCONTRAT=ENR_CONTRAT<7>
      W_DEBUTCONTRATANC=ENR_CONTRAT<97>
      W_ASSOCIATION=ENR_CONTRAT<2>

      W_JOURCONGESCP=0
      W_JOURCONGESCA=0
      W_JOURCONGESCPS=0
      W_JOURCONGESCF=0
      W_ANCIENCODE=""

      GOSUB 50

      GOSUB 80

      GOSUB 2200

      ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)

      W_AVENANT=DCOUNT(EXTRACT(ENR_CONTRAT,15),CHAR(253))
      IF ENR_CONTRAT<68,W_AVENANT>="1" THEN
	   IF ENR_CONTRAT<1>#"02" THEN	
     	      READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,ENR_CONTRAT<3> THEN
		W_FINMODUL=ENR_ETABLISSEMENT<24>
		IF W_FINMODUL=W_PERIODE[5,2] THEN
		     ENR_CONTRAT<71>=ENR_CONTRAT<76>
		     ENR_CONTRAT<72>=ENR_CONTRAT<77>
		     ENR_CONTRAT<73>=ENR_CONTRAT<78>
		     ENR_CONTRAT<74>=ENR_CONTRAT<79>
		     ENR_CONTRAT<75>=ENR_CONTRAT<80>
		     ENR_CONTRAT<99>=ENR_CONTRAT<100>
		     ENR_CONTRAT<76>=""
		     ENR_CONTRAT<77>=""
		     ENR_CONTRAT<78>=""
		     ENR_CONTRAT<79>=""
		     ENR_CONTRAT<80>=""
                     ENR_CONTRAT<100>=""
		END
	      END
	   END
      END ELSE
	 READ ENR_ASSOCIATION FROM F.ASSOCIATION,ENR_CONTRAT<2> THEN
	   IF ENR_ASSOCIATION<25>="1" THEN
		IF W_PERIODE[5,2]="11" THEN
		     ENR_CONTRAT<71>=ENR_CONTRAT<76>
		     ENR_CONTRAT<72>=ENR_CONTRAT<77>
		     ENR_CONTRAT<73>=ENR_CONTRAT<78>
		     ENR_CONTRAT<74>=ENR_CONTRAT<79>
		     ENR_CONTRAT<75>=ENR_CONTRAT<80>
		     ENR_CONTRAT<99>=ENR_CONTRAT<100>
		     ENR_CONTRAT<76>=""
		     ENR_CONTRAT<77>=""
		     ENR_CONTRAT<78>=""
		     ENR_CONTRAT<79>=""
		     ENR_CONTRAT<80>=""
                     ENR_CONTRAT<100>=""
		END
	   END ELSE
		IF W_PERIODE[5,2]="12" THEN
		     ENR_CONTRAT<71>=ENR_CONTRAT<76>
		     ENR_CONTRAT<72>=ENR_CONTRAT<77>
		     ENR_CONTRAT<73>=ENR_CONTRAT<78>
		     ENR_CONTRAT<74>=ENR_CONTRAT<79>
		     ENR_CONTRAT<75>=ENR_CONTRAT<80>
		     ENR_CONTRAT<99>=ENR_CONTRAT<100>
		     ENR_CONTRAT<76>=""
		     ENR_CONTRAT<77>=""
		     ENR_CONTRAT<78>=""
		     ENR_CONTRAT<79>=""
		     ENR_CONTRAT<80>=""
                     ENR_CONTRAT<100>=""
		END
	   END
         END
      END				     

      * CREATION DE DETAILXXXXX SUIVANT		
      GOSUB 2100

      IF W_CODECONVENTION<>"02" THEN
		IF ENR_CONTRAT<13><>"" THEN
			iTemp=1
			LOOP
			UNTIL ENR_TABLES<2,iTemp> = ENR_CONTRAT<13> OR ENR_TABLES<2,iTemp> = "" DO
				iTemp=iTemp+1
			REPEAT
			IF ENR_TABLES<4,iTemp> = "O" THEN
				GOSUB 900
			END
		END ELSE
			GOSUB 900
		END
	  END

      GOSUB 100

      GOSUB 500

      IF ENR_CONTRAT<58>=W_PERIODEFACT THEN
		ENR_CONTRAT<39>=0
		ENR_CONTRAT<41>=0
		ENR_CONTRAT<44>=0
		ENR_CONTRAT<45>=0
		ENR_CONTRAT<46>=0
                ENR_CONTRAT<48>=0
                ENR_CONTRAT<83>=0
      END

      WRITE ENR_CONTRAT ON F.CONTRAT,W_CleContrat
   REPEAT

   I=1
   LOOP

	UNTIL W_HORAIRETP<I>="" DO
 	W_EFFECTIFTP26ANS<I>=W_EFFECTIFTP26ANS<I>+INT((W_HORAIRETP26ANS<I>/W_HORAIREHEBDO<I>)*100+1/2)    
	W_EFFECTIFTP<I>=W_EFFECTIFTP<I>+INT((W_HORAIRETP<I>/W_HORAIREHEBDO<I>)*100+1/2)
	I=I+1
   REPEAT

   IF W_NBETABLISSEMENT="" OR W_NBETABLISSEMENT=0 THEN
      W_NBETABLISSEMENT=DCOUNT(W_ETABLISSEMENT,CHAR(254))
   END

   * MAJ DES ETABLISSEMENT
   GOSUB 910

   * MAJ DE L'ASSOCIATION
   GOSUB 920

   EXECUTE "EFFACER-LISTE LISTEABSENCESAIDANT"
   EXECUTE "EFFACER-LISTE LISTEMALADIEAIDANT"
   EXECUTE "EFFACER-LISTE REQUETECONTRAT"

	* Purge des fichiers
	GOSUB 2010

   IF W_NbContratsTraites = 1 THEN
	GOSUB 10000
   END

STOP

*********************************************************
*********************************************************
* MAJ du fichier HISTORCUMUL

10

  W_CodeAidant=W_CleContrat
  W_ENTREESURMOIS="NON"
  W_DATEDEBCONTRAT=ENR_CONTRAT<7>
  W_DATEDEBCONTRAT=OCONV(W_DATEDEBCONTRAT,"D4 ")
  W_DATEDEBCONTRAT=W_DATEDEBCONTRAT[7,4]:W_DATEDEBCONTRAT[4,2]
  IF W_DATEDEBCONTRAT=W_PERIODEFACT THEN W_ENTREESURMOIS="OUI"

  * test si dcallage de paie
  READ ENR_ASSOCIATION FROM F.ASSOCIATION,ENR_CONTRAT<2> ELSE ENR_ASSOCIATION="" 
  IF ENR_ASSOCIATION<25> = "1" AND ENR_CONTRAT<1> # "02" AND ENR_CONTRAT<81>[5,2] = "12" THEN
     W_CodeAnnee=ENR_CONTRAT<81>[1,4] + 1
  END ELSE
     W_CodeAnnee=ENR_CONTRAT<81>[1,4]
  END

  IF ENR_CONTRAT<1>="02" THEN
     W_CleHistorCumul=W_CodeAidant[1,5]:W_CodeAnnee:ENR_CONTRAT<3>
  END ELSE 
     W_CleHistorCumul=W_CodeAidant[1,5]:W_CodeAnnee:ENR_CONTRAT<2>
  END

  READ ENR_HISTORCUMUL FROM F.HISTORCUMUL,W_CleHistorCumul ELSE ENR_HISTORCUMUL=""
  IF ENR_HISTORCUMUL="" THEN W_ENTREESURMOIS="OUI"
  IF ENR_HISTORCUMUL#"" THEN W_ENTREESURMOIS="NON"
  IF ENR_HISTORCUMUL<5>=0 THEN W_ENTREESURMOIS="OUI"

******************************************************
  IF ENR_ASSOCIATION<25> = "1" AND ENR_CONTRAT<1> # "02" THEN

  	IF ENR_HISTORCUMUL<11>="" AND ENR_CONTRAT<7> >= ICONV("01/12/":W_CodeAnnee[1,4]-1,"D4/") AND ENR_CONTRAT<7> <= ICONV("30/11/":W_CodeAnnee[1,4],"D4/") THEN
     		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,11;ENR_CONTRAT<7>)
  	END
  	IF ENR_HISTORCUMUL<12>="" AND ENR_CONTRAT<8> >= ICONV("01/12/":W_CodeAnnee[1,4]-1,"D4/") AND ENR_CONTRAT<8> <= ICONV("30/11/":W_CodeAnnee[1,4],"D4/") THEN
   		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,12;ENR_CONTRAT<8>)
  	END
  	IF ENR_HISTORCUMUL<12> # "" AND ENR_CONTRAT<7> # ENR_HISTORCUMUL<11> AND ENR_CONTRAT<7> >= ICONV("01/12/":W_CodeAnnee[1,4]-1,"D4/") AND ENR_CONTRAT<7> <= ICONV("30/11/":W_CodeAnnee[1,4],"D4/") THEN
     		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,13;ENR_CONTRAT<7>)
  	END
  	IF ENR_HISTORCUMUL<12> # "" AND ENR_CONTRAT<8> # ENR_HISTORCUMUL<12> AND ENR_CONTRAT<8> >= ICONV("01/12/":W_CodeAnnee[1,4]-1,"D4/") AND ENR_CONTRAT<8> <= ICONV("30/11/":W_CodeAnnee[1,4],"D4/") THEN
     		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,14;ENR_CONTRAT<8>)
  	END

  END ELSE

  	IF ENR_HISTORCUMUL<11>="" AND ENR_CONTRAT<7> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<7> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
     		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,11;ENR_CONTRAT<7>)
  	END
  	IF ENR_HISTORCUMUL<12>="" AND ENR_CONTRAT<8> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<8> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
   		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,12;ENR_CONTRAT<8>)
  	END
  	IF ENR_HISTORCUMUL<12> # "" AND ENR_CONTRAT<7> # ENR_HISTORCUMUL<11> AND ENR_CONTRAT<7> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<7> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
     		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,13;ENR_CONTRAT<7>)
  	END
  	IF ENR_HISTORCUMUL<12> # "" AND ENR_CONTRAT<8> # ENR_HISTORCUMUL<12> AND ENR_CONTRAT<8> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<8> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
     		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,14;ENR_CONTRAT<8>)
  	END

  END

*******************************************************

  READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CleContrat:ENR_CONTRAT<81> ELSE ENR_DETAILCALCUL="" 
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,2;ENR_HISTORCUMUL<2>+ENR_DETAILCALCUL<6>)

  IF ENR_DETAILCALCUL<6> >= 6000 THEN
     W_Mois=ENR_CONTRAT<81>
     ENR_HISTORCUMUL<3>=W_Mois[5,2]
  END

  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,4;ENR_HISTORCUMUL<4>+ENR_DETAILCALCUL<29>)
  W_CumulBrut=ENR_HISTORCUMUL<5>
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,5;ENR_HISTORCUMUL<5>+ENR_DETAILCALCUL<7>)
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,6;ENR_HISTORCUMUL<6>+ENR_DETAILCALCUL<15>)
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,7;ENR_HISTORCUMUL<7>+ENR_DETAILCALCUL<16>)

  W_Temp=DCOUNT(ENR_DETAILCALCUL<2>,CHAR(253))

  FOR i=1 TO W_Temp
     
     READ ENR_RUBSAISIE FROM F.RUBSAISIE,ENR_DETAILCALCUL<2,i> ELSE ENR_RUBSAISIE="" 

     IF ENR_RUBSAISIE<2>="3" OR ENR_RUBSAISIE<2>="4" THEN
        ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,1;ENR_HISTORCUMUL<1>+ENR_DETAILCALCUL<3,i>)
     END
     
     IF ENR_RUBSAISIE<2>="0" THEN
        ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,8;ENR_HISTORCUMUL<8>+ENR_DETAILCALCUL<5,i>)

        W_Count=DCOUNT(ENR_HISTORCUMUL<9>,CHAR(253))
	IF ENR_RUBSAISIE<3>="" THEN
           ENR_RUBSAISIE<3>="A"
	END
	IF W_Count < 4 THEN
           W_Passe="FALSE"
           FOR j=1 TO W_Count
               IF ENR_RUBSAISIE<3>=ENR_HISTORCUMUL<9,j> THEN
                   W_Passe="TRUE"
               END 
           NEXT j 
           IF W_Passe="FALSE" THEN
	     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,9,W_Count+1;ENR_RUBSAISIE<3>)
	   END
 	END

     END

   NEXT i

  W_Temp=DCOUNT(ENR_DETAILCALCUL<17>,CHAR(253))
  W_CumulRub=0
  FOR i=1 TO W_Temp
     READ ENR_RUBSAISIE FROM F.RUBSAISIE,ENR_DETAILCALCUL<17,i> ELSE ENR_RUBSAISIE="" 
     IF ENR_RUBSAISIE<2>="2" THEN
        ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,10;ENR_HISTORCUMUL<10>+ENR_DETAILCALCUL<20,i>)

        W_Count=DCOUNT(ENR_HISTORCUMUL<22>,CHAR(253))
	IF ENR_RUBSAISIE<17>="" THEN
           ENR_RUBSAISIE<17>="R"
	END
	IF W_Count < 4 THEN
           W_Passe="FALSE"
           FOR j=1 TO W_Count
               IF ENR_RUBSAISIE<17>=ENR_HISTORCUMUL<22,j> THEN
                   W_Passe="TRUE"
               END 
           NEXT j 
           IF W_Passe="FALSE" THEN
	     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,22,W_Count+1;ENR_RUBSAISIE<17>)
	   END
 	END
     END

     *****************************************************************
     * MAJ 25/11/02 : gestion de la rubrique 832, chomage partiel...
     IF ENR_DETAILCALCUL<17,i> = "832" THEN
	  IF ENR_HISTORCUMUL<20> = "" THEN
		ENR_HISTORCUMUL = REPLACE(ENR_HISTORCUMUL, 20; ENR_DETAILCALCUL<20,i>)
	  END ELSE
		ENR_HISTORCUMUL = REPLACE(ENR_HISTORCUMUL, 20; ENR_HISTORCUMUL<20> + ENR_DETAILCALCUL<20,i>)
	  END
     END
     *****************************************************************

     * MAJ 27/11/02 : gestion de l'att 21 de HISTORCUMUL
     * VANES
     IF ENR_CONTRAT<1>="02" AND ENR_DETAILCALCUL<1>="E" THEN
        IF ENR_DETAILCALCUL<17,i> = "816" OR ENR_DETAILCALCUL<17,i> = "824" OR ENR_DETAILCALCUL<17,i> = "829" THEN
           W_CumulRub = W_CumulRub + ENR_DETAILCALCUL<20,i>
        END
     END
     *****************************************************************

  NEXT i

  *****************************************************************
  * MAJ 27/11/02 : gestion de l'att 21 de HISTORCUMUL
  * VANES
  IF ENR_CONTRAT<1>="02" AND ENR_DETAILCALCUL<1>="E" THEN

     IF ENR_HISTORCUMUL<21> = "" THEN
	ENR_HISTORCUMUL = REPLACE(ENR_HISTORCUMUL,21;ENR_DETAILCALCUL<21>-W_CumulRub)
     END ELSE
	ENR_HISTORCUMUL = REPLACE(ENR_HISTORCUMUL,21; ENR_HISTORCUMUL<21> + (ENR_DETAILCALCUL<21>-W_CumulRub))
     END
  END
  *****************************************************************

  i=1
  W_ENRHISTORCUMUL=""
  W_Count=DCOUNT(ENR_HISTORCUMUL<15>,CHAR(253))
  FOR j=1 TO W_Count
   W_ENRHISTORCUMUL<1,j>=""
  NEXT j
  W_BASEURSSAFTOT=0
  W_BASEURSSAFPLAF=0
  W_CUMASSURSSAFTOT=0
  W_CUMASSURSSAFPLAF=0

  j=1
  LOOP
  IF W_CUMASSURSSAFPLAF#0 AND W_CUMASSURSSAFTOT#0 THEN j=99
  WHILE ENR_HISTORCUMUL<15,j> # "" DO
      IF W_CUMASSURSSAFPLAF=0 OR W_CUMASSURSSAFTOT=0 THEN
        READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_HISTORCUMUL<15,j> ELSE ENR_RUBCHARGE="" 
        IF ENR_RUBCHARGE<16>="01" THEN
          READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> ELSE ENR_TRANCHE=""
          IF ENR_TRANCHE<10>="02" THEN
            IF W_CUMASSURSSAFPLAF=0 THEN W_CUMASSURSSAFPLAF=ENR_HISTORCUMUL<16,j>
          END
	  IF ENR_TRANCHE<10>="01" THEN
            IF W_CUMASSURSSAFTOT=0 THEN W_CUMASSURSSAFTOT=ENR_HISTORCUMUL<16,j>
          END
        END
      END        
      j=j+1
  REPEAT
  IF W_CUMASSURSSAFTOT=0 AND W_CUMASSURSSAFPLAF=0 THEN W_ENTREESURMOIS="OUI"
  LOOP
  WHILE ENR_DETAILCALCUL<8,i> # "" DO
      j=1
      LOOP
      WHILE ENR_DETAILCALCUL<8,i> # ENR_HISTORCUMUL<15,j> AND ENR_HISTORCUMUL<15,j> # "" DO
          IF W_CUMASSURSSAFPLAF=0 OR W_CUMASSURSSAFTOT=0 THEN
            READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_HISTORCUMUL<15,j> ELSE ENR_RUBCHARGE="" 
            IF ENR_RUBCHARGE<16>="01" THEN
              READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> ELSE ENR_TRANCHE=""
              IF ENR_TRANCHE<10>="02" THEN
                IF W_CUMASSURSSAFPLAF=0 THEN W_CUMASSURSSAFPLAF=ENR_HISTORCUMUL<16,j>
              END
	      IF ENR_TRANCHE<10>="01" THEN
                IF W_CUMASSURSSAFTOT=0 THEN W_CUMASSURSSAFTOT=ENR_HISTORCUMUL<16,j>
              END
            END
          END        
	  j=j+1
      REPEAT

      READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_DETAILCALCUL<8,i> ELSE ENR_RUBCHARGE=""     
      IF ENR_RUBCHARGE<16>="01" THEN
	 READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> ELSE ENR_TRANCHE=""
	 IF ENR_TRANCHE<10>="02" THEN
            IF W_BASEURSSAFPLAF=0 THEN W_BASEURSSAFPLAF=ENR_DETAILCALCUL<28,i>
         END
	 IF ENR_TRANCHE<10>="01" THEN
            IF W_BASEURSSAFTOT=0 THEN W_BASEURSSAFTOT=ENR_DETAILCALCUL<28,i>
         END
      END

      IF ENR_DETAILCALCUL<8,i>=ENR_HISTORCUMUL<15,j> THEN
          W_ENRHISTORCUMUL<1,j>="1"
          IF ENR_RUBCHARGE<16>="01" THEN
             IF ENR_TRANCHE<10>="02" THEN
                IF W_CUMASSURSSAFPLAF=0 THEN W_CUMASSURSSAFPLAF=ENR_HISTORCUMUL<16,j>
             END
	     IF ENR_TRANCHE<10>="01" THEN
                IF W_CUMASSURSSAFTOT=0 THEN W_CUMASSURSSAFTOT=ENR_HISTORCUMUL<16,j>
             END
          END
  	  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;ENR_HISTORCUMUL<16,j>+ENR_DETAILCALCUL<28,i>)
	  IF ENR_DETAILCALCUL<9,i>="" THEN  
 	       ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,j;ENR_HISTORCUMUL<17,j>+ENR_DETAILCALCUL<12,i>)
	  END ELSE
	       ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,j;ENR_HISTORCUMUL<17,j>+ENR_DETAILCALCUL<9,i>)
	  END
  	  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,18,j;ENR_HISTORCUMUL<18,j>+ENR_DETAILCALCUL<11,i>)
  	  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,19,j;ENR_HISTORCUMUL<19,j>+ENR_DETAILCALCUL<14,i>)
      END ELSE	
          IF ENR_HISTORCUMUL<15,j> = "" THEN
	      W_Count=DCOUNT(ENR_HISTORCUMUL<15>,CHAR(253))
	      ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,15,W_Count+1;ENR_DETAILCALCUL<8,i>)
              W_ENRHISTORCUMUL<1,W_Count+1>="0"	      

	      IF ENR_RUBCHARGE<18>="3" THEN
                   IF ENR_RUBCHARGE<16>="01" THEN
	              ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,W_Count+1;ENR_DETAILCALCUL<28,i>)
	              IF ENR_DETAILCALCUL<9,i>="" THEN
	                 ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_DETAILCALCUL<12,i>)
                      END ELSE
	                 ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_DETAILCALCUL<9,i>)
                      END
                   END ELSE
	              ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,W_Count+1;W_CumulBrut+ENR_DETAILCALCUL<28,i>)
	              IF ENR_DETAILCALCUL<9,i>="" THEN
	                 ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;W_CumulBrut+ENR_DETAILCALCUL<12,i>)
                      END ELSE
	                 ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;W_CumulBrut+ENR_DETAILCALCUL<9,i>)
                      END
                   END
	      END ELSE
	           ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,W_Count+1;ENR_HISTORCUMUL<16,W_Count+1>+ENR_DETAILCALCUL<28,i>)
	           IF ENR_DETAILCALCUL<9,i>="" THEN
	              ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_HISTORCUMUL<17,W_Count+1>+ENR_DETAILCALCUL<12,i>)
                   END ELSE
	              ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_HISTORCUMUL<17,W_Count+1>+ENR_DETAILCALCUL<9,i>)
                   END
  	      END
	      ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,18,W_Count+1;ENR_HISTORCUMUL<18,W_Count+1>+ENR_DETAILCALCUL<11,i>)
  	      ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,19,W_Count+1;ENR_HISTORCUMUL<19,W_Count+1>+ENR_DETAILCALCUL<14,i>)
	  END
      END		
      i=i+1	
  REPEAT

* MAJ CUMUL D'ASSIETTE BRUTE (ATT 16 D'HISTORCUMUL) POUR RUBRIQUE URSSAF NON PRESENTE DANS
* FICHIER DETAILCALCUL
  W_Count=DCOUNT(W_ENRHISTORCUMUL<1>,CHAR(253))
  FOR j=1 TO W_Count
     IF W_ENRHISTORCUMUL<1,j>#"1" THEN
        READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_HISTORCUMUL<15,j> ELSE ENR_RUBCHARGE=""
        IF ENR_RUBCHARGE<16>="01" THEN
	   READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> THEN
	      IF ENR_TRANCHE<10>="02" THEN
                 D=1
                 LOOP
                  UNTIL ENR_DETAILCALCUL<49,D>="" OR ENR_DETAILCALCUL<49,D>=ENR_HISTORCUMUL<15,j> DO
                   D=D+1
                 REPEAT
                 IF ENR_DETAILCALCUL<49,D>="" THEN
                  IF W_ENRHISTORCUMUL<1,j>="0" THEN
                     IF W_ENTREESURMOIS="NON" THEN ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;W_CUMASSURSSAFPLAF+W_BASEURSSAFPLAF)
                  END ELSE
                     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;ENR_HISTORCUMUL<16,j>+W_BASEURSSAFPLAF)
                  END
                 END
              END
	      IF ENR_TRANCHE<10>="01" THEN
                 D=1
                 LOOP
                  UNTIL ENR_DETAILCALCUL<49,D>="" OR ENR_DETAILCALCUL<49,D>=ENR_HISTORCUMUL<15,j> DO
                   D=D+1
                 REPEAT
                 IF ENR_DETAILCALCUL<49,D>="" THEN
                  IF W_ENRHISTORCUMUL<1,j>="0" THEN
                     IF W_ENTREESURMOIS="NON" THEN ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;W_CUMASSURSSAFTOT+W_BASEURSSAFTOT)
                  END ELSE
                     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;ENR_HISTORCUMUL<16,j>+W_BASEURSSAFTOT)
                  END
                 END
              END
           END
        END
     END	 
  NEXT j

  W_RUBAFFECT=""
  * MAJ HISTORCUMUL POUR RUBRIQUES DE CHARGE A 0 (ATT 49 ET 50 DE DETAILCALCUL)
   GOSUB 11

  IF ENR_HISTORCUMUL<8> = "" THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,8;"0")
  END 

  IF ENR_HISTORCUMUL<10> = "" THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,10;"0")
  END 

  WRITE ENR_HISTORCUMUL ON F.HISTORCUMUL,W_CleHistorCumul
RETURN

*********************************************************
*********************************************************
11 *

      I=1
      LOOP
       UNTIL ENR_DETAILCALCUL<49,I>="" DO
         * RECHERCHE DANS HISTORCUMUL
	 K=1
	 LOOP 
          UNTIL ENR_HISTORCUMUL<15,K>=ENR_DETAILCALCUL<49,I> OR ENR_HISTORCUMUL<15,K>="" DO
	   K=K+1
	 REPEAT
	 * SI RUB TROUVEE DANS HISTORCUMUL
         IF ENR_DETAILCALCUL<50,I>="" THEN ENR_DETAILCALCUL<50,I>=0
	 IF ENR_HISTORCUMUL<15,K><>"" THEN
          ENR_HISTORCUMUL<16,K>=ENR_HISTORCUMUL<16,K>+ENR_DETAILCALCUL<50,I>
	 END ELSE
	  ENR_HISTORCUMUL<15,-1>=ENR_DETAILCALCUL<49,I>
          READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_DETAILCALCUL<49,I> ELSE ENR_RUBCHARGE=""
          IF ENR_RUBCHARGE<16>="01" THEN
           READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> THEN
            IF ENR_TRANCHE<10>="02" THEN
             IF W_ENTREESURMOIS="OUI" THEN
              ENR_HISTORCUMUL<16,-1>=ENR_DETAILCALCUL<50,I>
             END ELSE
              ENR_HISTORCUMUL<16,-1>=W_CUMASSURSSAFPLAF+ENR_DETAILCALCUL<50,I>
             END
            END ELSE
             IF ENR_TRANCHE<10>="01" THEN
              IF W_ENTREESURMOIS="OUI" THEN
               ENR_HISTORCUMUL<16,-1>=ENR_DETAILCALCUL<50,I>
              END ELSE
               ENR_HISTORCUMUL<16,-1>=W_CUMASSURSSAFTOT+ENR_DETAILCALCUL<50,I>
              END
             END ELSE
              ENR_HISTORCUMUL<16,-1>=ENR_DETAILCALCUL<50,I>
             END
            END
           END
          END ELSE
           ENR_HISTORCUMUL<16,-1>=ENR_DETAILCALCUL<50,I>
          END
	  ENR_HISTORCUMUL<17,-1>="0"
	  ENR_HISTORCUMUL<18,-1>="0"
	  ENR_HISTORCUMUL<19,-1>="0"
	 END
         I=I+1
      REPEAT

RETURN

*********************************************************
*********************************************************
* MAJ DES CONGES PAYES

50 *

   W_CLEDETAILCALCUL=W_CODECONTRAT:W_PERIODE

   READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CLEDETAILCALCUL ELSE
	RETURN
   END

   * RECHERCHE DU TYPE DE PERSONNEL (PREST,ADM,MANDAT,INTER)
   IF ENR_CONTRAT<6>="A" THEN
	W_TYPEPERSONNEL=1                                      ;* ADMINISTRATIF
   END ELSE
	IF ENR_CONTRAT<1>="02" THEN
	     W_TYPEPERSONNEL=2                                 ;* MANDATAIRE
	END ELSE
	     * LECTURE ACTIVITE	 
	     READ ENR_ACTIVITE FROM F.ACTIVITE,ENR_CONTRAT<36,1> ELSE
		  STOP
	     END
	     IF ENR_ACTIVITE<12>="P" THEN
		  W_TYPEPERSONNEL=3                            ;* PRESTATAIRE


              *  Controle pour Creation nouveau DetailPrest
              GOSUB 2000

	     END ELSE
		  IF ENR_ACTIVITE<12>="M" THEN
		       W_TYPEPERSONNEL=2		       ;* MANDATAIRE
		  END ELSE
		       W_TYPEPERSONNEL=4		       ;* INTERMEDIAIRE
		  END
	     END
	END
   END   

   I=1
   LOOP
	UNTIL ENR_DETAILCALCUL<2,I>="" DO

        * SI RUB. CONGES PAYES OU ANCIENNETE OU POUR SOLDE OU FRACTIONNEMENT
	BEGIN CASE
  	     CASE ENR_DETAILCALCUL<2,I>="802" OR ENR_DETAILCALCUL<2,I>="803" OR ENR_DETAILCALCUL<2,I>="817"
		  IF W_JOURCONGESCP=0 AND W_JOURCONGESCA=0 AND W_JOURCONGESCF=0 THEN GOSUB 60
	     CASE ENR_DETAILCALCUL<2,I>="804"
		  W_JOURCONGESCPS=1
	END CASE
        I=I+1
   REPEAT

   I=1
   LOOP
	UNTIL ENR_DETAILCALCUL<33,I>="" DO

        * SI RUB. CONGES PAYES OU ANCIENNETE OU POUR SOLDE OU FRACTIONNEMENT
	BEGIN CASE
  	     CASE ENR_DETAILCALCUL<33,I>="802" OR ENR_DETAILCALCUL<33,I>="803" OR ENR_DETAILCALCUL<33,I>="817"
		  IF W_JOURCONGESCP=0 AND W_JOURCONGESCA=0 AND W_JOURCONGESCF=0 THEN GOSUB 60
	     CASE ENR_DETAILCALCUL<33,I>="804"
		  W_JOURCONGESCPS=1
	END CASE
        I=I+1
   REPEAT

   * MAJ DES COMPTEURS
   GOSUB 70

   IF W_TYPEPERSONNEL=1 THEN
      * Suppression du DETAILADMIN (JEROME)
      DELETE F.DETAILADMIN,W_CLEDETAILCALCUL
   END

RETURN

*********************************************************
*********************************************************
* RECHERCHE DU NOMBRE DE JOURS DE CONGES

60 *

   BEGIN CASE 
	CASE W_TYPEPERSONNEL=1
	     READ ENR_DETAILADMIN FROM F.DETAILADMIN,W_CLEDETAILCALCUL ELSE
		  ENR_DETAILADMIN=""
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILADMIN<1,J>="" DO
		       IF ENR_DETAILADMIN<1,J>="802" THEN
			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILADMIN<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILADMIN<1,J>="803" THEN
			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILADMIN<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILADMIN<1,J>="817" THEN
			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILADMIN<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		  J=J+1
	     REPEAT

	CASE W_TYPEPERSONNEL=2
	     READ ENR_DETAILMANDAT FROM F.DETAILMANDAT,W_CLEDETAILCALCUL ELSE
		  ENR_DETAILMANDAT=""
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILMANDAT<1,J>="" DO
		       IF ENR_DETAILMANDAT<1,J>="802" THEN
			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILMANDAT<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILMANDAT<1,J>="803" THEN
			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILMANDAT<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILMANDAT<1,J>="817" THEN
			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILMANDAT<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		  J=J+1
	     REPEAT

	CASE W_TYPEPERSONNEL=3
	     READ ENR_DETAILPREST FROM F.DETAILPREST,W_CLEDETAILCALCUL ELSE
		  ENR_DETAILPREST=""
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILPREST<5,J>="" DO
		       IF ENR_DETAILPREST<5,J>="802" THEN
			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILPREST<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILPREST<5,J>="803" THEN
 			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILPREST<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILPREST<5,J>="817" THEN
 			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILPREST<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		  J=J+1
	     REPEAT

	CASE W_TYPEPERSONNEL=4
	     READ ENR_DETAILINTER FROM F.DETAILINTER,W_CODECONTRAT:W_PERIODE ELSE
		  ENR_DETAILINTER=""
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILINTER<8,J>="" DO
		       IF ENR_DETAILINTER<8,J>="802" THEN
 			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILINTER<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILINTER<8,J>="803" THEN
 			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILINTER<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILINTER<8,J>="817" THEN
 			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILINTER<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		  J=J+1
	     REPEAT

   END CASE
   J=1
RETURN
   
*********************************************************
*********************************************************
* MAJ DES COMPTEURS DE CONGES

70 *
   
   * SI PAS CONGES PAYES POUR SOLDE
   IF W_JOURCONGESCPS=0 THEN

       * SI MANDATAIRE ALORS CONGES PRIS EN ATT. 47 DE DETAILCALCUL
       IF ENR_CONTRAT<1>="02" AND ENR_CONTRAT<31>=1 THEN
	   W_JOURCONGESCP=ENR_DETAILCALCUL<47>
       END

       * CONGES PAYES
       IF ENR_CONTRAT<39>-W_JOURCONGESCP>=0 THEN
           ENR_CONTRAT<39>=ENR_CONTRAT<39>-W_JOURCONGESCP
       END ELSE
	   * SI PAS ASSEZ DE DROITS

	   * PRISE SUR CONGES FRACTIONNEMENT
	   W_JOURCONGESCP=W_JOURCONGESCP-ENR_CONTRAT<39>
           ENR_CONTRAT<39>=0

	   IF ENR_CONTRAT<41>-W_JOURCONGESCP>=0 THEN	
		ENR_CONTRAT<41>=ENR_CONTRAT<41>-W_JOURCONGESCP
	   END ELSE

		* PRISE SUR CONGES ANCIENNETE
		W_JOURCONGESCP=W_JOURCONGESCP-ENR_CONTRAT<41>
		ENR_CONTRAT<41>=0

		IF ENR_CONTRAT<48>-W_JOURCONGESCP>=0 THEN
		     ENR_CONTRAT<48>=ENR_CONTRAT<48>-W_JOURCONGESCP
		END ELSE
		     * PRISE PAR ANTICIPATION
 	  	     ENR_CONTRAT<83>=ENR_CONTRAT<83>+(W_JOURCONGESCP-ENR_CONTRAT<48>)
		     ENR_CONTRAT<48>=0
		END
	   END
       END

       * CONGES ANCIENNETE
       IF ENR_CONTRAT<48>-W_JOURCONGESCA>=0 THEN
           ENR_CONTRAT<48>=ENR_CONTRAT<48>-W_JOURCONGESCA
       END ELSE
	   ENR_CONTRAT<83>=ENR_CONTRAT<83>+(W_JOURCONGESCA-ENR_CONTRAT<48>)
           ENR_CONTRAT<48>=0
       END
       * CONGES FRACTIONNEMENT
       IF ENR_CONTRAT<41>-W_JOURCONGESCF>=0 THEN
           ENR_CONTRAT<41>=ENR_CONTRAT<41>-W_JOURCONGESCF
       END ELSE
	   ENR_CONTRAT<83>=ENR_CONTRAT<83>+(W_JOURCONGESCF-ENR_CONTRAT<41>)
           ENR_CONTRAT<41>=0
       END
   END ELSE
       ENR_CONTRAT<38>=0
       ENR_CONTRAT<39>=0
       ENR_CONTRAT<40>=0
       ENR_CONTRAT<41>=0
       ENR_CONTRAT<44>=0
       ENR_CONTRAT<45>=0
       ENR_CONTRAT<46>=0
       ENR_CONTRAT<47>=0
       ENR_CONTRAT<48>=0
       ENR_CONTRAT<85>=0
       ENR_CONTRAT<86>=0
       WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT
   END

RETURN

*********************************************************
*********************************************************
* CALCUL DU TAUX HORAIRE + COEFFICIENT

80 *

   * CALCULE DERNIER JOUR PERIODE SUIVANTE
   READ ENR_PERIODESPAIE FROM F.PERIODESPAIE,"1" ELSE
       STOP
   END
   W_PERIODESPAIE=ENR_PERIODESPAIE<1>+1
   IF W_PERIODESPAIE[5,2]=13 THEN
      W_PERIODESPAIE[4,1]=W_PERIODESPAIE[4,1]+1
      W_PERIODESPAIE=W_PERIODESPAIE[1,4]:"01"
   END

   W_PARAMS=""
   W_SORTIE=""
   W_PARAMS<1>=W_CleContrat
   W_PARAMS<2>="0"
   W_PARAMS<3>=W_PERIODESPAIE

   CALL CALCCOEFFTXHOR("",W_PARAMS,W_SORTIE)

   W_COEFF=W_SORTIE<1>
   W_TAUXHOR=W_SORTIE<2>
   W_TAUXHORDIMJF=W_SORTIE<3>

   IF W_PERIODESPAIE[5,2]=12 THEN
      W_DERNIERJOURMOIS="31 12 ":W_PERIODESPAIE[1,4]
      W_DERNIERJOURMOIS=ICONV(W_DERNIERJOURMOIS,"D4 ")
   END ELSE
      W_DERNIERJOURMOIS=W_PERIODESPAIE+1
      W_DERNIERJOURMOIS="01 ":W_DERNIERJOURMOIS[5,2]:" ":W_DERNIERJOURMOIS[1,4]
      W_DERNIERJOURMOIS=ICONV(W_DERNIERJOURMOIS,"D4 ")-1
   END

   * VERIFIE SI PLUSIEURS AVENANTS DISPONIBLES
   IF ENR_CONTRAT<14,2> # "" THEN
       * RECHERCHE DE L'AVENANT EN COURS
       J=1
       LOOP
       UNTIL ENR_CONTRAT<15,J+1> > W_DERNIERJOURMOIS OR ENR_CONTRAT<15,J+1>="" DO
	    J=J+1
       REPEAT
   END ELSE
       J=1
   END

   IF ENR_CONTRAT<20,J> # "" THEN
       * LECTURE FICHIER GRILLESCC
       READ ENR_GRILLESCC FROM F.GRILLESCC,ENR_CONTRAT<20,J> THEN

          IF W_TAUXHOR # 0 THEN
	     IF ENR_GRILLESCC<5>="C" THEN
		ENR_CONTRAT<22,J>=W_COEFF
		ENR_CONTRAT<23,J>=W_TAUXHOR
	     END ELSE
	        ENR_CONTRAT<23,J>=W_TAUXHOR
	     END
          END
       END
          
   END
RETURN

*********************************************************
*********************************************************
* GESTION DES CONGES
* MAJ DES CONGES EN-COURS D'ACQUISITION

100 *

    W_TOTNBJOURCONGES=0

    W_CODEABSENCE=""
    W_REQABSENCESVIDE="FAUX"
    W_TOTALJRSABSMALADIE=0
    W_NBJOURNONINDEM=0
    W_PASABS="VRAI"

    W_MOIS=W_PERIODE[5,2]
    W_ANNEE=W_PERIODE[1,4]

    W_DEBUTPERIODE=ICONV("01/":W_MOIS:"/":W_ANNEE,"D")

    W_MOISFIN=W_PERIODE[5,2]+1
    IF W_MOISFIN>12 THEN
	 W_ANNEEFIN=W_PERIODE[1,4]+1
	 W_MOISFIN="01"
    END ELSE
	 W_ANNEEFIN=W_PERIODE[1,4]
    END

    W_FINPERIODE=ICONV("01/":W_MOISFIN:"/":W_ANNEEFIN,"D4/")
    W_FINPERIODE=W_FINPERIODE-1
    W_FINPERIODE2=OCONV(W_FINPERIODE,"D4/")
    W_FINPERIODE2=W_FINPERIODE2[7,4]:W_FINPERIODE2[4,2]

    EXECUTE 'TSELECT ABSENCESAIDANT AVEC CodAbsAidant = "':W_CODEAIDANT:']" AND AVEC 2 >= "':W_DEBUTPERIODE:'" AND AVEC DebAbsAidant <= "':W_FINPERIODE:'" AND AVEC NumMotifAidant = "01" OR = "02" OR = "04" OR = "05" OR = "06" OR = "12" OR = "13" OR = "22" OR = "23"'
    EXECUTE "SAUVE-LISTE LISTEABSENCESAIDANT"
    EXECUTE "LISTE LISTEABSENCESAIDANT" CAPTURING MSG RETURNING MSGCODE

    IF MSGCODE<1><>209 THEN 
         SELECT F.ABSENCESAIDANT TO LISTEABSENCESAIDANT

         LOOP 
 	     READNEXT CLE FROM LISTEABSENCESAIDANT ELSE
	         W_REQABSENCESVIDE="VRAI"
  	     END
	   UNTIL W_REQABSENCESVIDE="VRAI" DO

	     W_CODEABSENCE=CLE[6,2]
	     W_CLEABSENCE=CLE

	     * LECTURE ABSENCESAIDANT
	     READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,W_CLEABSENCE ELSE
               PRINT "PAS D'ABS"
	         STOP
	     END

	     * VERIFIE SI ABS A PRENDRE (EXCLUSION)
	     W_ABSOK=0
	     * recherche code contrat sur att 26
	     IF ENR_ABSENCESAIDANT<26,1>="" THEN 
		  W_ABSOK=1
	     END ELSE
	          Z=1
                  LOOP
		       UNTIL ENR_ABSENCESAIDANT<26,Z>=W_CleContrat OR ENR_ABSENCESAIDANT<26,Z>="" DO
 		       Z=Z+1
    	          REPEAT
		  * si code contrat trouv
		  IF ENR_ABSENCESAIDANT<26,Z>=W_CleContrat THEN 
			* si absence a prendre en compte 
			IF ENR_ABSENCESAIDANT<21,Z>="O" THEN 
				W_ABSOK=1
				* modifie virtuellement les infos de l'absence
				W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7]=ENR_ABSENCESAIDANT<22,Z>
				CLE[8,LEN(CLE)-7]=ENR_ABSENCESAIDANT<22,Z>
				IF ENR_ABSENCESAIDANT<23,Z>="M" THEN 
					ENR_ABSENCESAIDANT<1>="1"
				END ELSE
					ENR_ABSENCESAIDANT<1>="2"
				END
				ENR_ABSENCESAIDANT<2>=ENR_ABSENCESAIDANT<24,Z>
				IF ENR_ABSENCESAIDANT<25,Z>="M" THEN 
					ENR_ABSENCESAIDANT<3>="1"
				END ELSE
					ENR_ABSENCESAIDANT<3>="2"
				END
			END
		  END ELSE 
			W_ABSOK=0
	          END
	      END

 	     * GESTION DES ABSENCES AUTRES QUE MALADIE MATERNITE
	     IF W_ABSOK=1 THEN
  	       IF ENR_CONTRAT<31> <> 1 OR ENR_CONTRAT<1>="02" THEN
                 W_PASABS="FAUX"
                 IF W_JOURCONGESCPS=0 THEN
                    * Pas conges payes pour soldes 
                    GOSUB 200
                 END
               END
	     END

         REPEAT

         * a voir
	   IF W_PASABS="VRAI" AND W_JOURCONGESCPS=0 THEN GOSUB 200

    END

* Mise a jour des 10 % du BS.

   IF W_DEBUTCONTRAT <= W_DEBUTPERIODE THEN
      W_NBJOURPRESENT=250
   END ELSE
      * CALCUL AU PRORATA DES JOURS DE CONGES
      W_NBJOURPRESENT=W_DEBUTCONTRAT-W_DEBUTPERIODE
      W_NBJOURPRESENT=W_NBJOURPRESENT*100
      W_NBJOURPRESENT=W_NbJourMois-W_NBJOURPRESENT
      W_NBJOURPRESENT=250*W_NBJOURPRESENT/W_NbJourMois
      W_NBJOURPRESENT=INT(W_NBJOURPRESENT + 1/2)
    END

    W_MONTANTARRET=0

    * recherche des rubriques des contrats prevoyances
    * RECHERCHE DES RUBRIQUES 807 - 808

    W_CountDet2=DCOUNT(ENR_DETAILCALCUL<2>,CHAR(253))
    FOR iDet2=1 TO W_CountDet2
       FOR iRubPrev=1 TO W_CountRubPrev
          IF ENR_DETAILCALCUL<2,iDet2> = W_TabPrev<iRubPrev> THEN
             W_MONTANTARRET=W_MONTANTARRET+ENR_DETAILCALCUL<5,iDet2>
          END
       NEXT iRubPrev
    NEXT iDet2 

    W_BRUTARRET=ENR_DETAILCALCUL<7>-W_MONTANTARRET
    W_HEURESARRET=ENR_DETAILCALCUL<6>

    W_VALEURHEURESJOUR=INT((W_HEURESARRET*10/100)+1/2)
    W_VALEURMONTJOUR=INT((W_BRUTARRET*10/100)+1/2)  

   W_NBJOURPRESENT=W_NBJOURPRESENT-W_TOTNBJOURCONGES
   ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURPRESENT
   ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_VALEURHEURESJOUR
   ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_VALEURMONTJOUR
RETURN     

*********************************************************
*********************************************************
* GESTION DES ABSENCES

200 *

    W_MONTANTARRET=0
    W_ABSENCEMOIS="FAUX"

    IF W_PASABS="FAUX" THEN
       * RECHERCHE SI ABSENCES SUR LE MOIS
       IF W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7]>=W_DEBUTPERIODE AND W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7]<=W_FINPERIODE THEN 
          W_ABSENCEMOIS="VRAI"
       END
       IF W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7]<=W_DEBUTPERIODE THEN 
	   IF ENR_ABSENCESAIDANT<2>>=W_DEBUTPERIODE THEN 
	      W_ABSENCEMOIS="VRAI"
           END    
       END
    END ELSE
       W_ABSENCEMOIS="FAUX"
       W_CODEABSENCE=""
    END

    IF W_ABSENCEMOIS="VRAI" THEN

      BEGIN CASE
	* MALADIE
        CASE W_CODEABSENCE="01"     
	
	  * Determine le nb jour d'abs.
        GOSUB 300

        W_NBJOURABSMALADIE=W_NBJOURABS

        * RECUPERATION ATT 17 DE CONV. COL
        READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,W_CODECONVENTION ELSE
           PRINT "PAS DE CONVENTION"
           STOP
        END		

        IF ENR_CONVENTIONCOL<17><>"" THEN
            W_NBSUSPENSION=ENR_CONVENTIONCOL<17>*100
        END ELSE
            W_NBSUSPENSION=""
        END

        IF W_TOTALJRSABSMALADIE=0 THEN
           GOSUB 302
           W_CUMULJOURMALADIE=W_CUMULMALADIE
        END

        W_TOTALJRSABSMALADIE=W_TOTALJRSABSMALADIE+W_NBJOURABSMALADIE
        W_CUMULJOURMALADIE=W_CUMULJOURMALADIE+W_NBJOURABSMALADIE

        IF W_CUMULJOURMALADIE <= W_NBSUSPENSION THEN

           * On maintient les droits de la personne
           GOSUB 301	

           * CALCUL SALAIRE DE REFERENCE
           K=1
           LOOP
           UNTIL ENR_ABSENCESAIDANT<17,K>=W_CODECONTRAT OR ENR_ABSENCESAIDANT<17,K>="" DO
              K=K+1
           REPEAT

           * SI PASSAGE A L'EURO + ABS COMMENCE AVANT DATE BUTOIR
           * ALORS CONVERSION SALAIRE REFERENCE EN EUROS
           IF W_PASSAGEEURO=1 AND (INT(W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7])<INT(ENR_CONSTANTESPAIE<9>)) THEN
              ENR_ABSENCESAIDANT<14,K>=INT((ENR_ABSENCESAIDANT<14,K>/W_EURO)+1/2)
           END

           W_SALREFHRES=(ENR_ABSENCESAIDANT<15,K>/W_NbJourMois)*(W_NBJOURABSMALADIE)
           W_SALREFMONT=(ENR_ABSENCESAIDANT<14,K>/W_NbJourMois)*(W_NBJOURABSMALADIE)

           * PRISE DES 10 %
           W_SALREFHRES=INT(W_SALREFHRES*10/100 + 1/2)
           W_SALREFMONT=INT(W_SALREFMONT*10/100 + 1/2)

           ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_SALREFHRES
           ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_SALREFMONT

        END ELSE
           W_NBJOURINDEM=W_NBSUSPENSION - (W_CUMULJOURMALADIE - W_NBJOURABSMALADIE)

           IF W_NBJOURINDEM > 0 THEN
              * A Indemnise
              W_NBJOURABS=W_NBJOURINDEM

              GOSUB 301

              * CALCUL SALAIRE DE REFERENCE
              K=1
              LOOP
              UNTIL ENR_ABSENCESAIDANT<17,K>=W_CODECONTRAT OR ENR_ABSENCESAIDANT<17,K>="" DO
                 K=K+1
              REPEAT
		
              * SI PASSAGE A L'EURO + ABS COMMENCE AVANT DATE BUTOIR
              * ALORS CONVERSION SALAIRE REFERENCE EN EUROS
              IF W_PASSAGEEURO=1 AND (INT(W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7])<INT(ENR_CONSTANTESPAIE<9>)) THEN
                 ENR_ABSENCESAIDANT<14,K>=INT((ENR_ABSENCESAIDANT<14,K>/W_EURO)+1/2)
              END

              W_SALREFHRES=(ENR_ABSENCESAIDANT<15,K>/W_NbJourMois)*(W_NBJOURABS)
              W_SALREFMONT=(ENR_ABSENCESAIDANT<14,K>/W_NbJourMois)*(W_NBJOURABS)

              * PRISE DES 10 %
              W_SALREFHRES=INT(W_SALREFHRES*10/100 + 1/2)
              W_SALREFMONT=INT(W_SALREFMONT*10/100 + 1/2)

              ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_SALREFHRES
              ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_SALREFMONT

              W_NBJOURNONINDEM=W_NBJOURABSMALADIE - W_NBJOURINDEM
              IF W_NBJOURNONINDEM > 0 THEN
                 W_NBJOURABS=W_NBJOURNONINDEM
                 GOSUB 301
                 W_TOTNBJOURCONGES=W_TOTNBJOURCONGES + W_NBJOURCONGES
                 ENR_CONTRAT<70>=ENR_CONTRAT<70>+W_NBJOURNONINDEM
              END

           END ELSE
              GOSUB 301              
              W_TOTNBJOURCONGES=W_TOTNBJOURCONGES + W_NBJOURCONGES
              ENR_CONTRAT<70>=ENR_CONTRAT<70>+W_NBJOURABSMALADIE
           END

        END
			
         * CONGES SANS SOLDE OU PARENTAL
      CASE W_CODEABSENCE="12" OR W_CODEABSENCE="13" OR W_CODEABSENCE="22" OR W_CODEABSENCE="23"    
		
         GOSUB 300

         GOSUB 301

         W_TOTNBJOURCONGES=W_TOTNBJOURCONGES + W_NBJOURCONGES

         IF W_CODEABSENCE="12" OR W_CODEABSENCE="22" OR W_CODEABSENCE="23" THEN   
            ENR_CONTRAT<70>=ENR_CONTRAT<70>+W_NBJOURABS
         END ELSE
            ENR_CONTRAT<70>=ENR_CONTRAT<70> + W_NBJOURABS / 2
         END

      CASE 1 

         GOSUB 300

         GOSUB 301

         W_SALREFHRES=0
         W_SALREFMONT=0

         * CALCUL SALAIRE DE REFERENCE
         K=1
         LOOP
         UNTIL ENR_ABSENCESAIDANT<17,K>=W_CODECONTRAT OR ENR_ABSENCESAIDANT<17,K>="" DO
            K=K+1
         REPEAT

         * SI PASSAGE A L'EURO + ABS COMMENCE AVANT DATE BUTOIR
         * ALORS CONVERSION SALAIRE REFERENCE EN EUROS
         IF W_PASSAGEEURO=1 AND (INT(W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7])<INT(ENR_CONSTANTESPAIE<9>)) THEN
            ENR_ABSENCESAIDANT<14,K>=INT((ENR_ABSENCESAIDANT<14,K>/W_EURO)+1/2)
         END

         W_SALREFHRES=(ENR_ABSENCESAIDANT<15,K>/W_NbJourMois)*(W_NBJOURABS)
         W_SALREFMONT=(ENR_ABSENCESAIDANT<14,K>/W_NbJourMois)*(W_NBJOURABS)

         * PRISE DES 10 %
         W_SALREFHRES=INT((W_SALREFHRES*10/100)+1/2)
         W_SALREFMONT=INT((W_SALREFMONT*10/100)+1/2)

         ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_SALREFHRES
         ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_SALREFMONT
          
      END CASE       
   END
RETURN	 


*********************************************************
*********************************************************
* CALCUL DU NOMBRE DE JOURS D'ABSENCES (HORS MALADIE)

300 * 

    * DEBUT ABS >= DEBUT MOIS
    IF CLE[8,LEN(CLE)-7]>=W_DEBUTPERIODE THEN
    * FIN ABSENCES <= FIN MOIS
	IF ENR_ABSENCESAIDANT<2><=W_FINPERIODE THEN
  	    W_NBJOURABS=ENR_ABSENCESAIDANT<2>-CLE[8,LEN(CLE)-7]+1
	END ELSE
  	    W_NBJOURABS=W_FINPERIODE-CLE[8,LEN(CLE)-7]+1
	END
    END ELSE
	* FIN ABSENCES <= FIN MOIS
	IF ENR_ABSENCESAIDANT<2><=W_FINPERIODE THEN
  	    W_NBJOURABS=ENR_ABSENCESAIDANT<2>-W_DEBUTPERIODE+1
	END ELSE
  	    W_NBJOURABS=W_FINPERIODE-W_DEBUTPERIODE+1
	END
    END
    W_NBJOURABS=W_NBJOURABS*100

    * DIMINUTION DU NOMBRE DE JOURS SI DEMI-JOURNEE
    IF ENR_ABSENCESAIDANT<1>=2 THEN W_NBJOURABS=W_NBJOURABS-50
    IF ENR_ABSENCESAIDANT<3>=1 THEN W_NBJOURABS=W_NBJOURABS-50

RETURN

*********************************************************
*********************************************************
* CALCUL DES DROITS AUX CONGES (TYPE 12 OU 13)

301 *

    * CALCUL AU PRORATA DES JOURS DE CONGES
    W_NBJOURCONGES=250*W_NBJOURABS/W_NbJourMois
    W_NBJOURCONGES=INT(W_NBJOURCONGES+1/2)

RETURN

*********************************************************
*********************************************************
* CALCUL DES DROITS AUX CONGES (TYPE 12 OU 13)

3011 *
 
   * CALCUL AU PRORATA DES JOURS DE CONGES
    W_NBJOURPRESENT=W_NBJOURABS
    IF W_NBJOURPRESENT>3000 THEN W_NBJOURPRESENT=3000
    W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
    W_NBJOURCONGES=W_NBJOURCONGES+1/2
    W_NBJOURCONGES=INT(W_NBJOURCONGES)
	      			
    * RECUPERATION ATTRIBUT 6+7 DETAILCALCUL
	READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	ENR_DETAILCALCUL=""
	ENR_DETAILCALCUL<6>=0
	ENR_DETAILCALCUL<7>=0
    END

    W_HEURESABSENCES=ENR_DETAILCALCUL<6>*10/100
    W_MONTANTABSENCES=ENR_DETAILCALCUL<7>*10/100

RETURN

*********************************************************
*********************************************************
* CALCUL DU NOMBRE CUMULE DE JOURS D'ABSENCES (JUIN->MAI)
* OU JANVIER->DECEMBRE SI ATT.28 CONVENTIONCOL = 1

302 *
    W_CUMULMALADIE=0
    W_REQMALADIEVIDE="FAUX"

    IF ENR_CONVENTIONCOL<28>="0" OR ENR_CONVENTIONCOL<28>="" THEN
      IF W_PERIODE[5,2]>="06" THEN
        W_DEBUTANNEE=ICONV("01/06/":W_PERIODE[1,4],"D4/")
      END ELSE
        W_DEBUTANNEE=ICONV("01/06/":W_PERIODE[1,4]-1,"D4/")
      END
    END ELSE
        W_DEBUTANNEE=ICONV("01/01/":W_PERIODE[1,4],"D4/")
    END
    W_PERIODECOURS=W_DEBUTPERIODE-1   

    IF W_DEBUTANNEE#W_DEBUTPERIODE THEN
      EXECUTE 'TSELECT ABSENCESAIDANT AVEC CodAbsAidant = "':W_CODEAIDANT:']" AND AVEC NumMotifAidant = "01" AND AVEC 2 >= "':W_DEBUTANNEE:'" OR = "" AND AVEC DebAbsAidant <= "':W_PERIODECOURS:'" PAR DebAbsAidant'
      EXECUTE "SAUVE-LISTE LISTEMALADIEAIDANT"
      EXECUTE "LISTE LISTEMALADIEAIDANT" CAPTURING MSG RETURNING MSGCODE

      IF MSGCODE<1>=209 THEN W_REQMALADIEVIDE="VRAI"

      IF W_REQMALADIEVIDE="FAUX" THEN
         SELECT F.ABSENCESAIDANT TO LISTEMALADIEAIDANT

         LOOP 
	      READNEXT CLECUM FROM LISTEMALADIEAIDANT ELSE
	          W_REQMALADIEVIDE="VRAI"
     	      END
	      UNTIL W_REQMALADIEVIDE="VRAI" DO

              READ ENR_ABSENCESAIDANTCUM FROM F.ABSENCESAIDANT,CLECUM ELSE ENR_ABSENCESAIDANTCUM=""
	      GOSUB 303
    	      * CUMUL DU NOMBRE DE JOURS DE MALADIE SUR L'ANNEE
	      W_CUMULMALADIE=W_CUMULMALADIE+W_NBJOURABSCUMUL              
	 REPEAT
      END ELSE 
	 W_CUMULMALADIE=0
      END
    END ELSE
      W_CUMULMALADIE=0
    END
 
RETURN

*********************************************************
*********************************************************
* CALCUL DU NOMBRE DE JOURS D'ABSENCES MALADIE

303 * 
    * DEBUT ABS <= 01/06 OU <= 01/01
    W_NBJOURABSCUMUL=0
    IF CLECUM[8,LEN(CLECUM)-7]<=W_DEBUTANNEE THEN
        * FIN ABSENCES <= FIN MOIS
      IF ENR_ABSENCESAIDANTCUM<2>>=W_DEBUTANNEE THEN
	IF ENR_ABSENCESAIDANTCUM<2><=W_PERIODECOURS THEN
            W_NBJOURABSCUMUL=ENR_ABSENCESAIDANTCUM<2>-W_DEBUTANNEE+1
	END ELSE
            W_NBJOURABSCUMUL=W_PERIODECOURS-W_DEBUTANNEE+1
	END
      END
    END ELSE
	* FIN ABSENCES <= FIN MOIS
      IF CLECUM[8,LEN(CLECUM)-7]<=W_PERIODECOURS THEN
	IF ENR_ABSENCESAIDANTCUM<2><=W_PERIODECOURS THEN
  	    W_NBJOURABSCUMUL=ENR_ABSENCESAIDANTCUM<2>-CLECUM[8,LEN(CLECUM)-7]+1
	END ELSE
  	    W_NBJOURABSCUMUL=W_PERIODECOURS-CLECUM[8,LEN(CLECUM)-7]+1
	END
      END
    END
    W_NBJOURABSCUMUL=W_NBJOURABSCUMUL*100

    * DIMINUTION DU NOMBRE DE JOURS SI DEMI-JOURNEE
    IF ENR_ABSENCESAIDANTCUM<1>=2 THEN W_NBJOURABSCUMUL=W_NBJOURABSCUMUL-50
    IF ENR_ABSENCESAIDANTCUM<3>=1 THEN W_NBJOURABSCUMUL=W_NBJOURABSCUMUL-50

RETURN
****************************************************************
****************************************************************
* SELECTION DES CONTRATS PREVOYANCES
304

W_TabPrev=""
W_TabPrev<1>="807"
W_TabPrev<2>="808"

W_ListeCONTRATSPREV=""

EXECUTE 'SSELECT CONTRATSPREV'
EXECUTE 'SAUVE-LISTE W_ListeCONTRATSPREV'
EXECUTE "LISTE W_ListeCONTRATSPREV" RETURNING MSGCODE

IF MSGCODE<1> # 209 THEN
   SELECT F.CONTRATSPREV TO W_ListeCONTRATSPREV
   W_FiniPrev = "FAUX"
   LOOP
      READNEXT W_ClePrev FROM W_ListeCONTRATSPREV ELSE W_FiniPrev="VRAI"
   WHILE W_FiniPrev = "FAUX" DO
      READ ENR_CONTRATSPREV FROM F.CONTRATSPREV,W_ClePrev THEN

         W_CodeRubPrev=ENR_CONTRATSPREV<41>
         GOSUB 305

         W_CodeRubPrev=ENR_CONTRATSPREV<42>
         GOSUB 305

      END
          
   REPEAT
END

W_CountRubPrev=DCOUNT(W_TabPrev,CHAR(254))

EXECUTE "EFFACER-LISTE W_ListeCONTRATSPREV"

RETURN

*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS
305
   IF W_CodeRubPrev # "" THEN

      iPrev=1
      W_TrouvePrev="FAUX"
      LOOP
      WHILE W_TabPrev<iPrev> # "" AND W_TrouvePrev="FAUX" DO

         IF W_CodeRubPrev = W_TabPrev<iPrev> THEN
            W_TrouvePrev="VRAI"
         END
         iPrev=iPrev+1
      REPEAT
      IF W_TrouvePrev="FAUX" THEN
         W_TabPrev<iPrev>=W_CodeRubPrev
      END
   END

RETURN

*********************************************************
*********************************************************
* CALCUL DES DROITS AUX CONGES (MALADIE)

310 *
 
   * CALCUL AU PRORATA DES JOURS DE CONGES
    W_NBJOURPRESENT=3000-W_NBJOURABSMALADIE
    IF W_NBJOURPRESENT<0 THEN W_NBJOURPRESENT=0
    W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
    W_NBJOURCONGES=W_NBJOURCONGES+1/2
    W_NBJOURCONGES=INT(W_NBJOURCONGES)    		
	
    * RECUPERATION ATTRIBUT 6+7 DETAILCALCUL
	READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	ENR_DETAILCALCUL=""
	ENR_DETAILCALCUL<6>=0
	ENR_DETAILCALCUL<7>=0
    END

    W_HEURESABSENCES=ENR_DETAILCALCUL<6>*10/100
    W_MONTANTABSENCES=ENR_DETAILCALCUL<7>*10/100

RETURN

*********************************************************
*********************************************************
* CALCUL DES DROITS AUX CONGES <> 01,12,13

320 *

    IF W_DEBUTCONTRAT<W_DEBUTPERIODE THEN
         W_NBJOURPRESENT=3000
         W_NBJOURCONGES=250
    END ELSE
         * CALCUL AU PRORATA DES JOURS DE CONGES
         W_NBJOURPRESENT=W_DEBUTCONTRAT-W_DEBUTPERIODE
         W_NBJOURPRESENT=W_NBJOURPRESENT*100
         IF W_NBJOURPRESENT>3000 THEN W_NBJOURPRESENT=3000
	 W_NBJOURPRESENT=3000-W_NBJOURPRESENT
         W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
         W_NBJOURCONGES=W_NBJOURCONGES+1/2
         W_NBJOURCONGES=INT(W_NBJOURCONGES)   
    END

    * LECTURE DETAILCALCUL
    READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	 ENR_DETAILCALCUL=""
	 ENR_DETAILCALCUL<6>=0
	 ENR_DETAILCALCUL<7>=0
    END

    * RECHERCHE DES RUBRIQUES 807 - 808
    J=1
    LOOP 
	 UNTIL ENR_DETAILCALCUL<2,J>="" DO
			
	 * SI RUB 807 - 808, CALCULE LE MONTANT DE L'ARRET
	 IF ENR_DETAILCALCUL<2,J>="807" OR ENR_DETAILCALCUL<2,J>="808" THEN
 	      W_MONTANTARRET=W_MONTANTARRET+ENR_DETAILCALCUL<5,J>
         END

	 J=J+1
    REPEAT		  

    * SI W_MONTANTARRET <> 0 
    IF W_MONTANTARRET<>0 THEN
	 W_BRUTARRET=ENR_DETAILCALCUL<7>-W_MONTANTARRET
	 W_HEURESARRET=ENR_DETAILCALCUL<6>
    END ELSE
	 W_BRUTARRET=ENR_DETAILCALCUL<7>
	 W_HEURESARRET=ENR_DETAILCALCUL<6>
    END	 

    W_SORTIE="FAUX"
    W_VALEURHEURESJOUR=INT((W_HEURESARRET*10/100)+1/2)
    W_VALEURMONTJOUR=INT((W_BRUTARRET*10/100)+1/2)  

RETURN


*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS

500 *

    * TEST DE LA PERIODE EN COURS

    * BASCULEMENT COMPTEUR
    READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,W_CODECONVENTION ELSE
   	 STOP
    END

    * LECTURE CONTRAT EN COURS
***    READ ENR_CONTRAT FROM F.CONTRAT,W_CODECONTRAT ELSE
***         STOP
***    END

    W_DATEDEBUTCONTRAT=OCONV(W_DEBUTCONTRAT,"D4/")
    W_DATEDEBUTCONTRAT=W_DATEDEBUTCONTRAT[7,4]:W_DATEDEBUTCONTRAT[4,2]
    IF W_DEBUTCONTRATANC<>"" THEN
         W_DATEDEBUTCONTRATANC=OCONV(W_DEBUTCONTRATANC,"D4/")
         W_DATEDEBUTCONTRATANC=W_DATEDEBUTCONTRATANC[7,4]:W_DATEDEBUTCONTRATANC[4,2]
    END ELSE
	 W_DATEDEBUTCONTRATANC=W_DATEDEBUTCONTRAT
    END

    * REGARDE SI PERIODE = DATE DE DEBUT CONTRAT - 1 MOIS
    IF W_DATEDEBUTCONTRATANC[5,2]<>"01" THEN 
	 W_DATEDEBUTCONTRATANC=W_DATEDEBUTCONTRATANC-1
    END ELSE
	 W_DATEDEBUTCONTRATANC=W_DATEDEBUTCONTRATANC[1,4]-1:"12"
    END

    W_DATEDEBUTCONTRATANCCLAIR="01/":W_DATEDEBUTCONTRATANC[5,2]:"/":W_DATEDEBUTCONTRATANC[1,4]

    IF ENR_CONVENTIONCOL<28>="0" OR ENR_CONVENTIONCOL<28>="" THEN
      IF W_PERIODE[5,2]="05" THEN    

         * GESTION DU BASCULEMENT DES CONGES 
	 GOSUB 600

	 * VERIFICATION SI BASCULEMENT CONGES ANCIENNETE EN MAI
	 IF ENR_CONVENTIONCOL<13>=1 THEN
	      GOSUB 700
	 END
      END
    END ELSE
      IF W_PERIODE[5,2]="12" THEN    

         * GESTION DU BASCULEMENT DES CONGES 
	 GOSUB 600

	 * VERIFICATION SI BASCULEMENT CONGES ANCIENNETE EN JANVIER
	 IF ENR_CONVENTIONCOL<13>=1 THEN
	      GOSUB 700
	 END
      END
    END
    * VERIFICATION SI BASCULEMENT CONGES ANCIENNETE MOIS ANNIVERSAIRE
    IF ENR_CONVENTIONCOL<13>=2 THEN

	 IF W_DATEDEBUTCONTRATANC[5,2]=W_PERIODE[5,2] THEN
	      GOSUB 700
	 END	
    END         

    IF W_PERIODE[5,2]="10" AND ENR_CONVENTIONCOL<4>=1 THEN

	 * GESTION DES CONGES DE FRACTIONNEMENT
	 GOSUB 800
 
    END

***    WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT    

RETURN
	
*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS DE CONGES PAYES

600 *

    W_NBJOURCONGESTOTAL=ENR_CONTRAT<44>

    * ARRONDI LE NBRE DE JOURS CONGES A L'ENTIER SUPERIEUR
    IF W_NBJOURCONGESTOTAL<>0 THEN
	 W_NBJOURCONGESTOTAL=INT((ENR_CONTRAT<44>/100)+.99)
    END
    W_NBJOURCONGESTOTAL=W_NBJOURCONGESTOTAL*100

    * CALCULE LA VALEUR D'UNE JOURNEE EN HRES + MONTANT
    W_VALEURTOTALHEURES=ENR_CONTRAT<45>/W_NBJOURCONGESTOTAL
    W_VALEURTOTALMONTANT=ENR_CONTRAT<46>/W_NBJOURCONGESTOTAL

    W_VALEURTOTALHEURES=INT((W_VALEURTOTALHEURES*100)+1/2)
    W_VALEURTOTALMONTANT=INT((W_VALEURTOTALMONTANT*100)+1/2)

    * TEST SI DERNIERE DECIMALES PAIRES DE TOTAL HEURES
    IF W_VALEURTOTALHEURES/2-INT(W_VALEURTOTALHEURES/2)<>0 THEN
	 W_VALEURTOTALHEURES=W_VALEURTOTALHEURES+1
    END
    * TEST SI DERNIERE DECIMALES PAIRES DE TOTAL MONTANT
    IF W_VALEURTOTALMONTANT/2-INT(W_VALEURTOTALMONTANT/2)<>0 THEN
	 W_VALEURTOTALMONTANT=W_VALEURTOTALMONTANT+1
    END

    * AFFECTATION VALEUR D'UNE JOURNEE
    ENR_CONTRAT<42>=W_VALEURTOTALHEURES
    ENR_CONTRAT<43>=W_VALEURTOTALMONTANT

    * CONVERSION OUVRABLES / OUVRES SI CONV. COL. LE PERMET
    IF ENR_CONVENTIONCOL<2>=1 THEN
	 ENR_CONTRAT<44>=ENR_CONTRAT<44>*5/6
    END

    * REPRISE DES NON CONSOMMES SI CONV. COL. LE PERMET
    IF ENR_CONVENTIONCOL<3>=2 THEN
	 ENR_CONTRAT<38>=ENR_CONTRAT<44>+ENR_CONTRAT<39>+ENR_CONTRAT<41>
	 ENR_CONTRAT<40>=0
	 ENR_CONTRAT<41>=0
    END ELSE
	 ENR_CONTRAT<38>=ENR_CONTRAT<44>
	 * REMISE A ZERO DES CONGES FRACTIONNEMENT
	 ENR_CONTRAT<40>=0
	 ENR_CONTRAT<41>=0
    END

    ENR_CONTRAT<38>=INT((ENR_CONTRAT<38>+99)/100)

    * CONGES RESTANTS A CONSOMMER
    ENR_CONTRAT<39>=(ENR_CONTRAT<38>*100)-ENR_CONTRAT<83>

    * BASCULE PROVISION EMPLOYEUR
    IF ENR_CONVENTIONCOL<3>#1 THEN
         ENR_CONTRAT<85>=ENR_CONTRAT<85>+ENR_CONTRAT<86>
    END ELSE
	 ENR_CONTRAT<85>=ENR_CONTRAT<86>
    END

    * TEST SUR DROITS ACQUIS >= 0
    IF ENR_CONTRAT<38><0 THEN ENR_CONTRAT<38>=0
    IF ENR_CONTRAT<39><0 THEN ENR_CONTRAT<39>=0
    IF ENR_CONTRAT<85><0 THEN ENR_CONTRAT<85>=0
    IF ENR_CONTRAT<42><0 THEN ENR_CONTRAT<42>=0
    IF ENR_CONTRAT<43><0 THEN ENR_CONTRAT<43>=0

    * SI CONGES PAYES AU MOIS ALORS MET A 0 VALEUR JOURNEE EN HRES ET MONTANT
    IF ENR_CONTRAT<31>="1" THEN 
	 ENR_CONTRAT<42>=0
	 ENR_CONTRAT<43>=0
    END

    * VIDAGE CONTRAT
    ENR_CONTRAT<44>=0
    ENR_CONTRAT<45>=0
    ENR_CONTRAT<46>=0
    ENR_CONTRAT<83>=0
    ENR_CONTRAT<86>=0

RETURN

*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS DE CONGES ANCIENNETE

700 *

    * CALCUL DE L'ANCIENNETE DU CONTRAT
    W_DATECLOTURE=W_PERIODE+1

    * SI DATE CLOTURE > DECEMBRE
    IF W_DATECLOTURE[5,2]=13 THEN
	 W_DATECLOTURE=W_DATECLOTURE[1,4]+1:"01"
    END

    IF W_DATECLOTURE>"200003" AND W_CODECONVENTION="02" THEN W_DATECLOTURE="200003"

    W_ANCIENNETE=INT(W_DATECLOTURE-W_DATEDEBUTCONTRATANC)/100
    W_CODECONVENTIONSAUV=W_CODECONVENTION
    READ ENR_ASSOCIATION FROM F.ASSOCIATION,W_ASSOCIATION ELSE ENR_ASSOCIATION=""
    IF ENR_ASSOCIATION<1>="A.S.M.A.D." AND W_CODECONVENTION="05" THEN W_CODECONVENTION="01"

    BEGIN CASE

         * EMPLOYES DE MAISON OU AIDE A DOMICLIE
	 CASE W_CODECONVENTION="02" OR W_CODECONVENTION="01" OR W_CODECONVENTION="08"		
	      * BLOCAGE ANCIENNETE DANS CCN 02 SI DEBUT CONTRAT >= 01/04/00
	      IF ICONV(W_DATEDEBUTCONTRATANCCLAIR,"D4/")>="11780" AND W_CODECONVENTION="02" THEN
		   W_NBJOURANCIEN=0
	      END ELSE 
		   * GESTION HABITUELLE DES C.A
                   W_NBJOURANCIEN=INT(W_ANCIENNETE/5)
                   IF W_NBJOURANCIEN>4 THEN	
		        W_NBJOURANCIEN=4
	           END
	      END

         * FAMILLES RURALES
	 CASE W_CODECONVENTION="04"		
              W_NBJOURANCIEN=INT(W_ANCIENNETE/4)
              IF W_NBJOURANCIEN>5 THEN	
		   W_NBJOURANCIEN=5
	      END

         * TRAVAILLEUSES FAMILLIALES
	 CASE W_CODECONVENTION="06"		
              W_NBJOURANCIEN=INT(W_ANCIENNETE/5)*2
              IF W_NBJOURANCIEN>=6 THEN	
		   W_NBJOURANCIEN=6
		   IF ENR_CONVENTIONCOL<12>="1" THEN W_NBJOURANCIEN=5
	      END

         * ADMR DU 6 MAI 1970
	 CASE W_CODECONVENTION="03"	
	      W_NBJOURANCIEN=0	
	      IF W_ANCIENNETE>=5 AND W_ANCIENNETE<10 THEN
	           W_NBJOURANCIEN=2
	      END ELSE
		   IF W_ANCIENNETE>=10 THEN
  		        W_NBJOURANCIEN=5
	           END
              END

    END CASE

    ENR_CONTRAT<47>=W_NBJOURANCIEN
    ENR_CONTRAT<48>=ENR_CONTRAT<47>*100
    W_CODECONVENTION=W_CODECONVENTIONSAUV
RETURN

*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS DE CONGES FRACTIONNEMENT

800 *

    W_NBJOURFRACT=0

    * CALCUL DU NOMBRE DE JOURS DE CONGES RESTANTS
    IF ENR_CONVENTIONCOL<2>=1 THEN
         W_NBJOURCONGESRESTANT=ENR_CONTRAT<39>*6/5        
    END ELSE
         W_NBJOURCONGESRESTANT=ENR_CONTRAT<39>
    END

    W_NBJOURCONGESRESTANT=W_NBJOURCONGESRESTANT/100

    BEGIN CASE

 	 * TOUTES SAUF AIDE A DOMICILE + FONCTION PUBLIQUE
	 CASE W_CODECONVENTION<>"01" AND W_CODECONVENTION <> "07"
              IF W_NBJOURCONGESRESTANT>=12 THEN
		   W_NBJOURFRACT=2
	      END ELSE
		   IF W_NBJOURCONGESRESTANT>=9 THEN
			W_NBJOURFRACT=1
		   END
	      END

	 * FONCTION PUBLIQUE
	 CASE W_CODECONVENTION="07" 
              IF W_NBJOURCONGESRESTANT>=13 THEN
		   W_NBJOURFRACT=2
	      END ELSE
		   IF W_NBJOURCONGESRESTANT>=10 THEN
			W_NBJOURFRACT=1
		   END
	      END

	 * AIDE A DOMICILE
	 CASE W_CODECONVENTION="01"
              IF W_NBJOURCONGESRESTANT>=12 THEN
		   W_NBJOURFRACT=3
	      END ELSE
		   IF W_NBJOURCONGESRESTANT>=9 THEN
			W_NBJOURFRACT=1
		   END
	      END

    END CASE

    IF ENR_CONVENTIONCOL<2>=2 AND ENR_CONVENTIONCOL<42>=1 THEN
        W_NBJOURFRACT=W_NBJOURFRACT*6/5
    END ELSE
        IF ENR_CONVENTIONCOL<2>=1 AND ENR_CONVENTIONCOL<42>=2 THEN
	    W_NBJOURFRACT=W_NBJOURFRACT*5/6
	END
    END
    W_NBJOURFRACT=INT(W_NBJOURFRACT+(1/2))

*    IF ENR_CONVENTIONCOL<3>=2 THEN
*        ENR_CONTRAT<40>=INT(ENR_CONTRAT<41>/100)+W_NBJOURFRACT
*        ENR_CONTRAT<41>=ENR_CONTRAT<41>+W_NBJOURFRACT*100
*    END ELSE        
	ENR_CONTRAT<40>=W_NBJOURFRACT
        ENR_CONTRAT<41>=W_NBJOURFRACT*100
*    END

RETURN

*********************************************************
*********************************************************
* GESTION DES EFFECTIFS

900 *

    GOSUB 901

    W_Mois=W_PERIODEFACT[5,2]+1
    W_An=W_PERIODEFACT[1,4]
    IF W_Mois="13" THEN
       W_Mois="01"
       W_An=W_PERIODEFACT[1,4]+1
    END

    W_DateFinPeriode=ICONV("01/":W_Mois:"/":W_An,"D4/")-1


    W_PASSE26ANS=0

    IF (ENR_CONTRAT<7> <= W_DateFinPeriode AND ENR_CONTRAT<8> > W_DateFinPeriode) OR (ENR_CONTRAT<7> <= W_DateFinPeriode AND ENR_CONTRAT<8> = "") THEN

       W_EFFECTIFPHYSIQUE<I>=W_EFFECTIFPHYSIQUE<I>+100
        
	* MAj apporte le 24/10/2005 par mikael

	W_PASSE26ANS=0
	IF W_DateFinPeriode <= ICONV("31/12/2007","D4/") THEN
	   * LECTURE CIVILAIDANT POUR RECUPERER LA DATE DE NAISSANCE
           READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_CleContrat[1,5] THEN

		W_DateFinPeriodeExt = OCONV(W_DateFinPeriode,"D4/")
		W_DateNaiExt = OCONV(ENR_CIVILAIDANT<26>,"D4/")
			W_FINPERIODEEXT= W_DateFinPeriodeExt[7,4]:W_DateFinPeriodeExt[4,2]
			W_DATENAI = W_DateNaiExt[7,4]:W_DateNaiExt[4,2] 

			IF W_FINPERIODEEXT- W_DATENAI  < 2600  THEN

			   W_PASSE26ANS=1
			   W_EFFECTIFPHYSIQUE26ANS<I> = W_EFFECTIFPHYSIQUE26ANS<I> + 100
			END
	     END
       END
    END

    READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,ENR_CONTRAT<3> ELSE
	 STOP
    END

    * RECUPERE L'HORAIRE HEBDO LEGAL => MENSUEL
    W_HORAIREHEBDO<I>=ENR_ETABLISSEMENT<16>*52/12

    * LECTURE DETAILCALCUL POUR RECUPERER LES HEURES EFFECTUEES SUR LE MOIS
    READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	 ENR_DETAILCALCUL=""
**	 RETURN
    END

    W_HEURESPAYEES=ENR_DETAILCALCUL<6>
	IF W_PASSE26ANS=1 THEN
		W_HORAIRETP26ANS<I>=W_HORAIRETP26ANS<I>+W_HEURESPAYEES
	END
    	W_HORAIRETP<I>=W_HORAIRETP<I>+W_HEURESPAYEES
	
RETURN

*********************************************************
*********************************************************
* RECHERCHE SI ETABLISSEMENT DEJA TRAITE

901 * 

    I=1
    LOOP 
	 UNTIL W_ETABLISSEMENT<I>=ENR_CONTRAT<3> OR W_ETABLISSEMENT<I>="" DO
         I=I+1
    REPEAT

    IF W_ETABLISSEMENT<I>="" THEN
	 W_ETABLISSEMENT<I>=ENR_CONTRAT<3>
         W_NBETABLISSEMENT=I
    END

RETURN

*********************************************************
*********************************************************
* MAJ DU FICHIER ETABLISSEMENT

910 *

    FOR I=1 TO W_NBETABLISSEMENT    

	 * LECTURE ETABLISSEMENT
	 READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,W_ETABLISSEMENT<I> ELSE
	      STOP
	 END

	 IF ENR_ETABLISSEMENT<19,1><>W_PERIODE THEN
 	      ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,17,1;W_EFFECTIFPHYSIQUE<I>)
	      ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,18,1;W_EFFECTIFTP<I>)
	      ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,19,1;W_FINPERIODE2)
	
		* MAJ apporte le 24/10/2005 par mikael
 	      ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,32,1;W_EFFECTIFPHYSIQUE26ANS<I>)
	      ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,33,1;W_EFFECTIFTP26ANS<I>)

	 END ELSE
 	      ENR_ETABLISSEMENT<17,1>=ENR_ETABLISSEMENT<17,1>+W_EFFECTIFPHYSIQUE<I>
 	      ENR_ETABLISSEMENT<18,1>=ENR_ETABLISSEMENT<18,1>+W_EFFECTIFTP<I>
		* MAJ apporte le 24/10/2005 par mikael
 	      ENR_ETABLISSEMENT<32,1>=ENR_ETABLISSEMENT<32,1>+W_EFFECTIFPHYSIQUE26ANS<I>
	      ENR_ETABLISSEMENT<33,1>=ENR_ETABLISSEMENT<33,1>+W_EFFECTIFTP26ANS<I>
	 END

 	 W_EFFECTIFPHYSIQUETOTAL=W_EFFECTIFPHYSIQUETOTAL+W_EFFECTIFPHYSIQUE<I>
	 W_EFFECTIFTPTOTAL=W_EFFECTIFTPTOTAL+W_EFFECTIFTP<I>
	 
	 * MAJ apporte le 24/10/2005 par mikael
 	 W_EFFECTIFPHYSIQUETOTAL26ANS=W_EFFECTIFPHYSIQUETOTAL26ANS+W_EFFECTIFPHYSIQUE26ANS<I>
	 W_EFFECTIFTPTOTAL26ANS=W_EFFECTIFTPTOTAL26ANS+W_EFFECTIFTP26ANS<I>

	 WRITE ENR_ETABLISSEMENT ON F.ETABLISSEMENT,W_ETABLISSEMENT<I>

    NEXT I

RETURN

*********************************************************
*********************************************************
* MAJ DU FICHIER ASSOCIATION

920 *

    * LECTURE ASSOCIATION
    READ ENR_ASSOCIATION FROM F.ASSOCIATION,W_ASSOCIATION ELSE
	 STOP
    END

    IF ENR_ASSOCIATION<29,1><>W_PERIODE THEN
 	 ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,27,1;W_EFFECTIFPHYSIQUETOTAL)
	 ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,28,1;W_EFFECTIFTPTOTAL)
	 ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,29,1;W_FINPERIODE2)
	 
	 * MAJ apporte le 24/10/2005 par mikael
 	 ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,40,1;W_EFFECTIFPHYSIQUETOTAL26ANS)
	 ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,41,1;W_EFFECTIFTPTOTAL26ANS)
    END ELSE
 	 ENR_ASSOCIATION<27,1>=ENR_ASSOCIATION<27,1>+W_EFFECTIFPHYSIQUETOTAL
 	 ENR_ASSOCIATION<28,1>=ENR_ASSOCIATION<28,1>+W_EFFECTIFTPTOTAL
	 
	 * MAJ apporte le 24/10/2005 par mikael
 	 ENR_ASSOCIATION<40,1>=ENR_ASSOCIATION<40,1>+W_EFFECTIFPHYSIQUETOTAL26ANS
	 ENR_ASSOCIATION<41,1>=ENR_ASSOCIATION<41,1>+W_EFFECTIFTPTOTAL26ANS
    END

    WRITE ENR_ASSOCIATION ON F.ASSOCIATION,W_ASSOCIATION

RETURN


*********************************************************
*********************************************************
* Controle pour Cration ventuelle d'un nouveau DETAILPREST

2000 *

	* RECUPERATION ATT 23 DE CONV. COL
	READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,W_CODECONVENTION ELSE
	     STOP
	END		

	* Rcapitulatif mensuel
	W_RECAPMENS=ENR_CONVENTIONCOL<23>

	* Controle personnel type Production
	* NORMALLEMENT SI ARRIVE ICI, OBLIGATOIREMENT TYPE P
	GOSUB 2050

	* Controle Premire Activit type PRESTATAIRE
	* SI ARRIVE LA, OBLIGATOIREMENT TYPE PRESTATAIRE (voir Procdure 50 qui appelle la procdure en cours)
	* Si tous les critres sont bon, cration du DtailPrest
	IF W_RECAPMENS=1 AND W_INDICFINCONT=1 THEN
		GOSUB 2001
	END

RETURN


*********************************************************
*********************************************************
* Cration ventuelle d'un nouveau DETAILPREST

2001 *

	READ ENR_DETAILPREST FROM F.DETAILPREST,W_CLEDETAILCALCUL ELSE
		ENR_DETAILPREST=""
	END

        * 06/02/02 : VERIFIE SI GESTION D'UNE SAISIE DETAILLEE
        *            -> SI OUI : NE GENERE PAS DE DETAILPREST POUR LE MOIS SUIVANT
        *            -> SI NON : GENERE 1 DETAILPREST POUR LE MOIS SUIVANT

	W_PERIODESUIV=W_PERIODE+1

	IF W_PERIODESUIV[5,2]="13" THEN
		W_PERIODESUIV=W_PERIODESUIV[1,4]+1:"01"
	END

	W_NBRUB = DCOUNT(ENR_DETAILPREST<3>,CHAR(253))

	IF W_NBRUB >0 THEN
		FOR IRUB=1 TO W_NBRUB
			* TESTE SI SAISIE DETAILLEE OU PAS
			IF ENR_DETAILPREST<2,IRUB>#"" THEN
				* CAS OU PAS SAISIE DETAILLEE
				ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,3,IRUB;"000")	
			END ELSE
				* CAS OU SAISIE DETAILLEE ALORS SUPP DES MV CORRESPONDANTES
				ENR_DETAILPREST=DELETE(ENR_DETAILPREST,1,IRUB)
				ENR_DETAILPREST=DELETE(ENR_DETAILPREST,2,IRUB)
				ENR_DETAILPREST=DELETE(ENR_DETAILPREST,3,IRUB)
				ENR_DETAILPREST=DELETE(ENR_DETAILPREST,4,IRUB)
				W_NBRUB=W_NBRUB-1
				IRUB=IRUB-1
			END
		NEXT IRUB
	END

	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,5;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,6;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,7;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,8;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,9;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,10;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,11;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,12;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,13;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,14;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,15;"")

        WRITE ENR_DETAILPREST ON F.DETAILPREST,W_CLEDETAILCALCUL[1,8]:W_PERIODESUIV

RETURN


*********************************************************
*********************************************************
* purge ANOMALIEPAIE + ACOMPTEBULL
2200 *
   EXECUTE 'TSELECT ANOMALIEPAIE AVEC 0 = "':W_PERIODE:']"'
   EXECUTE 'SAUVE-LISTE LISTANOMALIEPAIE'
   EXECUTE 'LISTE LISTANOMALIEPAIE ' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1><>209 THEN 
       SELECT F.ANOMALIEPAIE TO LISTANOMALIEPAIE 

       W_Fini="FAUX"
       LOOP
            READNEXT W_CleDetail FROM LISTANOMALIEPAIE ELSE W_Fini="VRAI"
            WHILE W_Fini="FAUX" DO
            DELETE F.ANOMALIEPAIE,W_CleDetail
       REPEAT
   END

   EXECUTE 'TSELECT ACOMPTEBULL AVEC 0 = "':W_PERIODE:']"'
   EXECUTE 'SAUVE-LISTE LISTACOMPTEBULL'
   EXECUTE 'LISTE LISTACOMPTEBULL' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1><>209 THEN 
       SELECT F.ACOMPTEBULL TO LISTACOMPTEBULL

       W_Fini="FAUX"
       LOOP
            READNEXT W_CleDetail FROM LISTACOMPTEBULL ELSE W_Fini="VRAI"
            WHILE W_Fini="FAUX" DO
            DELETE F.ACOMPTEBULL,W_CleDetail
       REPEAT
   END
RETURN

*********************************************************
*********************************************************
* Purge des DetailPrest, DetailMandat, DetailInter

2010 *


   W_PERIODE=W_PERIODE-2

   IF W_PERIODE[5,2]="00" THEN
   	W_PERIODE=W_PERIODE[1,4]-1:"12"
   END ELSE
	IF W_PERIODE[5,2]="99" THEN
        	W_PERIODE=W_PERIODE[1,4]-1:"11"
	END
   END

   EXECUTE 'TSELECT DETAILPREST AVEC PeriodeDetailPrest < "':W_PERIODE:'"'
   EXECUTE 'SAUVE-LISTE REQUETEDETAIL'
   EXECUTE 'LISTE REQUETEDETAIL' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1><>209 THEN 
       SELECT F.DETAILPREST TO REQUETEDETAIL

       W_Fini="FAUX"
       LOOP
            READNEXT W_CleDetail FROM REQUETEDETAIL ELSE W_Fini="VRAI"
            WHILE W_Fini="FAUX" DO
            DELETE F.DETAILPREST,W_CleDetail
       REPEAT
   END

   EXECUTE 'TSELECT DETAILFEDE AVEC 0 < "[':W_PERIODE:'"'
   EXECUTE 'SAUVE-LISTE REQUETEDETAIL'
   EXECUTE 'LISTE REQUETEDETAIL' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1><>209 THEN 
       SELECT F.DETAILFEDE TO REQUETEDETAIL

       W_Fini="FAUX"
       LOOP
            READNEXT W_CleDetail FROM REQUETEDETAIL ELSE W_Fini="VRAI"
            WHILE W_Fini="FAUX" DO
            DELETE F.DETAILFEDE,W_CleDetail
       REPEAT
   END

   EXECUTE 'TSELECT DETAILMANDAT AVEC PeriodeDetailMandat < "':W_PERIODE:'"'
   EXECUTE 'SAUVE-LISTE REQUETEDETAIL'
   EXECUTE 'LISTE REQUETEDETAIL' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1><>209 THEN 
       SELECT F.DETAILMANDAT TO REQUETEDETAIL

       W_Fini="FAUX"
       LOOP
   	    READNEXT W_CleDetail FROM REQUETEDETAIL ELSE W_Fini="VRAI"
            WHILE W_Fini="FAUX" DO
            DELETE F.DETAILMANDAT,W_CleDetail
       REPEAT
   END

*   EXECUTE 'TSELECT DETAILINTER AVEC PeriodeDetailInter < "':W_PERIODE:'"'
*   EXECUTE 'SAUVE-LISTE REQUETEDETAIL'
*   EXECUTE 'LISTE REQUETEDETAIL' CAPTURING MSG RETURNING MSGCODE

*   IF MSGCODE<1><>209 THEN 
*       SELECT F.DETAILINTER TO REQUETEDETAIL

*       W_Fini="FAUX"
*       LOOP
*   	    READNEXT W_CleDetail FROM REQUETEDETAIL ELSE W_Fini="VRAI"
*            WHILE W_Fini="FAUX" DO
*            DELETE F.DETAILINTER,W_CleDetail
*       REPEAT
*   END

   EXECUTE "EFFACER-LISTE REQUETEDETAIL"
RETURN


************************************
* Controle fin contrat sur priode *
************************************
2050
	
	IF ENR_CONTRAT<8> = "" THEN
		W_INDICFINCONT=1
	END ELSE
		W_INDICFINCONT=OCONV(ENR_CONTRAT<8>,"D4/")
            	W_INDICFINCONT=W_INDICFINCONT[7,4]:W_INDICFINCONT[4,2]
		IF W_INDICFINCONT=W_PERIODE THEN
			W_INDICFINCONT=0
		END ELSE
			W_INDICFINCONT=1
		END
		IF ENR_CONTRAT<58>=W_PERIODE THEN W_INDICFINCONT=0
	END
RETURN


**************************************
* CONTROLE SI CREATION DE DETAILXXXX *
**************************************
2100

	GOSUB 2050

	IF W_INDICFINCONT=1 THEN
		BEGIN CASE
			CASE W_TYPEPERSONNEL MATCHES "1"
				* ADMINISTRATIF
				GOSUB 2101
			CASE W_TYPEPERSONNEL MATCHES "2"
				* MANDATAIRE
				GOSUB 2102
			CASE W_TYPEPERSONNEL MATCHES "3"
				* PRESTATAIRE
				GOSUB 2103
			CASE W_TYPEPERSONNEL MATCHES "4"
				* INTERMEDIAIRE
				GOSUB 2104
		END CASE
	END

RETURN

************************
* CREATION DETAILADMIN *
************************
2101
        ENR_DETAILADMIN=""
        D=1
        LOOP
         UNTIL ENR_CONTRAT<89,D>="" DO
 	  ENR_DETAILADMIN<1,D>=ENR_CONTRAT<89,D>
	  ENR_DETAILADMIN<2,D>=ENR_CONTRAT<90,D>
	  ENR_DETAILADMIN<3,D>=ENR_CONTRAT<91,D>
	  ENR_DETAILADMIN<4,D>=ENR_CONTRAT<92,D>
	  ENR_DETAILADMIN<5,D>="NON"
	  ENR_DETAILADMIN<6,D>="0"
	  ENR_DETAILADMIN<7,D>="0"
          D=D+1
        REPEAT
        IF D#1 THEN
         FOR C=1 TO D-1
          ENR_DETAILADMIN<6,C>=""
          ENR_DETAILADMIN<7,C>=""
         NEXT C
        END

	IF ENR_DETAILADMIN<1><>"" THEN WRITE ENR_DETAILADMIN ON F.DETAILADMIN,W_CleContrat:W_PROCHAINEPERIODE 

RETURN


*************************
* CREATION DETAILMANDAT *
*************************
2102

	ENR_DETAILMANDAT=""
	ENR_DETAILMANDAT<1>=ENR_CONTRAT<89>
	ENR_DETAILMANDAT<2>=ENR_CONTRAT<90>
	ENR_DETAILMANDAT<3>=ENR_CONTRAT<91>
	ENR_DETAILMANDAT<4>=ENR_CONTRAT<92>
	ENR_DETAILMANDAT<5>=ENR_CONTRAT<93>
	ENR_DETAILMANDAT<6>=""
	ENR_DETAILMANDAT<7>=""
	
	IF ENR_DETAILMANDAT<1><>"" THEN WRITE ENR_DETAILMANDAT ON F.DETAILMANDAT,W_CleContrat:W_PROCHAINEPERIODE 

RETURN


************************
* CREATION DETAILPREST *
************************
2103

	READ ENR_DETAILPREST FROM F.DETAILPREST,W_CleContrat:W_PROCHAINEPERIODE ELSE ENR_DETAILPREST=""

	ENR_DETAILPREST<5>=ENR_CONTRAT<89>
	ENR_DETAILPREST<6>=ENR_CONTRAT<90>
	ENR_DETAILPREST<7>=ENR_CONTRAT<91>
	ENR_DETAILPREST<8>=ENR_CONTRAT<92>
	ENR_DETAILPREST<9>=ENR_CONTRAT<93>
	
	IF ENR_DETAILPREST<5><>"" THEN WRITE ENR_DETAILPREST ON F.DETAILPREST,W_CleContrat:W_PROCHAINEPERIODE 

RETURN

************************
* CREATION DETAILINTER *
************************
2104
	ENR_DETAILINTER<8>=ENR_CONTRAT<89>
	ENR_DETAILINTER<9>=ENR_CONTRAT<90>
	ENR_DETAILINTER<10>=ENR_CONTRAT<91>
	ENR_DETAILINTER<11>=ENR_CONTRAT<92>
	ENR_DETAILINTER<12>=ENR_CONTRAT<93>
	ENR_DETAILINTER<13>=""
	ENR_DETAILINTER<14>=""
	
	IF ENR_DETAILINTER<8><>"" THEN WRITE ENR_DETAILINTER ON F.DETAILINTER,W_CleContrat:W_PROCHAINEPERIODE 

RETURN

*************************************************************
*	Procdure de calcul des salaires de rfrence		*
*************************************************************
10000
W_Temp = 'MAJSALREFIJSS ':W_PERIODEFACT:' ':W_DernierContratTraite
EXECUTE W_Temp
RETURN
