***********************************************************
*                                                         *
* PROGRAMME DE CALCUL DES FACTURES MANDATAIRES            *
*                                                         *
* OCTOBRE 1999                            STEPHANE HERVET *
*                                                         *
***********************************************************

* RECAPITULATIFS DES GOSUB

* 10  -> CALCUL DES MONTANTS A PAYER
* 20  -> CALCUL DES CHARGES URSSAF APPELLEES PAR L'ASSOCIATION
* 30  -> CALCUL DE LA PROVISION DE CONGES PAYES
* 40  -> CALCUL DE LA REPRISE DE PROVISION DE CONGES PAYES
* 50  -> CALCUL DES FRAIS DE GESTION
* 60  -> CALCUL MAJORATION PAR BULLETIN
* 70  -> CALCUL FRAIS D'OUVERTURE DE DOSSIER
* 80  -> CALCUL DES COMPLEMENTS DE FACTURATION
* 90  -> CALCUL DES COTISATIONS ANNUELLES
* 99  -> GESTION DES ACCORDS
* 100 -> ECRITURE DU FICHIER FACTURAIDE
* 101 -> CONSTITUTION DU FICHIER FACTURAIDE (MONTANT SALAIRE A PAYER)
* 102 -> CONSTITUTION DU FICHIER FACTURAIDE (CHG. URSSAF)
* 103 -> CONSTITUTION DU FICHIER FACTURAIDE (COTIS. PREV.)
* 104 -> CONSTITUTION DU FICHIER FACTURAIDE (PROVISION CONGES)
* 105 -> CONSTITUTION DU FICHIER FACTURAIDE (REPRISE PROVISION CONGES)
* 106 -> CONSTITUTION DU FICHIER FACTURAIDE (FRAIS DE GESTION)
* 107 -> CONSTITUTION DU FICHIER FACTURAIDE (MAJORATION PAR BULLETIN)
* 108 -> CONSTITUTION DU FICHIER FACTURAIDE (FRAIS OUVERTURE DOSSIER)
* 109 -> CONSTITUTION DU FICHIER FACTURAIDE (COMPLEMENTS FACTURATION)
* 110 -> CONSTITUTION DU FICHIER FACTURAIDE (APPEL COTISATION)
* 111 -> CONSTITUTION DU FICHIER FACTURORG + FACTURAIDE (ACCORD SUR MOIS)
* 112 -> CONSTITUTION DU FICHIER FACTURORG + FACTURAIDE (ACCORD RETROACTIF)
* 200 -> RECHERCHE SI RUB. SAISIE DEJA AFFECTEE // FRAIS GESTION
* 300 -> LANCEMENT DES DIVERS TRAITEMENTS

* 201 -> MAJ ATTRIBUT 10 DE FACTURAIDE
* 210 -> TRI DES ACCORDS SANS RATTRAP. PAR RANG,DATE DEB., DATE FIN
* 310 -> GESTION DES DROITS SUR ACCORD
* 311 -> CALCUL DES DROITS D'ACCORDS (1) = EN-COURS
* 312 -> CALCUL DES DROITS D'ACCORDS (2) = RETROACTIF
* 500 -> GENERATION DU FICHIER STATACTAIDE
* 501 -> RECHERCHE SI ACT. DEJA AFFECTEE
* 999 -> REMISE A ZERO DES VARIABLES
***********************************************************
***********************************************************
* OUVERTURE DES FICHIERS

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","ACCORD" TO F.ACCORD ELSE STOP
OPEN "","ACTIVITES" TO F.ACTIVITES ELSE STOP
OPEN "","ACTIVITESAIDE" TO F.ACTIVITESAIDE ELSE STOP
OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE STOP
OPEN "","BAREMEPARTEMP" TO F.BAREMEPARTEMP ELSE STOP
OPEN "","CHGPARTEMP" TO F.CHGPARTEMP ELSE STOP
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP
OPEN "","COMPLFACT" TO F.COMPLFACT ELSE STOP
OPEN "","COMPTESPARTICULIERS" TO F.COMPTESPARTICULIERS ELSE STOP
OPEN "","CONSTANTESPAIE" TO F.CONSTANTESPAIE ELSE STOP
OPEN "","CONTRAT" TO F.CONTRAT ELSE STOP
OPEN "","CONTRATSPREV" TO F.CONTRATSPREV ELSE STOP
OPEN "","COTISANAIDE" TO F.COTISANAIDE ELSE STOP
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE STOP
OPEN "","ELTSPARTEMP" TO F.ELTSPARTEMP ELSE STOP
OPEN "","FACTURAIDE" TO F.FACTURAIDE ELSE STOP
OPEN "","FACTURORG" TO F.FACTURORG ELSE STOP
OPEN "","ORGPRISECHARGE" TO F.ORGPRISECHARGE ELSE STOP
OPEN "","NUMEROFACT" TO F.NUMEROFACT ELSE STOP
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE STOP
OPEN "","STATACTAIDE" TO F.STATACTAIDE ELSE STOP
OPEN "","TABLES" TO F.TABLES ELSE STOP

***********************************************************
***********************************************************
* DEBUT TRAITEMENT DES ARTICLES

PROCREAD PARAMETRES ELSE STOP

* RECUPERATION MOIS DE LA PERIODE DE TRAITEMENT
W_RANGMOISPERIODE=INDEX(PARAMETRES," ",3)
W_PERIODEMOIS=PARAMETRES[W_RANGMOISPERIODE+1,6]
W_RANGMOISPERIODE=INDEX(PARAMETRES," ",4)
W_PERIODEDEBUT=PARAMETRES[W_RANGMOISPERIODE+1,5]
W_RANGMOISPERIODE=INDEX(PARAMETRES," ",5)
W_PERIODEFIN=PARAMETRES[W_RANGMOISPERIODE+1,5]

* CALCULE SI FIN TRIMESTRE OU PAS
IF W_PERIODEFIN-W_PERIODEDEBUT>31 THEN
    W_FINTRIM=1
    W_PERIODECOURS=W_PERIODEMOIS-2
END ELSE
    W_FINTRIM=0
    W_PERIODECOURS=W_PERIODEMOIS
    W_PERIODEDEBUTMOIS=W_PERIODEDEBUT
    W_PERIODEFINMOIS=W_PERIODEFIN
END

* RECUPERE LE CODE ENTITE
W_RANGENTITE=INDEX(PARAMETRES," ",2)
W_CODEENTITE=PARAMETRES[W_RANGENTITE+1,3]

* RECUPERE LE TYPE ACTIVITE
W_RANGACTIVITE=INDEX(PARAMETRES," ",6)
W_TYPEACTIVITE=PARAMETRES[W_RANGACTIVITE+1,1]

* RECUPERE SI GESTION EXCLUSIVE
W_RANGGESTEXCLU=INDEX(PARAMETRES," ",7)
W_GESTEXCLU=PARAMETRES[W_RANGGESTEXCLU+1,1]

***********************************************************
***********************************************************
* INITIALISATION DES VARIABLES

* LECTURE COMPTES PARTICULIERS
READ ENR_COMPTESPART FROM F.COMPTESPARTICULIERS,W_CODEENTITE ELSE
     ENR_COMPTESPART=""
     *PRINT "ERREUR COMPTES PARTICULIERS"
END

* LECTURE ENTITE JURIDIQUE
READ ENR_ASSOCIATION FROM F.ASSOCIATION,W_CODEENTITE ELSE
     *PRINT "ERREUR ASSOCIATION"
END

* LECTURE NUMERO DE FACTURE AIDE MANDATAIRE
READ ENR_NUMEROFACT FROM F.NUMEROFACT,W_CODEENTITE ELSE
     *PRINT "ERREUR NUMEROFACT"
     STOP
END

* LECTURE CONSTANTESPAIE POUR TAUX HOR. SMIC
READ ENR_CONSTANTESPAIE FROM F.CONSTANTESPAIE,"1" THEN
     * RECHERCHE TX SMIC
     I=1 
     LOOP
	  UNTIL ENR_CONSTANTESPAIE<4,I><=W_PERIODEDEBUT OR ENR_CONSTANTESPAIE<4,I>="" DO
	  I=I+1
     REPEAT
END
W_TAUXSMIC=ENR_CONSTANTESPAIE<3,I>

W_REQVIDE="FAUX"
ENR_FACTURAIDE=""
W_CODEAIDANT=""
W_CODEAIDE=""
W_MONTANTSALPAYER=0
W_NBAIDANT=0
W_CHANGEAIDE=0
W_PASSWRITE=0
W_CODECONTRATPREV=""
W_MONTANTCHGURSSAFPAT=0
W_MONTANTCHGURSSAFSAL=0
W_MONTANTCOTISPREV=0
W_COTISPREVASSO=0
W_PROVISIONCONGESTOTAL=0
W_CUMULFRAISGESTION=0
W_FRAISGESTION=0
W_NBBULLETIN=0
W_VALEURMAJORATION=0
W_VALEURFRAISDOSSIER=0
W_MONTANTCHGURSSAFPAYEESMOIS=0
W_MONTANTCOTISPREVPAYEESMOIS=0
W_NBJOURCONGESCOURS=0
W_PROVISIONCOURS=0
W_MONTANTREPRISECOURS=0
W_ERREURCOTISAN=0
W_MONTANTCOTIS=0
W_MONTANTCOMPLFACT=0
W_MONTANTFACTURE=0
W_MONTANTASSIETTEFRAISGEST=0
W_HRESPAYEES=0
W_MONTANTREPRISEPROV=0
W_MONTANTSALPAYERCOURS=0
W_ASSIETTEFRAISGESTION=""
W_CUMULMONTANTREPRISEPROV=0
W_AFFECTFRAISDOSSIER=0
W_MONTANTPARTBENEF=0
W_NBACCORD=0
ENR_NOMAIDANT=""
W_NUMACCORD=""
W_ACCORDTRI1=""
W_ACCORDSANSRATTRAP=""
W_TOTALHRESPAYEES=0
W_HRESACCORDEES=0
W_MONTANTBRUT=0
W_MONTANTFORFAIT=0
W_FRAISGESTION1=0    
W_FRAISGESTION2=0
W_FRAISGESTION3=0
W_BASEFRAISGESTION=0
W_BASEFRAISGESTION1=0
W_BASEFRAISGESTION2=0
W_BASEFRAISGESTION3=0
W_TAUX=""
W_BASEPARTEMP=0
W_MONTANTCHGAPPELEES=0
W_RANGCOURS=0

* RECHERCHE DU TAUX TVA EN TYPE MANDATAIRE
EXECUTE 'TSELECT ACTIVITES AVEC 0 = "':W_CODEENTITE:']" AND AVEC 12 = "M" PAR 0'
EXECUTE "SAUVE-LISTE LISTACTIVITES"
EXECUTE "LISTE LISTACTIVITES" RETURNING W_MSG
SELECT F.ACTIVITES TO LISTACTIVITES

READNEXT CLE FROM LISTACTIVITES THEN
    READ ENR_ACTIVITES FROM F.ACTIVITES,CLE THEN
   	W_CODETVA=ENR_ACTIVITES<11>
	READ ENR_TAUXTVA FROM F.TABLES,"TAUXTVA" THEN
	    I=1
	    LOOP
		 UNTIL ENR_TAUXTVA<2,I>=W_CODETVA DO
		 I=I+1
	    REPEAT
	    W_TAUXTVA=ENR_TAUXTVA<4,I>
	END
    END ELSE
	W_TAUXTVA=0
    END
END

EXECUTE "EFFACER-LISTE LISTACTIVITES"

* RECHERCHE DU TAUX CHARGES DANS CHGPARTEMP
EXECUTE 'TSELECT CHGPARTEMP'
EXECUTE "SAUVE-LISTE LISTCHGPARTEMP"
EXECUTE "LISTE LISTCHGPARTEMP" RETURNING W_MSG
SELECT F.CHGPARTEMP TO LISTCHGPARTEMP

READNEXT CLE FROM LISTCHGPARTEMP THEN
    READ ENR_CHGPARTEMP FROM F.CHGPARTEMP,CLE THEN
	 * RECHERCHE DATE EN COURS DE VALIDITE

	 * SI PAS TRIMESTRE
	 IF W_FINTRIM=0 THEN
  	     I=1
	     LOOP	
	          UNTIL ENR_CHGPARTEMP<3,I><=W_PERIODEFINMOIS OR ENR_CHGPARTEMP<3,I>="" DO  
		  I=I+1
	     REPEAT
	     IF CLE="01" THEN W_TAUX<1>=ENR_CHGPARTEMP<2>
	     IF CLE="02" THEN W_TAUX<2>=ENR_CHGPARTEMP<2>
	     IF CLE<>"01" AND CLE<>"02" THEN W_TAUX<3>=ENR_CHGPARTEMP<2>
	 END ELSE
	     FOR J=1 TO 3
		  * CALCUL DU DERNIER JOUR DU MOIS
		  W_PERIODECOURS=W_PERIODECOURS+J
	          IF W_PERIODECOURS[5,2]="12" THEN
                      W_PERIODEFINMOIS=ICONV("01/":W_PERIODECOURS[5,2]:"/":W_PERIODECOURS[1,4]+1,"D4/")-1
	          END ELSE
                      W_PERIODEFINMOIS=ICONV("01/":W_PERIODECOURS[5,2]+1:"/":W_PERIODECOURS[1,4],"D4/")-1
	          END

  	          I=1
	          LOOP	
	               UNTIL ENR_CHGPARTEMP<3,I><=W_PERIODEFINMOIS OR ENR_CHGPARTEMP<3,I>="" DO  
		       I=I+1
	          REPEAT
   	          IF CLE="01" THEN W_TAUX<1,J>=ENR_CHGPARTEMP<2>
	          IF CLE="02" THEN W_TAUX<2,J>=ENR_CHGPARTEMP<2>
	          IF CLE<>"01" AND CLE<>"02" THEN W_TAUX<3,J>=ENR_CHGPARTEMP<2>
	     NEXT
	 END
    END 
END

EXECUTE "EFFACER-LISTE LISTCHGPARTEMP"

IF W_FINTRIM=0 THEN
     W_PERIODECOURS=W_PERIODEMOIS
END ELSE
     W_PERIODECOURS=W_PERIODEMOIS-2
END

***********************************************************
***********************************************************
* CHARGEMENT DE LA LISTE DES ARTICLES SELECTIONNES

EXECUTE "LISTE LISTEFACTMANDAT" CAPTURING MSG RETURNING MSGCODE

IF MSGCODE<1>=209 THEN 
    *PRINT "ERREUR MSGCODE"
    STOP
END

SELECT F.CONTRAT TO LISTEFACTMANDAT

