**********************************************************
*  Affectation de l'absentisme
*  Programme chaine  partir d'un projet VB
*  Vanessa
*  Juillet 1999
**********************************************************

*    DIFFERENTES PROCEDURES

*  10   -> Boucle des ABSENCESAIDANT
*  20   -> Slection des contrats de l'aidant
*  50   -> Algo de dtermination du nombre de jours d'absence
*  60   -> Dfinition des jours fris 
*  100  -> Procdure si code absence = "07" (enfant malade)
*  150  -> Dtermine la moyenne journalire pour vnement famille
*  160  -> Recherche de l'avenant actif au dbut de l'arrt
*  200  -> Procdure si code absence = "08"  "11" (vnement famille)
*  300  -> Procdure si code absence = "12" et "13" (congs sans solde ou parental)
*  400  -> Procdure si code absence = "14" et "15" (congs pays ou fractionnement)
*  450  -> Recherche la moyenne journalire pour congs pays ou fractionnement
*  460  -> Gnre rubrique 821 (indemnit compensatrice de congs pays)
*  500  -> Procdure si code absence = "16" (congs anciennet)
*  600  -> Procdure si code absence = "02" ou "03" (maternit mi-temps thrapeutique)
*  650  -> Recherche de la valeur horaire en calendaire
*  700  -> Procdure si code absence = "04"  "06" (accident travail, trajet, maladie prof.) et "01" (maladie)
*  710  -> Dtermine le nombre de jours sur la priode avec IJSS  60 et 80 %
*  720  -> Dtermine le nombre de jours sur la priode avec IJSS  50 et 66 %
*  730  -> Remplit DETAILINDEM 
*  800  -> Procdure si code absence = "18" "19" "20" "21" (visites mdicales)
*  1000 -> Mise  jour des fichiers DETAIL xxx
*  1100 -> Relve le code rubrique de saisie  renseigner
*  1200 -> Mise  jour du fichier DETAILPREST
*  1300 -> Mise  jour du fichier DETAILMANDAT
*  1400 -> Mise  jour du fichier DETAILINTER
*  1500 -> Recherche le rang de la rubrique de saisie
**********************************************************

* Ouvertures des fichiers

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","CONTRAT" TO F.CONTRAT ELSE PRINT "OUVERTURE CONTRAT" ;* en lecture criture
OPEN "","CONTRATSPREV" TO F.CONTRATSPREV ELSE PRINT "OUVERTURE CONTRATSPREV" ;* en lecture
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE PRINT "OUVERTURE CIVILAIDANT" ;* en lecture
OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE PRINT "OUVERTURE ABSENCESAIDANT" ;* en lecture
OPEN "","CONVENTIONCOL" TO F.CONVENTIONCOL ELSE PRINT "OUVERTURE CONVENTIONCOL" ;* en lecture
OPEN "","ACTIVITES" TO F.ACTIVITES ELSE PRINT "OUVERTURE ACTIVITES" ;* en lecture
OPEN "","DETAILADMIN" TO F.DETAILADMIN ELSE PRINT "OUVERTURE DETAILADMIN" ;* en criture
OPEN "","DETAILPREST" TO F.DETAILPREST ELSE PRINT "OUVERTURE DETAILPREST" ;* en criture
OPEN "","DETAILMANDAT" TO F.DETAILMANDAT ELSE PRINT "OUVERTURE DETAILMANDAT" ;* en criture
OPEN "","DETAILINTER" TO F.DETAILINTER ELSE PRINT "OUVERTURE DETAILINTER" ;* en criture
OPEN "","PAQUES" TO F.PAQUES ELSE PRINT "OUVERTURE PAQUES" ;* en lecture
OPEN "","HISTORINDEM" TO F.HISTORINDEM ELSE PRINT "OUVERTURE HISTORINDEM" ;* en lecture criture
OPEN "","DETAILINDEM" TO F.DETAILINDEM ELSE PRINT "OUVERTURE DETAILINDEM" ;* en lecture criture
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE PRINT "OUVERTURE DETAILCALCUL" ;* en lecture
*********************************************************
* initialisation des variables

W_RequeteContrat=""
W_JourFerie=""
W_JourAIndemniser=""
W_LundiPaques=""
W_JeudiAscen=""
W_LundiPente=""
W_TabDyn=""
W_JourAbs07=0
W_NbreHreRestant=0
W_Jour=""
W_Difference=""
W_Indice =0
W_Att=0
W_AttAbs=0
W_Creer=""
W_JourRestant=0
W_Count=0
W_Temp=0
W_Diff=0
W_TabVar=""
W_JourAbsAidant=0
W_NbreHreAidant=0
W_SauveAidant=""
W_CongeP=0
W_CongeA=0

*********************************************************
* Recuperation des arguments

PROCREAD ARGUMENTS ELSE STOP
W_Selection=FIELD(ARGUMENTS," ",2)
W_CodAssoc=FIELD(ARGUMENTS," ",3)
IF W_Selection = "T" THEN
   W_TypePerso=FIELD(ARGUMENTS," ",4)
   W_Activite=FIELD(ARGUMENTS," ",5)
   W_Periode=FIELD(ARGUMENTS," ",6)
   W_Secteur=FIELD(ARGUMENTS," ",7)
END ELSE
   W_Periode=FIELD(ARGUMENTS," ",4)
   W_CodeAidant=FIELD(ARGUMENTS," ",5)
END
*********************************************************
* PROGRAMME PRINCIPAL


   W_Mois = W_Periode[5,2]
   W_An = W_Periode[1,4]
   W_DatDeb = ICONV("01/":W_Mois:"/":W_An,"D4/")
   W_Mois = W_Mois + 1
   IF W_Mois = "13" THEN
      W_Mois = "01"
      W_An = W_An + 1
   END
   W_DatFin = ICONV("01/":W_Mois:"/":W_An,"D4/")-1

   IF W_Selection = "I" THEN

      *  requete si slection individuelle
      W_Temp = 'SSELECT ABSENCESAIDANT AVEC 0 = "':W_CodeAidant[1,5]:']" AND AVEC NumMotifAidant >= "01" AND AVEC NumMotifAidant <= "21" AND AVEC DebAbsAidant <= "':W_DatFin:'" AND AVEC 2 >= "':W_DatDeb:'" PAR CodeAidant PAR DebAbsAidant'

   END ELSE

      *  requete si slection totale
      W_Temp = 'SSELECT ABSENCESAIDANT AVEC NumMotifAidant >= "01" AND AVEC NumMotifAidant <= "21" AND AVEC DebAbsAidant <= "':W_DatFin:'" AND AVEC 2 >= "':W_DatDeb:'"'

      *  secteurs
      IF W_Secteur # "" THEN
         W_Count = LEN(W_Secteur)
         W_Temp = W_Temp:' AND AVEC CodeSectAbs = "':W_Secteur[1,3]:'"'
         IF W_Count > 2 THEN
            j=5
            LOOP
            UNTIL j >= W_Count DO
               W_Temp = W_Temp:' OR = "':W_Secteur[j,3]:'"'
               j = j + 4
            REPEAT
         END
      END
      W_Temp = W_Temp:' PAR CodeAidant PAR DebAbsAidant'
   END

   EXECUTE W_Temp
   EXECUTE 'SAUVE-LISTE W_RequeteAbs'
   EXECUTE "LISTE W_RequeteAbs" RETURNING MSGCODE

   IF MSGCODE<1> = 209 THEN
      STOP
   END ELSE
      SELECT F.ABSENCESAIDANT TO W_RequeteAbs
      GOSUB 10
   END

STOP

*********************************************************
*  Boucle des absences aidant

10

   W_Fini = "FAUX"
   W_Verif = ""
   LOOP
      READNEXT W_CleAbs FROM W_RequeteAbs ELSE W_Fini = "VRAI"
   WHILE W_Fini = "FAUX" DO
      READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,W_CleAbs ELSE ENR_ABSENCESAIDANT=""

      W_Difference=""

      IF W_SauveAidant=W_CleAbs[1,5] THEN
         W_SauveAidant=W_CleAbs[1,5] 
         W_JourAbsAidant=0
         W_NbreHreAidant=0
      END

      W_TotalMont=0
      W_NbreHreIndem=0
	W_NbreHreRestant=0
      W_JourRestant=0
      W_JourAIndemniser=0
 
      W_CodeAbs=W_CleAbs[6,2]

      IF W_Verif # W_CleAbs[1,5] THEN
         W_NouvelAidant=1
         GOSUB 20
         W_Verif = W_CleAbs[1,5]
         W_CongeP=0
         W_CongeA=0      
      END ELSE
         W_NouvelAidant=0
      END

      W_CountContrat = DCOUNT(W_RequeteContrat,CHAR(254))

      FOR j = 1 TO W_CountContrat

         READ ENR_CONTRAT FROM F.CONTRAT,W_RequeteContrat<j> ELSE ENR_CONTRAT=""

         IF W_CodeAbs >= "01" AND W_CodeAbs <= "06" THEN
            IF ENR_CONTRAT<1> # "02" THEN
               BEGIN CASE 
                  CASE W_CodeAbs = "02" OR W_CodeAbs = "03"
                     GOSUB 600
                     GOSUB 1000
                  CASE (W_CodeAbs >= "04" AND W_CodeAbs <= "06") OR W_CodeAbs = "01"
                     READ ENR_CONTRATSPREV FROM F.CONTRATSPREV,ENR_CONTRAT<29> ELSE ENR_CONTRATSPREV=""
                     GOSUB 700
                     GOSUB 1000
               END CASE
               
            END
         END ELSE

            BEGIN CASE
               CASE W_CodeAbs = "07"
                  GOSUB 100 
                  GOSUB 1000 
               CASE W_CodeAbs >= "08" AND W_CodeAbs <= "11"
                  GOSUB 200
                  GOSUB 1000 
               CASE W_CodeAbs = "12" OR W_CodeAbs = "13"
                  GOSUB 300
                  GOSUB 1000 
               CASE W_CodeAbs = "14" OR W_CodeAbs = "15"
                  GOSUB 400
                  GOSUB 1000 
               CASE W_CodeAbs = "16"
                  GOSUB 500
                  GOSUB 1000 
               CASE W_CodeAbs >= "18" AND W_CodeAbs <= "21"
                  W_Stop = "FAUX" 
                  GOSUB 800
                  IF W_Stop = "VRAI" THEN
                     GOSUB 1000 
                     EXIT
                  END
            END CASE 
         END
      NEXT j
   REPEAT
 
RETURN

*********************************************************
*  Slection sur les contrats de l'aidant

20

   W_RequeteContrat=""

   IF W_Selection = "T" THEN
      W_CodeAidant =W_CleAbs[1,5]
      W_Str = 'SSELECT CONTRAT AVEC 7 <= "':W_DatFin:'" AND AVEC 8 >= "':W_DatDeb:'" OR = "" AND AVEC 0 = "':W_CodeAidant:']" AND AVEC 2 = "':W_CodAssoc:'" AND AVEC 65 # "O"'

      *  activites
      IF W_TypePerso = "P" THEN
         W_Str = W_Str:' AND AVEC TypeActivite = "':W_Activite:'"'
      END

      *  type de personnel
      IF W_TypePerso = "A" OR W_TypePerso = "P" THEN
         W_Str = W_Str:' AND AVEC 6 = "':W_TypePerso:'"'
      END

   	EXECUTE W_Str

   END ELSE
      W_CleContrat=W_CodeAidant
   END


   W_End = "FAUX"
   j=1

   LOOP
      IF W_Selection = "T" THEN
         READNEXT W_CleContrat ELSE W_End = "VRAI"
      END
   WHILE W_End = "FAUX" DO
      READ ENR_CONTRAT FROM F.CONTRAT,W_CleContrat ELSE ENR_CONTRAT=""
      
      W_FiniDetailCalcul = "FAUX"
      W_CleDetailCalcul = W_CleContrat:W_Periode
*      READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CleDetailCalcul ELSE W_FiniDetailCalcul = "VRAI"
      
      W_FiniDetailCalcul = "VRAI"
      * si l'enregistrement n'existe pas dans DETAILCALCUL
      IF W_FiniDetailCalcul = "VRAI" AND W_Periode > ENR_CONTRAT<63> THEN

         * met le code contrat dans un tableau dynamique
         W_RequeteContrat=REPLACE(W_RequeteContrat,j,1;W_CleContrat)
         j = j + 1

         GOSUB 160
         * test si frquence du contrat de travail = annuelle
         IF ENR_CONTRAT<25,k> = "4" AND ENR_CONTRAT<68,k> = "1" THEN
            W_Count = DCOUNT(ENR_CONTRAT<76>,CHAR(253))
            * test si priode de paie en cours de traitement dans l'att 76 
            FOR l = 1 TO W_Count
               IF W_Periode = ENR_CONTRAT<76,l> THEN
                  ENR_CONTRAT = REPLACE(ENR_CONTRAT,78,l;"0")
*                  WRITE ENR_CONTRAT ON F.CONTRAT,W_CleContrat
                  EXIT
               END
            NEXT l
         END
  
         READ ENR_HISTORINDEM FROM F.HISTORINDEM,W_CleContrat THEN
            W_Count = DCOUNT(ENR_HISTORINDEM<1>,CHAR(253))
            * test si priode de paie en cours de traitement dans l'att 1
            FOR l = 1 TO W_Count
               IF W_Periode = ENR_HISTORINDEM<1,l> THEN
                  ENR_HISTORINDEM = REPLACE(ENR_HISTORINDEM,2,l;"0")
                  ENR_HISTORINDEM = REPLACE(ENR_HISTORINDEM,3,l;"0")
                  ENR_HISTORINDEM = REPLACE(ENR_HISTORINDEM,4,l;"0")
*                  WRITE ENR_HISTORINDEM ON F.HISTORINDEM,W_CleContrat
                  EXIT
               END
            NEXT l
         END ELSE
            ENR_HISTORINDEM=""
         END
         
         * supprime l'enregistrement dans DETAILINDEM s'il existe
         W_CleTemp = W_CleContrat:W_Periode:W_CodeAbs:W_CleAbs[8,5]
         W_Existe = "VRAI"
         READ ENR_DETAILINDEM FROM F.DETAILINDEM,W_CleTemp ELSE W_Existe = "FAUX"
         IF W_Existe = "VRAI" THEN
            DELETE F.DETAILINDEM,W_CleTemp
         END 

      END

   	IF W_Selection = "I" THEN
         W_End = "VRAI"
      END
   REPEAT
  
