*****************************************************************
* SPECIF ASMAD : CALCUL DU TAUX SYSTEMATIQUEMENT A PARTIR DE 169 HEURES
*                DANS GOSUB 2000
* 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 ."
EXECUTE "DATE.FORMAT"
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 "","HISTORCUMUL" TO F.HISTORCUMUL 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 "","CONTRAT" TO F.CONTRAT ELSE STOP ;*en ecriture
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE STOP ;*en ecriture
OPEN "","RATTSALANT" TO F.RATTSALANT ELSE STOP ;*en suppression
OPEN "","REGULCHARGE" TO F.REGULCHARGE ELSE STOP ;*en ecriture
EXECUTE "SET-DEC ,"
**********
* 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=0
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
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_FINRECH="NON"
 LOOP
  READNEXT W_CLERUBCHG FROM LISTRUBCHG ELSE W_FINRECH="OUI" 
  UNTIL W_FINRECH="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 DecalagePaie=1 THEN
 IF W_PERIODEPAIE[5,2]=12 THEN W_ANNEEDADS=W_PERIODEPAIE[1,4]+1
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
* 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=""
**********
* 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
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
  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 = ""'
   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 = ""'
     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"
  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 # ""'
   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
   CodeConvCol="02"
   GOSUB 1100 ;* lecture CONVENTIONCOL
   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
     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 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 = ""'
   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 # ""'
   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 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 = ""'
      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>:'"'
     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 # ""'
   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>:'"'
     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_FINCONTRAT="NON"
*W_FINMODULATION="NON"
W_BASERUBCHGAAD=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
IF DernBullContrat=W_PERIODEPAIE THEN W_FINCONTRAT="OUI"
IF DatFinContrat#"" AND DatFinContrat>=W_PERIODEPAIEDEB AND DatFinContrat<=W_PERIODEPAIEFIN THEN
 W_FINCONTRAT="OUI"