LOOP
    * LECTURE RESULTAT REQUETE JUSQUE REQUETE = VIDE
    READNEXT CLE FROM LISTEFACTMANDAT ELSE W_REQVIDE="VRAI"
    UNTIL W_REQVIDE="VRAI" DO

    W_CODECONTRAT=CLE        

    READ ENR_CONTRAT FROM F.CONTRAT,W_CODECONTRAT ELSE
        *PRINT "ERREUR CONTRAT"
	STOP
    END
   
    * TEST SI 1er TOUR
    IF W_CODEAIDANT="" THEN W_CODEAIDANT=CLE[1,5]
    IF W_CODEAIDE="" THEN 

        READ ENR_STATACTAIDE FROM F.STATACTAIDE,W_CODEAIDE:W_CODEENTITE:W_PERIODECOURS ELSE
	   ENR_STATACTAIDE=""
        END

	W_CODEAIDE=ENR_CONTRAT<3>
	W_CHANGEAIDE=0

        W_ERREURDETAILCALCUL=0

	* CALCUL DES CHG. URSSAF
	GOSUB 20
    END

    * TEST SI CLE AIDE DIFFERENTE
    IF W_CODEAIDE<>ENR_CONTRAT<3> THEN

        GOSUB 100
	
        READ ENR_STATACTAIDE FROM F.STATACTAIDE,W_CODEAIDE:W_CODEENTITE:W_PERIODECOURS ELSE
	   ENR_STATACTAIDE=""
        END

        * GESTION DES ACCORDS
        GOSUB 99
        W_TOTALHRESPAYEES=0

        IF ENR_FACTURAIDE<5><>"" THEN WRITE ENR_FACTURAIDE ON F.FACTURAIDE,W_CODEAIDE:W_CODEENTITE:W_TYPEACTIVITE:W_PERIODEMOIS:ENR_NUMEROFACT<3>:"0"

        GOSUB 999

        W_CODEAIDE=ENR_CONTRAT<3>
        W_CODEAIDANT=CLE[1,5]

        W_ERREURDETAILCALCUL=0

	* CALCUL DES CHG. URSSAF
	GOSUB 20

        * CALCUL DES MONTANTS A PAYER
        GOSUB 10

        W_MONTANTSALPAYER=0

     	W_CHANGEAIDE=1
    END

    * TEST SI CLE AIDANT DIFFERENTE
    IF W_CODEAIDANT<>CLE[1,5] THEN
	W_CHANGEAIDE=0

        W_CODEAIDANT=CLE[1,5]

        * CALCUL DES MONTANTS A PAYER
	GOSUB 10

        W_MONTANTSALPAYER=0

    END ELSE
	IF W_CHANGEAIDE=0 THEN
            * CALCUL DES MONTANTS A PAYER
	    GOSUB 10
	END ELSE
	    W_CHANGEAIDE=0
	END
    END

    WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT

REPEAT

GOSUB 100

* GESTION DES ACCORDS
GOSUB 99

IF ENR_FACTURAIDE<5><>"" THEN WRITE ENR_FACTURAIDE ON F.FACTURAIDE,W_CODEAIDE:W_CODEENTITE:W_TYPEACTIVITE:W_PERIODEMOIS:ENR_NUMEROFACT<3>:"0"

WRITE ENR_NUMEROFACT ON F.NUMEROFACT,W_CODEENTITE

STOP

***********************************************************
***********************************************************
* CALCUL DES MONTANTS A PAYER

10 *
  
   * LECTURE DES DETAILCALCULS LIES AU CONTRAT

   * SI PAS FIN DE TRIMESTRE
   IF W_FINTRIM=0 THEN

       W_RANGCOURS=1

       W_MONTANTELEMENTS=0
       W_DETAILCALCULVIDE=0
       READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODECOURS ELSE
	   ENR_DETAILCALCUL=""
	   ENR_DETAILCALCUL<7>=0
	   ENR_DETAILCALCUL<21>=0
	   *PRINT "ERREUR DETAILCALCUL":W_CODECONTRAT:W_PERIODECOURS
	   W_DETAILCALCULVIDE=1
       END

       READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_CODEAIDANT ELSE
	   *PRINT "ERREUR CIVILAIDANT"
   	   STOP
       END

       * GESTION 65 X SMIC
       IF ENR_ELTSPARTEMP<9>="02" THEN
	   IF ENR_DETAILCALCUL<9,1>="" THEN ENR_DETAILCALCUL<9,1>=0
	   W_BASEPARTEMP=W_BASEPARTEMP+ENR_DETAILCALCUL<9,1>
       END   

       IF W_GESTEXCLU=1 THEN

            IF ENR_DETAILCALCUL<1>="E" AND ENR_CONTRAT<28>=0 THEN
	      IF W_DETAILCALCULVIDE=0 THEN
                  ***********************************************************

              * LANCEMENT DES TRAITEMENTS
                  GOSUB 300
       
                  IF ENR_BAREMEPARTEMP<2><>4 THEN 
		       GOSUB 101
		  END ELSE
		       GOSUB 201
		  END

	  	  GOSUB 500
	      END
	    END ELSE
              IF ENR_DETAILCALCUL<1>="P" AND ENR_CONTRAT<28>=1 THEN
	        IF W_DETAILCALCULVIDE=0 THEN
                  ***********************************************************
                  * LANCEMENT DES TRAITEMENTS
                  GOSUB 300
       
                  IF ENR_BAREMEPARTEMP<2><>4 THEN 
		       GOSUB 101
		  END ELSE
		       GOSUB 201
		  END
  
	  	  GOSUB 500
	        END
	      END ELSE
	        W_ERREURDETAILCALCUL=1
   	      END
            END
       END ELSE
           IF W_DETAILCALCULVIDE=0 THEN
               ***********************************************************
               * LANCEMENT DES TRAITEMENTS
               GOSUB 300
         
               IF ENR_BAREMEPARTEMP<2><>4 THEN
		    GOSUB 101
	       END ELSE	
		    GOSUB 201
	       END

    	       GOSUB 500
           END
       END
   END ELSE
       W_PERIODECOURS=W_PERIODEMOIS-2

       W_RANGCOURS=0

       LOOP
	  UNTIL W_PERIODECOURS=W_PERIODEMOIS+1 DO

	  W_RANGCOURS=W_RANGCOURS+1
	
	  * CALCUL PERIODE DEBUT + FIN DU MOIS EN COURS
	  W_PERIODEDEBUTMOIS=ICONV("01/":W_PERIODECOURS[5,2]:"/":W_PERIODECOURS[1,4],"D4/")
	  IF W_PERIODECOURS[5,2]="12" THEN
              W_PERIODEFINMOIS=ICONV("01/":W_PERIODECOURS[5,2]:"/":W_PERIODECOURS[1,4]+1,"D4/")-1
	  END ELSE
              W_PERIODEFINMOIS=ICONV("01/":W_PERIODECOURS[5,2]+1:"/":W_PERIODECOURS[1,4],"D4/")-1
	  END

          W_TOTALHRESPAYEES=0
          W_MONTANTELEMENTS=0
	  W_DETAILCALCULVIDE=0
          READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODECOURS ELSE
	        ENR_DETAILCALCUL=""
	        ENR_DETAILCALCUL<7>=0
	        ENR_DETAILCALCUL<21>=0
	        *PRINT "ERREUR DETAILCALCUL":W_CODECONTRAT:W_PERIODECOURS
	        W_DETAILCALCULVIDE=1
          END

          READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_CODEAIDANT ELSE
	        *PRINT "ERREUR CIVILAIDANT"
   	        STOP
          END

          READ ENR_STATACTAIDE FROM F.STATACTAIDE,W_CODEAIDE:W_CODEENTITE:W_PERIODECOURS ELSE
	        ENR_STATACTAIDE=""
          END

          * GESTION 65 X SMIC
          IF ENR_ELTSPARTEMP<9>="02" THEN
	      IF ENR_DETAILCALCUL<9,1>="" THEN ENR_DETAILCALCUL<9,1>=0
	      W_BASEPARTEMP=W_BASEPARTEMP+ENR_DETAILCALCUL<9,1>
          END   

	  IF W_DETAILCALCULVIDE=0 THEN
              ***********************************************************
              * LANCEMENT DES TRAITEMENTS
              GOSUB 300
       
              IF ENR_BAREMEPARTEMP<2><>4 THEN 
		   GOSUB 101
	      END ELSE
		   GOSUB 201
	      END
  
	      GOSUB 500
	  END

 	  WRITE ENR_STATACTAIDE ON F.STATACTAIDE,W_CODEAIDE:W_CODEENTITE:W_PERIODECOURS 
	    
        W_PERIODECOURS=W_PERIODECOURS+1

	REPEAT

	W_PERIODECOURS=W_PERIODECOURS-1

   END

RETURN

***********************************************************
***********************************************************
* CALCUL DES CHARGES URSSAF APPELLEES PAR L'ASSOCIATION

20 *

   READ ENR_ELTSPARTEMP FROM F.ELTSPARTEMP,W_CODEAIDE ELSE
       *PRINT "ERREUR ELTSPARTEMP"
   END

   * SI CHARGES URSSAF APPELLEES PAR ASSO
   IF ENR_ELTSPARTEMP<8>=1 THEN
       * SI 1 CONTRAT DE PREVOYANCE
       IF ENR_ELTSPARTEMP<15><>"" THEN
	   W_CODECONTRATPREV=ENR_ELTSPARTEMP<15>

	   * LIT LE FICHIER CONTRATSPREV LIE AU CONTRAT DE PREVOYANCE
           READ ENR_CONTRATSPREV FROM F.CONTRATSPREV,W_CODECONTRATPREV ELSE
		*PRINT "ERREUR CONTRATPREV"
	   END
       END
   END	

   * SI COTISATION PREV. APPELLEES PAR ASSO 
   IF ENR_ELTSPARTEMP<7>=1 THEN
       W_COTISPREVASSO=1
   END

   * VERIFIE SI DATE DEBUT + RADIATION PREVOYANCE => OK SUR PERIODE

   * SI PAS DATE D'ADHESION
   IF ENR_ELTSPARTEMP<5>="" THEN
       W_COTISPREVASSO=0
   END
   * SI DATE RADIATION < PERIODE FACTURATION
   IF ENR_ELTSPARTEMP<6><>"" THEN
       IF ENR_ELTSPARTEMP<6><W_PERIODEDEBUT THEN
           W_COTISPREVASSO=0
       END
   END
   * SI DATE ADHESION > PERIODE FACTURATION
   IF ENR_ELTSPARTEMP<5>>W_PERIODEFIN THEN
       W_COTISPREVASSO=0
   END
  
RETURN

***********************************************************
***********************************************************
* CALCUL DE LA PROVISION DE CONGES PAYES

30 *

   * TEST SI CONGES PAYES PAS PAYES AU MOIS
   IF ENR_CONTRAT<31>=0 AND ENR_CONTRAT<94>=1 THEN

       * TEST SI CONTRAT ACTIFS AU DERNIER JOUR DE LA PERIODE
       IF ENR_CONTRAT<8>="" OR ENR_CONTRAT<8>>W_PERIODEFIN THEN

	   * CALCUL LE TOTAL DES CHG. PATRONALES	
	   W_TOTALCHGPAT=W_MONTANTCOTISPREVPAYEESMOIS+W_MONTANTCHGURSSAFPAYEESMOIS

	   * CALCUL % CHG. PATRONALES // BRUT
	   W_TAUXCHARGESPAT=W_TOTALCHGPAT/ENR_DETAILCALCUL<7>
	   W_TAUXCHARGESPAT=INT((W_TAUXCHARGESPAT*10000)+1/2)

	   * CALCUL DE L'ANCIENNETE
	   W_ANCIENNETE=INT((W_PERIODEFIN-ENR_CONTRAT<7>)/365)

	   * CALCUL DU TAUX DE PROVISION
	   IF W_ANCIENNETE<5 THEN W_TAUXPROVISION=1000
	   IF W_ANCIENNETE<10 AND W_ANCIENNETE>=5 THEN W_TAUXPROVISION=1032
	   IF W_ANCIENNETE<15 AND W_ANCIENNETE>=10 THEN W_TAUXPROVISION=1064
	   IF W_ANCIENNETE<20 AND W_ANCIENNETE>=15 THEN W_TAUXPROVISION=1098
	   IF W_ANCIENNETE>=20 THEN W_TAUXPROVISION=1128

	   * CALCUL PROVISION
           W_PROVISIONCONGESa=INT(((W_TAUXPROVISION/10000)*ENR_DETAILCALCUL<7>)+1/2)
           W_PROVISIONCONGESb=INT(((W_TAUXCHARGESPAT*W_PROVISIONCONGESa)/10000)+1/2)
	   W_PROVISIONCONGES=INT((W_PROVISIONCONGESa+W_PROVISIONCONGESb)+1/2)

	   W_PROVISIONCONGESTOTAL=W_PROVISIONCONGESTOTAL+W_PROVISIONCONGES

	   ENR_CONTRAT<86>=ENR_CONTRAT<86>+W_PROVISIONCONGES
       END
   END

RETURN

***********************************************************
***********************************************************
* CALCUL DE LA REPRISE DE PROVISION DE CONGES PAYES

40 *
   W_MONTANTREPRISEPROV=0
   W_MONTANTREPRISECOURS=0

   IF ENR_CONTRAT<31>=0 AND ENR_CONTRAT<94>=1 THEN

      * TEST SI CONTRAT SE TERMINE SUR PERIODE
      IF ENR_CONTRAT<8><=W_PERIODEFIN AND ENR_CONTRAT<8><>"" THEN

           * CALCUL MONTANT REPRISE PROVISION
	   W_MONTANTREPRISEPROV=INT((ENR_CONTRAT<85>+ENR_CONTRAT<86>)+1/2)
           ENR_CONTRAT<85>=0
           ENR_CONTRAT<86>=0
           W_CUMULMONTANTREPRISEPROV=W_CUMULMONTANTREPRISEPROV+W_MONTANTREPRISEPROV
      END ELSE

   	   * CALCUL MONTANT REPRISE PROVISION
   	   W_NBJOURABSCONGES=ENR_DETAILCALCUL<47>
	
	   W_NBJOURCONGESMAXI=ENR_CONTRAT<39>+ENR_CONTRAT<41>
   	   W_PROVISIONMAXI=ENR_CONTRAT<85>

           IF W_NBJOURABSCONGES<>0 THEN
	       * SI NB MAXI ACQUIS < NB JOUR PRIS
               IF W_NBJOURCONGESMAXI<W_NBJOURABSCONGES THEN
		    W_NBJOURCONGESCOURS=ENR_CONTRAT<44>-ENR_CONTRAT<83>
		    W_PROVISIONCOURS=ENR_CONTRAT<86>
                    IF W_NBJOURCONGESMAXI<>0 THEN 
   		        W_MONTANTREPRISECOURS=INT((ENR_CONTRAT<85>*((W_NBJOURABSCONGES-W_NBJOURCONGESMAXI)/W_NBJOURCONGESMAXI))+1/2)
                    END ELSE
   		        W_MONTANTREPRISECOURS=INT((ENR_CONTRAT<86>*((W_NBJOURABSCONGES-W_NBJOURCONGESCOURS)/W_NBJOURCONGESCOURS))+1/2)
                    END
		    W_MONTANTREPRISEPROV=ENR_CONTRAT<85>+W_MONTANTREPRISECOURS
	       END ELSE
    	           IF W_NBJOURCONGESMAXI<>0 THEN W_MONTANTREPRISEPROV=INT((W_PROVISIONMAXI*(W_NBJOURABSCONGES/W_NBJOURCONGESMAXI))+1/2)
	       END
           END
           ENR_CONTRAT<85>=ENR_CONTRAT<85>-(W_MONTANTREPRISEPROV-W_MONTANTREPRISECOURS)
           ENR_CONTRAT<86>=ENR_CONTRAT<86>-W_MONTANTREPRISECOURS
           W_CUMULMONTANTREPRISEPROV=W_CUMULMONTANTREPRISEPROV+W_MONTANTREPRISEPROV
      END

   END

