********************************************************
* BORDEREAU DE RECOUVREMENT DE CHARGES
*
* MAI 1999                              STEPHANE HERVET
********************************************************

* RECAPITULATIF DES GOSUB
* 100 -> ECRITURE DES DONNEES D'ERREURS
* 110 -> REQUETE SUR ORGANISME SOCIAL
* 200 -> TRAITEMENT DES BRC SI PAS D'ERREURS RENCONTREES
* 210 -> VERIFICATION SI DECALAGE DE PAIE (TRIMESTRIEL)
* 211 -> VERIFICATION SI DECALAGE DE PAIE (ANNUEL)
* 220 -> VERIFIE SI TRAITEMENT A FAIRE EN FCT DU MOIS (TRIM-PAS DECAL)
* 221 -> VERIFIE SI TRAITEMENT A FAIRE EN FCT DU MOIS (TRIM-DECAL)
* 230 -> VERIFIE SI TRAITEMENT A FAIRE EN FCT DU MOIS (ANNUEL-PAS DECAL)
* 231 -> VERIFIE SI TRAITEMENT A FAIRE EN FCT DU MOIS (ANNUEL-DECAL)
* 300 -> TRAITEMENT DES BRC (STOCKAGE DES CLES)
* 301 -> TRAITEMENT DES BRC PAR FREQUENCES
* 400 -> TRAITEMENT FREQ. MENSUELLE
* 401 -> TRAITEMENT FREQ. TRIMESTRIELLE
* 402 -> TRAITEMENT FREQ. ANNUELLE
* 500 -> CREATION DU TABLEAU FREQ. MENSUELLE
* 501 -> CREATION DU TABLEAU FREQ. TRIMESTRIELLE
* 502 -> CREATION DU TABLEAU FREQ. ANNUELLE
* 600 -> RECHERCHE ETABLISSEMENT 
* 610 -> RECHERCHE RUBRIQUE
* 700 -> VERIFIE SI L'ETABL. FAIT PARTIE DES REGROUPBRC
* 800 -> RECALCULE LE REGROUPEMENT POUR FREQ. MOIS
* 801 -> RECALCULE LE REGROUPEMENT POUR FREQ. TRIM
* 802 -> RECALCULE LE REGROUPEMENT POUR FREQ. ANNUEL
* 999 -> ECRITURE DES DONNEES DANS LE FICHIER

********************************************************
* OUVERTURE DES FICHIERS
********************************************************
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE STOP "ASSOCIATION"
OPEN "","CONTRAT" TO F.CONTRAT ELSE STOP "CONTRAT"
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE STOP "DETAILCALCUL"
OPEN "","ETABLISSEMENT" TO F.ETABLISSEMENT ELSE STOP "ETABLISSEMENT"
OPEN "","ORGANISMESOCIAL" TO F.ORGANISMESOCIAL ELSE STOP "ORGANISMESOCIAL"
OPEN "","REGROUPBRC" TO F.REGROUPBRC ELSE STOP "REGROUPBRC"
OPEN "","RUBCHARGE" TO F.RUBCHARGE ELSE STOP "RUBCHARGE"
OPEN "","TABLES" TO F.TABLES ELSE STOP "TABLES"
OPEN "","TAMPONBRCEDIT" TO F.TAMPONBRCEDIT ELSE STOP "TAMPONBCREDIT"
OPEN "","TRANCHE" TO F.TRANCHE ELSE STOP "TRANCHE"
OPEN "","TEMPO" TO F.TEMPO ELSE STOP "TEMPO"

********************************************************
* RECUPERATION PARAMETRES PASSES A LA PROCEDURE
********************************************************
PROCREAD VARIABLES ELSE 
    **PRINT "ERREUR PROCREAD"
    STOP
END

W_RANGENTITE=INDEX(VARIABLES," ",1)
W_RANGPERIODE=INDEX(VARIABLES," ",2)

W_CODEENTITE=VARIABLES[W_RANGENTITE+1,3]
W_PERIODE=VARIABLES[W_RANGPERIODE+1,6]
W_MOISPERIODE=W_PERIODE[5,2]

********************************************************
* CHARGEMENT DE LA LISTE DES ARTICLES SELECTIONNES
********************************************************
W_Requete = 'SSELECT REGROUPBRC AVEC AssocBrc = "':W_CODEENTITE:'"'
EXECUTE W_Requete
EXECUTE 'SAUVE-LISTE LISTEBRC'
EXECUTE 'LISTE LISTEBRC' CAPTURING MSG RETURNING MSGCODE

IF MSGCODE<1>=209 THEN STOP "Aucun enregistrement trouv dans LISTEBRC"
SELECT F.REGROUPBRC TO LISTEBRC

********************************************************
* VIDAGE DU TAMPON BRC
********************************************************
EXECUTE 'VIDER-FICHIER TAMPONBRCEDIT'

********************************************************
* LECTURE RESULTAT REQUETE JUSQUE REQUETE=VIDE EN BOUCLE
********************************************************

W_ERREUR=""
W_ORGSELECT=""
W_FREQMOIS=""
W_FREQTRIM=""
W_FREQAN=""
W_REGROUPEMENT=""
W_CODEETABLREGROUP=""
W_CODERUBCHG=""
W_REGROUPEMENTMOIS=""
W_REGROUPEMENTTRIM=""
W_REGROUPEMENTAN=""
W_CODEETABENCOURS=""
W_CODEORGENCOURS=""
W_FREQORGSELECT=""
W_CONTENUENTITE=""
W_CONTENUENTITETRIM=""
W_CONTENUENTITEAN=""
W_CODEAIDANT=""
W_ANCIENCODEAIDANT=""
W_EFFECTIF=""
ENR_TAMPONBRCEDIT=""
W_REGROUPEMENT2=""

W_REQVIDE="FAUX"
W_REQORGVIDE="FAUX"
W_APPEL800="FAUX"
W_APPEL801="FAUX"
W_APPEL802="FAUX"

W_CHARGEAPAYER=0
W_TOTALRUB=0
W_RANGORG=0
W_RANGETAB=0
W_RANGETABREGROUP=0
W_RANGRUBCHG=0
W_RANGFREQMOIS=0
W_RANGFREQTRIM=0
W_RANGFREQAN=0
**W_NBREGROUPEMENT=0
W_NBREGROUPEMENTMOIS=0
W_NBREGROUPEMENTTRIM=0
W_NBREGROUPEMENTAN=0
W_TOTALBASE=0
W_TOTALCOTIS=0
W_TOTALPERS=0
W_TOTALGENERALCOTIS=0
W_TOURORG=0

DETAILCALCULMOIS=""
DETAILCALCULAN=""
DETAILCALCULTRIM=""
LISTEORGSOCIALBRC=""

LOOP
	***************************************************
	* LECTURE CLE SUIVANTE
	***************************************************
	READNEXT CLE FROM LISTEBRC ELSE 
		 W_REQVIDE="VRAI"
	END
UNTIL W_REQVIDE="VRAI" DO

	***************************************************
	* VERIFICATION CHARGE A PAYER IDENTIQUE
	***************************************************
  
	* LECTURE REGROUPBRC
	READ ENR_REGROUPBRC FROM F.REGROUPBRC,CLE ELSE 
		 STOP "ERREUR REGROUPBRC ":CLE
	END

	* COMPTE LE NBRE DE RUBRIQUE DE CHARGE
	W_TYPEREGROUP=ENR_REGROUPBRC<3>
	W_NBRUBREGROUP=DCOUNT(ENR_REGROUPBRC<2>,CHAR(253))

	FOR I=1 TO W_NBRUBREGROUP
		
		* LECTURE RUBCHARGE
		READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_REGROUPBRC<2,I> ELSE 
			STOP "ERREUR RUBCHARGE ":ENR_REGROUPBRC<2,I>
		END
		
		* LECTURE TRANCHE
		READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> ELSE 
			STOP "ERREUR TRANCHE ":ENR_RUBCHARGE<2>
		END
		
		W_TOTALRUB=ENR_RUBCHARGE<10>+ENR_RUBCHARGE<14>
		W_TYPETRANCHE=ENR_TRANCHE<10>
		
		* VERIFIE SI TOTAL CHARGE IDENTIQUE
		IF W_TYPEREGROUP=1 THEN
			IF W_TOTALRUB<>W_CHARGEAPAYER AND I<>1 THEN
				W_ERREUR<-1>=CLE
				EXIT
			END
		END ELSE
			IF W_TYPETRANCHE<>W_TRANCHEACTIVE AND I<>1 THEN
				W_ERREUR<-1>=CLE
				EXIT
			END
		END		
		
		W_TRANCHEACTIVE=ENR_TRANCHE<10>
		W_CHARGEAPAYER=ENR_RUBCHARGE<10>+ENR_RUBCHARGE<14>
		
	NEXT I
	
	W_REGROUPEMENT<-1>=CLE

REPEAT

***************************************************
* VERIFIE SI DES ERREURS SE SONT PRODUITES
***************************************************

IF W_ERREUR<1><>""THEN	
    **PRINT "DES ERREURS SE SONT PRODUITES"
    
    GOSUB 100
END ELSE
    GOSUB 110
END

RETURN

***************************************************
* ECRITURE DES DONNEES D'ERREURS
***************************************************
100 *
    I=1
    LOOP
         UNTIL W_ERREUR<I>=""
	 ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,I;W_ERREUR<I>) 		 	
         I=I+1
    REPEAT
   
    WRITE ENR_TAMPONBRCEDIT ON F.TAMPONBRCEDIT,"ERREURS"
RETURN

***************************************************
* REQUETE SUR ORGANISME SOCIAL
***************************************************
110

    * SELECTIONNE TOUS LES ORGANISMES SOCIAUX AVEC
    * CODE ENTITE PAR FREQ. EMISSION,PAR CODE ETABL
    * PAR TYPE ORGANISME PAR ORGANISME

    EXECUTE 'TSELECT ORGANISMESOCIAL AVEC CODEENTITE = "':W_CODEENTITE:'" PAR FreqOrg PAR-DECR CODEETABL PAR TypeOrg PAR CodOrg'
    EXECUTE "SAUVE-LISTE LISTEORGSOCIALBRC"
    EXECUTE "LISTE LISTEORGSOCIALBRC" CAPTURING MSG RETURNING MSGCODE

    IF MSGCODE<1>=209 THEN STOP
    SELECT F.ORGANISMESOCIAL TO LISTEORGSOCIALBRC

    READ ENR_ASSOCIATION FROM F.ASSOCIATION,W_CODEENTITE ELSE
		STOP "ERREUR ASSOCIATION ":W_CODEENTITE
    END
    IF ENR_ASSOCIATION<48> = "" AND ENR_ASSOCIATION<25> = "1" THEN
	*IF W_PERIODE > "200711" THEN
		ENR_ASSOCIATION<48>=W_PERIODE[1,4]
		WRITE ENR_ASSOCIATION ON F.ASSOCIATION, W_CODEENTITE
	*END
    END

    * VERIFIE SI DECALAGE DE PAIE: 
    IF ENR_ASSOCIATION<25>=0 THEN
		W_PERFINEX = "12"
    END ELSE
	W_PERFINEX = "11"
    END

	* Traitement BRC
    GOSUB 200