END
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
IF W_TYPETRAIT="R" THEN
 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
 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" 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=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
 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>
   P=P+1
 REPEAT
 IF W_PERANCOURSCONTRAT=W_PERIODEPAIEPREC THEN W_DIFFANCOURSCONTRAT=W_DIFFANCOURSCONTRAT+DiffAnCoursContrat<1,P>
 IF W_FINCONTRAT="OUI" OR W_FINMODULATION="OUI" THEN
  IF TypLissageContrat="S" THEN
   IF DatDebContrat>W_PERIODEPAIEDEB AND DatDebContrat<=W_PERIODEPAIEFIN THEN
    W_DATDEBCONTRAT=OCONV(DatDebContrat,"D4 ")
    IF DatFinContrat="" THEN
     W_HEURESMENS=INT(W_HEURESMENS*(W_NBJRSPERIODEPAIE-W_DATDEBCONTRAT[1,2]+1)/W_NBJRSPERIODEPAIE+1/2)
    END ELSE
     IF DatFinContrat<=W_PERIODEPAIEFIN THEN
      W_DATFINCONTRAT=OCONV(DatFinContrat,"D4 ")
      W_HEURESMENS=INT(W_HEURESMENS*(W_DATFINCONTRAT[1,2]-W_DATDEBCONTRAT[1,2]+1)/W_NBJRSPERIODEPAIE+1/2)
     END ELSE
      W_HEURESMENS=INT(W_HEURESMENS*(W_NBJRSPERIODEPAIE-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_HEURESMENS=INT(W_HEURESMENS*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)
    END ELSE
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P;-W_HEURESDIFF)
    END
    GOSUB 1800
   END 
  END ELSE
   IF TypLissageContrat="C" THEN
    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_BASELISSAGE)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,78,P+1;W_HEURESABS)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,79,P+1;W_BASELISSAGE+W_DIFFANCOURSCONTRAT)
      IF W_DIFFANCOURSCONTRAT<0 AND W_BASELISSAGE+W_DIFFANCOURSCONTRAT<0 THEN
       ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P+1;W_BASELISSAGE+W_DIFFANCOURSCONTRAT)
      END ELSE
       ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P+1;"0")
      END
     END ELSE
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,76,P;W_PERIODEPAIE)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,77,P;W_BASELISSAGE)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,78,P;W_HEURESABS)
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,79,P;W_BASELISSAGE+W_DIFFANCOURSCONTRAT)
      IF W_DIFFANCOURSCONTRAT<0 AND W_BASELISSAGE+W_DIFFANCOURSCONTRAT<0 THEN
       ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P;W_BASELISSAGE+W_DIFFANCOURSCONTRAT)
      END ELSE
       ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P;"0")
      END
     END
     W_HEURESFORFAITAIRES=W_BASELISSAGE-W_HEURESABS
     W_HEURESREELLES=W_BASELISSAGE+W_DIFFANCOURSCONTRAT
     IF W_DIFFANCOURSCONTRAT#0 THEN
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,2,-1;"805")
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_DIFFANCOURSCONTRAT)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
      W_MONTRUBSAI=INT(W_DIFFANCOURSCONTRAT*W_TAUXHOR/10000+1/2)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_DIFFANCOURSCONTRAT+ENR_DETAILCALCUL<6>)
      ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,7;W_MONTRUBSAI+ENR_DETAILCALCUL<7>)
      W_HEURESPRIMEDIFF=W_HEURESPRIMEDIFF+W_DIFFANCOURSCONTRAT
     END
     GOSUB 1800
    END
   END ELSE
    IF DatDebContrat>W_PERIODEPAIEDEB AND DatDebContrat<=W_PERIODEPAIEFIN THEN
     W_DATDEBCONTRAT=OCONV(DatDebContrat,"D4 ")
     IF DatFinContrat="" THEN
      W_HEURESMENS=INT(W_HEURESMENS*(W_NBJRSPERIODEPAIE-W_DATDEBCONTRAT[1,2]+1)/W_NBJRSPERIODEPAIE+1/2)
     END ELSE
      IF DatFinContrat<=W_PERIODEPAIEFIN THEN
       W_DATFINCONTRAT=OCONV(DatFinContrat,"D4 ")
       W_HEURESMENS=INT(W_HEURESMENS*(W_DATFINCONTRAT[1,2]-W_DATDEBCONTRAT[1,2]+1)/W_NBJRSPERIODEPAIE+1/2)
      END ELSE
       W_HEURESMENS=INT(W_HEURESMENS*(W_NBJRSPERIODEPAIE-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_HEURESMENS=INT(W_HEURESMENS*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_HEURESDIFF1=W_HEURESMENS-W_BASELISSAGE-W_HEURESABS
    W_HEURESDIFF1=-W_HEURESDIFF1
    BEGIN CASE
     CASE W_HEURESDIFF1>=0 AND W_DIFFANCOURSCONTRAT>=0
      W_HEURESDIFF=W_DIFFANCOURSCONTRAT
     CASE W_HEURESDIFF1<=0 AND W_DIFFANCOURSCONTRAT>=0
      IF W_DIFFANCOURSCONTRAT+W_HEURESDIFF1>=0 THEN
       W_HEURESDIFF=W_DIFFANCOURSCONTRAT
      END ELSE
       W_HEURESDIFF=-W_HEURESDIFF1
      END
     CASE W_HEURESDIFF1<=0 AND W_DIFFANCOURSCONTRAT<=0
      W_HEURESDIFF=-W_HEURESDIFF1
     CASE W_HEURESDIFF1>=0 AND W_DIFFANCOURSCONTRAT<=0
      IF W_HEURESDIFF1+W_DIFFANCOURSCONTRAT<0 THEN
       W_HEURESDIFF=-W_HEURESDIFF1
      END ELSE
       W_HEURESDIFF=W_DIFFANCOURSCONTRAT
      END
    END CASE   
    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_HEURESDIFF1)
     END ELSE
      ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P;W_HEURESDIFF1)
     END
     GOSUB 1800
    END 
   END
  END
 END ELSE
  IF DatDebContrat>W_PERIODEPAIEDEB AND DatDebContrat<=W_PERIODEPAIEFIN THEN
   W_DATDEBCONTRAT=OCONV(DatDebContrat,"D4 ")
   W_HEURESMENS=INT(W_HEURESMENS*(W_NBJRSPERIODEPAIE-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
*  IF TypLissageContrat="C" OR TypLissageContrat="S" THEN
   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)
    END ELSE
     ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P;-W_HEURESDIFF)
    END
    GOSUB 1800
   END 
*  END ELSE
*   W_HEURESDIFF=W_BASELISSAGE+W_HEURESABS-W_HEURESMENS
*   IF W_HEURESDIFF<0 THEN
*    IF W_DIFFANCOURSCONTRAT>-W_HEURESDIFF THEN
*     W_DIFFANCOURSCONTRAT=W_HEURESDIFF 
*     W_HEURESDIFF=-W_HEURESDIFF
*    END ELSE
*     W_HEURESDIFF=W_DIFFANCOURSCONTRAT
*     W_DIFFANCOURSCONTRAT=-W_DIFFANCOURSCONTRAT
*    END
*   END ELSE
*    W_DIFFANCOURSCONTRAT=W_HEURESDIFF 
*    W_HEURESDIFF=-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_DIFFANCOURSCONTRAT)
*    END ELSE
*     ENR_CONTRAT=REPLACE(ENR_CONTRAT,80,P;W_DIFFANCOURSCONTRAT)
*    END
*    GOSUB 1800
*   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
*  END
 END 
END ELSE
*
* MAJ SUIVI DES CONTRATS DANS TOUS LES AUTRES CAS
*
 GOSUB 2400
 W_PASSAGE=1
 W_HEURESABS=INT(W_HEURESMENSCONTRAT*(W_JOURSABS+W_JOURSABSPERIODEPAIE)/W_NBJRSPERIODEPAIE+1/2)
 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)
 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)
 END
 W_HEURESFORFAITAIRES=W_HEURESMENSCONTRAT-W_HEURESABS
 W_HEURESREELLES=ENR_DETAILCALCUL<6>
 GOSUB 1800
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)
  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>)
  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>)
  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
   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)