RETURN

***********************************************************
***********************************************************
* CALCUL DES FRAIS DE GESTION

50 *

    IF ENR_ELTSPARTEMP<13><>"" THEN
        * LECTURE DU DETAIL DU BAREME
        READ ENR_BAREMEPARTEMP FROM F.BAREMEPARTEMP,ENR_ELTSPARTEMP<13> ELSE
	    *PRINT "ERREUR BAREMEPARTEMP"
        END

	* SI FONCTION DU BRUT ACQUIS       
        IF ENR_BAREMEPARTEMP<2>=3 THEN
          IF W_FINTRIM=0 THEN
	      W_BASEFRAISGESTION=W_BASEFRAISGESTION+ENR_DETAILCALCUL<7>
	      W_CUMULFRAISGESTION=W_CUMULFRAISGESTION+ENR_DETAILCALCUL<7>
          END ELSE
            IF W_PERIODECOURS=W_PERIODEMOIS-2 THEN
	      W_BASEFRAISGESTION1=W_BASEFRAISGESTION1+ENR_DETAILCALCUL<7>
              W_FRAISGESTION1=W_FRAISGESTION1+ENR_DETAILCALCUL<7>
            END ELSE
              IF W_PERIODECOURS=W_PERIODEMOIS-1 THEN
	        W_BASEFRAISGESTION2=W_BASEFRAISGESTION2+ENR_DETAILCALCUL<7>
                W_FRAISGESTION2=W_FRAISGESTION2+ENR_DETAILCALCUL<7>
              END ELSE
  	        W_BASEFRAISGESTION3=W_BASEFRAISGESTION3+ENR_DETAILCALCUL<7>
                W_FRAISGESTION3=W_FRAISGESTION3+ENR_DETAILCALCUL<7>
              END
            END
          END
	END

	* SI FONCTION HRES PAYEES  
        IF ENR_BAREMEPARTEMP<2>=2 THEN
          IF W_FINTRIM=0 THEN
	      W_BASEFRAISGESTION=W_BASEFRAISGESTION+ENR_DETAILCALCUL<6>
	      W_CUMULFRAISGESTION=W_CUMULFRAISGESTION+ENR_DETAILCALCUL<6>
          END ELSE
            IF W_PERIODECOURS=W_PERIODEMOIS-2 THEN
	      W_BASEFRAISGESTION1=W_BASEFRAISGESTION1+ENR_DETAILCALCUL<6>
              W_FRAISGESTION1=W_FRAISGESTION1+ENR_DETAILCALCUL<6>
            END ELSE
              IF W_PERIODECOURS=W_PERIODEMOIS-1 THEN
	        W_BASEFRAISGESTION2=W_BASEFRAISGESTION2+ENR_DETAILCALCUL<6>
                W_FRAISGESTION2=W_FRAISGESTION2+ENR_DETAILCALCUL<6>
              END ELSE
 	        W_BASEFRAISGESTION3=W_BASEFRAISGESTION3+ENR_DETAILCALCUL<6>
                W_FRAISGESTION3=W_FRAISGESTION3+ENR_DETAILCALCUL<6>
              END
            END
          END
	END

	* SI FONCTION HRES TRAVAILLEES       
	IF ENR_BAREMEPARTEMP<2>=1 THEN
	    I=1
	    LOOP
	         UNTIL ENR_DETAILCALCUL<2,I>="" DO

	         * LECTURE RUBRIQUE DE SAISIE
  	         READ ENR_RUBSAISIE FROM F.RUBSAISIE,ENR_DETAILCALCUL<2,I> ELSE
		      *PRINT "ERREUR RUBSAISIE"
	         END

  	         * SI RUBRIQUE TYPE M.O.D OU M.O.D J.F
	         IF ENR_RUBSAISIE<2>="3" OR ENR_RUBSAISIE<2>="4" THEN
                 IF W_FINTRIM=0 THEN
		       IF ENR_RUBSAISIE<8>="2" THEN
			    IF ENR_RUBSAISIE<9>>="1000000" THEN
				 W_BASEFRAISGESTION=W_BASEFRAISGESTION+ENR_DETAILCALCUL<3,I>
	  		         W_CUMULFRAISGESTION=W_CUMULFRAISGESTION+ENR_DETAILCALCUL<3,I>
			    END ELSE
				 W_BASEFRAISGESTION=W_BASEFRAISGESTION+INT((ENR_DETAILCALCUL<3,I>*ENR_RUBSAISIE<9>/1000000)+1/2)
	  		         W_CUMULFRAISGESTION=W_CUMULFRAISGESTION+INT((ENR_DETAILCALCUL<3,I>*ENR_RUBSAISIE<9>/1000000)+1/2)
			    END
		       END ELSE
			    W_BASEFRAISGESTION=W_BASEFRAISGESTION+ENR_DETAILCALCUL<3,I>
			    W_CUMULFRAISGESTION=W_CUMULFRAISGESTION+ENR_DETAILCALCUL<3,I>
		       END
                 END ELSE
                   IF W_PERIODECOURS=W_PERIODEMOIS-2 THEN
		       IF ENR_RUBSAISIE<8>="2" THEN
			    IF ENR_RUBSAISIE<9>>="1000000" THEN
				 W_BASEFRAISGESTION1=W_BASEFRAISGESTION1+ENR_DETAILCALCUL<3,I>
	  		         W_FRAISGESTION1=W_FRAISGESTION1+ENR_DETAILCALCUL<3,I>
			    END ELSE
				 W_BASEFRAISGESTION1=W_BASEFRAISGESTION1+INT((ENR_DETAILCALCUL<3,I>*ENR_RUBSAISIE<9>/1000000)+1/2)
	  		         W_FRAISGESTION1=W_FRAISGESTION1+INT((ENR_DETAILCALCUL<3,I>*ENR_RUBSAISIE<9>/10000)+1/2)
			    END
		       END ELSE
			    W_BASEFRAISGESTION1=W_BASEFRAISGESTION1+ENR_DETAILCALCUL<3,I>
			    W_FRAISGESTION1=W_FRAISGESTION1+ENR_DETAILCALCUL<3,I>
		       END
                   END ELSE
                     IF W_PERIODECOURS=W_PERIODEMOIS-1 THEN
		       IF ENR_RUBSAISIE<8>="2" THEN
			    IF ENR_RUBSAISIE<9>>="1000000" THEN	
				 W_BASEFRAISGESTION2=W_BASEFRAISGESTION2+ENR_DETAILCALCUL<3,I>
	  		         W_FRAISGESTION2=W_FRAISGESTION2+ENR_DETAILCALCUL<3,I>
			    END ELSE
				 W_BASEFRAISGESTION2=W_BASEFRAISGESTION2+INT((ENR_DETAILCALCUL<3,I>*ENR_RUBSAISIE<9>/1000000)+1/2)
	  		         W_FRAISGESTION2=W_FRAISGESTION2+INT((ENR_DETAILCALCUL<3,I>*ENR_RUBSAISIE<9>/10000)+1/2)
			    END
		       END ELSE
			    W_BASEFRAISGESTION2=W_BASEFRAISGESTION2+ENR_DETAILCALCUL<3,I>
			    W_FRAISGESTION2=W_FRAISGESTION2+ENR_DETAILCALCUL<3,I>
		       END
                     END ELSE
		       IF ENR_RUBSAISIE<8>="2" THEN
			    IF ENR_RUBSAISIE<9>>="1000000" THEN
				 W_BASEFRAISGESTION3=W_BASEFRAISGESTION3+ENR_DETAILCALCUL<3,I>
	  		         W_FRAISGESTION3=W_FRAISGESTION3+ENR_DETAILCALCUL<3,I>
			    END ELSE
				 W_BASEFRAISGESTION3=W_BASEFRAISGESTION3+INT((ENR_DETAILCALCUL<3,I>*ENR_RUBSAISIE<9>/1000000)+1/2)
	  		         W_FRAISGESTION3=W_FRAISGESTION3+INT((ENR_DETAILCALCUL<3,I>*ENR_RUBSAISIE<9>/10000)+1/2)
			    END
		       END ELSE
			    W_BASEFRAISGESTION3=W_BASEFRAISGESTION3+ENR_DETAILCALCUL<3,I>
			    W_FRAISGESTION3=W_FRAISGESTION3+ENR_DETAILCALCUL<3,I>
		       END
                     END
                   END
                 END
	         END

  	         I=I+1
   	    REPEAT
	END

	* SI FONCTION DES RUBRIQUES DE SAISIES
	IF ENR_BAREMEPARTEMP<2>=4 THEN
	    I=1
	    LOOP
	         UNTIL ENR_DETAILCALCUL<2,I>="" DO

		 * RECHERCHE SI RUB. PRESENTE DANS BAREMEPARTEMP
		 J=1
		 LOOP
		      UNTIL ENR_BAREMEPARTEMP<9,J>=ENR_DETAILCALCUL<2,I> OR ENR_BAREMEPARTEMP<9,J>="" DO
		      J=J+1
		 REPEAT

		 * SI RUB. PRESENTE
		 IF ENR_BAREMEPARTEMP<9,J>=ENR_DETAILCALCUL<2,I> THEN

		      * RECHERCHE SI RUB. DEJA AFFECTEE
		      GOSUB 200

		      W_ASSIETTEFRAISGESTION<K,1>=ENR_DETAILCALCUL<2,I>
		      IF ENR_BAREMEPARTEMP<10,J>="B" THEN
  		           W_ASSIETTEFRAISGESTION<K,2>=W_ASSIETTEFRAISGESTION<K,2>+INT((ENR_DETAILCALCUL<3,I>*ENR_BAREMEPARTEMP<11,J>/1000)+1/2)
		      END ELSE		      
  		           W_ASSIETTEFRAISGESTION<K,2>=W_ASSIETTEFRAISGESTION<K,2>+INT((ENR_DETAILCALCUL<5,I>*ENR_BAREMEPARTEMP<11,J>/1000)+1/2)
		      END
		      
  		      W_ASSIETTEFRAISGESTION<K,3>=W_ASSIETTEFRAISGESTION<K,3>+ENR_DETAILCALCUL<3,I>
  		      W_ASSIETTEFRAISGESTION<K,4>=ENR_BAREMEPARTEMP<11,J>

		      W_MONTANTASSIETTEFRAISGEST=W_MONTANTASSIETTEFRAISGEST+W_ASSIETTEFRAISGESTION<K,2>
		 END

  	         I=I+1
   	    REPEAT
	END

	* CALCULE LA VALEUR DES FRAIS DE GESTION

	IF ENR_BAREMEPARTEMP<2><>4 AND W_FINTRIM=0 THEN
	     * RECHERCHE RANG DANS BAREME
             I=1
	     LOOP 
	          UNTIL ENR_BAREMEPARTEMP<4,I>>W_CUMULFRAISGESTION AND ENR_BAREMEPARTEMP<3,I><=W_CUMULFRAISGESTION OR ENR_BAREMEPARTEMP<3,I>="" DO
 	          I=I+1
	     REPEAT

  	     * APPLIQUE LA PART FIXE + COMPLEMENT
	     IF ENR_BAREMEPARTEMP<3,I><>"" THEN
   	       W_FRAISGESTION=ENR_BAREMEPARTEMP<5,I>+((W_CUMULFRAISGESTION-ENR_BAREMEPARTEMP<3,I>)*(ENR_BAREMEPARTEMP<6,I>/100))
	       W_FRAISGESTION=INT(W_FRAISGESTION+1/2)
	     END ELSE
	       W_FRAISGESTION=0
	     END

	END
    END

RETURN

***********************************************************
***********************************************************
* CALCUL MAJORATION PAR BULLETIN

60 *

   W_NBBULLETIN=W_NBBULLETIN+1
   W_VALEURMAJORATION=ENR_BAREMEPARTEMP<8>

RETURN

***********************************************************
***********************************************************
* CALCUL DES FRAIS D'OUVERTURE DE DOSSIER

70 *

   W_NBFRAISDOSSIER=0

   * TEST SI FRAIS DE DOSSIER
   IF ENR_BAREMEPARTEMP<7><>"" THEN

	READ ENR_ACTIVITESAIDE FROM F.ACTIVITESAIDE,W_CODEAIDE ELSE
	     *PRINT "ERREUR ACTIVITESAIDE"
	     ENR_ACTIVITESAIDE=""
	END

	* VERIFIE ACTIVITESAIDE 
	IF ENR_ACTIVITESAIDE<>"" THEN
	     J=1
	     LOOP 
		  UNTIL ENR_ACTIVITESAIDE<1,J>="" DO
		  
		  IF ENR_ACTIVITESAIDE<1,J>[1,3]=W_CODEENTITE THEN
		       * VERIFIE SI ACTIVITES TYPE MANDATAIRE
		       READ ENR_ACTIVITES FROM F.ACTIVITES,ENR_ACTIVITESAIDE<1,J> ELSE
		            *PRINT "ERREUR ACTIVITES"
		       END

		       IF ENR_ACTIVITES<12>="M" THEN
			    IF ENR_ACTIVITESAIDE<2,J>="" THEN				
				 * RECHERCHE DATE DEBUT DANS DETAILCALCUL
				 K=1
				 LOOP
				      UNTIL ENR_DETAILCALCUL<26,K>=ENR_ACTIVITESAIDE<1,J> OR ENR_DETAILCALCUL<26,K>="" DO
				      K=K+1
				 REPEAT 
    			         IF ENR_DETAILCALCUL<26,K><>"" THEN
				      * AFFECTE DATE DEBUT PERIODE
				      ENR_ACTIVITESAIDE<2,J>=ICONV("01/":W_PERIODECOURS[5,2]:"/":W_PERIODECOURS[1,4],"D4/")
					   
				      WRITE ENR_ACTIVITESAIDE ON F.ACTIVITESAIDE,W_CODEAIDE
                                      IF W_NBFRAISDOSSIER<>-1 OR W_AFFECTFRAISDOSSIER=1 THEN
 				           W_NBFRAISDOSSIER=1
                                           W_VALEURFRAISDOSSIER=ENR_BAREMEPARTEMP<7>*W_NBFRAISDOSSIER
                                      END
                                 END
                           END ELSE
				 IF ENR_ACTIVITESAIDE<2,J><=W_PERIODEFIN AND ENR_ACTIVITESAIDE<2,J>>=W_PERIODEDEBUT THEN
				      W_AFFECTFRAISDOSSIER=1
				      W_NBFRAISDOSSIER=1
				      W_VALEURFRAISDOSSIER=ENR_BAREMEPARTEMP<7>*W_NBFRAISDOSSIER
				 END ELSE
			              IF ENR_ACTIVITESAIDE<2,J><=W_PERIODEDEBUT THEN
					   W_AFFECTFRAISDOSSIER=0
	                                   W_NBFRAISDOSSIER=-1
          	                           W_VALEURFRAISDOSSIER=0
				      END
				 END
                           END
		       END		       
		  END
		  J=J+1
	     REPEAT
	END
   END