RETURN

***************************************************
* TRAITEMENT DES BRC SI PAS D'ERREURS RENCONTREES
***************************************************
200

    LOOP 
		READNEXT CLE FROM LISTEORGSOCIALBRC ELSE 
		    W_REQORGVIDE="VRAI"
	 	END
		
	UNTIL W_REQORGVIDE="VRAI"
		
        W_CODEORGSOCIAL=CLE
		* LECTURE ORGANISME SOCIAL POUR REGROUP OK
        READ ENR_ORGANISMESOCIAL FROM F.ORGANISMESOCIAL,W_CODEORGSOCIAL ELSE
			STOP "ERREUR ORGANISMESOCIAL ":W_CODEORGSOCIAL
		END
		
		* VERIFIE FREQ. EMISSION
		BEGIN CASE	
			
			CASE ENR_ORGANISMESOCIAL<18>="M"
				GOSUB 300
			CASE ENR_ORGANISMESOCIAL<18>="T"
				* Vrif dcalage de paie (Trimestriel)
				GOSUB 210
			CASE ENR_ORGANISMESOCIAL<18>="A"
				* Vrif dcalage de paie (Annuel)
				GOSUB 211
		END CASE
	REPEAT
	
    W_REGROUPEMENTPARMOIS=""
    W_REGROUPEMENTPARTRIM=""
    W_REGROUPEMENTPARAN=""

    * APPURATION DES REGROUPEMENTS QUI NE SONT PAS A TRAITER
    M=1
    LOOP UNTIL W_ORGSELECT<M,1>="" DO
        * SCAN DES REGROUPEMENTS
        N=1
		LOOP UNTIL W_REGROUPEMENT<N>="" DO
			* SI REGROUPEMENT TROUVE
			IF W_REGROUPEMENT<N>[1,9]=W_ORGSELECT<M,1> THEN
				
				W_REGROUPEMENT2<-1>=W_REGROUPEMENT<N>
				
				IF W_ORGSELECT<M,3>="M" THEN 
					W_NBREGROUPEMENTMOIS=W_NBREGROUPEMENTMOIS+1
					W_REGROUPEMENTPARMOIS<-1>=W_REGROUPEMENT<N>
					W_NBREGROUPEMENTAN=W_NBREGROUPEMENTAN+1
					W_REGROUPEMENTPARAN<-1>=W_REGROUPEMENT<N>
				END
				
				IF W_ORGSELECT<M,3>="T" THEN
					W_NBREGROUPEMENTTRIM=W_NBREGROUPEMENTTRIM+1
					W_REGROUPEMENTPARTRIM<-1>=W_REGROUPEMENT<N>
					W_NBREGROUPEMENTAN=W_NBREGROUPEMENTAN+1
					W_REGROUPEMENTPARAN<-1>=W_REGROUPEMENT<N>
				END
				
				IF W_ORGSELECT<M,3>="A" THEN
					W_NBREGROUPEMENTAN=W_NBREGROUPEMENTAN+1
					W_REGROUPEMENTPARAN<-1>=W_REGROUPEMENT<N>
				END
			END
			
			N=N+1
		REPEAT
		
		M=M+1
    REPEAT
    
    W_REGROUPEMENT=W_REGROUPEMENT2

	* Traitement des BRC par frquence
    GOSUB 301

    EXECUTE "EFFACER-LISTE LISTEORGSOCIALBRC"

RETURN

***************************************************
* VERIFICATION SI DECALAGE DE PAIE (TRIMESTRIEL)
***************************************************
210

    * VERIFIE SI DECALAGE DE PAIE: 
 * Michael, le 11/12/07 : COnvenu de traiter l'anne de transition comme une anne normale jusqu'au dernier trimestre, qui fera toujours DEUX mois :
    IF ENR_ASSOCIATION<25>=0 OR (ENR_ASSOCIATION<25> = 1 AND ENR_ASSOCIATION<48> = W_PERIODE[1,4]) THEN
		
		* VERIFIE SI TRAITEMENT A FAIRE EN FONCTION DU MOIS 
	    * SI PERIODE DE PAIE = DERNIER MOIS DU TRIMESTRE => TRAITEMENT (Stockage)
		
	    IF W_MOISPERIODE="03" OR W_MOISPERIODE="06" OR W_MOISPERIODE="09" OR (W_MOISPERIODE="12" AND ENR_ASSOCIATION<25> = 0) OR (W_MOISPERIODE="11" AND ENR_ASSOCIATION<25> = 1) THEN
			GOSUB 300
	    END
		
    END ELSE
	    * VERIFIE SI TRAITEMENT A FAIRE EN FONCTION DU MOIS 
	    * SI PERIODE DE PAIE = DERNIER MOIS DE L'ANNEE => TRAITEMENT (Stockage)
		
	    IF W_MOISPERIODE="02" OR W_MOISPERIODE="05" OR W_MOISPERIODE="08" OR W_MOISPERIODE="11" THEN
			GOSUB 300
	    END
    END

RETURN

***************************************************
* VERIFICATION SI DECALAGE DE PAIE (ANNUEL)
***************************************************
211

* Michael, le 11/12/07 : On ne change rien ici : 

    * VERIFIE SI DECALAGE DE PAIE: 
    IF ENR_ASSOCIATION<25>=0 THEN
		
		* VERIFIE SI TRAITEMENT A FAIRE EN FONCTION DU MOIS
		
	    * SI PERIODE DE PAIE = DERNIER MOIS DE L'ANNEE => TRAITEMENT (Stockage)
	    IF W_MOISPERIODE="12" THEN
			GOSUB 300
	    END
		
    END ELSE
		
		* VERIFIE SI TRAITEMENT A FAIRE EN FONCTION DU MOIS
		
	    * SI PERIODE DE PAIE = DERNIER MOIS DE L'ANNEE-1 => TRAITEMENT (Stockage)
		IF W_MOISPERIODE="11" THEN
			GOSUB 300
	    END
    END

RETURN

***************************************************
* TRAITEMENT DES BRC (STOCKAGE DES CLES) 
***************************************************
300

    X=1

    IF ENR_ORGANISMESOCIAL<18>="M" THEN 
         LOOP 
 	      UNTIL W_ORGSELECT<X,3><>"M" OR W_ORGSELECT<X,3>="" DO
	      X=X+1
         REPEAT
    END
    IF ENR_ORGANISMESOCIAL<18>="T" THEN 
         LOOP 
 	      UNTIL W_ORGSELECT<X,3>="A" OR W_ORGSELECT<X,3>="" DO
	      X=X+1
         REPEAT
    END
    IF ENR_ORGANISMESOCIAL<18>="A" THEN 
         LOOP 
 	      UNTIL W_ORGSELECT<X,3>="" DO
	      X=X+1
         REPEAT
    END

    W_RANGORG=X
 
    * Insertion de l'enregistrement dans la liste
	IF ENR_ORGANISMESOCIAL<18><>"A" THEN 
		W_ORGSELECT=INSERT(W_ORGSELECT,W_RANGORG;"")
    END
	
    * STOCKAGE DU CODE ORGANISME 
    W_ORGSELECT=INSERT(W_ORGSELECT,W_RANGORG,1;CLE)
    * STOCKAGE DU CODE ETABL
    W_ORGSELECT=INSERT(W_ORGSELECT,W_RANGORG,2;CLE[4,3])
    * STOCKAGE DE LA FREQ. EMISSION
    W_ORGSELECT=INSERT(W_ORGSELECT,W_RANGORG,3;ENR_ORGANISMESOCIAL<18>)

RETURN

***************************************************
* TRAITEMENT DES BRC PAR FREQUENCES
***************************************************
301

    * TEST SI AU MOINS UN ORGANISME SELECTIONNE
    IF W_ORGSELECT<1,3>="" THEN STOP
	
    * STOCKE PAR DEFAUT LA 1ERE FREQUENCE
    W_ANCIENNEFREQ=W_ORGSELECT<1,3>

    W_TOURORG=1
    LOOP UNTIL W_ORGSELECT<W_TOURORG,3>="" DO
		
		IF W_ORGSELECT<W_TOURORG,3> <> W_ANCIENNEFREQ OR W_TOURORG=1 THEN
			W_RANGETAB=1
			
			IF W_TOURORG<>1 THEN	
				GOSUB 999
				W_TOTALCOTIS=0
				W_TOTALGENERALCOTIS=0
			END
			
			* SI FREQ. MENSUELLE
			IF W_ORGSELECT<W_TOURORG,3>="M" THEN
				W_FREQORGSELECT="M"
				GOSUB 400 
				GOSUB 500
			END 
			
			* SI FREQ. TRIMESTRIELLE
			IF W_ORGSELECT<W_TOURORG,3>="T" THEN
				W_FREQORGSELECT="T"
				GOSUB 401
				GOSUB 501
			END
* Michael, le 13/12/2007 : 
* ne voit vraiment AUCUN interet a effectuer ce traitement : Voir plus bas : 			
*			* SI FREQ. ANNUELLE
*			IF W_ORGSELECT<W_TOURORG,3>="A" THEN
*				W_FREQORGSELECT="A"
*				GOSUB 402
*				GOSUB 502
*				WRITE W_FREQAN ON F.TEMPO, "W_FREQAN"
*			END
		END
		
		W_ANCIENNEFREQ=W_ORGSELECT<W_TOURORG,3>
		W_TOURORG=W_TOURORG+1
    REPEAT
* Michael,le 03/01/08 : 
*    GOSUB 999
*Michael, le 13/12/2007 !
* Est effectu ici : 
	IF W_MOISPERIODE=W_PERFINEX THEN
		W_FREQORGSELECT="A"
		GOSUB 402
		GOSUB 502
		GOSUB 999
	END ELSE
		* Michael, le 08/01/08
		GOSUB 999
	END
RETURN

***************************************************
* TRAITEMENT FREQ. MENSUELLE
***************************************************
400

    * SELECTIONNE TOUS LES DETAILCALCUL AVEC PERIODE,
    * CODE ENTITE,CONVENTION COL PAR CODE ETABL

    EXECUTE 'TSELECT DETAILCALCUL AVEC CodAssoContratDetailCalcul = "':W_CODEENTITE:'" AND AVEC PeriodeDetailCalcul = "':W_PERIODE:'" AND AVEC ConvColContratDetailCalcul # "02" PAR-DECR CodEtabContrat PAR CodeAidantDetailCalcul'
    EXECUTE 'SAUVE-LISTE DETAILCALCULMOIS'
    EXECUTE 'LISTE DETAILCALCULMOIS' CAPTURING MSG RETURNING MSGCODE

RETURN