RETURN

*********************************************************
*  procdure si code absence = "07"(vnement famille : enfant malade)

100

   READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL, ENR_CONTRAT<1> ELSE ENR_CONVENTIONCOL=""
   W_An = W_Periode[1,4]
   W_DatDebAnnee = ICONV("01/01/":W_An,"D4/")
   W_DatFinAnnee = ICONV("31/12/":W_An,"D4/")
   W_JourAbs07=0

   EXECUTE 'SSELECT ABSENCESAIDANT AVEC 0 = "':W_CodeAidant[1,5]:'07]" AND AVEC DebAbsAidant <= "':W_DatFinAnnee:'" AND AVEC 2 >= "':W_DatDebAnnee:'"'

   W_Fini07 = "FAUX"
   LOOP 
      READNEXT W_CleAbs07 ELSE W_Fini07 = "VRAI"   
   WHILE W_Fini07 = "FAUX" DO

      * ne pas tenir compte de l'absence sur laquelle on travaille
      IF W_CleAbs # W_CleAbs07 THEN
         READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,W_CleAbs07 ELSE ENR_ABSENCESAIDANT=""

         W_CleAbsGen=W_CleAbs07
         W_JourAbs=0
         GOSUB 50
         W_JourAbs07=W_JourAbs
      END

   REPEAT

   W_CleAbsGen=W_CleAbs
   READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,W_CleAbs ELSE ENR_ABSENCESAIDANT=""
   W_JourAbs=0
   GOSUB 50

   IF ENR_CONVENTIONCOL<6> = "" THEN
      ENR_CONVENTIONCOL<6> = 0
   END

   IF W_JourAbs07 < ENR_CONVENTIONCOL<6> THEN

      W_Reste=ENR_CONVENTIONCOL<6> - W_JourAbs07
      IF W_Reste >= W_JourAbs THEN
         W_JourAIndemniser = W_JourAbs * 100
      END ELSE
         W_JourAIndemniser = W_Reste * 100
         W_JourRestant = (W_JourAbs - W_Reste) * 100
      END
   END ELSE
      W_JourRestant = W_JourAbs * 100
   END

   GOSUB 150

   W_NbreHreIndem = (W_JourAIndemniser * W_ValeurHor)/100
   W_NbreHreRestant = (W_JourRestant * W_ValeurHor)/100

RETURN

*********************************************************
*  procdure si code absence = "08"  "11" (vnement famille)

200

   W_CleAbsGen=W_CleAbs
   W_JourAbs=0
   GOSUB 50
   W_JourAIndemniser = W_JourAbs * 100
   GOSUB 150
   W_NbreHreIndem = (W_JourAIndemniser * W_ValeurHor)/100
 
RETURN

*********************************************************
*  Algo de dtermination du nombre de jours d'absences

50

   W_DatDebAbs = W_CleAbsGen[8,5]
   W_Mois50 = W_Periode[5,2]
   W_An50 = W_Periode[1,4]
   W_DatDebPeriode = ICONV("01/":W_Mois50:"/":W_An50,"D4/")
   IF W_DatDebAbs < W_DatDebPeriode THEN
      W_DatDebAbs = W_DatDebPeriode
   END

   W_DatFinAbs = ENR_ABSENCESAIDANT<2>
   W_Mois50 = W_Mois50 + 1
   IF W_Mois50 = "13" THEN
      W_Mois50 = "01" 
      W_An50 = W_An50 + 1
   END
   W_DatFinPeriode = ICONV("01/":W_Mois50:"/":W_An50,"D4/")-1
   IF W_DatFinAbs > W_DatFinPeriode THEN
      W_DatFinAbs = W_DatFinPeriode
   END

   W_CodeAbsGen = W_CleAbsGen[6,2]
   W_Jour = "" 

   BEGIN CASE
      CASE W_CodeAbsGen = "14" OR W_CodeAbsGen = "15"
         READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL, ENR_CONTRAT<1> ELSE ENR_CONVENTIONCOL=""
         IF ENR_CONVENTIONCOL<2> = "1" THEN
            W_Jour = "OUVRE"
         END ELSE
            W_Jour = "OUVRABLE"
         END
      CASE W_CodeAbsGen = "16"
         READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL, ENR_CONTRAT<1> ELSE ENR_CONVENTIONCOL=""
         IF ENR_CONVENTIONCOL<12> = "1" THEN
            W_Jour = "OUVRE"
         END ELSE
            W_Jour = "OUVRABLE"
         END
      CASE W_CodeAbsGen >= "07" AND W_CodeAbsGen <= "12"
         W_Jour = "OUVRE"
   END CASE

   IF W_JourFerie<1> = "" THEN
      GOSUB 70
   END

   W_Diff = (W_DatFinAbs - W_DatDebAbs) + 1

   FOR m = 0 TO W_Diff-1

      W_Day = OCONV(W_DatDebAbs+m,"DWA")
      IF W_Jour = "OUVRABLE" THEN
         IF W_Day # "Sunday" THEN
            GOSUB 60
         END
      END ELSE
         IF W_Jour = "OUVRE" THEN
            IF W_Day # "Saturday" AND W_Day # "Sunday" THEN
               GOSUB 60
            END
         END ELSE
            W_JourAbs = W_JourAbs + 1
         END
      END
   NEXT m

   IF ENR_ABSENCESAIDANT<1> = "1" AND ENR_ABSENCESAIDANT<3> = "1" THEN
      W_JourAbs = W_JourAbs - (1/2)
   END
   IF ENR_ABSENCESAIDANT<1> = "2" AND ENR_ABSENCESAIDANT<3> = "2" THEN
      W_JourAbs = W_JourAbs - (1/2)
   END

RETURN

*********************************************************
*  Dfinition des jours fris

60

   W_Ferie = "FAUX"
   FOR n = 1 TO 11
      IF W_DatDebAbs+m = W_JourFerie<n> THEN
         W_Ferie = "VRAI"
         EXIT
      END
   NEXT n
   IF W_Ferie = "FAUX" THEN
      W_JourAbs = W_JourAbs +1
   END

RETURN

*********************************************************
*  Dfinition des jours fris

70

   W_An = W_Periode[1,4]
   W_JourAn = ICONV("01/01/":W_An,"D4/")
   W_1Mai = ICONV("01/05/":W_An,"D4/")
   W_8Mai = ICONV("08/05/":W_An,"D4/")
   W_14Jui = ICONV("14/07/":W_An,"D4/")
   W_15Aout = ICONV("15/08/":W_An,"D4/")
   W_1Nov = ICONV("01/11/":W_An,"D4/")
   W_11Nov = ICONV("11/11/":W_An,"D4/")
   W_25Dec = ICONV("25/12/":W_An,"D4/")

   READ ENR_PAQUES FROM F.PAQUES,W_An THEN
      W_JourPaques = ENR_PAQUES<1>
      W_Paques = ICONV(W_JourPaques[1,2]:"/":W_JourPaques[3,2]:"/":W_An,"D4/")
      W_LundiPaques = W_Paques + 1
      W_JeudiAscen = W_Paques + 39
      W_LundiPente = W_JeudiAscen + 11
   END ELSE
      ENR_PAQUES=""
   END

   *remplit tableau dynamique
   W_JourFerie = REPLACE(W_JourFerie,1;W_JourAn)
   W_JourFerie = REPLACE(W_JourFerie,2;W_1Mai)
   W_JourFerie = REPLACE(W_JourFerie,3;W_8Mai)
   W_JourFerie = REPLACE(W_JourFerie,4;W_14Jui)
   W_JourFerie = REPLACE(W_JourFerie,5;W_15Aout)
   W_JourFerie = REPLACE(W_JourFerie,6;W_1Nov)
   W_JourFerie = REPLACE(W_JourFerie,7;W_11Nov)
   W_JourFerie = REPLACE(W_JourFerie,8;W_25Dec)
   W_JourFerie = REPLACE(W_JourFerie,9;W_LundiPaques)
   W_JourFerie = REPLACE(W_JourFerie,10;W_JeudiAscen)
   W_JourFerie = REPLACE(W_JourFerie,11;W_LundiPente)

RETURN

*********************************************************
*  Dtermine la valeur horaire pour vnement famille

150
   
   GOSUB 160

   * si aidant mensualis ou frquence de travail annuelle
   IF ENR_CONTRAT<5> = "M" OR ENR_CONTRAT<68,k> = "1" THEN
      GOSUB 360
   END ELSE
      IF ENR_CONTRAT<42> # "0" THEN
         W_ValeurHor =INT((ENR_CONTRAT<42> * (6/5)) + (1/2))
      END ELSE
	   W_ValeurHor="0"
      END
   END

   * si valeur horaire gale  0
   IF W_ValeurHor = "0" THEN
      W_Temp=(ENR_CONTRAT<45> / ENR_CONTRAT<44>) * 100
      IF W_Temp # "0" THEN
         W_ValeurHor =INT((W_Temp * (6/5)) + (1/2))
      END
   END
      
   * si valeur horaire toujours gale  0
   IF W_ValeurHor = "0" THEN
      GOSUB 360
   END

RETURN

*********************************************************
   * recherche de l'avenant actif au dbut de l'arrt
160

   W_ValeurHor = 0
   W_DebAbs = W_CleAbs[8,5]

   * recherche de l'avenant actif au dbut de l'arrt
   k = DCOUNT(ENR_CONTRAT<14>,CHAR(253))

   LOOP 
   WHILE ENR_CONTRAT<15,k> > W_DebAbs DO
      k=k-1
   REPEAT

RETURN
*********************************************************
*  procdure si code absence = "12" et "13" (congs sans solde ou parental)

300

   GOSUB 160

   * si aidant mensualis ou frquence de travail annuelle
   IF ENR_CONTRAT<5> = "M" OR ENR_CONTRAT<68,k> = "1" THEN
      IF W_CodeAbs="13" THEN
         GOSUB 650
      END ELSE
         GOSUB 360
      END

      W_JourAbs = 0
      W_CleAbsGen = W_CleAbs
      GOSUB 50
      W_JourRestant = W_JourAbs * 100
      W_NbreHreRestant = INT(((W_ValeurHor * W_JourRestant)/100) + (1/2))
	IF W_CodeAbs="12" THEN
         IF (W_DatFinAbs-W_DatDebAbs+1) = (W_DatFinPeriode-W_DatDebPeriode+1) THEN
            W_JourRestant =(W_DatFinAbs-W_DatDebAbs+1)*100
   	      BEGIN CASE
      	   CASE ENR_CONTRAT<25,k> = "1"
           		W_NbreHreRestant = INT((ENR_CONTRAT<24,k>*52/12) + (1/2))
      	   CASE ENR_CONTRAT<25,k> = "2"
          		W_NbreHreRestant = INT((ENR_CONTRAT<24,k>*26/12) + (1/2))
    		   CASE ENR_CONTRAT<25,k> = "3"
         		W_NbreHreRestant = INT((ENR_CONTRAT<24,k>) + (1/2))
       	   CASE ENR_CONTRAT<25,k> = "4"
           	      W_NbreHreRestant = INT((ENR_CONTRAT<24,k>/12) + (1/2))
   		END CASE
         END
      END
      W_JourAbsAidant = W_JourAbsAidant + W_JourRestant
      W_NbreHreAidant = W_NbreHreAidant + W_NbreHreRestant 

   END

RETURN

*********************************************************
*  Recherche de la valeur horaire en ouvr

360

   BEGIN CASE
      CASE ENR_CONTRAT<25,k> = "1"
         W_ValeurHor = INT((ENR_CONTRAT<24,k>/5) + (1/2))
      CASE ENR_CONTRAT<25,k> = "2"
         W_ValeurHor = INT((ENR_CONTRAT<24,k>/10) + (1/2))
      CASE ENR_CONTRAT<25,k> = "3"
         W_ValeurHor = INT((ENR_CONTRAT<24,k>*12/260) + (1/2))
      CASE ENR_CONTRAT<25,k> = "4"
         W_ValeurHor = INT((ENR_CONTRAT<24,k>/260) + (1/2))
   END CASE

RETURN

*********************************************************
*  procdure si code absence = "14" et "15" (congs pays ou fractionnement)

400

   IF ENR_CONTRAT<31> = "0" THEN
      W_JourAbs = 0
      W_CleAbsGen = W_CleAbs
      GOSUB 50
      W_JourAbs = W_JourAbs * 100

      IF W_CodeAbs = "14" THEN
         IF ENR_CONTRAT<39> < W_JourAbs THEN

            W_Temp = W_JourAbs - ENR_CONTRAT<39>

            IF W_Temp > 0 THEN
               W_Temp=W_Temp - ENR_CONTRAT<41>
            END
            IF W_Temp > 0 THEN
               W_Temp=W_Temp - ENR_CONTRAT<48>
            END
            IF ENR_CONTRAT<1> # "02" THEN
               IF W_Temp > 0 THEN
                  W_Temp=W_Temp - (ENR_CONTRAT<44> - ENR_CONTRAT<83>)
               END
            END
            IF W_Temp > 0 THEN

               W_JourRestant= W_Temp
               W_JourAIndemniser  = W_JourAbs - W_Temp
            END ELSE
               W_JourAIndemniser = W_JourAbs
            END
         END ELSE
            W_JourAIndemniser = W_JourAbs
         END
         W_Pos=ENR_CONTRAT<39> + ENR_CONTRAT<41> + ENR_CONTRAT<48> 
         IF ENR_CONTRAT<1> # "02" THEN
            W_Pos=W_Pos + (ENR_CONTRAT<44> - ENR_CONTRAT<83>)
         END

      END ELSE
         IF ENR_CONTRAT<41> < W_JourAbs THEN
            W_JourAIndemniser = ENR_CONTRAT<41>
            W_JourRestant = W_JourAbs - ENR_CONTRAT<41>
         END ELSE
            W_JourAIndemniser = W_JourAbs
         END
         W_Pos=ENR_CONTRAT<41>
      END

      IF W_CongeP # "0" THEN
         W_Var=W_Pos - W_CongeP     
         W_JourRestant=W_JourRestant + (W_JourAIndemniser-W_Var)
         IF W_JourRestant < 0 THEN
            W_JourRestant=0
         END ELSE
            W_JourAIndemniser= W_Var
         END
      END
      W_CongeP=W_CongeP + W_JourAIndemniser  

      GOSUB 450

      W_NbreHreIndem = (W_JourAIndemniser * W_ValeurHor) / 100
      W_NbreHreRestant = (W_JourRestant * W_ValeurHor) / 100

   END 

