'valeurEnumere' 'Toutes fonctions'
{argVar <Chaine> argVal <Chaine> argClasse <Chaine>}
    |
    tmpVar <Chaine> tmpVal <Chaine> tmpClasse <Chaine> eltEnumere <Chaine> CR <Chaine> maChaineVide <Chaine>
    cpt <Entier> nbElts <Entier>
    avecParentheses<Booléen>
    lstEnumere <Objet>
    |
    
    maChaineVide	:=	?
    
    CR	:=	'
'
    
    tmpVar		:= argVar
    tmpVal		:= argVal
    tmpClasse	:= argClasse
    
    --*****************************************************
    classe	 	::= tmpClasse
    variable	::= tmpVar
    --*****************************************************
    
    avecParentheses := chaine{argVal, 1, 1} = '(' 
    
    /*CORRIGE LE CAS OU LA VARIABLE N'APPARTIENT PAS A 'tmpClasse' MAIS A 'ElementTableaux' : CORRECTION TEMPORAIRE*/
    SI recupererCode{versionN4DS} = 'V01X06' ALORS
    	SI NON variable.nom <> ? ALORS classe ::= 'N4ds_0106' variable ::= tmpVar  FINSI
    SINON
    	SI recupererCode{versionN4DS} = 'V01X07' ALORS
    		SI NON variable.nom <> ? ALORS classe ::= 'N4ds_0107' variable ::= tmpVar  FINSI
    	FINSI
    FINSI
    
    SI dicoEnumereGlobal = ? ALORS
    	dicoEnumereGlobal	:=	creerDictionnaire{}
    FINSI
    
    lstEnumere	:=	creerListe{}
    lstEnumere	:=	cleValeur{dicoEnumereGlobal, variable.nom+'_'+classe.nom}
    
    SI lstEnumere = ? ALORS
    	lstEnumere	:=	variable.enumeration
    	SI nbElements { lstEnumere} < 1 ALORS
    		lstEnumere	:= enumeration { variable , classe }
    		cleValeur{dicoEnumereGlobal, variable.nom+'_'+classe.nom, lstEnumere}
    	FINSI
    FINSI
    
    SI variable.type = 'Chaine' ET tmpVal <> ?
    	ALORS
    		SI lstEnumere <> ? ALORS
    			cpt := 1
    			nbElts	:=	nbElements{lstEnumere}
    			SI avecParentheses ALORS
    				TANT QUE cpt <= nbElts FAIRE
    					eltEnumere := ''+elementDIndice{lstEnumere, cpt}
    					SI valider{eltEnumere, '^'+tmpVal} ALORS
    						SORTIR eltEnumere
    					FINSI
    					cpt += 1
    				FIN FAIRE
    			SINON
    				TANT QUE cpt <= nbElts FAIRE
    					eltEnumere := ''+elementDIndice{lstEnumere, cpt}
    					SI valider{eltEnumere, '^\(' + tmpVal + '\)'} ALORS
    						SORTIR eltEnumere
    					FINSI
    
    					cpt += 1
    				FIN FAIRE
    			FINSI
    		SINON
    			SI enDev{'messageDev'} ALORS message{'CLASSE >'+argClasse+'< 1 - Cet attribut n''existe pas dans les classes de N4DS du millesime : '+tmpVar} FINSI
    			SORTIR tmpVal
    		FINSI
    	SINON
    		SI tmpVal <> ? ALORS
    			SI enDev{'messageDev'} ALORS message{'CLASSE >'+argClasse+'< 2 - Cet attribut n''existe pas dans les classes de N4DS du millesime : '+tmpVar} FINSI
    			SORTIR tmpVal
    		FINSI
    FINSI
    
    SORTIR maChaineVide