***************************************************
* TRAITEMENT FREQ. TRIMESTRIELLE
***************************************************
401

    * CALCUL DE PERIODE - 3 MOIS
    W_PERIODEDEBUT=W_PERIODE[5,2]-2
    IF W_PERIODEDEBUT=0 THEN
         W_PERIODEDEBUT="12"
         W_ANNEEDEBUT=W_PERIODE[1,4]-1
	 IF W_PERIODEDEBUT MATCH "1N" THEN 
	      W_PERIODEDEBUT=W_ANNEEDEBUT:"0":W_PERIODEDEBUT
	 END ELSE
	      W_PERIODEDEBUT=W_ANNEEDEBUT:W_PERIODEDEBUT
	 END
    END ELSE
 	 W_ANNEEDEBUT=W_PERIODE[1,4]
	 IF W_PERIODEDEBUT MATCH "1N" THEN 
	      W_PERIODEDEBUT=W_ANNEEDEBUT:"0":W_PERIODEDEBUT
	 END ELSE
	      W_PERIODEDEBUT=W_ANNEEDEBUT:W_PERIODEDEBUT
	 END
    END

 * Michael, le 11/12/07 : Attention  la periode de transition ...
 IF ENR_ASSOCIATION<25> = "1" AND ENR_ASSOCIATION<48> = W_PERIODE[1,4] THEN
	IF W_MOISPERIODE = "11" THEN
		* Ce trimestre en particulier 
		W_PERIODEDEBUT = W_PERIODE[1,4]:"10"
	END
 END

    * SELECTIONNE TOUS LES DETAILCALCUL AVEC PERIODE,
    * CODE ENTITE,CONVENTION COL PAR CODE ETABL

    EXECUTE 'TSELECT DETAILCALCUL AVEC CodAssoContratDetailCalcul = "':W_CODEENTITE:'" AND AVEC PeriodeDetailCalcul >= "':W_PERIODEDEBUT:'" AND <= "':W_PERIODE:'" AND AVEC ConvColContratDetailCalcul # "02" PAR-DECR CodEtabContrat PAR CodeAidantDetailCalcul'
    EXECUTE 'SAUVE-LISTE DETAILCALCULTRIM'
    EXECUTE 'LISTE DETAILCALCULTRIM' CAPTURING MSG RETURNING MSGCODE

RETURN

***************************************************
* TRAITEMENT FREQ. ANNUELLE
***************************************************
402

    IF W_PERIODE[5,2]="12" OR (W_PERIODE[5,2]="11" AND ENR_ASSOCIATION<48> = W_PERIODE[1,4]) THEN
	 W_PERIODEDEBUT=W_PERIODE[1,4]:"01"
    END ELSE
	 W_PERIODEDEBUT=W_PERIODE[1,4]-1:"12"
    END

    * SELECTIONNE TOUS LES DETAILCALCUL AVEC PERIODE,
    * CODE ENTITE,CONVENTION COL PAR CODE ETABL

    EXECUTE 'TSELECT DETAILCALCUL AVEC CodAssoContratDetailCalcul = "':W_CODEENTITE:'" AND AVEC PeriodeDetailCalcul >= "':W_PERIODEDEBUT:'" AND <= "':W_PERIODE:'" AND AVEC ConvColContratDetailCalcul # "02" PAR-DECR CodEtabContrat PAR CodeAidantDetailCalcul'
    EXECUTE 'SAUVE-LISTE DETAILCALCULAN'
    EXECUTE 'LISTE DETAILCALCULAN' CAPTURING MSG RETURNING MSGCODE

RETURN

***************************************************
* CREATION DU TABLEAU FREQ. MENSUELLE
***************************************************
500

    W_NBTRAITEMENT=0
    W_ANCIENCODEAIDANT=""

    IF MSGCODE<1> # 209 THEN 
		
		SELECT F.DETAILCALCUL TO DETAILCALCULMOIS
		
		
		* Boucle sur DETAILCALCUL
	    REQDETAILVIDE="FAUX"
	    LOOP 
			READNEXT CLE FROM DETAILCALCULMOIS ELSE 
				REQDETAILVIDE="VRAI"
			END
		UNTIL REQDETAILVIDE="VRAI" DO
			
			* LECTURE DETAILCALCUL
			READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,CLE ELSE
				STOP "ERREUR DETAILCALCUL=":CLE
			END
			
			W_NBTRAITEMENT=W_NBTRAITEMENT+1
			
			* LECTURE CONTRAT POUR RECUPERATION CODE ETABL.
			READ ENR_CONTRAT FROM F.CONTRAT,CLE[1,8] ELSE
			  STOP "ERREUR CONTRAT=":CLE[1,8]
			END
			
			* STOCKE LE CODE ETABL
			W_CODEETABL=ENR_CONTRAT<3>
* Michael, le 13/12 : On doit compter les salarris, pas les contrats :			
			* REMPLACE CODE AIDANT PAR CODE CONTRAT
			* STOCKE LE CODE AIDANT
*			W_CODEAIDANT=CLE[1,8]
W_CODEAIDANT=CLE[1,5]
			
			* VERIFIE SI L'ETABLISSEMENT FAIT PARTIE DES REGROUPBRC
			*	 GOSUB 700
			
			*	 IF W_ETABVALIDE="VRAI" THEN
			GOSUB 600
			
			* COMPTE LE NB DE RUB. DE CHARGE EN ATT.8
			W_NBRUBCHG=DCOUNT(ENR_DETAILCALCUL<8>,CHAR(253))
			
			* CALCULE L'EMPLACEMENT DE L'ETABLISSEMENT
			IF W_RANGETAB=1 THEN
				W_RANGETAB=2
				W_ANCIENRANG=2
			END ELSE
				W_ANCIENRANG=W_RANGETAB+1
				W_RANGETAB=2+(W_RANGETAB-1)*3
			END
			
     	    * ECRIT LE CODE ETABLISSEMENT
			IF W_RANGETAB=2 THEN
				W_FREQMOIS=REPLACE(W_FREQMOIS,1,W_RANGETAB;W_CODEETABL)
			END ELSE
				W_FREQMOIS=REPLACE(W_FREQMOIS,1,W_ANCIENRANG;W_CODEETABL)
			END
			
			IF W_ANCIENCODEAIDANT<>W_CODEAIDANT THEN  
				W_EFFECTIF=""
				FOR I=1 TO DCOUNT(W_FREQMOIS,CHAR(253))
					W_EFFECTIF<I>=0
				NEXT I
			END
			
			FOR I=1 TO W_NBRUBCHG
				
				W_CODERUB=ENR_DETAILCALCUL<8,I>
				
				GOSUB 610
				
				* VERIFIE SI RUBRIQUE PAS DEJA AFFECTEE
				IF W_RUBEXISTE="NON" THEN
					* VERIFIE SI 1ER ETABLISSEMENT
					IF W_RANGETAB=2 AND W_NBTRAITEMENT=1 THEN
						W_FREQMOIS=REPLACE(W_FREQMOIS,I+1,1,1;W_CODERUB)
					END ELSE
						W_FREQMOIS=REPLACE(W_FREQMOIS,-1,1,1;W_CODERUB)
					END
				END
				
				IF W_RANGETAB=2 THEN
					
					IF ENR_DETAILCALCUL<9,I> <> "" AND ENR_DETAILCALCUL<9,I> <> 0 THEN
					    W_FREQMOIS=REPLACE(W_FREQMOIS,W_RANGRUB,2,1;W_FREQMOIS<W_RANGRUB,2,1> + ENR_DETAILCALCUL<9,I>)
					END ELSE
					    W_FREQMOIS=REPLACE(W_FREQMOIS,W_RANGRUB,2,1;W_FREQMOIS<W_RANGRUB,2,1> + ENR_DETAILCALCUL<12,I>)
					END
					
		            W_FREQMOIS=REPLACE(W_FREQMOIS,W_RANGRUB,2,2;W_FREQMOIS<W_RANGRUB,2,2>+ENR_DETAILCALCUL<14,I>-ENR_DETAILCALCUL<11,I>)
					
					IF W_ANCIENCODEAIDANT=W_CODEAIDANT THEN  
						
						IF W_EFFECTIF<W_RANGRUB>="" OR W_EFFECTIF<W_RANGRUB>=0 THEN
							W_EFFECTIF<W_RANGRUB>=1
		                    W_FREQMOIS=REPLACE(W_FREQMOIS,W_RANGRUB,2,3;W_FREQMOIS<W_RANGRUB,2,3>+1)
						END
					END ELSE
						
						IF W_EFFECTIF<W_RANGRUB>="" OR W_EFFECTIF<W_RANGRUB>=0 THEN
							W_EFFECTIF<W_RANGRUB>=1
							W_FREQMOIS=REPLACE(W_FREQMOIS,W_RANGRUB,W_ANCIENRANG,3;W_FREQMOIS<W_RANGRUB,W_ANCIENRANG,3>+1)
						END
					END
					
				END ELSE
					
					IF ENR_DETAILCALCUL<9,I> <> "" AND ENR_DETAILCALCUL<9,I> <> 0 THEN
						W_FREQMOIS=REPLACE(W_FREQMOIS,W_RANGRUB,W_ANCIENRANG,1;W_FREQMOIS<W_RANGRUB,W_ANCIENRANG,1>+ENR_DETAILCALCUL<9,I>)
					END ELSE
						W_FREQMOIS=REPLACE(W_FREQMOIS,W_RANGRUB,W_ANCIENRANG,1;W_FREQMOIS<W_RANGRUB,W_ANCIENRANG,1>+ENR_DETAILCALCUL<12,I>)
					END
					
	                W_FREQMOIS=REPLACE(W_FREQMOIS,W_RANGRUB,W_ANCIENRANG,2;W_FREQMOIS<W_RANGRUB,W_ANCIENRANG,2>+ENR_DETAILCALCUL<14,I>-ENR_DETAILCALCUL<11,I>)
					
					IF W_ANCIENCODEAIDANT=W_CODEAIDANT THEN  
						
						IF W_EFFECTIF<W_RANGRUB>="" OR W_EFFECTIF<W_RANGRUB>=0 THEN
							W_EFFECTIF<W_RANGRUB>=1
							W_FREQMOIS=REPLACE(W_FREQMOIS,W_RANGRUB,2,3;W_FREQMOIS<W_RANGRUB,2,3>+1)
						END
					END ELSE
						
						IF W_EFFECTIF<W_RANGRUB>="" OR W_EFFECTIF<W_RANGRUB>=0 THEN
							W_EFFECTIF<W_RANGRUB>=1
							W_FREQMOIS=REPLACE(W_FREQMOIS,W_RANGRUB,W_ANCIENRANG,3;W_FREQMOIS<W_RANGRUB,W_ANCIENRANG,3>+1)
						END
					END
				END
				
				IF W_RUBEXISTE="NON" THEN
			        * VERIFIE SI 1ER ETABLISSEMENT
					IF W_RANGETAB=2 AND W_NBTRAITEMENT=1 THEN
						W_CONTENUENTITE=REPLACE(W_CONTENUENTITE,I,1;W_CODERUB)
					END ELSE
						W_CONTENUENTITE=REPLACE(W_CONTENUENTITE,-1,1;W_CODERUB)
					END
				END
				
				IF ENR_DETAILCALCUL<9,I><>"" AND ENR_DETAILCALCUL<9,I><>0 THEN
					W_CONTENUENTITE=REPLACE(W_CONTENUENTITE,W_RANGRUB-1,2,1;W_CONTENUENTITE<W_RANGRUB-1,2,1>+ENR_DETAILCALCUL<9,I>)
				END ELSE
					W_CONTENUENTITE=REPLACE(W_CONTENUENTITE,W_RANGRUB-1,2,1;W_CONTENUENTITE<W_RANGRUB-1,2,1>+ENR_DETAILCALCUL<12,I>)
				END
				
				W_CONTENUENTITE=REPLACE(W_CONTENUENTITE,W_RANGRUB-1,2,2;W_CONTENUENTITE<W_RANGRUB-1,2,2>+ENR_DETAILCALCUL<14,I>-ENR_DETAILCALCUL<11,I>)
				
				IF W_ANCIENCODEAIDANT<>W_CODEAIDANT THEN
					IF W_EFFECTIF<W_RANGRUB>=1 THEN
						W_CONTENUENTITE=REPLACE(W_CONTENUENTITE,W_RANGRUB-1,2,3;W_CONTENUENTITE<W_RANGRUB-1,2,3>+1)
					END
				END
				
			NEXT
			
			IF W_NBRUBCHG<>0 THEN
				W_ANCIENCODEAIDANT=W_CODEAIDANT
			END
		REPEAT
		
    END