*   IF ConvColContrat="02" THEN
*    IF W_TAUXHOR<ValSmicHor*100 THEN
*     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;ValSmicHor*100)
*     W_BASERUBSAI=INT(W_MONTRUBSAI*10000/(ValSmicHor*100)+1/2)
*    END ELSE
*     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;W_TAUXHOR)
*     W_BASERUBSAI=INT(W_MONTRUBSAI*10000/W_TAUXHOR+1/2)
*    END
*    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;W_BASERUBSAI)
*   END ELSE
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,3,-1;"")
    ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,4,-1;"")
*   END
   ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,5,-1;W_MONTRUBSAI)
*   IF ConvColContrat="02" THEN ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,6;W_BASERUBSAI+ENR_DETAILCALCUL<6>)
   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" 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 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 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 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)
   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
  CALL CalcIndLicRet(CodAidantContrat,"R",W_MONTINDLICRET,W_PERIODEPAIE)
  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 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 FOR D=8 TO 14
 ENR_DETAILCALCUL<D>=""
 ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,D;"0")
NEXT D
ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,28;"0")
*
* 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
*
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
   CodeContPrev=PrevContrat
   GOSUB 1700
   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;"")
       ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;-INT(PartSalRubChg/10+1/2))
       NetAPayerCal=NetAPayerCal-INT(PartSalRubChg/10+1/2)
       MontAPayer=MontAPayer-INT(PartSalRubChg/10+1/2)
       IF ExcNetImpRubChg=0 THEN MontImposCal=MontImposCal-INT(PartSalRubChg/10+1/2)
       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)
        W_COTISSAL=INT(W_ASSIETTE*PartSalRubChg/100000+1/2)
        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_ASSIETTEBRUTE)
       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;"")
       ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;INT(PartPatRubChg/10+1/2))
      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_ASSIETTEBRUTE)
        END
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,12,-1;W_ASSIETTE)
        ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,13,-1;PartPatRubChg)
        W_COTISPAT=INT(W_ASSIETTE*PartPatRubChg/100000+1/2)
        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)