RETURN

***********************************************************
***********************************************************
* CALCUL DES COMPLEMENTS DE FACTURATION

80 *

   READ ENR_COMPLFACT FROM F.COMPLFACT,W_CODEAIDE:W_CODEENTITE:"M" THEN

   J=1
   LOOP
	UNTIL ENR_COMPLFACT<1,J>="" DO

	GOSUB 109

	W_MONTANTCOMPLFACT=W_MONTANTCOMPLFACT+ENR_COMPLFACT<4,J>
	J=J+1

   REPEAT
   DELETE F.COMPLFACT,W_CODEAIDE:W_CODEENTITE:"M"
   END

RETURN

***********************************************************
***********************************************************
* CALCUL DES COTISATIONS ANNUELLES

90 *

   READ ENR_COTISANAIDE FROM F.COTISANAIDE,W_CODEAIDE:W_CODEENTITE ELSE
	ENR_COTISANAIDE=""
	W_ERREURCOTISAN=1
   END

   * TEST SI COTISATION ANNUELLE OU ANNIVERSAIRE
   IF ENR_ASSOCIATION<32,1>="A" THEN	
	* SI MOIS JANVIER OU FICHIER NON EXISTANT
	IF W_PERIODECOURS[5,2]="01" OR W_ERREURCOTISAN=1 THEN
	     W_MONTANTCOTIS=ENR_ASSOCIATION<31,1>
	     * RECHERCHE SI PERIODE PAS AFFECTEE
	     J=1
	     LOOP
		  UNTIL ENR_COTISANAIDE<1,J>=W_PERIODECOURS OR ENR_COTISANAIDE<1,J>="" DO
		  J=J+1
	     REPEAT

	     IF ENR_COTISANAIDE<1,J>="" THEN	
   	          ENR_COTISANAIDE<1,-1>=W_PERIODECOURS
	          ENR_COTISANAIDE<2,-1>=W_MONTANTCOTIS
	     END
	END ELSE
	     * RECHERCHE SI PERIODE PAS AFFECTEE
	     J=1
	     LOOP
		  UNTIL ENR_COTISANAIDE<1,J>[1,4]=W_PERIODECOURS[1,4] OR ENR_COTISANAIDE<1,J>="" DO
		  J=J+1
	     REPEAT

	     * SI PERIODE PAS TROUVEE
 	     IF ENR_COTISANAIDE<1,J>="" THEN
	          W_MONTANTCOTIS=ENR_ASSOCIATION<31,1>
	          ENR_COTISANAIDE<1,-1>=W_PERIODECOURS
	          ENR_COTISANAIDE<2,-1>=W_MONTANTCOTIS
	     END
	END		
	
   END ELSE
	* SI MOIS ANNIVERSAIRE	

        * RECHERCHE SI ANNEE EN COURS DEJA AFFECTEE
	J=1
	LOOP
	     UNTIL ENR_COTISANAIDE<1,J>="" DO
	     J=J+1
	REPEAT

	IF J>1 THEN J=J-1

	* SI PERIODE PAS TROUVEE ALORS RECHERCHE PERIODE -1
	IF ENR_COTISANAIDE<1,J><>"" THEN
             IF ENR_COTISANAIDE<1,J>[1,4]<W_PERIODECOURS[1,4] OR ENR_COTISANAIDE<1,J>="" THEN
     	          * SI PERIODE -1 PAS TROUVEE
	          IF ENR_COTISANAIDE<1,J><>"" THEN
		       * TEST MOIS PERIODE -1
		       IF W_PERIODECOURS[5,2]>=ENR_COTISANAIDE<1,J>[5,2] THEN
		            W_MONTANTCOTIS=ENR_ASSOCIATION<31,1>
	                    ENR_COTISANAIDE<1,-1>=W_PERIODECOURS
	                    ENR_COTISANAIDE<2,-1>=W_MONTANTCOTIS
		       END
	          END ELSE
                       W_MONTANTCOTIS=ENR_ASSOCIATION<31,1>
	               ENR_COTISANAIDE<1,-1>=W_PERIODECOURS
	               ENR_COTISANAIDE<2,-1>=W_MONTANTCOTIS
	          END
	     END
	END ELSE
             W_MONTANTCOTIS=ENR_ASSOCIATION<31,1>
	     ENR_COTISANAIDE<1,-1>=W_PERIODECOURS
	     ENR_COTISANAIDE<2,-1>=W_MONTANTCOTIS	  
	END
   END

   ***********************************************************
   * CONSTITUTION DU FICHIER FACTURAIDE (APPEL COTISATION)   
   GOSUB 110

RETURN

***********************************************************
***********************************************************
* GESTION DES ACCORDS

99 *

   * CALCUL TOTAL DIVERS ELEMENTS
*   W_MONTANTELEMENTS=W_MONTANTSALPAYER+W_MONTANTCHGURSSAFPAT+W_MONTANTCHGURSSAFSAL
*   W_MONTANTELEMENTS=W_MONTANTELEMENTS+W_MONTANTCOTISPREV+W_VALEURFRAISDOSSIER
*   W_MONTANTELEMENTS=W_MONTANTELEMENTS+W_MONTANTCOTIS+((W_NBBULLETIN-1)*W_VALEURMAJORATION)
*   W_MONTANTELEMENTS=W_MONTANTELEMENTS+W_FRAISGESTION+W_MONTANTASSIETTEFRAISGEST 
*   W_MONTANTELEMENTS=W_MONTANTELEMENTS+W_MONTANTCOMPLFACT

    L=1
    LOOP
	 UNTIL ENR_FACTURAIDE<5,L>="" DO
         W_MONTANTELEMENTS=W_MONTANTELEMENTS+ENR_FACTURAIDE<5,L>
         L=L+1
    REPEAT

   W_FINACCORD="FAUX"
**   W_NBACCORD=1
   W_NBACCORD=0
   W_TYPEORG=""
   W_ACCORDSANSRATTRAP=""
   W_ACCORDTRI1=""

   * SI GESTION TRIMESTRE
   IF W_FINTRIM=1 THEN
       W_PERIODEDEBUTACC=ICONV("01/":W_PERIODECOURS[5,2]:"/":W_PERIODECOURS[1,4],"D4/")
       IF W_PERIODECOURS[5,2]<>"12" THEN
           W_PERIODEFINACC=ICONV("01/":W_PERIODECOURS[5,2]+1:"/":W_PERIODECOURS[1,4],"D4/")-1
       END ELSE
           W_PERIODEFINACC=ICONV("01/01/":W_PERIODECOURS[1,4]+1,"D4/")-1
       END
   END ELSE
       W_PERIODEDEBUTACC=W_PERIODEDEBUT
       W_PERIODEFINACC=W_PERIODEFIN
   END

   * LECTURE DES ACCORDS DE L'AIDE
   W_NUMACCORD="001"
   
   LOOP
       * LECTURE FICHIER ACCORD
       READ ENR_ACCORD FROM F.ACCORD,W_CODEAIDE:W_NUMACCORD ELSE
            W_FINACCORD="VRAI"
       END
       UNTIL W_FINACCORD="VRAI" DO

       W_CODEORGANISMECHARGE=ENR_ACCORD<1>
       W_CODEACCORD=W_CODEAIDE:W_NUMACCORD

       * LECTURE ORGPRISECHARGE DE L'ACCORD
       READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_ACCORD<1> ELSE
	    *PRINT "ERREUR ORGPRISECHG":ENR_ACCORD<1>
       END

       * SI ACCORD SUR ENTITE + NON SUPPRIME
       IF ENR_ORGPRISECHARGE<46>=W_CODEENTITE AND ENR_ACCORD<18><>"O" THEN
	    READ ENR_ACTIVITES FROM F.ACTIVITES,ENR_ORGPRISECHARGE<47,1> ELSE
		 *PRINT "ERREUR ACTIVITES"
	    END
	    * SI ACTIVITE MANDATAIRE
	    IF ENR_ACTIVITES<12>="M" THEN

		 * TEST SI ACCORD ACTIF SUR PERIODE (1)
		 IF ENR_ACCORD<5><=W_PERIODEFINACC AND ENR_ACCORD<6>>=W_PERIODEDEBUTACC AND ENR_ACCORD<18><>"O" THEN 
		      * TEST SI HISTORIQUE ACCORD RENSEIGNE
	              IF ENR_ACCORD<14>="" THEN
		           * EFFECTUE EFFET RETROACTIF SUR ACCORD

			   W_CODEORGANISMECHARGE=ENR_ACCORD<1>
		           * LECTURE ORGPRISECHARGE DE L'ACCORD
		           READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_ACCORD<1> ELSE
	 	               *PRINT "ERREUR ORGPRISECHARGE"
	   	           END
		
		           * CALCUL DATE DEB. + DATE FIN ACCORD
		           W_DATEDEBACC=OCONV(ENR_ACCORD<5>,"D4/")
		           W_DATEFINACC=OCONV(ENR_ACCORD<6>,"D4/")
		           W_DATEDEBACC=W_DATEDEBACC[7,4]:W_DATEDEBACC[4,2]			
		           W_DATEFINACC=W_DATEFINACC[7,4]:W_DATEFINACC[4,2]			

			   IF W_PERIODECOURS<W_DATEFINACC THEN
				IF W_PERIODECOURS[5,2]="01" THEN				
				     W_DATEFINACC=W_PERIODECOURS[1,4]-1:"12"
				END ELSE
				     W_DATEFINACC=W_PERIODECOURS-1
				END
			   END

		           * PARCOURS TOUTES LES PERIODES DE DEB. ACC. JUSQU'A FIN ACC.
		           W_PERIODETRAITEACC=W_DATEDEBACC
		           LOOP 
			        UNTIL W_PERIODETRAITEACC>W_DATEFINACC DO

			        * SELECTIONNE DETAILCALCUL ACTIF SUR PERIODE
		                EXECUTE 'SSELECT DETAILCALCUL AVEC CodeAideDetailCalcul = "':W_CODEAIDE:'" AND AVEC PeriodeDetailCalcul = "':W_PERIODETRAITEACC:'" AND AVEC CodAssoContratDetailCalcul = "':W_CODEENTITE:'" PAR 0'
 		                EXECUTE 'SAUVE-LISTE LISTEDETAILCALCULRETRO'
		                EXECUTE "LISTE LISTEDETAILCALCULRETRO" CAPTURING MSG RETURNING MSGCODE

			        * SELECTIONNE FACTURAIDE ACTIF SUR PERIODE
		                EXECUTE 'SSELECT FACTURAIDE AVEC CodeAideFact = "':W_CODEAIDE:'" AND AVEC PeriodeCleFactAide = "':W_PERIODETRAITEACC:'" AND AVEC CodeEntiteFact = "':W_CODEENTITE:'" AND AVEC ActiviteFact = "M" PAR-DECR FactureModif'
 		                EXECUTE 'SAUVE-LISTE LISTEFACTURAIDERETRO'
		                EXECUTE "LISTE LISTEFACTURAIDERETRO" CAPTURING MSG RETURNING MSGCODE

				W_PERIODERETROACTIVE=W_PERIODETRAITEACC

		                GOSUB 312

				IF W_ERREUR=0 THEN GOSUB 112

				EXECUTE 'EFFACER-LISTE LISTEDETAILCALCULRETRO'
				EXECUTE 'EFFACER-LISTE LISTEFACTURAIDERETRO'

			        * TEST SI MOIS DE DECEMBRE
		                IF W_PERIODETRAITEACC[5,2]<>12 THEN
			    	     W_PERIODETRAITEACC=W_PERIODETRAITEACC+1
			        END ELSE
				     W_PERIODETRAITEACC=W_PERIODETRAITEACC[1,4]+1:"01"
			        END
		           REPEAT
		      END
			   
		      * MISE EN TABLE DES ACCORDS
		      W_NBACCORD=W_NBACCORD+1
	   	        
		      W_ACCORDSANSRATTRAP<W_NBACCORD,1>=W_CODEAIDE:W_NUMACCORD
		      W_ACCORDSANSRATTRAP<W_NBACCORD,2>=ENR_ACCORD<8>
		      W_ACCORDSANSRATTRAP<W_NBACCORD,3>=ENR_ACCORD<5>
		      W_ACCORDSANSRATTRAP<W_NBACCORD,4>=ENR_ACCORD<6>
		      W_ACCORDSANSRATTRAP<W_NBACCORD,5>=ENR_ACCORD<1>
		     
		 END ELSE
		      IF ENR_ACCORD<14>="" AND ENR_ACCORD<18><>"O" THEN
		           * EFFECTUE EFFET RETROACTIF SUR ACCORD

			   W_CODEORGANISMECHARGE=ENR_ACCORD<1>
		           * LECTURE ORGPRISECHARGE DE L'ACCORD
		           READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_ACCORD<1> ELSE
	 	               *PRINT "ERREUR ORGPRISECHARGE"
	   	           END
		
		           * CALCUL DATE DEB. + DATE FIN ACCORD
		           W_DATEDEBACC=OCONV(ENR_ACCORD<5>,"D4/")
		           W_DATEFINACC=OCONV(ENR_ACCORD<6>,"D4/")
		           W_DATEDEBACC=W_DATEDEBACC[7,4]:W_DATEDEBACC[4,2]			
		           W_DATEFINACC=W_DATEFINACC[7,4]:W_DATEFINACC[4,2]			

		           * PARCOURS TOUTES LES PERIODES DE DEB. ACC. JUSQU'A FIN ACC.
		           W_PERIODETRAITEACC=W_DATEDEBACC
		           LOOP 
			        UNTIL W_PERIODETRAITEACC>W_DATEFINACC DO

			        * SELECTIONNE DETAILCALCUL ACTIF SUR PERIODE
		                EXECUTE 'SSELECT DETAILCALCUL AVEC CodeAideDetailCalcul = "':W_CODEAIDE:'" AND AVEC PeriodeDetailCalcul = "':W_PERIODETRAITEACC:'" AND AVEC CodAssoContratDetailCalcul = "':W_CODEENTITE:'" PAR 0'
 		                EXECUTE 'SAUVE-LISTE LISTEDETAILCALCULRETRO'
		                EXECUTE "LISTE LISTEDETAILCALCULRETRO" CAPTURING MSG RETURNING MSGCODE

			        * SELECTIONNE FACTURAIDE ACTIF SUR PERIODE
		                EXECUTE 'SSELECT FACTURAIDE AVEC CodeAideFact = "':W_CODEAIDE:'" AND AVEC PeriodeCleFactAide = "':W_PERIODETRAITEACC:'" AND AVEC CodeEntiteFact = "':W_CODEENTITE:'" AND AVEC ActiviteFact = "M" PAR-DECR FactureModif'
 		                EXECUTE 'SAUVE-LISTE LISTEFACTURAIDERETRO'
		                EXECUTE "LISTE LISTEFACTURAIDERETRO" CAPTURING MSG RETURNING MSGCODE

				W_PERIODERETROACTIVE=W_PERIODETRAITEACC

		                GOSUB 312

				IF W_ERREUR=0 THEN GOSUB 112

				EXECUTE 'EFFACER-LISTE LISTEDETAILCALCULRETRO'
				EXECUTE 'EFFACER-LISTE LISTEFACTURAIDERETRO'

			        * TEST SI MOIS DE DECEMBRE
		                IF W_PERIODETRAITEACC[5,2]<>12 THEN
			    	     W_PERIODETRAITEACC=W_PERIODETRAITEACC+1
			        END ELSE
				     W_PERIODETRAITEACC=W_PERIODETRAITEACC[1,4]+1:"01"
			        END
		           REPEAT
		      END
		 END
	    END
       END

       W_NUMACCORD=W_NUMACCORD+1 "R%3"
   REPEAT

   IF W_ACCORDSANSRATTRAP<1><>"" THEN
       * TRI DES ACCORDS SANS RATTRAP
       GOSUB 210
   END

   * GESTION DROITS SUR ACCORD
   GOSUB 310