RETURN

***************************************************
* CREATION DU TABLEAU FREQ. TRIMESTRIELLE
***************************************************
501
    W_NBTRAITEMENT=0
    W_ANCIENCODEAIDANT=""

    IF MSGCODE<1> # 209 THEN 
		
	    SELECT F.DETAILCALCUL TO DETAILCALCULTRIM
		
	    REQDETAILVIDE="FAUX"
	    LOOP 
			READNEXT CLE FROM DETAILCALCULTRIM ELSE 
				REQDETAILVIDE="VRAI"
			END
		UNTIL REQDETAILVIDE="VRAI" DO
			
			* LECTURE DETAILCALCUL
			READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,CLE ELSE
				STOP "ERREUR DETAILCALCUL=":CLE
			END
			
			W_NBTRAITEMENT=W_NBTRAITEMENT+1
			
			* LECTURE CONTRAT POUR RECUPERATION CODE ETABL.
			READ ENR_CONTRAT FROM F.CONTRAT,CLE[1,8] ELSE
				STOP "ERREUR CONTRAT=":CLE[1,8]
			END
				
			* STOCKE LE CODE ETABL
			W_CODEETABL=ENR_CONTRAT<3>
* Michael le 13/12/07 : on doit compter els salaris, pas les contrats :				
			* REMPLACE CODE AIDANT PAR CODE CONTRAT
			* STOCKE LE CODE CONTRAT
*			W_CODEAIDANT=CLE[1,8]
W_CODEAIDANT=CLE[1,5]

			
			
			GOSUB 601
			
            * COMPTE LE NB DE RUB. DE CHARGE EN ATT.8
            W_NBRUBCHG=DCOUNT(ENR_DETAILCALCUL<8>,CHAR(253))
			
			* CALCULE L'EMPLACEMENT DE L'ETABLISSEMENT
			IF W_RANGETAB=1 THEN
				W_RANGETAB=2
				W_ANCIENRANG=2
			END ELSE
				W_ANCIENRANG=W_RANGETAB+1
				W_RANGETAB=2+(W_RANGETAB-1)*3
			END
			
     	    * ECRIT LE CODE ETABLISSEMENT
			IF W_RANGETAB=2 THEN
				W_FREQTRIM=REPLACE(W_FREQTRIM,1,W_RANGETAB;W_CODEETABL)
			END ELSE
				W_FREQTRIM=REPLACE(W_FREQTRIM,1,W_ANCIENRANG;W_CODEETABL)
			END
			
			IF W_ANCIENCODEAIDANT<>W_CODEAIDANT THEN  
				W_EFFECTIF=""
				W_EFFECTIFENTITE = ""
				FOR I=1 TO DCOUNT(W_FREQTRIM,CHAR(253))
					W_EFFECTIF<I>=0
					W_EFFECTIFENTITE<I>=0
				NEXT I
			END
			
			FOR I=1 TO W_NBRUBCHG
				
				W_CODERUB=ENR_DETAILCALCUL<8,I>
				
				GOSUB 611
				
				* VERIFIE SI RUBRIQUE PAS DEJA AFFECTEE
				IF W_RUBEXISTE="NON" THEN
					* VERIFIE SI 1ER ETABLISSEMENT
					IF W_RANGETAB=2 AND W_NBTRAITEMENT=1 THEN
						W_FREQTRIM=REPLACE(W_FREQTRIM,W_RANGRUB,1,1;W_CODERUB)
					END ELSE
						W_FREQTRIM=REPLACE(W_FREQTRIM,W_RANGRUB,1,1;W_CODERUB)
					END
				END
				IF W_RANGETAB=2 THEN
					IF ENR_DETAILCALCUL<9,I><>"" AND ENR_DETAILCALCUL<9,I><>0 THEN
						W_FREQTRIM=REPLACE(W_FREQTRIM,W_RANGRUB,2,1;W_FREQTRIM<W_RANGRUB,2,1>+ENR_DETAILCALCUL<9,I>)
					END ELSE
						W_FREQTRIM=REPLACE(W_FREQTRIM,W_RANGRUB,2,1;W_FREQTRIM<W_RANGRUB,2,1>+ENR_DETAILCALCUL<12,I>)
					END
					
					W_FREQTRIM=REPLACE(W_FREQTRIM,W_RANGRUB,2,2;W_FREQTRIM<W_RANGRUB,2,2>+ENR_DETAILCALCUL<14,I>-ENR_DETAILCALCUL<11,I>)
					
					IF W_ANCIENCODEAIDANT=W_CODEAIDANT THEN  
						IF W_EFFECTIF<W_RANGRUB>="" OR W_EFFECTIF<W_RANGRUB>=0 THEN
							W_EFFECTIF<W_RANGRUB>=1
							W_FREQTRIM=REPLACE(W_FREQTRIM,W_RANGRUB,2,3;W_FREQTRIM<W_RANGRUB,2,3>+1)
						END
					END ELSE
						IF W_EFFECTIF<W_RANGRUB>="" OR W_EFFECTIF<W_RANGRUB>=0 THEN
							W_EFFECTIF<W_RANGRUB>=1
							W_FREQTRIM=REPLACE(W_FREQTRIM,W_RANGRUB,W_ANCIENRANG,3;W_FREQTRIM<W_RANGRUB,W_ANCIENRANG,3>+1)
						END
					END
				END ELSE
					IF ENR_DETAILCALCUL<9,I><>"" AND ENR_DETAILCALCUL<9,I><>0 THEN
						W_FREQTRIM=REPLACE(W_FREQTRIM,W_RANGRUB,W_ANCIENRANG,1;W_FREQTRIM<W_RANGRUB,W_ANCIENRANG,1>+ENR_DETAILCALCUL<9,I>)
					END ELSE
						W_FREQTRIM=REPLACE(W_FREQTRIM,W_RANGRUB,W_ANCIENRANG,1;W_FREQTRIM<W_RANGRUB,W_ANCIENRANG,1>+ENR_DETAILCALCUL<12,I>)
					END
	                
					W_FREQTRIM=REPLACE(W_FREQTRIM,W_RANGRUB,W_ANCIENRANG,2;W_FREQTRIM<W_RANGRUB,W_ANCIENRANG,2>+ENR_DETAILCALCUL<14,I>-ENR_DETAILCALCUL<11,I>)
					
					IF W_ANCIENCODEAIDANT=W_CODEAIDANT THEN
						IF W_EFFECTIF<W_RANGRUB>="" OR W_EFFECTIF<W_RANGRUB>=0 THEN
							W_EFFECTIF<W_RANGRUB>=1
							W_FREQTRIM=REPLACE(W_FREQTRIM,W_RANGRUB,W_ANCIENRANG,3;W_FREQTRIM<W_RANGRUB,W_ANCIENRANG,3>+1)
						END
					END ELSE
						IF W_EFFECTIF<W_RANGRUB>="" OR W_EFFECTIF<W_RANGRUB>=0 THEN
							W_EFFECTIF<W_RANGRUB>=1
							W_FREQTRIM=REPLACE(W_FREQTRIM,W_RANGRUB,W_ANCIENRANG,3;W_FREQTRIM<W_RANGRUB,W_ANCIENRANG,3>+1)
						END
					END
				END
				
				IF W_RUBEXISTE="NON" THEN
					* VERIFIE SI 1ER ETABLISSEMENT
					IF W_RANGETAB=2 AND W_NBTRAITEMENT=1 THEN
						W_CONTENUENTITETRIM=REPLACE(W_CONTENUENTITETRIM,W_RANGRUB,1;W_CODERUB)
					END ELSE
						W_CONTENUENTITETRIM=REPLACE(W_CONTENUENTITETRIM,W_RANGRUB,1;W_CODERUB)
					END
				END
				
				IF ENR_DETAILCALCUL<9,I><>"" AND ENR_DETAILCALCUL<9,I><>0 THEN
					W_CONTENUENTITETRIM=REPLACE(W_CONTENUENTITETRIM,W_RANGRUB,2,1;W_CONTENUENTITETRIM<W_RANGRUB,2,1>+ENR_DETAILCALCUL<9,I>)
				END ELSE
					W_CONTENUENTITETRIM=REPLACE(W_CONTENUENTITETRIM,W_RANGRUB,2,1;W_CONTENUENTITETRIM<W_RANGRUB,2,1>+ENR_DETAILCALCUL<12,I>)
				END
				
				W_CONTENUENTITETRIM=REPLACE(W_CONTENUENTITETRIM,W_RANGRUB,2,2;W_CONTENUENTITETRIM<W_RANGRUB,2,2>+ENR_DETAILCALCUL<14,I>-ENR_DETAILCALCUL<11,I>)
				
*				IF W_ANCIENCODEAIDANT<>W_CODEAIDANT THEN
					IF INT(W_EFFECTIFENTITE<W_RANGRUB>)=0 THEN
						W_CONTENUENTITETRIM=REPLACE(W_CONTENUENTITETRIM,W_RANGRUB,2,3;W_CONTENUENTITETRIM<W_RANGRUB,2,3>+1)
						W_EFFECTIFENTITE<W_RANGRUB>=1
					END
*				END
			NEXT
			
			IF W_NBRUBCHG<>0 THEN
				W_ANCIENCODEAIDANT=W_CODEAIDANT
			END
		REPEAT
    END