*
* REGULARISATION DE CHARGES (PAR LE BIAIS DE LA RUBRIQUE DE CHARGE 901)
*
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
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_COTISSAL=EXTRACT(ENR_DETAILCALCUL,11,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_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
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>
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
W_ASSIETTESALEXO=0
W_ASSIETTESALNONEXO=0
W_ASSIETTEPATEXO=0
W_ASSIETTEPATNONEXO=0
I=1
LOOP
 UNTIL RubChgProfil<1,I>="" DO
  CodRubChg=RubChgProfil<1,I>
  GOSUB 1400 ;*lecture RUBCHARGE
*** si pas en lissage alors
*
* 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
*
*** si en lissage alors
* si profil avec rubrique de charge de type aide  domicile alors
*    si pas en fin de modulation ou pas en fin de contrat alors xo 100% systmatiquement
*    sinon faire le point par rapport aux articles prcdents dans DETAILCALCUL (GOSUB 2300)
*
  IF RubAADRubChg=1 THEN
*   IF TypeContrat="I" THEN
    IF W_PREMIERERUBAAD="NON" THEN
     IF LissageContrat=1 THEN
      IF W_FINCONTRAT="NON" AND W_FINMODULATION="NON" THEN
       W_POURCENTEXO=10000
       W_POURCENTNONEXO=0
       W_PREMIERERUBAAD="OUI"
      END ELSE
       IF ExoAADRubChg=1 THEN
        W_PREMIERERUBAAD="OUI"
        GOSUB 2300
       END
      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 ELSE
*    W_POURCENTEXO=0
*    W_POURCENTNONEXO=10000
*   END
  END
  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 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
     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 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;"")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,11,-1;-INT(PartSalRubChg/10+1/2))
     NetAPayerCal=NetAPayerCal-INT(PartSalRubChg/10+1/2)
     IF ExcNetImpRubChg=0 THEN MontImposCal=MontImposCal-INT(PartSalRubChg/10+1/2)
     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 RubAADRubChg=1 THEN
      IF ExoAADRubChg=0 THEN
       IF LissageContrat=1 THEN
        IF W_FINCONTRAT#"OUI" AND W_FINMODULATION#"OUI" THEN
         W_ASSIETTESAL=INT(W_ASSIETTE*W_POURCENTNONEXO/10000+1/2)
        END ELSE
         W_ASSIETTESAL=INT((W_ASSIETTE+W_BASERUBCHGAAD)*W_POURCENTNONEXO/10000+1/2)
        END
       END ELSE
        W_ASSIETTESAL=INT(W_ASSIETTE*W_POURCENTNONEXO/10000+1/2)
        IF W_ASSIETTESALNONEXO=0 THEN
         W_ASSIETTESALNONEXO=W_ASSIETTESAL
         W_ASSIETTEPATNONEXO=W_ASSIETTESAL
        END
        IF W_ASSIETTESALEXO+W_ASSIETTESALNONEXO=W_ASSIETTE+1 THEN
         W_ASSIETTESAL=W_ASSIETTESAL-1
         W_ASSIETTESALNONEXO=W_ASSIETTESAL
         W_ASSIETTEPATNONEXO=W_ASSIETTESAL
        END ELSE
         IF W_ASSIETTESAL=W_ASSIETTESALNONEXO+1 OR W_ASSIETTESAL=W_ASSIETTESALNONEXO-1 THEN W_ASSIETTESAL=W_ASSIETTESALNONEXO
        END
       END
      END ELSE
       IF LissageContrat=1 THEN
        IF W_FINCONTRAT#"OUI" AND W_FINMODULATION#"OUI" THEN
         W_ASSIETTESAL=INT(W_ASSIETTE*W_POURCENTEXO/10000+1/2)
        END ELSE
         W_ASSIETTESAL=INT((W_ASSIETTE+W_BASERUBCHGAAD)*W_POURCENTEXO/10000+1/2)
         W_ASSIETTESAL=W_ASSIETTESAL-W_BASERUBCHGAAD
        END
       END ELSE
        W_ASSIETTESAL=INT(W_ASSIETTE*W_POURCENTEXO/10000+1/2)
        IF W_ASSIETTESALEXO=0 THEN
         W_ASSIETTESALEXO=W_ASSIETTESAL
         W_ASSIETTEPATEXO=W_ASSIETTESAL
        END
        IF W_ASSIETTESALEXO+W_ASSIETTESALNONEXO=W_ASSIETTE+1 THEN
         W_ASSIETTESAL=W_ASSIETTESAL-1
         W_ASSIETTESALEXO=W_ASSIETTESAL
         W_ASSIETTEPATEXO=W_ASSIETTESAL
        END ELSE
         IF W_ASSIETTESAL=W_ASSIETTESALEXO+1 OR W_ASSIETTESAL=W_ASSIETTESALEXO-1 THEN W_ASSIETTESAL=W_ASSIETTESALEXO
        END
       END
      END
      W_COTISSAL=INT(W_ASSIETTESAL*PartSalRubChg/100000+1/2)
     END ELSE
      W_ASSIETTESAL=W_ASSIETTE
      W_COTISSAL=INT(W_ASSIETTE*PartSalRubChg/100000+1/2)
     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_ASSIETTEBRUTE)
    END
  END CASE
  BEGIN CASE
   CASE CodRubChg="900"
    NULL
   CASE CodRubChg="902"
    NULL
   CASE CodRubChg="903"
    NULL
   CASE TypPartPatRubChg="Montant"
    W_CHGPATROPROFIL=W_CHGPATROPROFIL+INT(PartPatRubChg/10+1/2)
    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;"")
     ENR_DETAILCALCUL=REPLACE(ENR_DETAILCALCUL,14,-1;INT(PartPatRubChg/10+1/2))
    END
   CASE TypPartPatRubChg="%"
    W_TYPEPART="PAT"
    GOSUB 400
    IF RubAADRubChg=1 THEN
      IF ExoAADRubChg=0 THEN
       IF LissageContrat=1 THEN
        IF W_FINCONTRAT#"OUI" AND W_FINMODULATION#"OUI" THEN
         W_ASSIETTEPAT=INT(W_ASSIETTE*W_POURCENTNONEXO/10000+1/2)
        END ELSE
         W_ASSIETTEPAT=INT((W_ASSIETTE+W_BASERUBCHGAAD)*W_POURCENTNONEXO/10000+1/2)
        END
       END ELSE
        W_ASSIETTEPAT=INT(W_ASSIETTE*W_POURCENTNONEXO/10000+1/2)
        IF W_ASSIETTEPATNONEXO=0 THEN
         IF W_ASSIETTESALNONEXO=0 THEN
          W_ASSIETTEPATNONEXO=W_ASSIETTEPAT
          W_ASSIETTESALNONEXO=W_ASSIETTEPAT
         END
        END
        IF W_ASSIETTEPATEXO+W_ASSIETTEPATNONEXO=W_ASSIETTE+1 THEN
         W_ASSIETTEPAT=W_ASSIETTEPAT-1
         W_ASSIETTEPATNONEXO=W_ASSIETTEPAT
         W_ASSIETTESALNONEXO=W_ASSIETTEPAT
        END ELSE
         IF W_ASSIETTEPAT=W_ASSIETTEPATNONEXO+1 OR W_ASSIETTEPAT=W_ASSIETTEPATNONEXO-1 THEN W_ASSIETTEPAT=W_ASSIETTEPATNONEXO
        END
       END
      END ELSE
       IF LissageContrat=1 THEN
        IF W_FINCONTRAT#"OUI" AND W_FINMODULATION#"OUI" THEN
         W_ASSIETTEPAT=INT(W_ASSIETTE*W_POURCENTEXO/10000+1/2)
        END ELSE
         W_ASSIETTEPAT=INT((W_ASSIETTE+W_BASERUBCHGAAD)*W_POURCENTEXO/10000+1/2)
         W_ASSIETTEPAT=W_ASSIETTEPAT-W_BASERUBCHGAAD
        END
       END ELSE
        W_ASSIETTEPAT=INT(W_ASSIETTE*W_POURCENTEXO/10000+1/2)
        IF W_ASSIETTEPATEXO=0 THEN
         IF W_ASSIETTESALEXO=0 THEN
          W_ASSIETTEPATEXO=W_ASSIETTEPAT
          W_ASSIETTESALEXO=W_ASSIETTEPAT
         END
        END
        IF W_ASSIETTEPATEXO+W_ASSIETTEPATNONEXO=W_ASSIETTE+1 THEN
         W_ASSIETTEPAT=W_ASSIETTEPAT-1
         W_ASSIETTEPATEXO=W_ASSIETTEPAT
         W_ASSIETTESALEXO=W_ASSIETTEPAT
        END ELSE
         IF W_ASSIETTEPAT=W_ASSIETTEPATEXO+1 OR W_ASSIETTEPAT=W_ASSIETTEPATEXO-1 THEN W_ASSIETTEPAT=W_ASSIETTEPATEXO
        END
       END
      END
      W_COTISPAT=INT(W_ASSIETTEPAT*PartPatRubChg/100000+1/2)
    END ELSE
     W_ASSIETTEPAT=W_ASSIETTE
     W_COTISPAT=INT(W_ASSIETTE*PartPatRubChg/100000+1/2)
    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_ASSIETTEBRUTE)
     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)
    END
  END CASE
  I=I+1