RETURN

*********************************************************
*  recherche la valeur horaire pour congs pays ou fractionnement

450

   GOSUB 160

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

   IF W_CodeAbs = "16" THEN
      W_ConvCol = ENR_CONVENTIONCOL<12>
   END ELSE
      W_ConvCol = ENR_CONVENTIONCOL<2>
   END

   IF ENR_CONTRAT<5> = "M" OR ENR_CONTRAT<68,k> = "1" THEN
      W_Difference=""
      IF W_ConvCol = "2" THEN

         BEGIN CASE
            CASE ENR_CONTRAT<25,k> = "1"
               W_MoyJour = INT((ENR_CONTRAT<24,k>/6) + (1/2))
            CASE ENR_CONTRAT<25,k> = "2"
               W_MoyJour = INT((ENR_CONTRAT<24,k>/12) + (1/2))
            CASE ENR_CONTRAT<25,k> = "3"
               W_MoyJour = INT((ENR_CONTRAT<24,k>*12/313) + (1/2))
            CASE ENR_CONTRAT<25,k> = "4"
               W_MoyJour = INT((ENR_CONTRAT<24,k>/313) + (1/2))
         END CASE
         W_MoyJourMont = INT(((W_MoyJour * ENR_CONTRAT<23,k>)/1000) + (1/2))

         IF W_MoyJourMont >= ENR_CONTRAT<43> THEN
            W_ValeurHor = W_MoyJour
         END ELSE
            W_ValeurHor = W_MoyJour
            W_Difference = ENR_CONTRAT<43> - W_MoyJourMont
         END
      END ELSE
         BEGIN CASE
            CASE ENR_CONTRAT<25,k> = "1"
               W_MoyJour = INT((ENR_CONTRAT<24,k>/5) + (1/2))
            CASE ENR_CONTRAT<25,k> = "2"
               W_MoyJour = INT((ENR_CONTRAT<24,k>/10) + (1/2))
            CASE ENR_CONTRAT<25,k> = "3"
               W_MoyJour = INT((ENR_CONTRAT<24,k>*12/260) + (1/2))
            CASE ENR_CONTRAT<25,k> = "4"
               W_MoyJour = INT((ENR_CONTRAT<24,k>/260) + (1/2))
         END CASE 
         W_Att42 = INT((ENR_CONTRAT<42>*6/5) + (1/2))
         W_Att43 = INT((ENR_CONTRAT<43>*6/5) + (1/2))
         W_MoyJourMont = INT(((W_MoyJour * ENR_CONTRAT<23,k>)/1000) + (1/2))

         IF W_MoyJourMont >= W_Att43 THEN
            W_ValeurHor = W_MoyJour
         END ELSE
            W_ValeurHor = W_Att42
            W_Difference = W_Att43 - W_MoyJourMont
         END
      END
   END ELSE
      IF W_ConvCol = "2" THEN
         W_ValeurHor = ENR_CONTRAT<42>
      END ELSE
         W_ValeurHor = INT((ENR_CONTRAT<42>*6/5) + (1/2))
      END
   END

RETURN

*********************************************************
*  gnre la rubrique 821 (indemnit compensatrice de congs pays)

460

   W_MontantIndemComp = INT(((W_JourAbs * W_Difference) / 100)+(1/2))
   W_Cle = W_RequeteContrat<j>:W_Periode
   W_CodeRub = "821"
   IF ENR_CONTRAT<6> = "A" THEN
      READ ENR_DETAILADMIN FROM F.DETAILADMIN,W_Cle ELSE 
         W_Creer = "VRAI"
         ENR_DETAILADMIN = ""
      END
      W_TabDyn=""
      W_TabDyn = ENR_DETAILADMIN
      W_Att = 1
      W_AttAbs = 7
      W_Indice=0
      GOSUB 1500
      IF  W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
         ENR_DETAILADMIN = REPLACE(ENR_DETAILADMIN,1,W_Indice;W_CodeRub)
         ENR_DETAILADMIN = REPLACE(ENR_DETAILADMIN,7,W_Indice;W_CleAbs)
         ENR_DETAILADMIN = REPLACE(ENR_DETAILADMIN,4,W_Indice;ENR_DETAILADMIN<4,W_Indice>+W_MontantIndemComp)
         ENR_DETAILADMIN = REPLACE(ENR_DETAILADMIN,6,W_Indice;ENR_DETAILADMIN<6,W_Indice>+W_JourAbs)
         ENR_DETAILADMIN = REPLACE(ENR_DETAILADMIN,2,W_Indice;"0")
         ENR_DETAILADMIN = REPLACE(ENR_DETAILADMIN,3,W_Indice;"0")   
         ENR_DETAILADMIN = REPLACE(ENR_DETAILADMIN,5,W_Indice;"NON")
*         WRITE ENR_DETAILADMIN ON F.DETAILADMIN,W_Cle
         W_Creer = "FAUX"
      END ELSE
         ENR_DETAILADMIN = REPLACE(ENR_DETAILADMIN,1,W_Indice;W_CodeRub)
         ENR_DETAILADMIN = REPLACE(ENR_DETAILADMIN,7,W_Indice;W_CleAbs)
         ENR_DETAILADMIN = REPLACE(ENR_DETAILADMIN,4,W_Indice;W_MontantIndemComp)
         ENR_DETAILADMIN = REPLACE(ENR_DETAILADMIN,6,W_Indice;W_JourAbs)
         ENR_DETAILADMIN = REPLACE(ENR_DETAILADMIN,2,W_Indice;"0")
         ENR_DETAILADMIN = REPLACE(ENR_DETAILADMIN,3,W_Indice;"0")   
         ENR_DETAILADMIN = REPLACE(ENR_DETAILADMIN,5,W_Indice;"NON")
*         WRITE ENR_DETAILADMIN ON F.DETAILADMIN,W_Cle
         W_Creer = "FAUX"
      END
   END ELSE
      W_CountActivite = DCOUNT(ENR_CONTRAT<36>,CHAR(253))
      FOR m = 1 TO W_CountActivite
         READ ENR_ACTIVITES FROM F.ACTIVITES,ENR_CONTRAT<36,m> ELSE ENR_ACTIVITES=""
         BEGIN CASE 
            CASE ENR_ACTIVITES<12> = "P"
               GOSUB 470
            CASE ENR_ACTIVITES<12> = "M"
               GOSUB 480
            CASE ENR_ACTIVITES<12> = "I"
               GOSUB 490
         END CASE
      NEXT m
   END

RETURN

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

470
   
   READ ENR_DETAILPREST FROM F.DETAILPREST,W_Cle ELSE 
      W_Creer = "VRAI"
      ENR_DETAILPREST = ""
   END
   W_TabDyn=""
   W_TabDyn = ENR_DETAILPREST
   W_Att = 5
   W_AttAbs = 15
   W_Indice = 0
   GOSUB 1500
   IF  W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
      ENR_DETAILPREST = REPLACE(ENR_DETAILPREST,5,W_Indice;W_CodeRub)
      ENR_DETAILPREST = REPLACE(ENR_DETAILPREST,15,W_Indice;W_CleAbs)
      ENR_DETAILPREST = REPLACE(ENR_DETAILPREST,8,W_Indice;ENR_DETAILPREST<8,W_Indice>+W_MontantIndemComp)
      ENR_DETAILPREST = REPLACE(ENR_DETAILPREST,14,W_Indice;ENR_DETAILPREST<14,W_Indice>+W_JourAbs)
      ENR_DETAILPREST = REPLACE(ENR_DETAILPREST,6,W_Indice;"0")
      ENR_DETAILPREST = REPLACE(ENR_DETAILPREST,7,W_Indice;"0")
*      WRITE ENR_DETAILPREST ON F.DETAILPREST,W_Cle
      W_Creer = "FAUX"
   END ELSE
      ENR_DETAILPREST = REPLACE(ENR_DETAILPREST,5,W_Indice;W_CodeRub)
      ENR_DETAILPREST = REPLACE(ENR_DETAILPREST,15,W_Indice;W_CleAbs)
      ENR_DETAILPREST = REPLACE(ENR_DETAILPREST,8,W_Indice;W_MontantIndemComp)
      ENR_DETAILPREST = REPLACE(ENR_DETAILPREST,14,W_Indice;W_JourAbs)
      ENR_DETAILPREST = REPLACE(ENR_DETAILPREST,6,W_Indice;"0")
      ENR_DETAILPREST = REPLACE(ENR_DETAILPREST,7,W_Indice;"0")
*      WRITE ENR_DETAILPREST ON F.DETAILPREST,W_Cle
      W_Creer = "FAUX"
   END
RETURN

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

480
   
   READ ENR_DETAILMANDAT FROM F.DETAILMANDAT,W_Cle ELSE 
      W_Creer = "VRAI"
      ENR_DETAILMANDAT = ""
   END
   W_TabDyn=""
   W_TabDyn = ENR_DETAILMANDAT
   W_Att = 1
   W_AttAbs = 7
   W_Indice = 0
   GOSUB 1500
   IF  W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
      ENR_DETAILMANDAT = REPLACE(ENR_DETAILMANDAT,1,W_Indice;W_CodeRub)
      ENR_DETAILMANDAT = REPLACE(ENR_DETAILMANDAT,7,W_Indice;W_CleAbs)
      ENR_DETAILMANDAT = REPLACE(ENR_DETAILMANDAT,4,W_Indice;ENR_DETAILMANDAT<4,W_Indice>+W_MontantIndemComp)
      ENR_DETAILMANDAT = REPLACE(ENR_DETAILMANDAT,6,W_Indice;ENR_DETAILMANDAT<6,W_Indice>+W_JourAbs)
      ENR_DETAILMANDAT = REPLACE(ENR_DETAILMANDAT,2,W_Indice;"0")
      ENR_DETAILMANDAT = REPLACE(ENR_DETAILMANDAT,3,W_Indice;"0")
*      WRITE ENR_DETAILMANDAT ON F.DETAILMANDAT,W_Cle
      W_Creer = "FAUX"
   END ELSE
      ENR_DETAILMANDAT = REPLACE(ENR_DETAILMANDAT,1,W_Indice;W_CodeRub)
      ENR_DETAILMANDAT = REPLACE(ENR_DETAILMANDAT,7,W_Indice;W_CleAbs)
      ENR_DETAILMANDAT = REPLACE(ENR_DETAILMANDAT,4,W_Indice;W_MontantIndemComp)
      ENR_DETAILMANDAT = REPLACE(ENR_DETAILMANDAT,6,W_Indice;W_JourAbs)
      ENR_DETAILMANDAT = REPLACE(ENR_DETAILMANDAT,2,W_Indice;"0")
      ENR_DETAILMANDAT = REPLACE(ENR_DETAILMANDAT,3,W_Indice;"0")
*      WRITE ENR_DETAILMANDAT ON F.DETAILMANDAT,W_Cle
      W_Creer = "FAUX"
   END

RETURN

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

490
   
   READ ENR_DETAILINTER FROM F.DETAILINTER,W_Cle ELSE 
      W_Creer = "VRAI"
      ENR_DETAILINTER = ""
   END
   W_TabDyn=""
   W_TabDyn = ENR_DETAILINTER
   W_Att = 8
   W_AttAbs = 14
   W_Indice = 0
   GOSUB 1500
   IF  W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
      ENR_DETAILINTER = REPLACE(ENR_DETAILINTER,8,W_Indice;W_CodeRub)
      ENR_DETAILINTER = REPLACE(ENR_DETAILINTER,14,W_Indice;W_CleAbs)
      ENR_DETAILINTER = REPLACE(ENR_DETAILINTER,11,W_Indice;ENR_DETAILINTER<11,W_Indice>+W_MontantIndemComp)
      ENR_DETAILINTER = REPLACE(ENR_DETAILINTER,13,W_Indice;ENR_DETAILINTER<13,W_Indice>+W_JourAbs)
      ENR_DETAILINTER = REPLACE(ENR_DETAILINTER,9,W_Indice;"0")
      ENR_DETAILINTER = REPLACE(ENR_DETAILINTER,10,W_Indice;"0")
*      WRITE ENR_DETAILINTER ON F.DETAILINTER,W_Cle
      W_Creer = "FAUX"
   END ELSE
      ENR_DETAILINTER = REPLACE(ENR_DETAILINTER,8,W_Indice;W_CodeRub)
      ENR_DETAILINTER = REPLACE(ENR_DETAILINTER,14,W_Indice;W_CleAbs)
      ENR_DETAILINTER = REPLACE(ENR_DETAILINTER,11,W_Indice;W_MontantIndemComp)
      ENR_DETAILINTER = REPLACE(ENR_DETAILINTER,13,W_Indice;W_JourAbs)
      ENR_DETAILINTER = REPLACE(ENR_DETAILINTER,9,W_Indice;"0")
      ENR_DETAILINTER = REPLACE(ENR_DETAILINTER,10,W_Indice;"0")
*      WRITE ENR_DETAILINTER ON F.DETAILINTER,W_Cle
      W_Creer = "FAUX"
   END
RETURN


*********************************************************
*  procdure si code absence = "16" (congs anciennet)