RETURN

***************************************************
* CREATION DU TABLEAU FREQ. ANNUELLE
***************************************************
502

    W_NBTRAITEMENT=0
    W_ANCIENCODEAIDANT=""

    IF MSGCODE<1> # 209 THEN 
		
	    SELECT F.DETAILCALCUL TO DETAILCALCULAN
		
		REQDETAILVIDE="FAUX"
		LOOP 
			READNEXT CLE FROM DETAILCALCULAN ELSE 
				REQDETAILVIDE="VRAI"
			END
		UNTIL REQDETAILVIDE="VRAI" DO
			
			* LECTURE DETAILCALCUL
			READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,CLE ELSE
				STOP "ERREUR DETAILCALCUL=":CLE
			END
			
			W_NBTRAITEMENT=W_NBTRAITEMENT+1
			
			* LECTURE CONTRAT POUR RECUPERATION CODE ETABL.
			READ ENR_CONTRAT FROM F.CONTRAT,CLE[1,8] ELSE
				STOP "ERREUR CONTRAT=":CLE[1,8]
			END
			
			* STOCKE LE CODE ETABL
			W_CODEETABL=ENR_CONTRAT<3>
			
* Michael, le 13/12 /07 : Ondoit compter les salaris, pas les contrats :
			* REMPLACE CODE AIDANT PAR CODE CONTRAT
			* STOCKE LE CODE AIDANT
*			W_CODEAIDANT=CLE[1,8]
			W_CODEAIDANT=CLE[1,5]
			
			* RECHERCHE ETABLISSEMENT
			GOSUB 602
			
			* COMPTE LE NB DE RUB. DE CHARGE EN ATT.8
			W_NBRUBCHG=DCOUNT(ENR_DETAILCALCUL<8>,CHAR(253))
			
			* CALCULE L'EMPLACEMENT DE L'ETABLISSEMENT
			IF W_RANGETAB=1 THEN
				W_RANGETAB=2
				W_ANCIENRANG=2
			END ELSE
				W_ANCIENRANG=W_RANGETAB+1
				W_RANGETAB=2+(W_RANGETAB-1)*3
			END
			
			* ECRIT LE CODE ETABLISSEMENT
			IF W_RANGETAB=2 THEN
				W_FREQAN=REPLACE(W_FREQAN,1,W_RANGETAB;W_CODEETABL)
			END ELSE
				W_FREQAN=REPLACE(W_FREQAN,1,W_ANCIENRANG;W_CODEETABL)
			END
			
			IF W_ANCIENCODEAIDANT<>W_CODEAIDANT THEN  
				W_EFFECTIF=""
				W_EFFECTIFENTITE=""
				FOR I=1 TO DCOUNT(W_FREQAN,CHAR(254))
					W_EFFECTIF<I>=0
					W_EFFECTIFENTITE<I>=0				
				NEXT I
			END
			
			FOR I=1 TO W_NBRUBCHG
				
				W_CODERUB=ENR_DETAILCALCUL<8,I>
				
				* Recherche rubrique
				GOSUB 612
				
				* VERIFIE SI RUBRIQUE PAS DEJA AFFECTEE
				IF W_RUBEXISTE="NON" THEN
					* VERIFIE SI 1ER ETABLISSEMENT
					IF W_RANGETAB=2 AND W_NBTRAITEMENT=1 THEN
						W_FREQAN=REPLACE(W_FREQAN,W_RANGRUB,1,1;W_CODERUB)
					END ELSE
						W_FREQAN=REPLACE(W_FREQAN,W_RANGRUB,1,1;W_CODERUB)
					END

				END
				
				IF W_RANGETAB=2 THEN
					IF ENR_DETAILCALCUL<9,I><>"" AND ENR_DETAILCALCUL<9,I><>0 THEN
						W_FREQAN=REPLACE(W_FREQAN,W_RANGRUB,2,1;W_FREQAN<W_RANGRUB,2,1>+ENR_DETAILCALCUL<9,I>)
					END ELSE
						W_FREQAN=REPLACE(W_FREQAN,W_RANGRUB,2,1;W_FREQAN<W_RANGRUB,2,1>+ENR_DETAILCALCUL<12,I>)
					END
	                
					W_FREQAN=REPLACE(W_FREQAN,W_RANGRUB,2,2;W_FREQAN<W_RANGRUB,2,2>+ENR_DETAILCALCUL<14,I>-ENR_DETAILCALCUL<11,I>)
					
					IF W_ANCIENCODEAIDANT=W_CODEAIDANT THEN  
						IF W_EFFECTIF<W_RANGRUB>="" OR W_EFFECTIF<W_RANGRUB>=0 THEN
							W_EFFECTIF<W_RANGRUB>=1
							W_FREQAN=REPLACE(W_FREQAN,W_RANGRUB,2,3;W_FREQAN<W_RANGRUB,2,3>+1)
						END
					END ELSE
						
						IF W_EFFECTIF<W_RANGRUB>="" OR W_EFFECTIF<W_RANGRUB>=0 THEN
							W_EFFECTIF<W_RANGRUB>=1
							W_FREQAN=REPLACE(W_FREQAN,W_RANGRUB,W_ANCIENRANG,3;W_FREQAN<W_RANGRUB,W_ANCIENRANG,3>+1)
						END
					END
				END ELSE
					
					IF ENR_DETAILCALCUL<9,I><>"" AND ENR_DETAILCALCUL<9,I><>0 THEN
						W_FREQAN=REPLACE(W_FREQAN,W_RANGRUB,W_ANCIENRANG,1;W_FREQAN<W_RANGRUB,W_ANCIENRANG,1>+ENR_DETAILCALCUL<9,I>)
					END ELSE
						W_FREQAN=REPLACE(W_FREQAN,W_RANGRUB,W_ANCIENRANG,1;W_FREQAN<W_RANGRUB,W_ANCIENRANG,1>+ENR_DETAILCALCUL<12,I>)
					END
	                
					W_FREQAN=REPLACE(W_FREQAN,W_RANGRUB,W_ANCIENRANG,2;W_FREQAN<W_RANGRUB,W_ANCIENRANG,2>+ENR_DETAILCALCUL<14,I>-ENR_DETAILCALCUL<11,I>)
					
					IF W_ANCIENCODEAIDANT=W_CODEAIDANT THEN
						IF W_EFFECTIF<W_RANGRUB>="" OR W_EFFECTIF<W_RANGRUB>=0 THEN
							W_EFFECTIF<W_RANGRUB>=1
							W_FREQAN=REPLACE(W_FREQAN,W_RANGRUB,W_ANCIENRANG,3;W_FREQAN<W_RANGRUB,W_ANCIENRANG,3>+1)
						END
					END ELSE
						IF W_EFFECTIF<W_RANGRUB>="" OR W_EFFECTIF<W_RANGRUB>=0 THEN
							W_EFFECTIF<W_RANGRUB>=1
							W_FREQAN=REPLACE(W_FREQAN,W_RANGRUB,W_ANCIENRANG,3;W_FREQAN<W_RANGRUB,W_ANCIENRANG,3>+1)
						END
					END
				END
				
				IF W_RUBEXISTE="NON" THEN
					* VERIFIE SI 1ER ETABLISSEMENT
					IF W_RANGETAB=2 AND W_NBTRAITEMENT=1 THEN
						W_CONTENUENTITEAN=REPLACE(W_CONTENUENTITEAN,W_RANGRUB,1;W_CODERUB)
					END ELSE
						W_CONTENUENTITEAN=REPLACE(W_CONTENUENTITEAN,W_RANGRUB,1;W_CODERUB)
					END
					

				END
				
				IF ENR_DETAILCALCUL<9,I><>"" AND ENR_DETAILCALCUL<9,I><>0 THEN
					W_CONTENUENTITEAN=REPLACE(W_CONTENUENTITEAN,W_RANGRUB,2,1;W_CONTENUENTITEAN<W_RANGRUB,2,1>+ENR_DETAILCALCUL<9,I>)
				END ELSE
					W_CONTENUENTITEAN=REPLACE(W_CONTENUENTITEAN,W_RANGRUB,2,1;W_CONTENUENTITEAN<W_RANGRUB,2,1>+ENR_DETAILCALCUL<12,I>)
				END
				
				W_CONTENUENTITEAN=REPLACE(W_CONTENUENTITEAN,W_RANGRUB,2,2;W_CONTENUENTITEAN<W_RANGRUB,2,2>+ENR_DETAILCALCUL<14,I>-ENR_DETAILCALCUL<11,I>)
				
				
				IF W_EFFECTIFENTITE<W_RANGRUB>=0 OR W_EFFECTIFENTITE<W_RANGRUB>="" THEN
					W_CONTENUENTITEAN<W_RANGRUB,2,3>=W_CONTENUENTITEAN<W_RANGRUB,2,3> + 1
					W_EFFECTIFENTITE<W_RANGRUB>="1"
				END
				
			NEXT I
			
			*IF W_NBRUBCHG<>0 THEN
				W_ANCIENCODEAIDANT=W_CODEAIDANT
			*END
		REPEAT
		
    END

RETURN

***************************************************
* RECHERCHE ETABLISSEMENT (MENSUELLE)
***************************************************
600

    K=2
    LOOP 
		UNTIL W_FREQMOIS<1,K>=W_CODEETABL OR W_FREQMOIS<1,K>="" DO
		K=K+1
    REPEAT

    W_RANGETAB=K-1

RETURN

***************************************************
* RECHERCHE ETABLISSEMENT (TRIMESTRIELLE)
***************************************************
601

    K=2
    LOOP 
		UNTIL W_FREQTRIM<1,K>=W_CODEETABL OR W_FREQTRIM<1,K>="" DO
		K=K+1
    REPEAT

    W_RANGETAB=K-1

RETURN

***************************************************
* RECHERCHE ETABLISSEMENT (ANNUELLE)
***************************************************
602

    K=2
    LOOP 
		UNTIL W_FREQAN<1,K>=W_CODEETABL OR W_FREQAN<1,K>="" DO
		K=K+1
    REPEAT

    W_RANGETAB=K-1

RETURN

***************************************************
* RECHERCHE RUBRIQUE (MENSUELLE)
***************************************************
610

    K=2
    LOOP 
		UNTIL W_FREQMOIS<K,1>=W_CODERUB OR W_FREQMOIS<K,1>="" DO
		K=K+1
    REPEAT

    IF W_FREQMOIS<K,1>=W_CODERUB THEN
		W_RUBEXISTE="OUI"
    END ELSE
		W_RUBEXISTE="NON"
    END

    W_RANGRUB=K

RETURN

***************************************************
* RECHERCHE RUBRIQUE (TRIMESTRIELLE)
***************************************************
611

    K=2
    LOOP 
		UNTIL W_FREQTRIM<K,1>=W_CODERUB OR W_FREQTRIM<K,1>="" DO
		K=K+1
    REPEAT

    IF W_FREQTRIM<K,1>=W_CODERUB THEN
		W_RUBEXISTE="OUI"
    END ELSE
		W_RUBEXISTE="NON"
    END

    W_RANGRUB=K