REPEAT
IF W_TRAITPROFIL="FICTIF" THEN RETURN
IF W_TYPETRAIT#"R" THEN
*
* CALCUL SAISIES/ARRETS SUR SALAIRE
*
 W_MONTSAISIEARRET=0
 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
   CALL CalcIndLicRet(CodAidantContrat,"L",W_MONTINDLICRET,W_PERIODEPAIE)
   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*100/2+1/2) 
  W_HEURESBRUT=ENR_DETAILCALCUL<6>
  W_REMBTCOUPON=0
  IF ConvColContrat="02" THEN
   IF W_HEURESBRUT>INT(W_HORMOISLEGAL/2) THEN
    W_REMBTCOUPON=W_COUPONCARTORANG
   END ELSE
    W_REMBTCOUPON=INT(W_HEURESBRUT*W_COUPONCARTORANG/(W_HORMOISLEGAL/2)+1/2)
   END
  END ELSE
   IF CarteOrangeEtabl=1 THEN
    IF W_HEURESBRUT>INT(W_HORMOISETABL/2) THEN
     W_REMBTCOUPON=W_COUPONCARTORANG
    END ELSE
     W_REMBTCOUPON=INT(W_HEURESBRUT*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
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 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
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>
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
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
       W_HEURESMALADIE=W_HEURESMALADIE+INT(ENR_DETAILCALCUL<5,K>/W_TAUXHOR*10000+1/2)   
      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" THEN
       IF TauxHorPlan35HEtab="" OR TauxHorPlan35HEtab="0" THEN
        W_HEURESMALADIE35H=W_HEURESMALADIE35H+INT(W_ASSIETTERUBSAI/W_TAUXHOR*10000+1/2)
       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
      W_ASSIETTE=W_ASSIETTE+W_ASSIETTERUBSAI
     END
     K=K+1  
   REPEAT
   J=J+1
 REPEAT
END
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 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
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="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
*     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=INT(ENR_DETAILCALCUL<7>*10000/W_TAUXHOR+1/2)
    W_HEURESBRUT=INT(W_ASSIETTEBRUTE*10000/W_TAUXHOR+1/2)
    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_TAUXHOR>W_FINTRANCHEVAL THEN
     W_ASSIETTE=INT(W_FINTRANCHEVAL*W_HEURESBRUT/10000+1/2)-INT(W_DEBTRANCHEVAL*W_HEURESBRUT/10000+1/2)
    END ELSE
     IF W_TAUXHOR>=W_DEBTRANCHEVAL THEN
*      W_TAUXHORBIS=INT(ENR_DETAILCALCUL<7>*10000/ENR_DETAILCALCUL<6>+1/2)
*      W_TAUXHORBIS=INT(ENR_DETAILCALCUL<7>*1000/W_HEURESBRUT1+1/2)
      W_TAUXHORBIS=INT(W_ASSIETTEBRUTE*1000/W_HEURESBRUT1+1/2)
      W_TAUXHORBIS=W_TAUXHORBIS*10
      IF W_HEURESBRUT1#W_HEURESBRUT THEN
       IF W_TAUXHORBIS#W_DEBTRANCHEVAL THEN
        W_ASSIETTE=INT((W_TAUXHORBIS-W_DEBTRANCHEVAL)*(W_HEURESBRUT+W_DEBTRANCHEHH)/10000+1/2)+INT(W_DEBTRANCHEVAL*W_HEURESBRUT/10000+1/2)
       END ELSE
*        W_ASSIETTE=ENR_DETAILCALCUL<7>-INT(W_TAUXHORBIS*W_DEBTRANCHEHH/10000+1/2)
        W_ASSIETTE=W_ASSIETTEBRUTE-INT(W_TAUXHORBIS*W_DEBTRANCHEHH/10000+1/2)
       END
      END ELSE
       W_ASSIETTE=INT((W_TAUXHORBIS-W_DEBTRANCHEVAL)*W_HEURESBRUT/10000+1/2)
      END
     END ELSE
      W_ASSIETTE=INT(W_HEURESBRUT*W_TAUXHOR/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
   IF W_DEBTRANCHEVAL=0 THEN
    TypTranche=EXTRACT(ENR_TRANCHE,10)
    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
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=""
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
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="802" OR CodRubSai="817" THEN W_JRSCONGESPRIS=W_JRSCONGESPRIS+ENR_DETAILADMIN<6,I>
   IF CodRubSai="803" THEN W_JRSANCPRIS=W_JRSANCPRIS+ENR_DETAILADMIN<6,I>
   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
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
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" THEN W_HEURESABS=W_HEURESABS+ENR_DETAILMANDAT<2,I>
  IF CodRubSai="802" OR CodRubSai="817" THEN W_JRSCONGESPRIS=W_JRSCONGESPRIS+ENR_DETAILMANDAT<6,I>
  IF CodRubSai="803" THEN W_JRSANCPRIS=W_JRSANCPRIS+ENR_DETAILMANDAT<6,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
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="10000"
  W_POURCENTNONEXO=0
 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=""
* 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
    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_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;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 CCN 01 (Aide a Domicile) et # 125% du taux horaire alors 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
       END ELSE
         W_TAUXHORRUBSAI=W_TAUXHORDIMJF
        END
       END
      END ELSE
       W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
       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" AND 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_MONTRUBSAI*10000/W_TAUXHOR+1/2)
      END
     END
     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)
     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 CCN 01 (Aide a Domicile) et # 125% du taux horaire alors 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
     END ELSE
      W_TAUXHORRUBSAI=W_TAUXHORDIMJF
     END
    END ELSE
     W_TAUXHORRUBSAI=INT(W_TAUXHOR*MontTauxRubSai/10000000+1/2)
     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" AND 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_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
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="815" 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 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 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_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
  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 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
  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=""
  GOSUB 300
  GOSUB 350
  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_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" 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<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" 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"
READ ENR_CONTRAT FROM F.CONTRAT,CodAidantContrat ELSE ENR_CONTRAT=""
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)
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)
* RECHERCHE SI AU MOINS UNE DES ACTIVITES DU CONTRAT EST DU TYPE CHOISI
* SI TYPE PERSONNEL = ADMINISTRATION ET SI TRAITEMENT = TOTAL
*IF W_TYPETRAIT="T" OR W_TYPETRAIT="TA" THEN
* IF W_TYPEPERSO="A" THEN
*  W_ACTIVITECOUV="NON"
*  J=1
*  LOOP
*   UNTIL W_ACTIVITECOUV="OUI" OR ActiviteContrat<1,J>="" DO
*    IF ActiviteContrat<1,J>[1,3]=W_CODENTITE THEN
*    READ ENR_ACTIVITES FROM F.ACTIVITES,ActiviteContrat<1,J> THEN
*      TypeActivite=EXTRACT(ENR_ACTIVITES,12)
*      IF TypeActivite=W_TYPEACTIVITE THEN
       W_ACTIVITECOUV="OUI"