500

   W_CleAbsGen = W_CleAbs
   W_JourAbs = 0
   GOSUB 50
   W_JourAbs = W_JourAbs * 100

   IF ENR_CONTRAT<48> < W_JourAbs THEN
      W_JourAIndemniser = ENR_CONTRAT<48>
      W_JourRestant = W_JourAbs - ENR_CONTRAT<48>
   END ELSE
      W_JourAIndemniser = W_JourAbs
      W_JourRestant=0
   END

   IF W_CongeA # "0" THEN
      W_Var=ENR_CONTRAT<48> - W_CongeA     
      W_JourRestant=W_JourRestant + (W_JourAIndemniser-W_Var)
      IF W_JourRestant < 0 THEN
         W_JourRestant=0
      END ELSE
         W_JourAIndemniser= W_Var
      END
   END
   W_CongeA=W_CongeA + W_JourAIndemniser  

   GOSUB 450

   W_NbreHreIndem = (W_JourAIndemniser * W_ValeurHor)/100
   W_NbreHreRestant = (W_JourRestant * W_ValeurHor)/100

   W_JourAbsAidant = W_JourAbsAidant + W_JourRestant 
   W_NbreHreAidant = W_NbreHreAidant + W_NbreHreRestant 

RETURN

*********************************************************
*  procdure si code absence = "02" ou "03" (maternit mi-temps thrapeutique)

600

   GOSUB 160

   IF ENR_CONTRAT<5> = "M" OR ENR_CONTRAT<68,k> = "1" THEN
      W_CleAbsGen = W_CleAbs
      W_JourAbs = 0
      GOSUB 50

      W_JourRestant = W_JourAbs * 100

      GOSUB 650

      W_NbreHreRestant = INT(((W_JourRestant * W_ValeurHor)/100) + (1/2))

      IF W_CodeAbs = "03" THEN
         W_NbreHreRestant = INT((W_NbreHreRestant /2) + (1/2))
      END
      W_JourAbsAidant = W_JourAbsAidant + W_JourRestant
      W_NbreHreAidant = W_NbreHreAidant + W_NbreHreRestant 
   END


RETURN 

*********************************************************
*  Recherche de la valeur horaire en calendaire

650

   BEGIN CASE
      CASE ENR_CONTRAT<25,k> = "1"
         W_ValeurHor = INT((ENR_CONTRAT<24,k>/7) + (1/2))
      CASE ENR_CONTRAT<25,k> = "2"
         W_ValeurHor = INT((ENR_CONTRAT<24,k>/14) + (1/2))
      CASE ENR_CONTRAT<25,k> = "3"
         W_ValeurHor = INT((ENR_CONTRAT<24,k>/30) + (1/2))
      CASE ENR_CONTRAT<25,k> = "4"
         W_ValeurHor = INT((ENR_CONTRAT<24,k>/360) + (1/2))
   END CASE

RETURN

*********************************************************
*  procdure si code absence = "04"  "06" (accident travail, trajet, maladie prof.)
*  et "01" (maladie)

700

   ENR_DETAILINDEM=""
   W_TotalMont = 0
   W_SauveJourCouv1=0
   W_SauveJourCouv2=0
   W_SauveJourCouv3=0

   * recherche le nombre de jours d'absences sur la priode
   W_CleAbsGen = W_CleAbs
   W_JourAbs = 0
   GOSUB 50

   GOSUB 160
   
   * recherche la valeur horaire pour passer en heures d'absence
   IF ENR_CONTRAT<5> = "M" OR ENR_CONTRAT<68,k> = "1" THEN
      GOSUB 650
      W_JourRestant = W_JourAbs*100
      W_NbreHreRestant = (W_JourRestant * W_ValeurHor)/100
      W_JourAbsAidant = W_JourAbsAidant + W_JourRestant 
      W_NbreHreAidant = W_NbreHreAidant + W_NbreHreRestant 
   END

   W_Mois = W_Periode[5,2]
   W_An = W_Periode[1,4]
   W_DatDebPeriode = ICONV("01/":W_Mois:"/":W_An,"D4/")
   W_Mois = W_Mois + 1
   IF W_Mois = "13" THEN
      W_Mois = "01"
      W_An = W_An + 1
   END
   W_DatFinPeriode = ICONV("01/":W_Mois:"/":W_An,"D4/")-1
   W_DatDebAbs = W_CleAbs[8,5]
   W_DatFinAbs = ENR_ABSENCESAIDANT<2>
     
   * recherche le nombre de jours d'absence de l'arrt bloqu  la fin de priode
   IF W_DatFinAbs < W_DatFinPeriode THEN
      W_JourAbsArret = W_DatFinAbs - W_DatDebAbs + 1
   END ELSE
   	W_JourAbsArret = W_DatFinPeriode - W_DatDebAbs + 1
   END

   * calcul le nombre de jour d'absence sur la priode antrieure
   W_JourAbsPeriodeAnt = W_DatDebPeriode - W_DatDebAbs
   IF W_JourAbsPeriodeAnt < 0 THEN
      W_JourAbsPeriodeAnt = 0
   END  

   IF W_CodeAbs = "01" THEN
      IF W_JourAbsPeriodeAnt < ENR_CONTRATSPREV<18> THEN
         IF W_JourAbs - ENR_CONTRATSPREV<18> < 0 THEN
            RETURN
         END
      END
   END

   * recherche l'anciennet de l'aidant
   W_AncienneteMois = (W_DatDebAbs - ENR_CONTRAT<7>)/30
   W_AncienneteAnnee = W_AncienneteMois/12
   W_AncienneteAnnee = INT(W_AncienneteAnnee * 10 +(1/2)) / 10

   * recherche le nombre de jours  indemniser sur la periode
   IF W_CodeAbs = "01" THEN
      IF W_JourAbsPeriodeAnt < ENR_CONTRATSPREV<18> THEN
         W_NbreJourAIndemniser = W_JourAbs - (ENR_CONTRATSPREV<18> - W_JourAbsPeriodeAnt)
      END ELSE
         W_NbreJourAIndemniser = W_JourAbs
      END
   END ELSE
      W_NbreJourAIndemniser = W_JourAbs
   END

   FOR z = 1 TO 2

      IF z = 2 THEN
         IF ENR_CONTRAT<1> # "02" THEN
            READ ENR_CONTRATSPREV FROM F.CONTRATSPREV,"99" ELSE ENR_CONTRATSPREV="" 
            h=1
            LOOP 
            UNTIL ENR_CONTRATSPREV<22,h>=ENR_CONTRAT<1> OR ENR_CONTRATSPREV<22,h>=""
               h=h+1
            REPEAT
            IF ENR_CONTRATSPREV<22,h>="" THEN
               EXIT 
            END 
         END ELSE
            EXIT
         END
      END
      W_JourCouv1 = 0
      W_JourCouv2 = 0
      W_JourCouv3 = 0

      READ ENR_HISTORINDEM FROM F.HISTORINDEM,W_RequeteContrat<j> THEN
 
         * compte sur les 12 mois prcdents l'arrt le nbre de jour indemniss pour chaque couverture
         W_DateDebutAbsence=OCONV(W_DatDebAbs,"D4/")
         W_An = W_DateDebutAbsence[7,4]
         W_Mois = W_DateDebutAbsence[4,2]
         W_An = W_An - 1 
         l=1

         LOOP
         UNTIL ENR_HISTORINDEM<1,l> < W_An:W_Mois OR ENR_HISTORINDEM<1,l> = "" DO
            W_JourCouv1 = W_JourCouv1 + ENR_HISTORINDEM<2,l>
            W_JourCouv2 = W_JourCouv2 + ENR_HISTORINDEM<3,l>
            W_JourCouv3 = W_JourCouv3 + ENR_HISTORINDEM<4,l>
            l=l+1
         REPEAT

      END

      * recherche la tranche des couvertures dans CONTRATSPREV
      m = 1
      LOOP
      UNTIL INT(W_AncienneteAnnee*100) >= INT(ENR_CONTRATSPREV<24,m>) AND INT(W_AncienneteAnnee*100) < INT(ENR_CONTRATSPREV<25,m>) OR ENR_CONTRATSPREV<24,m> = "" DO
         m=m+1
      REPEAT

      W_JourPosCouv1 = 0
      W_JourPosCouv2 = 0
      W_JourPosCouv3 = 0

      * recherche droit  consommer pour chaque couverture
      IF z=2 THEN
         IF ENR_CONTRATSPREV<27,m> # 0 THEN
            W_JourPosCouv1 = ENR_CONTRATSPREV<26,m> - W_JourCouv1
         END
         IF ENR_CONTRATSPREV<29,m> # 0 THEN
            W_JourPosCouv2 = ENR_CONTRATSPREV<28,m> - W_JourCouv2
         END
         IF ENR_CONTRATSPREV<31,m> # 0 THEN
            W_JourPosCouv3 = ENR_CONTRATSPREV<30,m> - W_JourCouv3
         END
      END ELSE
         W_JourPosCouv1 = ENR_CONTRATSPREV<26,m> - W_JourCouv1
         W_JourPosCouv2 = ENR_CONTRATSPREV<28,m> - W_JourCouv2
         W_JourPosCouv3 = ENR_CONTRATSPREV<30,m> - W_JourCouv3
      END
      IF W_JourPosCouv1 < 0 THEN
	   W_JourPosCouv1=0
      END
      IF W_JourPosCouv2 < 0 THEN
	   W_JourPosCouv2=0
      END
      IF W_JourPosCouv3 < 0 THEN
	   W_JourPosCouv3=0
      END

      * recherche le salaire de rfrence journalier
      l = 1
      LOOP
      UNTIL ENR_ABSENCESAIDANT<13,l> = W_CodAssoc OR ENR_ABSENCESAIDANT<13,l> = "" DO
         l=l+1
      REPEAT
      W_SalRefBrut = ENR_ABSENCESAIDANT<14,l>
      W_SalRef = INT((ENR_ABSENCESAIDANT<14,l>/30) + (1/2))

      * rpartit le nombre de jour dans les # couvertures
      IF W_JourPosCouv1 >= W_NbreJourAIndemniser THEN
         W_JourCouv1 = W_NbreJourAIndemniser
         W_JourCouv2 = 0
         W_JourCouv3 = 0
      END ELSE
         W_JourCouv1 = W_JourPosCouv1
         W_Diff = W_NbreJourAIndemniser - W_JourCouv1
         IF W_JourPosCouv2 >= W_Diff THEN
            W_JourCouv2 = W_Diff
            W_JourCouv3 = 0
         END ELSE
            W_JourCouv2 = W_JourPosCouv2
            W_Diff = W_NbreJourAIndemniser - W_JourCouv1 - W_JourCouv2
            IF W_JourPosCouv3 >= W_Diff THEN
               W_JourCouv3 = W_Diff
            END ELSE
               W_JourCouv3 = W_JourPosCouv3
            END
         END
      END

      IF W_CodeAbs = "01" THEN
         GOSUB 720
      END ELSE
         GOSUB 710
      END

      * remise  zro des variables
      W_JourCouv1IJSS1 = 0
      W_JourCouv2IJSS1 = 0
      W_JourCouv3IJSS1 = 0
      W_JourCouv1IJSS2 = 0
      W_JourCouv2IJSS2 = 0
      W_JourCouv3IJSS2 = 0
      * rpartit le nombre de jours IJSS 1 et 2 dans les diffrentes couvertures prvoyance

      IF W_JourCouv1 >= W_NbreJourIJSS1 THEN
         W_JourCouv1IJSS1 = W_NbreJourIJSS1 
         W_Couv1Pos = W_JourCouv1 - W_NbreJourIJSS1
         IF W_Couv1Pos >= W_NbreJourIJSS2 THEN
            W_JourCouv1IJSS2 = W_NbreJourIJSS2
         END ELSE
            W_JourCouv1IJSS2 = W_Couv1Pos
            W_Reste = W_NbreJourIJSS2 - W_Couv1Pos
            IF W_Reste <= W_JourCouv2 THEN
               W_JourCouv2IJSS2 = W_Reste
            END ELSE
               W_JourCouv2IJSS2 = W_JourCouv2
               W_Diff = W_Reste - W_JourCouv2
               IF W_Diff <= W_JourCouv3 THEN
                  W_JourCouv3IJSS2 = W_Diff
               END ELSE
                  W_JourCouv3IJSS2 = W_JourCouv3
               END
            END
         END
      END ELSE

         W_JourCouv1IJSS1 = W_JourCouv1
         W_Reste = W_NbreJourIJSS1 - W_JourCouv1
         IF W_Reste <= W_JourCouv2 THEN
            W_JourCouv2IJSS1 = W_Reste
            W_Couv2Pos = W_JourCouv2 - W_JourCouv2IJSS1
            IF W_NbreJourIJSS2 <= W_Couv2Pos THEN
               W_JourCouv2IJSS2 = W_NbreJourIJSS2
            END ELSE
               W_JourCouv2IJSS2 = W_Couv2Pos
               W_Reste = W_NbreJourIJSS2 - W_JourCouv2IJSS2
               IF W_Reste <= W_JourCouv3 THEN
                  W_JourCouv3IJSS2 = W_Reste
               END ELSE
                  W_JourCouv3IJSS2 = W_JourCouv3
               END
            END
         END ELSE
            W_JourCouv2IJSS1 = W_JourCouv2
            W_Diff = W_Reste - W_JourCouv2
            IF W_Diff <= W_JourCouv3 THEN
               W_JourCouv3IJSS1 = W_Diff
            END ELSE
               W_JourCouv3IJSS1 = W_JourCouv3
            END
         END
      END    
   
      W_SauveJourCouv1=W_SauveJourCouv1 + W_JourCouv1IJSS1 + W_JourCouv1IJSS2
      W_SauveJourCouv2=W_SauveJourCouv2 + W_JourCouv2IJSS1 + W_JourCouv2IJSS2
      W_SauveJourCouv3=W_SauveJourCouv3 + W_JourCouv3IJSS1 + W_JourCouv3IJSS2

      * rajuste le nombre de jour IJSS1 selon la carence
      IF W_CodeAbs = "01" THEN
         IF ENR_CONTRATSPREV<18> < 3 THEN
            IF W_JourAbsArret - W_JourAbs < 3 THEN
   *            IF W_JourCouv1IJSS1 # 0 THEN
                  W_Sauv1IJSS1 = W_JourCouv1IJSS1
                  W_JourCouv1IJSS1 = W_JourCouv1IJSS1 - (3-(W_JourAbsArret - W_JourAbs))
                  W_CarenceIJSS = 3 - W_Sauv1IJSS1
                  IF W_JourCouv1IJSS1 < 0 THEN
                     W_JourCouv1IJSS1 = 0
                     IF W_CarenceIJSS > 0 AND W_JourCouv2IJSS1 # 0 THEN
                        W_Sauv2IJSS1 = W_JourCouv2IJSS1
                        W_JourCouv2IJSS1 = W_JourCouv2IJSS1 - (W_CarenceIJSS - (W_JourAbsArret - W_JourAbs))
                        W_CarenceIJSS = W_CarenceIJSS - W_Sauv2IJSS1
                        IF W_JourCouv2IJSS1 < 0 THEN
                           W_JourCouv2IJSS1 = 0
                           IF W_CarenceIJSS > 0 AND W_JourCouv3IJSS1 # 0 THEN
                              W_JourCouv3IJSS1 = W_JourCouv3IJSS1 - (W_CarenceIJSS - (W_JourAbsArret - W_JourAbs))
                              IF W_JourCouv3IJSS1 < 0 THEN
                                 W_JourCouv3IJSS1 = 0
                              END
                           END
                        END
                     END
                  END
   *            END
            END
         END
      END

      * calculer montant IJSS
      IF W_CodeAbs = "01" THEN
         W_MontantIJSS1 = INT((W_SalRef * 50 / 100) + (1/2))
         W_MontantIJSS2 = INT((W_SalRef * 66 / 100) + (1/2))
      END ELSE
         W_MontantIJSS1 = INT((W_SalRef * 60 / 100) + (1/2))
         W_MontantIJSS2 = INT((W_SalRef * 80 / 100) + (1/2))
      END

      * remplit un tableau dynamique avec les # variables
      W_TabVar = REPLACE(W_TabVar,1;W_JourCouv1IJSS1)
      W_TabVar = REPLACE(W_TabVar,2;W_JourCouv2IJSS1)
      W_TabVar = REPLACE(W_TabVar,3;W_JourCouv3IJSS1)
      W_TabVar = REPLACE(W_TabVar,4;W_JourCouv1IJSS2)
      W_TabVar = REPLACE(W_TabVar,5;W_JourCouv2IJSS2)
      W_TabVar = REPLACE(W_TabVar,6;W_JourCouv3IJSS2)

      IF ENR_CONTRATSPREV<40>="1" THEN
         * remplit le fichier DETAILINDEM
         GOSUB 730
      END

      * remplit le fichier HISTORINDEM
      READ ENR_HISTORINDEM FROM F.HISTORINDEM,W_RequeteContrat<j> THEN
         W_Count = DCOUNT(ENR_HISTORINDEM<1>,CHAR(253))

         W_Trouve = "FAUX"
         FOR l = 1 TO W_Count
            IF W_Periode = ENR_HISTORINDEM<1,l> THEN
               ENR_HISTORINDEM = REPLACE(ENR_HISTORINDEM,2,l;W_SauveJourCouv1)
               ENR_HISTORINDEM = REPLACE(ENR_HISTORINDEM,3,l;W_SauveJourCouv2)
               ENR_HISTORINDEM = REPLACE(ENR_HISTORINDEM,4,l;W_SauveJourCouv3)
               W_Trouve = "VRAI"
               EXIT
            END
         NEXT l

         IF W_Trouve = "FAUX" THEN
            FOR l = 1 TO W_Count
               IF ENR_HISTORINDEM<1,l> > W_Periode AND W_Periode > ENR_HISTORINDEM<1,l+1> THEN
                  ENR_HISTORINDEM = INSERT(ENR_HISTORINDEM,1,l+1;W_Periode)
                  ENR_HISTORINDEM = INSERT(ENR_HISTORINDEM,2,l+1;W_SauveJourCouv1)
                  ENR_HISTORINDEM = INSERT(ENR_HISTORINDEM,3,l+1;W_SauveJourCouv2)
                  ENR_HISTORINDEM = INSERT(ENR_HISTORINDEM,4,l+1;W_SauveJourCouv3)
                  W_Trouve = "VRAI"
                  EXIT
               END
            NEXT l
         END
         IF W_Trouve = "FAUX" THEN
            ENR_HISTORINDEM = INSERT(ENR_HISTORINDEM,1,1;W_Periode)
            ENR_HISTORINDEM = INSERT(ENR_HISTORINDEM,2,1;W_SauveJourCouv1)
            ENR_HISTORINDEM = INSERT(ENR_HISTORINDEM,3,1;W_SauveJourCouv2)
            ENR_HISTORINDEM = INSERT(ENR_HISTORINDEM,4,1;W_SauveJourCouv3)
         END

      END ELSE
         ENR_HISTORINDEM = ""
         ENR_HISTORINDEM = REPLACE(ENR_HISTORINDEM,1,1;W_Periode)
         ENR_HISTORINDEM = REPLACE(ENR_HISTORINDEM,2,1;W_SauveJourCouv1)
         ENR_HISTORINDEM = REPLACE(ENR_HISTORINDEM,3,1;W_SauveJourCouv2)
         ENR_HISTORINDEM = REPLACE(ENR_HISTORINDEM,4,1;W_SauveJourCouv3)
      END