RETURN

***************************************************
* RECHERCHE RUBRIQUE (ANNUELLE)
***************************************************
612

    K=2
    LOOP 
		UNTIL W_FREQAN<K,1>=W_CODERUB OR W_FREQAN<K,1>="" DO
		K=K+1
    REPEAT

    IF W_FREQAN<K,1>=W_CODERUB THEN
		W_RUBEXISTE="OUI"
    END ELSE
		W_RUBEXISTE="NON"
    END

    W_RANGRUB=K

RETURN

***************************************************
* VERIFIE SI L'ETABL. FAIT PARTIE DES REGROUPBRC
***************************************************
700

    W_ETABVALIDE="FAUX"

    J=1
    LOOP
		UNTIL W_ORGSELECT<J,2>=W_CODEETABL[4,3] OR W_ORGSELECT<J,2>="" DO
		J=J+1
    REPEAT

    IF W_ORGSELECT<J,2>=W_CODEETABL[4,3] THEN
		W_ETABVALIDE="VRAI"
    END ELSE
		W_ETABVALIDE="FAUX"
    END

RETURN

***************************************************
* RECALCULE LE REGROUPEMENT POUR FREQ. MOIS
***************************************************
800

    * PARCOURE TOUS LES ORGANISMES SOCIAUX
    FOR I=1 TO W_NBREGROUPEMENTMOIS ;*-1
		
		W_TAUXCOTIS=0
		
		READ ENR_REGROUPBRC FROM F.REGROUPBRC,W_REGROUPEMENTPARMOIS<I> ELSE
			STOP "ERREUR REGROUPBRC=":W_REGROUPEMENTPARMOIS<I>
		END
		
		IF W_CODEETABENCOURS<>W_REGROUPEMENTPARMOIS<I>[4,3] AND I<>1 THEN
			W_APPEL800="VRAI"
			GOSUB 999
			W_TOTALGENERALCOTIS=0
			W_RANGFREQMOIS=1
		END ELSE
			IF W_CODEORGENCOURS<>W_REGROUPEMENTPARMOIS<I>[7,3] AND I<>1 THEN
				W_APPEL800="VRAI"
				GOSUB 999
				W_TOTALGENERALCOTIS=0
				W_RANGFREQMOIS=1
			END ELSE
				W_APPEL800="FAUX"
				W_RANGFREQMOIS=W_RANGFREQMOIS+1
			END
		END
		
		IF ENR_REGROUPBRC<3>=2 THEN
			
			* COMPTE LE NOMBRE DE RUB. CHG REGROUPEES
			W_NBRUBCHGREGROUP=DCOUNT(ENR_REGROUPBRC<2>,CHAR(253))
			
			FOR J=1 TO W_NBRUBCHGREGROUP
				READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_REGROUPBRC<2,J> ELSE
	                STOP "ERREUR RUBCHARGE 1=":ENR_REGROUPBRC<2,J>
				END	
				
				W_TAUXCOTIS=W_TAUXCOTIS+ENR_RUBCHARGE<10>+ENR_RUBCHARGE<14>
			NEXT J
			
		END ELSE
			
			READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_REGROUPBRC<2,1> ELSE
				STOP "ERREUR RUBCHARGE 2=":ENR_REGROUPBRC<2,1>
			END	
			W_TAUXCOTIS=ENR_RUBCHARGE<10>+ENR_RUBCHARGE<14>
		END
		
		W_CODEETABENCOURS=W_REGROUPEMENTPARMOIS<I>[4,3]
		W_CODEORGENCOURS=W_REGROUPEMENTPARMOIS<I>[7,3]
		W_CODEETABLREGROUP=W_REGROUPEMENTPARMOIS<I>[1,6]
		
		* COMPTE LE NOMBRE DE RUB. CHG REGROUPEES
		W_NBRUBCHGREGROUP=DCOUNT(ENR_REGROUPBRC<2>,CHAR(253))
		FOR J=1 TO W_NBRUBCHGREGROUP
	      
			* STOCKE LE CODE RUB A REGROUPER
			W_CODERUBCHG=ENR_REGROUPBRC<2,J>
			** W_CODEETABLREGROUP=W_CODEORGENCOURS
			
			IF W_CODEETABENCOURS<>"000" THEN
				GOSUB 620
				GOSUB 630
				
				IF ENR_REGROUPBRC<3>=1 THEN
					W_TOTALBASE=W_TOTALBASE+W_FREQMOIS<W_RANGRUBCHG,W_RANGETABREGROUP,1>
				END ELSE
					W_TOTALBASE=W_FREQMOIS<W_RANGRUBCHG,W_RANGETABREGROUP,1>
				END
				
				W_TOTALCOTIS=W_TOTALCOTIS+W_FREQMOIS<W_RANGRUBCHG,W_RANGETABREGROUP,2>
				
				IF ENR_REGROUPBRC<3>=1 THEN
	                IF W_TOTALPERS=0 THEN
						W_TOTALPERS=W_FREQMOIS<W_RANGRUBCHG,W_RANGETABREGROUP,3>
					END ELSE
						W_TOTALPERS=W_TOTALPERS+W_FREQMOIS<W_RANGRUBCHG,W_RANGETABREGROUP,3>
   	                END
				END ELSE
					W_TOTALPERS=W_FREQMOIS<W_RANGRUBCHG,W_RANGETABREGROUP,3>
				END
			END ELSE
				GOSUB 640
				
				IF ENR_REGROUPBRC<3>=1 THEN
					W_TOTALBASE=W_TOTALBASE+W_CONTENUENTITE<W_RANGRUBCHG,2,1>
				END ELSE
					W_TOTALBASE=W_CONTENUENTITE<W_RANGRUBCHG,2,1>
				END	        
				
				W_TOTALCOTIS=W_TOTALCOTIS+W_CONTENUENTITE<W_RANGRUBCHG,2,2>
				
				IF ENR_REGROUPBRC<3>=1 THEN
	                IF W_TOTALPERS=0 THEN
						W_TOTALPERS=W_CONTENUENTITE<W_RANGRUBCHG,2,3>
					END ELSE
*    	                W_TOTALPERS=W_TOTALPERS+W_CONTENUENTITE<W_RANGRUBCHG,W_RANGETABREGROUP,3>
						W_TOTALPERS=W_TOTALPERS+W_CONTENUENTITE<W_RANGRUBCHG,2,3>
   	                END
				END ELSE
					W_TOTALPERS=W_CONTENUENTITE<W_RANGRUBCHG,2,3>
				END
			END 
		NEXT J
		
		W_TAUXCOTIS=W_TAUXCOTIS/1000
		
		* STOCKE LES DONNEES
		W_REGROUPEMENTMOIS=REPLACE(W_REGROUPEMENTMOIS,W_RANGFREQMOIS,1;W_REGROUPEMENT<I>[10,3])
		W_REGROUPEMENTMOIS=REPLACE(W_REGROUPEMENTMOIS,W_RANGFREQMOIS,2;ENR_REGROUPBRC<1>)
		W_REGROUPEMENTMOIS=REPLACE(W_REGROUPEMENTMOIS,W_RANGFREQMOIS,3;W_TOTALBASE/100)
		W_REGROUPEMENTMOIS=REPLACE(W_REGROUPEMENTMOIS,W_RANGFREQMOIS,4;W_TAUXCOTIS)
		W_REGROUPEMENTMOIS=REPLACE(W_REGROUPEMENTMOIS,W_RANGFREQMOIS,5;W_TOTALCOTIS/100)
		W_TOTALGENERALCOTIS=W_TOTALGENERALCOTIS+W_TOTALCOTIS/100
		
		IF W_TOTALPERS="" THEN
			W_TOTALPERS=0
		END
		
		W_REGROUPEMENTMOIS=REPLACE(W_REGROUPEMENTMOIS,W_RANGFREQMOIS,6;W_TOTALPERS)
		
		W_TOTALBASE=0
		W_TOTALCOTIS=0
		W_TOTALPERS=0
		
		W_CODEETABENCOURS=W_REGROUPEMENTPARMOIS<I>[4,3]
		
        * SUPPRESSION REGROUPEMENT DEJA TRAITE
**  	W_REGROUPEMENT=DELETE(W_REGROUPEMENT,I)
		
    NEXT

RETURN

***************************************************
* RECALCULE LE REGROUPEMENT POUR FREQ. TRIM
***************************************************
801 *

    * PARCOURS TOUS LES ORGANISMES SOCIAUX
    FOR I=1 TO W_NBREGROUPEMENTTRIM ;**-1
		
		W_TAUXCOTIS=0
		
		READ ENR_REGROUPBRC FROM F.REGROUPBRC,W_REGROUPEMENTPARTRIM<I> ELSE
			STOP "ERREUR REGROUPBRC=":W_REGROUPEMENTPARTRIM<I>
		END
		
		READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_REGROUPBRC<2,1> ELSE
			STOP "ERREUR RUBCHARGE 3=":ENR_REGROUPBRC<2,1>
		END
		
		IF W_CODEETABENCOURS<>W_REGROUPEMENTPARTRIM<I>[4,3] AND I<>1 THEN
			W_APPEL801="VRAI"
			GOSUB 999
			W_TOTALGENERALCOTIS=0
			W_RANGFREQTRIM=1
		END ELSE
			IF W_CODEORGENCOURS<>W_REGROUPEMENTPARTRIM<I>[7,3] AND I<>1 THEN
				W_APPEL801="VRAI"
				GOSUB 999
				W_TOTALGENERALCOTIS=0
				W_RANGFREQTRIM=1
			END ELSE
				W_APPEL801="FAUX"
				W_RANGFREQTRIM=W_RANGFREQTRIM+1
			END
		END
		
		IF ENR_REGROUPBRC<3>=2 THEN
			
			* COMPTE LE NOMBRE DE RUB. CHG REGROUPEES
			W_NBRUBCHGREGROUP=DCOUNT(ENR_REGROUPBRC<2>,CHAR(253))
			
			FOR J=1 TO W_NBRUBCHGREGROUP
				READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_REGROUPBRC<2,J> ELSE
	                STOP "ERREUR RUBCHARGE 1=":ENR_REGROUPBRC<2,J>
				END	
				
				W_TAUXCOTIS=W_TAUXCOTIS+ENR_RUBCHARGE<10>+ENR_RUBCHARGE<14>
			NEXT J
			
		END ELSE
			
			READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_REGROUPBRC<2,1> ELSE
				STOP  "ERREUR RUBCHARGE 2=":ENR_REGROUPBRC<2,1>
			END	
			
			W_TAUXCOTIS=ENR_RUBCHARGE<10>+ENR_RUBCHARGE<14>
		END
		
		W_CODEETABENCOURS=W_REGROUPEMENTPARTRIM<I>[4,3]
		W_CODEORGENCOURS=W_REGROUPEMENTPARTRIM<I>[7,3]
		W_CODEETABLREGROUP=W_REGROUPEMENTPARTRIM<I>[1,6]
		
		* COMPTE LE NOMBRE DE RUB. CHG REGROUPEES
		W_NBRUBCHGREGROUP=DCOUNT(ENR_REGROUPBRC<2>,CHAR(253))
		FOR J=1 TO W_NBRUBCHGREGROUP
	      
			* STOCKE LE CODE RUB A REGROUPER
			W_CODERUBCHG=ENR_REGROUPBRC<2,J>