*      END ELSE
*       J=J+1
*      END
*     END ELSE
*      J=J+1
*     END
*    END ELSE
*     J=J+1
*    END
*  REPEAT
* END
*END
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)
DernBullContrat=EXTRACT(ENR_CONTRAT,58)
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)
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
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)
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)
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)
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)
W_DEBTRANCHEVAL=0
W_FINTRANCHEVAL=0
W_DEBTRANCHEHH=0
W_FINTRANCHEHH=0
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
 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)
  W_FINTRANCHEVAL=INT(YFoisTHSmic*ValSmicHor/100+1/2)
  W_DEBTRANCHEHH=XHeures
  W_FINTRANCHEHH=YHeures
  W_TYPETRANCHE="HHSMIC"
 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)
RETURN
**********
* ECRITURE DU FICHIER CONTRAT POUR ADMINISTRATIF SANS DETAILADM
* OU SI LISSAGE POUR ACTUALISATION DU SUIVI DES CONTRATS
**********
1800 ENR_CONTRAT=REPLACE(ENR_CONTRAT,81;W_PERIODEPAIE)
WRITE ENR_CONTRAT ON F.CONTRAT,CodAidantContrat 
RETURN
**********
* ECRITURE DU FICHIER DETAILCALCUL
**********
1900 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
  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)
    WRITE ENR_ACOMPTEBULL ON F.ACOMPTEBULL,W_CLE
  END
 END