*      WRITE ENR_HISTORINDEM ON F.HISTORINDEM,W_RequeteContrat<j>

      IF W_CodeAbs = "01" THEN
         IF W_JourAbsPeriodeAnt < ENR_CONTRATSPREV<18> THEN
            W_NbreJourAIndemniser = (W_JourAbs - (ENR_CONTRATSPREV<18> - W_JourAbsPeriodeAnt))-ENR_DETAILINDEM<6>
         END ELSE
            W_NbreJourAIndemniser = W_JourAbs-ENR_DETAILINDEM<6>
         END
      END ELSE
         W_NbreJourAIndemniser = W_JourAbs-ENR_DETAILINDEM<6>
      END

   NEXT z   

RETURN

*********************************************************
*  dtermine le nombre de jours sur la priode avec IJSS  60 et 80 %

710

   W_Temp = ENR_ABSENCESAIDANT<2> - W_DatDebAbs + 1

   IF W_Temp > 28 THEN
      W_NbreJourIJSS60 = 28
      W_NbreJourIJSS80 = W_Temp - 28
   END ELSE
      W_NbreJourIJSS60 = W_Temp
      W_NbreJourIJSS80 = 0
   END

   W_Mois = W_Periode[5,2]
   W_An = W_Periode[1,4]
   W_DatDebPeriode = ICONV("01/":W_Mois:"/":W_An,"D4/")
   W_Mois = W_Mois + 1
   IF W_Mois = "13" THEN
      W_Mois = "01"
      W_An = W_An + 1
   END
   W_DatFinPeriode = ICONV("01/":W_Mois:"/":W_An,"D4/")-1

   IF W_DatDebAbs < W_DatDebPeriode THEN
      W_Diff = W_DatDebPeriode - W_DatDebAbs 

      IF W_Diff >= W_NbreJourIJSS60 THEN
         W_NbreJourIJSS60 = 0
         W_NbreJourIJSS80 = W_NbreJourIJSS80 - (W_Diff - 28)
      END ELSE
         W_NbreJourIJSS60 = 28 - W_Diff
      END
   END
   IF W_DatFinPeriode - W_DatDebPeriode + 1 < W_NbreJourIJSS80 THEN
      W_NbreJourIJSS80 = W_DatFinPeriode - W_DatDebPeriode + 1
   END ELSE
      IF W_DatFinPeriode < ENR_ABSENCESAIDANT<2> THEN
         IF W_Diff <= W_NbreJourIJSS60 THEN
            W_NbreJourIJSS60 = W_Diff
            W_NbreJourIJSS80 = 0
         END ELSE
            W_NbreJourIJSS80 = (W_DatFinPeriode - W_DatDebAbs + 1) - 28
         END
      END
   END
   W_NbreJourIJSS1 = W_NbreJourIJSS60
   W_NbreJourIJSS2 = W_NbreJourIJSS80

RETURN

*********************************************************
*  dtermine le nombre de jours sur la priode avec IJSS  50 et 66 %

720

      W_Aidant = W_CleAbs[1,5]
      READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_Aidant ELSE ENR_CIVILAIDANT=""
      W_Count = DCOUNT(ENR_CIVILAIDANT<25>,CHAR(253))
      W_Enfant = 0
      FOR l = 1 TO W_Count
         IF ENR_CIVILAIDANT<25,l> = "1" THEN
            W_DateDebArret = OCONV(W_DatDebAbs,"D4/")
            W_DateNais = OCONV(ENR_CIVILAIDANT<24,l>,"D4/")
            W_AnneeFaite = W_DateDebArret[7,4] - W_DateNais[7,4]
            W_MoisFait = W_DateDebArret[4,2] - W_DateNais[4,2]
            W_JourFait = W_DateDebArret[1,2] - W_DateNais[1,2]
            IF W_JourFait < 0 THEN
               W_MoisFait = W_MoisFait - 1
            END
            IF W_MoisFait < 0 THEN
               W_AnneeFaite = W_AnneeFaite - 1
            END
            IF W_AnneeFaite < 26 THEN
               W_Enfant = W_Enfant + 1
            END
         END
      NEXT l 
      IF W_Enfant >= 3 THEN
         W_DatDebIJSS66 = W_DatDebAbs + 30
         IF W_DatDebIJSS66 < W_DatDebPeriode THEN
            W_NbreJourIJSS50 = 0
            W_NbreJourIJSS66 = W_JourAbs
         END ELSE
            IF W_DatDebIJSS66 > W_DatFinPeriode THEN
               W_NbreJourIJSS50 = W_JourAbs
               W_NbreJourIJSS66 = 0
            END ELSE
               W_NbreJourIJSS50 = 30 - W_JourAbsPeriodeAnt
               W_NbreJourIJSS66 = W_JourAbs - W_NbreJourIJSS50
            END
         END
      END ELSE
         W_NbreJourIJSS50 = W_JourAbs
         W_NbreJourIJSS66 = 0
      END
   W_NbreJourIJSS1 = W_NbreJourIJSS50
   W_NbreJourIJSS2 = W_NbreJourIJSS66

RETURN

*********************************************************
*  Mise  jour fichiers DETAILINDEM

730

   W_Count = DCOUNT(ENR_DETAILINDEM<1>,CHAR(253))

   READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,ENR_CONTRAT<1> ELSE ENR_CONVENTIONCOL=""
   W_CleDetailIndem=W_RequeteContrat<j>:W_Periode:W_CodeAbs:W_DatDebAbs
   READ ENR_DETAILINDEM FROM F.DETAILINDEM,W_CleDetailIndem ELSE ENR_DETAILINDEM=""

   FOR l = 1 TO 6
      IF z = 2 AND (l=1 OR l=4) THEN
         * rien
      END ELSE      
         IF W_TabVar<l> > 0 THEN
            W_Count = W_Count + 1
            IF l <= 3 THEN
               ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,1,W_Count;W_MontantIJSS1) 
               W_Temp = W_TabVar<1> + W_TabVar<2> + W_TabVar<3> 
            END ELSE
               ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,1,W_Count;W_MontantIJSS2) 
               W_Temp = W_TabVar<4> + W_TabVar<5> + W_TabVar<6>  
            END
            ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,2,W_Count;W_Temp) 
            BEGIN CASE
               CASE l = 1 OR l = 4
                  ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,3,W_Count;ENR_CONTRATSPREV<27,m>)
               CASE l = 2 OR l = 5
                  ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,3,W_Count;ENR_CONTRATSPREV<29,m>)
               CASE l = 3 OR l = 6
                  ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,3,W_Count;ENR_CONTRATSPREV<31,m>)
            END CASE
            ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,4,W_Count;W_TabVar<l>) 
            IF ENR_CONTRATSPREV<23> = "1" THEN
               W_Montant = ((W_SalRef * ENR_DETAILINDEM<3,W_Count>/100) - ENR_DETAILINDEM<1,W_Count>) * ENR_DETAILINDEM<4,W_Count>
               IF W_Montant < 0 THEN
		      W_Montant = 0
     	         END
            END ELSE
               W_SalRefNet = INT(((W_SalRef * (100 - (ENR_CONTRATSPREV<38>/1000)))/100) + (1/2))
               W_ComplementNet = (W_SalRefNet * ENR_DETAILINDEM<3,W_Count>/100) - ENR_DETAILINDEM<1,W_Count>
               W_Montant = INT((W_ComplementNet/(100 - ((ENR_CONTRATSPREV<38>/1000) * (ENR_CONTRATSPREV<39>/1000)/100))*100) + (1/2))
               W_Montant = W_Montant * W_TabVar<l>
               IF W_Montant < 0 THEN
	     	      W_Montant = 0
    	         END
            END
            ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,5,W_Count;INT(W_Montant + (1/2)))
            W_TotalMont = W_TotalMont + INT(W_Montant + (1/2))
         END
      END
   NEXT l
   IF W_CodeAbs = "01" THEN
      * recherche si des jours en couverture 1 n'ont pas d'indemnisation IJSS 
      IF W_JourCouv1 > W_JourCouv1IJSS1 + W_JourCouv1IJSS2 THEN
         W_Count = W_Count + 1
         W_Jour = W_JourCouv1 - (W_JourCouv1IJSS1 + W_JourCouv1IJSS2)
         W_Montant = W_Jour * (W_SalRef * ENR_CONTRATSPREV<27,m>/100)
         IF ENR_CONTRATSPREV<23> = "2" THEN
            W_Montant = W_Montant / (100 - ((ENR_CONTRATSPREV<38>/1000) * (ENR_CONTRATSPREV<39>/1000)))
         END
         ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,5,W_Count;INT(W_Montant + (1/2)))
         W_TotalMont = W_TotalMont + INT(W_Montant + (1/2))
         ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,1,W_Count;"0")
         ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,2,W_Count;"0")
         ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,3,W_Count;ENR_CONTRATSPREV<27,m>)
         ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,4,W_Count;W_Jour)
      END
      * recherche si des jours en couverture 2 n'ont pas d'indemnisation IJSS 
      IF W_JourCouv2 > W_JourCouv2IJSS1 + W_JourCouv2IJSS2 THEN
         W_Count = W_Count + 1
         W_Jour = W_JourCouv2 - (W_JourCouv2IJSS1 + W_JourCouv2IJSS2)
         W_Montant = W_Jour * (W_SalRef * ENR_CONTRATSPREV<29,m>/100)
         IF ENR_CONTRATSPREV<23> = "2" THEN
            W_Montant = W_Montant / (100 - ((ENR_CONTRATSPREV<38>/1000) * (ENR_CONTRATSPREV<39>/1000)))
         END
         ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,5,W_Count;INT(W_Montant + (1/2)))
         W_TotalMont = W_TotalMont + INT(W_Montant + (1/2))
         ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,1,W_Count;"0")
         ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,2,W_Count;"0")
         ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,3,W_Count;ENR_CONTRATSPREV<29,m>)
         ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,4,W_Count;W_Jour)
      END
      * recherche si des jours en couverture 3 n'ont pas d'indemnisation IJSS 
      IF W_JourCouv3 > W_JourCouv3IJSS1 + W_JourCouv3IJSS2 THEN
         W_Count = W_Count + 1
         W_Jour = W_JourCouv3 - (W_JourCouv3IJSS1 + W_JourCouv3IJSS2)
         W_Montant = W_Jour * (W_SalRef * ENR_CONTRATSPREV<31,m>/100)
         IF ENR_CONTRATSPREV<23> = "2" THEN
            W_Montant = W_Montant / (100 - ((ENR_CONTRATSPREV<38>/1000) * (ENR_CONTRATSPREV<39>/1000)))
         END
         ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,5,W_Count;INT(W_Montant + (1/2)))
         W_TotalMont = W_TotalMont + INT(W_Montant + (1/2))
         ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,1,W_Count;"0")
         ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,2,W_Count;"0")
         ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,3,W_Count;ENR_CONTRATSPREV<31,m>)
         ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,4,W_Count;W_Jour)
      END
   END

   W_Count = DCOUNT(ENR_DETAILINDEM<2>,CHAR(253))
   W_NbreJrs = 0
   FOR l = 1 TO W_Count 
      W_NbreJrs = W_NbreJrs + ENR_DETAILINDEM<4,l>
   NEXT l

   IF ENR_DETAILINDEM # "" THEN
      ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,6;W_NbreJrs)
      ENR_DETAILINDEM = REPLACE(ENR_DETAILINDEM,7;W_SalRefBrut)
      WRITE ENR_DETAILINDEM ON F.DETAILINDEM,W_CleDetailIndem 
   END