RETURN

***********************************************************
***********************************************************
* ECRITURE DU FICHIER FACTURAIDE

100 *

    IF ENR_BAREMEPARTEMP<2><>4 THEN
        * CONSTITUTION DU FICHIER FACTURAIDE (CHG. URSSAF)
        IF ENR_ELTSPARTEMP<8>="1" THEN GOSUB 102

        * CONSTITUTION DU FICHIER FACTURAIDE (COTIS. PREV.)
        GOSUB 103

        * CONSTITUTION DU FICHIER FACTURAIDE (PROVISION CONGES)
        GOSUB 104

        * CONSTITUTION DU FICHIER FACTURAIDE (REPRISE PROVISION CONGES)
        GOSUB 105
    END ELSE
	ENR_FACTURAIDE<13>=3
    END

    * CONSTITUTION DU FICHIER FACTURAIDE (FRAIS DE GESTION)
    GOSUB 106

    * CONSTITUTION DU FICHIER FACTURAIDE (MAJORATION PAR BULLETIN)
    GOSUB 107

    * CONSTITUTION DU FICHIER FACTURAIDE (FRAIS OUVERTURE DOSSIER)
    GOSUB 108

    * GESTION DES COMPLEMENTS DE FACTURATION
    GOSUB 80

    * VERIFICATION QU'AU MOINS UNE MV EN ATT.5 EST <> DE 0
    W_AFFECTPOSSIBLE=0
    J=1
    LOOP
	 UNTIL ENR_FACTURAIDE<5,J>="" DO
	 IF ENR_FACTURAIDE<5,J><>"0" THEN
	      W_AFFECTPOSSIBLE=1
         END
	 J=J+1
    REPEAT

    IF ENR_ASSOCIATION<31,1><>"" AND ENR_ASSOCIATION<31,1><>0 AND W_AFFECTPOSSIBLE=1 THEN
         * GESTION DES COTISATIONS ANNUELLES
         GOSUB 90
    END

    * AFFECTATION ATTRIBUT 10
    ENR_FACTURAIDE<10>=ENR_NOMAIDANT<1>

    * ECRITURE FACTURAIDE
    IF ENR_FACTURAIDE<1><>"" AND W_AFFECTPOSSIBLE=1 AND W_ERREURDETAILCALCUL=0 THEN
        
	* INCREMENTE LE NUMERO DE FACTURE
        ENR_NUMEROFACT<3>=ENR_NUMEROFACT<3>+1 "R%10"

	* FAIT LE TOTAL DES ATTRIBUTS 5
	I=1
        W_TOTALSOMME=0
	LOOP
	     UNTIL ENR_FACTURAIDE<5,I>="" DO
	     W_TOTALSOMME=W_TOTALSOMME+ENR_FACTURAIDE<5,I>
	     I=I+1
	REPEAT

	ENR_FACTURAIDE<8>=W_TAUXTVA
	ENR_FACTURAIDE<9>=INT((W_TOTALSOMME*W_TAUXTVA/10000)+1/2)
        ENR_FACTURAIDE<11>="0"
       
        * ECRITURE ELTSPARTEMP
        ENR_ELTSPARTEMP<16>=W_PERIODEMOIS
        WRITE ENR_ELTSPARTEMP ON F.ELTSPARTEMP,W_CODEAIDE

        * ECRITURE STATACTAIDE
        WRITE ENR_STATACTAIDE ON F.STATACTAIDE,W_CODEAIDE:W_CODEENTITE:W_PERIODECOURS

	* ECRITURE COTISANAIDE
        WRITE ENR_COTISANAIDE ON F.COTISANAIDE,W_CODEAIDE:W_CODEENTITE 

        * SI FACTURE NEGATIVE ALORS GENERE UN COMPLEMENT DE FACTURATION
	IF ENR_FACTURAIDE<5><0 THEN
	     ENR_COMPLFACT=""
	     ENR_COMPLFACT<1>="AVOIR SUR FACTURE ":ENR_NUMEROFACT<3>
	     ENR_COMPLFACT<2>=""
	     ENR_COMPLFACT<3>=""
	     ENR_COMPLFACT<4>=""
	     ENR_COMPLFACT<5>=ENR_FACTURAIDE<5>
	     ENR_COMPLFACT<6>=""

	     WRITE ENR_COMPLFACT ON F.COMPLFACT,W_CODEAIDE:W_CODEENTITE:"M"
	END


    END ELSE
	ENR_FACTURAIDE=""
    END

RETURN

***********************************************************
***********************************************************
* CONSTITUTION DU FICHIER FACTURAIDE (MONTANT SALAIRE A PAYER)

101 *

    IF W_MONTANTSALPAYERCOURS<>0 THEN
   	  W_NBAIDANT=W_NBAIDANT+1

        ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODECOURS
        ENR_FACTURAIDE<2,W_NBAIDANT>="SALAIRE VERSE A ":ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
        ENR_FACTURAIDE<3,W_NBAIDANT>=""
        ENR_FACTURAIDE<4,W_NBAIDANT>=""
        ENR_FACTURAIDE<5,W_NBAIDANT>=W_MONTANTSALPAYERCOURS
        IF ENR_COMPTESPART<3>="" THEN ENR_COMPTESPART<3>=ENR_COMPTESPART<9>
        ENR_FACTURAIDE<6,W_NBAIDANT>=ENR_COMPTESPART<3>
        ENR_FACTURAIDE<7,W_NBAIDANT>=""

    END
    GOSUB 201

RETURN

***********************************************************
***********************************************************
* CONSTITUTION DU FICHIER FACTURAIDE (CHG. URSSAF)

102 *

    IF W_MONTANTCHGURSSAFPAT+W_MONTANTCHGURSSAFSAL<>0 THEN
        W_NBAIDANT=W_NBAIDANT+1

	* VERIFICATION SI EXO + 70 ANS ET < 65 X SMIC
	IF ENR_ELTSPARTEMP<9>="02" THEN
	     * SI > 65 SMIC
             IF W_BASEPARTEMP>(65*W_TAUXSMIC) THEN
		  W_MONTANTCHGAPPELEES=(W_BASEPARTEMP*W_TAUX<3,W_RANGCOURS>)+((W_BASEPARTEMP-(65*W_TAUXSMIC))*W_TAUX<1,W_RANGCOURS>)+((65*W_TAUXSMIC)*W_TAUX<2,W_RANGCOURS>)
	     END
	END

        ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODECOURS
        ENR_FACTURAIDE<2,W_NBAIDANT>="CHARGES APPELEES PAR L'URSSAF"
        ENR_FACTURAIDE<3,W_NBAIDANT>=""
        ENR_FACTURAIDE<4,W_NBAIDANT>=""
	IF W_MONTANTCHGAPPELEES=0 THEN
             ENR_FACTURAIDE<5,W_NBAIDANT>=W_MONTANTCHGURSSAFPAT+W_MONTANTCHGURSSAFSAL
	END ELSE
             ENR_FACTURAIDE<5,W_NBAIDANT>=W_MONTANTCHGAPPELEES
	END
        IF ENR_COMPTESPART<5>="" THEN ENR_COMPTESPART<5>=ENR_COMPTESPART<9>
        ENR_FACTURAIDE<6,W_NBAIDANT>=ENR_COMPTESPART<5>
        ENR_FACTURAIDE<7,W_NBAIDANT>=""
    END

RETURN

***********************************************************
***********************************************************
* CONSTITUTION DU FICHIER FACTURAIDE (COTIS. PREV.)

103 *

    IF W_MONTANTCOTISPREV<>0 THEN
        W_NBAIDANT=W_NBAIDANT+1

        ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODECOURS
        ENR_FACTURAIDE<2,W_NBAIDANT>="CHARGES PREVOYANCE SUPPLEMENTAIRE"
        ENR_FACTURAIDE<3,W_NBAIDANT>=""
        ENR_FACTURAIDE<4,W_NBAIDANT>=""
        ENR_FACTURAIDE<5,W_NBAIDANT>=W_MONTANTCOTISPREV
        IF ENR_COMPTESPART<6>="" THEN ENR_COMPTESPART<6>=ENR_COMPTESPART<9>
        ENR_FACTURAIDE<6,W_NBAIDANT>=ENR_COMPTESPART<6>
        ENR_FACTURAIDE<7,W_NBAIDANT>=""
    END

RETURN

***********************************************************
***********************************************************
* CONSTITUTION DU FICHIER FACTURAIDE (PROVISION CONGES)

104 *

    IF W_PROVISIONCONGESTOTAL<>0 THEN
        W_NBAIDANT=W_NBAIDANT+1

        ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODECOURS
        ENR_FACTURAIDE<2,W_NBAIDANT>="PROVISION POUR CONGES PAYES"
        ENR_FACTURAIDE<3,W_NBAIDANT>=""
        ENR_FACTURAIDE<4,W_NBAIDANT>=""
        ENR_FACTURAIDE<5,W_NBAIDANT>=W_PROVISIONCONGESTOTAL
        IF ENR_COMPTESPART<4>="" THEN ENR_COMPTESPART<4>=ENR_COMPTESPART<9>
        ENR_FACTURAIDE<6,W_NBAIDANT>=ENR_COMPTESPART<4>
        ENR_FACTURAIDE<7,W_NBAIDANT>=""
    END

RETURN

***********************************************************
***********************************************************
* CONSTITUTION DU FICHIER FACTURAIDE (REPRISE PROVISION CONGES)

105 *

    IF W_CUMULMONTANTREPRISEPROV<>0 THEN
        W_NBAIDANT=W_NBAIDANT+1

        ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODECOURS
        ENR_FACTURAIDE<2,W_NBAIDANT>="REPRISE PROVISIONS POUR CONGES PAYES"
        ENR_FACTURAIDE<3,W_NBAIDANT>=""
        ENR_FACTURAIDE<4,W_NBAIDANT>=""
        ENR_FACTURAIDE<5,W_NBAIDANT>=-W_CUMULMONTANTREPRISEPROV
        IF ENR_COMPTESPART<4>="" THEN ENR_COMPTESPART<4>=ENR_COMPTESPART<9>
        ENR_FACTURAIDE<6,W_NBAIDANT>=ENR_COMPTESPART<4>
        ENR_FACTURAIDE<7,W_NBAIDANT>=""
    END

RETURN

***********************************************************
***********************************************************
* CONSTITUTION DU FICHIER FACTURAIDE (FRAIS GESTION)

106 *
  IF W_FINTRIM=0 THEN
    IF W_FRAISGESTION<>0 AND ENR_BAREMEPARTEMP<2><>4 THEN
        W_NBAIDANT=W_NBAIDANT+1

        ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODECOURS
        ENR_FACTURAIDE<2,W_NBAIDANT>="FRAIS DE GESTION"
        ENR_FACTURAIDE<3,W_NBAIDANT>=W_BASEFRAISGESTION
        ENR_FACTURAIDE<4,W_NBAIDANT>=""
        ENR_FACTURAIDE<5,W_NBAIDANT>=W_FRAISGESTION
        IF ENR_COMPTESPART<7>="" THEN ENR_COMPTESPART<7>=ENR_COMPTESPART<9>
        ENR_FACTURAIDE<6,W_NBAIDANT>=ENR_COMPTESPART<7>
        ENR_FACTURAIDE<7,W_NBAIDANT>=""
    END ELSE
        IF W_ASSIETTEFRAISGESTION<>0 THEN
	    L=1
	    LOOP
	         UNTIL W_ASSIETTEFRAISGESTION<L,1>="" DO
                 W_NBAIDANT=W_NBAIDANT+1
   
                 READ ENR_RUBSAISIE FROM F.RUBSAISIE,W_ASSIETTEFRAISGESTION<L,1> ELSE ENR_RUBSAISIE=""
                 ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODECOURS
                 ENR_FACTURAIDE<2,W_NBAIDANT>=ENR_RUBSAISIE<1>
                 ENR_FACTURAIDE<3,W_NBAIDANT>=W_ASSIETTEFRAISGESTION<L,3>
                 ENR_FACTURAIDE<4,W_NBAIDANT>=W_ASSIETTEFRAISGESTION<L,4>
                 ENR_FACTURAIDE<5,W_NBAIDANT>=W_ASSIETTEFRAISGESTION<L,2>
                 IF ENR_COMPTESPART<7>="" THEN ENR_COMPTESPART<7>=ENR_COMPTESPART<9>
                 ENR_FACTURAIDE<6,W_NBAIDANT>=ENR_COMPTESPART<7>
                 ENR_FACTURAIDE<7,W_NBAIDANT>=""
                 L=L+1
            REPEAT
        END
    END
  END ELSE
    IF W_FRAISGESTION1#0 THEN
      I=1
      LOOP 
        UNTIL ENR_BAREMEPARTEMP<4,I>>W_FRAISGESTION1 AND ENR_BAREMEPARTEMP<3,I><=W_FRAISGESTION1 OR ENR_BAREMEPARTEMP<3,I>="" DO
         I=I+1
      REPEAT
      IF ENR_BAREMEPARTEMP<3,I><>"" THEN
        W_FRAISGESTION=ENR_BAREMEPARTEMP<5,I>+((W_FRAISGESTION1-ENR_BAREMEPARTEMP<3,I>)*(ENR_BAREMEPARTEMP<6,I>/100))
        W_FRAISGESTION=INT(W_FRAISGESTION+1/2)
      END ELSE
        W_FRAISGESTION=0
      END
      W_NBAIDANT=W_NBAIDANT+1
      ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODEMOIS-2
      ENR_FACTURAIDE<2,W_NBAIDANT>="FRAIS DE GESTION"
      ENR_FACTURAIDE<3,W_NBAIDANT>=W_BASEFRAISGESTION1
      ENR_FACTURAIDE<4,W_NBAIDANT>=""
      ENR_FACTURAIDE<5,W_NBAIDANT>=W_FRAISGESTION
      IF ENR_COMPTESPART<7>="" THEN ENR_COMPTESPART<7>=ENR_COMPTESPART<9>
      ENR_FACTURAIDE<6,W_NBAIDANT>=ENR_COMPTESPART<7>
      ENR_FACTURAIDE<7,W_NBAIDANT>=""
    END
    IF W_FRAISGESTION2#0 THEN
      I=1
      LOOP 
        UNTIL ENR_BAREMEPARTEMP<4,I>>W_FRAISGESTION2 AND ENR_BAREMEPARTEMP<3,I><=W_FRAISGESTION2 OR ENR_BAREMEPARTEMP<3,I>="" DO
         I=I+1
      REPEAT
      IF ENR_BAREMEPARTEMP<3,I><>"" THEN
        W_FRAISGESTION=ENR_BAREMEPARTEMP<5,I>+((W_FRAISGESTION2-ENR_BAREMEPARTEMP<3,I>)*(ENR_BAREMEPARTEMP<6,I>/100))
        W_FRAISGESTION=INT(W_FRAISGESTION+1/2)
      END ELSE
        W_FRAISGESTION=0
      END
      W_NBAIDANT=W_NBAIDANT+1
      ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODEMOIS-1
      ENR_FACTURAIDE<2,W_NBAIDANT>="FRAIS DE GESTION"
      ENR_FACTURAIDE<3,W_NBAIDANT>=W_BASEFRAISGESTION2
      ENR_FACTURAIDE<4,W_NBAIDANT>=""
      ENR_FACTURAIDE<5,W_NBAIDANT>=W_FRAISGESTION
      IF ENR_COMPTESPART<7>="" THEN ENR_COMPTESPART<7>=ENR_COMPTESPART<9>
      ENR_FACTURAIDE<6,W_NBAIDANT>=ENR_COMPTESPART<7>
      ENR_FACTURAIDE<7,W_NBAIDANT>=""
    END
    IF W_FRAISGESTION3#0 THEN
      I=1
      LOOP 
        UNTIL ENR_BAREMEPARTEMP<4,I>>W_FRAISGESTION3 AND ENR_BAREMEPARTEMP<3,I><=W_FRAISGESTION3 OR ENR_BAREMEPARTEMP<3,I>="" DO
         I=I+1
      REPEAT
      IF ENR_BAREMEPARTEMP<3,I><>"" THEN
        W_FRAISGESTION=ENR_BAREMEPARTEMP<5,I>+((W_FRAISGESTION3-ENR_BAREMEPARTEMP<3,I>)*(ENR_BAREMEPARTEMP<6,I>/100))
        W_FRAISGESTION=INT(W_FRAISGESTION+1/2)
      END ELSE
        W_FRAISGESTION=0
      END
      W_NBAIDANT=W_NBAIDANT+1
      ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODEMOIS
      ENR_FACTURAIDE<2,W_NBAIDANT>="FRAIS DE GESTION"
      ENR_FACTURAIDE<3,W_NBAIDANT>=W_BASEFRAISGESTION3
      ENR_FACTURAIDE<4,W_NBAIDANT>=""
      ENR_FACTURAIDE<5,W_NBAIDANT>=W_FRAISGESTION
      IF ENR_COMPTESPART<7>="" THEN ENR_COMPTESPART<7>=ENR_COMPTESPART<9>
      ENR_FACTURAIDE<6,W_NBAIDANT>=ENR_COMPTESPART<7>
      ENR_FACTURAIDE<7,W_NBAIDANT>=""
    END
  END