###
'versionN4DS_MODIF' 'Toutes fonctions'

    SI typeMessage = 'AE' ALORS
    	SI aujourdhui{} >= 09.11.2017 ALORS -- Si date système est supérieure au 09.11.2017 Millésimes V01X09, V01X08, V01X07 et antérieures plus autorisées
    		SI recupererCode{versionN4DS} = 'V01X09' OU recupererCode{versionN4DS} = 'V01X08' OU recupererCode{versionN4DS} = 'V01X07' ALORS
    			info {'A compter du 09/11/2017, les millésimes V01X09, V01X08 et V01X07 ne sont plus autorisés par Pôle Emploi, vous devez établir votre déclaration
avec un millésime accepté pour ce destinataire.'}
    			versionRefN4DS{}
    			SORTIR FAUX
    		FIN SI
    	FIN SI
    	SI aujourdhui{} >= 06.02.2014 ALORS -- Si date système est supérieure au 06.02.2014 Millésime V01X06 plus autorisé
    		SI recupererCode{versionN4DS} = 'V01X06' ALORS
    			info {'A compter du 06/02/2014, le millésime V01X06 n''est plus autorisé par Pôle Emploi, vous devez établir votre déclaration
avec un millésime accepté pour ce destinataire.'}
    			versionRefN4DS{}
    			SORTIR FAUX
    		FINSI
    	FINSI
		SI recupererCode{versionN4DS} = 'V01X13' OU recupererCode{versionN4DS} = 'V01X12' OU recupererCode{versionN4DS} = 'V01X11' OU recupererCode{versionN4DS} = 'V01X10' ALORS
			info{'Le millésime '+recupererCode{versionN4DS}+' n''est plus autorisé par Pôle Emploi, vous devez établir votre déclaration avec un millésime accepté pour ce destinataire.'}
			versionRefN4DS{}
			SORTIR FAUX
		FINSI
		SI recupererCode{versionN4DS} = 'V01X17' ALORS
			info {'La déclaration Attestation Employeur DNAC (AED) destinée à Pôle Emploi ne sera pas implémentée dans le millésime V01X17.

Pôle Emploi maintient pour le moment les millésimes V01X14, V01X15 et V01X16.'}
    		versionRefN4DS{}
    		SORTIR FAUX
    	FIN SI
    FINSI
    SORTIR VRAI
###
'dialogueMillesime' 'Toutes fonctions'
{argPayeII <Chaine> argMessage <Chaine> argSal <Chaine> argIdSal <Chaine> argDebCtrl <Date> argFinCtrl <Date>}
    
    |
    monObjet <Objet>
    dteDebCtrl <Date> dteFinCtrl <Date>
    typeAction <Chaine> maClasse <Chaine> tmpMillesimeClasse <Chaine> sFic <Chaine> res <Chaine>
    tmpVersionN4DS <Chaine> tmpSalarieChoisi <Chaine> tmpIdSalarieChoisi <Chaine> tmpIdContratChoisi <Chaine> lstIdent <Liste>
    
    |
    
    typeMessage 	:= argMessage
    typeAction 	:= argPayeII
    tmpSalarieChoisi := argSal
    tmpIdSalarieChoisi := argIdSal
    tmpIdContratChoisi := ''
    
    lstIdent		:= split { tmpIdSalarieChoisi , '|'}
    SI nbElements {lstIdent } > 0 ALORS
    	tmpIdSalarieChoisi := ''+ elementDIndice{ lstIdent, 1}
    	SI nbElements {lstIdent } > 1 ALORS
    		tmpIdContratChoisi := ''+ elementDIndice{ lstIdent, 2}
    	SINON
    		tmpIdContratChoisi := ''
    	FINSI
    FINSI
    
    dteDebCtrl	:= argDebCtrl
    dteFinCtrl	:= argFinCtrl	
    
    SI versionN4DS = ? ALORS
    	versionRefN4DS{}
    FINSI
    
    SI codeEnvoiFichier = ? ALORS
    	codeEnvoiFichier := valeurEnumere{'codeEnvoiFichier','01','N4ds'} 
    FINSI
    
    --*******************REP STOCKAGE DE LA PAYE*********************************--
    initRepEtat{}
    
    --*******************DIALOGUE POUR CONNAITRE MILLESIME*******************--
    detailInfoMillesime := ''
    SI typeAction = 'initialiserLesDonnees' ALORS
    	SI annee{periode.fin} < 2019 ALORS
    		ok := dialogue {50, 570, 'INFOMILLESIMEINIT', ' Informations nécessaires au traitement de l''initialisation d''une déclaration à la norme 4DS'}
    	SINON
    		tmpVersionN4DS := recupererCode{versionN4DS}
			SI tmpVersionN4DS <> 'V01X16' ALORS
	    		detailInfoMillesime := 'Le service DADS-U permettant de déclarer les périodes d''activité et les salaires sera définitivement fermé pour la retraite complémentaire Agirc-Arrco le 8 novembre 2019. En effet, du fait de sa généralisation au 1er janvier 2017, la DSN est considérée aujourd''hui comme le canal de transmission des données sociales pour tous les employeurs du secteur privé.

En 2020, aucune déclaration DADS-U déposée sur le portail net-entreprises.fr ne sera transmise à la retraite complémentaire Agirc-Arrco.

Pour les établissements entrés en DSN mais employant des salariés hors périmètre de la DSN ou les établissements non soumis à l''obligation DSN, l''Agirc-Arrco mettra à disposition début 2020 une solution déclarative dédiée. Leur règlement de cotisations devra s''effectuer via www.cotizen.fr ou par virement bancaire.'
			SINON
	    		detailInfoMillesime := 'COMME ANNONCE L''ANNEE DERNIERE, L''OUTIL DE CONTRÔLE DE LA NORME DADS-U OU DE L''AED NE SERA PLUS ACTUALISE PAR NOS SERVICES ET CE MÊME DANS L''EVENTUALITE D''UNE EVOLUTION DE LA NORME.
CETTE ANNEE LA NORME 4DS N''A PAS FAIT EVOLUER SON CAHIER DE CHARGES AINSI QUE SES CONTRÔLES.
PAR CONSEQUENT, VOUS CONTINUEREZ A BENEFICIER DU CONTRÔLE DECLARATIF IDENTIQUE A CELUI DU MILLESIME V01X14.

Le service DADS-U permettant de déclarer les périodes d''activité et les salaires sera définitivement fermé pour la retraite complémentaire Agirc-Arrco le 8 novembre 2019. En effet, du fait de sa généralisation au 1er janvier 2017, la DSN est considérée aujourd''hui comme le canal de transmission des données sociales pour tous les employeurs du secteur privé.

En 2020, aucune déclaration DADS-U déposée sur le portail net-entreprises.fr ne sera transmise à la retraite complémentaire Agirc-Arrco.

Pour les établissements entrés en DSN mais employant des salariés hors périmètre de la DSN ou les établissements non soumis à l''obligation DSN, l''Agirc-Arrco mettra à disposition début 2020 une solution déclarative dédiée. Leur règlement de cotisations devra s''effectuer via www.cotizen.fr ou par virement bancaire.'
			FIN SI

    		ok := dialogue {250, 700, 'INFOMILLESIMEINITF', ' Informations nécessaires au traitement de l''initialisation d''une déclaration à la norme 4DS'}
    	FIN SI
    SINON
    	ok := dialogue {50, 570, 'INFOMILLESIME', ' Informations nécessaires au traitement d''une déclaration à la norme 4DS'}
    FINSI
    
    SI ok ALORS
    	tmpMillesimeClasse := recupererCode{versionN4DS}
    	tmpMillesimeClasse := 'N4ds_' + chaine{tmpMillesimeClasse, 2,3} + chaine{tmpMillesimeClasse, 5,6} 
    	tmpVersionN4DS := recupererCode{versionN4DS}
    
    	--*********VERIFIER PRESENCE FICHIER CORRESPONDANCE POUR MILLESIME
    	SI tmpVersionN4DS = ? ALORS
    		info{'La sélection d''un millésime est obligatoire. 
La norme 4DS n''est possible qu''à compter de l''exercice 2011.'}
    		SORTIR FAUX
    	FINSI

		SI typeMessage = 'AE' ET tmpVersionN4DS = 'V01X16' ALORS
			info{' La déclaration Attestation employeur DNAC (AED) destinée à Pôle Emploi ne sera pas implémentée dans le millésime V01X16. Pôle emploi maintient pour le moment les millésimes V01X13, V01X14 et V01X15.'}
    		SORTIR FAUX
    	FIN SI

    	--*********SDO NOUVEAU TENTATIVE POUR CONTROLER SI SUP AU 09/11/2012 LE MILLESIME APPLICABLE POUR INIT DADSU SEUL DEVRAIT ETRE V01X07
    	SI typeAction = 'initialiserLesDonnees' ALORS -- Uniquement lors de l'action d'initialisation
    		SI typeMessage = 'DADSU' ALORS -- Uniquement si le message est DADSU (hors AED)
				SI aujourdhui{} >= 09.11.2022 ALORS
					SI tmpVersionN4DS <> 'V01X17' ALORS -- Si la version sélectionnée est antérieure à V01X17
	    				SI ouiNon{'AVERTISSEMENT :
	A compter du 09/11/2022, la norme applicable aux déclarations DADSU doit être la norme V01X17.

	Les normes antérieures peuvent être encore utilisées dans les cas ci-après :
	- Ouverture en consultation d''anciennes déclarations DADSU établies
	- Initialisation, Ouverture, Envoi de déclarations AED (Excepté initialisation V01X14, V01X15 et V01X16)

	Souhaitez-vous tout de même poursuivre l''initialisation de cette déclaration ?'} ALORS
						SINON
							SORTIR FAUX -- ne pas poursuivre l'initialisation
						FINSI
					FINSI
				SINON
					SI aujourdhui{} >= 09.11.2021 ALORS
						SI tmpVersionN4DS <> 'V01X16' ALORS -- Si la version sélectionnée est antérieure à V01X16
	    					SI ouiNon{'AVERTISSEMENT :
	A compter du 09/11/2021, la norme applicable aux déclarations DADSU doit être la norme V01X16.

	Les normes V01X15, V01X14, V01X13, V01X12, V01X11, V01X10, V01X09, V01X08, V01X07 et V01X06 peuvent être encore utilisées dans les cas ci-après :
	- Ouverture en consultation d''anciennes déclarations DADSU établies
	- Initialisation, Ouverture, Envoi de déclarations AED (Excepté initialisation V01X13, V01X14 et V01X15)

	Souhaitez-vous tout de même poursuivre l''initialisation de cette déclaration ?'} ALORS
							SINON
								SORTIR FAUX -- ne pas poursuivre l'initialisation
							FINSI
						FINSI
					SINON
						SI aujourdhui{} >= 09.11.2020 ALORS
							SI tmpVersionN4DS <> 'V01X15' ALORS -- Si la version sélectionnée est antérieure à V01X14
								SI ouiNon{'AVERTISSEMENT :
	A compter du 09/11/2020, la norme applicable aux déclarations DADSU doit être la norme V01X15.

	Les normes V01X14, V01X13, V01X12, V01X11, V01X10, V01X09, V01X08, V01X07 et V01X06 peuvent être encore utilisées dans les cas ci-après :
	- Ouverture en consultation d''anciennes déclarations DADSU établies
	- Initialisation, Ouverture, Envoi de déclarations AED (Excepté initialisation V01X12, V01X13 et V01X14)

	Souhaitez-vous tout de même poursuivre l''initialisation de cette déclaration ?'} ALORS
								SINON
									SORTIR FAUX -- ne pas poursuivre l'initialisation
								FINSI
							FINSI
						SINON
							SI aujourdhui{} >= 09.11.2019 ALORS
								SI tmpVersionN4DS <> 'V01X14' ALORS -- Si la version sélectionnée est antérieure à V01X14
									SI ouiNon{'AVERTISSEMENT :
	A compter du 09/11/2019, la norme applicable aux déclarations DADSU doit être la norme V01X14.

	Les normes V01X13, V01X12, V01X11, V01X10, V01X09, V01X08, V01X07 et V01X06 peuvent être encore utilisées dans les cas ci-après :
	- Ouverture en consultation d''anciennes déclarations DADSU établies
	- Initialisation, Ouverture, Envoi de déclarations AED (Excepté initialisation V01X11, V01X12 et V01X13)

	Souhaitez-vous tout de même poursuivre l''initialisation de cette déclaration ?'} ALORS
									SINON
										SORTIR FAUX -- ne pas poursuivre l'initialisation
									FINSI
								FINSI
							SINON
								SI aujourdhui{} >= 09.11.2018 ALORS
									SI tmpVersionN4DS <> 'V01X13' ALORS -- Si la version sélectionnée est V01X09 ou V01X08 ou V01X07 
										SI ouiNon{'AVERTISSEMENT :
		A compter du 09/11/2018, la norme applicable aux déclarations DADSU doit être la norme V01X13.

		Les normes V01X12, V01X11, V01X10, V01X09, V01X08, V01X07 et V01X06 peuvent être encore utilisées dans les cas ci-après :
		- Ouverture en consultation d''anciennes déclarations DADSU établies
		- Initialisation, Ouverture, Envoi de déclarations AED (Excepté initialisation V01X08, V01X09, V01X10, V01X11 et V01X12)

		Souhaitez-vous tout de même poursuivre l''initialisation de cette déclaration ?'} ALORS
										SINON
											SORTIR FAUX -- ne pas poursuivre l'initialisation
										FINSI
									FINSI
								SINON
									SI aujourdhui{} >= 09.11.2017 ALORS -- Si date système est supérieure au 09.11.2017
										SI tmpVersionN4DS <> 'V01X12' ALORS -- Si la version sélectionnée est V01X09 ou V01X08 ou V01X07 
											SI ouiNon{'AVERTISSEMENT :
		A compter du 09/11/2017, la norme applicable aux déclarations DADSU doit être la norme V01X12.

		Les normes V01X11, V01X10, V01X09, V01X08, V01X07 et V01X06 peuvent être encore utilisées dans les cas ci-après :
		- Ouverture en consultation d''anciennes déclarations DADSU établies
		- Initialisation, Ouverture, Envoi de déclarations AED (Excepté initialisation V01X08, V01X09, V01X10 et V01X11)

		Souhaitez-vous tout de même poursuivre l''initialisation de cette déclaration ?'} ALORS
											SINON
												SORTIR FAUX -- ne pas poursuivre l'initialisation
											FINSI
										FINSI
									SINON
										SI aujourdhui{} >= 04.11.2016 ALORS -- Si date système est supérieure au 04.11.2016
											SI tmpVersionN4DS <> 'V01X11' ALORS -- Si la version sélectionnée est V01X09 ou V01X08 ou V01X07 
												SI ouiNon{'AVERTISSEMENT :
			A compter du 04/11/2016, la norme applicable aux déclarations DADSU doit être la norme V01X11.

			Les normes V01X10, V01X09, V01X08, V01X07 et V01X06 peuvent être encore utilisées dans les cas ci-après :
			- Ouverture en consultation d''anciennes déclarations DADSU établies
			- Initialisation, Ouverture, Envoi de déclarations AED (Excepté initialisation V01X08, V01X09 et V01X10)

			Souhaitez-vous tout de même poursuivre l''initialisation de cette déclaration ?'} ALORS
												SINON
													SORTIR FAUX -- ne pas poursuivre l'initialisation
												FINSI
											FINSI
										SINON
											SI aujourdhui{} >= 06.11.2015 ALORS -- Si date système est supérieure au 06.11.2015
												SI tmpVersionN4DS <> 'V01X10' ALORS -- Si la version sélectionnée est V01X09 ou V01X08 ou V01X07 
													SI ouiNon{'AVERTISSEMENT :
				A compter du 06/11/2015, la norme applicable aux déclarations DADSU doit être la norme V01X10.

				Les normes V01X09, V01X08, V01X07 et V01X06 peuvent être encore utilisées dans les cas ci-après :
				- Ouverture en consultation d''anciennes déclarations DADSU établies
				- Initialisation, Ouverture, Envoi de déclarations AED (Excepté initialisation V01X06, V01X07)

				Souhaitez-vous tout de même poursuivre l''initialisation de cette déclaration ?'} ALORS
													SINON
														SORTIR FAUX -- ne pas poursuivre l'initialisation
													FINSI
												FINSI
											SINON
												SI aujourdhui{} >= 06.11.2014 ALORS -- Si date système est supérieure au 06.11.2014
													SI tmpVersionN4DS <> 'V01X09' ALORS -- Si la version sélectionnée est V01X08 ou V01X07 
														SI ouiNon{'AVERTISSEMENT :
				A compter du 07/11/2014, la norme applicable aux déclarations DADSU doit être la norme V01X09.

				Les normes V01X08, V01X07 et V01X06 peuvent être encore utilisées dans les cas ci-après :
				- Ouverture en consultation d''anciennes déclarations DADSU établies
				- Initialisation, Ouverture, Envoi de déclarations AED (Excepté initialisation V01X06)

				Souhaitez-vous tout de même poursuivre l''initialisation de cette déclaration ?'} ALORS
														SINON
															SORTIR FAUX -- ne pas poursuivre l'initialisation
														FINSI
													FINSI
												SINON
													SI aujourdhui{} >= 09.11.2013 ALORS -- Si date système est supérieure au 09.11.2013
														SI tmpVersionN4DS <> 'V01X08' ALORS -- Si la version sélectionnée est V01X07 ou V01X06
															SI ouiNon{'AVERTISSEMENT :
				A compter du 09/11/2013, la norme applicable aux déclarations DADSU doit être la norme V01X08.

				Les normes V01X07 et V01X06 peuvent être encore utilisées dans les cas ci-après :
				- Ouverture en consultation d''anciennes déclarations DADSU établies
				- Initialisation, Ouverture, Envoi de déclarations AED

				Souhaitez-vous tout de même poursuivre l''initialisation de cette déclaration ?'} ALORS
															SINON
																SORTIR FAUX -- ne pas poursuivre l'initialisation
															FINSI
														FINSI
													SINON
														SI aujourdhui{} >= 09.11.2012 ALORS -- Si date système est supérieure au 09.11.2012
															SI tmpVersionN4DS <> 'V01X07' ET tmpVersionN4DS <> 'V01X08' ALORS -- Si la version sélectionnée est V01X06
																SI ouiNon{'AVERTISSEMENT :
				A compter du 09/11/2012, la norme applicable aux déclarations DADSU doit être la norme V01X07.

				La norme V01X06 peut être encore utilisée dans les cas ci-après :
				- Ouverture en consultation d''anciennes déclarations DADSU établies avec la norme V01X06
				- Initialisation, Ouverture, Envoi de déclarations AED

				Souhaitez-vous tout de même poursuivre l''initialisation de cette déclaration à la norme V01X06 ?'} ALORS				    
																SINON
																	SORTIR FAUX -- ne pas poursuivre l'initialisation
																FINSI
															FINSI
					    								FINSI
					    							FINSI
					    						FINSI
					    					FINSI
					    				FINSI
									FINSI
				    			FINSI
				    		FINSI
						FINSI
		    		FINSI
				FINSI
			FINSI -- typeMessage DADSU
		FINSI -- typeAction initialiserLesDonnees
    
    	sFic	:=	racine{}+'\global\modeles\paye\n4ds\'+tmpVersionN4DS+'TabCorrespondanceRubriques.txt'
    
    	res	:=	infoFichier{sFic}
    	SI NON res = 'fichier' ALORS
    		info{'Pas de table de correspondance dans le repertoire : '+sFic}
    		SORTIR FAUX 
    	FINSI
    	--*********FIN
    
    	maClasse := tmpMillesimeClasse
    	monObjet ::= maClasse
    	monObjet := creer{maClasse}
    	monObjet!{'paye'}objet := paye
    
    	SI typeMessage = 'DADSU' ALORS
    		SI typeAction = 'preparerManuellementLesDonnees' ALORS
    			monObjet.preparerManuellementLesDonnees{versionN4DS, repDoc, sFic, typeMessage}
    		SINON
    			SI typeAction = 'ouvrirUneDeclaration' ALORS
    				monObjet.ouvrirUneDeclaration{versionN4DS, repDoc, '', '', sFic, typeMessage}
    			SINON
    				SI typeAction = 'preControlerLesDonnees' ALORS
    					monObjet.preControlerLesDonnees{}
    				SINON
    					SI typeAction = 'initialiserLesDonnees' ALORS
    						SI tmpVersionN4DS = 'V01X07' OU tmpVersionN4DS = 'V01X06' OU tmpVersionN4DS = 'V01X05' ALORS
    							monObjet.initialiserLesDonnees{versionN4DS, repDoc, sFic, typeMessage}
    						SINON
    							monObjet.initialiserLesDonnees{versionN4DS, repDoc, sFic, typeMessage, codeEnvoiFichier}
    						FINSI
    					FINSI
    				FINSI
    			FINSI
    		FINSI
    	SINON
    		SI typeMessage = 'AE' ALORS
    			SI typeAction = 'initialiserLesDonnees' ALORS
    				SI tmpVersionN4DS = 'V01X07' OU tmpVersionN4DS = 'V01X06' OU tmpVersionN4DS = 'V01X05' ALORS
    					monObjet.initialiserLesDonneesDNACAE{versionN4DS, tmpSalarieChoisi, tmpIdSalarieChoisi, repDoc, sFic, typeMessage}
    				SINON
    					SI tmpVersionN4DS = 'V01X08' ALORS
    						monObjet.initialiserLesDonneesDNACAE{versionN4DS, tmpSalarieChoisi, tmpIdSalarieChoisi, repDoc, sFic, typeMessage, codeEnvoiFichier}
    					SINON
	    					monObjet.initialiserLesDonneesDNACAE{versionN4DS, tmpSalarieChoisi, tmpIdSalarieChoisi, repDoc, sFic, typeMessage, codeEnvoiFichier, tmpIdContratChoisi}
    					FINSI
    				FINSI
    			SINON
    				SI typeAction = 'ouvrirUneDeclaration' ALORS
	    				monObjet.ouvrirUneDeclarationDNACAE{versionN4DS, tmpSalarieChoisi, tmpIdSalarieChoisi, repDoc, '', '', sFic, typeMessage}
    				SINON
    					SI typeAction = 'preControlerLesDonnees' ALORS
	    					monObjet.preControlerLesDonneesDNACAE{tmpIdSalarieChoisi , dteDebCtrl, dteFinCtrl}
    					FINSI
    				FINSI
    			FINSI
    		FINSI
    	FINSI
    FINSI -- OK
    --*******************FIN DIALOGUE POUR CONNAITRE MILLESIME*******************--
    SORTIR VRAI
###
'choisirUneDeclaration' 'Toutes fonctions'
{argMessage <Chaine> argIdSal <Entier>}
    |
    CR<Chaine> fic<Chaine> dec <Chaine> szChoix <Chaine> tmpMillesimeClasse <Chaine> sFic <Chaine>
    maClasse <Chaine> tmpModeOuverture <Chaine> tmpVersionN4DS <Chaine> tmpIdSal <Chaine> tmpSalarieChoisi <Chaine>
    tmpDebFicChoisi <Chaine> tmpFinFicChoisi <Chaine> tmpPeriodeFicChoisi <Chaine> tmpAnneeRattInitial <Chaine> 
    tmpCodeN4DSFicChoisi <Chaine> tmpTypeN4DSFicChoisi <Chaine> tmpFractionFicChoisi <Chaine> 
    fichierARI <Chaine> ficARI <Chaine> fichierAI <Chaine>
    
    maLstChoix <Liste> lstFiles<Liste> lstReduite <Liste>
    iFile <Entier> nb <Entier>
    monObjet <Objet>
    |
    
    CR	:=	'
'
    paie 			:= paye
    tmpModeOuverture 	:= 'Silencieux'
    typeMessage 		:= argMessage
    ouiARI 			:= FAUX
    
    --*******************REP STOCKAGE DE LA PAYE*********************************--
    initRepEtat{}
    
    --****Lecture du répertoire dadsu4ds
    SI typeMessage = 'DADSU' ALORS
    	repN4DS	:= dossier.repertoire+'\paye2'+'\dadsu4ds\'
    SINON
    	SI typeMessage = 'AE' ALORS
    		repN4DS	:= dossier.repertoire+'\paye2'+'\ae4ds\'
    	FINSI
    FINSI
    
    lstFiles 		:= split {contenuRepertoire{repN4DS}, CR}
    
    iFile	:=	1
    nb	:=	0
    nb	:=	nbElements{lstFiles}
    
    lstReduite	:=	creerListe{}
    TANT QUE iFile <= nb FAIRE
    	fic	:=	repN4DS + chaine{elementDIndice{lstFiles , iFile}}
    
    	SI argIdSal <> 0 ALORS
    		SI entier{chaine{infoFichier{fic, 'nom.sx'}, 46,taille{infoFichier{fic, 'nom.sx'}}}} = argIdSal ALORS
    			ajouterElement{lstReduite, fic}
    		FINSI
    	SINON
    		elementDIndice{lstFiles, iFile, fic}
    	FINSI
    
    	iFile	+=	1
    FIN FAIRE
    
    SI argIdSal <> 0 ALORS
    	viderListe{lstFiles}
    	lstFiles	:=	lstReduite
    FINSI
    
    --********** Pas de déclaration**********
    SI (nbElements {lstFiles} <= 0)
    	ALORS	cloche{}
    		info{'Aucune déclaration à ouvrir'}
    		SORTIR FAUX
    FINSI
    
    maLstChoix	:=	creerListe{}
    iFile	:=	1
    nb	:= 	0
    nb	:= 	nbElements{lstFiles}
    TANT QUE nb >= iFile FAIRE
    	fic	:=	chaine{elementDIndice{lstFiles , nb}}
    	SI infoFichier{fic, 'sx'} = 'xml' ALORS
    		dec	:=	infoFichier{fic, ' nom'}
    		szChoix	:=	dec
    
    		ajouterElement{maLstChoix, szChoix}
    
    	FINSI
    	nb -= 1
    FIN FAIRE
    
    --********** Sélection du lot à intégrer **********
    szChoix		:=	choix{maLstChoix}
    
    SI (szChoix <> ?)
    	ALORS
    
    	tmpVersionN4DS  := majuscule{chaine{szChoix, 39,44}}
    
    	SI tmpVersionN4DS = 'V01X05' ALORS
    		info {'Il n''est plus possible d''ouvrir une déclaration réalisée avec le millésime "temporaire" V01X05.'}
    		SORTIR FAUX
    	FINSI
    	
    	versionN4DS := valeurEnumere{'versionN4DS',  tmpVersionN4DS  ,'N4ds'}
    
    	SI versionN4DS = ? ALORS
    		info {'Le millésime de la déclaration sélectionnée (' + szChoix + ') 
n''est pas applicable pour le mois sélectionné (' + p.fin + ').

Cette déclaration ne peut faire l''objet d''une ouverture sur ce mois.'}
    		SORTIR FAUX
    	FINSI

    	tmpMillesimeClasse := recupererCode{versionN4DS}
    	tmpMillesimeClasse := 'N4ds_' + chaine{tmpMillesimeClasse, 2,3} + chaine{tmpMillesimeClasse, 5,6} 
    	tmpVersionN4DS := recupererCode{versionN4DS}
    
    	---Pour ouvrir un AE
    	tmpIdSal := chaine{szChoix, 46,taille{szChoix}}
    	POUR TOUT salarie
    	TEL QUE entier{tmpIdSal} = salarie.idSal
    	FAIRE
    		tmpSalarieChoisi := salarie.NomAffichage + ' ' + salarie.Prenom + ' ('+salarie.id+')'
    	FIN FAIRE
    	--*********FICHIER CORRESPONDANCE DU FICHIER SELECTIONNE
    	sFic	:=	racine{}+'\global\modeles\paye\n4ds\'+tmpVersionN4DS+'TabCorrespondanceRubriques.txt'
    	
    	maClasse := tmpMillesimeClasse
    	monObjet ::= maClasse
    	monObjet := creer{maClasse}
    	monObjet!{'paye'}objet := paye
    
    	tmpDebFicChoisi := chaine{szChoix, 1,8}
    	tmpFinFicChoisi := chaine{szChoix, 10, 17}
    	tmpPeriodeFicChoisi := chaine{szChoix, 18, 20}
    	tmpAnneeRattInitial := chaine{szChoix, 22, 22}+chaine{szChoix, 10, 13}
    	tmpCodeN4DSFicChoisi := chaine{szChoix, 28, 29}
    	tmpTypeN4DSFicChoisi := chaine{szChoix, 30, 31}
    	tmpFractionFicChoisi := chaine{szChoix, 36, 37}
    	
    	SI typeMessage = 'DADSU' ALORS
    		SI tmpTypeN4DSFicChoisi = '51' ALORS
    			fichierARI 	:= tmpDebFicChoisi+'_'+tmpFinFicChoisi+tmpPeriodeFicChoisi+'_'+tmpAnneeRattInitial+'_'+tmpCodeN4DSFicChoisi +'59'+'_'+'51'+'_'+tmpFractionFicChoisi+'_'+recupererCode{versionN4DS}+'.xml'
    		FINSI
    		SI tmpTypeN4DSFicChoisi = '52' ALORS
    			fichierARI 	:= tmpDebFicChoisi+'_'+tmpFinFicChoisi+tmpPeriodeFicChoisi+'_'+tmpAnneeRattInitial+'_'+tmpCodeN4DSFicChoisi +'59'+'_'+'52'+'_'+tmpFractionFicChoisi+'_'+recupererCode{versionN4DS}+'.xml'
    		FINSI
    	SINON
    		SI tmpTypeN4DSFicChoisi = '51' ALORS
    			fichierARI 	:= tmpDebFicChoisi+'_'+tmpFinFicChoisi+tmpPeriodeFicChoisi+'_'+tmpAnneeRattInitial+'_'+tmpCodeN4DSFicChoisi +'59'+'_'+'51'+'_'+tmpFractionFicChoisi+'_'+recupererCode{versionN4DS}+'_'+tmpIdSal+'.xml'
    			fichierAI 	:= tmpDebFicChoisi+'_'+tmpFinFicChoisi+tmpPeriodeFicChoisi+'_'+tmpAnneeRattInitial+'_'+tmpCodeN4DSFicChoisi +'61'+'_'+'51'+'_'+tmpFractionFicChoisi+'_'+recupererCode{versionN4DS}+'_'+tmpIdSal+'.xml'
    		FINSI
    		SI tmpTypeN4DSFicChoisi = '59' ALORS -- nouveau cause gestion type 61 Annule intégral
    			fichierAI 	:= tmpDebFicChoisi+'_'+tmpFinFicChoisi+tmpPeriodeFicChoisi+'_'+tmpAnneeRattInitial+'_'+tmpCodeN4DSFicChoisi +'61'+'_'+'59'+'_'+tmpFractionFicChoisi+'_'+recupererCode{versionN4DS}+'_'+tmpIdSal+'.xml'
    		FINSI
    	FINSI	
    
    	ficARI := repN4DS+'\'+fichierARI
    	SI infoFichier{ficARI} ='fichier' ALORS
    		SI ouiNon {'Un fichier similaire de type Annule et Remplace intégral (59) est également présent, voulez vous réellement ouvrir le fichier de type Normal (51)
moins récent et obsolète si le fichier Annule et Remplace à déjà fait l''objet d''une acceptation par les récepteurs ?.'} ALORS
    			ouiARI := FAUX
    		SINON
    			SORTIR FAUX
    		FINSI
    	FINSI
    
    	SI typeMessage = 'DADSU' ALORS
    		monObjet.ouvrirUneDeclaration{versionN4DS, repDoc , szChoix , tmpModeOuverture, sFic, typeMessage}
    	SINON
    		monObjet.ouvrirUneDeclarationDNACAE{versionN4DS, tmpSalarieChoisi, tmpIdSal, repDoc , szChoix , tmpModeOuverture, sFic, typeMessage}
    	FINSI
    
    FINSI
    SORTIR VRAI
###
'versionRefN4DS' 'Toutes fonctions'
    SI typeMessage = 'DADSU' ALORS
        SI p.fin > 31.10.2018 ALORS versionN4DS := valeurEnumere{'versionN4DS','V01X13','N4ds_0113'} FINSI-- version du 09/11/2018 pour editeur validation fichiers salaires 2018
        SI p.fin > 31.10.2019 ALORS versionN4DS := valeurEnumere{'versionN4DS','V01X14','N4ds_0114'} FINSI-- version du 09/11/2019 pour editeur validation fichiers salaires 2019
        SI p.fin > 31.10.2020 ALORS versionN4DS := valeurEnumere{'versionN4DS','V01X15','N4ds_0115'} FINSI-- version du 09/11/2020 pour editeur validation fichiers salaires 2020
        SI p.fin > 31.10.2021 ALORS versionN4DS := valeurEnumere{'versionN4DS','V01X16','N4ds_0116'} FINSI-- version du 09/11/2021 pour editeur validation fichiers salaires 2021
        SI p.fin > 31.10.2022 ALORS versionN4DS := valeurEnumere{'versionN4DS','V01X17','N4ds_0117'} FINSI-- version du 09/11/2022 pour editeur validation fichiers salaires 2022
    SINON -- Demande du produit fiche 300501
    	SI typeMessage = 'AE' ALORS
            SI p.fin > 31.12.2018 ALORS versionN4DS := valeurEnumere{'versionN4DS','V01X13','N4ds_0113'} FINSI-- version du 09/11/2018 pour editeur validation fichiers salaires 2018
            SI p.fin > 31.12.2019 ALORS versionN4DS := valeurEnumere{'versionN4DS','V01X14','N4ds_0114'} FINSI-- version du 09/11/2019 pour editeur validation fichiers salaires 2019
			SI p.fin > 31.12.2020 ALORS versionN4DS := valeurEnumere{'versionN4DS','V01X15','N4ds_0115'} FINSI-- version du 09/11/2020 pour editeur validation fichiers salaires 2020
			SI p.fin > 31.12.2021 ALORS versionN4DS := valeurEnumere{'versionN4DS','V01X16','N4ds_0116'} FINSI-- version du 09/11/2021 pour editeur validation fichiers salaires 2021
    	FINSI
    FINSI
###
'inStr' 'Toutes fonctions'
{start <Entier> string1 <Chaine> string2 <Chaine>}
     -- Recherche string2 dans string1 à partir de la position start
    |
    oFlot <Objet> 
    len1 <Entier> pos <Entier>
    |
    
    len1	:=	taille {string1}
    oFlot	:=	flotLecture {chaine{string1, start, len1}}
    pos	:=	start+taille{lire{oFlot, string2}}
    SORTIR SI pos > len1 ALORS 0 SINON pos FINSI
###
'resetErreurs' 'Toutes fonctions'
    etat!{'ERREURS'}objet := ?
###
'renameFichierOutilCTRLBis' 'Toutes fonctions'
{lst <Objet>}
	SORTIR VRAI
###
'renameFichierOutilCTRL' 'Toutes fonctions'

###