RETURN

*********************************************************
*  procdure si code absence compris entre "18" et "21" (visites mdicales)

800

   W_DatAbs = W_CleAbs[8,5]
   IF (ENR_CONTRAT<1> # "02" AND ENR_CONTRAT<2> = W_CodAssoc AND INT(ENR_CONTRAT<7>) <= INT(W_DatAbs) AND INT(ENR_CONTRAT<8>) >= INT(W_DatAbs)) OR (ENR_CONTRAT<1> # "02" AND ENR_CONTRAT<2> = W_CodAssoc AND INT(ENR_CONTRAT<7>) <= INT(W_DatAbs) AND ENR_CONTRAT<8> = "") THEN
      W_NbreHreIndem = 100
      W_JourAIndemniser = 0
      W_Stop = "VRAI"
   END

RETURN

*********************************************************
*  Mise  jour fichiers DETAIL ...

1000

   ENR_DETAILADMIN = ""
   W_Creer = "FAUX"
   W_Indice = 0
   W_Att = 0
   W_Cle = W_RequeteContrat<j>:W_Periode

   GOSUB 1100

   IF ENR_CONTRAT<6> = "A" THEN
      READ ENR_DETAILADMIN FROM F.DETAILADMIN,W_Cle THEN
         IF W_NouvelAidant=1 THEN
            W_Count=DCOUNT(ENR_DETAILADMIN<7>,CHAR(253))
            FOR k1 = W_Count TO 1 STEP -1
               IF ENR_DETAILADMIN<7,k1> # "" THEN
                  ENR_DETAILADMIN=DELETE(ENR_DETAILADMIN,1,k1)
                  ENR_DETAILADMIN=DELETE(ENR_DETAILADMIN,2,k1)
                  ENR_DETAILADMIN=DELETE(ENR_DETAILADMIN,3,k1)
                  ENR_DETAILADMIN=DELETE(ENR_DETAILADMIN,4,k1)
                  ENR_DETAILADMIN=DELETE(ENR_DETAILADMIN,5,k1)
                  ENR_DETAILADMIN=DELETE(ENR_DETAILADMIN,6,k1)
                  ENR_DETAILADMIN=DELETE(ENR_DETAILADMIN,7,k1)   
               END  
            NEXT k1
*            WRITE ENR_DETAILADMIN ON F.DETAILADMIN,W_Cle
         END
      END ELSE
         W_Creer = "VRAI"
         ENR_DETAILADMIN = ""
      END 

      W_TabDyn = ""
      W_TabDyn = ENR_DETAILADMIN
      W_Att = 1
      W_AttAbs = 7
      GOSUB 1500

      IF (W_CodeAbs = "01" AND ENR_CONTRATSPREV<21> = "0") OR (W_CodeAbs = "04" AND ENR_CONTRATSPREV<21> = "0") OR (W_CodeAbs = "05" AND ENR_CONTRATSPREV<21> = "0") OR (W_CodeAbs = "06" AND ENR_CONTRATSPREV<21> = "0") THEN
         * RIEN
	END ELSE
         IF W_CodeRub = "808" OR W_CodeRub = "807" THEN
            IF W_TotalMont # 0 THEN
     		   IF W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,1,W_Indice;W_CodeRub)
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,7,W_Indice;W_CleAbs)
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,4,W_Indice;ENR_DETAILADMIN<4,W_Indice>+W_TotalMont)
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,6,W_Indice;ENR_DETAILADMIN<6,W_Indice>+(W_JourAbs*100))
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,2,W_Indice;"0")
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,3,W_Indice;"0")
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,5,W_Indice;"NON")
*                  WRITE ENR_DETAILADMIN ON F.DETAILADMIN,W_Cle
                  W_Creer = "FAUX"
               END ELSE
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,1,W_Indice;W_CodeRub)
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,7,W_Indice;W_CleAbs)
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,4,W_Indice;W_TotalMont)
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,6,W_Indice;W_JourAbs*100)
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,2,W_Indice;"0")
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,3,W_Indice;"0")
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,5,W_Indice;"NON")
*                  WRITE ENR_DETAILADMIN ON F.DETAILADMIN,W_Cle
                  W_Creer = "FAUX"
               END
            END      
         END ELSE
            IF W_NbreHreIndem # 0 THEN
     		   IF W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,1,W_Indice;W_CodeRub)
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,7,W_Indice;W_CleAbs)
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,2,W_Indice;ENR_DETAILADMIN<2,W_Indice>+(INT(W_NbreHreIndem+(1/2))))
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,6,W_Indice;ENR_DETAILADMIN<6,W_Indice>+W_JourAIndemniser)
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,3,W_Indice;"0")
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,4,W_Indice;"0")
                  IF ENR_CONTRAT<5> = "M" THEN
                     ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,5,W_Indice;"OUI")
                  END ELSE
                     ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,5,W_Indice;"NON")
                  END
*                  WRITE ENR_DETAILADMIN ON F.DETAILADMIN,W_Cle
                  W_Creer = "FAUX"
               END ELSE
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,1,W_Indice;W_CodeRub)
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,7,W_Indice;W_CleAbs)
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,2,W_Indice;INT(W_NbreHreIndem+(1/2)))
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,6,W_Indice;W_JourAIndemniser)
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,3,W_Indice;"0")
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,4,W_Indice;"0")
                  IF ENR_CONTRAT<5> = "M" THEN
                     ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,5,W_Indice;"OUI")
                  END ELSE
                     ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,5,W_Indice;"NON")
                  END
*                  WRITE ENR_DETAILADMIN ON F.DETAILADMIN,W_Cle
                  W_Creer = "FAUX"
               END
            END
         END
      END

      * s'il reste des jours non indemniss, les passer en heures absences
      IF W_NbreHreRestant # 0 THEN
         IF ENR_CONTRAT<5> = "M" OR ENR_CONTRAT<68,k> = "1" THEN
            W_CodeRub = "815"
            W_Indice = 0
            W_TabDyn = ENR_DETAILADMIN
            GOSUB 1500
            W_NbreJourPeriode =W_DatFinPeriode-W_DatDebPeriode+1
		IF W_JourRestant >= W_NbreJourPeriode*100 THEN
   	         BEGIN CASE
      		CASE ENR_CONTRAT<25,k> = "1"
           		   W_NbreHreRestant = INT((ENR_CONTRAT<24,k>*52/12) + (1/2))
      		CASE ENR_CONTRAT<25,k> = "2"
          		   W_NbreHreRestant = INT((ENR_CONTRAT<24,k>*26/12) + (1/2))
    			CASE ENR_CONTRAT<25,k> = "3"
         		   W_NbreHreRestant = INT((ENR_CONTRAT<24,k>) + (1/2))
       		CASE ENR_CONTRAT<25,k> = "4"
         		   W_NbreHreRestant = INT((ENR_CONTRAT<24,k>/12) + (1/2))
   		   END CASE
               IF W_CodeAbs = "03" THEN
 			W_NbreHreRestant = INT((W_NbreHreRestant / 2) + (1/2))
		   END
            END ELSE
               IF W_CodeAbs = "12" OR W_CodeAbs = "14" OR W_CodeAbs = "15" OR W_CodeAbs = "16" THEN
                  W_NbreHreRestant = INT(W_ValeurHor * (W_JourRestant/100) + (1/2))
               END ELSE
   	            BEGIN CASE
      		   CASE ENR_CONTRAT<25,k> = "1"
           		      W_ValeurHor = INT((ENR_CONTRAT<24,k>*52/12) + (1/2))
           		   CASE ENR_CONTRAT<25,k> = "2"
          		      W_ValeurHor = INT((ENR_CONTRAT<24,k>*26/12) + (1/2))
    			   CASE ENR_CONTRAT<25,k> = "3"
         		      W_ValeurHor = INT((ENR_CONTRAT<24,k>) + (1/2))
       		   CASE ENR_CONTRAT<25,k> = "4"
         		      W_ValeurHor = INT((ENR_CONTRAT<24,k>/12) + (1/2))
   		      END CASE

                  W_NbreHreRestant = INT(((W_ValeurHor/W_NbreJourPeriode) * (W_JourRestant/100))+(1/2))
                  
                  IF W_CodeAbs = "03" THEN
 			   W_NbreHreRestant = INT((W_NbreHreRestant / 2) + (1/2))
		      END
               END
            END

            IF W_DatFinPeriode=W_DatFinAbs THEN
               W_NbreJourPeriode =W_DatFinPeriode-W_DatDebPeriode+1
               IF W_JourAbsAidant=W_NbreJourPeriode THEN
   	            BEGIN CASE
      		   CASE ENR_CONTRAT<25,k> = "1"
           		      W_NbreHre = INT((ENR_CONTRAT<24,k>*52/12) + (1/2))
      		   CASE ENR_CONTRAT<25,k> = "2"
          		      W_NbreHre = INT((ENR_CONTRAT<24,k>*26/12) + (1/2))
    		    	   CASE ENR_CONTRAT<25,k> = "3"
         		      W_NbreHre = INT((ENR_CONTRAT<24,k>) + (1/2))
       		   CASE ENR_CONTRAT<25,k> = "4"
         		      W_NbreHre = INT((ENR_CONTRAT<24,k>/12) + (1/2))
   	  	      END CASE
                  IF W_NbreHre # W_NbreHreAidant THEN
                     W_NbreHreRestant = W_NbreHre-W_NbreHreAidant
                  END
                END
            END

     		IF W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
               ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,1,W_Indice;W_CodeRub)
               ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,7,W_Indice;W_CleAbs)
               ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,2,W_Indice;ENR_DETAILADMIN<2,W_Indice>+(INT(W_NbreHreRestant+(1/2))))
               ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,6,W_Indice;ENR_DETAILADMIN<6,W_Indice>+W_JourRestant)
               ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,3,W_Indice;"0")
               ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,4,W_Indice;"0")
               IF (W_CodeAbs = "01" OR W_CodeAbs = "04" OR W_CodeAbs = "05") AND ENR_ABSENCESAIDANT<16>="OUI" THEN
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,5,W_Indice;"OUI")
     	         END ELSE
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,5,W_Indice;"NON")
  		   END
            END ELSE

               ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,1,W_Indice;W_CodeRub)
               ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,7,W_Indice;W_CleAbs)
               ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,2,W_Indice;INT(W_NbreHreRestant+(1/2)))
               ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,6,W_Indice;W_JourRestant)
               ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,3,W_Indice;"0")
               ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,4,W_Indice;"0")
     		   IF (W_CodeAbs = "01" OR W_CodeAbs = "04" OR W_CodeAbs = "05") AND ENR_ABSENCESAIDANT<16>="OUI" THEN
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,5,W_Indice;"OUI")
  	         END ELSE
                  ENR_DETAILADMIN=REPLACE(ENR_DETAILADMIN,5,W_Indice;"NON")
		   END
            END