RETURN

***********************************************************
***********************************************************
* CONSTITUTION DU FICHIER FACTURAIDE (MAJORATION PAR BULLETIN)

107 *

    IF W_VALEURMAJORATION<>0 AND W_VALEURMAJORATION<>"" THEN
        IF W_NBBULLETIN-1<>0  THEN
            W_NBAIDANT=W_NBAIDANT+1

            ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODECOURS
            ENR_FACTURAIDE<2,W_NBAIDANT>="MAJORATION PAR BULLETIN SUPPLEMENTAIRE"
            ENR_FACTURAIDE<3,W_NBAIDANT>=W_NBBULLETIN-1
 	    * PASSAGE A 3 DEC. SI BAREME FCT RUB. SAISIE
	    IF ENR_BAREMEPARTEMP<2>=4 THEN
	        IF W_VALEURMAJORATION<>"" THEN W_VALEURMAJORATION=W_VALEURMAJORATION*10
            END
            ENR_FACTURAIDE<4,W_NBAIDANT>=W_VALEURMAJORATION
            ENR_FACTURAIDE<5,W_NBAIDANT>=(W_NBBULLETIN-1)*W_VALEURMAJORATION
            IF ENR_COMPTESPART<7>="" THEN ENR_COMPTESPART<7>=ENR_COMPTESPART<9>
            ENR_FACTURAIDE<6,W_NBAIDANT>=ENR_COMPTESPART<7>
            ENR_FACTURAIDE<7,W_NBAIDANT>=""
        END
    END

RETURN

***********************************************************
***********************************************************
* CONSTITUTION DU FICHIER FACTURAIDE (FRAIS OUVERTURE DOSSIER)

108 *

    IF W_VALEURFRAISDOSSIER<>0 THEN
        W_NBAIDANT=W_NBAIDANT+1

        ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODECOURS
        ENR_FACTURAIDE<2,W_NBAIDANT>="FRAIS OUVERTURE DE DOSSIER"
        ENR_FACTURAIDE<3,W_NBAIDANT>=""
        ENR_FACTURAIDE<4,W_NBAIDANT>=""
        ENR_FACTURAIDE<5,W_NBAIDANT>=W_VALEURFRAISDOSSIER
        IF ENR_COMPTESPART<7>="" THEN ENR_COMPTESPART<7>=ENR_COMPTESPART<9>
        ENR_FACTURAIDE<6,W_NBAIDANT>=ENR_COMPTESPART<7>
        ENR_FACTURAIDE<7,W_NBAIDANT>=""
    END

RETURN

***********************************************************
***********************************************************
* CONSTITUTION DU FICHIER FACTURAIDE (COMPLEMENTS FACTURATION)

109 *

    IF ENR_COMPLFACT<5,J><>0 THEN
        W_NBAIDANT=W_NBAIDANT+1

        ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODECOURS
        ENR_FACTURAIDE<2,W_NBAIDANT>=ENR_COMPLFACT<1,J>
        ENR_FACTURAIDE<3,W_NBAIDANT>=ENR_COMPLFACT<2,J>
	* PASSAGE A 3 DEC. SI BAREME FCT RUB. SAISIE
	IF ENR_BAREMEPARTEMP<2>=4 THEN
	    IF ENR_COMPLFACT<3,J><>"" THEN ENR_COMPLFACT<3,J>=ENR_COMPLFACT<3,J>*10
        END
        ENR_FACTURAIDE<4,W_NBAIDANT>=ENR_COMPLFACT<3,J>
        ENR_FACTURAIDE<5,W_NBAIDANT>=ENR_COMPLFACT<4,J>
        ENR_FACTURAIDE<6,W_NBAIDANT>=ENR_COMPLFACT<5,J>
        ENR_FACTURAIDE<7,W_NBAIDANT>=ENR_COMPLFACT<6,J>

	* ECRITURE VALEUR "SANS INCIDENCE COMPTA" SI COMPLFACT<5>=""
	IF ENR_COMPLFACT<5,J>="" THEN 
	    ENR_FACTURAIDE<14,W_NBAIDANT>=1
	END ELSE
	    ENR_FACTURAIDE<14,W_NBAIDANT>=0
	END	

    END

RETURN

***********************************************************
***********************************************************
* CONSTITUTION DU FICHIER FACTURAIDE (APPEL COTISATION)

110 *

    IF W_MONTANTCOTIS<>0 THEN
        W_NBAIDANT=W_NBAIDANT+1

        ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODECOURS
        ENR_FACTURAIDE<2,W_NBAIDANT>="COTISATION ANNUELLE"
        ENR_FACTURAIDE<3,W_NBAIDANT>=""
        ENR_FACTURAIDE<4,W_NBAIDANT>=""
        ENR_FACTURAIDE<5,W_NBAIDANT>=W_MONTANTCOTIS
        IF ENR_COMPTESPART<8>="" THEN ENR_COMPTESPART<8>=ENR_COMPTESPART<9>
        ENR_FACTURAIDE<6,W_NBAIDANT>=ENR_COMPTESPART<8>
        ENR_FACTURAIDE<6,W_NBAIDANT>=""
        ENR_FACTURAIDE<7,W_NBAIDANT>=""
    END

RETURN

***********************************************************
***********************************************************
* CONSTITUTION DU FICHIER FACTURORG (ACCORD SUR LE MOIS)
* CONSTITUTION DU FICHIER FACTURAIDE (ACCORD PART. 1)

111 *

    IF W_TYPEORG="H" THEN
	IF W_MONTANTPARTORG2<>0 THEN
          W_NBAIDANT=W_NBAIDANT+1
          ENR_FACTURORG=""
          ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODECOURS
          ENR_FACTURAIDE<2,W_NBAIDANT>="PRISE EN CHARGE ":ENR_ORGPRISECHARGE<1>
          ENR_FACTURORG<1>=W_MONTANTHRESBENEF
          ENR_FACTURORG<2>=W_MONTANTPARTBENEF  ENR_FACTURORG<3>=W_MONTANTPARTORG-W_MONTANTPARTBENEF
          ENR_FACTURORG<4>=W_MONTANTPARTORG2

 	  ENR_FACTURAIDE<3,W_NBAIDANT>=-W_MONTANTHRESBENEF
          IF ENR_BAREMEPARTEMP<2><>4 THEN
	     ENR_FACTURAIDE<4,W_NBAIDANT>=W_MONTANTPARTORG-W_MONTANTPARTBENEF
          END ELSE
	     ENR_FACTURAIDE<4,W_NBAIDANT>=(W_MONTANTPARTORG-W_MONTANTPARTBENEF)*10
          END
	  ENR_FACTURAIDE<5,W_NBAIDANT>=-W_MONTANTPARTORG2
          ENR_FACTURAIDE<6,W_NBAIDANT>=""
          ENR_FACTURAIDE<7,W_NBAIDANT>=""

	  IF ENR_ORGPRISECHARGE<50>=1 THEN
	      ENR_FACTURAIDE<14,W_NBAIDANT>=1
	  END ELSE
	      ENR_FACTURAIDE<14,W_NBAIDANT>=0
	  END

          WRITE ENR_FACTURORG ON F.FACTURORG,W_CODEORGANISMECHARGE:"M":W_CODEACCORD:W_PERIODECOURS:"01"
	END
    END ELSE
	IF W_RESIDUACCORD<>0 THEN
          W_NBAIDANT=W_NBAIDANT+1
          ENR_FACTURORG=""
          ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODECOURS
          ENR_FACTURAIDE<2,W_NBAIDANT>="PRISE EN CHARGE ":ENR_ORGPRISECHARGE<1>
	  ENR_FACTURORG<1>="0"
          ENR_FACTURORG<2>="0"
	  ENR_FACTURORG<3>="0"
          ENR_FACTURORG<4>=W_RESIDUACCORD

  	  ENR_FACTURAIDE<3,W_NBAIDANT>=""
  	  ENR_FACTURAIDE<4,W_NBAIDANT>=""
	  ENR_FACTURAIDE<5,W_NBAIDANT>=-W_RESIDUACCORD
          ENR_FACTURAIDE<6,W_NBAIDANT>=""
          ENR_FACTURAIDE<7,W_NBAIDANT>=""

	  IF ENR_ORGPRISECHARGE<50>=1 THEN
	      ENR_FACTURAIDE<14,W_NBAIDANT>=1
	  END ELSE
	      ENR_FACTURAIDE<14,W_NBAIDANT>=0
	  END

          WRITE ENR_FACTURORG ON F.FACTURORG,W_CODEORGANISMECHARGE:"M":W_CODEACCORD:W_PERIODECOURS:"01"
	END
    END

RETURN

***********************************************************
***********************************************************
* CONSTITUTION DU FICHIER FACTURORG (ACCORD RETROACTIF)
* CONSTITUTION DU FICHIER FACTURAIDE (ACCORD PART. 2)

112 *

    IF W_TYPEORG="H" THEN
	IF W_MONTANTPARTORG2<>0 THEN
          W_NBAIDANT=W_NBAIDANT+1
          ENR_FACTURORG=""
          ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODERETROACTIVE
          ENR_FACTURAIDE<2,W_NBAIDANT>="PRISE EN CHARGE ":ENR_ORGPRISECHARGE<1>
          ENR_FACTURORG<1>=W_HRESACCORDEES
          ENR_FACTURORG<2>=W_MONTANTPARTBENEF
  	  ENR_FACTURORG<3>=W_MONTANTPARTORG-W_MONTANTPARTBENEF
          ENR_FACTURORG<4>=W_MONTANTPARTORG2

	  ENR_FACTURAIDE<3,W_NBAIDANT>=-W_HRESACCORDEES
          IF ENR_BAREMEPARTEMP<2><>4 THEN
   	     ENR_FACTURAIDE<4,W_NBAIDANT>=W_MONTANTPARTORG-W_MONTANTPARTBENEF
          END ELSE
   	     ENR_FACTURAIDE<4,W_NBAIDANT>=(W_MONTANTPARTORG-W_MONTANTPARTBENEF)*10
          END
	  ENR_FACTURAIDE<5,W_NBAIDANT>=-W_MONTANTPARTORG2
          ENR_FACTURAIDE<6,W_NBAIDANT>=""
          ENR_FACTURAIDE<7,W_NBAIDANT>=""

	  IF ENR_ORGPRISECHARGE<50>=1 THEN
	      ENR_FACTURAIDE<14,W_NBAIDANT>=1
	  END ELSE
	      ENR_FACTURAIDE<14,W_NBAIDANT>=0
	  END

          WRITE ENR_FACTURORG ON F.FACTURORG,W_CODEORGANISMECHARGE:"M":W_CODEACCORD:W_PERIODECOURS:"01"
	END
    END ELSE
	IF W_RESIDUACCORD<>0 THEN
          W_NBAIDANT=W_NBAIDANT+1
          ENR_FACTURORG=""
          ENR_FACTURAIDE<1,W_NBAIDANT>=W_PERIODERETROACTIVE
          ENR_FACTURAIDE<2,W_NBAIDANT>="PRISE EN CHARGE ":ENR_ORGPRISECHARGE<1>
	  ENR_FACTURORG<1>="0"
          ENR_FACTURORG<2>="0"
	  ENR_FACTURORG<3>="0"
          ENR_FACTURORG<4>=W_RESIDUACCORD

  	  ENR_FACTURAIDE<3,W_NBAIDANT>=""
	  ENR_FACTURAIDE<4,W_NBAIDANT>=""
	  ENR_FACTURAIDE<5,W_NBAIDANT>=-W_RESIDUACCORD
          ENR_FACTURAIDE<6,W_NBAIDANT>=""
          ENR_FACTURAIDE<7,W_NBAIDANT>=""

	  IF ENR_ORGPRISECHARGE<50>=1 THEN
	      ENR_FACTURAIDE<14,W_NBAIDANT>=1
	  END ELSE
	      ENR_FACTURAIDE<14,W_NBAIDANT>=0
	  END

          WRITE ENR_FACTURORG ON F.FACTURORG,W_CODEORGANISMECHARGE:"M":W_CODEACCORD:W_PERIODECOURS:"01"
	END
    END

RETURN

***********************************************************
***********************************************************
* RECHERCHE SI RUB. SAISIE DEJA AFFECTEE // FRAIS GESTION