**	        W_CODEETABLREGROUP=W_CODEORGENCOURS
			
			IF W_CODEETABENCOURS<>"000" THEN
				GOSUB 621
				GOSUB 631
				
				IF ENR_REGROUPBRC<3>=1 THEN
					W_TOTALBASE=W_TOTALBASE+W_FREQTRIM<W_RANGRUBCHG,W_RANGETABREGROUP,1>
				END ELSE
					W_TOTALBASE=W_FREQTRIM<W_RANGRUBCHG,W_RANGETABREGROUP,1>
				END
				
				W_TOTALCOTIS=W_TOTALCOTIS+W_FREQTRIM<W_RANGRUBCHG,W_RANGETABREGROUP,2>
				
				IF ENR_REGROUPBRC<3>=1 THEN
					
	                IF W_TOTALPERS=0 THEN
						W_TOTALPERS=W_FREQTRIM<W_RANGRUBCHG,W_RANGETABREGROUP,3>
					END ELSE
						W_TOTALPERS=W_TOTALPERS+W_FREQTRIM<W_RANGRUBCHG,W_RANGETABREGROUP,3>
   	                END
				END ELSE
					
					W_TOTALPERS=W_FREQTRIM<W_RANGRUBCHG,W_RANGETABREGROUP,3>
				END
			END ELSE
				
				GOSUB 641
				
				IF ENR_REGROUPBRC<3>=1 THEN
	                W_TOTALBASE=W_TOTALBASE+W_CONTENUENTITETRIM<W_RANGRUBCHG,2,1>
				END ELSE
					W_TOTALBASE=W_CONTENUENTITETRIM<W_RANGRUBCHG,2,1>
				END	        
				
				W_TOTALCOTIS=W_TOTALCOTIS+W_CONTENUENTITETRIM<W_RANGRUBCHG,2,2>
				
				IF ENR_REGROUPBRC<3>=1 THEN
	                IF W_TOTALPERS=0 THEN
						W_TOTALPERS=W_CONTENUENTITETRIM<W_RANGRUBCHG,2,3>
					END ELSE
*    	                W_TOTALPERS=W_TOTALPERS+W_CONTENUENTITETRIM<W_RANGRUBCHG,W_RANGETABREGROUP,3>
						W_TOTALPERS=W_TOTALPERS+W_CONTENUENTITETRIM<W_RANGRUBCHG,2,3>
					END
				END ELSE
					W_TOTALPERS=W_CONTENUENTITETRIM<W_RANGRUBCHG,2,3>
				END
			END 
		NEXT J
		
		W_TAUXCOTIS=W_TAUXCOTIS/1000
		
		* STOCKE LES DONNEES
		W_REGROUPEMENTTRIM=REPLACE(W_REGROUPEMENTTRIM,W_RANGFREQTRIM,1;W_REGROUPEMENTPARTRIM<I>[10,3])
		W_REGROUPEMENTTRIM=REPLACE(W_REGROUPEMENTTRIM,W_RANGFREQTRIM,2;ENR_REGROUPBRC<1>)
		W_REGROUPEMENTTRIM=REPLACE(W_REGROUPEMENTTRIM,W_RANGFREQTRIM,3;W_TOTALBASE/100)
		W_REGROUPEMENTTRIM=REPLACE(W_REGROUPEMENTTRIM,W_RANGFREQTRIM,4;W_TAUXCOTIS)
		W_REGROUPEMENTTRIM=REPLACE(W_REGROUPEMENTTRIM,W_RANGFREQTRIM,5;W_TOTALCOTIS/100)
		W_TOTALGENERALCOTIS=W_TOTALGENERALCOTIS+W_TOTALCOTIS/100
	 
		IF W_TOTALPERS="" THEN
			W_TOTALPERS=0
		END
		
		W_REGROUPEMENTTRIM=REPLACE(W_REGROUPEMENTTRIM,W_RANGFREQTRIM,6;W_TOTALPERS)
		
		W_TOTALBASE=0
		W_TOTALCOTIS=0
		W_TOTALPERS=0
		
		W_CODEETABENCOURS=W_REGROUPEMENTPARTRIM<I>[4,3]
		
		* SUPPRESSION REGROUPEMENT DEJA TRAITE
        ** W_REGROUPEMENT=DELETE(W_REGROUPEMENT,I)
		
    NEXT I

RETURN

***************************************************
* RECALCULE LE REGROUPEMENT POUR FREQ. ANNUEL
***************************************************
802

    * PARCOURS TOUS LES ORGANISMES SOCIAUX
    FOR I = 1 TO W_NBREGROUPEMENTAN
		IF W_REGROUPEMENTPARAN<I> <> "" THEN
				
			W_TAUXCOTIS=0
			
			READ ENR_REGROUPBRC FROM F.REGROUPBRC,W_REGROUPEMENTPARAN<I> ELSE
				STOP "ERREUR REGROUPBRC=":W_REGROUPEMENTPARAN<I>
			END
			
			READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_REGROUPBRC<2,1> ELSE
				STOP "ERREUR RUBCHARGE 4=":ENR_REGROUPBRC<2,1>
			END
			
			IF W_CODEETABENCOURS<>W_REGROUPEMENTPARAN<I>[4,3] AND I<>1 THEN
				W_APPEL802="VRAI"
				GOSUB 999
				W_TOTALGENERALCOTIS=0
				W_RANGFREQAN=1
			END ELSE
				IF W_CODEORGENCOURS<>W_REGROUPEMENTPARAN<I>[7,3] AND I<>1 THEN
					W_APPEL802="VRAI"
					GOSUB 999
					W_TOTALGENERALCOTIS=0
					W_RANGFREQAN=1
				END ELSE
					W_APPEL802="FAUX"
					W_RANGFREQAN=W_RANGFREQAN+1
				END
			END
			
			IF ENR_REGROUPBRC<3>=2 THEN
				
				* COMPTE LE NOMBRE DE RUB. CHG REGROUPEES
				W_NBRUBCHGREGROUP=DCOUNT(ENR_REGROUPBRC<2>,CHAR(253))
				
				FOR J=1 TO W_NBRUBCHGREGROUP
					READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_REGROUPBRC<2,J> ELSE
						STOP "ERREUR RUBCHARGE 1=":ENR_REGROUPBRC<2,J>
					END	
					
					W_TAUXCOTIS=W_TAUXCOTIS+ENR_RUBCHARGE<10>+ENR_RUBCHARGE<14>
				NEXT J
			END ELSE
				
				READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_REGROUPBRC<2,1> ELSE
					STOP "ERREUR RUBCHARGE 2=":ENR_REGROUPBRC<2,1>
				END	
				W_TAUXCOTIS=ENR_RUBCHARGE<10>+ENR_RUBCHARGE<14>
			END
			
			W_CODEETABENCOURS=W_REGROUPEMENTPARAN<I>[4,3]
			W_CODEORGENCOURS=W_REGROUPEMENTPARAN<I>[7,3]
			W_CODEETABLREGROUP=W_REGROUPEMENTPARAN<I>[1,6]
			
			* COMPTE LE NOMBRE DE RUB. CHG REGROUPEES
			W_NBRUBCHGREGROUP=DCOUNT(ENR_REGROUPBRC<2>,CHAR(253))
			FOR J=1 TO W_NBRUBCHGREGROUP
		      
				* STOCKE LE CODE RUB A REGROUPER
				W_CODERUBCHG=ENR_REGROUPBRC<2,J>
				** W_CODEETABLREGROUP=W_CODEORGENCOURS
				
				IF W_CODEETABENCOURS<>"000" THEN
					* Recherche tablissement
					GOSUB 622
					* Recherche rubrique
					GOSUB 632
					
					IF ENR_REGROUPBRC<3>=1 THEN
						W_TOTALBASE=W_TOTALBASE+W_FREQAN<W_RANGRUBCHG,W_RANGETABREGROUP,1>
					END ELSE
						W_TOTALBASE=W_FREQAN<W_RANGRUBCHG,W_RANGETABREGROUP,1>
					END
					
					W_TOTALCOTIS=W_TOTALCOTIS+W_FREQAN<W_RANGRUBCHG,W_RANGETABREGROUP,2>
					
					IF ENR_REGROUPBRC<3>=1 THEN
		                IF W_TOTALPERS=0 THEN
							W_TOTALPERS=W_FREQAN<W_RANGRUBCHG,W_RANGETABREGROUP,3>
						END ELSE
							W_TOTALPERS=W_TOTALPERS+W_FREQAN<W_RANGRUBCHG,W_RANGETABREGROUP,3>
	   	                END
					
					END ELSE
					
						W_TOTALPERS=W_FREQAN<W_RANGRUBCHG,W_RANGETABREGROUP,3>
					END
				END ELSE
					*Recherche rubrique pour regroupement
					GOSUB 642
					
					IF ENR_REGROUPBRC<3>=1 THEN
		                W_TOTALBASE=W_TOTALBASE+W_CONTENUENTITEAN<W_RANGRUBCHG,2,1>
					END ELSE
						W_TOTALBASE=W_CONTENUENTITEAN<W_RANGRUBCHG,2,1>
					END	        
					
					W_TOTALCOTIS=W_TOTALCOTIS+W_CONTENUENTITEAN<W_RANGRUBCHG,2,2>
					
					IF ENR_REGROUPBRC<3>=1 THEN
		                IF W_TOTALPERS=0 THEN
							W_TOTALPERS=W_CONTENUENTITEAN<W_RANGRUBCHG,2,3>
						

						END ELSE
							* W_TOTALPERS=W_TOTALPERS+W_CONTENUENTITEAN<W_RANGRUBCHG,W_RANGETABREGROUP,3>
							W_TOTALPERS=W_TOTALPERS+W_CONTENUENTITEAN<W_RANGRUBCHG,2,3>
	   	                END
					
					END ELSE
						
						W_TOTALPERS=W_CONTENUENTITEAN<W_RANGRUBCHG,2,3>
					
					END
				END 
			NEXT J
			
			W_TAUXCOTIS=W_TAUXCOTIS/1000
			
			* STOCKE LES DONNEES
			W_REGROUPEMENTAN=REPLACE(W_REGROUPEMENTAN,W_RANGFREQAN,1;W_REGROUPEMENTPARAN<I>[10,3])
			W_REGROUPEMENTAN=REPLACE(W_REGROUPEMENTAN,W_RANGFREQAN,2;ENR_REGROUPBRC<1>)
			W_REGROUPEMENTAN=REPLACE(W_REGROUPEMENTAN,W_RANGFREQAN,3;W_TOTALBASE/100)
			W_REGROUPEMENTAN=REPLACE(W_REGROUPEMENTAN,W_RANGFREQAN,4;W_TAUXCOTIS)
			W_REGROUPEMENTAN=REPLACE(W_REGROUPEMENTAN,W_RANGFREQAN,5;W_TOTALCOTIS/100)
			W_TOTALGENERALCOTIS=W_TOTALGENERALCOTIS+W_TOTALCOTIS/100
		 
			IF W_TOTALPERS="" THEN
				W_TOTALPERS=0
			END
			
			W_REGROUPEMENTAN=REPLACE(W_REGROUPEMENTAN,W_RANGFREQAN,6;W_TOTALPERS)
			
			W_TOTALBASE=0
			W_TOTALCOTIS=0
			W_TOTALPERS=0
			
			W_CODEETABENCOURS=W_REGROUPEMENTPARAN<I>[4,3]
			
			* SUPPRESSION REGROUPEMENT DEJA TRAITE
			** W_REGROUPEMENT=DELETE(W_REGROUPEMENT,I)
		END
		
	NEXT I 