*            WRITE ENR_DETAILADMIN ON F.DETAILADMIN,W_Cle
         END
      END
      IF (W_Difference # "" AND W_CodeAbs = "14") OR (W_Difference # "" AND W_CodeAbs = "15")  OR (W_Difference # "" AND W_CodeAbs = "16") THEN
         GOSUB 460
      END 
   END ELSE
      READ ENR_ACTIVITES FROM F.ACTIVITES,ENR_CONTRAT<36,1> ELSE ENR_ACTIVITES=""
      BEGIN CASE
         CASE ENR_ACTIVITES<12> = "P"
            GOSUB 1200
         CASE ENR_ACTIVITES<12> = "M"
            GOSUB 1300
         CASE ENR_ACTIVITES<12> = "I"
            GOSUB 1400
      END CASE
   END

RETURN

*********************************************************
*  Relve le code rubrique saisie

1100

   BEGIN CASE
      CASE W_CodeAbs = "07"
         W_CodeRub = "818"
      CASE W_CodeAbs >= "08" AND W_CodeAbs <= "11"
         W_CodeRub = "819"
      CASE W_CodeAbs = "14"
         W_CodeRub = "802"
      CASE W_CodeAbs = "16"
         W_CodeRub = "803"
      CASE W_CodeAbs = "15"
         W_CodeRub = "817"
      CASE W_CodeAbs = "12" OR W_CodeAbs = "13" OR W_CodeAbs = "02" OR W_CodeAbs = "03"
         W_CodeRub = "815"
      CASE W_CodeAbs = "04" OR W_CodeAbs = "05" OR W_CodeAbs = "06"
         W_CodeRub = "808"
      CASE W_CodeAbs = "01"
         W_CodeRub = "807"
      CASE W_CodeAbs >= "18" AND W_CodeAbs <= "21"
         W_CodeRub = "823"
   END CASE

RETURN

*********************************************************
*  Mise  jour du fichier DETAILPREST

1200

   ENR_DETAILPREST = ""
   READ ENR_DETAILPREST FROM F.DETAILPREST,W_Cle THEN
      IF W_NouvelAidant=1 THEN
         W_Count=DCOUNT(ENR_DETAILPREST<15>,CHAR(253))
         FOR k1 = W_Count TO 1 STEP -1
            IF ENR_DETAILPREST<15,k1> # "" THEN
               ENR_DETAILPREST=DELETE(ENR_DETAILPREST,5,k1)
               ENR_DETAILPREST=DELETE(ENR_DETAILPREST,6,k1)
               ENR_DETAILPREST=DELETE(ENR_DETAILPREST,7,k1)
               ENR_DETAILPREST=DELETE(ENR_DETAILPREST,8,k1)
               ENR_DETAILPREST=DELETE(ENR_DETAILPREST,9,k1)
               ENR_DETAILPREST=DELETE(ENR_DETAILPREST,15,k1)
               ENR_DETAILPREST=DELETE(ENR_DETAILPREST,14,k1)   
            END  
         NEXT k1
*         WRITE ENR_DETAILPREST ON F.DETAILPREST,W_Cle
      END
   END ELSE
      W_Creer = "VRAI"
      ENR_DETAILPREST = ""
   END

   W_TabDyn = ""
   W_TabDyn = ENR_DETAILPREST
   W_Att = 5
   W_AttAbs = 15

   GOSUB 1500

   IF (W_CodeAbs = "01" AND ENR_CONTRATSPREV<21> = "0") OR (W_CodeAbs = "04" AND ENR_CONTRATSPREV<21> = "0") OR (W_CodeAbs = "05" AND ENR_CONTRATSPREV<21> = "0") OR (W_CodeAbs = "06" AND ENR_CONTRATSPREV<21> = "0") THEN
      * RIEN
   END ELSE

      IF W_CodeRub = "808" OR W_CodeRub = "807" THEN
         IF W_TotalMont # 0 THEN
		IF W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
	         ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,5,W_Indice;W_CodeRub)
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,15,W_Indice;W_CleAbs)
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,8,W_Indice;ENR_DETAILPREST<8,W_Indice>+W_TotalMont)
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,14,W_Indice;ENR_DETAILPREST<14,W_Indice>+W_JourAbs*100)
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,6,W_Indice;"0")
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,7,W_Indice;"0")
*               WRITE ENR_DETAILPREST ON F.DETAILPREST,W_Cle
               W_Creer = "FAUX"
	      END ELSE
		   ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,5,W_Indice;W_CodeRub)
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,15,W_Indice;W_CleAbs)
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,8,W_Indice;W_TotalMont)
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,14,W_Indice;W_JourAbs*100)
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,6,W_Indice;"0")
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,7,W_Indice;"0")
*               WRITE ENR_DETAILPREST ON F.DETAILPREST,W_Cle
               W_Creer = "FAUX"
            END
         END
      END ELSE

         IF W_NbreHreIndem # 0 THEN

		IF W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,5,W_Indice;W_CodeRub)
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,15,W_Indice;W_CleAbs)
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,6,W_Indice;ENR_DETAILPREST<6,W_Indice>+(INT(W_NbreHreIndem+(1/2))))
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,14,W_Indice;ENR_DETAILPREST<14,W_Indice>+W_JourAIndemniser)
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,8,W_Indice;"0")
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,7,W_Indice;"0")
*               WRITE ENR_DETAILPREST ON F.DETAILPREST,W_Cle
               W_Creer = "FAUX"
		END ELSE
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,5,W_Indice;W_CodeRub)
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,15,W_Indice;W_CleAbs)
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,6,W_Indice;INT(W_NbreHreIndem+(1/2)))
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,14,W_Indice;W_JourAIndemniser)
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,8,W_Indice;"0")
               ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,7,W_Indice;"0")
*               WRITE ENR_DETAILPREST ON F.DETAILPREST,W_Cle
               W_Creer = "FAUX"            
            END
         END
      END
   END

   * s'il reste des jours non indemniss, les passer en heures absences
   IF W_NbreHreRestant # 0 THEN
      IF ENR_CONTRAT<5> = "M" OR ENR_CONTRAT<68,k> = "1" THEN
         W_CodeRub = "815"
         W_Indice = 0
         W_TabDyn = ENR_DETAILPREST
         GOSUB 1500

         W_NbreJourPeriode =W_DatFinPeriode-W_DatDebPeriode+1
	   IF W_JourRestant >= W_NbreJourPeriode*100 THEN
   	      BEGIN CASE
      	   CASE ENR_CONTRAT<25,k> = "1"
           		W_NbreHreRestant = INT((ENR_CONTRAT<24,k>*52/12) + (1/2))
      	   CASE ENR_CONTRAT<25,k> = "2"
          		W_NbreHreRestant = INT((ENR_CONTRAT<24,k>*26/12) + (1/2))
    		   CASE ENR_CONTRAT<25,k> = "3"
         		W_NbreHreRestant = INT((ENR_CONTRAT<24,k>) + (1/2))
       	   CASE ENR_CONTRAT<25,k> = "4"
           	      W_NbreHreRestant = INT((ENR_CONTRAT<24,k>/12) + (1/2))
   		END CASE
            IF W_CodeAbs = "03" THEN
 		   W_NbreHreRestant = INT((W_NbreHreRestant / 2) + (1/2))
		END
         END ELSE
            IF W_CodeAbs = "12" OR W_CodeAbs = "14" OR W_CodeAbs = "15" OR W_CodeAbs = "16" THEN
               W_NbreHreRestant = INT(W_ValeurHor * (W_JourRestant/100) + (1/2))
            END ELSE
   	         BEGIN CASE
      	   CASE ENR_CONTRAT<25,k> = "1"
           	      W_ValeurHor = INT((ENR_CONTRAT<24,k>*52/12) + (1/2))
           	   CASE ENR_CONTRAT<25,k> = "2"
          	      W_ValeurHor = INT((ENR_CONTRAT<24,k>*26/12) + (1/2))
    		   CASE ENR_CONTRAT<25,k> = "3"
         	      W_ValeurHor = INT((ENR_CONTRAT<24,k>) + (1/2))
       	   CASE ENR_CONTRAT<25,k> = "4"
         	      W_ValeurHor = INT((ENR_CONTRAT<24,k>/12) + (1/2))
   		   END CASE
               W_NbreHreRestant = INT(((W_ValeurHor/W_NbreJourPeriode) * (W_JourRestant/100))+(1/2))
               IF W_CodeAbs = "03" THEN
 			W_NbreHreRestant = INT((W_NbreHreRestant / 2) + (1/2))
		   END
		END
         END
         IF W_DatFinPeriode=W_DatFinAbs THEN
            W_NbreJourPeriode =W_DatFinPeriode-W_DatDebPeriode+1
            IF W_JourAbsAidant=W_NbreJourPeriode THEN
   	         BEGIN CASE
                  CASE ENR_CONTRAT<25,k> = "1"
           		   W_NbreHre = INT((ENR_CONTRAT<24,k>*52/12) + (1/2))
      		CASE ENR_CONTRAT<25,k> = "2"
                     W_NbreHre = INT((ENR_CONTRAT<24,k>*26/12) + (1/2))
    		      CASE ENR_CONTRAT<25,k> = "3"
         	         W_NbreHre = INT((ENR_CONTRAT<24,k>) + (1/2))
       	      CASE ENR_CONTRAT<25,k> = "4"
         	         W_NbreHre = INT((ENR_CONTRAT<24,k>/12) + (1/2))
   	  	   END CASE
               IF W_NbreHre # W_NbreHreAidant THEN
                  W_NbreHreRestant = W_NbreHre-W_NbreHreAidant
               END
            END
         END

	   IF W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
            ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,5,W_Indice;W_CodeRub)
            ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,15,W_Indice;W_CleAbs)
            ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,6,W_Indice;ENR_DETAILPREST<6,W_Indice>+INT(W_NbreHreRestant+(1/2)))
            ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,14,W_Indice;ENR_DETAILPREST<14,W_Indice>+W_JourRestant)
            ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,8,W_Indice;"0")
            ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,7,W_Indice;"0")
         END ELSE
            ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,5,W_Indice;W_CodeRub)
            ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,15,W_Indice;W_CleAbs)
            ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,6,W_Indice;INT(W_NbreHreRestant+(1/2)))
            ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,14,W_Indice;W_JourRestant)
            ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,8,W_Indice;"0")
            ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,7,W_Indice;"0")
         END

*         WRITE ENR_DETAILPREST ON F.DETAILPREST,W_Cle
       
      END
   END

   IF (W_Difference # "" AND W_CodeAbs = "14") OR (W_Difference # "" AND W_CodeAbs = "15")  OR (W_Difference # "" AND W_CodeAbs = "16") THEN
      GOSUB 460
   END 

RETURN

*********************************************************
*  Mise  jour du fichier DETAILMANDAT

1300

   ENR_DETAILMANDAT = ""
   READ ENR_DETAILMANDAT FROM F.DETAILMANDAT,W_Cle THEN 
      IF W_NouvelAidant=1 THEN
         W_Count=DCOUNT(ENR_DETAILMANDAT<7>,CHAR(253))
         FOR k1 = W_Count TO 1 STEP -1
            IF ENR_DETAILMANDAT<7,k1> # "" THEN
               ENR_DETAILMANDAT=DELETE(ENR_DETAILMANDAT,1,k1)
               ENR_DETAILMANDAT=DELETE(ENR_DETAILMANDAT,2,k1)
               ENR_DETAILMANDAT=DELETE(ENR_DETAILMANDAT,3,k1)
               ENR_DETAILMANDAT=DELETE(ENR_DETAILMANDAT,4,k1)
               ENR_DETAILMANDAT=DELETE(ENR_DETAILMANDAT,5,k1)
               ENR_DETAILMANDAT=DELETE(ENR_DETAILMANDAT,6,k1)
               ENR_DETAILMANDAT=DELETE(ENR_DETAILMANDAT,7,k1)   
            END  
         NEXT k1
*         WRITE ENR_DETAILMANDAT ON F.DETAILMANDAT,W_Cle
      END
   END ELSE
      W_Creer = "VRAI"
      ENR_DETAILMANDAT = ""
   END

   W_TabDyn = ""
   W_TabDyn = ENR_DETAILMANDAT
   W_Att = 1
   W_AttAbs = 7
   GOSUB 1500

   IF (W_CodeAbs = "01" AND ENR_CONTRATSPREV<21> = "0") OR (W_CodeAbs = "04" AND ENR_CONTRATSPREV<21> = "0") OR (W_CodeAbs = "05" AND ENR_CONTRATSPREV<21> = "0") OR (W_CodeAbs = "06" AND ENR_CONTRATSPREV<21> = "0") THEN
      * RIEN
   END ELSE
      IF W_CodeRub = "808" OR W_CodeRub = "807" THEN
         IF W_TotalMont # 0 THEN
		IF W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,1,W_Indice;W_CodeRub)
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,7,W_Indice;W_CleAbs)
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,4,W_Indice;ENR_DETAILMANDAT<4,W_Indice>+W_TotalMont)
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,6,W_Indice;ENR_DETAILMANDAT<6,W_Indice>+(W_JourAbs*100))
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,2,W_Indice;"0")
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,3,W_Indice;"0")
 *              WRITE ENR_DETAILMANDAT ON F.DETAILMANDAT,W_Cle
               W_Creer = "FAUX"
            END ELSE
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,1,W_Indice;W_CodeRub)
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,7,W_Indice;W_CleAbs)
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,4,W_Indice;W_TotalMont)
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,6,W_Indice;W_JourAbs*100)
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,2,W_Indice;"0")
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,3,W_Indice;"0")
 *              WRITE ENR_DETAILMANDAT ON F.DETAILMANDAT,W_Cle
               W_Creer = "FAUX"
            END
         END
      END ELSE
         IF W_NbreHreIndem # 0 THEN
		IF W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,1,W_Indice;W_CodeRub)
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,7,W_Indice;W_CleAbs)
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,2,W_Indice;ENR_DETAILMANDAT<2,W_Indice>+(INT(W_NbreHreIndem+(1/2))))
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,6,W_Indice;ENR_DETAILMANDAT<6,W_Indice>+W_JourAIndemniser)
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,4,W_Indice;"0")
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,3,W_Indice;"0")
 *              WRITE ENR_DETAILMANDAT ON F.DETAILMANDAT,W_Cle
               W_Creer = "FAUX"
            END ELSE
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,1,W_Indice;W_CodeRub)
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,7,W_Indice;W_CleAbs)
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,2,W_Indice;INT(W_NbreHreIndem+(1/2)))
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,6,W_Indice;W_JourAIndemniser)
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,4,W_Indice;"0")
               ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,3,W_Indice;"0")
 *              WRITE ENR_DETAILMANDAT ON F.DETAILMANDAT,W_Cle
               W_Creer = "FAUX"
            END
         END
      END
   END

   * s'il reste des jours non indemniss, les passer en heures absences
   IF W_NbreHreRestant # 0 THEN
      IF ENR_CONTRAT<5> = "M" OR ENR_CONTRAT<68,k> = "1" THEN
         W_CodeRub = "815"
         W_Indice = 0
         W_TabDyn = ENR_DETAILMANDAT
         GOSUB 1500

         W_NbreJourPeriode =W_DatFinPeriode-W_DatDebPeriode+1
	   IF W_JourRestant >= W_NbreJourPeriode*100 THEN
   	      BEGIN CASE
      	   CASE ENR_CONTRAT<25,k> = "1"
           		W_NbreHreRestant = INT((ENR_CONTRAT<24,k>*52/12) + (1/2))
      	   CASE ENR_CONTRAT<25,k> = "2"
          		W_NbreHreRestant = INT((ENR_CONTRAT<24,k>*26/12) + (1/2))
    		   CASE ENR_CONTRAT<25,k> = "3"
         		W_NbreHreRestant = INT((ENR_CONTRAT<24,k>) + (1/2))
       	   CASE ENR_CONTRAT<25,k> = "4"
           	      W_NbreHreRestant = INT((ENR_CONTRAT<24,k>/12) + (1/2))
   		END CASE
            IF W_CodeAbs = "03" THEN
 		   W_NbreHreRestant = INT((W_NbreHreRestant / 2) + (1/2))
		END
	   END ELSE
            IF W_CodeAbs = "12" OR W_CodeAbs = "14" OR W_CodeAbs = "15" OR W_CodeAbs = "16" THEN
               W_NbreHreRestant = INT(W_ValeurHor * (W_JourRestant/100) + (1/2))
            END ELSE
   	         BEGIN CASE
      	   CASE ENR_CONTRAT<25,k> = "1"
           	      W_ValeurHor = INT((ENR_CONTRAT<24,k>*52/12) + (1/2))
           	   CASE ENR_CONTRAT<25,k> = "2"
          	      W_ValeurHor = INT((ENR_CONTRAT<24,k>*26/12) + (1/2))
    		   CASE ENR_CONTRAT<25,k> = "3"
         	      W_ValeurHor = INT((ENR_CONTRAT<24,k>) + (1/2))
       	   CASE ENR_CONTRAT<25,k> = "4"
         	      W_ValeurHor = INT((ENR_CONTRAT<24,k>/12) + (1/2))
   		   END CASE
		   W_NbreHreRestant = INT(((W_ValeurHor/W_NbreJourPeriode) * (W_JourRestant/100))+(1/2))
               IF W_CodeAbs = "03" THEN
 			W_NbreHreRestant = INT((W_NbreHreRestant / 2) + (1/2))
		   END
            END
         END
         IF W_DatFinPeriode=W_DatFinAbs THEN
            W_NbreJourPeriode =W_DatFinPeriode-W_DatDebPeriode+1
            IF W_JourAbsAidant=W_NbreJourPeriode THEN
   	         BEGIN CASE
                  CASE ENR_CONTRAT<25,k> = "1"
           		   W_NbreHre = INT((ENR_CONTRAT<24,k>*52/12) + (1/2))
      		CASE ENR_CONTRAT<25,k> = "2"
                     W_NbreHre = INT((ENR_CONTRAT<24,k>*26/12) + (1/2))
    		      CASE ENR_CONTRAT<25,k> = "3"
         	         W_NbreHre = INT((ENR_CONTRAT<24,k>) + (1/2))
       	      CASE ENR_CONTRAT<25,k> = "4"
         	         W_NbreHre = INT((ENR_CONTRAT<24,k>/12) + (1/2))
   	  	   END CASE
               IF W_NbreHre # W_NbreHreAidant THEN
                  W_NbreHreRestant = W_NbreHre-W_NbreHreAidant
               END
            END
         END

	   IF W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
            ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,1,W_Indice;W_CodeRub)
            ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,7,W_Indice;W_CleAbs)
            ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,2,W_Indice;ENR_DETAILMANDAT<2,W_Indice>+(INT(W_NbreHreRestant+(1/2))))
            ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,6,W_Indice;ENR_DETAILMANDAT<6,W_Indice>+W_JourRestant)
            ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,4,W_Indice;"0")
            ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,3,W_Indice;"0")
         END ELSE
            ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,1,W_Indice;W_CodeRub)
            ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,7,W_Indice;W_CleAbs)
            ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,2,W_Indice;INT(W_NbreHreRestant+(1/2)))
            ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,6,W_Indice;W_JourRestant)
            ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,4,W_Indice;"0")
            ENR_DETAILMANDAT=REPLACE(ENR_DETAILMANDAT,3,W_Indice;"0")
         END