END ELSE
 IF ENR_DETAILCALCUL#"" THEN
  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 ENR_DETAILCALCUL<7>=0 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
  END ELSE
   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
  IF W_TYPEACTIVITE="I" THEN
   WRITE ENR_DETAILCALCUL ON F.DETAILCALCUL,W_RUPTCONTRAT:W_PERIODEPAIE
  END ELSE
   WRITE ENR_DETAILCALCUL ON F.DETAILCALCUL,W_CLE
  END
 END
END
RETURN
**********
* DETERMINATION DU TAUX HORAIRE
**********
2000 W_INDICEBASE=0
W_POINTSANC=0
W_COMPLCONV=0
IF GrilleContrat#"" THEN
 READ ENR_GRILLESCC FROM F.GRILLESCC,GrilleContrat ELSE ENR_GRILLESCC=""
 TypeGrille=EXTRACT(ENR_GRILLESCC,5)
 W_DEPARTGRILLE=DepartGrilContrat+INT(JrsSuspContrat/100)
 W_DEPARTGRILLE=OCONV(W_DEPARTGRILLE,"D4 ")
 W_DEPARTGRILLE=W_DEPARTGRILLE[7,4]:W_DEPARTGRILLE[4,2]
 W_NBANNEES=W_PERIODEPAIE-W_DEPARTGRILLE
 W_NBANNEES=INT(W_NBANNEES/100)
 IF W_NBANNEES<0 THEN W_NBANNEES=0
 IF W_PERIODEPAIE[5,2]<W_DEPARTGRILLE[5,2] THEN
  W_NBMOIS=12+W_PERIODEPAIE[5,2]-W_DEPARTGRILLE[5,2]
 END ELSE
  W_NBMOIS=W_PERIODEPAIE[5,2]-W_DEPARTGRILLE[5,2]
 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
 I=1
 W_FINGRILLE="NON"
 W_TAUXHOR=0
 LOOP
  AncDebGrille=EXTRACT(ENR_GRILLESCC,2,I)
  AncFinGrille=EXTRACT(ENR_GRILLESCC,3,I)
  ValGrille=EXTRACT(ENR_GRILLESCC,4,I)
  IF AncDebGrille="" THEN W_FINGRILLE="OUI"
  UNTIL W_FINGRILLE="OUI" DO
   IF AncDebGrille<=W_NBANNEES AND W_NBANNEES<AncFinGrille THEN
    W_TAUXHOR=ValGrille
    W_FINGRILLE="OUI"
   END ELSE
    I=I+1
   END
 REPEAT
 IF ConvColContrat="01" THEN
  I=1
  W_FINGRILLE="NON"
  W_TAUXHORDIMJF=0
  LOOP
   AncDebGrille=EXTRACT(ENR_GRILLESCC,2,I)
   AncFinGrille=EXTRACT(ENR_GRILLESCC,3,I)
   ValGrille=EXTRACT(ENR_GRILLESCC,4,I)
   IF AncDebGrille="" THEN W_FINGRILLE="OUI"
   UNTIL W_FINGRILLE="OUI" DO
    IF AncDebGrille<=1000 AND 1000<=AncFinGrille THEN
     W_TAUXHORDIMJF=ValGrille
     W_FINGRILLE="OUI"
    END ELSE
     I=I+1
    END
  REPEAT
 END ELSE
  W_TAUXHORDIMJF=W_TAUXHOR
 END
 W_INDICEBASE=EXTRACT(ENR_GRILLESCC,6)
 IF W_INDICEBASE="" THEN W_INDICEBASE=0
 IF W_TAUXHOR#0 THEN
  IF TypeGrille="C" THEN
   W_POINTSANC=W_TAUXHOR-EXTRACT(ENR_GRILLESCC,4,1)
   W_COMPLCONV=EXTRACT(ENR_GRILLESCC,4,1)-W_INDICEBASE
   IF CoefNivContrat#W_TAUXHOR THEN
    ENR_CONTRAT=REPLACE(ENR_CONTRAT,22,W_NOAVENANT;W_TAUXHOR)
   END
* SPECIF ASMAD
*   W_TAUXHOR=INT((W_TAUXHOR/1000)*PrixPointConvCol*1000/W_HORMOISETABL+1/2)
*   W_TAUXHORDIMJF=INT((W_TAUXHORDIMJF/1000)*PrixPointConvCol*1000/W_HORMOISETABL+1/2)
   W_TAUXHOR=INT((W_TAUXHOR/1000)*PrixPointConvCol*1000/16900+1/2)
   W_TAUXHORDIMJF=INT((W_TAUXHORDIMJF/1000)*PrixPointConvCol*1000/16900+1/2)
   ENR_CONTRAT=REPLACE(ENR_CONTRAT,23,W_NOAVENANT;W_TAUXHOR)
   WRITE ENR_CONTRAT ON F.CONTRAT,CodAidantContrat
  END ELSE
   IF CoefNivContrat#W_TAUXHOR THEN
    ENR_CONTRAT=REPLACE(ENR_CONTRAT,23,W_NOAVENANT;W_TAUXHOR)
    WRITE ENR_CONTRAT ON F.CONTRAT,CodAidantContrat
   END
  END
 END