RETURN

***************************************************
* RECHERCHE ETABLISSEMENT POUR REGROUPEMENT (MENS.)
***************************************************
620

    K=2
    LOOP 
		UNTIL W_FREQMOIS<1,K>=W_CODEETABLREGROUP OR W_FREQMOIS<1,K>="" DO
		K=K+1
    REPEAT

    W_RANGETABREGROUP=K

RETURN

***************************************************
* RECHERCHE ETABLISSEMENT POUR REGROUPEMENT (TRIM.)
***************************************************
621

    K=2
    LOOP 
		UNTIL W_FREQTRIM<1,K>=W_CODEETABLREGROUP OR W_FREQTRIM<1,K>="" DO
		K=K+1
    REPEAT

    W_RANGETABREGROUP=K

RETURN

***************************************************
* RECHERCHE ETABLISSEMENT POUR REGROUPEMENT (ANNU.)
***************************************************
622

    K=2
    LOOP 
		UNTIL W_FREQAN<1,K>=W_CODEETABLREGROUP OR W_FREQAN<1,K>="" DO
		K=K+1
    REPEAT

    W_RANGETABREGROUP=K

RETURN

***************************************************
* RECHERCHE RUBRIQUE POUR REGROUPEMENT (MENSUEL)
***************************************************
630

    K=2
    LOOP 
		UNTIL W_FREQMOIS<K,1>=W_CODERUBCHG OR W_FREQMOIS<K,1>="" DO
		K=K+1
    REPEAT

    W_RANGRUBCHG=K

RETURN

***************************************************
* RECHERCHE RUBRIQUE POUR REGROUPEMENT (TRIMESTRIEL)
***************************************************
631

    K=2
    LOOP 
		UNTIL W_FREQTRIM<K,1>=W_CODERUBCHG OR W_FREQTRIM<K,1>="" DO
		K=K+1
    REPEAT

    W_RANGRUBCHG=K

RETURN

***************************************************
* RECHERCHE RUBRIQUE POUR REGROUPEMENT (ANNUEL)
***************************************************
632

    K=2
    LOOP 
		UNTIL W_FREQAN<K,1>=W_CODERUBCHG OR W_FREQAN<K,1>="" DO
		K=K+1
    REPEAT

    W_RANGRUBCHG=K

RETURN

***************************************************
* RECHERCHE RUBRIQUE POUR REGROUPEMENT (MENSUEL)
***************************************************
640

    K=1
    LOOP 
		UNTIL W_CONTENUENTITE<K,1>=W_CODERUBCHG OR W_CONTENUENTITE<K,1>="" DO
		K=K+1
    REPEAT

    W_RANGRUBCHG=K

RETURN

***************************************************
* RECHERCHE RUBRIQUE POUR REGROUPEMENT (TRIMESTRIEL)
***************************************************
641
W_CONTENUENTITETRIM<1>="Entite"
    K=1
    LOOP 
		UNTIL W_CONTENUENTITETRIM<K,1>=W_CODERUBCHG OR W_CONTENUENTITETRIM<K,1>="" DO
		K=K+1
    REPEAT

    W_RANGRUBCHG=K

RETURN

***************************************************
* RECHERCHE RUBRIQUE POUR REGROUPEMENT (ANNUEL)
***************************************************
642
W_CONTENUENTITEAN<1> = "Entite"
    K=1
    LOOP 
		UNTIL W_CONTENUENTITEAN<K,1>=W_CODERUBCHG OR W_CONTENUENTITEAN<K,1>="" DO
	 K=K+1
    REPEAT

    W_RANGRUBCHG=K

RETURN

***************************************************
* ECRITURE DES DONNNEES DANS LE FICHIER
***************************************************
999

    IF W_APPEL800="FAUX" AND W_FREQORGSELECT = "M" THEN
		GOSUB 800
    END

    IF W_APPEL801="FAUX" AND W_FREQORGSELECT = "T" THEN
		GOSUB 801
    END

    IF W_APPEL802="FAUX" AND W_FREQORGSELECT = "A" THEN
		GOSUB 802
    END

    READ ENR_ASSOCIATION FROM F.ASSOCIATION,W_CODEENTITE ELSE
		STOP "ERREUR ASSOCIATION =":W_CODEENTITE
    END

    * ENTITE JURIDIQUE
    ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,1;ENR_ASSOCIATION<1>)
    ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,2;ENR_ASSOCIATION<3>:" ":ENR_ASSOCIATION<4>:" ":ENR_ASSOCIATION<5>:" ":ENR_ASSOCIATION<6>)
    ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,3;ENR_ASSOCIATION<8>:" ":ENR_ASSOCIATION<9>)
    * ETABLISSEMENT    
	
    IF W_CODEETABENCOURS="" THEN W_CODEETABENCOURS="000"
	IF W_CODEETABENCOURS<>"000" THEN
		READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,W_CODEENTITE:W_CODEETABENCOURS ELSE
			STOP "ERREUR ETABLISSEMENT=":W_CODEETABENCOURS
		END
		ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,4;ENR_ETABLISSEMENT<1>)
	END
	
	* ORGANISME DE CHARGE
	READ ENR_ORGANISMESOCIAL FROM F.ORGANISMESOCIAL,W_CODEENTITE:W_CODEETABENCOURS:W_CODEORGENCOURS ELSE
		STOP "ERREUR ORGANISMESOCIAL ":W_CODEENTITE:W_CODEETABENCOURS:W_CODEORGENCOURS
	END
	
	ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,5;ENR_ORGANISMESOCIAL<2>)
	ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,6;ENR_ORGANISMESOCIAL<4>:" ":ENR_ORGANISMESOCIAL<5>:" ":ENR_ORGANISMESOCIAL<6>:" ":ENR_ORGANISMESOCIAL<7>)
	ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,7;ENR_ORGANISMESOCIAL<9>:" ":ENR_ORGANISMESOCIAL<10>)
	* TYPE ORGANISME
	
	READ ENR_TABLES FROM F.TABLES,"TYPEORGANISME" ELSE
		STOP "ERREUR TABLES=":ENR_ORGANISMESOCIAL<3>
	END
	
	J=1
	LOOP UNTIL ENR_TABLES<2,J>=ENR_ORGANISMESOCIAL<3> DO
		J=J+1
	REPEAT
	
	ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,8;ENR_ORGANISMESOCIAL<3>:" ":ENR_TABLES<3,J>)
	* FREQUENCE EMISSION
	ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,9;W_FREQORGSELECT)
	* DECALAGE DE PAIE
	ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,10;ENR_ASSOCIATION<25>)
	* N IDENTIFICATION
	ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,11;ENR_ORGANISMESOCIAL<19>)
	
	* ECRITURE DES REGROUPEMENTS MENSUELS    
	IF W_FREQORGSELECT="M" THEN
		J=12
		K=1
		LOOP UNTIL W_REGROUPEMENTMOIS<K>="" DO
			ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,J;W_REGROUPEMENTMOIS<K>)
			K=K+1
			J=J+1
		REPEAT
		ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,J;W_TOTALGENERALCOTIS)
	END ELSE
		* ECRITURE DES REGROUPEMENTS TRIMESTRIELS    
		IF W_FREQORGSELECT="T" THEN
			J=12
			K=1
			LOOP UNTIL W_REGROUPEMENTTRIM<K>="" DO
				ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,J;W_REGROUPEMENTTRIM<K>)
				K=K+1
				J=J+1
				ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,J;W_TOTALGENERALCOTIS)
			REPEAT
		END ELSE
			* ECRITURE DES REGROUPEMENTS ANNUELS    
			J=12
			K=1
			*LOOP UNTIL W_REGROUPEMENTAN<K>="" DO
			FOR K = 1 TO DCOUNT(W_REGROUPEMENTAN,CHAR(254))
				ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,J;W_REGROUPEMENTAN<K>)
				*K=K+1
				J=J+1
				ENR_TAMPONBRCEDIT=REPLACE(ENR_TAMPONBRCEDIT,J;W_TOTALGENERALCOTIS)
			NEXT K
			*REPEAT
		END
	END
	
	IF W_FREQORGSELECT="M" THEN
		WRITE ENR_TAMPONBRCEDIT ON F.TAMPONBRCEDIT,W_CODEENTITE:W_CODEORGENCOURS:W_CODEETABENCOURS:W_PERIODE
	END ELSE
		
		IF W_FREQORGSELECT="T" THEN
			IF W_PERIODE[5,2]<=3 THEN
				W_TRIMESTRE=1
			END ELSE
				IF W_PERIODE[5,2]<=6 THEN
					W_TRIMESTRE=2
				END ELSE
					IF W_PERIODE[5,2]<=9 THEN
						W_TRIMESTRE=3
					END ELSE 
						W_TRIMESTRE=4
					END
				END
			END
			
			WRITE ENR_TAMPONBRCEDIT ON F.TAMPONBRCEDIT,W_CODEENTITE:W_CODEORGENCOURS:W_CODEETABENCOURS:W_PERIODE[1,4]:W_TRIMESTRE
		END ELSE
			READ ENR_TAMPONBIS FROM F.TAMPONBRCEDIT,W_CODEENTITE:W_CODEORGENCOURS:W_CODEETABENCOURS:W_PERIODE[1,4] ELSE
				WRITE ENR_TAMPONBRCEDIT ON F.TAMPONBRCEDIT,W_CODEENTITE:W_CODEORGENCOURS:W_CODEETABENCOURS:W_PERIODE[1,4]
			END
		END
	END

	W_REGROUPEMENTMOIS=""
	W_REGROUPEMENTTRIM=""
	W_REGROUPEMENTAN=""
    ENR_TAMPONBRCEDIT=""
RETURN