200 *

    K=1
    LOOP 
	 UNTIL W_ASSIETTEFRAISGESTION<K,1>=ENR_DETAILCALCUL<2,I> OR W_ASSIETTEFRAISGESTION<K,1>="" DO
	 K=K+1
    REPEAT

RETURN

***********************************************************
***********************************************************
* MAJ ATTRIBUT 10 DE FACTURAIDE

201 *

    W_TROUVE="FAUX"
    
    J=1
    LOOP 
	   UNTIL ENR_NOMAIDANT<1,J>="" OR W_TROUVE="VRAI" DO
		
	   * RECHERCHE RANG AIDANT
	   READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_CODEAIDANT ELSE
		  *PRINT "ERREUR AIDANT"
	   END

	   IF ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3><=ENR_NOMAIDANT<2,J> THEN
		  IF ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3><>ENR_NOMAIDANT<2,J> THEN
  		       ENR_NOMAIDANT=INSERT(ENR_NOMAIDANT,1,J;W_CODEAIDANT)
		       ENR_NOMAIDANT=INSERT(ENR_NOMAIDANT,2,J;ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>)
		       W_TROUVE="VRAI"
		  END ELSE
			 W_TROUVE="VRAI"
		  END
	   END

	   J=J+1
    REPEAT

    IF ENR_NOMAIDANT<2,J>="" AND W_TROUVE<>"VRAI" THEN
         ENR_NOMAIDANT<1,-1>=W_CODEAIDANT
	   ENR_NOMAIDANT<2,-1>=ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
	   W_TROUVE="VRAI"
    END


RETURN

***********************************************************
***********************************************************
* TRI DES ACCORDS SANS RATTRAP. PAR RANG,DATE DEB.,DATE FIN

210 *

    W_RANGDEP=0
    W_RANGFIN=0
    * RECHERCHE DES EMPLACEMENTS DES ACCORDS DE RANG XX
    J=1
    LOOP
	 W_RANGDEP=0
	 W_RANGFIN=0
	 UNTIL W_ACCORDSANSRATTRAP<J,1>="" DO

	 * RECHERCHE RANG DEPART + RANG FIN ACCORD DE RANG XX
	 K=1
	 LOOP	
	      UNTIL W_ACCORDTRI1<K,2>="" DO
	      IF W_ACCORDTRI1<K,2>=W_ACCORDSANSRATTRAP<J,2> AND W_RANGDEP=0 THEN W_RANGDEP=K
	      IF W_ACCORDTRI1<K,2>>W_ACCORDSANSRATTRAP<J,2> AND W_RANGDEP=0 THEN W_RANGFIN=K-1
		
	      K=K+1
	 REPEAT	 
	 IF W_RANGDEP=0 THEN W_RANGDEP=1
	 IF W_RANGFIN=0 THEN W_RANGFIN=1
	 IF W_ACCORDTRI1<K,2>="" THEN
	      W_RANGDEP=K
	      W_RANGFIN=K
	 END

	 IF W_ACCORDTRI1<1><>"" THEN
	      * SI PAS DATE DE FIN ALORS TRI PAR DATE DEBUT
	      IF W_ACCORDSANSRATTRAP<J,4>="" THEN
		   K=W_RANGDEP
		   LOOP
		        UNTIL W_ACCORDTRI1<K,3>>=W_ACCORDSANSRATTRAP<J,3> OR W_ACCORDTRI1<K,3>="" OR W_RANGFIN=K DO
			K=K+1
		   REPEAT
	      END ELSE	
		   K=W_RANGDEP
		   LOOP
		        UNTIL W_ACCORDTRI1<K,3>>=W_ACCORDSANSRATTRAP<J,3> OR W_ACCORDTRI1<K,3>="" OR W_RANGFIN=K DO
			K=K+1
		   REPEAT

       	           * SI RANG INSERTION TROUVE			
		   IF W_ACCORDTRI1<K,3><>"" THEN
			* TEST SI DATE DEBUT EGALE
			IF W_ACCORDTRI1<K,3>=W_ACCORDSANSRATTRAP<J,3> THEN
				
			     * TRI SUR DATE DE FIN
	   		     LOOP
				  UNTIL W_ACCORDTRI1<K,4><=W_ACCORDSANSRATTRAP<J,4> OR W_ACCORDTRI1<K,4>="" DO
			          K=K+1
		             REPEAT
		        END				
		   END
    	      END

              * SI RANG INSERTION TROUVE	
*    	      IF W_ACCORDTRI1<K,3><>"" THEN
	           W_ACCORDTRI1=INSERT(W_ACCORDTRI1,K,1;W_ACCORDSANSRATTRAP<J,1>)
		   W_ACCORDTRI1=INSERT(W_ACCORDTRI1,K,2;W_ACCORDSANSRATTRAP<J,2>)
		   W_ACCORDTRI1=INSERT(W_ACCORDTRI1,K,3;W_ACCORDSANSRATTRAP<J,3>)
		   W_ACCORDTRI1=INSERT(W_ACCORDTRI1,K,4;W_ACCORDSANSRATTRAP<J,4>)
		   W_ACCORDTRI1=INSERT(W_ACCORDTRI1,K,5;W_ACCORDSANSRATTRAP<J,5>)
*   	      END
  	 END ELSE
	      W_ACCORDTRI1<1,1>=W_ACCORDSANSRATTRAP<J,1>
	      W_ACCORDTRI1<1,2>=W_ACCORDSANSRATTRAP<J,2>
	      W_ACCORDTRI1<1,3>=W_ACCORDSANSRATTRAP<J,3>
	      W_ACCORDTRI1<1,4>=W_ACCORDSANSRATTRAP<J,4>
	      W_ACCORDTRI1<1,5>=W_ACCORDSANSRATTRAP<J,5>
	 END
         J=J+1
    REPEAT
RETURN

***********************************************************
***********************************************************
* LANCEMENT DES DIVERS TRAITEMENTS

300 *

   * RECHERCHE SI ACOMPTE
   P=1
   LOOP
	UNTIL ENR_DETAILCALCUL<17,P>="" OR ENR_DETAILCALCUL<17,P>="816" OR ENR_DETAILCALCUL<17,P>="824" DO
	P=P+1
   REPEAT

   IF ENR_DETAILCALCUL<17,P>="816" OR ENR_DETAILCALCUL<17,P>="824" THEN
	ENR_DETAILCALCUL<21>=ENR_DETAILCALCUL<21>-ENR_DETAILCALCUL<20,P>
   END

   * TEST SI PAIEMENT SALAIRE PAR ASSO
   IF ENR_CONTRAT<28>=1 THEN
       ***********************************************************
       * GESTION DES MONTANT SALAIRE A PAYER 
       W_MONTANTSALPAYER=W_MONTANTSALPAYER+ENR_DETAILCALCUL<21>
       W_MONTANTSALPAYERCOURS=ENR_DETAILCALCUL<21>
   END
   W_TOTALHRESPAYEES=W_TOTALHRESPAYEES+ENR_DETAILCALCUL<6>

   ***********************************************************
   * GESTION DES CONTRATS DE PREVOYANCES (CHG. URSSAF+COTIS. PREV)		 
   I=1
   W_MONTANTCHGURSSAFPAYEESMOIS=0
   W_MONTANTCOTISPREVPAYEESMOIS=0
   LOOP
        UNTIL ENR_DETAILCALCUL<8,I>="" DO
	
	* VERIFIE SI RUB. PAS ATTRIBUE A CONTRAT PREVOYANCE
	IF W_CODECONTRATPREV<>"" THEN		
	    J=1
	    LOOP
		 UNTIL ENR_CONTRATSPREV<35,J>=ENR_DETAILCALCUL<8,I> OR ENR_CONTRATSPREV<35,J>="" DO
		 J=J+1
	    REPEAT

	    IF ENR_CONTRATSPREV<35,J><>"" THEN
		 W_ERREURCONTRATPREV=1
	    END ELSE
		 W_ERREURCONTRATPREV=0
	    END
	END ELSE
	    W_ERREURCONTRATPREV=0
	END
	
        * SI PAS ERREUR CONTRATPREV
	IF W_ERREURCONTRATPREV=0 THEN
	    * MONTANT CHARGES URSSAF
	    W_MONTANTCHGURSSAFPAT=W_MONTANTCHGURSSAFPAT+ENR_DETAILCALCUL<14,I>
	    IF ENR_CONTRAT<31>=0 THEN
	         W_MONTANTCHGURSSAFPAYEESMOIS=W_MONTANTCHGURSSAFPAYEESMOIS+ENR_DETAILCALCUL<14,I>
	    END
	    W_MONTANTCHGURSSAFSAL=W_MONTANTCHGURSSAFSAL-ENR_DETAILCALCUL<11,I>
	END ELSE
	    IF W_COTISPREVASSO=1 THEN
		 W_MONTANTCOTISPREV=W_MONTANTCOTISPREV+ENR_DETAILCALCUL<14,I>-ENR_DETAILCALCUL<11,I>
	         IF ENR_CONTRAT<31>=0 THEN
	              W_MONTANTCOTISPREVPAYEESMOIS=W_MONTANTCOTISPREVPAYEESMOIS+ENR_DETAILCALCUL<14,I>
	         END
	    END
	END

	I=I+1
   REPEAT

   ***********************************************************
   * VERIFIE SI EMPLOYEUR EXO - 65 X SMIC
*   IF ENR_ELTSPARTEMP<9>="02" THEN
*	IF ENR_CONTRAT<30>="B" THEN
*	    W_MONTANTBRUT=W_MONTANTBRUT+ENR_DETAILCALCUL<7>
*	END ELSE
*	    W_TAUXFORFAIT=ENR_DETAILCALCUL<7>/ENR_CONTRAT<23,1>
* 	    W_MONTANTFORFAIT=W_TAUXFORFAIT*W_TAUXSMIC
*	    W_MONTANTBRUT=W_MONTANTBRUT+W_MONTANTFORFAIT
*	END
*   END

   ***********************************************************
   * GESTION DES PROVISIONS DE CONGES
   GOSUB 30

   ***********************************************************
   * GESTION DES REPRISES DE PROVISIONS DE CONGES
   GOSUB 40
		
   ***********************************************************
   * GESTION DES FRAIS DE GESTION
   GOSUB 50

   ***********************************************************
   * GESTION DES MAJORATION PAR BULLETINS
   GOSUB 60	

   ***********************************************************
   * GESTION DES FRAIS D'OUVERTURE DE DOSSIER   
   GOSUB 70

RETURN

***********************************************************
***********************************************************
* GESTION DES DROITS SUR ACCORD

310 *

    K=1
    LOOP
	 UNTIL W_ACCORDTRI1<K>="" DO

         W_NBHISTORACCORD=0
         W_RESIDUACCORD=0 
         W_HRESACCORDEES=0
         W_HRESPAYEES=0
 	 W_MONTANTPARTORG=0
 	 W_MONTANTPARTORG2=0
    
         * VERIFIE SI ACCORD DE TYPE MONTANT
         W_CODEORGANISMECHARGE=W_ACCORDTRI1<K,5>
	 W_CODEACCORD=W_ACCORDTRI1<K,1>
	 READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,W_CODEORGANISMECHARGE ELSE
	      *PRINT "ERREUR ORGPRISECHARGE"
	 END

	 READ ENR_ACCORD FROM F.ACCORD,W_CODEACCORD ELSE
	      *PRINT "ERREUR ACCORD"
	 END

         W_NBHISTORACCORD=DCOUNT(ENR_ACCORD<17>,CHAR(253))

	 GOSUB 311

	 GOSUB 111	
         K=K+1
    REPEAT    
RETURN

***********************************************************
***********************************************************
* CALCUL DES DROITS ACCORDS (1)

311 *

    W_RESIDUACCORD=0
    W_MONTANTPARTORG2=0
    W_MONTANTPARTBENEF2=0
    W_MONTANTHRESBENEF=0
    W_NBHISTORACCORD=0
    W_RESIDUACCORD=0 
    W_HRESACCORDEES=0
    W_HRESPAYEES=0
    W_MONTANTPARTORG=0
    W_MONTANTPARTORG2=0

    W_TYPEORG=ENR_ORGPRISECHARGE<24>

    IF ENR_ORGPRISECHARGE<24>="M" THEN
	* SI GESTION DE PLAFOND DES DROITS GLOBAUX         
        IF ENR_ORGPRISECHARGE<19>=3 THEN
	     * RECUPERE LES DROITS RESTANTS
	     IF ENR_ACCORD<17,1>="" OR ENR_ACCORD<17,1>="0" THEN
		  W_RESIDUACCORD=ENR_ACCORD<9>
	     END ELSE
  	          W_RESIDUACCORD=ENR_ACCORD<17,1>
	     END
        END ELSE
	     * SI GESTION DE PLAFOND DES DROITS MENSUEL AVEC REPORT
	     IF ENR_ORGPRISECHARGE<19>=1 THEN
		  W_RESIDUACCORD=ENR_ACCORD<17,1>+ENR_ACCORD<9>
	     END ELSE
		  * SI GESTION MENSUELLE SANS REPORT
		  W_RESIDUACCORD=ENR_ACCORD<9>
	     END
        END   

	IF W_RESIDUACCORD="" THEN W_RESIDUACCORD=0

	* SI TOTAL MOIS < VALEUR ACCORD
	IF W_MONTANTELEMENTS<W_RESIDUACCORD THEN
	     W_MONTANTFACTURE=W_MONTANTFACTURE-W_MONTANTELEMENTS
	     W_RESIDUACCORD=W_MONTANTELEMENTS
	     W_MONTANTELEMENTS=0
	END ELSE
	     W_MONTANTFACTURE=W_MONTANTFACTURE+W_MONTANTELEMENTS-W_RESIDUACCORD
	     W_MONTANTELEMENTS=W_MONTANTELEMENTS-W_RESIDUACCORD
	END
    END ELSE
	* CALCUL LES HRES PAYEES
	W_HRESPAYEES=W_TOTALHRESPAYEES

        * CALCUL LES HRES ACCORDEES
	IF ENR_ORGPRISECHARGE<19>=1 THEN
	     W_HRESACCORDEES=ENR_ACCORD<9>+ENR_ACCORD<17,1>
	END ELSE
	     IF ENR_ORGPRISECHARGE<19>=2 THEN
		  W_HRESACCORDEES=ENR_ACCORD<9>
	     END ELSE
		  IF ENR_ACCORD<17,1>="" OR ENR_ACCORD<17,1>="0" THEN
	   	       W_HRESACCORDEES=ENR_ACCORD<9>
		  END ELSE
	   	       W_HRESACCORDEES=ENR_ACCORD<17,1>
		  END
	     END
        END

        * RECUPERATION PARTICIPATION BENEFICIAIRE
	L=DCOUNT(ENR_ACCORD<11>,CHAR(254))
	LOOP
	     UNTIL ENR_ACCORD<11,L><=W_PERIODEFINMOIS OR L=0 DO
             L=L-1
        REPEAT
	IF L<>0 THEN
	     W_MONTANTPARTBENEF=ENR_ACCORD<13,L>
        END ELSE
	     W_MONTANTPARTBENEF=0
	END

        * RECUPERATION PARTICIPATION ORGANISME
	L=1
	LOOP
	     UNTIL ENR_ORGPRISECHARGE<25,L><=W_PERIODEFINMOIS OR ENR_ORGPRISECHARGE<25,L>="" DO
             L=L+1
        REPEAT
	IF ENR_ORGPRISECHARGE<25,L><>"" THEN
	     W_MONTANTPARTORG=ENR_ORGPRISECHARGE<26,L>
        END ELSE
	     W_MONTANTPARTORG=0
	END

        IF W_HRESACCORDEES-W_HRESPAYEES<0 THEN
	     W_MONTANTPARTORG2=INT((W_MONTANTPARTORG-W_MONTANTPARTBENEF)*W_HRESACCORDEES/100+1/2)
	     W_MONTANTPARTBENEF2=INT(W_MONTANTPARTBENEF*W_HRESACCORDEES/100+1/2)
	     W_MONTANTHRESBENEF=W_HRESACCORDEES
	     W_MONTANTELEMENTS=W_MONTANTELEMENTS-W_MONTANTPARTBENEF2
	     W_TOTALHRESPAYEES=W_TOTALHRESPAYEES-W_HRESACCORDEES
	END ELSE
	     W_MONTANTPARTORG2=INT((W_MONTANTPARTORG-W_MONTANTPARTBENEF)*W_HRESPAYEES/100+1/2)
	     W_MONTANTPARTBENEF2=INT(W_MONTANTPARTBENEF*W_HRESPAYEES/100+1/2)
	     W_MONTANTHRESBENEF=W_HRESPAYEES
	     W_MONTANTELEMENTS=W_MONTANTELEMENTS-W_MONTANTPARTBENEF2
	     W_TOTALHRESPAYEES=W_TOTALHRESPAYEES-W_HRESPAYEES
	END

	W_MONTANTFACTURE=W_MONTANTFACTURE-W_MONTANTPARTORG2
    END

    IF W_MONTANTPARTORG2<>0 OR W_MONTANTPARTBENEF2<>0 OR W_RESIDUACCORD<>0 THEN
	ENR_ACCORD=INSERT(ENR_ACCORD,14,1;W_PERIODECOURS)
	ENR_ACCORD=INSERT(ENR_ACCORD,15,1;W_MONTANTPARTBENEF2)
	ENR_ACCORD=INSERT(ENR_ACCORD,16,1;W_MONTANTHRESBENEF)
	IF ENR_ORGPRISECHARGE<19>=3 THEN
	    IF ENR_ORGPRISECHARGE<24>="M" THEN
       	        ENR_ACCORD=INSERT(ENR_ACCORD,17,1;ENR_ACCORD<17,1>-W_RESIDUACCORD)
            END ELSE
       	        ENR_ACCORD=INSERT(ENR_ACCORD,17,1;ENR_ACCORD<17,1>-W_MONTANTHRESBENEF)
	    END
	END ELSE
	    IF ENR_ORGPRISECHARGE<19>=1 THEN
   	        IF ENR_ORGPRISECHARGE<24>="M" THEN
       	            ENR_ACCORD=INSERT(ENR_ACCORD,17,1;ENR_ACCORD<17,1>+ENR_ACCORD<9>-W_RESIDUACCORD)
                END ELSE
       	            ENR_ACCORD=INSERT(ENR_ACCORD,17,1;ENR_ACCORD<17,1>+ENR_ACCORD<9>-W_MONTANTHRESBENEF)
	        END
	    END
	END
	WRITE ENR_ACCORD ON F.ACCORD,W_CODEACCORD
    END