END ELSE
 W_TAUXHOR=TauxHorContrat
 W_TAUXHORDIMJF=TauxHorContrat
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_BASERUBCHGAAD=0
LOOP
 UNTIL W_PERDEBREGUL=W_PERIODEPAIE DO
  READ W_ENR_DETAILCALCULPREC FROM F.DETAILCALCUL,W_CLE[1,8]:W_PERDEBREGUL THEN
   W_HEURESTRAVPREC=W_HEURESTRAVPREC+EXTRACT(W_ENR_DETAILCALCULPREC,41)
   W_HEURESTRAVEXOPREC=W_HEURESTRAVEXOPREC+EXTRACT(W_ENR_DETAILCALCULPREC,42)
   D=1
   LOOP
    W_RUBCHARGECALPREC=EXTRACT(W_ENR_DETAILCALCULPREC,8,D)
    UNTIL W_RUBCHARGECALPREC=CodRubChg OR W_RUBCHARGECALPREC="" DO
     D=D+1
   REPEAT
   IF W_RUBCHARGECALPREC=CodRubChg THEN
    IF EXTRACT(W_ENR_DETAILCALCULPREC,9,D)="" THEN
     IF W_PERDEBREGUL>=DatMontEnEuro THEN
      W_BASERUBCHGAAD=W_BASERUBCHGAAD+EXTRACT(W_ENR_DETAILCALCULPREC,12,D)
     END ELSE
      IF W_PERIODEPAIE>=DatMontEnEuro THEN
       W_BASERUBCHGAAD=W_BASERUBCHGAAD+INT(EXTRACT(W_ENR_DETAILCALCULPREC,12,D)*100000/655957+1/2)
      END ELSE
       W_BASERUBCHGAAD=W_BASERUBCHGAAD+EXTRACT(W_ENR_DETAILCALCULPREC,12,D)     
      END
     END
    END ELSE
     IF W_PERDEBREGUL>=DatMontEnEuro THEN
      W_BASERUBCHGAAD=W_BASERUBCHGAAD+EXTRACT(W_ENR_DETAILCALCULPREC,9,D)
     END ELSE
      IF W_PERIODEPAIE>=DatMontEnEuro THEN
       W_BASERUBCHGAAD=W_BASERUBCHGAAD+INT(EXTRACT(W_ENR_DETAILCALCULPREC,9,D)*100000/655957+1/2)
      END ELSE
       W_BASERUBCHGAAD=W_BASERUBCHGAAD+EXTRACT(W_ENR_DETAILCALCULPREC,9,D)      
      END
     END
    END
   END ELSE
    D=1
    LOOP
     W_RUBCHARGECALPREC=EXTRACT(W_ENR_DETAILCALCULPREC,49,D)
     UNTIL W_RUBCHARGECALPREC=CodRubChg OR W_RUBCHARGECALPREC="" DO
      D=D+1
    REPEAT
    IF W_RUBCHARGECALPREC=CodRubChg THEN
     W_BASERUBCHGAAD=W_BASERUBCHGAAD+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
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=""
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)
  LOOP
   W_PERANCOURSCONTRATTER=W_PERANCOURSCONTRATBIS<1,G>
   UNTIL W_PERANCOURSCONTRATTER="" DO
    W_CUMULHEURESDIFF=W_CUMULHEURESDIFF+W_DIFFANCOURSCONTRAT<1,G>
    G=G+1
  REPEAT
  W_CUMULHEURESDIFF=W_CUMULHEURESDIFF "R26,(#7)"
  AbsencesCal="CUMUL HEURES DIFF.:":W_CUMULHEURESDIFF
 END
END
W_JOURSABS=0
MAT W_TABLEABS=""
W_REQUETEABS='TSELECT ABSENCESAIDANT AVEC NumMotifAidant < "17" 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 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" THEN
      W_ABSENCEDERNIERJOUR="OUI"
      IF FinAbsAidant-W_DEBUTABS1>180 AND W_MOTIFABS#"03" THEN
       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" 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."
  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)
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
   W_SOLDECONGESHEURES=INT(JrOuvrHContrat*6/5+1/2)
   W_SOLDECONGESHEURES=INT(W_SOLDECONGESJOURS*W_SOLDECONGESHEURES/100+1/2)
  END ELSE
   W_SOLDECONGESHEURES=INT(W_SOLDECONGESJOURS*JrOuvrHContrat/100+1/2)
  END
 END
 W_SOLDEANCJOURS=CAncRestContrat-W_JRSANCPRIS
 IF W_SOLDEANCJOURS<=0 THEN
  W_SOLDEANCHEURES=0
 END ELSE
  IF AncOuvrConvCol=1 THEN
   W_SOLDEANCHEURES=INT(JrOuvrHContrat*6/5+1/2)
   W_SOLDEANCHEURES=INT(W_SOLDEANCJOURS*W_SOLDEANCHEURES/100+1/2)
  END ELSE
   W_SOLDEANCHEURES=INT(W_SOLDEANCJOURS*JrOuvrHContrat/100+1/2)
  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 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 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 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
 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
