*****************************************************************
* C A L C U L   D E S   B U L L E T I N S   D E   P A I E
*
* 24/03/1999                                  D. GAULTIER
*****************************************************************
* OUVERTURE DES FICHIERS
**********
EXECUTE "SET-THOUS ."
OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP ;*en lecture
OPEN "","ACTIVITES" TO F.ACTIVITES ELSE STOP ;*en lecture
OPEN "","ACTIVITESAIDE" TO F.ACTIVITESAIDE ELSE STOP ;*en lecture
OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE STOP ;*en lecture
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP ;*en lecture
OPEN "","CONSTANTESPAIE" TO F.CONSTANTESPAIE ELSE STOP ;*en lecture
OPEN "","CONTRATSPREV" TO F.CONTRATSPREV ELSE STOP ;*en lecture
OPEN "","CONVENTIONCOL" TO F.CONVENTIONCOL ELSE STOP ;*en lecture
OPEN "","DETAILPREST" TO F.DETAILPREST ELSE STOP ;*en lecture
OPEN "","DETAILMANDAT" TO F.DETAILMANDAT ELSE STOP ;*en lecture 
OPEN "","DETAILINTER" TO F.DETAILINTER ELSE STOP ;*en lecture
OPEN "","DETAILADMIN" TO F.DETAILADMIN ELSE STOP ;*en lecture
OPEN "","ELTSPARTEMP" TO F.ELTSPARTEMP ELSE STOP ;*en lecture
OPEN "","ETABLISSEMENT" TO F.ETABLISSEMENT ELSE STOP ;*en lecture
OPEN "","GRILLESCC" TO F.GRILLESCC ELSE STOP ;*en lecture
OPEN "","MISSIONSAIDANT" TO F.MISSIONSAIDANT ELSE STOP ;*en lecture
OPEN "","OPPOSITION" TO F.OPPOSITION ELSE STOP ;*en lecture
OPEN "","PROFIL" TO F.PROFIL ELSE STOP ;*en lecture
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE STOP ;*en lecture
OPEN "","RUBCHARGE" TO F.RUBCHARGE ELSE STOP ;*en lecture
OPEN "","SAISIEARRET" TO F.SAISIEARRET ELSE STOP ;*en lecture
OPEN "","TABLES" TO F.TABLES ELSE STOP ;*en lecture
OPEN "","TRANCHE" TO F.TRANCHE ELSE STOP ;*en lecture
* CONTRAT en mise  jour pour volution coefficient + att 81 pour adm sans DETAILADMIN
OPEN "","ACOMPTEBULL" TO F.ACOMPTEBULL ELSE STOP ;*en suppression
OPEN "","ANOMALIEPAIE" TO F.ANOMALIEPAIE ELSE STOP ;*en ecrtiture
OPEN "","RATTSALANT" TO F.RATTSALANT ELSE STOP ;*en suppression
OPEN "","REGULCHARGE" TO F.REGULCHARGE ELSE STOP ;*en ecriture
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
**********
* RECUPERATION DES INFOS EN PROVENANCE DU PROJET Visual Basic
**********
W_TRAITTOUS="NON"
PROCREAD W_VARIABLES ELSE STOP
W_TYPETRAIT=FIELD(W_VARIABLES," ",2)
* W_TYPETRAIT="I"  : traitement individuel  partir du calcul de paie
* W_TYPETRAIT="IA" : traitement individuel  partir du calcul acompte pour paiement par anticipation
* W_TYPETRAIT="T"  : traitement total  partir du calcul de paie
* W_TYPETRAIT="TA" : traitement total  partir du calcul acompte pour paiement par anticipation
* W_TYPETRAIT="R"  : traitement individuel  partir du rsultat du calcul
IF W_TYPETRAIT="I" OR W_TYPETRAIT="R" OR W_TYPETRAIT="IA"  THEN
 W_CODENTITE=FIELD(W_VARIABLES," ",3)
 W_PERIODEPAIE=FIELD(W_VARIABLES," ",4)
 W_CODCONTRAT=FIELD(W_VARIABLES," ",5)
 IF W_TYPETRAIT = "IA" THEN 
  W_POURCACOMPTE=FIELD(W_VARIABLES," ",6)
 END
 W_SOLDECOMPTE=FIELD(W_VARIABLES," ",7)
 W_SOLDECOMPTE=0
 W_BUDGET=FIELD(W_VARIABLES," ",8)
END ELSE
 W_CODENTITE=FIELD(W_VARIABLES," ",3)
 W_PERIODEPAIE=FIELD(W_VARIABLES," ",4)
 W_TYPEPERSO=FIELD(W_VARIABLES," ",5)
 W_POURCACOMPTE=FIELD(W_VARIABLES," ",6)
 W_SOLDECOMPTE=FIELD(W_VARIABLES," ",7)
 IF W_TYPEPERSO="T" THEN W_TRAITTOUS="OUI"
 W_TYPEACTIVITE=FIELD(W_VARIABLES," ",8)
 W_LISTSECTEURS=FIELD(W_VARIABLES," ",9)
 W_SECTEURS=""
 I=1
 LOOP
  W_DETAILSECTEUR=FIELD(W_LISTSECTEURS,"/",I)
  UNTIL W_DETAILSECTEUR="" DO
   W_SECTEURS<I>=W_DETAILSECTEUR
   I=I+1
 REPEAT
 W_BUDGET=0
END
IF W_BUDGET=1 THEN
 OPEN "","BUDGETDETAILCALCUL" TO F.DETAILCALCUL ELSE STOP ;* en ecriture
 OPEN "","BUDGETHISTORCUMUL" TO F.HISTORCUMUL ELSE STOP ;*en ecriture
 OPEN "","BUDGETPARAM" TO F.BUDGETPARAM ELSE STOP ;*en lecture
 OPEN "","BUDGETRUBCHARGE" TO F.BUDGETRUBCHARGE ELSE STOP ;*en lecture
 OPEN "","BUDGETFICHPERSO" TO F.CONTRAT ELSE STOP ;*en ecriture
 OPEN "","BUDGETMOI" TO F.BUDGETMOI ELSE STOP ;*en lecture
END ELSE
 OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE STOP ;*en ecriture
 OPEN "","HISTORCUMUL" TO F.HISTORCUMUL ELSE STOP ;*en lecture
 OPEN "","CONTRAT" TO F.CONTRAT ELSE STOP ;*en ecriture
END
W_PERIODEPAIEDEB="01 ":W_PERIODEPAIE[5,2]:" ":W_PERIODEPAIE[1,4]
W_PERIODEPAIEDEB=ICONV(W_PERIODEPAIEDEB,"D4 ")
W_PERIODEPAIEPREC=W_PERIODEPAIEDEB-1
W_PERIODEPAIEPREC=OCONV(W_PERIODEPAIEPREC,"D4 ")
W_PERIODEPAIEPREC=W_PERIODEPAIEPREC[7,4]:W_PERIODEPAIEPREC[4,2]
IF W_PERIODEPAIE[5,2]="12" THEN
 W_PERIODEPAIEFIN="31 12 ":W_PERIODEPAIE[1,4]
 W_PERIODEPAIEFIN=ICONV(W_PERIODEPAIEFIN,"D4 ")
 W_PERIODEPAIEFIN1=OCONV(W_PERIODEPAIEFIN,"D4 ")
END ELSE
 W_PERIODEPAIEFIN=W_PERIODEPAIE+1
 W_PERIODEPAIEFIN="01 ":W_PERIODEPAIEFIN[5,2]:" ":W_PERIODEPAIEFIN[1,4]
 W_PERIODEPAIEFIN=ICONV(W_PERIODEPAIEFIN,"D4 ")
 W_PERIODEPAIEFIN=W_PERIODEPAIEFIN-1
 W_PERIODEPAIEFIN1=OCONV(W_PERIODEPAIEFIN,"D4 ")
END
W_NBJRSPERIODEPAIE=W_PERIODEPAIEFIN-W_PERIODEPAIEDEB+1
**********
* INITIALISATIONS
**********
* RECHERCHE DES RUBRIQUES DE CHARGE DE TYPE URSSAF + TRANCHE A + REGLE DES CUMULS
W_RUBCHGAADURSSAFCUM=""
EXECUTE 'SELECT RUBCHARGE AVEC 18 = "3" AND AVEC 16 = "01"'
EXECUTE 'SAUVE-LISTE LISTRUBCHG'
EXECUTE 'LISTE LISTRUBCHG' RETURNING W_MSG
IF W_MSG<1>#"209" THEN
 SELECT F.RUBCHARGE TO LISTRUBCHG
 W_FINRECH1="NON"
 LOOP
  READNEXT W_CLERUBCHG FROM LISTRUBCHG ELSE W_FINRECH1="OUI"
  UNTIL W_FINRECH1="OUI" DO
   CodRubChg=W_CLERUBCHG
   GOSUB 1400
   READ ENR_TRANCHE FROM F.TRANCHE,TranchRubChg ELSE ENR_TRANCHE=""
   TypTranche=EXTRACT(ENR_TRANCHE,10)
   IF TypTranche="02" THEN
    W_RUBCHGAADURSSAFCUM=REPLACE(W_RUBCHGAADURSSAFCUM,1,-1;W_CLERUBCHG)
   END
 REPEAT
END
READ ENR_ASSOCIATION FROM F.ASSOCIATION,W_CODENTITE ELSE STOP
* PERIODE D.A.D.S.
SigleAssoc=EXTRACT(ENR_ASSOCIATION,1)
DecalagePaie=EXTRACT(ENR_ASSOCIATION,25)
W_ANNEEDADS=W_PERIODEPAIE[1,4]
IF W_BUDGET=1 THEN DecalagePaie=0 
IF DecalagePaie=1 THEN
 IF W_PERIODEPAIE[5,2]=12 THEN W_ANNEEDADS=W_PERIODEPAIE[1,4]+1
END 
* CHARGEMENT EN TABLE DES ACTIVITES QUI N'OUVRENT PAS DROIT A L'EXONERATION "SERVICES A LA PERSONNE"
W_TABACTIVITENONEXO=""
EXECUTE 'SELECT ACTIVITES AVEC 0 = "':W_CODENTITE:']" AND AVEC 22 = "N"'
EXECUTE 'SAUVE-LISTE LISTACTNONEXO'
EXECUTE 'LISTE LISTACTNONEXO' RETURNING W_MSG
IF W_MSG<1>#"209" THEN
 SELECT F.ACTIVITES TO LISTACTNONEXO
 W_FINRECH1="NON"
 LOOP
  READNEXT W_CLEACTNONEXO FROM LISTACTNONEXO ELSE W_FINRECH1="OUI"
  UNTIL W_FINRECH1="OUI" DO
   W_TABACTIVITENONEXO=REPLACE(W_TABACTIVITENONEXO,1,-1;W_CLEACTNONEXO)
 REPEAT
END
***
READ ENR_CONSTANTESPAIE FROM F.CONSTANTESPAIE,"1" ELSE STOP
* RECHERCHE DU PLAFOND SECURITE SOCIALE EN VIGUEUR SUR LA PERIODE
W_FINRECH="NON"
I=1
LOOP
 UNTIL W_FINRECH="OUI" DO
  DatPlafondSecu=EXTRACT(ENR_CONSTANTESPAIE,2,I)
  IF DatPlafondSecu<=W_PERIODEPAIEFIN THEN
   ValPlafondSecu=EXTRACT(ENR_CONSTANTESPAIE,1,I)
   W_FINRECH="OUI"
  END ELSE
   I=I+1
  END
REPEAT
* RECHERCHE DU S.M.I.C. HORAIRE EN VIGUEUR SUR LA PERIODE
W_FINRECH="NON"
I=1
LOOP
 UNTIL W_FINRECH="OUI" DO
  DatSmicHor=EXTRACT(ENR_CONSTANTESPAIE,4,I)
  IF DatSmicHor<=W_PERIODEPAIEFIN THEN
   ValSmicHor=EXTRACT(ENR_CONSTANTESPAIE,3,I)
   W_FINRECH="OUI"
  END ELSE
   I=I+1
  END
REPEAT
IF W_BUDGET=1 THEN
 READ ENR_CONSTANTESPAIE FROM F.BUDGETPARAM,"1" ELSE STOP
 W_FINRECH="NON"
 I=1
 LOOP
  DatPlafondSecu=EXTRACT(ENR_CONSTANTESPAIE,1,I)
  IF DatPlafondSecu="" THEN W_FINRECH="OUI"
  UNTIL W_FINRECH="OUI" DO
   IF DatPlafondSecu<=W_PERIODEPAIEFIN THEN
    ValPlafondSecu=EXTRACT(ENR_CONSTANTESPAIE,2,I)
    W_FINRECH="OUI"
   END ELSE
    I=I+1
   END
 REPEAT
 W_FINRECH="NON"
 I=1
 LOOP
  DatSmicHor=EXTRACT(ENR_CONSTANTESPAIE,3,I)
  IF DatSmicHor="" THEN W_FINRECH="OUI"
  UNTIL W_FINRECH="OUI" DO
   IF DatSmicHor<=W_PERIODEPAIEFIN THEN
    ValSmicHor=EXTRACT(ENR_CONSTANTESPAIE,4,I)
    W_FINRECH="OUI"
   END ELSE
    I=I+1
   END
 REPEAT
END
* HORAIRE HEBDOMADAIRE LEGAL
HorHebdoLegal=EXTRACT(ENR_CONSTANTESPAIE,10)
W_HORMOISLEGAL=INT(HorHebdoLegal*52/12+1/2)
W_SMICMENS=INT((HorHebdoLegal*52/12)*ValSmicHor/100+1/2)
W_HORHEBDOLEGAL=INT(HorHebdoLegal*4/5)
IF INT(W_HORHEBDOLEGAL/100)*100#W_HORHEBDOLEGAL THEN
 W_HORHEBDOLEGAL=((W_HORHEBDOLEGAL/100)+1)*100
END
* PERIODE BUTOIR POUR EURO
DatMontEnEuro=EXTRACT(ENR_CONSTANTESPAIE,9)
DatMontEnEuro=OCONV(DatMontEnEuro,"D4/")
DatMontEnEuro=DatMontEnEuro[7,4]:DatMontEnEuro[4,2]
* INITIALISATION TABLE POUR ABSENCES EN CLAIR
DIM W_TABLEABS(99,3)
* LECTURE TABLE POUR CARTE ORANGE
READ ENR_TABLES FROM F.TABLES,"CARTEORANGE" ELSE ENR_TABLES=""
LISTRUBCHG=""
LISTDETAIL=""
LISTABS=""
LISTACTNONEXO=""
**********
* TRAITEMENT
**********
* CALCUL INDIVIDUEL
IF W_TYPETRAIT="I" OR W_TYPETRAIT="R" OR W_TYPETRAIT="IA" THEN
 GOSUB 100
 EXECUTE "SET-DEC ."
 STOP
END
* CALCUL COLLECTIF
IF W_TRAITTOUS="NON" THEN
 GOSUB 200
END ELSE
 W_TYPEPERSO="P"
 GOSUB 200
 W_TYPEPERSO="A"
 GOSUB 200
END
EXECUTE "SET-DEC ."
STOP
**********
* CALCUL INDIVIDUEL (W_TYPETRAIT="I" ou "R" ou "IA")
**********
100 W_CLE=W_CODCONTRAT:W_PERIODEPAIE
CodAidantContrat=W_CODCONTRAT
GOSUB 1000 ;*lecture CONTRAT
IF W_TYPETRAIT="I" THEN
 READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CLE THEN RETURN
* IF ENR_CONTRAT<63>#"" AND ENR_CONTRAT<63>>=W_PERIODEPAIE THEN RETURN
* IF ENR_CONTRAT<63>="" AND ENR_CONTRAT<81>#"" AND ENR_CONTRAT<81>#W_PERIODEPAIE THEN RETURN
END
W_BASELISSAGE=0
IF FonctionContrat="A" THEN
 * ADMINISTRATIF
 W_TYPEACTIVITE=""
 GOSUB 500
END ELSE
 IF ConvColContrat="02" THEN 
  * MANDATAIRE
  W_TYPEACTIVITE="M"
  CodeConvCol="02"
  GOSUB 1100 ;* lecture CONVENTIONCOL
  IF PeriodeRefConges="0" THEN
   W_FINCONGES02="05"
  END ELSE
   W_FINCONGES02="12"
  END
  GOSUB 600
 END ELSE
  READ ENR_ACTIVITES FROM F.ACTIVITES,ActiviteContrat<1,1> ELSE ENR_ACTIVITES=""
  TypeActivite=EXTRACT(ENR_ACTIVITES,12)
  IF TypeActivite="P" THEN
   * PRESTATAIRE
   W_CODECONVCOL=""
   W_TYPEACTIVITE="P"
   GOSUB 700
  END ELSE
   * INTERMEDIAIRE
   W_REQUETE='TSELECT DETAILINTER AVEC MissionPeriodeI = "':CodAidantContrat:']" AND AVEC MissionPeriodeI = "[':W_PERIODEPAIE:'"'
   EXECUTE W_REQUETE
   EXECUTE 'SAUVE-LISTE LISTDETAIL'
   EXECUTE 'LISTE LISTDETAIL' RETURNING W_MSG
   IF W_MSG<1>#"209" THEN
    W_TYPEACTIVITE="I"
    SELECT F.DETAILINTER TO LISTDETAIL
    W_CODECONVCOL=""
    W_FINI="NON"
    W_RUPTCONTRAT=""
    LOOP
     READNEXT W_CLE FROM LISTDETAIL ELSE W_FINI="OUI"
     UNTIL W_FINI="OUI" DO
      GOSUB 800
    REPEAT
    W_CLE=""
    GOSUB 800
   END
   EXECUTE 'EFFACER-LISTE LISTDETAIL'
  END
 END
END
RETURN
**********
* CALCUL COLLECTIF (W_TYPETRAIT="T" ou "TA")
**********
200 W_REQUETE=""
BEGIN CASE
 CASE W_TYPEACTIVITE="S" OR W_TYPEPERSO="A"
  IF W_SECTEURS="" THEN
   W_REQUETE='TSELECT CONTRAT AVEC NON TestDetailCalcul AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = "" AND AVEC 65 # "O" AND AVEC FonctionContrat = "A" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 7 <= "':W_PERIODEPAIEFIN:'" AND AVEC 8 >= "':W_PERIODEPAIEDEB:'" OR = "" AND AVEC 58 >= "':W_PERIODEPAIE:'" OR = ""'
   IF W_TYPETRAIT="TA" THEN W_REQUETE=W_REQUETE:' AND AVEC TypeSalContrat = "M"'
   EXECUTE W_REQUETE
   EXECUTE 'SAUVE-LISTE LISTDETAIL'
   EXECUTE 'LISTE LISTDETAIL' RETURNING W_MSG
   IF W_MSG<1>="209" THEN RETURN
   SELECT F.CONTRAT TO LISTDETAIL
   W_FINI="NON"
   LOOP
    READNEXT W_CLE FROM LISTDETAIL ELSE W_FINI="OUI"
    UNTIL W_FINI="OUI" DO
     GOSUB 500
   REPEAT
   EXECUTE 'EFFACER-LISTE LISTDETAIL'
  END ELSE
   S=1
   LOOP
    UNTIL W_SECTEURS<S>="" DO
     W_REQUETE='TSELECT CONTRAT AVEC NON TestDetailCalcul AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = ""AND AVEC 65 # "O" AND AVEC FonctionContrat = "A" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 7 <= "':W_PERIODEPAIEFIN:'" AND AVEC 8 >= "':W_PERIODEPAIEDEB:'" OR = "" AND AVEC 58 >= "':W_PERIODEPAIE:'" OR = ""'
     IF W_TYPETRAIT="TA" THEN W_REQUETE=W_REQUETE:' AND AVEC TypeSalContrat = "M"'
     W_REQUETE=W_REQUETE:' AND AVEC SecteurContrat = "':W_SECTEURS<S>:'"'
     EXECUTE W_REQUETE
     EXECUTE 'SAUVE-LISTE LISTDETAIL'
     EXECUTE 'LISTE LISTDETAIL' RETURNING W_MSG
     IF W_MSG<1>="209" THEN RETURN
     SELECT F.CONTRAT TO LISTDETAIL
     W_FINI="NON"
     LOOP
      READNEXT W_CLE FROM LISTDETAIL ELSE W_FINI="OUI"
      UNTIL W_FINI="OUI" DO
       GOSUB 500
     REPEAT
     EXECUTE 'EFFACER-LISTE LISTDETAIL'
     S=S+1
   REPEAT
  END
 CASE W_TYPEACTIVITE="M"
  CodeConvCol="02"
  GOSUB 1100 ;* lecture CONVENTIONCOL
  IF PeriodeRefConges="0" THEN
   W_FINCONGES02="05"
  END ELSE
   W_FINCONGES02="12"
  END
  IF W_SECTEURS="" THEN
   W_REQUETE='TSELECT DETAILMANDAT AVEC NON DetailCalculMandat AND AVEC ContratPeriodeM = "[':W_PERIODEPAIE:'" AND AVEC AssoContratMandat = "':W_CODENTITE:'"'
   IF W_TYPETRAIT="TA" THEN W_REQUETE=W_REQUETE:' AND AVEC TypeSalContratMandat = "M"'
   IF W_SOLDECOMPTE=1 THEN
    W_REQUETE='TSELECT CONTRAT AVEC NON TestDetailCalcul AND AVEC 1 = "02" AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = "" AND AVEC 65 # "O" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 58 = "':W_PERIODEPAIE:'" AND AVEC 58 # ""'
    IF CongNPrisConvCol="1" AND W_FINCONGES02=W_PERIODEPAIE[5,2] THEN
     W_REQUETE=W_REQUETE:' OR AVEC NON TestDetailCalcul AND AVEC 1 = "02" AND AVEC 31 = "0" AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = "" AND AVEC 65 # "O" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 7 <= "':W_PERIODEPAIEFIN:'" AND AVEC 8 >= "':W_PERIODEPAIEDEB:'" OR = "" AND AVEC 58 >= "':W_PERIODEPAIE:'" OR = ""'
    END
   END
   EXECUTE W_REQUETE
   EXECUTE 'SAUVE-LISTE LISTDETAIL'
   EXECUTE 'LISTE LISTDETAIL' RETURNING W_MSG
   IF W_MSG<1>#"209" THEN
    IF W_TYPETRAIT="TA" OR W_SOLDECOMPTE=1 THEN
     SELECT F.CONTRAT TO LISTDETAIL
    END ELSE
     SELECT F.DETAILMANDAT TO LISTDETAIL
    END
    CodeConvCol="02"
    GOSUB 1100 ;* lecture CONVENTIONCOL
    W_FINI="NON"
    LOOP
     READNEXT W_CLE FROM LISTDETAIL ELSE W_FINI="OUI"
     UNTIL W_FINI="OUI" DO
      GOSUB 600
    REPEAT
   END
   EXECUTE 'EFFACER-LISTE LISTDETAIL'
  END ELSE
   S=1
   LOOP
    UNTIL W_SECTEURS<S>="" DO
     W_REQUETE='TSELECT DETAILMANDAT AVEC NON DetailCalculMandat AND AVEC ContratPeriodeM = "[':W_PERIODEPAIE:'" AND AVEC AssoContratMandat = "':W_CODENTITE:'"'
     IF W_TYPETRAIT="TA" THEN W_REQUETE=W_REQUETE:' AND AVEC TypeSalContratMandat = "M"'
     IF BullEmplConvCol=1 THEN
      W_REQUETE=W_REQUETE:' AND AVEC SecteurAideMandat = "':W_SECTEURS<S>:'"'
     END ELSE
      W_REQUETE=W_REQUETE:' AND AVEC SecteurMandat = "':W_SECTEURS<S>:'"'
     END
     IF W_SOLDECOMPTE=1 THEN
      W_REQUETE='TSELECT CONTRAT AVEC NON TestDetailCalcul AND AVEC 1 = "02" AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = "" AND AVEC 65 # "O" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 58 = "':W_PERIODEPAIE:'" AND AVEC 58 # ""'
      IF BullEmplConvCol=1 THEN
       W_REQUETE=W_REQUETE:' AND AVEC CodSecteurContratAide = "':W_SECTEURS<S>:'"'
      END ELSE
       W_REQUETE=W_REQUETE:' AND AVEC SecteurContrat = "':W_SECTEURS<S>:'"'
      END
      IF CongNPrisConvCol="1" AND W_FINCONGES02=W_PERIODEPAIE[5,2] THEN
       W_REQUETE=W_REQUETE:' OR AVEC NON TestDetailCalcul AND AVEC 1 = "02" AND AVEC 31 = "0" AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = "" AND AVEC 65 # "O" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 7 <= "':W_PERIODEPAIEFIN:'" AND AVEC 8 >= "':W_PERIODEPAIEDEB:'" OR = "" AND AVEC 58 >= "':W_PERIODEPAIE:'" OR = ""'
       IF BullEmplConvCol=1 THEN
        W_REQUETE=W_REQUETE:' AND AVEC CodSecteurContratAide = "':W_SECTEURS<S>:'"'
       END ELSE
        W_REQUETE=W_REQUETE:' AND AVEC SecteurContrat = "':W_SECTEURS<S>:'"'
       END
      END
     END
     EXECUTE W_REQUETE
     EXECUTE 'SAUVE-LISTE LISTDETAIL'
     EXECUTE 'LISTE LISTDETAIL' RETURNING W_MSG
     IF W_MSG<1>#"209" THEN
      IF W_TYPETRAIT="TA" OR W_SOLDECOMPTE=1 THEN
       SELECT F.CONTRAT TO LISTDETAIL
      END ELSE
       SELECT F.DETAILMANDAT TO LISTDETAIL
      END
      CodeConvCol="02"
      GOSUB 1100 ;* lecture CONVENTIONCOL
      W_FINI="NON"
      LOOP
       READNEXT W_CLE FROM LISTDETAIL ELSE W_FINI="OUI"
       UNTIL W_FINI="OUI" DO
        GOSUB 600
      REPEAT
     END
     EXECUTE 'EFFACER-LISTE LISTDETAIL'
     S=S+1
   REPEAT
  END
 CASE W_TYPEACTIVITE="P"
  IF W_SECTEURS="" THEN
   W_REQUETE='TSELECT DETAILPREST AVEC ContratPeriodeP = "[':W_PERIODEPAIE:'" AND AVEC NON DetailCalculPrest AND AVEC AssoContratPrest = "':W_CODENTITE:'"'
   IF W_TYPETRAIT="TA" THEN
    W_REQUETE='TSELECT CONTRAT AVEC NON TestDetailCalcul AND AVEC FonctionContrat = "P" AND AVEC TypeActivite = "P" AND AVEC 1 # "02" AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = "" AND AVEC 65 # "O" AND AVEC TypeSalContrat = "M" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 7 <= "':W_PERIODEPAIEFIN:'" AND AVEC 8 >= "':W_PERIODEPAIEDEB:'" OR = "" AND AVEC 58 >= "':W_PERIODEPAIE:'" OR = ""'
   END
   IF W_SOLDECOMPTE=1 THEN
    W_REQUETE='TSELECT CONTRAT AVEC NON TestDetailCalcul AND AVEC TypeActivite = "P" AND AVEC 1 # "02" AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = "" AND AVEC 65 # "O" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 58 = "':W_PERIODEPAIE:'" AND AVEC 58 # ""'
    IF W_PERIODEPAIE[5,2]="05" OR W_PERIODEPAIE[5,2]="12" THEN
     W_REQUETE=W_REQUETE:' OR AVEC NON TestDetailCalcul AND AVEC TypeActivite = "P" AND AVEC 1 # "02" AND AVEC 31 = "0" AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = "" AND AVEC 65 # "O" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 7 <= "':W_PERIODEPAIEFIN:'" AND AVEC 8 >= "':W_PERIODEPAIEDEB:'" OR = "" AND AVEC 58 >= "':W_PERIODEPAIE:'" OR = ""'
    END
   END
   EXECUTE W_REQUETE
   EXECUTE 'SAUVE-LISTE LISTDETAIL'
   EXECUTE 'LISTE LISTDETAIL' RETURNING W_MSG
   IF W_MSG<1>#"209" THEN
    IF W_TYPETRAIT="TA" OR W_SOLDECOMPTE=1 THEN
     SELECT F.CONTRAT TO LISTDETAIL
    END ELSE
     SELECT F.DETAILPREST TO LISTDETAIL
    END
    W_FINI="NON"
    W_CODECONVCOL=""
    LOOP
     READNEXT W_CLE FROM LISTDETAIL ELSE W_FINI="OUI"
     UNTIL W_FINI="OUI" DO
      GOSUB 700
    REPEAT
   END
   EXECUTE 'EFFACER-LISTE LISTDETAIL'
  END ELSE
   S=1
   LOOP
    UNTIL W_SECTEURS<S>="" DO
     W_REQUETE='TSELECT DETAILPREST AVEC ContratPeriodeP = "[':W_PERIODEPAIE:'" AND AVEC NON DetailCalculPrest AND AVEC AssoContratPrest = "':W_CODENTITE:'"'
     W_REQUETE=W_REQUETE:' AND AVEC SecteurPrest = "':W_SECTEURS<S>:'"'
     IF W_TYPETRAIT="TA" THEN
      W_REQUETE='TSELECT CONTRAT AVEC NON TestDetailCalcul AND AVEC FonctionContrat = "P" AND AVEC TypeActivite = "P" AND AVEC 1 # "02" AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = "" AND AVEC 65 # "O" AND AVEC TypeSalContrat = "M" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 7 <= "':W_PERIODEPAIEFIN:'" AND AVEC 8 >= "':W_PERIODEPAIEDEB:'" OR = "" AND AVEC 58 >= "':W_PERIODEPAIE:'" OR = ""'
      W_REQUETE=W_REQUETE:' AND AVEC SecteurContrat = "':W_SECTEURS<S>:'"'
     END
     IF W_SOLDECOMPTE=1 THEN
      W_REQUETE='TSELECT CONTRAT AVEC NON TestDetailCalcul AND AVEC TypeActivite = "P" AND AVEC 1 # "02" AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = "" AND AVEC 65 # "O" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 58 = "':W_PERIODEPAIE:'" AND AVEC 58 # ""'
      W_REQUETE=W_REQUETE:' AND AVEC SecteurContrat = "':W_SECTEURS<S>:'"'
      IF W_PERIODEPAIE[5,2]="05" OR W_PERIODEPAIE[5,2]="12" THEN
       W_REQUETE=W_REQUETE:' OR AVEC NON TestDetailCalcul AND AVEC TypeActivite = "P" AND AVEC 1 # "02" AND AVEC 31 = "0" AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = "" AND AVEC 65 # "O" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 7 <= "':W_PERIODEPAIEFIN:'" AND AVEC 8 >= "':W_PERIODEPAIEDEB:'" OR = "" AND AVEC 58 >= "':W_PERIODEPAIE:'" OR = ""'
       W_REQUETE=W_REQUETE:' AND AVEC SecteurContrat = "':W_SECTEURS<S>:'"'
      END
     END
     EXECUTE W_REQUETE
     EXECUTE 'SAUVE-LISTE LISTDETAIL'
     EXECUTE 'LISTE LISTDETAIL' RETURNING W_MSG
     IF W_MSG<1>#"209" THEN
      IF W_TYPETRAIT="TA" OR W_SOLDECOMPTE=1 THEN
       SELECT F.CONTRAT TO LISTDETAIL
      END ELSE
       SELECT F.DETAILPREST TO LISTDETAIL
      END
      W_FINI="NON"
      W_CODECONVCOL=""
      LOOP
       READNEXT W_CLE FROM LISTDETAIL ELSE W_FINI="OUI"
       UNTIL W_FINI="OUI" DO
        GOSUB 700
      REPEAT
     END
     EXECUTE 'EFFACER-LISTE LISTDETAIL'
     S=S+1
   REPEAT
  END
 CASE W_TYPEACTIVITE="I"
  IF W_SECTEURS="" THEN
   W_REQUETE='TSELECT DETAILINTER AVEC NON DetailCalculInter AND AVEC MissionPeriodeI = "[':W_PERIODEPAIE:'"'
   IF W_TYPETRAIT="TA" THEN W_REQUETE=W_REQUETE:' AND AVEC TypeSalContratInter = "M"'
   W_REQUETE=W_REQUETE:" PAR MissionPeriodeI"
   IF W_SOLDECOMPTE=1 THEN
    W_REQUETE='TSELECT CONTRAT AVEC NON TestDetailCalcul AND AVEC TypeActivite = "I" AND AVEC 1 # "02" AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = "" AND AVEC 65 # "O" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 58 = "':W_PERIODEPAIE:'" AND AVEC 58 # ""'
    IF W_PERIODEPAIE[5,2]="05" OR W_PERIODEPAIE[5,2]="12" THEN
     W_REQUETE=W_REQUETE:' OR AVEC NON TestDetailCalcul AND AVEC TypeActivite = "I" AND AVEC 1 # "02" AND AVEC 31 = "0" AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = "" AND AVEC 65 # "O" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 7 <= "':W_PERIODEPAIEFIN:'" AND AVEC 8 >= "':W_PERIODEPAIEDEB:'" OR = "" AND AVEC 58 >= "':W_PERIODEPAIE:'" OR = ""'
    END
   END  
   EXECUTE W_REQUETE
   EXECUTE 'SAUVE-LISTE LISTDETAIL'
   EXECUTE 'LISTE LISTDETAIL' RETURNING W_MSG
   IF W_MSG<1>#"209" THEN
    IF W_TYPETRAIT="TA" OR W_SOLDECOMPTE=1 THEN
     SELECT F.CONTRAT TO LISTDETAIL
    END ELSE
     SELECT F.DETAILINTER TO LISTDETAIL
    END
    W_CODECONVCOL=""
    W_FINI="NON"
    W_RUPTCONTRAT=""
    LOOP
     READNEXT W_CLE FROM LISTDETAIL ELSE W_FINI="OUI"
     UNTIL W_FINI="OUI" DO
      GOSUB 800
    REPEAT
    W_CLE=""
    GOSUB 800
   END
   EXECUTE 'EFFACER-LISTE LISTDETAIL'
  END ELSE
   S=1
   LOOP
    UNTIL W_SECTEURS<S>="" DO
     W_REQUETE='TSELECT DETAILINTER AVEC NON DetailCalculInter AND AVEC MissionPeriodeI = "[':W_PERIODEPAIE:'"'
     IF W_TYPETRAIT="TA" THEN W_REQUETE=W_REQUETE:' AND AVEC TypeSalContratInter = "M"'
     W_REQUETE=W_REQUETE:' AND AVEC SecteurInter = "':W_SECTEURS<S>:'"'
     W_REQUETE=W_REQUETE:" PAR MissionPeriodeI"
     IF W_SOLDECOMPTE=1 THEN
      W_REQUETE='TSELECT CONTRAT AVEC NON TestDetailCalcul AND AVEC TypeActivite = "I" AND AVEC 1 # "02" AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = "" AND AVEC 65 # "O" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 58 = "':W_PERIODEPAIE:'" AND AVEC 58 # ""'
      W_REQUETE=W_REQUETE:' AND AVEC SecteurContrat = "':W_SECTEURS<S>:'"'
      IF W_PERIODEPAIE[5,2]="05" OR W_PERIODEPAIE[5,2]="12" THEN
       W_REQUETE=W_REQUETE:' OR AVEC NON TestDetailCalcul AND AVEC TypeActivite = "I" AND AVEC 1 # "02" AND AVEC 31 = "0" AND AVEC PaieTraitContrat < "':W_PERIODEPAIE:'" OR = "" AND AVEC 65 # "O" AND AVEC AssocContrat = "':W_CODENTITE:'" AND AVEC 7 <= "':W_PERIODEPAIEFIN:'" AND AVEC 8 >= "':W_PERIODEPAIEDEB:'" OR = "" AND AVEC 58 >= "':W_PERIODEPAIE:'" OR = ""'
       W_REQUETE=W_REQUETE:' AND AVEC SecteurContrat = "':W_SECTEURS<S>:'"'
      END
     END  
     EXECUTE W_REQUETE
     EXECUTE 'SAUVE-LISTE LISTDETAIL'
     EXECUTE 'LISTE LISTDETAIL' RETURNING W_MSG
     IF W_MSG<1>#"209" THEN
      IF W_TYPETRAIT="TA" OR W_SOLDECOMPTE=1 THEN
       SELECT F.CONTRAT TO LISTDETAIL
      END ELSE
       SELECT F.DETAILINTER TO LISTDETAIL
      END
      W_CODECONVCOL=""
      W_FINI="NON"
      W_RUPTCONTRAT=""
      LOOP
       READNEXT W_CLE FROM LISTDETAIL ELSE W_FINI="OUI"
       UNTIL W_FINI="OUI" DO
        GOSUB 800
      REPEAT
      W_CLE=""
      GOSUB 800
     END
     EXECUTE 'EFFACER-LISTE LISTDETAIL'
     S=S+1
   REPEAT
  END
END CASE
RETURN
**********
* APPLICATION DU PROFIL
**********
* LECTURE DU PROFIL DE PAIE
300 CodeProfil=ProfilContrat
GOSUB 1300 ;*lecture PROFIL
W_HEURESMENS=0
W_HEURESHEBDO=0
W_JOURSABSPERIODEPAIE=0
W_SOLDCONG=0
W_HHSOLDCONG=0
W_PASSAGE=0
W_PRIMESUJSPEC="NON"
W_INDEMFERIEADMR="NON"
W_HEURESFORFAITAIRES=0
W_HEURESREELLES=0
W_ABSENCEDERNIERJOUR="NON"
W_HEURESREFABSENCE=0
W_JOURABSMITPSTHERAP=0
W_HEURESREFMITPSTHERAP=0
W_BASERUBCHGAADURSSAF=0
W_BASERUBAADEXOAAD=0
W_BASERUBAADEXOACTIVITE=0
W_BASERUBAADNONEXO=0
W_BASEHEURESBRUTESAAD=0
W_NBMOISMODUL=0
W_SMICMOYENAAD=0
W_BASEAADEXOAAD=0
W_BASEAADEXOACTIVITE=0
BEGIN CASE
 CASE FreqWContrat=1 ;* hebdomadaire
  W_HEURESHEBDO=DureeWContrat
  W_HEURESMENS=INT(DureeWContrat*52/12+1/2)
 CASE FreqWContrat=2 ;* quatorzaine
  W_HEURESHEBDO=INT(DureeWContrat/2+1/2)
  W_HEURESMENS=INT(DureeWContrat*26/12+1/2)
 CASE FreqWContrat=3 ;* mensuelle
  W_HEURESHEBDO=INT(DureeWContrat*12/52+1/2)
  W_HEURESMENS=DureeWContrat
 CASE FreqWContrat=4 ;* annuelle
  W_HEURESHEBDO=INT(DureeWContrat/52+1/2)
  W_HEURESMENS=INT(DureeWContrat/12+1/2)
END CASE
W_PLAFONDSECU=ValPlafondSecu
W_HEURESMENSCONTRAT=W_HEURESMENS
IF PlafSSMensContrat#"" THEN
 W_PLAFONDSECU=PlafSSMensContrat
*END ELSE
* IF W_HEURESHEBDO<W_HORHEBDOLEGAL THEN
*  W_PLAFONDSECU=INT(W_PLAFONDSECU*W_HEURESHEBDO/HorHebdoLegal+1/2)
* END
END
W_JOURS=30
IF DatDebContrat>W_PERIODEPAIEDEB THEN
 IF DatFinContrat#"" THEN
  IF DatFinContrat>W_PERIODEPAIEFIN THEN
   W_JOURS=W_PERIODEPAIEFIN-DatDebContrat+1
  END ELSE
   W_JOURS=DatFinContrat-DatDebContrat+1
  END
 END ELSE
  W_JOURS=W_PERIODEPAIEFIN-DatDebContrat+1
 END
END ELSE
 IF DatFinContrat#"" THEN
  IF DatFinContrat<W_PERIODEPAIEFIN THEN
   W_JOURS=DatFinContrat-W_PERIODEPAIEDEB+1
  END
 END
END
IF W_JOURS>30 THEN W_JOURS=30
W_PLAFONDSECUURSSAF=INT(W_PLAFONDSECU*W_JOURS/30+1/2)
W_PLAFONDSECUURSSAFSAUV=W_PLAFONDSECUURSSAF
IF W_TYPETRAIT="R" THEN
 W_SAUVDETAILCALCUL=ENR_DETAILCALCUL
 I=1
 LOOP
  RubSaisieCal=EXTRACT(ENR_DETAILCALCUL,2,I)
  UNTIL RubSaisieCal="" DO
   IF RubSaisieCal="804" AND TypeContrat="D" THEN
    W_HHSOLDCONG=W_HHSOLDCONG+EXTRACT(ENR_DETAILCALCUL,3,I)
    W_SOLDCONG=W_SOLDCONG+EXTRACT(ENR_DETAILCALCUL,5,I)
   END
   IF RubSaisieCal="801" THEN
    W_MONTDEPARTRETRAITE=W_MONTDEPARTRETRAITE+EXTRACT(ENR_DETAILCALCUL,5,I)
   END
   I=I+1
 REPEAT
 IF W_PERIODEPAIE>=DatMontEnEuro THEN
  IF W_MONTDEPARTRETRAITE>305000 THEN W_MONTDEPARTRETRAITE=305000
 END ELSE
  IF W_MONTDEPARTRETRAITE>2000000 THEN W_MONTDEPARTRETRAITE=2000000
 END
 IF W_TYPEACTIVITE="I" THEN
  IF ENR_DETAILCALCUL<2,1>="0" THEN
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,2,1)
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,3,1)
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,4,1)
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,5,1)
  END
  IF ENR_DETAILCALCUL<17,1>="0" THEN
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,17,1)
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,18,1)
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,19,1)
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,20,1)
  END
 END
 W_PASSAGE=2
* GOSUB 2400
* IF LibCommentContrat#"" THEN
*  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,22;LibCommentContrat)
* END
 RETURN
END
*
* TRAITEMENT DES RUBRIQUES DE SAISIE AUTOMATIQUES QUI SONT INTEGREES DANS LE PROFIL
*
* TRAITEMENT DES HEURES EFFECTIVES SI TYPE PERSONNEL "ADMINISTRATION" ET "MENSUALISE"
*
IF FonctionContrat="A" AND TypeSalContrat="M" AND W_BUDGET#1 THEN
* si heures mensuelles dans suivi des contrats sur la priode de paie est renseigne
* alors on prend cette valeur  la place de l'horaire du contrat
 P=1
 W_DIFFANCOURSCONTRAT=""
 LOOP
  W_PERANCOURSCONTRAT=PerAnCoursContrat<1,P>
  UNTIL W_PERANCOURSCONTRAT="" OR W_PERANCOURSCONTRAT=W_PERIODEPAIE DO
   P=P+1
 REPEAT
 IF W_PERANCOURSCONTRAT=W_PERIODEPAIE THEN W_HEURESMENS=HMensAnCoursContrat<1,P>
 IF W_FINCONTRAT="OUI" THEN
  W_DATFINCONTRAT=OCONV(DatFinContrat,"D4 ")
  IF DatDebContrat<=W_PERIODEPAIEDEB THEN
   IF DernBullContrat=W_DATFINCONTRAT[7,4]:W_DATFINCONTRAT[4,2] THEN
    W_HEURESMENS=INT(W_HEURESMENS*W_DATFINCONTRAT[1,2]/W_NBJRSPERIODEPAIE+1/2)
    W_JOURSABSPERIODEPAIE=W_JOURSABSPERIODEPAIE+W_NBJRSPERIODEPAIE-W_DATFINCONTRAT[1,2]
   END
  END ELSE
   W_DATDEBCONTRAT=OCONV(DatDebContrat,"D4 ")
   IF DernBullContrat=W_DATFINCONTRAT[7,4]:W_DATFINCONTRAT[4,2] THEN
    W_HEURESMENS=INT(W_HEURESMENS*(W_DATFINCONTRAT[1,2]-W_DATDEBCONTRAT[1,2]+1)/W_NBJRSPERIODEPAIE+1/2)
    W_JOURSABSPERIODEPAIE=W_JOURSABSPERIODEPAIE+W_NBJRSPERIODEPAIE-(W_DATFINCONTRAT[1,2]-W_DATDEBCONTRAT[1,2]+1)
   END ELSE
    W_HEURESMENS=INT(W_HEURESMENS*(W_NBJRSPERIODEPAIE-W_DATDEBCONTRAT[1,2]+1)/W_NBJRSPERIODEPAIE+1/2)
    W_JOURSABSPERIODEPAIE=W_JOURSABSPERIODEPAIE+W_NBJRSPERIODEPAIE-(W_NBJRSPERIODEPAIE-W_DATDEBCONTRAT[1,2]+1)
   END
  END
 END ELSE
  IF DatDebContrat>W_PERIODEPAIEDEB THEN
   W_DATDEBCONTRAT=OCONV(DatDebContrat,"D4 ")
   W_HEURESMENS=INT(W_HEURESMENS*(W_NBJRSPERIODEPAIE-W_DATDEBCONTRAT[1,2]+1)/W_NBJRSPERIODEPAIE+1/2)
   W_JOURSABSPERIODEPAIE=W_JOURSABSPERIODEPAIE+W_DATDEBCONTRAT[1,2]-1
  END
 END
* IF ENR_DETAILCALCUL<6><W_HEURESMENS THEN
  W_HEURESMENS=W_HEURESMENS-W_BASELISSAGE-W_HEURESABS
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"806")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_HEURESMENS)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
  W_MONTRUBSAI=INT(W_HEURESMENS*W_TAUXHOR/10000+1/2)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_HEURESMENS+ENR_DETAILCALCUL<6>)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
  W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_HEURESMENS
* END
END
IF ENR_DETAILCALCUL<2>="" THEN
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5;"0")
END
IF ENR_DETAILCALCUL<17>="" THEN
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20;"0")
END
I=1
LOOP
 UNTIL RubSaiProfil<1,I>="" DO
  CodRubSai=RubSaiProfil<1,I>
  GOSUB 1200 ;*lecture RUBSAISIE
  W_BASERUBSAI=""
  W_TAUXHORRUBSAI=""
  W_MONTRUBSAI=0
  W_BASEBRUT=ENR_DETAILCALCUL<6>
  W_MONTBRUT=ENR_DETAILCALCUL<7>
* Cas prime sujetion speciale : est  traiter avant brut acquis
* Cas indemnite Feries (specif ADMR) : est  traiter aprs prime differentielle
  IF CodRubSai="828" OR CodRubSai="827" THEN
   IF CodRubSai="828" THEN W_PRIMESUJSPEC="OUI"
   IF CodRubSai="827" THEN W_INDEMFERIEADMR="OUI"
  END ELSE
   BEGIN CASE
    CASE TypBaseRubSai=1 ;* fixe
     W_BASERUBSAI=MontBaseRubSai
     IF CodRubSai="813" AND W_HEURESTRAV=0 THEN W_BASERUBSAI=0
    CASE TypBaseRubSai=2 ;* composante de bases
     IF RetIncRubSai="R" THEN
      W_BASERUBSAI=W_BASEBRUT
     END ELSE
      W_BASERUBSAI=0
     END
     J=1
     LOOP
      UNTIL ListCodRubSai<1,J>="" DO
       K=1
       LOOP
        UNTIL ENR_DETAILCALCUL<2,K>="" DO
         IF ENR_DETAILCALCUL<2,K>=ListCodRubSai<1,J> THEN
          IF RetIncRubSai="R" THEN
           W_BASERUBSAI=W_BASERUBSAI-ENR_DETAILCALCUL<3,K>
          END ELSE
           W_BASERUBSAI=W_BASERUBSAI+ENR_DETAILCALCUL<3,K>
          END
         END
         K=K+1
       REPEAT       
       J=J+1    
     REPEAT
     IF MontBaseRubSai="" THEN MontBaseRubSai="10000"
     IF CodRubSai="814" AND ConvColContrat="01" THEN
      W_BASERUBSAI=INT(W_BASERUBSAI*TpsTrajet01ConvCol/1000000+1/2)
     END
     IF CodRubSai="830" AND ConvColContrat="01" THEN
      W_BASERUBSAI=INT(W_BASERUBSAI*TpsTrajet01BisConvCol/1000000+1/2)
     END
     IF CodRubSai#"814" AND CodRubSai#"830" THEN
      W_BASERUBSAI=INT(W_BASERUBSAI*MontBaseRubSai/10000+1/2)
     END
    CASE TypBaseRubSai=3 ;* composante de montants
     IF RetIncRubSai="R" THEN
      W_BASERUBSAI=W_MONTBRUT
     END ELSE
      W_BASERUBSAI=0
     END
     J=1
     LOOP
      UNTIL ListCodRubSai<1,J>="" DO
       K=1
       LOOP
        UNTIL ENR_DETAILCALCUL<2,K>="" DO
         IF ENR_DETAILCALCUL<2,K>=ListCodRubSai<1,J> THEN
          IF RetIncRubSai="R" THEN
           W_BASERUBSAI=W_BASERUBSAI-ENR_DETAILCALCUL<5,K>
          END ELSE
           W_BASERUBSAI=W_BASERUBSAI+ENR_DETAILCALCUL<5,K>
          END
         END
         K=K+1
       REPEAT       
       J=J+1    
     REPEAT
     IF MontBaseRubSai="" THEN MontBaseRubSai="10000"
     W_BASERUBSAI=INT(W_BASERUBSAI*MontBaseRubSai/10000+1/2)
   END CASE
   BEGIN CASE
    CASE TypTauxRubSai=0 ;*  saisir (cas des rubriques de prime d'anciennet 833 et 834)
     IF CodRubSai="833" OR CodRubSai="834" THEN
* Si convention FEHAP, ne pas tenir compte des jours de suspension
      IF ConvColContrat="05" THEN
       IF GrilleContrat="" THEN
        W_DATEREFANC=DatDebContrat
       END ELSE
        W_DATEREFANC=DepartGrilContrat
       END
      END ELSE 
       IF GrilleContrat="" THEN
        W_DATEREFANC=DatDebContrat+INT(JrsSuspContrat/100)
       END ELSE
        W_DATEREFANC=DepartGrilContrat+INT(JrsSuspContrat/100)
       END
      END
      W_DATEREFANC=OCONV(W_DATEREFANC,"D4 ")
      W_DATEREFANC=W_DATEREFANC[7,4]:W_DATEREFANC[4,2]
      W_ANNEESANC=W_PERIODEPAIE-W_DATEREFANC
      W_ANNEESANC=INT(W_ANNEESANC/100)
      IF W_ANNEESANC<0 THEN W_ANNEESANC=0
      W_TAUXHORRUBSAI=0
      IF W_ANNEESANC#0 THEN
       IF CodRubSai="833" THEN
        IF W_ANNEESANC>30 THEN W_ANNEESANC=30
       END ELSE
        IF W_ANNEESANC>20 THEN W_ANNEESANC=20
       END
       W_TAUXHORRUBSAI=W_ANNEESANC*100
      END
     END
    CASE TypTauxRubSai=1 ;* fixe
     W_TAUXHORRUBSAI=MontTauxRubSai
     W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
    CASE TypTauxRubSai=2 ;* taux horaire
     IF ChpAppliRubSai="4" THEN
      IF W_TAUXHORDIMJF=0 THEN
       W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
       W_TAUXHORRUBSAI=W_TAUXHORRUBSAI*10
      END ELSE
       IF ConvColContrat="02" THEN
        W_TAUXHORRUBSAI=W_TAUXHORDIMJF
       END ELSE
        W_TAUXHORRUBSAI=INT(W_TAUXHORDIMJF*MontTauxRubSai/10000000+1/2)-W_TAUXHORDIMJF
        W_TAUXHORRUBSAI=(W_TAUXHOR+W_TAUXHORRUBSAI)*10
       END
      END
     END ELSE
      W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
      W_TAUXHORRUBSAI=W_TAUXHORRUBSAI*10
     END
     W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
   END CASE
   BEGIN CASE
    CASE TypMontRubSai=1 ;* fixe
     W_MONTRUBSAI=ValMontRubSai
    CASE TypMontRubSai=2 ;* rsultat base par taux
     W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
   END CASE
   W_TAUXHORRUBSAI=INT(W_TAUXHORRUBSAI/10)*10
   IF SigneRubSai="-" THEN
    IF W_BASERUBSAI#"" THEN W_BASERUBSAI=-W_BASERUBSAI
    W_MONTRUBSAI=-W_MONTRUBSAI
   END
   IF W_MONTRUBSAI#0 THEN
    BEGIN CASE
     CASE ChpAppliRubSai="0" ;* avantage en nature
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;CodRubSai)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;CodRubSai)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;-W_MONTRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
     CASE ChpAppliRubSai="1" OR ChpAppliRubSai="2" ;* aprs net imposable OU frais professionnels
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;CodRubSai)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;W_MONTRUBSAI)
     CASE ChpAppliRubSai="3" OR ChpAppliRubSai="4" ;* M.O.D. OU M.O.D. dim. et jours fris
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;CodRubSai)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAI+ENR_DETAILCALCUL<6>)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
      IF W_TAUXHOR=W_TAUXHORRUBSAI THEN
       W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
      END ELSE
       W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
      END
      IF HorsLissageRubSai=0 THEN
       W_BASELISSAGE=W_BASELISSAGE+W_BASERUBSAI
      END
     CASE ChpAppliRubSai="5" ;* inclus dans brut base et montant
      IF CodRubSai="813" AND W_BASERUBSAI=0 THEN
       NULL
      END ELSE
* SPECIF ADMR : RUB 827 ET CCN 03 (INDEMNITE HEURES FERIEES)
       IF CodRubSai="827" AND ConvColContrat="03" THEN
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;CodRubSai)
        W_BASERUBSAI=INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAI+ENR_DETAILCALCUL<6>)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
        W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
        IF HorsLissageRubSai=0 THEN
         W_BASELISSAGE=W_BASELISSAGE+W_BASERUBSAI
        END
       END ELSE
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;CodRubSai)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAI+ENR_DETAILCALCUL<6>)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
        IF W_TAUXHOR=W_TAUXHORRUBSAI THEN
         W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
        END ELSE
         W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
        END
        IF HorsLissageRubSai=0 THEN
         W_BASELISSAGE=W_BASELISSAGE+W_BASERUBSAI
        END
       END
      END
     CASE ChpAppliRubSai="6" ;* inclus dans brut montant
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;CodRubSai)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
    END CASE
   END
  END
  I=I+1
REPEAT
*
* TRAITEMENT RATTRAPAGE SUR SALAIRES ANTERIEURS
*
READ ENR_RATTSALANT FROM F.RATTSALANT,W_CLE[1,8] THEN
 MontRattSalAnt=EXTRACT(ENR_RATTSALANT,1)
 IF MontRattSalAnt#0 THEN
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"822")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;"0")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;"0")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;MontRattSalAnt)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;MontRattSalAnt+ENR_DETAILCALCUL<7>)
  *DELETE F.RATTSALANT,W_CLE[1,8]
 END
END
*
* indication solde congs pays et congs anciennet pour pied bulletin
*
GOSUB 2500
*
* TRAITEMENT DES HEURES DIFFERENTIELLES SI LISSAGE DES REMUNERATIONS
* ---> uniquement possible pour type personnel PRODUCTION
*
IF LissageContrat=1 AND FonctionContrat#"A" THEN
 P=1
 W_DIFFANCOURSCONTRAT=0
 W_REGMODANCOURSCONTRAT=0
 LOOP
  W_PERANCOURSCONTRAT=PerAnCoursContrat<1,P>
  UNTIL W_PERANCOURSCONTRAT="" OR W_PERANCOURSCONTRAT=W_PERIODEPAIEPREC OR W_PERANCOURSCONTRAT=W_PERIODEPAIE DO
   IF W_PERANCOURSCONTRAT<W_PERIODEPAIE THEN
    W_DIFFANCOURSCONTRAT=W_DIFFANCOURSCONTRAT+DiffAnCoursContrat<1,P>
    W_REGMODANCOURSCONTRAT=W_REGMODANCOURSCONTRAT+RegModAnCoursContrat<1,P>
   END
   P=P+1
 REPEAT
 IF W_PERANCOURSCONTRAT=W_PERIODEPAIEPREC THEN
  W_DIFFANCOURSCONTRAT=W_DIFFANCOURSCONTRAT+DiffAnCoursContrat<1,P>
  W_REGMODANCOURSCONTRAT=W_REGMODANCOURSCONTRAT+RegModAnCoursContrat<1,P>
 END
 IF W_FINCONTRAT="OUI" OR W_FINMODULATION="OUI" THEN
  W_HEURESREGULMODUL=0
  IF TypLissageContrat="S" THEN
   IF DatDebContrat>W_PERIODEPAIEDEB AND DatDebContrat<=W_PERIODEPAIEFIN THEN
    W_DATDEBCONTRAT=OCONV(DatDebContrat,"D4 ")
    IF DatFinContrat="" THEN
     W_HEURESABS=W_HEURESABS+INT(W_HEURESMENS*(W_DATDEBCONTRAT[1,2]-1)/W_NBJRSPERIODEPAIE+1/2)
    END ELSE
     IF DatFinContrat<=W_PERIODEPAIEFIN THEN
      W_DATFINCONTRAT=OCONV(DatFinContrat,"D4 ")
      W_HEURESABS=W_HEURESABS+INT(W_HEURESMENS*(W_NBJRSPERIODEPAIE-(W_DATFINCONTRAT[1,2]-W_DATDEBCONTRAT[1,2]+1))/W_NBJRSPERIODEPAIE+1/2)
     END ELSE
      W_HEURESABS=W_HEURESABS+INT(W_HEURESMENS*(W_DATDEBCONTRAT[1,2]-1)/W_NBJRSPERIODEPAIE+1/2)
     END
    END
   END ELSE
    IF DatFinContrat#"" THEN
     IF DatFinContrat<=W_PERIODEPAIEFIN THEN
      W_DATFINCONTRAT=OCONV(DatFinContrat,"D4 ")
      W_HEURESABS=W_HEURESABS+INT(W_HEURESMENS*(W_NBJRSPERIODEPAIE-W_DATFINCONTRAT[1,2])/W_NBJRSPERIODEPAIE+1/2)
     END
    END
   END
   IF W_TYPETRAIT="I" OR W_TYPETRAIT="T" THEN
    IF W_PERANCOURSCONTRAT=W_PERIODEPAIEPREC THEN
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,76,P+1;W_PERIODEPAIE)
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,77,P+1;W_HEURESMENS)
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,78,P+1;W_HEURESABS)
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,79,P+1;W_BASELISSAGE)
    END ELSE
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,76,P;W_PERIODEPAIE)
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,77,P;W_HEURESMENS)
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,78,P;W_HEURESABS)
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,79,P;W_BASELISSAGE)
    END
    W_HEURESFORFAITAIRES=W_HEURESMENS-W_HEURESABS
    W_HEURESREELLES=W_BASELISSAGE
   END
   W_HEURESDIFF=W_HEURESMENS-W_BASELISSAGE-W_HEURESABS
   IF W_HEURESDIFF#0 THEN
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"805")
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_HEURESDIFF)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
    W_MONTRUBSAI=INT(W_HEURESDIFF*W_TAUXHOR/10000+1/2)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_HEURESDIFF+ENR_DETAILCALCUL<6>)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
    W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_HEURESDIFF
   END
   IF W_TYPETRAIT="I" OR W_TYPETRAIT="T" THEN
    IF W_PERANCOURSCONTRAT=W_PERIODEPAIEPREC THEN
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P+1;-W_HEURESDIFF)
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,100,P+1;"0")
    END ELSE
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P;-W_HEURESDIFF)
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,100,P;"0")
    END
    GOSUB 1800
   END 
  END ELSE
   IF TypLissageContrat="C" THEN
    IF DatDebContrat>W_PERIODEPAIEDEB AND DatDebContrat<=W_PERIODEPAIEFIN THEN
     W_DATDEBCONTRAT=OCONV(DatDebContrat,"D4 ")
     IF DatFinContrat="" THEN
      W_HEURESABS=W_HEURESABS+INT(W_HEURESMENS*(W_DATDEBCONTRAT[1,2]-1)/W_NBJRSPERIODEPAIE+1/2)
     END ELSE
      IF DatFinContrat<=W_PERIODEPAIEFIN THEN
       W_DATFINCONTRAT=OCONV(DatFinContrat,"D4 ")
       W_HEURESABS=W_HEURESABS+INT(W_HEURESMENS*(W_NBJRSPERIODEPAIE-(W_DATFINCONTRAT[1,2]-W_DATDEBCONTRAT[1,2]+1))/W_NBJRSPERIODEPAIE+1/2)
      END ELSE
       W_HEURESABS=W_HEURESABS+INT(W_HEURESMENS*(W_DATDEBCONTRAT[1,2]-1)/W_NBJRSPERIODEPAIE+1/2)
      END
     END
    END ELSE
     IF DatFinContrat#"" THEN
      IF DatFinContrat<=W_PERIODEPAIEFIN THEN
       W_DATFINCONTRAT=OCONV(DatFinContrat,"D4 ")
       W_HEURESABS=W_HEURESABS+INT(W_HEURESMENS*(W_NBJRSPERIODEPAIE-W_DATFINCONTRAT[1,2])/W_NBJRSPERIODEPAIE+1/2)
      END
     END
    END
    W_HEURESDIFF=W_HEURESMENS-W_BASELISSAGE-W_HEURESABS 
    IF W_TYPETRAIT="I" OR W_TYPETRAIT="T" THEN
     IF W_PERANCOURSCONTRAT=W_PERIODEPAIEPREC THEN
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,76,P+1;W_PERIODEPAIE)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,77,P+1;W_HEURESMENS)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,78,P+1;W_HEURESABS)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,79,P+1;W_BASELISSAGE)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P+1;-W_HEURESDIFF)
     END ELSE
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,76,P;W_PERIODEPAIE)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,77,P;W_HEURESMENS)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,78,P;W_HEURESABS)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,79,P;W_BASELISSAGE)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P;-W_HEURESDIFF)
     END
    END
    IF W_HEURESDIFF#0 THEN
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"805")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_HEURESDIFF)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
     W_MONTRUBSAI=INT(W_HEURESDIFF*W_TAUXHOR/10000+1/2)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_HEURESDIFF+ENR_DETAILCALCUL<6>)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
     W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_HEURESDIFF
    END
    W_HEURESREGULMODUL=W_DIFFANCOURSCONTRAT-W_REGMODANCOURSCONTRAT-W_HEURESDIFF
    IF W_HEURESREGULMODUL#0 THEN
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"835")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_HEURESREGULMODUL)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
     W_MONTRUBSAI=INT((W_HEURESREGULMODUL)*W_TAUXHOR/10000+1/2)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_HEURESREGULMODUL+ENR_DETAILCALCUL<6>)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
     W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_HEURESREGULMODUL
    END
    IF W_TYPETRAIT="I" OR W_TYPETRAIT="T" THEN
     IF W_PERANCOURSCONTRAT=W_PERIODEPAIEPREC THEN
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,100,P+1;W_HEURESREGULMODUL)
     END ELSE
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,100,P;W_HEURESREGULMODUL)
     END
     GOSUB 1800
    END
   END ELSE
    IF DatDebContrat>W_PERIODEPAIEDEB AND DatDebContrat<=W_PERIODEPAIEFIN THEN
     W_DATDEBCONTRAT=OCONV(DatDebContrat,"D4 ")
     IF DatFinContrat="" THEN
      W_HEURESABS=W_HEURESABS+INT(W_HEURESMENS*(W_DATDEBCONTRAT[1,2]-1)/W_NBJRSPERIODEPAIE+1/2)
     END ELSE
      IF DatFinContrat<=W_PERIODEPAIEFIN THEN
       W_DATFINCONTRAT=OCONV(DatFinContrat,"D4 ")
       W_HEURESABS=W_HEURESABS+INT(W_HEURESMENS*(W_NBJRSPERIODEPAIE-(W_DATFINCONTRAT[1,2]-W_DATDEBCONTRAT[1,2]+1))/W_NBJRSPERIODEPAIE+1/2)
      END ELSE
       W_HEURESABS=W_HEURESABS+INT(W_HEURESMENS*(W_DATDEBCONTRAT[1,2]-1)/W_NBJRSPERIODEPAIE+1/2)
      END
     END
    END ELSE
     IF DatFinContrat#"" THEN
      IF DatFinContrat<=W_PERIODEPAIEFIN THEN
       W_DATFINCONTRAT=OCONV(DatFinContrat,"D4 ")
       W_HEURESABS=W_HEURESABS+INT(W_HEURESMENS*(W_NBJRSPERIODEPAIE-W_DATFINCONTRAT[1,2])/W_NBJRSPERIODEPAIE+1/2)
      END
     END
    END
    W_HEURESDIFF=W_HEURESMENS-W_BASELISSAGE-W_HEURESABS 
    IF W_TYPETRAIT="I" OR W_TYPETRAIT="T" THEN
     IF W_PERANCOURSCONTRAT=W_PERIODEPAIEPREC THEN
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,76,P+1;W_PERIODEPAIE)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,77,P+1;W_HEURESMENS)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,78,P+1;W_HEURESABS)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,79,P+1;W_BASELISSAGE)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P+1;-W_HEURESDIFF)
     END ELSE
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,76,P;W_PERIODEPAIE)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,77,P;W_HEURESMENS)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,78,P;W_HEURESABS)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,79,P;W_BASELISSAGE)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P;-W_HEURESDIFF)
     END
    END
    IF W_HEURESDIFF#0 THEN
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"805")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_HEURESDIFF)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
     W_MONTRUBSAI=INT(W_HEURESDIFF*W_TAUXHOR/10000+1/2)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_HEURESDIFF+ENR_DETAILCALCUL<6>)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
     W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_HEURESDIFF
    END
    W_HEURESFORFAITAIRES=W_HEURESMENS-W_HEURESABS
    W_HEURESREELLES=W_BASELISSAGE
    W_HEURESREGULMODUL=W_DIFFANCOURSCONTRAT-W_REGMODANCOURSCONTRAT-W_HEURESDIFF
    IF W_HEURESREGULMODUL>0 THEN
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"835")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_HEURESREGULMODUL)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
     W_MONTRUBSAI=INT((W_HEURESREGULMODUL)*W_TAUXHOR/10000+1/2)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_HEURESREGULMODUL+ENR_DETAILCALCUL<6>)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
     W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_HEURESREGULMODUL
     IF W_TYPETRAIT="I" OR W_TYPETRAIT="T" THEN
      IF W_PERANCOURSCONTRAT=W_PERIODEPAIEPREC THEN
       ENR_CONTRAT=REPLACE(ENR_CONTRAT,100,P+1;W_HEURESREGULMODUL)
      END ELSE
       ENR_CONTRAT=REPLACE(ENR_CONTRAT,100,P;W_HEURESREGULMODUL)
      END
      GOSUB 1800
     END
    END ELSE
     IF W_TYPETRAIT="I" OR W_TYPETRAIT="T" THEN
      IF W_PERANCOURSCONTRAT=W_PERIODEPAIEPREC THEN
       ENR_CONTRAT=REPLACE(ENR_CONTRAT,100,P+1;"0")
      END ELSE
       ENR_CONTRAT=REPLACE(ENR_CONTRAT,100,P;"0")
      END
      GOSUB 1800
     END
    END
   END
  END
 END ELSE
  IF DatDebContrat>W_PERIODEPAIEDEB AND DatDebContrat<=W_PERIODEPAIEFIN THEN
   W_DATDEBCONTRAT=OCONV(DatDebContrat,"D4 ")
   W_HEURESABS=W_HEURESABS+INT(W_HEURESMENS*(W_DATDEBCONTRAT[1,2]-1)/W_NBJRSPERIODEPAIE+1/2)
  END
  IF W_TYPETRAIT="I" OR W_TYPETRAIT="T" THEN
   IF W_PERANCOURSCONTRAT=W_PERIODEPAIEPREC THEN
    ENR_CONTRAT=REPLACE(ENR_CONTRAT,76,P+1;W_PERIODEPAIE)
    ENR_CONTRAT=REPLACE(ENR_CONTRAT,77,P+1;W_HEURESMENS)
    ENR_CONTRAT=REPLACE(ENR_CONTRAT,78,P+1;W_HEURESABS)
    ENR_CONTRAT=REPLACE(ENR_CONTRAT,79,P+1;W_BASELISSAGE)
   END ELSE
    ENR_CONTRAT=REPLACE(ENR_CONTRAT,76,P;W_PERIODEPAIE)
    ENR_CONTRAT=REPLACE(ENR_CONTRAT,77,P;W_HEURESMENS)
    ENR_CONTRAT=REPLACE(ENR_CONTRAT,78,P;W_HEURESABS)
    ENR_CONTRAT=REPLACE(ENR_CONTRAT,79,P;W_BASELISSAGE)
   END
   W_HEURESFORFAITAIRES=W_HEURESMENS-W_HEURESABS
   W_HEURESREELLES=W_BASELISSAGE
  END
   W_HEURESDIFF=W_HEURESMENS-W_BASELISSAGE-W_HEURESABS
   IF W_HEURESDIFF#0 THEN
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"805")
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_HEURESDIFF)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
    W_MONTRUBSAI=INT(W_HEURESDIFF*W_TAUXHOR/10000+1/2)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_HEURESDIFF+ENR_DETAILCALCUL<6>)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
    W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_HEURESDIFF
   END
   IF W_TYPETRAIT="I" OR W_TYPETRAIT="T" THEN
    IF W_PERANCOURSCONTRAT=W_PERIODEPAIEPREC THEN
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P+1;-W_HEURESDIFF)
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,100,P+1;W_HEURESREGULMODUL)
    END ELSE
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P;-W_HEURESDIFF)
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,100,P;W_HEURESREGULMODUL)
    END
    GOSUB 1800
   END 
 END 
END ELSE
*
* MAJ SUIVI DES CONTRATS DANS TOUS LES AUTRES CAS
*
 GOSUB 2400
 W_PASSAGE=1
 IF W_BUDGET#1 THEN
  IF TypeSalContrat="H" THEN
   IF W_FINCONTRAT="OUI" THEN
    W_DATFINCONTRAT=OCONV(DatFinContrat,"D4 ")
    IF DatDebContrat<=W_PERIODEPAIEDEB THEN
     IF DernBullContrat=W_DATFINCONTRAT[7,4]:W_DATFINCONTRAT[4,2] THEN
      W_JOURSABSPERIODEPAIE=W_JOURSABSPERIODEPAIE+W_NBJRSPERIODEPAIE-W_DATFINCONTRAT[1,2]
     END
    END ELSE
     W_DATDEBCONTRAT=OCONV(DatDebContrat,"D4 ")
     IF DernBullContrat=W_DATFINCONTRAT[7,4]:W_DATFINCONTRAT[4,2] THEN
      W_JOURSABSPERIODEPAIE=W_JOURSABSPERIODEPAIE+W_NBJRSPERIODEPAIE-(W_DATFINCONTRAT[1,2]-W_DATDEBCONTRAT[1,2]+1)
     END ELSE
      W_JOURSABSPERIODEPAIE=W_JOURSABSPERIODEPAIE+W_NBJRSPERIODEPAIE-(W_NBJRSPERIODEPAIE-W_DATDEBCONTRAT[1,2]+1)
     END
    END
   END ELSE
    IF DatDebContrat>W_PERIODEPAIEDEB THEN
     W_DATDEBCONTRAT=OCONV(DatDebContrat,"D4 ")
     W_JOURSABSPERIODEPAIE=W_JOURSABSPERIODEPAIE+W_DATDEBCONTRAT[1,2]-1
    END
   END
  END
  IF W_HEURESABS=0 THEN
   W_HEURESABS=INT(W_HEURESMENSCONTRAT*(W_JOURSABS+W_JOURSABSPERIODEPAIE)/W_NBJRSPERIODEPAIE+1/2)
  END ELSE
   W_HEURESABS=W_HEURESABS+INT(W_HEURESMENSCONTRAT*W_JOURSABSPERIODEPAIE/W_NBJRSPERIODEPAIE+1/2)
  END
  P=1
  W_DIFFANCOURSCONTRAT=""
  LOOP
   W_PERANCOURSCONTRAT=PerAnCoursContrat<1,P>
   UNTIL W_PERANCOURSCONTRAT="" OR W_PERANCOURSCONTRAT=W_PERIODEPAIEPREC OR W_PERANCOURSCONTRAT=W_PERIODEPAIE DO
    P=P+1
  REPEAT
  W_HEURESDIFF=ENR_DETAILCALCUL<6>+W_HEURESABS-W_HEURESMENSCONTRAT
  IF W_PERANCOURSCONTRAT=W_PERIODEPAIEPREC THEN
   ENR_CONTRAT=REPLACE(ENR_CONTRAT,76,P+1;W_PERIODEPAIE)
   ENR_CONTRAT=REPLACE(ENR_CONTRAT,77,P+1;W_HEURESMENSCONTRAT)
   ENR_CONTRAT=REPLACE(ENR_CONTRAT,78,P+1;W_HEURESABS)
   IF ENR_DETAILCALCUL<6>="" THEN
    ENR_CONTRAT=REPLACE(ENR_CONTRAT,79,P+1;"0")
   END ELSE
    ENR_CONTRAT=REPLACE(ENR_CONTRAT,79,P+1;ENR_DETAILCALCUL<6>)
   END
   ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P+1;W_HEURESDIFF)
   ENR_CONTRAT=REPLACE(ENR_CONTRAT,100,P+1;"0")
  END ELSE
   ENR_CONTRAT=REPLACE(ENR_CONTRAT,76,P;W_PERIODEPAIE)
   ENR_CONTRAT=REPLACE(ENR_CONTRAT,77,P;W_HEURESMENSCONTRAT)
   ENR_CONTRAT=REPLACE(ENR_CONTRAT,78,P;W_HEURESABS)
   IF ENR_DETAILCALCUL<6>="" THEN
    ENR_CONTRAT=REPLACE(ENR_CONTRAT,79,P;"0")
   END ELSE
    ENR_CONTRAT=REPLACE(ENR_CONTRAT,79,P;ENR_DETAILCALCUL<6>)
   END
   ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P;W_HEURESDIFF)
   ENR_CONTRAT=REPLACE(ENR_CONTRAT,100,P;"0")
  END
  W_HEURESFORFAITAIRES=W_HEURESMENSCONTRAT-W_HEURESABS
  W_HEURESREELLES=ENR_DETAILCALCUL<6>
  GOSUB 1800
 END
END
*
* INDICATION EN CLAIR DES ABSENCES OU DES COMMENTAIRES SUR BULLETIN
*
IF W_PASSAGE=0 THEN W_PASSAGE=2
GOSUB 2400
*IF LibCommentContrat#"" THEN
* ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,22;LibCommentContrat)
*END
*
* TRAITEMENT DES CONGES PAYES SI PAIEMENT AU MOIS
*
IF CPMoisContrat=1 THEN
 IF TauxCongConvCol#"" AND TauxCongConvCol#0 THEN
  CodRubSai=802
  GOSUB 1200 ;*lecture RUBSAISIE
  W_DATDEBCONTRAT1=OCONV(DatDebContrat,"D4 ")
  W_DATDEBCONTRAT1=W_DATDEBCONTRAT1[7,4]:W_DATDEBCONTRAT1[4,2]
  IF ConvColContrat="02" THEN
   IF W_DATDEBCONTRAT1<200004 THEN
    W_ANNEEANCIENNETE=INT((200003-W_DATDEBCONTRAT1)/100)
    W_ANNEEANCIENNETE=INT(W_ANNEEANCIENNETE/5)
    IF W_ANNEEANCIENNETE>4 THEN W_ANNEEANCIENNETE=4
    W_TAUXANCIENNETE=W_ANNEEANCIENNETE*32
   END ELSE
    W_TAUXANCIENNETE=0
   END
  END ELSE
   W_TAUXANCIENNETE=0
  END
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"802")
  W_MONTRUBSAI=INT(ENR_DETAILCALCUL<7>*(TauxCongConvCol+W_TAUXANCIENNETE)/10000+1/2)
  W_BASERUBSAI=INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
  W_HEURESORANGE=W_HEURESORANGE+W_BASERUBSAI
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAI+ENR_DETAILCALCUL<6>)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
  W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
  IF HorsLissageRubSai=0 THEN
   W_BASELISSAGE=W_BASELISSAGE+W_BASERUBSAI
  END
 END
END
*
* PRIME DIFFERENTIELLE SI TAUX HORAIRE AIDANT < TAUX HORAIRE SMIC
*
IF TauxHorPlan35HEtab="" OR TauxHorPlan35HEtab="0" THEN
 IF W_TAUXHOR<ValSmicHor*100 AND NatureContrat="" THEN
  IF W_HEURESPRIMEDIFF#0 THEN
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"810")
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_HEURESPRIMEDIFF)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;ValSmicHor*100-W_TAUXHOR)
   W_MONTPRIMEDIFF=INT(W_HEURESPRIMEDIFF*(ValSmicHor*100-W_TAUXHOR)/10000+1/2)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTPRIMEDIFF)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTPRIMEDIFF+ENR_DETAILCALCUL<7>)
   IF W_BUDGET=1 THEN
    W_MONTRUBSAIMOD=W_MONTRUBSAIMOD+INT(W_MONTPRIMEDIFF*W_HEURESPRIMEDIFFMOD/W_HEURESPRIMEDIFF+1/2)
   END
  END
 END
END ELSE
 IF ValSmicHor<TauxHorPlan35HEtab THEN
  W_SMICPRIMEDIFF=TauxHorPlan35HEtab
 END ELSE
  W_SMICPRIMEDIFF=ValSmicHor
 END
 IF W_TAUXHOR<W_SMICPRIMEDIFF*100 AND NatureContrat="" THEN
  IF W_HEURESPRIMEDIFF#0 THEN
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"810")
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_HEURESPRIMEDIFF)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_SMICPRIMEDIFF*100-W_TAUXHOR)
   W_MONTPRIMEDIFF=INT(W_HEURESPRIMEDIFF*(W_SMICPRIMEDIFF*100-W_TAUXHOR)/10000+1/2)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTPRIMEDIFF)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTPRIMEDIFF+ENR_DETAILCALCUL<7>)
   IF W_BUDGET=1 THEN
    W_MONTRUBSAIMOD=W_MONTRUBSAIMOD+INT(W_MONTPRIMEDIFF*W_HEURESPRIMEDIFFMOD/W_HEURESPRIMEDIFF+1/2)
   END
  END
 END
END
*
* CALCUL INDEMNITE FERIES EXCLUSIVEMENT RESERVE A A.D.M.R. ET POUR PERSONNEL DE PRODUCTION
* (RUB DE SAISIE 827 SI RENCONTREE DANS LE PROFIL DE PAIE DANS RUB. AUTO)
*
IF W_INDEMFERIEADMR="OUI" THEN
 CodRubSai=827
 GOSUB 1200 ;*lecture RUBSAISIE
 W_BASERUBSAI=""
 W_TAUXHORRUBSAI=""
 W_MONTRUBSAI=0
 W_BASEBRUT=ENR_DETAILCALCUL<6>
 W_MONTBRUT=ENR_DETAILCALCUL<7>
 IF RetIncRubSai="R" THEN
  W_BASERUBSAI=W_MONTBRUT
 END ELSE
  W_BASERUBSAI=0
 END
 J=1
 LOOP
  UNTIL ListCodRubSai<1,J>="" DO
   K=1
   LOOP
    UNTIL ENR_DETAILCALCUL<2,K>="" DO
     IF ENR_DETAILCALCUL<2,K>=ListCodRubSai<1,J> THEN
      IF RetIncRubSai="R" THEN
       W_BASERUBSAI=W_BASERUBSAI-ENR_DETAILCALCUL<5,K>
      END ELSE
       W_BASERUBSAI=W_BASERUBSAI+ENR_DETAILCALCUL<5,K>
      END
     END
     K=K+1
   REPEAT       
   J=J+1    
 REPEAT
 W_TAUXHORRUBSAI=MontTauxRubSai
 W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
 W_TAUXHORRUBSAI=INT(W_TAUXHORRUBSAI/10)*10
 IF W_MONTRUBSAI#0 THEN
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"827")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
 END
END
*
* PRIME PRECARITE SI CONTRAT A DUREE DETERMINEE
*
IF W_FINCONTRAT="OUI" THEN
 IF PrecaLicContrat=1 THEN
  IF TypeContrat="D" THEN
   W_CUMULBRUTCONTRAT=0
   GOSUB 2100
   IF W_BUDGET=1 THEN
    W_CUMULBRUTCONTRAT=0
    W_NBMOIS=INT((W_PERIODEPAIEDEB-1-DatDebContrat)/30+1/2)
    W_CUMULBRUTCONTRAT=INT(DureeWContrat*W_TAUXHOR/10000+1/2)
    W_CUMULBRUTCONTRAT=W_CUMULBRUTCONTRAT*W_NBMOIS
   END
   CodRubSai=809
   GOSUB 1200 ;*lecture RUBSAISIE
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;CodRubSai)
* SI DATE DE DEBUT DE CONTRAT < 20/01/2002 ALORS TAUX = 6%
   IF DatDebContrat<12439 THEN MontTauxRubSai=60000
   W_MONTRUBSAI=INT((ENR_DETAILCALCUL<7>+W_CUMULBRUTCONTRAT)*MontTauxRubSai/1000000+1/2)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;"")
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;"")
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
   IF ConvColContrat="04" AND TypeContrat="I" THEN
    W_BASERUBSAI=INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
    W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
   END
  END
 END
END
*
* CONGES PAYES POUR SOLDE (si pas paiement des congs au mois)
*
IF W_FINCONTRAT="OUI" AND W_BUDGET#1 THEN
 IF CPMoisContrat#1 THEN
  CodRubSai=804
  GOSUB 1200 ;*lecture RUBSAISIE
  W_SOLDECP=0
  IF CongOuvrConvCol=2 THEN
   W_SOLDECP=W_SOLDECP+INT((CPRestConsoContrat+CFRestConsoContrat-CPCoursPrisJContrat)*JrOuvrMContrat/100+1/2)
  END ELSE
   W_SOLDECP=W_SOLDECP+INT((CPRestConsoContrat+CFRestConsoContrat-CPCoursPrisJContrat)*JrOuvrMContrat*12/1000+1/2)
  END
  IF AncOuvrConvCol=2 THEN
   W_SOLDECP=W_SOLDECP+INT(CAncRestContrat*JrOuvrMContrat/100+1/2)
  END ELSE
   W_SOLDECP=W_SOLDECP+INT(CAncRestContrat*JrOuvrMContrat*12/1000+1/2)
  END
  W_SOLDECP=W_SOLDECP+CPCoursMContrat
  W_MONTRUBSAI=INT((ENR_DETAILCALCUL<7>/10)+1/2)
  W_MONTRUBSAI=W_MONTRUBSAI+W_SOLDECP-W_MONTCPMOIS
  IF TypeContrat="D" THEN W_SOLDCONG=W_MONTRUBSAI
  IF W_MONTRUBSAI#0 THEN
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;CodRubSai)
   IF TauxHorPlan35HEtab="" OR TauxHorPlan35HEtab="0" THEN
    IF W_TAUXHOR<ValSmicHor*100 AND NatureContrat="" THEN
     W_BASERUBSAI=INT(W_MONTRUBSAI*100/ValSmicHor+1/2)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;ValSmicHor*100)
    END ELSE
     W_BASERUBSAI=INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
    END
   END ELSE
    IF ValSmicHor<TauxHorPlan35HEtab THEN
     IF W_TAUXHOR<TauxHorPlan35HEtab*100 AND NatureContrat="" THEN
      W_BASERUBSAI=INT(W_MONTRUBSAI*100/TauxHorPlan35HEtab+1/2)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;TauxHorPlan35HEtab*100)
     END ELSE
      W_BASERUBSAI=INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
     END
    END ELSE
     IF W_TAUXHOR<ValSmicHor*100 AND NatureContrat="" THEN
      W_BASERUBSAI=INT(W_MONTRUBSAI*100/ValSmicHor+1/2)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;ValSmicHor*100)
     END ELSE
      W_BASERUBSAI=INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
     END
    END
   END
   IF TypeContrat="D" THEN W_HHSOLDCONG=W_BASERUBSAI
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
*   W_HEURESORANGE=W_HEURESORANGE+W_BASERUBSAI
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAI+ENR_DETAILCALCUL<6>)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
  END
 END
END
*
* PAIEMENT DES CONGES PAYES NON PRIS EN MAI OU DECEMBRE SELON CCN AVANT BASCULEMENT DES COMPTEURS
*
IF W_PERIODEPAIE[5,2]="05" AND PeriodeRefConges="0" AND W_FINCONTRAT="NON" AND CongNPrisConvCol="1" AND CPMoisContrat#1 AND W_SOLDECONGESJOURS>0 THEN
 GOSUB 2600
END
IF W_PERIODEPAIE[5,2]="12" AND PeriodeRefConges="1" AND W_FINCONTRAT="NON" AND CongNPrisConvCol="1" AND CPMoisContrat#1 AND W_SOLDECONGESJOURS>0 THEN
 GOSUB 2600
END
*
* CALCUL INDEMNITE DE DEPART A LA RETRAITE EVENTUELLE
*
IF W_FINCONTRAT="OUI" THEN
 IF MotifFinContrat="38" OR MotifFinContrat="39" THEN
  W_MONTINDLICRET=0
  IF W_BUDGET=1 THEN
   W_TYPELICRET="R"
   GOSUB 2800
  END ELSE
   CALL CalcIndLicRet(CodAidantContrat,"R",W_MONTINDLICRET,W_PERIODEPAIE)
  END
  IF W_MONTINDLICRET#0 THEN
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"801")
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;"")
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;"")
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTINDLICRET)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTINDLICRET+ENR_DETAILCALCUL<7>)
   IF W_PERIODEPAIE>=DatMontEnEuro THEN
    IF W_MONTINDLICRET>305000 THEN W_MONTDEPARTRETRAITE=305000 ELSE W_MONTDEPARTRETRAITE=W_MONTINDLICRET
   END ELSE
    IF W_MONTINDLICRET>2000000 THEN W_MONTDEPARTRETRAITE=2000000 ELSE W_MONTDEPARTRETRAITE=W_MONTINDLICRET
   END
  END
 END
END
*
* PRIME DIFFERENTIELLE SI TAUX HORAIRE AIDANT < TAUX HORAIRE MINIMUM CONVENTIONNEL 
* POUR CDI ET CCN 04 (FAMILLES RURALES)
*
IF ConvColContrat="04" AND TypeContrat="I" THEN
 IF W_TAUXHOR<TxMiniCdi04ConvCol THEN
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"810")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_HEURESPRIMEDIFF)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;TxMiniCdi04ConvCol-W_TAUXHOR)
  W_MONTPRIMEDIFF=INT(W_HEURESPRIMEDIFF*(TxMiniCdi04ConvCol-W_TAUXHOR)/1000+1/2)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTPRIMEDIFF)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTPRIMEDIFF+ENR_DETAILCALCUL<7>)
 END
END
*
* CALCUL PRIME SUJETION SPECIALE DU PERSONNEL SOIGNANT
* (RUB DE SAISIE 828 SI RENCONTREE DANS LE PROFIL DE PAIE DANS RUB. AUTO)
*
IF W_PRIMESUJSPEC="OUI" THEN
 CodRubSai=828
 GOSUB 1200 ;*lecture RUBSAISIE
 W_BASERUBSAI=""
 W_TAUXHORRUBSAI=""
 W_MONTRUBSAI=0
 W_BASEBRUT=ENR_DETAILCALCUL<6>
 W_MONTBRUT=ENR_DETAILCALCUL<7>
 IF RetIncRubSai="R" THEN
  W_BASERUBSAI=W_MONTBRUT
 END ELSE
  W_BASERUBSAI=0
 END
 J=1
 LOOP
  UNTIL ListCodRubSai<1,J>="" DO
   K=1
   LOOP
    UNTIL ENR_DETAILCALCUL<2,K>="" DO
     IF ENR_DETAILCALCUL<2,K>=ListCodRubSai<1,J> THEN
      IF RetIncRubSai="R" THEN
       W_BASERUBSAI=W_BASERUBSAI-ENR_DETAILCALCUL<5,K>
      END ELSE
       W_BASERUBSAI=W_BASERUBSAI+ENR_DETAILCALCUL<5,K>
      END
     END
     K=K+1
   REPEAT       
   J=J+1    
 REPEAT
 W_TAUXHORRUBSAI=MontTauxRubSai
 W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
 W_TAUXHORRUBSAI=INT(W_TAUXHORRUBSAI/10)*10
 IF W_MONTRUBSAI#0 THEN
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"828")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
 END
END
IF W_BUDGET=1 THEN
 W_TRAITMOIBRUT=0
 GOSUB 3000
END
IF ENR_DETAILCALCUL<2,1>="0" THEN
 ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,2,1)
 ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,3,1)
 ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,4,1)
 ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,5,1)
END
IF ENR_DETAILCALCUL<17,1>="0" THEN
 ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,17,1)
 ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,18,1)
 ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,19,1)
 ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,20,1)
END
RETURN
**********
* TRAITEMENT DES RUBRIQUES DE CHARGES DU PROFIL
**********
350 W_RUBEXOTOT=""
W_RUBEXOPLAF=""
W_RUBNONEXOTOT=""
W_RUBNONEXOPLAF=""
W_TAUXURSSAFTOT=""
W_TAUXURSSAFPLAF=""
W_RUBCASGENTOT=""
W_RUBCASGENPLAF=""
W_PROFILEXOAVANT="NON"
D=1
LOOP
 CodRubChg=ENR_DETAILCALCUL<8,D>
 UNTIL CodRubChg="" DO
  GOSUB 1400
  GOSUB 1500
  IF RubAADRubChg=1 THEN
   IF ExoAADRubChg=0 THEN
    IF TypTranche="01" AND TypChgRubChg="01" THEN
     W_RUBNONEXOTOT=CodRubChg
     W_TAUXURSSAFTOT=ENR_DETAILCALCUL<10,D>
    END ELSE
     W_RUBNONEXOPLAF=CodRubChg
     W_TAUXURSSAFPLAF=ENR_DETAILCALCUL<10,D>
    END
   END ELSE
    IF TypTranche="01" AND TypChgRubChg="01" THEN
     W_RUBEXOTOT=CodRubChg
     W_TAUXURSSAFTOT=ENR_DETAILCALCUL<10,D>
    END ELSE
     W_RUBEXOPLAF=CodRubChg
     W_TAUXURSSAFPLAF=ENR_DETAILCALCUL<10,D>
    END
   END
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,8,D)
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,9,D)
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,10,D)
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,11,D)
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,12,D)
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,13,D)
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,14,D)
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,28,D)
   W_PROFILEXOAVANT="OUI"
  END ELSE
   IF ENR_DETAILCALCUL<9,D>#"" AND ENR_DETAILCALCUL<13,D>#"" AND TypChgRubChg="01" THEN
    IF TypTranche="01" THEN
     W_RUBCASGENTOT=CodRubChg
     W_TAUXURSSAFTOT=ENR_DETAILCALCUL<10,D>
    END ELSE
     W_RUBCASGENPLAF=CodRubChg
     W_TAUXURSSAFPLAF=ENR_DETAILCALCUL<10,D>
    END
    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,8,D)
    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,9,D)
    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,10,D)
    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,11,D)
    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,12,D)
    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,13,D)
    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,14,D)
    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,28,D)
   END ELSE
    IF ENR_DETAILCALCUL<8,D>="904" OR ENR_DETAILCALCUL<8,D>="903" THEN
     ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,8,D)
     ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,9,D)
     ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,10,D)
     ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,11,D)
     ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,12,D)
     ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,13,D)
     ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,14,D)
     ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,28,D)
     ENR_DETAILCALCUL<52>=""
    END ELSE   
     D=D+1
    END
   END
  END
REPEAT
W_SAUVDETAILCALCUL8=ENR_DETAILCALCUL<8>
W_SAUVDETAILCALCUL9=ENR_DETAILCALCUL<9>
W_SAUVDETAILCALCUL10=ENR_DETAILCALCUL<10>
W_SAUVDETAILCALCUL11=ENR_DETAILCALCUL<11>
W_SAUVDETAILCALCUL12=ENR_DETAILCALCUL<12>
W_SAUVDETAILCALCUL13=ENR_DETAILCALCUL<13>
W_SAUVDETAILCALCUL14=ENR_DETAILCALCUL<14>
W_SAUVDETAILCALCUL28=ENR_DETAILCALCUL<28>
FOR D=8 TO 14
 ENR_DETAILCALCUL<D>=""
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,D;"0")
NEXT D
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28;"0")
W_HEURESCPPOURSOLDE=0
*D=1
*LOOP
* UNTIL ENR_DETAILCALCUL<2,D>="" OR ENR_DETAILCALCUL<2,D>="804" DO
*  D=D+1
*REPEAT
*IF ENR_DETAILCALCUL<2,D>="804" THEN W_HEURESCPPOURSOLDE=ENR_DETAILCALCUL<3,D>
*
* INTEGRATION RUBRIQUE DE CHARGE "MUTUELLE" EVENTUELLE (dfini directement dans le contrat)
*
IF ChargeMutContrat#"" THEN
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,8,-1;ChargeMutContrat)
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,9,-1;"")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,10,-1;"")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;-MutSalContrat)
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;"")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,13,-1;"")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;MutPatContrat)
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28,-1;"0")
END
*
* LECTURE DE L'HISTORIQUE DES CUMULS POUR TRAITER REGLE RE REGULARISATION = REGLE DES CUMULS
*
GOSUB 1600
*
* TRAITEMENT SI 2 PROFILS DE MANIERE A PRENDRE LE PLUS AVANTAGEUX POUR L'EMPLOYEUR
*
CodeContPrev=PrevContrat
GOSUB 1700
W_CHGPATROPROFIL1=0
W_CHGPATROPROFIL2=0
W_CHGPATROPROFIL=0
W_PREMIERERUBAAD="NON"
IF Profil2Contrat="" THEN
 W_TRAITPROFIL="REEL"
 GOSUB 380
END ELSE
 W_TRAITPROFIL="FICTIF"
 CodeProfil=ProfilContrat
 GOSUB 1300 ;*lecture PROFIL
 W_CHGPATROPROFIL=0
 GOSUB 380
 W_CHGPATROPROFIL1=W_CHGPATROPROFIL
 CodeProfil=Profil2Contrat
 GOSUB 1300 ;*lecture PROFIL
 W_CHGPATROPROFIL=0
 GOSUB 380
 W_CHGPATROPROFIL2=W_CHGPATROPROFIL
 W_TRAITPROFIL="REEL"
 W_PREMIERERUBAAD="NON"
 IF W_CHGPATROPROFIL1>W_CHGPATROPROFIL2 THEN
  GOSUB 380
 END ELSE
  CodeProfil=ProfilContrat
  GOSUB 1300 ;*lecture PROFIL
  GOSUB 380
 END
END
*
* INTEGRATION RUBRIQUES DE CHARGE "PREVOYANCE" RATTACHEES AU CONTRAT DE
* PREVOYANCE DIRECTEMENT DEFINI DANS LE CONTRAT DE TRAVAIL (valable uniquement
* pour CCN 02)
*
IF PrevContrat#"" AND ConvColContrat="02" THEN
 CodPartEmp=EmplEtabContrat
 GOSUB 2200
 IF RadPrevPartEmp#"" AND RadPrevPartEmp<W_PERIODEPAIEDEB THEN
  NULL
 END ELSE 
  IF AdhPrevPartEmp<=W_PERIODEPAIEFIN THEN
   I=1
   LOOP
    UNTIL RubChargePrev<1,I>="" DO
     CodRubChg=RubChargePrev<1,I>
     GOSUB 1400 ;*lecture RUBCHARGE
     BEGIN CASE
      CASE TypPartSalRubChg="Montant"
       ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,8,-1;CodRubChg)
       ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,9,-1;W_MONTBRUT)
       ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,10,-1;"")
       IF PartSalRubChg>=0 THEN
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;-INT(PartSalRubChg/10+1/2))
       END ELSE
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;-INT(PartSalRubChg/10-1/2))
       END
       NetAPayerCal=NetAPayerCal-INT(PartSalRubChg/10+1/2)
       MontAPayer=MontAPayer-INT(PartSalRubChg/10+1/2)
       IF ExcNetImpRubChg=0 THEN
        IF PartSalRubChg>=0 THEN
         MontImposCal=MontImposCal-INT(PartSalRubChg/10+1/2)
        END ELSE
         MontImposCal=MontImposCal-INT(PartSalRubChg/10-1/2)
        END
       END
       IF TypPartPatRubChg="" THEN
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;"")
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,13,-1;"")
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;"")
       END
       ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28,-1;W_MONTBRUT)
      CASE TypPartSalRubChg="%"
       W_TYPEPART="SAL"
       GOSUB 400
       IF W_ASSIETTE#0 THEN
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,8,-1;CodRubChg)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,9,-1;W_ASSIETTE)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,10,-1;PartSalRubChg)
        IF W_ASSIETTE>=0 THEN
         W_COTISSAL=INT(W_ASSIETTE*PartSalRubChg/100000+1/2)
        END ELSE
         W_COTISSAL=INT(W_ASSIETTE*PartSalRubChg/100000-1/2)
        END
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;-W_COTISSAL)
        NetAPayerCal=NetAPayerCal-W_COTISSAL
        MontAPayer=MontAPayer-W_COTISSAL
        IF ExcNetImpRubChg=0 THEN MontImposCal=MontImposCal-W_COTISSAL
        IF TypPartPatRubChg="" THEN
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;"")
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,13,-1;"")
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;"")
        END
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28,-1;W_ASSIETTEBRUTEINITIALE)
       END
     END CASE
     BEGIN CASE
      CASE TypPartPatRubChg="Montant"
       IF TypPartSalRubChg="" THEN
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,8,-1;CodRubChg)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,9,-1;"")
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,10,-1;"")
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;"")
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28,-1;W_MONTBRUT)
       END
       ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;W_MONTBRUT)
       ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,13,-1;"")
       IF PartPatRubChg>=0 THEN
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;INT(PartPatRubChg/10+1/2))
       END ELSE
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;INT(PartPatRubChg/10-1/2))
       END
      CASE TypPartPatRubChg="%"
       W_TYPEPART="PAT"
       GOSUB 400
       IF W_ASSIETTE#0 THEN
        IF TypPartSalRubChg="" THEN
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,8,-1;CodRubChg)
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,9,-1;"")
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,10,-1;"")
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;"")
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28,-1;W_ASSIETTEBRUTEINITIALE)
        END
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;W_ASSIETTE)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,13,-1;PartPatRubChg)
        IF W_ASSIETTE>=0 THEN
         W_COTISPAT=INT(W_ASSIETTE*PartPatRubChg/100000+1/2)
        END ELSE
         W_COTISPAT=INT(W_ASSIETTE*PartPatRubChg/100000-1/2)
        END
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;W_COTISPAT)
       END
     END CASE
     I=I+1
   REPEAT
  END
 END
END
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,41;W_HEURESTRAV)
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,42;W_HEURESTRAVEXO)
ENR_DETAILCALCUL<15>=MontImposCal
ENR_DETAILCALCUL<16>=NetAPayerCal
ENR_DETAILCALCUL<21>=MontAPayer
IF MontAPayer<0 THEN
 ENR_ANOMALIEPAIE=""
 ENR_ANOMALIEPAIE=REPLACE(ENR_ANOMALIEPAIE,1;"MONTANT A PAYER NEGATIF")
 IF W_TYPEACTIVITE="I" THEN
*  WRITE ENR_ANOMALIEPAIE ON F.ANOMALIEPAIE,W_RUPTCONTRAT:W_PERIODEPAIE
 END ELSE
*  WRITE ENR_ANOMALIEPAIE ON F.ANOMALIEPAIE,W_CLE
 END
END
ENR_DETAILCALCUL<49>=""
ENR_DETAILCALCUL<50>=""
D=1
LOOP
 W_CODRUBCHG=EXTRACT(ENR_DETAILCALCUL,8,D)
 W_BASECOTISSAL=EXTRACT(ENR_DETAILCALCUL,9,D)
 W_COTISSAL=EXTRACT(ENR_DETAILCALCUL,11,D)
 W_BASECOTISPAT=EXTRACT(ENR_DETAILCALCUL,12,D)
 W_COTISPAT=EXTRACT(ENR_DETAILCALCUL,14,D)
 UNTIL W_CODRUBCHG="" DO
  IF W_COTISSAL="" THEN W_COTISSAL=0
  IF W_COTISPAT="" THEN W_COTISPAT=0
  IF W_BASECOTISSAL="" THEN W_BASECOTISSAL=0
  IF W_BASECOTISPAT="" THEN W_BASECOTISPAT=0
  IF W_BASECOTISSAL=0 AND W_BASECOTISPAT=0 AND W_COTISSAL=0 AND W_COTISPAT=0 THEN
   IF W_CODRUBCHG#0 THEN
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,49,-1;W_CODRUBCHG)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,50,-1;EXTRACT(ENR_DETAILCALCUL,28,D))
   END
   FOR E=8 TO 14
    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,E,D)
   NEXT E
   ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,28,D)
  END ELSE
   D=D+1
  END
REPEAT
*D=1
*LOOP
* W_CODRUBCHG=EXTRACT(ENR_DETAILCALCUL,8,D)
* UNTIL W_CODRUBCHG="" OR W_CODRUBCHG="904" DO
*  D=D+1
*REPEAT
*IF W_CODRUBCHG="904" THEN
* D=1
* LOOP
*  UNTIL ENR_DETAILCALCUL<2,D>="" OR ENR_DETAILCALCUL<2,D>="804" DO
*   D=D+1
* REPEAT
* IF ENR_DETAILCALCUL<2,D>="804" THEN
*  ENR_DETAILCALCUL<6>=ENR_DETAILCALCUL<6>-ENR_DETAILCALCUL<3,D>
*  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,D;"")
*  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,D;"")
* END
*END
D=1
LOOP
 UNTIL RubChgProfil<1,D>="" DO
  E=1
  LOOP
   UNTIL ENR_DETAILCALCUL<8,E>=RubChgProfil<1,D> OR ENR_DETAILCALCUL<8,E>="" DO
    E=E+1
  REPEAT
  IF ENR_DETAILCALCUL<8,E>="" THEN
   F=1
   LOOP
    UNTIL ENR_DETAILCALCUL<49,F>=RubChgProfil<1,D> OR ENR_DETAILCALCUL<49,F>="" DO
     F=F+1
   REPEAT
   IF ENR_DETAILCALCUL<49,F>="" THEN
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,49,-1;RubChgProfil<1,D>)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,50,-1;EXTRACT(ENR_DETAILCALCUL,28,1))
   END
  END
  D=D+1
REPEAT
RETURN
**********
* TRAITEMENT DES RUBRIQUES DE CHARGES AUTOMATIQUES QUI SONT INTEGREES DANS LE PROFIL
**********
380 IF BaseContrat="B" THEN
 W_MONTBRUT=ENR_DETAILCALCUL<7>
END ELSE
 W_MONTBRUT=INT(ENR_DETAILCALCUL<6>*ValSmicHor/100+1/2)
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,30;W_MONTBRUT)
END
MontImposCal=ENR_DETAILCALCUL<7>-W_MONTDEPARTRETRAITE
NetAPayerCal=ENR_DETAILCALCUL<7>
W_PLAFONDSECUURSSAF=W_PLAFONDSECUURSSAFSAUV
W_CUMULPLAFONDSECUURSSAF=PlafondHistCum+W_PLAFONDSECUURSSAF
*IF ChargeMutContrat#"" THEN
* CodRubChg=ChargeMutContrat
* GOSUB 1400 ;*lecture RUBCHARGE
* NetAPayerCal=NetAPayerCal-MutSalContrat
* IF ExcNetImpRubChg=0 THEN MontImposCal=MontImposCal-MutSalContrat
*END
IF W_TAUXHOR<ValSmicHor*100 THEN W_TAUXHOR=ValSmicHor*100
*
* REGULARISATION DE CHARGES (PAR LE BIAIS DE LA RUBRIQUE DE CHARGE 901)
*
*IF W_TRAITPROFIL="REEL" THEN
* READ ENR_REGULCHARGE FROM F.REGULCHARGE,W_CLE[1,8] THEN
*  PeriodeRegChg=ENR_REGULCHARGE<6>
*  IF PeriodeRegChg="" OR PeriodeRegChg=W_PERIODEPAIE THEN
*   BaseRegChg=ENR_REGULCHARGE<1>
*   IF BaseRegChg=0 THEN BaseRegChg=""
*   TauxSalRegChg=ENR_REGULCHARGE<2>
*   IF TauxSalRegChg=0 THEN TauxSalRegChg=""
*   MontSalRegChg=ENR_REGULCHARGE<3>
*   IF MontSalRegChg=0 THEN MontSalRegChg=""
*   TauxPatRegChg=ENR_REGULCHARGE<4>
*   IF TauxPatRegChg=0 THEN TauxPatRegChg=""
*   MontPatRegChg=ENR_REGULCHARGE<5>
*   IF MontPatRegChg=0 THEN MontPatRegChg=""
*   CodRubChg="901"
*   GOSUB 1400
*   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,8,-1;CodRubChg)
*   IF TauxSalRegChg="" AND MontSalRegChg="" THEN
*    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,9,-1;"")
*   END ELSE
*    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,9,-1;BaseRegChg)
*   END
*   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,10,-1;TauxSalRegChg)
*   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;-MontSalRegChg)
*   IF TauxPatRegChg="" AND MontPatRegChg="" THEN
*   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;"")
*   END ELSE
*    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;BaseRegChg)
*   END
*   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,13,-1;TauxPatRegChg)
*   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;MontPatRegChg)
*   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28,-1;BaseRegChg)
*   IF MontSalRegChg#"" THEN NetAPayerCal=NetAPayerCal-MontSalRegChg
*   IF MontSalRegChg#"" THEN MontAPayer=MontAPayer-MontSalRegChg
*   IF ExcNetImpRubChg=0 AND MontSalRegChg#"" THEN MontImposCal=MontImposCal-MontSalRegChg
*   ENR_REGULCHARGE=REPLACE(ENR_REGULCHARGE,6;W_PERIODEPAIE)
*   WRITE ENR_REGULCHARGE ON F.REGULCHARGE,W_CLE[1,8]
*  END
* END
*END
W_PROFILEXOAPRES="NON"
W_AIDEINCITATIVE="NON"
W_CUMULURSSAFPLAF=0
W_CUMULURSSAFEXO=0
W_RUBAADEXOAAD=""
W_RUBAADEXOAADPLAF=""
W_RUBAADEXOACTIVITE=""
W_RUBAADEXOACTIVITEPLAF=""
W_RUBAADNONEXO=""
W_RUBAADNONEXOPLAF=""
W_RUBAADCASGENTOT=""
W_RUBAADCASGENPLAF=""
W_PLAFONDSECUAAD=0
W_BASECOTISURSSAFEXOTOT=0
W_BASECOTISURSSAFEXOPLAF=0
W_BASECOTISURSSAFACTTOT=0
W_BASECOTISURSSAFACTPLAF=0
W_BASEURSSAFNONEXO2005=0
W_POURCENTNONEXOADM=0
IF FonctionContrat="A" THEN
 I=1
 LOOP
  UNTIL ActiviteContrat<1,I>="" DO
   J=1
   LOOP
    UNTIL W_TABACTIVITENONEXO<1,J>=ActiviteContrat<1,I> OR W_TABACTIVITENONEXO<1,J>="" DO
     J=J+1
   REPEAT
   IF W_TABACTIVITENONEXO<1,J>=ActiviteContrat<1,I> THEN W_POURCENTNONEXOADM=W_POURCENTNONEXOADM+PourcentActiviteContrat<1,I>
   I=I+1
 REPEAT
END
I=1
W_FINRECHRUBAAD="NON"
LOOP
 UNTIL RubChgProfil<1,I>="" OR W_FINRECHRUBAAD="OUI" DO
  CodRubChg=RubChgProfil<1,I>
  GOSUB 1400
  IF RubAADRubChg=1 AND RegulRubChg=1 THEN
   W_PROFILEXOAPRES="OUI"
   IF ExoAADRubChg=0 THEN W_RUBAADNONEXO=CodRubChg
   IF ExoAADRubChg=1 THEN W_RUBAADEXOAAD=CodRubChg
   IF ExoAADRubChg=2 THEN W_RUBAADEXOACTIVITE=CodRubChg
  END
  IF RubAADRubChg=1 AND RegulRubChg=3 THEN
   W_PROFILEXOAPRES="OUI"
   IF ExoAADRubChg=0 THEN W_RUBAADNONEXOPLAF=CodRubChg
   IF ExoAADRubChg=1 THEN W_RUBAADEXOAADPLAF=CodRubChg
   IF ExoAADRubChg=2 THEN W_RUBAADEXOACTIVITEPLAF=CodRubChg
  END
  IF RubAADRubChg=0  THEN 
   IF PartSalRubChg#"" AND PartSalRubChg#"0" AND PartPatRubChg#"" AND PartPatRubChg#"0" THEN
    IF RegulRubChg=1 AND TypChgRubChg="01" THEN
     W_RUBAADCASGENTOT=CodRubChg
     W_PROFILEXOAPRES="NON"
    END
    IF RegulRubChg=3 AND TypChgRubChg="01" THEN
     W_RUBAADCASGENPLAF=CodRubChg
     W_PROFILEXOAPRES="NON"
    END
   END
  END
  IF W_RUBAADNONEXO#"" AND W_RUBAADEXOAAD#"" AND W_RUBAADEXOACTIVITE#"" AND W_RUBAADEXOAADPLAF#"" AND W_RUBAADEXOACTIVITEPLAF#"" AND W_RUBAADNONEXOPLAF#"" THEN W_FINRECHRUBAAD="OUI"
  IF W_RUBAADCASGENTOT#"" AND W_RUBAADCASGENPLAF#"" THEN W_FINRECHRUBAAD="OUI"
  I=I+1
REPEAT
IF W_RUBAADEXOAAD#"" AND W_RUBAADEXOAADPLAF#"" THEN
 I=1
 W_FINRECHRUBAAD="NON"
 W_TROUVEAADEXOTOT="NON"
 W_TROUVEAADEXOPLAF="NON"
 W_TROUVEAADACTTOT="NON"
 W_TROUVEAADACTPLAF="NON"
 LOOP
  RubChgHistCum=EXTRACT(ENR_HISTORCUMUL,15,I)
  UNTIL RubChgHistCum="" OR W_FINRECHRUBAAD="OUI" DO
   IF RubChgHistCum=W_RUBAADEXOAAD THEN
    W_BASECOTISURSSAFEXOTOT=EXTRACT(ENR_HISTORCUMUL,17,I)
    W_TROUVEAADEXOTOT="OUI"
   END
   IF RubChgHistCum=W_RUBAADEXOAADPLAF THEN
    W_BASECOTISURSSAFEXOPLAF=EXTRACT(ENR_HISTORCUMUL,17,I)
    W_TROUVEAADEXOPLAF="OUI"
   END
   IF RubChgHistCum=W_RUBAADEXOACTIVITE THEN
    W_BASECOTISURSSAFACTTOT=EXTRACT(ENR_HISTORCUMUL,17,I)
    W_TROUVEAADACTTOT="OUI"
   END
   IF RubChgHistCum=W_RUBAADEXOACTIVITEPLAF THEN
    W_BASECOTISURSSAFACTPLAF=EXTRACT(ENR_HISTORCUMUL,17,I)
    W_TROUVEAADACTPLAF="OUI"
   END
   IF W_TROUVEAADEXOTOT="OUI" AND W_TROUVEAADEXOPLAF="OUI" AND W_TROUVEAADACTTOT="OUI" AND W_TROUVEAADACTPLAF="OUI" THEN W_FINRECHRUBAAD="OUI"
   I=I+1
 REPEAT
END
IF W_TRAITPROFIL="REEL" THEN
 ENR_DETAILCALCUL<8>=W_SAUVDETAILCALCUL8
 ENR_DETAILCALCUL<9>=W_SAUVDETAILCALCUL9
 ENR_DETAILCALCUL<10>=W_SAUVDETAILCALCUL10
 ENR_DETAILCALCUL<11>=W_SAUVDETAILCALCUL11
 ENR_DETAILCALCUL<12>=W_SAUVDETAILCALCUL12
 ENR_DETAILCALCUL<13>=W_SAUVDETAILCALCUL13
 ENR_DETAILCALCUL<14>=W_SAUVDETAILCALCUL14
 ENR_DETAILCALCUL<28>=W_SAUVDETAILCALCUL28
 IF W_PROFILEXOAVANT="NON" THEN
  IF W_PROFILEXOAPRES="OUI" THEN
   NULL
*   I=1
*   LOOP
*    W_RUB904=ENR_DETAILCALCUL<8,I>
*    UNTIL W_RUB904="904" OR W_RUB904="" DO
*     I=I+1
*   REPEAT
*   IF W_RUB904="904" THEN
*    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,8,I)
*    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,9,I)
*    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,10,I)
*    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,11,I)
*    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,12,I)
*    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,13,I)
*    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,14,I)
*    ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,28,I)
*   END
  END ELSE
   RETURN
  END
 END
 I=1
 LOOP
  UNTIL ENR_DETAILCALCUL<8,I>="" DO
   CodRubChg=ENR_DETAILCALCUL<8,I>
   GOSUB 1400
   W_COTISSAL=ENR_DETAILCALCUL<11,I>
   IF W_COTISSAL#"" THEN
    NetAPayerCal=NetAPayerCal+W_COTISSAL
    IF ExcNetImpRubChg=0 THEN MontImposCal=MontImposCal+W_COTISSAL
   END
   I=I+1
 REPEAT
END
I=1
LOOP
 UNTIL RubChgProfil<1,I>="" DO
  CodRubChg=RubChgProfil<1,I>
  IF CodRubChg#W_RUBAADEXOAAD AND CodRubChg#W_RUBAADEXOAADPLAF AND CodRubChg#W_RUBAADEXOACTIVITE AND CodRubChg#W_RUBAADEXOACTIVITEPLAF AND CodRubChg#W_RUBAADNONEXO AND CodRubChg#W_RUBAADNONEXOPLAF AND CodRubChg#W_RUBAADCASGENTOT AND CodRubChg#W_RUBAADCASGENPLAF AND CodRubChg#"904" AND CodRubChg#"903" THEN GOTO 390
  GOSUB 1400 ;*lecture RUBCHARGE

* si pas d'heures travailles sur le mois + profil avec rubrique de type "Aide  domicile"
* alors recherche sur DETAILCALCUL prcdent du nombre d'heures directes totales et du nombre
* d'heures directes xonres permettant ainsi d'appliquer la mme proratisation que celle
* du DETAILCALCUL prcdent

  IF RubAADRubChg=1 THEN
   IF W_PREMIERERUBAAD="NON" THEN
    IF (LissageContrat=1 AND W_FINCONTRAT="OUI") OR (LissageContrat=1 AND W_FINMODULATION="OUI") THEN
     IF ExoAADRubChg=1 OR ExoAADRubChg=2 THEN
      W_PREMIERERUBAAD="OUI"
      IF W_HEURESTRAV=0 THEN
       W_FINRECHPREC="NON"
       W_HEURESTRAVPREC=0
       W_HEURESTRAVEXOPREC=0
       W_PERIODEPREC=W_PERIODEPAIEPREC
       LOOP
        IF W_PERIODEPREC<W_DATDEBCONTRAT THEN W_FINRECHPREC="OUI"
        UNTIL W_FINRECHPREC="OUI" DO
         READ W_ENR_DETAILCALCULPREC FROM F.DETAILCALCUL,W_CLE[1,8]:W_PERIODEPREC THEN
          W_HEURESTRAVPREC=EXTRACT(W_ENR_DETAILCALCULPREC,41)
          W_HEURESTRAVEXOPREC=EXTRACT(W_ENR_DETAILCALCULPREC,42)
          W_FINRECHPREC="OUI"
         END ELSE
          IF W_PERIODEPREC[5,2]="12" THEN
           W_PERIODEPREC=W_PERIODEPREC-89
          END ELSE
           W_PERIODEPREC=W_PERIODEPREC-1
          END
         END
       REPEAT
       IF W_TRAITPROFIL="REEL" THEN
        W_HEURESTRAV=W_HEURESTRAVPREC
        W_HEURESTRAVEXO=W_HEURESTRAVEXOPREC 
       END
      END
      GOSUB 2300
     END
    END ELSE
     W_PREMIERERUBAAD="OUI"
     IF W_HEURESTRAV=0 THEN
      W_FINRECHPREC="NON"
      W_HEURESTRAVPREC=0
      W_HEURESTRAVEXOPREC=0
      W_PERIODEPREC=W_PERIODEPAIEPREC
      LOOP
       IF W_PERIODEPREC<W_DATDEBCONTRAT THEN W_FINRECHPREC="OUI"
       UNTIL W_FINRECHPREC="OUI" DO
        READ W_ENR_DETAILCALCULPREC FROM F.DETAILCALCUL,W_CLE[1,8]:W_PERIODEPREC THEN
         W_HEURESTRAVPREC=EXTRACT(W_ENR_DETAILCALCULPREC,41)
         W_HEURESTRAVEXOPREC=EXTRACT(W_ENR_DETAILCALCULPREC,42)
         W_FINRECHPREC="OUI"
        END ELSE
         IF W_PERIODEPREC[5,2]="12" THEN
          W_PERIODEPREC=W_PERIODEPREC-89
         END ELSE
          W_PERIODEPREC=W_PERIODEPREC-1
         END
        END
      REPEAT
      IF W_HEURESTRAVPREC=0 AND W_HEURESTRAVEXOPREC=0 THEN
       W_POURCENTEXO=0
       W_POURCENTNONEXO="10000"
      END ELSE
       W_POURCENTEXO=INT(W_HEURESTRAVEXOPREC*10000/W_HEURESTRAVPREC+1/2)
       W_POURCENTNONEXO=10000-W_POURCENTEXO
      END
      IF W_TRAITPROFIL="REEL" THEN
       W_HEURESTRAV=W_HEURESTRAVPREC
       W_HEURESTRAVEXO=W_HEURESTRAVEXOPREC 
      END
     END ELSE
      W_POURCENTEXO=INT(W_HEURESTRAVEXO*10000/W_HEURESTRAV+1/2)
      W_POURCENTNONEXO=10000-W_POURCENTEXO
     END
    END
   END
  END
  W_ASSIETTESAL=0
  W_ASSIETTEPAT=0
  W_ASSIETTE=0
  BEGIN CASE
   CASE CodRubChg="900" ;*Rduction sur les bas salaires
    GOSUB 400
    W_SOLDCONG=0
    W_ASSIETTE=W_ASSIETTE-W_SOLDCONG
    IF W_ASSIETTE<W_SMICMENS THEN
     W_REDUCBRUTE=INT(W_ASSIETTE*182/1000+1/2)
    END ELSE
     W_REDUCBRUTE=INT(W_SMICMENS*13/10+1/2)
     IF W_ASSIETTE>W_REDUCBRUTE THEN
      W_REDUCBRUTE=0
     END ELSE
      W_REDUCBRUTE=INT((W_REDUCBRUTE-W_ASSIETTE)*607/1000+1/2)
     END
    END
    W_REDUCMAXI=INT(W_SMICMENS*182/1000+1/2)
    IF W_REDUCBRUTE>W_REDUCMAXI THEN W_REDUCBRUTE=W_REDUCMAXI
    W_HHASSIETTE=W_HEURESBRUT-W_HHSOLDCONG+W_HEURESMALADIE
    IF W_HHASSIETTE<0 THEN W_HHASSIETTE=0
    W_REDUCNETTE=INT(W_REDUCBRUTE*W_HHASSIETTE/W_HORMOISETABL+1/2)
    IF W_REDUCNETTE>W_REDUCMAXI THEN W_REDUCNETTE=W_REDUCMAXI
    W_CHGPATROPROFIL=W_CHGPATROPROFIL-W_REDUCNETTE
    IF W_REDUCNETTE#0 AND W_TRAITPROFIL="REEL" THEN
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,8,-1;CodRubChg)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,9,-1;W_ASSIETTE)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,10,-1;"")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;"")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;"")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,13,-1;"")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;-W_REDUCNETTE)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28,-1;"0")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,31;W_HEURESMALADIE)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,32;W_HEURESIJSSBRUT)
    END
   CASE CodRubChg="902" ;*Allegement 35 Heures (AUBRY II)
    GOSUB 400
    AllegementCal1=0
    AllegementCal2=0
    W_HHASSIETTE=W_HEURESBRUT+W_HEURESMALADIE35H
    IF W_HHASSIETTE<0 THEN W_HHASSIETTE=0
    IF W_HHASSIETTE>W_HORMOISETABL THEN W_HHASSIETTE=W_HORMOISETABL
    W_REMMENSETP=INT(W_ASSIETTE/W_HHASSIETTE*W_HORMOISETABL+1/2)
    IF AideIncit35HEtab#"" AND AideIncit35HEtab#"0" THEN
     AllegementCal1=INT(((Multi35HEtab*(Smic35HEtab/W_REMMENSETP))-(Abat35HEtab+AidePerenne35HEtab))/12+1/2)
    END ELSE
     AllegementCal1=INT(((Multi35HEtab*(Smic35HEtab/W_REMMENSETP))-Abat35HEtab)/12+1/2)
    END
    IF AllegementCal1<0 THEN AllegementCal1=0
    IF AideIncit35HEtab="" OR AideIncit35HEtab="0" THEN
     IF AllegementCal1<INT(AidePerenne35HEtab/12+1/2) THEN
      AllegementCal1=INT(AidePerenne35HEtab/12+1/2)
     END
    END
    AllegementCal2=INT(AllegementCal1/W_HORMOISETABL*W_HHASSIETTE+1/2)
    IF W_JOURABSMITPSTHERAP#0 THEN
     W_HHASSIETTE=W_HEURESREFMITPSTHERAP-INT(W_HEURESREFMITPSTHERAP/W_NBJRSPERIODEPAIE*W_JOURABSMITPSTHERAP+1/2)
     IF W_HHASSIETTE<INT(W_HORMOISETABL/2+1/2) THEN
      AllegementCal1=0
      AllegementCal2=0
     END
    END
    W_CHGPATROPROFIL=W_CHGPATROPROFIL-AllegementCal2
    IF AllegementCal2#0 AND W_TRAITPROFIL="REEL" THEN
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,8,-1;CodRubChg)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,9,-1;W_ASSIETTE)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,10,-1;"")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;"")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;"")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,13,-1;"")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;-AllegementCal2)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28,-1;"0")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,31;W_HEURESMALADIE35H)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,51,1;AllegementCal1)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,51,2;AllegementCal2)
    END
   CASE CodRubChg="903" ;*Aide Incitative (AUBRY I)
    IF W_FINCONTRAT="OUI" AND DatFinContrat<W_PERIODEPAIEFIN THEN
     NULL
    END ELSE
     GOSUB 400
     AllegementCal3=0
     IF W_ABSENCEDERNIERJOUR="NON" THEN
      IF TypeSalContrat="M" THEN
       W_HHASSIETTE=W_HEURESMENSCONTRAT
      END ELSE
       IF DatDebContrat>=W_PERIODEPAIEDEB AND DatDebContrat<=W_PERIODEPAIEFIN THEN
        W_HHASSIETTE=W_HEURESMENSCONTRAT
       END ELSE
        IF W_JOURSABS>30 THEN W_JOURSABS=30
        IF W_HEURESREFABSENCE=0 THEN W_HEURESREFABSENCE=W_HEURESMENSCONTRAT
        W_HHASSIETTE=INT(W_HEURESREFABSENCE/30*W_JOURSABS+1/2)
        W_HHASSIETTE=W_HHASSIETTE+W_HEURESBRUT
       END
      END
     END ELSE
      IF TypeSalContrat="M" THEN
       W_HHASSIETTE=W_HEURESREFABSENCE
      END ELSE
       IF W_JOURSABS>30 THEN W_JOURSABS=30
       IF W_HEURESREFABSENCE=0 AND W_ABSENCEDERNIERJOUR="OUI" THEN W_HEURESREFABSENCE=W_HEURESMENSCONTRAT
       W_HHASSIETTE=INT(W_HEURESREFABSENCE/30*W_JOURSABS+1/2)
       W_HHASSIETTE=W_HHASSIETTE+W_HEURESBRUT       
      END 
     END
     IF W_HHASSIETTE<0 THEN W_HHASSIETTE=0
     IF W_HHASSIETTE>W_HORMOISETABL THEN W_HHASSIETTE=W_HORMOISETABL
     IF AideIncit35HEtab#"" AND AideIncit35HEtab#"0" THEN
      AllegementCal3=INT((AideIncit35HEtab/12)/W_HORMOISETABL*W_HHASSIETTE+1/2)
     END
     W_CHGPATROPROFIL=W_CHGPATROPROFIL-AllegementCal3
     W_AIDEINCITATIVE="OUI"
     IF AllegementCal3#0 AND W_TRAITPROFIL="REEL" THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,8,-1;CodRubChg)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,9,-1;W_ASSIETTE)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,10,-1;"")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;"")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;"")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,13,-1;"")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;-AllegementCal3)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28,-1;"0")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,52,1;W_HHASSIETTE)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,52,2;AllegementCal3)
     END
    END
   CASE CodRubChg="904" ;*Rduction globale des cotisations patronales scurit sociale
    GOSUB 400
    W_HHASSIETTE=W_HEURESBRUT+W_HEURESMALADIE35H-W_HEURESCPPOURSOLDE
    ENR_DETAILCALCUL<53>=""
    W_REDUCNETTE=0
    IF W_HHASSIETTE<0 THEN W_HHASSIETTE=0
    IF W_ASSIETTE#0 THEN
     IF DecalagePaie=1 THEN W_PERIODEREFREDUC="200506" ELSE W_PERIODEREFREDUC="200507"
     IF W_PERIODEPAIE>=W_PERIODEREFREDUC THEN
      W_COEFFICIENTREDUC=INT((26/60)*((16*(ValSmicHor*W_HHASSIETTE/W_ASSIETTE))/1000-1)*1000+1/2)
      IF W_COEFFICIENTREDUC>260 THEN W_COEFFICIENTREDUC=260
      IF W_COEFFICIENTREDUC<0 THEN W_COEFFICIENTREDUC=0
      W_REDUCNETTE=INT((W_COEFFICIENTREDUC*W_ASSIETTE/1000)+1/2)
      IF W_AIDEINCITATIVE="OUI" THEN
       ENR_DETAILCALCUL<53>=W_REDUCNETTE
       W_MINORATION=INT((Smic35HEtab*W_HHASSIETTE/W_HORMOISETABL)+1/2)
       IF W_MINORATION>Smic35HEtab THEN W_MINORATION=Smic35HEtab
       W_REDUCNETTE=W_REDUCNETTE-W_MINORATION
       IF W_REDUCNETTE<0 THEN W_REDUCNETTE=0
      END
     END ELSE
      IF Multi35HEtab#"" AND Multi35HEtab#"0" THEN
       W_COEFFICIENTREDUC=INT((26/60)*((16*(Multi35HEtab*W_HHASSIETTE/W_ASSIETTE))/1000-1)*1000+1/2)
       IF W_COEFFICIENTREDUC>260 THEN W_COEFFICIENTREDUC=260
       IF W_COEFFICIENTREDUC<0 THEN W_COEFFICIENTREDUC=0
       W_REDUCNETTE=INT((W_COEFFICIENTREDUC*W_ASSIETTE/1000)+1/2)
       IF W_AIDEINCITATIVE="OUI" THEN
        ENR_DETAILCALCUL<53>=W_REDUCNETTE
        W_MINORATION=INT((Smic35HEtab*W_HHASSIETTE/W_HORMOISETABL)+1/2)
        IF W_MINORATION>Smic35HEtab THEN W_MINORATION=Smic35HEtab
        W_REDUCNETTE=W_REDUCNETTE-W_MINORATION
        IF W_REDUCNETTE<0 THEN W_REDUCNETTE=0
       END
      END ELSE
       IF DecalagePaie=1 THEN W_PERIODEREFREDUC="200405" ELSE W_PERIODEREFREDUC="200406"
       IF W_PERIODEPAIE<=W_PERIODEREFREDUC THEN
        W_COEFFICIENTREDUC=INT((208/500)*((15*(ValSmicHor*W_HHASSIETTE/W_ASSIETTE))/1000-1)*1000+1/2)
        IF W_COEFFICIENTREDUC>208 THEN W_COEFFICIENTREDUC=208
        IF W_COEFFICIENTREDUC<0 THEN W_COEFFICIENTREDUC=0
        W_REDUCNETTE=INT((W_COEFFICIENTREDUC*W_ASSIETTE/1000)+1/2)
       END ELSE
        W_COEFFICIENTREDUC=INT((234/600)*((16*(ValSmicHor*W_HHASSIETTE/W_ASSIETTE))/1000-1)*1000+1/2)
        IF W_COEFFICIENTREDUC>234 THEN W_COEFFICIENTREDUC=234
        IF W_COEFFICIENTREDUC<0 THEN W_COEFFICIENTREDUC=0
        W_REDUCNETTE=INT((W_COEFFICIENTREDUC*W_ASSIETTE/1000)+1/2)
       END
      END
     END
    END
    W_CHGPATROPROFIL=W_CHGPATROPROFIL-W_REDUCNETTE
    IF W_REDUCNETTE#0 AND W_TRAITPROFIL="REEL" THEN
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,8,-1;CodRubChg)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,9,-1;W_ASSIETTE)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,10,-1;"")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;"")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;"")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,13,-1;"")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;-W_REDUCNETTE)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28,-1;"0")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,31;W_HEURESMALADIE35H)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,32;W_COEFFICIENTREDUC)
    END
   CASE TypPartSalRubChg="Montant"
    IF W_TRAITPROFIL="REEL" AND W_MONTBRUT#0 THEN
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,8,-1;CodRubChg)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,9,-1;W_MONTBRUT)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,10,-1;"")
     IF PartSalRubChg>=0 THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;-INT(PartSalRubChg/10+1/2))
     END ELSE
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;-INT(PartSalRubChg/10-1/2))
     END
     NetAPayerCal=NetAPayerCal-INT(PartSalRubChg/10+1/2)
     IF ExcNetImpRubChg=0 THEN
      IF PartSalRubChg>=0 THEN 
       MontImposCal=MontImposCal-INT(PartSalRubChg/10+1/2)
      END ELSE
       MontImposCal=MontImposCal-INT(PartSalRubChg/10-1/2)
      END
     END
     IF TypPartPatRubChg="" THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;"")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,13,-1;"")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;"")
     END
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28,-1;W_MONTBRUT)
    END
   CASE TypPartSalRubChg="%"
    W_TYPEPART="SAL"
    GOSUB 400
    IF W_TRAITPROFIL="REEL" THEN
     IF CodRubChg=W_RUBAADEXOAAD OR CodRubChg=W_RUBAADEXOACTIVITE OR CodRubChg=W_RUBAADNONEXO OR CodRubChg=W_RUBAADCASGENTOT THEN
      PartSalRubChg=W_TAUXURSSAFTOT
     END ELSE
      PartSalRubChg=W_TAUXURSSAFPLAF
     END
     IF RubAADRubChg=1 THEN
      IF ExoAADRubChg=0 THEN
       IF (LissageContrat=1 AND W_FINCONTRAT="OUI") OR (LissageContrat=1 AND W_FINMODULATION="OUI") THEN
        IF W_BASERUBCHGAADURSSAF=0 AND W_BASERUBAADEXOAAD=0 THEN
         W_ASSIETTESAL=W_ASSIETTEBRUTEINITIALE-W_CUMULURSSAFACT
        END ELSE
         W_ASSIETTESAL=W_ASSIETTEBRUTEINITIALE+W_BASERUBCHGAADURSSAF-W_BASEAADEXOAAD-W_BASEAADEXOACTIVITE-W_BASERUBAADNONEXO-W_BASERUBAADEXOAAD
        END
       END ELSE
*        IF W_ASSIETTE<0 THEN W_ASSIETTE=0
        W_ASSIETTESAL=W_ASSIETTE
       END
       IF FonctionContrat="A" AND W_POURCENTNONEXOADM#0 THEN
        IF TypTranche="01" AND TypChgRubChg="01" THEN
         IF W_POURCENTNONEXOADM=10000 THEN
          W_ASSIETTESAL=W_ASSIETTEBRUTEINITIALE
         END ELSE
          W_ASSIETTESAL=W_ASSIETTEBRUTEINITIALE-W_CUMULURSSAFACT
         END
        END
       END
       W_ASSIETTESAL=W_ASSIETTESAL+W_BASEURSSAFNONEXO2005
       IF TypTranche="02" AND TypChgRubChg="01" THEN
        IF W_ASSIETTESAL>W_CUMULPLAFONDSECUURSSAF-W_BASERUBAADNONEXO THEN W_ASSIETTESAL=W_CUMULPLAFONDSECUURSSAF-W_BASERUBAADNONEXO
       END
      END ELSE
       IF ExoAADRubChg=1 THEN
        IF (LissageContrat=1 AND W_FINCONTRAT="OUI") OR (LissageContrat=1 AND W_FINMODULATION="OUI") THEN
         IF W_ASSIETTEBRUTEINITIALE+W_BASERUBCHGAADURSSAF>=0 THEN
          W_ASSIETTESAL=INT((W_ASSIETTEBRUTEINITIALE+W_BASERUBCHGAADURSSAF)*W_POURCENTEXO/10000+1/2)
         END ELSE
          W_ASSIETTESAL=INT((W_ASSIETTEBRUTEINITIALE+W_BASERUBCHGAADURSSAF)*W_POURCENTEXO/10000-1/2)
         END
         W_ASSIETTESALBIS=W_ASSIETTESAL
         TypTranche=EXTRACT(ENR_TRANCHE,10)
         W_ASSIETTESAL=W_ASSIETTESAL-W_BASERUBAADEXOAAD-W_BASEURSSAFNONEXO2005
         IF TypTranche="02" AND TypChgRubChg="01" THEN
          W_ASSIETTESAL=W_ASSIETTESALBIS-W_BASECOTISURSSAFEXOPLAF-W_BASEURSSAFNONEXO2005
          IF W_ASSIETTESAL>W_CUMULPLAFONDSECUURSSAF THEN W_ASSIETTESAL=W_ASSIETTE
         END
        END ELSE
         IF W_ASSIETTE>=0 THEN
          W_ASSIETTESAL=INT(W_ASSIETTE*W_POURCENTEXO/10000+1/2)
         END ELSE
          W_ASSIETTESAL=INT(W_ASSIETTE*W_POURCENTEXO/10000-1/2)
         END
         IF W_ASSIETTESAL<W_CUMULURSSAFEXO THEN
          IF W_PLAFONDSECUURSSAF>W_CUMULURSSAFEXO THEN W_ASSIETTESAL=W_CUMULURSSAFEXO
         END
         TypTranche=EXTRACT(ENR_TRANCHE,10)
         IF TypTranche="02" AND TypChgRubChg="01" THEN
          IF W_ASSIETTESAL<W_PLAFONDSECUAAD AND W_PLAFONDSECUAAD<=W_CUMULURSSAFEXO THEN W_ASSIETTESAL=W_PLAFONDSECUAAD
          IF W_BASECOTISURSSAFEXOPLAF+W_ASSIETTESAL>W_BASECOTISURSSAFEXOTOT THEN W_ASSIETTESAL=W_BASECOTISURSSAFEXOTOT-W_BASECOTISURSSAFEXOPLAF
          IF PlafondHistCum=W_BASECOTISURSSAFEXOPLAF AND W_ASSIETTESAL<W_PLAFONDSECUAAD THEN W_ASSIETTESAL=W_BASECOTISURSSAFEXOTOT-W_BASECOTISURSSAFEXOPLAF
         END
        END
       END ELSE
        IF (LissageContrat=1 AND W_FINCONTRAT="OUI") OR (LissageContrat=1 AND W_FINMODULATION="OUI") THEN
         W_TAUXHORMOYENAAD=INT((W_ASSIETTEBRUTEINITIALE+W_BASERUBCHGAADURSSAF)*1000/(W_BASEHEURESBRUTESAAD+W_HEURESMALADIE35H)+1/2)
         W_BASEHEURESAADEXOAAD=INT((W_BASEAADEXOAAD+W_BASERUBAADEXOAAD+W_BASEURSSAFNONEXO2005)*1000/W_TAUXHORMOYENAAD+1/2)
         W_BASEHEURESAADEXOACTIVITE=W_BASEHEURESBRUTESAAD+W_HEURESMALADIE35H-W_BASEHEURESAADEXOAAD
         W_BASEAADEXOACTIVITE=INT(W_BASEHEURESAADEXOACTIVITE*W_SMICMOYENAAD/100+1/2)
         W_ASSIETTESAL=W_BASEAADEXOACTIVITE-W_BASERUBAADEXOACTIVITE
         IF W_ASSIETTESAL>W_ASSIETTE THEN
          W_ASSIETTESAL=W_ASSIETTE
          W_BASEAADEXOACTIVITE=W_ASSIETTE+W_BASERUBAADEXOACTIVITE
         END
         IF TypTranche="02" AND TypChgRubChg="01" THEN
          IF W_ASSIETTESAL>W_CUMULPLAFONDSECUURSSAF THEN W_ASSIETTESAL=W_ASSIETTE
         END
        END ELSE
*         IF W_ASSIETTE+W_CUMULURSSAFEXO-1=W_ASSIETTEBRUTEINITIALE OR W_ASSIETTE+W_CUMULURSSAFEXO-2=W_ASSIETTEBRUTEINITIALE THEN
         IF ABS(W_ASSIETTE+W_CUMULURSSAFEXO-W_ASSIETTEBRUTEINITIALE)<=4 THEN
          W_ASSIETTESAL=W_ASSIETTEBRUTEINITIALE-W_CUMULURSSAFEXO
         END ELSE
          W_ASSIETTESAL=W_ASSIETTE
         END
         TypTranche=EXTRACT(ENR_TRANCHE,10)
         IF TypTranche="02" AND TypChgRubChg="01" THEN
          IF W_ASSIETTESAL<W_CUMULURSSAFACT THEN
           IF W_PLAFONDSECUURSSAF>W_CUMULURSSAFACT THEN W_ASSIETTESAL=W_CUMULURSSAFACT
          END
          IF W_BASECOTISURSSAFACTPLAF+W_ASSIETTESAL>W_BASECOTISURSSAFACTTOT THEN W_ASSIETTESAL=W_BASECOTISURSSAFACTTOT-W_BASECOTISURSSAFACTPLAF
         END       
        END
       END
      END
      IF W_ASSIETTESAL>=0 THEN
       W_COTISSAL=INT(W_ASSIETTESAL*PartSalRubChg/100000+1/2)
      END ELSE
       W_COTISSAL=INT(W_ASSIETTESAL*PartSalRubChg/100000-1/2)
      END
     END ELSE
      W_ASSIETTESAL=W_ASSIETTE
      IF W_ASSIETTE>=0 THEN
       W_COTISSAL=INT(W_ASSIETTE*PartSalRubChg/100000+1/2)
      END ELSE
       W_COTISSAL=INT(W_ASSIETTE*PartSalRubChg/100000-1/2)
      END
     END
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,8,-1;CodRubChg)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,9,-1;W_ASSIETTESAL)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,10,-1;PartSalRubChg)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;-W_COTISSAL)
     NetAPayerCal=NetAPayerCal-W_COTISSAL
     IF ExcNetImpRubChg=0 THEN MontImposCal=MontImposCal-W_COTISSAL
     IF TypPartPatRubChg="" THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;"")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,13,-1;"")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;"")
     END
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28,-1;W_ASSIETTEBRUTEINITIALE)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,31;W_HEURESMALADIE35H)
    END
  END CASE
  BEGIN CASE
   CASE CodRubChg="900"
    NULL
   CASE CodRubChg="902"
    NULL
   CASE CodRubChg="903"
    NULL
   CASE CodRubChg="904"
    NULL
   CASE TypPartPatRubChg="Montant"
    IF PartPatRubChg>=0 THEN
     W_CHGPATROPROFIL=W_CHGPATROPROFIL+INT(PartPatRubChg/10+1/2)
    END ELSE
     W_CHGPATROPROFIL=W_CHGPATROPROFIL+INT(PartPatRubChg/10-1/2)
    END
    IF W_TRAITPROFIL="REEL" AND W_MONTBRUT#0 THEN
     IF TypPartSalRubChg="" THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,8,-1;CodRubChg)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,9,-1;"")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,10,-1;"")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;"")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28,-1;W_MONTBRUT)
     END
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;W_MONTBRUT)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,13,-1;"")
     IF PartPatRubChg>=0 THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;INT(PartPatRubChg/10+1/2))
     END ELSE
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;INT(PartPatRubChg/10-1/2))
     END
    END
   CASE TypPartPatRubChg="%"
    W_TYPEPART="PAT"
    GOSUB 400
    IF RubAADRubChg=1 THEN
     IF ExoAADRubChg=0 THEN
      IF (LissageContrat=1 AND W_FINCONTRAT="OUI") OR (LissageContrat=1 AND W_FINMODULATION="OUI") THEN
       IF W_BASERUBCHGAADURSSAF=0 AND W_BASERUBAADEXOAAD=0 THEN
        W_ASSIETTEPAT=W_ASSIETTEBRUTEINITIALE-W_CUMULURSSAFACT
       END ELSE
        W_ASSIETTEPAT=W_ASSIETTEBRUTEINITIALE+W_BASERUBCHGAADURSSAF-W_BASEAADEXOAAD-W_BASEAADEXOACTIVITE-W_BASERUBAADNONEXO-W_BASERUBAADEXOAAD
       END
      END ELSE
*       IF W_ASSIETTE<0 THEN W_ASSIETTE=0
       W_ASSIETTEPAT=W_ASSIETTE
      END
      IF FonctionContrat="A" AND W_POURCENTNONEXOADM#0 THEN
       IF TypTranche="01" AND TypChgRubChg="01" THEN
        IF W_POURCENTNONEXOADM=10000 THEN
         W_ASSIETTEPAT=W_ASSIETTEBRUTEINITIALE
        END ELSE
         W_ASSIETTEPAT=W_ASSIETTEBRUTEINITIALE-W_CUMULURSSAFACT
        END
       END
      END
      W_ASSIETTEPAT=W_ASSIETTEPAT+W_BASEURSSAFNONEXO2005
      IF TypTranche="02" AND TypChgRubChg="01" THEN
       IF W_ASSIETTEPAT>W_CUMULPLAFONDSECUURSSAF-W_BASERUBAADNONEXO THEN W_ASSIETTEPAT=W_CUMULPLAFONDSECUURSSAF-W_BASERUBAADNONEXO
      END
     END ELSE
      IF ExoAADRubChg=1 THEN
       IF (LissageContrat=1 AND W_FINCONTRAT="OUI") OR (LissageContrat=1 AND W_FINMODULATION="OUI") THEN
        IF W_ASSIETTEBRUTEINITIALE+W_BASERUBCHGAADURSSAF>=0 THEN
         W_ASSIETTEPAT=INT((W_ASSIETTEBRUTEINITIALE+W_BASERUBCHGAADURSSAF)*W_POURCENTEXO/10000+1/2)
        END ELSE
         W_ASSIETTEPAT=INT((W_ASSIETTEBRUTEINITIALE+W_BASERUBCHGAADURSSAF)*W_POURCENTEXO/10000-1/2)
        END
        W_ASSIETTEPATBIS=W_ASSIETTEPAT
        TypTranche=EXTRACT(ENR_TRANCHE,10)
        W_ASSIETTEPAT=W_ASSIETTEPAT-W_BASERUBAADEXOAAD-W_BASEURSSAFNONEXO2005
        IF TypTranche="02" AND TypChgRubChg="01" THEN
*         W_ASSIETTEPAT=W_BASECOTISURSSAFEXOTOT-W_BASECOTISURSSAFEXOPLAF-W_BASEURSSAFNONEXO2005
         W_ASSIETTEPAT=W_ASSIETTEPATBIS-W_BASECOTISURSSAFEXOPLAF-W_BASEURSSAFNONEXO2005
         IF W_ASSIETTEPAT>W_CUMULPLAFONDSECUURSSAF THEN W_ASSIETTEPAT=W_ASSIETTE
        END
       END ELSE
        IF W_ASSIETTE>=0 THEN
         W_ASSIETTEPAT=INT(W_ASSIETTE*W_POURCENTEXO/10000+1/2)
        END ELSE
         W_ASSIETTEPAT=INT(W_ASSIETTE*W_POURCENTEXO/10000-1/2)
        END
        IF W_ASSIETTEPAT<W_CUMULURSSAFEXO THEN
         IF W_PLAFONDSECUURSSAF>W_CUMULURSSAFEXO THEN W_ASSIETTEPAT=W_CUMULURSSAFEXO
        END
        TypTranche=EXTRACT(ENR_TRANCHE,10)
        IF TypTranche="02" AND TypChgRubChg="01" THEN
         IF W_ASSIETTEPAT<W_PLAFONDSECUAAD AND W_PLAFONDSECUAAD<=W_CUMULURSSAFEXO THEN W_ASSIETTEPAT=W_PLAFONDSECUAAD
         IF W_BASECOTISURSSAFEXOPLAF+W_ASSIETTEPAT>W_BASECOTISURSSAFEXOTOT THEN W_ASSIETTEPAT=W_BASECOTISURSSAFEXOTOT-W_BASECOTISURSSAFEXOPLAF
         IF PlafondHistCum=W_BASECOTISURSSAFEXOPLAF AND W_ASSIETTEPAT<W_PLAFONDSECUAAD THEN W_ASSIETTEPAT=W_BASECOTISURSSAFEXOTOT-W_BASECOTISURSSAFEXOPLAF
        END
       END
      END ELSE
       IF (LissageContrat=1 AND W_FINCONTRAT="OUI") OR (LissageContrat=1 AND W_FINMODULATION="OUI") THEN
        W_TAUXHORMOYENAAD=INT((W_ASSIETTEBRUTEINITIALE+W_BASERUBCHGAADURSSAF)*1000/(W_BASEHEURESBRUTESAAD+W_HEURESMALADIE35H)+1/2)
        W_BASEHEURESAADEXOAAD=INT((W_BASEAADEXOAAD+W_BASERUBAADEXOAAD+W_BASEURSSAFNONEXO2005)*1000/W_TAUXHORMOYENAAD+1/2)
        W_BASEHEURESAADEXOACTIVITE=W_BASEHEURESBRUTESAAD+W_HEURESMALADIE35H-W_BASEHEURESAADEXOAAD
        W_BASEAADEXOACTIVITE=INT(W_BASEHEURESAADEXOACTIVITE*W_SMICMOYENAAD/100+1/2)
        W_ASSIETTEPAT=W_BASEAADEXOACTIVITE-W_BASERUBAADEXOACTIVITE
        IF W_ASSIETTEPAT>W_ASSIETTE THEN
         W_ASSIETTEPAT=W_ASSIETTE
         W_BASEAADEXOACTIVITE=W_ASSIETTE+W_BASERUBAADEXOACTIVITE
        END
        IF TypTranche="02" AND TypChgRubChg="01" THEN
         IF W_ASSIETTEPAT>W_CUMULPLAFONDSECUURSSAF THEN W_ASSIETTEPAT=W_ASSIETTE
        END
       END ELSE
*        IF W_ASSIETTE+W_CUMULURSSAFEXO-1=W_ASSIETTEBRUTEINITIALE OR W_ASSIETTE+W_CUMULURSSAFEXO-2=W_ASSIETTEBRUTEINITIALE THEN
        IF ABS(W_ASSIETTE+W_CUMULURSSAFEXO-W_ASSIETTEBRUTEINITIALE)<=4 THEN
         W_ASSIETTEPAT=W_ASSIETTEBRUTEINITIALE-W_CUMULURSSAFEXO
        END ELSE
         W_ASSIETTEPAT=W_ASSIETTE
        END
        TypTranche=EXTRACT(ENR_TRANCHE,10)
        IF TypTranche="02" AND TypChgRubChg="01" THEN
         IF W_ASSIETTEPAT<W_CUMULURSSAFACT THEN
          IF W_PLAFONDSECUURSSAF>W_CUMULURSSAFACT THEN W_ASSIETTEPAT=W_CUMULURSSAFACT
         END
         IF W_BASECOTISURSSAFACTPLAF+W_ASSIETTEPAT>W_BASECOTISURSSAFACTTOT THEN W_ASSIETTEPAT=W_BASECOTISURSSAFACTTOT-W_BASECOTISURSSAFACTPLAF
        END
       END
      END
     END
     IF W_ASSIETTEPAT>=0 THEN
      W_COTISPAT=INT(W_ASSIETTEPAT*PartPatRubChg/100000+1/2)
     END ELSE
      W_COTISPAT=INT(W_ASSIETTEPAT*PartPatRubChg/100000-1/2)
     END
    END ELSE
     W_ASSIETTEPAT=W_ASSIETTE
     IF W_ASSIETTE>=0 THEN
      W_COTISPAT=INT(W_ASSIETTE*PartPatRubChg/100000+1/2)
     END ELSE
      W_COTISPAT=INT(W_ASSIETTE*PartPatRubChg/100000-1/2)
     END
    END
    W_CHGPATROPROFIL=W_CHGPATROPROFIL+W_COTISPAT
    IF W_TRAITPROFIL="REEL" THEN
     IF TypPartSalRubChg="" THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,8,-1;CodRubChg)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,9,-1;"")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,10,-1;"")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;"")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28,-1;W_ASSIETTEBRUTEINITIALE)
     END
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;W_ASSIETTEPAT)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,13,-1;PartPatRubChg)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;W_COTISPAT)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,31;W_HEURESMALADIE35H)
    END
  END CASE
  TypTranche=EXTRACT(ENR_TRANCHE,10)
  IF RubAADRubChg=1 THEN
   IF ExoAADRubChg=1 THEN
    IF TypTranche="01" AND TypChgRubChg="01" THEN
     IF W_ASSIETTEPAT#0 THEN
      W_CUMULURSSAFEXO=W_ASSIETTEPAT
      W_BASECOTISURSSAFEXOTOT=W_BASECOTISURSSAFEXOTOT+W_ASSIETTEPAT
      W_BASEAADEXOAAD=W_ASSIETTEPAT
     END ELSE
      W_CUMULURSSAFEXO=W_ASSIETTESAL
      W_BASECOTISURSSAFEXOTOT=W_BASECOTISURSSAFEXOTOT+W_ASSIETTESAL
      W_BASEAADEXOAAD=W_ASSIETTESAL
     END
    END
   END
   IF ExoAADRubChg=2 THEN
    IF TypTranche="01" AND TypChgRubChg="01" THEN
     IF W_ASSIETTEPAT#0 THEN
      W_CUMULURSSAFACT=W_ASSIETTEPAT
      W_BASECOTISURSSAFACTTOT=W_BASECOTISURSSAFACTTOT+W_ASSIETTEPAT
     END ELSE
      W_CUMULURSSAFACT=W_ASSIETTESAL
      W_BASECOTISURSSAFACTTOT=W_BASECOTISURSSAFACTTOT+W_ASSIETTESAL
     END
    END
   END
   IF TypTranche="02" AND TypChgRubChg="01" THEN
    J=1
    LOOP
     RubChgHistCum=EXTRACT(ENR_HISTORCUMUL,15,J)
     UNTIL RubChgHistCum="" OR RubChgHistCum=CodRubChg DO
      J=J+1
    REPEAT
    IF RubChgHistCum=CodRubChg THEN W_CUMULPLAFONDSECUURSSAF=W_CUMULPLAFONDSECUURSSAF-ENR_HISTORCUMUL<17,J>
    IF W_ASSIETTEPAT#0 THEN
     W_CUMULURSSAFPLAF=W_CUMULURSSAFPLAF+W_ASSIETTEPAT
     W_PLAFONDSECUURSSAF=W_PLAFONDSECUURSSAF-W_ASSIETTEPAT
     W_CUMULPLAFONDSECUURSSAF=W_CUMULPLAFONDSECUURSSAF-W_ASSIETTEPAT
    END ELSE
     W_CUMULURSSAFPLAF=W_CUMULURSSAFPLAF+W_ASSIETTESAL
     W_PLAFONDSECUURSSAF=W_PLAFONDSECUURSSAF-W_ASSIETTESAL
     W_CUMULPLAFONDSECUURSSAF=W_CUMULPLAFONDSECUURSSAF-W_ASSIETTESAL
    END
   END
  END
390 I=I+1
REPEAT
IF W_TRAITPROFIL="FICTIF" THEN RETURN
IF W_TYPETRAIT#"R" THEN
*
* CALCUL SAISIES/ARRETS SUR SALAIRE
*
 W_MONTSAISIEARRET=0
 IF W_BUDGET#1 THEN CALL CalcSaisieArret(CodAidantContrat,NetAPayerCal,W_PERIODEPAIE,W_MONTSAISIEARRET) 
 IF W_MONTSAISIEARRET#0 THEN
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;"824")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;"")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;"")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;-W_MONTSAISIEARRET)
 END
*
* CALCUL INDEMNITE DE LICENCIEMENT EVENTUELLE
*
 IF W_FINCONTRAT="OUI" THEN
  IF (MotifFinContrat>="10" AND MotifFinContrat<="25") OR MotifFinContrat="53" THEN
   W_MONTINDLICRET=0
   IF W_BUDGET=1 THEN
    W_TYPELICRET="L"
    GOSUB 2800
   END ELSE
    CALL CalcIndLicRet(CodAidantContrat,"L",W_MONTINDLICRET,W_PERIODEPAIE)
   END
   IF W_MONTINDLICRET#0 THEN
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;"800")
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;"")
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;"")
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;W_MONTINDLICRET)
   END
  END
 END
*
* CARTE ORANGE
*
 IF CartOrangContrat#"" THEN
  I=1
  LOOP
   W_CODECARTORANG=EXTRACT(ENR_TABLES,2,I)
   UNTIL W_CODECARTORANG="" OR W_CODECARTORANG=CartOrangContrat DO
    I=I+1
  REPEAT
  W_COUPONCARTORANG=0
  IF W_CODECARTORANG=CartOrangContrat THEN W_COUPONCARTORANG=EXTRACT(ENR_TABLES,4,I)
  W_COUPONCARTORANG=INT(W_COUPONCARTORANG/2+1/2) 
  W_REMBTCOUPON=0
  W_HEURESORANGE=ENR_DETAILCALCUL<6>-W_HEURESORANGE
  IF W_HEURESORANGE<0 THEN W_HEURESORANGE=0
  IF ConvColContrat="02" THEN
   IF W_HEURESORANGE >INT(W_HORMOISLEGAL/2) THEN
    W_REMBTCOUPON=W_COUPONCARTORANG
   END ELSE
    W_REMBTCOUPON=INT(W_HEURESORANGE*W_COUPONCARTORANG/(W_HORMOISLEGAL/2)+1/2)
   END
  END ELSE
   IF CarteOrangeEtabl=1 THEN
    IF W_HEURESORANGE>INT(W_HORMOISETABL/2) THEN
     W_REMBTCOUPON=W_COUPONCARTORANG
    END ELSE
     W_REMBTCOUPON=INT(W_HEURESORANGE*W_COUPONCARTORANG/(W_HORMOISETABL/2)+1/2)
    END
   END
  END
  IF W_REMBTCOUPON#0 THEN
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;"825")
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;"")
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;"")
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;W_REMBTCOUPON)
  END
 END
* mutuelle exclusivement salariale
 IF ChargeMutContrat="" AND MutSalContrat#0 THEN
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;"826")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;"")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;"")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;-MutSalContrat)
 END
END
*
ENR_DETAILCALCUL<15>=MontImposCal
ENR_DETAILCALCUL<16>=NetAPayerCal
MontAPayer=NetAPayerCal
I=1
LOOP
 RubSaisieImpCal=ENR_DETAILCALCUL<17,I>
 UNTIL RubSaisieImpCal="" DO
  MontAPayer=MontAPayer+ENR_DETAILCALCUL<20,I>
  I=I+1
REPEAT
IF W_TYPETRAIT="T" OR W_TYPETRAIT="I" THEN
 READ ENR_ACOMPTEBULL FROM F.ACOMPTEBULL,W_CLE THEN
  MontAcompteBull=EXTRACT(ENR_ACOMPTEBULL,1)
  EtatAcompteBull=EXTRACT(ENR_ACOMPTEBULL,2)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;"816")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;"")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;"")
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;-MontAcompteBull)
  MontAPayer=MontAPayer-MontAcompteBull
*  IF EtatAcompteBull="P" THEN
*   DELETE F.ACOMPTEBULL,W_CLE
*  END
 END
END
ENR_DETAILCALCUL<21>=MontAPayer
W_JOURS=30
IF DatDebContrat>W_PERIODEPAIEDEB THEN
 IF DatFinContrat#"" THEN
  IF DatFinContrat>W_PERIODEPAIEFIN THEN
   W_JOURS=W_PERIODEPAIEFIN-DatDebContrat+1
  END ELSE
   W_JOURS=DatFinContrat-DatDebContrat+1
  END
 END ELSE
  W_JOURS=W_PERIODEPAIEFIN-DatDebContrat+1
 END
END ELSE
 IF DatFinContrat#"" THEN
  IF DatFinContrat<W_PERIODEPAIEFIN THEN
   W_JOURS=DatFinContrat-W_PERIODEPAIEDEB+1
  END
 END
END
IF W_JOURS>30 THEN W_JOURS=30
IF ConvColContrat="02" THEN W_JOURS=30
W_PLAFONDSECU1=INT(W_PLAFONDSECU*W_JOURS/30+1/2)
ENR_DETAILCALCUL<29>=W_PLAFONDSECU1
IF W_TYPETRAIT="R" THEN RETURN
IF W_BUDGET#1 THEN
 IF ConvColContrat="02" THEN
  IF ENR_DETAILCALCUL<6>>W_HORMOISLEGAL THEN
   ENR_ANOMALIEPAIE=""
   ENR_ANOMALIEPAIE=REPLACE(ENR_ANOMALIEPAIE,1;"DEPASSEMENT HORAIRE LEGAL DU TRAVAIL")
*   WRITE ENR_ANOMALIEPAIE ON F.ANOMALIEPAIE,W_CLE
  END
 END ELSE
  IF W_HEURESREELLES<W_HEURESFORFAITAIRES-INT(W_HEURESFORFAITAIRES/3+1/2) THEN
   ENR_ANOMALIEPAIE=""
   ENR_ANOMALIEPAIE=REPLACE(ENR_ANOMALIEPAIE,1;"INFERIEUR A 66% DU CONTRAT")
   IF W_TYPEACTIVITE="I" THEN
*    WRITE ENR_ANOMALIEPAIE ON F.ANOMALIEPAIE,W_RUPTCONTRAT:W_PERIODEPAIE
   END ELSE
*    WRITE ENR_ANOMALIEPAIE ON F.ANOMALIEPAIE,W_CLE
   END
  END
  IF W_HEURESREELLES>(W_HEURESFORFAITAIRES*1.1) THEN
   ENR_ANOMALIEPAIE=""
   ENR_ANOMALIEPAIE=REPLACE(ENR_ANOMALIEPAIE,1;"SUPERIEUR A 110 % DU CONTRAT")
   IF W_TYPEACTIVITE="I" THEN
*    WRITE ENR_ANOMALIEPAIE ON F.ANOMALIEPAIE,W_RUPTCONTRAT:W_PERIODEPAIE
   END ELSE
*    WRITE ENR_ANOMALIEPAIE ON F.ANOMALIEPAIE,W_CLE
   END
  END
  IF W_HEURESREELLES>W_HEURESFORFAITAIRES+INT(W_HEURESFORFAITAIRES*3333/10000+1/2) THEN
   ENR_ANOMALIEPAIE=""
   ENR_ANOMALIEPAIE=REPLACE(ENR_ANOMALIEPAIE,1;"SUPERIEUR A 133% DU CONTRAT")
   IF W_TYPEACTIVITE="I" THEN
*    WRITE ENR_ANOMALIEPAIE ON F.ANOMALIEPAIE,W_RUPTCONTRAT:W_PERIODEPAIE
   END ELSE
*    WRITE ENR_ANOMALIEPAIE ON F.ANOMALIEPAIE,W_CLE
   END
  END
  IF ENR_DETAILCALCUL<6>>W_HORMOISETABL THEN
   ENR_ANOMALIEPAIE=""
   ENR_ANOMALIEPAIE=REPLACE(ENR_ANOMALIEPAIE,1;"DEPASSEMENT HORAIRE LEGAL DU TRAVAIL")
   IF W_TYPEACTIVITE="I" THEN
*    WRITE ENR_ANOMALIEPAIE ON F.ANOMALIEPAIE,W_RUPTCONTRAT:W_PERIODEPAIE
   END ELSE
*    WRITE ENR_ANOMALIEPAIE ON F.ANOMALIEPAIE,W_CLE
   END
  END
 END
END
RETURN
**********
* RUBRIQUE DE CHARGE EN % : ASSIETTE EN FONCTION DE RUBRIQUES DE SAISIE
* ET/OU DE RUBRIQUES DE CHARGE + REGLE DE REGULARISATION
**********
400 W_HEURESBRUT=ENR_DETAILCALCUL<6>
IF FonctionContrat="A" AND W_POURCENTNONEXOADM#0 THEN
 IF RubAADRubChg=1 AND ExoAADRubChg=2 THEN
  W_HEURESBRUT=W_HEURESBRUT-INT((W_HEURESBRUT*W_POURCENTNONEXOADM/10000)+1/2)
 END
END
W_ASSIETTE=0
W_ASSIETTEBRUTE=0
IF CodRubChg="900" THEN
 W_HEURESIJSSBRUT=0
 J=1
 LOOP
  UNTIL ENR_DETAILCALCUL<2,J>="" DO
   IF ENR_DETAILCALCUL<2,J>="812" THEN
    W_HEURESIJSSBRUT=W_HEURESIJSSBRUT+INT((-ENR_DETAILCALCUL<5,J>)/W_TAUXHOR*1000+1/2)   
   END
   J=J+1
 REPEAT
END
W_HEURESMALADIE=0
W_HEURESMALADIE35H=0
W_TABRUBMALADIE=""
J=1
LOOP
 UNTIL ENR_DETAILCALCUL<2,J>="" DO
  IF ENR_DETAILCALCUL<2,J>="807" OR ENR_DETAILCALCUL<2,J>="808" OR ENR_DETAILCALCUL<2,J>=RubCompMalPrev OR ENR_DETAILCALCUL<2,J>=RubCompAccPrev OR ENR_DETAILCALCUL<2,J>=W_RUBINCAPREV99 THEN
   X=1
   LOOP
    UNTIL W_TABRUBMALADIE<X,1>=ENR_DETAILCALCUL<2,J> OR W_TABRUBMALADIE<X,1>="" DO
     X=X+1
   REPEAT
   IF W_TABRUBMALADIE<X,1>="" THEN
    W_TABRUBMALADIE<X,1>=ENR_DETAILCALCUL<2,J>
    W_TABRUBMALADIE<X,2>=ENR_DETAILCALCUL<5,J>
   END ELSE
    W_TABRUBMALADIE<X,2>=W_TABRUBMALADIE<X,2>+ENR_DETAILCALCUL<5,J>
   END
   W_TABRUBMALADIE<X,3>=0
  END
  J=J+1
REPEAT
IF AssBrutRubChg="1" THEN
 W_ASSIETTE=W_MONTBRUT
 J=1
 LOOP
  UNTIL RubBrutRubChg<1,J>="" DO
   K=1
   W_ASSIETTERUBSAI=0
   LOOP
    UNTIL ENR_DETAILCALCUL<2,K>="" DO
     IF RubBrutRubChg<1,J>=ENR_DETAILCALCUL<2,K> THEN
      IF CodRubChg="900" THEN
       IF RubBrutRubChg<1,J>="807" OR RubBrutRubChg<1,J>="808" OR RubBrutRubChg<1,J>=RubCompMalPrev OR RubBrutRubChg<1,J>=RubCompAccPrev THEN
        W_HEURESMALADIE=W_HEURESMALADIE+INT(ENR_DETAILCALCUL<5,K>/W_TAUXHOR*10000+1/2)
       END   
      END
      W_ASSIETTE=W_ASSIETTE-ENR_DETAILCALCUL<5,K>
      IF PlafondBrutRubChg<1,J>#0 THEN
       IF PlanchBrutRubChg<1,J>=0 THEN
        IF ENR_DETAILCALCUL<5,K>>PlafondBrutRubChg<1,J> THEN
         W_ASSIETTERUBSAI=PlafondBrutRubChg<1,J>
        END ELSE
         W_ASSIETTERUBSAI=ENR_DETAILCALCUL<5,K>
        END
       END ELSE
        IF ENR_DETAILCALCUL<5,K>>PlafondBrutRubChg<1,J> THEN
         W_ASSIETTERUBSAI=PlafondBrutRubChg<1,J>-PlanchBrutRubChg<1,J>
        END ELSE
         IF ENR_DETAILCALCUL<5,K>>PlanchBrutRubChg<1,J> THEN 
          W_ASSIETTERUBSAI=ENR_DETAILCALCUL<5,K>-PlanchBrutRubChg<1,J>
         END
        END
       END
      END
      W_ASSIETTERUBSAI=INT(W_ASSIETTERUBSAI*PourcentBrutRubChg<1,J>/10000+1/2)
*      IF CodRubChg="902" OR CodRubChg="904" THEN
      IF RubBrutRubChg<1,J>="807" OR RubBrutRubChg<1,J>="808" OR RubBrutRubChg<1,J>=RubCompMalPrev OR RubBrutRubChg<1,J>=RubCompAccPrev OR RubBrutRubChg<1,J>=W_RUBINCAPREV99 THEN
       X=1
       LOOP
        UNTIL W_TABRUBMALADIE<X,1>=RubBrutRubChg<1,J> OR W_TABRUBMALADIE<X,1>="" DO
         X=X+1
       REPEAT
       IF W_TABRUBMALADIE<X,1>=RubBrutRubChg<1,J> THEN W_TABRUBMALADIE<X,3>=1
       IF TauxHorPlan35HEtab="" OR TauxHorPlan35HEtab="0" THEN
        IF W_TAUXHOR<ValSmicHor*100 THEN
         W_HEURESMALADIE35H=W_HEURESMALADIE35H+INT(W_ASSIETTERUBSAI/(ValSmicHor*100)*10000+1/2)
        END ELSE
         W_HEURESMALADIE35H=W_HEURESMALADIE35H+INT(W_ASSIETTERUBSAI/W_TAUXHOR*10000+1/2)
        END
       END ELSE
        IF ValSmicHor<TauxHorPlan35HEtab THEN
         IF W_TAUXHOR<TauxHorPlan35HEtab*100 THEN
          W_HEURESMALADIE35H=W_HEURESMALADIE35H+INT(W_ASSIETTERUBSAI/(TauxHorPlan35HEtab*100)*10000+1/2)
         END ELSE
          W_HEURESMALADIE35H=W_HEURESMALADIE35H+INT(W_ASSIETTERUBSAI/W_TAUXHOR*10000+1/2)
         END
        END ELSE
         IF W_TAUXHOR<ValSmicHor*100 THEN
          W_HEURESMALADIE35H=W_HEURESMALADIE35H+INT(W_ASSIETTERUBSAI/(ValSmicHor*100)*10000+1/2)
         END ELSE
          W_HEURESMALADIE35H=W_HEURESMALADIE35H+INT(W_ASSIETTERUBSAI/W_TAUXHOR*10000+1/2)
         END
        END
       END
      END
*      END
      W_ASSIETTE=W_ASSIETTE+W_ASSIETTERUBSAI
     END
     K=K+1  
   REPEAT
   J=J+1
 REPEAT
END
X=1
LOOP
 UNTIL W_TABRUBMALADIE<X,1>="" DO
  IF W_TABRUBMALADIE<X,3>=0 THEN
   IF TauxHorPlan35HEtab="" OR TauxHorPlan35HEtab="0" THEN
    IF W_TAUXHOR<ValSmicHor*100 THEN
     W_HEURESMALADIE35H=W_HEURESMALADIE35H+INT(W_TABRUBMALADIE<X,2>/(ValSmicHor*100)*10000+1/2)
    END ELSE
     W_HEURESMALADIE35H=W_HEURESMALADIE35H+INT(W_TABRUBMALADIE<X,2>/W_TAUXHOR*10000+1/2)
    END
   END ELSE
    IF ValSmicHor<TauxHorPlan35HEtab THEN
     IF W_TAUXHOR<TauxHorPlan35HEtab*100 THEN
      W_HEURESMALADIE35H=W_HEURESMALADIE35H+INT(W_TABRUBMALADIE<X,2>/(TauxHorPlan35HEtab*100)*10000+1/2)
     END ELSE
      W_HEURESMALADIE35H=W_HEURESMALADIE35H+INT(W_TABRUBMALADIE<X,2>/W_TAUXHOR*10000+1/2)
     END
    END ELSE
     IF W_TAUXHOR<ValSmicHor*100 THEN
      W_HEURESMALADIE35H=W_HEURESMALADIE35H+INT(W_TABRUBMALADIE<X,2>/(ValSmicHor*100)*10000+1/2)
     END ELSE
      W_HEURESMALADIE35H=W_HEURESMALADIE35H+INT(W_TABRUBMALADIE<X,2>/W_TAUXHOR*10000+1/2)
     END
    END
   END
  END
  X=X+1
REPEAT
IF AssChgRubChg="1" THEN
 J=1
 LOOP
  UNTIL RubChgRubChg<1,J>="" DO
   K=1
   LOOP
    UNTIL ENR_DETAILCALCUL<8,K>="" DO
     IF RubChgRubChg<1,J>=ENR_DETAILCALCUL<8,K> THEN
      IF IncSalRubChg<1,J>="OUI" THEN W_ASSIETTE=W_ASSIETTE+ENR_DETAILCALCUL<11,K>
      IF IncPatRubChg<1,J>="OUI" THEN W_ASSIETTE=W_ASSIETTE+ENR_DETAILCALCUL<14,K>
     END
     K=K+1 
   REPEAT
   J=J+1
 REPEAT
END
IF CodRubChg="900" THEN RETURN ;*Rduction sur les bas salaires
IF CodRubChg="902" THEN RETURN ;*Allegement 35 Heures
IF CodRubChg="903" THEN RETURN ;*Aide Incitative
IF CodRubChg="904" THEN RETURN ;*Rduction globale S.S.
IF BaseContrat="B" THEN
 IF W_TYPEPART="SAL" AND TypAbatSalRubChg#"" THEN
  IF TypAbatSalRubChg="M" THEN
   W_ASSIETTE=W_ASSIETTE-INT(AbatSalRubChg/10+1/2)
  END ELSE
   W_ASSIETTE=W_ASSIETTE-INT(W_ASSIETTE*AbatSalRubChg/100000+1/2)
  END
 END
 IF W_TYPEPART="PAT" AND TypAbatSalRubChg#"" THEN
  IF TypAbatSalRubChg="M" THEN
   W_ASSIETTE=W_ASSIETTE-INT(AbatSalRubChg/10+1/2)
  END ELSE
   W_ASSIETTE=W_ASSIETTE-INT(W_ASSIETTE*AbatSalRubChg/100000+1/2)
  END
 END
END
IF FonctionContrat="A" AND W_POURCENTNONEXOADM#0 THEN
 IF RubAADRubChg=1 AND ExoAADRubChg=2 THEN
  W_HEURESMALADIE35H=W_HEURESMALADIE35H-INT((W_HEURESMALADIE35H*W_POURCENTNONEXOADM/10000)+1/2)
  W_ASSIETTE=W_ASSIETTE-INT((W_ASSIETTE*W_POURCENTNONEXOADM/10000)+1/2)
 END
END
W_ASSIETTEBRUTEINITIALE=W_ASSIETTE
W_ASSIETTEBRUTE=W_ASSIETTE
*
* APPLICATION DE LA REGLE DE REGULARISATION
*
GOSUB 1500 ;* lecture TRANCHE
BEGIN CASE
 CASE RegulRubChg=1 ;* au mois le mois
  IF W_TYPETRANCHE="ASSIND" THEN
   IF AssietteIndContrat#"" THEN 
    W_ASSIETTE=AssietteIndContrat
    W_ASSIETTEBRUTE=W_ASSIETTE
    W_ASSIETTEBRUTEINITIALE=W_ASSIETTE
   END
  END
  IF W_TYPETRANCHE="PLAFSS" OR W_TYPETRANCHE="VALEUR" THEN
   IF W_ASSIETTE>W_FINTRANCHEVAL THEN
    W_ASSIETTE=W_FINTRANCHEVAL-W_DEBTRANCHEVAL
   END ELSE
    IF W_ASSIETTE>W_DEBTRANCHEVAL THEN
     W_ASSIETTE=W_ASSIETTE-W_DEBTRANCHEVAL
    END ELSE
     IF W_DEBTRANCHEVAL>0 THEN W_ASSIETTE=0
    END
   END
  END
  IF W_TYPETRANCHE="HHSMIC" THEN
   IF ConvColContrat="02" THEN
    IF W_DEBTRANCHEHH=0 THEN
     W_ASSIETTECCN02=INT(W_FINTRANCHEHH*ValSmicHor/100+1/2)
     IF W_ASSIETTE>W_ASSIETTECCN02 THEN W_ASSIETTE=W_ASSIETTECCN02 
    END ELSE
     W_ASSIETTECCN02=INT(W_DEBTRANCHEHH*ValSmicHor/100+1/2)
     IF W_ASSIETTE>W_ASSIETTECCN02 THEN
      W_ASSIETTE=W_ASSIETTE-W_ASSIETTECCN02
     END ELSE
      W_ASSIETTE=0
     END
    END 
   END ELSE
    W_HEURESBRUT=W_HEURESBRUT+W_HEURESMALADIE35H
    IF W_HEURESBRUT#0 THEN
     W_TAUXHORBIS=INT(W_ASSIETTEBRUTE*10000/W_HEURESBRUT+1/2)
    END ELSE
     W_TAUXHORBIS=W_TAUXHOR
     W_HEURESBRUT=INT(W_ASSIETTEBRUTE*10000/W_TAUXHORBIS+1/2)
    END
    TypTranche=EXTRACT(ENR_TRANCHE,10)
    IF TypTranche="01" AND TypChgRubChg="01" THEN
     IF W_HEURESBRUT#0 AND W_TAUXHORBIS#0 THEN W_HEURESBRUT=W_HEURESBRUT-INT(W_CUMULURSSAFEXO*10000/W_TAUXHORBIS+1/2)
     W_ASSIETTEBRUTE=W_ASSIETTEBRUTE-W_CUMULURSSAFEXO
    END
    W_HEURESBRUT1=W_HEURESBRUT
    W_HEURESBRUT2=W_HEURESBRUT
    IF W_HEURESBRUT>W_FINTRANCHEHH THEN
     W_HEURESBRUT=W_FINTRANCHEHH-W_DEBTRANCHEHH
    END ELSE
     IF W_DEBTRANCHEHH>0 THEN
      IF W_HEURESBRUT>W_DEBTRANCHEHH THEN 
       W_HEURESBRUT=W_HEURESBRUT-W_DEBTRANCHEHH
      END ELSE
       W_HEURESBRUT2=0
      END
     END
    END
    IF W_TAUXHORBIS>W_FINTRANCHEVAL THEN
     IF W_DEBTRANCHEVAL=0 THEN
      W_ASSIETTE=INT(W_FINTRANCHEVAL*W_HEURESBRUT/10000+1/2)-INT(W_DEBTRANCHEVAL*W_HEURESBRUT/10000+1/2)
     END ELSE
      W_ASSIETTE=W_ASSIETTEBRUTE-INT(W_DEBTRANCHEVAL*W_HEURESBRUT/10000+1/2)
     END
    END ELSE
     IF W_TAUXHORBIS>=W_DEBTRANCHEVAL THEN
      IF W_HEURESBRUT1#W_HEURESBRUT THEN
       IF W_DEBTRANCHEVAL=0 THEN
        W_ASSIETTE=INT(W_TAUXHORBIS*W_HEURESBRUT/10000+1/2)        
       END ELSE
        W_ASSIETTE=W_ASSIETTEBRUTE-INT(W_DEBTRANCHEVAL*W_DEBTRANCHEHH/10000+1/2)
       END
      END ELSE
       IF W_DEBTRANCHEVAL=0 THEN
        W_ASSIETTE=INT(W_TAUXHORBIS*W_HEURESBRUT/10000+1/2)         
       END ELSE
        W_ASSIETTE=W_ASSIETTEBRUTE-INT(W_DEBTRANCHEVAL*W_HEURESBRUT/10000+1/2)
       END
      END
     END ELSE
      W_ASSIETTE=W_ASSIETTEBRUTE-INT(W_DEBTRANCHEHH*W_TAUXHORBIS/10000+1/2)
      IF W_HEURESBRUT2=0 THEN W_ASSIETTE=0
     END
    END
   END
  END
 CASE RegulRubChg=2 ;* sur l'exercice DADS (en fonction du cumul brut)
  W_CUMULHHDADS=HTravHistCum
  IF W_TYPETRANCHE="VALEUR" THEN
   J=1
   LOOP
    RubChgHistCum=EXTRACT(ENR_HISTORCUMUL,15,J)
    UNTIL RubChgHistCum="" OR RubChgHistCum=CodRubChg DO
     J=J+1
   REPEAT
   IF RubChgHistCum="" THEN
    W_CUMULBRUTDADS=BrutHistCum
   END ELSE
    W_CUMULBRUTDADS=EXTRACT(ENR_HISTORCUMUL,16,J)
   END
   IF W_CUMULBRUTDADS<W_FINTRANCHEVAL THEN
    IF W_CUMULBRUTDADS>W_DEBTRANCHEVAL THEN
     IF W_ASSIETTE+W_CUMULBRUTDADS>W_FINTRANCHEVAL THEN
      W_ASSIETTE=W_FINTRANCHEVAL-W_CUMULBRUTDADS
     END
    END ELSE
     IF W_ASSIETTE+W_CUMULBRUTDADS>W_DEBTRANCHEVAL THEN
      IF W_ASSIETTE+W_CUMULBRUTDADS>W_FINTRANCHEVAL THEN
       W_ASSIETTE=W_FINTRANCHEVAL-W_DEBTRANCHEVAL
      END ELSE    
       W_ASSIETTE=W_ASSIETTE+W_CUMULBRUTDADS-W_DEBTRANCHEVAL
      END
     END ELSE
      W_ASSIETTE=0
     END
    END 
   END ELSE
    W_ASSIETTE=0
   END 
  END
  IF W_TYPETRANCHE="HHSMIC" THEN
   IF W_DEBTRANCHEHH=0 THEN
    IF W_CUMULHHDADS>W_FINTRANCHEHH THEN
     W_HEURESBRUT1=0
    END ELSE 
     IF W_CUMULHHDADS+W_HEURESTRAV>W_FINTRANCHEHH THEN
      W_HEURESBRUT1=W_FINTRANCHEHH-W_CUMULHHDADS
     END ELSE
      W_HEURESBRUT1=W_HEURESTRAV
     END
    END
    IF W_HEURESBRUT1=0 THEN
     IF W_HEURESTRAV#0 THEN W_ASSIETTE=0
    END ELSE
     W_ASSIETTE=INT(W_ASSIETTE*W_HEURESBRUT1/W_HEURESTRAV+1/2)
    END
   END ELSE
    IF W_CUMULHHDADS>=W_DEBTRANCHEHH THEN
     W_HEURESBRUT1=W_HEURESTRAV
    END ELSE
     IF W_CUMULHHDADS+W_HEURESTRAV>=W_DEBTRANCHEHH THEN
      W_HEURESBRUT1=W_CUMULHHDADS+W_HEURESTRAV-W_DEBTRANCHEHH
     END ELSE
      W_HEURESBRUT1=0
     END
    END
    IF W_HEURESBRUT1=0 THEN
     W_ASSIETTE=0
    END ELSE
     W_ASSIETTE=INT(W_ASSIETTE*W_HEURESBRUT1/W_HEURESTRAV+1/2)    
    END
   END
  END
 CASE RegulRubChg=3 ;* rgle des cumuls (UNIQUEMENT POSSIBLE SI W_TYPETRANCHE="PLAFSS")
  IF W_TYPETRANCHE="PLAFSS" THEN
   J=1
   LOOP
    RubChgHistCum=EXTRACT(ENR_HISTORCUMUL,15,J)
    UNTIL RubChgHistCum="" OR RubChgHistCum=CodRubChg DO
     J=J+1
   REPEAT
   IF RubChgHistCum="" THEN
    AssietteBrutHistCum=0
    BaseCotisHistCum=0
   END ELSE
    AssietteBrutHistCum=EXTRACT(ENR_HISTORCUMUL,16,J)
    BaseCotisHistCum=EXTRACT(ENR_HISTORCUMUL,17,J)
   END
   W_PLAFONDSECUAAD=W_FINTRANCHEVAL
   TypTranche=EXTRACT(ENR_TRANCHE,10)
   IF W_DEBTRANCHEVAL=0 THEN
    IF TypTranche="02" AND TypChgRubChg="01" THEN
     M=1
     LOOP
      W_RUBCHGAADURSSAFCUM1=W_RUBCHGAADURSSAFCUM<1,M>
      UNTIL W_RUBCHGAADURSSAFCUM1="" OR W_RUBCHGAADURSSAFCUM1=CodRubChg DO
       M=M+1
     REPEAT
     IF CodRubChg=W_RUBCHGAADURSSAFCUM1 THEN     
      J=1
      LOOP
       RubChgHistCum=EXTRACT(ENR_HISTORCUMUL,15,J)
       UNTIL RubChgHistCum="" DO
        M=1
        LOOP
         W_RUBCHGAADURSSAFCUM2=W_RUBCHGAADURSSAFCUM<1,M>
         UNTIL W_RUBCHGAADURSSAFCUM2="" OR W_RUBCHGAADURSSAFCUM2=RubChgHistCum DO
          M=M+1
        REPEAT
        IF W_RUBCHGAADURSSAFCUM2=RubChgHistCum AND W_RUBCHGAADURSSAFCUM1#W_RUBCHGAADURSSAFCUM2 THEN
         BaseCotisHistCum=BaseCotisHistCum+EXTRACT(ENR_HISTORCUMUL,17,J)
         IF AssietteBrutHistCum=0 THEN AssietteBrutHistCum=EXTRACT(ENR_HISTORCUMUL,16,J)     
        END
        J=J+1
      REPEAT
     END
    END
    IF AssietteBrutHistCum+W_ASSIETTEBRUTE>PlafondHistCum+W_FINTRANCHEVAL THEN
     W_ASSIETTE=PlafondHistCum+W_FINTRANCHEVAL-BaseCotisHistCum
    END ELSE
     W_ASSIETTE=AssietteBrutHistCum+W_ASSIETTEBRUTE-BaseCotisHistCum
    END
   END ELSE
    IF W_ASSIETTEBRUTE+AssietteBrutHistCum>W_DEBTRANCHEVAL+PlafondHistCum THEN
     IF W_ASSIETTEBRUTE<0 THEN
      W_ASSIETTE=W_ASSIETTEBRUTE+AssietteBrutHistCum-PlafondHistCum-BaseCotisHistCum
     END ELSE
      W_ASSIETTE=W_ASSIETTEBRUTE+AssietteBrutHistCum-W_DEBTRANCHEVAL-PlafondHistCum-BaseCotisHistCum
     END
    END ELSE 
     IF W_DEBTRANCHEVAL+PlafondHistCum-W_ASSIETTEBRUTE+AssietteBrutHistCum>BaseCotisHistCum THEN
      W_ASSIETTE=-BaseCotisHistCum
     END ELSE
      W_ASSIETTE=W_DEBTRANCHEVAL+PlafondHistCum-W_ASSIETTEBRUTE+AssietteBrutHistCum
     END
    END
   END
  END
  IF W_TYPETRANCHE="HHSMIC" THEN
   W_HEURESBRUT=W_HEURESBRUT+W_HEURESMALADIE35H
   IF W_HEURESBRUT#0 THEN
    W_TAUXHORBIS=INT(W_ASSIETTEBRUTE*10000/W_HEURESBRUT+1/2)
   END ELSE
    W_TAUXHORBIS=W_TAUXHOR
    W_HEURESBRUT=INT(W_ASSIETTEBRUTE*10000/W_TAUXHORBIS+1/2)
   END
   TypTranche=EXTRACT(ENR_TRANCHE,10)
   IF TypTranche="02" AND TypChgRubChg="01" THEN
    IF W_HEURESBRUT#0 AND W_TAUXHORBIS#0 THEN W_HEURESBRUT=W_HEURESBRUT-INT(W_CUMULURSSAFPLAF*10000/W_TAUXHORBIS+1/2)
    W_ASSIETTEBRUTE=W_ASSIETTEBRUTE-W_CUMULURSSAFPLAF
   END
   W_HEURESBRUT1=W_HEURESBRUT
   W_HEURESBRUT2=W_HEURESBRUT
   IF W_HEURESBRUT>W_FINTRANCHEHH THEN
    W_HEURESBRUT=W_FINTRANCHEHH-W_DEBTRANCHEHH
   END ELSE
    IF W_DEBTRANCHEHH>0 THEN
     IF W_HEURESBRUT>W_DEBTRANCHEHH THEN 
      W_HEURESBRUT=W_HEURESBRUT-W_DEBTRANCHEHH
     END ELSE
      W_HEURESBRUT2=0
     END
    END
   END
   IF W_TAUXHORBIS>W_FINTRANCHEVAL THEN
    IF W_DEBTRANCHEVAL=0 THEN
     W_ASSIETTE=INT(W_FINTRANCHEVAL*W_HEURESBRUT/10000+1/2)-INT(W_DEBTRANCHEVAL*W_HEURESBRUT/10000+1/2)
    END ELSE
     W_ASSIETTE=W_ASSIETTEBRUTE-INT(W_DEBTRANCHEVAL*W_HEURESBRUT/10000+1/2)
    END
   END ELSE
    IF W_TAUXHORBIS>=W_DEBTRANCHEVAL THEN
     IF W_HEURESBRUT1#W_HEURESBRUT THEN
      IF W_DEBTRANCHEVAL=0 THEN
       W_ASSIETTE=INT(W_TAUXHORBIS*W_HEURESBRUT/10000+1/2)        
      END ELSE
       W_ASSIETTE=W_ASSIETTEBRUTE-INT(W_DEBTRANCHEVAL*W_DEBTRANCHEHH/10000+1/2)
       IF FonctionContrat="A" AND RubAADRubChg=1 AND ExoAADRubChg=0 AND W_POURCENTNONEXOADM#0 THEN
        W_ASSIETTE=W_ASSIETTEBRUTE-W_CUMULURSSAFACT
       END
      END
     END ELSE
      IF W_DEBTRANCHEVAL=0 THEN
       W_ASSIETTE=INT(W_TAUXHORBIS*W_HEURESBRUT/10000+1/2)         
      END ELSE
       W_ASSIETTE=W_ASSIETTEBRUTE
      END
     END
    END ELSE
*     W_ASSIETTE=W_ASSIETTEBRUTE-INT(W_DEBTRANCHEHH*W_TAUXHORBIS/10000+1/2)
*     IF W_HEURESBRUT2=0 THEN W_ASSIETTE=0
     W_ASSIETTE=INT(W_HEURESBRUT*W_TAUXHORBIS/10000+1/2)
    END
   END
   J=1
   LOOP
    RubChgHistCum=EXTRACT(ENR_HISTORCUMUL,15,J)
    UNTIL RubChgHistCum="" OR RubChgHistCum=CodRubChg DO
     J=J+1
   REPEAT
   IF RubChgHistCum="" THEN
    AssietteBrutHistCum=0
    BaseCotisHistCum=0
   END ELSE
    AssietteBrutHistCum=EXTRACT(ENR_HISTORCUMUL,16,J)
    BaseCotisHistCum=EXTRACT(ENR_HISTORCUMUL,17,J)
   END
   W_ASSIETTEBRUTE=W_ASSIETTE
   W_DEBTRANCHEVAL=0
   W_JOURS=30
   IF DatDebContrat>W_PERIODEPAIEDEB THEN
    IF DatFinContrat#"" THEN
     IF DatFinContrat>W_PERIODEPAIEFIN THEN
      W_JOURS=W_PERIODEPAIEFIN-DatDebContrat+1
     END ELSE
      W_JOURS=DatFinContrat-DatDebContrat+1
     END
    END ELSE
     W_JOURS=W_PERIODEPAIEFIN-DatDebContrat+1
    END
   END ELSE
    IF DatFinContrat#"" THEN
     IF DatFinContrat<W_PERIODEPAIEFIN THEN
      W_JOURS=DatFinContrat-W_PERIODEPAIEDEB+1
     END
    END
   END
   IF W_JOURS>30 THEN W_JOURS=30
   IF ConvColContrat="02" THEN W_JOURS=30
   W_PLAFONDSECU1=INT(W_PLAFONDSECU*W_JOURS/30+1/2)
   W_FINTRANCHEVAL=W_PLAFONDSECU1
   W_PLAFONDSECUAAD=W_FINTRANCHEVAL
   IF W_DEBTRANCHEVAL=0 THEN
    IF TypTranche="02" AND TypChgRubChg="01" THEN
     M=1
     LOOP
      W_RUBCHGAADURSSAFCUM1=W_RUBCHGAADURSSAFCUM<1,M>
      UNTIL W_RUBCHGAADURSSAFCUM1="" OR W_RUBCHGAADURSSAFCUM1=CodRubChg DO
       M=M+1
     REPEAT
     IF CodRubChg=W_RUBCHGAADURSSAFCUM1 THEN     
      J=1
      LOOP
       RubChgHistCum=EXTRACT(ENR_HISTORCUMUL,15,J)
       UNTIL RubChgHistCum="" DO
        M=1
        LOOP
         W_RUBCHGAADURSSAFCUM2=W_RUBCHGAADURSSAFCUM<1,M>
         UNTIL W_RUBCHGAADURSSAFCUM2="" OR W_RUBCHGAADURSSAFCUM2=RubChgHistCum DO
          M=M+1
        REPEAT
        IF W_RUBCHGAADURSSAFCUM2=RubChgHistCum AND W_RUBCHGAADURSSAFCUM1#W_RUBCHGAADURSSAFCUM2 THEN
         BaseCotisHistCum=BaseCotisHistCum+EXTRACT(ENR_HISTORCUMUL,17,J)
         IF AssietteBrutHistCum=0 THEN AssietteBrutHistCum=EXTRACT(ENR_HISTORCUMUL,16,J)     
        END
        J=J+1
      REPEAT
     END
    END
    IF AssietteBrutHistCum+W_ASSIETTEBRUTE+W_CUMULURSSAFPLAF>PlafondHistCum+W_FINTRANCHEVAL THEN
     W_ASSIETTE=PlafondHistCum+W_FINTRANCHEVAL-BaseCotisHistCum-W_CUMULURSSAFPLAF
    END ELSE
     W_ASSIETTE=AssietteBrutHistCum+W_ASSIETTEBRUTE-BaseCotisHistCum
     IF W_DEBTRANCHEVAL=0 AND W_ASSIETTE>W_ASSIETTEBRUTE AND RubAADRubChg=0 THEN W_ASSIETTE=W_ASSIETTEBRUTE
    END
   END
  END
END CASE
RETURN
**********
* TRAITEMENT DU PERSONNEL DE TYPE "ADMINISTRATION"
**********
500 IF W_CLE MATCH "8N" THEN W_CLE=W_CLE:W_PERIODEPAIE
READ ENR_DETAILADMIN FROM F.DETAILADMIN,W_CLE ELSE ENR_DETAILADMIN=""
IF W_BUDGET=1 THEN ENR_DETAILADMIN=""
DELETE F.ANOMALIEPAIE,W_CLE
W_HEURESTRAV=0
W_HEURESTRAVEXO=0
W_HEURESABS=0
W_JRSCONGESPRIS=0
W_JRSANCPRIS=0
W_HEURESPRIMEDIFF=0
W_MONTCPMOIS=0
W_MONTDEPARTRETRAITE=0
W_HEURESREGULMODUL=0
W_HEURESORANGE=0
IF W_TYPETRAIT="T" OR W_TYPETRAIT="TA" THEN
 CodAidantContrat=W_CLE[1,8]
 GOSUB 1000 ;*lecture CONTRAT
 IF W_TYPEPERSO="A" THEN
  IF W_ACTIVITECOUV="NON" THEN RETURN
 END
END
CodeConvCol=ConvColContrat
GOSUB 1100
GOSUB 2000 ;*determination taux horaire
IF W_TYPETRAIT#"R" THEN
 ENR_DETAILCALCUL=""
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20;"0")
 W_BASELISSAGE=0
 W_FINDETAIL="NON"
 I=1
 LOOP
  RubSaisieA=EXTRACT(ENR_DETAILADMIN,1,I)
  InfoSalA=ENR_DETAILADMIN<5,I> 
  IF RubSaisieA="" THEN W_FINDETAIL="OUI"
  UNTIL W_FINDETAIL="OUI" DO
   CodRubSai=RubSaisieA
   GOSUB 1200 ;*lecture RUBSAISIE
   IF CodRubSai="815" AND InfoSalA="NON" THEN W_HEURESABS=W_HEURESABS+ENR_DETAILADMIN<2,I>
   IF CodRubSai="838" AND InfoSalA="NON" THEN W_HEURESABS=W_HEURESABS+ENR_DETAILADMIN<2,I>
   IF CodRubSai="802" OR CodRubSai="817" THEN
    W_JRSCONGESPRIS=W_JRSCONGESPRIS+ENR_DETAILADMIN<6,I>
    IF InfoSalA="OUI" THEN W_HEURESORANGE=W_HEURESORANGE+ENR_DETAILADMIN<2,I>
   END
   IF CodRubSai="803" THEN
    W_JRSANCPRIS=W_JRSANCPRIS+ENR_DETAILADMIN<6,I>
    IF InfoSalA="OUI" THEN W_HEURESORANGE=W_HEURESORANGE+ENR_DETAILADMIN<2,I>
   END
   IF CodRubSai="818" OR CodRubSai="819" OR CodRubSai="804" THEN
    IF InfoSalA="OUI" THEN W_HEURESORANGE=W_HEURESORANGE+ENR_DETAILADMIN<2,I>
   END
   IF CodRubSai="801" THEN
    IF W_PERIODEPAIE>=DatMontEnEuro THEN
     IF ENR_DETAILADMIN<4,I>>305000 THEN W_MONTDEPARTRETRAITE=305000 ELSE W_MONTDEPARTRETRAITE=ENR_DETAILADMIN<4,I>
    END ELSE
     IF ENR_DETAILADMIN<4,I>>2000000 THEN W_MONTDEPARTRETRAITE=2000000 ELSE W_MONTDEPARTRETRAITE=ENR_DETAILADMIN<4,I>
    END
   END
   W_BASERUBSAI=""
   W_TAUXHORRUBSAI=""
   W_MONTRUBSAI=0
   BEGIN CASE
    CASE TypBaseRubSai=0 ;*  saisir
     W_BASERUBSAI=ENR_DETAILADMIN<2,I>
    CASE TypBaseRubSai=1 ;* fixe
     W_BASERUBSAI=MontBaseRubSai   
   END CASE
   BEGIN CASE
    CASE TypTauxRubSai=0 ;*  saisir
     W_TAUXHORRUBSAI=ENR_DETAILADMIN<3,I>
     W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
    CASE TypTauxRubSai=1 ;* fixe
     W_TAUXHORRUBSAI=MontTauxRubSai
     W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
     CASE TypTauxRubSai=2 ;* taux horaire
     W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
     W_TAUXHORRUBSAI=W_TAUXHORRUBSAI*10
     W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
   END CASE
   BEGIN CASE
    CASE TypMontRubSai=0 ;*  saisir
     W_MONTRUBSAI=ENR_DETAILADMIN<4,I>
    CASE TypMontRubSai=1 ;* fixe
     W_MONTRUBSAI=ValMontRubSai
    CASE 1
     W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
   END CASE
   W_TAUXHORRUBSAI=INT(W_TAUXHORRUBSAI/10)*10
   IF SigneRubSai="-" THEN
    IF W_BASERUBSAI#"" THEN W_BASERUBSAI=-W_BASERUBSAI
    W_MONTRUBSAI=-W_MONTRUBSAI
   END
   IF CodRubSai="802" OR CodRubSai="817" OR CodRubSai="803" OR CodRubSai="821" THEN W_MONTCPMOIS=W_MONTCPMOIS+W_MONTRUBSAI
   BEGIN CASE
    CASE ChpAppliRubSai="0" ;* avantage en nature
     IF InfoSalA="NON" THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;RubSaisieA)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;RubSaisieA)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;-W_MONTRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
     END ELSE
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,33,-1;RubSaisieA)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,34,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,35,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,36,-1;W_MONTRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,37,-1;RubSaisieA)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,38,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,39,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,40,-1;-W_MONTRUBSAI)
     END
    CASE ChpAppliRubSai="1" OR ChpAppliRubSai="2" ;* aprs net imposable OU frais professionnels
     IF InfoSalA="NON" THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;RubSaisieA)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;W_MONTRUBSAI)
     END ELSE
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,37,-1;RubSaisieA)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,38,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,39,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,40,-1;W_MONTRUBSAI)
     END
    CASE ChpAppliRubSai="3" OR ChpAppliRubSai="4" ;* M.O.D. OU M.O.D. dim. et jours fris
     IF InfoSalA="NON" THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;RubSaisieA)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,24,-1;RubSaisieA)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,25,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,26,-1;"")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,27,-1;W_MONTRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAI+ENR_DETAILCALCUL<6>)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
      IF W_TAUXHOR=W_TAUXHORRUBSAI THEN
       W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
      END ELSE
       W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
      END
      IF HorsLissageRubSai=0 THEN
       W_BASELISSAGE=W_BASELISSAGE+W_BASERUBSAI
      END
      W_HEURESTRAV=W_HEURESTRAV+W_BASERUBSAI
     END ELSE
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,33,-1;RubSaisieA)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,34,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,35,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,36,-1;W_MONTRUBSAI)
     END
    CASE ChpAppliRubSai="5" ;* inclus dans brut base et montant
     IF InfoSalA="NON" THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;RubSaisieA)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAI+ENR_DETAILCALCUL<6>)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
      IF W_TAUXHOR=W_TAUXHORRUBSAI THEN
       W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
      END ELSE
       W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
      END
      IF HorsLissageRubSai=0 THEN
       W_BASELISSAGE=W_BASELISSAGE+W_BASERUBSAI
      END
     END ELSE
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,33,-1;RubSaisieA)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,34,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,35,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,36,-1;W_MONTRUBSAI)
     END
    CASE ChpAppliRubSai="6" ;* inclus dans brut montant
     IF InfoSalA="NON" THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;RubSaisieA)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
      IF TypTauxRubSai=2 THEN
       IF W_TAUXHOR=W_TAUXHORRUBSAI THEN
        W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
       END ELSE
        W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
       END
      END
     END ELSE
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,33,-1;RubSaisieA)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,34,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,35,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,36,-1;W_MONTRUBSAI)
     END
   END CASE
   I=I+1
 REPEAT
END ELSE
 READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CLE ELSE ENR_DETAILCALCUL=""
END
IF W_BUDGET=1 THEN GOSUB 2900
GOSUB 300
GOSUB 350
IF PerPaieCoursContrat="" THEN GOSUB 1800
GOSUB 1900
RETURN
**********
* TRAITEMENT DES INFORMATIONS MANDATAIRES (FICHIER DETAILMANDAT)
**********
600 IF W_CLE MATCH "8N" THEN W_CLE=W_CLE:W_PERIODEPAIE
ENR_DETAILCALCUL=""
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2;"0")
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3;"0")
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4;"0")
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5;"0")
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17;"0")
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18;"0")
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19;"0")
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20;"0")
DELETE F.ANOMALIEPAIE,W_CLE
W_BASELISSAGE=0
W_HEURESTRAV=0
W_HEURESTRAVEXO=0
W_HEURESABS=0
W_JRSCONGESPRIS=0
W_JRSANCPRIS=0
W_HEURESPRIMEDIFF=0
W_MONTCPMOIS=0
W_MONTDEPARTRETRAITE=0
W_HEURESREGULMODUL=0
W_HEURESORANGE=0
READ ENR_DETAILMANDAT FROM F.DETAILMANDAT,W_CLE ELSE ENR_DETAILMANDAT=""
IF W_TYPETRAIT="T" OR W_TYPETRAIT="TA" THEN
 CodAidantContrat=W_CLE[1,8]
 GOSUB 1000 ;*lecture CONTRAT
END
GOSUB 2000 ;*determination taux horaire
IF W_TYPETRAIT="R" THEN
 READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CLE ELSE ENR_DETAILCALCUL=""
 GOSUB 300
 GOSUB 350
 GOSUB 1900
 RETURN
END  
W_FINDETAIL="NON"
I=1
LOOP
 RubSaisieM=EXTRACT(ENR_DETAILMANDAT,1,I)
 IF RubSaisieM="" THEN W_FINDETAIL="OUI"
 UNTIL W_FINDETAIL="OUI" DO
  CodRubSai=RubSaisieM
  GOSUB 1200 ;*lecture RUBSAISIE
  IF CodRubSai="815" OR CodRubSai="838" THEN W_HEURESABS=W_HEURESABS+ENR_DETAILMANDAT<2,I>
  IF CodRubSai="802" OR CodRubSai="817" THEN 
   W_JRSCONGESPRIS=W_JRSCONGESPRIS+ENR_DETAILMANDAT<6,I>
   W_HEURESORANGE=W_HEURESORANGE+ENR_DETAILMANDAT<2,I>
  END
  IF CodRubSai="803" THEN
   W_JRSANCPRIS=W_JRSANCPRIS+ENR_DETAILMANDAT<6,I>
   W_HEURESORANGE=W_HEURESORANGE+ENR_DETAILMANDAT<2,I>
  END
  IF CodRubSai="804" OR CodRubSai="818" OR CodRubSai="819" THEN W_HEURESORANGE=W_HEURESORANGE+ENR_DETAILMANDAT<2,I>
  IF CodRubSai="801" THEN
   IF W_PERIODEPAIE>=DatMontEnEuro THEN
    IF ENR_DETAILMANDAT<4,I>>305000 THEN W_MONTDEPARTRETRAITE=305000 ELSE W_MONTDEPARTRETRAITE=ENR_DETAILMANDAT<4,I>
   END ELSE
    IF ENR_DETAILMANDAT<4,I>>2000000 THEN W_MONTDEPARTRETRAITE=2000000 ELSE W_MONTDEPARTRETRAITE=ENR_DETAILMANDAT<4,I>
   END
  END
  W_BASERUBSAI=""
  W_TAUXHORRUBSAI=""
  W_MONTRUBSAI=0
  BEGIN CASE
   CASE TypBaseRubSai=0 ;*  saisir
    W_BASERUBSAI=ENR_DETAILMANDAT<2,I>   
   CASE TypBaseRubSai=1 ;* fixe
    W_BASERUBSAI=MontBaseRubSai   
  END CASE
  BEGIN CASE
   CASE TypTauxRubSai=0 ;*  saisir
    W_TAUXHORRUBSAI=ENR_DETAILMANDAT<3,I>
    W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
   CASE TypTauxRubSai=1 ;* fixe
    W_TAUXHORRUBSAI=MontTauxRubSai
    W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
   CASE TypTauxRubSai=2 ;* taux horaire
    W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
    W_TAUXHORRUBSAI=W_TAUXHORRUBSAI*10
    W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
  END CASE
  BEGIN CASE
   CASE TypMontRubSai=0 ;*  saisir
    W_MONTRUBSAI=ENR_DETAILMANDAT<4,I>
   CASE TypMontRubSai=1 ;* fixe
    W_MONTRUBSAI=ValMontRubSai
   CASE 1
    W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
  END CASE
  W_TAUXHORRUBSAI=INT(W_TAUXHORRUBSAI/10)*10
  IF SigneRubSai="-" THEN
   IF W_BASERUBSAI#"" THEN W_BASERUBSAI=-W_BASERUBSAI
   W_MONTRUBSAI=-W_MONTRUBSAI
  END
  IF CodRubSai="802" OR CodRubSai="817" OR CodRubSai="803" OR CodRubSai="821" THEN W_MONTCPMOIS=W_MONTCPMOIS+W_MONTRUBSAI
  BEGIN CASE
   CASE ChpAppliRubSai="0" ;* avantage en nature
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;RubSaisieM)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;RubSaisieM)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;W_BASERUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;W_TAUXHORRUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;-W_MONTRUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
   CASE ChpAppliRubSai="1" OR ChpAppliRubSai="2" ;* aprs net imposable OU frais professionnels
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;RubSaisieM)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;W_BASERUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;W_TAUXHORRUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;W_MONTRUBSAI)
   CASE ChpAppliRubSai="3" OR ChpAppliRubSai="4" ;* M.O.D. OU M.O.D. dim. et jours fris
    W_RUBTROUVE="NON"
    K=1
    LOOP
     RubSaisieCal=EXTRACT(ENR_DETAILCALCUL,2,K)
     UNTIL RubSaisieCal="" OR W_RUBTROUVE="OUI" DO
      IF RubSaisieCal=RubSaisieM THEN
       ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,K;W_BASERUBSAI+ENR_DETAILCALCUL<3,K>)
       ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,K;W_MONTRUBSAI+ENR_DETAILCALCUL<5,K>)       
       W_RUBTROUVE="OUI"
      END ELSE
       K=K+1 
      END
    REPEAT
    IF W_RUBTROUVE="NON" THEN
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;RubSaisieM)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
    END
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,24,-1;RubSaisieM)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,25,-1;W_BASERUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,26,-1;ENR_DETAILMANDAT<5,I>)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,27,-1;W_MONTRUBSAI)
    IF TypTauxRubSai="2" AND MontTauxRubSai<1000000 THEN
     W_BASERUBSAIBIS=INT(W_BASERUBSAI*MontTauxRubSai/1000000+1/2)     
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAIBIS+ENR_DETAILCALCUL<6>)
    END ELSE
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAI+ENR_DETAILCALCUL<6>)
    END
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
    IF W_TAUXHOR=W_TAUXHORRUBSAI THEN
     W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
    END ELSE
     W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
    END
    IF HorsLissageRubSai=0 THEN
     W_BASELISSAGE=W_BASELISSAGE+W_BASERUBSAI
    END
    W_HEURESTRAV=W_HEURESTRAV+W_BASERUBSAI
   CASE ChpAppliRubSai="5" ;* inclus dans brut base et montant
    IF RubSaisieM="802" OR RubSaisieM="803" OR RubSaisieM="817" THEN
     IF W_BASERUBSAI=0 AND ConvColContrat="02" THEN
      NULL
     END ELSE
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;RubSaisieM)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAI+ENR_DETAILCALCUL<6>)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
      IF W_TAUXHOR=W_TAUXHORRUBSAI THEN
       W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
      END ELSE
       W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
      END
      IF HorsLissageRubSai=0 THEN
       W_BASELISSAGE=W_BASELISSAGE+W_BASERUBSAI
      END
     END
    END ELSE
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;RubSaisieM)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
     IF TypTauxRubSai="2" AND MontTauxRubSai<1000000 THEN
      W_BASERUBSAIBIS=INT(W_BASERUBSAI*MontTauxRubSai/1000000+1/2)     
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAIBIS+ENR_DETAILCALCUL<6>)
     END ELSE
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAI+ENR_DETAILCALCUL<6>)
     END
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
     IF W_TAUXHOR=W_TAUXHORRUBSAI THEN
      W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
     END ELSE
      W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
     END
     IF HorsLissageRubSai=0 THEN
      W_BASELISSAGE=W_BASELISSAGE+W_BASERUBSAI
     END
    END
   CASE ChpAppliRubSai="6" ;* inclus dans brut montant
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;RubSaisieM)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
    IF TypTauxRubSai=2 THEN
     IF W_TAUXHOR=W_TAUXHORRUBSAI THEN
      W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
     END ELSE
      W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
     END
    END
  END CASE
  I=I+1
REPEAT
GOSUB 300
GOSUB 350
GOSUB 1900
RETURN
**********
* TRAITEMENT DES INFORMATIONS PRESTATAIRES (FICHIER DETAILPREST)
**********
700 IF W_CLE MATCH "8N" THEN W_CLE=W_CLE:W_PERIODEPAIE
ENR_DETAILCALCUL=""
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2;"0")
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3;"0")
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4;"0")
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5;"0")
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17;"0")
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18;"0")
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19;"0")
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20;"0")
W_BASELISSAGE=0
W_HEURESTRAV=0
W_HEURESTRAVEXO=0
W_POURCENTEXO=0
W_POURCENTNONEXO=0
W_HEURESABS=0
W_JRSCONGESPRIS=0
W_JRSANCPRIS=0
W_HEURESPRIMEDIFF=0
W_MONTCPMOIS=0
W_MONTDEPARTRETRAITE=0
W_HEURESREGULMODUL=0
W_HEURESORANGE=0
IF W_TYPETRAIT="T" OR W_TYPETRAIT="TA" THEN
 CodAidantContrat=W_CLE[1,8]
 GOSUB 1000 ;*lecture CONTRAT
END
IF ConvColContrat#W_CODECONVCOL THEN
 CodeConvCol=ConvColContrat
 W_CODECONVCOL=ConvColContrat
 GOSUB 1100 ;* lecture CONVENTIONCOL
END
GOSUB 2000 ;*determination taux horaire
DELETE F.ANOMALIEPAIE,W_CLE
IF W_TYPETRAIT="R" THEN
 READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CLE ELSE ENR_DETAILCALCUL=""
 W_HEURESTRAV=ENR_DETAILCALCUL<41>
 W_HEURESTRAVEXO=ENR_DETAILCALCUL<42>
 IF W_HEURESTRAV=0 THEN
  W_POURCENTEXO=0
  W_POURCENTNONEXO="10000"
 END ELSE
  W_POURCENTEXO=INT(W_HEURESTRAVEXO*10000/W_HEURESTRAV+1/2)
  W_POURCENTNONEXO=10000-W_POURCENTEXO
 END
 GOSUB 300
 GOSUB 350
 GOSUB 1900
 RETURN
END  
READ ENR_DETAILPREST FROM F.DETAILPREST,W_CLE ELSE ENR_DETAILPREST=""
IF W_BUDGET=1 THEN ENR_DETAILPREST=""
* MAIN D'OEUVRE DIRECTE
W_FINDETAIL="NON"
I=1
LOOP
 CodAideModP=EXTRACT(ENR_DETAILPREST,1,I)
 IF CodAideModP="" THEN W_FINDETAIL="OUI"
 UNTIL W_FINDETAIL="OUI" DO
  READ ENR_ACTIVITESAIDE FROM F.ACTIVITESAIDE,CodAideModP ELSE ENR_ACTIVITESAIDE=""
  ExoPrestActiviteAide=EXTRACT(ENR_ACTIVITESAIDE,5)
  RubSaisieModP=EXTRACT(ENR_DETAILPREST,2,I)
  IF RubSaisieModP="" THEN
   J=1
   W_FINDETAILJOUR="NON"
   LOOP
    W_MONTRUBSAIAVANT=0
    RubSaisieDetModP=EXTRACT(ENR_DETAILPREST,11,I,J)
    IF RubSaisieDetModP="" THEN W_FINDETAILJOUR="OUI"
    UNTIL W_FINDETAILJOUR="OUI" DO
     CodRubSai=RubSaisieDetModP
     GOSUB 1200 ;*lecture RUBSAISIE
     W_BASERUBSAI=ENR_DETAILPREST<12,I,J>
     IF W_BASERUBSAI#"" THEN
      IF SigneRubSai="-" THEN W_BASERUBSAI=-W_BASERUBSAI
     END
     W_HEURESTRAV=W_HEURESTRAV+W_BASERUBSAI
     IF ExoPrestActiviteAide=1 THEN W_HEURESTRAVEXO=W_HEURESTRAVEXO+W_BASERUBSAI
     W_RUBTROUVE="NON"
     K=1
     LOOP
      RubSaisieCal=EXTRACT(ENR_DETAILCALCUL,2,K)
      UNTIL RubSaisieCal="" OR W_RUBTROUVE="OUI" DO
       IF RubSaisieCal=RubSaisieDetModP THEN
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,K;W_BASERUBSAI+ENR_DETAILCALCUL<3,K>)
        W_TAUXHORRUBSAI=ENR_DETAILCALCUL<4,K>
        W_MONTRUBSAIAVANT=ENR_DETAILCALCUL<5,K>
        W_MONTRUBSAI=INT(ENR_DETAILCALCUL<3,K>*W_TAUXHORRUBSAI/10000+1/2)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,K;W_MONTRUBSAI)
        W_RUBTROUVE="OUI"
       END ELSE
        K=K+1 
       END
     REPEAT
     IF W_RUBTROUVE="NON" THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;RubSaisieDetModP)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
      IF ChpAppliRubSai="4" THEN
       IF W_TAUXHORDIMJF=0 THEN
        W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
        W_TAUXHORRUBSAI=W_TAUXHORRUBSAI*10
       END ELSE
        IF TypTauxRubSai=2 THEN

* - si rubrique 836, alors meilleur taux horaire entre 125% du taux horaire
* et taux horaire major de 25% du taux horaire mdian
* - si CCN 01 (Aide a Domicile) et # 125% du taux horaire alors W_TAUXHOR
          
	 IF CodRubSai="836" THEN
          W_TAUXHORRUBSAI=INT(W_TAUXHORDIMJF*MontTauxRubSai/10000000+1/2)-W_TAUXHORDIMJF/10
          W_TAUXHORRUBSAI=W_TAUXHOR+W_TAUXHORRUBSAI*10
          W_TAUXHORRUBSAI1=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
          W_TAUXHORRUBSAI1=W_TAUXHORRUBSAI1*10
          IF W_TAUXHORRUBSAI1>W_TAUXHORRUBSAI THEN W_TAUXHORRUBSAI=W_TAUXHORRUBSAI1
         END ELSE
          W_TAUXHORDIMJFBIS=W_TAUXHORDIMJF
          IF ConvColContrat="06" THEN W_TAUXHORDIMJF=W_TAUXHOR
          IF ConvColContrat="01" AND MontTauxRubSai#"1250000" THEN
           W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
           W_TAUXHORRUBSAI=W_TAUXHORRUBSAI*10
          END ELSE
           W_TAUXHORRUBSAI=INT(W_TAUXHORDIMJF*MontTauxRubSai/10000000+1/2)-W_TAUXHORDIMJF/10
           W_TAUXHORRUBSAI=W_TAUXHOR+W_TAUXHORRUBSAI*10
          END
          W_TAUXHORDIMJF=W_TAUXHORDIMJFBIS
         END
        END ELSE
         W_TAUXHORRUBSAI=W_TAUXHORDIMJF
         IF ConvColContrat="06" THEN W_TAUXHORRUBSAI=W_TAUXHOR
        END
       END
      END ELSE
       IF TypTauxRubSai=1 THEN
        W_TAUXHORRUBSAI=INT(MontTauxRubSai/10+1/2)
       END ELSE
        W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
       END
       W_TAUXHORRUBSAI=W_TAUXHORRUBSAI*10
      END
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
      W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
     END
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;ENR_DETAILCALCUL<6>+W_BASERUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;ENR_DETAILCALCUL<7>+W_MONTRUBSAI-W_MONTRUBSAIAVANT)
     IF W_TAUXHOR=W_TAUXHORRUBSAI THEN
      W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
     END ELSE
      IF ChpAppliRubSai="4" THEN
       IF ConvColContrat="01" THEN
	IF MontTauxRubSai#"1250000" THEN
         W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_BASERUBSAI*MontTauxRubSai/1000000+1/2)
	END ELSE
         W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
	END
       END ELSE
         W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_BASERUBSAI*MontTauxRubSai/1000000+1/2)
       END
      END ELSE
       W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
      END
     END
     L=1
     W_TROUVEHHCAL="NON"
     LOOP
      RubSaisieHHCal=EXTRACT(ENR_DETAILCALCUL,24,L)
      ActSaisieHHCal=EXTRACT(ENR_DETAILCALCUL,26,L)
      IF RubSaisieHHCal=RubSaisieDetModP AND ActSaisieHHCal=ENR_DETAILPREST<13,I,J> THEN W_TROUVEHHCAL="OUI"
      UNTIL RubSaisieHHCal="" OR W_TROUVEHHCAL="OUI" DO
       L=L+1
     REPEAT
     IF W_TROUVEHHCAL="OUI" THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,25,L;W_BASERUBSAI+ENR_DETAILCALCUL<25,L>)
      W_MONTRUBSAIHHCAL=INT(ENR_DETAILCALCUL<25,L>*W_TAUXHORRUBSAI/10000+1/2)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,27,L;W_MONTRUBSAIHHCAL)
     END ELSE
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,24,-1;RubSaisieDetModP)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,25,-1;W_BASERUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,26,-1;ENR_DETAILPREST<13,I,J>)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,27,-1;W_MONTRUBSAI)
     END
     IF HorsLissageRubSai=0 THEN
      W_BASELISSAGE=W_BASELISSAGE+W_BASERUBSAI
     END
     J=J+1
   REPEAT
  END ELSE
   CodRubSai=RubSaisieModP
   GOSUB 1200 ;*lecture RUBSAISIE
   W_RUBTROUVE="NON"
   W_BASERUBSAI=ENR_DETAILPREST<3,I>
   IF W_BASERUBSAI#"" THEN
    IF SigneRubSai="-" THEN W_BASERUBSAI=-W_BASERUBSAI
   END
   W_HEURESTRAV=W_HEURESTRAV+W_BASERUBSAI
   IF ExoPrestActiviteAide=1 THEN W_HEURESTRAVEXO=W_HEURESTRAVEXO+W_BASERUBSAI
   K=1
   LOOP
    RubSaisieCal=EXTRACT(ENR_DETAILCALCUL,2,K)
    UNTIL RubSaisieCal="" OR W_RUBTROUVE="OUI" DO
     IF RubSaisieCal=RubSaisieModP THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,K;W_BASERUBSAI+ENR_DETAILCALCUL<3,K>)
      W_TAUXHORRUBSAI=ENR_DETAILCALCUL<4,K>
      W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,K;W_MONTRUBSAI+ENR_DETAILCALCUL<5,K>)
      W_RUBTROUVE="OUI"
     END ELSE
      K=K+1 
     END
   REPEAT
   IF W_RUBTROUVE="NON" THEN
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;RubSaisieModP)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
    IF ChpAppliRubSai="4" THEN
     IF TypTauxRubSai=2 THEN

* - si rubrique 836, alors meilleur taux horaire entre 125% du taux horaire
* et taux horaire major de 25% du taux horaire mdian
* - si CCN 01 (Aide a Domicile) et # 125% du taux horaire alors W_TAUXHOR
          
      IF CodRubSai="836" THEN
       W_TAUXHORRUBSAI=INT(W_TAUXHORDIMJF*MontTauxRubSai/10000000+1/2)-W_TAUXHORDIMJF/10
       W_TAUXHORRUBSAI=W_TAUXHOR+W_TAUXHORRUBSAI*10
       W_TAUXHORRUBSAI1=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
       W_TAUXHORRUBSAI1=W_TAUXHORRUBSAI1*10
       IF W_TAUXHORRUBSAI1>W_TAUXHORRUBSAI THEN W_TAUXHORRUBSAI=W_TAUXHORRUBSAI1
      END ELSE
       W_TAUXHORDIMJFBIS=W_TAUXHORDIMJF
       IF ConvColContrat="06" THEN W_TAUXHORDIMJF=W_TAUXHOR
       IF ConvColContrat="01" AND MontTauxRubSai#"1250000" THEN
        W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
        W_TAUXHORRUBSAI=W_TAUXHORRUBSAI*10
       END ELSE
        W_TAUXHORRUBSAI=INT(W_TAUXHORDIMJF*MontTauxRubSai/10000000+1/2)-W_TAUXHORDIMJF/10
        W_TAUXHORRUBSAI=W_TAUXHOR+W_TAUXHORRUBSAI*10
       END
       W_TAUXHORDIMJF=W_TAUXHORDIMJFBIS
      END
     END ELSE
      W_TAUXHORRUBSAI=W_TAUXHORDIMJF
      IF ConvColContrat="06" THEN W_TAUXHORRUBSAI=W_TAUXHOR
     END
    END ELSE
     IF TypTauxRubSai=1 THEN
      W_TAUXHORRUBSAI=INT(MontTauxRubSai/10+1/2)
     END ELSE
      W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
     END
     W_TAUXHORRUBSAI=W_TAUXHORRUBSAI*10
    END
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
    W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
   END
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;ENR_DETAILCALCUL<6>+W_BASERUBSAI)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;ENR_DETAILCALCUL<7>+W_MONTRUBSAI)
   IF W_TAUXHOR=W_TAUXHORRUBSAI THEN
    W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
   END ELSE
    IF ChpAppliRubSai="4" THEN
     IF ConvColContrat="01" THEN
      IF MontTauxRubSai#"1250000" THEN
       W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_BASERUBSAI*MontTauxRubSai/1000000+1/2)
      END ELSE
       W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
      END
     END ELSE
      W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_BASERUBSAI*MontTauxRubSai/1000000+1/2)
     END
    END ELSE
     W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
    END
   END
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,24,-1;RubSaisieModP)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,25,-1;W_BASERUBSAI)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,26,-1;ENR_DETAILPREST<4,I>)
   IF HorsLissageRubSai=0 THEN
    W_BASELISSAGE=W_BASELISSAGE+W_BASERUBSAI
   END
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,27,-1;W_MONTRUBSAI)
  END
  I=I+1
REPEAT
IF W_HEURESTRAV=0 THEN
 W_POURCENTEXO="10000"
 W_POURCENTNONEXO=0
 IF W_BUDGET=1 THEN
  W_POURCENTEXO=EXTRACT(ENR_CONTRAT,21)
  W_POURCENTNONEXO=10000-W_POURCENTEXO
  W_HEURESTRAV=10000
  W_HEURESTRAVEXO=W_POURCENTEXO
  GOSUB 2900
  W_TOTALAREPARTIRH=0
  W_TOTALAREPARTIRM=0
  W_PLUSFORT=0
  W_INDICEPLUSFORT=0
  G=1
  LOOP
   UNTIL ActiviteContrat<1,G>="" DO
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,24,-1;"805")
    W_BASERUBSAI=INT(ENR_DETAILCALCUL<6>*PourcentActiviteContrat<1,G>/10000+1/2)
    IF W_BASERUBSAI>W_PLUSFORT THEN
     W_PLUSFORT=W_BASERUBSAI
     W_INDICEPLUSFORT=G
    END
    W_TOTALAREPARTIRH=W_TOTALAREPARTIRH+W_BASERUBSAI
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,25,-1;W_BASERUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,26,-1;ActiviteContrat<1,G>)
    W_MONTRUBSAI=INT(ENR_DETAILCALCUL<7>*PourcentActiviteContrat<1,G>/10000+1/2)
    W_TOTALAREPARTIRM=W_TOTALAREPARTIRM+W_MONTRUBSAI
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,27,-1;W_MONTRUBSAI)
    G=G+1
  REPEAT
  IF W_TOTALAREPARTIRH#ENR_DETAILCALCUL<6> THEN
   IF W_TOTALAREPARTIRH>ENR_DETAILCALCUL<6> THEN
    W_DIFFAREPARTIR=W_TOTALAREPARTIRH-ENR_DETAILCALCUL<6>
    W_BASERUBSAI=EXTRACT(ENR_DETAILCALCUL,25,W_INDICEPLUSFORT)-W_DIFFAREPARTIR
   END ELSE
    W_DIFFAREPARTIR=ENR_DETAILCALCUL<6>-W_TOTALAREPARTIRH
    W_BASERUBSAI=EXTRACT(ENR_DETAILCALCUL,25,W_INDICEPLUSFORT)+W_DIFFAREPARTIR
   END
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,25,W_INDICEPLUSFORT;W_BASERUBSAI)
  END
  IF W_TOTALAREPARTIRM#ENR_DETAILCALCUL<7> THEN
   IF W_TOTALAREPARTIRM>ENR_DETAILCALCUL<7> THEN
    W_DIFFAREPARTIR=W_TOTALAREPARTIRM-ENR_DETAILCALCUL<7>
    W_MONTRUBSAI=EXTRACT(ENR_DETAILCALCUL,27,W_INDICEPLUSFORT)-W_DIFFAREPARTIR
   END ELSE
    W_DIFFAREPARTIR=ENR_DETAILCALCUL<7>-W_TOTALAREPARTIRM
    W_MONTRUBSAI=EXTRACT(ENR_DETAILCALCUL,27,W_INDICEPLUSFORT)+W_DIFFAREPARTIR
   END
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,27,W_INDICEPLUSFORT;W_MONTRUBSAI)
  END
 END
END ELSE
 W_POURCENTEXO=INT(W_HEURESTRAVEXO*10000/W_HEURESTRAV+1/2)
 W_POURCENTNONEXO=10000-W_POURCENTEXO
END
* MAIN D'OEUVRE INDIRECTE 
W_FINDETAIL="NON"
I=1
LOOP
 RubSaisieMoiP=EXTRACT(ENR_DETAILPREST,5,I)
 IF RubSaisieMoiP="" THEN W_FINDETAIL="OUI"
 UNTIL W_FINDETAIL="OUI" DO
  CodRubSai=RubSaisieMoiP
  GOSUB 1200 ;*lecture RUBSAISIE
  IF CodRubSai="835" THEN
   IF W_FINCONTRAT="OUI" OR W_FINMODULATION="OUI" THEN
    W_HEURESREGULMODUL=0
   END ELSE
    W_HEURESREGULMODUL=W_HEURESREGULMODUL+ENR_DETAILPREST<6,I>
   END
  END
  IF CodRubSai="835" AND W_HEURESREGULMODUL=0 THEN
   NULL
  END ELSE
   IF CodRubSai="815" OR CodRubSai="838" THEN W_HEURESABS=W_HEURESABS+ENR_DETAILPREST<6,I>
   IF CodRubSai="802" OR CodRubSai="817" THEN W_JRSCONGESPRIS=W_JRSCONGESPRIS+ENR_DETAILPREST<14,I>
   IF CodRubSai="803" THEN W_JRSANCPRIS=W_JRSANCPRIS+ENR_DETAILPREST<14,I>
   IF CodRubSai="801" THEN
    IF W_PERIODEPAIE>=DatMontEnEuro THEN
     IF ENR_DETAILPREST<8,I>>305000 THEN W_MONTDEPARTRETRAITE=305000 ELSE W_MONTDEPARTRETRAITE=ENR_DETAILPREST<8,I>
    END ELSE
     IF ENR_DETAILPREST<8,I>>2000000 THEN W_MONTDEPARTRETRAITE=2000000 ELSE W_MONTDEPARTRETRAITE=ENR_DETAILPREST<8,I>
    END
   END
   W_BASERUBSAI=""
   W_TAUXHORRUBSAI=""
   W_MONTRUBSAI=0
   BEGIN CASE
    CASE TypBaseRubSai=0 ;*  saisir
     W_BASERUBSAI=ENR_DETAILPREST<6,I>   
    CASE TypBaseRubSai=1 ;* fixe
     W_BASERUBSAI=MontBaseRubSai   
   END CASE
   BEGIN CASE
    CASE TypTauxRubSai=0 ;*  saisir
     W_TAUXHORRUBSAI=ENR_DETAILPREST<7,I>
     W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
    CASE TypTauxRubSai=1 ;* fixe
     W_TAUXHORRUBSAI=MontTauxRubSai
     W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
    CASE TypTauxRubSai=2 ;* taux horaire

* - si rubrique 836 ou 837, alors meilleur taux horaire entre 125% du taux horaire
* et taux horaire major de 25% du taux horaire mdian
* - si CCN 01 (Aide a Domicile) et 125% du taux horaire alors W_TAUXHORDIMJF si champ 
* d'application MOD ou MOD dimanches et jours feries
  
     IF CodRubSai="836" OR CodRubSai="837" THEN
      W_TAUXHORRUBSAI=INT(W_TAUXHORDIMJF*MontTauxRubSai/10000000+1/2)-W_TAUXHORDIMJF/10
      W_TAUXHORRUBSAI=W_TAUXHOR+W_TAUXHORRUBSAI*10
      W_TAUXHORRUBSAI1=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
      W_TAUXHORRUBSAI1=W_TAUXHORRUBSAI1*10
      IF W_TAUXHORRUBSAI1>W_TAUXHORRUBSAI THEN W_TAUXHORRUBSAI=W_TAUXHORRUBSAI1
     END ELSE
      W_TAUXHORDIMJFBIS=W_TAUXHORDIMJF
      IF ConvColContrat="06" THEN W_TAUXHORDIMJF=W_TAUXHOR                         
      IF ConvColContrat="01" AND MontTauxRubSai="1250000" THEN
       IF ChpAppliRubSai="3" OR ChpAppliRubSai="4" THEN
        W_TAUXHORRUBSAI=INT(W_TAUXHORDIMJF*MontTauxRubSai/10000000+1/2)-W_TAUXHORDIMJF/10
        W_TAUXHORRUBSAI=W_TAUXHOR+W_TAUXHORRUBSAI*10
       END ELSE
        W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
        W_TAUXHORRUBSAI=W_TAUXHORRUBSAI*10
       END  
      END ELSE
       W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
       W_TAUXHORRUBSAI=W_TAUXHORRUBSAI*10
      END
      W_TAUXHORDIMJF=W_TAUXHORDIMJFBIS
     END
     W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
   END CASE
   BEGIN CASE
    CASE TypMontRubSai=0 ;*  saisir
     W_MONTRUBSAI=ENR_DETAILPREST<8,I>

* Cas supplement familial rubrique de saisie 831

     IF CodRubSai="831" THEN
      W_MONTRUBSAI=INT(W_MONTRUBSAI*ENR_DETAILCALCUL<6>/16900+1/2)
     END 
    CASE TypMontRubSai=1 ;* fixe
     W_MONTRUBSAI=ValMontRubSai
    CASE 1
     W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
   END CASE
   W_TAUXHORRUBSAI=INT(W_TAUXHORRUBSAI/10)*10
   IF SigneRubSai="-" THEN
    IF W_BASERUBSAI#"" THEN W_BASERUBSAI=-W_BASERUBSAI
    W_MONTRUBSAI=-W_MONTRUBSAI
   END
   IF CodRubSai="802" OR CodRubSai="817" OR CodRubSai="803" OR CodRubSai="821" THEN W_MONTCPMOIS=W_MONTCPMOIS+W_MONTRUBSAI
   IF CodRubSai="802" OR CodRubSai="817" OR CodRubSai="803" OR CodRubSai="818" OR CodRubSai="819" OR CodRubSai="804" THEN
    W_HEURESORANGE=W_HEURESORANGE+W_BASERUBSAI
   END 
   BEGIN CASE
    CASE CodRubSai="815" AND LissageContrat=1 AND FonctionContrat#"A"
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,33,-1;RubSaisieMoiP)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,34,-1;-W_BASERUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,35,-1;W_TAUXHORRUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,36,-1;W_MONTRUBSAI)
    CASE CodRubSai="838" AND LissageContrat=1 AND FonctionContrat#"A"
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,33,-1;RubSaisieMoiP)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,34,-1;-W_BASERUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,35,-1;W_TAUXHORRUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,36,-1;W_MONTRUBSAI)
    CASE ChpAppliRubSai=0 ;* avantage en nature
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;RubSaisieMoiP)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;RubSaisieMoiP)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;W_BASERUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;W_TAUXHORRUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;-W_MONTRUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
    CASE ChpAppliRubSai=1 OR ChpAppliRubSai=2 ;* aprs net imposable OU frais professionnels
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;RubSaisieMoiP)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;W_BASERUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;W_TAUXHORRUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;W_MONTRUBSAI)
    CASE ChpAppliRubSai>2
     IF ChpAppliRubSai#6 THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAI+ENR_DETAILCALCUL<6>)
      IF W_TAUXHOR=W_TAUXHORRUBSAI THEN
       W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
      END ELSE
       W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
      END
      IF HorsLissageRubSai=0 THEN
       W_BASELISSAGE=W_BASELISSAGE+W_BASERUBSAI
      END
     END ELSE
      IF ChpAppliRubSai=6 AND TypTauxRubSai=2 THEN
       IF W_TAUXHOR=W_TAUXHORRUBSAI THEN
        W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
       END ELSE
        W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
       END
      END
     END
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;RubSaisieMoiP)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
   END CASE
  END
  I=I+1
REPEAT
GOSUB 300
GOSUB 350
GOSUB 1900
RETURN
**********
* TRAITEMENT DES INFORMATIONS INTERMEDIAIRES (FICHIER DETAILINTER)
**********
800 IF W_CLE MATCH "8N" THEN W_CLE=W_CLE:W_PERIODEPAIE
IF W_RUPTCONTRAT#W_CLE[1,8] THEN
 IF W_RUPTCONTRAT#"" THEN
  IF W_TYPETRAIT="R" THEN 
   READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_RUPTCONTRAT:W_PERIODEPAIE ELSE ENR_DETAILCALCUL=""
   W_HEURESTRAV=ENR_DETAILCALCUL<41>
   IF W_HEURESTRAV="" THEN W_HEURESTRAV=0
  END
  GOSUB 300
  IF W_CLE="" THEN W_CLE=W_RUPTCONTRAT
  GOSUB 350
  IF W_CLE=W_RUPTCONTRAT THEN W_CLE=""
  GOSUB 1900
 END
 ENR_DETAILCALCUL=""
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19;"0")
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20;"0")
 W_BASELISSAGE=0
 W_HEURESTRAV=0
 W_HEURESTRAVEXO=0
 W_HEURESABS=0
 W_JRSCONGESPRIS=0
 W_JRSANCPRIS=0
 W_HEURESPRIMEDIFF=0
 W_MONTCPMOIS=0
 W_MONTDEPARTRETRAITE=0
 W_HEURESREGULMODUL=0
 W_HEURESORANGE=0
 W_RUPTCONTRAT=W_CLE[1,8]
 CodAidantContrat=W_RUPTCONTRAT
 DELETE F.ANOMALIEPAIE,W_CLE[1,8]:W_CLE[12,6]
 IF W_TYPETRAIT="T" OR W_TYPETRAIT="TA" THEN
  GOSUB 1000 ;*lecture CONTRAT
 END
 IF ConvColContrat#W_CODECONVCOL THEN
  CodeConvCol=ConvColContrat
  W_CODECONVCOL=ConvColContrat
  GOSUB 1100 ;* lecture CONVENTIONCOL
 END
 GOSUB 2000 ;*determination taux horaire
END
IF W_TYPETRAIT="R" THEN RETURN 
* REGROUPEMENT DE TOUTES LES MISSIONS D'UN MEME CONTRAT
READ ENR_DETAILINTER FROM F.DETAILINTER,W_CLE ELSE ENR_DETAILINTER=""
* MAIN D'OEUVRE FACTURABLE
W_FINDETAIL="NON"
F=2
I=1
LOOP
 RubSaisieFactI=EXTRACT(ENR_DETAILINTER,1,I)
 IF RubSaisieFactI="" THEN W_FINDETAIL="OUI"
 UNTIL W_FINDETAIL="OUI" DO
  CodRubSai=RubSaisieFactI
  GOSUB 1200 ;*lecture RUBSAISIE
  IF CodRubSai="815" OR CodRubSai="838" THEN W_HEURESABS=W_HEURESABS+ENR_DETAILINTER<9,I>
  IF CodRubSai="802" OR CodRubSai="817" THEN
   W_JRSCONGESPRIS=W_JRSCONGESPRIS+ENR_DETAILINTER<13,I>
   W_HEURESORANGE=W_HEURESORANGE+ENR_DETAILINTER<9,I>
  END
  IF CodRubSai="803" THEN
   W_JRSANCPRIS=W_JRSANCPRIS+ENR_DETAILINTER<13,I>
   W_HEURESORANGE=W_HEURESORANGE+ENR_DETAILINTER<9,I>
  END
  IF CodRubSai="804" OR CodRubSai="818" OR CodRubSai="819" THEN W_HEURESORANGE=W_HEURESORANGE+ENR_DETAILINTER<9,I>
  IF CodRubSai="801" THEN
   IF W_PERIODEPAIE>=DatMontEnEuro THEN
    IF ENR_DETAILINTER<4,I>>305000 THEN W_MONTDEPARTRETRAITE=305000 ELSE W_MONTDEPARTRETRAITE=ENR_DETAILINTER<4,I>
   END ELSE
    IF ENR_DETAILINTER<4,I>>2000000 THEN W_MONTDEPARTRETRAITE=2000000 ELSE W_MONTDEPARTRETRAITE=ENR_DETAILINTER<4,I>
   END
  END
  GOSUB 900
  I=I+1
REPEAT
* MAIN D'OEUVRE NON FACTURABLE 
W_FINDETAIL="NON"
F=9
I=1
LOOP
 RubSaisieNFactI=EXTRACT(ENR_DETAILINTER,8,I)
 IF RubSaisieNFactI="" THEN W_FINDETAIL="OUI"
 UNTIL W_FINDETAIL="OUI" DO
  CodRubSai=RubSaisieNFactI
  GOSUB 1200 ;*lecture RUBSAISIE
  IF CodRubSai="815" OR CodRubSai="838" THEN W_HEURESABS=W_HEURESABS+ENR_DETAILINTER<9,I>
  IF CodRubSai="802" OR CodRubSai="817" THEN W_JRSCONGESPRIS=W_JRSCONGESPRIS+ENR_DETAILINTER<13,I>
  IF CodRubSai="803" THEN W_JRSANCPRIS=W_JRSANCPRIS+ENR_DETAILINTER<13,I>
  IF CodRubSai="801" THEN
   IF W_PERIODEPAIE>=DatMontEnEuro THEN
    IF ENR_DETAILINTER<11,I>>305000 THEN W_MONTDEPARTRETRAITE=305000 ELSE W_MONTDEPARTRETRAITE=ENR_DETAILINTER<11,I>
   END ELSE
    IF ENR_DETAILINTER<11,I>>2000000 THEN W_MONTDEPARTRETRAITE=2000000 ELSE W_MONTDEPARTRETRAITE=ENR_DETAILINTER<11,I>
   END
  END
  GOSUB 900
  I=I+1
REPEAT
RETURN
**********
* PARCOURS DES ELEMENTS FACTURABLES ET NON FACTURABLES DU FICHIER DETAILINTER
**********
900 W_BASERUBSAI=""
W_TAUXHORRUBSAI=""
W_MONTRUBSAI=0
BEGIN CASE
 CASE TypBaseRubSai=0 ;*  saisir
  W_BASERUBSAI=ENR_DETAILINTER<F,I>   
 CASE TypBaseRubSai=1 ;* fixe
  W_BASERUBSAI=MontBaseRubSai   
END CASE
BEGIN CASE
 CASE TypTauxRubSai=0 ;*  saisir
  W_TAUXHORRUBSAI=ENR_DETAILINTER<F+1,I>
  W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
 CASE TypTauxRubSai=1 ;* fixe
  W_TAUXHORRUBSAI=MontTauxRubSai
  W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
 CASE TypTauxRubSai=2 ;* taux horaire
  W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
  W_TAUXHORRUBSAI=W_TAUXHORRUBSAI*10
  W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
END CASE
BEGIN CASE
 CASE TypMontRubSai=0 ;*  saisir
  W_MONTRUBSAI=ENR_DETAILINTER<F+2,I>
 CASE TypMontRubSai=1 ;* fixe
  W_MONTRUBSAI=ValMontRubSai
 CASE 1
  W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
END CASE
W_TAUXHORRUBSAI=INT(W_TAUXHORRUBSAI/10)*10
IF SigneRubSai="-" THEN
 IF W_BASERUBSAI#"" THEN W_BASERUBSAI=-W_BASERUBSAI
 W_MONTRUBSAI=-W_MONTRUBSAI
END
IF CodRubSai="802" OR CodRubSai="817" OR CodRubSai="803" OR CodRubSai="821" THEN W_MONTCPMOIS=W_MONTCPMOIS+W_MONTRUBSAI
BEGIN CASE
 CASE ChpAppliRubSai="0" ;* avantage en nature
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;CodRubSai)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;CodRubSai)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;W_BASERUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;W_TAUXHORRUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;-W_MONTRUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
 CASE ChpAppliRubSai="1" OR ChpAppliRubSai="2" ;* aprs net imposable OU frais professionnels
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;CodRubSai)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;W_BASERUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;W_TAUXHORRUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;W_MONTRUBSAI)
 CASE ChpAppliRubSai="3" OR ChpAppliRubSai="4" ;* M.O.D. OU M.O.D. dim. et jours fris
  W_RUBTROUVE="NON"
  K=1
  LOOP
   RubSaisieCal=EXTRACT(ENR_DETAILCALCUL,2,K)
   UNTIL RubSaisieCal="" OR W_RUBTROUVE="OUI" DO
    IF RubSaisieCal=CodRubSai THEN
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,K;W_BASERUBSAI+ENR_DETAILCALCUL<3,K>)
     W_TAUXHORRUBSAI=ENR_DETAILCALCUL<4,K>
     W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,K;W_MONTRUBSAI+ENR_DETAILCALCUL<5,K>)       
     W_RUBTROUVE="OUI"
    END ELSE
     K=K+1 
    END
  REPEAT
  IF W_RUBTROUVE="NON" THEN
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;CodRubSai)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
  END
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;ENR_DETAILCALCUL<6>+W_BASERUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;ENR_DETAILCALCUL<7>+W_MONTRUBSAI)
  IF W_TAUXHOR=W_TAUXHORRUBSAI THEN
   W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
  END ELSE
   W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
  END
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,24,-1;CodRubSai)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,25,-1;W_BASERUBSAI)
  IF F=2 THEN
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,26,-1;ENR_DETAILINTER<6,I>)
  END ELSE
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,26,-1;ENR_DETAILINTER<12,I>)
  END
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,27,-1;W_MONTRUBSAI)
  IF HorsLissageRubSai=0 THEN
   W_BASELISSAGE=W_BASELISSAGE+W_BASERUBSAI
  END
  W_HEURESTRAV=W_HEURESTRAV+W_BASERUBSAI
 CASE ChpAppliRubSai=5 ;* inclus dans brut base et montant
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;CodRubSai)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAI+ENR_DETAILCALCUL<6>)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
  IF W_TAUXHOR=W_TAUXHORRUBSAI THEN
   W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_BASERUBSAI
  END ELSE
   W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
  END
  IF HorsLissageRubSai=0 THEN
   W_BASELISSAGE=W_BASELISSAGE+W_BASERUBSAI
  END
 CASE ChpAppliRubSai=6 ;* inclus dans brut montant
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;CodRubSai)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
  ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
END CASE
RETURN
**********
* LECTURE DES INFORMATIONS DU CONTRAT
**********
1000 W_ACTIVITECOUV="NON"
IF W_BUDGET=1 THEN
 READ ENR_CONTRAT FROM F.CONTRAT,CodAidantContrat:W_ANNEEDADS ELSE ENR_CONTRAT=""
END ELSE
 READ ENR_CONTRAT FROM F.CONTRAT,CodAidantContrat ELSE ENR_CONTRAT=""
END
IF W_BUDGET#1 THEN
 ConvColContrat=EXTRACT(ENR_CONTRAT,1)
 AssocContrat=EXTRACT(ENR_CONTRAT,2)
 EmplEtabContrat=EXTRACT(ENR_CONTRAT,3)
 TypeContrat=EXTRACT(ENR_CONTRAT,4)
 TypeSalContrat=EXTRACT(ENR_CONTRAT,5)
 FonctionContrat=EXTRACT(ENR_CONTRAT,6)
 DatDebContrat=EXTRACT(ENR_CONTRAT,7)
 W_DATDEBCONTRAT=OCONV(DatDebContrat,"D4 ")
 W_DATDEBCONTRAT=W_DATDEBCONTRAT[7,4]:W_DATDEBCONTRAT[4,2]
 DatFinContrat=EXTRACT(ENR_CONTRAT,8)
 DernBullContrat=EXTRACT(ENR_CONTRAT,58)
 W_FINCONTRAT="NON"
 IF DernBullContrat=W_PERIODEPAIE THEN W_FINCONTRAT="OUI"
 IF DatFinContrat#"" AND DatFinContrat>=W_PERIODEPAIEDEB AND DatFinContrat<=W_PERIODEPAIEFIN THEN
  W_FINCONTRAT="OUI"
 END
 NatureContrat=EXTRACT(ENR_CONTRAT,13)
 GrilleContrat=0
 DepartGrilContrat=0
 CoefNivContrat=0
 TauxHorContrat=0
 DureeWContrat=0
 FreqWContrat=0
 LissageContrat=0
 TypLissageContrat=""
 * RECHERCHE DE L'AVENANT A PRENDRE EN COMPTE SUR LA PERIODE 
 W_FINRECH="NON"
 I=DCOUNT(EXTRACT(ENR_CONTRAT,15),CHAR(253))
 W_NOAVENANT=I
 LOOP
  IF I=0 THEN W_FINRECH="OUI"
  UNTIL W_FINRECH="OUI" DO
   DatEffetContrat=EXTRACT(ENR_CONTRAT,15,I)
   IF DatEffetContrat<=W_PERIODEPAIEFIN THEN
    GrilleContrat=EXTRACT(ENR_CONTRAT,20,I)
    DepartGrilContrat=EXTRACT(ENR_CONTRAT,21,I)
    CoefNivContrat=EXTRACT(ENR_CONTRAT,22,I)
    TauxHorContrat=EXTRACT(ENR_CONTRAT,23,I)
    DureeWContrat=EXTRACT(ENR_CONTRAT,24,I)
    FreqWContrat=EXTRACT(ENR_CONTRAT,25,I)
    LissageContrat=EXTRACT(ENR_CONTRAT,68,I)
    TypLissageContrat=EXTRACT(ENR_CONTRAT,69,I)
    W_FINRECH="OUI"
    W_NOAVENANT=I
   END ELSE
    I=I-1
   END
 REPEAT
 ProfilContrat=EXTRACT(ENR_CONTRAT,26)
 PrevContrat=EXTRACT(ENR_CONTRAT,29)
 BaseContrat=EXTRACT(ENR_CONTRAT,30)
 IF ConvColContrat#"02" THEN BaseContrat="B"
 CPMoisContrat=EXTRACT(ENR_CONTRAT,31)
 MutSalContrat=EXTRACT(ENR_CONTRAT,32)
 MutPatContrat=EXTRACT(ENR_CONTRAT,33)
 CartOrangContrat=EXTRACT(ENR_CONTRAT,35)
 ActiviteContrat=EXTRACT(ENR_CONTRAT,36)
 PourcentActiviteContrat=EXTRACT(ENR_CONTRAT,37)
 W_ACTIVITECOUV="OUI"
 CPRestConsoContrat=EXTRACT(ENR_CONTRAT,39)
 CFRestConsoContrat=EXTRACT(ENR_CONTRAT,41)
 JrOuvrHContrat=EXTRACT(ENR_CONTRAT,42)
 JrOuvrMContrat=EXTRACT(ENR_CONTRAT,43)
 CPCoursMContrat=EXTRACT(ENR_CONTRAT,46)
 CAncRestContrat=EXTRACT(ENR_CONTRAT,48)
 MotifFinContrat=EXTRACT(ENR_CONTRAT,49)
 PrecaLicContrat=EXTRACT(ENR_CONTRAT,52)
 DebPayeContrat=EXTRACT(ENR_CONTRAT,53)
 FinPayeContrat=EXTRACT(ENR_CONTRAT,54)
 DebEffContrat=EXTRACT(ENR_CONTRAT,55)
 FinEffContrat=EXTRACT(ENR_CONTRAT,56)
 ChargeMutContrat=EXTRACT(ENR_CONTRAT,61)
 Profil2Contrat=EXTRACT(ENR_CONTRAT,64)
 PlafSSMensContrat=EXTRACT(ENR_CONTRAT,66)
 JrsSuspContrat=EXTRACT(ENR_CONTRAT,70)
 PerAnCoursContrat=EXTRACT(ENR_CONTRAT,76)
 HMensAnCoursContrat=EXTRACT(ENR_CONTRAT,77)
 HAbsAnCoursContrat=EXTRACT(ENR_CONTRAT,78)
 HReelAnCoursContrat=EXTRACT(ENR_CONTRAT,79)
 DiffAnCoursContrat=EXTRACT(ENR_CONTRAT,80)
 PerPaieCoursContrat=EXTRACT(ENR_CONTRAT,81)
 CPCoursPrisJContrat=EXTRACT(ENR_CONTRAT,83)
 RegModAnCoursContrat=EXTRACT(ENR_CONTRAT,100)
 J=1
 LOOP
  PerCommentContrat=EXTRACT(ENR_CONTRAT,87,J)
  UNTIL PerCommentContrat="" OR PerCommentContrat=W_PERIODEPAIE DO
   J=J+1
 REPEAT
 IF PerCommentContrat=W_PERIODEPAIE THEN
  LibCommentContrat=EXTRACT(ENR_CONTRAT,88,J)
 END ELSE
  LibCommentContrat=""
 END
 W_FINMODULATION="NON"
 * Lecture de l'etablissement
 IF ConvColContrat#"02" THEN
  READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,EmplEtabContrat THEN
   HorHebdoEtabl=EXTRACT(ENR_ETABLISSEMENT,16)
   CarteOrangeEtabl=EXTRACT(ENR_ETABLISSEMENT,22)
   MoisFinContAnEtabl=EXTRACT(ENR_ETABLISSEMENT,24)
   IF MoisFinContAnEtabl=W_PERIODEPAIE[5,2] THEN W_FINMODULATION="OUI"
   W_HORMOISETABL=INT(HorHebdoEtabl*52/12+1/2)
   Multi35HEtab=EXTRACT(ENR_ETABLISSEMENT,26)
   IF Multi35HEtab="" THEN Multi35HEtab=0
   Smic35HEtab=EXTRACT(ENR_ETABLISSEMENT,27)
   IF Smic35HEtab="" THEN Smic35HEtab=0
   Abat35HEtab=EXTRACT(ENR_ETABLISSEMENT,28)
   IF Abat35HEtab="" THEN Abat35HEtab=0
   AidePerenne35HEtab=EXTRACT(ENR_ETABLISSEMENT,29)
   IF AidePerenne35HEtab="" THEN AidePerenne35HEtab=0
   AideIncit35HEtab=EXTRACT(ENR_ETABLISSEMENT,30)
   IF AideIncit35HEtab="" THEN AideIncit35HEtab=0
   TauxHorPlan35HEtab=EXTRACT(ENR_ETABLISSEMENT,31)
   IF TauxHorPlan35HEtab="" THEN TauxHorPlan35HEtab=0
  END
 END ELSE
  Multi35HEtab=0
  Smic35HEtab=0
  Abat35HEtab=0
  AidePerenne35HEtab=0
  AideIncit35HEtab=0
  TauxHorPlan35HEtab=0
 END
 AssietteIndContrat=EXTRACT(ENR_CONTRAT,103)
END ELSE
 ConvColContrat=EXTRACT(ENR_CONTRAT,3)
 AssocContrat=CodAidantContrat[6,3]
 EmplEtabContrat=AssocContrat
 TypeContrat=EXTRACT(ENR_CONTRAT,6)
 FonctionContrat=EXTRACT(ENR_CONTRAT,7)
 IF FonctionContrat="A" THEN
  TypeSalContrat="M"
 END ELSE
  TypeSalContrat="H"
 END
 DatDebContrat=EXTRACT(ENR_CONTRAT,8)
 W_DATDEBCONTRAT=OCONV(DatDebContrat,"D4 ")
 W_DATDEBCONTRAT=W_DATDEBCONTRAT[7,4]:W_DATDEBCONTRAT[4,2]
 DatFinContrat=EXTRACT(ENR_CONTRAT,23)
 DernBullContrat=""
 W_FINCONTRAT="NON"
 IF DatFinContrat#"" AND DatFinContrat>=W_PERIODEPAIEDEB AND DatFinContrat<=W_PERIODEPAIEFIN THEN
  W_FINCONTRAT="OUI"
  DernBullContrat=W_PERIODEPAIE
 END
 NatureContrat=""
 GrilleContrat=0
 DepartGrilContrat=0
 CoefNivContrat=0
 TauxHorContrat=0
 DureeWContrat=0
 FreqWContrat=0
 LissageContrat=0
 TypLissageContrat=""
 * RECHERCHE DE L'AVENANT A PRENDRE EN COMPTE SUR LA PERIODE 
 W_FINRECH="NON"
 I=1
 W_NOAVENANT=1
 LOOP
  IF EXTRACT(ENR_CONTRAT,12,I)="" THEN W_FINRECH="OUI"
  UNTIL W_FINRECH="OUI" DO
   DatEffetContrat=EXTRACT(ENR_CONTRAT,12,I)
   IF DatEffetContrat<=W_PERIODEPAIEFIN THEN
    GrilleContrat=EXTRACT(ENR_CONTRAT,15,I)
    DepartGrilContrat=EXTRACT(ENR_CONTRAT,13,I)
    CoefNivContrat=""
    TauxHorContrat=EXTRACT(ENR_CONTRAT,17,I)
    DureeWContrat=EXTRACT(ENR_CONTRAT,18,I)
    FreqWContrat="3"
    LissageContrat="0"
    TypLissageContrat=""
    W_FINRECH="OUI"
    W_NOAVENANT=I
   END ELSE
    I=I+1
   END
 REPEAT
 ProfilContrat=EXTRACT(ENR_CONTRAT,19)
 PrevContrat=""
 BaseContrat=""
 IF ConvColContrat#"02" THEN BaseContrat="B"
 CPMoisContrat=0
 MutSalContrat=0
 MutPatContrat=0
 CartOrangContrat=""
 ActiviteContrat=EXTRACT(ENR_CONTRAT,10)
 PourcentActiviteContrat=EXTRACT(ENR_CONTRAT,11)
 CPRestConsoContrat=0
 CFRestConsoContrat=0
 JrOuvrHContrat=0
 JrOuvrMContrat=0
 CPCoursMContrat=0
 CAncRestContrat=0
 MotifFinContrat=EXTRACT(ENR_CONTRAT,24)
 PrecaLicContrat=0
 IF TypeContrat="D" THEN PrecaLicContrat=1
 DebPayeContrat=""
 FinPayeContrat=""
 DebEffContrat=""
 FinEffContrat=""
 ChargeMutContrat=""
 Profil2Contrat=EXTRACT(ENR_CONTRAT,20)
 PlafSSMensContrat=EXTRACT(ENR_CONTRAT,22)
 JrsSuspContrat=0
 PerAnCoursContrat=""
 HMensAnCoursContrat=""
 HAbsAnCoursContrat=""
 HReelAnCoursContrat=""
 DiffAnCoursContrat=""
 PerPaieCoursContrat=""
 CPCoursPrisJContrat=0
 RegModAnCoursContrat=""
 PerCommentContrat=""
 LibCommentContrat=""
 AssietteIndContrat=EXTRACT(ENR_CONTRAT,34)
 W_FINMODULATION="NON"
 IF ConvColContrat#"02" THEN
  HorHebdoEtabl=EXTRACT(ENR_CONTRAT,2)
  CarteOrangeEtabl=""
  MoisFinContAnEtabl="12"
  W_HORMOISETABL=HorHebdoEtabl
  W_FINRECH="NON"
  G=1
  LOOP
   UNTIL W_FINRECH="OUI" DO
    DatEff35H=EXTRACT(ENR_CONSTANTESPAIE,5,G)
    IF DatEff35H<=W_PERIODEPAIEFIN THEN
     Multi35HEtab=EXTRACT(ENR_CONSTANTESPAIE,6,G)
     Smic35HEtab=""
     Abat35HEtab=""
     AidePerenne35HEtab=""
     AideIncit35HEtab=EXTRACT(ENR_CONSTANTESPAIE,7,G)
     TauxHorPlan35HEtab=EXTRACT(ENR_CONSTANTESPAIE,8,G)
     W_FINRECH="OUI"
    END ELSE
     G=G+1
    END
  REPEAT
  IF Multi35HEtab="" THEN Multi35HEtab=0
  IF Smic35HEtab="" THEN Smic35HEtab=0
  IF Abat35HEtab="" THEN Abat35HEtab=0
  IF AidePerenne35HEtab="" THEN AidePerenne35HEtab=0
  IF AideIncit35HEtab="" THEN AideIncit35HEtab=0
  IF TauxHorPlan35HEtab="" THEN TauxHorPlan35HEtab=0
 END
END
RETURN
**********
* LECTURE DES INFORMATIONS DE LA CONVENTION COLLECTIVE NATIONALE
**********
1100 READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,CodeConvCol ELSE ENR_CONVENTIONCOL=""
CongOuvrConvCol=EXTRACT(ENR_CONVENTIONCOL,2)
CongNPrisConvCol=EXTRACT(ENR_CONVENTIONCOL,3)
CongFractConvCol=EXTRACT(ENR_CONVENTIONCOL,4)
TauxCongConvCol=EXTRACT(ENR_CONVENTIONCOL,5)
JrsEnfMalConvCol=EXTRACT(ENR_CONVENTIONCOL,6)
* RECHERCHE DU PRIX DU POINT EN VIGUEUR SUR LA PERIODE DE PAIE
PrixPointConvCol=0
W_FINRECH="NON"
I=1
LOOP
 UNTIL W_FINRECH="OUI" DO
  DatePointConvCol=EXTRACT(ENR_CONVENTIONCOL,9,I)
  IF DatePointConvCol<=W_PERIODEPAIEFIN THEN
   PrixPointConvCol=EXTRACT(ENR_CONVENTIONCOL,8,I)
   W_FINRECH="OUI"
  END ELSE
   I=I+1
  END
REPEAT
DepHeurConvCol=EXTRACT(ENR_CONVENTIONCOL,10)
AncOuvrConvCol=EXTRACT(ENR_CONVENTIONCOL,12)
PriseAncConvCol=EXTRACT(ENR_CONVENTIONCOL,13)
BullEmplConvCol=EXTRACT(ENR_CONVENTIONCOL,16)
IF CodeConvCol="01" THEN
 TpsTrajet01ConvCol=EXTRACT(ENR_CONVENTIONCOL,18)
 TpsTrajet01BisConvCol=EXTRACT(ENR_CONVENTIONCOL,33)
 IF TpsTrajet01BisConvCol="" THEN TpsTrajet01BisConvCol=0
END
IF CodeConvCol="04" THEN
 TxMiniCdi04ConvCol=0
 I=DCOUNT(EXTRACT(ENR_CONVENTIONCOL,20),CHAR(253))
 W_FINRECH="NON"
 LOOP
  IF I=0 THEN W_FINRECH="OUI"
  UNTIL I=0 OR W_FINRECH="OUI" DO
   DateMiniCdi04ConvCol=EXTRACT(ENR_CONVENTIONCOL,20,I)
   DateMiniCdi04ConvCol=OCONV(DateMiniCdi04ConvCol,"D4 ")
   DateMiniCdi04ConvCol=DateMiniCdi04ConvCol[7,4]:DateMiniCdi04ConvCol[4,2]
   IF DateMiniCdi04ConvCol<=W_PERIODEPAIE THEN
    W_FINRECH="OUI"
    TxMiniCdi04ConvCol=EXTRACT(ENR_CONVENTIONCOL,19,I)
   END
   I=I-1
 REPEAT
END
PeriodeRefConges=EXTRACT(ENR_CONVENTIONCOL,28)
IndicConges02ConvCol=EXTRACT(ENR_CONVENTIONCOL,35)
CcuConvCol=EXTRACT(ENR_CONVENTIONCOL,36)
BlocageHCongConvCol=EXTRACT(ENR_CONVENTIONCOL,37)
IF W_BUDGET=1 THEN
  W_FINRECH="NON"
  G=1
  LOOP
   DatEffPoint=EXTRACT(ENR_CONSTANTESPAIE,9,G)
   IF DatEffPoint="" THEN W_FINRECH="OUI"
   UNTIL W_FINRECH="OUI" DO
    CodeCCN=EXTRACT(ENR_CONSTANTESPAIE,10,G)
    IF DatEffPoint<=W_PERIODEPAIEFIN AND CodeCCN=CodeConvCol THEN
     PrixPointConvCol=EXTRACT(ENR_CONSTANTESPAIE,11,G)
     W_FINRECH="OUI"
    END ELSE
     G=G+1
    END
  REPEAT
  W_FINRECH="NON"
  G=1
  PourcentAugConvCol=0
  LOOP
   DatEffPourcent=EXTRACT(ENR_CONSTANTESPAIE,12,G)
   IF DatEffPourcent="" THEN W_FINRECH="OUI"
   UNTIL W_FINRECH="OUI" DO   
    CodeCCN=EXTRACT(ENR_CONSTANTESPAIE,13,G)
    IF DatEffPourcent<=W_PERIODEPAIEFIN AND CodeCCN=CodeConvCol THEN
     PourcentAugConvCol=PourcentAugConvCol+EXTRACT(ENR_CONSTANTESPAIE,14,G)
    END
    G=G+1
  REPEAT
END
RETURN
**********
* LECTURE DES INFORMATIONS DE LA RUBRIQUE DE SAISIE
**********
1200 READ ENR_RUBSAISIE FROM F.RUBSAISIE,CodRubSai ELSE ENR_RUBSAISIE=""
ChpAppliRubSai=EXTRACT(ENR_RUBSAISIE,2)
TypAvNatRubSai=EXTRACT(ENR_RUBSAISIE,3)
SigneRubSai=EXTRACT(ENR_RUBSAISIE,5)
TypBaseRubSai=EXTRACT(ENR_RUBSAISIE,6)
MontBaseRubSai=EXTRACT(ENR_RUBSAISIE,7)
TypTauxRubSai=EXTRACT(ENR_RUBSAISIE,8)
MontTauxRubSai=EXTRACT(ENR_RUBSAISIE,9)
TypMontRubSai=EXTRACT(ENR_RUBSAISIE,10)
ValMontRubSai=EXTRACT(ENR_RUBSAISIE,11)
RetIncRubSai=EXTRACT(ENR_RUBSAISIE,14)
ListCodRubSai=EXTRACT(ENR_RUBSAISIE,15)
HorsLissageRubSai=EXTRACT(ENR_RUBSAISIE,16) 
RETURN
**********
* LECTURE DES INFORMATIONS DU PROFIL
**********
1300 READ ENR_PROFIL FROM F.PROFIL,CodeProfil ELSE ENR_PROFIL=""
RubSaiProfil=EXTRACT(ENR_PROFIL,2)
IF W_BUDGET=1 THEN RubSaiProfil=""
RubChgProfil=EXTRACT(ENR_PROFIL,3)
RETURN
**********
* LECTURE DES INFORMATIONS DE LA RUBRIQUE DE CHARGE
**********
1400 READ ENR_RUBCHARGE FROM F.RUBCHARGE,CodRubChg ELSE ENR_RUBCHARGE=""
TranchRubChg=EXTRACT(ENR_RUBCHARGE,2)
RubBrutRubChg=EXTRACT(ENR_RUBCHARGE,3)
PlanchBrutRubChg=EXTRACT(ENR_RUBCHARGE,4)
PlafondBrutRubChg=EXTRACT(ENR_RUBCHARGE,5)
PourcentBrutRubChg=EXTRACT(ENR_RUBCHARGE,6)
RubChgRubChg=EXTRACT(ENR_RUBCHARGE,7)
IncSalRubChg=EXTRACT(ENR_RUBCHARGE,8)
IncPatRubChg=EXTRACT(ENR_RUBCHARGE,9)
PartSalRubChg=EXTRACT(ENR_RUBCHARGE,10)
TypPartSalRubChg=EXTRACT(ENR_RUBCHARGE,11)
AbatSalRubChg=EXTRACT(ENR_RUBCHARGE,12)
TypAbatSalRubChg=EXTRACT(ENR_RUBCHARGE,13)
PartPatRubChg=EXTRACT(ENR_RUBCHARGE,14)
TypPartPatRubChg=EXTRACT(ENR_RUBCHARGE,15)
TypChgRubChg=EXTRACT(ENR_RUBCHARGE,16)
RegulRubChg=EXTRACT(ENR_RUBCHARGE,18)
ExcNetImpRubChg=EXTRACT(ENR_RUBCHARGE,19)
AssBrutRubChg=EXTRACT(ENR_RUBCHARGE,24)
AssChgRubChg=EXTRACT(ENR_RUBCHARGE,25)
RubAADRubChg=EXTRACT(ENR_RUBCHARGE,28)
ExoAADRubChg=EXTRACT(ENR_RUBCHARGE,29)
IF W_BUDGET=1 THEN
 READ ENR_BUDGETRUBCHARGE FROM F.BUDGETRUBCHARGE,CodRubChg ELSE ENR_BUDGETRUBCHARGE=""
 W_FINRECH="NON"
 G=1
 LOOP
  DatEffTaux=EXTRACT(ENR_BUDGETRUBCHARGE,1,G)
  IF DatEffTaux="" THEN W_FINRECH="OUI"
  UNTIL W_FINRECH="OUI" DO
   IF DatEffTaux<=W_PERIODEPAIEFIN THEN
    PartSalRubChg=EXTRACT(ENR_BUDGETRUBCHARGE,3,G)
    TypPartSalRubChg=EXTRACT(ENR_BUDGETRUBCHARGE,2,G)
    TypPartPatRubChg=EXTRACT(ENR_BUDGETRUBCHARGE,2,G)
    PartPatRubChg=EXTRACT(ENR_BUDGETRUBCHARGE,4,G)
    PlancherTranche=EXTRACT(ENR_BUDGETRUBCHARGE,5,G)
    PlafondTranche=EXTRACT(ENR_BUDGETRUBCHARGE,6,G)
    W_FINRECH="OUI"
   END ELSE
    G=G+1
   END
 REPEAT
END
RETURN
**********
* LECTURE DES INFORMATIONS DE LA TRANCHE DE LA RUBRIQUE DE CHARGE
**********
1500 READ ENR_TRANCHE FROM F.TRANCHE,TranchRubChg ELSE ENR_TRANCHE=""
XFoisPlaSS=EXTRACT(ENR_TRANCHE,2)
YFoisPlaSS=EXTRACT(ENR_TRANCHE,3)
XValeur=EXTRACT(ENR_TRANCHE,4)
YValeur=EXTRACT(ENR_TRANCHE,5)
XHeures=EXTRACT(ENR_TRANCHE,6)
YHeures=EXTRACT(ENR_TRANCHE,7)
XFoisTHSmic=EXTRACT(ENR_TRANCHE,8)
YFoisTHSmic=EXTRACT(ENR_TRANCHE,9)
TypTranche=EXTRACT(ENR_TRANCHE,10)
AssietteIndTranche=EXTRACT(ENR_TRANCHE,11)
W_DEBTRANCHEVAL=0
W_FINTRANCHEVAL=0
W_DEBTRANCHEHH=0
W_FINTRANCHEHH=0
IF AssietteIndTranche=1 THEN
 W_TYPETRANCHE="ASSIND"
END ELSE
 IF XFoisPlaSS#"" THEN
  W_JOURS=30
  IF DatDebContrat>W_PERIODEPAIEDEB THEN
   IF DatFinContrat#"" THEN
    IF DatFinContrat>W_PERIODEPAIEFIN THEN
     W_JOURS=W_PERIODEPAIEFIN-DatDebContrat+1
    END ELSE
     W_JOURS=DatFinContrat-DatDebContrat+1
    END
   END ELSE
    W_JOURS=W_PERIODEPAIEFIN-DatDebContrat+1
   END
  END ELSE
   IF DatFinContrat#"" THEN
    IF DatFinContrat<W_PERIODEPAIEFIN THEN
     W_JOURS=DatFinContrat-W_PERIODEPAIEDEB+1
    END
   END
  END
  IF W_JOURS>30 THEN W_JOURS=30
  IF ConvColContrat="02" THEN W_JOURS=30
  W_PLAFONDSECU1=INT(W_PLAFONDSECU*W_JOURS/30+1/2)
  W_DEBTRANCHEVAL=XFoisPlaSS*W_PLAFONDSECU1
  W_FINTRANCHEVAL=YFoisPlaSS*W_PLAFONDSECU1
  W_TYPETRANCHE="PLAFSS"
 END ELSE
  IF XValeur#"" THEN
   W_DEBTRANCHEVAL=XValeur
   W_FINTRANCHEVAL=YValeur
   W_TYPETRANCHE="VALEUR"
  END ELSE
   W_DEBTRANCHEVAL=INT(XFoisTHSmic*ValSmicHor/100+1/2)
   IF YFoisTHSmic>="99900" THEN YFoisTHSmic=9999999
   W_FINTRANCHEVAL=INT(YFoisTHSmic*ValSmicHor/100+1/2)
   W_DEBTRANCHEHH=XHeures
   W_FINTRANCHEHH=YHeures
   W_TYPETRANCHE="HHSMIC"
  END
 END
END
IF W_BUDGET=1 THEN
 IF TypChgRubChg="05" THEN
  IF PlancherTranche#"" THEN W_DEBTRANCHEVAL=PlancherTranche
  IF PlafondTranche#"" THEN W_FINTRANCHEVAL=PlafondTranche
 END
END
RETURN
**********
* LECTURE DES INFORMATIONS DE L'HISTORIQUE DES CUMULS
**********
1600 IF ConvColContrat="02" THEN
 READ ENR_HISTORCUMUL FROM F.HISTORCUMUL,CodAidantContrat[1,5]:W_PERIODEPAIE[1,4]:EmplEtabContrat ELSE ENR_HISTORCUMUL=""
END ELSE
 READ ENR_HISTORCUMUL FROM F.HISTORCUMUL,CodAidantContrat[1,5]:W_ANNEEDADS:EmplEtabContrat[1,3] ELSE ENR_HISTORCUMUL=""
END
HTravHistCum=EXTRACT(ENR_HISTORCUMUL,1)
HPayeesHistCum=EXTRACT(ENR_HISTORCUMUL,2)
PlafondHistCum=EXTRACT(ENR_HISTORCUMUL,4)
BrutHistCum=EXTRACT(ENR_HISTORCUMUL,5)
RETURN
**********
* LECTURE DES INFORMATIONS DU CONTRAT DE PREVOYANCE
**********
1700 READ ENR_CONTRATSPREV FROM F.CONTRATSPREV,CodeContPrev ELSE ENR_CONTRATSPREV=""
RubChargePrev=EXTRACT(ENR_CONTRATSPREV,35)
RubCompMalPrev=EXTRACT(ENR_CONTRATSPREV,41)
IF RubCompMalPrev="" THEN RubCompMalPrev="807"
RubCompAccPrev=EXTRACT(ENR_CONTRATSPREV,42)
IF RubCompAccPrev="" THEN RubCompAccPrev="808"
READ ENR_CONTRATSPREV99 FROM F.CONTRATSPREV,"99" ELSE ENR_CONTRATSPREV=""
W_RUBINCAPREV99=EXTRACT(ENR_CONTRATSPREV99,41)
RETURN
**********
* ECRITURE DU FICHIER CONTRAT POUR ADMINISTRATIF SANS DETAILADM
* OU SI LISSAGE POUR ACTUALISATION DU SUIVI DES CONTRATS
**********
1800 IF W_BUDGET#1 THEN
 ENR_CONTRAT=REPLACE(ENR_CONTRAT,81;W_PERIODEPAIE)
* WRITE ENR_CONTRAT ON F.CONTRAT,CodAidantContrat
END 
RETURN
**********
* ECRITURE DU FICHIER DETAILCALCUL
**********
1900 IF W_PROFILEXOAVANT="NON" AND W_PROFILEXOAPRES="NON" THEN RETURN
W_ECRIREDETAILCALCUL="NON"
IF W_RUBCASGENTOT#"" THEN
 M=1
 LOOP
  UNTIL ENR_DETAILCALCUL<8,M>=W_RUBCASGENTOT OR ENR_DETAILCALCUL<8,M>="" DO
   M=M+1
 REPEAT
 IF ENR_DETAILCALCUL<8,M>="" THEN W_ECRIREDETAILCALCUL="OUI"
END
IF W_ECRIREDETAILCALCUL="NON" AND W_RUBNONEXOTOT#"" THEN
 M=1
 LOOP
  UNTIL ENR_DETAILCALCUL<8,M>=W_RUBNONEXOTOT OR ENR_DETAILCALCUL<8,M>="" DO
   M=M+1
 REPEAT
 IF ENR_DETAILCALCUL<8,M>="" THEN W_ECRIREDETAILCALCUL="OUI"
END
IF W_ECRIREDETAILCALCUL="NON" AND W_RUBEXOTOT#"" THEN
 M=1
 LOOP
  UNTIL ENR_DETAILCALCUL<8,M>=W_RUBEXOTOT OR ENR_DETAILCALCUL<8,M>="" DO
   M=M+1
 REPEAT
 IF ENR_DETAILCALCUL<8,M>="" THEN W_ECRIREDETAILCALCUL="OUI"
END
IF W_ECRIREDETAILCALCUL="NON" AND W_RUBAADEXOACTIVITE#"" THEN
 M=1
 LOOP
  UNTIL ENR_DETAILCALCUL<8,M>=W_RUBAADEXOACTIVITE OR ENR_DETAILCALCUL<8,M>="" DO
   M=M+1
 REPEAT
 IF ENR_DETAILCALCUL<8,M>=W_RUBAADEXOACTIVITE THEN W_ECRIREDETAILCALCUL="OUI"
END
IF W_ECRIREDETAILCALCUL="NON" AND W_RUBAADNONEXO#"" THEN
 M=1
 LOOP
  UNTIL ENR_DETAILCALCUL<8,M>=W_RUBAADNONEXO OR ENR_DETAILCALCUL<8,M>="" DO
   M=M+1
 REPEAT
 IF ENR_DETAILCALCUL<8,M>=W_RUBAADNONEXO THEN W_ECRIREDETAILCALCUL="OUI"
END
IF W_ECRIREDETAILCALCUL="NON" THEN RETURN
IF W_TYPETRAIT="IA" OR W_TYPETRAIT="TA" THEN
 READ ENR_ACOMPTEBULL FROM F.ACOMPTEBULL,W_CLE ELSE ENR_ACOMPTEBULL=""
 IF EXTRACT(ENR_ACOMPTEBULL,2)#"P" THEN
  DELETE F.ACOMPTEBULL,W_CLE
  ENR_ACOMPTEBULL=""
  IF W_POURCACOMPTE=100 THEN
     W_ACOMPTE = ENR_DETAILCALCUL<21>
     ENR_ACOMPTEBULL=REPLACE(ENR_ACOMPTEBULL,1;W_ACOMPTE)
     IF W_ACOMPTE > 0 THEN WRITE ENR_ACOMPTEBULL ON F.ACOMPTEBULL,W_CLE
  END ELSE
     W_ACOMPTE = ENR_DETAILCALCUL<21>*W_POURCACOMPTE/100
     W_ACOMPTE = W_ACOMPTE + 0.5
     W_ACOMPTE = INT(W_ACOMPTE)
     W_NBCARACPTE = LEN(W_ACOMPTE)
     IF W_NBCARACPTE > 3 THEN
        W_ACOMPTE = W_ACOMPTE/1000
        W_ACOMPTE = INT(W_ACOMPTE)
        W_ACOMPTE = W_ACOMPTE*1000
        ENR_ACOMPTEBULL=REPLACE(ENR_ACOMPTEBULL,1;W_ACOMPTE)
        IF W_ACOMPTE>0 THEN WRITE ENR_ACOMPTEBULL ON F.ACOMPTEBULL,W_CLE
     END
  END
 END
END ELSE
 IF ENR_DETAILCALCUL#"" THEN
 IF W_TYPETRAIT="R" THEN
  ENR_DETAILCALCUL<43>=W_SAUVDETAILCALCUL<43>
  ENR_DETAILCALCUL<44>=W_SAUVDETAILCALCUL<44>
  ENR_DETAILCALCUL<45>=W_SAUVDETAILCALCUL<45>
  ENR_DETAILCALCUL<46>=W_SAUVDETAILCALCUL<46>
  ENR_DETAILCALCUL<22>=W_SAUVDETAILCALCUL<22>
  ENR_DETAILCALCUL<23>=W_SAUVDETAILCALCUL<23>
 END ELSE
  IF CongNPrisConvCol="3" THEN
   IF W_PERIODEPAIE[5,2]="05" AND PeriodeRefConges="0" THEN
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,43;"0")
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,44;"0")
   END
   IF W_PERIODEPAIE[5,2]="12" AND PeriodeRefConges="1" THEN
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,43;"0")
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,44;"0")
   END
  END
  IF ENR_CONTRAT<1>#"02" THEN
   IF BlocageHCongConvCol = "1" THEN
	ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,43;"")
	ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,45;"")
   END
   IF ENR_DETAILCALCUL<7>=0 AND ENR_DETAILCALCUL<21>=0 AND ENR_DETAILCALCUL<22>="" AND ENR_DETAILCALCUL<23>="" THEN
    M=1
    W_INFOS="NON"
    LOOP
     UNTIL ENR_DETAILCALCUL<5,M>="" DO
      IF ENR_DETAILCALCUL<5,M>#0 THEN W_INFOS="OUI"
      M=M+1
    REPEAT
    IF W_INFOS="NON" THEN
     M=1
     LOOP
      UNTIL ENR_DETAILCALCUL<20,M>="" DO
       IF ENR_DETAILCALCUL<20,M>#0 THEN W_INFOS="OUI"
       M=M+1
     REPEAT
    END
    IF W_INFOS="NON" THEN RETURN
   END
  END ELSE
   IF W_SOLDECOMPTE=1 AND CongNPrisConvCol="1" AND W_FINCONGES02=W_PERIODEPAIE[5,2] AND ENR_DETAILCALCUL<7>="" AND ENR_DETAILCALCUL<21>=0 AND ENR_DETAILCALCUL<22>="" THEN
    M=1
    W_INFOS="NON"
    LOOP
     UNTIL ENR_DETAILCALCUL<5,M>="" DO
      IF ENR_DETAILCALCUL<5,M>#0 THEN W_INFOS="OUI"
      M=M+1
    REPEAT
    IF W_INFOS="NON" THEN
     M=1
     LOOP
      UNTIL ENR_DETAILCALCUL<20,M>="" DO
       IF ENR_DETAILCALCUL<20,M>#0 THEN W_INFOS="OUI"
       M=M+1
     REPEAT
    END
    IF W_INFOS="NON" THEN RETURN
   END
   IF ENR_CONTRAT<31>="1" AND IndicConges02ConvCol#"1" THEN
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,43;"0")
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,44;"0")
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,45;"0")
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,46;"0")
   END
  END
 END
  IF W_TYPEACTIVITE="I" THEN
   WRITE ENR_DETAILCALCUL ON F.DETAILCALCUL,W_RUPTCONTRAT:W_PERIODEPAIE
  END ELSE
   IF ENR_DETAILCALCUL<7>=0 AND ENR_DETAILCALCUL<21>=0 THEN
    RETURN
   END ELSE
    WRITE ENR_DETAILCALCUL ON F.DETAILCALCUL,W_CLE
   END
  END
  IF W_BUDGET=1 THEN
   ENR_CONTRAT<25>=ENR_CONTRAT<25>+ENR_DETAILCALCUL<7>
   W_CUMULCHGPAT=0
   FOR G=1 TO DCOUNT(EXTRACT(ENR_DETAILCALCUL,8),CHAR(253))
    W_CUMULCHGPAT=W_CUMULCHGPAT+EXTRACT(ENR_DETAILCALCUL,14,G)
   NEXT G
   ENR_CONTRAT<26>=ENR_CONTRAT<26>+W_CUMULCHGPAT
   ENR_CONTRAT<27>=ENR_CONTRAT<27>+ENR_DETAILCALCUL<6>
   ENR_CONTRAT<28>=ENR_CONTRAT<28>+W_BASERUBSAIMOD
   ENR_CONTRAT<29>=ENR_CONTRAT<29>+W_MONTRUBSAIMOD
   WRITE ENR_CONTRAT ON F.CONTRAT,W_CLE[1,8]:W_ANNEEDADS
  END
 END
END
RETURN
**********
* DETERMINATION DU TAUX HORAIRE
**********
2000 IF W_BUDGET#1 THEN
 W_PARAMS=""
 W_SORTIE=""
 W_PARAMS<1>=CodAidantContrat
 W_PARAMS<2>=W_NOAVENANT
 W_PARAMS<3>=W_PERIODEPAIE
 CALL CALCCOEFFTXHOR("",W_PARAMS,W_SORTIE)
 W_COEFF=W_SORTIE<1>
 W_TAUXHOR=W_SORTIE<2>
 W_TAUXHORDIMJF=W_SORTIE<3>
 IF GrilleContrat#"" THEN
    READ ENR_GRILLESCC FROM F.GRILLESCC,GrilleContrat ELSE ENR_GRILLESCC=""
    TypeGrille=EXTRACT(ENR_GRILLESCC,5)
    IF TypeGrille="C" THEN
       ENR_CONTRAT=REPLACE(ENR_CONTRAT,22,W_NOAVENANT;W_COEFF)
       ENR_CONTRAT=REPLACE(ENR_CONTRAT,23,W_NOAVENANT;W_TAUXHOR)
*       WRITE ENR_CONTRAT ON F.CONTRAT,CodAidantContrat   
    END ELSE 
       ENR_CONTRAT=REPLACE(ENR_CONTRAT,23,W_NOAVENANT;W_TAUXHOR)
*       WRITE ENR_CONTRAT ON F.CONTRAT,CodAidantContrat
    END
 END
END ELSE
 GOSUB 2700
END
W_TAUXHOR=W_TAUXHOR*10
W_TAUXHORDIMJF=W_TAUXHORDIMJF*10
RETURN
**********
* RECHERCHE DU CUMUL BRUT SUR LA DUREE DU CONTRAT "CDD" POUR INDEMNITE FIN CONTRAT 
**********
2100 W_PERIODEDEBCDD=OCONV(DatDebContrat,"D4 ")
W_PERIODEDEBCDD=W_PERIODEDEBCDD[7,4]:W_PERIODEDEBCDD[4,2]
LOOP
 UNTIL W_PERIODEDEBCDD=W_PERIODEPAIE DO
  READ WENR_DETAILCALCUL FROM F.DETAILCALCUL,CodAidantContrat:W_PERIODEDEBCDD THEN
   IF W_PERIODEDEBCDD>=DatMontEnEuro THEN
    W_CUMULBRUTCONTRAT=W_CUMULBRUTCONTRAT+WENR_DETAILCALCUL<7>
   END ELSE
    IF W_PERIODEPAIE>=DatMontEnEuro THEN
     W_CUMULBRUTCONTRAT=W_CUMULBRUTCONTRAT+INT(WENR_DETAILCALCUL<7>*100000/655957+1/2)
    END ELSE
     W_CUMULBRUTCONTRAT=W_CUMULBRUTCONTRAT+WENR_DETAILCALCUL<7>
    END
   END
  END
  W_PERIODEDEBCDD1=W_PERIODEDEBCDD+1
  IF W_PERIODEDEBCDD1[5,2]=13 THEN
   W_PERIODEDEBCDD=W_PERIODEDEBCDD+89
  END ELSE
   W_PERIODEDEBCDD=W_PERIODEDEBCDD1
  END
REPEAT
RETURN
**********
* LECTURE DES INFORMATIONS ELEMENTS DE GESTION PARTICULIER-EMPLOYEUR 
**********
2200 READ ENR_ELTSPARTEMP FROM F.ELTSPARTEMP,CodPartEmp ELSE ENR_ELTSPARTEMP=""
AdhPrevPartEmp=EXTRACT(ENR_ELTSPARTEMP,5)
RadPrevPartEmp=EXTRACT(ENR_ELTSPARTEMP,6)
RETURN
**********
* CUMUL DES HEURES DIRECTES ET DES HEURES DIRECTES EXO DES ARTICLES DE DETAILCALCUL
* CONCERNES SUITE A FIN DE CONTRAT OU FIN DE MODULATION (ET LISSAGE) DE FACON A FAIRE
* UN POINT COMPLET SUR LES BASES EXO ET NON EXO POUR REGULARISATION
**********
2300 IF W_FINMODULATION="OUI" THEN
 IF W_PERIODEPAIE[5,2]="12" THEN
  W_PERDEBREGUL=W_PERIODEPAIE[1,4]:"01"
 END ELSE
  W_PERDEBREGUL=W_PERIODEPAIE-99
 END
END ELSE
 IF W_FINCONTRAT="OUI" THEN
  W_MOISDEBMODUL=MoisFinContAnEtabl+1
  IF W_MOISDEBMODUL="13" THEN W_MOISDEBMODUL="01"
  IF W_MOISDEBMODUL MATCH "1N" THEN W_MOISDEBMODUL="0":W_MOISDEBMODUL
  IF W_PERIODEPAIE[5,2]>W_MOISDEBMODUL THEN
   W_PERDEBREGUL=W_PERIODEPAIE[1,4]:W_MOISDEBMODUL
  END ELSE
   W_PERDEBREGUL=W_PERIODEPAIE[1,4]-1
   W_PERDEBREGUL=W_PERDEBREGUL:W_MOISDEBMODUL
  END
 END
END
W_DATDEBCONTRAT=OCONV(DatDebContrat,"D4 ")
W_DATDEBCONTRAT=W_DATDEBCONTRAT[7,4]:W_DATDEBCONTRAT[4,2]
IF W_DATDEBCONTRAT>W_PERDEBREGUL THEN W_PERDEBREGUL=W_DATDEBCONTRAT
IF ENR_CONTRAT<76,1>#"" THEN
 IF ENR_CONTRAT<76,1>>W_PERDEBREGUL THEN W_PERDEBREGUL=ENR_CONTRAT<76,1>
END
W_HEURESTRAVPREC=0
W_HEURESTRAVEXOPREC=0
W_HEURESTRAVPREC2005=0
W_HEURESTRAVEXOPREC2005=0
W_BASEURSSAFEXO2005=0
W_BASEURSSAFNONEXO2005=0
LOOP
 UNTIL W_PERDEBREGUL=W_PERIODEPAIE DO
  READ W_ENR_DETAILCALCULPREC FROM F.DETAILCALCUL,W_CLE[1,8]:W_PERDEBREGUL THEN
   IF (DecalagePaie=0 AND W_PERDEBREGUL<200601) OR (DecalagePaie=1 AND W_PERDEBREGUL<200512) THEN
    W_HEURESTRAVPREC2005=W_HEURESTRAVPREC2005+EXTRACT(W_ENR_DETAILCALCULPREC,41)
    W_HEURESTRAVEXOPREC2005=W_HEURESTRAVEXOPREC2005+EXTRACT(W_ENR_DETAILCALCULPREC,42)
    D=1
    LOOP
     W_RUBCHARGECALPREC=EXTRACT(W_ENR_DETAILCALCULPREC,8,D)
     UNTIL W_RUBCHARGECALPREC=W_RUBAADEXOAAD OR W_RUBCHARGECALPREC="" DO
      D=D+1
    REPEAT
    IF W_RUBCHARGECALPREC=W_RUBAADEXOAAD THEN
     IF EXTRACT(W_ENR_DETAILCALCULPREC,9,D)="" THEN
      W_BASEURSSAFEXO2005=W_BASEURSSAFEXO2005+EXTRACT(W_ENR_DETAILCALCULPREC,12,D)
     END ELSE
      W_BASEURSSAFEXO2005=W_BASEURSSAFEXO2005+EXTRACT(W_ENR_DETAILCALCULPREC,9,D)
     END
    END
   END ELSE
    W_HEURESTRAVPREC=W_HEURESTRAVPREC+EXTRACT(W_ENR_DETAILCALCULPREC,41)
    W_HEURESTRAVEXOPREC=W_HEURESTRAVEXOPREC+EXTRACT(W_ENR_DETAILCALCULPREC,42)
    W_FINRECHSMIC="NON"
    W_PERDEBREGULSMIC=W_PERDEBREGUL+1
    IF W_PERDEBREGULSMIC[5,2]="13" THEN W_PERDEBREGULSMIC=W_PERDEBREGULSMIC+88
    W_PERDEBREGULSMIC="01/":W_PERDEBREGULSMIC[5,2]:"/":W_PERDEBREGULSMIC[1,4]
    W_PERDEBREGULSMIC=ICONV(W_PERDEBREGULSMIC,"D4/")
    W_PERDEBREGULSMIC=W_PERDEBREGULSMIC-1
    D=1
    LOOP
     UNTIL W_FINRECHSMIC="OUI" DO
      DatSmicHor=EXTRACT(ENR_CONSTANTESPAIE,4,D)
      IF DatSmicHor<=W_PERDEBREGULSMIC THEN
       W_SMICMOYENAAD=W_SMICMOYENAAD+EXTRACT(ENR_CONSTANTESPAIE,3,D)
       W_FINRECHSMIC="OUI"
      END ELSE
       D=D+1
      END
    REPEAT
    W_NBMOISMODUL=W_NBMOISMODUL+1
    W_BASEHEURESBRUTESAAD=W_BASEHEURESBRUTESAAD+EXTRACT(W_ENR_DETAILCALCULPREC,6)+EXTRACT(W_ENR_DETAILCALCULPREC,31)
    D=1
    LOOP
     W_RUBCHARGECALPREC=EXTRACT(W_ENR_DETAILCALCULPREC,8,D)
     UNTIL W_RUBCHARGECALPREC="" DO
      IF W_RUBCHARGECALPREC=W_RUBAADEXOAAD THEN
       IF EXTRACT(W_ENR_DETAILCALCULPREC,9,D)="" THEN
        W_BASERUBAADEXOAAD=W_BASERUBAADEXOAAD+EXTRACT(W_ENR_DETAILCALCULPREC,12,D)
       END ELSE
        W_BASERUBAADEXOAAD=W_BASERUBAADEXOAAD+EXTRACT(W_ENR_DETAILCALCULPREC,9,D)
       END
       W_BASERUBCHGAADURSSAF=W_BASERUBCHGAADURSSAF+EXTRACT(W_ENR_DETAILCALCULPREC,28,D)
      END
      IF W_RUBCHARGECALPREC=W_RUBAADEXOACTIVITE THEN
       IF EXTRACT(W_ENR_DETAILCALCULPREC,9,D)="" THEN
        W_BASERUBAADEXOACTIVITE=W_BASERUBAADEXOACTIVITE+EXTRACT(W_ENR_DETAILCALCULPREC,12,D)
       END ELSE
        W_BASERUBAADEXOACTIVITE=W_BASERUBAADEXOACTIVITE+EXTRACT(W_ENR_DETAILCALCULPREC,9,D)
       END
      END
      IF W_RUBCHARGECALPREC=W_RUBAADNONEXO THEN
       IF EXTRACT(W_ENR_DETAILCALCULPREC,9,D)="" THEN
        W_BASERUBAADNONEXO=W_BASERUBAADNONEXO+EXTRACT(W_ENR_DETAILCALCULPREC,12,D)
       END ELSE
        W_BASERUBAADNONEXO=W_BASERUBAADNONEXO+EXTRACT(W_ENR_DETAILCALCULPREC,9,D)
       END
      END
      D=D+1
    REPEAT
    D=1
    LOOP
     W_RUBCHARGECALPREC=EXTRACT(W_ENR_DETAILCALCULPREC,49,D)
     UNTIL W_RUBCHARGECALPREC=W_RUBAADEXOAAD OR W_RUBCHARGECALPREC="" DO
      D=D+1
    REPEAT
    IF W_RUBCHARGECALPREC=W_RUBAADEXOAAD THEN
     W_BASERUBCHGAADURSSAF=W_BASERUBCHGAADURSSAF+EXTRACT(W_ENR_DETAILCALCULPREC,50,D)
    END
   END
  END
  W_PERDEBREGUL=W_PERDEBREGUL+1
  IF W_PERDEBREGUL[5,2]="13" THEN W_PERDEBREGUL=W_PERDEBREGUL+88
REPEAT
W_HEURESTRAVPREC=W_HEURESTRAVPREC+W_HEURESTRAV
W_HEURESTRAVEXOPREC=W_HEURESTRAVEXOPREC+W_HEURESTRAVEXO
W_POURCENTEXO=INT(W_HEURESTRAVEXOPREC*10000/W_HEURESTRAVPREC+1/2)
W_POURCENTNONEXO=10000-W_POURCENTEXO
W_POURCENTEXO2005=INT(W_HEURESTRAVEXOPREC2005*10000/W_HEURESTRAVPREC2005+1/2)
W_POURCENTNONEXO2005=10000-W_POURCENTEXO2005
W_BASEURSSAFNONEXO2005=INT(W_BASEURSSAFEXO2005*W_POURCENTNONEXO2005/10000+1/2)
W_SMICMOYENAAD=W_SMICMOYENAAD+ValSmicHor
W_NBMOISMODUL=W_NBMOISMODUL+1
W_SMICMOYENAAD=INT(W_SMICMOYENAAD/W_NBMOISMODUL+1/2)
W_BASEHEURESBRUTESAAD=W_BASEHEURESBRUTESAAD+EXTRACT(ENR_DETAILCALCUL,6)
RETURN
**********
* RECHERCHE DES ABSENCES DE L'AIDANT ET MISE EN FORME EN CLAIR POUR EDITION BULLETIN
* + INDICATION PERIODE DE PREAVIS + INDICATION CUMUL HEURES DIFFERENTIELLES (SI EN
* LISSAGE ET PRODUCTION)
**********
2400 IF W_PASSAGE=1 THEN GOTO 2450
ENR_DETAILCALCUL<22>=""
AbsencesCal=LibCommentContrat
CumHresDiffCal=""
IF ConvColContrat="04" THEN
 W_INDICEBASE=W_INDICEBASE/1000
 W_COMPLCONV=W_COMPLCONV/1000
 W_POINTSANC=W_POINTSANC/1000
 AbsencesCal="BASE:":W_INDICEBASE:" COMPL.CONV:":W_COMPLCONV:" ANC:":W_POINTSANC:" "
END
IF LissageContrat=1 AND FonctionContrat#"A" THEN
 IF W_FINCONTRAT="OUI" OR W_FINMODULATION="OUI" THEN
  NULL
 END ELSE
  G=1
  W_CUMULHEURESDIFF=0
  W_PERANCOURSCONTRATBIS=EXTRACT(ENR_CONTRAT,76)
  W_DIFFANCOURSCONTRAT=EXTRACT(ENR_CONTRAT,80)
  W_REGMODANCOURSCONTRAT=EXTRACT(ENR_CONTRAT,100)
  LOOP
   W_PERANCOURSCONTRATTER=W_PERANCOURSCONTRATBIS<1,G>
   UNTIL W_PERANCOURSCONTRATTER="" DO
    W_CUMULHEURESDIFF=W_CUMULHEURESDIFF+W_DIFFANCOURSCONTRAT<1,G>-W_REGMODANCOURSCONTRAT<1,G>
    G=G+1
  REPEAT
  W_CUMULHEURESDIFF=W_CUMULHEURESDIFF "R26,(#7)"
  CumHresDiffCal="CUMUL HEURES DIFF.:":W_CUMULHEURESDIFF
 END
END
W_JOURSABS=0
MAT W_TABLEABS=""
W_REQUETEABS='TSELECT ABSENCESAIDANT AVEC NumMotifAidant <= "17" OR > "21" AND AVEC CodeAidant = "':CodAidantContrat[1,5]:'" AND AVEC DebAbsAidant <= "':W_PERIODEPAIEFIN:'" AND AVEC 2 >= "':W_PERIODEPAIEDEB:'" PAR-DECR DebAbsAidant'
EXECUTE W_REQUETEABS
EXECUTE 'SAUVE-LISTE LISTABS'
EXECUTE 'LISTE LISTABS' RETURNING W_MSG
IF W_MSG<1>="209" THEN GOTO 2450
SELECT F.ABSENCESAIDANT TO LISTABS
W_FINIABS="NON"
A=1
LOOP
 READNEXT W_CLEABS FROM LISTABS ELSE W_FINIABS="OUI"
 UNTIL W_FINIABS="OUI" DO
  READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,W_CLEABS THEN
   W_MOTIFABS=W_CLEABS[6,2]
   W_DEBUTABS=W_CLEABS[8,6]
   W_DEBUTABS1=W_DEBUTABS
   FinAbsAidant=EXTRACT(ENR_ABSENCESAIDANT,2)
   ContratCongAbsAidant=EXTRACT(ENR_ABSENCESAIDANT,26)
   IF ContratCongAbsAidant#"" THEN
    G=1
    LOOP
     W_CONTRATEXCEPTION=EXTRACT(ENR_ABSENCESAIDANT,26,G)
     UNTIL W_CONTRATEXCEPTION=W_CLE[1,8] OR W_CONTRATEXCEPTION="" DO
      G=G+1
    REPEAT
    IF W_CONTRATEXCEPTION=W_CLE[1,8] THEN
     IF EXTRACT(ENR_ABSENCESAIDANT,21,G)="N" THEN
      W_DEBUTABS=""
      FinAbsAidant=""
     END ELSE
      W_DEBUTABS=EXTRACT(ENR_ABSENCESAIDANT,22,G)
      FinAbsAidant=EXTRACT(ENR_ABSENCESAIDANT,24,G)
     END
    END
   END
   IF W_DEBUTABS="" AND FinAbsAidant="" THEN
    NULL
   END ELSE
    IF W_DEBUTABS<W_PERIODEPAIEDEB THEN W_DEBUTABS=W_PERIODEPAIEDEB
    IF W_DEBUTABS<DatDebContrat THEN W_DEBUTABS=DatDebContrat
    IF W_DEBUTABS>FinAbsAidant THEN W_DEBUTABS=""
    IF W_DEBUTABS>W_PERIODEPAIEFIN THEN W_DEBUTABS=""
    IF DatFinContrat#"" AND W_DEBUTABS>DatFinContrat THEN W_DEBUTABS=""
    W_DEBUTABS2=W_DEBUTABS
    IF W_DEBUTABS#"" THEN
     W_DEBUTABS=OCONV(W_DEBUTABS,"D4 ")
     W_DEBUTABS=W_DEBUTABS[1,2]
    END
    IF FinAbsAidant>W_PERIODEPAIEFIN THEN FinAbsAidant=W_PERIODEPAIEFIN
    IF DatFinContrat#"" THEN
     IF FinAbsAidant>DatFinContrat THEN FinAbsAidant=DatFinContrat
    END
    IF FinAbsAidant<DatDebContrat THEN FinAbsAidant=""

    IF FinAbsAidant=W_PERIODEPAIEFIN THEN
     IF W_MOTIFABS<="06" OR W_MOTIFABS="13" OR W_MOTIFABS="12" THEN
      W_ABSENCEDERNIERJOUR="OUI"
      IF FinAbsAidant-W_DEBUTABS1>180 AND W_MOTIFABS#"03" THEN
       W_ABSENCEDERNIERJOUR="OUIFIN"
       W_HEURESREFABSENCE=0
      END ELSE   
       IF TypeSalContrat="M" THEN
        IF W_MOTIFABS="03" THEN
         W_HEURESREFABSENCE=INT(W_HEURESMENSCONTRAT/2+1/2)
        END ELSE
         W_HEURESREFABSENCE=W_HEURESMENSCONTRAT
        END
       END ELSE
        IF W_MOTIFABS<="06" THEN
         Z=1
         LOOP
          EmployAbsAidant=EXTRACT(ENR_ABSENCESAIDANT,13,Z)
          UNTIL EmployAbsAidant="" OR EmployAbsAidant=AssocContrat DO
           Z=Z+1
         REPEAT
         IF EmployAbsAidant=AssocContrat THEN
          IF W_MOTIFABS="03" THEN
           W_HEURESREFABSENCE=INT(EXTRACT(ENR_ABSENCESAIDANT,15,Z)/2+1/2)
          END ELSE
           W_HEURESREFABSENCE=EXTRACT(ENR_ABSENCESAIDANT,15,Z)
          END
         END ELSE
          IF W_MOTIFABS="03" THEN
           W_HEURESREFABSENCE=INT(W_HEURESMENSCONTRAT/2+1/2)
          END ELSE
           W_HEURESREFABSENCE=W_HEURESMENSCONTRAT
          END
         END
        END ELSE
         W_HEURESREFABSENCE=W_HEURESMENSCONTRAT
        END
       END          
      END
     END
    END ELSE
     IF W_MOTIFABS<="06" AND W_HEURESREFABSENCE=0 AND TypeSalContrat#"M" THEN
      Z=1
      LOOP
       EmployAbsAidant=EXTRACT(ENR_ABSENCESAIDANT,13,Z)
       UNTIL EmployAbsAidant="" OR EmployAbsAidant=AssocContrat DO
        Z=Z+1
      REPEAT
      IF EmployAbsAidant=AssocContrat THEN
       IF W_MOTIFABS="03" THEN
        W_HEURESREFABSENCE=INT(EXTRACT(ENR_ABSENCESAIDANT,15,Z)/2+1/2)
       END ELSE
        W_HEURESREFABSENCE=EXTRACT(ENR_ABSENCESAIDANT,15,Z)
       END
      END ELSE
       IF W_MOTIFABS="03" THEN
        W_HEURESREFABSENCE=INT(W_HEURESMENSCONTRAT/2+1/2)
       END ELSE
        W_HEURESREFABSENCE=W_HEURESMENSCONTRAT
       END
      END
     END
    END
    IF W_MOTIFABS="03" AND W_DEBUTABS2#"" THEN
     W_JOURABSMITPSTHERAP=W_JOURABSMITPSTHERAP+FinAbsAidant-W_DEBUTABS2+1
     IF W_HEURESREFMITPSTHERAP=0 THEN
      IF TypeSalContrat="M" THEN
       W_HEURESREFMITPSTHERAP=W_HEURESMENSCONTRAT
      END ELSE
       Z=1
       LOOP
        EmployAbsAidant=EXTRACT(ENR_ABSENCESAIDANT,13,Z)
        UNTIL EmployAbsAidant="" OR EmployAbsAidant=AssocContrat DO
         Z=Z+1
       REPEAT
       IF EmployAbsAidant=AssocContrat THEN
        W_HEURESREFMITPSTHERAP=EXTRACT(ENR_ABSENCESAIDANT,15,Z)
       END ELSE
        W_HEURESREFMITPSTHERAP=W_HEURESMENSCONTRAT
       END
      END
     END
    END
    IF FinAbsAidant#"" THEN
     FinAbsAidant=OCONV(FinAbsAidant,"D4 ")
     FinAbsAidant=FinAbsAidant[1,2]
    END
   END
   IF W_DEBUTABS#"" AND FinAbsAidant#"" THEN
* classement des absences dans la table en fonction des motifs d'absences avec en priorit
* 14 (congs pays), puis 15 (congs fractionnement), puis 16 (cong anciennet), puis 01
* (maladie), puis les autres
    IF W_MOTIFABS="14" OR W_MOTIFABS="15" OR W_MOTIFABS="16" OR W_MOTIFABS="01" THEN
     B=1
     W_RECHABS="NON"
     LOOP
      UNTIL W_RECHABS="OUI" OR W_TABLEABS(B,1)="" DO
       BEGIN CASE
        CASE W_MOTIFABS="14"
         FOR C=A TO 2 STEP -1
          W_TABLEABS(C,1)=W_TABLEABS(C-1,1)
          W_TABLEABS(C,2)=W_TABLEABS(C-1,2)
          W_TABLEABS(C,3)=W_TABLEABS(C-1,3)
         NEXT C
         W_TABLEABS(1,1)=W_MOTIFABS
         W_TABLEABS(1,2)=W_DEBUTABS
         W_TABLEABS(1,3)=FinAbsAidant
         W_RECHABS="OUI"
        CASE W_MOTIFABS="15"
         IF W_TABLEABS(B,1)="14" THEN
          B=B+1
         END ELSE
          FOR C=A TO B+1 STEP -1
           W_TABLEABS(C,1)=W_TABLEABS(C-1,1)
           W_TABLEABS(C,2)=W_TABLEABS(C-1,2)
           W_TABLEABS(C,3)=W_TABLEABS(C-1,3)
          NEXT C
          W_TABLEABS(B,1)=W_MOTIFABS
          W_TABLEABS(B,2)=W_DEBUTABS
          W_TABLEABS(B,3)=FinAbsAidant
          W_RECHABS="OUI"
         END
        CASE W_MOTIFABS="16"
         IF W_TABLEABS(B,1)="14" OR W_TABLEABS(B,1)="15" THEN
          B=B+1
         END ELSE
          FOR C=A TO B+1 STEP -1
           W_TABLEABS(C,1)=W_TABLEABS(C-1,1)
           W_TABLEABS(C,2)=W_TABLEABS(C-1,2)
           W_TABLEABS(C,3)=W_TABLEABS(C-1,3)
          NEXT C
          W_TABLEABS(B,1)=W_MOTIFABS
          W_TABLEABS(B,2)=W_DEBUTABS
          W_TABLEABS(B,3)=FinAbsAidant
          W_RECHABS="OUI"
         END
        CASE W_MOTIFABS="01"
         IF W_TABLEABS(B,1)="14" OR W_TABLEABS(B,1)="15" OR W_TABLEABS(B,1)="16" THEN
          B=B+1
         END ELSE
          FOR C=A TO B+1 STEP -1
           W_TABLEABS(C,1)=W_TABLEABS(C-1,1)
           W_TABLEABS(C,2)=W_TABLEABS(C-1,2)
           W_TABLEABS(C,3)=W_TABLEABS(C-1,3)
          NEXT C
          W_TABLEABS(B,1)=W_MOTIFABS
          W_TABLEABS(B,2)=W_DEBUTABS
          W_TABLEABS(B,3)=FinAbsAidant
          W_RECHABS="OUI"
         END
       END CASE
     REPEAT
     IF W_TABLEABS(B,1)="" THEN
      W_TABLEABS(B,1)=W_MOTIFABS
      W_TABLEABS(B,2)=W_DEBUTABS
      W_TABLEABS(B,3)=FinAbsAidant
     END
    END ELSE
     W_TABLEABS(A,1)=W_MOTIFABS
     W_TABLEABS(A,2)=W_DEBUTABS
     W_TABLEABS(A,3)=FinAbsAidant
    END
    A=A+1
   END
  END
REPEAT
EXECUTE 'EFFACER-LISTE LISTABS'
* comptabilisation du nombre de jours d'absences autre que pour congs en vue maj suivi
* des contrats
A=1
LOOP
 UNTIL W_TABLEABS(A,1)="" DO
  IF W_TABLEABS(A,1)<="06" OR W_TABLEABS(A,1)="12" OR W_TABLEABS(A,1)="13" OR W_TABLEABS(A,1)="22" OR W_TABLEABS(A,1)="23" THEN
   IF W_TABLEABS(A,1)="03" THEN
    W_JOURSABS=W_JOURSABS+INT((W_TABLEABS(A,3)-W_TABLEABS(A,2)+1)/2)
   END ELSE
    W_JOURSABS=W_JOURSABS+W_TABLEABS(A,3)-W_TABLEABS(A,2)+1
   END
  END
  A=A+1
REPEAT
2450 IF W_PASSAGE=0 THEN RETURN
* mise en forme des libells en clair des absences dans la limite de 78 caractres pour
* dition sur bulletin
A=1
W_FINMISENFORME="NON"
LOOP
 IF W_TABLEABS(A,1)="" THEN W_FINMISENFORME="OUI"
 UNTIL W_FINMISENFORME="OUI" DO
  BEGIN CASE
   CASE W_TABLEABS(A,1)="01"
    W_LIBELLEABS="MALADIE"
   CASE W_TABLEABS(A,1)="02"
    W_LIBELLEABS="MATERNITE"
   CASE W_TABLEABS(A,1)="03"
    W_LIBELLEABS="MI-TPS THERAP."
   CASE W_TABLEABS(A,1)="04"
    W_LIBELLEABS="ACC TRAV."
   CASE W_TABLEABS(A,1)="05"
    W_LIBELLEABS="ACC TRAJET"
   CASE W_TABLEABS(A,1)="06"
    W_LIBELLEABS="MAL. PROF."
   CASE W_TABLEABS(A,1)="07"
    W_LIBELLEABS="ENF. MAL."
   CASE W_TABLEABS(A,1)="08"
    W_LIBELLEABS="MARIAGE"
   CASE W_TABLEABS(A,1)="09"
    W_LIBELLEABS="EVT. FAM."
   CASE W_TABLEABS(A,1)="10"
    W_LIBELLEABS="NAISS."
   CASE W_TABLEABS(A,1)="11"
    W_LIBELLEABS="DEMENAG."
   CASE W_TABLEABS(A,1)="12"
    W_LIBELLEABS="SANS SOLDE"
   CASE W_TABLEABS(A,1)="13"
    W_LIBELLEABS="CONGE PARENTAL"
   CASE W_TABLEABS(A,1)="14"
    W_LIBELLEABS="CONGES"
   CASE W_TABLEABS(A,1)="15"
    W_LIBELLEABS="CONGES FRACT."
   CASE W_TABLEABS(A,1)="16"
    W_LIBELLEABS="CONGES ANC."
   CASE W_TABLEABS(A,1)="17"
    W_LIBELLEABS="RC"
   CASE W_TABLEABS(A,1)="22"
    W_LIBELLEABS="ABSENCE"
   CASE W_TABLEABS(A,1)="23"
    W_LIBELLEABS="INJUSTIFIE"
   CASE W_TABLEABS(A,1)="24"
    W_LIBELLEABS="FORM."
  END CASE
  IF W_TABLEABS(A,2)=W_TABLEABS(A,3) THEN
   W_LIBELLEABS=W_LIBELLEABS:" LE ":W_TABLEABS(A,2)
  END ELSE
   W_LIBELLEABS=W_LIBELLEABS:" DU ":W_TABLEABS(A,2):" AU ":W_TABLEABS(A,3)
  END
  W_CARACTLIB=LEN(W_LIBELLEABS)
  W_CARACTABS=LEN(AbsencesCal)
  IF W_CARACTLIB+W_CARACTABS>78 THEN
   W_FINMISENFORME="OUI"
  END ELSE
   IF AbsencesCal="" THEN
    AbsencesCal=W_LIBELLEABS
   END ELSE
    AbsencesCal=AbsencesCal:"/":W_LIBELLEABS
   END
  END
  A=A+1
REPEAT
W_DEBPREAVIS1=""
W_FINPREAVIS1=""
W_DEBPREAVIS2=""
W_FINPREAVIS2=""
W_LIBPREAVIS=""
IF DebPayeContrat#"" THEN
 IF DebEffContrat="" THEN
  W_DEBPREAVIS1=DebPayeContrat
  W_FINPREAVIS1=FinPayeContrat
 END ELSE   
  IF DebEffContrat=FinPayeContrat+1 THEN
   W_DEBPREAVIS1=DebPayeContrat
   W_FINPREAVIS1=FinEffContrat
  END ELSE
   IF DebPayeContrat=FinEffContrat+1 THEN
    W_DEBPREAVIS1=DebEffContrat
    W_FINPREAVIS1=FinPayeContrat
   END ELSE
    IF DebPayeContrat<DebEffContrat THEN
     W_DEBPREAVIS1=DebPayeContrat
     W_FINPREAVIS1=FinPayeContrat
     W_DEBPREAVIS2=DebEffContrat
     W_FINPREAVIS2=FinEffContrat
    END ELSE
     W_DEBPREAVIS1=DebEffContrat
     W_FINPREAVIS1=FinEffContrat
     W_DEBPREAVIS2=DebPayeContrat
     W_FINPREAVIS2=FinPayeContrat
    END
   END
  END
 END
END ELSE
 IF DebEffContrat#"" THEN
  W_DEBPREAVIS1=DebEffContrat
  W_FINPREAVIS1=FinEffContrat
 END
END
IF W_DEBPREAVIS1#"" OR W_DEBPREAVIS2#"" THEN
 W_DEBPREAVIS11=""
 W_FINPREAVIS11=""
 W_DEBPREAVIS22=""
 W_FINPREAVIS22=""
 IF W_DEBPREAVIS1#"" THEN
  W_DEBPREAVIS1=OCONV(W_DEBPREAVIS1,"D4-")
  W_DEBPREAVIS11=W_DEBPREAVIS1[7,4]:W_DEBPREAVIS1[4,2]
  W_FINPREAVIS1=OCONV(W_FINPREAVIS1,"D4-")
  W_FINPREAVIS11=W_FINPREAVIS1[7,4]:W_FINPREAVIS1[4,2]
 END
 IF W_DEBPREAVIS2#"" THEN
  W_DEBPREAVIS2=OCONV(W_DEBPREAVIS2,"D4-")
  W_DEBPREAVIS22=W_DEBPREAVIS2[7,4]:W_DEBPREAVIS2[4,2]
  W_FINPREAVIS2=OCONV(W_FINPREAVIS2,"D4-")
  W_FINPREAVIS22=W_FINPREAVIS2[7,4]:W_FINPREAVIS2[4,2]
 END
 IF DernBullContrat=W_PERIODEPAIE THEN
  IF W_DEBPREAVIS11#"" THEN
   IF W_FINPREAVIS11>=W_PERIODEPAIE THEN
    IF W_DEBPREAVIS11>=W_PERIODEPAIE THEN
     W_LIBPREAVIS="PREAVIS DU ":W_DEBPREAVIS1[1,5]:" AU ":W_FINPREAVIS1[1,5]
    END ELSE
     W_LIBPREAVIS="PREAVIS DU 01-":W_PERIODEPAIE[5,2]:" AU ":W_FINPREAVIS1[1,5]
    END
   END
  END
  IF W_DEBPREAVIS22#"" THEN
   IF W_FINPREAVIS22>=W_PERIODEPAIE THEN
    IF W_DEBPREAVIS22>=W_PERIODEPAIE THEN
     IF W_LIBPREAVIS="" THEN
      W_LIBPREAVIS="PREAVIS DU ":W_DEBPREAVIS2[1,5]:" AU ":W_FINPREAVIS2[1,5]
     END ELSE
      W_LIBPREAVIS=W_LIBPREAVIS:" ET DU ":W_DEBPREAVIS2[1,5]:" AU ":W_FINPREAVIS2[1,5]
     END
    END ELSE
     IF W_LIBPREAVIS="" THEN
      W_LIBPREAVIS="PREAVIS DU 01-":W_PERIODEPAIE[5,2]:" AU ":W_FINPREAVIS2[1,5]
     END ELSE
      W_LIBPREAVIS=W_LIBPREAVIS:" ET DU 01-":W_PERIODEPAIE[5,2]:" AU ":W_FINPREAVIS1[1,5]
     END
    END
   END
  END     
 END ELSE
  IF W_DEBPREAVIS11#"" THEN
   IF W_FINPREAVIS11>=W_PERIODEPAIE THEN
    IF W_DEBPREAVIS11=W_PERIODEPAIE THEN
     W_LIBPREAVIS="PREAVIS DU ":W_DEBPREAVIS1[1,5]:" AU "
    END ELSE
     IF W_DEBPREAVIS11<W_PERIODEPAIE THEN
      W_LIBPREAVIS="PREAVIS DU 01-":W_PERIODEPAIE[5,2]:" AU "
     END
    END
    IF W_FINPREAVIS11=W_PERIODEPAIE THEN
     W_LIBPREAVIS=W_LIBPREAVIS:W_FINPREAVIS1[1,5]
    END ELSE
     IF W_DEBPREAVIS11<=W_PERIODEPAIE THEN W_LIBPREAVIS=W_LIBPREAVIS:W_PERIODEPAIEFIN1[1,2]:"-":W_PERIODEPAIEFIN1[4,2]
    END
   END
  END
  IF W_DEBPREAVIS22#"" THEN
   IF W_FINPREAVIS22>=W_PERIODEPAIE THEN
    IF W_DEBPREAVIS22=W_PERIODEPAIE THEN
     IF W_LIBPREAVIS="" THEN
      W_LIBPREAVIS="PREAVIS DU ":W_DEBPREAVIS2[1,5]:" AU "
     END ELSE
      W_LIBPREAVIS=W_LIBPREAVIS:" ET DU ":W_DEBPREAVIS2[1,5]:" AU "
     END
     IF W_FINPREAVIS22=W_PERIODEPAIE THEN
      W_LIBPREAVIS=W_LIBPREAVIS:W_FINPREAVIS2[1,5]
     END ELSE
      W_LIBPREAVIS=W_LIBPREAVIS:W_PERIODEPAIEFIN1[1,2]:"-":W_PERIODEPAIEFIN1[4,2]
     END 
    END ELSE
     IF W_DEBPREAVIS22<W_PERIODEPAIE THEN
      IF W_LIBPREAVIS="" THEN
       W_LIBPREAVIS="PREAVIS DU 01-":W_PERIODEPAIE[5,2]:" AU "
      END ELSE
       W_LIBPREAVIS=W_LIBPREAVIS:" ET DU 01-":W_PERIODEPAIE[5,2]:" AU "
      END
      IF W_FINPREAVIS22=W_PERIODEPAIE THEN
       W_LIBPREAVIS=W_LIBPREAVIS:W_FINPREAVIS2[1,5]
      END ELSE
       W_LIBPREAVIS=W_LIBPREAVIS:W_PERIODEPAIEFIN1[1,2]:"-":W_PERIODEPAIEFIN1[4,2]
      END
     END  
    END
   END 
  END     
 END
END
IF W_LIBPREAVIS#"" THEN
 W_CARACTLIB=LEN(W_LIBPREAVIS)
 W_CARACTABS=LEN(AbsencesCal)
 IF W_CARACTLIB+W_CARACTABS<78 THEN
  IF AbsencesCal="" THEN
   AbsencesCal=W_LIBPREAVIS
  END ELSE
   AbsencesCal=AbsencesCal:"/":W_LIBPREAVIS
  END
 END
END
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,22;AbsencesCal)
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,23;CumHresDiffCal)
RETURN
**********
* RECHERCHE SOLDE CONGES PAYES ET SOLDE CONGES D'ANCIENNETE POUR EDITION BULLETIN
**********
2500 IF W_FINCONTRAT="OUI" THEN
 W_SOLDECONGESHEURES=0
 W_SOLDECONGESJOURS=0
 W_SOLDEANCHEURES=0
 W_SOLDEANCJOURS=0
END ELSE
 W_SOLDECONGESJOURS=CPRestConsoContrat+CFRestConsoContrat-W_JRSCONGESPRIS-CPCoursPrisJContrat
 IF W_SOLDECONGESJOURS<=0 THEN
  W_SOLDECONGESHEURES=0
 END ELSE
  IF CongOuvrConvCol=1 THEN
   IF ENR_CONTRAT<5>="M" THEN
    W_SOLDECONGESHEURES=INT(JrOuvrMContrat*6/5+1/2)
   END ELSE
    W_SOLDECONGESHEURES=INT(JrOuvrHContrat*6/5+1/2)
   END
   W_SOLDECONGESHEURES=INT(W_SOLDECONGESJOURS*W_SOLDECONGESHEURES/100+1/2)
  END ELSE
   IF ENR_CONTRAT<5>="M" THEN
    W_SOLDECONGESHEURES=INT(W_SOLDECONGESJOURS*JrOuvrMContrat/100+1/2)
   END ELSE
    W_SOLDECONGESHEURES=INT(W_SOLDECONGESJOURS*JrOuvrHContrat/100+1/2)
   END
  END
 END
 W_SOLDEANCJOURS=CAncRestContrat-W_JRSANCPRIS
 IF W_SOLDEANCJOURS<=0 THEN
  W_SOLDEANCHEURES=0
 END ELSE
  IF AncOuvrConvCol=1 THEN
   IF ENR_CONTRAT<5>="M" THEN
    W_SOLDEANCHEURES=INT(JrOuvrMContrat*6/5+1/2)
   END ELSE
    W_SOLDEANCHEURES=INT(JrOuvrHContrat*6/5+1/2)
   END
   W_SOLDEANCHEURES=INT(W_SOLDEANCJOURS*W_SOLDEANCHEURES/100+1/2)
  END ELSE
   IF ENR_CONTRAT<5>="M" THEN
    W_SOLDEANCHEURES=INT(W_SOLDEANCJOURS*JrOuvrMContrat/100+1/2)
   END ELSE
    W_SOLDEANCHEURES=INT(W_SOLDEANCJOURS*JrOuvrHContrat/100+1/2)
   END
  END
 END
END
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,43;W_SOLDECONGESHEURES)
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,44;W_SOLDECONGESJOURS)
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,45;W_SOLDEANCHEURES)
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,46;W_SOLDEANCJOURS)
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,47;W_JRSCONGESPRIS+W_JRSANCPRIS)
RETURN
**********
* PAIEMENT DES CONGES A FIN PERIODE DE REFERENCE SI CCN LE PERMET
**********
2600 CodRubSai=802
GOSUB 1200 ;*lecture RUBSAISIE
IF CongOuvrConvCol=2 THEN
 W_BASERUBSAI=INT(W_SOLDECONGESJOURS*JrOuvrHContrat/100+1/2)
END ELSE
 W_BASERUBSAI=INT(W_SOLDECONGESJOURS*JrOuvrHContrat*12/1000+1/2)
END
IF W_BASERUBSAI#0 THEN
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;CodRubSai)
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
 IF TauxHorPlan35HEtab="" OR TauxHorPlan35HEtab="0" THEN
  IF W_TAUXHOR<ValSmicHor*100 AND NatureContrat="" THEN
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;ValSmicHor*100)
   W_MONTRUBSAI=INT(W_BASERUBSAI*ValSmicHor/100+1/2)
  END ELSE
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
   W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHOR/10000+1/2)
  END
 END ELSE
  IF ValSmicHor<TauxHorPlan35HEtab THEN
   IF W_TAUXHOR<TauxHorPlan35HEtab*100 AND NatureContrat="" THEN
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;TauxHorPlan35HEtab*100)
    W_MONTRUBSAI=INT(W_BASERUBSAI*TauxHorPlan35HEtab/100+1/2)
   END ELSE
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
    W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHOR/10000+1/2)
   END
  END ELSE
   IF W_TAUXHOR<ValSmicHor*100 AND NatureContrat="" THEN
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;ValSmicHor*100)
    W_MONTRUBSAI=INT(W_BASERUBSAI*ValSmicHor/100+1/2)
   END ELSE
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
    W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHOR/10000+1/2)
   END
  END
 END
 W_HEURESORANGE=W_HEURESORANGE+W_BASERUBSAI
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAI+ENR_DETAILCALCUL<6>)
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
 W_SOLDECONGESJOURS=0
 W_SOLDECONGESHEURES=0
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,43;W_SOLDECONGESHEURES)
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,44;W_SOLDECONGESJOURS)
END
RETURN
**********
* RECHERCHE TAUX HORAIRE EN GESTION BUDGETAIRE
**********
2700 W_TYPEPERSBUDGETMOI="" 
IF GrilleContrat#"" AND GrilleContrat#"0" THEN
 W_GRILLE=GrilleContrat
 IF CcuConvCol#"VRAI" THEN
  W_DateDepGrille=DepartGrilContrat
 END ELSE
  IF W_PERIODEPAIE<200507 THEN
   W_DateDepGrille=DepartGrilContrat
  END ELSE
   IF W_PERIODEPAIE<200607 THEN
    W_DATEANC=DepartGrilContrat
    W_DATEANC=OCONV(W_DATEANC,"D4/")
    IF W_GRILLE[3,1]="2" THEN
     IF W_GRILLE[4,2]#"00" AND DatDebContrat> "13332" THEN
      W_NOUVAN=W_DATEANC[7,4] + 1
      W_DATEANC=W_DATEANC[1,6]:W_NOUVAN
     END ELSE
      IF DatDebContrat<= "13332" THEN
       IF W_GRILLE[4,2]="00" OR W_GRILLE[4,2]="01" OR W_GRILLE[4,2]="02" OR W_GRILLE[4,2]="03" THEN
        W_NOUVAN=W_DATEANC[7,4]-1
        W_DATEANC=W_DATEANC[1,6]:W_NOUVAN
       END
      END
     END
     W_GRILLE=W_GRILLE[1,2]:'3':W_GRILLE[4,2]
    END
    W_DATEANC=ICONV(W_DATEANC,"D4/")
    W_DateDepGrille=W_DATEANC
   END ELSE
    W_DateDepGrille=DepartGrilContrat
   END
  END
 END
 W_DateDepGrille=OCONV(W_DateDepGrille,"D4/")
 W_AncMoins1="FAUX"
 IF W_DateDepGrille[4,2] = "07" AND W_DateDepGrille[1,5] # "01/07" THEN
  W_AncMoins1="VRAI"
 END
 W_DateDepGrille=W_DateDepGrille[7,4]:W_DateDepGrille[4,2]
 IF CcuConvCol="VRAI" THEN
  IF W_PERIODEPAIE<"200607" THEN
   IF W_PERIODEPAIE[5,2]<"7" THEN
    W_PeriodePaieBis=W_PERIODEPAIE[1,4]-1:"07"
    W_NbAnnees=W_PeriodePaieBis-W_DateDepGrille
   END ELSE
    W_PeriodePaieBis=W_PERIODEPAIE[1,4]:"07"
    W_NbAnnees=W_PeriodePaieBis-W_DateDepGrille
   END
   IF W_AncMoins1="VRAI" THEN
    W_NbAnnees=W_NbAnnees-1
   END
  END ELSE
   W_NbAnnees=W_PERIODEPAIE-W_DateDepGrille
  END
 END ELSE
  W_NbAnnees=W_PERIODEPAIE-W_DateDepGrille
 END
 W_NbAnnees=INT(W_NbAnnees/100)
 IF W_NbAnnees<0 THEN W_NbAnnees=0
 IF W_PERIODEPAIE<"200607" AND CcuConvCol="VRAI" THEN
  IF W_DateDepGrille[5,2]>7 THEN
   W_NbMois=12+7-W_DateDepGrille[5,2]
  END ELSE
   W_NbMois=7-W_DateDepGrille[5,2]
  END
 END ELSE
  IF W_PERIODEPAIE[5,2] < W_DateDepGrille[5,2] THEN
   W_NbMois=12+W_PERIODEPAIE[5,2]-W_DateDepGrille[5,2]
  END ELSE
   W_NbMois=W_PERIODEPAIE[5,2]-W_DateDepGrille[5,2]
  END
 END
 W_NbMois=INT(W_NbMois*100/12+1/2)
 IF W_NbMois MATCH "1N" THEN W_NbMois="0":W_NbMois
 W_NbAnnees=W_NbAnnees:W_NbMois
 READ ENR_GRILLESCC FROM F.GRILLESCC,W_GRILLE ELSE ENR_GRILLESCC=""
 IF CcuConvCol#"VRAI" THEN
  W_TYPEPERSBUDGETMOI=W_GRILLE
 END ELSE
  W_TYPEPERSBUDGETMOI=ENR_GRILLESCC<7>
 END
 G=1
 W_FinGrille="NON"
 W_TAUXHOR=0
 LOOP
  AncDebGrille=ENR_GRILLESCC<2,G>
  AncFinGrille=ENR_GRILLESCC<3,G>
  ValGrille=ENR_GRILLESCC<4,G>
  IF AncDebGrille="" THEN
   W_TAUXHOR=ENR_GRILLESCC<4,G-1>
   W_FinGrille="OUI"
  END
  UNTIL W_FinGrille="OUI" DO
   IF AncDebGrille<=W_NbAnnees AND W_NbAnnees<AncFinGrille THEN
    W_TAUXHOR=ValGrille
    W_FinGrille="OUI"
   END ELSE
    G=G+1
   END
 REPEAT
 IF W_TAUXHOR#0 THEN
  IF ENR_GRILLESCC<5>="C" THEN
   W_TAUXHOR=INT((W_TAUXHOR/1000)*PrixPointConvCol*1000/W_HORMOISETABL+1/2)
  END ELSE
   W_TAUXHOR=W_TAUXHOR+INT(W_TAUXHOR*PourcentAugConvCol/10000+1/2)
  END   
 END
 W_TAUXHORDIMJF=0
 IF ConvColContrat="01" OR ConvColContrat="06" THEN
  G=1
  W_FINGRILLE="NON"
  LOOP
   AncDebGrille=ENR_GRILLESCC<2,G>
   AncFinGrille=ENR_GRILLESCC<3,G>
   ValGrille=ENR_GRILLESCC<4,G>
   IF AncDebGrille="" THEN
    W_FINGRILLE="OUI"
    W_TAUXHORDIMJF=ENR_GRILLESCC<4,G-1>
   END
   UNTIL W_FINGRILLE="OUI" DO
    IF AncDebGrille<=1500 AND 1500<=AncFinGrille THEN
     W_TAUXHORDIMJF=ValGrille
     W_FINGRILLE="OUI"
    END ELSE
     G=G+1
    END
  REPEAT
  IF W_TAUXHORDIMJF#0 THEN
   IF ENR_GRILLESCC<5>="C" THEN
    W_TAUXHORDIMJF=INT((W_TAUXHORDIMJF/1000)*PrixPointConvCol*1000/W_HORMOISETABL+1/2)
   END ELSE
    W_TAUXHORDIMJF=W_TAUXHORDIMJF+INT(W_TAUXHORDIMJF*PourcentAugConvCol/10000+1/2)
   END   
  END
 END ELSE
  W_TAUXHORDIMJF=W_TAUXHOR
 END
END ELSE
 W_TAUXHOR=TauxHorContrat
 W_TAUXHORDIMJF=W_TAUXHOR
END
RETURN
**********
* CALCUL INDEMNITE LCENCIEMENT OU RETRAITE EN GESTION BUDGETAIRE
**********
2800 W_Paie=INT(DureeWContrat*W_TAUXHOR/10000+1/2)
W_AnneeFin=OCONV(DatFinContrat,"D4/")
W_AnneeDebut=OCONV(DatDebContrat,"D4/")
W_AnneeFaite=W_AnneeFin[7,4]-W_AnneeDebut[7,4]
W_MoisFait=W_AnneeFin[4,2]-W_AnneeDebut[4,2]
W_JourFait=W_AnneeFin[1,2]-W_AnneeDebut[1,2]
IF W_JourFait<0 THEN
 W_MoisFait=W_MoisFait-1
END
IF W_MoisFait<0 THEN
 W_AnneeFaite=W_AnneeFaite-1
 W_MoisFait=12+W_MoisFait
END
IF W_TYPELICRET="L" THEN
 BEGIN CASE
  CASE CodeConvCol="01" OR CodeConvCol="02" OR CodeConvCol="07" OR CodeConvCol="08" OR CodeConvCol="09"
   W_Temp=W_MoisFait+W_AnneeFaite*12
   IF W_Temp>120 THEN
    W_AnneeFaite=W_AnneeFaite-10
    MontIndemnite=W_Paie+W_Paie/6*W_AnneeFaite+W_Paie*W_MoisFait/120+W_Paie*W_MoisFait/180    
   END ELSE
    MontIndemnite=W_Paie*W_AnneeFaite*1/10+W_Paie*W_MoisFait/120
   END
  CASE CodeConvCol="03"
   IF FonctionContrat="A" THEN
    IF DatDebContrat <= 3784 THEN ;* 11 mai 1978
     MontIndemnite=W_Paie*6
    END ELSE
     IF W_AnneeFaite < 5 THEN
      MontIndemnite=W_Paie*1/5*W_AnneeFaite+W_MoisFait/12*1/5*W_Paie
     END ELSE
      IF W_AnneeFaite > 5 THEN
       MontIndemnite=W_Paie*3
      END ELSE
       MontIndemnite=W_Paie*1/2*W_AnneeFaite+W_MoisFait/12*1/2*W_Paie
      END
     END
    END
   END ELSE
    W_Temp=W_MoisFait+W_AnneeFaite*12
    IF W_Temp>120 THEN
     W_AnneeFaite=W_AnneeFaite-10
     MontIndemnite=W_Paie+W_Paie/6*W_AnneeFaite+W_Paie*W_MoisFait/120+W_Paie*W_MoisFait/180    
    END ELSE
     MontIndemnite=W_Paie*W_AnneeFaite*1/10+W_Paie*W_MoisFait/120
    END
   END
  CASE CodeConvCol="04" OR CodeConvCol="05"
   IF W_AnneeFaite > 11 THEN
    MontIndemnite=W_Paie*6
   END ELSE
    MontIndemnite=W_Paie*1/2*W_AnneeFaite+W_MoisFait/12*1/2*W_Paie
   END
  CASE CodeConvCol="06"
   MontIndemnite=W_Paie/5*W_AnneeFaite+W_MoisFait/12*W_Paie/5
 END CASE
END ELSE
 BEGIN CASE
  CASE CodeConvCol="01"
   BEGIN CASE
    CASE W_AnneeFaite>4 AND W_AnneeFaite<10
     MontIndemnite=W_Paie*1/4
    CASE W_AnneeFaite>9 AND W_AnneeFaite<15
     MontIndemnite=W_Paie*1/2
    CASE W_AnneeFaite>14 AND W_AnneeFaite<20
     MontIndemnite=W_Paie
    CASE W_AnneeFaite>19 AND W_AnneeFaite<30
     MontIndemnite=W_Paie*2
    CASE W_AnneeFaite>29
     MontIndemnite=W_Paie*3
   END CASE
  CASE CodeConvCol="02" OR CodeConvCol="07" OR CodeConvCol="08" OR CodeConvCol="09"
   BEGIN CASE
    CASE W_AnneeFaite>10 AND W_AnneeFaite<15
     MontIndemnite=W_Paie*1/2
    CASE W_AnneeFaite>14 AND W_AnneeFaite<20
     MontIndemnite=W_Paie
    CASE W_AnneeFaite>19 AND W_AnneeFaite<30
     MontIndemnite=W_Paie+W_Paie/2
    CASE W_AnneeFaite>29
     MontIndemnite=W_Paie*2
   END CASE
  CASE CodeConvCol="03"
   IF W_AnneeFaite > 9 THEN
    W_Temp=W_AnneeFaite/10
    MontIndemnite=W_Paie*W_Temp+W_MoisFait/120*W_Paie 
    MontIndemnite=INT(MontIndemnite + 1/2)
   END
  CASE CodeConvCol="04"
   MontIndemnite=W_Paie/10*W_AnneeFaite
  CASE CodeConvCol="05"
    BEGIN CASE
    CASE W_AnneeFaite>10 AND W_AnneeFaite<15
     MontIndemnite=W_Paie
    CASE W_AnneeFaite>14 AND W_AnneeFaite<19
     MontIndemnite=W_Paie*3
    CASE W_AnneeFaite>18 AND W_AnneeFaite<22
     MontIndemnite=W_Paie*4
    CASE W_AnneeFaite>21 AND W_AnneeFaite<25
     MontIndemnite=W_Paie*5
    CASE W_AnneeFaite>24
     MontIndemnite=W_Paie*6
   END CASE
  CASE CodeConvCol="06"
   IF W_AnneeFaite>29 THEN
    MontIndemnite=W_Paie*3
   END ELSE
    IF W_AnneeFaite>9 THEN
     MontIndemnite=W_Paie/10*W_AnneeFaite         
    END
   END
 END CASE
END
W_MONTINDLICRET=INT(MontIndemnite+1/2)
RETURN
**********
* CALCUL BUDGETAIRE : PRISE EN COMPTE DU DETAIL DES MOD ET MOI
* PUIS APPLICATION DES PARAMETRES MOI
**********
2900 G=1
LOOP
 RubSaisieBudget=EXTRACT(ENR_CONTRAT,30,W_NOAVENANT,G)
 UNTIL RubSaisieBudget="" DO
  CodRubSai=RubSaisieBudget
  GOSUB 1200
  W_BASERUBSAI=EXTRACT(ENR_CONTRAT,31,W_NOAVENANT,G)
  W_TAUXHORRUBSAI=""
  W_MONTRUBSAI=0
  BEGIN CASE
   CASE TypTauxRubSai=0 OR TypTauxRubSai=1
    W_TAUXHORRUBSAI=EXTRACT(ENR_CONTRAT,32,W_NOAVENANT,G)
    IF ChpAppliRubSai=6 THEN
     W_BASERUBSAI=""
     W_TAUXHORRUBSAI=""
     W_MONTRUBSAI=EXTRACT(ENR_CONTRAT,33,W_NOAVENANT,G)
    END ELSE
     W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
    END
   CASE TypTauxRubSai=2 
    IF CodRubSai="836" OR CodRubSai="837" THEN
     W_TAUXHORRUBSAI=INT(W_TAUXHORDIMJF*MontTauxRubSai/10000000+1/2)-W_TAUXHORDIMJF/10
     W_TAUXHORRUBSAI=W_TAUXHOR+W_TAUXHORRUBSAI*10
     W_TAUXHORRUBSAI1=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
     W_TAUXHORRUBSAI1=W_TAUXHORRUBSAI1*10
     IF W_TAUXHORRUBSAI1>W_TAUXHORRUBSAI THEN W_TAUXHORRUBSAI=W_TAUXHORRUBSAI1
    END ELSE
     W_TAUXHORDIMJFBIS=W_TAUXHORDIMJF
     IF ConvColContrat="06" THEN W_TAUXHORDIMJF=W_TAUXHOR                         
     IF ConvColContrat="01" AND MontTauxRubSai="1250000" THEN
      IF ChpAppliRubSai="3" OR ChpAppliRubSai="4" THEN
       W_TAUXHORRUBSAI=INT(W_TAUXHORDIMJF*MontTauxRubSai/10000000+1/2)-W_TAUXHORDIMJF/10
       W_TAUXHORRUBSAI=W_TAUXHOR+W_TAUXHORRUBSAI*10
      END ELSE
       W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
       W_TAUXHORRUBSAI=W_TAUXHORRUBSAI*10
      END  
     END ELSE
      W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
      W_TAUXHORRUBSAI=W_TAUXHORRUBSAI*10
     END
     W_TAUXHORDIMJF=W_TAUXHORDIMJFBIS
    END
    W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
  END CASE
  BEGIN CASE
   CASE TypMontRubSai=0 OR TypMontRubSai=1
    W_MONTRUBSAI=EXTRACT(ENR_CONTRAT,33,W_NOAVENANT,G)
   CASE 1
    IF W_TAUXHORRUBSAI#"" THEN W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXHORRUBSAI/10000+1/2)
  END CASE
  IF W_TAUXHORRUBSAI#"" THEN W_TAUXHORRUBSAI=INT(W_TAUXHORRUBSAI/10)*10
  BEGIN CASE
   CASE ChpAppliRubSai=2
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;RubSaisieBudget)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;W_BASERUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;W_TAUXHORRUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;W_MONTRUBSAI)
   CASE ChpAppliRubSai>2
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;RubSaisieBudget)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHORRUBSAI)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
  END CASE
  G=G+1
REPEAT
READ ENR_BUDGETMOI FROM F.BUDGETMOI,ConvColContrat ELSE ENR_BUDGETMOI=""
W_TRAITMOIBRUT=1
GOSUB 3000
W_JOURPRESENCE=W_NBJRSPERIODEPAIE
IF DatDebContrat>W_PERIODEPAIEDEB AND DatDebContrat<=W_PERIODEPAIEFIN THEN
 W_DATDEBCONTRATBUDGET=OCONV(DatDebContrat,"D4/")
 W_JOURPRESENCE=W_JOURPRESENCE-W_DATDEBCONTRATBUDGET[1,2]+1
END
IF W_FINCONTRAT="OUI" THEN
 W_DATFINCONTRATBUDGET=OCONV(DatFinContrat,"D4/")
 W_JOURPRESENCE=W_JOURPRESENCE-(W_PERIODEPAIEFIN1[1,2]-W_DATFINCONTRATBUDGET[1,2])
END
IF W_JOURPRESENCE<W_NBJRSPERIODEPAIE THEN
 G=1
 W_BASERUBSAI=0
 LOOP
  RubSaisieCalBdg=EXTRACT(ENR_DETAILCALCUL,2,G)
  BaseSaisieCalBdg=EXTRACT(ENR_DETAILCALCUL,3,G)
  TauxSaisieCalBdg=EXTRACT(ENR_DETAILCALCUL,4,G)
  MontSaisieCalBdg=EXTRACT(ENR_DETAILCALCUL,5,G)
  UNTIL RubSaisieCalBdg="" DO
   IF BaseSaisieCalBdg="" THEN
    MontSaisieCalBdg=INT((MontSaisieCalBdg/W_NBJRSPERIODEPAIE)*W_JOURPRESENCE+1/2)
   END ELSE
    BaseSaisieCalBdg=INT((BaseSaisieCalBdg/W_NBJRSPERIODEPAIE)*W_JOURPRESENCE+1/2)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,G;BaseSaisieCalBdg)
    MontSaisieCalBdg=INT(BaseSaisieCalBdg*TauxSaisieCalBdg/10000+1/2)
   END
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,G;MontSaisieCalBdg)
   G=G+1
 REPEAT
 G=1
 W_BASERUBSAI=0
 LOOP
  RubSaisieImpCalBdg=EXTRACT(ENR_DETAILCALCUL,17,G)
  BaseSaisieImpCalBdg=EXTRACT(ENR_DETAILCALCUL,18,G)
  TauxSaisieImpCalBdg=EXTRACT(ENR_DETAILCALCUL,19,G)
  MontSaisieImpCalBdg=EXTRACT(ENR_DETAILCALCUL,20,G)
  UNTIL RubSaisieImpCalBdg="" DO
   IF BaseSaisieImpCalBdg="" THEN
    MontSaisieImpCalBdg=INT((MontSaisieImpCalBdg/W_NBJRSPERIODEPAIE)*W_JOURPRESENCE+1/2)
   END ELSE
    BaseSaisieImpCalBdg=INT((BaseSaisieImpCalBdg/W_NBJRSPERIODEPAIE)*W_JOURPRESENCE+1/2)
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,G;BaseSaisieImpCalBdg)
    MontSaisieImpCalBdg=INT(BaseSaisieImpCalBdg*TauxSaisieImpCalBdg/10000+1/2)
   END
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,G;MontSaisieImpCalBdg)
   G=G+1
 REPEAT
END
G=1
W_BASERUBSAIBRUT=0
W_BASERUBSAIMOD=0
W_MONTRUBSAIBRUT=0
W_MONTRUBSAIMOD=0
W_HEURESPRIMEDIFF=0
W_HEURESPRIMEDIFFMOD=0
LOOP
 RubSaisieCalBdg=EXTRACT(ENR_DETAILCALCUL,2,G)
 UNTIL RubSaisieCalBdg="" DO
  CodRubSai=RubSaisieCalBdg
  GOSUB 1200
  W_MONTRUBSAIBRUT=W_MONTRUBSAIBRUT+EXTRACT(ENR_DETAILCALCUL,5,G)
  IF ChpAppliRubSai=3 OR ChpAppliRubSai=4 OR ChpAppliRubSai=5 THEN
   W_BASERUBSAIBRUT=W_BASERUBSAIBRUT+EXTRACT(ENR_DETAILCALCUL,3,G)
   IF W_TAUXHOR=EXTRACT(ENR_DETAILCALCUL,4,G) THEN
    W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+EXTRACT(ENR_DETAILCALCUL,3,G)
    IF ChpAppliRubSai=3 OR ChpAppliRubSai=4 THEN W_HEURESPRIMEDIFFMOD=W_HEURESPRIMEDIFFMOD+EXTRACT(ENR_DETAILCALCUL,3,G)
   END ELSE
    IF ChpAppliRubSai=4 THEN
     IF ConvColContrat="01" THEN
      IF MontTauxRubSai#"1250000" THEN
       W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(EXTRACT(ENR_DETAILCALCUL,3,G)*MontTauxRubSai/1000000+1/2)
       W_HEURESPRIMEDIFFMOD=W_HEURESPRIMEDIFFMOD+INT(EXTRACT(ENR_DETAILCALCUL,3,G)*MontTauxRubSai/1000000+1/2)
      END ELSE
       W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+EXTRACT(ENR_DETAILCALCUL,3,G)
       W_HEURESPRIMEDIFFMOD=W_HEURESPRIMEDIFFMOD+EXTRACT(ENR_DETAILCALCUL,3,G)
      END
     END ELSE
      W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(EXTRACT(ENR_DETAILCALCUL,3,G)*MontTauxRubSai/1000000+1/2)
      W_HEURESPRIMEDIFFMOD=W_HEURESPRIMEDIFFMOD+INT(EXTRACT(ENR_DETAILCALCUL,3,G)*MontTauxRubSai/1000000+1/2)
     END
    END ELSE
     W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+INT(EXTRACT(ENR_DETAILCALCUL,5,G)*10000/W_TAUXHOR+1/2)
     IF ChpAppliRubSai=3 THEN W_HEURESPRIMEDIFFMOD=W_HEURESPRIMEDIFFMOD+INT(EXTRACT(ENR_DETAILCALCUL,5,G)*10000/W_TAUXHOR+1/2)
    END
   END
  END   
  IF ChpAppliRubSai=3 OR ChpAppliRubSai=4 THEN
   W_BASERUBSAIMOD=W_BASERUBSAIMOD+EXTRACT(ENR_DETAILCALCUL,3,G)
   W_MONTRUBSAIMOD=W_MONTRUBSAIMOD+EXTRACT(ENR_DETAILCALCUL,5,G)
  END
  G=G+1
REPEAT
DureeWContrat=W_BASERUBSAIBRUT
ENR_DETAILCALCUL<6>=W_BASERUBSAIBRUT
ENR_DETAILCALCUL<7>=W_MONTRUBSAIBRUT
RETURN
**********
* PRISE EN COMPTE DU PARAMETRAGE DES M.O.I. POUR CALCUL BUDGETAIRE
**********
3000 F=1
LOOP
 RubSaiBudgetMoi=EXTRACT(ENR_BUDGETMOI,1,F)
 UNTIL RubSaiBudgetMoi="" DO
  RegleBudgetMoi=EXTRACT(ENR_BUDGETMOI,2,F)
  ValeurBudgetMoi=EXTRACT(ENR_BUDGETMOI,3,F)
  BaseBudgetMoi=EXTRACT(ENR_BUDGETMOI,4,F)
  TypePersBudgetMoi=EXTRACT(ENR_BUDGETMOI,5,F)
  CodRubSai=RubSaiBudgetMoi
  GOSUB 1200
  W_CHPAPPLIRUBSAI=ChpAppliRubSai
  IF W_TRAITMOIBRUT=1 AND W_CHPAPPLIRUBSAI=2 THEN
   NULL
  END ELSE
   IF W_TRAITMOIBRUT=0 AND W_CHPAPPLIRUBSAI#2 THEN
    NULL
   END ELSE
    W_TYPTAUXRUBSAI=TypTauxRubSai
    W_MONTTAUXRUBSAI=MontTauxRubSai
    BEGIN CASE
     CASE RegleBudgetMoi=1 ;* Neutraliser
      IF TypePersBudgetMoi#"" AND W_TYPEPERSBUDGETMOI#TypePersBudgetMoi THEN
       NULL
      END ELSE
       IF W_CHPAPPLIRUBSAI=2 THEN
        G=1
        LOOP
         RubSaisieImpCalBdg=EXTRACT(ENR_DETAILCALCUL,17,G)
         UNTIL RubSaisieImpCalBdg="" OR RubSaisieImpCalBdg=RubSaiBudgetMoi DO
          G=G+1
        REPEAT
        IF RubSaisieImpCalBdg=RubSaiBudgetMoi THEN
         ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,17,G)
         ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,18,G)
         ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,19,G)
         ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,20,G)
        END
       END ELSE
        G=1
        LOOP
         RubSaisieCalBdg=EXTRACT(ENR_DETAILCALCUL,2,G)
         UNTIL RubSaisieCalBdg="" OR RubSaisieCalBdg=RubSaiBudgetMoi DO
          G=G+1
        REPEAT
        IF RubSaisieCalBdg=RubSaiBudgetMoi THEN
         ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,2,G)
         ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,3,G)
         ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,4,G)
         ENR_DETAILCALCUL=DELETE(ENR_DETAILCALCUL,5,G)
        END
       END
      END
     CASE RegleBudgetMoi=2 OR RegleBudgetMoi=3 ;* Calculer OU Calculer si >
      IF TypePersBudgetMoi#"" AND W_TYPEPERSBUDGETMOI#TypePersBudgetMoi THEN
       NULL
      END ELSE
       G=1
       W_MONTRUBSAI=0
       LOOP
        RubSaisieCalBdg=EXTRACT(ENR_DETAILCALCUL,2,G)
        UNTIL RubSaisieCalBdg="" DO
         CodRubSai=RubSaisieCalBdg
         GOSUB 1200
         IF BaseBudgetMoi=1 THEN
          IF ChpAppliRubSai=3 OR ChpAppliRubSai=4 THEN
           IF RubSaisieCalBdg#RubSaiBudgetMoi THEN W_MONTRUBSAI=W_MONTRUBSAI+EXTRACT(ENR_DETAILCALCUL,5,G)
          END
         END ELSE
          IF RubSaisieCalBdg#RubSaiBudgetMoi THEN W_MONTRUBSAI=W_MONTRUBSAI+EXTRACT(ENR_DETAILCALCUL,5,G)
         END
         G=G+1
       REPEAT
       W_MONTRUBSAI=INT(W_MONTRUBSAI*ValeurBudgetMoi/10000+1/2)
       IF W_CHPAPPLIRUBSAI=5 THEN
        IF W_TYPTAUXRUBSAI=2 THEN
         W_TAUXRUBSAI=INT(W_TAUXHOR*W_MONTTAUXRUBSAI/10000000+1/2)
         W_TAUXRUBSAI=W_TAUXRUBSAI*10
         W_BASERUBSAI=INT(W_MONTRUBSAI*10000/W_TAUXRUBSAI+1/2)
         W_MONTRUBSAI=INT(W_BASERUBSAI*W_TAUXRUBSAI/10000+1/2)
        END ELSE
         W_BASERUBSAI=""
         W_TAUXRUBSAI=0
        END
       END ELSE
        W_BASERUBSAI=""
        W_TAUXRUBSAI=0
       END
       IF W_CHPAPPLIRUBSAI=2 THEN
        IF W_BASERUBSAI="" THEN W_TAUXRUBSAI=""
        G=1
        LOOP
         RubSaisieImpCalBdg=EXTRACT(ENR_DETAILCALCUL,17,G)
         UNTIL RubSaisieImpCalBdg="" OR RubSaisieImpCalBdg=RubSaiBudgetMoi DO
          G=G+1
        REPEAT
        IF RubSaisieImpCalBdg=RubSaiBudgetMoi THEN
         IF RegleBudgetMoi=3 THEN
          IF W_MONTRUBSAI>EXTRACT(ENR_DETAILCALCUL,20,G) THEN
           ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,G;W_BASERUBSAI)
           ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,G;W_TAUXRUBSAI)
           ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,G;W_MONTRUBSAI)
          END
         END ELSE
          ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,G;W_BASERUBSAI)
          ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,G;W_TAUXRUBSAI)
          ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,G;W_MONTRUBSAI)
         END
        END ELSE
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,17,-1;RubSaiBudgetMoi)
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,18,-1;W_BASERUBSAI)
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,19,-1;W_TAUXRUBSAI)
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,20,-1;W_MONTRUBSAI)
        END
       END ELSE
        G=1
        LOOP
         RubSaisieCalBdg=EXTRACT(ENR_DETAILCALCUL,2,G)
         UNTIL RubSaisieCalBdg="" OR RubSaisieCalBdg=RubSaiBudgetMoi DO
          G=G+1
        REPEAT
        IF RubSaisieCalBdg=RubSaiBudgetMoi THEN
         IF RegleBudgetMoi=3 THEN
          IF W_MONTRUBSAI>EXTRACT(ENR_DETAILCALCUL,5,G) THEN      
           ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,G;W_BASERUBSAI)
           ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,G;W_TAUXRUBSAI)
           ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,G;W_MONTRUBSAI)
          END
         END ELSE
          ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,G;W_BASERUBSAI)
          ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,G;W_TAUXRUBSAI)
          ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,G;W_MONTRUBSAI)
         END
        END ELSE
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;RubSaiBudgetMoi)
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXRUBSAI)
         ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
        END
       END
      END
     CASE 1 ;* RegleBudgetMoi=4 donc En l'tat
      NULL
    END CASE
   END
  END
  F=F+1
REPEAT
RETURN 