RETURN

***********************************************************
***********************************************************
* CALCUL DES DROITS ACCORDS (2)

312 *

    W_RESIDUACCORD=0
    W_MONTANTPARTORG2=0
    W_MONTANTPARTBENEF2=0
    W_MONTANTHRESBENEF=0
    W_CODEFACTURMODIF=""
    
    W_TYPEORG=ENR_ORGPRISECHARGE<24>

    IF ENR_ORGPRISECHARGE<24>="M" THEN
	* SI GESTION DE PLAFOND DES DROITS GLOBAUX         
        IF ENR_ORGPRISECHARGE<19>=3 THEN
	     * RECUPERE LES DROITS RESTANTS
	     IF ENR_ACCORD<17,1>="" OR ENR_ACCORD<17,1>="0" THEN
		  W_RESIDUACCORD=ENR_ACCORD<9>
	     END ELSE
  	          W_RESIDUACCORD=ENR_ACCORD<17,1>
	     END
        END ELSE
	     * SI GESTION DE PLAFOND DES DROITS MENSUEL AVEC REPORT
	     IF ENR_ORGPRISECHARGE<19>=1 THEN
		  W_RESIDUACCORD=ENR_ACCORD<17,1>+ENR_ACCORD<9>
	     END ELSE
		  * SI GESTION MENSUELLE SANS REPORT
		  W_RESIDUACCORD=ENR_ACCORD<9>
	     END
        END   

	* CALCUL DU MONTANT TOTAL DES FACTURAIDE
	SELECT F.FACTURAIDE TO LISTEFACTURAIDERETRO
 
        IF MSGCODE<1>=209 THEN 
	     W_ERREUR=1
	     RETURN
   	END ELSE	
	     W_ERREUR=0
        END

	LOOP 
	     READNEXT CLE FROM LISTEFACTURAIDERETRO ELSE W_FINFACTURAIDE="VRAI"
	     UNTIL W_FINFACTURAIDE="VRAI" DO
	     
	     * TEST SI FACTURE MODIFIEE
	     IF CLE[26,1]=1 THEN
		  W_CODEFACTURMODIF=CLE[1,25]
		  W_TRAITE=1
	     END ELSE
		  IF W_CODEFACTURMODIF=CLE[1,25] THEN
			W_TRAITE=0
		  END ELSE
			W_TRAITE=1
		  END
	     END

	     IF W_TRAITE=1 THEN
   	          L=1
	          LOOP
		       UNTIL ENR_FACTURAIDE<5,L>="" DO
		       W_MONTANTELEMENTS=W_MONTANTELEMENTS+ENR_FACTURAIDE<5,L>
		       L=L+1
	          REPEAT
	     END
	REPEAT

	IF W_RESIDUACCORD="" THEN W_RESIDUACCORD=0

	* SI TOTAL MOIS < VALEUR ACCORD
	IF W_MONTANTELEMENTS<W_RESIDUACCORD THEN
	     W_MONTANTFACTURE=W_MONTANTFACTURE-W_MONTANTELEMENTS
	     W_RESIDUACCORD=W_MONTANTELEMENTS
	     W_MONTANTELEMENTS=0
	END ELSE
	     W_MONTANTFACTURE=W_MONTANTFACTURE+W_MONTANTELEMENTS-W_RESIDUACCORD
	     W_MONTANTELEMENTS=W_MONTANTELEMENTS-W_RESIDUACCORD
	END
    END ELSE
	* CALCUL LES HRES PAYEES
	SELECT F.DETAILCALCUL TO LISTEDETAILCALCULRETRO

        IF MSGCODE<1>=209 THEN 
	     W_ERREUR=1
	     RETURN
   	END ELSE	
	     W_ERREUR=0
        END

	LOOP 
	     READNEXT CLE FROM LISTEDETAILCALCULRETRO ELSE W_FINDETAILCALCUL="VRAI"
	     UNTIL W_FINDETAILCALCUL="VRAI" DO
	     
	     L=1
	     LOOP
		  UNTIL ENR_DETAILCALCUL<6,L>="" DO
		  W_HRESPAYEES=W_HRESPAYEES+ENR_DETAILCALCUL<6,L>
		  L=L+1
	     REPEAT
	REPEAT

        * CALCUL LES HRES ACCORDEES
	IF ENR_ORGPRISECHARGE<19>=1 THEN
	     W_HRESACCORDEES=ENR_ACCORD<9>+ENR_ACCORD<17,1>
	END ELSE
	     IF ENR_ORGPRISECHARGE<19>=2 THEN
		  W_HRESACCORDEES=ENR_ACCORD<9>
	     END ELSE
		  IF ENR_ACCORD<17,1>="" OR ENR_ACCORD<17,1>="0" THEN
	   	       W_HRESACCORDEES=ENR_ACCORD<9>
		  END ELSE
	   	       W_HRESACCORDEES=ENR_ACCORD<17,1>
		  END
	     END
        END

        * RECUPERATION PARTICIPATION BENEFICIAIRE
	L=DCOUNT(ENR_ACCORD<11>,CHAR(254))
	LOOP
	     UNTIL ENR_ACCORD<11,L><=W_PERIODEFINMOIS OR L=0 DO
             L=L-1
        REPEAT
	IF L<>0 THEN
	     W_MONTANTPARTBENEF=ENR_ACCORD<13,L>
        END ELSE
	     W_MONTANTPARTBENEF=0
	END

        * RECUPERATION PARTICIPATION ORGANISME
	L=1
	LOOP
	     UNTIL ENR_ORGPRISECHARGE<25,L><=W_PERIODEFINMOIS OR ENR_ORGPRISECHARGE<25,L>="" DO
             L=L+1
        REPEAT
	IF ENR_ORGPRISECHARGE<25,L><>"" THEN
	     W_MONTANTPARTORG=ENR_ORGPRISECHARGE<26,L>
        END ELSE
	     W_MONTANTPARTORG=0
	END

        IF W_HRESACCORDEES-W_HRESPAYEES<0 THEN
	     W_MONTANTPARTORG2=INT((W_MONTANTPARTORG-W_MONTANTPARTBENEF)*W_HRESACCORDEES/100+1/2)
	     W_MONTANTPARTBENEF2=INT(W_MONTANTPARTBENEF*W_HRESACCORDEES/100+1/2)
	     W_MONTANTHRESBENEF=W_HRESACCORDEES
	END ELSE
	     W_MONTANTPARTORG2=INT((W_MONTANTPARTORG-W_MONTANTPARTBENEF)*W_HRESPAYEES/100+1/2)
	     W_MONTANTPARTBENEF2=INT(W_MONTANTPARTBENEF*W_HRESPAYEES/100+1/2)
	     W_MONTANTHRESBENEF=W_HRESPAYEES
	END

	W_MONTANTFACTURE=W_MONTANTFACTURE-W_MONTANTPARTORG2
    END

    IF W_MONTANTPARTORG2<>0 OR W_MONTANTPARTBENEF2<>0 OR W_RESIDUACCORD<>0 THEN
	ENR_ACCORD=INSERT(ENR_ACCORD,14,1;W_PERIODECOURS)
	ENR_ACCORD=INSERT(ENR_ACCORD,15,1;W_MONTANTPARTBENEF2)
	ENR_ACCORD=INSERT(ENR_ACCORD,16,1;W_MONTANTHRESBENEF)
	IF ENR_ORGPRISECHARGE<19>=3 THEN
	    IF ENR_ORGPRISECHARGE<24>="M" THEN
       	        ENR_ACCORD=INSERT(ENR_ACCORD,17,1;ENR_ACCORD<17,1>-W_RESIDUACCORD)
            END ELSE
       	        ENR_ACCORD=INSERT(ENR_ACCORD,17,1;ENR_ACCORD<17,1>-W_MONTANTHRESBENEF)
	    END
	END ELSE
	    IF ENR_ORGPRISECHARGE<19>=1 THEN
   	        IF ENR_ORGPRISECHARGE<24>="M" THEN
       	            ENR_ACCORD=INSERT(ENR_ACCORD,17,1;ENR_ACCORD<17,1>+ENR_ACCORD<9>-W_RESIDUACCORD)
                END ELSE
       	            ENR_ACCORD=INSERT(ENR_ACCORD,17,1;ENR_ACCORD<17,1>+ENR_ACCORD<9>-W_MONTANTHRESBENEF)
	        END
	    END
	END
	WRITE ENR_ACCORD ON F.ACCORD,W_CODEAIDE:W_NUMACCORD
    END
RETURN

***********************************************************
***********************************************************
* GENERATION DU FICHIER STATACTAIDE

500 *

    I=1
    LOOP
	 UNTIL ENR_DETAILCALCUL<26,I>="" DO
	 GOSUB 501

         ENR_STATACTAIDE<1,J>=ENR_DETAILCALCUL<26,I>
	 ENR_STATACTAIDE<2,J>=ENR_STATACTAIDE<2,J>+ENR_DETAILCALCUL<25,I>

    	 I=I+1
    REPEAT

RETURN

***********************************************************
***********************************************************
* RECHERCHE SI ACT. DEJA AFFECTEE

501 *
 
    J=1
    LOOP
	 UNTIL ENR_STATACTAIDE<1,J>=ENR_DETAILCALCUL<26,I> OR ENR_STATACTAIDE<1,J>="" DO
	 J=J+1
    REPEAT

RETURN
***********************************************************
***********************************************************
* REMISE A ZERO DES VARIABLES

999 *
    ENR_FACTURAIDE=""
    W_MONTANTCHGURSSAFPAT=0
    W_MONTANTCHGURSSAFSAL=0
    W_MONTANTCOTISPREV=0
    W_PROVISIONCONGES=0
    W_PROVISIONCONGESa=0
    W_PROVISIONCONGESb=0
    W_PROVISIONCONGESTOTAL=0 	
    W_NBAIDANT=0
    W_PASSWRITE=1
    W_COTISPREVASSO=0
    W_TOTALCHGPAT=0
    W_TAUXCHARGESPAT=0
    W_ANCIENNETE=0
    W_PROVISIONCONGESTOTAL=0
    W_CUMULFRAISGESTION=0
    W_FRAISGESTION=0
    W_NBBULLETIN=0
    W_VALEURMAJORATION=0
    W_VALEURFRAISDOSSIER=0
    W_MONTANTCHGURSSAFPAYEESMOIS=0
    W_MONTANTCOTISPREVPAYEESMOIS=0
    W_NBJOURCONGESCOURS=0
    W_PROVISIONCOURS=0
    W_MONTANTREPRISECOURS=0
    W_ERREURCOTISAN=0
    W_MONTANTCOTIS=0
    W_MONTANTCOMPLFACT=0
    W_MONTANTASSIETTEFRAISGEST=0
    W_MONTANTFACTURE=0
    W_HRESPAYEES=0
    W_MONTANTREPRISEPROV=0
    W_MONTANTSALPAYERCOURS=0
    W_ASSIETTEFRAISGESTION=""
    W_CUMULMONTANTREPRISEPROV=0
    W_AFFECTFRAISDOSSIER=0
    W_MONTANTPARTBENEF=0
    W_NBACCORD=0
    ENR_NOMAIDANT=""
    ENR_STATACTAIDE=""
    W_NUMACCORD=""
    W_ACCORDSANSRATTRAP=""
    W_ACCORDTRI1=""
    W_MONTANTBRUT=0
    W_MONTANTFORFAIT=0 
    W_FRAISGESTION1=0
    W_FRAISGESTION2=0
    W_FRAISGESTION3=0   
    W_BASEFRAISGESTION=0
    W_BASEFRAISGESTION1=0
    W_BASEFRAISGESTION2=0
    W_BASEFRAISGESTION3=0
    W_TAUX=""
    W_BASEPARTEMP=0
    W_MONTANTCHGAPPELEES=0
    W_RANGCOURS=0

    W_PERIODECOURS=W_PERIODEMOIS
RETURN