*         WRITE ENR_DETAILMANDAT ON F.DETAILMANDAT,W_Cle
        
      END
   END

   IF (W_Difference # "" AND W_CodeAbs = "14") OR (W_Difference # "" AND W_CodeAbs = "15")  OR (W_Difference # "" AND W_CodeAbs = "16") THEN
      GOSUB 460
   END 

RETURN

*********************************************************
*  Mise  jour du fichier DETAILINTER

1400

   ENR_DETAILINTER = ""
   W_Cle=W_RequeteContrat<j>:"000":W_Periode
   READ ENR_DETAILINTER FROM F.DETAILINTER,W_Cle THEN 
      IF W_NouvelAidant=1 THEN
         W_Count=DCOUNT(ENR_DETAILINTER<14>,CHAR(253))
         FOR k1 = W_Count TO 1 STEP -1
            IF ENR_DETAILINTER<14,k1> # "" THEN
               ENR_DETAILINTER=DELETE(ENR_DETAILINTER,8,k1)
               ENR_DETAILINTER=DELETE(ENR_DETAILINTER,9,k1)
               ENR_DETAILINTER=DELETE(ENR_DETAILINTER,10,k1)
               ENR_DETAILINTER=DELETE(ENR_DETAILINTER,11,k1)
               ENR_DETAILINTER=DELETE(ENR_DETAILINTER,12,k1)
               ENR_DETAILINTER=DELETE(ENR_DETAILINTER,13,k1)
               ENR_DETAILINTER=DELETE(ENR_DETAILINTER,14,k1)   
            END  
         NEXT k1
*         WRITE ENR_DETAILINTER ON F.DETAILINTER,W_Cle
      END
   END ELSE
      W_Creer = "VRAI"
      ENR_DETAILINTER = ""
   END

   W_TabDyn = ""
   W_TabDyn = ENR_DETAILINTER
   W_Att = 8
   W_AttAbs = 14
   GOSUB 1500

   IF (W_CodeAbs = "01" AND ENR_CONTRATSPREV<21> = "0") OR (W_CodeAbs = "04" AND ENR_CONTRATSPREV<21> = "0") OR (W_CodeAbs = "05" AND ENR_CONTRATSPREV<21> = "0") OR (W_CodeAbs = "06" AND ENR_CONTRATSPREV<21> = "0") THEN
      * RIEN
   END ELSE
      IF W_CodeRub = "808" OR W_CodeRub = "807" THEN
         IF W_TotalMont # 0 THEN
		IF W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,8,W_Indice;W_CodeRub)
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,14,W_Indice;W_CleAbs)
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,11,W_Indice;ENR_DETAILINTER<11,W_Indice>+W_TotalMont)
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,13,W_Indice;ENR_DETAILINTER<13,W_Indice>+(W_JourAbs*100))
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,9,W_Indice;"0")
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,10,W_Indice;"0")
*               WRITE ENR_DETAILINTER ON F.DETAILINTER,W_Cle
               W_Creer = "FAUX"
            END ELSE
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,8,W_Indice;W_CodeRub)
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,14,W_Indice;W_CleAbs)
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,11,W_Indice;W_TotalMont)
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,13,W_Indice;W_JourAbs*100)
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,9,W_Indice;"0")
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,10,W_Indice;"0")
*               WRITE ENR_DETAILINTER ON F.DETAILINTER,W_Cle
               W_Creer = "FAUX"
            END
         END
      END ELSE
         IF W_NbreHreIndem # 0 THEN
            IF W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,8,W_Indice;W_CodeRub)
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,14,W_Indice;W_CleAbs)
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,9,W_Indice;ENR_DETAILINTER<9,W_Indice>+(INT(W_NbreHreIndem+(1/2))))
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,13,W_Indice;ENR_DETAILINTER<13,W_Indice>+W_JourAIndemniser)
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,11,W_Indice;"0")
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,10,W_Indice;"0")
 *              WRITE ENR_DETAILINTER ON F.DETAILINTER,W_Cle
               W_Creer = "FAUX"
            END ELSE
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,8,W_Indice;W_CodeRub)
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,14,W_Indice;W_CleAbs)
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,9,W_Indice;INT(W_NbreHreIndem+(1/2)))
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,13,W_Indice;W_JourAIndemniser)
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,11,W_Indice;"0")
               ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,10,W_Indice;"0")
 *              WRITE ENR_DETAILINTER ON F.DETAILINTER,W_Cle
               W_Creer = "FAUX"
            END
         END
      END
   END

   * s'il reste des jours non indemniss, les passer en heures absences
   IF W_NbreHreRestant # 0 THEN
      IF ENR_CONTRAT<5> = "M" OR ENR_CONTRAT<68,k> = "1" THEN
         W_CodeRub = "815"
         W_Indice = 0
         W_TabDyn = ENR_DETAILINTER
         GOSUB 1500

         W_NbreJourPeriode =W_DatFinPeriode-W_DatDebPeriode+1
	   IF W_JourRestant >= W_NbreJourPeriode*100 THEN
   	      BEGIN CASE
      	   CASE ENR_CONTRAT<25,k> = "1"
           		W_NbreHreRestant = INT((ENR_CONTRAT<24,k>*52/12) + (1/2))
      	   CASE ENR_CONTRAT<25,k> = "2"
          		W_NbreHreRestant = INT((ENR_CONTRAT<24,k>*26/12) + (1/2))
    		   CASE ENR_CONTRAT<25,k> = "3"
         		W_NbreHreRestant = INT((ENR_CONTRAT<24,k>) + (1/2))
       	   CASE ENR_CONTRAT<25,k> = "4"
           	      W_NbreHreRestant = INT((ENR_CONTRAT<24,k>/12) + (1/2))
   		END CASE
            IF W_CodeAbs = "03" THEN
 		   W_NbreHreRestant = INT((W_NbreHreRestant / 2) + (1/2))
		END
	   END ELSE
            IF W_CodeAbs = "12" OR W_CodeAbs = "14" OR W_CodeAbs = "15" OR W_CodeAbs = "16" THEN
               W_NbreHreRestant = INT(W_ValeurHor * (W_JourRestant/100) + (1/2))
            END ELSE
   	         BEGIN CASE
      	   CASE ENR_CONTRAT<25,k> = "1"
           	      W_ValeurHor = INT((ENR_CONTRAT<24,k>*52/12) + (1/2))
           	   CASE ENR_CONTRAT<25,k> = "2"
          	      W_ValeurHor = INT((ENR_CONTRAT<24,k>*26/12) + (1/2))
    		   CASE ENR_CONTRAT<25,k> = "3"
         	      W_ValeurHor = INT((ENR_CONTRAT<24,k>) + (1/2))
       	   CASE ENR_CONTRAT<25,k> = "4"
         	      W_ValeurHor = INT((ENR_CONTRAT<24,k>/12) + (1/2))
   		   END CASE
               W_NbreHreRestant = INT(((W_ValeurHor/W_NbreJourPeriode) * (W_JourRestant/100))+(1/2))
               IF W_CodeAbs = "03" THEN
 			W_NbreHreRestant = INT((W_NbreHreRestant / 2) + (1/2))
		   END
            END
         END
         IF W_DatFinPeriode=W_DatFinAbs THEN
            W_NbreJourPeriode =W_DatFinPeriode-W_DatDebPeriode+1
            IF W_JourAbsAidant=W_NbreJourPeriode THEN
   	         BEGIN CASE
                  CASE ENR_CONTRAT<25,k> = "1"
           		   W_NbreHre = INT((ENR_CONTRAT<24,k>*52/12) + (1/2))
      		CASE ENR_CONTRAT<25,k> = "2"
                     W_NbreHre = INT((ENR_CONTRAT<24,k>*26/12) + (1/2))
    		      CASE ENR_CONTRAT<25,k> = "3"
         	         W_NbreHre = INT((ENR_CONTRAT<24,k>) + (1/2))
       	      CASE ENR_CONTRAT<25,k> = "4"
         	         W_NbreHre = INT((ENR_CONTRAT<24,k>/12) + (1/2))
   	  	   END CASE
               IF W_NbreHre # W_NbreHreAidant THEN
                  W_NbreHreRestant = W_NbreHre-W_NbreHreAidant
               END
            END
         END

         IF W_TabDyn<W_Att,W_Indice> = W_CodeRub AND W_TabDyn<W_AttAbs,W_Indice> # W_CleAbs THEN
            ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,8,W_Indice;W_CodeRub)
            ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,14,W_Indice;W_CleAbs)
            ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,9,W_Indice;ENR_DETAILINTER<9,W_Indice>+(INT(W_NbreHreRestant+(1/2))))
            ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,13,W_Indice;ENR_DETAILINTER<13,W_Indice>+W_JourRestant)
            ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,11,W_Indice;"0")
            ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,10,W_Indice;"0")
         END ELSE
            ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,8,W_Indice;W_CodeRub)
            ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,14,W_Indice;W_CleAbs)
            ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,9,W_Indice;INT(W_NbreHreRestant+(1/2)))
            ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,13,W_Indice;W_JourRestant)
            ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,11,W_Indice;"0")
            ENR_DETAILINTER=REPLACE(ENR_DETAILINTER,10,W_Indice;"0")
         END

*         WRITE ENR_DETAILINTER ON F.DETAILINTER,W_Cle
      END
   END

   IF (W_Difference # "" AND W_CodeAbs = "14") OR (W_Difference # "" AND W_CodeAbs = "15")  OR (W_Difference # "" AND W_CodeAbs = "16") THEN
      GOSUB 460
   END 

RETURN

*********************************************************
*  Recherche le rang de la rubrique de saisie

1500

   IF W_Creer = "VRAI" THEN
      W_Indice = 1

   END ELSE
      W_CountDetail = DCOUNT(W_TabDyn<W_Att>,CHAR(253))
      FOR l=1 TO W_CountDetail
         IF W_TabDyn<W_Att,l> = W_CodeRub AND W_TabDyn<W_AttAbs,l> # "" THEN
            W_Indice=l
            EXIT
         END
      NEXT l
      IF W_Indice = 0 THEN
         W_Indice = W_CountDetail+1
      END
   END 

RETURN
