diff --git a/.gitignore b/.gitignore
index d2e1e27bc69134f6cd57dc5b2f5e982e64ca7d15..82894590215d1334066fc22f4984566b069d947b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@ composer.lock
 !public/unicaen/app/vendor
 public/css/local.css
 public/css/environnement.css
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..1f7716f4ce2ec50ff629d691b3cae01b2208da90
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,89 @@
+CHANGES
+=======
+
+# Version 1.1x
+
+## 1.1.0 - XX/XX/XXXX
+
+Relivraison de la partie demande hors plan de formation
+
+# Version 1.0x
+
+## 1.0.7 - 06/02/2025
+
+[ÉVOLUTION]
+* Ajout de backoffice pour la gestion des "Types de session"
+
+[MODIFICATION]
+* Le domaine n'est plus un champ obligatoire lors de la création d'une session
+
+## 1.0.6 - 09/12/2025
+
+[CORRECTION]
+* Amélioration des tris sur les sessions
+* Ajout d'un privilège afin de conditionner le menu extraction à un privilège
+* Correction du comptage des inscrits (vérification de l'historisation et des désistement)
+
+## 1.0.5 - 05/12/2025
+
+[ÉVOLUTION]
+* Ajout d'un emplacement sur la feuille d'émargement pour que le formateur signe
+* Possibilité d'envoyer un mail de rappel au responsable qui n'aurait pas validé ou refusé la demande de formation
+* Pouvoir notifier les inscrit·es de la liste principale pour les prevenir d'un changement ou d'une demande particuliere
+* Changement de la affichage de retour de mails (lister les mails envoyées et échouées dans une modal)
+
+[MODIFICATION]
+Tâche #59615: Changer le comportement du bouton changer etat
+Tâche #59675: Profil agent : visibilité du nombre d'inscrits
+
+## 1.0.4 - 29/11/2025
+
+[ÉVOLUTION]
+* Ajout d'affichage sur la liste des inscrits (RQTH, ...)
+* Ajout d'information complémentaire sur les fiche des sessions (nombre d'inscrit, lieu, ...)
+* Ajout du motif d'annulation des sessions + macro associée
+* Ajout d'un module d'extraction (dans l'administration)
+
+[MODIFICATION]
+* Amélioration de l'ergonomie de l'interface des gestionnaires
+* Amélioration de la gestion des chaines de validation
+
+[CORRECTION]
+* Correction de l'impossibilité pour les stagiaires d'annuler leur inscription
+* Correction de l'absence de changement d'état de la session quand les inscriptions sont closes
+* Suppression du blocage des agents si le blocage provient d'un volume
+* Possibilité de renseigner 0 comme montant 
+
+## 1.0.3 -  18/11/2024
+
+[ÉVOLUTION]
+* Visibilité des inscrits et des sessions pour les référents
+* Visibilité de la motivation et des missions de l'agent pour le supérieur
+* Autoriser les valideur·euses à voir les inscriptions/formations de leur agents
+* Appliquer les changements apporter pour les valideur·euses pour les responsables de structures
+* Ajout de la possibilité de révoquer des remontées du SI pour les chaines de validations
+
+[CORRECTION]
+* Desinscription des agents
+
+## 1.0.2 - 13/11/2024
+
+[ÉVOLUTION]
+* Controle du logo de l'application via un parametre
+* Ajout de privilège afin d'améliorer l'affichage des sessions
+* Ajout d'une case à cocher pour n'afficher que les formations de l'année courante sur le profil valideur·euse
+
+[CORRECTION]
+* Retrait de mention de EMC2 dans le pied de page des documents générés
+* Amélioration de l'affichage des inscrits à une session de formation
+* Correction de l'inversion du mail vers la DRH et l'agent lors de la validation du Valideur·euse
+
+## 1.0.1 - 06/11/2024
+
+[CORRECTION]
+* Ajout de garde-fou pour certaines données mal saisies
+* Filtrage de formation afin de simplifier la vie des valideur·euses avec beaucoup d'agent·es
+
+## 1.0.0 - 30/10/2024
+
+Premire version livrant la partie formation au plan de formation
\ No newline at end of file
diff --git a/composer.json b/composer.json
index 9878b987117bf240fc280cda7496fb4e14fd2593..a9feb3b9132a0c2a71fad18b4586bbed4cd163e9 100755
--- a/composer.json
+++ b/composer.json
@@ -8,13 +8,13 @@
     }
   ],
   "require": {
-    "unicaen/app": "^6.1",
+    "unicaen/app": "^7",
     "unicaen/authentification": "^6.1",
-    "unicaen/utilisateur": "^6",
+    "unicaen/utilisateur": "^7",
     "unicaen/privilege": "^6.1",
     "unicaen/renderer": "^6",
     "unicaen/pdf": "^6",
-    "unicaen/mail": "^6",
+    "unicaen/mail": "^7",
     "unicaen/parametre": "^6",
     "unicaen/bjy-authorize": "^6.1",
     "unicaen/ldap": "^7",
@@ -27,7 +27,7 @@
     "unicaen/enquete": "^0",
     "unicaen/etat": "^6.0",
     "unicaen/validation": "^6.1",
-    "unicaen/bddadmin": "0.9.9",
+    "unicaen/bddadmin": "^1",
 
     "ext-json": "*",
     "ext-gettext": "*",
diff --git a/config/autoload/database.local.php.dist b/config/autoload/database.local.php.dist
index 4760c939d67b3d1c31c1dcecaf004f398a6db231..e58400b5d0a1ab5c6a950a384601d7e6284f5a82 100644
--- a/config/autoload/database.local.php.dist
+++ b/config/autoload/database.local.php.dist
@@ -1,13 +1,30 @@
 <?php
 
-use Doctrine\DBAL\Driver\PgSQL\Driver;
+use Doctrine\DBAL\Driver\PgSQL\Driver as DriverPgSQL;
+use Doctrine\DBAL\Driver\OCI8\Driver as DriverOCI8;
 use Doctrine\ORM\Mapping\Driver\XmlDriver;
 use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
 
 $env = getenv('APPLICATION_ENV') ?: 'production';
 
-return [
+const DRIVER_OCI8 = DriverOCI8::class;
+const DRIVER_PGSQL = DriverPgSQL::class;
+
+const DB_DRIVER = DRIVER_PGSQL;
+const DB_HOSTNAME = 'XXXX';
+const DB_PORT = 'XXXX';
+const DB_NAME = 'XXXX';
+const DB_USERNAME = 'XXXX';
+const DB_PASSWORD = 'XXXX';
 
+const DB_SYNCHRO_DRIVER = DRIVER_OCI8;
+const DB_SYNCHRO_HOSTNAME = 'XXXX';
+const DB_SYNCHRO_PORT = 'XXXX';
+const DB_SYNCHRO_NAME = 'XXXX';
+const DB_SYNCHRO_USERNAME = 'XXXX';
+const DB_SYNCHRO_PASSWORD = 'XXXX';
+
+return [
     'doctrine' => [
         'driver' => [
             'orm_octopus' => [
@@ -32,27 +49,28 @@ return [
         'connection' => [
             // base de l'application
             'orm_default' => [
-                'driverClass' => Driver::class,
+                'driverClass' => DB_DRIVER,
                 'params' => [
-                    'host' => 'pgsql.mon-etablissement.fr',
-                    'port' => '5432',
+                    'driver' => 'Postgresql',
+                    'host' => DB_HOSTNAME,
+                    'port' => DB_PORT,
                     'charset' => 'utf8',
                     'driverOptions' => [1002 => 'SET NAMES utf8'],
-                    'user' => 'USERNAME',
-                    'password' => 'PASSWORD',
-                    'dbname' => 'DB_NAME',
+                    'user' => DB_USERNAME,
+                    'username' => DB_USERNAME,
+                    'password' => DB_PASSWORD,
+                    'dbname' => DB_NAME,
                 ],
             ],
             'orm_octopus' => [
-                'driverClass' => Driver::class, // Si PgSQL
-                // 'driverClass' => Doctrine\DBAL\Driver\OCI8\Driver::class, // Si oracle
+                'driverClass' => DB_SYNCHRO_DRIVER,
                 'params' => [
-                    'host' => 'sirh.mon-etablissement.fr',
-                    'port' => '1234',
-                    'user' => 'USERNAME',
-                    'password' => 'PASSWORD',
-                    'service' => 'DB_NAME',
-                    'servicename' => 'DB_NAME',
+                    'host' => DB_SYNCHRO_HOSTNAME,
+                    'port' => DB_SYNCHRO_PORT,
+                    'user' => DB_SYNCHRO_USERNAME,
+                    'password' => DB_SYNCHRO_PASSWORD,
+                    'service' => DB_SYNCHRO_NAME,
+                    'servicename' => DB_SYNCHRO_NAME,
                     'charset' => 'AL32UTF8',
                 ],
             ],
diff --git a/config/autoload/local.php.dist b/config/autoload/local.php.dist
index 753f8a3c231a1e31bae542101e46c9786587ef78..0b3e2cee7daa992ff2de72e7e23caf1e7b485224 100644
--- a/config/autoload/local.php.dist
+++ b/config/autoload/local.php.dist
@@ -1,48 +1,8 @@
 <?php
 
-use Unicaen\Console\Console;
-
-$env = getenv('APPLICATION_ENV') ?: 'production';
-
-
-
-$hostname = match (getenv('APPLICATION_ENV')) {
-    'development' => 'mes-formations.ma-machine.mon-etablissement.fr:8443',
-    'test' => 'mes-formations-pp.mon-etablissement.fr',
-    default => 'mes-formations.mon-etablissement.fr',
-};
-
 return [
-    'module_listener_options' => [
-        'config_cache_enabled'     => ($env === 'production'),
-        'config_cache_key'         => 'app_config',
-        'module_map_cache_enabled' => ($env === 'production'),
-        'module_map_cache_key'     => 'module_map',
-        'cache_dir'                => 'data/config/',
-        'check_dependencies'       => ($env !== 'production'),
-    ],
-
-
     'view_manager' => [
         'display_not_found_reason' => true,
         'display_exceptions'       => true,
     ],
-
-    'router' => [
-        'routes' => [
-            'mes-formations' => [
-                'type' => 'Hostname',
-                'options' => [
-                    'route' => ':hostname',
-                    'constraints' => [
-                        'hostname' => $hostname,
-                    ],
-                    'defaults' => [
-                        'hostname' => !Console::isConsole() ? $hostname : '',
-                    ],
-                ],
-                'may_terminate' => true,
-            ],
-        ],
-    ],
 ];
diff --git a/config/autoload/resynchro.local.php.save b/config/autoload/resynchro.local.php.save
deleted file mode 100644
index bc37f7dd23651445c40acb699d23ee48253fcbe4..0000000000000000000000000000000000000000
--- a/config/autoload/resynchro.local.php.save
+++ /dev/null
@@ -1,312 +0,0 @@
-<?php
-
-return [
-    'synchros' => [
-        // Définition des données sur les corps, grades et métiers.
-
-        'CORRESPONDANCE_TYPE' => [
-            'order' => 1000,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_CORRESPONDANCE_TYPE',
-            'table_destination' => 'carriere_correspondance_type',
-            'correspondance' => [
-                'id' => 'id',
-                'code' => 'code',
-                'libelle_court' => 'libelle_court',
-                'libelle_long' => 'libelle_long',
-                'description' => 'description',
-                'date_debut' => 'd_ouverture',
-                'date_fin' => 'd_fermeture',
-            ],
-            'id' => 'id',
-        ],
-        'CORRESPONDANCE' => [
-            'order' => 1100,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_CORRESPONDANCE',
-            'table_destination' => 'carriere_correspondance',
-            'correspondance' => [
-                'id' => 'id',
-                'code' => 'c_bap',
-                'lib_court' => 'lib_court',
-                'lib_long' => 'lib_long',
-                'type_id' => 'type_id',
-                'date_debut' => 'd_ouverture',
-                'date_fin' => 'd_fermeture',
-            ],
-            'id' => 'id',
-        ],
-        'CORPS' => [
-            'order' => 1200,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_CORPS',
-            'table_destination' => 'carriere_corps',
-            'correspondance' => [
-                'id' => 'id',
-                'lib_court' => 'lib_court',
-                'lib_long' => 'lib_long',
-                'code' => 'code',
-                'categorie' => 'categorie',
-                'date_debut' => 'd_ouverture',
-                'date_fin' => 'd_fermeture',
-            ],
-            'id' => 'id',
-        ],
-        'GRADE' => [
-            'order' => 1300,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_GRADE',
-            'table_destination' => 'carriere_grade',
-            'correspondance' => [
-                'id' => 'id',
-                'lib_court' => 'lib_court',
-                'lib_long' => 'lib_long',
-                'code' => 'code',
-                'date_debut' => 'd_ouverture',
-                'date_fin' => 'd_fermeture',
-            ],
-            'id' => 'id',
-        ],
-        'EMPLOITYPE' => [
-            'order' => 1400,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_EMPLOITYPE',
-            'table_destination' => 'carriere_emploitype',
-            'correspondance' => [
-                'id' => 'id',
-                'code' => 'code',
-                'lib_court' => 'libelle_court',
-                'lib_long' => 'libelle_long',
-                'date_debut' => 'date_debut',
-                'date_fin' => 'date_fin',
-            ],
-            'id' => 'id',
-        ],
-
-        // Structures
-        'STRUCTURE_TYPE' => [
-            'order' => 2000,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_STRUCTURE_TYPE',
-            'table_destination' => 'structure_type',
-            'correspondance' => [
-                'id' => 'id',
-                'code' => 'code',
-                'libelle' => 'libelle',
-                'description' => 'description',
-            ],
-            'id' => 'id',
-        ],
-        'STRUCTURE' => [
-            'order' => 2100,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_STRUCTURE',
-            'table_destination' => 'structure',
-            'correspondance' => [
-                'id' => 'id',
-                'libelle_court' => 'libelle_court',
-                'libelle_long' => 'libelle_long',
-                'code' => 'code',
-                'sigle' => 'sigle',
-                'type_id' => 'type_id',
-                'email_generique' => 'adresse_fonctionnelle',
-                'date_ouverture' => 'd_ouverture',
-                'date_fermeture' => 'd_fermeture',
-                'parent_id' => 'parent_id',
-                'niv2_id' => 'niv2_id',
-            ],
-            'id' => 'id',
-        ],
-        'AGENT' => [
-            'order' => 3000,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_AGENT',
-            'table_destination' => 'agent',
-            'correspondance' => [
-                'c_individu' => 'c_individu',
-                'id' => 'id',
-                'prenom' => 'prenom',
-                'nom_usage' => 'nom_usage',
-                'nom_famille' => 'nom_famille',
-                'sexe' => 'sexe',
-                'date_naissance' => 'date_naissance',
-                'login' => 'login',
-                'email' => 'email',
-                't_contrat_long' => 't_contrat_long'
-            ],
-            'id' => 'c_individu',
-        ],
-        'STRUCTURE_RESPONSABLE' => [
-            'order' => 8200,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_STRUCTURE_RESPONSABLE',
-            'table_destination' => 'structure_responsable',
-            'correspondance' => [
-                'id' => 'id',
-                'structure_id' => 'structure_id',
-                'agent_id' => 'agent_id',
-                'fonction_id' => 'fonction_id',
-                'date_debut' => 'date_debut',
-                'date_fin' => 'date_fin',
-            ],
-            'id' => 'id',
-        ],
-        'STRUCTURE_GESTIONNAIRE' => [
-            'order' => 8200,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_STRUCTURE_GESTIONNAIRE',
-            'table_destination' => 'structure_gestionnaire',
-            'correspondance' => [
-                'id' => 'id',
-                'structure_id' => 'structure_id',
-                'agent_id' => 'agent_id',
-                'fonction_id' => 'fonction_id',
-                'date_debut' => 'date_debut',
-                'date_fin' => 'date_fin',
-            ],
-            'id' => 'id',
-        ],
-        'AGENT_AFFECTATION' => [
-            'order' => 5100,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_AGENT_AFFECTATION',
-            'table_destination' => 'agent_carriere_affectation',
-            'correspondance' => [
-                'id' => 'id',
-                'structure_id' => 'structure_id',
-                'agent_id' => 'agent_id',
-                't_principale' => 't_principale',
-                't_hierarchique' => 't_hierarchique',
-                't_fonctionnelle' => 't_fonctionnelle',
-                'quotite' => 'quotite',
-                'date_debut' => 'date_debut',
-                'date_fin' => 'date_fin',
-            ],
-            'id' => 'id',
-        ],
-        'AGENT_GRADE' => [
-            'order' => 5100,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_AGENT_GRADE',
-            'table_destination' => 'agent_carriere_grade',
-            'correspondance' => [
-                'id' => 'id',
-                'structure_id' => 'structure_id',
-                'agent_id' => 'agent_id',
-                'corps_id' => 'corps_id',
-                'grade_id' => 'grade_id',
-                'correspondance_id' => 'correspondance_id',
-                'emploitype_id' => 'emploitype_id',
-                'date_debut' => 'd_debut',
-                'date_fin' => 'd_fin',
-            ],
-            'id' => 'id',
-        ],
-        'AGENT_ECHELON' => [
-            'order' => 5200,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_AGENT_ECHELON',
-            'table_destination' => 'agent_carriere_echelon',
-            'correspondance' => [
-                'id' => 'id',
-                'agent_id' => 'agent_id',
-                'echelon' => 'echelon',
-                'date_debut' => 'd_debut',
-                'date_fin' => 'd_fin',
-            ],
-            'id' => 'id',
-        ],
-        'AGENT_QUOTITE' => [
-            'order' => 5300,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_AGENT_QUOTITE',
-            'table_destination' => 'agent_carriere_quotite',
-            'correspondance' => [
-                'id' => 'id',
-                'agent_id' => 'agent_id',
-                'quotite' => 'quotite',
-                'date_debut' => 'd_debut',
-                'date_fin' => 'd_fin',
-                'modalite' => 'modalite_de_service',
-            ],
-            'id' => 'id',
-        ],
-        'AGENT_STATUT' => [
-            'order' => 5400,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_AGENT_STATUT',
-            'table_destination' => 'agent_carriere_statut',
-            'correspondance' => [
-                'id' => 'id',
-                'agent_id' => 'agent_id',
-                'structure_id' => 'structure_id',
-                'date_debut' => 'd_debut',
-                'date_fin' => 'd_fin',
-                't_titulaire' => 't_titulaire',
-                't_cdi' => 't_cdi',
-                't_cdd' => 't_cdd',
-                't_administratif' => 't_administratif',
-                't_enseignant' => 't_enseignant',
-                't_chercheur' => 't_chercheur',
-                't_vacataire' => 't_vacataire',
-                't_doctorant' => 't_doctorant',
-                't_detache_in' => 't_detache_in',
-                't_detache_out' => 't_detache_out',
-                't_heberge' => 't_heberge',
-                't_dispo' => 't_dispo',
-                't_emerite' => 't_emerite',
-                't_retraite' => 't_retraite',
-            ],
-            'id' => 'id',
-        ],
-
-        'AGENT_VALIDATEUR' => [
-            'order' => 10000,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_MESFORMATIONS_VALIDATEUR',
-            'table_destination' => 'agent_hierarchie_validateur',
-            'correspondance' => [
-                'id' => 'id',
-                'agent_id' => 'agent_id',
-                'validateur_id' => 'validateur_id',
-                'debut' => 'date_debut',
-                'fin' => 'date_fin',
-            ],
-            'id' => 'id',
-            'separator' => 'validateur_id',
-        ],
-    ],
-
-];
diff --git a/config/autoload/synchro.local.php.demo b/config/autoload/synchro.local.php.demo
deleted file mode 100644
index 31bc7d573a07f99c1933ce93c6edbfdd8feebdb3..0000000000000000000000000000000000000000
--- a/config/autoload/synchro.local.php.demo
+++ /dev/null
@@ -1,308 +0,0 @@
-<?php
-
-return [
-    'synchros' => [
-        // Définition des données sur les corps, grades et métiers.
-
-        'CORRESPONDANCE_TYPE' => [
-            'order' => 1000,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_CORRESPONDANCE_TYPE',
-            'table_destination' => 'carriere_correspondance_type',
-            'correspondance' => [
-                'id' => 'id',
-                'code' => 'code',
-                'libelle_court' => 'libelle_court',
-                'libelle_long' => 'libelle_long',
-                'description' => 'description',
-                'date_debut' => 'd_ouverture',
-                'date_fin' => 'd_fermeture',
-            ],
-            'id' => 'id',
-        ],
-        'CORRESPONDANCE' => [
-            'order' => 1100,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_CORRESPONDANCE',
-            'table_destination' => 'carriere_correspondance',
-            'correspondance' => [
-                'id' => 'id',
-                'code' => 'c_bap',
-                'lib_court' => 'lib_court',
-                'lib_long' => 'lib_long',
-                'type_id' => 'type_id',
-                'date_debut' => 'd_ouverture',
-                'date_fin' => 'd_fermeture',
-            ],
-            'id' => 'id',
-        ],
-        'CORPS' => [
-            'order' => 1200,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_CORPS',
-            'table_destination' => 'carriere_corps',
-            'correspondance' => [
-                'id' => 'id',
-                'lib_court' => 'lib_court',
-                'lib_long' => 'lib_long',
-                'code' => 'code',
-                'categorie' => 'categorie',
-                'date_debut' => 'd_ouverture',
-                'date_fin' => 'd_fermeture',
-            ],
-            'id' => 'id',
-        ],
-        'GRADE' => [
-            'order' => 1300,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_GRADE',
-            'table_destination' => 'carriere_grade',
-            'correspondance' => [
-                'id' => 'id',
-                'lib_court' => 'lib_court',
-                'lib_long' => 'lib_long',
-                'code' => 'code',
-                'date_debut' => 'd_ouverture',
-                'date_fin' => 'd_fermeture',
-            ],
-            'id' => 'id',
-        ],
-        'EMPLOITYPE' => [
-            'order' => 1400,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_EMPLOITYPE',
-            'table_destination' => 'carriere_emploitype',
-            'correspondance' => [
-                'id' => 'id',
-                'code' => 'code',
-                'lib_court' => 'libelle_court',
-                'lib_long' => 'libelle_long',
-                'date_debut' => 'date_debut',
-                'date_fin' => 'date_fin',
-            ],
-            'id' => 'id',
-        ],
-
-        // Structures
-        'STRUCTURE_TYPE' => [
-            'order' => 2000,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_STRUCTURE_TYPE',
-            'table_destination' => 'structure_type',
-            'correspondance' => [
-                'id' => 'id',
-                'code' => 'code',
-                'libelle' => 'libelle',
-                'description' => 'description',
-            ],
-            'id' => 'id',
-        ],
-        'STRUCTURE' => [
-            'order' => 2100,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_STRUCTURE',
-            'table_destination' => 'structure',
-            'correspondance' => [
-                'id' => 'id',
-                'libelle_court' => 'libelle_court',
-                'libelle_long' => 'libelle_long',
-                'code' => 'code',
-                'sigle' => 'sigle',
-                'type_id' => 'type_id',
-                'email_generique' => 'adresse_fonctionnelle',
-                'date_ouverture' => 'd_ouverture',
-                'date_fermeture' => 'd_fermeture',
-                'parent_id' => 'parent_id',
-                'niv2_id' => 'niv2_id',
-            ],
-            'id' => 'id',
-        ],
-        'AGENT' => [
-            'order' => 3000,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_AGENT',
-            'table_destination' => 'agent',
-            'correspondance' => [
-                'c_individu' => 'c_individu',
-                'id' => 'id',
-                'prenom' => 'prenom',
-                'nom_usage' => 'nom_usage',
-                'nom_famille' => 'nom_famille',
-                'sexe' => 'sexe',
-                'date_naissance' => 'date_naissance',
-                'login' => 'login',
-                'email' => 'email',
-                't_contrat_long' => 't_contrat_long'
-            ],
-            'id' => 'c_individu',
-        ],
-        'STRUCTURE_RESPONSABLE' => [
-            'order' => 8200,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_STRUCTURE_RESPONSABLE',
-            'table_destination' => 'structure_responsable',
-            'correspondance' => [
-                'id' => 'id',
-                'structure_id' => 'structure_id',
-                'agent_id' => 'agent_id',
-                'fonction_id' => 'fonction_id',
-                'date_debut' => 'date_debut',
-                'date_fin' => 'date_fin',
-            ],
-            'id' => 'id',
-        ],
-        'STRUCTURE_GESTIONNAIRE' => [
-            'order' => 8200,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_STRUCTURE_GESTIONNAIRE',
-            'table_destination' => 'structure_gestionnaire',
-            'correspondance' => [
-                'id' => 'id',
-                'structure_id' => 'structure_id',
-                'agent_id' => 'agent_id',
-                'fonction_id' => 'fonction_id',
-                'date_debut' => 'date_debut',
-                'date_fin' => 'date_fin',
-            ],
-            'id' => 'id',
-        ],
-        'AGENT_AFFECTATION' => [
-            'order' => 5100,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_AGENT_AFFECTATION',
-            'table_destination' => 'agent_carriere_affectation',
-            'correspondance' => [
-                'id' => 'id',
-                'structure_id' => 'structure_id',
-                'agent_id' => 'agent_id',
-                't_principale' => 't_principale',
-                't_hierarchique' => 't_hierarchique',
-                't_fonctionnelle' => 't_fonctionnelle',
-                'quotite' => 'quotite',
-                'date_debut' => 'date_debut',
-                'date_fin' => 'date_fin',
-            ],
-            'id' => 'id',
-        ],
-        'AGENT_GRADE' => [
-            'order' => 5100,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_AGENT_GRADE',
-            'table_destination' => 'agent_carriere_grade',
-            'correspondance' => [
-                'id' => 'id',
-                'structure_id' => 'structure_id',
-                'agent_id' => 'agent_id',
-                'corps_id' => 'corps_id',
-                'grade_id' => 'grade_id',
-                'correspondance_id' => 'correspondance_id',
-                'emploitype_id' => 'emploitype_id',
-                'date_debut' => 'd_debut',
-                'date_fin' => 'd_fin',
-            ],
-            'id' => 'id',
-        ],
-        'AGENT_ECHELON' => [
-            'order' => 5200,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_AGENT_ECHELON',
-            'table_destination' => 'agent_carriere_echelon',
-            'correspondance' => [
-                'id' => 'id',
-                'agent_id' => 'agent_id',
-                'echelon' => 'echelon',
-                'date_debut' => 'd_debut',
-                'date_fin' => 'd_fin',
-            ],
-            'id' => 'id',
-        ],
-        'AGENT_QUOTITE' => [
-            'order' => 5300,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_AGENT_QUOTITE',
-            'table_destination' => 'agent_carriere_quotite',
-            'correspondance' => [
-                'id' => 'id',
-                'agent_id' => 'agent_id',
-                'quotite' => 'quotite',
-                'date_debut' => 'd_debut',
-                'date_fin' => 'd_fin',
-                'modalite' => 'modalite_de_service',
-            ],
-            'id' => 'id',
-        ],
-        'AGENT_POSTE' => [
-            'order' => 5500,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_AGENT_POSTE',
-            'table_destination' => 'agent_poste',
-            'correspondance' => [
-                'id' => 'id',
-                'agent_id' => 'agent_id',
-                'code_poste' => 'code_poste',
-                'libelle_poste' => 'intitule',
-            ],
-            'id' => 'id',
-        ],
-        'AGENT_STATUT' => [
-            'order' => 5400,
-            'source' => 'OCTOPUS',
-            'orm_source' => 'orm_octopus',
-            'orm_destination' => 'orm_default',
-            'table_source' => 'V_EMC2_AGENT_STATUT',
-            'table_destination' => 'agent_carriere_statut',
-            'correspondance' => [
-                'id' => 'id',
-                'agent_id' => 'agent_id',
-                'structure_id' => 'structure_id',
-                'date_debut' => 'd_debut',
-                'date_fin' => 'd_fin',
-                't_titulaire' => 't_titulaire',
-                't_cdi' => 't_cdi',
-                't_cdd' => 't_cdd',
-                't_administratif' => 't_administratif',
-                't_enseignant' => 't_enseignant',
-                't_chercheur' => 't_chercheur',
-                't_vacataire' => 't_vacataire',
-                't_doctorant' => 't_doctorant',
-                't_detache_in' => 't_detache_in',
-                't_detache_out' => 't_detache_out',
-                't_heberge' => 't_heberge',
-                't_dispo' => 't_dispo',
-                't_emerite' => 't_emerite',
-                't_retraite' => 't_retraite',
-            ],
-            'id' => 'id',
-        ],
-    ],
-];
diff --git a/config/autoload/synchro.local.php.save b/config/autoload/synchro.local.php.save
new file mode 100644
index 0000000000000000000000000000000000000000..3205a368df0561a02147a6f7cca639efab4fa232
--- /dev/null
+++ b/config/autoload/synchro.local.php.save
@@ -0,0 +1,314 @@
+<?php
+
+return [
+    'synchros' => [
+        // Définition des données sur les corps, grades et métiers.
+        'CORRESPONDANCE_TYPE' => [
+            'order' => 1000,
+            'source' => 'OCTOPUS',
+            'orm_source' => 'orm_octopus',
+            'orm_destination' => 'orm_default',
+            'table_source' => 'V_EMC2_CORRESPONDANCE_TYPE',
+            'table_destination' => 'carriere_correspondance_type',
+            'correspondance' => [
+                'ID' => 'id',
+                'CODE' => 'code',
+                'LIBELLE_COURT' => 'libelle_court',
+                'LIBELLE_LONG' => 'libelle_long',
+                'DESCRIPTION' => 'description',
+                'DATE_DEBUT' => 'd_ouverture',
+                'DATE_FIN' => 'd_fermeture',
+            ],
+            'id' => 'ID',
+        ],
+        'CORRESPONDANCE' => [
+            'order' => 1100,
+            'source' => 'OCTOPUS',
+            'orm_source' => 'orm_octopus',
+            'orm_destination' => 'orm_default',
+            'table_source' => 'V_EMC2_CORRESPONDANCE',
+            'table_destination' => 'carriere_correspondance',
+            'correspondance' => [
+                'ID' => 'id',
+                'C_BAP' => 'c_bap',
+                'LIB_COURT' => 'lib_court',
+                'LIB_LONG' => 'lib_long',
+                'TYPE_ID' => 'type_id',
+                'DATE_DEBUT' => 'd_ouverture',
+                'DATE_FIN' => 'd_fermeture',
+            ],
+            'id' => 'ID',
+        ],
+        'CORPS' => [
+            'order' => 1200,
+            'source' => 'OCTOPUS',
+            'orm_source' => 'orm_octopus',
+            'orm_destination' => 'orm_default',
+            'table_source' => 'V_EMC2_CORPS',
+            'table_destination' => 'carriere_corps',
+            'correspondance' => [
+                'ID_ORIG' => 'id',
+                'LIB_COURT' => 'lib_court',
+                'LIB_LONG' => 'lib_long',
+                'CODE' => 'code',
+                'CATEGORIE' => 'categorie',
+                'DATE_DEBUT' => 'd_ouverture',
+                'DATE_FIN' => 'd_fermeture',
+            ],
+            'id' => 'ID_ORIG',
+        ],
+        'GRADE' => [
+            'order' => 1300,
+            'source' => 'OCTOPUS',
+            'orm_source' => 'orm_octopus',
+            'orm_destination' => 'orm_default',
+            'table_source' => 'V_EMC2_GRADE',
+            'table_destination' => 'carriere_grade',
+            'correspondance' => [
+                'ID_ORIG' => 'id',
+                'LIB_COURT' => 'lib_court',
+                'LIB_LONG' => 'lib_long',
+                'CODE' => 'code',
+                'DATE_DEBUT' => 'd_ouverture',
+                'DATE_FIN' => 'd_fermeture',
+            ],
+            'id' => 'ID_ORIG',
+        ],
+        'EMPLOITYPE' => [
+            'order' => 1400,
+            'source' => 'OCTOPUS',
+            'orm_source' => 'orm_octopus',
+            'orm_destination' => 'orm_default',
+            'table_source' => 'V_EMC2_EMPLOITYPE',
+            'table_destination' => 'carriere_emploitype',
+            'correspondance' => [
+                'ID' => 'id',
+                'C_EMPLOITYPE' => 'code',
+                'LIB_COURT' => 'libelle_court',
+                'LIB_LONG' => 'libelle_long',
+                'D_OUVERTURE' => 'date_debut',
+                'D_FERMETURE' => 'date_fin',
+            ],
+            'id' => 'ID',
+        ],
+        // Structures
+        'STRUCTURE_TYPE' => [
+            'order' => 2000,
+            'source' => 'OCTOPUS',
+            'orm_source' => 'orm_octopus',
+            'orm_destination' => 'orm_default',
+            'table_source' => 'STRUCTURE_TYPE',
+            'table_destination' => 'structure_type',
+            'correspondance' => [
+                'ID' => 'id',
+                'CODE' => 'code',
+                'LIBELLE' => 'libelle',
+                'DESCRIPTION' => 'description',
+            ],
+            'id' => 'ID',
+        ],
+        'STRUCTURE' => [
+            'order' => 2100,
+            'source' => 'OCTOPUS',
+            'orm_source' => 'orm_octopus',
+            'orm_destination' => 'orm_default',
+            'table_source' => 'V_EMC2_STRUCTURE',
+            'table_destination' => 'structure',
+            'correspondance' => [
+                'ID' => 'id',
+                'LIBELLE_COURT' => 'libelle_court',
+                'LIBELLE_LONG' => 'libelle_long',
+                'CODE' => 'code',
+                'SIGLE' => 'sigle',
+                'TYPE_ID' => 'type_id',
+                'EMAIL_GENERIQUE' => 'adresse_fonctionnelle',
+                'DATE_OUVERTURE' => 'd_ouverture',
+                'DATE_FERMETURE' => 'd_fermeture',
+                'PARENT_ID' => 'parent_id',
+                'NIV2_ID' => 'niv2_id',
+            ],
+            'id' => 'ID',
+        ],
+        // Agent et tout çà
+        'AGENT' => [
+            'order' => 3000,
+            'source' => 'OCTOPUS',
+            'orm_source' => 'orm_octopus',
+            'orm_destination' => 'orm_default',
+            'table_source' => 'V_MESFORMATIONS_AGENT',
+            'table_destination' => 'agent',
+            'correspondance' => [
+                'C_INDIVIDU' => 'c_individu',
+                'ID' => 'id',
+                'PRENOM' => 'prenom',
+                'NOM_USAGE' => 'nom_usage',
+                'NOM_FAMILLE' => 'nom_famille',
+                'SEXE' => 'sexe',
+                'DATE_NAISSANCE' => 'date_naissance',
+                'LOGIN' => 'login',
+                'EMAIL' => 'email',
+            ],
+            'id' => 'C_INDIVIDU',
+            'separator' => 'SEXE',
+        ],
+        'STRUCTURE_RESPONSABLE' => [
+            'order' => 8200,
+            'source' => 'OCTOPUS',
+            'orm_source' => 'orm_octopus',
+            'orm_destination' => 'orm_default',
+            'table_source' => 'V_EMC2_STRUCTURE_RESPONSABLE',
+            'table_destination' => 'structure_responsable',
+            'correspondance' => [
+                'ID' => 'id',
+                'STRUCTURE_ID' => 'structure_id',
+                'AGENT_ID' => 'agent_id',
+                'FONCTION_ID' => 'fonction_id',
+                'DATE_DEBUT' => 'date_debut',
+                'DATE_FIN' => 'date_fin',
+            ],
+            'id' => 'ID',
+        ],
+//        'STRUCTURE_GESTIONNAIRE' => [
+//            'order' => 8200,
+//            'source' => 'OCTOPUS',
+//            'orm_source' => 'orm_octopus',
+//            'orm_destination' => 'orm_default',
+//            'table_source' => 'V_EMC2_STRUCTURE_GESTIONNAIRE',
+//            'table_destination' => 'structure_gestionnaire',
+//            'correspondance' => [
+//                'id' => 'id',
+//                'structure_id' => 'structure_id',
+//                'agent_id' => 'agent_id',
+//                'fonction_id' => 'fonction_id',
+//                'date_debut' => 'date_debut',
+//                'date_fin' => 'date_fin',
+//            ],
+//            'id' => 'id',
+//        ],
+        'AGENT_AFFECTATION' => [
+            'order' => 5100,
+            'source' => 'OCTOPUS',
+            'orm_source' => 'orm_octopus',
+            'orm_destination' => 'orm_default',
+            'table_source' => 'V_MESFORMATIONS_AGENT_AFFECTATION',
+            'table_destination' => 'agent_carriere_affectation',
+            'correspondance' => [
+                'AFFECTATION_ID' => 'id',
+                'STRUCTURE_ID' => 'structure_id',
+                'AGENT_ID' => 'agent_id',
+                'T_PRINCIPALE' => 't_principale',
+                'T_HIERARCHIQUE' => 't_hierarchique',
+                'T_FONCTIONNELLE' => 't_fonctionnelle',
+                'QUOTITE' => 'quotite',
+                'DATE_DEBUT' => 'date_debut',
+                'DATE_FIN' => 'date_fin',
+            ],
+            'id' => 'AFFECTATION_ID',
+            'separator' => 'STRUCTURE_ID',
+        ],
+        'AGENT_GRADE' => [
+            'order' => 5100,
+            'source' => 'OCTOPUS',
+            'orm_source' => 'orm_octopus',
+            'orm_destination' => 'orm_default',
+            'table_source' => 'V_MESFORMATIONS_AGENT_GRADE',
+            'table_destination' => 'agent_carriere_grade',
+            'correspondance' => [
+                'ID' => 'id',
+                'STRUCTURE_ID' => 'structure_id',
+                'AGENT_ID' => 'agent_id',
+                'CORPS_ID' => 'corps_id',
+                'GRADE_ID' => 'grade_id',
+                'BAP_ID' => 'correspondance_id',
+                'EMPLOITYPE_ID' => 'emploitype_id',
+                'DATE_DEBUT' => 'd_debut',
+                'DATE_FIN' => 'd_fin',
+            ],
+            'id' => 'ID',
+            'separator' => 'STRUCTURE_ID'
+        ],
+        'AGENT_QUOTITE' => [
+            'order' => 5300,
+            'source' => 'OCTOPUS',
+            'orm_source' => 'orm_octopus',
+            'orm_destination' => 'orm_default',
+            'table_source' => 'V_MESFORMATIONS_AGENT_QUOTITE',
+            'table_destination' => 'agent_carriere_quotite',
+            'correspondance' => [
+                'ID_ORIG' => 'id',
+                'AGENT_ID' => 'agent_id',
+                'QUOTITE' => 'quotite',
+                'DATE_DEBUT' => 'd_debut',
+                'DATE_FIN' => 'd_fin',
+                //'MODALITE' => 'modalite_de_service',
+            ],
+            'id' => 'ID_ORIG',
+            'separator' => 'QUOTITE'
+        ],
+        'AGENT_STATUT' => [
+            'order' => 5400,
+            'source' => 'OCTOPUS',
+            'orm_source' => 'orm_octopus',
+            'orm_destination' => 'orm_default',
+            'table_source' => 'V_MESFORMATIONS_AGENT_STATUT',
+            'table_destination' => 'agent_carriere_statut',
+            'correspondance' => [
+                'ID_ORIG' => 'id',
+                'AGENT_ID' => 'agent_id',
+                'STRUCTURE_ID' => 'structure_id',
+                'DATE_DEBUT' => 'd_debut',
+                'DATE_FIN' => 'd_fin',
+                'T_TITULAIRE' => 't_titulaire',
+                'T_CDI' => 't_cdi',
+                'T_CDD' => 't_cdd',
+                'T_ADMINISTRATIF' => 't_administratif',
+                'T_ENSEIGNANT' => 't_enseignant',
+                'T_CHERCHEUR' => 't_chercheur',
+                'T_VACATAIRE' => 't_vacataire',
+                'T_DOCTORANT' => 't_doctorant',
+                'T_DETACHE_IN' => 't_detache_in',
+                'T_DETACHE_OUT' => 't_detache_out',
+                'T_HEBERGE' => 't_heberge',
+                'T_DISPO' => 't_dispo',
+                'T_EMERITE' => 't_emerite',
+                'T_RETRAITE' => 't_retraite',
+            ],
+            'id' => 'ID_ORIG',
+            'separator' => 'STRUCTURE_ID',
+        ],
+        'AGENT_ECHELON' => [
+            'order' => 5200,
+            'source' => 'OCTOPUS',
+            'orm_source' => 'orm_octopus',
+            'orm_destination' => 'orm_default',
+            'table_source' => 'V_MESFORMATIONS_AGENT_ECHELON',
+            'table_destination' => 'agent_carriere_echelon',
+            'correspondance' => [
+                'ID_ORIG' => 'id',
+                'AGENT_ID' => 'agent_id',
+                'ECHELON' => 'echelon',
+                'DATE_DEBUT' => 'd_debut',
+                'DATE_FIN' => 'd_fin',
+            ],
+            'id' => 'ID_ORIG',
+            'separator' => 'ECHELON'
+        ],
+        'AGENT_VALIDATEUR' => [
+            'order' => 5200,
+            'source' => 'OCTOPUS',
+            'orm_source' => 'orm_octopus',
+            'orm_destination' => 'orm_default',
+            'table_source' => 'MV_MESFORMATIONS_VALIDEUR',
+            'table_destination' => 'agent_hierarchie_validateur',
+            'correspondance' => [
+                'ID' => 'id',
+                'AGENT_ID' => 'agent_id',
+                'VALIDEUR_ID' => 'validateur_id',
+                'DATE_DEBUT' => 'date_debut',
+                'DATE_FIN' => 'date_fin',
+            ],
+            'id' => 'ID',
+//            'separator' => 'RESPONSABLE_ID'
+        ],
+    ],
+];
diff --git a/config/autoload/unicaen-app.local.php.dist b/config/autoload/unicaen-app.local.php.dist
index 65c307cb9a0bb8e8d8aeabdf3b460a0f3e404e96..05e4c522168f0901de355c1668b727ad0b6b6567 100644
--- a/config/autoload/unicaen-app.local.php.dist
+++ b/config/autoload/unicaen-app.local.php.dist
@@ -5,7 +5,7 @@
  * If you have a ./config/autoload/ directory set up for your project, 
  * drop this config file in it and change the values as you wish.
  */
-return array(
+return [
     'navigation'   => [
         'default' => [
             'home' => [
@@ -41,29 +41,12 @@ return array(
     ],
 
     'unicaen-app' => [
-
-        'app_infos' => [
-            'contact' => ['mail' => "assistance-emc2@unicaen.fr", /*'tel' => "01 02 03 04 05"*/],
-        ],
-
-        /**
-         * Mode maintenance (application indisponible)
-         */
+        /** Mode maintenance (application indisponible) **/
         'maintenance' => [
-            // activation (true: activé, false: désactivé)
             'enable' => false,
-            // liste blanche des adresses IP clientes non concernées
             'white_list' => [
 //                ['127.0.0.1'],   // localhost
-//                ['10.60.11.88'], // Bertrand
             ],
         ],
     ],
-    'asset_manager' => array(
-//        'caching' => array( // https://github.com/RWOverdijk/AssetManager/wiki/Caching
-//            'default' => array(
-//                'cache' => 'Apc',
-//            ),
-//        ),
-    ),
-);
\ No newline at end of file
+];
\ No newline at end of file
diff --git a/config/autoload/unicaen-authentification.local.php.dist b/config/autoload/unicaen-authentification.local.php.dist
index 49d6f424b15f029ecf97d9a2a4180bc1703ceaa0..93261f9d203ff950757e978ce2d9cb954ed633f4 100644
--- a/config/autoload/unicaen-authentification.local.php.dist
+++ b/config/autoload/unicaen-authentification.local.php.dist
@@ -8,7 +8,7 @@ return [
                 'default' => [
                     'params' => [
                         'hostname' => 'cas.XXXX.fr',
-                        'port'     => XXX,
+                        'port'     => 'XXX',
                         'version'  => "2.0",
                         'uri'      => "",
                         'debug'    => false,
diff --git a/config/autoload/unicaen-bdd-admin.global.php b/config/autoload/unicaen-bdd-admin.global.php
index 2b9854ce3f1cc0009efc71e070dc0a2be249f0be..d23c64e35a4580917ea57be30c48fb6e63be3c39 100644
--- a/config/autoload/unicaen-bdd-admin.global.php
+++ b/config/autoload/unicaen-bdd-admin.global.php
@@ -1,20 +1,284 @@
 <?php
 
-use Unicaen\BddAdmin\Bdd;
+/*
+ * Fichier à copier/coller dans config/autoload/unicaen-bddadmin.global.php
+ *
+ * Les options commentées ici sont placées pour illustrer les valeurs par défaut
+ * A décommenter et modifier le cas échéant
+ */
 
 
-$config = [
-    'bdd-admin' => [
+return [
+    'unicaen-bddadmin' => [
+        'ddl' => [
+            /* Répertoire où placer votre DDL */
+            'dir'                    => 'database/ddl',
 
-        /** cela eventuellement en local ... */
-        /* Facultatif, permet de spécifier une fois pour toutes le répertoire où sera renseignée la DDL de votre BDD */
-        Bdd::OPTION_DDL_DIR => getcwd() . '/database/ddl',
-        /* Facultatif, spécifie le répertoire où seront stockés vos scripts de migration si vous en avez */
-        Bdd::OPTION_MIGRATION_DIR => getcwd() . '/database/migration/',
-        /* Facultatif, permet de personnaliser l'ordonnancement des colonnes dans les tables */
-        Bdd::OPTION_COLUMNS_POSITIONS_FILE => getcwd() . '/database/ddl_columns_pos.php',
-    ],
-];
+            /* Nom par défaut du fichier de sauvegarde des positionnements de colonnes */
+            'columns_positions_file' => 'database/ddl_columns_pos.php',
+
+            /* array général des filtres de DDL à appliquer afin d'ignorer ou bien de forcer la prise en compte de certains objets lors de la mise à jour
+             * le format d'array doit respecter la spécification des DdlFilters
+             * Ce tableau des filtres est utilisé aussi bien en MAJ DDL qu'en MAJ BDD
+             */
+            'filters'                => [],
+
+            /* array des filtres dédié à la mise à jour de la base de données à partir de la DDL
+             * le format d'array doit respecter la spécification des DdlFilters
+             * pour les update-bdd, le mode EXPLICIT est forcé : c'est à dire que ce qui n'est pas spécifié dans le filtre n'existe pas
+             * le filtre est initialisé avec les objets déjà présents en DDL
+             */
+            'update-bdd-filters'     => [],
+
+            /* array des filtres dédié à la mise à jour de la DDL, afin d'éviter que ne se retrouvent en DDL certains objets présents en base
+             * le format d'array doit respecter la spécification des DdlFilters
+             */
+            'update-ddl-filters'     => [],
+        ],
+
+        'data'      => [
+            'config'  => [
+                //UNICAEN UTILISATEUR
+                'unicaen_utilisateur_user' => [
+                    'actions' => ['install'],
+                    'key' => 'username',
+                    'options' => [],
+                ],
+                'unicaen_utilisateur_role' => [
+                    'actions' => ['install', 'update'],
+                    'key' => 'role_id',
+                    'options' => [],
+                ],
+                'unicaen_utilisateur_role_linker' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['user_id', 'role_id'],
+                    'options' => [
+                        'columns' => [
+                            'role_id' => ['transformer' => 'select id from unicaen_utilisateur_role where role_id = %s'],
+                            'user_id' => ['transformer' => 'select id from unicaen_utilisateur_user where username = %s'],
+                        ],
+                    ],
+                ],
+                //UNICAEN PRIVILEGE
+                'unicaen_privilege_categorie' => [
+                    'actions' => ['install', 'update'],
+                    'key' => 'code',
+                    'options' => [],
+                ],
+                'unicaen_privilege_privilege' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['categorie_id' ,'code'],
+                    'options' => [
+                        'columns' => [
+                            'categorie_id' => ['transformer' => 'select id from unicaen_privilege_categorie where code = %s'],
+                        ],
+                    ],
+                ],
+                'unicaen_privilege_privilege_role_linker' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['role_id', 'privilege_id'],
+                    'options' => [
+                        'columns' => [
+                            'role_id' => ['transformer' => 'select id from unicaen_utilisateur_role where role_id = %s'],
+                            'privilege_id' => ['transformer' => 'select id from unicaen_privilege_privilege where code = %s'],
+                        ],
+                    ],
+                ],
+                //UNICAEN PARAMETRE
+                'unicaen_parametre_categorie' => [
+                    'actions' => ['install', 'update'],
+                    'key' => 'code',
+                    'options' => [],
+                ],
+                'unicaen_parametre_parametre' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['categorie_id' ,'code'],
+                    'options' => [
+                        'columns' => [
+                            'categorie_id' => ['transformer' => 'select id from unicaen_parametre_categorie where code = %s'],
+                        ],
+                    ],
+                ],
+                //UNICAEN ETAT
+                'unicaen_etat_categorie' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['code'],
+                    'options' => [],
+                ],
+                'unicaen_etat_type' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['categorie_id','code'],
+                    'options' => [
+                        'columns' => [
+                            'categorie_id' => ['transformer' => 'select id from unicaen_etat_categorie where code = %s'],
+                        ],
+                    ],
+                ],
+                //UNICAEN VALIDATION
+                'unicaen_validation_type' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['code'],
+                    'options' => [],
+                ],
+                //UNICAEN EVENEMENT
+                'unicaen_evenement_etat' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['code'],
+                    'options' => [],
+                ],
+                'unicaen_evenement_type' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['code'],
+                    'options' => [],
+                ],
+                //UNICAEN ENQUETE
+                'unicaen_enquete_enquete' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['code'],
+                    'options' => [],
+                ],
+                'unicaen_enquete_groupe' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['enquete_id','code'],
+                    'options' => [
+                        'columns' => [
+                            'enquete_id' => ['transformer' => 'select id from public.unicaen_enquete_enquete where code = %s'],
+                        ],
+                    ],
+                ],
+                'unicaen_enquete_question' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['enquete_id','groupe_id', 'libelle'],
+                    'options' => [
+                        'columns' => [
+                            'enquete_id' => ['transformer' => 'select id from public.unicaen_enquete_enquete where code = %s'],
+                            'groupe_id' => ['transformer' => 'select id from public.unicaen_enquete_groupe where code = %s'],
+                        ],
+                    ],
+                ],
+                //UNICAEN RENDERER
+                'unicaen_renderer_macro' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['code'],
+                    'options' => [],
+                ],
+                'unicaen_renderer_template' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['code'],
+                    'options' => [],
+                ],
+                //fichier nature
+                'fichier_nature' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['code'],
+                    'options' => [],
+                ],
+                //formation session type // todo: ajouter un code !!!
+                'formation_session_type' => [
+                    'actions' => ['install', 'update'],
+                    'key' => ['libelle'],
+                    'options' => [],
+                ],
+            ],
+            'sources' => [
+                'database/sources/unicaen_utilisateur_user.php',
+                'database/sources/unicaen_utilisateur_role.php',
+                'database/sources/unicaen_utilisateur_role_linker.php',
+                'database/sources/unicaen_privilege_categorie.php',
+                'database/sources/unicaen_privilege_privilege.php',
+                'database/sources/unicaen_privilege_privilege_role_linker.php',
+                'database/sources/unicaen_parametre_categorie.php',
+                'database/sources/unicaen_parametre_parametre.php',
+                'database/sources/unicaen_etat_categorie.php',
+                'database/sources/unicaen_etat_type.php',
+                'database/sources/unicaen_validation_type.php',
+                'database/sources/unicaen_evenement_type.php',
+                'database/sources/unicaen_evenement_etat.php',
+                'database/sources/unicaen_enquete_enquete.php',
+                'database/sources/unicaen_enquete_groupe.php',
+                'database/sources/unicaen_enquete_question.php',
+                'database/sources/unicaen_renderer_macro.php',
+                'database/sources/unicaen_renderer_template.php',
+                'database/sources/fichier_nature.php',
+                'database/sources/formation_session_type.php',
+            ],
+        ],
+        'migration' => [],
+
+        /* Nom des colonnes servant de clé primaire dans vos tables, généralement 'id' pour la compatibilité avec Doctrine
+         * Si des tables n'ont pas de colonne 'id' ou personnalisé, le système fonctionnera sans utiliser les séquences pour initialiser la clé primaire
+         */
+        //'id_column' => 'id',
 
+        'histo' => [
+            /* ID par défaut de l'utilisateur utilisé par le DataManager pour insérer ou modifier les données
+             * Peut être fourni ici ou bien dans une factory adaptée en utilisant la méthode suivante :
+             *
+             * $config = [...config de bddAdmin...];
+             * $bdd = new Unicaen\BddAdmin\Bdd($config);
+             *
+             * $monUsername = 'mon_username';
+             * $monId = $bdd->selectOne('SELECT id FROM utilisateur WHERE username=:username', ['username' => $monUsername], 'id');
+             * $bdd->setHistoUserId($monId);
+             *
+             * Si user_id est NULL, cette fonctionnalité d'historisation sera désactivée
+             */
+            'user_id' => 0,
 
-return $config;
\ No newline at end of file
+            /* Noms des colonnes utilisées pour gérer les historiques
+             * Attention : tous les noms doivent être renseignés ou alors tous mis à NULL si pas de gestion d'historiques
+             * Se base par défaut sur ce qui est préconisé pour UnicaenApp\Entity\HistoriqueAwareInterface
+             *
+             * Si vos tables ne possèdent pas l'ensemble de ces colonnes, la gestion de l'historique ne sera pas appliquée sur celles-ci
+             */
+//            'histo_creation_column'        => 'histo_creation',
+//            'histo_createur_id_column'     => 'histo_createur_id',
+            //'histo_modificateur_id_column' => 'histo_modificateur_id',
+            //'histo_destructeur_id_column'  => 'histo_destructeur_id',
+            //'histo_destruction_column'     => 'histo_destruction',
+            //'histo_modification_column'    => 'histo_modification',
+        ],
+
+        'import'             => [
+            /* Compatibilité avec un système d'import de données
+             * ID de la source par défaut utilisée par le DataManager pour insérer une ligne d'une table synchronisable
+             * Peut être fourni ici ou bien dans une factory adaptée en utilisant la méthode suivante :
+             *
+             * $config = [...config de bddAdmin...];
+             * $bdd = new Unicaen\BddAdmin\Bdd($config);
+             *
+             * $code = 'ma_source';
+             * $monId = $bdd->selectOne('SELECT id FROM source WHERE code=:code', ['code' => $code], 'id');
+             * $bdd->setSourceId($monId);
+             *
+             * Si source_id est NULL, cette fonctionnalité d'initialisation de sources sera désactivée
+             *
+             */
+            //'source_id'          => null,
+
+            /* Noms des colonnes utilisées pour gérer les données liées à l'import depuis d'autres logiciels
+             * Attention : tous les noms doivent être renseignés ou alors tous mis à NULL si pas de gestion d'import
+             *
+             * Si vos tables ne possèdent pas l'ensemble de ces colonnes, la gestion des colonnes d'import ne sera pas appliquée sur celles-ci
+             */
+            //'source_id_column'   => 'source_id',
+            //'source_code_column' => 'source_code',
+        ],
+
+        /* Connexion à utiliser par défaut, nom à sélectionner parmi la liste des connexions disponibles */
+        'current_connection' => 'default',
+
+        'connection' => [
+            'default' => [
+                'driver' => 'Postgresql',
+                'charset' => 'utf8',
+                'port' => DB_PORT,
+                'host' => DB_HOSTNAME,
+
+                'dbname' => DB_NAME,
+                'user' => DB_USERNAME,
+                'password' => DB_PASSWORD,
+            ],
+        ],
+    ],
+];
\ No newline at end of file
diff --git a/config/autoload/unicaen-indicateur.global.php b/config/autoload/unicaen-indicateur.global.php
index 63ba4438476f8d2b468d16c224c65aa9742d5173..b7cbe103667c57802921d1112bb4e93eeb3a21ea 100644
--- a/config/autoload/unicaen-indicateur.global.php
+++ b/config/autoload/unicaen-indicateur.global.php
@@ -1,5 +1,6 @@
 <?php
 
+use Application\Service\Perimetre\PerimetreService;
 use UnicaenIndicateur\Controller\IndexController;
 use UnicaenIndicateur\Controller\IndicateurController;
 use UnicaenPrivilege\Guard\PrivilegeController;
@@ -31,4 +32,14 @@ return [
             ],
         ],
     ],
+
+    /** Service en charge du calcul des périmètres ********************************************************************/
+    'unicaen-indicateur' => [
+        'perimetreService' => PerimetreService::class,
+
+        'perimetres' => [
+            'structure' => "Périmètre restraignant les résultats à respecter les structures d'affectation (perimetre_structure_id)",
+            'role' => "Périmètre restraignant les résultats à respecter un rôle (perimetre_role_id)",
+        ],
+    ],
 ];
\ No newline at end of file
diff --git a/config/autoload/unicaen-mail.local.php.dist b/config/autoload/unicaen-mail.local.php.dist
index d1222900d1c054b95b5f26497eb31dc375c5a60c..07512a37d145912a8bc1022d6b913dbe367063ee 100644
--- a/config/autoload/unicaen-mail.local.php.dist
+++ b/config/autoload/unicaen-mail.local.php.dist
@@ -25,21 +25,20 @@ return [
                 'redirect_to' => [ 'PPP.NNN@XXX.fr', ],
                 'do_not_send' => false,
                 'redirect' => true,
-                'subject_prefix' => 'EMC2-test',
-                'from_name' => 'EMC2-test | Emploi, Mobilité, Carrière, Compétence',
-                'from_email' => 'assistance-emc2@XXX.fr',
+                'subject_prefix' => 'Mes Formations',
+                'from_name' => 'Mes Formations | Application de gestion des formations du personnel',
+                'from_email' => 'XXXX',
 
             ],
             'Formation' => [
                 'redirect_to' => [ 'PPP.NNN@XXX.fr', ],
                 'do_not_send' => false,
                 'redirect' => true,
-                'subject_prefix' => 'Mes formations (test)',
-                'from_name' => 'mes-formations.unicaen.fr | Application de gestion des formations du personnel',
-                'from_email' => 'drh.formations@unicaen.fr',
+                'subject_prefix' => 'Mes Formations',
+                'from_name' => 'Mes Formations | Application de gestion des formations du personnel',
+                'from_email' => 'XXXX',
             ]
         ]
     ],
 
-    'server_url' => 'http://emc2.unicaen.fr',
 ];
\ No newline at end of file
diff --git a/connecteur.md b/connecteur.md
new file mode 100644
index 0000000000000000000000000000000000000000..3c88023fda26ce571942b250dbfb546ed94db508
--- /dev/null
+++ b/connecteur.md
@@ -0,0 +1,662 @@
+Connecteurs
+====
+
+**Mes Formations** est alimenté via des synchronisations exploitant des données exposées dans le SI de l'établissement
+qui l'installe.
+Ces données sont présentés :
+- soient depuis les outils de RH (par exemple *SIHAM*, ...)
+- soient depuis un concentrateur de données (par exemple *OCTOPUS* à Caen)
+
+Nous aborderons tout d'abord la composition des vues puis le moyen de déclencher ces synchronisations et finalement
+comment adapter les vues et la configuration de la synchronisation.
+
+----
+
+Vues
+=====
+
+On retrouve dans quatres catégories des vues :
+
+1. V_MESFORMATIONS_REFERENTIEL : pointant vers le référentiel RH décrivant les emplois, corps...
+2. V_MESFORMATIONS_STRUCTURE : décrivant les structures de l'établissement et leur arborescence
+3. V_MESFORMATIONS_AGENT : référençant les agents et leur situation
+4. V_MESFORMATIONS_HIERARCHIE : référençant les chaine de responsabilités
+
+## Les vues décrivant le référentiel RH
+
+Ces vues peuvent être partagées avec celles décrites pour l'application EMC2.
+
+### V_MESFORMATIONS_CORRESPONDANCE_TYPE
+
+Cette vue présente la liste des types de correspondance utiliser par l'établissement : BAP, CNU, ...
+
+| Nom de la colonne | Type          | Obligatoire | Commentaire   |
+|-------------------|---------------|-------------|---------------|
+| ID                | integer       | Oui         | Clef primaire |
+| CODE              | varchar(64)   | Oui         |               |
+| LIBELLE_COURT     | varchar(256)  | Oui         |               |
+| LIBELLE_LONG      | varchar(1024) | Oui         |               |
+| DESCRIPTION       | text          | Oui         |               |
+| DATE_DEBUT        | timestamp     | Oui         |               |
+| DATE_FIN          | timestamp     | Non         |               |
+
+Exemple depuis l'instance de démonstration.
+
+```csv
+ 'id';'code';'libelle_court';'libelle_long';'description';'date_debut';'date_fin'
+1;BAP;BAP;branches d'activité professionnelle;Le truc standard des ITRF/BIATSS;1983-09-13 09:12:08.000000;
+2;BIB;BIB;Bibliothèque;Un truc pour les personnels des BU;1883-09-13 09:13:00.000000;
+```
+
+_Note_ :
+
+- Si la date de début est inconnue initialisée celle-ci avec une date suffisamment dans le passé.
+- Les dates ne semblent pas avoir un rôle majeur et devraient pour voir être retirée à l'avenir.
+
+### V_MESFORMATIONS_CORRESPONDANCE
+
+Cette vue décrit les correspondances utilisées dans l'établissement.
+
+| Nom de la colonne | Type          | Obligatoire | Commentaire                                        |
+|-------------------|---------------|-------------|----------------------------------------------------|
+| ID                | integer       | Oui         | Clef primaire                                      |
+| CODE              | varchar(64)   | Oui         |                                                    |
+| LIBELLE_COURT     | varchar(256)  | Oui         |                                                    |
+| LIBELLE_LONG      | varchar(1024) | Oui         |                                                    |
+| TYPE_ID           | integer       | Oui         | Clef étrangère V_MESFORMATIONS_CORRESPONDANCE_TYPE |
+| DATE_DEBUT        | timestamp     | Oui         |                                                    |
+| DATE_FIN          | timestamp     | Non         |                                                    |
+
+Exemple depuis l'instance de démonstration.
+
+```csv
+ 'id';'code';'type_id';'libelle_court';'libelle_long';'date_debut';'date_fin'
+1;BAP_A;1;SVTE;SCIENCES VIVANT, TERRE ET ENVIRONNEMENT;2000-01-01;
+2;BAP_B;1;SCSCM;SCIENCES CHIMIQUES ET DES MATÉRIAUX;2000-01-01;
+3;BAP_C;1;SIIS;SCIENCES INGÉNIEUR INSTRUMENTAT. SCIENT;2000-01-01;
+```
+
+_Note_ :
+
+- Si la date de début est inconnue initialisée celle-ci avec une date suffisamment dans le passé.
+
+### V_MESFORMATIONS_CORPS
+
+La liste des corps
+
+| Nom de la colonne | Type          | Obligatoire | Commentaire   |
+|-------------------|---------------|-------------|---------------|
+| ID                | integer       | Oui         | Clef primaire |
+| CODE              | varchar(64)   | Oui         |               |
+| LIBELLE_COURT     | varchar(256)  | Oui         |               |
+| LIBELLE_LONG      | varchar(1024) | Oui         |               |
+| CATEGORIE         | varchar(256)  | Oui         |               |
+| DATE_DEBUT        | timestamp     | Oui         |               |
+| DATE_FIN          | timestamp     | Non         |               |
+
+Exemple depuis l'instance de démonstration.
+
+```csv
+'id';'code';'libelle_court';'libelle_long';'categorie';'date_debut';'date_fin'
+1;051;AAE;ATTACHE D'ADMINISTRATION DE L'ETAT;A;2013-10-02;
+2;942;MAG;MAGASINIER DES BIBLIOTHEQUES;C;2017-01-01;
+3;057;ADJAENES;ADJ. ADM DES ADMINISTRATIONS DE L'ETAT;C;2017-01-01;
+4;943;ATEC;ADJOINT TECHNIQUE DES ETAB.ENS.;C;2017-01-01;
+```
+
+_Note_ :
+- Si la date de début est inconnue initialisée celle-ci avec une date suffisamment dans le passé.
+
+### V_MESFORMATIONS_GRADE
+
+La liste des grades
+
+| Nom de la colonne | Type          | Obligatoire | Commentaire   |
+|-------------------|---------------|-------------|---------------|
+| ID                | integer       | Oui         | Clef primaire |
+| CODE              | varchar(64)   | Oui         |               |
+| LIBELLE_COURT     | varchar(256)  | Oui         |               |
+| LIBELLE_LONG      | varchar(1024) | Oui         |               |
+| DATE_DEBUT        | timestamp     | Oui         |               |
+| DATE_FIN          | timestamp     | Non         |               |
+
+Exemple depuis l'instance de démonstration.
+
+```csv
+'id';'code';'libelle_court';'libelle_long';'date_debut';'date_fin'
+1;1021;I.G.E.N.;INSPECTEUR GENERAL DE L'EDUCAT.NATIONALE;;
+2;1011;INSP.ADM.;INSPECTEUR D ADMINISTRATION;;
+3;5631;CPE CL N;CONSEILLER PRINC.D'EDUCATION CL.NORMALE;1970-01-01;
+4;5632;CPE H CL;CONSEILLER PRINC. D'EDUCATION HORS-CLAS.;1989-09-01;
+5;2021;SECR. ETAT;SECRETAIRE D'ETAT;;
+```
+
+_Note_ :
+- Si la date de début est inconnue initialisée celle-ci avec une date suffisamment dans le passé.
+
+### V_MESFORMATIONS_EMPLOITYPE
+
+La liste des grades
+
+| Nom de la colonne | Type          | Obligatoire | Commentaire   |
+|-------------------|---------------|-------------|---------------|
+| ID                | integer       | Oui         | Clef primaire |
+| CODE              | varchar(64)   | Oui         |               |
+| LIBELLE_COURT     | varchar(256)  | Oui         |               |
+| LIBELLE_LONG      | varchar(1024) | Oui         |               |
+| DATE_DEBUT        | timestamp     | Oui         |               |
+| DATE_FIN          | timestamp     | Non         |               |
+
+Exemple depuis l'instance de démonstration.
+
+```csv
+'id';'code';'libelle_court';'libelle_long';'date_debut';'date_fin'
+1;E2A41;E_E2A41;Administrateur-trice des systèmes d'information;2023-09-01;
+2;A1C46;E_A1C46;Ingénieur-e de recherche en expérimentation;2023-09-01;
+3;C2C46;E_C2C46;Ingénieur-e électrotechnicien-ne;2023-09-13;
+```
+
+_Note_ :
+- Si la date de début est inconnue initialisée celle-ci avec une date suffisamment dans le passé.
+
+## Les vues décrivant l'arborescence des structures
+
+Ces vues peuvent être partagées avec celles décrites pour l'application EMC2.
+
+### V_STRUCTURE_TYPE
+
+Décrit les types de structure
+
+| Nom de la colonne | Type         | Obligatoire | Commentaire   |
+|-------------------|--------------|-------------|---------------|
+| ID                | integer      | Oui         | Clef primaire |
+| CODE              | varchar(64)  | Oui         |               |
+| LIBELLE           | varchar(256) | Oui         |               |
+| DESCRIPTION       | text         | Non         |               |
+
+Exemple depuis l'instance de démonstration.
+
+```csv
+'id';'code';'libelle';'description'
+1;ETAB;Établissement;Établissement
+2;COMP;Composante;Composante
+3;SREC;Structure de recherche;Structure de recherche
+4;SCEN;Service central;Service central
+```
+
+_Note_ :
+- Probablement plus d'utilité, si ce n'est à des fin d'affichage et de filtrage.
+- Si la date de début est inconnue initialisée celle-ci avec une date suffisamment dans le passé.
+
+### V_MESFORMATIONS_STRUCTURE
+
+Décrit la liste des structures
+
+| Nom de la colonne | Type          | Obligatoire | Commentaire                                                |
+|-------------------|---------------|-------------|------------------------------------------------------------|
+| ID                | integer       | Oui         | Clef primaire                                              |
+| TYPE_ID           | integer       | Oui         | Clef étrangère référencant V_MESFORMATIONS_STRUCTURE_TYPE  |
+| CODE              | varchar(64)   | Oui         |                                                            |
+| SIGLE             | varchar(64)   | Non         |                                                            |
+| LIBELLE_COURT     | varchar(256)  | Oui         |                                                            |
+| LIBELLE_LONG      | varchar(1024) | Oui         |                                                            |
+| EMAIL_GENERIQUE   | varchar(1024) | Non         |                                                            |
+| NIV2_ID           | integer       | Oui         | Clef auto-référencée référencant V_MESFORMATIONS_STRUCTURE |
+| PARENT_ID         | integer       | Oui         | Clef auto-référencée référencant V_MESFORMATIONS_STRUCTURE |
+| DATE_OUVERTURE    | timestamp     | Oui         |                                                            |
+| DATE_FERMETURE    | timestamp     | Non         |                                                            |
+
+Exemple depuis l'instance de démonstration.
+
+```csv
+'id';'code';'libelle_court';'libelle_long';'sigle';'type_id';'email_generique';'date_ouverture';'date_fermeture';'parent_id';'niv2_id'
+11;DIRCOM;DirCom;Direction de la communication;COM;4;;;;6;11
+12;COM'Web;DirCom Web;Pôle Web;COM'Web;4;;;;11;11
+13;COM'Eve;DirCom Eve;Pôle Événementiel;COM'Eve;4;;;;11;11
+```
+
+_Note_ :
+- Beaucoup des données ne doivent servir qu'à des fin d'affichage et doivent pouvoir être retirée. Travail restant à
+  faire.
+- Si la date de début est inconnue initialisée celle-ci avec une date suffisamment dans le passé.
+
+## Les vues décrivant les agents et leur situation
+
+Ces vues peuvent être partagées avec celles décrites pour l'application EMC2.
+
+**Attention** les colonnes t_****** sont des témoins ne pouvant recevoir que deux valeurs 'O' pour Oui et 'N' pour Non.
+
+### V_MESFORMATIONS_AGENT
+
+Identification des agent·es (liste des personnes encadrante ou pouvant suivre des formations)
+
+| Nom de la colonne | Type          | Obligatoire | Commentaire   |
+|-------------------|---------------|-------------|---------------|
+| ID                | varchar(256)  | Oui         | Clef primaire |
+| PRENOM            | varchar(1024) | Oui         |               |
+| NOM_USAGE         | varchar(1024) | Oui         |               |
+| NOM_FAMILLE       | varchar(1024) | Oui         |               |
+| SEXE              | varchar(1)    | Non         |               |
+| DATE_NAISSANCE    | timestamp     | Non         |               |
+| LOGIN             | varchar(256)  | Oui         |               |
+| EMAIL             | varchar(1024) | Oui         |               |
+
+Exemple depuis l'instance de démonstration.
+
+```csv
+'id';'prenom';'nom_usage';'nom_famille';'sexe';'date_naissance';'login';'email'
+36;Bruno;;;M;;bruno;bruno@mon-etablissement.fr
+39;Violette;;;F;;violette;violette@mon-etablissement.fr
+40;Grey;;;H;;grey;grey@mon-etablissement.fr
+41;Olive;;;F;;olive;olive@mon-etablissement.fr
+```
+
+_Note_ :
+
+- Les données de genre et d'âge ne servent que pour les enquêtes ministérielles.
+  Si votre établissement ne fait pas ces remontés, alors il est recommandé de les laisser vide.
+
+### V_MESFORMATIONS_AGENTAFFECTATION
+
+Remonté des affectations des agent·es.
+
+| Nom de la colonne | Type         | Obligatoire | Commentaire                                           |
+|-------------------|--------------|-------------|-------------------------------------------------------|
+| ID                | varchar(256) | Oui         | Clef primaire                                         |
+| AGENT_ID          | varchar(256) | Oui         | Clef étrangère référençant V_MESFORMATIONS_AGENT      |
+| STRUCTURE_ID      | integer      | Oui         | Clef étrangère référençant V_MESFORMATIONS_STRUCTURES |
+| T_PRINCIPALE      | varchar(1)   | Oui         |                                                       |
+| T_HIERARCHIQUE    | varchar(1)   | Oui         |                                                       |
+| T_FONCTIONNELLE   | varchar(1)   | Oui         |                                                       |
+| QUOTITE           | integer      | Non         |                                                       |
+| DATE_DEBUT        | timetamp     | Oui         |                                                       |
+| DATE_FIN          | timetamp     | Non         |                                                       |
+
+Exemple depuis l'instance de démonstration.
+
+```csv
+'id';'agent_id';'structure_id';'t_principale';'t_hierarchique';'t_fonctionnelle';'quotite';'date_debut';'date_fin'
+10034;34;3;O;O;O;100;2022-10-01;
+10035;35;3;O;O;O;100;2022-01-01;
+10036;36;5;O;O;N;100;2020-01-01;
+10056;51;12;O;O;N;100;2020-01-01;2022-12-31
+10057;52;12;O;O;N;100;2020-01-01;2023-01-15
+```
+
+### V_MESFORMATIONS_AGENTGRADE
+
+Remonté des grades des agent·es.
+
+| Nom de la colonne | Type         | Obligatoire | Commentaire                                               |
+|-------------------|--------------|-------------|-----------------------------------------------------------|
+| ID                | varchar(256) | Oui         | Clef primaire                                             |
+| AGENT_ID          | varchar(256) | Oui         | Clef étrangère référençant V_MESFORMATIONS_AGENT          |
+| STRUCTURE_ID      | integer      | Oui         | Clef étrangère référençant V_MESFORMATIONS_STRUCTURES     |
+| GRADE_ID          | integer      | Oui         | Clef étrangère référençant V_MESFORMATIONS_GRADE          |
+| CORPS_ID          | integer      | Oui         | Clef étrangère référençant V_MESFORMATIONS_CORPS          |
+| CORRESPONDANCE_ID | integer      | Oui         | Clef étrangère référençant V_MESFORMATIONS_CORRESPONDANCE |
+| EMPLOITYPE_ID     | integer      | Oui         | Clef étrangère référençant V_MESFORMATIONS_EMPLOITYPE     |
+| DATE_DEBUT        | timetamp     | Oui         |                                                           |
+| DATE_FIN          | timetamp     | Non         |                                                           |
+
+Exemple depuis l'instance de démonstration.
+
+```csv
+'id';'agent_id';'structure_id';'corps_id';'correspondance_id';'grade_id';'emploitype_id';'date_debut';'date_fin'
+5;21;6;21;8;260;;2022-03-01;
+6;22;6;110;8;34;;2022-03-01;
+7;23;6;111;8;31;;2022-03-01;
+8;24;6;21;8;260;;2022-03-01;2023-12-31
+9;25;6;21;8;260;;2022-03-01;
+```
+
+_Note_ :
+- Cette table est complexe pour rien, un travail sur le référentiel pourrait permettre une simplification
+
+### V_MESFORMATIONS_AGENTECHELON
+
+Remonté des grades des agent·es.
+
+| Nom de la colonne | Type         | Obligatoire | Commentaire                                      |
+|-------------------|--------------|-------------|--------------------------------------------------|
+| ID                | varchar(256) | Oui         | Clef primaire                                    |
+| AGENT_ID          | varchar(256) | Oui         | Clef étrangère référençant V_MESFORMATIONS_AGENT |
+| ECHELON           | integer      | Oui         |                                                  |
+| DATE_DEBUT        | timetamp     | Oui         |                                                  |
+| DATE_FIN          | timetamp     | Non         |                                                  |
+
+Exemple depuis l'instance de démonstration.
+
+```csv
+'id';'agent_id';'echelon';'date_debut';'date_fin'
+1;16;5;2022-07-01;
+```
+
+### V_MESFORMATIONS_AGENTQUOTITE
+
+Remonté des grades des agent·es.
+
+| Nom de la colonne | Type          | Obligatoire | Commentaire                                      |
+|-------------------|---------------|-------------|--------------------------------------------------|
+| ID                | varchar(256)  | Oui         | Clef primaire                                    |
+| AGENT_ID          | varchar(256)  | Oui         | Clef étrangère référençant V_MESFORMATIONS_AGENT |
+| QUOTITE           | integer       | Oui         |                                                  |
+| MODALITE          | varchar(1024) | Oui         |                                                  |
+| DATE_DEBUT        | timetamp      | Oui         |                                                  |
+| DATE_FIN          | timetamp      | Non         |                                                  |
+
+Exemple depuis l'instance de démonstration.
+
+```csv
+'id';'agent_id';'quotite';'date_debut';'date_fin';'modalite'
+1;17;80;2022-03-01 15:13:35.000000;;Temps partiel thérapeutique
+```
+
+### V_MESFORMATIONS_AGENTSTATUT
+
+Remonté des grades des agent·es.
+
+| Nom de la colonne | Type         | Obligatoire | Commentaire                                           |
+|-------------------|--------------|-------------|-------------------------------------------------------|
+| ID                | varchar(256) | Oui         | Clef primaire                                         |
+| AGENT_ID          | varchar(256) | Oui         | Clef étrangère référençant V_MESFORMATIONS_AGENT      |
+| STRUCTURE_ID      | integer      | Oui         | Clef étrangère référençant V_MESFORMATIONS_STRUCTURES |
+| DATE_DEBUT        | timetamp     | Oui         |                                                       |
+| DATE_FIN          | timetamp     | Non         |                                                       |
+| T_TIULAIRE        | VARCHAR(1)   | Oui         |                                                       |
+| T_CDI             | VARCHAR(1)   | Oui         |                                                       |
+| T_CDD             | VARCHAR(1)   | Oui         |                                                       |
+| T_ADMINISTRATIF   | VARCHAR(1)   | Oui         |                                                       |
+| T_ENSEIGNANT      | VARCHAR(1)   | Oui         |                                                       |
+| T_CHERCHEUR       | VARCHAR(1)   | Oui         |                                                       |
+| T_DOCTORANT       | VARCHAR(1)   | Oui         |                                                       |
+| T_VACATAIRE       | VARCHAR(1)   | Oui         |                                                       |
+| T_DETACHE_IN      | VARCHAR(1)   | Oui         |                                                       |
+| T_DETACHE_OUT     | VARCHAR(1)   | Oui         |                                                       |
+| T_HEBERGE         | VARCHAR(1)   | Oui         |                                                       |
+| T_DISPO           | VARCHAR(1)   | Oui         |                                                       |
+| T_EMERITE         | VARCHAR(1)   | Oui         |                                                       |
+| T_RETRAITE        | VARCHAR(1)   | Oui         |                                                       |
+
+Exemple depuis l'instance de démonstration.
+
+```csv'id';'agent_id';'structure_id';'date_debut';'date_fin';'t_titulaire';'t_cdi';'t_cdd';'t_administratif';'t_enseignant';'t_chercheur';'t_vacataire';'t_doctorant';'t_detache_in';'t_detache_out';'t_heberge';'t_dispo';'t_emerite';'t_retraite'
+2;16;6;2022-03-01;;O;N;N;O;N;N;N;N;N;N;N;N;N;N
+1;17;6;2022-03-01;;O;N;N;O;N;N;N;N;N;N;N;N;N;N
+3;18;6;2022-03-01;;N;O;N;O;N;N;N;N;N;N;N;N;N;N
+```
+
+_Note_ :
+- Si certains témoins sont non calculable ou non pertinant, alors vous pouvez les initialiser avec la valeur 'N'
+
+## Les vues décrivant la hiérarchie
+
+Ces vues sont importantes.
+
+### V_MESFORMATIONS_STRUCTURE_RESPONSABLE
+
+La liste des responsables de structure
+
+| Nom de la colonne | Type         | Obligatoire | Commentaire                                           |
+|-------------------|--------------|-------------|-------------------------------------------------------|
+| ID                | integer      | Oui         | Clef primaire                                         |
+| AGENT_ID          | varchar(256) | Oui         | Clef étrangère référençant V_MESFORMATIONS_AGENT      |
+| STRUCTURE_ID      | integer      | Oui         | Clef étrangère référençant V_MESFORMATIONS_STRUCTURES |
+| FONCTION_ID       | integer      | Non         |                                                       |
+| DATE_DEBUT        | timetamp     | Oui         |                                                       |
+| DATE_FIN          | timetamp     | Non         |                                                       |
+
+Exemple depuis l'instance de démonstration.
+
+```csv
+'id';'structure_id';'agent_id';'fonction_id';'date_debut';'date_fin'
+5;1;9;;2023-01-29;
+6;1;16;;2022-01-27;2022-12-31
+7;3;15;;2022-07-01;2023-07-01
+8;3;14;;2023-07-01;
+```
+
+_Note_ :
+- La clef primaire sera remplacée par une chaine de caractères qui est généralement la représentation dans les SIRH
+- FONCTION_ID dans l'état est inutile, car manque une table décrivant les fontions et leurs libellés
+
+### V_MESFORMATIONS_AGENT_VALIDEUR
+
+La liste des responsables de structure
+
+| Nom de la colonne | Type         | Obligatoire | Commentaire                                      |
+|-------------------|--------------|-------------|--------------------------------------------------|
+| ID                | varchar(256) | Oui         | Clef primaire                                    |
+| AGENT_ID          | varchar(256) | Oui         | Clef étrangère référençant V_MESFORMATIONS_AGENT |
+| VALIDEUR_ID       | varchar(256) | Oui         | Clef étrangère référençant V_MESFORMATIONS_AGENT |
+| DATE_DEBUT        | timetamp     | Oui         |                                                  |
+| DATE_FIN          | timetamp     | Non         |                                                  |
+
+Exemple depuis l'instance de démonstration.
+
+```csv
+'id';'agent_id';'fonction_id';'date_debut';'date_fin'
+OCTOPUS-119-120-45255587;119;120;2024-01-01;2024-08-31
+OCTOPUS-119-121-9968574;119;121;2024-09-01;
+```
+
+Synchronisation grâce à `unicaen/synchro`
+=====
+
+La synchronisation des données d'Objectif Réussites utilise une bibliothèque développée à Caen.
+Celle-ci permet grâce à un fichier de configuration de déclarer une table de correspondance indiquant quelle colonne
+d'un donnée source (TABLE ou VUE) sera recopié dans les tables de l'application.
+Il est à noter que la bibliothèque peut récupérer des informations de plusieurs bases de données sources.
+
+À l'avenir, la synchronisation pourra exploiter des Web Services afin d'être utilisé proprement en SaaS.
+
+## Configuration de la biliothèque
+
+### L'accés aux bases de données sources
+
+Les bases de données sources doivent être déclaré comme ORM pour cela, il est nécessaire de les déclarer comme fichier
+de configuration local (non synchronisé dans le dépôt).
+Dans la suite je présente la configuration faite à Caen exploitant deux bases de données sources :
+
+1. OCTOPUS qui est un concentrateur de données
+2. UNIFORMSUP qui regroupe des informations sur les étapes et diplômes
+
+**Ajout de l'ORM pour OCTOPUS**
+
+Dans cet exemple, octopus est une base de donnée pgsql (penser à installer le drivers associé).
+
+Fichier 'config/autoload/database-octopus.local.php'
+
+```php
+<?php
+use Doctrine\DBAL\Driver\PDO\PgSQL\Driver;
+use Doctrine\ORM\Mapping\Driver\XmlDriver;
+use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
+
+return [
+    'doctrine' => [
+        'driver' => [
+            'orm_octopus'            => [
+                'class'   => MappingDriverChain::class,
+                'drivers' => [
+                    'Application\Entity\Db' => 'orm_octopus_xml_driver',
+                ],
+            ],
+            'orm_octopus_xml_driver' => [
+                'class' => XmlDriver::class,
+                'cache' => 'apc',
+                'paths' => [
+                    __DIR__ . '/../src/Application/Entity/Db/Mapping',
+                ],
+            ],
+        ],
+        'connection' => [
+            'orm_octopus' => [
+                'driverClass' => OCI8::class,
+                'params'      => [
+                    'host'        => #####,
+                    'user'        => #####,
+                    'password'    => #####,
+                    'charset'     => 'AL32UTF8',
+                    'port'        => ####,
+                    'service'     => ####,
+                    'servicename' => ####,
+                ],
+            ],
+        ],
+
+
+        'entitymanager' => [
+            'orm_octopus' => [
+                'connection'    => 'orm_octopus',
+                'configuration' => 'orm_octopus',
+            ],
+        ],
+        
+        'configuration' => [
+            'orm_octopus' => [
+                'metadata_cache'   => 'array',
+                'query_cache'      => 'array',
+                'result_cache'     => 'array',
+                'hydration_cache'  => 'array',
+                'generate_proxies' => true,
+                'driver'           => 'orm_octopus',
+            ],
+        ],
+    ],
+
+];
+
+
+```
+
+**Ajout de l'ORM pour UNIFORMSUP**
+
+Dans cet exemple, uniformsup est une base de donnée oracle (penser à installer le drivers OCI8).
+
+Fichier 'config/autoload/database-uniform.local.php'
+
+```php
+<?php
+use Doctrine\DBAL\Driver\OCI8\Driver as OCI8;
+use Doctrine\ORM\Mapping\Driver\XmlDriver;
+use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
+
+return [
+    'doctrine' => [
+        'driver' => [
+            'orm_uniform'            => [
+                'class'   => MappingDriverChain::class,
+                'drivers' => [
+                    'Application\Entity\Db' => 'orm_octopus_xml_driver',
+                ],
+            ],
+            'orm_uniform_xml_driver' => [
+                'class' => XmlDriver::class,
+                'cache' => 'apc',
+                'paths' => [
+                    __DIR__ . '/../src/Application/Entity/Db/Mapping',
+                ],
+            ],
+        ],
+        'connection' => [
+            'orm_uniform' => [
+                'driverClass' => OCI8::class,
+                'params'      => [
+                    'host'        => #####,
+                    'user'        => #####,
+                    'password'    => #####,
+                    'charset'     => 'AL32UTF8',
+                    'port'        => ####,
+                    'service'     => ####,
+                    'servicename' => ####,
+                ],
+            ],
+        ],
+
+
+        'entitymanager' => [
+            'orm_uniform' => [
+                'connection'    => 'orm_uniform',
+                'configuration' => 'orm_uniform',
+            ],
+        ],
+        'configuration' => [
+            'orm_uniform' => [
+                'metadata_cache'   => 'array',
+                'query_cache'      => 'array',
+                'result_cache'     => 'array',
+                'hydration_cache'  => 'array',
+                'generate_proxies' => true,
+                'driver'           => 'orm_uniform',
+            ],
+        ],
+    ],
+];
+
+```
+
+### Configurer une synchronisation
+
+Le fichier configurant les synchronisations est composé de deux blocs :
+
+1. data_sources la liste des ORM utilisables
+2. la liste des synchronisation (les tables de correspondance)
+
+La liste des ORM utilisables est un simple table référencant les ORM précédemment définis.
+
+Le synchronisation on la structure suivante :
+
+```php
+ 'NOM_DE_LA_SYNCHRONISATION' => [
+    'order'             => ORDRE DE PRIORITE,
+    'source'            => LIBELLE DE LA SOURCE (sera copié tel que en base de donnée dans la colonne SOURCE_ID),
+    'orm_source'        => ORM SOURCE (clef définie précédemment orm_octopus ou orm_uniform)
+    'orm_destination'   => 'orm_default',
+    'table_source'      => NOM DE LA TABLE OU VUE SOURCE,
+    'table_destination' => NOM De LA TABLE DESTINATION
+    'correspondance'    => [
+    	LIBELLE DE LA COLONNE 1 SOURCE => LIBELLE DE LA COLONNE 1 DESTINATION,
+    	LIBELLE DE LA COLONNE 2 SOURCE => LIBELLE DE LA COLONNE 2 DESTINATION
+    ],
+    'id'                => COLONNE A UTILISEE COMME CLEF PRIMAIRE DANS LA SOURCE,
+],
+```
+
+Les synchronisations utilisées à Caen sont fourni comme exemple :
+
+1. La synchronisation de l'instance de démonstration `config/autoload/synchro.local.php.demo`
+2. La synchronisation des instances de préproduction et production `config/autoload/synchro.local.php.octopus`
+
+## Lancer une synchronisation
+
+La synchronisation est lancé en ligne de commande il est possible de lancer l'ensemble des synchronisations ou une
+synchronisation
+
+```bash
+/var/www/html$ php public/index.php synchroniser-all
+/var/www/html$ php public/index.php synchroniser --name=NOM_DE_LA_SYNCHRONISATION
+```
+
+Cette même commande peut être lancer via un cron ou un service pour rendre récurrent/automatique celle-ci.
+
+### Astuces
+
+Les synchronisations peuvent être accélérées par un spérateur divisant le volume de données en des morceaux plus petits.
+
+```php
+ 'NOM_DE_LA_SYNCHRONISATION' => [
+    'order'             => ORDRE DE PRIORITE,
+    'source'            => LIBELLE DE LA SOURCE (sera copié tel que en base de donnée dans la colonne SOURCE_ID),
+    'orm_source'        => ORM SOURCE (clef définie précédemment orm_octopus ou orm_uniform)
+    'orm_destination'   => 'orm_default',
+    'table_source'      => NOM DE LA TABLE OU VUE SOURCE,
+    'table_destination' => NOM De LA TABLE DESTINATION
+    'correspondance'    => [
+    	LIBELLE DE LA COLONNE 1 SOURCE => LIBELLE DE LA COLONNE 1 DESTINATION,
+    	LIBELLE DE LA COLONNE 2 SOURCE => LIBELLE DE LA COLONNE 2 DESTINATION
+    ],
+    'id'                => COLONNE A UTILISEE COMME CLEF PRIMAIRE DANS LA SOURCE,
+    'separator'        => COLONNE SOURCE QUI DIVISERA LES DONNEES,
+],
+```
diff --git a/database/ddl/function/create_import_metarequest_for_structure.sql b/database/ddl/function/create_import_metarequest_for_structure.sql
index de52320eb02c5146036f860e8d68f8a6b27ce72f..7a2595f407c4fd7a2adbd14ea08b7f4f3beec2ef 100644
--- a/database/ddl/function/create_import_metarequest_for_structure.sql
+++ b/database/ddl/function/create_import_metarequest_for_structure.sql
@@ -1,4 +1,4 @@
-CREATE OR REPLACE FUNCTION public.create_import_metarequest_for_structure(src_id text, src_code text, src_libelle_court text, src_libelle_long text, src_type text, src_histo text, dest_id text, dest_code text, dest_libelle_court text, dest_libelle_long text, dest_type text, dest_histo text, dest_deleted_on timestamp with time zone, import_hash character varying)
+CREATE OR REPLACE FUNCTION public.create_import_metarequest_for_structure(src_id text, src_code text, src_libelle_court text, src_libelle_long text, src_type text, dest_id text, dest_code text, dest_libelle_court text, dest_libelle_long text, dest_type text, dest_deleted_on timestamp with time zone, import_hash character varying)
  RETURNS character varying
  LANGUAGE plpgsql
 AS $function$
@@ -8,22 +8,20 @@ DECLARE
     sql TEXT;
 BEGIN
     -- normalisation des valeurs d'entrée
-    src_CODE = coalesce(quote_literal(src_CODE), 'NULL');
-    src_LIBELLE_COURT = coalesce(quote_literal(src_LIBELLE_COURT), 'NULL');
-    src_LIBELLE_LONG = coalesce(quote_literal(src_LIBELLE_LONG), 'NULL');
-    src_TYPE = coalesce(quote_literal(src_TYPE), 'NULL');
-    src_HISTO = coalesce(quote_literal(src_HISTO), 'NULL');
-    dest_CODE = coalesce(quote_literal(dest_CODE), 'NULL');
-    dest_LIBELLE_COURT = coalesce(quote_literal(dest_LIBELLE_COURT), 'NULL');
-    dest_LIBELLE_LONG = coalesce(quote_literal(dest_LIBELLE_LONG), 'NULL');
-    dest_TYPE = coalesce(quote_literal(dest_TYPE), 'NULL');
-    dest_HISTO = coalesce(quote_literal(dest_HISTO), 'NULL');
+    src_CODE = coalesce(src_CODE, 'null');
+    src_LIBELLE_COURT = coalesce(src_LIBELLE_COURT, 'null');
+    src_LIBELLE_LONG = coalesce(src_LIBELLE_LONG, 'null');
+    src_TYPE = coalesce(src_TYPE, 'null');
+    dest_CODE = coalesce(dest_CODE, 'null');
+    dest_LIBELLE_COURT = coalesce(dest_LIBELLE_COURT, 'null');
+    dest_LIBELLE_LONG = coalesce(dest_LIBELLE_LONG, 'null');
+    dest_TYPE = coalesce(dest_TYPE, 'null');
 
     -- l'enregistrement existe dans la source mais pas dans la destination : il devra être ajouté
     IF (src_ID IS NOT NULL AND dest_ID IS NULL) THEN
         operation = 'insert';
         hash = src_ID || '-' || import_hash;
-        sql = 'INSERT INTO structure(ID, CODE, LIBELLE_COURT, LIBELLE_LONG, TYPE, HISTO, created_on) VALUES (' || quote_literal(src_ID) || ', ' || src_CODE || ', ' || src_LIBELLE_COURT || ', ' || src_LIBELLE_LONG || ', ' || src_TYPE || ', ' || src_HISTO || ', ' || 'LOCALTIMESTAMP(0)) ;' ;
+        sql = 'INSERT INTO structure(ID, CODE, LIBELLE_COURT, LIBELLE_LONG, TYPE, created_on) VALUES (' || quote_literal(src_ID) || ', ' || quote_literal(src_CODE) || ', ' || quote_literal(src_LIBELLE_COURT) || ', ' || quote_literal(src_LIBELLE_LONG) || ', ' || quote_literal(src_TYPE) || ', ' || 'LOCALTIMESTAMP(0)) ;' ;
         sql = sql || ' UPDATE import_reg SET executed_on = LOCALTIMESTAMP(0) WHERE import_hash = ' || quote_literal(hash) || ' ;' ;
         INSERT INTO import_reg(operation, table_name, source_code, field_name, to_value, from_value, sql, created_on, import_hash) VALUES ('insert', 'structure', src_ID, null, null, null, sql, LOCALTIMESTAMP(0), hash);
     END IF;
@@ -34,7 +32,7 @@ BEGIN
         IF (src_CODE <> dest_CODE) THEN
             operation = 'update';
             hash = dest_ID || '-' || dest_CODE || '-' || import_hash;
-            sql = 'UPDATE structure SET CODE = ' || src_CODE || ', updated_on = LOCALTIMESTAMP(0) WHERE ID = ' || quote_literal(dest_ID) || ' ;' ;
+            sql = 'UPDATE structure SET CODE = ' || quote_literal(src_CODE) || ', updated_on = LOCALTIMESTAMP(0) WHERE ID = ' || quote_literal(dest_ID) || ' ;' ;
             sql = sql || ' UPDATE import_reg SET executed_on = LOCALTIMESTAMP(0) WHERE import_hash = ' || quote_literal(hash) || ' ;' ;
             INSERT INTO import_reg(operation, table_name, source_code, field_name, to_value, from_value, sql, created_on, import_hash) VALUES ('update', 'structure', src_ID, 'CODE', src_CODE, dest_CODE, sql, LOCALTIMESTAMP(0), hash);
         END IF;
@@ -42,7 +40,7 @@ BEGIN
         IF (src_LIBELLE_COURT <> dest_LIBELLE_COURT) THEN
             operation = 'update';
             hash = dest_ID || '-' || dest_LIBELLE_COURT || '-' || import_hash;
-            sql = 'UPDATE structure SET LIBELLE_COURT = ' || src_LIBELLE_COURT || ', updated_on = LOCALTIMESTAMP(0) WHERE ID = ' || quote_literal(dest_ID) || ' ;' ;
+            sql = 'UPDATE structure SET LIBELLE_COURT = ' || quote_literal(src_LIBELLE_COURT) || ', updated_on = LOCALTIMESTAMP(0) WHERE ID = ' || quote_literal(dest_ID) || ' ;' ;
             sql = sql || ' UPDATE import_reg SET executed_on = LOCALTIMESTAMP(0) WHERE import_hash = ' || quote_literal(hash) || ' ;' ;
             INSERT INTO import_reg(operation, table_name, source_code, field_name, to_value, from_value, sql, created_on, import_hash) VALUES ('update', 'structure', src_ID, 'LIBELLE_COURT', src_LIBELLE_COURT, dest_LIBELLE_COURT, sql, LOCALTIMESTAMP(0), hash);
         END IF;
@@ -50,7 +48,7 @@ BEGIN
         IF (src_LIBELLE_LONG <> dest_LIBELLE_LONG) THEN
             operation = 'update';
             hash = dest_ID || '-' || dest_LIBELLE_LONG || '-' || import_hash;
-            sql = 'UPDATE structure SET LIBELLE_LONG = ' || src_LIBELLE_LONG || ', updated_on = LOCALTIMESTAMP(0) WHERE ID = ' || quote_literal(dest_ID) || ' ;' ;
+            sql = 'UPDATE structure SET LIBELLE_LONG = ' || quote_literal(src_LIBELLE_LONG) || ', updated_on = LOCALTIMESTAMP(0) WHERE ID = ' || quote_literal(dest_ID) || ' ;' ;
             sql = sql || ' UPDATE import_reg SET executed_on = LOCALTIMESTAMP(0) WHERE import_hash = ' || quote_literal(hash) || ' ;' ;
             INSERT INTO import_reg(operation, table_name, source_code, field_name, to_value, from_value, sql, created_on, import_hash) VALUES ('update', 'structure', src_ID, 'LIBELLE_LONG', src_LIBELLE_LONG, dest_LIBELLE_LONG, sql, LOCALTIMESTAMP(0), hash);
         END IF;
@@ -58,18 +56,10 @@ BEGIN
         IF (src_TYPE <> dest_TYPE) THEN
             operation = 'update';
             hash = dest_ID || '-' || dest_TYPE || '-' || import_hash;
-            sql = 'UPDATE structure SET TYPE = ' || src_TYPE || ', updated_on = LOCALTIMESTAMP(0) WHERE ID = ' || quote_literal(dest_ID) || ' ;' ;
+            sql = 'UPDATE structure SET TYPE = ' || quote_literal(src_TYPE) || ', updated_on = LOCALTIMESTAMP(0) WHERE ID = ' || quote_literal(dest_ID) || ' ;' ;
             sql = sql || ' UPDATE import_reg SET executed_on = LOCALTIMESTAMP(0) WHERE import_hash = ' || quote_literal(hash) || ' ;' ;
             INSERT INTO import_reg(operation, table_name, source_code, field_name, to_value, from_value, sql, created_on, import_hash) VALUES ('update', 'structure', src_ID, 'TYPE', src_TYPE, dest_TYPE, sql, LOCALTIMESTAMP(0), hash);
         END IF;
-        -- 'HISTO' doit être mis à jour
-        IF (src_HISTO <> dest_HISTO) THEN
-            operation = 'update';
-            hash = dest_ID || '-' || dest_HISTO || '-' || import_hash;
-            sql = 'UPDATE structure SET HISTO = ' || src_HISTO || ', updated_on = LOCALTIMESTAMP(0) WHERE ID = ' || quote_literal(dest_ID) || ' ;' ;
-            sql = sql || ' UPDATE import_reg SET executed_on = LOCALTIMESTAMP(0) WHERE import_hash = ' || quote_literal(hash) || ' ;' ;
-            INSERT INTO import_reg(operation, table_name, source_code, field_name, to_value, from_value, sql, created_on, import_hash) VALUES ('update', 'structure', src_ID, 'HISTO', src_HISTO, dest_HISTO, sql, LOCALTIMESTAMP(0), hash);
-        END IF;
 
     END IF;
 
@@ -77,7 +67,7 @@ BEGIN
     IF (src_ID IS NOT NULL AND dest_ID IS NOT NULL and dest_deleted_on IS NOT NULL) THEN
         operation = 'undelete';
         hash = dest_ID || '-' || import_hash;
-        sql = 'UPDATE structure SET ' || 'CODE = ' || src_CODE || ', ' || 'LIBELLE_COURT = ' || src_LIBELLE_COURT || ', ' || 'LIBELLE_LONG = ' || src_LIBELLE_LONG || ', ' || 'TYPE = ' || src_TYPE || ', ' || 'HISTO = ' || src_HISTO || ', ' || 'updated_on = LOCALTIMESTAMP(0), deleted_on = null WHERE ID = ' || quote_literal(dest_ID) || ' ;' ;
+        sql = 'UPDATE structure SET ' || 'CODE = ' || quote_literal(src_CODE) || ', ' || 'LIBELLE_COURT = ' || quote_literal(src_LIBELLE_COURT) || ', ' || 'LIBELLE_LONG = ' || quote_literal(src_LIBELLE_LONG) || ', ' || 'TYPE = ' || quote_literal(src_TYPE) || ', ' || 'updated_on = LOCALTIMESTAMP(0), deleted_on = null WHERE ID = ' || quote_literal(dest_ID) || ' ;' ;
         sql = sql || ' UPDATE import_reg SET executed_on = LOCALTIMESTAMP(0) WHERE import_hash = ' || quote_literal(hash) || ' ;' ;
         INSERT INTO import_reg(operation, table_name, source_code, field_name, to_value, from_value, sql, created_on, import_hash) VALUES ('undelete', 'structure', src_ID, null, null, null, sql, LOCALTIMESTAMP(0), hash);
     END IF;
diff --git a/database/ddl/index/formation_demande_externe_id_uindex.php b/database/ddl/index/formation_demande_externe_id_uindex.php
deleted file mode 100644
index 0be07695a62da525ca9eec788a062c8b10242ca6..0000000000000000000000000000000000000000
--- a/database/ddl/index/formation_demande_externe_id_uindex.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'name'    => 'formation_demande_externe_id_uindex',
-    'unique'  => TRUE,
-    'type'    => 'btree',
-    'table'   => 'formation_demande_externe',
-    'schema'  => 'public',
-    'columns' => [
-        'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/index/ix_unicaen_privilege_categorie.php b/database/ddl/index/ix_unicaen_privilege_categorie.php
deleted file mode 100644
index e1aff1e686285eda6e2d905093229597999f85f7..0000000000000000000000000000000000000000
--- a/database/ddl/index/ix_unicaen_privilege_categorie.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'name'    => 'ix_unicaen_privilege_categorie',
-    'unique'  => FALSE,
-    'type'    => 'btree',
-    'table'   => 'unicaen_privilege_privilege',
-    'schema'  => 'public',
-    'columns' => [
-        'categorie_id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/index/privilege_code_uindex.php b/database/ddl/index/privilege_code_uindex.php
deleted file mode 100644
index 714a6628a76f1979ca80d641339b22f7138b1ac6..0000000000000000000000000000000000000000
--- a/database/ddl/index/privilege_code_uindex.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'name'    => 'privilege_code_uindex',
-    'unique'  => TRUE,
-    'type'    => 'btree',
-    'table'   => 'unicaen_privilege_privilege',
-    'schema'  => 'public',
-    'columns' => [
-        'code',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/index/un_unicaen_privilege_categorie_code.php b/database/ddl/index/un_unicaen_privilege_categorie_code.php
deleted file mode 100644
index 2bdc1e9c2490ff16ddeb3ce5c069f33458dd64d2..0000000000000000000000000000000000000000
--- a/database/ddl/index/un_unicaen_privilege_categorie_code.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'name'    => 'un_unicaen_privilege_categorie_code',
-    'unique'  => TRUE,
-    'type'    => 'btree',
-    'table'   => 'unicaen_privilege_categorie',
-    'schema'  => 'public',
-    'columns' => [
-        'code',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/materialized-view/mv_abonnement.sql b/database/ddl/materialized-view/mv_abonnement.sql
deleted file mode 100644
index e76aa7518dd3c081737499c13e744f774a4a1f6a..0000000000000000000000000000000000000000
--- a/database/ddl/materialized-view/mv_abonnement.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-SELECT abo.formation_id AS id,
-    max((f.libelle)::text) AS libelle,
-    count(*) AS nombre,
-    array_agg(DISTINCT concat(a.prenom, ' ', a.nom_usage, ' <', a.email, '>')) AS listing
-   FROM ((formation_formation_abonnement abo
-     JOIN formation f ON ((abo.formation_id = f.id)))
-     JOIN agent a ON (((abo.agent_id)::text = (a.c_individu)::text)))
-  WHERE (abo.histo_destruction IS NULL)
-  GROUP BY abo.formation_id
\ No newline at end of file
diff --git a/database/ddl/materialized-view/mv_agent.sql b/database/ddl/materialized-view/mv_agent.sql
deleted file mode 100644
index 63c0e9c757917415fe7c2bfd8f0bbcc86badda94..0000000000000000000000000000000000000000
--- a/database/ddl/materialized-view/mv_agent.sql
+++ /dev/null
@@ -1,24 +0,0 @@
-SELECT a.c_individu,
-    a.utilisateur_id,
-    a.prenom,
-    a.nom_usage,
-    a.created_on,
-    a.updated_on,
-    a.deleted_on,
-    a.octo_id,
-    a.preecog_id,
-    a.harp_id,
-    a.login,
-    a.email,
-    a.sexe,
-    a.t_contrat_long,
-    a.date_naissance,
-    a.nom_famille,
-    a.id,
-    a.histo_createur_id,
-    a.histo_modificateur_id,
-    a.histo_destructeur_id,
-    a.source_id,
-    a.id_orig
-   FROM agent a
-  WHERE (a.deleted_on IS NULL)
\ No newline at end of file
diff --git a/database/ddl/materialized-view/mv_indicateur_export_inscription_2024.sql b/database/ddl/materialized-view/mv_indicateur_export_inscription_2024.sql
deleted file mode 100644
index 37090570a62b069b64462f6c13e38b781bd63d3e..0000000000000000000000000000000000000000
--- a/database/ddl/materialized-view/mv_indicateur_export_inscription_2024.sql
+++ /dev/null
@@ -1,44 +0,0 @@
-WITH periode AS (
-         SELECT to_date('01-01-2024'::text, 'dd-mm-yyyy'::text) AS debut,
-            to_date('31-12-2024'::text, 'dd-mm-yyyy'::text) AS fin
-        )
- SELECT max((((a.prenom)::text || ' '::text) || (COALESCE(a.nom_usage, a.nom_famille))::text)) AS denomination,
-    max((a.sexe)::text) AS genre,
-        CASE
-            WHEN (max((acs.t_administratif)::text) = 'O'::text) THEN 'BIATSS'::text
-            WHEN ((max((acs.t_enseignant)::text) = 'O'::text) AND (max((acs.t_chercheur)::text) = 'O'::text)) THEN 'ENSEIGNANT-CHERCHEUR'::text
-            WHEN (max((acs.t_enseignant)::text) = 'O'::text) THEN 'ENSEIGNANT'::text
-            WHEN (max((acs.t_chercheur)::text) = 'O'::text) THEN 'CHERCHEUR'::text
-            ELSE NULL::text
-        END AS statut,
-        CASE
-            WHEN (max((acs.t_titulaire)::text) = 'O'::text) THEN 'TITULAIRE'::text
-            WHEN (max((acs.t_cdi)::text) = 'O'::text) THEN 'CDI'::text
-            WHEN (max((acs.t_cdd)::text) = 'O'::text) THEN 'CDD'::text
-            ELSE NULL::text
-        END AS contrat,
-        CASE
-            WHEN (max(niv2.id) = max(s.id)) THEN max((niv2.libelle_court)::text)
-            ELSE max((((niv2.libelle_court)::text || ' > '::text) || (s.libelle_court)::text))
-        END AS structure,
-    max((f.libelle)::text) AS action,
-    max((fd.libelle)::text) AS domaine,
-        CASE
-            WHEN (max((fa.libelle)::text) = 'Formations externes'::text) THEN 'O'::text
-            ELSE 'N'::text
-        END AS stage_externe
-   FROM ((((((((((((formation_inscription i
-     JOIN agent a ON (((i.agent_id)::text = (a.c_individu)::text)))
-     JOIN agent_carriere_statut acs ON (((acs.agent_id)::text = (a.c_individu)::text)))
-     JOIN agent_carriere_affectation aca ON (((aca.agent_id)::text = (a.c_individu)::text)))
-     JOIN structure s ON ((aca.structure_id = s.id)))
-     JOIN structure niv2 ON ((s.niv2_id = niv2.id)))
-     JOIN formation_instance fi ON ((i.session_id = fi.id)))
-     JOIN formation_seance fs ON ((fi.id = fs.instance_id)))
-     JOIN formation f ON ((f.id = fi.formation_id)))
-     LEFT JOIN formation_axe fa ON ((fa.id = f.axe_id)))
-     LEFT JOIN formation_formation_domaine ffd ON ((f.id = ffd.formation_id)))
-     LEFT JOIN formation_domaine fd ON ((ffd.domaine_id = fd.id)))
-     JOIN periode p ON ((1 = 1)))
-  WHERE (((i.liste)::text = 'principale'::text) AND (i.histo_destruction IS NULL) AND (acs.d_debut <= p.debut) AND ((acs.d_fin IS NULL) OR (acs.d_fin >= p.fin)) AND (aca.date_debut <= p.debut) AND ((aca.date_fin IS NULL) OR (aca.date_fin >= p.fin)) AND (((fs.jour >= p.debut) AND (fs.jour <= p.fin)) OR ((fs.volume_debut >= p.debut) AND (fs.volume_fin <= p.fin))))
-  GROUP BY i.id
\ No newline at end of file
diff --git a/database/ddl/materialized-view/mv_inscriptions_bloquantes.sql b/database/ddl/materialized-view/mv_inscriptions_bloquantes.sql
deleted file mode 100644
index eaa2437b5cf27ddc9a1317be86bef0a1c9a8d9ee..0000000000000000000000000000000000000000
--- a/database/ddl/materialized-view/mv_inscriptions_bloquantes.sql
+++ /dev/null
@@ -1,14 +0,0 @@
-SELECT i.id AS sessio_id,
-    max((f.libelle)::text) AS libelle,
-    i.date_cloture_inscription AS cloture_inscription,
-    count(n.*) AS nb_inscription,
-    array_agg(concat(a.prenom, ' ', COALESCE(a.nom_famille, a.nom_famille))) AS liste
-   FROM ((((formation_instance i
-     LEFT JOIN formation_session_etat e ON ((i.id = e.session_id)))
-     JOIN formation f ON ((i.formation_id = f.id)))
-     LEFT JOIN formation_inscription n ON ((i.id = n.session_id)))
-     LEFT JOIN agent a ON (((n.agent_id)::text = (a.c_individu)::text)))
-  WHERE (e.etat_id IS NULL)
-  GROUP BY i.id
- HAVING (count(n.*) > 0)
-  ORDER BY (max((f.libelle)::text))
\ No newline at end of file
diff --git a/database/ddl/materialized-view/mv_inscriptions_bloquees.sql b/database/ddl/materialized-view/mv_inscriptions_bloquees.sql
deleted file mode 100644
index b26b8acda6353c387ccd5612e06835acadf3aae6..0000000000000000000000000000000000000000
--- a/database/ddl/materialized-view/mv_inscriptions_bloquees.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-SELECT i.id AS inscription_id,
-    max((a.c_individu)::text) AS agent_id,
-    concat(max((a.nom_usage)::text), ' ', max((a.prenom)::text)) AS agent,
-    max(s.id) AS session_id,
-    max((f.libelle)::text) AS session_libelle
-   FROM ((((formation_inscription i
-     LEFT JOIN formation_inscription_etat ie ON ((i.id = ie.inscription_id)))
-     JOIN agent a ON (((i.agent_id)::text = (a.c_individu)::text)))
-     JOIN formation_instance s ON ((i.session_id = s.id)))
-     JOIN formation f ON ((s.formation_id = f.id)))
-  GROUP BY i.id
- HAVING (count(ie.etat_id) = 0)
\ No newline at end of file
diff --git a/database/ddl/materialized-view/mv_user.sql b/database/ddl/materialized-view/mv_user.sql
deleted file mode 100644
index 544c0dc1a96588c5a5c736fbfd999dc9ddf49bb6..0000000000000000000000000000000000000000
--- a/database/ddl/materialized-view/mv_user.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-SELECT unicaen_utilisateur_user.id,
-    unicaen_utilisateur_user.username,
-    unicaen_utilisateur_user.display_name,
-    unicaen_utilisateur_user.email,
-    unicaen_utilisateur_user.password,
-    unicaen_utilisateur_user.state,
-    unicaen_utilisateur_user.password_reset_token,
-    unicaen_utilisateur_user.last_role_id
-   FROM unicaen_utilisateur_user
\ No newline at end of file
diff --git a/database/ddl/materialized-view/mv_utilisateur_with_account.sql b/database/ddl/materialized-view/mv_utilisateur_with_account.sql
deleted file mode 100644
index 9195a2b93c641361e18b39f412ce30267a06d50b..0000000000000000000000000000000000000000
--- a/database/ddl/materialized-view/mv_utilisateur_with_account.sql
+++ /dev/null
@@ -1,24 +0,0 @@
-SELECT agent.c_individu,
-    agent.utilisateur_id,
-    agent.prenom,
-    agent.nom_usage,
-    agent.created_on,
-    agent.updated_on,
-    agent.deleted_on,
-    agent.octo_id,
-    agent.preecog_id,
-    agent.harp_id,
-    agent.login,
-    agent.email,
-    agent.sexe,
-    agent.t_contrat_long,
-    agent.date_naissance,
-    agent.nom_famille,
-    agent.id,
-    agent.histo_createur_id,
-    agent.histo_modificateur_id,
-    agent.histo_destructeur_id,
-    agent.source_id,
-    agent.id_orig
-   FROM agent
-  WHERE (agent.utilisateur_id IS NOT NULL)
\ No newline at end of file
diff --git a/database/ddl/materialized-view/v_agent_cur_validateur.sql b/database/ddl/materialized-view/v_agent_cur_validateur.sql
deleted file mode 100644
index 53514133cb61646562d0c6196975c51c781697af..0000000000000000000000000000000000000000
--- a/database/ddl/materialized-view/v_agent_cur_validateur.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-SELECT a.c_individu AS agent_id,
-    concat(a.prenom, ' ', a.nom_usage) AS agent_denomination,
-    v.c_individu AS valideur_id,
-    concat(v.prenom, ' ', v.nom_usage) AS valideur_denomination,
-    ahv.date_debut AS debut,
-    ahv.date_fin AS fin,
-    ahv.source_id AS source
-   FROM ((agent_hierarchie_validateur ahv
-     JOIN agent a ON (((a.c_individu)::text = (ahv.agent_id)::text)))
-     JOIN agent v ON (((v.c_individu)::text = (ahv.validateur_id)::text)))
-  WHERE (((ahv.deleted_on IS NULL) AND (ahv.histo_destruction IS NULL) AND (ahv.date_debut < now()) AND (ahv.date_fin IS NULL)) OR (ahv.date_fin > now()))
\ No newline at end of file
diff --git a/database/ddl/materialized-view/v_agent_sans_validateur.sql b/database/ddl/materialized-view/v_agent_sans_validateur.sql
deleted file mode 100644
index fa655d79c7765baa194eb8224617e3624f0b688c..0000000000000000000000000000000000000000
--- a/database/ddl/materialized-view/v_agent_sans_validateur.sql
+++ /dev/null
@@ -1,14 +0,0 @@
-SELECT max((a.c_individu)::text) AS agent_id,
-    max(concat(a.prenom, ' ', COALESCE(a.nom_usage, a.nom_famille))) AS agent_denomination,
-    array_agg(s.id) AS structure_id,
-    array_agg(s.libelle_court) AS structure_libelle,
-    array_agg(s2.id) AS niv2_id,
-    array_agg(s2.libelle_court) AS niv2_libelle
-   FROM (((((agent a
-     JOIN agent_carriere_affectation aa ON (((a.c_individu)::text = (aa.agent_id)::text)))
-     JOIN agent_carriere_statut at ON (((a.c_individu)::text = (at.agent_id)::text)))
-     JOIN structure s ON ((aa.structure_id = s.id)))
-     LEFT JOIN structure s2 ON ((s.niv2_id = s2.id)))
-     LEFT JOIN agent_hierarchie_validateur v ON (((a.c_individu)::text = (v.agent_id)::text)))
-  WHERE ((v.* IS NULL) AND (v.deleted_on IS NULL) AND (v.histo_destruction IS NULL) AND (aa.deleted_on IS NULL) AND (aa.date_debut < now()) AND ((aa.date_fin IS NULL) OR (aa.date_fin > now())) AND (at.deleted_on IS NULL) AND (at.d_debut < now()) AND ((at.d_fin IS NULL) OR (at.d_fin > now())) AND (((at.t_enseignant)::text = 'O'::text) OR ((at.t_administratif)::text = 'O'::text)))
-  GROUP BY a.*
\ No newline at end of file
diff --git a/database/ddl/materialized-view/v_indicateur_abonnements.sql b/database/ddl/materialized-view/v_indicateur_abonnements.sql
deleted file mode 100644
index 1b5f1ec9810e518bb4e3e4df99c57c8ba0e8b050..0000000000000000000000000000000000000000
--- a/database/ddl/materialized-view/v_indicateur_abonnements.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-SELECT max((f.libelle)::text) AS max,
-    array_agg(DISTINCT d.libelle) AS array_agg,
-    count(*) AS count
-   FROM ((((formation_formation_abonnement ffa
-     JOIN formation f ON ((ffa.formation_id = f.id)))
-     JOIN formation_formation_domaine fd ON ((f.id = fd.formation_id)))
-     JOIN formation_domaine d ON ((d.id = fd.domaine_id)))
-     JOIN agent a ON (((ffa.agent_id)::text = (a.c_individu)::text)))
-  WHERE ((ffa.histo_destruction IS NULL) AND (a.deleted_on IS NULL))
-  GROUP BY f.id
-  ORDER BY (count(*))
\ No newline at end of file
diff --git a/database/ddl/materialized-view/v_indicateur_desistement.sql b/database/ddl/materialized-view/v_indicateur_desistement.sql
deleted file mode 100644
index 4d55894359ae45686e7e538606c319576c370477..0000000000000000000000000000000000000000
--- a/database/ddl/materialized-view/v_indicateur_desistement.sql
+++ /dev/null
@@ -1,14 +0,0 @@
-SELECT a.c_individu AS agent_id,
-    (((a.prenom)::text || ' '::text) || (COALESCE(a.nom_usage, a.nom_famille))::text) AS agent_denomination,
-    f.libelle AS formation_libelle,
-    session.id AS session_id,
-    fi.histo_modification AS date,
-    fi.justification_desistement AS justification
-   FROM ((((((formation_inscription fi
-     JOIN formation_inscription_etat fie ON ((fi.id = fie.inscription_id)))
-     JOIN unicaen_etat_instance uei ON ((fie.etat_id = uei.id)))
-     JOIN unicaen_etat_type uet ON ((uei.type_id = uet.id)))
-     JOIN agent a ON (((fi.agent_id)::text = (a.c_individu)::text)))
-     JOIN formation_instance session ON ((fi.session_id = session.id)))
-     JOIN formation f ON ((session.formation_id = f.id)))
-  WHERE (((uet.code)::text = 'FORMATION_INSCRIPTION_DESISTEMENT'::text) AND (uei.histo_destruction IS NULL))
\ No newline at end of file
diff --git a/database/ddl/primary-constraint/agent_carriere_affectation_pk.php b/database/ddl/primary-constraint/agent_affectation_pk.php
similarity index 62%
rename from database/ddl/primary-constraint/agent_carriere_affectation_pk.php
rename to database/ddl/primary-constraint/agent_affectation_pk.php
index 41ea196496c6eecdd1e99ecb0bed822b8ac031ba..a6dcd5872565fd4eea84484bf5cb782a49ad2f68 100644
--- a/database/ddl/primary-constraint/agent_carriere_affectation_pk.php
+++ b/database/ddl/primary-constraint/agent_affectation_pk.php
@@ -4,9 +4,9 @@
 
 return [
     'schema'  => 'public',
-    'name'    => 'agent_carriere_affectation_pk',
+    'name'    => 'agent_affectation_pk',
     'table'   => 'agent_carriere_affectation',
-    'index'   => 'agent_carriere_affectation_pk',
+    'index'   => 'agent_affectation_pk',
     'columns' => [
         'id',
     ],
diff --git a/database/ddl/primary-constraint/emploitype_pk.php b/database/ddl/primary-constraint/carriere_emploitype_pk.php
similarity index 65%
rename from database/ddl/primary-constraint/emploitype_pk.php
rename to database/ddl/primary-constraint/carriere_emploitype_pk.php
index a1355db2501f0e027a647aa89bc25b676c7887de..7a6a926dbefccb9527012cdcebe0cc2b11f7fabd 100644
--- a/database/ddl/primary-constraint/emploitype_pk.php
+++ b/database/ddl/primary-constraint/carriere_emploitype_pk.php
@@ -4,9 +4,9 @@
 
 return [
     'schema'  => 'public',
-    'name'    => 'emploitype_pk',
+    'name'    => 'carriere_emploitype_pk',
     'table'   => 'carriere_emploitype',
-    'index'   => 'emploitype_pk',
+    'index'   => 'carriere_emploitype_pk',
     'columns' => [
         'id',
     ],
diff --git a/database/ddl/primary-constraint/fdea_pk.php b/database/ddl/primary-constraint/fdea_pk.php
deleted file mode 100644
index 48e99759849ba3db4560d9834c45f3286c9d0bb2..0000000000000000000000000000000000000000
--- a/database/ddl/primary-constraint/fdea_pk.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'  => 'public',
-    'name'    => 'fdea_pk',
-    'table'   => 'formation_demande_externe_session',
-    'index'   => 'fdea_pk',
-    'columns' => [
-        'demande_id',
-        'session_id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/primary-constraint/formation_demande_externe_etat_pk.php b/database/ddl/primary-constraint/formation_demande_externe_etat_pk.php
deleted file mode 100644
index 14af77017af2559e05bce352df758f771b5c63cf..0000000000000000000000000000000000000000
--- a/database/ddl/primary-constraint/formation_demande_externe_etat_pk.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'  => 'public',
-    'name'    => 'formation_demande_externe_etat_pk',
-    'table'   => 'formation_demande_externe_etat',
-    'index'   => 'formation_demande_externe_etat_pk',
-    'columns' => [
-        'demande_id',
-        'etat_id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/primary-constraint/formation_demande_externe_ficher_pk.php b/database/ddl/primary-constraint/formation_demande_externe_ficher_pk.php
deleted file mode 100644
index f67b3acd7f190d577eeeb80bf56d5e198b62cb55..0000000000000000000000000000000000000000
--- a/database/ddl/primary-constraint/formation_demande_externe_ficher_pk.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'  => 'public',
-    'name'    => 'formation_demande_externe_ficher_pk',
-    'table'   => 'formation_demande_externe_fichier',
-    'index'   => 'formation_demande_externe_ficher_pk',
-    'columns' => [
-        'demande_id',
-        'fichier_id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/primary-constraint/formation_demande_externe_gestionnaire_pk.php b/database/ddl/primary-constraint/formation_demande_externe_gestionnaire_pk.php
deleted file mode 100644
index af71ba20f0781238408ab638cbb180fd873d6e2a..0000000000000000000000000000000000000000
--- a/database/ddl/primary-constraint/formation_demande_externe_gestionnaire_pk.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'  => 'public',
-    'name'    => 'formation_demande_externe_gestionnaire_pk',
-    'table'   => 'formation_demande_externe_gestionnaire',
-    'index'   => 'formation_demande_externe_gestionnaire_pk',
-    'columns' => [
-        'demande_externe_id',
-        'gestionnaire_id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/primary-constraint/formation_demande_externe_pk.php b/database/ddl/primary-constraint/formation_demande_externe_pk.php
deleted file mode 100644
index 36d3f24c2d2af5255077e43e55b9e6be7c649074..0000000000000000000000000000000000000000
--- a/database/ddl/primary-constraint/formation_demande_externe_pk.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'  => 'public',
-    'name'    => 'formation_demande_externe_pk',
-    'table'   => 'formation_demande_externe',
-    'index'   => 'formation_demande_externe_pk',
-    'columns' => [
-        'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/primary-constraint/formation_demande_externe_validation_pk.php b/database/ddl/primary-constraint/formation_demande_externe_validation_pk.php
deleted file mode 100644
index 726f59a646c521a8252e1690df0d145136bfec8e..0000000000000000000000000000000000000000
--- a/database/ddl/primary-constraint/formation_demande_externe_validation_pk.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'  => 'public',
-    'name'    => 'formation_demande_externe_validation_pk',
-    'table'   => 'formation_demande_externe_validation',
-    'index'   => 'formation_demande_externe_validation_pk',
-    'columns' => [
-        'demande_id',
-        'validation_id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/primary-constraint/formation_inscription_etat_pk.php b/database/ddl/primary-constraint/formation_inscription_etat_pk_.php
similarity index 66%
rename from database/ddl/primary-constraint/formation_inscription_etat_pk.php
rename to database/ddl/primary-constraint/formation_inscription_etat_pk_.php
index 88cc222333852f1b26cc923c93fbc4f08dcdef0f..0df0334b61d31bcd0ff47d7b12571b7c672b7140 100644
--- a/database/ddl/primary-constraint/formation_inscription_etat_pk.php
+++ b/database/ddl/primary-constraint/formation_inscription_etat_pk_.php
@@ -4,9 +4,9 @@
 
 return [
     'schema'  => 'public',
-    'name'    => 'formation_inscription_etat_pk',
+    'name'    => 'formation_inscription_etat_pk_',
     'table'   => 'formation_inscription_etat',
-    'index'   => 'formation_inscription_etat_pk',
+    'index'   => 'formation_inscription_etat_pk_',
     'columns' => [
         'etat_id',
         'inscription_id',
diff --git a/database/ddl/primary-constraint/role_privilege_linker_pk.php b/database/ddl/primary-constraint/pk_unicaen_role_privilege_linker.php
similarity index 66%
rename from database/ddl/primary-constraint/role_privilege_linker_pk.php
rename to database/ddl/primary-constraint/pk_unicaen_role_privilege_linker.php
index 335d542fbce05aa4eb6d92737e817e1d935dca7d..24e5ee55c75a58cf17e22ee9678c4e2e729d1ed2 100644
--- a/database/ddl/primary-constraint/role_privilege_linker_pk.php
+++ b/database/ddl/primary-constraint/pk_unicaen_role_privilege_linker.php
@@ -4,9 +4,9 @@
 
 return [
     'schema'  => 'public',
-    'name'    => 'role_privilege_linker_pk',
+    'name'    => 'pk_unicaen_role_privilege_linker',
     'table'   => 'unicaen_privilege_privilege_role_linker',
-    'index'   => 'role_privilege_linker_pk',
+    'index'   => 'pk_unicaen_role_privilege_linker',
     'columns' => [
         'privilege_id',
         'role_id',
diff --git a/database/ddl/primary-constraint/user_role_linker_pk.php b/database/ddl/primary-constraint/pk_unicaen_utilisateur_role_linker.php
similarity index 64%
rename from database/ddl/primary-constraint/user_role_linker_pk.php
rename to database/ddl/primary-constraint/pk_unicaen_utilisateur_role_linker.php
index a2f37c160b40e572d3c51cd6a3a4fb905e1948b5..6acf348578a48cc9c35fde9239c90189831f4d25 100644
--- a/database/ddl/primary-constraint/user_role_linker_pk.php
+++ b/database/ddl/primary-constraint/pk_unicaen_utilisateur_role_linker.php
@@ -4,9 +4,9 @@
 
 return [
     'schema'  => 'public',
-    'name'    => 'user_role_linker_pk',
+    'name'    => 'pk_unicaen_utilisateur_role_linker',
     'table'   => 'unicaen_utilisateur_role_linker',
-    'index'   => 'user_role_linker_pk',
+    'index'   => 'pk_unicaen_utilisateur_role_linker',
     'columns' => [
         'role_id',
         'user_id',
diff --git a/database/ddl/primary-constraint/unicaen_etat_categorie_pk.php b/database/ddl/primary-constraint/unicaen_etat_categorie_pkey.php
similarity index 63%
rename from database/ddl/primary-constraint/unicaen_etat_categorie_pk.php
rename to database/ddl/primary-constraint/unicaen_etat_categorie_pkey.php
index 4b5b3ac063397e8807ca81259d1a7328fd983766..d3b193e0ab8c0f854c2e2cf9d4532ac409055338 100644
--- a/database/ddl/primary-constraint/unicaen_etat_categorie_pk.php
+++ b/database/ddl/primary-constraint/unicaen_etat_categorie_pkey.php
@@ -4,9 +4,9 @@
 
 return [
     'schema'  => 'public',
-    'name'    => 'unicaen_etat_categorie_pk',
+    'name'    => 'unicaen_etat_categorie_pkey',
     'table'   => 'unicaen_etat_categorie',
-    'index'   => 'unicaen_etat_categorie_pk',
+    'index'   => 'unicaen_etat_categorie_pkey',
     'columns' => [
         'id',
     ],
diff --git a/database/ddl/primary-constraint/unicaen_etat_instance_pk.php b/database/ddl/primary-constraint/unicaen_etat_instance_pkey.php
similarity index 63%
rename from database/ddl/primary-constraint/unicaen_etat_instance_pk.php
rename to database/ddl/primary-constraint/unicaen_etat_instance_pkey.php
index 50831ac88f9d4308d731962389e690872166f05b..356b220ac29a6551fa24e474dc3704e9e77cd245 100644
--- a/database/ddl/primary-constraint/unicaen_etat_instance_pk.php
+++ b/database/ddl/primary-constraint/unicaen_etat_instance_pkey.php
@@ -4,9 +4,9 @@
 
 return [
     'schema'  => 'public',
-    'name'    => 'unicaen_etat_instance_pk',
+    'name'    => 'unicaen_etat_instance_pkey',
     'table'   => 'unicaen_etat_instance',
-    'index'   => 'unicaen_etat_instance_pk',
+    'index'   => 'unicaen_etat_instance_pkey',
     'columns' => [
         'id',
     ],
diff --git a/database/ddl/primary-constraint/unicaen_etat_type_pk.php b/database/ddl/primary-constraint/unicaen_etat_type_pkey.php
similarity index 64%
rename from database/ddl/primary-constraint/unicaen_etat_type_pk.php
rename to database/ddl/primary-constraint/unicaen_etat_type_pkey.php
index 8cbbc37b90d09f942a61363c9905646a81171a0b..07fe3748b37d7d2f47e1b64b1f1fb10c20b2d47d 100644
--- a/database/ddl/primary-constraint/unicaen_etat_type_pk.php
+++ b/database/ddl/primary-constraint/unicaen_etat_type_pkey.php
@@ -4,9 +4,9 @@
 
 return [
     'schema'  => 'public',
-    'name'    => 'unicaen_etat_type_pk',
+    'name'    => 'unicaen_etat_type_pkey',
     'table'   => 'unicaen_etat_type',
-    'index'   => 'unicaen_etat_type_pk',
+    'index'   => 'unicaen_etat_type_pkey',
     'columns' => [
         'id',
     ],
diff --git a/database/ddl/primary-constraint/categorie_privilege_pkey.php b/database/ddl/primary-constraint/unicaen_privilege_categorie_pkey.php
similarity index 61%
rename from database/ddl/primary-constraint/categorie_privilege_pkey.php
rename to database/ddl/primary-constraint/unicaen_privilege_categorie_pkey.php
index 1147f3e959dc0c920bf7b660a58d4688f16d9ab4..f9439fb29beca1c75a35ed82ea2ed773636cd75b 100644
--- a/database/ddl/primary-constraint/categorie_privilege_pkey.php
+++ b/database/ddl/primary-constraint/unicaen_privilege_categorie_pkey.php
@@ -4,9 +4,9 @@
 
 return [
     'schema'  => 'public',
-    'name'    => 'categorie_privilege_pkey',
+    'name'    => 'unicaen_privilege_categorie_pkey',
     'table'   => 'unicaen_privilege_categorie',
-    'index'   => 'categorie_privilege_pkey',
+    'index'   => 'unicaen_privilege_categorie_pkey',
     'columns' => [
         'id',
     ],
diff --git a/database/ddl/primary-constraint/privilege_pkey.php b/database/ddl/primary-constraint/unicaen_privilege_privilege_pkey.php
similarity index 61%
rename from database/ddl/primary-constraint/privilege_pkey.php
rename to database/ddl/primary-constraint/unicaen_privilege_privilege_pkey.php
index a5fccde956a9a159a9eb864b4b1d1be3e61d37b4..b341162da1d8f1fd20d014cfc08cdb1f6c5c3d83 100644
--- a/database/ddl/primary-constraint/privilege_pkey.php
+++ b/database/ddl/primary-constraint/unicaen_privilege_privilege_pkey.php
@@ -4,9 +4,9 @@
 
 return [
     'schema'  => 'public',
-    'name'    => 'privilege_pkey',
+    'name'    => 'unicaen_privilege_privilege_pkey',
     'table'   => 'unicaen_privilege_privilege',
-    'index'   => 'privilege_pkey',
+    'index'   => 'unicaen_privilege_privilege_pkey',
     'columns' => [
         'id',
     ],
diff --git a/database/ddl/primary-constraint/role_pkey.php b/database/ddl/primary-constraint/unicaen_utilisateur_role_pkey.php
similarity index 62%
rename from database/ddl/primary-constraint/role_pkey.php
rename to database/ddl/primary-constraint/unicaen_utilisateur_role_pkey.php
index f92e60d52b953a798fd57c8105f2a301f1035c86..5680eb530e1f3447390d44338b1db1f894888f1a 100644
--- a/database/ddl/primary-constraint/role_pkey.php
+++ b/database/ddl/primary-constraint/unicaen_utilisateur_role_pkey.php
@@ -4,9 +4,9 @@
 
 return [
     'schema'  => 'public',
-    'name'    => 'role_pkey',
+    'name'    => 'unicaen_utilisateur_role_pkey',
     'table'   => 'unicaen_utilisateur_role',
-    'index'   => 'role_pkey',
+    'index'   => 'unicaen_utilisateur_role_pkey',
     'columns' => [
         'id',
     ],
diff --git a/database/ddl/primary-constraint/user_pkey.php b/database/ddl/primary-constraint/unicaen_utilisateur_user_pkey.php
similarity index 62%
rename from database/ddl/primary-constraint/user_pkey.php
rename to database/ddl/primary-constraint/unicaen_utilisateur_user_pkey.php
index 8df68727c505dde34f0892f7d5ed120ba264a8dc..3f90317cb12771f49991a109e633f57a02a56e24 100644
--- a/database/ddl/primary-constraint/user_pkey.php
+++ b/database/ddl/primary-constraint/unicaen_utilisateur_user_pkey.php
@@ -4,9 +4,9 @@
 
 return [
     'schema'  => 'public',
-    'name'    => 'user_pkey',
+    'name'    => 'unicaen_utilisateur_user_pkey',
     'table'   => 'unicaen_utilisateur_user',
-    'index'   => 'user_pkey',
+    'index'   => 'unicaen_utilisateur_user_pkey',
     'columns' => [
         'id',
     ],
diff --git a/database/ddl/ref-constraint/agent_carriere_grade_carriere_corps_id_fk.php b/database/ddl/ref-constraint/agent_carriere_grade_carriere_corps_id_fk.php
new file mode 100644
index 0000000000000000000000000000000000000000..5fd5c0ae21ab016a5ac6b7fe20006e3ab2011ae4
--- /dev/null
+++ b/database/ddl/ref-constraint/agent_carriere_grade_carriere_corps_id_fk.php
@@ -0,0 +1,18 @@
+<?php
+
+//@formatter:off
+
+return [
+    'schema'      => 'public',
+    'name'        => 'agent_carriere_grade_carriere_corps_id_fk',
+    'table'       => 'agent_carriere_grade',
+    'rtable'      => 'carriere_corps',
+    'update_rule' => 'NO ACTION',
+    'delete_rule' => 'NO ACTION',
+    'index'       => 'corps_pk',
+    'columns'     => [
+        'corps_id' => 'id',
+    ],
+];
+
+//@formatter:on
diff --git a/database/ddl/ref-constraint/agent_carriere_grade_carriere_grade_id_fk.php b/database/ddl/ref-constraint/agent_carriere_grade_carriere_grade_id_fk.php
new file mode 100644
index 0000000000000000000000000000000000000000..d9057fe845edb35b315d8811497c3ad507db4d30
--- /dev/null
+++ b/database/ddl/ref-constraint/agent_carriere_grade_carriere_grade_id_fk.php
@@ -0,0 +1,18 @@
+<?php
+
+//@formatter:off
+
+return [
+    'schema'      => 'public',
+    'name'        => 'agent_carriere_grade_carriere_grade_id_fk',
+    'table'       => 'agent_carriere_grade',
+    'rtable'      => 'carriere_grade',
+    'update_rule' => 'NO ACTION',
+    'delete_rule' => 'NO ACTION',
+    'index'       => 'grade_pk',
+    'columns'     => [
+        'grade_id' => 'id',
+    ],
+];
+
+//@formatter:on
diff --git a/database/ddl/ref-constraint/agent_fichier_fichier_fk.php b/database/ddl/ref-constraint/agent_fichier_fichier_fk.php
index b1fc2c20eafccda1735195f3f4f53eaff8ec4906..84ee11d1c8d36058aa76ba6dbfde408428572e47 100644
--- a/database/ddl/ref-constraint/agent_fichier_fichier_fk.php
+++ b/database/ddl/ref-constraint/agent_fichier_fichier_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'fichier_fichier',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'fichier_fichier_pk',
+    'index'       => 'fichier_fichier_id_uindex',
     'columns'     => [
         'fichier' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/agent_formation_formation_element_id_fk.php b/database/ddl/ref-constraint/agent_formation_formation_element_id_fk.php
index 5b80931deee61a084fba7d10d2045bb95e06d53c..6c8e6ff15460feae376b97d94937c167cff0ada4 100644
--- a/database/ddl/ref-constraint/agent_formation_formation_element_id_fk.php
+++ b/database/ddl/ref-constraint/agent_formation_formation_element_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation_element',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_element_pk',
+    'index'       => 'formation_element_id_uindex',
     'columns'     => [
         'formation_element_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/agent_hierarchie_validateur_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/agent_hierarchie_validateur_unicaen_utilisateur_user_id_fk.php
index a49a8a90252139482e8052af45c94d5955f1d807..5f7aced114829410337272214588c5ca93084597 100644
--- a/database/ddl/ref-constraint/agent_hierarchie_validateur_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/agent_hierarchie_validateur_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/agent_hierarchie_validateur_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/agent_hierarchie_validateur_unicaen_utilisateur_user_id_fk_2.php
index 4377aa012130cf35011a65e742a06dc93648912f..dc348a257eebcf106ef1f7619f88bb8d3d352936 100644
--- a/database/ddl/ref-constraint/agent_hierarchie_validateur_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/agent_hierarchie_validateur_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/agent_hierarchie_validateur_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/agent_hierarchie_validateur_unicaen_utilisateur_user_id_fk_3.php
index 1c9b4a8c57ceff0f32ce43cdc9f2a5a3b3d27635..a7428e4523aa76a73546507eb6a18e8f025a5989 100644
--- a/database/ddl/ref-constraint/agent_hierarchie_validateur_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/agent_hierarchie_validateur_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/agent_user_id_fk.php b/database/ddl/ref-constraint/agent_user_id_fk.php
index b4804aae8ff8be70b08fd5471120baa677feb46f..25abb039c4bf9acf0a90becc783d3ffa9028e344 100644
--- a/database/ddl/ref-constraint/agent_user_id_fk.php
+++ b/database/ddl/ref-constraint/agent_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'SET NULL',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'utilisateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/agent_validation_unicaen_validation_instance_id_fk.php b/database/ddl/ref-constraint/agent_validation_unicaen_validation_instance_id_fk.php
index a573e6adca6afa44270daf55ba1309d9dd74c671..5f07f8d2b312d32655d60ab73a54abaedfbdfc49 100644
--- a/database/ddl/ref-constraint/agent_validation_unicaen_validation_instance_id_fk.php
+++ b/database/ddl/ref-constraint/agent_validation_unicaen_validation_instance_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_validation_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'unicaen_validation_instance_pk',
+    'index'       => 'unicaen_validation_instance_id_uindex',
     'columns'     => [
         'validation_instance_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/carriere_corps_carriere_niveau_enveloppe_id_fk.php b/database/ddl/ref-constraint/carriere_corps_carriere_niveau_enveloppe_id_fk.php
index c53cd7421f82eee9cebeb70dd5aec7c4f237e7ce..c93995d3e7ded0cd3bb6d8924bec0b28d81b1aea 100644
--- a/database/ddl/ref-constraint/carriere_corps_carriere_niveau_enveloppe_id_fk.php
+++ b/database/ddl/ref-constraint/carriere_corps_carriere_niveau_enveloppe_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'carriere_niveau_enveloppe',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'SET NULL',
-    'index'       => 'niveau_enveloppe_pk',
+    'index'       => 'niveau_enveloppe_id_uindex',
     'columns'     => [
         'niveaux_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/carriere_mobilite_type_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/carriere_mobilite_type_unicaen_utilisateur_user_id_fk.php
index 0d4ff1f40ac6a73a5bd3110a2dbf9275d648fe85..65f397243fd81a42a743d6c524d566a6639cd57d 100644
--- a/database/ddl/ref-constraint/carriere_mobilite_type_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/carriere_mobilite_type_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/carriere_mobilite_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/carriere_mobilite_unicaen_utilisateur_user_id_fk.php
index ba155b37f0d6226d591936008977f4e32cb184fa..739c0d4fa67ef98a3cbc7b732152dc3a7f5136d0 100644
--- a/database/ddl/ref-constraint/carriere_mobilite_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/carriere_mobilite_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/carriere_mobilite_unicaen_utilisateur_user_id_fk2.php b/database/ddl/ref-constraint/carriere_mobilite_unicaen_utilisateur_user_id_fk2.php
index d8afbf2f87e25dac58f150e9b74e63d353eb1efa..764ee487012f64687a74b145bac2ed84ca55079c 100644
--- a/database/ddl/ref-constraint/carriere_mobilite_unicaen_utilisateur_user_id_fk2.php
+++ b/database/ddl/ref-constraint/carriere_mobilite_unicaen_utilisateur_user_id_fk2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/categorie_user_id_fk.php b/database/ddl/ref-constraint/categorie_user_id_fk.php
index 7a5f0976c55b4dbeb0e56e250cafced9585ea6aa..5653f271f9d2b84df6b9e403e1236e0d5e14d549 100644
--- a/database/ddl/ref-constraint/categorie_user_id_fk.php
+++ b/database/ddl/ref-constraint/categorie_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/categorie_user_id_fk_2.php b/database/ddl/ref-constraint/categorie_user_id_fk_2.php
index c15828e6375534c6b88451a1024c8b5d0e8d6600..88d25164c7d1b2c55fd4086681c59d9bb09eff6d 100644
--- a/database/ddl/ref-constraint/categorie_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/categorie_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/categorie_user_id_fk_3.php b/database/ddl/ref-constraint/categorie_user_id_fk_3.php
index 410cdcac2d3c85bab64b0bc44152d9bfbf552753..4e381021e23073a0dcd4fc57b5d21908231047e2 100644
--- a/database/ddl/ref-constraint/categorie_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/categorie_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/demandeexterne_etat_etat_id_fkey.php b/database/ddl/ref-constraint/demandeexterne_etat_etat_id_fkey.php
index de56b86e67cae0c21480526ac8188d2e1f9a017d..036dc829763f5d60b49e23a7dc42ded801634c94 100644
--- a/database/ddl/ref-constraint/demandeexterne_etat_etat_id_fkey.php
+++ b/database/ddl/ref-constraint/demandeexterne_etat_etat_id_fkey.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_etat_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'unicaen_etat_instance_pk',
+    'index'       => 'unicaen_etat_instance_id_index',
     'columns'     => [
         'etat_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/demandeexterne_fichier_fichier_id_fkey.php b/database/ddl/ref-constraint/demandeexterne_fichier_fichier_id_fkey.php
index 48af69cb6c3fdf2bdc6e61359ca36033413eb9e2..8a49fb48ccdf258d2ac10417b7326d3aed2de11a 100644
--- a/database/ddl/ref-constraint/demandeexterne_fichier_fichier_id_fkey.php
+++ b/database/ddl/ref-constraint/demandeexterne_fichier_fichier_id_fkey.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'fichier_fichier',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'fichier_fichier_pk',
+    'index'       => 'fichier_fichier_id_uindex',
     'columns'     => [
         'fichier_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/demandeexterne_gestionnaire_gestionnaire_id_fkey.php b/database/ddl/ref-constraint/demandeexterne_gestionnaire_gestionnaire_id_fkey.php
index 3e7561467c418057a66e865f8f2479ef362844c1..e66c955697293722e163de574260ee22f1e151a4 100644
--- a/database/ddl/ref-constraint/demandeexterne_gestionnaire_gestionnaire_id_fkey.php
+++ b/database/ddl/ref-constraint/demandeexterne_gestionnaire_gestionnaire_id_fkey.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'gestionnaire_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/demandeexterne_histo_createur_id_fkey.php b/database/ddl/ref-constraint/demandeexterne_histo_createur_id_fkey.php
index 93d9cf698e10e850e82faf8dcd827b5e85fa934c..5088cc69064fd9d2ab0f7d64ce612e75f3a1f755 100644
--- a/database/ddl/ref-constraint/demandeexterne_histo_createur_id_fkey.php
+++ b/database/ddl/ref-constraint/demandeexterne_histo_createur_id_fkey.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/demandeexterne_histo_destructeur_id_fkey.php b/database/ddl/ref-constraint/demandeexterne_histo_destructeur_id_fkey.php
index 1350b990d1460d486084f790c24c71b808678fc5..04da2258b4b32eb08a0d213843e7e42984fbe75f 100644
--- a/database/ddl/ref-constraint/demandeexterne_histo_destructeur_id_fkey.php
+++ b/database/ddl/ref-constraint/demandeexterne_histo_destructeur_id_fkey.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/demandeexterne_histo_modificateur_id_fkey.php b/database/ddl/ref-constraint/demandeexterne_histo_modificateur_id_fkey.php
index 47a3b374b8d0aad78a1640d4965abf17a91e23fe..f3e0ba9214af9f038621266de9187daf6726ae35 100644
--- a/database/ddl/ref-constraint/demandeexterne_histo_modificateur_id_fkey.php
+++ b/database/ddl/ref-constraint/demandeexterne_histo_modificateur_id_fkey.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/demandeexterne_session_session_id_fkey.php b/database/ddl/ref-constraint/demandeexterne_session_session_id_fkey.php
index 0ba89b93ee190a5fc0ffd93dc837015cda7c925b..dc612ee5b8390948b1f4bb2f5077b9b8e910a537 100644
--- a/database/ddl/ref-constraint/demandeexterne_session_session_id_fkey.php
+++ b/database/ddl/ref-constraint/demandeexterne_session_session_id_fkey.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_instance_pk',
+    'index'       => 'formation_instance_id_uindex',
     'columns'     => [
         'session_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/demandeexterne_validation_validation_id_fkey.php b/database/ddl/ref-constraint/demandeexterne_validation_validation_id_fkey.php
index 86d3f3166261a2ee26adfed9dad16fddc79e1307..7c5e0e1f936d5d2c96603ec9668c6950a8f009d3 100644
--- a/database/ddl/ref-constraint/demandeexterne_validation_validation_id_fkey.php
+++ b/database/ddl/ref-constraint/demandeexterne_validation_validation_id_fkey.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_validation_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'unicaen_validation_instance_pk',
+    'index'       => 'unicaen_validation_instance_id_uindex',
     'columns'     => [
         'validation_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/domaine_user_id_fk.php b/database/ddl/ref-constraint/domaine_user_id_fk.php
index 38046a772b3c2f8bffd063119d6b49a3b132b215..97dfd7d24b5f87bfd3b641efbff332d78f7fd718 100644
--- a/database/ddl/ref-constraint/domaine_user_id_fk.php
+++ b/database/ddl/ref-constraint/domaine_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/domaine_user_id_fk_2.php b/database/ddl/ref-constraint/domaine_user_id_fk_2.php
index 5111edb213459f0292de5a0ee451ffc662662257..feebbb1abe9a71972c92cda0fc0fcbd36d7ab277 100644
--- a/database/ddl/ref-constraint/domaine_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/domaine_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/domaine_user_id_fk_3.php b/database/ddl/ref-constraint/domaine_user_id_fk_3.php
index ed9dc69c9adef2dab55e46f387b705cec79cabff..15987b6d096ebb0d0aa05260e9db5d0f91ef7df3 100644
--- a/database/ddl/ref-constraint/domaine_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/domaine_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/famille_professionnelle_user_id_fk.php b/database/ddl/ref-constraint/famille_professionnelle_user_id_fk.php
index 035296de438c65de52dc2004b0603eeb6a6765f4..ee3729068b8a6edfd9df7da61cd64890efdd9319 100644
--- a/database/ddl/ref-constraint/famille_professionnelle_user_id_fk.php
+++ b/database/ddl/ref-constraint/famille_professionnelle_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/famille_professionnelle_user_id_fk_2.php b/database/ddl/ref-constraint/famille_professionnelle_user_id_fk_2.php
index 7f96bba5dfd808b3e33454599942cdadb3ece492..dab15c00da12e60836a66f86ef60394d032232ca 100644
--- a/database/ddl/ref-constraint/famille_professionnelle_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/famille_professionnelle_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/famille_professionnelle_user_id_fk_3.php b/database/ddl/ref-constraint/famille_professionnelle_user_id_fk_3.php
index ecd1e8f27d088972c4396249b8c6e917d42e3061..1cf888dfc395fcf608ebf756bbf1e1e5fd8cc99c 100644
--- a/database/ddl/ref-constraint/famille_professionnelle_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/famille_professionnelle_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/fapc_formation_id_fk.php b/database/ddl/ref-constraint/fapc_formation_id_fk.php
index 1eb61c6e1e615763d4e5278c6b3eede279e2627d..29386c612d4194c7e7eada3778625a052ec464d5 100644
--- a/database/ddl/ref-constraint/fapc_formation_id_fk.php
+++ b/database/ddl/ref-constraint/fapc_formation_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_pk',
+    'index'       => 'formation_id_uindex',
     'columns'     => [
         'action_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/fapc_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/fapc_unicaen_utilisateur_user_id_fk.php
index e48ab7f9f2343a421cd28fd9fe71cf606f43c851..5113b5d48c67af2dd96e1fb0058337930885d213 100644
--- a/database/ddl/ref-constraint/fapc_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/fapc_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/fapc_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/fapc_unicaen_utilisateur_user_id_fk_2.php
index b890085d2ba598af725df07a2bac9c1198ea720e..2cb2944dd2869df3b88e297fe4a0f0535b29a383 100644
--- a/database/ddl/ref-constraint/fapc_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/fapc_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/fapc_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/fapc_unicaen_utilisateur_user_id_fk_3.php
index f6e49db95181577a797d53d2fd911e621adac9eb..ad42662cefb5f823f8d6151fcaf05fb6d090bfb4 100644
--- a/database/ddl/ref-constraint/fapc_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/fapc_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/fdea_formation_demande_externe_id_fk.php b/database/ddl/ref-constraint/fdea_formation_demande_externe_id_fk.php
deleted file mode 100644
index 73b1758f58320f460018f4d9a2d550d234f1d3a4..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/fdea_formation_demande_externe_id_fk.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'fdea_formation_demande_externe_id_fk',
-    'table'       => 'formation_demande_externe_session',
-    'rtable'      => 'formation_demande_externe',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'CASCADE',
-    'index'       => 'formation_demande_externe_pk',
-    'columns'     => [
-        'demande_id' => 'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/fdea_formation_instance_id_fk.php b/database/ddl/ref-constraint/fdea_formation_instance_id_fk.php
deleted file mode 100644
index 52b14b9c5a08bd7bf1fefdd1ba9865cd14c3cd28..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/fdea_formation_instance_id_fk.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'fdea_formation_instance_id_fk',
-    'table'       => 'formation_demande_externe_session',
-    'rtable'      => 'formation_instance',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'CASCADE',
-    'index'       => 'formation_instance_pk',
-    'columns'     => [
-        'session_id' => 'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/fdeg_formation_demande_externe_id_fk.php b/database/ddl/ref-constraint/fdeg_formation_demande_externe_id_fk.php
deleted file mode 100644
index e79fff3b6eace588da39dbba04383844be3e76fd..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/fdeg_formation_demande_externe_id_fk.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'fdeg_formation_demande_externe_id_fk',
-    'table'       => 'formation_demande_externe_gestionnaire',
-    'rtable'      => 'formation_demande_externe',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'CASCADE',
-    'index'       => 'formation_demande_externe_pk',
-    'columns'     => [
-        'demande_externe_id' => 'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/fdeg_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/fdeg_unicaen_utilisateur_user_id_fk.php
deleted file mode 100644
index f457dcda1021daec5d9fa847c9f39dfd96a5cd30..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/fdeg_unicaen_utilisateur_user_id_fk.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'fdeg_unicaen_utilisateur_user_id_fk',
-    'table'       => 'formation_demande_externe_gestionnaire',
-    'rtable'      => 'unicaen_utilisateur_user',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'CASCADE',
-    'index'       => 'user_pkey',
-    'columns'     => [
-        'gestionnaire_id' => 'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/fichier_fichier_fichier_nature_id_fk.php b/database/ddl/ref-constraint/fichier_fichier_fichier_nature_id_fk.php
index 8bbe942979ca99ad773ae7a90163c0abd8e329d6..65f202e9da41f3d03dada412736d5cc6534a0e40 100644
--- a/database/ddl/ref-constraint/fichier_fichier_fichier_nature_id_fk.php
+++ b/database/ddl/ref-constraint/fichier_fichier_fichier_nature_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'fichier_nature',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'fichier_nature_pk',
+    'index'       => 'fichier_nature_id_uindex',
     'columns'     => [
         'nature' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/fk_unicaen_privilege_categorie.php b/database/ddl/ref-constraint/fk_unicaen_privilege_categorie.php
index c3a5d39772fe1db50999b38cdf2ee10c4990bf56..524548cc4a340934b73a1ee0bc13200e2905dd62 100644
--- a/database/ddl/ref-constraint/fk_unicaen_privilege_categorie.php
+++ b/database/ddl/ref-constraint/fk_unicaen_privilege_categorie.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_privilege_categorie',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'categorie_privilege_pkey',
+    'index'       => 'unicaen_privilege_categorie_pkey',
     'columns'     => [
         'categorie_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/fk_unicaen_role_privilege_linker_privilege.php b/database/ddl/ref-constraint/fk_unicaen_role_privilege_linker_privilege.php
index cb30b216e401789705dd4ce40bbdf2fc3f1d1f2e..6b386c3fbecdafcb93304e1e89f8dd89d1a01a66 100644
--- a/database/ddl/ref-constraint/fk_unicaen_role_privilege_linker_privilege.php
+++ b/database/ddl/ref-constraint/fk_unicaen_role_privilege_linker_privilege.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_privilege_privilege',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'privilege_pkey',
+    'index'       => 'unicaen_privilege_privilege_pkey',
     'columns'     => [
         'privilege_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/fk_unicaen_role_privilege_linker_role.php b/database/ddl/ref-constraint/fk_unicaen_role_privilege_linker_role.php
index f7f7c413e86c19fdcb21e2dbc78274d5b58a52b5..b9cbd561ed16b6fdbb608b431209ca1550c91feb 100644
--- a/database/ddl/ref-constraint/fk_unicaen_role_privilege_linker_role.php
+++ b/database/ddl/ref-constraint/fk_unicaen_role_privilege_linker_role.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_role',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'role_pkey',
+    'index'       => 'unicaen_utilisateur_role_pkey',
     'columns'     => [
         'role_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/fk_unicaen_utilisateur_role_linker_role.php b/database/ddl/ref-constraint/fk_unicaen_utilisateur_role_linker_role.php
index 31e16e9b517866e3cfb90adb3d03ac72fad1c60b..88d12c34e92a0025ebb6e1bfe13318c7ceb4f417 100644
--- a/database/ddl/ref-constraint/fk_unicaen_utilisateur_role_linker_role.php
+++ b/database/ddl/ref-constraint/fk_unicaen_utilisateur_role_linker_role.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_role',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'role_pkey',
+    'index'       => 'unicaen_utilisateur_role_pkey',
     'columns'     => [
         'role_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/fk_unicaen_utilisateur_role_linker_user.php b/database/ddl/ref-constraint/fk_unicaen_utilisateur_role_linker_user.php
index 9dd4242bc86ed46391e24d54837139ece8f52a84..657c69f0d353f3b1ad6baa0659e019cf9b292023 100644
--- a/database/ddl/ref-constraint/fk_unicaen_utilisateur_role_linker_user.php
+++ b/database/ddl/ref-constraint/fk_unicaen_utilisateur_role_linker_user.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'user_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/fk_unicaen_utilisateur_role_parent.php b/database/ddl/ref-constraint/fk_unicaen_utilisateur_role_parent.php
index 2aa5b84ac65e4e2078a823eb1b8d57c77310d614..61c3f3d0ce615552c546a3c2ec058d1b8d61d4d8 100644
--- a/database/ddl/ref-constraint/fk_unicaen_utilisateur_role_parent.php
+++ b/database/ddl/ref-constraint/fk_unicaen_utilisateur_role_parent.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_role',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'role_pkey',
+    'index'       => 'unicaen_utilisateur_role_pkey',
     'columns'     => [
         'parent_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/fk_unicaen_utilisateur_user_last_role.php b/database/ddl/ref-constraint/fk_unicaen_utilisateur_user_last_role.php
new file mode 100644
index 0000000000000000000000000000000000000000..e34908fb1cf3166d698f71e4a937257d67b6e9bd
--- /dev/null
+++ b/database/ddl/ref-constraint/fk_unicaen_utilisateur_user_last_role.php
@@ -0,0 +1,18 @@
+<?php
+
+//@formatter:off
+
+return [
+    'schema'      => 'public',
+    'name'        => 'fk_unicaen_utilisateur_user_last_role',
+    'table'       => 'unicaen_utilisateur_user',
+    'rtable'      => 'unicaen_utilisateur_role',
+    'update_rule' => 'NO ACTION',
+    'delete_rule' => 'NO ACTION',
+    'index'       => 'unicaen_utilisateur_role_pkey',
+    'columns'     => [
+        'last_role_id' => 'id',
+    ],
+];
+
+//@formatter:on
diff --git a/database/ddl/ref-constraint/formation_action_plan_formation_id_fk.php b/database/ddl/ref-constraint/formation_action_plan_formation_id_fk.php
index 912b44e2b78423f9f14d485996c5f4b404407f7e..c4ed1a61a674b15e278fef5fe8edbebe8f8ee497 100644
--- a/database/ddl/ref-constraint/formation_action_plan_formation_id_fk.php
+++ b/database/ddl/ref-constraint/formation_action_plan_formation_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_pk',
+    'index'       => 'formation_id_uindex',
     'columns'     => [
         'action_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_action_type_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/formation_action_type_unicaen_utilisateur_user_id_fk.php
index 44d5f50347f895037aa7c9c1e5fbc23e87dc7db7..fcaaa537ad95c3988521b3e1745b6fb580b1a499 100644
--- a/database/ddl/ref-constraint/formation_action_type_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_action_type_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_action_type_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/formation_action_type_unicaen_utilisateur_user_id_fk_2.php
index 60bcf496464a19560efd995a2942fce7f0aae0fd..3553e4fc42f5dd0ad08c7215c638d5de964be09a 100644
--- a/database/ddl/ref-constraint/formation_action_type_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_action_type_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_action_type_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/formation_action_type_unicaen_utilisateur_user_id_fk_3.php
index 444cce912e553399a07c835679b3de4f4297c3fc..2d5ace8debfd0430340ac9ee9f3450df8f64509d 100644
--- a/database/ddl/ref-constraint/formation_action_type_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_action_type_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_application_obtenue_formation_id_fk.php b/database/ddl/ref-constraint/formation_application_obtenue_formation_id_fk.php
index 01d35bd69817399c749ca08b77a7688e160d711b..aea9f693aa0470d3d240ef9ab2c64c4f2a439140 100644
--- a/database/ddl/ref-constraint/formation_application_obtenue_formation_id_fk.php
+++ b/database/ddl/ref-constraint/formation_application_obtenue_formation_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_pk',
+    'index'       => 'formation_id_uindex',
     'columns'     => [
         'formation_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_axe_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/formation_axe_unicaen_utilisateur_user_id_fk.php
index 5736beea0237b894404d8b5643183d3ecfb1f988..baca55b31c1a575435225784f2a6b71dbedc6eca 100644
--- a/database/ddl/ref-constraint/formation_axe_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_axe_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_axe_unicaen_utilisateur_user_id_fk2.php b/database/ddl/ref-constraint/formation_axe_unicaen_utilisateur_user_id_fk2.php
index 1a0735dd8f6bd8856088a823c5013361638981fe..3654c9337157c24f78a2aab8fa85d94723febfd2 100644
--- a/database/ddl/ref-constraint/formation_axe_unicaen_utilisateur_user_id_fk2.php
+++ b/database/ddl/ref-constraint/formation_axe_unicaen_utilisateur_user_id_fk2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_axe_unicaen_utilisateur_user_id_fk3.php b/database/ddl/ref-constraint/formation_axe_unicaen_utilisateur_user_id_fk3.php
index aee95699e401061eb562045af73a7baf1dccdc02..55e67670685ccfd500be55544428c7bd65288e4b 100644
--- a/database/ddl/ref-constraint/formation_axe_unicaen_utilisateur_user_id_fk3.php
+++ b/database/ddl/ref-constraint/formation_axe_unicaen_utilisateur_user_id_fk3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_createur_fk.php b/database/ddl/ref-constraint/formation_createur_fk.php
index 8b449bc75c6ae95df1d0e940ddc843febb347cec..e7357cb2a36aceba0076ed29ec63cb9e58696fa1 100644
--- a/database/ddl/ref-constraint/formation_createur_fk.php
+++ b/database/ddl/ref-constraint/formation_createur_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_demande_externe_agent_c_individu_fk.php b/database/ddl/ref-constraint/formation_demande_externe_agent_c_individu_fk.php
deleted file mode 100644
index b5a003a4258d19c39e9069e72d9d793803fed35a..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/formation_demande_externe_agent_c_individu_fk.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_agent_c_individu_fk',
-    'table'       => 'formation_demande_externe',
-    'rtable'      => 'agent',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'NO ACTION',
-    'index'       => 'agent_pk',
-    'columns'     => [
-        'agent_id' => 'c_individu',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/formation_demande_externe_etat_formation_demande_externe_id_fk.php b/database/ddl/ref-constraint/formation_demande_externe_etat_formation_demande_externe_id_fk.php
deleted file mode 100644
index 48943fd3e75c63d4ddfcc11c5181c5584ab2ab73..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/formation_demande_externe_etat_formation_demande_externe_id_fk.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_etat_formation_demande_externe_id_fk',
-    'table'       => 'formation_demande_externe_etat',
-    'rtable'      => 'formation_demande_externe',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'CASCADE',
-    'index'       => 'formation_demande_externe_pk',
-    'columns'     => [
-        'demande_id' => 'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/formation_demande_externe_etat_unicaen_etat_instance_id_fk.php b/database/ddl/ref-constraint/formation_demande_externe_etat_unicaen_etat_instance_id_fk.php
deleted file mode 100644
index 9e9cd5dc7e08dfd9c6ffb622c32aac11455d150f..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/formation_demande_externe_etat_unicaen_etat_instance_id_fk.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_etat_unicaen_etat_instance_id_fk',
-    'table'       => 'formation_demande_externe_etat',
-    'rtable'      => 'unicaen_etat_instance',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'CASCADE',
-    'index'       => 'unicaen_etat_instance_pk',
-    'columns'     => [
-        'etat_id' => 'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/formation_demande_externe_ficher_fichier_fichier_id_fk.php b/database/ddl/ref-constraint/formation_demande_externe_ficher_fichier_fichier_id_fk.php
deleted file mode 100644
index 93e5786b8643be30887bf32321436d13d11618d9..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/formation_demande_externe_ficher_fichier_fichier_id_fk.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_ficher_fichier_fichier_id_fk',
-    'table'       => 'formation_demande_externe_fichier',
-    'rtable'      => 'fichier_fichier',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'CASCADE',
-    'index'       => 'fichier_fichier_pk',
-    'columns'     => [
-        'fichier_id' => 'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/formation_demande_externe_ficher_formation_demande_externe_id_f.php b/database/ddl/ref-constraint/formation_demande_externe_ficher_formation_demande_externe_id_f.php
deleted file mode 100644
index 2dc991ef0d6db95e3d78000c3372e653b46c80df..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/formation_demande_externe_ficher_formation_demande_externe_id_f.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_ficher_formation_demande_externe_id_f',
-    'table'       => 'formation_demande_externe_fichier',
-    'rtable'      => 'formation_demande_externe',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'CASCADE',
-    'index'       => 'formation_demande_externe_pk',
-    'columns'     => [
-        'demande_id' => 'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/formation_demande_externe_formation_inscription_id_fk.php b/database/ddl/ref-constraint/formation_demande_externe_formation_inscription_id_fk.php
deleted file mode 100644
index b562ab9503562f9f16ff26c7e6d9b7fd58f2d66a..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/formation_demande_externe_formation_inscription_id_fk.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_formation_inscription_id_fk',
-    'table'       => 'formation_demande_externe',
-    'rtable'      => 'formation_inscription',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'SET NULL',
-    'index'       => 'formation_inscription_pk',
-    'columns'     => [
-        'inscription_id' => 'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/formation_demande_externe_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/formation_demande_externe_unicaen_utilisateur_user_id_fk.php
deleted file mode 100644
index a6be5f1b8434464ed646c5151b0a4181db3ec5dd..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/formation_demande_externe_unicaen_utilisateur_user_id_fk.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_unicaen_utilisateur_user_id_fk',
-    'table'       => 'formation_demande_externe',
-    'rtable'      => 'unicaen_utilisateur_user',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
-    'columns'     => [
-        'histo_createur_id' => 'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/formation_demande_externe_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/formation_demande_externe_unicaen_utilisateur_user_id_fk_2.php
deleted file mode 100644
index dc3c9a4bb64a481ee44bf7cc51e418911757c796..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/formation_demande_externe_unicaen_utilisateur_user_id_fk_2.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_unicaen_utilisateur_user_id_fk_2',
-    'table'       => 'formation_demande_externe',
-    'rtable'      => 'unicaen_utilisateur_user',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
-    'columns'     => [
-        'histo_modificateur_id' => 'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/formation_demande_externe_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/formation_demande_externe_unicaen_utilisateur_user_id_fk_3.php
deleted file mode 100644
index 32780b93fc5b7f5794394862ffd61c4df3e8ea97..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/formation_demande_externe_unicaen_utilisateur_user_id_fk_3.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_unicaen_utilisateur_user_id_fk_3',
-    'table'       => 'formation_demande_externe',
-    'rtable'      => 'unicaen_utilisateur_user',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
-    'columns'     => [
-        'histo_destructeur_id' => 'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/formation_demande_externe_validation_id1_fk.php b/database/ddl/ref-constraint/formation_demande_externe_validation_id1_fk.php
deleted file mode 100644
index f756b9ed9b97c0553dac1af586e9c149dce551f7..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/formation_demande_externe_validation_id1_fk.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_validation_id1_fk',
-    'table'       => 'formation_demande_externe_validation',
-    'rtable'      => 'formation_demande_externe',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'CASCADE',
-    'index'       => 'formation_demande_externe_pk',
-    'columns'     => [
-        'demande_id' => 'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/formation_demande_externe_validation_id2_fk.php b/database/ddl/ref-constraint/formation_demande_externe_validation_id2_fk.php
deleted file mode 100644
index 23de8b908a12a4c75d842d73f2bef8c5ac606120..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/formation_demande_externe_validation_id2_fk.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_validation_id2_fk',
-    'table'       => 'formation_demande_externe_validation',
-    'rtable'      => 'unicaen_validation_instance',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'CASCADE',
-    'index'       => 'unicaen_validation_instance_pk',
-    'columns'     => [
-        'validation_id' => 'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/formation_destructeur_fk.php b/database/ddl/ref-constraint/formation_destructeur_fk.php
index e2ad75b75533258715711db9c1dc18a61cc9c0f4..82d6a819ed92b38f7ae29fadc887de57115e3778 100644
--- a/database/ddl/ref-constraint/formation_destructeur_fk.php
+++ b/database/ddl/ref-constraint/formation_destructeur_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_domaine_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/formation_domaine_unicaen_utilisateur_user_id_fk.php
index 8a6604d8a35194882ac9dde5fe42883e9646e926..f29217beb4622eef51df02c82fa8a5f2b8e274fd 100644
--- a/database/ddl/ref-constraint/formation_domaine_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_domaine_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_domaine_unicaen_utilisateur_user_id_fk2.php b/database/ddl/ref-constraint/formation_domaine_unicaen_utilisateur_user_id_fk2.php
index 404d1073b39071fb65173c33c7841a3a1667e9d3..7814f6517d2275423cab3c5ea1d99d9c7e9e7fb3 100644
--- a/database/ddl/ref-constraint/formation_domaine_unicaen_utilisateur_user_id_fk2.php
+++ b/database/ddl/ref-constraint/formation_domaine_unicaen_utilisateur_user_id_fk2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_domaine_unicaen_utilisateur_user_id_fk3.php b/database/ddl/ref-constraint/formation_domaine_unicaen_utilisateur_user_id_fk3.php
index 3819d73799656f2d2d47a970e8fbdc1032b5acda..d73cf280abcc2a838d5029cfa00bd549843fbaa8 100644
--- a/database/ddl/ref-constraint/formation_domaine_unicaen_utilisateur_user_id_fk3.php
+++ b/database/ddl/ref-constraint/formation_domaine_unicaen_utilisateur_user_id_fk3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_element_formation_informations_id_fk.php b/database/ddl/ref-constraint/formation_element_formation_informations_id_fk.php
index 56358a5bfef5acf030866a4a0b45513a9beccc07..021a9d8be686f4ddc5908ec54410ed76b55f168d 100644
--- a/database/ddl/ref-constraint/formation_element_formation_informations_id_fk.php
+++ b/database/ddl/ref-constraint/formation_element_formation_informations_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_pk',
+    'index'       => 'formation_id_uindex',
     'columns'     => [
         'formation_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_element_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/formation_element_unicaen_utilisateur_user_id_fk.php
index 7cc742fa7c59fa743d530996010d9ea2557c16b9..36fbeab2ad364fa04a4c076d26fdc3f2eee4b78e 100644
--- a/database/ddl/ref-constraint/formation_element_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_element_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_element_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/formation_element_unicaen_utilisateur_user_id_fk_2.php
index 29f49b3c25f277c034e3bd99358bde920d0ead3b..bfe533e8eddba463d36cfa62891e5eaf80039ae1 100644
--- a/database/ddl/ref-constraint/formation_element_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_element_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_element_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/formation_element_unicaen_utilisateur_user_id_fk_3.php
index 0399de899e2a2b505952e27cf7fbf3c474aba76c..1676e145b1332646094de53f4c94f8a219c606a3 100644
--- a/database/ddl/ref-constraint/formation_element_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_element_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_element_unicaen_validation_instance_id_fk.php b/database/ddl/ref-constraint/formation_element_unicaen_validation_instance_id_fk.php
index 319fe4015b109f18a155246186a51c50b760e854..577a0141d8a68988320a118384bd716384aed801 100644
--- a/database/ddl/ref-constraint/formation_element_unicaen_validation_instance_id_fk.php
+++ b/database/ddl/ref-constraint/formation_element_unicaen_validation_instance_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_validation_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'SET NULL',
-    'index'       => 'unicaen_validation_instance_pk',
+    'index'       => 'unicaen_validation_instance_id_uindex',
     'columns'     => [
         'validation_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_enquete_categorie_utilisateur_id_fk_1.php b/database/ddl/ref-constraint/formation_enquete_categorie_utilisateur_id_fk_1.php
index b06c37d03e6e0eb66acbc31e069bb5b5919962ec..05958177a72cfe47d139b5ff687b288d26400cc3 100644
--- a/database/ddl/ref-constraint/formation_enquete_categorie_utilisateur_id_fk_1.php
+++ b/database/ddl/ref-constraint/formation_enquete_categorie_utilisateur_id_fk_1.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_enquete_categorie_utilisateur_id_fk_2.php b/database/ddl/ref-constraint/formation_enquete_categorie_utilisateur_id_fk_2.php
index 9d2cfe4aa61ef5e753fdbe2aa012495072987624..9f37f8e4217bd1bda036134b7c386761fb5d432f 100644
--- a/database/ddl/ref-constraint/formation_enquete_categorie_utilisateur_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_enquete_categorie_utilisateur_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_enquete_categorie_utilisateur_id_fk_3.php b/database/ddl/ref-constraint/formation_enquete_categorie_utilisateur_id_fk_3.php
index 137bb7c629471ecfd536ffd4c921c6a88e91bc95..47011b9cc98e9e3fd8ae6922915e9a16a4a2ae0e 100644
--- a/database/ddl/ref-constraint/formation_enquete_categorie_utilisateur_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_enquete_categorie_utilisateur_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_enquete_question_formation_enquete_categorie_id_fk.php b/database/ddl/ref-constraint/formation_enquete_question_formation_enquete_categorie_id_fk.php
index e32be370c4f9c3194ba777dba76abc447419fd91..5872c03d4cb51cac42034aa39e4bbb139f727790 100644
--- a/database/ddl/ref-constraint/formation_enquete_question_formation_enquete_categorie_id_fk.php
+++ b/database/ddl/ref-constraint/formation_enquete_question_formation_enquete_categorie_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_enquete_groupe',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'SET NULL',
-    'index'       => 'formation_enquete_categorie_pkey',
+    'index'       => 'formation_enquete_categorie_id_uindex',
     'columns'     => [
         'groupe_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_enquete_question_utilisateur_id_fk_1.php b/database/ddl/ref-constraint/formation_enquete_question_utilisateur_id_fk_1.php
index 0e8bf973fbc255af08330f3201a7e7c1ba70571c..0741efc51658aa809187c1f63eae40bb4b9cde42 100644
--- a/database/ddl/ref-constraint/formation_enquete_question_utilisateur_id_fk_1.php
+++ b/database/ddl/ref-constraint/formation_enquete_question_utilisateur_id_fk_1.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_enquete_question_utilisateur_id_fk_2.php b/database/ddl/ref-constraint/formation_enquete_question_utilisateur_id_fk_2.php
index a4f1abb19e32c690ffe5e4afe2a6421ab10d21fb..6d5ecc43f0830954ca9b7ee39bdbddcd8ca2c1ef 100644
--- a/database/ddl/ref-constraint/formation_enquete_question_utilisateur_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_enquete_question_utilisateur_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_enquete_question_utilisateur_id_fk_3.php b/database/ddl/ref-constraint/formation_enquete_question_utilisateur_id_fk_3.php
index 29fe0ae0b9f64f811e09fe892e5b1b71c584de74..7f1371fca5591b018b0bf77cc8b3c0c8b544b12c 100644
--- a/database/ddl/ref-constraint/formation_enquete_question_utilisateur_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_enquete_question_utilisateur_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_formateur_session_formation_formateur_id_fk.php b/database/ddl/ref-constraint/formation_formateur_session_formation_formateur_id_fk.php
index e8d4115c6bd3d12c5d53d289f37ab936f7d45798..ca6e75a9f2435c93a3f48a4593a1b7d876067ac5 100644
--- a/database/ddl/ref-constraint/formation_formateur_session_formation_formateur_id_fk.php
+++ b/database/ddl/ref-constraint/formation_formateur_session_formation_formateur_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation_formateur',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_instance_formateur_pk',
+    'index'       => 'formation_instance_formateur_id_uindex',
     'columns'     => [
         'formateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_formateur_session_formation_instance_id_fk.php b/database/ddl/ref-constraint/formation_formateur_session_formation_instance_id_fk.php
index 92e3c2c0ab7495eff85e8948269c5ed9e3e38db6..0cde1c17622bf1d4d4047c0720b5e605a647e794 100644
--- a/database/ddl/ref-constraint/formation_formateur_session_formation_instance_id_fk.php
+++ b/database/ddl/ref-constraint/formation_formateur_session_formation_instance_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_instance_pk',
+    'index'       => 'formation_instance_id_uindex',
     'columns'     => [
         'session_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_formateur_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/formation_formateur_unicaen_utilisateur_user_id_fk.php
index b100ca8b43540f319c949d263ae92a5e0b03c31d..d736dc4fd8bf808170027d1173b98ed8fe91f617 100644
--- a/database/ddl/ref-constraint/formation_formateur_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_formateur_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'SET NULL',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'user_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_formation_abonnement_formation_id_fk.php b/database/ddl/ref-constraint/formation_formation_abonnement_formation_id_fk.php
index 01df40eb3d0214450282d6c1bbf64e17a4480005..9e25bf141b29294b427b7242ecc5e068c229ded2 100644
--- a/database/ddl/ref-constraint/formation_formation_abonnement_formation_id_fk.php
+++ b/database/ddl/ref-constraint/formation_formation_abonnement_formation_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_pk',
+    'index'       => 'formation_id_uindex',
     'columns'     => [
         'formation_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_formation_abonnement_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/formation_formation_abonnement_unicaen_utilisateur_user_id_fk.php
index 9a84ef4d1241511fa136b65ec448d1077a377a8b..d73d5cb76aae509445d9016f19b579f76092424b 100644
--- a/database/ddl/ref-constraint/formation_formation_abonnement_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_formation_abonnement_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_formation_abonnement_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/formation_formation_abonnement_unicaen_utilisateur_user_id_fk_2.php
index 04ab217aa9be7ef0d0bc975b317a063c37583311..5352de202a8ba17fcb9e4f34db1b01a3a1b6d48a 100644
--- a/database/ddl/ref-constraint/formation_formation_abonnement_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_formation_abonnement_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_formation_abonnement_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/formation_formation_abonnement_unicaen_utilisateur_user_id_fk_3.php
index 47aee1d79c08666f7696620e37e70d3ab506b0c0..2f6a5b2bb0dafdf18aa8a12fd379a8712250ffc0 100644
--- a/database/ddl/ref-constraint/formation_formation_abonnement_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_formation_abonnement_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_groupe_createur_fk.php b/database/ddl/ref-constraint/formation_groupe_createur_fk.php
index 75fd381e70a835cd68946caed0c35a7a4b1e8ef0..0b43f11bf0e6193a7ef7fa7678cf843b341cba73 100644
--- a/database/ddl/ref-constraint/formation_groupe_createur_fk.php
+++ b/database/ddl/ref-constraint/formation_groupe_createur_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_groupe_destructeur_fk.php b/database/ddl/ref-constraint/formation_groupe_destructeur_fk.php
index 3707ef6362fdf618382e2c1538b4043a34d34aac..899cd7354455e01383afb90700c52ab8afe15a1d 100644
--- a/database/ddl/ref-constraint/formation_groupe_destructeur_fk.php
+++ b/database/ddl/ref-constraint/formation_groupe_destructeur_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_groupe_modificateur_fk.php b/database/ddl/ref-constraint/formation_groupe_modificateur_fk.php
index eb1ae1b6a1aa500147f5f596853ba37f478e4852..eda21412bdafb1152e97a2a30ea5383d01922782 100644
--- a/database/ddl/ref-constraint/formation_groupe_modificateur_fk.php
+++ b/database/ddl/ref-constraint/formation_groupe_modificateur_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_inscription_etat_etat_id_fk.php b/database/ddl/ref-constraint/formation_inscription_etat_etat_id_fk.php
index 1c175fdef7ec32f633188837d425ef8541c5e63a..7ea3c19748c2ffd2a5baabdf798c551f66bf699d 100644
--- a/database/ddl/ref-constraint/formation_inscription_etat_etat_id_fk.php
+++ b/database/ddl/ref-constraint/formation_inscription_etat_etat_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_etat_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'unicaen_etat_instance_pk',
+    'index'       => 'unicaen_etat_instance_id_index',
     'columns'     => [
         'etat_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_inscription_fichier_fichier_fichier_id_fk.php b/database/ddl/ref-constraint/formation_inscription_fichier_fichier_fichier_id_fk.php
index 0cc664a98801c76ab139848355dc6f059d142967..a6537bc28243a9b57d6390934c26a12ff51124d5 100644
--- a/database/ddl/ref-constraint/formation_inscription_fichier_fichier_fichier_id_fk.php
+++ b/database/ddl/ref-constraint/formation_inscription_fichier_fichier_fichier_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'fichier_fichier',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'fichier_fichier_pk',
+    'index'       => 'fichier_fichier_id_uindex',
     'columns'     => [
         'fichier_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_inscription_formation_instance_id_fk.php b/database/ddl/ref-constraint/formation_inscription_formation_instance_id_fk.php
index de4eee1d3cc4d21fc10603f51fe7907ed5a61054..b4b110abbb4a665aa06b7262dba045ac556f82cb 100644
--- a/database/ddl/ref-constraint/formation_inscription_formation_instance_id_fk.php
+++ b/database/ddl/ref-constraint/formation_inscription_formation_instance_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_instance_pk',
+    'index'       => 'formation_instance_id_uindex',
     'columns'     => [
         'session_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_inscription_frais_user_id_fk.php b/database/ddl/ref-constraint/formation_inscription_frais_user_id_fk.php
index 7c1f12e04ae5d196d22be77a13f21c8484ce63dd..d8ace07d89f41bfd91bc43c748576943afe9a9a0 100644
--- a/database/ddl/ref-constraint/formation_inscription_frais_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_inscription_frais_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_inscription_frais_user_id_fk_2.php b/database/ddl/ref-constraint/formation_inscription_frais_user_id_fk_2.php
index d8576a5e882f3bcd139b00edc7c2322b55f6d409..90ea06a8284ecb71d6b393a91e7be9940d7d4b69 100644
--- a/database/ddl/ref-constraint/formation_inscription_frais_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_inscription_frais_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_inscription_frais_user_id_fk_3.php b/database/ddl/ref-constraint/formation_inscription_frais_user_id_fk_3.php
index f5da6566dbf10a9ad4d83712cfa7e599f321b6f6..36dd5dd77f9db33d0ec89f7d2be9e2c39ea2d99f 100644
--- a/database/ddl/ref-constraint/formation_inscription_frais_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_inscription_frais_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_inscription_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/formation_inscription_unicaen_utilisateur_user_id_fk.php
index c33011a4a0083800c95b350cd235f888bc36f0a1..88ad46e19200ce5bdc6eae24e5a97bdeb3212147 100644
--- a/database/ddl/ref-constraint/formation_inscription_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_inscription_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_inscription_unicaen_utilisateur_user_id_fk2.php b/database/ddl/ref-constraint/formation_inscription_unicaen_utilisateur_user_id_fk2.php
index 3d85af5d97b297178dda190ae725bfc4b2b2237f..eede1329bd6d8eb8afd1cc0e9002632d6476e548 100644
--- a/database/ddl/ref-constraint/formation_inscription_unicaen_utilisateur_user_id_fk2.php
+++ b/database/ddl/ref-constraint/formation_inscription_unicaen_utilisateur_user_id_fk2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_inscription_unicaen_utilisateur_user_id_fk3.php b/database/ddl/ref-constraint/formation_inscription_unicaen_utilisateur_user_id_fk3.php
index 91986b6c397711111cf73d68f97e5eebd8542e70..4ecfc39b90797432e0680af5bf6fc674788f0d6d 100644
--- a/database/ddl/ref-constraint/formation_inscription_unicaen_utilisateur_user_id_fk3.php
+++ b/database/ddl/ref-constraint/formation_inscription_unicaen_utilisateur_user_id_fk3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_etat_etat_id_fk.php b/database/ddl/ref-constraint/formation_instance_etat_etat_id_fk.php
index 2e04b279aca556dea15ab8d01e0a523d374879b3..f79286da3f79010a35ced499564eb2307d2c052a 100644
--- a/database/ddl/ref-constraint/formation_instance_etat_etat_id_fk.php
+++ b/database/ddl/ref-constraint/formation_instance_etat_etat_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_etat_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'unicaen_etat_instance_pk',
+    'index'       => 'unicaen_etat_instance_id_index',
     'columns'     => [
         'etat_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_etat_session_id_fk.php b/database/ddl/ref-constraint/formation_instance_etat_session_id_fk.php
index 0441c268a5b076be303b47f6971aa89343591409..0b976e94a5b06d460e30b8ee70fa2d1e127d476d 100644
--- a/database/ddl/ref-constraint/formation_instance_etat_session_id_fk.php
+++ b/database/ddl/ref-constraint/formation_instance_etat_session_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_instance_pk',
+    'index'       => 'formation_instance_id_uindex',
     'columns'     => [
         'session_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_formateur_user_id_fk.php b/database/ddl/ref-constraint/formation_instance_formateur_user_id_fk.php
index a406790282e23e9a1e08518938ceef2c0d66d17d..05643a883c08262372e9e616b4e36d4311c1f53c 100644
--- a/database/ddl/ref-constraint/formation_instance_formateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_instance_formateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_formateur_user_id_fk_2.php b/database/ddl/ref-constraint/formation_instance_formateur_user_id_fk_2.php
index 93d48c3907f319b0ad55cb397c60fb6276643294..d581bdeb3ed5cd4e0cce8d1117cee91c8daba918 100644
--- a/database/ddl/ref-constraint/formation_instance_formateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_instance_formateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_formateur_user_id_fk_3.php b/database/ddl/ref-constraint/formation_instance_formateur_user_id_fk_3.php
index c1be58f6ba4f41ae698a914ee8575544f786c506..6077b621284d0fead5b28364dcf193988a091752 100644
--- a/database/ddl/ref-constraint/formation_instance_formateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_instance_formateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_formation_id_fk.php b/database/ddl/ref-constraint/formation_instance_formation_id_fk.php
index 0a9511fb6ec444c644c2eccf648ccda16bb00458..78ab2cd09c00ff2d69b0492ad6100e84b9cb2534 100644
--- a/database/ddl/ref-constraint/formation_instance_formation_id_fk.php
+++ b/database/ddl/ref-constraint/formation_instance_formation_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_pk',
+    'index'       => 'formation_id_uindex',
     'columns'     => [
         'formation_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_frais_formation_instance_inscrit_id_fk.php b/database/ddl/ref-constraint/formation_instance_frais_formation_instance_inscrit_id_fk.php
index 71b81f9422ef9d94e97ca134fc3c892849c99d2a..91275e90a2e8e30f9f803094ae31da1b9d13ca66 100644
--- a/database/ddl/ref-constraint/formation_instance_frais_formation_instance_inscrit_id_fk.php
+++ b/database/ddl/ref-constraint/formation_instance_frais_formation_instance_inscrit_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation_instance_inscrit',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_instance_inscrit_pk',
+    'index'       => 'formation_instance_inscrit_id_uindex',
     'columns'     => [
         'inscrit_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_frais_user_id_fk.php b/database/ddl/ref-constraint/formation_instance_frais_user_id_fk.php
index 6f61fa85521de1bcf2255366ccec59d39c565c91..4b2b08208d5574b70b553eb936e728760c5817c7 100644
--- a/database/ddl/ref-constraint/formation_instance_frais_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_instance_frais_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_frais_user_id_fk_2.php b/database/ddl/ref-constraint/formation_instance_frais_user_id_fk_2.php
index d37e9744d79a32593c7627102852be558347d3f3..36a56ca25527a24786694f09ff86d6f00882d0bf 100644
--- a/database/ddl/ref-constraint/formation_instance_frais_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_instance_frais_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_frais_user_id_fk_3.php b/database/ddl/ref-constraint/formation_instance_frais_user_id_fk_3.php
index a3310eb94ce433b0d916f04ae78e7b4433ac0852..f9c827904197120a53830449e8ed07c6afd3e706 100644
--- a/database/ddl/ref-constraint/formation_instance_frais_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_instance_frais_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_inscrit_formation_instance_id_fk.php b/database/ddl/ref-constraint/formation_instance_inscrit_formation_instance_id_fk.php
index abd124f0fdb7b3cba9f2a371d46e91a27a3107d5..df5870b3b49ec15a83e3c242c4ba6ab49959cef5 100644
--- a/database/ddl/ref-constraint/formation_instance_inscrit_formation_instance_id_fk.php
+++ b/database/ddl/ref-constraint/formation_instance_inscrit_formation_instance_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_instance_pk',
+    'index'       => 'formation_instance_id_uindex',
     'columns'     => [
         'instance_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_inscrit_unicaen_utilisateur_user_id_fk_1.php b/database/ddl/ref-constraint/formation_instance_inscrit_unicaen_utilisateur_user_id_fk_1.php
index 0c4581d6e347032df51498dd97d23000e013667a..b7a48b09290574b85d9f4c7df022929cb730637a 100644
--- a/database/ddl/ref-constraint/formation_instance_inscrit_unicaen_utilisateur_user_id_fk_1.php
+++ b/database/ddl/ref-constraint/formation_instance_inscrit_unicaen_utilisateur_user_id_fk_1.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_inscrit_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/formation_instance_inscrit_unicaen_utilisateur_user_id_fk_2.php
index e9940e7164fbad46fd34ef7ba2713434615ae8c8..dbaa3fe652d9788a7d4b73e94f876f29ffab9113 100644
--- a/database/ddl/ref-constraint/formation_instance_inscrit_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_instance_inscrit_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_inscrit_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/formation_instance_inscrit_unicaen_utilisateur_user_id_fk_3.php
index 2b32a6ce84e795764590bba2b7282c606ebd2c9a..363a13d9f44bbfc002604a1ba5aad71f20ac63be 100644
--- a/database/ddl/ref-constraint/formation_instance_inscrit_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_instance_inscrit_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_journee_formation_instance_id_fk.php b/database/ddl/ref-constraint/formation_instance_journee_formation_instance_id_fk.php
index a72b328721911657bf502636a53ac53ad7f6b868..44f64f6999b6fd5702d2931bf28e846d6a531fcb 100644
--- a/database/ddl/ref-constraint/formation_instance_journee_formation_instance_id_fk.php
+++ b/database/ddl/ref-constraint/formation_instance_journee_formation_instance_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_instance_pk',
+    'index'       => 'formation_instance_id_uindex',
     'columns'     => [
         'instance_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_journee_user_id_fk.php b/database/ddl/ref-constraint/formation_instance_journee_user_id_fk.php
index ea6d28c9826350fd3b3e4e77a142e0bfd7794e54..3d74d81f9669e3cb56945a1ed2d31b1470f311ca 100644
--- a/database/ddl/ref-constraint/formation_instance_journee_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_instance_journee_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_journee_user_id_fk_2.php b/database/ddl/ref-constraint/formation_instance_journee_user_id_fk_2.php
index c2c763bfc83468bf8c7ba5d303f90c474e8d534e..94807c0dedc2fc9daf04ff5f79eff56cf1d4e066 100644
--- a/database/ddl/ref-constraint/formation_instance_journee_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_instance_journee_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_journee_user_id_fk_3.php b/database/ddl/ref-constraint/formation_instance_journee_user_id_fk_3.php
index 23c826a8cabd685b662935b34ab4549e1e82fdf9..1398c79f11b33fd70b44e5aa7387147b6353a110 100644
--- a/database/ddl/ref-constraint/formation_instance_journee_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_instance_journee_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_presence_formation_instance_journee_id_fk.php b/database/ddl/ref-constraint/formation_instance_presence_formation_instance_journee_id_fk.php
index 7efd1d3894dceaf643543596deacd7f04a153b5e..848dbe60a7823a46db95b66e1977fb2753624ad7 100644
--- a/database/ddl/ref-constraint/formation_instance_presence_formation_instance_journee_id_fk.php
+++ b/database/ddl/ref-constraint/formation_instance_presence_formation_instance_journee_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation_seance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_instance_journee_pk',
+    'index'       => 'formation_instance_journee_id_uindex',
     'columns'     => [
         'journee_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_presence_user_id_fk.php b/database/ddl/ref-constraint/formation_instance_presence_user_id_fk.php
index cc193be0345565937bf00c9391fe40f0d7dbaf7d..29bc477e1f9c974f7b7ffbc1fc6ee8e40d17e9d3 100644
--- a/database/ddl/ref-constraint/formation_instance_presence_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_instance_presence_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_presence_user_id_fk_2.php b/database/ddl/ref-constraint/formation_instance_presence_user_id_fk_2.php
index d6629d5435d80e20d82c49c397d9bf3dda8602ae..04003d52e69e21bb218b55d8bc17165718bd7e77 100644
--- a/database/ddl/ref-constraint/formation_instance_presence_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_instance_presence_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_presence_user_id_fk_3.php b/database/ddl/ref-constraint/formation_instance_presence_user_id_fk_3.php
index 28a1362f75cd1c912944f365977631815b7e7b77..5bc8297b6226e6de5da811e64e007239134d663e 100644
--- a/database/ddl/ref-constraint/formation_instance_presence_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_instance_presence_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_user_id_fk_1.php b/database/ddl/ref-constraint/formation_instance_user_id_fk_1.php
index b14a8e40aa4df1eeaba5d0583a66069e9e9a0beb..6e6bf7dfb018b164ea32b599dcf1b1dda30590ab 100644
--- a/database/ddl/ref-constraint/formation_instance_user_id_fk_1.php
+++ b/database/ddl/ref-constraint/formation_instance_user_id_fk_1.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_user_id_fk_2.php b/database/ddl/ref-constraint/formation_instance_user_id_fk_2.php
index b0175197cf5799da72c059a0e8d49abb395caa2e..8036334c42f225f1b7d15ed95ed13ca52a553fc1 100644
--- a/database/ddl/ref-constraint/formation_instance_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_instance_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_instance_user_id_fk_3.php b/database/ddl/ref-constraint/formation_instance_user_id_fk_3.php
index ef21d15ad86d7c1a59109f2122be58dd5b01f552..e6886d00dfef76c0bcffadcf94006d828fa618f6 100644
--- a/database/ddl/ref-constraint/formation_instance_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_instance_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_lieu_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/formation_lieu_unicaen_utilisateur_user_id_fk.php
index 4a4a0f2790b1f7beb9ce5a5a7f14482309eea3b1..04cc36f775c4c2d7e90f1ebbf2358439ff308840 100644
--- a/database/ddl/ref-constraint/formation_lieu_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_lieu_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_lieu_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/formation_lieu_unicaen_utilisateur_user_id_fk_2.php
index b00ed3185a576b0a918543cf03903bb526890b75..8bd5c56769bc54a84b7e953fe1043285580bef4d 100644
--- a/database/ddl/ref-constraint/formation_lieu_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_lieu_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_lieu_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/formation_lieu_unicaen_utilisateur_user_id_fk_3.php
index b673cb8d950dc3b36738175754a92d575dc5de28..ec32ce765c6179fc6d9af6782858c87cf64622f6 100644
--- a/database/ddl/ref-constraint/formation_lieu_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_lieu_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_modificateur_fk.php b/database/ddl/ref-constraint/formation_modificateur_fk.php
index 3c7615b278f42ff59f9bdc446fc10760e2b87677..99f16fe1f806ac35573dd99071f6d3decb84485a 100644
--- a/database/ddl/ref-constraint/formation_modificateur_fk.php
+++ b/database/ddl/ref-constraint/formation_modificateur_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_obtenue_competence_formation_id_fk.php b/database/ddl/ref-constraint/formation_obtenue_competence_formation_id_fk.php
index 6b174253a09bf0cd741a88bbcd678414dab85975..36eea92b968f33088e12ca5758139904892d0759 100644
--- a/database/ddl/ref-constraint/formation_obtenue_competence_formation_id_fk.php
+++ b/database/ddl/ref-constraint/formation_obtenue_competence_formation_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_pk',
+    'index'       => 'formation_id_uindex',
     'columns'     => [
         'formation_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_plan_formation_histo_createur_id_fkey.php b/database/ddl/ref-constraint/formation_plan_formation_histo_createur_id_fkey.php
index 32398177263d5261df87b5ac898257efdb379cba..ede3c282c8191cea676575f5fb8916d09a8dab35 100644
--- a/database/ddl/ref-constraint/formation_plan_formation_histo_createur_id_fkey.php
+++ b/database/ddl/ref-constraint/formation_plan_formation_histo_createur_id_fkey.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_plan_formation_histo_destructeur_id_fkey.php b/database/ddl/ref-constraint/formation_plan_formation_histo_destructeur_id_fkey.php
index 19261189ed5e517df195a09103367af6c409bd99..0be012700204ddad923982622574df3e96f20314 100644
--- a/database/ddl/ref-constraint/formation_plan_formation_histo_destructeur_id_fkey.php
+++ b/database/ddl/ref-constraint/formation_plan_formation_histo_destructeur_id_fkey.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_plan_formation_histo_modificateur_id_fkey.php b/database/ddl/ref-constraint/formation_plan_formation_histo_modificateur_id_fkey.php
index 4b116844e7720eb549252027dc7e4eec86b60906..ae0e8410f5f8f556021d1ee1dc115cbdb050a5a5 100644
--- a/database/ddl/ref-constraint/formation_plan_formation_histo_modificateur_id_fkey.php
+++ b/database/ddl/ref-constraint/formation_plan_formation_histo_modificateur_id_fkey.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_plan_formation_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/formation_plan_formation_unicaen_utilisateur_user_id_fk.php
index 5f363029ec2ae09fc015609696890eedd5f80444..22b16b0dbf1d64a861f85600d7c99b7c5a738ad1 100644
--- a/database/ddl/ref-constraint/formation_plan_formation_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_plan_formation_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_plan_formation_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/formation_plan_formation_unicaen_utilisateur_user_id_fk_2.php
index 7825d7bfa8e6c9635a42e99947e19ebddf43b3dc..8f411c6b06fd91c1313673fa8e8478a2e348c1c1 100644
--- a/database/ddl/ref-constraint/formation_plan_formation_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_plan_formation_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_plan_formation_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/formation_plan_formation_unicaen_utilisateur_user_id_fk_3.php
index 686470afe7bfa34944a128ab227fb2e21e1f9b91..1d428b775ff38ce158e0f451a6b715cc815d3638 100644
--- a/database/ddl/ref-constraint/formation_plan_formation_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_plan_formation_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk.php
index 86777f71f05c96b5534e7d69d6ffa2b9f0df710b..4fd30a31eeb93fba081605cfb49b2931ec2b2c0b 100644
--- a/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'SET NULL',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'user_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk_2.php
index 640988125c81975aa6e829e220eb56674c350d11..4911e232d61266af6732f75827edbc59440138ee 100644
--- a/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk_3.php
index 4a84ff385fda0efff3e3659039e32869ce903c3c..ba624d9d2a5b7be005ac08ba31f4d3ba32d02765 100644
--- a/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk_4.php b/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk_4.php
index e926566da1bba0959d5276c7dc9ff88f54f38343..05005d63e6a284b011d84d3aa468fb900efd24f0 100644
--- a/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk_4.php
+++ b/database/ddl/ref-constraint/formation_referent_unicaen_utilisateur_user_id_fk_4.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_session_gestionnaire_formation_instance_id_fk.php b/database/ddl/ref-constraint/formation_session_gestionnaire_formation_instance_id_fk.php
index 575a68b1f5961f4c37b32b640a97602ea086c059..5b17a459a98a63ccd8468d9fdf580f5dba1e67ab 100644
--- a/database/ddl/ref-constraint/formation_session_gestionnaire_formation_instance_id_fk.php
+++ b/database/ddl/ref-constraint/formation_session_gestionnaire_formation_instance_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_instance_pk',
+    'index'       => 'formation_instance_id_uindex',
     'columns'     => [
         'session_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_session_gestionnaire_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/formation_session_gestionnaire_unicaen_utilisateur_user_id_fk.php
index a142302cfcdae8b5fe6b33f46d96e1c0634de0af..2ac0f25ceb214f5c83478c7d9b4ad0dfea9f27a7 100644
--- a/database/ddl/ref-constraint/formation_session_gestionnaire_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_session_gestionnaire_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'gestionnaire_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_session_mail_formation_instance_id_fk.php b/database/ddl/ref-constraint/formation_session_mail_formation_instance_id_fk.php
index 209b827129d752582c5d4e38cbd0c816f6ba3595..461b9ae1e669ad415c14a7d8e5e3b3a6e254092a 100644
--- a/database/ddl/ref-constraint/formation_session_mail_formation_instance_id_fk.php
+++ b/database/ddl/ref-constraint/formation_session_mail_formation_instance_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_instance_pk',
+    'index'       => 'formation_instance_id_uindex',
     'columns'     => [
         'session_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_session_mail_unicaen_mail_mail_id_fk.php b/database/ddl/ref-constraint/formation_session_mail_unicaen_mail_mail_id_fk.php
index dcdf0cee7898c57e3ed7370c2dc5d347add27b4d..7dbf0c840bffbcba0ef1aa40c741aceca4873c26 100644
--- a/database/ddl/ref-constraint/formation_session_mail_unicaen_mail_mail_id_fk.php
+++ b/database/ddl/ref-constraint/formation_session_mail_unicaen_mail_mail_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_mail_mail',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'umail_pkey',
+    'index'       => 'ummail_id_uindex',
     'columns'     => [
         'mail_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_session_parametre_unicaen_utilisateur_user_null_fk_1.php b/database/ddl/ref-constraint/formation_session_parametre_unicaen_utilisateur_user_null_fk_1.php
index b2079a48b68ef8868b7314d7f887b8332d6446a5..7a9e8b19691892da2941010fd96c65253eda16e3 100644
--- a/database/ddl/ref-constraint/formation_session_parametre_unicaen_utilisateur_user_null_fk_1.php
+++ b/database/ddl/ref-constraint/formation_session_parametre_unicaen_utilisateur_user_null_fk_1.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_session_parametre_unicaen_utilisateur_user_null_fk_2.php b/database/ddl/ref-constraint/formation_session_parametre_unicaen_utilisateur_user_null_fk_2.php
index b5537bda2801d4031cee758269ba5a0292abc85c..e7704c6667c0820476fb9e9db1f62be449aee82c 100644
--- a/database/ddl/ref-constraint/formation_session_parametre_unicaen_utilisateur_user_null_fk_2.php
+++ b/database/ddl/ref-constraint/formation_session_parametre_unicaen_utilisateur_user_null_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_session_parametre_unicaen_utilisateur_user_null_fk_3.php b/database/ddl/ref-constraint/formation_session_parametre_unicaen_utilisateur_user_null_fk_3.php
index 2ad03ea15abdbc517237c533ca8f8fbb5d14a57e..61be5a79f31652da93339ddc3cb6dc5f06d04139 100644
--- a/database/ddl/ref-constraint/formation_session_parametre_unicaen_utilisateur_user_null_fk_3.php
+++ b/database/ddl/ref-constraint/formation_session_parametre_unicaen_utilisateur_user_null_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_session_type_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/formation_session_type_unicaen_utilisateur_user_id_fk.php
index b70ddbf8fe0a9ff91d8357863edf52ad6637a51c..a15299080cfa23a5076ec1497117971110a286a4 100644
--- a/database/ddl/ref-constraint/formation_session_type_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_session_type_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_session_type_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/formation_session_type_unicaen_utilisateur_user_id_fk_2.php
index bb69895cfdea60af02ef4860f494bdeef9cff6f8..e4721acb9e3b47b1a708a70dd0594ab645f8594a 100644
--- a/database/ddl/ref-constraint/formation_session_type_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/formation_session_type_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_session_type_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/formation_session_type_unicaen_utilisateur_user_id_fk_3.php
index 9c92bb48ce47c0355f7d03d6e4c49f89e5000eff..17c4fbcac56b1f41efbbf911121daeb080121f9e 100644
--- a/database/ddl/ref-constraint/formation_session_type_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/formation_session_type_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk.php
index af867c4eb09998f2a6a9007918750cbdeb09029e..3e55c7fbe4453c4afa661a4cb68b5922f27cd27f 100644
--- a/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk2.php b/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk2.php
index 32c6c898415fecf7c13c58d0f0951f4e95dcc305..7a8965665f4ced178964e779c808839d2f50f776 100644
--- a/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk2.php
+++ b/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk3.php b/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk3.php
index 3d768c02ac50af70fe0130b7593af2f610c18b87..6338f8914f8abac4cd92e593ff2c93dd50792e97 100644
--- a/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk3.php
+++ b/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk4.php b/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk4.php
index 3188a9041c1d2c90725f9a01428937df0054c34d..79eeedd7d624dea88d21c37fd53741cb55e167f6 100644
--- a/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk4.php
+++ b/database/ddl/ref-constraint/formation_stagiaire_externe_unicaen_utilisateur_user_id_fk4.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'utilisateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/formation_type_fk.php b/database/ddl/ref-constraint/formation_type_fk.php
new file mode 100644
index 0000000000000000000000000000000000000000..c005000ba0caabf115516e113f9c752bc1fb00a5
--- /dev/null
+++ b/database/ddl/ref-constraint/formation_type_fk.php
@@ -0,0 +1,18 @@
+<?php
+
+//@formatter:off
+
+return [
+    'schema'      => 'public',
+    'name'        => 'formation_type_fk',
+    'table'       => 'formation',
+    'rtable'      => 'formation_action_type',
+    'update_rule' => 'NO ACTION',
+    'delete_rule' => 'SET NULL',
+    'index'       => 'formation_action_type_pk',
+    'columns'     => [
+        'action_type_id' => 'id',
+    ],
+];
+
+//@formatter:on
diff --git a/database/ddl/ref-constraint/formaton_formation_domaine_formation_id_fk.php b/database/ddl/ref-constraint/formaton_formation_domaine_formation_id_fk.php
index 89f4b40ce55a9a20421afb6e6abbf7db052de2e9..2abc938f34bc4eb79c1d7ce704976da1919145f4 100644
--- a/database/ddl/ref-constraint/formaton_formation_domaine_formation_id_fk.php
+++ b/database/ddl/ref-constraint/formaton_formation_domaine_formation_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_pk',
+    'index'       => 'formation_id_uindex',
     'columns'     => [
         'formation_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/fse_formation_instance_id_fk.php b/database/ddl/ref-constraint/fse_formation_instance_id_fk.php
index c55e207d3e9a1573da63d8f934c3ec64032bd19e..0a980a3fd35f46ab33bc45d70e33bd84d7bc93e7 100644
--- a/database/ddl/ref-constraint/fse_formation_instance_id_fk.php
+++ b/database/ddl/ref-constraint/fse_formation_instance_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'formation_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_instance_pk',
+    'index'       => 'formation_instance_id_uindex',
     'columns'     => [
         'session_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/indicateur_abonnement_indicateur_definition_id_fk.php b/database/ddl/ref-constraint/indicateur_abonnement_indicateur_definition_id_fk.php
index 01374e99caeea5477997a3b57c557e8ad9f3a5e7..7db263fd3efef4596d0f6dc7554ab1b57c147d7f 100644
--- a/database/ddl/ref-constraint/indicateur_abonnement_indicateur_definition_id_fk.php
+++ b/database/ddl/ref-constraint/indicateur_abonnement_indicateur_definition_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_indicateur_indicateur',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'indicateur_pk',
+    'index'       => 'indicateur_id_uindex',
     'columns'     => [
         'indicateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/indicateur_abonnement_user_id_fk.php b/database/ddl/ref-constraint/indicateur_abonnement_user_id_fk.php
index 37e61b81883c02b1205c7776d9f418cb63d10acb..70583357bb3f846ed4b545d138ff8bddbf3d3472 100644
--- a/database/ddl/ref-constraint/indicateur_abonnement_user_id_fk.php
+++ b/database/ddl/ref-constraint/indicateur_abonnement_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'user_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/inscription_etat_etat_id_fk.php b/database/ddl/ref-constraint/inscription_etat_etat_id_fk.php
index 3c9b079576689efdcc394f4f88f13f1ac571505d..3610c5f741668ce54869221d61b0c58dca8d896a 100644
--- a/database/ddl/ref-constraint/inscription_etat_etat_id_fk.php
+++ b/database/ddl/ref-constraint/inscription_etat_etat_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_etat_instance',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'unicaen_etat_instance_pk',
+    'index'       => 'unicaen_etat_instance_id_index',
     'columns'     => [
         'etat_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/inscription_etat_inscription_id_fk.php b/database/ddl/ref-constraint/inscription_etat_inscription_id_fk.php
deleted file mode 100644
index 8834d953ac4198550251dc3901e2eb2dd6a90cef..0000000000000000000000000000000000000000
--- a/database/ddl/ref-constraint/inscription_etat_inscription_id_fk.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'inscription_etat_inscription_id_fk',
-    'table'       => 'formation_inscription_etat',
-    'rtable'      => 'formation_inscription',
-    'update_rule' => 'NO ACTION',
-    'delete_rule' => 'CASCADE',
-    'index'       => 'formation_inscription_pk',
-    'columns'     => [
-        'inscription_id' => 'id',
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/ref-constraint/metier_categorie_id_fk.php b/database/ddl/ref-constraint/metier_categorie_id_fk.php
index 3ee0b60b69baad448cf82224bcb3014d03da24d0..f7e2abfa43e9fe5c9d0c8035a5c4134a0bf3c817 100644
--- a/database/ddl/ref-constraint/metier_categorie_id_fk.php
+++ b/database/ddl/ref-constraint/metier_categorie_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'carriere_categorie',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'SET NULL',
-    'index'       => 'categorie_pk',
+    'index'       => 'categorie_id_uindex',
     'columns'     => [
         'categorie_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_domaine_domaine_id_fk.php b/database/ddl/ref-constraint/metier_domaine_domaine_id_fk.php
index b87e2e8e2ec99ee4c049b96708ed76668ae043f8..c084f21442d753cc66edcb378a8556a9112c0acd 100644
--- a/database/ddl/ref-constraint/metier_domaine_domaine_id_fk.php
+++ b/database/ddl/ref-constraint/metier_domaine_domaine_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'metier_domaine',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'domaine_pk',
+    'index'       => 'domaine_id_uindex',
     'columns'     => [
         'domaine_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_domaine_famille_metier_domaine_id_fk.php b/database/ddl/ref-constraint/metier_domaine_famille_metier_domaine_id_fk.php
index c49a55bae47c7e8e79d2aa04f8383df5dcc6902c..2f92c3be0a7f5bf3dfc7fb294855ef386f9b8939 100644
--- a/database/ddl/ref-constraint/metier_domaine_famille_metier_domaine_id_fk.php
+++ b/database/ddl/ref-constraint/metier_domaine_famille_metier_domaine_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'metier_domaine',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'domaine_pk',
+    'index'       => 'domaine_id_uindex',
     'columns'     => [
         'domaine_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_domaine_famille_metier_familleprofessionnelle_id_fk.php b/database/ddl/ref-constraint/metier_domaine_famille_metier_familleprofessionnelle_id_fk.php
index aeb213ed3a1518e1e825907929d73cef99b6d904..4c1e70facf8d9393f885d8f8bf0f785ceb5f6a61 100644
--- a/database/ddl/ref-constraint/metier_domaine_famille_metier_familleprofessionnelle_id_fk.php
+++ b/database/ddl/ref-constraint/metier_domaine_famille_metier_familleprofessionnelle_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'metier_familleprofessionnelle',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'metier_famille_pk',
+    'index'       => 'metier_famille_id_uindex',
     'columns'     => [
         'famille_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_domaine_metier_id_fk.php b/database/ddl/ref-constraint/metier_domaine_metier_id_fk.php
index 0675f4c9ee52bda34a83a9003e086ab3a1f1c20e..559bcd392b872463f308994748d04f5c4452563b 100644
--- a/database/ddl/ref-constraint/metier_domaine_metier_id_fk.php
+++ b/database/ddl/ref-constraint/metier_domaine_metier_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'metier_metier',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'metier_pkey',
+    'index'       => 'metier_id_uindex',
     'columns'     => [
         'metier_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_niveau_enveloppe_id_fk.php b/database/ddl/ref-constraint/metier_niveau_enveloppe_id_fk.php
index e698ee07976c7ce4664e596e254e074c6a5ff92c..8d7bd7b2a9338b88f2d659a9ef251c1d2cdff209 100644
--- a/database/ddl/ref-constraint/metier_niveau_enveloppe_id_fk.php
+++ b/database/ddl/ref-constraint/metier_niveau_enveloppe_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'carriere_niveau_enveloppe',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'SET NULL',
-    'index'       => 'niveau_enveloppe_pk',
+    'index'       => 'niveau_enveloppe_id_uindex',
     'columns'     => [
         'niveaux_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_reference_metier_id_fk.php b/database/ddl/ref-constraint/metier_reference_metier_id_fk.php
index a1cac0246b95f0c439da5c6332a03fbdd8f34089..17628862a54ff26336493e44a91fd68a2db08fc3 100644
--- a/database/ddl/ref-constraint/metier_reference_metier_id_fk.php
+++ b/database/ddl/ref-constraint/metier_reference_metier_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'metier_metier',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'metier_pkey',
+    'index'       => 'metier_id_uindex',
     'columns'     => [
         'metier_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_reference_metier_referentiel_id_fk.php b/database/ddl/ref-constraint/metier_reference_metier_referentiel_id_fk.php
index 0c7b1d0ba30cb91d85015ec1c6fbf9ed6fa45ab9..ddea4da6fa1e3e9d65de10d6c21efe0147b1894b 100644
--- a/database/ddl/ref-constraint/metier_reference_metier_referentiel_id_fk.php
+++ b/database/ddl/ref-constraint/metier_reference_metier_referentiel_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'metier_referentiel',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'metier_referentiel_pk',
+    'index'       => 'metier_referentiel_id_uindex',
     'columns'     => [
         'referentiel_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_reference_user_id_fk.php b/database/ddl/ref-constraint/metier_reference_user_id_fk.php
index 7b32aa70d44b3b8c0e502c39d9733389d48e3031..be77337c609deaac983373b5ead13ce4b01006d9 100644
--- a/database/ddl/ref-constraint/metier_reference_user_id_fk.php
+++ b/database/ddl/ref-constraint/metier_reference_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_reference_user_id_fk_2.php b/database/ddl/ref-constraint/metier_reference_user_id_fk_2.php
index ea03a098164fa6c03e0f4d24b17f152214160b0e..b925384d9ee17b0a6b2f98770b30a471fc69b9cf 100644
--- a/database/ddl/ref-constraint/metier_reference_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/metier_reference_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_reference_user_id_fk_3.php b/database/ddl/ref-constraint/metier_reference_user_id_fk_3.php
index 87940e3d7ff1d175282663ec9117d50d5fd407fe..aaad5bc0d853f145a61b31d1ce94181a182f4321 100644
--- a/database/ddl/ref-constraint/metier_reference_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/metier_reference_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_referentiel_user_id_fk.php b/database/ddl/ref-constraint/metier_referentiel_user_id_fk.php
index aad8ef1d83500d6c0bf171a078778e94141b2d9c..31ad405f9dd191a72d5a75bfcca3be435fb659f9 100644
--- a/database/ddl/ref-constraint/metier_referentiel_user_id_fk.php
+++ b/database/ddl/ref-constraint/metier_referentiel_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_referentiel_user_id_fk_2.php b/database/ddl/ref-constraint/metier_referentiel_user_id_fk_2.php
index 204a6f2aee158d732bcd0a238eacbf9a0df93de5..c9ed987c8b93600ae55c3ab535baf5dabad34cf3 100644
--- a/database/ddl/ref-constraint/metier_referentiel_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/metier_referentiel_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_referentiel_user_id_fk_3.php b/database/ddl/ref-constraint/metier_referentiel_user_id_fk_3.php
index 5de83de04cdca73e631368b11e28a6a07d1494b7..048b7347392b8c090ad193f257c5705ea1ffcd0f 100644
--- a/database/ddl/ref-constraint/metier_referentiel_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/metier_referentiel_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_user_id_fk.php b/database/ddl/ref-constraint/metier_user_id_fk.php
index 38d9a6a00b1b29a7d4056c54b0b0491a4a089c8e..60711b7af8fa0358d7648bf0a2a8686cb8cb909e 100644
--- a/database/ddl/ref-constraint/metier_user_id_fk.php
+++ b/database/ddl/ref-constraint/metier_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_user_id_fk_2.php b/database/ddl/ref-constraint/metier_user_id_fk_2.php
index 1ce6c5d36a69c1ca68dd2b82d4dc129b10cb363d..305b9d039ff0d2fb289e8b959579f5534f44e5aa 100644
--- a/database/ddl/ref-constraint/metier_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/metier_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/metier_user_id_fk_3.php b/database/ddl/ref-constraint/metier_user_id_fk_3.php
index e65ee5610271d17c5e74f51fd0729c390b5e8392..270538924dd8946b18354dded004b8b1edd4e610 100644
--- a/database/ddl/ref-constraint/metier_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/metier_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/niveau_definition_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/niveau_definition_unicaen_utilisateur_user_id_fk.php
index 7b103441c58f1676f4f3dcc03b6ecc5257076b3d..520ec65659334e2498c6664c8ee91434af675d31 100644
--- a/database/ddl/ref-constraint/niveau_definition_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/niveau_definition_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/niveau_definition_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/niveau_definition_unicaen_utilisateur_user_id_fk_2.php
index c697357c2b553457ab4d2099f7b728088e80ae22..72628918adaa9cae7c5ff528f7cf2afedde9fcd7 100644
--- a/database/ddl/ref-constraint/niveau_definition_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/niveau_definition_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/niveau_definition_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/niveau_definition_unicaen_utilisateur_user_id_fk_3.php
index 4ed3d6b285e0890ac79a641d847ee3faf41f94c7..6247f7ae8bed060d8d1df62753a8eef55aa02856 100644
--- a/database/ddl/ref-constraint/niveau_definition_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/niveau_definition_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/niveau_enveloppe_niveau_definition_id_fk.php b/database/ddl/ref-constraint/niveau_enveloppe_niveau_definition_id_fk.php
index 94a6250aea483fd594d6f111968065befa352e7d..87c55b4e5d62f4e0941ae2f005bb650360165627 100644
--- a/database/ddl/ref-constraint/niveau_enveloppe_niveau_definition_id_fk.php
+++ b/database/ddl/ref-constraint/niveau_enveloppe_niveau_definition_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'carriere_niveau',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'niveau_definition_pk',
+    'index'       => 'niveau_definition_id_uindex',
     'columns'     => [
         'borne_inferieure_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/niveau_enveloppe_niveau_definition_id_fk_2.php b/database/ddl/ref-constraint/niveau_enveloppe_niveau_definition_id_fk_2.php
index a6f8f28089b644718c6b6499ea9f4fd507e341dd..8ce9de868f3cdfba64b21a9955c6bee24a084715 100644
--- a/database/ddl/ref-constraint/niveau_enveloppe_niveau_definition_id_fk_2.php
+++ b/database/ddl/ref-constraint/niveau_enveloppe_niveau_definition_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'carriere_niveau',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'niveau_definition_pk',
+    'index'       => 'niveau_definition_id_uindex',
     'columns'     => [
         'borne_superieure_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/niveau_enveloppe_niveau_definition_id_fk_3.php b/database/ddl/ref-constraint/niveau_enveloppe_niveau_definition_id_fk_3.php
index a102aaf319f27b93fa11720c660971dddf30b5f0..5ab0329b069fc7e5987a61ca1904e355b540a2cd 100644
--- a/database/ddl/ref-constraint/niveau_enveloppe_niveau_definition_id_fk_3.php
+++ b/database/ddl/ref-constraint/niveau_enveloppe_niveau_definition_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'carriere_niveau',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'SET NULL',
-    'index'       => 'niveau_definition_pk',
+    'index'       => 'niveau_definition_id_uindex',
     'columns'     => [
         'valeur_recommandee_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/niveau_enveloppe_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/niveau_enveloppe_unicaen_utilisateur_user_id_fk.php
index b1e5341168add5c8ab9398a2dfee53aae564758e..ce64f58e76ada048c32a6441601a5cefe84ccd77 100644
--- a/database/ddl/ref-constraint/niveau_enveloppe_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/niveau_enveloppe_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/niveau_enveloppe_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/niveau_enveloppe_unicaen_utilisateur_user_id_fk_2.php
index 3d35fdee0e19c43d2c2c22aee0fcc4ec46a1c6bd..f80ac6884e35f0a7dc0fc323bb7bd5c19e29fb8d 100644
--- a/database/ddl/ref-constraint/niveau_enveloppe_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/niveau_enveloppe_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/niveau_enveloppe_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/niveau_enveloppe_unicaen_utilisateur_user_id_fk_3.php
index a7370f79a13d0067943e212dfd34d1cd873f84a1..5aefec43092a4a879ab8320fccc69d69f4cb6c54 100644
--- a/database/ddl/ref-constraint/niveau_enveloppe_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/niveau_enveloppe_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/notification_configuration_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/notification_configuration_unicaen_utilisateur_user_id_fk.php
index 7fc02edeb40450f8b3b16ac67b2cc71d4f6d0e74..d69e8ad76a56b97daa37c5dc0da4779a7e18a2e4 100644
--- a/database/ddl/ref-constraint/notification_configuration_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/notification_configuration_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/notification_configuration_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/notification_configuration_unicaen_utilisateur_user_id_fk_2.php
index ef83c83ba74978b0bddf00805a1a5b12b92fda11..8a50121bbbf75abc7ce91745a65888a6a5208146 100644
--- a/database/ddl/ref-constraint/notification_configuration_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/notification_configuration_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/notification_configuration_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/notification_configuration_unicaen_utilisateur_user_id_fk_3.php
index d74b680e36bd27b1cdda9de2e8997192b1fbad16..e7fcf90ec7d927fab53984198ec61c14d483862e 100644
--- a/database/ddl/ref-constraint/notification_configuration_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/notification_configuration_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/privilege_categorie_privilege_id_fk.php b/database/ddl/ref-constraint/privilege_categorie_privilege_id_fk.php
index 3317a0dcdb7e3c44eb6a651f937aea78dc84a374..e4b562fb198f88537fb9166d983ddb0f3776b5e5 100644
--- a/database/ddl/ref-constraint/privilege_categorie_privilege_id_fk.php
+++ b/database/ddl/ref-constraint/privilege_categorie_privilege_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_privilege_categorie',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'categorie_privilege_pkey',
+    'index'       => 'unicaen_privilege_categorie_pkey',
     'columns'     => [
         'categorie_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/role_privilege_linker_privilege_id_fk.php b/database/ddl/ref-constraint/role_privilege_linker_privilege_id_fk.php
index f7070eb8a0e81cea7a4dd2f9a4af6b2f822ee0f9..94a424a88390c9f8908ab7d6d99366b76e7e6dcb 100644
--- a/database/ddl/ref-constraint/role_privilege_linker_privilege_id_fk.php
+++ b/database/ddl/ref-constraint/role_privilege_linker_privilege_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_privilege_privilege',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'privilege_pkey',
+    'index'       => 'unicaen_privilege_privilege_pkey',
     'columns'     => [
         'privilege_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/role_privilege_linker_role_id_fk.php b/database/ddl/ref-constraint/role_privilege_linker_role_id_fk.php
index 8a236b451f242dd03de2f6c895ef94ccc740b72a..f9e19d570cdc7fcfab643d0bb6740014b92248f5 100644
--- a/database/ddl/ref-constraint/role_privilege_linker_role_id_fk.php
+++ b/database/ddl/ref-constraint/role_privilege_linker_role_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_role',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'role_pkey',
+    'index'       => 'unicaen_utilisateur_role_pkey',
     'columns'     => [
         'role_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/structure_agent_force_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/structure_agent_force_unicaen_utilisateur_user_id_fk.php
index 397904943157cabef735ae92936f9cfe0a034d54..7f077a1b334922ab56f7456b978d3d14dd88be00 100644
--- a/database/ddl/ref-constraint/structure_agent_force_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/structure_agent_force_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/structure_agent_force_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/structure_agent_force_unicaen_utilisateur_user_id_fk_2.php
index 56bf5430dff004c2ba706049957ce00f231b5b5c..ec5fa1ca2ce309cd62f3563db23bd863827201ac 100644
--- a/database/ddl/ref-constraint/structure_agent_force_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/structure_agent_force_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/structure_agent_force_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/structure_agent_force_unicaen_utilisateur_user_id_fk_3.php
index 489ab0a7a697b577219d3aed4361b2c663adff77..2e155c14b8f4496e888be748904286fa49742375 100644
--- a/database/ddl/ref-constraint/structure_agent_force_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/structure_agent_force_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk.php
index 3c4949d6fde6ddfcae2d3615cbe20a03df718fdb..5d7efdb7a6b67b2ef4a3e44c2ffc07bb5dab22d9 100644
--- a/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'utilisateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk_2.php
index 113359696522765a5f32a1eda1240a0721df2ffb..99ed9d03805651e4dc17a67fbb8463f7e77a57df 100644
--- a/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk_3.php
index d846c81e2b6fcfabbd195112013272caf89e752e..212bd4af7d05d8f8e8c5de593da48511e49f261d 100644
--- a/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk_4.php b/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk_4.php
index 5f00a0d6a09cbfc2d7c1b10494cd75cef98b249c..06986a5fa073a4cfde9860a823fa729a20cedede 100644
--- a/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk_4.php
+++ b/database/ddl/ref-constraint/structure_observateur_unicaen_utilisateur_user_id_fk_4.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_content_content_user_id_fk.php b/database/ddl/ref-constraint/unicaen_content_content_user_id_fk.php
index 860b2546d03473f8d2d6b24d15ef4c2d7ee3499e..0a8f9b06c487bb8e3df20e265d4e8fbba3bb6a29 100644
--- a/database/ddl/ref-constraint/unicaen_content_content_user_id_fk.php
+++ b/database/ddl/ref-constraint/unicaen_content_content_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_content_content_user_id_fk_2.php b/database/ddl/ref-constraint/unicaen_content_content_user_id_fk_2.php
index 9242724283c0378f1d845d6b9d27b7e9735cf6d2..19cd69cb802ca04af87087e653e716c51172f4d0 100644
--- a/database/ddl/ref-constraint/unicaen_content_content_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/unicaen_content_content_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_content_content_user_id_fk_3.php b/database/ddl/ref-constraint/unicaen_content_content_user_id_fk_3.php
index 66b0aaae2517520660941a2f48b766e84097d9bb..63a19a2d5403914775e42ab70c5e232f8c45ed51 100644
--- a/database/ddl/ref-constraint/unicaen_content_content_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/unicaen_content_content_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_document_rendu_template_id_fk.php b/database/ddl/ref-constraint/unicaen_document_rendu_template_id_fk.php
index fb8f6f747e7460fdb93455d9c4e9d13f2260b086..3aa1fb06ea204a232f79ec4ea4931f1dedf06d32 100644
--- a/database/ddl/ref-constraint/unicaen_document_rendu_template_id_fk.php
+++ b/database/ddl/ref-constraint/unicaen_document_rendu_template_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_renderer_template',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'SET NULL',
-    'index'       => 'unicaen_content_content_pk',
+    'index'       => 'unicaen_content_content_id_uindex',
     'columns'     => [
         'template_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_enquete_enquete_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/unicaen_enquete_enquete_unicaen_utilisateur_user_id_fk.php
index 372a5fbcc7559718cbc3e23ba42a66629fe08a85..bb42a20b23d2bb3dfc03eafc798cc937b0aa3d8a 100644
--- a/database/ddl/ref-constraint/unicaen_enquete_enquete_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/unicaen_enquete_enquete_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_enquete_enquete_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/unicaen_enquete_enquete_unicaen_utilisateur_user_id_fk_2.php
index 5e671178aaace8a538d501bc6ba4792811b7843e..7371c309c030c7ebf58fccf1d6ac80eb9db9b708 100644
--- a/database/ddl/ref-constraint/unicaen_enquete_enquete_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/unicaen_enquete_enquete_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_enquete_enquete_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/unicaen_enquete_enquete_unicaen_utilisateur_user_id_fk_3.php
index dc854f5723775aced945c732d700771571ab7c95..f8d7ddeb5c5c9ef05dc0992c9f8314bc041371d6 100644
--- a/database/ddl/ref-constraint/unicaen_enquete_enquete_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/unicaen_enquete_enquete_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_enquete_instance_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/unicaen_enquete_instance_unicaen_utilisateur_user_id_fk.php
index 02cb725e41a5c50b49ab00ffb8408f1ced43c880..ec7485faa55fe93c0d0d26852c77a7905614a522 100644
--- a/database/ddl/ref-constraint/unicaen_enquete_instance_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/unicaen_enquete_instance_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_enquete_instance_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/unicaen_enquete_instance_unicaen_utilisateur_user_id_fk_2.php
index 1b1139833233191f62c1dd23e07764e57cdab3a3..cd9c86c79593cb7695a66fec45adb92eb6b29e50 100644
--- a/database/ddl/ref-constraint/unicaen_enquete_instance_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/unicaen_enquete_instance_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_enquete_instance_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/unicaen_enquete_instance_unicaen_utilisateur_user_id_fk_3.php
index 1ee11b0831506e0047838228213e5e3ace49a5a1..d0e02f081abf1a082b2508ecedcb52c5ac8eef3c 100644
--- a/database/ddl/ref-constraint/unicaen_enquete_instance_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/unicaen_enquete_instance_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_enquete_question_id_fk.php b/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_enquete_question_id_fk.php
index 73bb06797193b54d53265003e4f534d7a2cd28a1..e5c4c5807d3c792fd75b4d04ecd34f8c9a441245 100644
--- a/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_enquete_question_id_fk.php
+++ b/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_enquete_question_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_enquete_question',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'formation_enquete_question_pkey',
+    'index'       => 'formation_enquete_question_id_uindex',
     'columns'     => [
         'question_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_utilisateur_user_id_fk.php b/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_utilisateur_user_id_fk.php
index b4dc2b4f1da45b3a5961ced9540d8ca730dbd6af..f2d710966e64d6c125494569a449523f304c7b40 100644
--- a/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_utilisateur_user_id_fk.php
+++ b/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_utilisateur_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_utilisateur_user_id_fk_2.php b/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_utilisateur_user_id_fk_2.php
index 2c9f09b145185b2abdbe9d24a7375a40c051f253..47ad2d1015726f3f21a76aae531dc22516e5b735 100644
--- a/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_utilisateur_user_id_fk_2.php
+++ b/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_utilisateur_user_id_fk_2.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_utilisateur_user_id_fk_3.php b/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_utilisateur_user_id_fk_3.php
index 53b843a58836bda5a14b732371b7a5f1fe74def6..8ae22fe185879c6c4dc4357cd261c7debf739706 100644
--- a/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_utilisateur_user_id_fk_3.php
+++ b/database/ddl/ref-constraint/unicaen_enquete_reponse_unicaen_utilisateur_user_id_fk_3.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_etat_instance_histo_createur_id_fkey.php b/database/ddl/ref-constraint/unicaen_etat_instance_histo_createur_id_fkey.php
index 7297892f6ac6484e0606f7f4a93d585563b6b5e9..f52f879f8becbe89e61d3a3c916c2b9a37bbd1c4 100644
--- a/database/ddl/ref-constraint/unicaen_etat_instance_histo_createur_id_fkey.php
+++ b/database/ddl/ref-constraint/unicaen_etat_instance_histo_createur_id_fkey.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_etat_instance_histo_destructeur_id_fkey.php b/database/ddl/ref-constraint/unicaen_etat_instance_histo_destructeur_id_fkey.php
index 06272b852f2e41adb6becd92a6382f483c99df61..aa1f90e48cd89f4db5b5239ec83ccefc22102a04 100644
--- a/database/ddl/ref-constraint/unicaen_etat_instance_histo_destructeur_id_fkey.php
+++ b/database/ddl/ref-constraint/unicaen_etat_instance_histo_destructeur_id_fkey.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_etat_instance_histo_modificateur_id_fkey.php b/database/ddl/ref-constraint/unicaen_etat_instance_histo_modificateur_id_fkey.php
index 877f49e7644de18d6c63eefdb18bb397d6e74b3d..6096dfa2ea7e76d5e01fd2b295591d3f16ad09ac 100644
--- a/database/ddl/ref-constraint/unicaen_etat_instance_histo_modificateur_id_fkey.php
+++ b/database/ddl/ref-constraint/unicaen_etat_instance_histo_modificateur_id_fkey.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_etat_instance_type_id.php b/database/ddl/ref-constraint/unicaen_etat_instance_type_id.php
new file mode 100644
index 0000000000000000000000000000000000000000..d2044477cffa2e05116e951b406723dbc69bfa33
--- /dev/null
+++ b/database/ddl/ref-constraint/unicaen_etat_instance_type_id.php
@@ -0,0 +1,18 @@
+<?php
+
+//@formatter:off
+
+return [
+    'schema'      => 'public',
+    'name'        => 'unicaen_etat_instance_type_id',
+    'table'       => 'unicaen_etat_instance',
+    'rtable'      => 'unicaen_etat_type',
+    'update_rule' => 'NO ACTION',
+    'delete_rule' => 'NO ACTION',
+    'index'       => 'unicaen_etat_type_id_uindex',
+    'columns'     => [
+        'type_id' => 'id',
+    ],
+];
+
+//@formatter:on
diff --git a/database/ddl/ref-constraint/unicaen_etat_instance_type_id_fkey.php b/database/ddl/ref-constraint/unicaen_etat_instance_type_id_fkey.php
index 0280d6ff6781b87725f24b7ae051043494f84d6e..3d26b32e38ba8b82427bbc12108ccb5be3f9df76 100644
--- a/database/ddl/ref-constraint/unicaen_etat_instance_type_id_fkey.php
+++ b/database/ddl/ref-constraint/unicaen_etat_instance_type_id_fkey.php
@@ -8,8 +8,8 @@ return [
     'table'       => 'unicaen_etat_instance',
     'rtable'      => 'unicaen_etat_type',
     'update_rule' => 'NO ACTION',
-    'delete_rule' => 'CASCADE',
-    'index'       => 'unicaen_etat_type_pk',
+    'delete_rule' => 'NO ACTION',
+    'index'       => 'unicaen_etat_type_id_uindex',
     'columns'     => [
         'type_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_etat_type_categorie_id_fk.php b/database/ddl/ref-constraint/unicaen_etat_type_categorie_id_fk.php
index 9e094441b0d1f9108a4d3e25cfebaca32e4de3b8..7a6bf497078a01c98c647c8497b75ef8e225537d 100644
--- a/database/ddl/ref-constraint/unicaen_etat_type_categorie_id_fk.php
+++ b/database/ddl/ref-constraint/unicaen_etat_type_categorie_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_etat_categorie',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'unicaen_etat_categorie_pk',
+    'index'       => 'unicaen_etat_categorie_id_uindex',
     'columns'     => [
         'categorie_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_etat_type_categorie_id_fkey.php b/database/ddl/ref-constraint/unicaen_etat_type_categorie_id_fkey.php
index ea757465bf3dc082fb9a04d51e315fd4a340119a..01fada9f09a28c06a0ba6de845a4b05eddd82234 100644
--- a/database/ddl/ref-constraint/unicaen_etat_type_categorie_id_fkey.php
+++ b/database/ddl/ref-constraint/unicaen_etat_type_categorie_id_fkey.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_etat_categorie',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'unicaen_etat_categorie_pk',
+    'index'       => 'unicaen_etat_categorie_id_uindex',
     'columns'     => [
         'categorie_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_indicateur_tableau_indicateur_indicateur_null_fk.php b/database/ddl/ref-constraint/unicaen_indicateur_tableau_indicateur_indicateur_null_fk.php
index 3252cf6658128fbf2a2aea120c34bc8637e25e57..43e1fe80def3ae1ae36a1080c1b7fd790af275de 100644
--- a/database/ddl/ref-constraint/unicaen_indicateur_tableau_indicateur_indicateur_null_fk.php
+++ b/database/ddl/ref-constraint/unicaen_indicateur_tableau_indicateur_indicateur_null_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_indicateur_indicateur',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'indicateur_pk',
+    'index'       => 'indicateur_id_uindex',
     'columns'     => [
         'indicateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_validation_instance_createur_fk.php b/database/ddl/ref-constraint/unicaen_validation_instance_createur_fk.php
index 3dd2ac53507eea866af4b147bd67a2c4550f5cf2..fdcb74d7a01373f32e2a490cd7482a766c3af7c5 100644
--- a/database/ddl/ref-constraint/unicaen_validation_instance_createur_fk.php
+++ b/database/ddl/ref-constraint/unicaen_validation_instance_createur_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_validation_instance_destructeur_fk.php b/database/ddl/ref-constraint/unicaen_validation_instance_destructeur_fk.php
index 0a5a02948c98ea5be75b8fb37f146e8a50649453..06a397d78134e612ff7e7d4d92cef25d8c45f4ec 100644
--- a/database/ddl/ref-constraint/unicaen_validation_instance_destructeur_fk.php
+++ b/database/ddl/ref-constraint/unicaen_validation_instance_destructeur_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_validation_instance_modificateur_fk.php b/database/ddl/ref-constraint/unicaen_validation_instance_modificateur_fk.php
index 64cbc5eca5f4e078eb1b6bea13a3819e897bc6fb..4f6e34c88821e478b26a6dfdd9cb7cecb45e4d4b 100644
--- a/database/ddl/ref-constraint/unicaen_validation_instance_modificateur_fk.php
+++ b/database/ddl/ref-constraint/unicaen_validation_instance_modificateur_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_validation_instance_unicaen_validation_type_id_fk.php b/database/ddl/ref-constraint/unicaen_validation_instance_unicaen_validation_type_id_fk.php
index 9ca41cd8ef7c3408ef0b7b6cdf0e71238bde1ee2..1ca9d53d6705dcb092bc8d1d0aa8e82aafa905dc 100644
--- a/database/ddl/ref-constraint/unicaen_validation_instance_unicaen_validation_type_id_fk.php
+++ b/database/ddl/ref-constraint/unicaen_validation_instance_unicaen_validation_type_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_validation_type',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'unicaen_validation_type_pk',
+    'index'       => 'unicaen_validation_type_id_uindex',
     'columns'     => [
         'type_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_validation_type_createur_fk.php b/database/ddl/ref-constraint/unicaen_validation_type_createur_fk.php
index 6adc5b1a4983ce89c72d5051e24325211d66b4c6..c3feedb3a6ce765bf535934bc08f559a6c0528d5 100644
--- a/database/ddl/ref-constraint/unicaen_validation_type_createur_fk.php
+++ b/database/ddl/ref-constraint/unicaen_validation_type_createur_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_createur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_validation_type_destructeur_fk.php b/database/ddl/ref-constraint/unicaen_validation_type_destructeur_fk.php
index fb959990d205e554f778e7cf9b4d8414307d43ec..d56da4e88e29538ab50077185b01b4b7b94b488f 100644
--- a/database/ddl/ref-constraint/unicaen_validation_type_destructeur_fk.php
+++ b/database/ddl/ref-constraint/unicaen_validation_type_destructeur_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_destructeur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/unicaen_validation_type_modificateur_fk.php b/database/ddl/ref-constraint/unicaen_validation_type_modificateur_fk.php
index c91a4d43f73b65ad500f33d4280a78c68f053048..62ed83f33b51246bec6217aeb05d92889a4abd76 100644
--- a/database/ddl/ref-constraint/unicaen_validation_type_modificateur_fk.php
+++ b/database/ddl/ref-constraint/unicaen_validation_type_modificateur_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'NO ACTION',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'histo_modificateur_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/user_role_linker_role_id_fk.php b/database/ddl/ref-constraint/user_role_linker_role_id_fk.php
index c393e00f3cb0afaf967dc51f6706b1202836c9a9..ee03b02cf6750210c9ac4673deaea47e2f04524a 100644
--- a/database/ddl/ref-constraint/user_role_linker_role_id_fk.php
+++ b/database/ddl/ref-constraint/user_role_linker_role_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_role',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'role_pkey',
+    'index'       => 'unicaen_utilisateur_role_pkey',
     'columns'     => [
         'role_id' => 'id',
     ],
diff --git a/database/ddl/ref-constraint/user_role_linker_user_id_fk.php b/database/ddl/ref-constraint/user_role_linker_user_id_fk.php
index 0b760b44a1aea228a5a34df450841f880f0e9758..8a25215b33b43aabd2c9af423dbce35f9f4a1767 100644
--- a/database/ddl/ref-constraint/user_role_linker_user_id_fk.php
+++ b/database/ddl/ref-constraint/user_role_linker_user_id_fk.php
@@ -9,7 +9,7 @@ return [
     'rtable'      => 'unicaen_utilisateur_user',
     'update_rule' => 'NO ACTION',
     'delete_rule' => 'CASCADE',
-    'index'       => 'user_pkey',
+    'index'       => 'unicaen_utilisateur_user_pkey',
     'columns'     => [
         'user_id' => 'id',
     ],
diff --git a/database/ddl/sequence.php b/database/ddl/sequence.php
index a5d99173f60459313f291a28ab673175f1d7305f..e1b3e5778a7612391fa664f351477d3813f29e6d 100644
--- a/database/ddl/sequence.php
+++ b/database/ddl/sequence.php
@@ -5,7 +5,6 @@
 return [
     'agent_carriere_echelon_2_id_seq',
     'agent_carriere_echelon_id_seq',
-    'agent_hierarchie_validateur_id_seq',
     'agent_poste_nid_seq',
     'carriere_categorie_id_seq',
     'carriere_mobilite_id_seq',
diff --git a/database/ddl/table/agent.php b/database/ddl/table/agent.php
index 681b3e1410cdf844b6f80364b807393146eaa28a..9ec24c5e037ec7066c11771ed802d8b9b3cd0734 100644
--- a/database/ddl/table/agent.php
+++ b/database/ddl/table/agent.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'agent',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
@@ -28,7 +28,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => FALSE,
             'default'     => '(\'now\'::text)::timestamp(0) without time zone',
             'position'    => 5,
@@ -43,7 +43,7 @@ return [
             'precision'   => NULL,
             'nullable'    => TRUE,
             'default'     => NULL,
-            'position'    => 15,
+            'position'    => 13,
             'commentaire' => NULL,
         ],
         'deleted_on'            => [
@@ -52,7 +52,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 7,
@@ -67,19 +67,7 @@ return [
             'precision'   => NULL,
             'nullable'    => TRUE,
             'default'     => NULL,
-            'position'    => 12,
-            'commentaire' => NULL,
-        ],
-        'harp_id'               => [
-            'name'        => 'harp_id',
-            'type'        => 'int',
-            'bdd-type'    => 'integer',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 4,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 10,
+            'position'    => 11,
             'commentaire' => NULL,
         ],
         'histo_createur_id'     => [
@@ -91,7 +79,7 @@ return [
             'precision'   => 8,
             'nullable'    => TRUE,
             'default'     => NULL,
-            'position'    => 18,
+            'position'    => 16,
             'commentaire' => NULL,
         ],
         'histo_destructeur_id'  => [
@@ -103,7 +91,7 @@ return [
             'precision'   => 8,
             'nullable'    => TRUE,
             'default'     => NULL,
-            'position'    => 20,
+            'position'    => 18,
             'commentaire' => NULL,
         ],
         'histo_modificateur_id' => [
@@ -115,7 +103,7 @@ return [
             'precision'   => 8,
             'nullable'    => TRUE,
             'default'     => NULL,
-            'position'    => 19,
+            'position'    => 17,
             'commentaire' => NULL,
         ],
         'id'                    => [
@@ -127,7 +115,7 @@ return [
             'precision'   => 8,
             'nullable'    => TRUE,
             'default'     => NULL,
-            'position'    => 17,
+            'position'    => 15,
             'commentaire' => NULL,
         ],
         'id_orig'               => [
@@ -139,7 +127,7 @@ return [
             'precision'   => NULL,
             'nullable'    => TRUE,
             'default'     => NULL,
-            'position'    => 22,
+            'position'    => 20,
             'commentaire' => NULL,
         ],
         'login'                 => [
@@ -151,7 +139,7 @@ return [
             'precision'   => NULL,
             'nullable'    => TRUE,
             'default'     => NULL,
-            'position'    => 11,
+            'position'    => 10,
             'commentaire' => NULL,
         ],
         'nom_famille'           => [
@@ -163,7 +151,7 @@ return [
             'precision'   => NULL,
             'nullable'    => TRUE,
             'default'     => NULL,
-            'position'    => 16,
+            'position'    => 14,
             'commentaire' => NULL,
         ],
         'nom_usage'             => [
@@ -223,7 +211,7 @@ return [
             'precision'   => NULL,
             'nullable'    => TRUE,
             'default'     => NULL,
-            'position'    => 13,
+            'position'    => 12,
             'commentaire' => NULL,
         ],
         'source_id'             => [
@@ -235,19 +223,7 @@ return [
             'precision'   => NULL,
             'nullable'    => TRUE,
             'default'     => NULL,
-            'position'    => 21,
-            'commentaire' => NULL,
-        ],
-        't_contrat_long'        => [
-            'name'        => 't_contrat_long',
-            'type'        => 'string',
-            'bdd-type'    => 'character varying',
-            'length'      => 1,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 14,
+            'position'    => 19,
             'commentaire' => NULL,
         ],
         'updated_on'            => [
@@ -256,7 +232,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 6,
diff --git a/database/ddl/table/agent_carriere_affectation.php b/database/ddl/table/agent_carriere_affectation.php
index d22179c8bae9189d7666bc02da317e0d3ce2a3c5..3142af69aaa509dc00936a9cf81fae214ed1743b 100644
--- a/database/ddl/table/agent_carriere_affectation.php
+++ b/database/ddl/table/agent_carriere_affectation.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'agent_carriere_affectation',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
@@ -28,7 +28,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => FALSE,
             'default'     => '(\'now\'::text)::timestamp(0) without time zone',
             'position'    => 9,
@@ -64,7 +64,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 11,
@@ -122,7 +122,7 @@ return [
             'name'        => 'id_orig',
             'type'        => 'string',
             'bdd-type'    => 'character varying',
-            'length'      => 100,
+            'length'      => 255,
             'scale'       => NULL,
             'precision'   => NULL,
             'nullable'    => TRUE,
@@ -157,10 +157,10 @@ return [
         'structure_id'          => [
             'name'        => 'structure_id',
             'type'        => 'int',
-            'bdd-type'    => 'integer',
+            'bdd-type'    => 'bigint',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => 4,
+            'precision'   => 8,
             'nullable'    => FALSE,
             'default'     => NULL,
             'position'    => 3,
@@ -208,7 +208,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 10,
diff --git a/database/ddl/table/agent_carriere_echelon.php b/database/ddl/table/agent_carriere_echelon.php
index dbfd0d377111217c53c2dcd0a6d6018fde5048c0..77ee09e56e25bed79d8704ebb87fc6701034f16c 100644
--- a/database/ddl/table/agent_carriere_echelon.php
+++ b/database/ddl/table/agent_carriere_echelon.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'agent_carriere_echelon',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'agent_carriere_echelon_id_seq',
     'columns'     => [
@@ -28,7 +28,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => FALSE,
             'default'     => 'CURRENT_DATE',
             'position'    => 8,
@@ -64,7 +64,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 10,
@@ -160,7 +160,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 9,
diff --git a/database/ddl/table/agent_carriere_grade.php b/database/ddl/table/agent_carriere_grade.php
index 74787377a43d5e8433964e425cc55319ccc72bcd..cba55d795a561104c9c4daed653edd9868aba71b 100644
--- a/database/ddl/table/agent_carriere_grade.php
+++ b/database/ddl/table/agent_carriere_grade.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'agent_carriere_grade',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
@@ -52,7 +52,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => FALSE,
             'default'     => '(\'now\'::text)::timestamp(0) without time zone',
             'position'    => 11,
@@ -88,7 +88,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 13,
@@ -208,7 +208,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 12,
diff --git a/database/ddl/table/agent_carriere_quotite.php b/database/ddl/table/agent_carriere_quotite.php
index c3cf2240b301c3035c59d28dd83d57ae4081f17d..21bd8e9f6f31a59ee4888875688db08f6e980d08 100644
--- a/database/ddl/table/agent_carriere_quotite.php
+++ b/database/ddl/table/agent_carriere_quotite.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'agent_carriere_quotite',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
@@ -28,7 +28,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => FALSE,
             'default'     => '(\'now\'::text)::timestamp(0) without time zone',
             'position'    => 8,
@@ -64,7 +64,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 10,
@@ -172,7 +172,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 9,
diff --git a/database/ddl/table/agent_carriere_statut.php b/database/ddl/table/agent_carriere_statut.php
index e24172dced48744e242d4a61f2e4a554746fc209..cc0fba9188de49f4976af745cfb5d2eae064ceb7 100644
--- a/database/ddl/table/agent_carriere_statut.php
+++ b/database/ddl/table/agent_carriere_statut.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'agent_carriere_statut',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
@@ -52,7 +52,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => FALSE,
             'default'     => '(\'now\'::text)::timestamp(0) without time zone',
             'position'    => 25,
@@ -88,7 +88,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 27,
@@ -388,7 +388,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 26,
diff --git a/database/ddl/table/agent_element_formation.php b/database/ddl/table/agent_element_formation.php
index 196d8701443054e627f7899b90439eefbbd308c4..4d9a7145aa12b43f6b577633e1b4b1dde42f1174 100644
--- a/database/ddl/table/agent_element_formation.php
+++ b/database/ddl/table/agent_element_formation.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'agent_element_formation',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/agent_fichier.php b/database/ddl/table/agent_fichier.php
index 44fc943c46a01b49ecbfd5a25f29d1b3b51d821d..99e66df21e263a1b7f9489cbe681c3ce66170933 100644
--- a/database/ddl/table/agent_fichier.php
+++ b/database/ddl/table/agent_fichier.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'agent_fichier',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/agent_hierarchie_validateur.php b/database/ddl/table/agent_hierarchie_validateur.php
index 958aa929bed2375ca6e8ed8ab42ba2e4f899b858..e301c7e771b70499e888e42d2bad76b1011953db 100644
--- a/database/ddl/table/agent_hierarchie_validateur.php
+++ b/database/ddl/table/agent_hierarchie_validateur.php
@@ -6,9 +6,9 @@ return [
     'schema'      => 'public',
     'name'        => 'agent_hierarchie_validateur',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
-    'sequence'    => 'agent_hierarchie_validateur_id_seq',
+    'sequence'    => NULL,
     'columns'     => [
         'agent_id'              => [
             'name'        => 'agent_id',
diff --git a/database/ddl/table/agent_validation.php b/database/ddl/table/agent_validation.php
index b014be830b632f09277452c1c8d10a387c939f71..a524658f0b7457aa1b29ab63a90f987133068294 100644
--- a/database/ddl/table/agent_validation.php
+++ b/database/ddl/table/agent_validation.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'agent_validation',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/carriere_categorie.php b/database/ddl/table/carriere_categorie.php
index 0635ec8e8a718478740354ebd03750049a573f46..9d934f745a0f8244cc4e3cf3e22414bbe85c7265 100644
--- a/database/ddl/table/carriere_categorie.php
+++ b/database/ddl/table/carriere_categorie.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'carriere_categorie',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'carriere_categorie_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/carriere_corps.php b/database/ddl/table/carriere_corps.php
index 47c5acc0c27752b5667bd3324c5d4ca68eaede5a..3b509d03907cc70c29e4df4aec6304741b851381 100644
--- a/database/ddl/table/carriere_corps.php
+++ b/database/ddl/table/carriere_corps.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'carriere_corps',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
@@ -40,7 +40,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => FALSE,
             'default'     => '(\'now\'::text)::timestamp(0) without time zone',
             'position'    => 12,
@@ -76,7 +76,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 14,
@@ -184,7 +184,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 13,
diff --git a/database/ddl/table/carriere_correspondance.php b/database/ddl/table/carriere_correspondance.php
index c7edc5a73667bc93a02a61b0b37f884301febf7c..e3471fadc461c627e2b1926c931a3aeb21804d88 100644
--- a/database/ddl/table/carriere_correspondance.php
+++ b/database/ddl/table/carriere_correspondance.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'carriere_correspondance',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
@@ -28,7 +28,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => FALSE,
             'default'     => '(\'now\'::text)::timestamp(0) without time zone',
             'position'    => 9,
@@ -64,7 +64,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 11,
@@ -148,7 +148,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 10,
diff --git a/database/ddl/table/carriere_correspondance_type.php b/database/ddl/table/carriere_correspondance_type.php
index 2034723a6c2f9ac3547d19edec0a9e2ebc38f02b..99208d884753586dfd4e0f97aed37ec68fe33d9f 100644
--- a/database/ddl/table/carriere_correspondance_type.php
+++ b/database/ddl/table/carriere_correspondance_type.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'carriere_correspondance_type',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
@@ -28,7 +28,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => FALSE,
             'default'     => 'LOCALTIMESTAMP(0)',
             'position'    => 8,
@@ -64,7 +64,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 10,
@@ -148,7 +148,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 9,
diff --git a/database/ddl/table/carriere_emploitype.php b/database/ddl/table/carriere_emploitype.php
index 0f8de8738f3f686de9cf6d12e65aa02499a55edb..eb1e8556c588f8e8b3b48d208bc3e26344c35545 100644
--- a/database/ddl/table/carriere_emploitype.php
+++ b/database/ddl/table/carriere_emploitype.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'carriere_emploitype',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/carriere_grade.php b/database/ddl/table/carriere_grade.php
index c7b83cfb4cbf23255788808c1d08f08f51b02694..72bbd3b8214fde7f9daaed5ab04473a52abd3c06 100644
--- a/database/ddl/table/carriere_grade.php
+++ b/database/ddl/table/carriere_grade.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'carriere_grade',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
@@ -14,7 +14,7 @@ return [
             'name'        => 'code',
             'type'        => 'string',
             'bdd-type'    => 'character varying',
-            'length'      => 10,
+            'length'      => 20,
             'scale'       => NULL,
             'precision'   => NULL,
             'nullable'    => FALSE,
@@ -28,7 +28,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => FALSE,
             'default'     => '(\'now\'::text)::timestamp(0) without time zone',
             'position'    => 9,
@@ -64,7 +64,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 11,
@@ -136,7 +136,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 10,
diff --git a/database/ddl/table/carriere_mobilite.php b/database/ddl/table/carriere_mobilite.php
index f00623f29e11be121cdddd06c78236142346cc59..9a25d012569e90fee5e3d4a3602d0e197ccae904 100644
--- a/database/ddl/table/carriere_mobilite.php
+++ b/database/ddl/table/carriere_mobilite.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'carriere_mobilite',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'carriere_mobilite_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/carriere_niveau.php b/database/ddl/table/carriere_niveau.php
index 845e5fe743b4c629ce3758b5c9dc9a709775339f..69bcedfb41762dbf7c8233752e5ec43328f9d51d 100644
--- a/database/ddl/table/carriere_niveau.php
+++ b/database/ddl/table/carriere_niveau.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'carriere_niveau',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'carriere_niveau_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/carriere_niveau_enveloppe.php b/database/ddl/table/carriere_niveau_enveloppe.php
index 93bb95e5ae0e0ff4ec03daea8ec3fc3822e64eb3..8d6ee854bf2fcddb3164f4fbe2d07e4b0f7d0b52 100644
--- a/database/ddl/table/carriere_niveau_enveloppe.php
+++ b/database/ddl/table/carriere_niveau_enveloppe.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'carriere_niveau_enveloppe',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'carriere_niveau_enveloppe_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/demandeexterne.php b/database/ddl/table/demandeexterne.php
index d3debf2b1693b5de8ef6252a9a55424872cce47d..5c9796c123e2ad0819cc898cb0beee2b74f9df65 100644
--- a/database/ddl/table/demandeexterne.php
+++ b/database/ddl/table/demandeexterne.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'demandeexterne',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'demandeexterne_id_seq',
     'columns'     => [
@@ -72,11 +72,11 @@ return [
         ],
         'frais_annexe'               => [
             'name'        => 'frais_annexe',
-            'type'        => 'float',
-            'bdd-type'    => 'double precision',
-            'length'      => 0,
+            'type'        => 'string',
+            'bdd-type'    => 'character varying',
+            'length'      => 1024,
             'scale'       => NULL,
-            'precision'   => 8,
+            'precision'   => NULL,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 28,
diff --git a/database/ddl/table/demandeexterne_etat.php b/database/ddl/table/demandeexterne_etat.php
index dc490be82e0a9c976854dc33e229962d2c085771..d671242f601900c5624091f532e469d72d6bf965 100644
--- a/database/ddl/table/demandeexterne_etat.php
+++ b/database/ddl/table/demandeexterne_etat.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'demandeexterne_etat',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/demandeexterne_fichier.php b/database/ddl/table/demandeexterne_fichier.php
index 6165f3bf62f436bf1d03e0afbc2860b5b1fcd7ce..deeadca3e6444595ff66251ebf331998e827c73c 100644
--- a/database/ddl/table/demandeexterne_fichier.php
+++ b/database/ddl/table/demandeexterne_fichier.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'demandeexterne_fichier',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/demandeexterne_gestionnaire.php b/database/ddl/table/demandeexterne_gestionnaire.php
index 6c68e274ef7687953633b54ad89b4f5ae8522215..0128154665d8331952be4b65ba9cb6a08e8ee5ef 100644
--- a/database/ddl/table/demandeexterne_gestionnaire.php
+++ b/database/ddl/table/demandeexterne_gestionnaire.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'demandeexterne_gestionnaire',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/demandeexterne_session.php b/database/ddl/table/demandeexterne_session.php
index e19f68bde4a4ea2254e64aee6cdf8fe8d6a0c6c1..e1414281be9c34af636ccea582b714190a25827c 100644
--- a/database/ddl/table/demandeexterne_session.php
+++ b/database/ddl/table/demandeexterne_session.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'demandeexterne_session',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/demandeexterne_validation.php b/database/ddl/table/demandeexterne_validation.php
index 066f8e9c002e65d93d763a23f6e58ee252ee912a..a82ffbed93782ce0cf1432ca9c51a0fdc01464a3 100644
--- a/database/ddl/table/demandeexterne_validation.php
+++ b/database/ddl/table/demandeexterne_validation.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'demandeexterne_validation',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/fichier_fichier.php b/database/ddl/table/fichier_fichier.php
index a5617462800c69dffb7d44e793596fdf1f62f911..c5f00094c38f0a19a1f2b3dac67679af7bcd493b 100644
--- a/database/ddl/table/fichier_fichier.php
+++ b/database/ddl/table/fichier_fichier.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'fichier_fichier',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/fichier_nature.php b/database/ddl/table/fichier_nature.php
index 2e50a9fadcce5e8a62f810159a80a542ad01bb12..513c83c885ee2ce39c9b4212f810be602b522fe5 100644
--- a/database/ddl/table/fichier_nature.php
+++ b/database/ddl/table/fichier_nature.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'fichier_nature',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'fichier_nature_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation.php b/database/ddl/table/formation.php
index f4694b30217759d7b31367f528e0c981927419a7..fc1f9594a90088f65082bc2da27723c06e54c956 100644
--- a/database/ddl/table/formation.php
+++ b/database/ddl/table/formation.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_action_cout_previsionnel.php b/database/ddl/table/formation_action_cout_previsionnel.php
index c433be62484e4421aae0a6ff94639d52422bc316..0e901197a6c53aafc2d6f8d7252bf661d226c878 100644
--- a/database/ddl/table/formation_action_cout_previsionnel.php
+++ b/database/ddl/table/formation_action_cout_previsionnel.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_action_cout_previsionnel',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_action_cout_previsionnel_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_action_plan.php b/database/ddl/table/formation_action_plan.php
index 5ba81c8038c7d31cefe435b7ce34258abca4cd01..a583750154b6e4e79529a10b67eb131e0a40006d 100644
--- a/database/ddl/table/formation_action_plan.php
+++ b/database/ddl/table/formation_action_plan.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_action_plan',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/formation_action_type.php b/database/ddl/table/formation_action_type.php
index a5b6ed1474af1d8a25bdb3a8dacf7577486fcfef..c6f77cd5033c1cbf4cfdff67edbb2e61f136ea90 100644
--- a/database/ddl/table/formation_action_type.php
+++ b/database/ddl/table/formation_action_type.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_action_type',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_action_type_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_axe.php b/database/ddl/table/formation_axe.php
index 48d1f6b96d3035d310c0d5f8739bc492d26dd287..203a931ecab423599873acff791bea69e4508f9e 100644
--- a/database/ddl/table/formation_axe.php
+++ b/database/ddl/table/formation_axe.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_axe',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_axe_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_axe_domaine.php b/database/ddl/table/formation_axe_domaine.php
index fd01df5b6e8da186048288b934947f32b035fbde..0d4d46a03e2266dbcb5af92005aba0881c41e4c6 100644
--- a/database/ddl/table/formation_axe_domaine.php
+++ b/database/ddl/table/formation_axe_domaine.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_axe_domaine',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/formation_demande_externe.php b/database/ddl/table/formation_demande_externe.php
deleted file mode 100644
index e2650e42987f1cd41df864c021b574e18dd23c94..0000000000000000000000000000000000000000
--- a/database/ddl/table/formation_demande_externe.php
+++ /dev/null
@@ -1,340 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe',
-    'temporary'   => FALSE,
-    'logging'     => FALSE,
-    'commentaire' => NULL,
-    'sequence'    => 'formation_demande_externe_id_seq',
-    'columns'     => [
-        'agent_id'                   => [
-            'name'        => 'agent_id',
-            'type'        => 'string',
-            'bdd-type'    => 'character varying',
-            'length'      => 40,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 19,
-            'commentaire' => NULL,
-        ],
-        'cofinanceur'                => [
-            'name'        => 'cofinanceur',
-            'type'        => 'string',
-            'bdd-type'    => 'character varying',
-            'length'      => 1024,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 12,
-            'commentaire' => NULL,
-        ],
-        'conge_formation_syndicale'  => [
-            'name'        => 'conge_formation_syndicale',
-            'type'        => 'bool',
-            'bdd-type'    => 'boolean',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => FALSE,
-            'default'     => 'false',
-            'position'    => 23,
-            'commentaire' => NULL,
-        ],
-        'contact'                    => [
-            'name'        => 'contact',
-            'type'        => 'string',
-            'bdd-type'    => 'character varying',
-            'length'      => 1024,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 4,
-            'commentaire' => NULL,
-        ],
-        'debut'                      => [
-            'name'        => 'debut',
-            'type'        => 'date',
-            'bdd-type'    => 'date',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 8,
-            'commentaire' => NULL,
-        ],
-        'fin'                        => [
-            'name'        => 'fin',
-            'type'        => 'date',
-            'bdd-type'    => 'date',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 9,
-            'commentaire' => NULL,
-        ],
-        'histo_createur_id'          => [
-            'name'        => 'histo_createur_id',
-            'type'        => 'int',
-            'bdd-type'    => 'integer',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 4,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 14,
-            'commentaire' => NULL,
-        ],
-        'histo_creation'             => [
-            'name'        => 'histo_creation',
-            'type'        => 'date',
-            'bdd-type'    => 'timestamp without time zone',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 6,
-            'nullable'    => FALSE,
-            'default'     => 'now()',
-            'position'    => 13,
-            'commentaire' => NULL,
-        ],
-        'histo_destructeur_id'       => [
-            'name'        => 'histo_destructeur_id',
-            'type'        => 'int',
-            'bdd-type'    => 'integer',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 4,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 18,
-            'commentaire' => NULL,
-        ],
-        'histo_destruction'          => [
-            'name'        => 'histo_destruction',
-            'type'        => 'date',
-            'bdd-type'    => 'timestamp without time zone',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 6,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 17,
-            'commentaire' => NULL,
-        ],
-        'histo_modificateur_id'      => [
-            'name'        => 'histo_modificateur_id',
-            'type'        => 'int',
-            'bdd-type'    => 'integer',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 4,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 16,
-            'commentaire' => NULL,
-        ],
-        'histo_modification'         => [
-            'name'        => 'histo_modification',
-            'type'        => 'date',
-            'bdd-type'    => 'timestamp without time zone',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 6,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 15,
-            'commentaire' => NULL,
-        ],
-        'id'                         => [
-            'name'        => 'id',
-            'type'        => 'int',
-            'bdd-type'    => 'integer',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 4,
-            'nullable'    => FALSE,
-            'default'     => 'nextval(\'formation_demande_externe_id_seq\'::regclass)',
-            'position'    => 1,
-            'commentaire' => NULL,
-        ],
-        'inscription_id'             => [
-            'name'        => 'inscription_id',
-            'type'        => 'int',
-            'bdd-type'    => 'integer',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 4,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 27,
-            'commentaire' => NULL,
-        ],
-        'justification_agent'        => [
-            'name'        => 'justification_agent',
-            'type'        => 'clob',
-            'bdd-type'    => 'text',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 10,
-            'commentaire' => NULL,
-        ],
-        'justification_drh'          => [
-            'name'        => 'justification_drh',
-            'type'        => 'clob',
-            'bdd-type'    => 'text',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 25,
-            'commentaire' => NULL,
-        ],
-        'justification_gestionnaire' => [
-            'name'        => 'justification_gestionnaire',
-            'type'        => 'clob',
-            'bdd-type'    => 'text',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 24,
-            'commentaire' => NULL,
-        ],
-        'justification_refus'        => [
-            'name'        => 'justification_refus',
-            'type'        => 'clob',
-            'bdd-type'    => 'text',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 21,
-            'commentaire' => NULL,
-        ],
-        'justification_responsable'  => [
-            'name'        => 'justification_responsable',
-            'type'        => 'clob',
-            'bdd-type'    => 'text',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 20,
-            'commentaire' => NULL,
-        ],
-        'libelle'                    => [
-            'name'        => 'libelle',
-            'type'        => 'string',
-            'bdd-type'    => 'character varying',
-            'length'      => 1024,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 2,
-            'commentaire' => NULL,
-        ],
-        'lieu'                       => [
-            'name'        => 'lieu',
-            'type'        => 'string',
-            'bdd-type'    => 'character varying',
-            'length'      => 1024,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 7,
-            'commentaire' => NULL,
-        ],
-        'missions'                   => [
-            'name'        => 'missions',
-            'type'        => 'clob',
-            'bdd-type'    => 'text',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 26,
-            'commentaire' => NULL,
-        ],
-        'modalite'                   => [
-            'name'        => 'modalite',
-            'type'        => 'string',
-            'bdd-type'    => 'character varying',
-            'length'      => 1024,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 22,
-            'commentaire' => NULL,
-        ],
-        'montant'                    => [
-            'name'        => 'montant',
-            'type'        => 'float',
-            'bdd-type'    => 'double precision',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 8,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 6,
-            'commentaire' => NULL,
-        ],
-        'organisme'                  => [
-            'name'        => 'organisme',
-            'type'        => 'string',
-            'bdd-type'    => 'character varying',
-            'length'      => 1024,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 3,
-            'commentaire' => NULL,
-        ],
-        'pourquoi'                   => [
-            'name'        => 'pourquoi',
-            'type'        => 'clob',
-            'bdd-type'    => 'text',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 5,
-            'commentaire' => NULL,
-        ],
-        'prise_en_charge'            => [
-            'name'        => 'prise_en_charge',
-            'type'        => 'bool',
-            'bdd-type'    => 'boolean',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => FALSE,
-            'default'     => 'true',
-            'position'    => 11,
-            'commentaire' => NULL,
-        ],
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/table/formation_demande_externe_etat.php b/database/ddl/table/formation_demande_externe_etat.php
deleted file mode 100644
index 690ac6eb22dc39bb7c719b2515896d58c54efb14..0000000000000000000000000000000000000000
--- a/database/ddl/table/formation_demande_externe_etat.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_etat',
-    'temporary'   => FALSE,
-    'logging'     => FALSE,
-    'commentaire' => NULL,
-    'sequence'    => NULL,
-    'columns'     => [
-        'demande_id' => [
-            'name'        => 'demande_id',
-            'type'        => 'int',
-            'bdd-type'    => 'integer',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 4,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 1,
-            'commentaire' => NULL,
-        ],
-        'etat_id'    => [
-            'name'        => 'etat_id',
-            'type'        => 'int',
-            'bdd-type'    => 'integer',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 4,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 2,
-            'commentaire' => NULL,
-        ],
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/table/formation_demande_externe_fichier.php b/database/ddl/table/formation_demande_externe_fichier.php
deleted file mode 100644
index 4830bb3f465ef9d732b86d3db8879485694b94e0..0000000000000000000000000000000000000000
--- a/database/ddl/table/formation_demande_externe_fichier.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_fichier',
-    'temporary'   => FALSE,
-    'logging'     => FALSE,
-    'commentaire' => NULL,
-    'sequence'    => NULL,
-    'columns'     => [
-        'demande_id' => [
-            'name'        => 'demande_id',
-            'type'        => 'int',
-            'bdd-type'    => 'integer',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 4,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 1,
-            'commentaire' => NULL,
-        ],
-        'fichier_id' => [
-            'name'        => 'fichier_id',
-            'type'        => 'string',
-            'bdd-type'    => 'character varying',
-            'length'      => 13,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 2,
-            'commentaire' => NULL,
-        ],
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/table/formation_demande_externe_gestionnaire.php b/database/ddl/table/formation_demande_externe_gestionnaire.php
deleted file mode 100644
index 8a36a7cac6ca443cdf1a096630c4118644eb05df..0000000000000000000000000000000000000000
--- a/database/ddl/table/formation_demande_externe_gestionnaire.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_gestionnaire',
-    'temporary'   => FALSE,
-    'logging'     => FALSE,
-    'commentaire' => NULL,
-    'sequence'    => NULL,
-    'columns'     => [
-        'demande_externe_id' => [
-            'name'        => 'demande_externe_id',
-            'type'        => 'int',
-            'bdd-type'    => 'integer',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 4,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 1,
-            'commentaire' => NULL,
-        ],
-        'gestionnaire_id'    => [
-            'name'        => 'gestionnaire_id',
-            'type'        => 'int',
-            'bdd-type'    => 'integer',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 4,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 2,
-            'commentaire' => NULL,
-        ],
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/table/formation_demande_externe_session.php b/database/ddl/table/formation_demande_externe_session.php
deleted file mode 100644
index 86119ac7df17a4aa60e30c428e65cf6837ceb24d..0000000000000000000000000000000000000000
--- a/database/ddl/table/formation_demande_externe_session.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_session',
-    'temporary'   => FALSE,
-    'logging'     => FALSE,
-    'commentaire' => NULL,
-    'sequence'    => NULL,
-    'columns'     => [
-        'demande_id' => [
-            'name'        => 'demande_id',
-            'type'        => 'int',
-            'bdd-type'    => 'integer',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 4,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 1,
-            'commentaire' => NULL,
-        ],
-        'session_id' => [
-            'name'        => 'session_id',
-            'type'        => 'int',
-            'bdd-type'    => 'integer',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 4,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 2,
-            'commentaire' => NULL,
-        ],
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/table/formation_demande_externe_validation.php b/database/ddl/table/formation_demande_externe_validation.php
deleted file mode 100644
index 22469569ab3dc47095b5443a61bab678cf610216..0000000000000000000000000000000000000000
--- a/database/ddl/table/formation_demande_externe_validation.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'schema'      => 'public',
-    'name'        => 'formation_demande_externe_validation',
-    'temporary'   => FALSE,
-    'logging'     => FALSE,
-    'commentaire' => NULL,
-    'sequence'    => NULL,
-    'columns'     => [
-        'demande_id'    => [
-            'name'        => 'demande_id',
-            'type'        => 'int',
-            'bdd-type'    => 'integer',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 4,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 1,
-            'commentaire' => NULL,
-        ],
-        'validation_id' => [
-            'name'        => 'validation_id',
-            'type'        => 'int',
-            'bdd-type'    => 'integer',
-            'length'      => 0,
-            'scale'       => NULL,
-            'precision'   => 4,
-            'nullable'    => FALSE,
-            'default'     => NULL,
-            'position'    => 2,
-            'commentaire' => NULL,
-        ],
-    ],
-];
-
-//@formatter:on
diff --git a/database/ddl/table/formation_domaine.php b/database/ddl/table/formation_domaine.php
index f787bffff3c8e2f1dd034f249d32225c0e8240f4..ccff9b0c12ac86cfdcbec72e7479017286593167 100644
--- a/database/ddl/table/formation_domaine.php
+++ b/database/ddl/table/formation_domaine.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_domaine',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_domaine_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_domaine_referent.php b/database/ddl/table/formation_domaine_referent.php
index 63beb830c35fbd15459feaf1208fb751fec6dd0c..e0504a1f71395c700f4310257c2a5e0e0a73a6b0 100644
--- a/database/ddl/table/formation_domaine_referent.php
+++ b/database/ddl/table/formation_domaine_referent.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_domaine_referent',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/formation_element.php b/database/ddl/table/formation_element.php
index c055a8673f3e3b8d37e3e0a8eeac031ed4222d20..c466f67e67ef9bc8d176dad05836698e46090e6d 100644
--- a/database/ddl/table/formation_element.php
+++ b/database/ddl/table/formation_element.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_element',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_element_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_formateur.php b/database/ddl/table/formation_formateur.php
index e4aa9c76642b8a51eda69d9ea80e989967a9f950..99a2e29409d97285ba18b5a2d4b030be036bfec2 100644
--- a/database/ddl/table/formation_formateur.php
+++ b/database/ddl/table/formation_formateur.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_formateur',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_formateur_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_formateur_session.php b/database/ddl/table/formation_formateur_session.php
index c154684235a877a7a0d3f1d83857f956d5abb009..375cc22065a55e21d9fe58f3ff92be6e95825739 100644
--- a/database/ddl/table/formation_formateur_session.php
+++ b/database/ddl/table/formation_formateur_session.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_formateur_session',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/formation_formation_abonnement.php b/database/ddl/table/formation_formation_abonnement.php
index d4887910fbea167efaaf461de33d21c79182407c..720049dcb57aa458c45b0e42c9a1ffc6117c5de0 100644
--- a/database/ddl/table/formation_formation_abonnement.php
+++ b/database/ddl/table/formation_formation_abonnement.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_formation_abonnement',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_formation_abonnement_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_formation_domaine.php b/database/ddl/table/formation_formation_domaine.php
index 8daa43a1f6c909a0c0dc5551db0622ad44009d85..d7cb524a9179c01972387b317dab19d641845c94 100644
--- a/database/ddl/table/formation_formation_domaine.php
+++ b/database/ddl/table/formation_formation_domaine.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_formation_domaine',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/formation_inscription.php b/database/ddl/table/formation_inscription.php
index 8a9d97109535360ae58f0d0dafbdbbdbbc30540b..ec28e4592334c260438ca96d8f1252b5e51c6457 100644
--- a/database/ddl/table/formation_inscription.php
+++ b/database/ddl/table/formation_inscription.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_inscription',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_inscription_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_inscription_etat.php b/database/ddl/table/formation_inscription_etat.php
index de45179ff722663f953d8ba1a641ea2e2f79d7cb..053bc2e7b880cdad3cfa4c4a635e36a461a33364 100644
--- a/database/ddl/table/formation_inscription_etat.php
+++ b/database/ddl/table/formation_inscription_etat.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_inscription_etat',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/formation_inscription_fichier.php b/database/ddl/table/formation_inscription_fichier.php
index 0394f7b3d10f9e471daa5358d31f4d79dc587aca..347454f3b499a58c72189ef7c5e98bef297ca1c2 100644
--- a/database/ddl/table/formation_inscription_fichier.php
+++ b/database/ddl/table/formation_inscription_fichier.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_inscription_fichier',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/formation_inscription_frais.php b/database/ddl/table/formation_inscription_frais.php
index 3d3e0b3f307c28e176e979e7c74494dfc73a6ec0..36eda789423e6aca66783d9c8feb2b85ef0c882f 100644
--- a/database/ddl/table/formation_inscription_frais.php
+++ b/database/ddl/table/formation_inscription_frais.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_inscription_frais',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_inscription_frais_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_instance.php b/database/ddl/table/formation_instance.php
index 04fee3923bb181dfd006fc92b485b6f72d5de3dc..4ec5743fb88383604cfe302320cbe31b029d543d 100644
--- a/database/ddl/table/formation_instance.php
+++ b/database/ddl/table/formation_instance.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_instance',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_instance_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_instance_inscrit.php b/database/ddl/table/formation_instance_inscrit.php
index e6540052c69225d45933fa3a0558d30c475f0c2b..48d64048d16f7cf39d6eb5114deea00478b50d48 100644
--- a/database/ddl/table/formation_instance_inscrit.php
+++ b/database/ddl/table/formation_instance_inscrit.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_instance_inscrit',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_instance_inscrit_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_lieu.php b/database/ddl/table/formation_lieu.php
index 54eca43a47ec6b7c34a4f297f8e084a07640a464..a7c60f4b9ee43995a5baf1f092c9115a72819007 100644
--- a/database/ddl/table/formation_lieu.php
+++ b/database/ddl/table/formation_lieu.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_lieu',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_lieu_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_obtenue_application.php b/database/ddl/table/formation_obtenue_application.php
index 287def90a508f3a8ca40849fe7d325d7fb880fd2..0232244e6ee5596b0f4ab03a609696496b3efc73 100644
--- a/database/ddl/table/formation_obtenue_application.php
+++ b/database/ddl/table/formation_obtenue_application.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_obtenue_application',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/formation_obtenue_competence.php b/database/ddl/table/formation_obtenue_competence.php
index 33e2a1fe73e3610ab12f43a6304147bc32a2ce76..2ce86c719e62554cfab3b24cb8bf6e3453171f4e 100644
--- a/database/ddl/table/formation_obtenue_competence.php
+++ b/database/ddl/table/formation_obtenue_competence.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_obtenue_competence',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/formation_plan_formation.php b/database/ddl/table/formation_plan_formation.php
index a0437fc3ddf3faf8ee65efdb23b5dc25e5469741..5c9d4df092c6741efeac804de0b307b63731007f 100644
--- a/database/ddl/table/formation_plan_formation.php
+++ b/database/ddl/table/formation_plan_formation.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_plan_formation',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_plan_formation_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_presence.php b/database/ddl/table/formation_presence.php
index 3ac9784f3545537d4c421d97419bf4e9a9da904c..fcd014263ae2bf2fc85e8b5cf9e587fa3fa53f89 100644
--- a/database/ddl/table/formation_presence.php
+++ b/database/ddl/table/formation_presence.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_presence',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_presence_id_seq',
     'columns'     => [
@@ -110,7 +110,7 @@ return [
             'name'        => 'id_source',
             'type'        => 'string',
             'bdd-type'    => 'character varying',
-            'length'      => 100,
+            'length'      => 256,
             'scale'       => NULL,
             'precision'   => NULL,
             'nullable'    => TRUE,
diff --git a/database/ddl/table/formation_referent.php b/database/ddl/table/formation_referent.php
index d683ed3c882b967ceaf13871075697ac6dbafd8f..632c5a5b45bbcd0af726567b43a25014c8dc6e0f 100644
--- a/database/ddl/table/formation_referent.php
+++ b/database/ddl/table/formation_referent.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_referent',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_referent_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_seance.php b/database/ddl/table/formation_seance.php
index 81c858ca021f945aca83cf7621ea1c4379a865dc..d165a79e9459f52546514ea1e9b032eabe6a6e8c 100644
--- a/database/ddl/table/formation_seance.php
+++ b/database/ddl/table/formation_seance.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_seance',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_seance_id_seq',
     'columns'     => [
@@ -122,7 +122,7 @@ return [
             'name'        => 'id_source',
             'type'        => 'string',
             'bdd-type'    => 'character varying',
-            'length'      => 64,
+            'length'      => 256,
             'scale'       => NULL,
             'precision'   => NULL,
             'nullable'    => TRUE,
diff --git a/database/ddl/table/formation_session_etat.php b/database/ddl/table/formation_session_etat.php
index c9d03d61e2e1510d8f4e7604c61c90f836a6aac8..e14d4672de38c09bdd841689f9f91e81e7c57bc2 100644
--- a/database/ddl/table/formation_session_etat.php
+++ b/database/ddl/table/formation_session_etat.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_session_etat',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/formation_session_evenement.php b/database/ddl/table/formation_session_evenement.php
index 73e9f81f8790f3e7206dc2607d90e792f1eb6627..474bc3a5c6460eea9d839067e144f7445f94f824 100644
--- a/database/ddl/table/formation_session_evenement.php
+++ b/database/ddl/table/formation_session_evenement.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_session_evenement',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/formation_session_gestionnaire.php b/database/ddl/table/formation_session_gestionnaire.php
index 9d1296428dd1fa61c9882a6b359c521ce21ce01d..d307124955d6a811f2c6a12ce9d6527207e33e9b 100644
--- a/database/ddl/table/formation_session_gestionnaire.php
+++ b/database/ddl/table/formation_session_gestionnaire.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_session_gestionnaire',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/formation_session_mail.php b/database/ddl/table/formation_session_mail.php
index ad483fb03db6db5ddc5414a9cd9c16d1c22fd837..634814c6c0e899b5232aab1c0238f54aa2b98244 100644
--- a/database/ddl/table/formation_session_mail.php
+++ b/database/ddl/table/formation_session_mail.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_session_mail',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/formation_session_parametre.php b/database/ddl/table/formation_session_parametre.php
index e70cd4ce53c0a93154df0b7f6a52dd3a5de1f2af..0c642ddac0074a1527e8988a106d621c75e3d018 100644
--- a/database/ddl/table/formation_session_parametre.php
+++ b/database/ddl/table/formation_session_parametre.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_session_parametre',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => 'Table permettant de parametre le comportement d\'une session',
     'sequence'    => 'formation_session_parametre_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_session_type.php b/database/ddl/table/formation_session_type.php
index 6d24a486833946932d3c9956812fc7f7e754968f..f18f3ac5549997357b066e05d18b01aee59925c9 100644
--- a/database/ddl/table/formation_session_type.php
+++ b/database/ddl/table/formation_session_type.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_session_type',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_session_type_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/formation_stagiaire_externe.php b/database/ddl/table/formation_stagiaire_externe.php
index 6303dfa56d21b2cef9bd506ed521c43a1c887a87..7455cf1ab27a4d4cf966a334290e6b0b1022d040 100644
--- a/database/ddl/table/formation_stagiaire_externe.php
+++ b/database/ddl/table/formation_stagiaire_externe.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'formation_stagiaire_externe',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'formation_stagiaire_externe_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/lagaf_stagiaire.php b/database/ddl/table/lagaf_stagiaire.php
index ad6f2c1e01635b77357c05c31e4d7a8ccca3e9f8..7ce393d4d69340b2331b64f69b58ea15eba0ec97 100644
--- a/database/ddl/table/lagaf_stagiaire.php
+++ b/database/ddl/table/lagaf_stagiaire.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'lagaf_stagiaire',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'lagaf_stagiaire_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/metier_domaine.php b/database/ddl/table/metier_domaine.php
index 07b02647d636e9a3623986c1ab4bbfd15dfa0881..99c457dc753434b2e99081ba31206f6dd26c928a 100644
--- a/database/ddl/table/metier_domaine.php
+++ b/database/ddl/table/metier_domaine.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'metier_domaine',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'metier_domaine_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/metier_domaine_famille.php b/database/ddl/table/metier_domaine_famille.php
index 4ca2530fab0333cfccf3335eff0e68434892f0d7..5a4b9f50e28f90ab80992f0474719500b3f69efd 100644
--- a/database/ddl/table/metier_domaine_famille.php
+++ b/database/ddl/table/metier_domaine_famille.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'metier_domaine_famille',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/metier_familleprofessionnelle.php b/database/ddl/table/metier_familleprofessionnelle.php
index 3fe594cf5e032356dd69c865783776f73a7e33fe..259cd798ef420375e1bc7ab3afe3f7ee5d7f0ef2 100644
--- a/database/ddl/table/metier_familleprofessionnelle.php
+++ b/database/ddl/table/metier_familleprofessionnelle.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'metier_familleprofessionnelle',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'metier_familleprofessionnelle_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/metier_metier.php b/database/ddl/table/metier_metier.php
index cb5f32a8306cace9ae20784cd7d7481c7fae7389..185775edf8384c0dea67e4bd856e50e07734866a 100644
--- a/database/ddl/table/metier_metier.php
+++ b/database/ddl/table/metier_metier.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'metier_metier',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'metier_metier_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/metier_metier_domaine.php b/database/ddl/table/metier_metier_domaine.php
index d9098eaf46a8f061b32c180e548a2531c0466e05..8eee5991b9717f925d6c2c16917512cdbf8c7be8 100644
--- a/database/ddl/table/metier_metier_domaine.php
+++ b/database/ddl/table/metier_metier_domaine.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'metier_metier_domaine',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/metier_reference.php b/database/ddl/table/metier_reference.php
index 5cf9419a454f548cd949b4e78f7b76f9ad89f4b8..93f690d86e154c7498328d8e59d6929e2bfe0e4d 100644
--- a/database/ddl/table/metier_reference.php
+++ b/database/ddl/table/metier_reference.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'metier_reference',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'metier_reference_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/metier_referentiel.php b/database/ddl/table/metier_referentiel.php
index 9eb786994c93efcb2043db55fe7f1247a4085474..c78c514c6cd0ee0c61c75e895cda1036939e0964 100644
--- a/database/ddl/table/metier_referentiel.php
+++ b/database/ddl/table/metier_referentiel.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'metier_referentiel',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'metier_referentiel_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/notification_configuration.php b/database/ddl/table/notification_configuration.php
index ae7000c8e4f96cb7394755331bac899d3841af45..92db74245f1e2a4f898b83307ff228e28b83a28e 100644
--- a/database/ddl/table/notification_configuration.php
+++ b/database/ddl/table/notification_configuration.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'notification_configuration',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'notification_configuration_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/structure.php b/database/ddl/table/structure.php
index d3007e5d00c98c78a5201a5a0e4cbe03c2d32579..f2e2f3024129f635b3208966ce2324669562fafc 100644
--- a/database/ddl/table/structure.php
+++ b/database/ddl/table/structure.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'structure',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
@@ -40,7 +40,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => FALSE,
             'default'     => '(\'now\'::text)::timestamp(0) without time zone',
             'position'    => 18,
@@ -76,7 +76,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 20,
@@ -193,10 +193,10 @@ return [
         'niv2_id'               => [
             'name'        => 'niv2_id',
             'type'        => 'int',
-            'bdd-type'    => 'integer',
+            'bdd-type'    => 'bigint',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => 4,
+            'precision'   => 8,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 14,
@@ -242,7 +242,7 @@ return [
             'name'        => 'sigle',
             'type'        => 'string',
             'bdd-type'    => 'character varying',
-            'length'      => 255,
+            'length'      => 40,
             'scale'       => NULL,
             'precision'   => NULL,
             'nullable'    => TRUE,
@@ -280,7 +280,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 19,
diff --git a/database/ddl/table/structure_agent_force.php b/database/ddl/table/structure_agent_force.php
index e4ff655cd41dc8814bd81b2e1002979406be7183..826ee68a49915f9928bcf1dd3fe452cb53b3662c 100644
--- a/database/ddl/table/structure_agent_force.php
+++ b/database/ddl/table/structure_agent_force.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'structure_agent_force',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'structure_agent_force_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/structure_gestionnaire.php b/database/ddl/table/structure_gestionnaire.php
index c148bb2e9c66349a653ec8bd9088800e885e8de4..6868f46eab2ade7785bf1c5e48bd378be1abead9 100644
--- a/database/ddl/table/structure_gestionnaire.php
+++ b/database/ddl/table/structure_gestionnaire.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'structure_gestionnaire',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'structure_gestionnaire_id_seq',
     'columns'     => [
@@ -28,7 +28,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => FALSE,
             'default'     => '(\'now\'::text)::timestamp(0) without time zone',
             'position'    => 9,
@@ -64,7 +64,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 11,
@@ -172,7 +172,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 10,
diff --git a/database/ddl/table/structure_observateur.php b/database/ddl/table/structure_observateur.php
index 5dd345299a67dab1a31c585002af15eb4f70f27d..8e8b89926b9d2462e2303ce938bb031a28e638b1 100644
--- a/database/ddl/table/structure_observateur.php
+++ b/database/ddl/table/structure_observateur.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'structure_observateur',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'structure_observateur_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/structure_responsable.php b/database/ddl/table/structure_responsable.php
index 5873f11fe4773535afbae67fbb7c464f55596320..2f916846a2d0de295648ba149f57a9fbb534c8b3 100644
--- a/database/ddl/table/structure_responsable.php
+++ b/database/ddl/table/structure_responsable.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'structure_responsable',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'structure_responsable_id_seq',
     'columns'     => [
@@ -28,7 +28,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => FALSE,
             'default'     => '(\'now\'::text)::timestamp(0) without time zone',
             'position'    => 9,
@@ -64,7 +64,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 11,
@@ -172,7 +172,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 10,
diff --git a/database/ddl/table/structure_type.php b/database/ddl/table/structure_type.php
index bee7fd9daa5855aa63fd3c74c66219729a0e44b6..e54e71a3b93af45191eb18d3a416be9a26edcb30 100644
--- a/database/ddl/table/structure_type.php
+++ b/database/ddl/table/structure_type.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'structure_type',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
@@ -28,7 +28,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => FALSE,
             'default'     => '(\'now\'::text)::timestamp(0) without time zone',
             'position'    => 7,
@@ -40,7 +40,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 9,
@@ -148,7 +148,7 @@ return [
             'bdd-type'    => 'timestamp without time zone',
             'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 6,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 8,
diff --git a/database/ddl/table/unicaen_enquete_enquete.php b/database/ddl/table/unicaen_enquete_enquete.php
index 938199a7f99ea8d939fe1fe0ad65920966ade8dd..66a6bda100f203e276b8bb09421ef3f201a8851d 100644
--- a/database/ddl/table/unicaen_enquete_enquete.php
+++ b/database/ddl/table/unicaen_enquete_enquete.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_enquete_enquete',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_enquete_enquete_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_enquete_groupe.php b/database/ddl/table/unicaen_enquete_groupe.php
index 2d20cd198f573b80bb78dac882cf027a2110ed4c..1aa5c302e0c08854c63ec955bc962abc9a5ae3be 100644
--- a/database/ddl/table/unicaen_enquete_groupe.php
+++ b/database/ddl/table/unicaen_enquete_groupe.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_enquete_groupe',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_enquete_groupe_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_enquete_instance.php b/database/ddl/table/unicaen_enquete_instance.php
index b9bd6f5dfae4ff540266348ff7e6269a6a632154..631ea5c74ffa240ee732868849787b574bae87bf 100644
--- a/database/ddl/table/unicaen_enquete_instance.php
+++ b/database/ddl/table/unicaen_enquete_instance.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_enquete_instance',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_enquete_instance_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_enquete_question.php b/database/ddl/table/unicaen_enquete_question.php
index 3bef85335696e97a53485986b2600316fe5db833..a4d08d3f27c4ba297c18adf6ad91d8c5dec09e9d 100644
--- a/database/ddl/table/unicaen_enquete_question.php
+++ b/database/ddl/table/unicaen_enquete_question.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_enquete_question',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_enquete_question_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_enquete_reponse.php b/database/ddl/table/unicaen_enquete_reponse.php
index d817609436b49c497b19aa80d44abd9285bc4ba9..65969f3b6ed00299a19d4695da9fbe3b987ee371 100644
--- a/database/ddl/table/unicaen_enquete_reponse.php
+++ b/database/ddl/table/unicaen_enquete_reponse.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_enquete_reponse',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_enquete_reponse_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_etat_categorie.php b/database/ddl/table/unicaen_etat_categorie.php
index 2bac698fc46c8c16237f0e1ca9cd69867f050de6..c031794a6ae988aeda9941c3a2aa453f25a4e815 100644
--- a/database/ddl/table/unicaen_etat_categorie.php
+++ b/database/ddl/table/unicaen_etat_categorie.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_etat_categorie',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_etat_categorie_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_etat_instance.php b/database/ddl/table/unicaen_etat_instance.php
index fcbc91a8056b45d3c6b0e1d0c2c52947f7295d65..cffb7e378d7d986f10a881e1b69dd17d296d3902 100644
--- a/database/ddl/table/unicaen_etat_instance.php
+++ b/database/ddl/table/unicaen_etat_instance.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_etat_instance',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_etat_instance_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_etat_type.php b/database/ddl/table/unicaen_etat_type.php
index ebee60782f32cdb56901a43c90878ff90cc7244b..ce18f98ee65bd2dd77a1d2cc68689d1802e8ca32 100644
--- a/database/ddl/table/unicaen_etat_type.php
+++ b/database/ddl/table/unicaen_etat_type.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_etat_type',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_etat_type_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_evenement_etat.php b/database/ddl/table/unicaen_evenement_etat.php
index a5ffce6f5d4cd244b41723db09298e354337e8dc..9075b37fbf48591b15131bce6dc9048696e74913 100644
--- a/database/ddl/table/unicaen_evenement_etat.php
+++ b/database/ddl/table/unicaen_evenement_etat.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_evenement_etat',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_evenement_etat_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_evenement_instance.php b/database/ddl/table/unicaen_evenement_instance.php
index 744d10537065d94dcd9344cdde123f0eda6d7576..371fcd9b02bc7fa2bca258f0412ed2371ccfcc4c 100644
--- a/database/ddl/table/unicaen_evenement_instance.php
+++ b/database/ddl/table/unicaen_evenement_instance.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_evenement_instance',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_evenement_instance_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_evenement_journal.php b/database/ddl/table/unicaen_evenement_journal.php
index f0e5d3e0be2aaaf05e01f5fedec7d58f3766ddff..c76355e4a53d4016b1ad29b34fc5fd5297624d4a 100644
--- a/database/ddl/table/unicaen_evenement_journal.php
+++ b/database/ddl/table/unicaen_evenement_journal.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_evenement_journal',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_evenement_journal_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_evenement_type.php b/database/ddl/table/unicaen_evenement_type.php
index 6e80eab05b5152fec14bf72df8d3103fc5290359..0adec024af28f3d7d6b0e6ae6a6b8ff47caf6c7e 100644
--- a/database/ddl/table/unicaen_evenement_type.php
+++ b/database/ddl/table/unicaen_evenement_type.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_evenement_type',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_evenement_type_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_indicateur_abonnement.php b/database/ddl/table/unicaen_indicateur_abonnement.php
index dad70de952fd90dcd3481b96f0924601f8c6b887..c2d94d64270c06d6019aa6035ec8cfadedb33e62 100644
--- a/database/ddl/table/unicaen_indicateur_abonnement.php
+++ b/database/ddl/table/unicaen_indicateur_abonnement.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_indicateur_abonnement',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_indicateur_abonnement_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_indicateur_categorie.php b/database/ddl/table/unicaen_indicateur_categorie.php
index a8c77f0e82320122d97734a01a96d39356798db0..aff48b9da615b17a1537f9aa7c6643f6cc7fa954 100644
--- a/database/ddl/table/unicaen_indicateur_categorie.php
+++ b/database/ddl/table/unicaen_indicateur_categorie.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_indicateur_categorie',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_indicateur_categorie_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_indicateur_indicateur.php b/database/ddl/table/unicaen_indicateur_indicateur.php
index 1dead234631e772ff10bce3a66f443b161fa00dc..4cb644db640a6439dd8761e8be8b00ac45dc75f3 100644
--- a/database/ddl/table/unicaen_indicateur_indicateur.php
+++ b/database/ddl/table/unicaen_indicateur_indicateur.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_indicateur_indicateur',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_indicateur_indicateur_id_seq',
     'columns'     => [
@@ -26,7 +26,7 @@ return [
             'name'        => 'code',
             'type'        => 'string',
             'bdd-type'    => 'character varying',
-            'length'      => 1024,
+            'length'      => 256,
             'scale'       => NULL,
             'precision'   => NULL,
             'nullable'    => TRUE,
@@ -86,7 +86,7 @@ return [
             'name'        => 'namespace',
             'type'        => 'string',
             'bdd-type'    => 'character varying',
-            'length'      => 256,
+            'length'      => 1024,
             'scale'       => NULL,
             'precision'   => NULL,
             'nullable'    => TRUE,
@@ -106,6 +106,18 @@ return [
             'position'    => 10,
             'commentaire' => NULL,
         ],
+        'perimetre'                => [
+            'name'        => 'perimetre',
+            'type'        => 'string',
+            'bdd-type'    => 'character varying',
+            'length'      => 256,
+            'scale'       => NULL,
+            'precision'   => NULL,
+            'nullable'    => FALSE,
+            'default'     => '\'aucun\'',
+            'position'    => 12,
+            'commentaire' => NULL,
+        ],
         'requete'                  => [
             'name'        => 'requete',
             'type'        => 'string',
diff --git a/database/ddl/table/unicaen_indicateur_tableau_indicateur.php b/database/ddl/table/unicaen_indicateur_tableau_indicateur.php
index aa6a6ebc0bd9f568ebd0f7d52aef274d76dcb718..d29099581cdd7ced14e05acf168d68e42b85b155 100644
--- a/database/ddl/table/unicaen_indicateur_tableau_indicateur.php
+++ b/database/ddl/table/unicaen_indicateur_tableau_indicateur.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_indicateur_tableau_indicateur',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/unicaen_indicateur_tableaudebord.php b/database/ddl/table/unicaen_indicateur_tableaudebord.php
index 836b42f7c3e9d030938c414caef9fda4730e8de2..22c5df151c41e032056a9e4d6c7b8d66ce42b7d9 100644
--- a/database/ddl/table/unicaen_indicateur_tableaudebord.php
+++ b/database/ddl/table/unicaen_indicateur_tableaudebord.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_indicateur_tableaudebord',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_indicateur_tableaudebord_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_mail_mail.php b/database/ddl/table/unicaen_mail_mail.php
index 4aa62e1f6d042911dc92c2e04b989ce269a0b2e3..9b054b001dd52f46c696420dd5b1a722e11eb05c 100644
--- a/database/ddl/table/unicaen_mail_mail.php
+++ b/database/ddl/table/unicaen_mail_mail.php
@@ -6,17 +6,17 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_mail_mail',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_mail_mail_id_seq',
     'columns'     => [
         'attachment_paths'       => [
             'name'        => 'attachment_paths',
-            'type'        => 'string',
-            'bdd-type'    => 'character varying',
-            'length'      => 1024,
+            'type'        => 'int',
+            'bdd-type'    => 'integer',
+            'length'      => 0,
             'scale'       => NULL,
-            'precision'   => NULL,
+            'precision'   => 4,
             'nullable'    => TRUE,
             'default'     => NULL,
             'position'    => 11,
diff --git a/database/ddl/table/unicaen_parametre_categorie.php b/database/ddl/table/unicaen_parametre_categorie.php
index 6866286de2aa98b6f18d8b61a0abe7bf7fe40e44..87a42013125aa1fb54fba57ed75759ffa934d8b3 100644
--- a/database/ddl/table/unicaen_parametre_categorie.php
+++ b/database/ddl/table/unicaen_parametre_categorie.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_parametre_categorie',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_parametre_categorie_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_parametre_parametre.php b/database/ddl/table/unicaen_parametre_parametre.php
index 4cb41e23aaaafd4964953033690a7588bdb20458..42e6b5aab813188691fba7c7db7c406a2fe189bf 100644
--- a/database/ddl/table/unicaen_parametre_parametre.php
+++ b/database/ddl/table/unicaen_parametre_parametre.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_parametre_parametre',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_parametre_parametre_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_privilege_categorie.php b/database/ddl/table/unicaen_privilege_categorie.php
index 8db3f1d527f66d8776c53094aced8a8094c36199..7297b2955b2a75e64f2c604e4f00d4b2ac07aba7 100644
--- a/database/ddl/table/unicaen_privilege_categorie.php
+++ b/database/ddl/table/unicaen_privilege_categorie.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_privilege_categorie',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_privilege_categorie_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_privilege_privilege.php b/database/ddl/table/unicaen_privilege_privilege.php
index 00823070dffc60fba1048eeeb7cc524363588fa7..b46051cfc4196e4b6fe137b9e6c766bd065b6a53 100644
--- a/database/ddl/table/unicaen_privilege_privilege.php
+++ b/database/ddl/table/unicaen_privilege_privilege.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_privilege_privilege',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_privilege_privilege_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_privilege_privilege_role_linker.php b/database/ddl/table/unicaen_privilege_privilege_role_linker.php
index 5cb602c2dc0b3500476f2e46b4b6f7c9cec7db2d..bea319cc37f56ac4462e135b2f092c980230ff07 100644
--- a/database/ddl/table/unicaen_privilege_privilege_role_linker.php
+++ b/database/ddl/table/unicaen_privilege_privilege_role_linker.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_privilege_privilege_role_linker',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/unicaen_renderer_macro.php b/database/ddl/table/unicaen_renderer_macro.php
index 9295f04eacd747bf814b34e69bd4002032ea15d8..75afcb2be31bd2f15bef424686fa8159a88aff44 100644
--- a/database/ddl/table/unicaen_renderer_macro.php
+++ b/database/ddl/table/unicaen_renderer_macro.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_renderer_macro',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_renderer_macro_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_renderer_rendu.php b/database/ddl/table/unicaen_renderer_rendu.php
index aa356cb4b1c8615e23db10b7a33bcb02731a8ef9..73a08dc702cd41bf0d4b0e21b45a98faed4d249e 100644
--- a/database/ddl/table/unicaen_renderer_rendu.php
+++ b/database/ddl/table/unicaen_renderer_rendu.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_renderer_rendu',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_renderer_rendu_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_renderer_template.php b/database/ddl/table/unicaen_renderer_template.php
index ae838cf7757e85287b81a6eca2bb902a9ab477c3..2f8f126d24e33718aeebd9fc42c2e6a585a67f73 100644
--- a/database/ddl/table/unicaen_renderer_template.php
+++ b/database/ddl/table/unicaen_renderer_template.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_renderer_template',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_renderer_template_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_utilisateur_role.php b/database/ddl/table/unicaen_utilisateur_role.php
index 1f124c8f5c49c7a6b10671a07e8360eebed47f59..333f751c279989312b64325d14bb938953f40dc6 100644
--- a/database/ddl/table/unicaen_utilisateur_role.php
+++ b/database/ddl/table/unicaen_utilisateur_role.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_utilisateur_role',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_utilisateur_role_id_seq',
     'columns'     => [
@@ -86,7 +86,7 @@ return [
             'name'        => 'ldap_filter',
             'type'        => 'string',
             'bdd-type'    => 'character varying',
-            'length'      => 35,
+            'length'      => 255,
             'scale'       => NULL,
             'precision'   => NULL,
             'nullable'    => TRUE,
@@ -98,7 +98,7 @@ return [
             'name'        => 'libelle',
             'type'        => 'string',
             'bdd-type'    => 'character varying',
-            'length'      => 200,
+            'length'      => 255,
             'scale'       => NULL,
             'precision'   => NULL,
             'nullable'    => FALSE,
diff --git a/database/ddl/table/unicaen_utilisateur_role_linker.php b/database/ddl/table/unicaen_utilisateur_role_linker.php
index 295335e7ffc10a8ba84c58fceea707e684f76136..bc6d3683315a749d40d0f689996790c2c706ab18 100644
--- a/database/ddl/table/unicaen_utilisateur_role_linker.php
+++ b/database/ddl/table/unicaen_utilisateur_role_linker.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_utilisateur_role_linker',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => NULL,
     'columns'     => [
diff --git a/database/ddl/table/unicaen_utilisateur_user.php b/database/ddl/table/unicaen_utilisateur_user.php
index afd9fd961521a235df1dcd08ad9f119bd7ea16c7..b1a432e3dac85676bbea282a44557bad706ec8d0 100644
--- a/database/ddl/table/unicaen_utilisateur_user.php
+++ b/database/ddl/table/unicaen_utilisateur_user.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_utilisateur_user',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_utilisateur_user_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_validation_instance.php b/database/ddl/table/unicaen_validation_instance.php
index 793a4343d2818f337989aa5090be2f4a440fe01a..874e417184b7214be44bb9029711b37400b5e8b5 100644
--- a/database/ddl/table/unicaen_validation_instance.php
+++ b/database/ddl/table/unicaen_validation_instance.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_validation_instance',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_validation_instance_id_seq',
     'columns'     => [
diff --git a/database/ddl/table/unicaen_validation_type.php b/database/ddl/table/unicaen_validation_type.php
index c28cc1d1fafb874c9f1aea31a41746f3d23349d2..9ba6673fa480f0ed791a5ee87ae86079b5888a48 100644
--- a/database/ddl/table/unicaen_validation_type.php
+++ b/database/ddl/table/unicaen_validation_type.php
@@ -6,7 +6,7 @@ return [
     'schema'      => 'public',
     'name'        => 'unicaen_validation_type',
     'temporary'   => FALSE,
-    'logging'     => FALSE,
+    'logging'     => TRUE,
     'commentaire' => NULL,
     'sequence'    => 'unicaen_validation_type_id_seq',
     'columns'     => [
diff --git a/database/ddl_columns_pos.php b/database/ddl_columns_pos.php
index eec3418cb22de054ca7157ddb1c3015542223580..56ea6bed9547b586fc383b449ef62640f4749113 100644
--- a/database/ddl_columns_pos.php
+++ b/database/ddl_columns_pos.php
@@ -13,11 +13,9 @@ return [
         'deleted_on',
         'octo_id',
         'preecog_id',
-        'harp_id',
         'login',
         'email',
         'sexe',
-        't_contrat_long',
         'date_naissance',
         'nom_famille',
         'id',
@@ -1791,6 +1789,7 @@ return [
         'code',
         'nb_elements',
         'categorie_id',
+        'perimetre',
     ],
     'unicaen_indicateur_tableau_indicateur'             => [
         'tableau_id',
diff --git a/database/migration-script/1.1.0.sql b/database/migration-script/1.1.0.sql
new file mode 100644
index 0000000000000000000000000000000000000000..efa6cbee41a008c13dd72ca2d01e74917036de82
--- /dev/null
+++ b/database/migration-script/1.1.0.sql
@@ -0,0 +1,85 @@
+-- nouveaux roles
+INSERT INTO unicaen_utilisateur_role (role_id, libelle, is_default, is_auto, parent_id, ldap_filter, accessible_exterieur, description, displayed) VALUES ('Direction des Ressources Humaines', 'Direction des Ressources Humaines', false, true, null, null, true, 'Référent·es formation·s pour des domaines données', true);
+INSERT INTO unicaen_utilisateur_role (role_id, libelle, is_default, is_auto, parent_id, ldap_filter, accessible_exterieur, description, displayed) VALUES ('Direction Générale des Services', 'Direction Générale des Services', false, true, null, null, true, 'Référent·es formation·s pour des domaines données', true);
+
+
+-- nouveaux parametres
+INSERT INTO unicaen_parametre_parametre(CATEGORIE_ID, CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE)
+WITH d(CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE) AS (
+    SELECT 'PLAFOND_DGS', 'Plafond de coût des formations nécessitant une validation DGS', null, 'Number', 100
+)
+SELECT cp.id, d.CODE, d.LIBELLE, d.DESCRIPTION, d.VALEURS_POSSIBLES, d.ORDRE
+FROM d
+JOIN unicaen_parametre_categorie cp ON cp.CODE = 'DEMANDE_EXTERNE';
+INSERT INTO unicaen_parametre_categorie (code, libelle, ordre)
+VALUES ('PLAN_FORMATION', 'Gestion du plan de formation', 10000);
+INSERT INTO unicaen_parametre_parametre(CATEGORIE_ID, CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE)
+WITH d(CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE) AS (
+    SELECT 'NAVIGATION_ACTIVEE', 'Navigation rapide activée', null, 'Boolean', 10 UNION
+    SELECT 'AXE_AFFICHE', 'Utilisation des axes pour la navigation rapide', null , 'Boolean', 20
+)
+SELECT cp.id, d.CODE, d.LIBELLE, d.DESCRIPTION, d.VALEURS_POSSIBLES, d.ORDRE
+FROM d
+         JOIN unicaen_parametre_categorie cp ON cp.CODE = 'PLAN_FORMATION';
+
+-- nouveaux privileges
+INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
+WITH d(code, lib, ordre) AS (
+    SELECT 'demandeexterne_valider_valideur', 'Valider une demande en tant que valideur·euse', 115 UNION
+    SELECT 'demandeexterne_valider_dgs', 'Valider une demande en tant que direction générale des services', 130 UNION
+    SELECT 'demandeexterne_parapheur', 'Accéder au parapheur', 250
+)
+SELECT cp.id, d.code, d.lib, d.ordre
+FROM d
+JOIN unicaen_privilege_categorie cp ON cp.CODE = 'demandeexterne';
+INSERT INTO unicaen_privilege_categorie (code, libelle, namespace, ordre)
+VALUES ('export', '', 'Application\Provider\Privilege', 200);
+INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
+WITH d(code, lib, ordre) AS (
+    SELECT 'export_index', 'Afficher des exportation', 10
+)
+SELECT cp.id, d.code, d.lib, d.ordre
+FROM d
+         JOIN unicaen_privilege_categorie cp ON cp.CODE = 'export';
+-- nouveau template
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (123, 'DEMANDE_EXTERNE_DEMANDE_COMPLETE', '<p>Courrier électronique envoyé lorsque la demande est complète et complètement validée.<br>Ce courrier est envoyé à l''agent·e</p>', 'mail', 'Votre demande de formation hors plan de formation est totalement validée', e'<p>Bonjour,</p>
+<p>Votre demande de formation hors plan de formation est totalement validée.<br><br>Bonne journée,<br>VAR[Macro#AppName]<br>VAR[Url#AppLink]</p>', null, 'DemandeExterne\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (124, 'DEMANDE_EXTERNE_DEMANDE_DRH', '<p>Courrier électronique envoyé lorsque la demande est complète, validée par le responsable de formation et d''un montant dépassant le plafond de coût élevé.<br>Ce courrier est envoyé aux personnes ayant le rôle direction des ressources humaines</p>', 'mail', 'La demande de formation hors de plan de formation de VAR[AGENT#Denomination] est  complète et demande votre validation', e'<p>Bonjour,</p>
+<p>La demande de formation hors de plan de formation de VAR[AGENT#Denomination] est  complète.<br>Celle-ci à un montant supérieur à VAR[Macro#Parametre|DEMANDE_EXTERNE;PLAFOND_DRH] et requiert votre validation.<br>Vous pouvez valider ou refuser celle-ci dans le parapheur des demandes de formation : VAR[URL#Parapheur].</p>
+<p>Bonne journée,</p>
+<p>VAR[Macro#AppName]<br>VAR[Url#AppLink]</p>', null, 'DemandeExterne\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (125, 'DEMANDE_EXTERNE_DEMANDE_DGS', '<p>Courrier électronique envoyé lorsque la demande est complète validée par les DRH mais avec un plafond de coût très élevé.<br>Ce courrier est envoyé aux personnes responsables de la gestion des formations.</p>', 'mail', 'La demande de formation hors de plan de formation de VAR[AGENT#Denomination] est  complète et attend votre validation', e'<p>Bonjour,</p>
+<p>La demande de formation hors de plan de formation de VAR[AGENT#Denomination] est  complète.<br>Celle-ci à un montant supérieur à VAR[Macro#Parametre|DEMANDE_EXTERNE;PLAFOND_DGS] et requiert votre validation.<br>Vous pouvez valider ou refuser celle-ci dans le parapheur des demandes de formation : VAR[URL#Parapheur].</p>
+<p>Bonne journée,</p>
+<p>VAR[Macro#AppName]<br>VAR[Url#AppLink]</p>', null, 'DemandeExterne\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (126, 'DEMANDE_EXTERNE_DEMANDE_VALIDEE', '<p>Courrier électronique envoyé vers l''agent·e lorsque la demande est complètement validée</p>', 'mail', 'Votre demande de formation hors plan de formation vient d''être totalement validée.', e'<p>Bonjour,</p>
+<p>Votre demande de formation hors plan de formation vient d\'être totalement validée.<br>Vous serez recontactez prochainement.</p>', null, 'DemandeExterne\Provider\Privilege');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (127, 'FORMATION_NOUVELLES_FORMATIONS', '<p>TO BE WRITEN</p>', 'mail', 'TO BE WRITEN', '<p>TO BE WRITEN</p>', null, 'Formation\Provider\Template');
+-- rename template
+update unicaen_renderer_template set code='DEMANDE_EXTERNE_VALIDATION_AGENT' where code='FORMATION_DEMANDE_EXTERNE_VALIDATION_AGENT';
+update unicaen_renderer_template set code='DEMANDE_EXTERNE_VALIDATION_REFUS' where code='FORMATION_DEMANDE_EXTERNE_VALIDATION_REFUS';
+update unicaen_renderer_template set code='DEMANDE_EXTERNE_VALIDEE_VALIDEUR_DRH' where code='FORMATION_DEMANDE_EXTERNE_VALIDATION_RESP_DRH';
+update unicaen_renderer_template set code='DEMANDE_EXTERNE_VALIDEE_VALIDEUR_AGENT' where code='FORMATION_DEMANDE_EXTERNE_VALIDATION_RESP_AGENT';
+-- retrait de template non utilisee
+delete from unicaen_renderer_template where code='FORMATION_DEMANDE_EXTERNE_TOTALEMENT_VALIDEE';
+delete from unicaen_renderer_template where code='FORMATION_DEMANDE_EXTERNE_VALIDATION_DRH';
+
+
+-- nouvelles macros
+INSERT INTO unicaen_renderer_macro (code, description, variable_name, methode_name) VALUES
+('URL#Parapheur', '<p>Retourne un lien vers le parapheur des demandes hors plan de formations</p>', 'UrlService', 'getParapheurUrl');
+
+-- Nature de docuement
+INSERT INTO fichier_nature (code, libelle) VALUES ('INSCRIPTION_ATTESTATION', 'Attestion de suivi');
+
+-- nouveau etats
+INSERT INTO unicaen_etat_type (categorie_id, code, libelle, icone, couleur, ordre)
+WITH d(code, libelle, icone, couleur, ordre) AS (
+    SELECT 'DEMANDE_EXTERNE_VALIDEUR', 'Validation du valideur·euses', 'fas fa-user-tie', '#edd400', 30 UNION
+    SELECT 'DEMANDE_EXTERNE_RESP', 'Validation du responsable de l''agent', 'fas fa-user-tie', '#edd400', 30 UNION
+    SELECT 'DEMANDE_EXTERNE_RESPONSABLE', 'Demande validée par le·la responsable des formations', 'fas fa-user-check', '#8dcf3a', 37 UNION
+    SELECT 'DEMANDE_EXTERNE_DGS', 'Demande validée par la direction générale des services', 'fas fa-user-check', '#228b22', 50
+)
+SELECT cp.id, d.code, d.libelle, d.icone, d.couleur, d.ordre
+FROM d
+         JOIN unicaen_etat_categorie cp ON cp.CODE = 'DEMANDE_EXTERNE';
\ No newline at end of file
diff --git a/database/script/init_bd.sql b/database/script/init_bd.sql
index f321377d1d60458dfd10cd56c74c621903bd69a2..add4fac7b1cf63bcde6d07a391afdc98f24fca7d 100644
--- a/database/script/init_bd.sql
+++ b/database/script/init_bd.sql
@@ -10,6 +10,8 @@ INSERT INTO unicaen_utilisateur_role (role_id, libelle, is_default, is_auto, par
 INSERT INTO unicaen_utilisateur_role (role_id, libelle, is_default, is_auto, parent_id, ldap_filter, accessible_exterieur, description, displayed) VALUES ('Stagiaire externe', 'Stagiaire externe', false, true, null, null, true, 'Stagiaire qui n''est pas un·e agent·e connu·e ', true);
 INSERT INTO unicaen_utilisateur_role (role_id, libelle, is_default, is_auto, parent_id, ldap_filter, accessible_exterieur, description, displayed) VALUES ('Validateur·trice', 'Validateur·trice', false, true, null, null, true, null, true);
 INSERT INTO unicaen_utilisateur_role (role_id, libelle, is_default, is_auto, parent_id, ldap_filter, accessible_exterieur, description, displayed) VALUES ('Référent·e', 'Référent·e', false, true, null, null, true, 'Référent·es formation·s pour des domaines données', true);
+INSERT INTO unicaen_utilisateur_role (role_id, libelle, is_default, is_auto, parent_id, ldap_filter, accessible_exterieur, description, displayed) VALUES ('Direction des Ressources Humaines', 'Direction des Ressources Humaines', false, true, null, null, true, null, true);
+INSERT INTO unicaen_utilisateur_role (role_id, libelle, is_default, is_auto, parent_id, ldap_filter, accessible_exterieur, description, displayed) VALUES ('Direction Générale des Services', 'Direction Générale des Services', false, true, null, null, true, null, true);
 
 insert into unicaen_utilisateur_user (id, username, display_name, email, password, state, password_reset_token, last_role_id)
 VALUES (0, 'Mes Formations','Mes Formations',null,'db',false,null,null);
diff --git a/database/script/init_etat.sql b/database/script/init_etat.sql
index 402858d643f453129600f43b1761731cc51f0d7d..cb5ba9edbf7d1b9c8fbceb9765027effc0f9044d 100644
--- a/database/script/init_etat.sql
+++ b/database/script/init_etat.sql
@@ -21,12 +21,14 @@ INSERT INTO unicaen_etat_type (categorie_id, code, libelle, icone, couleur, ordr
 WITH d(code, libelle, icone, couleur, ordre) AS (
     SELECT 'DEMANDE_EXTERNE_REDACTION', 'Demande en cours de rédaction', 'fas fa-edit', '#75507b', 10 UNION
     SELECT 'DEMANDE_EXTERNE_AGENT', 'Validation de l''agent', 'fas fa-user', '#f57900', 20 UNION
+    SELECT 'DEMANDE_EXTERNE_VALIDEUR', 'Validation du valideur·euses', 'fas fa-user-tie', '#edd400', 30 UNION
     SELECT 'DEMANDE_EXTERNE_RESP', 'Validation du responsable de l''agent', 'fas fa-user-tie', '#edd400', 30 UNION
-    SELECT 'DEMANDE_EXTERNE_FORCEE_PARAPHEUR', 'Demande envoyée dans le parapheur', 'icon icon-importer', '#cbcb00', 35 UNION
-    SELECT 'DEMANDE_EXTERNE_GESTIONNAIRE', 'Demande validée par un gestionnaire', 'fas fa-hourglass', '#cbcb00', 36 UNION
-    SELECT 'DEMANDE_EXTERNE_DRH', 'Validation par le bureau de gestion des formations', 'fas fa-user-check', '#8ae234', 40 UNION
-    SELECT 'DEMANDE_EXTERNE_TERMINEE', 'Demande de formation externe traitée', 'far fa-check-square', '#4e9a06', 50 UNION
-    SELECT 'DEMANDE_EXTERNE_REJETEE', 'Demande de formation externe rejetée', 'fas fa-times', '#a40000', 60
+    SELECT 'DEMANDE_EXTERNE_GESTIONNAIRE', 'Demande validée par un·e gestionnaire des formations', 'fas fa-clipboard-check', '#c3ec90', 36 UNION
+    SELECT 'DEMANDE_EXTERNE_RESPONSABLE', 'Demande validée par le·la responsable des formations', 'fas fa-user-check', '#8dcf3a', 37 UNION
+    SELECT 'DEMANDE_EXTERNE_DRH', 'Validation par le direction des ressources humaines', 'fas fa-user-check', '#5fae45', 40 UNION
+    SELECT 'DEMANDE_EXTERNE_DGS', 'Demande validée par la direction générale des services', 'fas fa-user-check', '#228b22', 50 UNION
+    SELECT 'DEMANDE_EXTERNE_TERMINEE', 'Demande de formation externe traitée', 'far fa-check-square', '#4e9a06', 100 UNION
+    SELECT 'DEMANDE_EXTERNE_REJETEE', 'Demande de formation externe rejetée', 'fas fa-times', '#a40000', 110
 )
 SELECT cp.id, d.code, d.libelle, d.icone, d.couleur, d.ordre
 FROM d
diff --git a/database/script/init_parametre.sql b/database/script/init_parametre.sql
index 2b8b6dc79cad6dac901de5ae11af26705e67af2c..cd552cf56f95af66103958e38946ea59fc773c82 100644
--- a/database/script/init_parametre.sql
+++ b/database/script/init_parametre.sql
@@ -49,7 +49,7 @@ INSERT INTO unicaen_parametre_categorie (code, libelle, ordre)
 VALUES ('FORMATION', 'Paramètres liés aux formations', 2000);
 INSERT INTO unicaen_parametre_parametre(CATEGORIE_ID, CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE)
 WITH d(CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE) AS (
-    SELECT 'NB_PLACE_PRINCIPAL', 'Nombre de place par défaut en liste principale', null, 'Number', 1000 UNION
+    SELECT 'NB_PLACE_PRINCIPALE', 'Nombre de place par défaut en liste principale', null, 'Number', 1000 UNION
     SELECT 'NB_PLACE_COMPLEMENTAIRE', 'Nombre de place par défaut en liste complémentaire', null, 'Number', 1100 UNION
     SELECT 'INSCRIPTION_PLAFOND_ANNUEL', 'Plafond en heures', null, 'Number', 110 UNION
     SELECT 'CONVOCATION_SUPERIEUR_COPIE', 'Mise en copie des supérieur·es hiérarchiques lors de convocation', null, 'Boolean', 120 UNION
@@ -73,6 +73,27 @@ SELECT cp.id, d.CODE, d.LIBELLE, d.DESCRIPTION, d.VALEURS_POSSIBLES, d.ORDRE
 FROM d
          JOIN unicaen_parametre_categorie cp ON cp.CODE = 'STAGE';
 
+
+INSERT INTO unicaen_parametre_categorie (code, libelle, ordre)
+VALUES ('DEMANDE_EXTERNE', 'Gestion des formation hors plan de formation', 4000);
+INSERT INTO unicaen_parametre_parametre(CATEGORIE_ID, CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE)
+WITH d(CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE) AS (
+    SELECT 'PLAFOND_DRH', 'Plafond nécessitant la validation de la DRH', null, 'Number', 10 UNION
+    SELECT 'PLAFOND_DGS', 'Plafond nécessitant la validation de la DGS', null, 'Number', 20
+)
+SELECT cp.id, d.CODE, d.LIBELLE, d.DESCRIPTION, d.VALEURS_POSSIBLES, d.ORDRE
+FROM d
+         JOIN unicaen_parametre_categorie cp ON cp.CODE = 'DEMANDE_EXTERNE';
+
+-- INSERT INTO unicaen_parametre_parametre(CATEGORIE_ID, CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE)
+-- WITH d(CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE) AS (
+--     SELECT 'INSCRIPTION_PLAFOND_ANNUEL', 'Plafond en heures', null, 'Number', 110 UNION
+--     SELECT 'AUTO_RAPPEL', 'Delai pour rappel au agent (en jours)', null, 'Number', 415
+-- )
+-- SELECT cp.id, d.CODE, d.LIBELLE, d.DESCRIPTION, d.VALEURS_POSSIBLES, d.ORDRE
+-- FROM d
+--          JOIN unicaen_parametre_categorie cp ON cp.CODE = 'FORMATION';
+
 INSERT INTO unicaen_parametre_categorie (code, libelle, ordre)
 VALUES ('AUTRE', 'Autres paramètres', 10000);
 INSERT INTO unicaen_parametre_parametre(CATEGORIE_ID, CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE)
@@ -84,6 +105,17 @@ SELECT cp.id, d.CODE, d.LIBELLE, d.DESCRIPTION, d.VALEURS_POSSIBLES, d.ORDRE
 FROM d
 JOIN unicaen_parametre_categorie cp ON cp.CODE = 'AUTRE';
 
+INSERT INTO unicaen_parametre_categorie (code, libelle, ordre)
+VALUES ('PLAN_FORMATION', 'Gestion du plan de formation', 10000);
+INSERT INTO unicaen_parametre_parametre(CATEGORIE_ID, CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE)
+WITH d(CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE) AS (
+    SELECT 'NAVIGATION_ACTIVEE', 'Navigation rapide activée', null, 'Boolean', 10 UNION
+    SELECT 'AXE_AFFICHE', 'Utilisation des axes pour la navigation rapide', null , 'Boolean', 20
+)
+SELECT cp.id, d.CODE, d.LIBELLE, d.DESCRIPTION, d.VALEURS_POSSIBLES, d.ORDRE
+FROM d
+         JOIN unicaen_parametre_categorie cp ON cp.CODE = 'PLAN_FORMATION';
+
 update unicaen_parametre_parametre set valeur='/var/www/html' where code='INSTALL_PATH';
 update unicaen_parametre_parametre set valeur='false' where code='CHARTE_ACTIVE';
 update unicaen_parametre_parametre set valeur='8' where code='AUTO_CONVOCATION';
diff --git a/database/script/init_privilege_1.sql b/database/script/init_privilege_1.sql
index 88adbcf23fa907523783a82b7f3e1398566fea7f..22c82b18b7d1973f8939d6a104499444a081acc9 100644
--- a/database/script/init_privilege_1.sql
+++ b/database/script/init_privilege_1.sql
@@ -251,6 +251,7 @@ VALUES ('parametre', 'UnicaenParametre - Gestion des paramètres', 'UnicaenParam
 INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
 WITH d(code, lib, ordre) AS (
     SELECT 'parametre_afficher', 'Afficher un paramètre', 10 UNION
+    SELECT 'parametre_afficher_masquer', 'Afficher un paramètre masquer', 15 UNION
     SELECT 'parametre_ajouter', 'Ajouter un paramètre', 20 UNION
     SELECT 'parametre_modifier', 'Modifier un paramètre', 30 UNION
     SELECT 'parametre_supprimer', 'Supprimer un paramètre', 50 UNION
@@ -437,14 +438,17 @@ WITH d(code, lib, ordre) AS (
     SELECT 'demandeexterne_historiser', 'Historiser/restaurer une demande', 50 UNION
     SELECT 'demandeexterne_supprimer', 'Supprimer une demande ', 60 UNION
     SELECT 'demandeexterne_valider_agent', 'Valider une demande en tant qu''agent', 110 UNION
-    SELECT 'demandeexterne_valider_responsable', 'Valider une demande en tant que responsable', 120 UNION
-    SELECT 'demandeexterne_valider_gestionnaire', 'Valider une demande en tant que gestionnaire des formations', 125 UNION
+    SELECT 'demandeexterne_valider_valideur', 'Valider une demande en tant que valideur·euse', 115 UNION
+    SELECT 'demandeexterne_valider_gestionnaire', 'Valider une demande en tant que gestionnaire des formations', 120 UNION
+    SELECT 'demandeexterne_valider_responsable', 'Valider une demande en tant que responsable des formations', 125 UNION
     SELECT 'demandeexterne_valider_drh', 'Valider une demande en tant que direction des ressources humaines', 130 UNION
-    SELECT 'demandeexterne_gerer', 'Gérer la demande externe', 140
+    SELECT 'demandeexterne_valider_dgs', 'Valider une demande en tant que direction générale des services', 130 UNION
+    SELECT 'demandeexterne_gerer', 'Gérer la demande externe', 200 UNION
+    SELECT 'demandeexterne_parapheur', 'Accéder au parapheur', 250
 )
 SELECT cp.id, d.code, d.lib, d.ordre
 FROM d
-         JOIN unicaen_privilege_categorie cp ON cp.CODE = 'demandeexterne';
+JOIN unicaen_privilege_categorie cp ON cp.CODE = 'demandeexterne';
 
 INSERT INTO unicaen_privilege_categorie (code, libelle, namespace, ordre)
 VALUES ('formationabonnement', 'Gestion du abonnement aux formations', 'Formation\Provider\Privilege', 1100);
@@ -646,3 +650,15 @@ WITH d(code, lib, ordre) AS (
 SELECT cp.id, d.code, d.lib, d.ordre
 FROM d
 JOIN unicaen_privilege_categorie cp ON cp.CODE = 'configuration';
+
+
+
+INSERT INTO unicaen_privilege_categorie (code, libelle, namespace, ordre)
+VALUES ('export', '', 'Application\Provider\Privilege', 200);
+INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
+WITH d(code, lib, ordre) AS (
+    SELECT 'export_index', 'Afficher des exportation', 10
+)
+SELECT cp.id, d.code, d.lib, d.ordre
+FROM d
+JOIN unicaen_privilege_categorie cp ON cp.CODE = 'export';
\ No newline at end of file
diff --git a/database/script/init_privilege_2.sql b/database/script/init_privilege_2.sql
index c6a077c2d2b95480d8e4a6423b238b5c4ca3750a..06d053623054183ec24ba5138d2b35c684f8c7fd 100644
--- a/database/script/init_privilege_2.sql
+++ b/database/script/init_privilege_2.sql
@@ -12,7 +12,7 @@
 -- join unicaen_utilisateur_role uur on l.role_id = uur.id;
 
 -- ----------------------------- --
--- EXTRACTION DU 16 OCTOBRE 2024 --
+-- EXTRACTION DU 13 DECEMBRE 2024 --
 -- ----------------------------- --
 
 truncate unicaen_privilege_privilege_role_linker;
@@ -286,6 +286,9 @@ insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALU
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Agent'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationdomaine_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationdomaine')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Formateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationdomaine_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationdomaine')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationdomaine_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationdomaine')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationdomaine_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationdomaine')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationdomaine_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationdomaine')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationdomaine_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationdomaine')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationdomaine_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationdomaine')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationdomaine_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationdomaine')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationdomaine_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationdomaine')));
@@ -308,6 +311,9 @@ insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALU
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Formateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'axe_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='axe')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'axe_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='axe')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'axe_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='axe')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'axe_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='axe')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'axe_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='axe')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'axe_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='axe')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'axe_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='axe')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'axe_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='axe')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'axe_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='axe')));
@@ -398,7 +404,6 @@ insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALU
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_convocation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_emargement' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_attestation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'privilege_voir' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='privilege')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_absence' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_historique' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_emargement' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
@@ -418,9 +423,12 @@ insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALU
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Stagiaire externe'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_attestation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Stagiaire externe'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_absence' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Stagiaire externe'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_historique' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_convocation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_attestation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_absence' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_historique' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'formateur_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formateur')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'formateur_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formateur')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'privilege_affecter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='privilege')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'formateur_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formateur')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'formateur_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formateur')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'formateur_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formateur')));
@@ -440,7 +448,7 @@ insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALU
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formateur_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formateur')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formateur_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formateur')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formateur_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formateur')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formateur_mes_sessions' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formateur')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_valideur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formateur_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formateur')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de structure'),(select id from unicaen_privilege_privilege upp where upp.code = 'formateur_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formateur')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Stagiaire externe'),(select id from unicaen_privilege_privilege upp where upp.code = 'formateur_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formateur')));
@@ -572,12 +580,10 @@ insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALU
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'groupe_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='egroupe')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'groupe_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='egroupe')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'groupe_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='egroupe')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'configuration_notification' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='configuration')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'groupe_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='egroupe')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'groupe_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='egroupe')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'groupe_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='egroupe')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'groupe_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='egroupe')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice technique'),(select id from unicaen_privilege_privilege upp where upp.code = 'configuration_notification' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='configuration')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'groupe_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='egroupe')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'groupe_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='egroupe')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de structure'),(select id from unicaen_privilege_privilege upp where upp.code = 'groupe_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='egroupe')));
@@ -589,7 +595,6 @@ insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALU
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'question_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='question')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'question_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='question')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'question_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='question')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'configuration_notification' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='configuration')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Agent'),(select id from unicaen_privilege_privilege upp where upp.code = 'question_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='question')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Formateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'question_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='question')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'question_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='question')));
@@ -604,7 +609,6 @@ insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALU
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'question_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='question')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'question_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='question')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'question_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='question')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'configuration_notification' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='configuration')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'question_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='question')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de structure'),(select id from unicaen_privilege_privilege upp where upp.code = 'question_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='question')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Stagiaire externe'),(select id from unicaen_privilege_privilege upp where upp.code = 'question_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='question')));
@@ -652,34 +656,168 @@ insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALU
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'mail_test' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='mail')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de structure'),(select id from unicaen_privilege_privilege upp where upp.code = 'mail_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='mail')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'mail_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='mail')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formation_acces' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formation')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formation_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formation')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formation_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formation')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formation_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formation')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'formation_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formation')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'indicateur_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='indicateur')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'afficher_indicateur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='indicateur')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'privilege_voir' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='privilege')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'privilege_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='privilege')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'privilege_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='privilege')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'privilege_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='privilege')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'privilege_affecter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='privilege')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'privilege_voir' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='privilege')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'privilege_voir' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='privilege')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'privilege_voir' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='privilege')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'privilege_affecter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='privilege')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentmacro_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentmacro')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentmacro_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentmacro')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentmacro_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentmacro')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentmacro_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentmacro')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentmacro_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentmacro')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentmacro_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentmacro')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentmacro_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentmacro')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentmacro_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentmacro')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentmacro_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentmacro')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentmacro_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentmacro')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentmacro_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentmacro')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Agent'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Formateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de structure'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Stagiaire externe'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametre_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametre')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametre_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametre')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametre_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametre')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametre_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametre')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametre_valeur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametre')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametre_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametre')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametre_valeur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametre')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametre_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametre')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametre_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametre')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametre_valeur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametre')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'type_consultation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'type_ajout' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'type_edition' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'type_suppression' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'instance_consultation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'instance_ajout' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'instance_edition' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'instance_suppression' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'instance_traitement' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'instance_consultation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'instance_consultation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'instance_consultation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'instance_traitement' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'instance_traitement' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_voir' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementetat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementetat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementetat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementetat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_voir' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementetat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_voir' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementetat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_voir' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementetat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='etat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='etat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='etat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_detruire' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='etat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='etat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='etat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='etat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='etat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='etat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='etat')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_detruire' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Agent'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Agent'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Agent'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationtype_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationtype_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationtype_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationtype_detruire' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationtype_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationtype_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationtype_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationtype_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationtype_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationtype_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Formateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Formateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Formateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de structure'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de structure'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de structure'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Stagiaire externe'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Stagiaire externe'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Stagiaire externe'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'type_consultation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'type_consultation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'type_consultation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementtype')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'editer_indicateur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='indicateur')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'afficher_indicateur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='indicateur')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'indicateur_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='indicateur')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Formateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'afficher_indicateur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='indicateur')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Formateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'detruire_indicateur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='indicateur')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'indicateur_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='indicateur')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'afficher_indicateur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='indicateur')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'detruire_indicateur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='indicateur')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'agent_mesagents' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='agent')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de structure'),(select id from unicaen_privilege_privilege upp where upp.code = 'structure_messtructures' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='structure')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationdomaine_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationdomaine')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationdomaine_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationdomaine')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationdomaine_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationdomaine')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationdomaine_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationdomaine')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_convocation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_attestation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_absence' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_historique' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de structure'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancedocument_convocation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancedocument')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'indicateur_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='indicateur')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'afficher_indicateur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='indicateur')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'indicateur_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='indicateur')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'afficher_indicateur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='indicateur')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_courant' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Agent'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_courant' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Agent'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Formateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Formateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_courant' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_courant' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
@@ -689,7 +827,6 @@ insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALU
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_courant' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Agent'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_courant' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
@@ -703,89 +840,115 @@ insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALU
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Stagiaire externe'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_courant' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_agent' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_responsable' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_gestionnaire' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_drh' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_gerer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_agent' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Agent'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Agent'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Agent'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Agent'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Agent'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_agent' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Formateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_gestionnaire' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_gerer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_gerer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_agent' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_responsable' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_gestionnaire' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_drh' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_gerer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de structure'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Stagiaire externe'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
 insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_responsable' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentmacro_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentmacro')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentmacro_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentmacro')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentmacro_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentmacro')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentmacro_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentmacro')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'documenttemplate_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documenttemplate')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'documentcontenu_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='documentcontenu')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametre_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametre')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametre_valeur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametre')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametre_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametre')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametre_valeur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametre')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'instance_consultation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementinstance')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametre_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametre')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'type_consultation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementtype')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'type_consultation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementtype')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'instance_consultation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementinstance')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'type_consultation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementtype')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'instance_consultation' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementinstance')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_voir' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementetat')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_voir' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementetat')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_voir' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='evenementetat')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='etat')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='etat')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'etat_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='etat')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationinstance_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationinstance')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationtype_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationtype')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'parametrecategorie_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='parametrecategorie')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationtype_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationtype')));
-insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'validationtype_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='validationtype')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de structure'),(select id from unicaen_privilege_privilege upp where upp.code = 'structure_messtructures' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='structure')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Agent'),(select id from unicaen_privilege_privilege upp where upp.code = 'utilisateur_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='utilisateur')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'configuration_notification' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='configuration')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice technique'),(select id from unicaen_privilege_privilege upp where upp.code = 'configuration_notification' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='configuration')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'configuration_notification' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='configuration')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'configuration_notification' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='configuration')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'inscription_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstanceinscrit')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice technique'),(select id from unicaen_privilege_privilege upp where upp.code = 'inscription_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstanceinscrit')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'inscription_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstanceinscrit')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice technique'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice technique'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice technique'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice technique'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_valideur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice technique'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice technique'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_mes_sessions' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice technique'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_ajouter' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_modifier' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_historiser' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'referent_supprimer' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='referent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'agent_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='agent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'stagiaireexterne_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='stagiaireexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'structure_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='structure')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'formation_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formation')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationdomaine_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationdomaine')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'axe_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='axe')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstance_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstance_afficher_inscription' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstance')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationinstancepresence_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationinstancepresence')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'formateur_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formateur')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'formationlieu_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='formationlieu')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'inscription_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='inscription')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'afficher_indicateur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='indicateur')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Validateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_valideur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_courant' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Référent·e'),(select id from unicaen_privilege_privilege upp where upp.code = 'planformation_afficher' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='planformation')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'agent_gerer_valideur_importe' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='agent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'agent_gerer_valideur_saisi' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='agent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_responsable' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_parapheur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'agent_gerer_valideur_importe' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='agent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'agent_gerer_valideur_saisi' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='agent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice technique'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_parapheur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice technique'),(select id from unicaen_privilege_privilege upp where upp.code = 'agent_gerer_valideur_saisi' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='agent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice technique'),(select id from unicaen_privilege_privilege upp where upp.code = 'agent_gerer_valideur_importe' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='agent')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Direction Générale des Services'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_parapheur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Direction des Ressources Humaines'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_parapheur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Gestionnaire de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_parapheur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_parapheur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_parapheur' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Direction des Ressources Humaines'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_drh' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Direction Générale des Services'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_dgs' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice technique'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_dgs' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'demandeexterne_valider_dgs' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='demandeexterne')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice fonctionnel·le'),(select id from unicaen_privilege_privilege upp where upp.code = 'export_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='export')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Administrateur·trice technique'),(select id from unicaen_privilege_privilege upp where upp.code = 'export_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='export')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Direction des Ressources Humaines'),(select id from unicaen_privilege_privilege upp where upp.code = 'export_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='export')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Direction Générale des Services'),(select id from unicaen_privilege_privilege upp where upp.code = 'export_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='export')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Responsable de formation'),(select id from unicaen_privilege_privilege upp where upp.code = 'export_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='export')));
+insert into unicaen_privilege_privilege_role_linker (role_id, privilege_id) VALUES ((select id from unicaen_utilisateur_role urr where urr.role_id = 'Observateur·trice'),(select id from unicaen_privilege_privilege upp where upp.code = 'export_index' and upp.categorie_id = (select id from unicaen_privilege_categorie where code ='export')));
diff --git a/database/script/init_template.sql b/database/script/init_template.sql
index 8f007031979af8886c74d9c8d0ffe7ba631c40d6..bff4fa7a0881067f22f28405de7845906c89a142 100644
--- a/database/script/init_template.sql
+++ b/database/script/init_template.sql
@@ -1,128 +1,124 @@
-INSERT INTO unicaen_renderer_macro (code, description, variable_name, methode_name) VALUES
-    ('AGENT#AffectationsActives', '<p>Affiche sous la forme d''une liste à puces les affectations actives d''un agent</p>', 'agent', 'toStringAffectationsActives'),
-    ('AGENT#DateNaissance', null, 'agent', 'toStringDateNaissance'),
-    ('AGENT#Denomination', '<p>Retourne la d&eacute;nomination de l''agent (Pr&eacute;nom1 NomUsuel)</p>', 'agent', 'getDenomination'),
-    ('AGENT#GradesActifs', '<p>Affiche les grades actifs d''un agent sous la forme d''une liste &agrave; puce</p>', 'agent', 'toStringGradesActifs'),
-    ('AGENT#NomFamille', null, 'agent', 'toStringNomFamille'),
-    ('AGENT#NomUsage', null, 'agent', 'toStringNomUsage'),
-    ('AGENT#Prenom', null, 'agent', 'toStringPrenom'),
-    ('AGENT#StatutsActifs', '<p>Affiche la liste des statuts actifs d''un agent sous la forme d''une liste &agrave; puce</p>', 'agent', 'toStringStatutsActifs'),
-    ('DEMANDE#debut', '', 'demande', 'getDebutAsString'),
-    ('DEMANDE#fin', '', 'demande', 'getFinAsString'),
-    ('DEMANDE#libelle', '<p>Retourne le libellé de la formation associé à la demande externe</p>', 'demande', 'getLibelle'),
-    ('DEMANDE#lieu', '', 'demande', 'getLieu'),
-    ('DEMANDE#motivation', '', 'demande', 'getJustificationAgent'),
-    ('DEMANDE#organisme', '<p>Retourne l''organisme de la formation associée à la demande externe</p>', 'demande', 'getOrganisme'),
-    ('DEMANDE#refus', '<p>Retourne le motif de refus</p>', 'demande', 'getJustificationRefus'),
-    ('INSCRIPTION#duree', '<p>Affiche la durée de présence de l inscrit</p>', 'inscription', 'getDureePresence'),
-    ('INSCRIPTION#justificationAgent', '<p>Retourne la motivation de l agent</p>', 'inscription', 'getJustificationAgent'),
-    ('INSCRIPTION#justificationRefus', '<p>Retourne la motivation de la désinscription ou du refus</p>', 'inscription', 'getJustificationRefus'),
-    ('INSCRIPTION#justificationResponsable', '<p>Retourne la motivation du responsable</p>', 'inscription', 'getJustificationResponsable'),
-    ('Macro#AppName', '<p>Affiche le nom de l''application (attention c''est "hard codé")</p>', 'MacroService', 'getAppName'),
-    ('Macro#Date', '<p>Affiche la date courante (au format jj/mm/aaaa)</p>', 'MacroService', 'getDate'),
-    ('Macro#DateTime', '<p>Affiche la date courante (au format jj/mm/aaaa à HH:mm)</p>', 'MacroService', 'getDateTime'),
-    ('MesFormations#AppLink', '<p>Affiche le nom de l''application de formation et fourni un lien vers celle-ci</p>', 'UrlService', 'getMesFormationsUrl'),
-    ('SESSION#duree', 'retourne la durée en heure de la session', 'session', 'getDuree'),
-    ('SESSION#formateurs', 'retourne la liste des formateurs sous la forme d un tableau', 'session', 'getListeFormateurs'),
-    ('SESSION#id', '<p>Retroune l''id numérique de la session</p>', 'session', 'getId'),
-    ('SESSION#identification', 'retourne l identifiant unique de la session sous la forme <em>ACTION/SESSION</em>', 'session', 'getInstanceCode'),
-    ('SESSION#libelle', 'retourne le libellé de la session', 'session', 'getInstanceLibelle'),
-    ('SESSION#lieu', '', 'session', 'getLieuString'),
-    ('SESSION#periode', 'retourne la période sous la forme <em>DEBUT au FIN</em>', 'session', 'getPeriode'),
-    ('SESSION#seances', '', 'session', 'getListeJournees'),
-    ('STRUCTURE#libelle', '<p>Retourne le libellé de la structure</p>', 'structure', 'toStringLibelle'),
-    ('STRUCTURE#libelle_long', '<p>Retourne le libellé de la structure + le libell&amp;eacute de la structure de niveau 2</p>', 'structure', 'toStringLibelleLong'),
-    ('STRUCTURE#responsables', '<p>Affiches sous la forme d''un listing les Responsables d''une structure</p>', 'structure', 'toStringResponsables'),
-    ('URL#Absence', '<p>Retroune le lien vers le téléchargement du constat d''absence</p>', 'UrlService', 'getUrlAbsence'),
-    ('Url#AppLink', '<p>Retourne le lien vers l''application</p>', 'UrlService', 'getUrlApp'),
-    ('URL#Attestation', '<p>Retroune le lien vers le téléchargement de l''inscription</p>', 'UrlService', 'getUrlAttestation'),
-    ('Url#Convocation', '<p>Retroune le lien vers le téléchargement de la convocation</p>', 'UrlService', 'getUrlConvocation'),
-    ('URL#FormationInstanceAfficher', '<p>Retourne l''URL pour accéder à l''affichage d''une instance de formation</p>', 'UrlService', 'getUrlFormationInstanceAfficher'),
-    ('Url#GestionDemandesExternes', '<p>Retourne le lien vers la page de gestion des demandes externes</p>', 'UrlService', 'getUrlGestionDemandesExternes'),
-    ('Url#MesFormations', '<p>Retourne l''url de la page des formations réalisées d''un·e agent·e</p>', 'UrlService', 'getUrlMesFormations'),
-    ('Url#PlanDeFormation', '<p>Fourni un lieu vers la page des plans de formation courants</p>', 'UrlService', 'getUrlPlanDeFormation'),
-    ('Url#ValidateurDemandesExternes', '<p>Retourne l''url associé à la page mes agents avec l''onglet ''Demande à titre individuel'' sélectionné</p>', 'UrlService', 'getUrlValidateurDemandesExternes'),
-    ('SESSION#MotifAnnulation', '<p>Affiche le motif d''annulation</p>', 'session', 'getMotifAnnulation')
-;
+truncate unicaen_renderer_macro;
+truncate unicaen_renderer_template cascade;
 
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('ENQUETE_EXPLICATION', '<p>Texte précisant le caractère anonyme et <em>facultatif</em> de l''enquête</p>', 'texte', 'À propos des formulaires de retour d''expérience', e'<p>Ces formulaires sont anonymes et si vous ne souhaitez pas fournir de réponse à une des questions de l\'enquête vous pouvez sélectionner la réponse "<em>Sans avis</em>".</p>
-<p>Vous ne pourrez récupérer l\'attestation pour une formation qu\'une fois l\'enquête associée saisie et validée.</p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_ABONNEMENT_POST_CLOTURE', '<p>Courrier électronique envoyé aux inscrit·es de la liste complémentaire les prévenants qu''ils ou elles ont été abonné·es à la formation</p>', 'mail', 'Abonnement à la formation VAR[SESSION#libelle] suite à la clôture de la session dont vous étiez inscrit·e', e'<div class="card-body">
-<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
-<p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
-</div>
-<p>Bonjour,</p>
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (1, 'AGENT#AffectationsActives', '<p>Affiche sous la forme d''une liste à puces les affectations actives d''un agent</p>', 'agent', 'toStringAffectationsActives');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (2, 'AGENT#DateNaissance', null, 'agent', 'toStringDateNaissance');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (3, 'AGENT#Denomination', '<p>Retourne la d&eacute;nomination de l''agent (Pr&eacute;nom1 NomUsuel)</p>', 'agent', 'getDenomination');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (4, 'AGENT#GradesActifs', '<p>Affiche les grades actifs d''un agent sous la forme d''une liste &agrave; puce</p>', 'agent', 'toStringGradesActifs');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (5, 'AGENT#NomFamille', null, 'agent', 'toStringNomFamille');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (6, 'AGENT#NomUsage', null, 'agent', 'toStringNomUsage');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (7, 'AGENT#Prenom', null, 'agent', 'toStringPrenom');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (8, 'AGENT#StatutsActifs', '<p>Affiche la liste des statuts actifs d''un agent sous la forme d''une liste &agrave; puce</p>', 'agent', 'toStringStatutsActifs');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (9, 'DEMANDE#debut', '', 'demande', 'getDebutAsString');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (10, 'DEMANDE#fin', '', 'demande', 'getFinAsString');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (11, 'DEMANDE#libelle', '<p>Retourne le libellé de la formation associé à la demande externe</p>', 'demande', 'getLibelle');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (12, 'DEMANDE#lieu', '', 'demande', 'getLieu');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (13, 'DEMANDE#motivation', '', 'demande', 'getJustificationAgent');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (14, 'DEMANDE#organisme', '<p>Retourne l''organisme de la formation associée à la demande externe</p>', 'demande', 'getOrganisme');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (15, 'DEMANDE#refus', '<p>Retourne le motif de refus</p>', 'demande', 'getJustificationRefus');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (16, 'INSCRIPTION#duree', '<p>Affiche la durée de présence de l inscrit</p>', 'inscription', 'getDureePresence');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (17, 'INSCRIPTION#justificationAgent', '<p>Retourne la motivation de l agent</p>', 'inscription', 'getJustificationAgent');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (18, 'INSCRIPTION#justificationRefus', '<p>Retourne la motivation de la désinscription ou du refus</p>', 'inscription', 'getJustificationRefus');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (19, 'INSCRIPTION#justificationResponsable', '<p>Retourne la motivation du responsable</p>', 'inscription', 'getJustificationResponsable');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (20, 'Macro#AppName', '<p>Affiche le nom de l''application (attention c''est "hard codé")</p>', 'MacroService', 'getAppName');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (21, 'Macro#Date', '<p>Affiche la date courante (au format jj/mm/aaaa)</p>', 'MacroService', 'getDate');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (22, 'Macro#DateTime', '<p>Affiche la date courante (au format jj/mm/aaaa à HH:mm)</p>', 'MacroService', 'getDateTime');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (23, 'MesFormations#AppLink', '<p>Affiche le nom de l''application de formation et fourni un lien vers celle-ci</p>', 'UrlService', 'getMesFormationsUrl');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (24, 'SESSION#duree', 'retourne la durée en heure de la session', 'session', 'getDuree');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (25, 'SESSION#formateurs', 'retourne la liste des formateurs sous la forme d un tableau', 'session', 'getListeFormateurs');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (26, 'SESSION#id', '<p>Retroune l''id numérique de la session</p>', 'session', 'getId');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (27, 'SESSION#identification', 'retourne l identifiant unique de la session sous la forme <em>ACTION/SESSION</em>', 'session', 'getInstanceCode');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (28, 'SESSION#libelle', 'retourne le libellé de la session', 'session', 'getInstanceLibelle');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (29, 'SESSION#lieu', '', 'session', 'getLieuString');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (30, 'SESSION#periode', 'retourne la période sous la forme <em>DEBUT au FIN</em>', 'session', 'getPeriode');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (31, 'SESSION#seances', '', 'session', 'getListeJournees');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (32, 'STRUCTURE#libelle', '<p>Retourne le libellé de la structure</p>', 'structure', 'toStringLibelle');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (33, 'STRUCTURE#libelle_long', '<p>Retourne le libellé de la structure + le libell&amp;eacute de la structure de niveau 2</p>', 'structure', 'toStringLibelleLong');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (34, 'STRUCTURE#responsables', '<p>Affiches sous la forme d''un listing les Responsables d''une structure</p>', 'structure', 'toStringResponsables');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (35, 'URL#Absence', '<p>Retroune le lien vers le téléchargement du constat d''absence</p>', 'UrlService', 'getUrlAbsence');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (36, 'Url#AppLink', '<p>Retourne le lien vers l''application</p>', 'UrlService', 'getUrlApp');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (37, 'URL#Attestation', '<p>Retroune le lien vers le téléchargement de l''inscription</p>', 'UrlService', 'getUrlAttestation');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (38, 'Url#Convocation', '<p>Retroune le lien vers le téléchargement de la convocation</p>', 'UrlService', 'getUrlConvocation');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (40, 'Url#GestionDemandesExternes', '<p>Retourne le lien vers la page de gestion des demandes externes</p>', 'UrlService', 'getUrlGestionDemandesExternes');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (41, 'Url#MesFormations', '<p>Retourne l''url de la page des formations réalisées d''un·e agent·e</p>', 'UrlService', 'getUrlMesFormations');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (42, 'Url#PlanDeFormation', '<p>Fourni un lieu vers la page des plans de formation courants</p>', 'UrlService', 'getUrlPlanDeFormation');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (43, 'Url#ValidateurDemandesExternes', '<p>Retourne l''url associé à la page mes agents avec l''onglet ''Demande à titre individuel'' sélectionné</p>', 'UrlService', 'getUrlValidateurDemandesExternes');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (39, 'URL#SessionAfficher', '<p>Retourne l''URL pour accéder à l''affichage d''une session de formation</p>', 'UrlService', 'getUrlSessionAfficher');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (44, 'Macro#Parametre', '<p>Retourne la valeur d''un paramètre, attention le code de la catégorie et du paramètre doivent être founies.<br>Exemple: VAR[Macro#Parametre|GLOBAL;INSTALL_PATH]</p>', 'MacroService', 'getValeurParametre');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (45, 'SESSION#MotifAnnulation', '<p>Affiche le motif d''annulation</p>', 'session', 'getMotifAnnulation');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (46, 'SEANCE#lieu', '<p>Retourne le lieu de la séance "Batiment Salle - Campus Ville"</p>', 'seance', 'toStringLieu');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (47, 'SEANCE#periode', '<p>Retourne la période au format DD/MM/YYYY H:m au DD/MM/YYYY H:m</p>', 'seance', 'getPeriode');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (48, 'SESSION#FormateursAvecSignature', '<p>Fournit un tableau listant les formateurs avec un case pour la signature</p>', 'session', 'getArrayFormateurs');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (49, 'SESSION#InscritsAvecSignature', '<p>Retourne un tableau des inscrits de la liste principale avec une case pour leur signature</p>', 'session', 'getArrayListePrincipales');
+INSERT INTO unicaen_renderer_macro (id, code, description, variable_name, methode_name) VALUES (50, 'URL#Parapheur', '<p>Retourne un lien vers le parapheur des demandes hors plan de formations</p>', 'UrlService', 'getParapheurUrl');
+
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (2, 'FORMATION_ABONNEMENT_POST_CLOTURE', '<p>Courrier électronique envoyé aux inscrit·es de la liste complémentaire les prévenants qu''ils ou elles ont été abonné·es à la formation</p>', 'mail', 'Abonnement à la formation VAR[SESSION#libelle] suite à la clôture de la session dont vous étiez inscrit·e', e'<p>Bonjour,</p>
 <p>Vous étiez sur la liste complémentaire de la session de formation VAR[SESSION#libelle] se déroulant sur la période du VAR[SESSION#periode]).<br>Malheureusement aucune place n\'a pu se libéré et vous n\'avez pu participer à cette session de formation.</p>
 <p>Afin de vous permettre de participer à la prochaine session de formation VAR[SESSION#libelle], vous avez été automatiquement abonné·e aux notifications associées à cette formation.<br>Vous serez ainsi prévenu des prochaines ouvertures de session de formation.</p>
-<p>Vous pouvez vous désinscrire de ces notifications en allant sur l\'application VAR[Macro#AppName] (VAR[Url#AppLink]) et en consultant la page "Plan de formation" accessible en suivant le lien VAR[Url#PlanDeFormation].</p>
-<p>En vous souhaitant une bonne journée,<br>VAR[Url#AppLink]</p>
+<p>Vous pouvez vous désinscrire de ces notifications en allant sur l\'application VAR[MesFormations#AppLink] et en consultant la page "Plan de formation" accessible en suivant le lien VAR[Url#PlanDeFormation].</p>
+<p>En vous souhaitant une bonne journée,<br>VAR[MesFormations#AppLink]</p>
 <p> </p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_ABSENCE', '<p>Document émis pour les inscrit·es qui ont été absent·es à une formation</p>', 'pdf', 'constat_absence_session_VAR[SESSION#id]', e'<p><strong>Université de démonstration</strong><br>DRH - Bureau des formations</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (4, 'FORMATION_ATTESTATION', null, 'pdf', 'Attestation de formation de VAR[AGENT#Denomination] à la formation VAR[SESSION#libelle]', e'<p> </p>
+<p> </p>
+<p> </p>
+<p> </p>
+<p><strong>Université de Caen Normandie</strong><br>Direction des Ressources Humaines<br>Esplanade de la Paix<br>14032 CAEN CEDEX 5</p>
+<p> </p>
+<p style="text-align: right;">À Caen le  VAR[Macro#Date]</p>
+<p> </p>
+<h1 style="text-align: center;">Attestation de formation professionnelle</h1>
+<p> </p>
+<p>La direction des ressources humaines certifie que le stagiaire :</p>
+<p>VAR[AGENT#Denomination] a suivi la formation : <strong>VAR[SESSION#libelle] </strong>qui s\'est déroulée du VAR[SESSION#periode] (Durée : VAR[SESSION#duree])VAR[SESSION#lieu].</p>
+<p> </p>
+<p>L\'agent a suivi VAR[INSCRIPTION#duree] de formation.</p>
+<p> </p>
+<p> </p>
+<p style="text-align: left;">La Direction des Ressources Humaines</p>
+<p><span dir="ltr" style="left: 70.8661px; top: 794.321px; font-size: 16.6667px; font-family: sans-serif; transform: scaleX(1);" role="presentation"> </span></p>', null, 'Formation\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (3, 'FORMATION_ABSENCE', '<p>Document émis pour les inscrit·es qui ont été absent·es à une formation</p>', 'pdf', 'constat_absence_session_VAR[SESSION#id]', e'<p><strong>Université de démonstration</strong><br>DRH - Bureau des formations</p>
 <h1 style="text-align: center;">Constat d\'absence à un stage</h1>
 <p><br>le VAR[Macro#Date]</p>
-<p><br>Je soussigné, Prenom NOM, Président de l’Université de démonstration, certifie que VAR[AGENT#Denomination] n\'a pas participé au stage de formation suivant :  VAR[SESSION#libelle] qui s\'est déroulé du VAR[SESSION#periode] ayant une durée de VAR[SESSION#duree].</p>
+<p><br>Je soussigné, Prenom NOM, Président de l’Université de démonstration, certifie que VAR[AGENT#Denomination] n\'a pas participé au stage de formation suivant : </p>
+<p>VAR[SESSION#libelle]</p>
+<p>qui s\'est déroulé du VAR[SESSION#periode] ayant une durée de VAR[SESSION#duree].</p>
+<p> </p>
 <p>VAR[AGENT#Denomination] a suivi une durée de VAR[INSCRIPTION#duree].</p>
+<p> </p>
 <p>Je vous prie de bien vouloir justifier votre absence auprès du bureau de la formation.</p>
-<p>Le bureau de formation<br>drh.formation@univ-demo.fr<br><br><br><br></p>
+<p> </p>
+<p><br>Le bureau de formation<br>drh.formation@univ-demo.fr<br><br><br><br></p>
 <p> </p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_ATTESTATION', null, 'pdf', 'Attestation de formation de VAR[AGENT#Denomination] à la formation VAR[SESSION#libelle]', e'<p style="text-align: left;">À l\'Université de démonstration le VAR[Macro#Date]</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (13, 'FORMATION_HISTORIQUE', null, 'pdf', 'Historique des formations de VAR[AGENT#Denomination]', e'<h1 style="text-align: center;"> Historique de formation</h1>
 <p> </p>
-<h1 style="text-align: center;">Attestation de stage</h1>
+<p>L\'agent <strong>VAR[AGENT#Denomination]</strong> a suivi les formations suivantes  : ###A REMPLACER###</p>
 <p> </p>
-<p>Le bureau conseil, carrière, compétences, certifie que le stagiaire :</p>
-<p>VAR[AGENT#Denomination] a suivi la formation : <strong>VAR[SESSION#libelle] </strong>qui s\'est déroulée du VAR[SESSION#periode] (Durée : VAR[SESSION#duree])VAR[SESSION#lieu].</p>
+<p style="text-align: right;">La responsable du bureau conseil, carrière, compétences.<br /><br /></p>', null, 'Agent\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (14, 'FORMATION_INSCRIPTION_1_AGENT', '<p>Demande d''inscription à une formation (Agent &gt; Responsable)</p>', 'mail', 'Demande d''inscription de VAR[AGENT#Denomination] à la formation VAR[SESSION#libelle] du VAR[SESSION#periode]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+<p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p>VAR[AGENT#Denomination] vient de procéder à une demande d\'inscription pour la formation VAR[SESSION#libelle] du VAR[SESSION#periode]. </p>
+<p>Merci de vous connecter à l\'application "Mes Formations" (VAR[Url#AppLink]) afin d\'accepter ou de refuser sa demande.<br>La liste des "demandes en attente" est accessible dans l\'onglet \'Demande de formation\' dans votre structure.</p>
+<p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', null, 'Formation\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (6, 'FORMATION_CONVOCATION', null, 'pdf', 'Convocation à la session de formation VAR[SESSION#libelle]', e'<p> </p>
 <p> </p>
-<p>L\'agent a suivi VAR[INSCRIPTION#duree] de formation.</p>
 <p> </p>
 <p> </p>
-<p style="text-align: left;">Le bureau conseil, carrière, compétences.</p>
-<p><span dir="ltr" style="left: 70.8661px; top: 794.321px; font-size: 16.6667px; font-family: sans-serif; transform: scaleX(1);" role="presentation"> </span></p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_CHARTE', null, 'text', 'Charte', 'Charte', null, null);
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_CONVOCATION', null, 'pdf', 'Convocation à la session de formation VAR[SESSION#libelle]', e'<h1 style="text-align: center;">Convocation à une action de formation</h1>
-<p style="text-align: left;"> À l\'Université de démonstration, le VAR[Macro#Date],</p>
-<p style="text-align: left;"> </p>
+<h1 style="text-align: center;">Convocation à une action de formation</h1>
+<p style="text-align: right;"> À Caen, le  VAR[Macro#Date]</p>
 <p>Bonjour <strong>VAR[AGENT#Denomination]</strong>,</p>
-<p>Le bureau conseil carrière compétences vous informe que vous êtes retenu-e à la formation :</p>
+<p> </p>
+<p>Le bureau en charge des recrutements, de la formation et des parcours professionnels vous informe que vous êtes retenu-e à la formation :</p>
 <p style="text-align: center;"><strong>VAR[SESSION#libelle]<br></strong></p>
 <p>à laquelle vous êtes inscrit-e et se déroulera selon le calendrier ci-dessous :</p>
 <p>VAR[SESSION#seances] </p>
-<p>En cas d\'impossibilité d\'assister à tout ou partie de ce stage, vous êtes invité-e à vous connecter dans la partie "Formation"/"S\'inscrire à une formation" de VAR[Macro#AppName], dans les meilleurs délais, afin de nous permettre de contacter une personne sur liste d\'attente.</p>
+<p>En cas d\'impossibilité d\'assister à tout ou partie de ce stage, vous êtes invité-e à vous connecter dans la partie "Formation"/"S\'inscrire à une formation" de VAR[MesFormations#AppLink], dans les meilleurs délais, afin de nous permettre de contacter une personne sur liste d\'attente.</p>
+<p style="text-align: justify;"> </p>
+<p style="text-align: justify;">Le bureau des recrutements, de la formation et des parcours professionnels vous souhaite un stage fructueux.</p>
 <p style="text-align: justify;"> </p>
-<p style="text-align: justify;">Le bureau conseil, carrière, compétences vous souhaite un stage fructueux.</p>
-<p style="text-align: justify;">L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>
+<p style="text-align: justify;">Bureau des recrutements, de la formation et des parcours professionnels.<br>drh.formation@unicaen.fr </p>
 <p style="text-align: left;"><em>P.S. : Cette convocation vaut ordre de mission</em></p>', 'table { border-collapse: collapse;} tr th {border-bottom:1px solid black;} td {text-align:center;}', 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_DEMANDE_EXTERNE_TOTALEMENT_VALIDEE', '<p>Mail envoyé vers le CCC lorsque d''une demande extérieur est totalement validée</p>', 'mail', 'La demande stage externe de VAR[AGENT#Denomination] est maintenant totalement validée', e'<p><strong>Université de démonstration</strong><br>Mes Formations</p>
-<p>À l\'Université de démonstration le</p>
-<p>VAR[Macro#Date]</p>
-<p>,</p>
-<p>Bonjour,</p>
-<p>La demande de stage externe suivante est maintenant totalement validée.</p>
-<table style="width: 450px; height: 116px;">
-<tbody>
-<tr>
-<td style="width: 197.717px;">Agent</td>
-<td style="width: 234.283px;">VAR[AGENT#Denomination]</td>
-</tr>
-<tr>
-<td style="width: 197.717px;">Libellé du stage</td>
-<td style="width: 234.283px;">VAR[DEMANDE#libelle]</td>
-</tr>
-<tr>
-<td style="width: 197.717px;">Organisme formateur</td>
-<td style="width: 234.283px;">VAR[DEMANDE#organisme]</td>
-</tr>
-<tr>
-<td style="width: 197.717px;">Date de début</td>
-<td style="width: 234.283px;">VAR[DEMANDE#debut]</td>
-</tr>
-<tr>
-<td style="width: 197.717px;">Date de fin</td>
-<td style="width: 234.283px;">VAR[DEMANDE#fin]</td>
-</tr>
-</tbody>
-</table>
-<p>L\'application VAR[Macro#AppName]<br>VAR[Url#AppLink]</p>', null, 'DemandeExterne\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_DEMANDE_EXTERNE_VALIDATION_AGENT', '<p>Courrier envoyé vers le responsable de l''agent lorsque celui-ci valide un demande de formation externe.</p>', 'mail', 'Demande de validation d''une demande de formation externe de VAR[AGENT#Denomination]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (8, 'DEMANDE_EXTERNE_VALIDATION_AGENT', '<p>Courrier envoyé vers le responsable de l''agent lorsque celui-ci valide un demande de formation externe.</p>', 'mail', 'Demande de validation d''une demande de formation externe de VAR[AGENT#Denomination]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
 <p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
 <p>Bonjour,</p>
 <p> </p>
@@ -160,73 +156,73 @@ INSERT INTO unicaen_renderer_template (code, description, document_type, documen
 <p> </p>
 <p>Vous pouvez valider (ou refuser) celle-ci en vous connectant à VAR[Macro#AppName] et en suivant le lien : VAR[Url#ValidateurDemandesExternes]</p>
 <p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', null, 'DemandeExterne\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_DEMANDE_EXTERNE_VALIDATION_DRH', '<p>Courrier envoyé lors de la validation par la drh d''une demande externe (Agent et Responsable)</p>', 'mail', 'Validation de la demande de formation externe de VAR[AGENT#Denomination] par le bureau gérant les formations', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (10, 'DEMANDE_EXTERNE_VALIDATION_REFUS', '<p>Mail envoyé lors du refus par le responsable ou la DRH</p>', 'mail', 'Refus de la demande de formation externe de VAR[AGENT#Denomination]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
 <p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
 <p>Bonjour,</p>
-<p> </p>
-<p>Le demande suivante de formation externe (hors plan de formation) pour VAR[AGENT#Denomination] est <strong>validée</strong>.</p>
+<p>Le demande suivante de formation externe (hors plan de formation) pour VAR[AGENT#Denomination] vient d\'être refusée.</p>
 <table style="width: 572px; height: 89px;">
 <tbody>
 <tr>
-<td style="width: 211.483px;"><strong>Intitulé de la formation :</strong></td>
-<td style="width: 331.917px;"> VAR[DEMANDE#libelle]</td>
-</tr>
-<tr>
-<td style="width: 211.483px;"><strong>Organisme formateur :</strong></td>
-<td style="width: 331.917px;"> VAR[DEMANDE#organisme]</td>
+<td style="width: 254.9px;"><strong>Intitulé de la formation :</strong></td>
+<td style="width: 288.5px;"> VAR[DEMANDE#libelle]</td>
 </tr>
 <tr>
-<td style="width: 211.483px;"><strong>Lieu :</strong></td>
-<td style="width: 331.917px;"> VAR[DEMANDE#lieu]</td>
+<td style="width: 254.9px;"><strong>Organisme formateur :</strong></td>
+<td style="width: 288.5px;"> VAR[DEMANDE#libelle]</td>
 </tr>
 <tr>
-<td style="width: 211.483px;"><strong>Début :</strong></td>
-<td style="width: 331.917px;"> VAR[DEMANDE#debut]</td>
+<td style="width: 254.9px;"><strong>Lieu :</strong></td>
+<td style="width: 288.5px;"> VAR[DEMANDE#lieu]</td>
 </tr>
 <tr>
-<td style="width: 211.483px;"><strong>Fin :</strong></td>
-<td style="width: 331.917px;"> VAR[DEMANDE#fin]</td>
+<td style="width: 254.9px;"><strong>Début :</strong></td>
+<td style="width: 288.5px;"> VAR[DEMANDE#debut]</td>
 </tr>
 <tr>
-<td style="width: 211.483px;"><strong>Motivation :</strong></td>
-<td style="width: 331.917px;"> VAR[DEMANDE#motivation]</td>
+<td style="width: 254.9px;"><strong>Fin :</strong></td>
+<td style="width: 288.5px;"> VAR[DEMANDE#fin]</td>
 </tr>
 </tbody>
 </table>
-<p>VAR[AGENT#Denomination] est invité-e à procéder à son inscription auprès de l\'organisme sollicité.</p>
-<p>Le bureau conseil carrière compétences est à votre disposition et se charge des démarches administratives.</p>
+<p>Voici le motif du refus : <br>VAR[DEMANDE#refus]</p>
 <p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', null, 'DemandeExterne\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_DEMANDE_EXTERNE_VALIDATION_REFUS', '<p>Mail envoyé lors du refus par le responsable ou la DRH</p>', 'mail', 'Refus de la demande de formation externe de VAR[AGENT#Denomination]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
-<p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (12, 'DEMANDE_EXTERNE_VALIDEE_VALIDEUR_DRH', '<p>Courrier envoyé vers la DRH lorsque celui-ci valide une demande de formation externe validée par un responsable.</p>', 'mail', 'Validation d''une demande de formation externe de VAR[AGENT#Denomination]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+<p>À l\'Université de démonstration le VAR[Macro#Date],</p>
 <p>Bonjour,</p>
-<p>Le demande suivante de formation externe (hors plan de formation) pour VAR[AGENT#Denomination] vient d\'être refusée.</p>
+<p>Le responsable de l\'agent VAR[AGENT#Denomination] vient de valider une demande de formation externe (hors plan de formation).<br>La responsable du bureau conseil carrière compétences est chargée de procéder à la validation définitive de cette demande.</p>
+<p>Informations à propos de la demande :</p>
 <table style="width: 572px; height: 89px;">
 <tbody>
 <tr>
-<td style="width: 254.9px;"><strong>Intitulé de la formation :</strong></td>
-<td style="width: 288.5px;"> VAR[DEMANDE#libelle]</td>
+<td style="width: 184.217px;"><strong>Intitulé de la formation :</strong></td>
+<td style="width: 368.783px;"> VAR[DEMANDE#libelle]</td>
 </tr>
 <tr>
-<td style="width: 254.9px;"><strong>Organisme formateur :</strong></td>
-<td style="width: 288.5px;"> VAR[DEMANDE#libelle]</td>
+<td style="width: 184.217px;"><strong>Organisme formateur :</strong></td>
+<td style="width: 368.783px;"> VAR[DEMANDE#organisme]</td>
 </tr>
 <tr>
-<td style="width: 254.9px;"><strong>Lieu :</strong></td>
-<td style="width: 288.5px;"> VAR[DEMANDE#lieu]</td>
+<td style="width: 184.217px;"><strong>Lieu :</strong></td>
+<td style="width: 368.783px;"> VAR[DEMANDE#lieu]</td>
 </tr>
 <tr>
-<td style="width: 254.9px;"><strong>Début :</strong></td>
-<td style="width: 288.5px;"> VAR[DEMANDE#debut]</td>
+<td style="width: 184.217px;"><strong>Début :</strong></td>
+<td style="width: 368.783px;"> VAR[DEMANDE#debut]</td>
 </tr>
 <tr>
-<td style="width: 254.9px;"><strong>Fin :</strong></td>
-<td style="width: 288.5px;"> VAR[DEMANDE#fin]</td>
+<td style="width: 184.217px;"><strong>Fin :</strong></td>
+<td style="width: 368.783px;"> VAR[DEMANDE#fin]</td>
+</tr>
+<tr>
+<td style="width: 184.217px;"><strong>Motivation :</strong></td>
+<td style="width: 368.783px;"> VAR[DEMANDE#motivation]</td>
 </tr>
 </tbody>
 </table>
-<p>Voici le motif du refus : <br>VAR[DEMANDE#refus]</p>
-<p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', null, 'DemandeExterne\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_DEMANDE_EXTERNE_VALIDATION_RESP_AGENT', '<p>Courrier envoyé vers la DRH lorsque celui-ci valide une demande de formation externe est validé par un responsable.</p>', 'mail', 'Validation de votre demande de formation externe de votre responsable', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+<p> Vous pouvez valider celle-ci en vous connectant à l\'application VAR[Macro#AppName] et en utilisant le lien suivant : VAR[Url#GestionDemandesExternes]</p>
+<p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>
+<p> </p>', null, 'DemandeExterne\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (11, 'DEMANDE_EXTERNE_VALIDEE_VALIDEUR_AGENT', '<p>Courrier envoyé vers la DRH lorsque celui-ci valide une demande de formation externe est validé par un responsable.</p>', 'mail', 'Validation de votre demande de formation externe de votre responsable', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
 <p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
 <p>Bonjour,</p>
 <p> </p>
@@ -264,66 +260,13 @@ INSERT INTO unicaen_renderer_template (code, description, document_type, documen
 <p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>
 <p> </p>
 <p> </p>', null, 'DemandeExterne\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_DEMANDE_EXTERNE_VALIDATION_RESP_DRH', '<p>Courrier envoyé vers la DRH lorsque celui-ci valide une demande de formation externe validée par un responsable.</p>', 'mail', 'Validation d''une demande de formation externe de VAR[AGENT#Denomination]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
-<p>À l\'Université de démonstration le VAR[Macro#Date],</p>
-<p>Bonjour,</p>
-<p>Le responsable de l\'agent VAR[AGENT#Denomination] vient de valider une demande de formation externe (hors plan de formation).<br>La responsable du bureau conseil carrière compétences est chargée de procéder à la validation définitive de cette demande.</p>
-<p>Informations à propos de la demande :</p>
-<table style="width: 572px; height: 89px;">
-<tbody>
-<tr>
-<td style="width: 184.217px;"><strong>Intitulé de la formation :</strong></td>
-<td style="width: 368.783px;"> VAR[DEMANDE#libelle]</td>
-</tr>
-<tr>
-<td style="width: 184.217px;"><strong>Organisme formateur :</strong></td>
-<td style="width: 368.783px;"> VAR[DEMANDE#organisme]</td>
-</tr>
-<tr>
-<td style="width: 184.217px;"><strong>Lieu :</strong></td>
-<td style="width: 368.783px;"> VAR[DEMANDE#lieu]</td>
-</tr>
-<tr>
-<td style="width: 184.217px;"><strong>Début :</strong></td>
-<td style="width: 368.783px;"> VAR[DEMANDE#debut]</td>
-</tr>
-<tr>
-<td style="width: 184.217px;"><strong>Fin :</strong></td>
-<td style="width: 368.783px;"> VAR[DEMANDE#fin]</td>
-</tr>
-<tr>
-<td style="width: 184.217px;"><strong>Motivation :</strong></td>
-<td style="width: 368.783px;"> VAR[DEMANDE#motivation]</td>
-</tr>
-</tbody>
-</table>
-<p> Vous pouvez valider celle-ci en vous connectant à l\'application VAR[Macro#AppName] et en utilisant le lien suivant : VAR[Url#GestionDemandesExternes]</p>
-<p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>
-<p> </p>', null, 'DemandeExterne\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_HISTORIQUE', null, 'pdf', 'Historique des formations de VAR[AGENT#Denomination]', e'<h1 style="text-align: center;"> Historique de formation</h1>
-<p> </p>
-<p>L\'agent <strong>VAR[AGENT#Denomination]</strong> a suivi les formations suivantes  : ###A REMPLACER###</p>
-<p> </p>
-<p style="text-align: right;">La responsable du bureau conseil, carrière, compétences.<br /><br /></p>', null, 'Agent\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_INSCRIPTION_1_AGENT', '<p>Demande d''inscription à une formation (Agent &gt; Responsable)</p>', 'mail', 'Demande d''inscription de VAR[AGENT#Denomination] à la formation VAR[SESSION#libelle] du VAR[SESSION#periode]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
-<p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
-<p>Bonjour,</p>
-<p>VAR[AGENT#Denomination] vient de procéder à une demande d\'inscription pour la formation VAR[SESSION#libelle] du VAR[SESSION#periode]. </p>
-<p>Merci de vous connecter à l\'application "Mes Formations" (VAR[Url#AppLink]) afin d\'accepter ou de refuser sa demande.<br>La liste des "demandes en attente" est accessible dans l\'onglet \'Demande de formation\' dans votre structure.</p>
-<p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_INSCRIPTION_2_RESPONSABLE_REFUS', '<p>Refus de la demande d''inscription par le responsable (Responsable &gt; Agent)</p>', 'mail', 'Refus de la demande d''inscription à la formation VAR[SESSION#libelle] du VAR[SESSION#periode] par votre responsable', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (15, 'FORMATION_INSCRIPTION_2_RESPONSABLE_REFUS', '<p>Refus de la demande d''inscription par le responsable (Responsable &gt; Agent)</p>', 'mail', 'Refus de la demande d''inscription à la formation VAR[SESSION#libelle] du VAR[SESSION#periode] par votre responsable', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
 <p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
 <p>Bonjour,</p>
 <p>Votre responsable hiérarchique vient de refuser votre demande d\'inscription à la formation VAR[SESSION#libelle] du VAR[SESSION#periode].</p>
 <p>Vous trouverez ci-après le motif du refus de votre inscription :<br>VAR[INSCRIPTION#justificationRefus]</p>
 <p><br>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', 'table {border:1px solid black;}', 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_INSCRIPTION_2_RESPONSABLE_VALIDATION', '<p>Demande d''inscription à une formation (Responsable &gt; DRH)</p>', 'mail', 'Validation par le responsable de structure de la demande de formation de VAR[AGENT#Denomination] à la formation VAR[SESSION#libelle] du VAR[SESSION#periode]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
-<p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
-<p>Bonjour,<br><br>La demande de formation de VAR[AGENT#Denomination] à VAR[SESSION#libelle] du VAR[SESSION#periode] vient d\'être validée par le responsable hiérarchique.<br>Vous pouvez maintenant valider ou refuser cette demande de formation via l\'application "Mes Formations" : </p>
-<p>VAR[URL#FormationInstanceAfficher]</p>
-<p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>
-<p> </p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_INSCRIPTION_3_DRH_REFUS', '<p>Refus de la demande d''inscription par la DRH (DRH &gt; Agent)</p>', 'mail', 'Refus de la demande d''inscription à la formation VAR[SESSION#libelle] du VAR[SESSION#periode] par la direction des ressources humaines.', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (17, 'FORMATION_INSCRIPTION_3_DRH_REFUS', '<p>Refus de la demande d''inscription par la DRH (DRH &gt; Agent)</p>', 'mail', 'Refus de la demande d''inscription à la formation VAR[SESSION#libelle] du VAR[SESSION#periode] par la direction des ressources humaines.', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
 <p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
 <p><br>Bonjour,<br><br>Le bureau conseil carrière compétences vient de refuser votre demande d\'inscription à la formation VAR[SESSION#libelle] du VAR[SESSION#periode].<br>Vous trouverez ci-après le motif du refus de votre inscription :</p>
 <table style="height: 30px;" width="648">
@@ -336,9 +279,9 @@ INSERT INTO unicaen_renderer_template (code, description, document_type, documen
 <p> Le bureau conseil carrière compétences se tient à votre disposition pour toute information complémentaire.</p>
 <p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>
 <p> </p>', 'table {border:1px solid black;}', 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_INSCRIPTION_3_DRH_VALIDATION', '<p>Demande d''inscription à une formation (DRH &gt; Agent)</p>', 'mail', 'Validation de la demande de formation de VAR[AGENT#Denomination] à la formation VAR[SESSION#libelle] du VAR[SESSION#periode]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (18, 'FORMATION_INSCRIPTION_3_DRH_VALIDATION', '<p>Demande d''inscription à une formation (DRH &gt; Agent)</p>', 'mail', 'Validation de la demande de formation de VAR[AGENT#Denomination] à la formation VAR[SESSION#libelle] du VAR[SESSION#periode]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
 <p><br>À l\'Université de démonstration le VAR[Macro#Date],<br> <br>Bonjour,<br><br>La demande de formation de VAR[AGENT#Denomination] à VAR[SESSION#libelle] du VAR[SESSION#periode] vient d\'être validée par le bureau conseil, carrière, compétences.<br>Vous recevrez une notification quelques jours avant la formation et pourrez ainsi télécharger si besoin votre convocation directement sur l\'application Mes Formations (VAR[Url#AppLink])<br><br>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_INSCRIPTION_PREVENTION', null, 'mail', 'Validation de l''inscription de VAR[AGENT#Denomination] à une formation de prévention', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (19, 'FORMATION_INSCRIPTION_PREVENTION', null, 'mail', 'Validation de l''inscription de VAR[AGENT#Denomination] à une formation de prévention', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
 <p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
 <p>Bonjour,</p>
 <p>VAR[AGENT#Denomination] vient classé en liste principale pour une formation de prévention</p>
@@ -364,15 +307,7 @@ INSERT INTO unicaen_renderer_template (code, description, document_type, documen
 </table>
 <p> </p>
 <p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_NOTIFICATION_ABONNEMENT_FORMATION', '<p>Mail envoyé aux agents abonnés lors d''une nouvelle session</p>', 'mail', 'Un session de formation vient être ouverte pour l''action de formation "VAR[SESSION#libelle]"', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
-<p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
-<p>Bonjour,</p>
-<p>Une nouvelle session de formation (VAR[SESSION#identification]) vient d\'ouvrir pour la formation "VAR[SESSION#libelle]".<br>Cette session se déroulera sur la période du VAR[SESSION#periode] aux dates suivantes : VAR[SESSION#seances]</p>
-<p>La formation sera assurée par : VAR[SESSION#formateurs]</p>
-<p>Pour vous inscrire à cette formation, connectez vous à l\'application VAR[Macro#AppName] (VAR[Url#AppLink]) dans l\'onglet \'Formations\'.</p>
-<p> </p>
-<p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_NOTIFICATION_SESSION_IMMINENTE', '<p>Mail de rappel envoyé aux agents inscrits à une session de formation quelques jours avant la celle-ci</p>', 'mail', 'Rappel de votre inscription à la formation VAR[SESSION#libelle] du VAR[SESSION#periode]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (21, 'FORMATION_NOTIFICATION_SESSION_IMMINENTE', '<p>Mail de rappel envoyé aux agents inscrits à une session de formation quelques jours avant la celle-ci</p>', 'mail', 'Rappel de votre inscription à la formation VAR[SESSION#libelle] du VAR[SESSION#periode]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
 <p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
 <p>Bonjour,<br> <br>Ce mail automatique est un rappel de votre inscription à la formation suivante :</p>
 <table style="border-collapse: collapse; width: 71.5837%;" border="1"><colgroup><col style="width: 27.0288%;"><col style="width: 72.9713%;"></colgroup>
@@ -394,50 +329,46 @@ INSERT INTO unicaen_renderer_template (code, description, document_type, documen
 <p> </p>
 <p>En cas d\'empêchement, merci de vous désinscrire via l\'application VAR[Macro#AppName] (VAR[Url#AppLink])</p>
 <p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_RAPPORT_CLOTURE_AUTOMATIQUE', '<p>Mail envoyé lors de clôture automatique des inscriptions ( &gt; DRH)</p>', 'mail', 'Rapport de clôture automatique des inscriptions à une session de formation', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (22, 'FORMATION_RAPPORT_CLOTURE_AUTOMATIQUE', '<p>Mail envoyé lors de clôture automatique des inscriptions ( &gt; DRH)</p>', 'mail', 'Rapport de clôture automatique des inscriptions à une session de formation', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
 <p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
 <p>Bonjour,</p>
 <p><br><br>Voici la liste des sessions de formations dont les inscriptions ont été automatiquement clôturées :<br>###A REMPLACER###<br>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_RAPPORT_CONVOCATION_AUTOMATIQUE', '<p>Mail envoyé lors de clôture automatique des inscriptions ( &gt; DRH)</p>', 'mail', 'Rapport de clôture automatique des inscriptions à une session de formation', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (23, 'FORMATION_RAPPORT_CONVOCATION_AUTOMATIQUE', '<p>Mail envoyé lors de clôture automatique des inscriptions ( &gt; DRH)</p>', 'mail', 'Rapport de clôture automatique des inscriptions à une session de formation', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
 <p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
 <p>Bonjour,</p>
 <p><br><br>Voici la liste des sessions de formation dont les convocations ont été automatiquement envoyées :<br>###A REMPLACER###</p>
 <p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_SESSION_ABSENCE', '<p>Mail pour le constat d''absence envoyé aux agents</p>', 'mail', 'La session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] va est maintenant terminée', e'<p><strong>Université de démonstration</strong><br>DRH - Bureau des formations<br><br>le VAR[Macro#Date]<br><br> <br>Bonjour VAR[AGENT#Denomination],<br> <br>La session de formation VAR[SESSION#libelle] (VAR[SESSION#identification]) du VAR[SESSION#periode] à laquelle vous avez participé est maintenant terminée.</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (16, 'FORMATION_INSCRIPTION_2_RESPONSABLE_VALIDATION', '<p>Demande d''inscription à une formation (Responsable &gt; DRH)</p>', 'mail', 'Validation par le responsable de structure de la demande de formation de VAR[AGENT#Denomination] à la formation VAR[SESSION#libelle] du VAR[SESSION#periode]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+<p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,<br><br>La demande de formation de VAR[AGENT#Denomination] à VAR[SESSION#libelle] du VAR[SESSION#periode] vient d\'être validée par le responsable hiérarchique.<br>Vous pouvez maintenant valider ou refuser cette demande de formation via l\'application "Mes Formations" : </p>
+<p>VAR[URL#SessionAfficher]</p>
+<p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>
+<p> </p>', null, 'Formation\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (127, 'FORMATION_NOUVELLES_FORMATIONS', '<p>TO BE WRITEN</p>', 'mail', 'TO BE WRITEN', '<p>TO BE WRITEN</p>', null, 'Formation\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (24, 'FORMATION_SESSION_ABSENCE', '<p>Mail pour le constat d''absence envoyé aux agents</p>', 'mail', 'La session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] va est maintenant terminée', e'<p><strong>Université de démonstration</strong><br>DRH - Bureau des formations<br><br>le VAR[Macro#Date]<br><br> <br>Bonjour VAR[AGENT#Denomination],<br> <br>La session de formation VAR[SESSION#libelle] (VAR[SESSION#identification]) du VAR[SESSION#periode] à laquelle vous avez participé est maintenant terminée.</p>
 <p>Des absences ont été renseignées pour cette session de formation. Vous pouvez récupérer votre constat d\'absence à l\'adresse suivante : VAR[URL#Absence].<br>Ce constat est aussi disponible (et restera disponible) directement sur l\'application VAR[MesFormations#AppLink] dans la rubrique "Mes Formations" &gt; "Mes formations réalisées".<br><br> <br>Le bureau conseil, carrière, compétences.<br>drh.formation@unicaen.fr<br><br><br><br></p>
 <p> </p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_SESSION_ANNULEE', '<p>Mail envoyé aux inscrits d''une session venant d''être annulée</p>', 'mail', 'La session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] est annulée', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
-<p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
-<p>Bonjour,</p>
-<p> </p>
-<p>Nous vous informons que la session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] pour laquelle vous étiez inscrit, est annulée.</p>
-<p>Si vous souhaitez vous inscrire de nouveau sur cette même formation, vous serez alors notifié dès la réouverture d\'une prochaine session.</p>
-<p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_SESSION_ATTESTATION', '<p>Mail pour l''attestation envoyé aux agents</p>', 'mail', 'La session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] va est maintenant terminée', e'<p><strong>Université de démonstration</strong><br>DRH - Bureau des formations<br><br>le VAR[Macro#Date]<br><br> <br>Bonjour VAR[AGENT#Denomination],<br> <br>La session de formation VAR[SESSION#libelle] (VAR[SESSION#identification]) du VAR[SESSION#periode] à laquelle vous avez participé est maintenant terminée.</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (26, 'FORMATION_SESSION_ATTESTATION', '<p>Mail pour l''attestation envoyé aux agents</p>', 'mail', 'La session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] va est maintenant terminée', e'<p><strong>Université de démonstration</strong><br>DRH - Bureau des formations<br><br>le VAR[Macro#Date]<br><br> <br>Bonjour VAR[AGENT#Denomination],<br> <br>La session de formation VAR[SESSION#libelle] (VAR[SESSION#identification]) du VAR[SESSION#periode] à laquelle vous avez participé est maintenant terminée.</p>
 <p>Vous pouvez récupérer votre attestation à l\'adresse suivante : VAR[URL#Attestation].<br>Cette attestation est aussi disponible (et restera disponible) directement sur l\'application VAR[Url#AppLink] dans la rubrique "Mes Formations" &gt; "Mes formations réalisées" ou en suivant le lien suivant : VAR[Url#MesFormations].</p>
 <p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>
 <p><br><br><br></p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_SESSION_CONVOCATION', '<p>Mail de convocation envoyé aux agents</p>', 'mail', 'La session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] va bientôt commencer', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (27, 'FORMATION_SESSION_CONVOCATION', '<p>Mail de convocation envoyé aux agents</p>', 'mail', 'La session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] va bientôt commencer', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
 <p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
 <p>Bonjour,</p>
 <p><br>La session de formation VAR[SESSION#libelle] (VAR[SESSION#identification]) du VAR[SESSION#periode] à laquelle vous êtes inscrit va débuter prochainement.<br><br>Pour rappel, cette formation se déroulera selon le calendrier suivant :<br>VAR[SESSION#seances]<br><br>Vous pouvez retrouver sur l\'application EMC2 (VAR[Url#AppLink]) votre convocation qui vaut ordre de mission.<br>N\'imprimez celle-ci que si nécessaire.<br><br> <br>Le bureau conseil, carrière, compétences.<br>drh.formation@unicaen.fr<br><br> P.S.: Vous pouvez retrouver les plans d’accès et des campus sur le site de l\'Université https://www.unicaen.fr/universite/decouvrir/territoire/caen</p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_SESSION_DEMANDE_RETOUR', e'<p>Mail demandant aux agents ayant suivi la formation de remplir le formulaire</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (28, 'FORMATION_SESSION_DEMANDE_RETOUR', e'<p>Mail demandant aux agents ayant suivi la formation de remplir le formulaire</p>
 <p> </p>', 'mail', 'Demande de saisie des formulaires de retour de la formation VAR[SESSION#libelle] du VAR[SESSION#periode]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
 <p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
 <p>Bonjour,</p>
 <p>Vous venez de participer à la formation VAR[SESSION#libelle] du VAR[SESSION#periode]. Afin d\'obtenir votre attestation de présence, merci de compléter le questionnaire de satisfaction à votre disposition dans l\'application VAR[Macro#AppName].</p>
 <p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>
 <p> </p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_SESSION_EMARGEMENT', '<p>Mail notifiant des listes d''émargement</p>', 'mail', 'La session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] va bientôt commencer', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
-<p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
-<p>Bonjour,</p>
-<p>Vous animez prochainement la formation VAR[SESSION#libelle] du VAR[SESSION#periode].<br>En vous connectant à l\'application Mes Formations, vous pourrez récupérer les listes d\'émargement de cette session de formation à l\'adresse suivante : VAR[URL#FormationInstanceAfficher].<br><br>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_SESSION_LISTE_COMPLEMENTAIRE', '<p>Mail envoyé aux agents (individuellement) lors d''une inscription en liste complémentaire</p>', 'mail', 'Vous êtes inscrit sur la liste complémentaire de la session de formation VAR[SESSION#libelle]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (30, 'FORMATION_SESSION_LISTE_COMPLEMENTAIRE', '<p>Mail envoyé aux agents (individuellement) lors d''une inscription en liste complémentaire</p>', 'mail', 'Vous êtes inscrit sur la liste complémentaire de la session de formation VAR[SESSION#libelle]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
 <p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
 <p>Bonjour,</p>
 <p>Vous êtes positionné·e sur liste complémentaire pour la formation VAR[SESSION#libelle] (VAR[SESSION#identification]) du VAR[SESSION#periode].<br>Dès qu\'une place se libère, vous en serez informé-e par courrier électronique. <br><br>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>
 <p> </p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('FORMATION_SESSION_LISTE_PRINCIPALE', '<p>Mail envoyé (individuellement) aux agents de la liste principale.</p>', 'mail', 'Vous êtes inscrit sur la liste principale de la session de formation VAR[SESSION#libelle]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (31, 'FORMATION_SESSION_LISTE_PRINCIPALE', '<p>Mail envoyé (individuellement) aux agents de la liste principale.</p>', 'mail', 'Vous êtes inscrit sur la liste principale de la session de formation VAR[SESSION#libelle]', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
 <p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
 <p>Bonjour,</p>
 <p>Votre inscription à la session de formation formation VAR[SESSION#libelle] du VAR[SESSION#periode] est confirmée.<br>Vous allez prochainement recevoir par courrier électronique votre convocation et vous pourrez la télécharger via l\'application Mes Formations (VAR[Url#AppLink]).</p>
@@ -445,9 +376,83 @@ INSERT INTO unicaen_renderer_template (code, description, document_type, documen
 <p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>
 <p><br><br><br></p>
 <p> </p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('INSCRIPTION_FORMATION_DU_PLAN', '<p>Bloc en haut de la page d''inscription à une formation du plan de formation sur la page des agents</p>', 'texte', '.', '<p><strong>La demande d''inscription ne vaut pas acceptation.</strong> Votre inscription est soumise à validation et en fonction des places disponibles.</p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('INSCRIPTION_STAGE_HORS_PLAN', '<p>Bloc de texte afficher en haut de la page de demande des stages hors du plan de formation</p>', 'texte', 'Stage hors plan', '<p><strong>La demande d''inscription ne vaut pas acceptation.</strong> Votre inscription est soumise à validation et en fonction des places disponibles.</p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('MES_FORMATIONS_ACCUEIL', '<p>Texte de l''accueil de la partie formation</p>', 'texte', 'Mes formations', '<p>Mes formations permet la gestion des formations du personnel ...</p>', null, 'Application\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('MES_FORMATIONS_PROJETPERSO', '<p>Texte associé à la page du projet personnel</p>', 'texte', 'Mon projet personnel', '<p>Dans le cadre de la formation professionnelle tout au long de la vie, vous pouvez mobiliser différents dispositifs pour la réalisation de projets professionnels d''ordre personnel, tels que le bilan de compétences, la validation des acquis de l''expérience, le congé de Formation professionnelle ou le compte personnel de formation.<br /><br />Quel que soit le dispositif choisi, une commission a lieu deux fois par an. Vous pouvez consulter le lien intranet pour connaître l''ensemble des modalités.</p>', null, 'Formation\Provider\Template');
-INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('PLANS_DE_FORMATION', '<p>Bandeau en haut de la page Plans de formation <br><img src="data:image/png;base64,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"></p>', 'texte', 'Plans de formation', '<p>En vous abonnant aux notifications, vous recevrez un mail une fois la session ouverte et vous pourrez vous inscrire.</p>', null, 'Formation\Provider\Template');
-
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (32, 'INSCRIPTION_FORMATION_DU_PLAN', '<p>Bloc en haut de la page d''inscription à une formation du plan de formation sur la page des agents</p>', 'texte', '.', '<p><strong>La demande d''inscription ne vaut pas acceptation.</strong> Votre inscription est soumise à validation et en fonction des places disponibles.</p>', null, 'Formation\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (33, 'INSCRIPTION_STAGE_HORS_PLAN', '<p>Bloc de texte afficher en haut de la page de demande des stages hors du plan de formation</p>', 'texte', 'Stage hors plan', '<p><strong>La demande d''inscription ne vaut pas acceptation.</strong> Votre inscription est soumise à validation et en fonction des places disponibles.</p>', null, 'Formation\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (34, 'MES_FORMATIONS_ACCUEIL', '<p>Texte de l''accueil de la partie formation</p>', 'texte', 'Mes formations', '<p>Mes formations permet la gestion des formations du personnel ...</p>', null, 'Application\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (35, 'MES_FORMATIONS_PROJETPERSO', '<p>Texte associé à la page du projet personnel</p>', 'texte', 'Mon projet personnel', '<p>Dans le cadre de la formation professionnelle tout au long de la vie, vous pouvez mobiliser différents dispositifs pour la réalisation de projets professionnels d''ordre personnel, tels que le bilan de compétences, la validation des acquis de l''expérience, le congé de Formation professionnelle ou le compte personnel de formation.<br /><br />Quel que soit le dispositif choisi, une commission a lieu deux fois par an. Vous pouvez consulter le lien intranet pour connaître l''ensemble des modalités.</p>', null, 'Formation\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (36, 'PLANS_DE_FORMATION', '<p>Bandeau en haut de la page Plans de formation <br><img src="data:image/png;base64,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"></p>', 'texte', 'Plans de formation', '<p>En vous abonnant aux notifications, vous recevrez un mail une fois la session ouverte et vous pourrez vous inscrire.</p>', null, 'Formation\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (20, 'FORMATION_NOTIFICATION_ABONNEMENT_FORMATION', '<p>Mail envoyé aux agents abonnés lors d''une nouvelle session</p>', 'mail', 'Un session de formation vient être ouverte pour l''action de formation "VAR[SESSION#libelle]"', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+<p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p>Une nouvelle session de formation (VAR[SESSION#identification]) vient d\'ouvrir pour la formation "VAR[SESSION#libelle]".<br>Cette session se déroulera sur la période du VAR[SESSION#periode] aux dates suivantes : VAR[SESSION#seances]</p>
+<p>La formation sera assurée par : VAR[SESSION#formateurs]</p>
+<p>Pour vous inscrire à cette formation, connectez vous à l\'application VAR[Macro#AppName] (VAR[Url#AppLink]) dans l\'onglet \'Formations\'.</p>
+<p> </p>
+<p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', 'tr { border-top : 1px solid black; }', 'Formation\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (29, 'FORMATION_SESSION_EMARGEMENT', '<p>Mail notifiant des listes d''émargement</p>', 'mail', 'La session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] va bientôt commencer', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+<p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p>Vous animez prochainement la formation VAR[SESSION#libelle] du VAR[SESSION#periode].<br>En vous connectant à l\'application Mes Formations, vous pourrez récupérer les listes d\'émargement de cette session de formation à l\'adresse suivante : VAR[URL#SessionAfficher].<br><br>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', null, 'Formation\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (38, 'CONTACT', null, 'texte', 'Contact', e'<p>En cas de problème technique avec l\'application vous pouvez écrire à <a href="mailto:VAR[Macro#Parametre|EMAIL;EMAIL_ASSISTANCE]">VAR[Macro#Parametre|EMAIL;EMAIL_ASSISTANCE]</a>.</p>
+<p>Pour des demandes d\'informations générales à propos de VAR[Macro#AppName] vous pouvez écrire à <a href="mailto:VAR[Macro#Parametre|EMAIL;EMAIL_CONTACT]">VAR[Macro#Parametre|EMAIL;EMAIL_CONTACT]</a>.</p>
+<p> </p>', null, 'Application\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (39, 'FORMATION_INSCRIPTION_REFERENT', '<p>Courrier envoyé vers les référents</p>', 'mail', 'VAR[AGENT#Denomination] vient de s''inscrire à une session de formation dont vous êtes référent·e', '<p>VAR[AGENT#Denomination] vient de s''inscrire à une session de formation dont vous êtes référent·e</p>', null, 'Formation\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (1, 'ENQUETE_EXPLICATION', '<p>Texte précisant le caractère anonyme et <em>facultatif</em> de l''enquête</p>', 'texte', 'À propos des formulaires de retour d''expérience', e'<p>Ces formulaires sont anonymes et si vous ne souhaitez pas fournir de réponse à une des questions de l\'enquête vous pouvez sélectionner la réponse "<em>Sans avis</em>".</p>
+<p>Vous ne pourrez récupérer l\'attestation pour une formation qu\'une fois l\'enquête associée saisie et validée.</p>', null, 'Formation\Provider\Privilege');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (5, 'FORMATION_CHARTE', null, 'texte', 'Charte d''engagement', '<p>Je, VAR[AGENT#Denomination], m''engage à suivre les formations que je demande et à me montrer respectueux·se des personnes associées à ces formations.</p>', null, 'Formation\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (125, 'DEMANDE_EXTERNE_DEMANDE_DGS', '<p>Courrier électronique envoyé lorsque la demande est complète validée par les DRH mais avec un plafond de coût très élevé.<br>Ce courrier est envoyé aux personnes responsables de la gestion des formations.</p>', 'mail', 'La demande de formation hors de plan de formation de VAR[AGENT#Denomination] est  complète et attend votre validation', e'<p>Bonjour,</p>
+<p>La demande de formation hors de plan de formation de VAR[AGENT#Denomination] est  complète.<br>Celle-ci à un montant supérieur à VAR[Macro#Parametre|DEMANDE_EXTERNE;PLAFOND_DGS] et requiert votre validation.<br>Vous pouvez valider ou refuser celle-ci dans le parapheur des demandes de formation : VAR[URL#Parapheur].</p>
+<p>Bonne journée,</p>
+<p>VAR[Macro#AppName]<br>VAR[Url#AppLink]</p>', null, 'DemandeExterne\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (120, 'FORMATION_INSCRIPTION_2_RESPONSABLE_VALIDATION_AGENT', '<p>Courrier électronique envoyé vers l''agent lors de la validation par son valideur. Cette notification  l''informe que le dossier est maintenant au bureau de gestion des formations</p>', 'mail', 'Envoi de votre demande de formation au bureau de gestion de la formation', e'<p>Bonjour,</p>
+<p>Suite à la validation de votre valideur·euse, votre demande est maintenant examiner par la bureau de gestion de la formation.<br>Le validation du bureau de gestion de la formation validera votre demande.</p>
+<p>Bonne journée,<br>VAR[Macro#AppName]<br>VAR[Url#AppLink]</p>', null, 'Formation\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (25, 'FORMATION_SESSION_ANNULEE', '<p>Mail envoyé aux inscrits d''une session venant d''être annulée</p>', 'mail', 'La session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] est annulée', e'<p><strong>Université de démonstration</strong><br>Équipe "Mes Formations"</p>
+<p><br>À l\'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p> </p>
+<p>Nous vous informons que la session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] pour laquelle vous étiez inscrit, est annulée.</p>
+<p>Motif d\'annulation : VAR[SESSION#MotifAnnulation]</p>
+<p>Si vous souhaitez vous inscrire de nouveau sur cette même formation, vous serez alors notifié dès la réouverture d\'une prochaine session.</p>
+<p>L\'équipe "Mes Formations"<br>VAR[Url#AppLink]</p>', null, 'Formation\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (37, 'APROPOS', null, 'texte', 'À propos de VAR[Macro#AppName]', e'<p>La version courante de VAR[Macro#AppName] est  VAR[Macro#Parametre|GLOBAL;VERSION] déployée le VAR[Macro#Parametre|GLOBAL;DATE_MAJ].<br><br></p>
+<p>Corrections de divers bugs :</p>
+<ul>
+<li>[1.0.4] Correction du blocage des inscriptions bloquées par des volumes et non des séances</li>
+<li>[1.0.2] Rectification du template utiliser pour prévenir les agent·es de la validation de leur responsable</li>
+<li>[1.0.2] Retrait de mention oublié de EMC2</li>
+<li>[1.0.1] Désabonnements à une action de formation ;</li>
+<li>[1.0.1] Meilleures gestions des référents non complètement déclarés ;</li>
+<li>[1.0.1] Retrait de la vérification de la disponibilité des stagiaires extérieurs.</li>
+</ul>
+<p>Nouvelles fonctionnalités :</p>
+<ul>
+<li>[1.0.4] Interface d\'extraction basée sur les inscriptions</li>
+<li>[1.0.4] Déclaration de motif d\'annulation de session pour traçabilité et personnaliser le message d\'annulation</li>
+<li>[1.0.4] Changement de la gestion des désistements (affichage séparé + indicateur)</li>
+<li>[1.0.3] Possibilité de révoquer une remonté SI de la chaîne de validation</li>
+</ul>
+<p>Amélioration de qualité de vie : </p>
+<ul>
+<li>[1.0.4] Amélioration de l\'index des gestionnaires de formation</li>
+<li>[1.0.3] Amélioration du temps de réponse et changement du listing affiché pour les responsables de structure</li>
+<li>[1.0.3] Retrait des affichages de justifications inopportuns lors de l\'annulation d\'une inscription</li>
+<li>[1.0.2] Amélioration du temps de réponse et changement du listing affiché pour les valideur·euses</li>
+<li>[1.0.1] Ajout d\'écrans pour la gestion des abonnements pour les gestionnaires de formations</li>
+</ul>', null, 'Application\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (121, 'FORMATION_SESSION_RAPPEL_DEMANDE_VALIDATION', '<p>Courrier de rappel de la demande de validation d''une inscription à une formation du plan de formation</p>', 'mail', 'RAPPEL Vous n''avez pas encore validé la demande de formation de VAR[AGENT#Denomination]', e'<p>Bonjour,</p>
+<p>Vous n\'avez pas encore validé la demande de formation de VAR[AGENT#Denomination] pour la session VAR[SESSION#libelle] du  VAR[SESSION#periode].<br>Veuillez vous rendre dans votre tableau de bord en tant que Valideur·euse sur l\'application VAR[Macro#AppName] (VAR[Url#AppLink]) afin de statuer sur cette demande.</p>
+<p>Bonne journée,<br>L\'application VAR[Macro#AppName]</p>', null, 'Formation\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (124, 'DEMANDE_EXTERNE_DEMANDE_DRH', '<p>Courrier électronique envoyé lorsque la demande est complète, validée par le responsable de formation et d''un montant dépassant le plafond de coût élevé.<br>Ce courrier est envoyé aux personnes ayant le rôle direction des ressources humaines</p>', 'mail', 'La demande de formation hors de plan de formation de VAR[AGENT#Denomination] est  complète et demande votre validation', e'<p>Bonjour,</p>
+<p>La demande de formation hors de plan de formation de VAR[AGENT#Denomination] est  complète.<br>Celle-ci à un montant supérieur à VAR[Macro#Parametre|DEMANDE_EXTERNE;PLAFOND_DRH] et requiert votre validation.<br>Vous pouvez valider ou refuser celle-ci dans le parapheur des demandes de formation : VAR[URL#Parapheur].</p>
+<p>Bonne journée,</p>
+<p>VAR[Macro#AppName]<br>VAR[Url#AppLink]</p>', null, 'DemandeExterne\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (123, 'DEMANDE_EXTERNE_DEMANDE_COMPLETE', '<p>Courrier électronique envoyé lorsque la demande est complète et complètement validée.<br>Ce courrier est envoyé à l''agent·e</p>', 'mail', 'Votre demande de formation hors plan de formation est totalement validée', e'<p>Bonjour,</p>
+<p>Votre demande de formation hors plan de formation est totalement validée.<br><br>Bonne journée,<br>VAR[Macro#AppName]<br>VAR[Url#AppLink]</p>', null, 'DemandeExterne\Provider\Template');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (126, 'DEMANDE_EXTERNE_DEMANDE_VALIDEE', '<p>Courrier électronique envoyé vers l''agent·e lorsque la demande est complètement validée</p>', 'mail', 'Votre demande de formation hors plan de formation vient d''être totalement validée.', e'<p>Bonjour,</p>
+<p>Votre demande de formation hors plan de formation vient d\'être totalement validée.<br>Vous serez recontactez prochainement.</p>', null, 'DemandeExterne\Provider\Privilege');
+INSERT INTO unicaen_renderer_template (id, code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES (122, 'FORMATION_EMARGEMENT', '<p>Feuille d''émargement</p>', 'pdf', 'Emargement_Session_VAR[SESSION#id].pdf', e'<h2 style="text-align: center;">Feuille d\'émargement</h2>
+<p><strong>Atelier</strong><br>Libellé : VAR[SESSION#libelle]<br>Période : VAR[SESSION#periode]</p>
+<p><br><strong>Formateur·trices<br></strong>VAR[SESSION#FormateursAvecSignature]</p>
+<p><strong>Séance</strong><br>Lieu : VAR[SEANCE#lieu]<br>Date : VAR[SEANCE#periode]</p>
+<p><br><strong>Liste des inscrit·es<br></strong>VAR[SESSION#InscritsAvecSignature]</p>', 'table.bordered { border-collapse: collapse; } table.bordered  td { border: 1px solid black; } table.bordered  th { border: 1px solid black; }', 'Formation\Provider\Template');
diff --git a/database/script/init_user.sql b/database/script/init_user.sql
index ff50d795e08d4bfdd9646fee74ff7ebc49689500..ca225841cadeaa91fbcafebb6b4342bc88f8d27b 100644
--- a/database/script/init_user.sql
+++ b/database/script/init_user.sql
@@ -1,4 +1,7 @@
 INSERT INTO unicaen_utilisateur_user (username, display_name, email, password, state, password_reset_token, last_role_id) VALUES
     ('grey', 'Grey', null, 'application', true, null, null),
-    ('violette', 'Violette', null, 'application', true, null, null)
+    ('violette', 'Violette', null, 'application', true, null, null),
+    ('olive', 'Olive', null, 'application', true, null, null),
+    ('bruno', 'Bruno', null, 'application', true, null, null),
+    ('blanche', 'Blanche', null, 'application', true, null, null)
 ;
diff --git a/database/sources/csv/fichier_nature.csv b/database/sources/csv/fichier_nature.csv
new file mode 100644
index 0000000000000000000000000000000000000000..457c2d0b2982eb822d205d967aee9b65131df63c
--- /dev/null
+++ b/database/sources/csv/fichier_nature.csv
@@ -0,0 +1,4 @@
+'code';'libelle';'description'
+"DEMANDEEXTERNE_DEVIS","Devis associé à un demande de formation","Devis associé à un demande de formation hors plan de formation"
+"DEMANDEEXTERNE_PROGRAMME","Programme associé à un demande de formation","Programme décrivant la formation demandée"
+"INSCRIPTION_ATTESTATION","Attestion de suivi",null
diff --git a/database/sources/csv/formation_session_type.csv b/database/sources/csv/formation_session_type.csv
new file mode 100644
index 0000000000000000000000000000000000000000..106941e023bf4f3a84b3950c2cb5f12b5b603261
--- /dev/null
+++ b/database/sources/csv/formation_session_type.csv
@@ -0,0 +1,3 @@
+'libelle';'description'
+"Formation offre DRH",null
+"Formation hors offre DRH",null
diff --git a/database/sources/csv/unicaen_enquete_enquete.csv b/database/sources/csv/unicaen_enquete_enquete.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0e5a4784fd22589b316658f33d1da4c2af03fa61
--- /dev/null
+++ b/database/sources/csv/unicaen_enquete_enquete.csv
@@ -0,0 +1,2 @@
+'code';'titre';'description' 20250331115000
+"FORMATION_2024","FORMATION","<p>Enquete par d&eacute;faut des formation</p>"
diff --git a/database/sources/csv/unicaen_enquete_groupe.csv b/database/sources/csv/unicaen_enquete_groupe.csv
new file mode 100644
index 0000000000000000000000000000000000000000..57eee9c6c35a529f17602a231247f108a9164045
--- /dev/null
+++ b/database/sources/csv/unicaen_enquete_groupe.csv
@@ -0,0 +1,7 @@
+'enquete_id';'code';'libelle';'description';'ordre' 20250331115300
+"FORMATION_2024","1","Evaluation globale",null,"1"
+"FORMATION_2024","2","Contenu de la formation",null,"2"
+"FORMATION_2024","3","L\'intervenant·e",null,"3"
+"FORMATION_2024","4","Les supports pédagogiques",null,"4"
+"FORMATION_2024","5","L\'organisation et la logistique",null,"5"
+"FORMATION_2024","6","Amélioration possible",null,"6"
\ No newline at end of file
diff --git a/database/sources/csv/unicaen_enquete_question.csv b/database/sources/csv/unicaen_enquete_question.csv
new file mode 100644
index 0000000000000000000000000000000000000000..a36d903f64e9e520f3cbe700d6d107f1de49bc8f
--- /dev/null
+++ b/database/sources/csv/unicaen_enquete_question.csv
@@ -0,0 +1,14 @@
+'enquete_id';'groupe_id';'libelle';'description';'ordre';'has_note';'has_commentaire' 20250331120500
+"FORMATION_2024","1","Quel est votre satisfaction globale de la session de formation ?",null,"1","true","true"
+"FORMATION_2024","1","Comment allez-vous intégrer cette formation dans votre quotidien professionnel",null,"3","true","true"
+"FORMATION_2024","2","Les objectifs de la formation étaient-il clairs et pertinents ?",null,"2","true","true"
+"FORMATION_2024","2","Le contenu de la formation était-il en adequation avec vos attentes ?",null,"1","true","true"
+"FORMATION_2024","3","L'intervenant(e) était-il/elle disponible pour répondre à vos questions ?",null,"2","true","true"
+"FORMATION_2024","3","Comment évaluez-vous les compétences et la pédagogie de l'intervenant(e) ?",null,"1","true","true"
+"FORMATION_2024","4","Les supports étaient-ils suffisamment complets et utiles pour votre apprentissage ?",null,"2","true","true"
+"FORMATION_2024","4","Comment jugez-vous la qualité des supports de formation ?",null,"1","true","true"
+"FORMATION_2024","5","Avez-vous reçu les informations relatives à la formation suffisamment en amont de la formation ?",null,"2","true","true"
+"FORMATION_2024","5","Les conditions logistiques étaient-elles confortables et propices à l'apprentissage ?",null,"3","true","true"
+"FORMATION_2024","5","Comment évaluez-vous l'organisation générale de la formation ( lieu, date, horaires...) ?",null,"1","true","true"
+"FORMATION_2024","6","Quels sont les axes d'amélioration de cette formation ?",null,"2","false","true"
+"FORMATION_2024","6","Quels sont les points forts de cette formation ?",null,"1","false","true"
diff --git a/database/sources/csv/unicaen_etat_categorie.csv b/database/sources/csv/unicaen_etat_categorie.csv
new file mode 100644
index 0000000000000000000000000000000000000000..bcb919c1304e983bccaf1519deca391685e82341
--- /dev/null
+++ b/database/sources/csv/unicaen_etat_categorie.csv
@@ -0,0 +1,4 @@
+Code,Libellé,icone,couleur,ordre 20250331110000
+"FORMATION_SESSION","Gestion des sessions de formation du plan de formation","fas fa-chalkboard","#3465a4","100"
+"DEMANDE_EXTERNE","Gestion des demandes de formations hors plan de formation","fas fa-school","cadetblue","200"
+"FORMATION_INSCRIPTION","Gestion des inscriptions au formation","fas fa-chalkboard-teacher","#204a87","1000"
\ No newline at end of file
diff --git a/database/sources/csv/unicaen_evenement_etat.csv b/database/sources/csv/unicaen_evenement_etat.csv
new file mode 100644
index 0000000000000000000000000000000000000000..b7cb37a3ff8c01206676fa48869d82fb87ca0ac7
--- /dev/null
+++ b/database/sources/csv/unicaen_evenement_etat.csv
@@ -0,0 +1,6 @@
+'code';'libelle';'description' 20250331113100
+"en_attente","En attente",null
+"en_cours","En cours",null
+"echec","Échec",null
+"succes","Succès",null
+"annule","Événement dont le traitement a été annulé",null
diff --git a/database/sources/csv/unicaen_evenement_type.csv b/database/sources/csv/unicaen_evenement_type.csv
new file mode 100644
index 0000000000000000000000000000000000000000..6cf0dfc6b450e7bf2a74e671b8073131aec246e7
--- /dev/null
+++ b/database/sources/csv/unicaen_evenement_type.csv
@@ -0,0 +1,7 @@
+'code';'libelle';'description';'parametres';'recursion' 20250331113100
+"NOTIFICATION_NOUVELLES_SESSIONS","Notification des nouvelles sessions de formation","Notification des nouvelles sessions de formation",null,"P1W"
+"formation_session_inscription_cloture","Fermeture des inscriptions pour une session de formation","Fermeture automatique des inscriptions pour une session de formation","session",null
+"formation_session_rappel_agent","Rappel aux inscrits d'une session imminente","Rappel aux inscrits de la liste principale que la session est imminente","session",null
+"formation_session_cloture","Clôture de la session de formation","Clôture automatique de la session de formation","session",null
+"formation_session_convocation","Convocation des inscrits à la session de formation","Convocation des inscrits en liste principale à la session de formation","session",null
+"formation_session_demande_retour","Demande de retour sur la formation aux participants de la session","Demande de retour sur la formation aux participants de la session","session",null
diff --git a/database/sources/csv/unicaen_renderer_macro.csv b/database/sources/csv/unicaen_renderer_macro.csv
new file mode 100644
index 0000000000000000000000000000000000000000..948c9290a49dc2a19bb33c17d661a5b8411a65ea
--- /dev/null
+++ b/database/sources/csv/unicaen_renderer_macro.csv
@@ -0,0 +1,51 @@
+'code';'description';'variable_name';'methode_name' 20250331133400
+"AGENT#AffectationsActives","<p>Affiche sous la forme d'une liste à puces les affectations actives d'un agent</p>","agent","toStringAffectationsActives"
+"AGENT#DateNaissance",null,"agent","toStringDateNaissance"
+"AGENT#Denomination","<p>Retourne la d&eacute;nomination de l'agent (Pr&eacute;nom1 NomUsuel)</p>","agent","getDenomination"
+"AGENT#GradesActifs","<p>Affiche les grades actifs d'un agent sous la forme d'une liste &agrave; puce</p>","agent","toStringGradesActifs"
+"AGENT#NomFamille",null,"agent","toStringNomFamille"
+"AGENT#NomUsage",null,"agent","toStringNomUsage"
+"AGENT#Prenom",null,"agent","toStringPrenom"
+"AGENT#StatutsActifs","<p>Affiche la liste des statuts actifs d'un agent sous la forme d'une liste &agrave; puce</p>","agent","toStringStatutsActifs"
+"DEMANDE#debut","","demande","getDebutAsString"
+"DEMANDE#fin","","demande","getFinAsString"
+"DEMANDE#libelle","<p>Retourne le libellé de la formation associé à la demande externe</p>","demande","getLibelle"
+"DEMANDE#lieu","","demande","getLieu"
+"DEMANDE#motivation","","demande","getJustificationAgent"
+"DEMANDE#organisme","<p>Retourne l'organisme de la formation associée à la demande externe</p>","demande","getOrganisme"
+"DEMANDE#refus","<p>Retourne le motif de refus</p>","demande","getJustificationRefus"
+"INSCRIPTION#duree","<p>Affiche la durée de présence de l inscrit</p>","inscription","getDureePresence"
+"INSCRIPTION#justificationAgent","<p>Retourne la motivation de l agent</p>","inscription","getJustificationAgent"
+"INSCRIPTION#justificationRefus","<p>Retourne la motivation de la désinscription ou du refus</p>","inscription","getJustificationRefus"
+"INSCRIPTION#justificationResponsable","<p>Retourne la motivation du responsable</p>","inscription","getJustificationResponsable"
+"Macro#AppName","<p>Affiche le nom de l'application (attention c'est ""hard codé"")</p>","MacroService","getAppName"
+"Macro#Date","<p>Affiche la date courante (au format jj/mm/aaaa)</p>","MacroService","getDate"
+"Macro#DateTime","<p>Affiche la date courante (au format jj/mm/aaaa à HH:mm)</p>","MacroService","getDateTime"
+"MesFormations#AppLink","<p>Affiche le nom de l'application de formation et fourni un lien vers celle-ci</p>","UrlService","getMesFormationsUrl"
+"SESSION#duree","retourne la durée en heure de la session","session","getDuree"
+"SESSION#formateurs","retourne la liste des formateurs sous la forme d un tableau","session","getListeFormateurs"
+"SESSION#id","<p>Retroune l'id numérique de la session</p>","session","getId"
+"SESSION#identification","retourne l identifiant unique de la session sous la forme <em>ACTION/SESSION</em>","session","getInstanceCode"
+"SESSION#libelle","retourne le libellé de la session","session","getInstanceLibelle"
+"SESSION#lieu","","session","getLieuString"
+"SESSION#periode","retourne la période sous la forme <em>DEBUT au FIN</em>","session","getPeriode"
+"SESSION#seances","","session","getListeJournees"
+"STRUCTURE#libelle","<p>Retourne le libellé de la structure</p>","structure","toStringLibelle"
+"STRUCTURE#libelle_long","<p>Retourne le libellé de la structure + le libell&amp;eacute de la structure de niveau 2</p>","structure","toStringLibelleLong"
+"STRUCTURE#responsables","<p>Affiches sous la forme d'un listing les Responsables d'une structure</p>","structure","toStringResponsables"
+"URL#Absence","<p>Retroune le lien vers le téléchargement du constat d'absence</p>","UrlService","getUrlAbsence"
+"Url#AppLink","<p>Retourne le lien vers l'application</p>","UrlService","getUrlApp"
+"URL#Attestation","<p>Retroune le lien vers le téléchargement de l'inscription</p>","UrlService","getUrlAttestation"
+"Url#Convocation","<p>Retroune le lien vers le téléchargement de la convocation</p>","UrlService","getUrlConvocation"
+"Url#GestionDemandesExternes","<p>Retourne le lien vers la page de gestion des demandes externes</p>","UrlService","getUrlGestionDemandesExternes"
+"Url#MesFormations","<p>Retourne l'url de la page des formations réalisées d'un·e agent·e</p>","UrlService","getUrlMesFormations"
+"Url#PlanDeFormation","<p>Fourni un lieu vers la page des plans de formation courants</p>","UrlService","getUrlPlanDeFormation"
+"Url#ValidateurDemandesExternes","<p>Retourne l'url associé à la page mes agents avec l'onglet 'Demande à titre individuel' sélectionné</p>","UrlService","getUrlValidateurDemandesExternes"
+"URL#SessionAfficher","<p>Retourne l'URL pour accéder à l'affichage d'une session de formation</p>","UrlService","getUrlSessionAfficher"
+"Macro#Parametre","<p>Retourne la valeur d'un paramètre, attention le code de la catégorie et du paramètre doivent être founies.<br>Exemple: VAR[Macro#Parametre|GLOBAL;INSTALL_PATH]</p>","MacroService","getValeurParametre"
+"SESSION#MotifAnnulation","<p>Affiche le motif d'annulation</p>","session","getMotifAnnulation"
+"SEANCE#lieu","<p>Retourne le lieu de la séance ""Batiment Salle - Campus Ville""</p>","seance","toStringLieu"
+"SEANCE#periode","<p>Retourne la période au format DD/MM/YYYY H:m au DD/MM/YYYY H:m</p>","seance","getPeriode"
+"SESSION#FormateursAvecSignature","<p>Fournit un tableau listant les formateurs avec un case pour la signature</p>","session","getArrayFormateurs"
+"SESSION#InscritsAvecSignature","<p>Retourne un tableau des inscrits de la liste principale avec une case pour leur signature</p>","session","getArrayListePrincipales"
+"URL#Parapheur","<p>Retourne un lien vers le parapheur des demandes hors plan de formations</p>","UrlService","getParapheurUrl"
diff --git a/database/sources/csv/unicaen_renderer_template.csv b/database/sources/csv/unicaen_renderer_template.csv
new file mode 100644
index 0000000000000000000000000000000000000000..4526230ff3c8a974ea95c30968d4e882dabe6249
--- /dev/null
+++ b/database/sources/csv/unicaen_renderer_template.csv
@@ -0,0 +1,405 @@
+'code';'description';'document_type';'document_sujet';'document_corps';'document_css';'namespace'
+"FORMATION_ABONNEMENT_POST_CLOTURE","<p>Courrier électronique envoyé aux inscrit·es de la liste complémentaire les prévenants qu'ils ou elles ont été abonné·es à la formation</p>","mail","Abonnement à la formation VAR[SESSION#libelle] suite à la clôture de la session dont vous étiez inscrit·e","<p>Bonjour,</p>
+<p>Vous étiez sur la liste complémentaire de la session de formation VAR[SESSION#libelle] se déroulant sur la période du VAR[SESSION#periode]).<br>Malheureusement aucune place n'a pu se libéré et vous n'avez pu participer à cette session de formation.</p>
+<p>Afin de vous permettre de participer à la prochaine session de formation VAR[SESSION#libelle], vous avez été automatiquement abonné·e aux notifications associées à cette formation.<br>Vous serez ainsi prévenu des prochaines ouvertures de session de formation.</p>
+<p>Vous pouvez vous désinscrire de ces notifications en allant sur l'application VAR[MesFormations#AppLink] et en consultant la page ""Plan de formation"" accessible en suivant le lien VAR[Url#PlanDeFormation].</p>
+<p>En vous souhaitant une bonne journée,<br>VAR[MesFormations#AppLink]</p>
+<p> </p>",null,"Formation\Provider\Template"
+"FORMATION_ATTESTATION",null,"pdf","Attestation de formation de VAR[AGENT#Denomination] à la formation VAR[SESSION#libelle]","<p> </p>
+<p> </p>
+<p> </p>
+<p> </p>
+<p><strong>Université de Caen Normandie</strong><br>Direction des Ressources Humaines<br>Esplanade de la Paix<br>14032 CAEN CEDEX 5</p>
+<p> </p>
+<p style=""text-align: right;"">À Caen le  VAR[Macro#Date]</p>
+<p> </p>
+<h1 style=""text-align: center;"">Attestation de formation professionnelle</h1>
+<p> </p>
+<p>La direction des ressources humaines certifie que le stagiaire :</p>
+<p>VAR[AGENT#Denomination] a suivi la formation : <strong>VAR[SESSION#libelle] </strong>qui s'est déroulée du VAR[SESSION#periode] (Durée : VAR[SESSION#duree])VAR[SESSION#lieu].</p>
+<p> </p>
+<p>L'agent a suivi VAR[INSCRIPTION#duree] de formation.</p>
+<p> </p>
+<p> </p>
+<p style=""text-align: left;"">La Direction des Ressources Humaines</p>
+<p><span dir=""ltr"" style=""left: 70.8661px; top: 794.321px; font-size: 16.6667px; font-family: sans-serif; transform: scaleX(1);"" role=""presentation""> </span></p>",null,"Formation\Provider\Template"
+"FORMATION_ABSENCE","<p>Document émis pour les inscrit·es qui ont été absent·es à une formation</p>","pdf","constat_absence_session_VAR[SESSION#id]","<p><strong>Université de démonstration</strong><br>DRH - Bureau des formations</p>
+<h1 style=""text-align: center;"">Constat d'absence à un stage</h1>
+<p><br>le VAR[Macro#Date]</p>
+<p><br>Je soussigné, Prenom NOM, Président de l’Université de démonstration, certifie que VAR[AGENT#Denomination] n'a pas participé au stage de formation suivant : </p>
+<p>VAR[SESSION#libelle]</p>
+<p>qui s'est déroulé du VAR[SESSION#periode] ayant une durée de VAR[SESSION#duree].</p>
+<p> </p>
+<p>VAR[AGENT#Denomination] a suivi une durée de VAR[INSCRIPTION#duree].</p>
+<p> </p>
+<p>Je vous prie de bien vouloir justifier votre absence auprès du bureau de la formation.</p>
+<p> </p>
+<p><br>Le bureau de formation<br>drh.formation@univ-demo.fr<br><br><br><br></p>
+<p> </p>",null,"Formation\Provider\Template"
+"FORMATION_HISTORIQUE",null,"pdf","Historique des formations de VAR[AGENT#Denomination]","<h1 style=""text-align: center;""> Historique de formation</h1>
+<p> </p>
+<p>L'agent <strong>VAR[AGENT#Denomination]</strong> a suivi les formations suivantes  : ###A REMPLACER###</p>
+<p> </p>
+<p style=""text-align: right;"">La responsable du bureau conseil, carrière, compétences.<br /><br /></p>",null,"Agent\Provider\Template"
+"FORMATION_INSCRIPTION_1_AGENT","<p>Demande d'inscription à une formation (Agent &gt; Responsable)</p>","mail","Demande d'inscription de VAR[AGENT#Denomination] à la formation VAR[SESSION#libelle] du VAR[SESSION#periode]","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p>VAR[AGENT#Denomination] vient de procéder à une demande d'inscription pour la formation VAR[SESSION#libelle] du VAR[SESSION#periode]. </p>
+<p>Merci de vous connecter à l'application ""Mes Formations"" (VAR[Url#AppLink]) afin d'accepter ou de refuser sa demande.<br>La liste des ""demandes en attente"" est accessible dans l'onglet 'Demande de formation' dans votre structure.</p>
+<p>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>",null,"Formation\Provider\Template"
+"FORMATION_CONVOCATION",null,"pdf","Convocation à la session de formation VAR[SESSION#libelle]","<p> </p>
+<p> </p>
+<p> </p>
+<p> </p>
+<h1 style=""text-align: center;"">Convocation à une action de formation</h1>
+<p style=""text-align: right;""> À Caen, le  VAR[Macro#Date]</p>
+<p>Bonjour <strong>VAR[AGENT#Denomination]</strong>,</p>
+<p> </p>
+<p>Le bureau en charge des recrutements, de la formation et des parcours professionnels vous informe que vous êtes retenu-e à la formation :</p>
+<p style=""text-align: center;""><strong>VAR[SESSION#libelle]<br></strong></p>
+<p>à laquelle vous êtes inscrit-e et se déroulera selon le calendrier ci-dessous :</p>
+<p>VAR[SESSION#seances] </p>
+<p>En cas d'impossibilité d'assister à tout ou partie de ce stage, vous êtes invité-e à vous connecter dans la partie ""Formation""/""S'inscrire à une formation"" de VAR[MesFormations#AppLink], dans les meilleurs délais, afin de nous permettre de contacter une personne sur liste d'attente.</p>
+<p style=""text-align: justify;""> </p>
+<p style=""text-align: justify;"">Le bureau des recrutements, de la formation et des parcours professionnels vous souhaite un stage fructueux.</p>
+<p style=""text-align: justify;""> </p>
+<p style=""text-align: justify;"">Bureau des recrutements, de la formation et des parcours professionnels.<br>drh.formation@unicaen.fr </p>
+<p style=""text-align: left;""><em>P.S. : Cette convocation vaut ordre de mission</em></p>","table { border-collapse: collapse;} tr th {border-bottom:1px solid black;} td {text-align:center;}","Formation\Provider\Template"
+"DEMANDE_EXTERNE_VALIDATION_AGENT","<p>Courrier envoyé vers le responsable de l'agent lorsque celui-ci valide un demande de formation externe.</p>","mail","Demande de validation d'une demande de formation externe de VAR[AGENT#Denomination]","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p> </p>
+<p>VAR[AGENT#Prenom] VAR[AGENT#NomUsage] vient d'effectuer une demande de formation externe (hors plan de formation).<br>Vous pouvez désormais en tant que Responsable de VAR[AGENT#Prenom] VAR[AGENT#NomUsage] valider (ou refuser) cette demande.</p>
+<p> </p>
+<p>Informations à propos de la demande :</p>
+<table style=""width: 572px; height: 89px;"">
+<tbody>
+<tr>
+<td style=""width: 184.217px;""><strong>Intitulé de la formation :</strong></td>
+<td style=""width: 368.783px;""> VAR[DEMANDE#libelle]</td>
+</tr>
+<tr>
+<td style=""width: 184.217px;""><strong>Organisme formateur :</strong></td>
+<td style=""width: 368.783px;""> VAR[DEMANDE#organisme]</td>
+</tr>
+<tr>
+<td style=""width: 184.217px;""><strong>Lieu :</strong></td>
+<td style=""width: 368.783px;""> VAR[DEMANDE#lieu]</td>
+</tr>
+<tr>
+<td style=""width: 184.217px;""><strong>Début :</strong></td>
+<td style=""width: 368.783px;""> VAR[DEMANDE#debut]</td>
+</tr>
+<tr>
+<td style=""width: 184.217px;""><strong>Fin :</strong></td>
+<td style=""width: 368.783px;""> VAR[DEMANDE#fin]</td>
+</tr>
+<tr>
+<td style=""width: 184.217px;""><strong>Motivation :</strong></td>
+<td style=""width: 368.783px;""> VAR[DEMANDE#motivation]</td>
+</tr>
+</tbody>
+</table>
+<p> </p>
+<p>Vous pouvez valider (ou refuser) celle-ci en vous connectant à VAR[Macro#AppName] et en suivant le lien : VAR[Url#ValidateurDemandesExternes]</p>
+<p>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>",null,"DemandeExterne\Provider\Template"
+"DEMANDE_EXTERNE_VALIDATION_REFUS","<p>Mail envoyé lors du refus par le responsable ou la DRH</p>","mail","Refus de la demande de formation externe de VAR[AGENT#Denomination]","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p>Le demande suivante de formation externe (hors plan de formation) pour VAR[AGENT#Denomination] vient d'être refusée.</p>
+<table style=""width: 572px; height: 89px;"">
+<tbody>
+<tr>
+<td style=""width: 254.9px;""><strong>Intitulé de la formation :</strong></td>
+<td style=""width: 288.5px;""> VAR[DEMANDE#libelle]</td>
+</tr>
+<tr>
+<td style=""width: 254.9px;""><strong>Organisme formateur :</strong></td>
+<td style=""width: 288.5px;""> VAR[DEMANDE#libelle]</td>
+</tr>
+<tr>
+<td style=""width: 254.9px;""><strong>Lieu :</strong></td>
+<td style=""width: 288.5px;""> VAR[DEMANDE#lieu]</td>
+</tr>
+<tr>
+<td style=""width: 254.9px;""><strong>Début :</strong></td>
+<td style=""width: 288.5px;""> VAR[DEMANDE#debut]</td>
+</tr>
+<tr>
+<td style=""width: 254.9px;""><strong>Fin :</strong></td>
+<td style=""width: 288.5px;""> VAR[DEMANDE#fin]</td>
+</tr>
+</tbody>
+</table>
+<p>Voici le motif du refus : <br>VAR[DEMANDE#refus]</p>
+<p>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>",null,"DemandeExterne\Provider\Template"
+"DEMANDE_EXTERNE_VALIDEE_VALIDEUR_DRH","<p>Courrier envoyé vers la DRH lorsque celui-ci valide une demande de formation externe validée par un responsable.</p>","mail","Validation d'une demande de formation externe de VAR[AGENT#Denomination]","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p>Le responsable de l'agent VAR[AGENT#Denomination] vient de valider une demande de formation externe (hors plan de formation).<br>La responsable du bureau conseil carrière compétences est chargée de procéder à la validation définitive de cette demande.</p>
+<p>Informations à propos de la demande :</p>
+<table style=""width: 572px; height: 89px;"">
+<tbody>
+<tr>
+<td style=""width: 184.217px;""><strong>Intitulé de la formation :</strong></td>
+<td style=""width: 368.783px;""> VAR[DEMANDE#libelle]</td>
+</tr>
+<tr>
+<td style=""width: 184.217px;""><strong>Organisme formateur :</strong></td>
+<td style=""width: 368.783px;""> VAR[DEMANDE#organisme]</td>
+</tr>
+<tr>
+<td style=""width: 184.217px;""><strong>Lieu :</strong></td>
+<td style=""width: 368.783px;""> VAR[DEMANDE#lieu]</td>
+</tr>
+<tr>
+<td style=""width: 184.217px;""><strong>Début :</strong></td>
+<td style=""width: 368.783px;""> VAR[DEMANDE#debut]</td>
+</tr>
+<tr>
+<td style=""width: 184.217px;""><strong>Fin :</strong></td>
+<td style=""width: 368.783px;""> VAR[DEMANDE#fin]</td>
+</tr>
+<tr>
+<td style=""width: 184.217px;""><strong>Motivation :</strong></td>
+<td style=""width: 368.783px;""> VAR[DEMANDE#motivation]</td>
+</tr>
+</tbody>
+</table>
+<p> Vous pouvez valider celle-ci en vous connectant à l'application VAR[Macro#AppName] et en utilisant le lien suivant : VAR[Url#GestionDemandesExternes]</p>
+<p>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>
+<p> </p>",null,"DemandeExterne\Provider\Template"
+"DEMANDE_EXTERNE_VALIDEE_VALIDEUR_AGENT","<p>Courrier envoyé vers la DRH lorsque celui-ci valide une demande de formation externe est validé par un responsable.</p>","mail","Validation de votre demande de formation externe de votre responsable","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p> </p>
+<p>Votre responsable vient de valider votre demande de formation externe (hors plan de formation), toutefois votre demande reste soumise à la validation du bureau conseil carrière compétences.</p>
+<p><br>Informations à propos de la demande :</p>
+<table style=""width: 572px; height: 89px;"">
+<tbody>
+<tr style=""height: 35px;"">
+<td style=""width: 184.217px; height: 35px;""><strong>Intitulé de la formation :</strong></td>
+<td style=""width: 368.783px; height: 35px;""> VAR[DEMANDE#libelle]</td>
+</tr>
+<tr style=""height: 17px;"">
+<td style=""width: 184.217px; height: 17px;""><strong>Organisme formateur :</strong></td>
+<td style=""width: 368.783px; height: 17px;""> VAR[DEMANDE#organisme]</td>
+</tr>
+<tr style=""height: 17px;"">
+<td style=""width: 184.217px; height: 17px;""><strong>Lieu :</strong></td>
+<td style=""width: 368.783px; height: 17px;""> VAR[DEMANDE#lieu]</td>
+</tr>
+<tr style=""height: 17px;"">
+<td style=""width: 184.217px; height: 17px;""><strong>Début :</strong></td>
+<td style=""width: 368.783px; height: 17px;""> VAR[DEMANDE#debut]</td>
+</tr>
+<tr style=""height: 20.6px;"">
+<td style=""width: 184.217px; height: 20.6px;""><strong>Fin :</strong></td>
+<td style=""width: 368.783px; height: 20.6px;""> VAR[DEMANDE#fin]</td>
+</tr>
+<tr style=""height: 17px;"">
+<td style=""width: 184.217px; height: 17px;""><strong>Motivation :</strong></td>
+<td style=""width: 368.783px; height: 17px;""> VAR[DEMANDE#motivation]</td>
+</tr>
+</tbody>
+</table>
+<p>Vous serez prochainement informé-e par courrier électronique de la suite réservée à votre demande.</p>
+<p>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>
+<p> </p>
+<p> </p>",null,"DemandeExterne\Provider\Template"
+"FORMATION_INSCRIPTION_2_RESPONSABLE_REFUS","<p>Refus de la demande d'inscription par le responsable (Responsable &gt; Agent)</p>","mail","Refus de la demande d'inscription à la formation VAR[SESSION#libelle] du VAR[SESSION#periode] par votre responsable","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p>Votre responsable hiérarchique vient de refuser votre demande d'inscription à la formation VAR[SESSION#libelle] du VAR[SESSION#periode].</p>
+<p>Vous trouverez ci-après le motif du refus de votre inscription :<br>VAR[INSCRIPTION#justificationRefus]</p>
+<p><br>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>","table {border:1px solid black;}","Formation\Provider\Template"
+"FORMATION_INSCRIPTION_3_DRH_REFUS","<p>Refus de la demande d'inscription par la DRH (DRH &gt; Agent)</p>","mail","Refus de la demande d'inscription à la formation VAR[SESSION#libelle] du VAR[SESSION#periode] par la direction des ressources humaines.","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p><br>Bonjour,<br><br>Le bureau conseil carrière compétences vient de refuser votre demande d'inscription à la formation VAR[SESSION#libelle] du VAR[SESSION#periode].<br>Vous trouverez ci-après le motif du refus de votre inscription :</p>
+<table style=""height: 30px;"" width=""648"">
+<tbody>
+<tr>
+<td style=""width: 638px;"">VAR[INSCRIPTION#justificationRefus]</td>
+</tr>
+</tbody>
+</table>
+<p> Le bureau conseil carrière compétences se tient à votre disposition pour toute information complémentaire.</p>
+<p>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>
+<p> </p>","table {border:1px solid black;}","Formation\Provider\Template"
+"FORMATION_INSCRIPTION_3_DRH_VALIDATION","<p>Demande d'inscription à une formation (DRH &gt; Agent)</p>","mail","Validation de la demande de formation de VAR[AGENT#Denomination] à la formation VAR[SESSION#libelle] du VAR[SESSION#periode]","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],<br> <br>Bonjour,<br><br>La demande de formation de VAR[AGENT#Denomination] à VAR[SESSION#libelle] du VAR[SESSION#periode] vient d'être validée par le bureau conseil, carrière, compétences.<br>Vous recevrez une notification quelques jours avant la formation et pourrez ainsi télécharger si besoin votre convocation directement sur l'application Mes Formations (VAR[Url#AppLink])<br><br>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>",null,"Formation\Provider\Template"
+"FORMATION_INSCRIPTION_PREVENTION",null,"mail","Validation de l'inscription de VAR[AGENT#Denomination] à une formation de prévention","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p>VAR[AGENT#Denomination] vient classé en liste principale pour une formation de prévention</p>
+<table style=""width: 573px;"">
+<tbody>
+<tr>
+<td style=""width: 241.65px;"">Agent</td>
+<td style=""width: 335.35px;"">VAR[AGENT#Denomination]</td>
+</tr>
+<tr>
+<td style=""width: 241.65px;"">Date de naissance</td>
+<td style=""width: 335.35px;"">VAR[AGENT#DateNaissance]</td>
+</tr>
+<tr>
+<td style=""width: 241.65px;"">Libellé de la formation</td>
+<td style=""width: 335.35px;"">VAR[SESSION#libelle]</td>
+</tr>
+<tr>
+<td style=""width: 241.65px;"">Date de la session</td>
+<td style=""width: 335.35px;"">VAR[SESSION#periode]</td>
+</tr>
+</tbody>
+</table>
+<p> </p>
+<p>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>",null,"Formation\Provider\Template"
+"FORMATION_NOTIFICATION_SESSION_IMMINENTE","<p>Mail de rappel envoyé aux agents inscrits à une session de formation quelques jours avant la celle-ci</p>","mail","Rappel de votre inscription à la formation VAR[SESSION#libelle] du VAR[SESSION#periode]","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,<br> <br>Ce mail automatique est un rappel de votre inscription à la formation suivante :</p>
+<table style=""border-collapse: collapse; width: 71.5837%;"" border=""1""><colgroup><col style=""width: 27.0288%;""><col style=""width: 72.9713%;""></colgroup>
+<tbody>
+<tr>
+<td><strong>Libellé</strong></td>
+<td>VAR[SESSION#libelle]</td>
+</tr>
+<tr>
+<td><strong>Période</strong></td>
+<td>VAR[SESSION#periode]</td>
+</tr>
+<tr>
+<td><strong>Lieu</strong></td>
+<td>VAR[SESSION#lieu]</td>
+</tr>
+</tbody>
+</table>
+<p> </p>
+<p>En cas d'empêchement, merci de vous désinscrire via l'application VAR[Macro#AppName] (VAR[Url#AppLink])</p>
+<p>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>",null,"Formation\Provider\Template"
+"FORMATION_RAPPORT_CLOTURE_AUTOMATIQUE","<p>Mail envoyé lors de clôture automatique des inscriptions ( &gt; DRH)</p>","mail","Rapport de clôture automatique des inscriptions à une session de formation","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p><br><br>Voici la liste des sessions de formations dont les inscriptions ont été automatiquement clôturées :<br>###A REMPLACER###<br>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>",null,"Formation\Provider\Template"
+"FORMATION_RAPPORT_CONVOCATION_AUTOMATIQUE","<p>Mail envoyé lors de clôture automatique des inscriptions ( &gt; DRH)</p>","mail","Rapport de clôture automatique des inscriptions à une session de formation","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p><br><br>Voici la liste des sessions de formation dont les convocations ont été automatiquement envoyées :<br>###A REMPLACER###</p>
+<p>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>",null,"Formation\Provider\Template"
+"FORMATION_INSCRIPTION_2_RESPONSABLE_VALIDATION","<p>Demande d'inscription à une formation (Responsable &gt; DRH)</p>","mail","Validation par le responsable de structure de la demande de formation de VAR[AGENT#Denomination] à la formation VAR[SESSION#libelle] du VAR[SESSION#periode]","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,<br><br>La demande de formation de VAR[AGENT#Denomination] à VAR[SESSION#libelle] du VAR[SESSION#periode] vient d'être validée par le responsable hiérarchique.<br>Vous pouvez maintenant valider ou refuser cette demande de formation via l'application ""Mes Formations"" : </p>
+<p>VAR[URL#SessionAfficher]</p>
+<p>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>
+<p> </p>",null,"Formation\Provider\Template"
+"FORMATION_NOUVELLES_FORMATIONS","<p>TO BE WRITEN</p>","mail","TO BE WRITEN","<p>TO BE WRITEN</p>",null,"Formation\Provider\Template"
+"FORMATION_SESSION_ABSENCE","<p>Mail pour le constat d'absence envoyé aux agents</p>","mail","La session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] va est maintenant terminée","<p><strong>Université de démonstration</strong><br>DRH - Bureau des formations<br><br>le VAR[Macro#Date]<br><br> <br>Bonjour VAR[AGENT#Denomination],<br> <br>La session de formation VAR[SESSION#libelle] (VAR[SESSION#identification]) du VAR[SESSION#periode] à laquelle vous avez participé est maintenant terminée.</p>
+<p>Des absences ont été renseignées pour cette session de formation. Vous pouvez récupérer votre constat d'absence à l'adresse suivante : VAR[URL#Absence].<br>Ce constat est aussi disponible (et restera disponible) directement sur l'application VAR[MesFormations#AppLink] dans la rubrique ""Mes Formations"" &gt; ""Mes formations réalisées"".<br><br> <br>Le bureau conseil, carrière, compétences.<br>drh.formation@unicaen.fr<br><br><br><br></p>
+<p> </p>",null,"Formation\Provider\Template"
+"FORMATION_SESSION_ATTESTATION","<p>Mail pour l'attestation envoyé aux agents</p>","mail","La session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] va est maintenant terminée","<p><strong>Université de démonstration</strong><br>DRH - Bureau des formations<br><br>le VAR[Macro#Date]<br><br> <br>Bonjour VAR[AGENT#Denomination],<br> <br>La session de formation VAR[SESSION#libelle] (VAR[SESSION#identification]) du VAR[SESSION#periode] à laquelle vous avez participé est maintenant terminée.</p>
+<p>Vous pouvez récupérer votre attestation à l'adresse suivante : VAR[URL#Attestation].<br>Cette attestation est aussi disponible (et restera disponible) directement sur l'application VAR[Url#AppLink] dans la rubrique ""Mes Formations"" &gt; ""Mes formations réalisées"" ou en suivant le lien suivant : VAR[Url#MesFormations].</p>
+<p>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>
+<p><br><br><br></p>",null,"Formation\Provider\Template"
+"FORMATION_SESSION_CONVOCATION","<p>Mail de convocation envoyé aux agents</p>","mail","La session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] va bientôt commencer","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p><br>La session de formation VAR[SESSION#libelle] (VAR[SESSION#identification]) du VAR[SESSION#periode] à laquelle vous êtes inscrit va débuter prochainement.<br><br>Pour rappel, cette formation se déroulera selon le calendrier suivant :<br>VAR[SESSION#seances]<br><br>Vous pouvez retrouver sur l'application EMC2 (VAR[Url#AppLink]) votre convocation qui vaut ordre de mission.<br>N'imprimez celle-ci que si nécessaire.<br><br> <br>Le bureau conseil, carrière, compétences.<br>drh.formation@unicaen.fr<br><br> P.S.: Vous pouvez retrouver les plans d’accès et des campus sur le site de l'Université https://www.unicaen.fr/universite/decouvrir/territoire/caen</p>",null,"Formation\Provider\Template"
+"FORMATION_SESSION_DEMANDE_RETOUR","<p>Mail demandant aux agents ayant suivi la formation de remplir le formulaire</p>
+<p> </p>","mail","Demande de saisie des formulaires de retour de la formation VAR[SESSION#libelle] du VAR[SESSION#periode]","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p>Vous venez de participer à la formation VAR[SESSION#libelle] du VAR[SESSION#periode]. Afin d'obtenir votre attestation de présence, merci de compléter le questionnaire de satisfaction à votre disposition dans l'application VAR[Macro#AppName].</p>
+<p>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>
+<p> </p>",null,"Formation\Provider\Template"
+"FORMATION_SESSION_LISTE_COMPLEMENTAIRE","<p>Mail envoyé aux agents (individuellement) lors d'une inscription en liste complémentaire</p>","mail","Vous êtes inscrit sur la liste complémentaire de la session de formation VAR[SESSION#libelle]","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p>Vous êtes positionné·e sur liste complémentaire pour la formation VAR[SESSION#libelle] (VAR[SESSION#identification]) du VAR[SESSION#periode].<br>Dès qu'une place se libère, vous en serez informé-e par courrier électronique. <br><br>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>
+<p> </p>",null,"Formation\Provider\Template"
+"FORMATION_SESSION_LISTE_PRINCIPALE","<p>Mail envoyé (individuellement) aux agents de la liste principale.</p>","mail","Vous êtes inscrit sur la liste principale de la session de formation VAR[SESSION#libelle]","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p>Votre inscription à la session de formation formation VAR[SESSION#libelle] du VAR[SESSION#periode] est confirmée.<br>Vous allez prochainement recevoir par courrier électronique votre convocation et vous pourrez la télécharger via l'application Mes Formations (VAR[Url#AppLink]).</p>
+<p>Cette convocation vaut ordre de mission.</p>
+<p>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>
+<p><br><br><br></p>
+<p> </p>",null,"Formation\Provider\Template"
+"INSCRIPTION_FORMATION_DU_PLAN","<p>Bloc en haut de la page d'inscription à une formation du plan de formation sur la page des agents</p>","texte",".","<p><strong>La demande d'inscription ne vaut pas acceptation.</strong> Votre inscription est soumise à validation et en fonction des places disponibles.</p>",null,"Formation\Provider\Template"
+"INSCRIPTION_STAGE_HORS_PLAN","<p>Bloc de texte afficher en haut de la page de demande des stages hors du plan de formation</p>","texte","Stage hors plan","<p><strong>La demande d'inscription ne vaut pas acceptation.</strong> Votre inscription est soumise à validation et en fonction des places disponibles.</p>",null,"Formation\Provider\Template"
+"MES_FORMATIONS_ACCUEIL","<p>Texte de l'accueil de la partie formation</p>","texte","Mes formations","<p>Mes formations permet la gestion des formations du personnel ...</p>",null,"Application\Provider\Template"
+"MES_FORMATIONS_PROJETPERSO","<p>Texte associé à la page du projet personnel</p>","texte","Mon projet personnel","<p>Dans le cadre de la formation professionnelle tout au long de la vie, vous pouvez mobiliser différents dispositifs pour la réalisation de projets professionnels d'ordre personnel, tels que le bilan de compétences, la validation des acquis de l'expérience, le congé de Formation professionnelle ou le compte personnel de formation.<br /><br />Quel que soit le dispositif choisi, une commission a lieu deux fois par an. Vous pouvez consulter le lien intranet pour connaître l'ensemble des modalités.</p>",null,"Formation\Provider\Template"
+"PLANS_DE_FORMATION","<p>Bandeau en haut de la page Plans de formation <br><img src=""data:image/png;base64,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""></p>","texte","Plans de formation","<p>En vous abonnant aux notifications, vous recevrez un mail une fois la session ouverte et vous pourrez vous inscrire.</p>",null,"Formation\Provider\Template"
+"FORMATION_NOTIFICATION_ABONNEMENT_FORMATION","<p>Mail envoyé aux agents abonnés lors d'une nouvelle session</p>","mail","Un session de formation vient être ouverte pour l'action de formation ""VAR[SESSION#libelle]""","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p>Une nouvelle session de formation (VAR[SESSION#identification]) vient d'ouvrir pour la formation ""VAR[SESSION#libelle]"".<br>Cette session se déroulera sur la période du VAR[SESSION#periode] aux dates suivantes : VAR[SESSION#seances]</p>
+<p>La formation sera assurée par : VAR[SESSION#formateurs]</p>
+<p>Pour vous inscrire à cette formation, connectez vous à l'application VAR[Macro#AppName] (VAR[Url#AppLink]) dans l'onglet 'Formations'.</p>
+<p> </p>
+<p>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>","tr { border-top : 1px solid black; }","Formation\Provider\Template"
+"FORMATION_SESSION_EMARGEMENT","<p>Mail notifiant des listes d'émargement</p>","mail","La session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] va bientôt commencer","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p>Vous animez prochainement la formation VAR[SESSION#libelle] du VAR[SESSION#periode].<br>En vous connectant à l'application Mes Formations, vous pourrez récupérer les listes d'émargement de cette session de formation à l'adresse suivante : VAR[URL#SessionAfficher].<br><br>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>",null,"Formation\Provider\Template"
+"CONTACT",null,"texte","Contact","<p>En cas de problème technique avec l'application vous pouvez écrire à <a href=""mailto:VAR[Macro#Parametre|EMAIL;EMAIL_ASSISTANCE]"">VAR[Macro#Parametre|EMAIL;EMAIL_ASSISTANCE]</a>.</p>
+<p>Pour des demandes d'informations générales à propos de VAR[Macro#AppName] vous pouvez écrire à <a href=""mailto:VAR[Macro#Parametre|EMAIL;EMAIL_CONTACT]"">VAR[Macro#Parametre|EMAIL;EMAIL_CONTACT]</a>.</p>
+<p> </p>",null,"Application\Provider\Template"
+"FORMATION_INSCRIPTION_REFERENT","<p>Courrier envoyé vers les référents</p>","mail","VAR[AGENT#Denomination] vient de s'inscrire à une session de formation dont vous êtes référent·e","<p>VAR[AGENT#Denomination] vient de s'inscrire à une session de formation dont vous êtes référent·e</p>",null,"Formation\Provider\Template"
+"ENQUETE_EXPLICATION","<p>Texte précisant le caractère anonyme et <em>facultatif</em> de l'enquête</p>","texte","À propos des formulaires de retour d'expérience","<p>Ces formulaires sont anonymes et si vous ne souhaitez pas fournir de réponse à une des questions de l'enquête vous pouvez sélectionner la réponse ""<em>Sans avis</em>"".</p>
+<p>Vous ne pourrez récupérer l'attestation pour une formation qu'une fois l'enquête associée saisie et validée.</p>",null,"Formation\Provider\Privilege"
+"FORMATION_CHARTE",null,"texte","Charte d'engagement","<p>Je, VAR[AGENT#Denomination], m'engage à suivre les formations que je demande et à me montrer respectueux·se des personnes associées à ces formations.</p>",null,"Formation\Provider\Template"
+"DEMANDE_EXTERNE_DEMANDE_DGS","<p>Courrier électronique envoyé lorsque la demande est complète validée par les DRH mais avec un plafond de coût très élevé.<br>Ce courrier est envoyé aux personnes responsables de la gestion des formations.</p>","mail","La demande de formation hors de plan de formation de VAR[AGENT#Denomination] est  complète et attend votre validation","<p>Bonjour,</p>
+<p>La demande de formation hors de plan de formation de VAR[AGENT#Denomination] est  complète.<br>Celle-ci à un montant supérieur à VAR[Macro#Parametre|DEMANDE_EXTERNE;PLAFOND_DGS] et requiert votre validation.<br>Vous pouvez valider ou refuser celle-ci dans le parapheur des demandes de formation : VAR[URL#Parapheur].</p>
+<p>Bonne journée,</p>
+<p>VAR[Macro#AppName]<br>VAR[Url#AppLink]</p>",null,"DemandeExterne\Provider\Template"
+"FORMATION_INSCRIPTION_2_RESPONSABLE_VALIDATION_AGENT","<p>Courrier électronique envoyé vers l'agent lors de la validation par son valideur. Cette notification  l'informe que le dossier est maintenant au bureau de gestion des formations</p>","mail","Envoi de votre demande de formation au bureau de gestion de la formation","<p>Bonjour,</p>
+<p>Suite à la validation de votre valideur·euse, votre demande est maintenant examiner par la bureau de gestion de la formation.<br>Le validation du bureau de gestion de la formation validera votre demande.</p>
+<p>Bonne journée,<br>VAR[Macro#AppName]<br>VAR[Url#AppLink]</p>",null,"Formation\Provider\Template"
+"FORMATION_SESSION_ANNULEE","<p>Mail envoyé aux inscrits d'une session venant d'être annulée</p>","mail","La session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] est annulée","<p><strong>Université de démonstration</strong><br>Équipe ""Mes Formations""</p>
+<p><br>À l'Université de démonstration le VAR[Macro#Date],</p>
+<p>Bonjour,</p>
+<p> </p>
+<p>Nous vous informons que la session de formation VAR[SESSION#libelle] du VAR[SESSION#periode] pour laquelle vous étiez inscrit, est annulée.</p>
+<p>Motif d'annulation : VAR[SESSION#MotifAnnulation]</p>
+<p>Si vous souhaitez vous inscrire de nouveau sur cette même formation, vous serez alors notifié dès la réouverture d'une prochaine session.</p>
+<p>L'équipe ""Mes Formations""<br>VAR[Url#AppLink]</p>",null,"Formation\Provider\Template"
+"APROPOS",null,"texte","À propos de VAR[Macro#AppName]","<p>La version courante de VAR[Macro#AppName] est  VAR[Macro#Parametre|GLOBAL;VERSION] déployée le VAR[Macro#Parametre|GLOBAL;DATE_MAJ].<br><br></p>
+<p>Corrections de divers bugs :</p>
+<ul>
+<li>[1.0.4] Correction du blocage des inscriptions bloquées par des volumes et non des séances</li>
+<li>[1.0.2] Rectification du template utiliser pour prévenir les agent·es de la validation de leur responsable</li>
+<li>[1.0.2] Retrait de mention oublié de EMC2</li>
+<li>[1.0.1] Désabonnements à une action de formation ;</li>
+<li>[1.0.1] Meilleures gestions des référents non complètement déclarés ;</li>
+<li>[1.0.1] Retrait de la vérification de la disponibilité des stagiaires extérieurs.</li>
+</ul>
+<p>Nouvelles fonctionnalités :</p>
+<ul>
+<li>[1.0.4] Interface d'extraction basée sur les inscriptions</li>
+<li>[1.0.4] Déclaration de motif d'annulation de session pour traçabilité et personnaliser le message d'annulation</li>
+<li>[1.0.4] Changement de la gestion des désistements (affichage séparé + indicateur)</li>
+<li>[1.0.3] Possibilité de révoquer une remonté SI de la chaîne de validation</li>
+</ul>
+<p>Amélioration de qualité de vie : </p>
+<ul>
+<li>[1.0.4] Amélioration de l'index des gestionnaires de formation</li>
+<li>[1.0.3] Amélioration du temps de réponse et changement du listing affiché pour les responsables de structure</li>
+<li>[1.0.3] Retrait des affichages de justifications inopportuns lors de l'annulation d'une inscription</li>
+<li>[1.0.2] Amélioration du temps de réponse et changement du listing affiché pour les valideur·euses</li>
+<li>[1.0.1] Ajout d'écrans pour la gestion des abonnements pour les gestionnaires de formations</li>
+</ul>",null,"Application\Provider\Template"
+"FORMATION_SESSION_RAPPEL_DEMANDE_VALIDATION","<p>Courrier de rappel de la demande de validation d'une inscription à une formation du plan de formation</p>","mail","RAPPEL Vous n'avez pas encore validé la demande de formation de VAR[AGENT#Denomination]","<p>Bonjour,</p>
+<p>Vous n'avez pas encore validé la demande de formation de VAR[AGENT#Denomination] pour la session VAR[SESSION#libelle] du  VAR[SESSION#periode].<br>Veuillez vous rendre dans votre tableau de bord en tant que Valideur·euse sur l'application VAR[Macro#AppName] (VAR[Url#AppLink]) afin de statuer sur cette demande.</p>
+<p>Bonne journée,<br>L'application VAR[Macro#AppName]</p>",null,"Formation\Provider\Template"
+"DEMANDE_EXTERNE_DEMANDE_DRH","<p>Courrier électronique envoyé lorsque la demande est complète, validée par le responsable de formation et d'un montant dépassant le plafond de coût élevé.<br>Ce courrier est envoyé aux personnes ayant le rôle direction des ressources humaines</p>","mail","La demande de formation hors de plan de formation de VAR[AGENT#Denomination] est  complète et demande votre validation","<p>Bonjour,</p>
+<p>La demande de formation hors de plan de formation de VAR[AGENT#Denomination] est  complète.<br>Celle-ci à un montant supérieur à VAR[Macro#Parametre|DEMANDE_EXTERNE;PLAFOND_DRH] et requiert votre validation.<br>Vous pouvez valider ou refuser celle-ci dans le parapheur des demandes de formation : VAR[URL#Parapheur].</p>
+<p>Bonne journée,</p>
+<p>VAR[Macro#AppName]<br>VAR[Url#AppLink]</p>",null,"DemandeExterne\Provider\Template"
+"DEMANDE_EXTERNE_DEMANDE_COMPLETE","<p>Courrier électronique envoyé lorsque la demande est complète et complètement validée.<br>Ce courrier est envoyé à l'agent·e</p>","mail","Votre demande de formation hors plan de formation est totalement validée","<p>Bonjour,</p>
+<p>Votre demande de formation hors plan de formation est totalement validée.<br><br>Bonne journée,<br>VAR[Macro#AppName]<br>VAR[Url#AppLink]</p>",null,"DemandeExterne\Provider\Template"
+"DEMANDE_EXTERNE_DEMANDE_VALIDEE","<p>Courrier électronique envoyé vers l'agent·e lorsque la demande est complètement validée</p>","mail","Votre demande de formation hors plan de formation vient d'être totalement validée.","<p>Bonjour,</p>
+<p>Votre demande de formation hors plan de formation vient d'être totalement validée.<br>Vous serez recontactez prochainement.</p>",null,"DemandeExterne\Provider\Privilege"
+"FORMATION_EMARGEMENT","<p>Feuille d'émargement</p>","pdf","Emargement_Session_VAR[SESSION#id].pdf","<h2 style=""text-align: center;"">Feuille d'émargement</h2>
+<p><strong>Atelier</strong><br>Libellé : VAR[SESSION#libelle]<br>Période : VAR[SESSION#periode]</p>
+<p><br><strong>Formateur·trices<br></strong>VAR[SESSION#FormateursAvecSignature]</p>
+<p><strong>Séance</strong><br>Lieu : VAR[SEANCE#lieu]<br>Date : VAR[SEANCE#periode]</p>
+<p><br><strong>Liste des inscrit·es<br></strong>VAR[SESSION#InscritsAvecSignature]</p>","table.bordered { border-collapse: collapse; } table.bordered  td { border: 1px solid black; } table.bordered  th { border: 1px solid black; }","Formation\Provider\Template"
diff --git a/database/sources/csv/unicaen_validation_type.csv b/database/sources/csv/unicaen_validation_type.csv
new file mode 100644
index 0000000000000000000000000000000000000000..358ecf2d95cae9b6cc7e31649f5456303e1b0e94
--- /dev/null
+++ b/database/sources/csv/unicaen_validation_type.csv
@@ -0,0 +1,6 @@
+'code';'libelle';'refusable'
+"FORMATION_DEMANDE_AGENT","Validation d'un demande de formation externe par l'agent",false
+"FORMATION_DEMANDE_RESPONSABLE","Validation d'un demande de formation externe par le responsable de l'agent",false
+"FORMATION_DEMANDE_DRH","Validation d'un demande de formation externe par la DRH",false
+"FORMATION_DEMANDE_REFUS","Refus d'une demande externe",false
+"CHARTE_SIGNEE","Signature de la charte de formation",false
diff --git a/database/sources/fichier_nature.php b/database/sources/fichier_nature.php
new file mode 100644
index 0000000000000000000000000000000000000000..ea957be881254526271fda3a8bcb2c533dbf9c42
--- /dev/null
+++ b/database/sources/fichier_nature.php
@@ -0,0 +1,24 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select f.code, f.libelle, f.description
+//from fichier_nature f
+
+$csvFile = fopen("./database/sources/csv/fichier_nature.csv", "r");
+
+$array = []; $first = true;
+while (($item = fgetcsv($csvFile)) !== FALSE) {
+    if ($first) $first = false;
+    else {
+        $instance = [
+            'code' => $item[0],
+            'libelle' => $item[1],
+            'description' => ($item[2] === 'null')?null:$item[2],
+        ];
+        $array["fichier_nature"][] = $instance;
+    }
+}
+
+fclose($csvFile);
+
+return $array;
\ No newline at end of file
diff --git a/database/sources/formation_session_type.php b/database/sources/formation_session_type.php
new file mode 100644
index 0000000000000000000000000000000000000000..29dd31786ae226cd9031d196621d353f1fb34458
--- /dev/null
+++ b/database/sources/formation_session_type.php
@@ -0,0 +1,23 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select s.libelle, s.description
+//from formation_session_type s
+
+$csvFile = fopen("./database/sources/csv/formation_session_type.csv", "r");
+
+$array = []; $first = true;
+while (($item = fgetcsv($csvFile)) !== FALSE) {
+    if ($first) $first = false;
+    else {
+        $instance = [
+            'libelle' => $item[0],
+            'description' => ($item[1] === 'null')?null:$item[1],
+        ];
+        $array["formation_session_type"][] = $instance;
+    }
+}
+
+fclose($csvFile);
+
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_enquete_enquete.php b/database/sources/unicaen_enquete_enquete.php
new file mode 100644
index 0000000000000000000000000000000000000000..a06d1dbefff7f933f3db5e842c19a3797fead61b
--- /dev/null
+++ b/database/sources/unicaen_enquete_enquete.php
@@ -0,0 +1,24 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select ee.code, ee.titre, ee.description
+//from unicaen_enquete_enquete ee
+
+$csvFile = fopen("./database/sources/csv/unicaen_enquete_enquete.csv", "r");
+
+$array = []; $first = true;
+while (($item = fgetcsv($csvFile)) !== FALSE) {
+    if ($first) $first = false;
+    else {
+        $instance = [
+            'code' => $item[0],
+            'titre' => $item[1],
+            'description' => $item[2],
+        ];
+        $array["unicaen_enquete_enquete"][] = $instance;
+    }
+}
+
+fclose($csvFile);
+
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_enquete_groupe.php b/database/sources/unicaen_enquete_groupe.php
new file mode 100644
index 0000000000000000000000000000000000000000..7535cd5ffcfed6952659a3fb72e484627315e868
--- /dev/null
+++ b/database/sources/unicaen_enquete_groupe.php
@@ -0,0 +1,28 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select ee.code as enquete_id, eg.code, eg.libelle, eg.description, eg.ordre
+//from unicaen_enquete_groupe eg
+//join unicaen_enquete_enquete ee on eg.enquete_id = ee.id
+//order by eg.ordre
+
+$csvFile = fopen("./database/sources/csv/unicaen_enquete_groupe.csv", "r");
+
+$array = []; $first = true;
+while (($item = fgetcsv($csvFile)) !== FALSE) {
+    if ($first) $first = false;
+    else {
+        $instance = [
+            'enquete_id' => $item[0],
+            'code' => $item[1],
+            'libelle' => $item[2],
+            'description' => $item[3],
+            'ordre' => $item[4],
+        ];
+        $array["unicaen_enquete_groupe"][] = $instance;
+    }
+}
+
+fclose($csvFile);
+
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_enquete_question.php b/database/sources/unicaen_enquete_question.php
new file mode 100644
index 0000000000000000000000000000000000000000..bcf01bbf10c72aeb6069df9d3cb7814739c97359
--- /dev/null
+++ b/database/sources/unicaen_enquete_question.php
@@ -0,0 +1,31 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select ee.code as enquete_id, eg.code as groupe_id, eq.libelle, eq.description, eq.ordre, eq.has_note, eq.has_commentaire
+//from unicaen_enquete_question eq
+//join unicaen_enquete_groupe eg on eq.groupe_id = eg.id
+//join unicaen_enquete_enquete ee on eq.enquete_id = ee.id
+//order by eg.ordre
+
+$csvFile = fopen("./database/sources/csv/unicaen_enquete_question.csv", "r");
+
+$array = []; $first = true;
+while (($item = fgetcsv($csvFile)) !== FALSE) {
+    if ($first) $first = false;
+    else {
+        $instance = [
+            'enquete_id' => $item[0],
+            'groupe_id' => $item[1],
+            'libelle' => $item[2],
+            'description' => $item[3],
+            'ordre' => $item[4],
+            'has_note' => ($item[5] === true)? 't' : 'f',
+            'has_commentaire' => ($item[6] === true)? 't' : 'f',
+        ];
+        $array["unicaen_enquete_question"][] = $instance;
+    }
+}
+
+fclose($csvFile);
+
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_etat_categorie.php b/database/sources/unicaen_etat_categorie.php
new file mode 100644
index 0000000000000000000000000000000000000000..57200dce501fb224af3469fa6cc6a06ab6e0e866
--- /dev/null
+++ b/database/sources/unicaen_etat_categorie.php
@@ -0,0 +1,27 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select c.code, c.libelle, c.icone, c.couleur, c.ordre
+//from unicaen_etat_categorie c
+//order by c.ordre
+
+$csvFile = fopen("./database/sources/csv/unicaen_etat_categorie.csv", "r");
+
+$array = []; $first = true;
+while (($item = fgetcsv($csvFile)) !== FALSE) {
+    if ($first) $first = false;
+    else {
+        $instance = [
+            'code' => $item[0],
+            'libelle' => $item[1],
+            'icone' => $item[2],
+            'couleur' => $item[3],
+            'ordre' => $item[4],
+        ];
+        $array["unicaen_etat_categorie"][] = $instance;
+    }
+}
+
+fclose($csvFile);
+
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_etat_type.php b/database/sources/unicaen_etat_type.php
new file mode 100644
index 0000000000000000000000000000000000000000..ccf8d529666c7202460804d8297477fcba01c6ef
--- /dev/null
+++ b/database/sources/unicaen_etat_type.php
@@ -0,0 +1,47 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select c.code, t.code, t.libelle, t.icone, t.couleur, t.ordre
+//from unicaen_etat_type t
+//join unicaen_etat_categorie c on t.categorie_id = c.id
+//order by c.ordre
+
+$data = [
+    ["FORMATION_SESSION","CONVOCATION","Convocations envoyées","fas fa-file-contract","#fcaf3e","40"],
+    ["FORMATION_SESSION","SESSION_ANNULEE","Session de formation annulée","fas fa-times","#a40000","100"],
+    ["FORMATION_SESSION","EN_CREATION","En cours de saisie","fas fa-edit","#75507b","10"],
+    ["FORMATION_SESSION","ATTENTE_RETOUR","Demande des retours","far fa-comments","#ce5c00","50"],
+    ["FORMATION_SESSION","FERMEE","Session fermée","far fa-check-square","#4e9a06","60"],
+    ["FORMATION_SESSION","INSCRIPTION_FERMEE","Inscription close","fas fa-book","#204a87","30"],
+    ["FORMATION_SESSION","INSCRIPTION_OUVERTE","Inscription ouverte","fas fa-book-open","#729fcf","20"],
+    ["DEMANDE_EXTERNE","DEMANDE_EXTERNE_RESP","Validation du responsable de l'agent","fas fa-user-tie","#edd400","30"],
+    ["DEMANDE_EXTERNE","DEMANDE_EXTERNE_REDACTION","Demande en cours de rédaction","fas fa-edit","#75507b","10"],
+    ["DEMANDE_EXTERNE","DEMANDE_EXTERNE_AGENT","Validation de l'agent","fas fa-user","#f57900","20"],
+    ["DEMANDE_EXTERNE","DEMANDE_EXTERNE_TERMINEE","Demande de formation externe traitée","far fa-check-square","#4e9a06","100"],
+    ["DEMANDE_EXTERNE","DEMANDE_EXTERNE_VALIDEUR","Validation du valideur·euses","fas fa-user-tie","#edd400","30"],
+    ["DEMANDE_EXTERNE","DEMANDE_EXTERNE_RESPONSABLE","Demande validée par le·la responsable des formations","fas fa-user-check","#8dcf3a","37"],
+    ["DEMANDE_EXTERNE","DEMANDE_EXTERNE_DRH","Validation par le direction des ressources humaines","fas fa-user-check","#5fae45","40"],
+    ["DEMANDE_EXTERNE","DEMANDE_EXTERNE_DGS","Demande validée par la direction générale des services","fas fa-user-check","#228b22","70"],
+    ["DEMANDE_EXTERNE","DEMANDE_EXTERNE_GESTIONNAIRE","Demande validée par un·e gestionnaire des formations","fas fa-clipboard-check","#c3ec90","36"],
+    ["DEMANDE_EXTERNE","DEMANDE_EXTERNE_REJETEE","Demande de formation externe rejetée","fas fa-times","#a40000","110"],
+    ["FORMATION_INSCRIPTION","FORMATION_INSCRIPTION_DRH","Demande validée","far fa-check-square","#4e9a06","30"],
+    ["FORMATION_INSCRIPTION","FORMATION_INSCRIPTION_RESPONSABLE","Demande validée par le responsable","fas fa-user-tie","#edd400","20"],
+    ["FORMATION_INSCRIPTION","FORMATION_INSCRIPTION_DEMANDE","Demande d'inscription en cours de validation","fas fa-user","#f57900","10"],
+    ["FORMATION_INSCRIPTION","FORMATION_INSCRIPTION_REFUSER","Demande refusée","fas fa-times","#a40000","35"],
+    ["FORMATION_INSCRIPTION","FORMATION_INSCRIPTION_DESISTEMENT","Désistement","fas fa-ban","#75507b","40"],
+];
+
+
+$array = [];
+foreach ($data as $item) {
+    $instance = [
+        'categorie_id' => $item[0],
+        'code' => $item[1],
+        'libelle' => $item[2],
+        'icone' => $item[3],
+        'couleur' => $item[4],
+        'ordre' => $item[5],
+    ];
+    $array["unicaen_etat_type"][] = $instance;
+}
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_evenement_etat.php b/database/sources/unicaen_evenement_etat.php
new file mode 100644
index 0000000000000000000000000000000000000000..0cd371d2fb3ddb76686bc65bb698f2f2fd9129f7
--- /dev/null
+++ b/database/sources/unicaen_evenement_etat.php
@@ -0,0 +1,25 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select c.code, c.libelle, c.refusable
+//from unicaen_validation_type c
+//order by c.code
+
+$csvFile = fopen("./database/sources/csv/unicaen_evenement_etat.csv", "r");
+
+$array = []; $first = true;
+while (($item = fgetcsv($csvFile)) !== FALSE) {
+    if ($first) $first = false;
+    else {
+        $instance = [
+            'code' => $item[0],
+            'libelle' => $item[1],
+            'refusable' => ($item[2] === true) ? "t":"f",
+        ];
+        $array["unicaen_evenement_etat"][] = $instance;
+    }
+}
+
+fclose($csvFile);
+
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_evenement_type.php b/database/sources/unicaen_evenement_type.php
new file mode 100644
index 0000000000000000000000000000000000000000..e0f1c7a3e25c3067c71a34ac6b99f742deb00737
--- /dev/null
+++ b/database/sources/unicaen_evenement_type.php
@@ -0,0 +1,26 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select e.code, e.libelle, e.description, e.parametres, e.recursion
+//from unicaen_evenement_type e
+
+$csvFile = fopen("./database/sources/csv/unicaen_evenement_type.csv", "r");
+
+$array = []; $first = true;
+while (($item = fgetcsv($csvFile)) !== FALSE) {
+    if ($first) $first = false;
+    else {
+        $instance = [
+            'code' => $item[0],
+            'libelle' => $item[1],
+            'description' => $item[2],
+            'parametres' => $item[3],
+            'recursion' => $item[4],
+        ];
+        $array["unicaen_evenement_type"][] = $instance;
+    }
+}
+
+fclose($csvFile);
+
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_parametre_categorie.php b/database/sources/unicaen_parametre_categorie.php
new file mode 100644
index 0000000000000000000000000000000000000000..d41ebb40a41b463255fd92196edaaa3a4bf079ea
--- /dev/null
+++ b/database/sources/unicaen_parametre_categorie.php
@@ -0,0 +1,31 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select c.code, c.libelle, c.description, c.ordre
+//from unicaen_parametre_categorie c
+//order by c.ordre
+
+$data = [
+    ["GLOBAL","Paramètres globaux",null,"1"],
+    ["PLAN_FORMATION","Affichage des plans de formation courant","<p>Plan de formation courant</p>","100"],
+    ["DEMANDE_EXTERNE","Paramètres associés aux demandes hors plan de formation",null,"100"],
+    ["EMAIL","Paramètres liés aux adresses électroniques",null,"500"],
+    ["CHARTE","Gestion de la charte",null,"1000"],
+    ["FORMATION","Paramètres liés aux formations",null,"2000"],
+    ["STAGE","Paramètres liés aux stages",null,"3000"],
+    ["INSCRIPTION","Paramètre liés aux inscriptions",null,"4000"],
+    ["AUTRE","Autres paramètres",null,"10000"],
+];
+
+
+$array = [];
+foreach ($data as $item) {
+    $instance = [
+        'code' => $item[0],
+        'libelle' => $item[1],
+        'description' => $item[2],
+        'ordre' => $item[3],
+    ];
+    $array["unicaen_parametre_categorie"][] = $instance;
+}
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_parametre_parametre.php b/database/sources/unicaen_parametre_parametre.php
new file mode 100644
index 0000000000000000000000000000000000000000..acb61125e94e9ab6525215a8877240461f628988
--- /dev/null
+++ b/database/sources/unicaen_parametre_parametre.php
@@ -0,0 +1,61 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select c.code, p.code, p.libelle, p.description, p.valeurs_possibles, p.ordre
+//from unicaen_parametre_parametre p
+//join unicaen_parametre_categorie c on p.categorie_id = c.id
+//order by c.ordre, p.ordre
+
+$data = [
+    ["GLOBAL","VERSION","Version courante",null,"String","1"],
+    ["GLOBAL","EMAIL_ASSISTANCE","Adresse électronique de l'assistance",null,"String","10"],
+    ["GLOBAL","DATE_MAJ","Date de la montée de version",null,"String","11"],
+    ["GLOBAL","EMAIL_CONTACT","Adresse électronique de contact",null,"String","20"],
+    ["GLOBAL","APP_NAME","Nom affiché de l'application",null,"String","30", "Mes Formations"],
+    ["GLOBAL","APP_LOGO","Logo associé à l'application",null,"String","40"],
+    ["GLOBAL","INSTALL_PATH","Chemin d'installation (utiliser pour vérification)",null,"String","100",'/var/www/html'],
+    ["GLOBAL","MAIL_DRH_FORMATION","Adresse électronique du bureau de gestion des formations",null,"String","100"],
+    ["GLOBAL","FAVICON","Chemin vers le favicon",null,"String","110"],
+    ["GLOBAL","MAIL_PERSONNEL","Adresse électronique du personnel",null,"String","120"],
+    ["GLOBAL","LOGO","Logo de l'établissement","Le logo de l'établissement qui figurera sur les documents","String","1010"],
+    ["GLOBAL","LIBELLE","Libellé de l'établissement","Le libellé de l'établissement","String","1020"],
+    ["GLOBAL","SOUSLIBELLE","Sous libellé","Un complément au libellé de l'établissement (par exemple : Direction des ressources humaines <br> Formation)","String","1030"],
+    ["PLAN_FORMATION","NAVIGATION_ACTIVEE","Affichage du menu de navigation rapide",null,"Boolean","10"],
+    ["PLAN_FORMATION","AXE_AFFICHE","Utilisation des axes",null,"Boolean","20"],
+    ["DEMANDE_EXTERNE","PLAFOND_DRH","Montant plafond nécessitant une validation DRH",null,"Number","100"],
+    ["DEMANDE_EXTERNE","PLAFOND_DGS","Montant plafond nécessitant une validation DGS",null,"Number","200"],
+    ["EMAIL","EMAIL_ASSISTANCE","Adresse électronique pour l'assistance",null,"String","10"],
+    ["EMAIL","EMAIL_CONTACT","Adresse électronique de contact",null,"String","20"],
+    ["EMAIL","MAIL_PERSONNEL","Mail pour contact le personnel",null,"String","100"],
+    ["EMAIL","MAIL_DRH_FORMATION","Adresse électronique du bureau gérant les formations",null,"String","1000"],
+    ["CHARTE","CHARTE_ACTIVE","Charte obligatoire",null,"Boolean","10"],
+    ["CHARTE","CHARTE_TEMPLATE","Template de la charte",null,"String","20"],
+    ["FORMATION","INSCRIPTION_PLAFOND_ANNUEL","Plafond en heures",null,"Number","110"],
+    ["FORMATION","CONVOCATION_SUPERIEUR_COPIE","Mise en copie des supérieur·es hiérarchiques lors de convocation",null,"Boolean","120"],
+    ["FORMATION","AUTO_FERMETURE","Délai pour fermeture automatique des inscriptions (en jours)",null,"String","400"],
+    ["FORMATION","AUTO_CONVOCATION","Délai pour convocation automatique des inscrits (en jours)",null,"String","410"],
+    ["FORMATION","AUTO_RAPPEL","Delai pour rappel au agent (en jours)",null,"Number","415"],
+    ["FORMATION","AUTO_RETOUR","Délai pour la demande de retour",null,"Number","420"],
+    ["FORMATION","AUTO_CLOTURE","Délai pour la cloture de la session (en jours)",null,"Number","430"],
+    ["FORMATION","NB_PLACE_PRINCIPALE","Nombre de place par défaut en liste principale",null,"Number","1000"],
+    ["FORMATION","NB_PLACE_COMPLEMENTAIRE","Nombre de place par défaut en liste complémentaire",null,"Number","1100"],
+    ["STAGE","DEMANDE_EXTERNE_PLAFOND","Plafond du montant des formations externes exigeant validation",null,"Number","3000"],
+    ["AUTRE","URL_PPP","Lien vers intranet Projet professionnel personnel",null,"String","200"],
+    ["AUTRE","CODE_ENQUETE","Enquête active","Code de l'enquête active","String","10000", "FORMATION_2024"],
+];
+
+
+$array = [];
+foreach ($data as $item) {
+    $instance = [
+        'categorie_id' => $item[0],
+        'code' => $item[1],
+        'libelle' => $item[2],
+        'description' => $item[3],
+        'valeurs_possibles' => $item[4],
+        'ordre' => $item[5],
+    ];
+    if (isset($item[6])) { $instance['valeur'] = $item[6]; }
+    $array["unicaen_parametre_parametre"][] = $instance;
+}
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_privilege_categorie.php b/database/sources/unicaen_privilege_categorie.php
new file mode 100644
index 0000000000000000000000000000000000000000..3167918b56b6a6d3d01097e3e18a961a254e8f74
--- /dev/null
+++ b/database/sources/unicaen_privilege_categorie.php
@@ -0,0 +1,67 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select c.code, c.libelle, c.namespace, c.ordre
+//from unicaen_privilege_categorie c
+//order by c.ordre
+
+$data = [
+    ["agent", "Gestion des agents", "Agent\Provider\Privilege", "100"],
+    ["stagiaireexterne", "Gestion des stagiaires externes", "Formation\Provider\Privilege", "150"],
+    ["structure", "Gestion des structures", "Structure\Provider\Privilege", "200"],
+    ["formation", "Gestion des formations", "Formation\Provider\Privilege", "300"],
+    ["formationdomaine", "Gestion des domaines (Formation)", "Formation\Provider\Privilege", "309"],
+    ["axe", "Gestion des axes de formation", "Formation\Provider\Privilege", "310"],
+    ["formationinstance", "Gestion des formations - Actions de formation", "Formation\Provider\Privilege", "313"],
+    ["formationinstancepresence", "Gestion des formations - Présences", "Formation\Provider\Privilege", "314"],
+    ["formationinstanceinscrit", "Gestion des formations - Inscrits", "Formation\Provider\Privilege", "316"],
+    ["formationinstancefrais", "Gestion des formations - Frais", "Formation\Provider\Privilege", "317"],
+    ["formationinstancedocument", "Gestion des formations - Documents", "Formation\Provider\Privilege", "319"],
+    ["sessiontype", "Gestion des types de session", "Formation\Provider\Privilege", "330"],
+    ["formateur", "Gestion des formateurs", "Formation\Provider\Privilege", "350"],
+    ["referent", "Gestion des réferents", "Formation\Provider\Privilege", "360"],
+    ["formationlieu", "Gestion des lieux", "Formation\Provider\Privilege", "360"],
+    ["inscription", "Gestion des inscriptions", "Formation\Provider\Privilege", "400"],
+    ["indicateur", "Gestions des indicateurs", "UnicaenIndicateur\Provider\Privilege", "800"],
+    ["lagaf", "Importation depuis les données de LAGAF", "Formation\Provider\Privilege", "1000"],
+    ["planformation", "Gestion du plan de formation", "Formation\Provider\Privilege", "1000"],
+    ["projetpersonnel", "Gestion du projet personnel", "Formation\Provider\Privilege", "1050"],
+    ["formationabonnement", "Gestion du abonnement aux formations", "Formation\Provider\Privilege", "1100"],
+    ["configuration", "Configuration", "Application\Provider\Privilege", "2000"],
+    ["coutprevisionnel", "Gestion des coûts prévisionnel", "Formation\Provider\Privilege", "2000"],
+    ["export", "Exportation", "Application\Provider\Privilege", "3000"],
+    ["demandeexterne", "Gestion des demandes de formations externes", "DemandeExterne\Provider\Privilege", "4000"],
+    ["question", "Enquête - Gestions des questions", "UnicaenEnquete\Provider\Privilege", "5000"],
+    ["enquete", "Enquête - Gestion des enquêtes", "UnicaenEnquete\Provider\Privilege", "5000"],
+    ["einstance", "Enquête - Gestion des instances", "UnicaenEnquete\Provider\Privilege", "5000"],
+    ["egroupe", "Enquête - Gestions des groupes de questions", "UnicaenEnquete\Provider\Privilege", "5000"],
+    ["utilisateur", "Gestion des utilisateurs", "UnicaenUtilisateur\Provider\Privilege", "10000"],
+    ["role", "Gestion des rôles", "UnicaenUtilisateur\Provider\Privilege", "10000"],
+    ["mail", "UnicaenMail - Gestion des mails", "UnicaenMail\Provider\Privilege", "10000"],
+    ["privilege", "Gestion des privilèges", "UnicaenPrivilege\Provider\Privilege", "11000"],
+    ["documentmacro", "UnicaenRenderer - Gestion des macros", "UnicaenRenderer\Provider\Privilege", "11010"],
+    ["documenttemplate", "UnicaenRenderer - Gestion des templates", "UnicaenRenderer\Provider\Privilege", "11020"],
+    ["documentcontenu", "UnicaenRenderer - Gestion des contenus", "UnicaenRenderer\Provider\Privilege", "11030"],
+    ["parametre", "UnicaenParametre - Gestion des paramètres", "UnicaenParametre\Provider\Privilege", "12000"],
+    ["parametrecategorie", "UnicaenParametre - Gestion des catégories de paramètres", "UnicaenParametre\Provider\Privilege", "12000"],
+    ["evenementtype", "Gestion des événements - Type", "UnicaenEvenement\Provider\Privilege", "15000"],
+    ["evenementinstance", "Gestion des événements - Instance", "UnicaenEvenement\Provider\Privilege", "15000"],
+    ["evenementetat", "Gestion des événements - État", "UnicaenEvenement\Provider\Privilege", "15000"],
+    ["abonnement", "Gestion des abonnements", "UnicaenIndicateur\Provider\Privilege", "17000"],
+    ["tableaudebord", "Gestion des tableau de bord", "UnicaenIndicateur\Provider\Privilege", "17000"],
+    ["etat", "Unicaen - Gestion des états - État", "UnicaenEtat\Provider\Privilege", "20000"],
+    ["validationinstance", "Gestion des instances de validations", "UnicaenValidation\Provider\Privilege", "40000"],
+    ["validationtype", "Gestion des types de validations", "UnicaenValidation\Provider\Privilege", "40010"],
+];
+
+$array = [];
+foreach ($data as $item) {
+    $instance = [
+        'code' => $item[0],
+        'libelle' => $item[1],
+        'namespace' => $item[2],
+        'ordre' => $item[3],
+    ];
+    $array["unicaen_privilege_categorie"][] = $instance;
+}
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_privilege_privilege.php b/database/sources/unicaen_privilege_privilege.php
new file mode 100644
index 0000000000000000000000000000000000000000..1c067a1af812b76f422c165caf847772dd37fb92
--- /dev/null
+++ b/database/sources/unicaen_privilege_privilege.php
@@ -0,0 +1,247 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select c.code, p.code, p.libelle, p.ordre
+//from unicaen_privilege_privilege p
+//join unicaen_privilege_categorie c on p.categorie_id = c.id
+//order by c.ordre, p.ordre
+
+$data = [
+    ["agent", "agent_index", "Accéder à l'index", "0"],
+    ["agent", "agent_afficher", "Afficher un agent", "10"],
+    ["agent", "agent_modifier", "Modifier un agent", "30"],
+    ["agent", "agent_gerer_valideur_importe", "Gérer les valideur·deuses importé·es", "60"],
+    ["agent", "agent_gerer_valideur_saisi", "Gérer les valideur·deuses saisi·es", "70"],
+    ["agent", "agent_rechercher", "Rechercher un agent", "100"],
+    ["agent", "agent_mesagents", "Menu - Mes Agent·es -", "200"],
+    ["stagiaireexterne", "stagiaireexterne_index", "Accéder à l'index", "10"],
+    ["stagiaireexterne", "stagiaireexterne_afficher", "Afficher", "20"],
+    ["stagiaireexterne", "stagiaireexterne_ajouter", "Ajouter", "30"],
+    ["stagiaireexterne", "stagiaireexterne_modifier", "Modifier", "40"],
+    ["stagiaireexterne", "stagiaireexterne_historiser", "Historiser/Restaurer", "50"],
+    ["stagiaireexterne", "stagiaireexterne_supprimer", "Supprimer", "60"],
+    ["stagiaireexterne", "stagiaireexterne_rechercher", "Rechercher", "100"],
+    ["structure", "structure_index", "Accéder à l'index des structures", "0"],
+    ["structure", "structure_afficher", "Afficher les structures", "10"],
+    ["structure", "structure_messtructures", "Menu - Mes structures -", "100"],
+    ["formation", "formation_acces", "Accés à l'index des formations", "10"],
+    ["formation", "formation_afficher", "Afficher une formation", "20"],
+    ["formation", "formation_ajouter", "Ajouter une formation", "30"],
+    ["formation", "formation_modifier", "Modifier une formation", "40"],
+    ["formation", "formation_historiser", "Historiser/Restaurer une formation", "50"],
+    ["formation", "formation_supprimer", "Supprimer une formation", "60"],
+    ["formationdomaine", "formationdomaine_index", "Accéder à l'index", "10"],
+    ["formationdomaine", "formationdomaine_afficher", "Afficher", "20"],
+    ["formationdomaine", "formationdomaine_ajouter", "Ajouter", "30"],
+    ["formationdomaine", "formationdomaine_modifier", "Modifier", "40"],
+    ["formationdomaine", "formationdomaine_historiser", "Historiser/Restaurer", "50"],
+    ["formationdomaine", "formationdomaine_supprimer", "Supprimer", "60"],
+    ["axe", "axe_index", "Accéder à l'index", "10"],
+    ["axe", "axe_afficher", "Afficher", "15"],
+    ["axe", "axe_ajouter", "Ajouter", "20"],
+    ["axe", "axe_modifier", "Modifier", "30"],
+    ["axe", "axe_historiser", "Historiser/Restaurer", "40"],
+    ["axe", "axe_supprimer", "Supprimer", "50"],
+    ["formationinstance", "formationinstance_index", "Accéder à l'index", "5"],
+    ["formationinstance", "formationinstance_afficher", "Afficher une action de formation", "10"],
+    ["formationinstance", "formationinstance_ajouter", "Ajouter une action de formation", "20"],
+    ["formationinstance", "formationinstance_modifier", "Modifier une action de formation", "30"],
+    ["formationinstance", "formationinstance_historiser", "Historiser/Restaurer une action de formation", "40"],
+    ["formationinstance", "formationinstance_supprimer", "Supprimer une instance de formation", "50"],
+    ["formationinstance", "formationinstance_afficher_inscription", "Afficher/Exporter les inscriptions à une instance de formation", "100"],
+    ["formationinstance", "formationinstance_gerer_inscription", "Gérer les inscriptions à une instance de formation", "101"],
+    ["formationinstance", "formationinstance_gerer_seance", "Gérer les séances d'une instance de formation", "110"],
+    ["formationinstance", "formationinstance_gerer_formateur", "Gérer les formations d'une instance de formation", "120"],
+    ["formationinstance", "formationinstance_annuler", "Annuler une session", "130"],
+    ["formationinstancepresence", "formationinstancepresence_afficher", "Afficher les présences d'une action de formation", "10"],
+    ["formationinstancepresence", "formationinstancepresence_modifier", "Modifier les présences d'une action de formation", "30"],
+    ["formationinstanceinscrit", "formationinstanceinscrit_modifier", "Modifier un inscrit à une action de formation", "10"],
+    ["formationinstanceinscrit", "inscription_valider_superieure", "Valider une demande en tant que supérieure hiérarchique", "20"],
+    ["formationinstanceinscrit", "inscription_valider_gestionnaire", "Valider une inscription en tant que gestionnaire", "30"],
+    ["formationinstanceinscrit", "inscription_supprimer", "Supprimer une inscription", "60"],
+    ["formationinstancefrais", "formationinstancefrais_afficher", "Afficher les frais d'un agent", "10"],
+    ["formationinstancefrais", "formationinstancefrais_modifier", "Modifier les frais d'un agent", "20"],
+    ["formationinstancedocument", "formationinstancedocument_convocation", "Génération des convocations", "10"],
+    ["formationinstancedocument", "formationinstancedocument_emargement", "Génération des listes d'émargement", "20"],
+    ["formationinstancedocument", "formationinstancedocument_attestation", "Génération des attestations de formation", "30"],
+    ["formationinstancedocument", "formationinstancedocument_absence", "Génération des constats d'absence", "35"],
+    ["formationinstancedocument", "formationinstancedocument_historique", "Génération des historiques de formation", "40"],
+    ["sessiontype", "sessiontype_index", "Accéder à l'index", "10"],
+    ["sessiontype", "sessiontype_afficher", "Afficher", "20"],
+    ["sessiontype", "sessiontype_ajouter", "Ajouter", "30"],
+    ["sessiontype", "sessiontype_modifier", "Modifier", "40"],
+    ["sessiontype", "sessiontype_historiser", "Historiser/Restaurer", "50"],
+    ["sessiontype", "sessiontype_supprimer", "Supprimer", "60"],
+    ["formateur", "formateur_index", "Accéder à l'index", "10"],
+    ["formateur", "formateur_afficher", "Afficher", "15"],
+    ["formateur", "formateur_ajouter", "Ajouter", "20"],
+    ["formateur", "formateur_modifier", "Modifier", "30"],
+    ["formateur", "formateur_historiser", "Historiser/Restaurer", "40"],
+    ["formateur", "formateur_supprimer", "Supprimer", "50"],
+    ["formateur", "formateur_mes_sessions", "Accéder à la page - Mes Sessions -", "100"],
+    ["referent", "referent_index", "Accéder à l'index", "10"],
+    ["formationlieu", "formationlieu_index", "Accéder à l'index", "10"],
+    ["referent", "referent_afficher", "Afficher", "15"],
+    ["referent", "referent_ajouter", "Ajouter", "20"],
+    ["formationlieu", "formationlieu_afficher", "Afficher", "20"],
+    ["formationlieu", "formationlieu_ajouter", "Ajouter", "30"],
+    ["referent", "referent_modifier", "Modifier", "30"],
+    ["formationlieu", "formationlieu_modifier", "Modifier", "40"],
+    ["referent", "referent_historiser", "Historiser/Restaurer", "40"],
+    ["referent", "referent_supprimer", "Supprimer", "50"],
+    ["formationlieu", "formationlieu_historiser", "Historiser/Restaurer", "50"],
+    ["formationlieu", "formationlieu_supprimer", "Supprimer", "60"],
+    ["referent", "referent_mes_sessions", "Accéder à la page - Mes Sessions -", "100"],
+    ["inscription", "inscription_afficher", "Afficher", "20"],
+    ["inscription", "inscription_enquete", "Répondre et Valider l'enquete", "110"],
+    ["indicateur", "indicateur_index", "Accéder à l'index", "10"],
+    ["indicateur", "afficher_indicateur", "Afficher un indicateur", "20"],
+    ["indicateur", "editer_indicateur", "Éditer un indicateur", "30"],
+    ["indicateur", "detruire_indicateur", "Effacer un indicateur", "40"],
+    ["indicateur", "indicateur_mes_indicateurs", "Affichage du menu - Mes Indicateurs -", "100"],
+    ["lagaf", "import_lagaf", "Lancer l'importation", "1"],
+    ["planformation", "planformation_courant", "Accéder au plan de formation courant", "10"],
+    ["planformation", "planformation_index", "Accéder à l'index", "20"],
+    ["planformation", "planformation_afficher", "Afficher un plan de formation", "30"],
+    ["planformation", "planformation_ajouter", "Ajouter un plan de formation", "40"],
+    ["planformation", "planformation_modifier", "Modifier un plan de formation", "50"],
+    ["planformation", "planformation_historiser", "Historiser/Restaurer", "55"],
+    ["planformation", "planformation_supprimer", "Supprimer un plan de formation", "60"],
+    ["projetpersonnel", "projetpersonnel_acces", "Accéder au projet personnel", "10"],
+    ["formationabonnement", "formationabonnement_abonner", "S'abonner une formation", "0"],
+    ["formationabonnement", "formationabonnement_desabonner", "Se desinscrire d'une formation", "10"],
+    ["formationabonnement", "formationabonnement_liste_agent", "Lister les abonnements par agents", "20"],
+    ["formationabonnement", "formationabonnement_liste_formation", "Lister les abonnements par foramtions", "40"],
+    ["formationabonnement", "formationabonnement_gerer", "Gérer les abonnements", "50"],
+    ["coutprevisionnel", "coutprevisionnel_index", "Accéder à l'index", "10"],
+    ["coutprevisionnel", "coutprevisionnel_afficher", "Afficher", "20"],
+    ["coutprevisionnel", "coutprevisionnel_ajouter", "Ajouter", "30"],
+    ["coutprevisionnel", "coutprevisionnel_modifier", "Modifier", "40"],
+    ["coutprevisionnel", "coutprevisionnel_historiser", "Historiser/Restaurer", "50"],
+    ["coutprevisionnel", "coutprevisionnel_supprimer", "Supprimer", "60"],
+    ["configuration", "configuration_notification", "Paramétrage des notifications", "100"],
+    ["export", "export_index", "Accéder à l'index des exportations", "10"],
+    ["demandeexterne", "demandeexterne_index", "Accéder l'index", "10"],
+    ["demandeexterne", "demandeexterne_afficher", "Afficher une demande", "20"],
+    ["demandeexterne", "demandeexterne_ajouter", "Ajouter une demande", "30"],
+    ["demandeexterne", "demandeexterne_modifier", "Modifier une demande", "40"],
+    ["demandeexterne", "demandeexterne_historiser", "Historiser/restaurer une demande", "50"],
+    ["demandeexterne", "demandeexterne_supprimer", "Supprimer une demande", "60"],
+    ["demandeexterne", "demandeexterne_parapheur", "Accéder au parapheur", "100"],
+    ["demandeexterne", "demandeexterne_valider_agent", "Valider une demande en tant qu'agent", "110"],
+    ["demandeexterne", "demandeexterne_valider_valideur", "Valider en tant que valideur·euse", "120"],
+    ["demandeexterne", "demandeexterne_valider_gestionnaire", "Valider en tant que gestionnaire des formations", "125"],
+    ["demandeexterne", "demandeexterne_valider_responsable", "Valider en tant que responsable des formations", "127"],
+    ["demandeexterne", "demandeexterne_valider_drh", "Valider en tant que direction des ressources humaines", "130"],
+    ["demandeexterne", "demandeexterne_valider_dgs", "Valider en tant que direction générale des services", "135"],
+    ["demandeexterne", "demandeexterne_gerer", "Gérer la demande externe", "140"],
+    ["einstance", "instance_index", "Accéder à l'index", "10"],
+    ["question", "question_index", "Accéder à l'index", "10"],
+    ["egroupe", "groupe_index", "Accéder à l'index", "10"],
+    ["enquete", "enquete_index", "Accéder à l'index", "10"],
+    ["enquete", "enquete_afficher", "Afficher", "20"],
+    ["egroupe", "groupe_afficher", "Afficher", "20"],
+    ["question", "question_afficher", "Afficher", "20"],
+    ["einstance", "instance_afficher", "Afficher", "20"],
+    ["enquete", "enquete_ajouter", "Ajouter", "30"],
+    ["einstance", "instance_ajouter", "Ajouter", "30"],
+    ["egroupe", "groupe_ajouter", "Ajouter", "30"],
+    ["question", "question_ajouter", "Ajouter", "30"],
+    ["einstance", "instance_modifier", "Modifier", "40"],
+    ["question", "question_modifier", "Modifier", "40"],
+    ["enquete", "enquete_modifier", "Modifier", "40"],
+    ["egroupe", "groupe_modifier", "Modifier", "40"],
+    ["egroupe", "groupe_historiser", "Historiser/Restaurer", "50"],
+    ["einstance", "instance_historiser", "Historiser/Restaurer", "50"],
+    ["question", "question_historiser", "Historiser/Restaurer", "50"],
+    ["enquete", "enquete_historiser", "Historiser/Restaurer", "50"],
+    ["egroupe", "groupe_supprimer", "Supprimer", "60"],
+    ["einstance", "instance_supprimer", "Supprimer", "60"],
+    ["question", "question_supprimer", "Supprimer", "60"],
+    ["enquete", "enquete_supprimer", "Supprimer", "60"],
+    ["role", "role_afficher", "Afficher les rôles", "10"],
+    ["mail", "mail_index", "Affichage de l'index", "10"],
+    ["utilisateur", "utilisateur_afficher", "Afficher un utilisateur", "10"],
+    ["utilisateur", "utilisateur_ajouter", "Ajouter/Supprimer un utilisateur", "20"],
+    ["role", "role_modifier", "Modifier un rôle", "20"],
+    ["mail", "mail_afficher", "Afficher un mail", "20"],
+    ["role", "role_effacer", "Effacer un rôle", "30"],
+    ["mail", "mail_reenvoi", "Ré-envoi d'un mail", "30"],
+    ["utilisateur", "utilisateur_changerstatus", "Changer le statut d'un d'utilisateur", "30"],
+    ["utilisateur", "utilisateur_modifierrole", "Modifier les rôles associés à un utilisateur", "40"],
+    ["mail", "mail_supprimer", "Suppression d'un mail", "40"],
+    ["mail", "mail_test", "Envoi d'un mail de test", "100"],
+    ["utilisateur", "utilisateur_rechercher", "Rechercher", "100"],
+    ["privilege", "privilege_voir", "Afficher les privilèges", "10"],
+    ["privilege", "privilege_ajouter", "Ajouter un privilège", "20"],
+    ["privilege", "privilege_modifier", "Modifier un privilège", "30"],
+    ["privilege", "privilege_supprimer", "Supprimer un privilège", "40"],
+    ["privilege", "privilege_affecter", "Affecter un privilège", "50"],
+    ["documentmacro", "documentmacro_index", "Afficher l'index des macros", "10"],
+    ["documentmacro", "documentmacro_ajouter", "Ajouter une macro", "20"],
+    ["documentmacro", "documentmacro_modifier", "Modifier une macro", "30"],
+    ["documentmacro", "documentmacro_supprimer", "Supprimer une macro", "40"],
+    ["documenttemplate", "documenttemplate_index", "Afficher l'index des contenus", "10"],
+    ["documenttemplate", "documenttemplate_afficher", "Afficher un template", "20"],
+    ["documenttemplate", "documenttemplate_ajouter", "Ajouter un contenu", "30"],
+    ["documenttemplate", "documenttemplate_modifier", "Modifier un contenu", "40"],
+    ["documenttemplate", "documenttemplate_supprimer", "Supprimer un contenu", "50"],
+    ["documentcontenu", "documentcontenu_index", "Accès à l'index des contenus", "10"],
+    ["documentcontenu", "documentcontenu_afficher", "Afficher un contenu", "20"],
+    ["documentcontenu", "documentcontenu_supprimer", "Supprimer un contenu", "30"],
+    ["parametrecategorie", "parametrecategorie_index", "Affichage de l'index des paramètres", "10"],
+    ["parametre", "parametre_afficher", "Afficher un paramètre", "10"],
+    ["parametre", "parametre_afficher_masquer", "Afficher un paramètre masqué", "15"],
+    ["parametre", "parametre_ajouter", "Ajouter un paramètre", "20"],
+    ["parametrecategorie", "parametrecategorie_afficher", "Affichage des détails d'une catégorie", "20"],
+    ["parametrecategorie", "parametrecategorie_ajouter", "Ajouter une catégorie de paramètre", "30"],
+    ["parametre", "parametre_modifier", "Modifier un paramètre", "30"],
+    ["parametrecategorie", "parametrecategorie_modifier", "Modifier une catégorie de paramètre", "40"],
+    ["parametre", "parametre_supprimer", "Supprimer un paramètre", "50"],
+    ["parametrecategorie", "parametrecategorie_supprimer", "Supprimer une catégorie de paramètre", "60"],
+    ["parametre", "parametre_valeur", "Modifier la valeur d'un parametre", "100"],
+    ["evenementinstance", "instance_consultation", "instance - consultation", "10"],
+    ["evenementtype", "type_consultation", "type - consultation", "10"],
+    ["evenementetat", "etat_voir", "état - consultation", "10"],
+    ["evenementtype", "type_ajout", "type - ajout", "20"],
+    ["evenementetat", "etat_ajouter", "état - ajout", "20"],
+    ["evenementinstance", "instance_ajout", "instance - ajout", "20"],
+    ["evenementtype", "type_edition", "type - édition", "30"],
+    ["evenementetat", "etat_modifier", "état - édition", "30"],
+    ["evenementinstance", "instance_edition", "instance - édition", "30"],
+    ["evenementtype", "type_suppression", "type - suppression", "40"],
+    ["evenementetat", "etat_supprimer", "état - suppression", "40"],
+    ["evenementinstance", "instance_suppression", "instance - suppression", "40"],
+    ["evenementinstance", "instance_traitement", "instance - traitement", "100"],
+    ["tableaudebord", "afficher_tableaudebord", "Afficher un tableau de bord", "4"],
+    ["tableaudebord", "editer_tableaudebord", "Éditer un tableau de bord", "5"],
+    ["tableaudebord", "detruire_tableaudebord", "Effacer un tableau de bord", "6"],
+    ["abonnement", "afficher_abonnement", "Afficher un abonnement", "110"],
+    ["abonnement", "editer_abonnement", "Modifier un abonnement", "120"],
+    ["abonnement", "detruire_abonnement", "Supprimer un abonnement", "130"],
+    ["etat", "etat_index", "Afficher l'index des états", "10"],
+    ["etat", "etat_ajouter", "Ajouter un état", "20"],
+    ["etat", "etat_modifier", "Modifier un état", "30"],
+    ["etat", "etat_historiser", "Historiser/Restaurer un etat", "40"],
+    ["etat", "etat_detruire", "Supprimer un état", "50"],
+    ["validationinstance", "validationinstance_afficher", "Affichage des instances de validations", "10"],
+    ["validationinstance", "validationinstance_modifier", "Modifier une instance de validation", "20"],
+    ["validationinstance", "validationinstance_historiser", "Historiser/restaurer une instance de validation", "40"],
+    ["validationinstance", "validationinstance_detruire", "Détruire une isntance de validation", "50"],
+    ["validationtype", "validationtype_afficher", "Affichage des types de validations", "10"],
+    ["validationtype", "validationtype_modifier", "Modifier un type de validation", "30"],
+    ["validationtype", "validationtype_historiser", "Historiser/restaurer un type de validation", "40"],
+    ["validationtype", "validationtype_detruire", "Détruire un type de validation", "50"],
+];
+
+$array = [];
+foreach ($data as $item) {
+    $instance = [
+        'categorie_id' => $item[0],
+        'code' => $item[1],
+        'libelle' => $item[2],
+        'ordre' => $item[3],
+    ];
+    $array["unicaen_privilege_privilege"][] = $instance;
+}
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_privilege_privilege_role_linker.php b/database/sources/unicaen_privilege_privilege_role_linker.php
new file mode 100644
index 0000000000000000000000000000000000000000..9c43e87ab641b9e70ad900420f8b0b4e0c4c81b8
--- /dev/null
+++ b/database/sources/unicaen_privilege_privilege_role_linker.php
@@ -0,0 +1,32 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+// todo
+
+
+$privileges = [
+    ["utilisateur","utilisateur_changerstatus",],
+    ["utilisateur","utilisateur_modifierrole",],
+    ["utilisateur","utilisateur_rechercher",],
+    ["utilisateur","utilisateur_afficher",],
+    ["utilisateur","utilisateur_ajouter",],
+    ["role","role_modifier",],
+    ["role","role_effacer",],
+    ["role","role_afficher",],
+    ["privilege","privilege_voir",],
+    ["privilege","privilege_ajouter",],
+    ["privilege","privilege_modifier",],
+    ["privilege","privilege_supprimer",],
+    ["privilege","privilege_affecter"],
+];
+
+$array = [];
+foreach ($privileges as $item) {
+    $instance = [
+        'categorie_id' => $item[0],
+        'privilege_id' => $item[1],
+        'role_id' => "Administrateur·trice technique",
+    ];
+    $array["unicaen_privilege_privilege_role_linker"][] = $instance;
+}
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_renderer_macro.php b/database/sources/unicaen_renderer_macro.php
new file mode 100644
index 0000000000000000000000000000000000000000..f6fd55247cc272c73f294bf8cee15aa598bc4050
--- /dev/null
+++ b/database/sources/unicaen_renderer_macro.php
@@ -0,0 +1,25 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select r.code, r.description, r.variable_name, r.methode_name
+//from unicaen_renderer_macro r
+
+$csvFile = fopen("./database/sources/csv/unicaen_renderer_macro.csv", "r");
+
+$array = []; $first = true;
+while (($item = fgetcsv($csvFile)) !== FALSE) {
+    if ($first) $first = false;
+    else {
+        $instance = [
+            'code' => $item[0],
+            'description' => ($item[1] === 'null')?null:$item[1],
+            'variable_name' => $item[2],
+            'methode_name' => $item[3],
+        ];
+        $array["unicaen_renderer_macro"][] = $instance;
+    }
+}
+
+fclose($csvFile);
+
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_renderer_template.php b/database/sources/unicaen_renderer_template.php
new file mode 100644
index 0000000000000000000000000000000000000000..3dea7bab365307b080b9d0e5fb45ae3a498bc359
--- /dev/null
+++ b/database/sources/unicaen_renderer_template.php
@@ -0,0 +1,28 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select r.code, r.description, r.document_type, r.document_sujet, r.document_corps, r.document_css, r.namespace
+//from unicaen_renderer_template r
+
+$csvFile = fopen("./database/sources/csv/unicaen_renderer_template.csv", "r");
+
+$array = []; $first = true;
+while (($item = fgetcsv($csvFile)) !== FALSE) {
+    if ($first) $first = false;
+    else {
+        $instance = [
+            'code' => $item[0],
+            'description' => ($item[1] === 'null')?null:$item[1],
+            'document_type' => $item[2],
+            'document_sujet' => $item[3],
+            'document_corps' => $item[4],
+            'document_css' => ($item[5] === 'null')?null:$item[5],
+            'namespace' => ($item[6] === 'null')?null:$item[6],
+        ];
+        $array["unicaen_renderer_template"][] = $instance;
+    }
+}
+
+fclose($csvFile);
+
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_utilisateur_role.php b/database/sources/unicaen_utilisateur_role.php
new file mode 100644
index 0000000000000000000000000000000000000000..43b577361747bf65952d4ce7938dfdd3335ff3d8
--- /dev/null
+++ b/database/sources/unicaen_utilisateur_role.php
@@ -0,0 +1,35 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select r.role_id, r.libelle,
+//case (r.is_auto) when true then 't' else 'f' end,
+//r.description
+//from unicaen_utilisateur_role r
+
+$data = [
+    ["Administrateur·trice technique", "Administrateur·trice technique", "f", null],
+    ["Administrateur·trice fonctionnel·le", "Administrateur·trice fonctionnel·le", "f", null],
+    ["Stagiaire externe", "Stagiaire externe", "t", "Stagiaire qui n'est pas un·e agent·e connu·e"],
+    ["Observateur·trice", "Observateur·trice", "f", null],
+    ["Direction Générale des Services", "Direction Générale des Services", "f", "Rôle données aux personnes de la direction générale des services (notamment pour la validation des demandes externes de montant très élevé)"],
+    ["Responsable de structure", "Responsable de structure", "t",null],
+    ["Direction des Ressources Humaines", "Direction des Ressources Humaines", "f", "Rôle attribué aux personnes de la Direction des Ressources Humaines (notamment pour la validation des demandes externes de montant élevé)"],
+    ["Gestionnaire de formation", "Gestionnaire de formation", "f",null],
+    ["Responsable de formation", "Responsable de formation", "f", "Rôle attribué aux personnes en charge du bureau des formations."],
+    ["Référent·e", "Référent·e", "t", "Rôle attribué aux personnes référentes d'un domaine de formations particulier (par exemple: Prévention, documentation)"],
+    ["Formateur·trice", "Formateur·trice", "t", null],
+    ["Validateur·trice", "Valideur·euse", "t",null],
+    ["Agent", "Agent·e", "t",null],
+];
+
+$array = [];
+foreach ($data as $item) {
+    $instance = [
+        'role_id' => $item[0],
+        'libelle' => $item[1],
+        'is_auto' => $item[2],
+        'description' => $item[3],
+    ];
+    $array["unicaen_utilisateur_role"][] = $instance;
+}
+return $array;
\ No newline at end of file
diff --git a/database/sources/unicaen_utilisateur_role_linker.php b/database/sources/unicaen_utilisateur_role_linker.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b01468b03873ab4baa43951354a5184ba9a8d1e
--- /dev/null
+++ b/database/sources/unicaen_utilisateur_role_linker.php
@@ -0,0 +1,28 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select
+//u.username, r.role_id
+//from unicaen_utilisateur_role_linker l
+//join unicaen_utilisateur_user u on l.user_id = u.id
+//join unicaen_utilisateur_role r on l.role_id = r.id
+//where (u.password = 'application' OR u.username = 'admin')
+
+$data = [
+    ["blanche", "Direction Générale des Services"],
+    ["bruno", "Direction des Ressources Humaines"],
+    ["admin", "Administrateur·trice technique"],
+
+    ["metivier", "Administrateur·trice technique"]
+];
+
+
+$array = [];
+foreach ($data as $item) {
+    $instance = [
+        'user_id' => $item[0],
+        'role_id' => $item[1],
+    ];
+    $array["unicaen_utilisateur_role_linker"][] = $instance;
+}
+return $array;
diff --git a/database/sources/unicaen_utilisateur_user.php b/database/sources/unicaen_utilisateur_user.php
new file mode 100644
index 0000000000000000000000000000000000000000..76733a3a748c6e9469e9d0121ce0cf83138b3211
--- /dev/null
+++ b/database/sources/unicaen_utilisateur_user.php
@@ -0,0 +1,35 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select
+//u.username, u.display_name, u.email, u.password,
+//case (u.state) when true then 't' else 'f' end
+//from unicaen_utilisateur_user u
+//where password <> 'ldap'
+
+$data = [
+    ["Mes Formations","Mes Formations",null,"local","false", 0],
+    ["admin","Local Adminstrateur","local-admin@univ-demo.fr","\$2y$14\$D.o5.K1hKlL2ZbhVL3M2su9RnscuxgsA01fkPowTcs0vpulcJE1o2","t"],
+    ["grey","Grey",'grey@univ-demo.fr',"application","f"],
+    ["aoi","Aoi","aoi@univ-demo.fr","application","t"],
+    ["olive","Olive","olive@unicaen.fr","application","t"],
+    ["blanche","Blanche","blanche@univ-demo.fr","application","t"],
+    ["bruno","Bruno","bruno@univ-demo.fr","application","t"],
+    ["violette","Violette","violette@univ-demo.fr","application","t"],
+
+    ["metivier","Jean-Philippe METIVIER","jean-philippe@unicaen.fr","ldap","t"],
+];
+
+$array = [];
+foreach ($data as $item) {
+    $instance = [
+        'username' => $item[0],
+        'display_name' => $item[1],
+        'email' => $item[2],
+        'password' => $item[3],
+        'state' => $item[4],
+    ];
+    if (isset($item[5])) { $instance['id'] = $item[5]; }
+    $array["unicaen_utilisateur_user"][] = $instance;
+}
+return $array;
diff --git a/database/sources/unicaen_validation_type.php b/database/sources/unicaen_validation_type.php
new file mode 100644
index 0000000000000000000000000000000000000000..3c42eb33c05aff23607160efc7b0f2c54acf5dfa
--- /dev/null
+++ b/database/sources/unicaen_validation_type.php
@@ -0,0 +1,24 @@
+<?php
+
+/** Requête utilisée pour la collecte des données **/
+//select e.code, e.libelle, e.description
+//from unicaen_validation_type e
+
+$csvFile = fopen("./database/sources/csv/unicaen_validation_type.csv", "r");
+
+$array = []; $first = true;
+while (($item = fgetcsv($csvFile)) !== FALSE) {
+    if ($first) $first = false;
+    else {
+        $instance = [
+            'code' => $item[0],
+            'libelle' => $item[1],
+            'refusable' => ($item[2] === true)? "t": "f",
+        ];
+        $array["unicaen_validation_type"][] = $instance;
+    }
+}
+
+fclose($csvFile);
+
+return $array;
\ No newline at end of file
diff --git a/documentation/SQL/release_1.0.7.sql b/documentation/SQL/release_1.0.7.sql
new file mode 100644
index 0000000000000000000000000000000000000000..26bded8c1e32b114eee007d247d7a3fddff8a2d1
--- /dev/null
+++ b/documentation/SQL/release_1.0.7.sql
@@ -0,0 +1,25 @@
+
+INSERT INTO unicaen_privilege_categorie (code, libelle, ordre, namespace) VALUES
+('sessiontype', 'Gestion des types de session', 330, 'Formation\Provider\Privilege');
+INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
+WITH d(code, lib, ordre) AS (
+    SELECT 'sessiontype_index', 'Accéder à l''index', 10 UNION
+    SELECT 'sessiontype_afficher', 'Afficher', 20 UNION
+    SELECT 'sessiontype_ajouter', 'Ajouter', 30 UNION
+    SELECT 'sessiontype_modifier', 'Modifier', 40 UNION
+    SELECT 'sessiontype_historiser', 'Historiser/Restaurer', 50 UNION
+    SELECT 'sessiontype_supprimer', 'Supprimer', 60
+)
+SELECT cp.id, d.code, d.lib, d.ordre
+FROM d
+JOIN unicaen_privilege_categorie cp ON cp.CODE = 'sessiontype';
+
+
+INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
+WITH d(code, lib, ordre) AS (
+    SELECT 'parametre_afficher_masquer', 'Afficher un paramètre masqué', 15
+
+)
+SELECT cp.id, d.code, d.lib, d.ordre
+FROM d
+JOIN unicaen_privilege_categorie cp ON cp.CODE = 'parametre';
\ No newline at end of file
diff --git a/documentation/SQL/release_1.1.0.sql b/documentation/SQL/release_1.1.0.sql
new file mode 100644
index 0000000000000000000000000000000000000000..ac835934a7b30cefe59b8ea1eac21eac7e5c8c9a
--- /dev/null
+++ b/documentation/SQL/release_1.1.0.sql
@@ -0,0 +1,41 @@
+INSERT INTO unicaen_etat_type (categorie_id, code, libelle, icone, couleur, ordre)
+WITH d(code, libelle, icone, couleur, ordre) AS (
+    SELECT 'DEMANDE_EXTERNE_VALIDEUR', 'Validation du valideur·euses', 'fas fa-user-tie', '#edd400', 30 UNION
+    SELECT 'DEMANDE_EXTERNE_RESPONSABLE', 'Demande validée par le·la responsable des formations', 'fas fa-user-check', '#8dcf3a', 37 UNION
+    SELECT 'DEMANDE_EXTERNE_DGS', 'Demande validée par la direction générale des services', 'fas fa-user-check', '#228b22', 70
+)
+SELECT cp.id, d.code, d.libelle, d.icone, d.couleur, d.ordre
+FROM d
+         JOIN unicaen_etat_categorie cp ON cp.CODE = 'DEMANDE_EXTERNE';
+
+
+-- Pour Rouen
+
+INSERT INTO unicaen_parametre_categorie (code, libelle, ordre, description) VALUES
+('CHARTE', 'Gestion de la charte', 1000, null);
+INSERT INTO unicaen_parametre_parametre(CATEGORIE_ID, CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE)
+WITH d(CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE) AS (
+    SELECT 'CHARTE_ACTIVE', 'Charte obligatoire', null, 'Boolean', 10 UNION
+    SELECT 'CHARTE_TEMPLATE', 'Template de la charte',null, 'String', 20
+
+)
+SELECT cp.id, d.CODE, d.LIBELLE, d.DESCRIPTION, d.VALEURS_POSSIBLES,  d.ORDRE
+FROM d
+JOIN unicaen_parametre_categorie cp ON cp.CODE = 'CHARTE';
+
+INSERT INTO unicaen_parametre_parametre(CATEGORIE_ID, CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE)
+WITH d(CODE, LIBELLE, DESCRIPTION, VALEURS_POSSIBLES, ORDRE) AS (
+    SELECT 'APP_LOGO', 'Logo de l''application', null, 'String', 100
+)
+SELECT cp.id, d.CODE, d.LIBELLE, d.DESCRIPTION, d.VALEURS_POSSIBLES,  d.ORDRE
+FROM d
+         JOIN unicaen_parametre_categorie cp ON cp.CODE = 'GLOBAL';
+
+
+INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
+WITH d(code, lib, ordre) AS (
+    select 'inscription_annuler', 'Annuler l''inscription', 60
+)
+SELECT cp.id, d.code, d.lib, d.ordre
+FROM d
+JOIN unicaen_privilege_categorie cp ON cp.CODE = 'inscription';
\ No newline at end of file
diff --git a/documentation/docs/install.md b/documentation/docs/install.md
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/documentation/release/1.1.0.md b/documentation/release/1.1.0.md
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/install.md b/install.md
new file mode 100644
index 0000000000000000000000000000000000000000..165260cacadead9bce96789b9f8bff9a9b80dba3
--- /dev/null
+++ b/install.md
@@ -0,0 +1,224 @@
+Installation
+===
+----
+dernière mise à jour : 16/12/2024
+
+## Préambule
+
+Dans la suite nous supposerons que si vous avez un proxy, vous l'avez au préalable paramètré sur le serveur.
+
+```bash
+export http_proxy=proxy_url:proxy_port
+export https_proxy=proxy_url:proxy_port
+```
+
+## Récupération du code
+
+Le code du projet est déposé sur le serveur git et est opensource : `https://git.unicaen.fr/open-source/mes-formations.git`.
+Par conséquent, vous n'avez pas besoin d'être authentifier pour cloner le projet.
+
+``` 
+user@kmes-formations-crashtest:/var/www/html$ git clone https://git.unicaen.fr/open-source/mes-formations.git html
+```
+
+## Installation des biliothèques 
+
+Les bibliothèques que nous utilisaons vont demander l'installation de quelques bibliothèque php.
+À savoir :
+- php8.2 : `àpt install php8.2-fpm` ????
+- pgsql : `apt install php8.2-pgsql`
+- bcmath : `apt install php8.2-bcmath`
+- ldap: `apt install php8.2-ldap`
+- simplexml: `apt install php8.2-simplexml`
+- gd: : `apt install php8.2-gd`
+- curl: : `apt install php8.2-curl`
+
+Pour installer, les biliothèques du projet.
+
+```bash
+composer update
+```
+
+Pour information sur le serveur de test, nous avions la version suivante
+
+```bash 
+composer about
+#Composer - Dependency Manager for PHP - version 2.8.4
+```
+
+## Fichiers locaux de configuration
+
+Les fichiers de configuration locaux vous permettent de paramètrer et d'ajuster le comportement de l'application. 
+Des copies (avec l'extension `.dist`) sont mises à disposition dans le répertoire des fichiers de configuration de l'application (`./config/autoload`)
+Vous devez les renommer et paramètrer ceux-ci en fonction de votre installation.
+```bash
+mv ./config/autoload/FICHIER.local.php.dist ./config/autoload/FICHIER.local.php
+...
+```
+
+Voici la liste des fichiers :
+- `database.local.php` : paramètrage des base de données 
+- `local.php` : configuration du *reporting* des erreurs 
+- `unicaen-app.local.php` : paramètrage de quelques liens du pieds de page
+- `unicaen-authentification.local.php` : mode d'authentification et usrupation
+- `unicaen-evenement.local.php` : temps maximal d'execution des événements 
+- `unicaen-fichier.local.php` : paramètrage du répertoire d'upload
+- `unicaen-ldap.local.php` : paramètrage de connextion au ldap et des attributs exploités
+- `synchro.local.php` : paramètrage de la synchronisation des données du SI vers Mes Formations
+- `unicaen-mail.local.php` : paramètrage de l'envoi de courrier électronique
+
+### Compléments à propos de `database.local.php`
+ 
+Des constantes en haut de ce fichier sont là pour simplifier le paramètrage.
+
+Attention, deux bases de données sont à renseigner : la base de l'application (variables préfixées par `DB_`) et la base contenant les données du SI (variables préfixées par `DB_SYNCHRO_`).  
+
+### Compléments à propos de `unicaen-authentification.local.php`
+
+Ce fichier permet de paramettrer les moyens d'authentifications fournit aux usagers.
+Ils peuvent être activés/désactivés et ordonnés comme vous le souhaités.
+
+Parmi ces modes, on retrouve :
+- CAS
+- ldap et comptes locaux
+- shiboleth
+
+La liste des utilisateurs autorisés à usurper est aussi défini dans ce fichier dans la clef `usurpation_allowed_usernames`. 
+Il faut préciser dans ce tableau la liste des identifiants de connexion des utilisateurs ayant ce privilège. 
+
+### Compléments à propos de `unicaen-ldap.local.php`
+
+Ce fichier contient des redondances, un travail est en cours pour factoriser celles-ci.
+
+### Compléments à propos de `synchro.local.php`
+
+La documentation de cette partie peut-être trouvée ici : [connecteur.md](connecteur.md)
+
+### Compléments à propos de `unicaen-mail.local.php`
+
+On retrouve dans ce fichier la liste des groupes de mail avec à chaque fois les données suivantes :
+- `do_not_send` si à *true* alors les mails ne seront pas envoyés
+- `redirect` si à *true* alors tous les mails seront redirigés aux adresses renseignées dans `redirect_to`
+- `redirect_to` un tableau contenant les adresses vers qui redigierer les mails
+- `subject_prefix` préfixe qui sera ajouté en entête des mails `[subject_prefix]`
+- `from_name` le nom affiché comme expéditeur
+- `from_email` l'adresse présenté comme expéditrice (est recommandée ici une adresse sans quota ou whitelistée)
+
+## Repertoires de travail de l'application
+
+L'application a besoin de deux répertoires de stockage :
+1. data/DoctrineORMModule/Proxy : zone d'échange pour les interactions avec la base de données
+2. upload : zone de dépôt de l'application
+
+###  data/DoctrineORMModule/Proxy
+
+Ce répertoire est fixe dans l'application mais ne devrait pas être trop volumineux.
+
+```bash
+mkdir -p data/DoctrineORMModule/Proxy
+chmod 777 data/DoctrineORMModule/Proxy
+```
+
+### upload
+
+Ce répertoire peut être déplacé à l'endroit que vous le souhaiter. Son chemin est défini dans le fichier de configuration `onfig/autoload/unicaen-fichier.local.php`.
+Attention, celui-ci peut devenir rapidement volumineux (prévoyer un stockage de quelques dizaines de Go.
+
+Même procédure de création :
+```bash
+mkdir -p mon_repertoire_upload
+chmod 777 mon_repertoire_upload
+```
+
+## Apache/Nginx
+
+Vous devez maintenant réaliser la configuration de votre serveur web.
+Décalarer le site  
+
+Fichier `mes-formations.mon-etab.fr.conf` (exemple à adapter): 
+```
+<VirtualHost 127.0.0.1:80>
+  ServerName localhost
+  ErrorLog ${APACHE_LOG_DIR}/error.log
+  CustomLog ${APACHE_LOG_DIR}/access.log combined
+</VirtualHost>
+
+<VirtualHost *:80>
+  RewriteEngine on
+  RewriteCond %{HTTPS} !=on
+  RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [NE,R,L]
+  ErrorLog ${APACHE_LOG_DIR}/error.log
+  CustomLog ${APACHE_LOG_DIR}/access.log combined
+</VirtualHost>
+
+<VirtualHost *:443>
+  ServerName mes-formations.mon-etab.fr
+  ServerAdmin mail@mon-etab.fr
+  DocumentRoot /var/www/html/public/
+  RewriteEngine On
+  SetEnv APPLICATION_ENV "production"
+  SSLEngine on
+  SSLCertificateFile    /etc/certificats/kmes-formations.mon-etab.fr/fullchain.pem
+  SSLCertificateKeyFile /etc/certificats/kmes-formations.mon-etab.fr/privkey.pem
+  <Directory /var/www/html/public/>
+    DirectoryIndex index.php
+    AllowOverride All
+  </Directory>
+  ErrorLog ${APACHE_LOG_DIR}/error.log
+  CustomLog ${APACHE_LOG_DIR}/access.log combined
+</VirtualHost>
+```
+
+Le rendre disponible
+```bash
+a2ensite mes-formations.mon-etab.fr.conf
+```
+
+L'application devrait être lancée mais la base de données est toujours vide ce qui provoquera un message d'erreur.
+Essayez d'y accéder pour vous assurer que c'est bien le cas (mes-formation.mon-etab.fr).
+
+## Création des tables de la base de données
+
+La création des tables (et la mise à jour de leur structure) passe par l'utilisation de la bibliothèque `unicaen/bdd-admin` (qui a été instalée par `composer`).
+Pour créer les tables (ou les mettre à jour) vous pouvez utiliser la commande suivante :
+
+```bash
+./vendor/bin/laminas update-bdd
+```
+
+## Insertion des données 
+
+Les données initiales à inserer sont mise à disposition dans le repertoire database/script.
+Veuillez exécuter les scripts dans l'ordre lexicographique.
+
+## Synchronisation
+
+La synchronisation est faites par la bibliothèque `unicaen/synchro` (qui a été instalée par `composer`).
+Pour créer les tables (ou les mettre à jour) vous pouvez utiliser la commande suivante :
+
+```bash
+php public/index.php synchroniser-all
+```
+
+## Nommer un premier adminsitrateur·trice technique
+
+Pour initialiser le premier administrateur, il faut que celui-ci se connecte une première fois.
+Puis de mettre dans la table de linker `unicaen_utilisateur_role_linker` la ligne reliant son utilisateur (enregistré dans `unicaen_utilisateur_user`) et son rôle (enregistré dans `unicaen_utilisateur_role`).
+
+## Vérification de l'installation et paramètrage php
+
+Une fois connecté en tant qu'administrateur, vous aurez accés à deux menu pour vérifier l'installation :
+1. Administration > Vérification installation : pointe les atttendus
+2. Administration > Vérification php : présente le `php_info`
+
+## Troubleshotting
+
+### Déconnection au bout de 24 minutes
+_Symptôme_: Les utilisateurs se font déconnecter au bout d'une période relativement courte (24 minutes). 
+
+_Cause_ : Dans la vérification php, les variables locales `cookie_lifetime` et `gc_maxlifetime` ne sont pas à 0 (note: 1440 secondes = 24 minutes)
+
+_Solution_ : Il est possible de corriger ces valeurs dans le fichier `/etc/php/8.2/fpm/php.ini`. 
+Nécessite un redémarage de fpm. 
+
+
diff --git a/module/Agent/config/merged/agent-validateur.config.php b/module/Agent/config/merged/agent-validateur.config.php
index 86a366f78c056be2d5bac8ae55736d087c3b3d42..242b094aa8da5eea4fccfc44c5ebfafafcf96874 100644
--- a/module/Agent/config/merged/agent-validateur.config.php
+++ b/module/Agent/config/merged/agent-validateur.config.php
@@ -35,6 +35,7 @@ return [
                         'ajouter',
                         'modifier',
                         'supprimer',
+                        'importer',
                     ],
                     'privilege' => [
                         AgentPrivileges::getResourceId(AgentPrivileges::AGENT_GERER_VALIDEUR_IMPORTE),
@@ -74,7 +75,8 @@ return [
                             'route' => '/validateur',
                             'defaults' => [
                                 'controller' => ValidateurController::class,
-                                'action' => 'ajouter',
+                                /** @see ValidateurController::indexAction() */
+                                'action' => 'index',
                             ],
                         ],
                         'may_terminate' => true,
@@ -131,6 +133,37 @@ return [
                                     ],
                                 ],
                             ],
+                            'importer' => [
+                                'type' => Literal::class,
+                                'options' => [
+                                    'route' => '/importer',
+                                    'defaults' => [
+                                        /** @see ValidateurController::importerAction() */
+                                        'controller' => ValidateurController::class,
+                                        'action' => 'importer',
+                                    ],
+                                ],
+                            ],
+                        ],
+                    ],
+                ],
+            ],
+        ],
+    ],
+
+    'navigation'      => [
+        'default' => [
+            'home' => [
+                'pages' => [
+                    'gestion' => [
+                        'pages' => [
+                            'chaine-validation' => [
+                                'label'    => 'Chaînes de validation',
+                                'route'    => 'agent/validateur',
+                                'resource' => PrivilegeController::getResourceId(ValidateurController::class, 'index') ,
+                                'order'    => 3400,
+                                'icon' => 'fas fa-angle-right',
+                            ],
                         ],
                     ],
                 ],
diff --git a/module/Agent/src/Controller/ValidateurController.php b/module/Agent/src/Controller/ValidateurController.php
index 6fc34d1c2efe7912a47013ae85ac8c073d4cc391..99a44ce4d88f9e057ef06847873529e3bf5ef54d 100644
--- a/module/Agent/src/Controller/ValidateurController.php
+++ b/module/Agent/src/Controller/ValidateurController.php
@@ -6,6 +6,8 @@ use Agent\Entity\Db\AgentValidateur;
 use Agent\Form\Validateur\ValidateurFormAwareTrait;
 use Agent\Service\Agent\AgentServiceAwareTrait;
 use Agent\Service\AgentValidateur\AgentValidateurServiceAwareTrait;
+use Application\Form\CsvImportation\CsvImportationFormAwareTrait;
+use DateTime;
 use Laminas\Http\Response;
 use Laminas\Mvc\Controller\AbstractActionController;
 use Laminas\View\Model\ViewModel;
@@ -14,6 +16,7 @@ class ValidateurController extends AbstractActionController
 {
     use AgentServiceAwareTrait;
     use AgentValidateurServiceAwareTrait;
+    use CsvImportationFormAwareTrait;
     use ValidateurFormAwareTrait;
 
     public function indexAction(): ViewModel
@@ -37,7 +40,7 @@ class ValidateurController extends AbstractActionController
             $data = $request->getPost();
             $form->setData($data);
             if ($form->isValid()) {
-                $validateur->setCreatedOn(new \DateTime());
+                $validateur->setCreatedOn(new DateTime());
                 $validateur->setSourceId("MES FORMATIONS");
                 $this->getAgentValidateurService()->create($validateur);
                 exit();
@@ -85,7 +88,7 @@ class ValidateurController extends AbstractActionController
         $request = $this->getRequest();
         if ($request->isPost()) {
             $data = $request->getPost();
-            if ($data["reponse"] === "oui") $this->getAgentValidateurService()->historise($validateur);
+            if ($data["reponse"] === "oui") $this->getAgentValidateurService()->delete($validateur);
             exit();
         }
 
@@ -120,4 +123,103 @@ class ValidateurController extends AbstractActionController
         if ($retour) return $this->redirect()->toUrl($retour);
         return $this->redirect()->toRoute('agent/afficher', ["agent" => $validateur->getAgent()->getId()], [], true);
     }
+
+    public function importerAction(): ViewModel
+    {
+        $form = $this->getCsvImportationForm();
+        $form->setAttribute('action', $this->url()->fromRoute('agent/validateur/importer', ['mode' => 'preview', 'path' => null], [], true));
+
+
+        $request = $this->getRequest();
+        if ($request->isPost()) {
+            $error = [];
+            $data = $request->getPost();
+            $file = $request->getFiles();
+
+            $fichier_path = $file['fichier']['tmp_name'];
+            $mode = $data['mode'];
+            $header = isset($data['header'])?$data['header'] === '1':false;
+
+            //reading
+            $array = [];
+            $warning = [];
+            $chaines = [];
+            $agents = [];
+            $info = [];
+
+            if ($fichier_path === null or $fichier_path === '') {
+                $error[] = "Aucun fichier !";
+            } else {
+                $handle = fopen($fichier_path, "r");
+
+                while ($content = fgetcsv($handle, 0, ";")) {
+                    $array[] = $content;
+                }
+
+                if ($header) {
+                    $array = array_splice($array,1);
+                    $info[] = "Retrait de la première ligne";
+                }
+                foreach ($array as $line) {
+                    $agent_id = $line[0]??null;
+                    $agent = $this->getAgentService()->getAgent($agent_id);
+                    if ($agent === null) $warning[] = "Aucun·e agent·e de trouvé·e avec l'identifiant [" . $agent_id . "]";
+                    $responsable_id = $line[1]??null;
+                    $responsable = $this->getAgentService()->getAgent($responsable_id);
+                    if ($responsable === null) $warning[] = "Aucun·e responsable de trouvé·e avec l'identifiant [" . $responsable_id . "]";
+                    $date_debut_st = $line[2]??null;
+                    $dateDebut = DateTime::createFromFormat('d/m/Y', $date_debut_st);
+                    if ($dateDebut === false) $warning[] = "Impossibilité de calculé la date de début à partir de [".$date_debut_st."]";
+                    $date_fin_st = $line[3]??null;
+                    $dateFin = DateTime::createFromFormat('d/m/Y', $date_fin_st);
+                    if ($date_fin_st !== '' and $dateFin === false) $warning[] = "Impossibilité de calculé la date de fin à partir de [".$date_fin_st."]";
+
+                    $chaines[] = [$agent, $responsable, $dateDebut, $dateFin];
+                    if ($agent !== null) {
+                        $agents[$agent->getId()] = $agent;
+                    }
+                }
+            }
+
+            if ($mode === 'import' and empty($error)) {
+                foreach ($agents as $agent) {
+                    $this->getAgentValidateurService()->historiseAll($agent, true);
+                }
+                foreach ($chaines as $chaine) {
+                    [$agent, $responsable, $dateDebut, $dateFin] = $chaine;
+                    $valideur = new AgentValidateur();
+                    $valideur->setAgent($agent);
+                    $valideur->setValidateur($responsable);
+                    if ($dateDebut !== false) $valideur->setDateDebut($dateDebut);
+                    if ($dateFin !== false) $valideur->setDateFin($dateFin);
+                    $valideur->setCreatedOn(new DateTime());
+                    $valideur->setSourceId("MES FORMATIONS");
+                    $this->getAgentValidateurService()->create($valideur);
+                }
+            }
+
+            if ($mode !== 'import') {
+                $title = "Importation de chaînes hiérarchiques (Prévisualisation)";
+            }
+            if ($mode === 'import') {
+                $title = "Importation de chaînes hiérarchiques (Importation)";
+            }
+            return new ViewModel([
+                'title' => $title,
+                'fichier_path' => $fichier_path,
+                'form' => $form,
+                'mode' => $mode,
+                'error' => $error,
+                'warning' => $warning,
+                'chaines' => $chaines,
+                'info' => $info,
+            ]);
+        }
+
+        $vm = new ViewModel([
+            'title' => "Importation de chaînes hiérarchiques",
+            'form' => $form,
+        ]);
+        return $vm;
+    }
 }
\ No newline at end of file
diff --git a/module/Agent/src/Controller/ValidateurControllerFactory.php b/module/Agent/src/Controller/ValidateurControllerFactory.php
index 71ca421f4b2762e68924d1f8fe8a994f2711341b..8c6f472683924b65a831e6db926622265c57ac4d 100644
--- a/module/Agent/src/Controller/ValidateurControllerFactory.php
+++ b/module/Agent/src/Controller/ValidateurControllerFactory.php
@@ -5,26 +5,36 @@ namespace Agent\Controller;
 use Agent\Form\Validateur\ValidateurForm;
 use Agent\Service\Agent\AgentService;
 use Agent\Service\AgentValidateur\AgentValidateurService;
+use Application\Form\CsvImportation\CsvImportationForm;
+use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\ContainerInterface;
+use Psr\Container\NotFoundExceptionInterface;
 
 class ValidateurControllerFactory
 {
 
+    /**
+     * @throws NotFoundExceptionInterface
+     * @throws ContainerExceptionInterface
+     */
     public function __invoke(ContainerInterface $container): ValidateurController
     {
         /**
          * @see AgentService $agentService
          * @see AgentValidateurService $agentValidateurService
          * @see AgentValidateurForm $agentValidateurForm
+         * @see CsvImportationForm $csvImportationForm
          */
         $agentService = $container->get(AgentService::class);
         $agentValidateurService = $container->get(AgentValidateurService::class);
         $agentValidateurForm = $container->get('FormElementManager')->get(ValidateurForm::class);
+        $csvImportationForm = $container->get('FormElementManager')->get(CsvImportationForm::class);
 
         $controller = new ValidateurController();
         $controller->setAgentService($agentService);
         $controller->setAgentValidateurService($agentValidateurService);
         $controller->setValidateurForm($agentValidateurForm);
+        $controller->setCsvImportationForm($csvImportationForm);
         return $controller;
     }
 
diff --git a/module/Agent/src/Entity/Db/Agent.php b/module/Agent/src/Entity/Db/Agent.php
index 750fd3181dd41b7096b4475713795a99874ddaa6..5a94523d35721f6ef084c40156b6138aa82be09c 100644
--- a/module/Agent/src/Entity/Db/Agent.php
+++ b/module/Agent/src/Entity/Db/Agent.php
@@ -4,19 +4,22 @@ namespace Agent\Entity\Db;
 
 use Agent\Service\Agent\AgentServiceAwareTrait;
 use Application\Entity\Db\MacroContent\AgentMacroTrait;
-use Application\Entity\Db\Traits\DbImportableAwareTrait;
 use Carriere\Entity\Db\Corps;
 use Carriere\Entity\Db\Grade;
 use DateTime;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
 use Fichier\Entity\Db\Fichier;
+use Fichier\Entity\HasFichiersInterface;
+use Fichier\Entity\HasFichiersTrait;
 use Formation\Entity\Db\Interfaces\HasFormationCollectionInterface;
 use Formation\Entity\Db\Traits\HasFormationCollectionTrait;
 use Laminas\Permissions\Acl\Resource\ResourceInterface;
 use Structure\Entity\Db\Structure;
 use Structure\Entity\Db\StructureAgentForce;
 use UnicaenParametre\Entity\Db\Parametre;
+use UnicaenSynchro\Entity\Db\IsSynchronisableInterface;
+use UnicaenSynchro\Entity\Db\IsSynchronisableTrait;
 use UnicaenUtilisateur\Entity\Db\AbstractUser;
 use UnicaenValidation\Entity\HasValidationsInterface;
 use UnicaenValidation\Entity\HasValidationsTrait;
@@ -24,14 +27,18 @@ use UnicaenValidation\Entity\HasValidationsTrait;
 class Agent implements
     ResourceInterface,
     HasFormationCollectionInterface,
-    HasValidationsInterface
+    HasValidationsInterface, HasFichiersInterface,
+    IsSynchronisableInterface
+
 {
-    use DbImportableAwareTrait;
+    use IsSynchronisableTrait;
     use AgentServiceAwareTrait;
     use HasFormationCollectionTrait;
+    use HasFichiersTrait;
     use HasValidationsTrait;
     use AgentMacroTrait;
 
+
     public function getResourceId(): string
     {
         return 'Agent';
@@ -44,25 +51,17 @@ class Agent implements
     private ?string $sexe = null;
     private ?DateTime $dateNaissance = null;
     private ?string $login = null;
-    private ?string $harpId = null;
     private ?string $email = null;
-    private ?string $tContratLong = null;
 
     private Collection $affectations;
-    /** AgentAffectation[] */
     private Collection $echelons;
-    /** AgentEchelon[] */
     private Collection $grades;
-    /** AgentGrade[] */
     private Collection $quotites;
-    /** AgentQuotite[] */
     private Collection $statuts;
-    /** AgentStatut[] */
 
     private Collection $validateurs;
     private ?AbstractUser $utilisateur = null;
 
-    private Collection $fiches;
     /** FichePoste[] */
     private Collection $fichiers;
     /** Fichier[] */
@@ -72,12 +71,10 @@ class Agent implements
     /** StructureAgentForce  */
 
 
-
     /** AgentSuperieur[] */
 
     public function __construct()
     {
-        $this->fiches = new ArrayCollection();
         $this->statuts = new ArrayCollection();
         $this->missionsSpecifiques = new ArrayCollection();
         $this->fichiers = new ArrayCollection();
@@ -90,18 +87,12 @@ class Agent implements
         $this->validations = new ArrayCollection();
     }
 
-    /**
-     * @return string
-     */
     public function generateTag(): string
     {
         return 'Agent_' . $this->getId();
     }
 
-    /** Accesseur en lecteur de l'identification (importer de la base source) ********************/
-
-    /** Todo remettre un type une fois l'identifiant stabilisé (URN:string ? UCN: int) **/
-    public function getId()
+    public function getId(): ?string
     {
         return $this->id;
     }
@@ -146,17 +137,6 @@ class Agent implements
         return $this->email;
     }
 
-    public function getHarpId(): ?int
-    {
-        return $this->harpId;
-    }
-
-
-    public function isContratLong(): bool
-    {
-        return $this->tContratLong === 'O';
-    }
-
     /** Collections importées *****************************************************************************************/
 
     /** @return AgentAffectation[] */
@@ -211,8 +191,13 @@ class Agent implements
 
         $structure = $affectation->getStructure();
         $niveau2 = $structure->getNiv2();
-        if ($structure === $niveau2) { return $structure->getLibelleLong(); }
-        return $niveau2->getLibelleLong() . " > ". $structure->getLibelleLong();
+        if ($structure === $niveau2) {
+            return $structure->getLibelleLong();
+        }
+        $libelle = '';
+        if ($niveau2) $libelle .= $structure->getLibelleLong(). " > ";
+        $libelle.= $structure->getLibelleLong();
+        return $libelle;
     }
 
     /** @return AgentEchelon[] */
@@ -326,22 +311,24 @@ class Agent implements
         return $grades;
     }
 
-    public function isCdd(?DateTime $date = null): bool {
+    public function isCdd(?DateTime $date = null): bool
+    {
         $statuts = $this->getStatutsActifs($date);
         foreach ($statuts as $statut) {
-            if ($statut->isCdd() AND !$statut->isDeleted()) {
+            if ($statut->isCdd() and !$statut->isDeleted()) {
                 return true;
             }
         }
         return false;
     }
 
-    public function getDateFinAffectation(?DateTime $date = null): ?DateTime {
+    public function getDateFinAffectation(?DateTime $date = null): ?DateTime
+    {
         $affectations = $this->getAffectationsActifs($date);
         $maximum = null;
 
         foreach ($affectations as $affectation) {
-            if ($maximum === null OR $affectation->getDateFin() > $maximum) $maximum = $affectation->getDateFin();
+            if ($maximum === null or $affectation->getDateFin() > $maximum) $maximum = $affectation->getDateFin();
         }
         return $maximum;
     }
@@ -546,48 +533,6 @@ class Agent implements
         return $structures;
     }
 
-    /**
-     * @return Fichier[]
-     */
-    public function getFichiers(): array
-    {
-        return $this->fichiers->toArray();
-    }
-
-    /**
-     * @param Fichier $fichier
-     * @return Agent
-     */
-    public function addFichier(Fichier $fichier): Agent
-    {
-        $this->fichiers->add($fichier);
-        return $this;
-    }
-
-    /**
-     * @param Fichier $fichier
-     * @return Agent
-     */
-    public function removeFichier(Fichier $fichier): Agent
-    {
-        $this->fichiers->removeElement($fichier);
-        return $this;
-    }
-
-    /**
-     * @param string $nature
-     * @return Fichier[]
-     */
-    public function fetchFiles(string $nature): array
-    {
-        $fichiers = $this->getFichiers();
-        $fichiers = array_filter($fichiers, function (Fichier $f) use ($nature) {
-            return ($f->getHistoDestruction() === null && $f->getNature()->getCode() === $nature);
-        });
-
-        return $fichiers;
-    }
-
     /** HIERARCHIE ****************************************************************************************************/
 
     /** @return AgentValidateur[] */
@@ -597,7 +542,7 @@ class Agent implements
         $result = $this->validateurs->toArray();
         if ($histo === false) {
             $result = array_filter($result, function (AgentValidateur $a) {
-                return $a->estNonHistorise() AND !$a->isDeleted() AND $a->estEnCours();
+                return $a->estNonHistorise() and !$a->isDeleted() and $a->estEnCours();
             });
         }
         return $result;
@@ -702,5 +647,4 @@ class Agent implements
     }
 
 
-
 }
\ No newline at end of file
diff --git a/module/Agent/src/Entity/Db/AgentAffectation.php b/module/Agent/src/Entity/Db/AgentAffectation.php
index 00b9f12224395403b944b1ad69b10723e1391944..8a298feab48f503cbefec190546388b46c3506c7 100644
--- a/module/Agent/src/Entity/Db/AgentAffectation.php
+++ b/module/Agent/src/Entity/Db/AgentAffectation.php
@@ -3,20 +3,19 @@
 namespace Agent\Entity\Db;
 
 use Application\Entity\Db\Interfaces\HasPeriodeInterface;
-use Application\Entity\Db\Traits\DbImportableAwareTrait;
 use Application\Entity\Db\Traits\HasPeriodeTrait;
 use RuntimeException;
 use Structure\Entity\Db\Structure;
+use UnicaenSynchro\Entity\Db\IsSynchronisableInterface;
+use UnicaenSynchro\Entity\Db\IsSynchronisableTrait;
 
-/**
- * Données synchronisées depuis Octopus :
- * - pas de setter sur les données ainsi remontées
- */
-class AgentAffectation implements HasPeriodeInterface {
-    use DbImportableAwareTrait;
+/** Données synchronisées depuis Octopus : pas de setter sur les données ainsi remontées */
+class AgentAffectation implements HasPeriodeInterface, IsSynchronisableInterface
+{
+    use IsSynchronisableTrait;
     use HasPeriodeTrait;
 
-    private ?int $id = null;
+    private ?string $id = null;
     private ?Agent $agent = null;
     private ?Structure $structure = null;
     private ?string $principale = null;
@@ -24,17 +23,17 @@ class AgentAffectation implements HasPeriodeInterface {
     private ?string $fonctionnelle = null;
     private ?int $quotite = null;
 
-    public function getId() : ?int
+    public function getId(): ?string
     {
         return $this->id;
     }
 
-    public function getAgent() : ?Agent
+    public function getAgent(): ?Agent
     {
         return $this->agent;
     }
 
-    public function getStructure() : ?Structure
+    public function getStructure(): ?Structure
     {
         return $this->structure;
     }
@@ -45,7 +44,7 @@ class AgentAffectation implements HasPeriodeInterface {
         'principale', 'hierarchique', 'fonctionnelle'
     ];
 
-    public function getTemoin(string $temoin) : bool
+    public function getTemoin(string $temoin): bool
     {
         return match ($temoin) {
             'principale' => $this->isPrincipale(),
@@ -55,22 +54,22 @@ class AgentAffectation implements HasPeriodeInterface {
         };
     }
 
-    public function isPrincipale() : bool
+    public function isPrincipale(): bool
     {
         return ($this->principale === 'O');
     }
 
-    public function isHierarchique() : bool
+    public function isHierarchique(): bool
     {
         return ($this->hierarchique === 'O');
     }
 
-    public function isFonctionnelle() : bool
+    public function isFonctionnelle(): bool
     {
         return ($this->fonctionnelle === 'O');
     }
 
-    public function getQuotite() : ?int
+    public function getQuotite(): ?int
     {
         return $this->quotite;
     }
@@ -79,16 +78,15 @@ class AgentAffectation implements HasPeriodeInterface {
      * @param AgentAffectation[] $agentAffectations
      * @return string[]
      */
-    public static function generateAffectationsArray(array $agentAffectations) : array
+    public static function generateAffectationsArray(array $agentAffectations): array
     {
         $affectations = [];
         foreach ($agentAffectations as $agentAffectation) {
             $structure = $agentAffectation->getStructure();
-            $niveau2 = null;
-            if ($structure) $niveau2 = $structure->getNiv2();
+            $niveau2 = $structure?->getNiv2();
             if ($structure) {
                 $texte = $structure->getLibelleCourt();
-                if ($niveau2 !== null AND $niveau2 !== $structure) $texte = $niveau2->getLibelleCourt() . " > ".$texte;
+                if ($niveau2 !== null and $niveau2 !== $structure) $texte = $niveau2->getLibelleCourt() . " > " . $texte;
                 $affectations[] = $texte;
             } else {
                 $affectations[] = "Structure inconnue";
diff --git a/module/Agent/src/Entity/Db/AgentEchelon.php b/module/Agent/src/Entity/Db/AgentEchelon.php
index 3823cd1bf53f554b02bea4439e51e997ca9f3670..f0eb4e3ce3e799592622b8d50ffaa4d84cf7c949 100644
--- a/module/Agent/src/Entity/Db/AgentEchelon.php
+++ b/module/Agent/src/Entity/Db/AgentEchelon.php
@@ -3,18 +3,20 @@
 namespace Agent\Entity\Db;
 
 use Application\Entity\Db\Interfaces\HasPeriodeInterface;
-use Application\Entity\Db\Traits\DbImportableAwareTrait;
 use Application\Entity\Db\Traits\HasPeriodeTrait;
+use UnicaenSynchro\Entity\Db\IsSynchronisableInterface;
+use UnicaenSynchro\Entity\Db\IsSynchronisableTrait;
 
-class AgentEchelon implements HasPeriodeInterface {
-    use DbImportableAwareTrait;
+class AgentEchelon implements HasPeriodeInterface, IsSynchronisableInterface
+{
+    use IsSynchronisableTrait;
     use HasPeriodeTrait;
 
-    private ?int $id = -1;
+    private ?string $id = null;
     private ?Agent $agent = null;
     private ?int $echelon = null;
 
-    public function getId() : ?int
+    public function getId(): ?string
     {
         return $this->id;
     }
diff --git a/module/Agent/src/Entity/Db/AgentGrade.php b/module/Agent/src/Entity/Db/AgentGrade.php
index f2c5dba3646d7a2bfb4234886f0f069c2fdfc240..75f663a3accdf5ace70ed521d855b1df83c54c38 100644
--- a/module/Agent/src/Entity/Db/AgentGrade.php
+++ b/module/Agent/src/Entity/Db/AgentGrade.php
@@ -3,20 +3,21 @@
 namespace Agent\Entity\Db;
 
 use Application\Entity\Db\Interfaces\HasPeriodeInterface;
-use Application\Entity\Db\Traits\DbImportableAwareTrait;
 use Application\Entity\Db\Traits\HasPeriodeTrait;
 use Carriere\Entity\Db\Corps;
 use Carriere\Entity\Db\Correspondance;
 use Carriere\Entity\Db\EmploiType;
 use Carriere\Entity\Db\Grade;
 use Structure\Entity\Db\Structure;
+use UnicaenSynchro\Entity\Db\IsSynchronisableInterface;
+use UnicaenSynchro\Entity\Db\IsSynchronisableTrait;
 
 /**
- * Données synchronisées depuis Octopus :
- * - pas de setter sur les données ainsi remontées
+ * Données synchronisées depuis Octopus : pas de setter sur les données ainsi remontées
  */
-class AgentGrade implements HasPeriodeInterface {
-    use DbImportableAwareTrait;
+class AgentGrade implements HasPeriodeInterface, IsSynchronisableInterface
+{
+    use IsSynchronisableTrait;
     use HasPeriodeTrait;
 
     private ?string $id = null;
@@ -27,37 +28,37 @@ class AgentGrade implements HasPeriodeInterface {
     private ?Correspondance $correspondance = null;
     private ?EmploiType $emploiType = null;
 
-    public function getId() : string
+    public function getId(): string
     {
         return $this->id;
     }
 
-    public function getAgent() : Agent
+    public function getAgent(): Agent
     {
         return $this->agent;
     }
 
-    public function getStructure() : ?Structure
+    public function getStructure(): ?Structure
     {
         return $this->structure;
     }
 
-    public function getCorps() : ?Corps
+    public function getCorps(): ?Corps
     {
         return $this->corps;
     }
 
-    public function getGrade() : ?Grade
+    public function getGrade(): ?Grade
     {
         return $this->grade;
     }
 
-    public function getCorrespondance() : ?Correspondance
+    public function getCorrespondance(): ?Correspondance
     {
         return $this->correspondance;
     }
 
-    public function getEmploiType() : ?EmploiType
+    public function getEmploiType(): ?EmploiType
     {
         return $this->emploiType;
     }
diff --git a/module/Agent/src/Entity/Db/AgentQuotite.php b/module/Agent/src/Entity/Db/AgentQuotite.php
index def7b636fefbb1cccf303b4e100cff9400143d4b..6c95f2acb249e448ba2c4a26c9808492def8aa3d 100644
--- a/module/Agent/src/Entity/Db/AgentQuotite.php
+++ b/module/Agent/src/Entity/Db/AgentQuotite.php
@@ -3,20 +3,21 @@
 namespace Agent\Entity\Db;
 
 use Application\Entity\Db\Interfaces\HasPeriodeInterface;
-use Application\Entity\Db\Traits\DbImportableAwareTrait;
 use Application\Entity\Db\Traits\HasPeriodeTrait;
+use UnicaenSynchro\Entity\Db\IsSynchronisableInterface;
+use UnicaenSynchro\Entity\Db\IsSynchronisableTrait;
 
-class AgentQuotite implements HasPeriodeInterface
+class AgentQuotite implements HasPeriodeInterface, IsSynchronisableInterface
 {
     use HasPeriodeTrait;
-    use DbImportableAwareTrait;
+    use IsSynchronisableTrait;
 
-    private ?int $id = null;
+    private ?string $id = null;
     private ?Agent $agent = null;
     private ?int $quotite = null;
     private ?string $modaliteDeService = null;
 
-    public function getId(): int
+    public function getId(): ?string
     {
         return $this->id;
     }
@@ -47,9 +48,4 @@ class AgentQuotite implements HasPeriodeInterface
         return $this->modaliteDeService;
     }
 
-    public function setModaliteDeService(?string $modaliteDeService): void
-    {
-        $this->modaliteDeService = $modaliteDeService;
-    }
-
 }
\ No newline at end of file
diff --git a/module/Agent/src/Entity/Db/AgentStatut.php b/module/Agent/src/Entity/Db/AgentStatut.php
index 257b9b4e92dc1d37512123f3c2820f10f27a3259..26adc1251941b9edc2439928bad5c10bf7b5d462 100644
--- a/module/Agent/src/Entity/Db/AgentStatut.php
+++ b/module/Agent/src/Entity/Db/AgentStatut.php
@@ -3,18 +3,18 @@
 namespace Agent\Entity\Db;
 
 use Application\Entity\Db\Interfaces\HasPeriodeInterface;
-use Application\Entity\Db\Traits\DbImportableAwareTrait;
 use Application\Entity\Db\Traits\HasPeriodeTrait;
 use RuntimeException;
 use Structure\Entity\Db\Structure;
+use UnicaenSynchro\Entity\Db\IsSynchronisableInterface;
+use UnicaenSynchro\Entity\Db\IsSynchronisableTrait;
 
 /**
- * Données synchronisées depuis Octopus :
- * - pas de setter sur les données ainsi remontées
+ * Données synchronisées depuis Octopus : pas de setter sur les données ainsi remontées
  */
-class AgentStatut implements HasPeriodeInterface {
+class AgentStatut implements HasPeriodeInterface, IsSynchronisableInterface {
     use HasPeriodeTrait;
-    use DbImportableAwareTrait;
+    use IsSynchronisableTrait;
 
     private ?string $id = null;
     private ?Agent $agent = null;
diff --git a/module/Agent/src/Entity/Db/AgentValidateur.php b/module/Agent/src/Entity/Db/AgentValidateur.php
index a7b6d9f11c2833a5a9efac0175b222fb900e56e4..95c3a0f2e10fb0798002556cb073860618f39a26 100644
--- a/module/Agent/src/Entity/Db/AgentValidateur.php
+++ b/module/Agent/src/Entity/Db/AgentValidateur.php
@@ -4,6 +4,7 @@ namespace Agent\Entity\Db;
 
 use Application\Entity\Db\Interfaces\HasPeriodeInterface;
 use Application\Entity\Db\Traits\HasPeriodeTrait;
+use DateTime;
 use Doctrine\ORM\QueryBuilder;
 use UnicaenSynchro\Entity\Db\IsSynchronisableInterface;
 use UnicaenSynchro\Entity\Db\IsSynchronisableTrait;
@@ -68,7 +69,7 @@ class AgentValidateur implements HistoriqueAwareInterface, HasPeriodeInterface,
         return $qb;
     }
 
-    public function setCreatedOn(\DateTime $param)
+    public function setCreatedOn(DateTime $param): void
     {
         $this->createdOn = $param;
     }
diff --git a/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.Agent.dcm.xml b/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.Agent.dcm.xml
index 16ba7f6c8ca50d5f7906031f0e8f48cf5210d4ec..5787ae2fb8e5ca1c9da7e6e3efa379d263118f8e 100644
--- a/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.Agent.dcm.xml
+++ b/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.Agent.dcm.xml
@@ -1,18 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Agent\Entity\Db\Agent" table="agent">
 
-        <id    name="id"                        column="c_individu"         type="string" length="40" >
+        <id name="id" column="c_individu" length="40">
         </id>
 
-        <field name="prenom"                   column="prenom"              type="string" length="64" />
-        <field name="nomUsuel"                 column="nom_usage"           type="string" length="64" />
-        <field name="nomFamille"               column="nom_famille"         type="string" length="64" />
-        <field name="sexe"                     column="sexe"                type="string" length="1" />
-        <field name="dateNaissance"            column="date_naissance"      type="datetime" />
-        <field name="login"                    column="login"               type="string" length="256" />
-        <field name="email"                    column="email"               type="string" length="1024" />
-        <field name="tContratLong"             column="T_CONTRAT_LONG"      type="string" length="1" nullable="true"/>
+        <field name="prenom" column="prenom" length="64"/>
+        <field name="nomUsuel" column="nom_usage" length="64"/>
+        <field name="nomFamille" column="nom_famille" length="64"/>
+        <field name="sexe" column="sexe" length="1"/>
+        <field name="dateNaissance" column="date_naissance" type="datetime"/>
+        <field name="login" column="login" length="256"/>
+        <field name="email" column="email" length="1024"/>
 
         <one-to-many target-entity="Agent\Entity\Db\AgentQuotite" mapped-by="agent" field="quotites"/>
         <one-to-many target-entity="Agent\Entity\Db\AgentAffectation" mapped-by="agent" field="affectations"/>
@@ -22,30 +23,31 @@
         <one-to-many field="validateurs" target-entity="Agent\Entity\Db\AgentValidateur" mapped-by="agent"/>
 
         <one-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="utilisateur">
-            <join-column name="utilisateur_id" referenced-column-name="ID" />
+            <join-column name="utilisateur_id" referenced-column-name="ID"/>
         </one-to-one>
 
 
         <many-to-many field="formations" target-entity="Formation\Entity\Db\FormationElement">
             <join-table name="agent_element_formation">
                 <join-columns>
-                    <join-column name="agent_id" referenced-column-name="c_individu" />
+                    <join-column name="agent_id" referenced-column-name="c_individu"/>
                 </join-columns>
                 <inverse-join-columns>
-                    <join-column name="formation_element_id" referenced-column-name="id" />
+                    <join-column name="formation_element_id"/>
                 </inverse-join-columns>
             </join-table>
         </many-to-many>
 
-        <one-to-many target-entity="Structure\Entity\Db\StructureAgentForce" mapped-by="agent" field="structuresForcees"/>
+        <one-to-many target-entity="Structure\Entity\Db\StructureAgentForce" mapped-by="agent"
+                     field="structuresForcees"/>
 
-        <many-to-many field="fichiers" target-entity="Fichier\Entity\Db\Fichier" inversed-by="fichier" fetch="LAZY">
+        <many-to-many field="fichiers" target-entity="Fichier\Entity\Db\Fichier" inversed-by="fichier">
             <join-table name="agent_fichier">
                 <join-columns>
                     <join-column name="agent" referenced-column-name="c_individu"/>
                 </join-columns>
                 <inverse-join-columns>
-                    <join-column name="fichier" referenced-column-name="id"/>
+                    <join-column name="fichier"/>
                 </inverse-join-columns>
             </join-table>
         </many-to-many>
@@ -54,17 +56,18 @@
         <many-to-many field="validations" target-entity="UnicaenValidation\Entity\Db\ValidationInstance">
             <join-table name="agent_validation">
                 <join-columns>
-                    <join-column name="agent_id" referenced-column-name="c_individu" />
+                    <join-column name="agent_id" referenced-column-name="c_individu"/>
                 </join-columns>
                 <inverse-join-columns>
-                    <join-column name="validation_instance_id" referenced-column-name="id" />
+                    <join-column name="validation_instance_id"/>
                 </inverse-join-columns>
             </join-table>
         </many-to-many>
 
         <!-- DB IMPORT #############################  -->
-        <field name="created_on"               column="created_on"       type="datetime"/>
-        <field name="updated_on"               column="updated_on"       type="datetime"/>
-        <field name="deleted_on"               column="deleted_on"       type="datetime"/>
+        <field name="createdOn" column="created_on" type="datetime"/>
+        <field name="updatedOn" column="updated_on" type="datetime"/>
+        <field name="deletedOn" column="deleted_on" type="datetime"/>
+        <field name="sourceId" column="source_id" length="128"/>
     </entity>
 </doctrine-mapping>
diff --git a/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentAffectation.dcm.xml b/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentAffectation.dcm.xml
index 4483accb5ffed34d015424ed347fb656b7b1c8f0..05d43e3c48b1c8a7d19f701f58afb7bdbc5ac0b5 100644
--- a/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentAffectation.dcm.xml
+++ b/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentAffectation.dcm.xml
@@ -1,28 +1,28 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Agent\Entity\Db\AgentAffectation" table="agent_carriere_affectation">
 
-        <id name="id" type="integer" column="id">
-            <generator strategy="IDENTITY"/>
-        </id>
+        <id name="id" type="string" column="id"> </id>
 
-        <many-to-one target-entity="Agent\Entity\Db\Agent"  field="agent">
+        <many-to-one target-entity="Agent\Entity\Db\Agent" field="agent">
             <join-column name="agent_id" referenced-column-name="c_individu"/>
         </many-to-one>
-        <many-to-one target-entity="Structure\Entity\Db\Structure"  field="structure">
-            <join-column name="structure_id" referenced-column-name="id"/>
+        <many-to-one target-entity="Structure\Entity\Db\Structure" field="structure">
+            <join-column name="structure_id"/>
         </many-to-one>
-        <field name="dateDebut"               column="date_debut"       type="datetime"/>
-        <field name="dateFin"                 column="date_fin"         type="datetime"/>
-        <field name="principale"              column="t_principale"     type="string" length="1"/>
-        <field name="hierarchique"            column="t_hierarchique"   type="string" length="1"/>
-        <field name="fonctionnelle"           column="t_fonctionnelle"  type="string" length="1"/>
-        <field name="quotite"                 column="quotite"          type="integer"/>
+        <field name="dateDebut" column="date_debut" type="datetime"/>
+        <field name="dateFin" column="date_fin" type="datetime"/>
+        <field name="principale" column="t_principale" length="1"/>
+        <field name="hierarchique" column="t_hierarchique" length="1"/>
+        <field name="fonctionnelle" column="t_fonctionnelle" length="1"/>
+        <field name="quotite" column="quotite" type="integer"/>
 
         <!-- DB IMPORT #############################  -->
-        <field name="created_on"               column="created_on"       type="datetime"/>
-        <field name="updated_on"               column="updated_on"       type="datetime"/>
-        <field name="deleted_on"               column="deleted_on"       type="datetime"/>
-        <field name="sourceId"                 column="source_id"        type="string" length="128"/>
+        <field name="createdOn" column="created_on" type="datetime"/>
+        <field name="updatedOn" column="updated_on" type="datetime"/>
+        <field name="deletedOn" column="deleted_on" type="datetime"/>
+        <field name="sourceId" column="source_id" length="128"/>
     </entity>
 </doctrine-mapping>
diff --git a/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentEchelon.dcm.xml b/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentEchelon.dcm.xml
index 383d5686afc7e51cab7d65986cafd972328e9080..3269d0c309544eaf7d8509ec63a64ac925ceed53 100644
--- a/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentEchelon.dcm.xml
+++ b/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentEchelon.dcm.xml
@@ -1,21 +1,24 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Agent\Entity\Db\AgentEchelon" table="agent_carriere_echelon">
 
-        <id name="id" type="string" column="id" />
+        <id name="id" type="string" column="id"/>
 
-        <many-to-one target-entity="Agent\Entity\Db\Agent"  field="agent">
+        <many-to-one target-entity="Agent\Entity\Db\Agent" field="agent">
             <join-column name="agent_id" referenced-column-name="c_individu"/>
         </many-to-one>
 
-        <field name="echelon"       type="integer"                  column="echelon"             nullable="false"/>
-        <field name="dateDebut"     type="datetime"                 column="d_debut"        nullable="false"/>
-        <field name="dateFin"       type="datetime"                 column="d_fin"        nullable="true"/>
+        <field name="echelon" type="integer" column="echelon"/>
+        <field name="dateDebut" type="datetime" column="d_debut"/>
+        <field name="dateFin" type="datetime" column="d_fin" nullable="true"/>
 
         <!-- DB IMPORT #############################  -->
-        <field name="created_on"               column="created_on"       type="datetime"/>
-        <field name="updated_on"               column="updated_on"       type="datetime"/>
-        <field name="deleted_on"               column="deleted_on"       type="datetime"/>
+        <field name="createdOn" column="created_on" type="datetime"/>
+        <field name="updatedOn" column="updated_on" type="datetime"/>
+        <field name="deletedOn" column="deleted_on" type="datetime"/>
+        <field name="sourceId" column="source_id" length="128"/>
 
     </entity>
 </doctrine-mapping>
diff --git a/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentGrade.dcm.xml b/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentGrade.dcm.xml
index 780389ad91aef157d62140d617e9ff5e38dcfb9a..3d73c9851759a0f861bb449cc615cdc6747b43c2 100644
--- a/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentGrade.dcm.xml
+++ b/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentGrade.dcm.xml
@@ -1,40 +1,43 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Agent\Entity\Db\AgentGrade" table="agent_carriere_grade">
 
-        <id name="id" type="string" column="id" />
+        <id name="id" type="string" column="id"/>
 
-        <many-to-one target-entity="Agent\Entity\Db\Agent"  field="agent">
+        <many-to-one target-entity="Agent\Entity\Db\Agent" field="agent">
             <join-column name="agent_id" referenced-column-name="c_individu"/>
         </many-to-one>
 
-        <many-to-one target-entity="Structure\Entity\Db\Structure"  field="structure">
-            <join-column name="structure_id" referenced-column-name="id"/>
+        <many-to-one target-entity="Structure\Entity\Db\Structure" field="structure">
+            <join-column name="structure_id"/>
         </many-to-one>
 
-        <many-to-one target-entity="Carriere\Entity\Db\Corps"  field="corps">
-            <join-column name="corps_id" referenced-column-name="id"/>
+        <many-to-one target-entity="Carriere\Entity\Db\Corps" field="corps">
+            <join-column name="corps_id"/>
         </many-to-one>
 
-        <many-to-one target-entity="Carriere\Entity\Db\Grade"  field="grade">
-            <join-column name="grade_id" referenced-column-name="id"/>
+        <many-to-one target-entity="Carriere\Entity\Db\Grade" field="grade">
+            <join-column name="grade_id"/>
         </many-to-one>
 
-        <many-to-one target-entity="Carriere\Entity\Db\Correspondance"  field="correspondance">
-            <join-column name="correspondance_id" referenced-column-name="id"/>
+        <many-to-one target-entity="Carriere\Entity\Db\Correspondance" field="correspondance">
+            <join-column name="correspondance_id"/>
         </many-to-one>
 
-        <many-to-one target-entity="Carriere\Entity\Db\EmploiType"  field="emploiType">
-            <join-column name="emploitype_id" referenced-column-name="id"/>
+        <many-to-one target-entity="Carriere\Entity\Db\EmploiType" field="emploiType">
+            <join-column name="emploitype_id"/>
         </many-to-one>
 
-        <field name="dateDebut"     type="datetime"                 column="d_debut"     nullable="false"/>
-        <field name="dateFin"       type="datetime"                 column="d_fin"       nullable="false"/>
+        <field name="dateDebut" type="datetime" column="d_debut"/>
+        <field name="dateFin" type="datetime" column="d_fin"/>
 
         <!-- DB IMPORT #############################  -->
-        <field name="created_on"               column="created_on"       type="datetime"/>
-        <field name="updated_on"               column="updated_on"       type="datetime"/>
-        <field name="deleted_on"               column="deleted_on"       type="datetime"/>
+        <field name="createdOn" column="created_on" type="datetime"/>
+        <field name="updatedOn" column="updated_on" type="datetime"/>
+        <field name="deletedOn" column="deleted_on" type="datetime"/>
+        <field name="sourceId" column="source_id" length="128"/>
 
     </entity>
 </doctrine-mapping>
diff --git a/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentQuotite.dcm.xml b/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentQuotite.dcm.xml
index 2c99bdf2141a18503cab8cc6b2c41f43fa23f15d..461e78943b62473f0e1cec9ef8b1661648629bb9 100644
--- a/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentQuotite.dcm.xml
+++ b/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentQuotite.dcm.xml
@@ -1,22 +1,25 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Agent\Entity\Db\AgentQuotite" table="agent_carriere_quotite">
 
-        <id name="id" type="string" column="id" />
+        <id name="id" type="string" column="id"/>
 
-        <many-to-one target-entity="Agent\Entity\Db\Agent"  field="agent">
+        <many-to-one target-entity="Agent\Entity\Db\Agent" field="agent">
             <join-column name="agent_id" referenced-column-name="c_individu"/>
         </many-to-one>
 
-        <field name="dateDebut" type="datetime"                     column="d_debut"     nullable="false"/>
-        <field name="dateFin"   type="datetime"                     column="d_fin"       nullable="false"/>
-        <field name="quotite"   type="integer"                      column="quotite"   nullable="false"/>
-        <field name="modaliteDeService"   type="string" length="1024" column="modalite_de_service"   nullable="false"/>
+        <field name="dateDebut" type="datetime" column="d_debut"/>
+        <field name="dateFin" type="datetime" column="d_fin"/>
+        <field name="quotite" type="integer" column="quotite"/>
+        <field name="modaliteDeService" length="1024" column="modalite_de_service"/>
 
         <!-- DB IMPORT #############################  -->
-        <field name="created_on"               column="created_on"       type="datetime"/>
-        <field name="updated_on"               column="updated_on"       type="datetime"/>
-        <field name="deleted_on"               column="deleted_on"       type="datetime"/>
+        <field name="createdOn" column="created_on" type="datetime"/>
+        <field name="updatedOn" column="updated_on" type="datetime"/>
+        <field name="deletedOn" column="deleted_on" type="datetime"/>
+        <field name="sourceId" column="source_id" length="128"/>
 
     </entity>
 </doctrine-mapping>
diff --git a/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentStatut.dcm.xml b/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentStatut.dcm.xml
index ea109db0306ba4ba2f5a9a429a63475f6f507d11..20122c7aced786e6f017350c2fbf4d12c46391b5 100644
--- a/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentStatut.dcm.xml
+++ b/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentStatut.dcm.xml
@@ -2,39 +2,39 @@
 <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Agent\Entity\Db\AgentStatut" table="agent_carriere_statut">
 
-        <id    name="id"                        column="id"                 type="string" length="40" >
+        <id    name="id"                        column="id"                 length="40" >
         </id>
 
         <many-to-one target-entity="Agent\Entity\Db\Agent"  field="agent">
             <join-column name="agent_id" referenced-column-name="c_individu"/>
         </many-to-one>
         <many-to-one target-entity="Structure\Entity\Db\Structure"  field="structure">
-            <join-column name="structure_id" referenced-column-name="id"/>
+            <join-column name="structure_id" />
         </many-to-one>
-        <field name="dateDebut"         type="datetime"                     column="d_debut"                   nullable="false"/>
+        <field name="dateDebut"         type="datetime"                     column="d_debut"                   />
         <field name="dateFin"           type="datetime"                     column="d_fin"                     nullable="true"/>
 
-        <field name="titulaire"     type="string" length="1"            column="t_titulaire"               nullable="true"/>
-        <field name="cdi"           type="string" length="1"            column="t_cdi"                     nullable="true"/>
-        <field name="cdd"           type="string" length="1"            column="t_cdd"                     nullable="true"/>
-        <field name="vacataire"     type="string" length="1"            column="t_vacataire"               nullable="true"/>
-        <field name="enseignant"    type="string" length="1"            column="t_enseignant"              nullable="true"/>
-        <field name="administratif" type="string" length="1"            column="t_administratif"           nullable="true"/>
-        <field name="chercheur"     type="string" length="1"            column="t_chercheur"               nullable="true"/>
-        <field name="doctorant"     type="string" length="1"            column="t_doctorant"               nullable="true"/>
-        <field name="detacheIn"     type="string" length="1"            column="t_detache_in"              nullable="true"/>
-        <field name="detacheOut"    type="string" length="1"            column="t_detache_out"             nullable="true"/>
-        <field name="dispo"         type="string" length="1"            column="t_dispo"                   nullable="true"/>
-        <field name="heberge"       type="string" length="1"            column="t_heberge"                 nullable="true"/>
-        <field name="emerite"       type="string" length="1"            column="t_emerite"                 nullable="true"/>
-        <field name="retraite"      type="string" length="1"            column="t_retraite"                nullable="true"/>
-        <field name="longueMaladie" type="string" length="1"            column="t_longue_maladie"          nullable="true"/>
-        <field name="congeParental" type="string" length="1"            column="t_conge_parental"          nullable="true"/>
+        <field name="titulaire"     length="1"            column="t_titulaire"               nullable="true"/>
+        <field name="cdi"           length="1"            column="t_cdi"                     nullable="true"/>
+        <field name="cdd"           length="1"            column="t_cdd"                     nullable="true"/>
+        <field name="vacataire"     length="1"            column="t_vacataire"               nullable="true"/>
+        <field name="enseignant"    length="1"            column="t_enseignant"              nullable="true"/>
+        <field name="administratif" length="1"            column="t_administratif"           nullable="true"/>
+        <field name="chercheur"     length="1"            column="t_chercheur"               nullable="true"/>
+        <field name="doctorant"     length="1"            column="t_doctorant"               nullable="true"/>
+        <field name="detacheIn"     length="1"            column="t_detache_in"              nullable="true"/>
+        <field name="detacheOut"    length="1"            column="t_detache_out"             nullable="true"/>
+        <field name="dispo"         length="1"            column="t_dispo"                   nullable="true"/>
+        <field name="heberge"       length="1"            column="t_heberge"                 nullable="true"/>
+        <field name="emerite"       length="1"            column="t_emerite"                 nullable="true"/>
+        <field name="retraite"      length="1"            column="t_retraite"                nullable="true"/>
+        <field name="longueMaladie" length="1"            column="t_longue_maladie"          nullable="true"/>
+        <field name="congeParental" length="1"            column="t_conge_parental"          nullable="true"/>
 
         <!-- DB IMPORT #############################  -->
-        <field name="created_on"               column="created_on"       type="datetime"/>
-        <field name="updated_on"               column="updated_on"       type="datetime"/>
-        <field name="deleted_on"               column="deleted_on"       type="datetime"/>
-        <field name="sourceId"                 column="source_id"        type="string" length="128"/>
+        <field name="createdOn"               column="created_on"       type="datetime"/>
+        <field name="updatedOn"               column="updated_on"       type="datetime"/>
+        <field name="deletedOn"               column="deleted_on"       type="datetime"/>
+        <field name="sourceId"                 column="source_id"        length="128"/>
     </entity>
 </doctrine-mapping>
diff --git a/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentValidateur.dcm.xml b/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentValidateur.dcm.xml
index f35a0d74a4ff1aaaffe2ba4f43c5369925a5a44b..8fe2736db9ff0ba38685a18c72cdf9bc223632d0 100644
--- a/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentValidateur.dcm.xml
+++ b/module/Agent/src/Entity/Db/Mapping/Agent.Entity.Db.AgentValidateur.dcm.xml
@@ -2,7 +2,7 @@
 <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Agent\Entity\Db\AgentValidateur" table="agent_hierarchie_validateur">
 
-        <id name="id" column="id"  type="string" length="1024" >
+        <id name="id" column="id"  length="1024" >
         </id>
 
         <many-to-one target-entity="Agent\Entity\Db\Agent"  field="agent">
@@ -20,7 +20,7 @@
         <field name="createdOn"         type="datetime"                 column="created_on"                   />
         <field name="updatedOn"         type="datetime"                 column="updated_on"  nullable="true"  />
         <field name="deletedOn"         type="datetime"                 column="deleted_on"  nullable="true"  />
-        <field name="sourceId"          type="string" length="256"      column="source_id"                    />
+        <field name="sourceId"          length="256"      column="source_id"                    />
 
         <!-- HISTORISATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
         <field name="histoCreation"     type="datetime"                 column="histo_creation"                     />
diff --git a/module/Agent/src/Form/SelectionAgent/SelectionAgentForm.php b/module/Agent/src/Form/SelectionAgent/SelectionAgentForm.php
index 1413baf61e17f614aa05550918ea4ed5a20ed814..9cc1fe2d6c523b166d6ee2f0c324c88e2586d9d1 100644
--- a/module/Agent/src/Form/SelectionAgent/SelectionAgentForm.php
+++ b/module/Agent/src/Form/SelectionAgent/SelectionAgentForm.php
@@ -9,17 +9,11 @@ use Laminas\InputFilter\Factory;
 
 class SelectionAgentForm extends Form {
 
-    /** @var string */
-    private $urlAgent;
-
-    /**
-     * @param string $urlAgent
-     * @return SelectionAgentForm
-     */
-    public function setUrlAgent(string $urlAgent)
+    private ?string $urlAgent = null;
+
+    public function setUrlAgent(string $urlAgent): void
     {
         $this->urlAgent = $urlAgent;
-        return $this;
     }
 
     public function init(): void
diff --git a/module/Agent/src/Form/SelectionAgent/SelectionAgentHydrator.php b/module/Agent/src/Form/SelectionAgent/SelectionAgentHydrator.php
index 5a9b0f368ab96e45b9a6354e5dd17f9c75dc5442..77c0a424300925f07cf929c24ce7d6fe4aa51522 100644
--- a/module/Agent/src/Form/SelectionAgent/SelectionAgentHydrator.php
+++ b/module/Agent/src/Form/SelectionAgent/SelectionAgentHydrator.php
@@ -9,26 +9,20 @@ use Laminas\Hydrator\HydratorInterface;
 class SelectionAgentHydrator implements HydratorInterface {
     use AgentServiceAwareTrait;
 
-    /**
-     * @param HasAgentInterface $object
-     * @return array
-     */
     public function extract(object $object): array
     {
+        /** @var HasAgentInterface $object */
         $data = [
             'agent-sas'     => ($object->getAgent())?['id' => $object->getAgent()->getId(), 'label' => $object->getAgent()->getDenomination()]:null,
         ];
         return $data;
     }
 
-    /**
-     * @param array $data
-     * @param HasAgentInterface $object
-     * @return HasAgentInterface
-     */
     public function hydrate(array $data,object $object): object
     {
         $agent = $this->getAgentService()->getAgent($data['agent-sas']['id'], true);
+
+        /** @var HasAgentInterface $object */
         $object->setAgent($agent);
         return $object;
     }
diff --git a/module/Agent/src/Form/SelectionAgent/SelectionAgentHydratorFactory.php b/module/Agent/src/Form/SelectionAgent/SelectionAgentHydratorFactory.php
index a1cce7278fda3b094ecbedb901cf2556d94ce92e..023cb35115be34243c9460a6ea6985dfeeabbad5 100644
--- a/module/Agent/src/Form/SelectionAgent/SelectionAgentHydratorFactory.php
+++ b/module/Agent/src/Form/SelectionAgent/SelectionAgentHydratorFactory.php
@@ -18,7 +18,7 @@ class SelectionAgentHydratorFactory
         /**
          * @var AgentService $agentService
          */
-        $agentService     = $container->get(AgentService::class);
+        $agentService = $container->get(AgentService::class);
 
         $hydrator = new SelectionAgentHydrator();
         $hydrator->setAgentService($agentService);
diff --git a/module/Agent/src/Form/Validateur/ValidateurForm.php b/module/Agent/src/Form/Validateur/ValidateurForm.php
index aaba02caf789f8adcceeda99f1669de5a8c29a91..a0e9b62bbc753652d5263fa181da950543a65734 100644
--- a/module/Agent/src/Form/Validateur/ValidateurForm.php
+++ b/module/Agent/src/Form/Validateur/ValidateurForm.php
@@ -13,7 +13,7 @@ class ValidateurForm extends Form
 {
     private ?string $urlAgent = null;
 
-    public function setUrlAgent(string $url)
+    public function setUrlAgent(string $url): void
     {
         $this->urlAgent = $url;
     }
diff --git a/module/Agent/src/Service/Agent/AgentService.php b/module/Agent/src/Service/Agent/AgentService.php
index e01fa4782dda021d39e42f0737b1f3c021d0dad1..ef739346f77330279d0b0fa856f0b2e4263f6a82 100644
--- a/module/Agent/src/Service/Agent/AgentService.php
+++ b/module/Agent/src/Service/Agent/AgentService.php
@@ -12,13 +12,8 @@ use Doctrine\DBAL\Exception as DBA_Exception;
 use Doctrine\ORM\NonUniqueResultException;
 use Doctrine\ORM\QueryBuilder;
 use DoctrineModule\Persistence\ProvidesObjectManager;
-use Fichier\Entity\Db\Fichier;
-use Formation\Entity\Db\FormationElement;
 use Laminas\Mvc\Controller\AbstractActionController;
 use Structure\Entity\Db\Structure;
-use Structure\Entity\Db\StructureAgentForce;
-use Structure\Entity\Db\StructureGestionnaire;
-use Structure\Entity\Db\StructureResponsable;
 use Structure\Service\Structure\StructureServiceAwareTrait;
 use UnicaenApp\Exception\RuntimeException;
 use UnicaenParametre\Service\Parametre\ParametreServiceAwareTrait;
@@ -57,10 +52,9 @@ class AgentService
             //quotite de l'agent
             ->addSelect('quotite')->leftJoin('agent.quotites', 'quotite')
             ->addSelect('utilisateur')->leftJoin('agent.utilisateur', 'utilisateur')
-            ->andWhere('agent.deleted_on IS NULL')
-        ;
+            ->andWhere('agent.deletedOn IS NULL');
 
-        if (!$enAffectation) $qb = $qb->andWhere('affectation.deleted_on IS NULL');
+        if (!$enAffectation) $qb = $qb->andWhere('affectation.deletedOn IS NULL');
 
         return $qb;
     }
@@ -88,62 +82,18 @@ class AgentService
             ->addSelect('utilisateur')->leftjoin('agent.utilisateur', 'utilisateur')
             ->addSelect('statut')->leftjoin('agent.statuts', 'statut')
 //            ->addSelect('affectation')->leftjoin('agent.affectations', 'affectation')
-            ->andWhere('agent.deleted_on IS NULL')
+            ->andWhere('agent.deletedOn IS NULL')
             ->orderBy('agent.nomUsuel, agent.prenom');
         $result = $qb->getQuery()->getResult();
         return $result;
     }
 
-    /**
-     * @param DateTime|null $debut
-     * @param DateTime|null $fin
-     * @param Structure[]|null $structures
-     * @return Agent[]
-     */
-    public function getAgentsWithDates(?DateTime $debut = null, ?DateTime $fin = null, ?array $structures = null): array
-    {
-        $qb = $this->getObjectManager()->getRepository(Agent::class)->createQueryBuilder('agent')
-            ->addSelect('affectation')->join('agent.affectations', 'affectation')
-            ->addSelect('statut')->join('agent.statuts', 'statut')
-            ->addSelect('grade')->join('agent.grades', 'grade')
-            ->addSelect('emploitype')->leftjoin('grade.emploiType', 'emploitype')
-            ->andWhere('agent.deleted_on IS NULL')
-            // Devrait être un filtrage ... et pas une requete même si cela accélère les choses
-            ->andWhere('statut.titulaire = :true OR (statut.cdd = :true AND agent.tContratLong =:true) OR statut.cdi = :true')
-            ->andWhere('statut.enseignant = :false')
-//            ->andWhere('emploitype.code <> :UCNRECH')
-            ->setParameter('true', 'O')
-            ->setParameter('false', 'N')
-//            ->setParameter('UCNRECH', 'UCNRECH')
-            ->orderBy('agent.nomUsuel, agent.prenom');
-
-        if ($debut) $qb = $qb
-            ->andWhere('affectation.dateFin IS NULL OR affectation.dateFin > :debut')
-            ->andWhere('statut.dateFin IS NULL OR statut.dateFin > :debut')
-            ->andWhere('grade.dateFin IS NULL OR grade.dateFin > :debut')
-            ->andWhere('emploitype.dateFin IS NULL OR emploitype.dateFin > :debut')
-            ->setParameter('debut', $debut);
-        if ($fin) $qb = $qb
-            ->andWhere('affectation.dateDebut IS NULL OR affectation.dateDebut < :fin')
-            ->andWhere('statut.dateDebut IS NULL OR statut.dateDebut  < :fin')
-            ->andWhere('grade.dateDebut IS NULL OR grade.dateDebut  < :fin')
-            ->andWhere('emploitype.dateDebut IS NULL OR emploitype.dateDebut  < :fin')
-            ->setParameter('fin', $fin);
-        if ($structures) $qb = $qb
-            ->andWhere('affectation.structure in (:structures)')
-            ->setParameter('structures', $structures);
-
-        $result = $qb->getQuery()->getResult();
-        return $result;
-    }
-
     /**
      * @param string|null $id
      * @param bool $enlarge (si mis à TRUE alors pas d'obligation de donnée minimum)
-     * @param bool $enAffectation
      * @return Agent|null
      */
-    public function getAgent(?string $id, bool $enlarge = false, bool $enAffectation=true): ?Agent
+    public function getAgent(?string $id, bool $enlarge = false): ?Agent
     {
         if ($id === null) return null;
 
@@ -197,7 +147,9 @@ class AgentService
         $sql = <<<EOS
 select a.c_individu as id
 from agent a
-where unaccent(LOWER(CONCAT(a.prenom, ' ', a.nom_usage))) like unaccent('%' || :term || '%') OR unaccent(LOWER(CONCAT(a.nom_usage, ' ', a.prenom))) like unaccent('%' || :term || '%')
+where
+    unaccent(LOWER(CONCAT(a.prenom, ' ', a.nom_usage))) like unaccent('%' || :term || '%') OR unaccent(LOWER(CONCAT(a.nom_usage, ' ', a.prenom))) like unaccent('%' || :term || '%')
+and a.deleted_on IS NULL
 EOS;
 
         // where LOWER(CONCAT(agent.prenom, ' ', agent.nomUsuel)) like :search OR LOWER(CONCAT(agent.nomUsuel, ' ', agent.prenom)) like UNACCENT(:search)
@@ -265,7 +217,7 @@ EOS;
         //en utilisant l'username si echec
         $qb = $this->getObjectManager()->getRepository(Agent::class)->createQueryBuilder('agent')
             ->andWhere('agent.login = :username')
-            ->andWhere('agent.deleted_on IS NULL')
+            ->andWhere('agent.deletedOn IS NULL')
             ->setParameter('username', $user->getUsername());
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
@@ -288,26 +240,25 @@ EOS;
             // AFFECTATION FILTER
 //            ->addSelect('affectationfilter')
             ->join('agent.affectations', 'affectationfilter')
-            ->andWhere('affectationfilter.deleted_on IS NULL')
+            ->andWhere('affectationfilter.deletedOn IS NULL')
             ->andWhere('affectationfilter.dateFin >= :today OR affectationfilter.dateFin IS NULL')
             ->andWhere('affectationfilter.dateDebut <= :today')
             ->setParameter('today', $date)
-
-            ->andWhere('agent.deleted_on IS NULL')
+            ->andWhere('agent.deletedOn IS NULL')
             ->orderBy('agent.nomUsuel, agent.prenom', 'ASC');
 
         if ($withJoin) {
             $qb = $qb
-            //AFFECTATION ALL (NB : Si on ne remonte pas toutes les affectations doctrine nous fout dedans)
+                //AFFECTATION ALL (NB : Si on ne remonte pas toutes les affectations doctrine nous fout dedans)
 //                ->addSelect('affectation')
                 ->join('agent.affectations', 'affectation')
 //                ->addSelect('affectation_structure')
                 ->join('affectation.structure', 'affectation_structure')
-                ->andWhere('affectation.deleted_on IS NULL')
+                ->andWhere('affectation.deletedOn IS NULL')
                 //STATUS
 //            ->addSelect('statut')
                 ->leftjoin('agent.statuts', 'statut')
-            ->andWhere('statut.deleted_on IS NULL')
+                ->andWhere('statut.deletedOn IS NULL')
                 //GRADE
 //            ->addSelect('grade')
                 ->leftjoin('agent.grades', 'grade')
@@ -321,8 +272,7 @@ EOS;
                 ->leftjoin('grade.correspondance', 'gcorrespondance')
 //            ->addSelect('gcorps')
                 ->leftjoin('grade.corps', 'gcorps')
-            ->andWhere('grade.deleted_on IS NULL')
-            ;
+                ->andWhere('grade.deletedOn IS NULL');
         }
 
         $qb = AgentValidateur::decorateWithAgentValidateur($qb);
@@ -332,36 +282,11 @@ EOS;
                 ->setParameter('structures', $structures);
         }
 
-//        $structuresIds = array_map(function (Structure $structure) {return $structure->getId();}, $structures);
-//        var_dump(implode(',', $structuresIds));
-//        $sql = $qb->getQuery()->getSQL();
-//        var_dump($sql);
-//        die();
-
         $result = $qb->getQuery()->getResult();
         return $result;
 
     }
 
-    /**
-     * @param Structure[] $structures
-     * @return Agent[]
-     */
-    public function getAgentsForcesByStructures(array $structures): array
-    {
-        $qb = $this->getObjectManager()->getRepository(Agent::class)->createQueryBuilder('agent')
-            ->addSelect('forcage')->join('agent.structuresForcees', 'forcage')
-            ->andWhere('forcage.histoDestruction IS NULL');
-
-        if (!empty(null)) {
-            $qb = $qb->andWhere('forcage.structure IN (:structures)')
-                ->setParameter('structures', $structures);
-        }
-        $result = $qb->getQuery()->getResult();
-
-        return $result;
-    }
-
     /**
      * @param $st_prenom
      * @param $st_nom
@@ -384,102 +309,6 @@ EOS;
         return null;
     }
 
-    /** Recuperation des supérieures et autorités *********************************************************************/
-
-    /**
-     * TODO :: a conserver pour init des superieurs depuis les structures
-     * Agent[]
-     */
-    public function computeSuperieures(Agent $agent, ?DateTime $date = null): array
-    {
-        if ($date === null) $date = new DateTime();
-
-        //checking structure
-        $affectationsPrincipales = $this->getAgentAffectationService()->getAgentAffectationHierarchiquePrincipaleByAgent($agent);
-        if ($affectationsPrincipales === null or count($affectationsPrincipales) !== 1) return []; //throw new LogicException("Plusieurs affectations principales pour l'agent ".$agent->getId() . ":".$agent->getDenomination());
-
-        if (reset($affectationsPrincipales)) {
-            $affectationPrincipale = reset($affectationsPrincipales);
-            $structure = $affectationPrincipale->getStructure();
-            do {
-                $responsablesAll = array_map(function (StructureResponsable $a) {
-                    return $a->getAgent();
-                }, $this->getStructureService()->getResponsables($structure, $date));
-                if (!in_array($agent, $responsablesAll)) {
-                    $responsables = [];
-                    foreach ($responsablesAll as $responsable) {
-                        $responsables["structure_" . $responsable->getId()] = $responsable;
-                    }
-                    if (!empty($responsables)) return $responsables;
-                }
-
-                $structure = $structure->getParent();
-            } while ($structure !== null);
-        }
-
-        return [];
-    }
-
-    /**
-     * TODO :: a conserver pour init des autorites depuis les structures
-     * Agent[]
-     */
-    public function computeAutorites(Agent $agent, array $superieurs = [], ?DateTime $date = null): array
-    {
-        if ($date === null) $date = new DateTime();
-
-        //checking structure
-        $affectationsPrincipales = $this->getAgentAffectationService()->getAgentAffectationHierarchiquePrincipaleByAgent($agent);
-        if ($affectationsPrincipales === null) return [];
-        $structure = null;
-        if (count($affectationsPrincipales) === 1) {
-            $structure = current($affectationsPrincipales)->getStructure()->getNiv2();
-        } else {
-            foreach ($affectationsPrincipales as $affectation) {
-                $niveau2 = $affectation->getStructure()->getNiv2();
-                if ($structure === null or $niveau2 === $structure) $structure = $niveau2;
-                else return []; //throw new LogicException("Différentes structures de niveau2 affectations principales pour l'agent");
-            }
-        }
-        do {
-            $responsablesAll = array_map(function (StructureResponsable $a) {
-                return $a->getAgent();
-            }, $this->getStructureService()->getResponsables($structure, $date));
-            if (!in_array($agent, $responsablesAll)) {
-                $responsables = [];
-                foreach ($responsablesAll as $responsable) {
-                    if (!in_array($responsable, $superieurs)) {
-                        $responsables["structure_" . $responsable->getId()] = $responsable;
-                    }
-                }
-                if (!empty($responsables)) return $responsables;
-            }
-
-            $structure = ($structure) ? $structure->getParent() : null;
-        } while ($structure !== null);
-
-        return [];
-    }
-
-    /** AgentFormation ************************************************************************************************/
-
-    /**
-     * @param Agent $agent
-     * @param string $annee
-     * @return FormationElement[]
-     */
-    public function getFormationsSuiviesByAnnee(Agent $agent, string $annee): array
-    {
-        $result = [];
-        $formations = $agent->getFormationListe();
-        foreach ($formations as $formation) {
-            $anneeFormation = explode(' - ', $formation->getCommentaire())[0];
-            if ($anneeFormation === $annee) $result[] = $formation;
-        }
-
-        return $result;
-    }
-
     /**
      * @param Agent[] $agents
      * @return array
@@ -492,7 +321,7 @@ EOS;
             $extra = ($structure) ? $structure->getLibelleCourt() : "Affectation inconnue";
             $result[] = array(
                 'id' => $agent->getId(),
-                'label' => $agent->getDenomination(false, true, false),
+                'label' => $agent->getDenomination(),
                 'extra' => "<span class='badge' style='background-color: slategray;'>" . $extra . "</span>",
             );
         }
@@ -502,40 +331,6 @@ EOS;
         return $result;
     }
 
-    /**
-     * todo plutôt dans structure
-     * @param Agent|null $agent
-     * @return StructureResponsable[]|null
-     */
-    public function getResposabiliteStructure(?Agent $agent): ?array
-    {
-        if ($agent === null) return null;
-
-        $qb = $this->getObjectManager()->getRepository(StructureResponsable::class)->createQueryBuilder('sr')
-            ->andWhere('sr.agent = :agent')
-            ->setParameter('agent', $agent)
-            ->andWhere('sr.deleted_on IS NULL');
-        $result = $qb->getQuery()->getResult();
-        return $result;
-    }
-
-    /**
-     * todo plutôt dans structure
-     * @param Agent|null $agent
-     * @return Structure[]|null
-     */
-    public function getGestionnaireStructure(?Agent $agent): ?array
-    {
-        if ($agent === null) return null;
-
-        $qb = $this->getObjectManager()->getRepository(StructureGestionnaire::class)->createQueryBuilder('sg')
-            ->andWhere('sg.agent = :agent')
-            ->setParameter('agent', $agent)
-            ->andWhere('sg.deleted_on IS NULL');
-        $result = $qb->getQuery()->getResult();
-        return $result;
-    }
-
     /**
      * @return User[]
      */
@@ -587,7 +382,7 @@ EOS;
         }
         if ($encours === '1') {
             $qb = AgentAffectation::decorateWithActif($qb, 'affectation')
-                ->andWhere('affectation.deleted_on IS NULL');
+                ->andWhere('affectation.deletedOn IS NULL');
         }
 
 
@@ -598,36 +393,6 @@ EOS;
         return $result;
     }
 
-    /** FICHE DE POSTE PDF ********************************************************************************************/
-
-    /**
-     * @param Agent[] $agents
-     * @return Fichier[] :: [AgentId => Fichier]
-     */
-    public function getFichesPostesPdfByAgents(array $agents): array
-    {
-
-        $ids = array_map(function ($a) {
-            if ($a instanceof StructureAgentForce) $a = $a->getAgent();
-            return $a->getId();
-        }, $agents);
-
-        $qb = $this->getObjectManager()->getRepository(Agent::class)->createQueryBuilder('agent')
-            ->leftJoin('agent.fichiers', 'fichier')->addSelect('fichier')
-            ->leftJoin('fichier.nature', 'nature')->addSelect('nature')
-            ->andWhere('nature.code = :ficheposte')->setParameter('ficheposte', "FICHE_POSTE")
-            ->andWhere('agent.id in (:ids)')->setParameter('ids', $ids);
-
-        $result = $qb->getQuery()->getResult();
-
-        $fiches = [];
-        /** @var Agent $item */
-        foreach ($result as $item) {
-            $fiches[$item->getId()] = $item->getFichiersByCode("FICHE_POSTE");
-        }
-        return $fiches;
-    }
-
     public function getAgentByLogin(string $login): ?Agent
     {
         $qb = $this->createQueryBuilder()
diff --git a/module/Agent/src/Service/AgentAffectation/AgentAffectationService.php b/module/Agent/src/Service/AgentAffectation/AgentAffectationService.php
index 60402beada50120db6a85d81431fa3f9c4e5bff2..640ad5d0bf700caa5b99122d42234aeb83c5a460 100644
--- a/module/Agent/src/Service/AgentAffectation/AgentAffectationService.php
+++ b/module/Agent/src/Service/AgentAffectation/AgentAffectationService.php
@@ -2,95 +2,33 @@
 
 namespace Agent\Service\AgentAffectation;
 
-use Agent\Entity\Db\AgentAffectation;
 use Agent\Entity\Db\Agent;
-use DateTime;
+use Agent\Entity\Db\AgentAffectation;
 use Doctrine\ORM\QueryBuilder;
-use Structure\Entity\Db\Structure;
-use UnicaenApp\Service\EntityManagerAwareTrait;
+use DoctrineModule\Persistence\ProvidesObjectManager;
 
-class AgentAffectationService {
-    use EntityManagerAwareTrait;
+class AgentAffectationService
+{
+    use ProvidesObjectManager;
 
     /** REQUETAGE *****************************************************************************************************/
 
-    /**
-     * @return QueryBuilder
-     */
-    public function createQueryBuilder() : QueryBuilder
+    public function createQueryBuilder(): QueryBuilder
     {
-        $qb = $this->getEntityManager()->getRepository(AgentAffectation::class)->createQueryBuilder('agentaffectation')
+        $qb = $this->getObjectManager()->getRepository(AgentAffectation::class)->createQueryBuilder('agentaffectation')
             ->join('agentaffectation.agent', 'agent')->addSelect('agent')
             ->join('agentaffectation.structure', 'structure')->addSelect('structure')
-            ->andWhere('agentaffectation.deleted_on IS NULL')
-        ;
+            ->andWhere('agentaffectation.deletedOn IS NULL');
         return $qb;
     }
 
     /** @return AgentAffectation[] */
-    public function getAgentsAffectationsByAgentAndDate(Agent $agent, ?DateTime $date = null) : array
-    {
-        if ($date === null) $date = new DateTime();
-        $qb= $this->createQueryBuilder()
-            ->andWhere('agentaffectation.agent = :agent')
-            ->setParameter('agent', $agent)
-        ;
-
-//        $entityName = 'agentaffectation';
-//        $qb = $qb
-//            ->andWhere("(" .$entityName . '.dateDebut IS NULL OR ' . $entityName . '.dateDebut <= :date'.")")
-////            ->andWhere("agentaffectation.dateFin >= :date")
-//            ->setParameter('date', $date)
-//        ;
-
-        $result = $qb->getQuery()->getResult();
-        $result = array_filter($result, function (AgentAffectation $a) use ($date) {
-//            var_dump($a->getDateDebut()->format('H/m/Y'));
-            if ($a->getDateDebut() !== null AND $a->getDateDebut() >= $date) return false;
-//            var_dump($a->getDateFin()->format('H/m/Y'));
-            if ($a->getDateFin() !== null AND $a->getDateFin() <= $date) return false;
-            return true;
-        });
-        return $result;
-    }
-
-    /** @return AgentAffectation[] */
-    public function getAgentAffectationsByAgent(Agent $agent, bool $actif = true) : array
+    public function getAgentAffectationsByAgent(Agent $agent, bool $actif = true): array
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('agentaffectation.agent = :agent')
             ->setParameter('agent', $agent)
-            ->orderBy('agentaffectation.dateDebut', 'DESC')
-        ;
-
-        if ($actif === true) $qb = AgentAffectation::decorateWithActif($qb, 'agentaffectation');
-
-        $result = $qb->getQuery()->getResult();
-        return $result;
-    }
-
-    /** @return AgentAffectation[]|null */
-    public function getAgentAffectationHierarchiquePrincipaleByAgent(Agent $agent) : ?array
-    {
-        $result = $this->getAgentAffectationsByAgent($agent, true);
-        $result = array_filter($result, function (AgentAffectation $a) { return $a->isPrincipale() && $a->isHierarchique();});
-        $nb = count($result);
-        //        if ( $nb > 1) throw new RuntimeException("Plusieurs affections hiérarchique principale pour l'agent [".$agent->getDenomination()."]");
-        if ($nb === 0 ) return null;
-        return $result;
-    }
-
-    /**
-     * @param Structure $structure
-     * @param bool $actif
-     * @return array
-     */
-    public function getAgentAffectationsByStructure(Structure $structure, bool $actif = true) : array
-    {
-        $qb = $this->createQueryBuilder()
-            ->andWhere('agentaffectation.structure = :structure')
-            ->setParameter('structure', $structure)
-        ;
+            ->orderBy('agentaffectation.dateDebut', 'DESC');
 
         if ($actif === true) $qb = AgentAffectation::decorateWithActif($qb, 'agentaffectation');
 
diff --git a/module/Agent/src/Service/AgentAffectation/AgentAffectationServiceFactory.php b/module/Agent/src/Service/AgentAffectation/AgentAffectationServiceFactory.php
index a3ce26d8dab9cab32a4bcd325661995c46bc1bad..19c1bee32aeaed0c6072ba68994cda8820b3d747 100644
--- a/module/Agent/src/Service/AgentAffectation/AgentAffectationServiceFactory.php
+++ b/module/Agent/src/Service/AgentAffectation/AgentAffectationServiceFactory.php
@@ -24,7 +24,7 @@ class AgentAffectationServiceFactory
         $entityManager = $container->get('doctrine.entitymanager.orm_default');
 
         $service = new AgentAffectationService();
-        $service->setEntityManager($entityManager);
+        $service->setObjectManager($entityManager);
         return $service;
     }
 }
\ No newline at end of file
diff --git a/module/Agent/src/Service/AgentGrade/AgentGradeService.php b/module/Agent/src/Service/AgentGrade/AgentGradeService.php
index 31e05c3fb90d053ce9254c14f66e7db0bde5d9e3..5481db6fbcbf049e72bf74229f64b48375a436b0 100644
--- a/module/Agent/src/Service/AgentGrade/AgentGradeService.php
+++ b/module/Agent/src/Service/AgentGrade/AgentGradeService.php
@@ -9,11 +9,10 @@ use Carriere\Entity\Db\Correspondance;
 use Carriere\Entity\Db\EmploiType;
 use Carriere\Entity\Db\Grade;
 use Doctrine\ORM\QueryBuilder;
-use Structure\Entity\Db\Structure;
-use UnicaenApp\Service\EntityManagerAwareTrait;
+use DoctrineModule\Persistence\ProvidesObjectManager;
 
 class AgentGradeService {
-    use EntityManagerAwareTrait;
+    use ProvidesObjectManager;
 
     /** REQUETAGE *****************************************************************************************************/
 
@@ -22,13 +21,13 @@ class AgentGradeService {
      */
     public function createQueryBuilder() : QueryBuilder
     {
-        $qb = $this->getEntityManager()->getRepository(AgentGrade::class)->createQueryBuilder('agentgrade')
+        $qb = $this->getObjectManager()->getRepository(AgentGrade::class)->createQueryBuilder('agentgrade')
             ->join('agentgrade.agent', 'agent')->addSelect('agent')
             ->join('agentgrade.structure', 'structure')->addSelect('structure')
             ->leftjoin('agentgrade.grade', 'grade')->addSelect('grade')
             ->leftjoin('agentgrade.corps', 'corps')->addSelect('corps')
             ->leftjoin('agentgrade.correspondance', 'correspondance')->addSelect('correspondance')
-            ->andWhere('agentgrade.deleted_on IS NULL')
+            ->andWhere('agentgrade.deletedOn IS NULL')
         ;
         return $qb;
     }
@@ -52,24 +51,6 @@ class AgentGradeService {
         return $result;
     }
 
-    /**
-     * @param Structure $structure
-     * @param bool $actif
-     * @return array
-     */
-    public function getAgentGradesByStructure(Structure $structure, bool $actif = true) : array
-    {
-        $qb = $this->createQueryBuilder()
-            ->andWhere('agentgrade.structure = :structure')
-            ->setParameter('structure', $structure)
-        ;
-
-        if ($actif === true) $qb = AgentGrade::decorateWithActif($qb, 'agentgrade');
-
-        $result = $qb->getQuery()->getResult();
-        return $result;
-    }
-
     /**
      * @param Grade $grade
      * @param bool $actif
diff --git a/module/Agent/src/Service/AgentGrade/AgentGradeServiceFactory.php b/module/Agent/src/Service/AgentGrade/AgentGradeServiceFactory.php
index 6ad5af8fe1d7a566fcd2414de7c4ea5851b45bfb..dacadfefd0cd8440acf88317dc3027bf2a84b654 100644
--- a/module/Agent/src/Service/AgentGrade/AgentGradeServiceFactory.php
+++ b/module/Agent/src/Service/AgentGrade/AgentGradeServiceFactory.php
@@ -21,7 +21,7 @@ class AgentGradeServiceFactory {
         $entityManager = $container->get('doctrine.entitymanager.orm_default');
 
         $service = new AgentGradeService();
-        $service->setEntityManager($entityManager);
+        $service->setObjectManager($entityManager);
         return $service;
     }
 }
\ No newline at end of file
diff --git a/module/Agent/src/Service/AgentQuotite/AgentQuotiteService.php b/module/Agent/src/Service/AgentQuotite/AgentQuotiteService.php
index 8990c48da807c3340610813b89740bf6ca24dd53..424622579da6c09b99dcefc736bed2f4b6388ac1 100644
--- a/module/Agent/src/Service/AgentQuotite/AgentQuotiteService.php
+++ b/module/Agent/src/Service/AgentQuotite/AgentQuotiteService.php
@@ -5,23 +5,22 @@ namespace Agent\Service\AgentQuotite;
 use Agent\Entity\Db\Agent;
 use Agent\Entity\Db\AgentQuotite;
 use Doctrine\ORM\QueryBuilder;
-use UnicaenApp\Exception\RuntimeException;
-use UnicaenApp\Service\EntityManagerAwareTrait;
+use DoctrineModule\Persistence\ProvidesObjectManager;
 
-class AgentQuotiteService {
-    use EntityManagerAwareTrait;
+class AgentQuotiteService
+{
+    use ProvidesObjectManager;
 
     /** GESTION ENTITE ************************************************************************************************/
     // Complétement importées et jamais modifiées
 
     /** REQUETAGE *****************************************************************************************************/
 
-    public function createQueryBuilder() : QueryBuilder
+    public function createQueryBuilder(): QueryBuilder
     {
-        $qb = $this->getEntityManager()->getRepository(AgentQuotite::class)->createQueryBuilder('agentquotite')
+        $qb = $this->getObjectManager()->getRepository(AgentQuotite::class)->createQueryBuilder('agentquotite')
             ->join('agentquotite.agent', 'agent')->addSelect('agent')
-            ->andWhere('agentquotite.deleted_on IS NULL')
-        ;
+            ->andWhere('agentquotite.deletedOn IS NULL');
         return $qb;
     }
 
@@ -30,13 +29,12 @@ class AgentQuotiteService {
      * @param bool $actif
      * @return array
      */
-    public function getAgentQuotitesbyAgent(Agent $agent, bool $actif = true) : array
+    public function getAgentQuotitesByAgent(Agent $agent, bool $actif = true): array
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('agentquotite.agent = :agent')
-            ->andWhere('agentquotite.deleted_on IS NULL')
-            ->setParameter('agent', $agent)
-        ;
+            ->andWhere('agentquotite.deletedOn IS NULL')
+            ->setParameter('agent', $agent);
 
         if ($actif === true) $qb = AgentQuotite::decorateWithActif($qb, 'agentquotite');
 
@@ -44,18 +42,5 @@ class AgentQuotiteService {
         return $result;
     }
 
-    /**
-     * @param Agent $agent
-     * @return AgentQuotite|null
-     * @attention null est equivalent à une quotité de 100%
-     */
-    public function getAgentQuotiteCurrent(Agent $agent) : ?AgentQuotite
-    {
-        $result = $this->getAgentQuotitesbyAgent($agent);
-        $nb = count($result);
 
-        if ($nb === 0) return null;
-        if ($nb > 1) throw new RuntimeException("Plusieurs AgentQuotite de retournées pour l'agent [".$agent->getId()."]");
-        return $result[0];
-    }
 }
\ No newline at end of file
diff --git a/module/Agent/src/Service/AgentQuotite/AgentQuotiteServiceFactory.php b/module/Agent/src/Service/AgentQuotite/AgentQuotiteServiceFactory.php
index db55362c64e4299028c9fda79b09cc29623ddb25..8f1865839e8c899d22542b552cc72a2a8b9aed94 100644
--- a/module/Agent/src/Service/AgentQuotite/AgentQuotiteServiceFactory.php
+++ b/module/Agent/src/Service/AgentQuotite/AgentQuotiteServiceFactory.php
@@ -21,7 +21,7 @@ class AgentQuotiteServiceFactory {
         $entityManager = $container->get('doctrine.entitymanager.orm_default');
 
         $service = new AgentQuotiteService();
-        $service->setEntityManager($entityManager);
+        $service->setObjectManager($entityManager);
         return $service;
     }
 }
\ No newline at end of file
diff --git a/module/Agent/src/Service/AgentStatut/AgentStatutService.php b/module/Agent/src/Service/AgentStatut/AgentStatutService.php
index d58bb3a16a8cf1c5fbe1a154c9a4236289ef6b0d..688bcc96bc8e479f2b0a22f9d4104c2804f620b8 100644
--- a/module/Agent/src/Service/AgentStatut/AgentStatutService.php
+++ b/module/Agent/src/Service/AgentStatut/AgentStatutService.php
@@ -5,20 +5,20 @@ namespace Agent\Service\AgentStatut;
 use Agent\Entity\Db\AgentStatut;
 use Agent\Entity\Db\Agent;
 use Doctrine\ORM\QueryBuilder;
+use DoctrineModule\Persistence\ProvidesObjectManager;
 use Structure\Entity\Db\Structure;
-use UnicaenApp\Service\EntityManagerAwareTrait;
 
 class AgentStatutService {
-    use EntityManagerAwareTrait;
+    use ProvidesObjectManager;
 
     /** REQUETAGE *****************************************************************************************************/
 
     public function createQueryBuilder() : QueryBuilder
     {
-        $qb = $this->getEntityManager()->getRepository(AgentStatut::class)->createQueryBuilder('agentstatut')
+        $qb = $this->getObjectManager()->getRepository(AgentStatut::class)->createQueryBuilder('agentstatut')
             ->join('agentstatut.agent', 'agent')->addSelect('agent')
             ->join('agentstatut.structure', 'structure')->addSelect('structure')
-            ->andWhere('agentstatut.deleted_on IS NULL')
+            ->andWhere('agentstatut.deletedOn IS NULL')
         ;
         return $qb;
     }
diff --git a/module/Agent/src/Service/AgentStatut/AgentStatutServiceFactory.php b/module/Agent/src/Service/AgentStatut/AgentStatutServiceFactory.php
index 1d890a66c370688ce01b7e5ca7f32e930bd45bfd..4dc781ef48abae4ec96c5c287780a6ad25ae9b0b 100644
--- a/module/Agent/src/Service/AgentStatut/AgentStatutServiceFactory.php
+++ b/module/Agent/src/Service/AgentStatut/AgentStatutServiceFactory.php
@@ -21,7 +21,7 @@ class AgentStatutServiceFactory {
         $entityManager = $container->get('doctrine.entitymanager.orm_default');
 
         $service = new AgentStatutService();
-        $service->setEntityManager($entityManager);
+        $service->setObjectManager($entityManager);
         return $service;
     }
 }
\ No newline at end of file
diff --git a/module/Agent/src/Service/AgentValidateur/AgentValidateurService.php b/module/Agent/src/Service/AgentValidateur/AgentValidateurService.php
index 1f066dc81d65896efe9463271f074fa57d6d730b..55d7b799a1b66f8d4c7406ba5a688689c5342976 100644
--- a/module/Agent/src/Service/AgentValidateur/AgentValidateurService.php
+++ b/module/Agent/src/Service/AgentValidateur/AgentValidateurService.php
@@ -22,7 +22,8 @@ class AgentValidateurService
 
     public function create(AgentValidateur $agentValidateur) : AgentValidateur
     {
-        $id = $agentValidateur->getAgent()->getId()."-MESFORMATIONS-".$agentValidateur->getValidateur()->getId();
+
+        $id = $agentValidateur->getAgent()->getId()."-MESFORMATIONS-".$agentValidateur->getValidateur()->getId()."-".((new DateTime())->getTimestamp());
         $agentValidateur->setId($id);
         $this->getObjectManager()->persist($agentValidateur);
         $this->getObjectManager()->flush($agentValidateur);
@@ -74,7 +75,7 @@ class AgentValidateurService
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
-            throw new RuntimeException("Plusieurs [".AgentValidateur::class."] partagent le même id [".$id."]");
+            throw new RuntimeException("Plusieurs [".AgentValidateur::class."] partagent le même id [".$id."]",0,$e);
         }
         return $result;
     }
@@ -102,7 +103,7 @@ class AgentValidateurService
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('AgentValidateur.agent = :agent')->setParameter('agent', $agent)
-            ->andWhere('agent.deleted_on  IS NULL')
+            ->andWhere('agent.deletedOn  IS NULL')
             ->andWhere('AgentValidateur.deletedOn  IS NULL')
             ->orderBy('AgentValidateur.' . $champ, $ordre);
         if ($histo === false) $qb = $qb->andWhere('AgentValidateur.histoDestruction IS NULL');
@@ -111,6 +112,31 @@ class AgentValidateurService
         return $result;
     }
 
+    /**
+     * @param Agent[] $agents
+     * @param DateTime|null $date
+     * @return array
+     */
+    public function getAgentsValidateursByAgents(array $agents, ?DateTime $date = null): array
+    {
+        if ($date === null) $date = new DateTime();
+        $qb = $this->createQueryBuilder()
+            ->andWhere('AgentValidateur.agent in (:agents)')->setParameter('agents', $agents)
+            ->andWhere('AgentValidateur.dateDebut IS NULL OR AgentValidateur.dateDebut <= :date')
+            ->andWhere('AgentValidateur.dateFin IS NULL OR AgentValidateur.dateFin >= :date')->setParameter('date', $date)
+            ->andWhere('AgentValidateur.deletedOn IS NULL');
+
+        $result = $qb->getQuery()->getResult();
+
+        $dictionnaire = [];
+        foreach ($result as $validateur) {
+            $dictionnaire[$validateur->getAgent()->getId()][] = $validateur;
+        }
+        return $dictionnaire;
+    }
+
+
+
     /** @return AgentValidateur[] */
     public function getAgentsValidateursByValidateur(?Agent $validateur, bool $histo = false, string $champ = 'id', $ordre = 'ASC') : array
     {
@@ -128,7 +154,7 @@ class AgentValidateurService
     public function getAgentsWithValidateur(?Agent $validateur, DateTime $dateDebut = null, DateTime $dateFin = null): array
     {
         $qb = $this->createQueryBuilder()
-            ->andWhere('agent.deleted_on  IS NULL')
+            ->andWhere('agent.deletedOn  IS NULL')
             ->andWhere('AgentValidateur.superieur = :validateur')->setParameter('validateur', $validateur)
             ->andWhere('AgentValidateur.histoCreation IS NULL OR AgentValidateur.histoCreation < :fin')->setParameter('fin', $dateFin)
             ->andWhere('AgentValidateur.histoDestruction IS NULL OR AgentValidateur.histoDestruction > :debut')->setParameter('debut', $dateDebut);
@@ -148,7 +174,7 @@ class AgentValidateurService
     {
         $qb = $this->createQueryBuilder();
         //superieur
-        $qb = $qb   ->andWhere('agent.deleted_on  IS NULL')
+        $qb = $qb   ->andWhere('agent.deletedOn  IS NULL')
                     ->andWhere('AgentValidateur.validateur = :validateur')->setParameter('validateur', $validateur)
                     ->andWhere('AgentValidateur.histoDestruction IS NULL')
         ;
@@ -163,47 +189,13 @@ class AgentValidateurService
 
     /** FACADE ********************************************************************************************************/
 
-    public function createAgentValidateur(Agent $agent, Agent $validateur) : AgentValidateur
-    {
-        $agentValidateur = new AgentValidateur();
-        $agentValidateur->setAgent($agent);
-        $agentValidateur->setValidateur($validateur);
-        $this->create($agentValidateur);
-        return $agentValidateur;
-    }
-
-    /**
-     * @return array
-     */
-    public function createAgentValidateurWithArray(?Agent $agent, array $validateurIdArray, array $agents) : array
-    {
-        $result = []; $warning = [];
-        if ($agent === null) throw new RuntimeException("Aucun agent de fourni");
-        $superieurs = [];
-        foreach ($validateurIdArray as $item) {
-            if ($item !== '') {
-                $superieur = $agents[$item];
-                if ($superieur === null) $warning[] = "Aucun agent de connu avec l'identifiant [" . $item . "] (Agent = ".$agent->getId()."| Supérieur)";
-                else $superieurs[] = $superieur;
-            }
-        }
-
-        foreach ($agent->getValidateurs() as $current) $this->historise($current);
-        foreach ($superieurs as $superieur) {
-            $agentValidateur = $this->createAgentValidateur($agent,$superieur);
-            $result[] = $agentValidateur;
-        }
-        return [
-            'result' => $result,
-            'warning' => $warning
-        ];
-    }
-
-    public function historiseAll(?Agent $agent) : void
+    public function historiseAll(?Agent $agent, bool $activeOnly = false) : void
     {
         if ($agent !== null) {
             $superieurs = $this->getAgentsValidateursByAgent($agent);
-            foreach ($superieurs as $superieur) $this->historise($superieur);
+            foreach ($superieurs as $superieur) {
+                if (!$activeOnly OR $superieur->estEnCours()) $this->historise($superieur);
+            }
         }
     }
 
@@ -264,4 +256,6 @@ class AgentValidateurService
         $result = $qb->getQuery()->getResult();
         return !empty($result);
     }
+
+
 }
\ No newline at end of file
diff --git a/module/Agent/src/View/Helper/AgentAffectationViewHelper.php b/module/Agent/src/View/Helper/AgentAffectationViewHelper.php
index 02e8c9b9f9456894d0570dcb36a917202cf6957c..2e02f27b8a1858bf630abe4834915d38f912c695 100644
--- a/module/Agent/src/View/Helper/AgentAffectationViewHelper.php
+++ b/module/Agent/src/View/Helper/AgentAffectationViewHelper.php
@@ -10,11 +10,11 @@ use Laminas\View\Resolver\TemplatePathStack;
 
 /**
  * Note : les clefs du tableau options sont les suivantes :
- * id               => l'identifiant du status (OSE-2017-17566-14)
- * denomination     => le nom de l'agent impliqué (Billy Bob)
- * structure        => la structure impliquée (DSI)
- * periode          => la periode (01/01/2001 => 06/06/2006)
- * statut           => la liste des statuts
+ * id : l'identifiant du status (OSE-2017-17566-14)
+ * denomination : le nom de l'agent impliqué (Billy Bob)
+ * structure : la structure impliquée (DSI)
+ * periode : la periode (01/01/2001 => 06/06/2006)
+ * statut : la liste des statuts
  *
  * si non défini ou à vrai alors les données sont affichées
  */
diff --git a/module/Agent/src/View/Helper/AgentGradeViewHelper.php b/module/Agent/src/View/Helper/AgentGradeViewHelper.php
index 3fc79e8859771a5d307fa604c8e989f6189cbf41..6ef5d118478b6f95d1ba89751a79bd1c50d6fd6f 100644
--- a/module/Agent/src/View/Helper/AgentGradeViewHelper.php
+++ b/module/Agent/src/View/Helper/AgentGradeViewHelper.php
@@ -11,12 +11,12 @@ use Laminas\View\Resolver\TemplatePathStack;
 
 /**
  * Note : les clefs du tableau options sont les suivantes :
- * denomination     => le nom de l'agent impliqué (Billy Bob)
- * structure        => la structure impliquée (DSI)
- * grade            =>
- * corps            =>
- * bap              =>
- * periode          => la periode (01/01/2001 => 06/06/2006)
+ * denomination : le nom de l'agent impliqué (Billy Bob)
+ * structure : la structure impliquée (DSI)
+ * grade
+ * corps
+ * bap
+ * periode : la periode (01/01/2001 au 06/06/2006)
  * si non défini ou à vrai alors les données sont affichées
  */
 class AgentGradeViewHelper extends AbstractHelper
diff --git a/module/Agent/src/View/Helper/AgentStatutViewHelper.php b/module/Agent/src/View/Helper/AgentStatutViewHelper.php
index a86028ef4cf94ceb045aaafeb8edafa6c6f69dcf..824e8493c5de0e7834e1698701081de7586e4b16 100644
--- a/module/Agent/src/View/Helper/AgentStatutViewHelper.php
+++ b/module/Agent/src/View/Helper/AgentStatutViewHelper.php
@@ -11,11 +11,11 @@ use Laminas\View\Resolver\TemplatePathStack;
 
 /**
  * Note : les clefs du tableau options sont les suivantes :
- * id               => l'identifiant du status (OSE-2017-17566-14)
- * denomination     => le nom de l'agent impliqué (Billy Bob)
- * structure        => la structure impliquée (DSI)
- * periode          => la periode (01/01/2001 => 06/06/2006)
- * statut           => la liste des statuts
+ * id : l'identifiant du status (OSE-2017-17566-14)
+ * denomination : le nom de l'agent impliqué (Billy Bob)
+ * structure : la structure impliquée (DSI)
+ * periode : la periode (01/01/2001 => 06/06/2006)
+ * statut : la liste des statuts
  *
  * si non défini ou à vrai alors les données sont affichées
  */
diff --git a/module/Agent/view/agent/agent/afficher.phtml b/module/Agent/view/agent/agent/afficher.phtml
index 975fbf6f1e2c0cc36459ec7891ee2f2bcfb3b25f..9a29832184ada0f85e40051a56130082eb339018 100644
--- a/module/Agent/view/agent/agent/afficher.phtml
+++ b/module/Agent/view/agent/agent/afficher.phtml
@@ -53,7 +53,7 @@ $canModifier = $this->isAllowed(AgentPrivileges::getResourceId(AgentPrivileges::
                         <li>
                             <?php
                             $structure = $agentAffectation->getStructure();
-                            $niveau2 = $structure ? $structure->getNiv2() : null;
+                            $niveau2 = $structure?->getNiv2();
                             ?>
                             <?php if ($structure) : ?>
                                 <?php echo $structure->getLibelleLong(); ?>
@@ -119,7 +119,7 @@ $canModifier = $this->isAllowed(AgentPrivileges::getResourceId(AgentPrivileges::
         </dd>
     <?php endif; ?>
 
-    <dt class="col-md-4"> Validateur·trices<br>
+    <dt class="col-md-4"> Valideur·euses<br>
         <?php if ($canGererValideurSaisi) : ?>
             <?php /** @see \Agent\Controller\ValidateurController::ajouterAction() */ ?>
             <a href="<?php echo $this->url('agent/validateur/ajouter', ['agent' => $agent->getId()], [], true); ?>"
diff --git a/module/Agent/view/agent/agent/mes-agents.phtml b/module/Agent/view/agent/agent/mes-agents.phtml
index 34716aecbd718717da27f9fc6a66302fd2e3c22c..f8d60321980c4da293fbf6a1d9ea9d5734bdb452 100644
--- a/module/Agent/view/agent/agent/mes-agents.phtml
+++ b/module/Agent/view/agent/agent/mes-agents.phtml
@@ -28,7 +28,7 @@ $nbAgent = count($agents);
 $this->headTitle("Mes agent·es");
 
 /**
- * !!Remarque!! par besoin de faire jouer l'assertion pour chaque cas car l'on sait que les agent·es listé·es sont sous
+ * Remarque : par besoin de faire jouer l'assertion pour chaque cas, car l'on sait que les agent·es listé·es sont sous
  * la responsabilité du validateur·trice
  */
 $canAfficherAgent = $this->isAllowed(AgentPrivileges::getResourceId(AgentPrivileges::AGENT_AFFICHER));
@@ -214,7 +214,16 @@ $anneeCourante = (new DateTime())->format('Y');
                                     <?php else: ?>
                                         <?php $etatActif = $inscription->getEtatActif(); ?>
                                         <?php if ($etatActif) : ?>
-                                            Validée le <?php echo $inscription->getEtatActif()->getHistoCreation()->format('d/m/Y'); ?>
+                                            <?php if ($inscription->getEtatActif()->getType()->getCode() === InscriptionEtats::ETAT_REFUSER) : ?>
+                                                Réfusée
+                                            <?php else : ?>
+                                                <?php if ($inscription->getEtatActif()->getType()->getCode() === InscriptionEtats::ETAT_DESISTEMENT) : ?>
+                                                    Désistement
+                                                <?php else : ?>
+                                                    Validée
+                                                <?php endif; ?>
+                                            <?php endif; ?>
+                                            le <?php echo $inscription->getEtatActif()->getHistoCreation()->format('d/m/Y'); ?>
                                             <br>
                                             par
                                             <?php echo $inscription->getEtatActif()->getHistoCreateur()->getDisplayName(); ?>
@@ -303,7 +312,8 @@ $anneeCourante = (new DateTime())->format('Y');
                             </div>
                             <div>
                                 <?php echo $demande->getLibelle(); ?> <br>
-                                <?php echo $demande->getPeriode(); ?>
+                                <?php echo $demande->getPeriode(); ?> <br>
+                                <small> Demande créée le <?php echo $demande->getHistoCreation()->format('d/m/Y'); ?> </small>
                                 <?php if ($canAfficherDemande) : ?>
                                     <br>
                                     <?php /** @see DemandeExterneController::afficherAction() */ ?>
@@ -323,15 +333,15 @@ $anneeCourante = (new DateTime())->format('Y');
                             </div>
                             <div>
                                 <?php if ($enAttente) : ?>
-                                    <?php /** @see DemandeExterneController::validerResponsableAction() */ ?>
-                                    <a href="<?php echo $this->url('demande-externe/valider-responsable', ['demande-externe' => $demande->getId()], [], true); ?>"
+                                    <?php /** @see DemandeExterneController::validerValideurAction() */ ?>
+                                    <a href="<?php echo $this->url('demande-externe/valider-valideur', ['demande-externe' => $demande->getId()], [], true); ?>"
                                        class="action success ajax-modal" data-event="modification">
                                         <span class="icon icon-checked"></span>
                                         Valider
                                     </a>
                                     <br>
-                                    <?php /** @see DemandeExterneController::refuserResponsableAction() */ ?>
-                                    <a href="<?php echo $this->url('demande-externe/refuser-responsable', ['demande-externe' => $demande->getId()], [], true); ?>"
+                                    <?php /** @see DemandeExterneController::refuserValideurAction() */ ?>
+                                    <a href="<?php echo $this->url('demande-externe/refuser-valideur', ['demande-externe' => $demande->getId()], [], true); ?>"
                                        class="action danger ajax-modal" data-event="modification">
                                         <span class="icon icon-unchecked"></span>
                                         Refuser
@@ -348,7 +358,12 @@ $anneeCourante = (new DateTime())->format('Y');
                                         </span>
                                         <?php endif; ?>
                                     <?php else : ?>
-                                        Validée le <?php echo $demande->getEtatActif()->getHistoCreation()->format('d/m/Y'); ?>
+                                        <?php if ($demande->getEtatActif()->getType()->getCode() === DemandeExterneEtats::ETAT_REJETEE) : ?>
+                                            Réfusée
+                                        <?php else : ?>
+                                            Validée
+                                        <?php endif; ?>
+                                        le <?php echo $demande->getEtatActif()->getHistoCreation()->format('d/m/Y'); ?>
                                         <br>
                                         par
                                         <?php echo $demande->getEtatActif()->getHistoCreateur()->getDisplayName(); ?>
@@ -395,7 +410,6 @@ $anneeCourante = (new DateTime())->format('Y');
             event.div.modal('hide');
             window.location.reload();
         });
-        // $('#plan_annee_courante').on("change", toggleInscriptionPlan);
         $('#stage_annee_courante').on("change", toggleInscriptionStage);
     });
 
diff --git a/module/Agent/view/agent/charte/afficher.phtml b/module/Agent/view/agent/charte/afficher.phtml
index 2562434c5f1a30dcc6cf0f07a1c1058a65b228e6..a618ac708214dcae076614ee0d86a586ebb4bd37 100644
--- a/module/Agent/view/agent/charte/afficher.phtml
+++ b/module/Agent/view/agent/charte/afficher.phtml
@@ -37,7 +37,7 @@ use UnicaenValidation\Entity\Db\ValidationInstance;
         <?php else : ?>
             <div class="alert alert-success">
                 <span class="icon icon-checked"></span>
-                Charte signé
+                Charte signée
                 le <?php  echo $instance->getHistoCreation()->format('d/m/Y'); ?>
                 par <?php echo $instance->getHistoCreateur()->getDisplayName(); ?>
             </div>
diff --git a/module/Agent/view/agent/validateur/importer.phtml b/module/Agent/view/agent/validateur/importer.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..414e3baf76380e1b835879281aee95a63c4465db
--- /dev/null
+++ b/module/Agent/view/agent/validateur/importer.phtml
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * @see \Agent\Controller\ValidateurController::importerAction()
+ * @var string $title
+ * @var CsvImportationForm $form
+ * @var string $type
+ * @var string[] $error
+ * @var string[] $warning
+ * @var string[] $info
+ * @var Agent[] $chaines
+ */
+
+use Agent\Entity\Db\Agent;
+use Application\Form\CsvImportation\CsvImportationForm;
+
+?>
+
+<h1 class="page-header">
+    Importation de chaînes de validation
+</h1>
+
+<?php echo $this->form($form); ?>
+
+<?php if (!empty($info)) : ?>
+    <div class="alert alert-info">
+        <span class="icon icon-information"></span>
+        <?php echo implode('<br>', $info); ?>
+    </div>
+<?php endif; ?>
+<?php if (!empty($error)) : ?>
+    <div class="alert alert-danger">
+        <span class="icon icon-attention"></span>
+        <?php echo implode('<br>', $error); ?>
+    </div>
+<?php else : ?>
+
+    <?php if (!empty($warning)) : ?>
+    <div class="alert alert-warning">
+        <ul>
+        <?php foreach ($warning as $item) : ?>
+            <li> <?php echo $item; ?> </li>
+        <?php endforeach; ?>
+        </ul>
+    </div>
+<?php endif; ?>
+
+    <?php if (isset($chaines) AND $chaines !== []) : ?>
+    <table class="table table-condensed">
+        <thead>
+        <tr>
+            <th> Agent·e </th>
+            <th> Valideur·euse </th>
+            <th> Date de début </th>
+            <th> Date de fin </th>
+        </tr>
+        </thead>
+        <tbody>
+            <?php foreach ($chaines as [$agent, $responsable, $dateDebut, $dateFin]) : ?>
+                <tr>
+                    <td> <?php echo $agent?->getDenomination(); ?> </td>
+                    <td> <?php echo $responsable?->getDenomination(); ?> </td>
+                    <td> <?php echo ($dateDebut)?$dateDebut->format('d/m/Y'):"---"; ?> </td>
+                    <td> <?php echo ($dateFin)?$dateFin->format('d/m/Y'):"---"; ?> </td>
+                </tr>
+            <?php endforeach; ?>
+        </tbody>
+    </table>
+<?php endif; ?>
+<?php endif; ?>
diff --git a/module/Agent/view/agent/validateur/index.phtml b/module/Agent/view/agent/validateur/index.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..e26380c4acf70cceecfcc0841d07a17494763c74
--- /dev/null
+++ b/module/Agent/view/agent/validateur/index.phtml
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @see \Agent\Controller\ValidateurController::indexAction()
+ */
+
+?>
+
+<h1 class="page-header">
+    Chaînes de validation
+</h1>
+
+<h2> Importer des chaînes de validation</h2>
+
+<div class="alert alert-info">
+    <p>
+    Des chaines de validations peuvent être importées depuis un fichier csv avec pour format : <code>agent_id;valideur_id;date_debut;date_fin</code>.<br>
+    Les identifiants sont les identifiants internes de l'application et les dates sont à fournir au format <code>DD/MM/YYYY</code>. La date de fin peut être laissée vide.
+    </p>
+
+    <strong>Attention :</strong> tou·tes agent·es listé·es veront leurs chaines de validations actives historisées.
+</div>
+
+
+
+<?php /** @see \Agent\Controller\ValidateurController::importerAction() */ ?>
+<a href="<?php echo $this->url('agent/validateur/importer', [], [], true); ?>"
+   class="btn btn-primary"
+>
+    <span class="icon icon-csv"></span>
+    Importer
+</a>
diff --git a/module/Application/Module.php b/module/Application/Module.php
index 66835064dd8e5972451cb5223b0c8d7141a4e14c..6065e039ed6a87a3a7ad7f61e04a0709fb0d38fe 100755
--- a/module/Application/Module.php
+++ b/module/Application/Module.php
@@ -9,16 +9,23 @@
 
 namespace Application;
 
+use Laminas\Config\Config;
 use Laminas\Http\Request as HttpRequest;
 use Laminas\Mvc\ModuleRouteListener;
 use Laminas\Mvc\MvcEvent;
 use Laminas\Stdlib\ArrayUtils;
 use Laminas\Stdlib\Glob;
 use Laminas\Config\Factory as ConfigFactory;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\NotFoundExceptionInterface;
 
 class Module
 {
-    public function onBootstrap(MvcEvent $e)
+    /**
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
+    public function onBootstrap(MvcEvent $e): void
     {
         $e->getApplication()->getServiceManager()->get('translator');
         $eventManager        = $e->getApplication()->getEventManager();
@@ -43,7 +50,8 @@ class Module
 
     }
 
-    public function onUserLogin( $e ) {
+    public function onUserLogin( $e )
+    {
         if (is_string($identity = $e->getIdentity())) {
             // login de l'utilisateur authentifié
             $username = $identity;
@@ -57,7 +65,7 @@ class Module
     }
 
 
-    public function getConfig()
+    public function getConfig(): array|Config
     {
         $configInit = [
             __DIR__ . '/config/module.config.php'
@@ -71,7 +79,7 @@ class Module
     }
 
 
-    public function getAutoloaderConfig()
+    public function getAutoloaderConfig(): array
     {
         return array(
             'Laminas\Loader\StandardAutoloader' => array(
diff --git a/module/Application/config/example.php b/module/Application/config/example.php
index 40214fc8a893852d670cc8780f4a599c3558b2c3..f3f2f8a582d04c6dfd1be4e0a5f4c74d8ecee581 100644
--- a/module/Application/config/example.php
+++ b/module/Application/config/example.php
@@ -3,8 +3,6 @@
 namespace Application;
 
 use UnicaenPrivilege\Guard\PrivilegeController;
-use Laminas\Router\Http\Literal;
-use Laminas\Router\Http\Segment;
 
 return [
     'bjyauthorize' => [
diff --git a/module/Application/config/merged/command.config.php b/module/Application/config/merged/command.config.php
index 8287ec692b1a0cb8118c318f742f522289787578..ad9aa21391156a5d8f5021f8dac37f942e145d63 100644
--- a/module/Application/config/merged/command.config.php
+++ b/module/Application/config/merged/command.config.php
@@ -4,7 +4,6 @@ use Application\Command\UpdateBddCommand;
 use Application\Command\UpdateBddCommandFactory;
 use Application\Command\UpdateDdlCommand;
 use Application\Command\UpdateDdlCommandFactory;
-use Application\Service\Bdd\BddFactory;
 use Unicaen\BddAdmin\Bdd;
 
 
@@ -27,7 +26,6 @@ return [
     ],
     'service_manager' => [
         'factories' => [
-            Bdd::class              => BddFactory::class,
             UpdateBddCommand::class => UpdateBddCommandFactory::class,
             UpdateDDlCommand::class => UpdateDdlCommandFactory::class,
         ],
diff --git a/module/Application/config/merged/index.config.php b/module/Application/config/merged/index.config.php
index 11cc1ad42ff1693b8f8c71be283837584232de23..c59a939926281f9d376e3c62fdb93d0fa20645d7 100755
--- a/module/Application/config/merged/index.config.php
+++ b/module/Application/config/merged/index.config.php
@@ -4,27 +4,13 @@ namespace Application;
 
 use Agent\Provider\Privilege\AgentPrivileges;
 use Application\Controller\IndexController;
-use Application\Event\RgpdRenderer\RgpdRendererEvenement;
-use Application\Event\RgpdRenderer\RgpdRendererEvenementFactory;
-use Application\Form\ModifierLibelle\ModifierLibelleForm;
-use Application\Form\ModifierLibelle\ModifierLibelleFormFactory;
 use Application\Form\ModifierLibelle\ModifierLibelleHydrator;
 use Application\Provider\Role\RoleProvider;
-use Application\Service\Bdd\BddFactory;
-use Application\Service\Evenement\SynchroOctopusService;
-use Application\Service\Evenement\SynchroOctopusServiceFactory;
-use Application\Service\Macro\MacroService;
-use Application\Service\Macro\MacroServiceFactory;
-use Application\Service\Notification\NotificationService;
-use Application\Service\Notification\NotificationServiceFactory;
-use Application\Service\Url\UrlService;
-use Application\Service\Url\UrlServiceFactory;
-use Application\View\Helper\SynchorniserIconViewHelper;
 use Carriere\Provider\Privilege\CorpsPrivileges;
+use DemandeExterne\Provider\Privilege\DemandeexternePrivileges;
 use Laminas\Router\Http\Literal;
 use Metier\Provider\Privilege\MetierPrivileges;
 use Structure\Provider\Privilege\StructurePrivileges;
-use Unicaen\BddAdmin\Bdd;
 use UnicaenPrivilege\Guard\PrivilegeController;
 use UnicaenPrivilege\Provider\Privilege\PrivilegePrivileges;
 use UnicaenUtilisateur\Provider\Privilege\RolePrivileges;
@@ -68,6 +54,7 @@ return [
                     'privileges' => [
                         AgentPrivileges::AGENT_INDEX,
                         StructurePrivileges::STRUCTURE_INDEX,
+                        DemandeexternePrivileges::DEMANDEEXTERNE_PARAPHEUR,
                     ],
                 ],
                 [
diff --git a/module/Application/config/module.config.php b/module/Application/config/module.config.php
index 055f4fed818919108e6faca835a68b94b4646b30..1d8b42c40a04c3060f1f0f37f7054ad6dd00e43d 100755
--- a/module/Application/config/module.config.php
+++ b/module/Application/config/module.config.php
@@ -6,27 +6,30 @@ use Agent\Provider\Privilege\AgentPrivileges;
 use Application\Controller\IndexController;
 use Application\Event\RgpdRenderer\RgpdRendererEvenement;
 use Application\Event\RgpdRenderer\RgpdRendererEvenementFactory;
+use Application\Form\CsvImportation\CsvImportationForm;
+use Application\Form\CsvImportation\CsvImportationFormFactory;
+use Application\Form\CsvImportation\CsvImportationHydrator;
+use Application\Form\CsvImportation\CsvImportationHydratorFactory;
 use Application\Form\ModifierLibelle\ModifierLibelleForm;
 use Application\Form\ModifierLibelle\ModifierLibelleFormFactory;
 use Application\Form\ModifierLibelle\ModifierLibelleHydrator;
 use Application\Provider\Role\RoleProvider;
-use Application\Service\Bdd\BddFactory;
 use Application\Service\Evenement\SynchroOctopusService;
 use Application\Service\Evenement\SynchroOctopusServiceFactory;
 use Application\Service\Macro\MacroService;
 use Application\Service\Macro\MacroServiceFactory;
 use Application\Service\Notification\NotificationService;
 use Application\Service\Notification\NotificationServiceFactory;
+use Application\Service\Perimetre\PerimetreService;
+use Application\Service\Perimetre\PerimetreServiceFactory;
 use Application\Service\Url\UrlService;
 use Application\Service\Url\UrlServiceFactory;
-use Application\View\Helper\SynchorniserIconViewHelper;
 use Carriere\Provider\Privilege\CorpsPrivileges;
 use Doctrine\ORM\Mapping\Driver\XmlDriver;
 use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
 use Laminas\Router\Http\Literal;
 use Metier\Provider\Privilege\MetierPrivileges;
 use Structure\Provider\Privilege\StructurePrivileges;
-use Unicaen\BddAdmin\Bdd;
 use UnicaenPrivilege\Guard\PrivilegeController;
 use UnicaenPrivilege\Provider\Privilege\PrivilegePrivileges;
 use UnicaenUtilisateur\Provider\Privilege\RolePrivileges;
@@ -176,43 +179,43 @@ return [
                         'action' => 'index',
                     ],
                 ],
-                'apropos'          => [
-                    'type'     => Literal::class,
-                    'options'  => [
-                        'route'    => '/apropos',
+                'apropos' => [
+                    'type' => Literal::class,
+                    'options' => [
+                        'route' => '/apropos',
                         'defaults' => [
                             /** @see IndexController::aproposAction() */
                             'controller' => IndexController::class,
-                            'action'     => 'apropos',
+                            'action' => 'apropos',
                         ],
                     ],
                     'priority' => 9999,
                 ],
-                'apropos-bis'          => [
-                    'type'     => Literal::class,
-                    'options'  => [
-                        'route'    => '/apropos-bis',
+                'apropos-bis' => [
+                    'type' => Literal::class,
+                    'options' => [
+                        'route' => '/apropos-bis',
                         'defaults' => [
                             /** @see IndexController::aproposAction() */
                             'controller' => IndexController::class,
-                            'action'     => 'apropos',
+                            'action' => 'apropos',
                         ],
                     ],
                     'priority' => 9999,
                 ],
-                'contact'          => [
-                    'type'     => Literal::class,
-                    'options'  => [
-                        'route'    => '/contact',
+                'contact' => [
+                    'type' => Literal::class,
+                    'options' => [
+                        'route' => '/contact',
                         'defaults' => [
                             /** @see IndexController::contactAction() */
                             'controller' => IndexController::class,
-                            'action'     => 'contact',
+                            'action' => 'contact',
                         ],
                     ],
                     'priority' => 9999,
                 ],
-                'contact-bis'          => [
+                'contact-bis' => [
                     'type' => Literal::class,
                     'options' => [
                         'route' => 'contact-bis',
@@ -290,11 +293,11 @@ return [
             MacroService::class => MacroServiceFactory::class,
             NotificationService::class => NotificationServiceFactory::class,
             UrlService::class => UrlServiceFactory::class,
+            PerimetreService::class => PerimetreServiceFactory::class,
 
             RgpdRendererEvenement::class => RgpdRendererEvenementFactory::class,
             SynchroOctopusService::class => SynchroOctopusServiceFactory::class,
 
-            Bdd::class => BddFactory::class,
         ],
     ],
     'controllers' => [
@@ -308,17 +311,20 @@ return [
     'form_elements' => [
         'factories' => [
             ModifierLibelleForm::class => ModifierLibelleFormFactory::class,
+            CsvImportationForm::class => CsvImportationFormFactory::class,
         ],
     ],
     'hydrators' => [
         'invokables' => [
             ModifierLibelleHydrator::class => ModifierLibelleHydrator::class,
         ],
+        'factories' => [
+            CsvImportationHydrator::class => CsvImportationHydratorFactory::class,
+        ]
     ],
 
     'view_helpers' => [
         'invokables' => [
-            'synchroniserIcon' => SynchorniserIconViewHelper::class,
         ],
     ],
 
diff --git a/module/Application/src/Application/Controller/AgentHierarchieController.php b/module/Application/src/Application/Controller/AgentHierarchieController.php
deleted file mode 100644
index 58618263710398a6294e0bcf9559d5f6bbcd460f..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Controller/AgentHierarchieController.php
+++ /dev/null
@@ -1,292 +0,0 @@
-<?php
-
-namespace Application\Controller;
-
-use Agent\Service\Agent\AgentServiceAwareTrait;
-use Agent\Service\AgentValidateur\AgentValidateurServiceAwareTrait;
-use Application\Form\AgentHierarchieCalcul\AgentHierarchieCalculFormAwareTrait;
-use Application\Form\AgentHierarchieImportation\AgentHierarchieImportationFormAwareTrait;
-use Application\Form\AgentHierarchieSaisie\AgentHierarchieSaisieFormAwareTrait;
-use Laminas\Mvc\Controller\AbstractActionController;
-use Laminas\View\Model\JsonModel;
-use Laminas\View\Model\ViewModel;
-use Structure\Service\Structure\StructureServiceAwareTrait;
-
-class AgentHierarchieController extends AbstractActionController
-{
-    use AgentServiceAwareTrait;
-    use AgentValidateurServiceAwareTrait;
-    use StructureServiceAwareTrait;
-    use AgentHierarchieCalculFormAwareTrait;
-    use AgentHierarchieImportationFormAwareTrait;
-    use AgentHierarchieSaisieFormAwareTrait;
-
-    public function indexAction(): ViewModel
-    {
-        return new ViewModel([]);
-    }
-
-    public function afficherAction(): ViewModel
-    {
-        $agent = $this->getAgentService()->getRequestedAgent($this);
-//        $superieurs = $this->getAgentSuperieurService()->getAgentsSuperieursByAgent($agent);
-//        usort($superieurs, function (AgentSuperieur $a, AgentSuperieur $b) {
-//            return $a->getSuperieur()->getNomUsuel() . ' ' . $a->getSuperieur()->getPrenom() > $b->getSuperieur()->getNomUsuel() . ' ' . $b->getSuperieur()->getPrenom();
-//        });
-
-        return new ViewModel([
-            'title' => "Chaîne hiérarchique de [" . $agent->getDenomination() . "]",
-            'agent' => $agent,
-            'superieurs' => [],
-        ]);
-    }
-
-    public function importerAction(): ViewModel
-    {
-        $form = $this->getAgentHierarchieImportationForm();
-        $form->setAttribute('action', $this->url()->fromRoute('agent/hierarchie/importer', ['mode' => 'preview', 'path' => null], [], true));
-
-
-        $request = $this->getRequest();
-        if ($request->isPost()) {
-            $error = [];
-            $data = $request->getPost();
-            $file = $request->getFiles();
-
-            $fichier_path = $file['fichier']['tmp_name'];
-            $mode = $data['mode'];
-
-            //reading
-            $array = [];
-            if ($fichier_path === null or $fichier_path === '') {
-                $error[] = "Aucun fichier !";
-            } else {
-                $handle = fopen($fichier_path, "r");
-
-                while ($content = fgetcsv($handle, 0, ";")) {
-                    $array[] = $content;
-                }
-
-                $agentsId = [];
-                foreach ($array as $line) {
-                    foreach ($line as $id) $agentsId[$id] = $id;
-                }
-
-                $agents = [];
-                $warning = [];
-                foreach ($agentsId as $agentId) {
-                    if ($agentId !== '') {
-                        $agent = $this->getAgentService()->getAgent($agentId);
-                        if ($agent === null) {
-                            $warning[] = "Aucun agent de trouvé avec l'identifiant [" . $agentId . "]";
-                        } else {
-                            $agents[$agentId] = $agent;
-                        }
-                    }
-                }
-            }
-
-            if ($mode === 'import' and empty($error)) {
-                $warning = [];
-                foreach ($array as $line) {
-                    $agentId = $line[0];
-                    $agent = $agents[$agentId];
-                    $superieurs = array_slice($line, 1, 3);
-                    $autorites = array_slice($line, 4, 3);
-                    $this->getAgentSuperieurService()->historiseAll($agent);
-                    $logS = $this->getAgentSuperieurService()->createAgentSuperieurWithArray($agent, $superieurs, $agents);
-                    $this->getAgentAutoriteService()->historiseAll($agent);
-                    $logA = $this->getAgentAutoriteService()->createAgentAutoriteWithArray($agent, $autorites, $agents);
-                    $warning = array_merge($warning, $logA['warning'], $logS['warning']);
-                }
-            }
-
-            if ($mode !== 'import') {
-                $title = "Importation de chaînes hiérarchiques (Prévisualisation)";
-            }
-            if ($mode === 'import') {
-                $title = "Importation de chaînes hiérarchiques (Importation)";
-            }
-            return new ViewModel([
-                'title' => $title,
-                'fichier_path' => $fichier_path,
-                'form' => $form,
-                'mode' => $mode,
-                'error' => $error,
-                'warning' => $warning,
-                'agents' => $agents,
-                'array' => $array,
-            ]);
-        }
-
-        $vm = new ViewModel([
-            'title' => "Importation de chaînes hiérarchiques",
-            'form' => $form,
-        ]);
-        return $vm;
-    }
-
-    public function calculerAction(): ViewModel
-    {
-        $form = $this->getAgentHierarchieCalculForm();
-        $form->setAttribute('action', $this->url()->fromRoute('agent/hierarchie/calculer', ['mode' => 'preview', 'structure' => null], [], true));
-
-        $request = $this->getRequest();
-        if ($request->isPost()) {
-            $error = [];
-            $data = $request->getPost();
-
-            $mode = $data['mode'];
-            $structureId = $data['structure'];
-
-            $structure = $this->getStructureService()->getStructure($structureId);
-            $structures = $this->getStructureService()->getStructuresFilles($structure, true);
-            $agents = $this->getAgentService()->getAgentsByStructures($structures);
-
-            $superieurs = [];
-            $autorites = [];
-            foreach ($agents as $agent) {
-                $superieurs[$agent->getId()] = $this->getAgentService()->computeSuperieures($agent);
-                $autorites[$agent->getId()] = $this->getAgentService()->computeAutorites($agent, $superieurs[$agent->getId()]);
-            }
-
-            $warning = [];
-            if ($mode === 'compute' and empty($error)) {
-                foreach ($agents as $agent) {
-                    $this->getAgentAutoriteService()->historiseAll($agent);
-                    if (empty($autorites[$agent->getId()])) {
-                        $warning[] = "Aucune autorité n'a pu être déterminée pour " . $agent->getDenomination();
-                    } else {
-                        foreach ($autorites[$agent->getId()] as $autorite) {
-                            $this->getAgentAutoriteService()->createAgentAutorite($agent, $autorite);
-                        }
-                    }
-                    $this->getAgentSuperieurService()->historiseAll($agent);
-                    if (empty($superieurs[$agent->getId()])) {
-                        $warning[] = "Aucun supérieur n'a pu être déterminée pour " . $agent->getDenomination();
-                    } else {
-                        foreach ($superieurs[$agent->getId()] as $superieur) {
-                            $this->getAgentSuperieurService()->createAgentSuperieur($agent, $superieur);
-                        }
-                    }
-                }
-            }
-
-
-            if ($mode !== 'compute') {
-                $title = "Calcul de chaînes hiérarchiques (Prévisualisation)";
-            }
-            if ($mode === 'compute') {
-                $title = "Calcul de chaînes hiérarchiques (Importation)";
-            }
-            return new ViewModel([
-                'title' => $title,
-                'form' => $form,
-                'structure' => $structure,
-                'agents' => $agents,
-                'superieurs' => $superieurs,
-                'autorites' => $autorites,
-                'error' => $error,
-                'warning' => $warning,
-            ]);
-        }
-
-        return new ViewModel([
-            'title' => "Calcul de chaînes hiérarchiques",
-            'form' => $form,
-        ]);
-    }
-
-    public function saisirAction(): ViewModel
-    {
-        $form = $this->getAgentHierarchieSaisieForm();
-        $form->setAttribute('action', $this->url()->fromRoute('agent/hierarchie/saisir', [], [], true));
-
-        $request = $this->getRequest();
-        if ($request->isPost()) {
-            $data = $request->getPost();
-
-            $agent = $this->getAgentService()->getAgent($data['agent']['id']);
-            $sup1 = (isset($data['superieur1']['id'])) ? $this->getAgentService()->getAgent($data['superieur1']['id']) : null;
-            $sup2 = (isset($data['superieur2']['id'])) ? $this->getAgentService()->getAgent($data['superieur2']['id']) : null;
-            $sup3 = (isset($data['superieur3']['id'])) ? $this->getAgentService()->getAgent($data['superieur3']['id']) : null;
-            $aut1 = (isset($data['superieur1']['id'])) ? $this->getAgentService()->getAgent($data['autorite1']['id']) : null;
-            $aut2 = (isset($data['superieur2']['id'])) ? $this->getAgentService()->getAgent($data['autorite2']['id']) : null;
-            $aut3 = (isset($data['superieur3']['id'])) ? $this->getAgentService()->getAgent($data['autorite3']['id']) : null;
-
-            $this->getAgentSuperieurService()->historiseAll($agent);
-            if ($sup1 !== null) $this->getAgentSuperieurService()->createAgentSuperieur($agent, $sup1);
-            if ($sup2 !== null) $this->getAgentSuperieurService()->createAgentSuperieur($agent, $sup2);
-            if ($sup3 !== null) $this->getAgentSuperieurService()->createAgentSuperieur($agent, $sup3);
-            $this->getAgentAutoriteService()->historiseAll($agent);
-            if ($aut1 !== null) $this->getAgentAutoriteService()->createAgentAutorite($agent, $aut1);
-            if ($aut2 !== null) $this->getAgentAutoriteService()->createAgentAutorite($agent, $aut2);
-            if ($aut3 !== null) $this->getAgentAutoriteService()->createAgentAutorite($agent, $aut3);
-
-            exit();
-        }
-
-        $vm = new ViewModel([
-            'title' => "Saisie de la chaîne hiérarchique d'un agent",
-            'form' => $form,
-        ]);
-//        $vm->setTemplate('default/default-form');
-        return $vm;
-    }
-
-    public function chaineHierarchiqueJsonAction(): JsonModel
-    {
-        $agent = $this->getAgentService()->getRequestedAgent($this);
-        $superieurs = $this->getAgentSuperieurService()->getAgentsSuperieursByAgent($agent);
-        $autorites = $this->getAgentAutoriteService()->getAgentsAutoritesByAgent($agent);
-
-
-        $data = [];
-        //agent
-        $data['AgentId'] = $agent->getId();
-        $data['AgentLibelle'] = $agent->getDenomination();
-        //superieurs
-        $position = 1;
-        foreach ($superieurs as $superieur) {
-            $data['Superieur' . $position . 'Id'] = $superieur->getSuperieur()->getId();
-            $data['Superieur' . $position . 'Libelle'] = $superieur->getSuperieur()->getDenomination();
-            $position++;
-        }
-        //autorites
-        $position = 1;
-        foreach ($autorites as $autorite) {
-            $data['Autorite' . $position . 'Id'] = $autorite->getAutorite()->getId();
-            $data['Autorite' . $position . 'Libelle'] = $autorite->getAutorite()->getDenomination();
-            $position++;
-        }
-
-        return new JsonModel($data);
-    }
-
-    /** Fonction de recherche *****************************************************************************************/
-
-    public function rechercherAgentWithAutoriteAction(): JsonModel
-    {
-        $superieur = $this->getAgentService()->getAgentByConnectedUser();
-
-        if ($superieur !== null and ($term = $this->params()->fromQuery('term'))) {
-            $agents = $this->getAgentAutoriteService()->getAgentsWithAutoriteAndTerm($superieur, $term);
-            $result = $this->getAgentService()->formatAgentJSON($agents);
-            return new JsonModel($result);
-        }
-        exit();
-    }
-
-    public function rechercherAgentWithSuperieurAction(): JsonModel
-    {
-        $superieur = $this->getAgentService()->getAgentByConnectedUser();
-
-        if ($superieur !== null and ($term = $this->params()->fromQuery('term'))) {
-            $agents = $this->getAgentSuperieurService()->getAgentsWithSuperieurAndTerm($superieur, $term);
-            $result = $this->getAgentService()->formatAgentJSON($agents);
-            return new JsonModel($result);
-        }
-        exit();
-    }
-
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/Controller/AgentHierarchieControllerFactory.php b/module/Application/src/Application/Controller/AgentHierarchieControllerFactory.php
deleted file mode 100644
index c26c8cb4cb9d6b55ed71493eb5f3df03f31c6e19..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Controller/AgentHierarchieControllerFactory.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-namespace Application\Controller;
-
-use Agent\Service\Agent\AgentService;
-use Agent\Service\AgentValidateur\AgentValidateurService;
-use Application\Form\AgentHierarchieCalcul\AgentHierarchieCalculForm;
-use Application\Form\AgentHierarchieImportation\AgentHierarchieImportationForm;
-use Application\Form\AgentHierarchieSaisie\AgentHierarchieSaisieForm;
-use Psr\Container\ContainerExceptionInterface;
-use Psr\Container\ContainerInterface;
-use Psr\Container\NotFoundExceptionInterface;
-use Structure\Service\Structure\StructureService;
-
-class AgentHierarchieControllerFactory
-{
-
-    /**
-     * @param ContainerInterface $container
-     * @return AgentHierarchieController
-     * @throws ContainerExceptionInterface
-     * @throws NotFoundExceptionInterface
-     */
-    public function __invoke(ContainerInterface $container) : AgentHierarchieController
-    {
-        /**
-         * @var AgentService $agentService
-         * @var AgentValidateurService $agentValidateurService
-         * @var StructureService $structureService
-         */
-        $agentService = $container->get(AgentService::class);
-        $agentValidateurService = $container->get(AgentValidateurService::class);
-        $structureService = $container->get(StructureService::class);
-
-        /**
-         * @var AgentHierarchieImportationForm $importationForm
-         * @var AgentHierarchieCalculForm $calculForm
-         * @var AgentHierarchieSaisieForm $saisieForm
-         */
-        $importationForm = $container->get('FormElementManager')->get(AgentHierarchieImportationForm::class);
-        $calculForm = $container->get('FormElementManager')->get(AgentHierarchieCalculForm::class);
-        $saisieForm = $container->get('FormElementManager')->get(AgentHierarchieSaisieForm::class);
-
-        $controller = new AgentHierarchieController();
-        $controller->setAgentService($agentService);
-        $controller->setAgentValidateurService($agentValidateurService);
-        $controller->setStructureService($structureService);
-        $controller->setAgentHierarchieCalculForm($calculForm);
-        $controller->setAgentHierarchieImportationForm($importationForm);
-        $controller->setAgentHierarchieSaisieForm($saisieForm);
-        return $controller;
-    }
-
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/Controller/IndexController.php b/module/Application/src/Application/Controller/IndexController.php
index 33802400f110e694b88acd60aafe7e6ca203398e..4d62305b00ce661304e1cbac8c99ab767c44cb55 100644
--- a/module/Application/src/Application/Controller/IndexController.php
+++ b/module/Application/src/Application/Controller/IndexController.php
@@ -7,6 +7,7 @@ use Agent\Provider\Parametre\CharteParametres;
 use Agent\Provider\Role\RolesProvider;
 use Agent\Provider\Validation\CharteValidations;
 use Agent\Service\Agent\AgentServiceAwareTrait;
+use Application\Provider\Template\TextTemplates;
 use DateTime;
 use DemandeExterne\Service\DemandeExterne\DemandeExterneServiceAwareTrait;
 use Application\Service\Macro\MacroServiceAwareTrait;
@@ -14,7 +15,6 @@ use Application\Service\Url\UrlServiceAwareTrait;
 use DemandeExterne\Provider\Etat\DemandeExterneEtats;
 use Formation\Provider\Etat\SessionEtats;
 use Formation\Provider\Role\FormationRoles;
-use Formation\Provider\Template\TextTemplates;
 use Formation\Service\Session\SessionServiceAwareTrait;
 use Formation\Service\StagiaireExterne\StagiaireExterneServiceAwareTrait;
 use Laminas\Http\Response;
@@ -88,7 +88,7 @@ class IndexController extends AbstractActionController
         }
 
         $charteActive = $this->getParametreService()->getValeurForParametre(CharteParametres::TYPE, CharteParametres::CHARTE_ACTIVE);
-        if ($charteActive) {
+        if ($charteActive AND $connectedRole AND $connectedRole->getRoleId() === RolesProvider::ROLE_AGENT) {
             if ($agent !== null && $agent->getValidationActiveByTypeCode(CharteValidations::CHARTE_SIGNEE) === null) {
                 /** @see CharteController::afficherAction() */
                 return $this->redirect()->toRoute('charte/afficher', [], [], true);
diff --git a/module/Application/src/Application/Controller/VerificationController.php b/module/Application/src/Application/Controller/VerificationController.php
index a0211c230e5327fbcfdd54f50f8f4b6ea6b7e61b..b4f500ebdc29d0757aa1110ef0f2604b3bde3f72 100644
--- a/module/Application/src/Application/Controller/VerificationController.php
+++ b/module/Application/src/Application/Controller/VerificationController.php
@@ -29,7 +29,7 @@ class VerificationController extends AbstractActionController {
     public function indexAction() : ViewModel
     {
         $modules = ['Agent', 'Application', 'DemandeExterne', 'Formation', 'Structure'];
-        $bibliotheques = ['indicateur', 'etat', 'validation', 'renderer', 'enquete', 'evenement', 'mail', 'parametre', 'authentification', 'utilisateur', 'privilege', 'observation'];
+        $bibliotheques = ['indicateur', 'etat', 'validation', 'renderer', 'enquete', 'evenement', 'mail', 'parametre', 'authentification', 'utilisateur', 'privilege'];
 
         return new ViewModel([
             'modules' => $modules,
diff --git a/module/Application/src/Application/Entity/Db/Interfaces/HasPeriodeInterface.php b/module/Application/src/Application/Entity/Db/Interfaces/HasPeriodeInterface.php
index 430aeaffbc11ce6a8c178e33bc3be9eb823bad97..565e2475d1333db662dcf99be9f6618222c84daf 100644
--- a/module/Application/src/Application/Entity/Db/Interfaces/HasPeriodeInterface.php
+++ b/module/Application/src/Application/Entity/Db/Interfaces/HasPeriodeInterface.php
@@ -3,6 +3,7 @@
 namespace Application\Entity\Db\Interfaces;
 
 use DateTime;
+use Doctrine\ORM\QueryBuilder;
 
 interface HasPeriodeInterface {
 
@@ -16,4 +17,7 @@ interface HasPeriodeInterface {
     public function estCommence(?DateTime $date = null) : bool;
     public function estFini(?DateTime $date = null) : bool;
     public function estEnCours(?DateTime $date = null) : bool;
+
+    /** Décorateur*/
+    static public function decorateWithActif(QueryBuilder $qb, string $entityName,  ?DateTime $date = null) : QueryBuilder;
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Entity/Db/MacroContent/AgentMacroTrait.php b/module/Application/src/Application/Entity/Db/MacroContent/AgentMacroTrait.php
index 749cdeb1ae61c36efb4b5f66ec6bb17d8598fbf1..41db5d4cfbe98ee6aad46335cb48321092d54e26 100644
--- a/module/Application/src/Application/Entity/Db/MacroContent/AgentMacroTrait.php
+++ b/module/Application/src/Application/Entity/Db/MacroContent/AgentMacroTrait.php
@@ -2,7 +2,6 @@
 
 namespace Application\Entity\Db\MacroContent;
 
-use Agent\Entity\Db\Agent;
 use Agent\Entity\Db\AgentEchelon;
 use Agent\Entity\Db\AgentQuotite;
 
@@ -15,7 +14,6 @@ trait AgentMacroTrait
 
     public function toStringPrenom() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         if ($agent->getPrenom()) return $agent->getPrenom();
         return "Aucun prénom de renseigné";
@@ -23,7 +21,6 @@ trait AgentMacroTrait
 
     public function toStringNomUsage() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         if ($agent->getNomUsuel()) return $agent->getNomUsuel();
         return "Aucun nom d'usage de renseigné";
@@ -31,7 +28,6 @@ trait AgentMacroTrait
 
     public function toStringNomFamille() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         if ($agent->getNomFamille()) return $agent->getNomFamille();
         return "Aucun nom de famille de renseigné";
@@ -42,7 +38,6 @@ trait AgentMacroTrait
      */
     public function toStringDenomination(): string
     {
-        /** @var Agent $agent */
         $agent = $this;
         $nomUsuel = $agent->getNomUsuel();
         $prenom = $agent->getPrenom();
@@ -54,7 +49,6 @@ trait AgentMacroTrait
      */
     public function toStringAffectationsActives() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         $affecations = $agent->getAffectationsActifs();
         $texte  = "<ul>";
@@ -85,7 +79,6 @@ trait AgentMacroTrait
      */
     public function toStringStatutsActifs() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         $statuts = $agent->getStatutsActifs();
 //        $texte  = "<ul>";
@@ -113,12 +106,8 @@ trait AgentMacroTrait
         return $texte;
     }
 
-    /**
-     * @return string
-     */
     public function toStringGradesActifs() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         $grades = $agent->getGradesActifs();
 //        $texte  = "<ul>";
@@ -149,9 +138,6 @@ trait AgentMacroTrait
         return $texte;
     }
 
-    /**
-     * @return string
-     */
     public function toStringModaliteDeService() : string
     {
         $agent = $this;
@@ -173,14 +159,12 @@ trait AgentMacroTrait
                 $array[] = "$modalite (". $pourcentage. "%)";
             }
         }
-        $texte = "";
         $texte = implode("<br>",$array);
         return $texte;
     }
 
     public function toStringQuotiteAffectation() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         $affectations = $agent->getAffectationsActifs();
         if (empty($affectations)) return "Aucune quotité  d'affectation de remontée du SIRH";
@@ -240,7 +224,6 @@ trait AgentMacroTrait
      */
     public function toStringStructuresBloc() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         $structures = $agent->getStructures();
 
@@ -254,7 +237,6 @@ trait AgentMacroTrait
 
     public function toStringDateNaissance() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
 
         if ($agent->getDateNaissance()) {
@@ -265,7 +247,6 @@ trait AgentMacroTrait
 
     public function toStringAffectationStructure() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         $structure = ($agent->getAffectationPrincipale())?$agent->getAffectationPrincipale()->getStructure():null;
 
@@ -277,7 +258,6 @@ trait AgentMacroTrait
 
     public function toStringAffectationStructureFine() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         $structure = ($agent->getAffectationPrincipale())?$agent->getAffectationPrincipale()->getStructure():null;
 
@@ -287,7 +267,6 @@ trait AgentMacroTrait
 
     public function toStringAffectationStructureParente() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         $structure = ($agent->getAffectationPrincipale() && $agent->getAffectationPrincipale()->getStructure())?$agent->getAffectationPrincipale()->getStructure()->getParent():null;
 
@@ -297,7 +276,6 @@ trait AgentMacroTrait
 
     public function toStringAffectationDate() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         $date = ($agent->getAffectationPrincipale())?$agent->getAffectationPrincipale()->getDateDebut():null;
 
@@ -308,7 +286,6 @@ trait AgentMacroTrait
 
     public function toStringCorpsGrade() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         $grades = ($agent->getGradesActifs())?$agent->getGradesActifs():null;
 
@@ -323,7 +300,6 @@ trait AgentMacroTrait
 
     public function toStringCorpsGradeSilencieux() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         $grades = ($agent->getGradesActifs())?$agent->getGradesActifs():null;
 
@@ -336,21 +312,6 @@ trait AgentMacroTrait
         return $texte;
     }
 
-    public function toStringIntitulePoste() : string
-    {
-        /** @var Agent $agent */
-        $agent = $this;
-        $fiche = $agent->getFichePosteBest();
-
-        if ($fiche === null) return "Aucune fiche de poste EMC2";
-        $metier  = $fiche->getLibelleMetierPrincipal();
-        $complement = $fiche->getLibelle();
-
-        if ($complement) return $complement . " rattaché à " . $metier;
-        if ($metier === null) return "Aucun metier principal dans la fiche de poste";
-        return $metier;
-    }
-
     public function toStringQuotite() : string
     {
         return $this->toStringModaliteDeService();
@@ -358,7 +319,6 @@ trait AgentMacroTrait
 
     public function toStringEchelon() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         $echelons = $agent->getEchelonsActifs();
 
@@ -368,7 +328,6 @@ trait AgentMacroTrait
 
     public function toStringEchelonPassage() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         $echelons = $agent->getEchelonsActifs();
 
@@ -379,7 +338,6 @@ trait AgentMacroTrait
     /** @noinspection PhpUnused */
     public function getDateNaissanceAsString() : string
     {
-        /** @var Agent $agent */
         $agent = $this;
         if ($agent->getDateNaissance() === null) return "Date de naissance non renseignée";
         return $agent->getDateNaissance()->format('d/m/y');
diff --git a/module/Application/src/Application/Entity/Db/Traits/DbImportableAwareTrait.php b/module/Application/src/Application/Entity/Db/Traits/DbImportableAwareTrait.php
deleted file mode 100644
index 4d20ba22946f3f5abfcbc08a0e676de267fda35a..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Entity/Db/Traits/DbImportableAwareTrait.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-namespace Application\Entity\Db\Traits;
-
-use DateTime;
-
-trait DbImportableAwareTrait {
-
-    private ?DateTime $created_on;
-    private ?DateTime $updated_on;
-    private ?DateTime $deleted_on;
-    private ?string $sourceId = null;
-
-    public function getDeleted() : ?DateTime
-    {
-        return $this->deleted_on;
-    }
-
-    public function isDeleted(DateTime $date = null) : bool
-    {
-        if ($date === null) return ($this->deleted_on !== null);
-        return ($this->deleted_on !== null AND $this->deleted_on < $date);
-    }
-
-    public function setCreatedOn(DateTime $date = null)
-    {
-        if ($date === null) $date = new DateTime();
-        $this->created_on = $date;
-    }
-
-    public function historise(?DateTime $now = null) : void
-    {
-        if ($now === null) {
-            $now = new DateTime();
-        }
-        $this->deleted_on = $now;
-    }
-
-    public function dehistorise(?DateTime $now = null) : void
-    {
-        if ($now === null) {
-            $now = new DateTime();
-        }
-        $this->updated_on = $now;
-        $this->deleted_on = null;
-    }
-
-    public function getSourceId() : ?string
-    {
-        return $this->sourceId;
-    }
-
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/Entity/Db/Traits/HasSourceTrait.php b/module/Application/src/Application/Entity/Db/Traits/HasSourceTrait.php
index 4f2d063a9e899961ceb61c27af93df7ff0385179..051c54396a35f4af87e49bbd5aea1418f7d126d3 100644
--- a/module/Application/src/Application/Entity/Db/Traits/HasSourceTrait.php
+++ b/module/Application/src/Application/Entity/Db/Traits/HasSourceTrait.php
@@ -18,19 +18,13 @@ trait HasSourceTrait {
         return $this->idSource;
     }
 
-    public function setSource(?string $source) : self
+    public function setSource(?string $source) : void
     {
         $this->source = $source;
-        return $this;
     }
 
-    /**
-     * @param string|null $id
-     * @return self
-     */
-    public function setIdSource(?string $id) : self
+    public function setIdSource(?string $id) : void
     {
         $this->idSource = $id;
-        return $this;
     }
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Entity/SynchroAwareInterface.php b/module/Application/src/Application/Entity/SynchroAwareInterface.php
deleted file mode 100644
index 30e3f25e8b545c67ce772717275acf2231d222e1..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Entity/SynchroAwareInterface.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-namespace Application\Entity;
-
-use DateTime;
-
-interface SynchroAwareInterface {
-
-    /**
-     * @param DateTime $date
-     * @return self
-     */
-    public function setSynchro($date);
-
-    /** @return Datetime */
-    public function getSynchro();
-
-    /** @return Datetime */
-    public function getHisto();
-
-    /**
-     * @param DateTime $date
-     * @return self
-     */
-    public function setHisto($date);
-
-    /**
-     * @param string $name
-     * @return mixed
-     */
-    public function get($name);
-
-    /**
-     * @param string $name
-     * @param mixed $value
-     * @return mixed
-     */
-    public function set($name, $value);
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/Entity/SynchroAwareTrait.php b/module/Application/src/Application/Entity/SynchroAwareTrait.php
deleted file mode 100644
index 9d0a5181d0e52c7aa0409260fc2824388ba41ae8..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Entity/SynchroAwareTrait.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-
-namespace Application\Entity;
-
-use DateTime;
-
-trait SynchroAwareTrait {
-
-    /** @var DateTime */
-    private $synchro;
-    /** @var DateTime */
-    private $histo;
-
-    /**
-     * @return DateTime
-     */
-    public function getSynchro()
-    {
-        return $this->synchro;
-    }
-
-    /**
-     * @param DateTime $synchro
-     * @return self
-     */
-    public function setSynchro($synchro)
-    {
-        $this->synchro = $synchro;
-        return $this;
-    }
-
-    /**
-     * @return DateTime
-     */
-    public function getHisto()
-    {
-        return $this->histo;
-    }
-
-    /**
-     * @param DateTime $histo
-     * @return self
-     */
-    public function setHisto($histo)
-    {
-        $this->histo = $histo;
-        return $this;
-    }
-
-    /**
-     * @param string $name
-     * @return mixed
-     */
-    public function get($name) {
-        $splits = explode("::", $name);
-        if (count($splits) === 1) return $this->$name;
-        if (count($splits) === 2) {
-            $accesseur1 = $splits[0];
-            $valeur_ = $this->$accesseur1;
-            if ($valeur_ === null) return null;
-            $accesseur2 = $splits[1];
-            $valeur = $valeur_->get($accesseur2);
-            return $valeur;
-        }
-        return null;
-    }
-
-    /**
-     * @param string $name
-     * @param mixed $value
-     * @return self
-     */
-    public function set($name, $value) {
-        $this->$name = $value;
-        return $this;
-    }
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculForm.php b/module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculForm.php
deleted file mode 100644
index a56864dd9221b0af4cc9b915229bf45078313c0e..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculForm.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-namespace Application\Form\AgentHierarchieCalcul;
-
-use Laminas\Form\Element\Button;
-use Laminas\Form\Element\File;
-use Laminas\Form\Element\Select;
-use Laminas\Form\Form;
-use Laminas\InputFilter\Factory;
-use Structure\Service\Structure\StructureServiceAwareTrait;
-
-class AgentHierarchieCalculForm extends Form {
-    use StructureServiceAwareTrait;
-
-    public function init(): void
-    {
-        $this->add([
-            'type' => Select::class,
-            'name' => 'structure',
-            'options' => [
-                'label' => 'Structure  <span class="icon icon-asterisque" title="Champ obligatoire"></span> :',
-                'label_options' => [ 'disable_html_escape' => true, ],
-                'value_options' => $this->getStructureService()->getStructuresAsOptions(),
-            ],
-            'attributes' => [
-                'id' => 'structure',
-                'class' => 'bootstrap-selectpicker',
-                'data-live-search' => 'true'
-            ],
-        ]);
-        //mode
-        $this->add([
-            'type' => Select::class,
-            'name' => 'mode',
-            'options' => [
-                'label' => 'Mode  <span class="icon icon-asterisque" title="Champ obligatoire"></span> :',
-                'label_options' => [ 'disable_html_escape' => true, ],
-                'value_options' => [
-                    'preview' => "Prévisualisation",
-                    'compute' => "Calcul",
-                ]
-            ],
-            'attributes' => [
-                'id' => 'mode',
-            ],
-        ]);
-        //Submit
-        $this->add([
-            'type' => Button::class,
-            'name' => 'creer',
-            'options' => [
-                'label' => 'Calculer pour la structure',
-                'label_options' => [ 'disable_html_escape' => true, ],
-            ],
-            'attributes' => [
-                'type' => 'submit',
-                'class' => 'btn btn-primary',
-            ],
-        ]);
-
-        $this->setInputFilter((new Factory())->createInputFilter([
-            'fichier' => [ 'required' => true,  ],
-            'mode'  => ['required' => true, ],
-        ]));
-    }
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculFormAwareTrait.php b/module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculFormAwareTrait.php
deleted file mode 100644
index f67f4939d159d2bf97bedda107391679b684013d..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculFormAwareTrait.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-namespace Application\Form\AgentHierarchieCalcul;
-
-trait AgentHierarchieCalculFormAwareTrait {
-
-    private AgentHierarchieCalculForm $agentHierarchieCalculForm;
-
-    public function getAgentHierarchieCalculForm(): AgentHierarchieCalculForm
-    {
-        return $this->agentHierarchieCalculForm;
-    }
-
-    public function setAgentHierarchieCalculForm(AgentHierarchieCalculForm $agentHierarchieCalculForm): void
-    {
-        $this->agentHierarchieCalculForm = $agentHierarchieCalculForm;
-    }
-
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculFormFactory.php b/module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculFormFactory.php
deleted file mode 100644
index 50827c8de4a151bc309c15b5dd2e5d70404abe59..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculFormFactory.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-namespace Application\Form\AgentHierarchieCalcul;
-
-use Psr\Container\ContainerExceptionInterface;
-use Psr\Container\ContainerInterface;
-use Psr\Container\NotFoundExceptionInterface;
-use Structure\Service\Structure\StructureService;
-
-class AgentHierarchieCalculFormFactory {
-
-    /**
-     * @param ContainerInterface $container
-     * @return AgentHierarchieCalculForm
-     * @throws ContainerExceptionInterface
-     * @throws NotFoundExceptionInterface
-     */
-    public function __invoke(ContainerInterface $container) : AgentHierarchieCalculForm
-    {
-        /** @var StructureService $structureService */
-        $structureService = $container->get(StructureService::class);
-        /** @var AgentHierarchieCalculHydrator $hydrator */
-        $hydrator = $container->get('HydratorManager')->get(AgentHierarchieCalculHydrator::class);
-
-        $form = new AgentHierarchieCalculForm();
-        $form->setStructureService($structureService);
-        $form->setHydrator($hydrator);
-        return $form;
-    }
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculHydratorFactory.php b/module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculHydratorFactory.php
deleted file mode 100644
index 9c955337d3e896008120c1edcc16594962831fb5..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculHydratorFactory.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-namespace Application\Form\AgentHierarchieCalcul;
-
-
-use Psr\Container\ContainerInterface;
-
-class AgentHierarchieCalculHydratorFactory
-{
-    public function __invoke(ContainerInterface $container) : AgentHierarchieCalculHydrator
-    {
-        return new AgentHierarchieCalculHydrator();
-    }
-
-
-}
-
diff --git a/module/Application/src/Application/Form/AgentHierarchieImportation/AgentHierarchieImportationFormAwareTrait.php b/module/Application/src/Application/Form/AgentHierarchieImportation/AgentHierarchieImportationFormAwareTrait.php
deleted file mode 100644
index 3675ec4643b501e34dc0398cd95e6167e05cee95..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Form/AgentHierarchieImportation/AgentHierarchieImportationFormAwareTrait.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-namespace Application\Form\AgentHierarchieImportation;
-
-trait AgentHierarchieImportationFormAwareTrait {
-
-    private AgentHierarchieImportationForm $agentHierarchieImportationForm;
-
-    public function getAgentHierarchieImportationForm(): AgentHierarchieImportationForm
-    {
-        return $this->agentHierarchieImportationForm;
-    }
-
-    public function setAgentHierarchieImportationForm(AgentHierarchieImportationForm $agentHierarchieImportationForm): void
-    {
-        $this->agentHierarchieImportationForm = $agentHierarchieImportationForm;
-    }
-
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/Form/AgentHierarchieImportation/AgentHierarchieImportationFormFactory.php b/module/Application/src/Application/Form/AgentHierarchieImportation/AgentHierarchieImportationFormFactory.php
deleted file mode 100644
index ef9408b085b23bee5e93959e389e93fdb5ebc945..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Form/AgentHierarchieImportation/AgentHierarchieImportationFormFactory.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace Application\Form\AgentHierarchieImportation;
-
-use Psr\Container\ContainerExceptionInterface;
-use Psr\Container\ContainerInterface;
-use Psr\Container\NotFoundExceptionInterface;
-
-class AgentHierarchieImportationFormFactory {
-
-    /**
-     * @param ContainerInterface $container
-     * @return AgentHierarchieImportationForm
-     * @throws ContainerExceptionInterface
-     * @throws NotFoundExceptionInterface
-     */
-    public function __invoke(ContainerInterface $container) : AgentHierarchieImportationForm
-    {
-        /** @var AgentHierarchieImportationHydrator $hydrator */
-        $hydrator = $container->get('HydratorManager')->get(AgentHierarchieImportationHydrator::class);
-
-        $form = new AgentHierarchieImportationForm();
-        $form->setHydrator($hydrator);
-        return $form;
-    }
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/Form/AgentHierarchieImportation/AgentHierarchieImportationHydrator.php b/module/Application/src/Application/Form/AgentHierarchieImportation/AgentHierarchieImportationHydrator.php
deleted file mode 100644
index 70cc395bb69a165111c6233aa4cafc414ae04af8..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Form/AgentHierarchieImportation/AgentHierarchieImportationHydrator.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-namespace Application\Form\AgentHierarchieImportation;
-
-use Laminas\Hydrator\HydratorInterface;
-
-class AgentHierarchieImportationHydrator implements HydratorInterface
-{
-    public function extract(object $object): array
-    {
-        return [];
-    }
-
-    public function hydrate(array $data, object $object) : object
-    {
-        return $object;
-    }
-
-}
-
diff --git a/module/Application/src/Application/Form/AgentHierarchieImportation/AgentHierarchieImportationHydratorFactory.php b/module/Application/src/Application/Form/AgentHierarchieImportation/AgentHierarchieImportationHydratorFactory.php
deleted file mode 100644
index c1a1282860f7169eaae283774c214af02364a85f..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Form/AgentHierarchieImportation/AgentHierarchieImportationHydratorFactory.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-namespace Application\Form\AgentHierarchieImportation;
-
-
-use Psr\Container\ContainerInterface;
-
-class AgentHierarchieImportationHydratorFactory
-{
-    public function __invoke(ContainerInterface $container) : AgentHierarchieImportationHydrator
-    {
-        return new AgentHierarchieImportationHydrator();
-    }
-
-
-}
-
diff --git a/module/Application/src/Application/Form/AgentHierarchieImportation/AgentHierarchieImportationForm.php b/module/Application/src/Application/Form/CsvImportation/CsvImportationForm.php
similarity index 70%
rename from module/Application/src/Application/Form/AgentHierarchieImportation/AgentHierarchieImportationForm.php
rename to module/Application/src/Application/Form/CsvImportation/CsvImportationForm.php
index c470ffc53ed4416b0b95eb410acd886f342471a6..1bdc22f364ef81be4f79a9796930600c5ec04269 100644
--- a/module/Application/src/Application/Form/AgentHierarchieImportation/AgentHierarchieImportationForm.php
+++ b/module/Application/src/Application/Form/CsvImportation/CsvImportationForm.php
@@ -1,14 +1,15 @@
 <?php
 
-namespace Application\Form\AgentHierarchieImportation;
+namespace Application\Form\CsvImportation;
 
 use Laminas\Form\Element\Button;
+use Laminas\Form\Element\Checkbox;
 use Laminas\Form\Element\File;
 use Laminas\Form\Element\Select;
 use Laminas\Form\Form;
 use Laminas\InputFilter\Factory;
 
-class AgentHierarchieImportationForm extends Form {
+class CsvImportationForm extends Form {
 
     public function init(): void
     {
@@ -17,7 +18,7 @@ class AgentHierarchieImportationForm extends Form {
             'type' => File::class,
             'name' => 'fichier',
             'options' => [
-                'label' => 'Chaînes hiérachique au format CSV <span class="icon icon-asterisque" title="Champ obligatoire"></span> :',
+                'label' => 'Fichier CSV <span class="icon icon-asterisque" title="Champ obligatoire"></span> :',
                 'label_options' => [ 'disable_html_escape' => true, ],
             ],
         ]);
@@ -37,6 +38,19 @@ class AgentHierarchieImportationForm extends Form {
                 'id' => 'mode',
             ],
         ]);
+        //header
+        $this->add([
+            'type' => Checkbox::class,
+            'name' => 'header',
+            'options' => [
+                'label' => 'Retirer la première ligne (header)',
+                'label_options' => [ 'disable_html_escape' => true, ],
+            ],
+            'attributes' => [
+                'id' => 'header',
+            ],
+        ]);
+
         //Submit
         $this->add([
             'type' => Button::class,
@@ -54,6 +68,7 @@ class AgentHierarchieImportationForm extends Form {
         $this->setInputFilter((new Factory())->createInputFilter([
             'fichier' => [ 'required' => true,  ],
             'mode'  => ['required' => true, ],
+            'header'  => ['required' => false, ],
         ]));
     }
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Form/CsvImportation/CsvImportationFormAwareTrait.php b/module/Application/src/Application/Form/CsvImportation/CsvImportationFormAwareTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..df68a258a4d25ddda893c6b3b25ee2e69d981b4a
--- /dev/null
+++ b/module/Application/src/Application/Form/CsvImportation/CsvImportationFormAwareTrait.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace Application\Form\CsvImportation;
+
+trait CsvImportationFormAwareTrait {
+
+    private CsvImportationForm $csvImportationForm;
+
+    public function getCsvImportationForm(): CsvImportationForm
+    {
+        return $this->csvImportationForm;
+    }
+
+    public function setCsvImportationForm(CsvImportationForm $csvImportationForm): void
+    {
+        $this->csvImportationForm = $csvImportationForm;
+    }
+
+}
\ No newline at end of file
diff --git a/module/Application/src/Application/Form/CsvImportation/CsvImportationFormFactory.php b/module/Application/src/Application/Form/CsvImportation/CsvImportationFormFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..2459e0cc075322f715dece99bcda91c1decaab34
--- /dev/null
+++ b/module/Application/src/Application/Form/CsvImportation/CsvImportationFormFactory.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Application\Form\CsvImportation;
+
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\ContainerInterface;
+use Psr\Container\NotFoundExceptionInterface;
+
+class CsvImportationFormFactory {
+
+    /**
+     * @param ContainerInterface $container
+     * @return CsvImportationForm
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
+    public function __invoke(ContainerInterface $container) : CsvImportationForm
+    {
+        $hydrator = $container->get('HydratorManager')->get(CsvImportationHydrator::class);
+
+        $form = new CsvImportationForm();
+        $form->setHydrator($hydrator);
+        return $form;
+    }
+}
\ No newline at end of file
diff --git a/module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculHydrator.php b/module/Application/src/Application/Form/CsvImportation/CsvImportationHydrator.php
similarity index 67%
rename from module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculHydrator.php
rename to module/Application/src/Application/Form/CsvImportation/CsvImportationHydrator.php
index cffbef07ce8391075ebd2d4e9d4b6bb6c56104da..63f946cfc8bc3c157818b291a7cb037f906cf128 100644
--- a/module/Application/src/Application/Form/AgentHierarchieCalcul/AgentHierarchieCalculHydrator.php
+++ b/module/Application/src/Application/Form/CsvImportation/CsvImportationHydrator.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace Application\Form\AgentHierarchieCalcul;
+namespace Application\Form\CsvImportation;
 
 use Laminas\Hydrator\HydratorInterface;
 
-class AgentHierarchieCalculHydrator implements HydratorInterface
+class CsvImportationHydrator implements HydratorInterface
 {
     public function extract(object $object): array
     {
diff --git a/module/Application/src/Application/Form/CsvImportation/CsvImportationHydratorFactory.php b/module/Application/src/Application/Form/CsvImportation/CsvImportationHydratorFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..b868f39d85be6039e7277a64a63048bc25ca39aa
--- /dev/null
+++ b/module/Application/src/Application/Form/CsvImportation/CsvImportationHydratorFactory.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace Application\Form\CsvImportation;
+
+
+use Psr\Container\ContainerInterface;
+
+class CsvImportationHydratorFactory
+{
+    public function __invoke(ContainerInterface $container) : CsvImportationHydrator
+    {
+        return new CsvImportationHydrator();
+    }
+
+
+}
+
diff --git a/module/Application/src/Application/Form/HasPeriode/HasPeriodeFormAwareTrait.php b/module/Application/src/Application/Form/HasPeriode/HasPeriodeFormAwareTrait.php
index a81439885cad6e6f9d77c41f06d8bfb3d08bd1c3..60d19d992e3b503a196f352c22763762e20162c5 100644
--- a/module/Application/src/Application/Form/HasPeriode/HasPeriodeFormAwareTrait.php
+++ b/module/Application/src/Application/Form/HasPeriode/HasPeriodeFormAwareTrait.php
@@ -4,25 +4,16 @@ namespace Application\Form\HasPeriode;
 
 trait HasPeriodeFormAwareTrait {
 
-    /** @var HasPeriodeForm */
-    private $hasPeriodeForm;
+    private HasPeriodeForm $hasPeriodeForm;
 
-    /**
-     * @return HasPeriodeForm
-     */
     public function getHasDescriptionForm(): HasPeriodeForm
     {
         return $this->hasPeriodeForm;
     }
 
-    /**
-     * @param HasPeriodeForm hasPeriodeForm
-     * @return HasPeriodeForm
-     */
-    public function setHasDescriptionForm(HasPeriodeForm $hasPeriodeForm): HasPeriodeForm
+    public function setHasDescriptionForm(HasPeriodeForm $hasPeriodeForm): void
     {
         $this->hasPeriodeForm = $hasPeriodeForm;
-        return $this->hasPeriodeForm;
     }
 
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Form/HasPeriode/HasPeriodeFormFactory.php b/module/Application/src/Application/Form/HasPeriode/HasPeriodeFormFactory.php
index b84cc4926a3d23e8c81e5297c8c6b8c04494cb82..11ecfd6fc5e00bd5e4e1028161012ff8fbbdd482 100644
--- a/module/Application/src/Application/Form/HasPeriode/HasPeriodeFormFactory.php
+++ b/module/Application/src/Application/Form/HasPeriode/HasPeriodeFormFactory.php
@@ -2,13 +2,16 @@
 
 namespace Application\Form\HasPeriode;
 
-use Interop\Container\ContainerInterface;
+
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\ContainerInterface;
+use Psr\Container\NotFoundExceptionInterface;
 
 class HasPeriodeFormFactory {
 
     /**
-     * @param ContainerInterface $container
-     * @return HasPeriodeForm
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
      */
     public function __invoke(ContainerInterface $container) : HasPeriodeForm
     {
diff --git a/module/Application/src/Application/Form/HasPeriode/HasPeriodeHydrator.php b/module/Application/src/Application/Form/HasPeriode/HasPeriodeHydrator.php
index 1bdfab529aa17b4e5c0967465b19acd928049482..0d5aeff4a8e2814001fbe56d51f1c0f2ac84c85c 100644
--- a/module/Application/src/Application/Form/HasPeriode/HasPeriodeHydrator.php
+++ b/module/Application/src/Application/Form/HasPeriode/HasPeriodeHydrator.php
@@ -2,7 +2,6 @@
 
 namespace Application\Form\HasPeriode;
 
-use Application\Entity\Db\Interfaces\HasDescriptionInterface;
 use Application\Entity\Db\Interfaces\HasPeriodeInterface;
 use DateTime;
 use Laminas\Hydrator\HydratorInterface;
diff --git a/module/Application/src/Application/Form/ModifierLibelle/ModifierLibelleFormFactory.php b/module/Application/src/Application/Form/ModifierLibelle/ModifierLibelleFormFactory.php
index 218d879090b468558332dc8488fdd38737e544a6..b6125344fca615bc9c73a7455592ed67b1bb73a1 100644
--- a/module/Application/src/Application/Form/ModifierLibelle/ModifierLibelleFormFactory.php
+++ b/module/Application/src/Application/Form/ModifierLibelle/ModifierLibelleFormFactory.php
@@ -2,13 +2,16 @@
 
 namespace Application\Form\ModifierLibelle;
 
-use Interop\Container\ContainerInterface;
+
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\ContainerInterface;
+use Psr\Container\NotFoundExceptionInterface;
 
 class ModifierLibelleFormFactory {
 
     /**
-     * @param ContainerInterface $container
-     * @return ModifierLibelleForm
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
      */
     public function __invoke(ContainerInterface $container)
     {
@@ -17,7 +20,6 @@ class ModifierLibelleFormFactory {
          */
         $hydrator = $container->get('HydratorManager')->get(ModifierLibelleHydrator::class);
 
-        /** @var ModifierLibelleForm $form */
         $form = new ModifierLibelleForm();
         $form->setHydrator($hydrator);
         return $form;
diff --git a/module/Application/src/Application/Provider/Role/RoleProvider.php b/module/Application/src/Application/Provider/Role/RoleProvider.php
index 76b32942f89f2652acf37ffa5e7ab263e3fb5500..32d67b5e1c648ae67d68cd6aad3495859faa0efb 100644
--- a/module/Application/src/Application/Provider/Role/RoleProvider.php
+++ b/module/Application/src/Application/Provider/Role/RoleProvider.php
@@ -6,8 +6,8 @@ class RoleProvider {
 
     const ADMIN_FONC        = 'Administrateur·trice fonctionnel·le';
     const ADMIN_TECH        = 'Administrateur·trice technique';
-    const DRH               = "Directeur·trice des ressources humaines";
-    const AGENT             = 'Agent';
+    const DRH               = "Direction des Ressources Humaines";
+    const DGS               = "Direction Générale des Services";
     const OBSERVATEUR       = 'Observateur·trice';
 
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Provider/Template/TextTemplates.php b/module/Application/src/Application/Provider/Template/TextTemplates.php
new file mode 100644
index 0000000000000000000000000000000000000000..771f403a1ab69cc5836196c3b3e61395ae4f8635
--- /dev/null
+++ b/module/Application/src/Application/Provider/Template/TextTemplates.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace Application\Provider\Template;
+
+class TextTemplates {
+
+    const MES_FORMATIONS_ACCUEIL = "MES_FORMATIONS_ACCUEIL";
+    const APROPOS = "APROPOS";
+    const CONTACT = "CONTACT";
+}
\ No newline at end of file
diff --git a/module/Application/src/Application/Provider/Template/TexteTemplate.php b/module/Application/src/Application/Provider/Template/TexteTemplate.php
deleted file mode 100644
index 0ddfa830f17aa2a8103ed2b46da786e8ef4825c2..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Provider/Template/TexteTemplate.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-
-namespace Application\Provider\Template;
-
-class TexteTemplate {
-
-    const EMC2_ACCUEIL = 'EMC2_ACCUEIL';
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/Bdd/BddFactory.php b/module/Application/src/Application/Service/Bdd/BddFactory.php
deleted file mode 100644
index ece6f83d1b83a428704d05c22d7da8fb6aee032c..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Service/Bdd/BddFactory.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-namespace Application\Service\Bdd;
-
-use Interop\Container\ContainerInterface;
-use Psr\Container\ContainerExceptionInterface;
-use Psr\Container\NotFoundExceptionInterface;
-use Unicaen\BddAdmin\Bdd;
-
-class BddFactory
-{
-
-    /**
-     * @throws ContainerExceptionInterface
-     * @throws NotFoundExceptionInterface
-     *
-     * @param ContainerInterface $container
-     *
-     * @return Bdd
-     */
-    public function __invoke(ContainerInterface $container): Bdd
-    {
-        $config = $container->get('Config')['doctrine']['connection']['orm_default'];
-        $configOptions = $container->get('Config')['bdd-admin'];
-
-        $bdd = new Bdd($config['params']);
-        $bdd->setOptions($configOptions);
-
-        return $bdd;
-    }
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/Notification/NotificationService.php b/module/Application/src/Application/Service/Notification/NotificationService.php
index 433e7b2948c6288a5af3d023669bc42fadd56769..17f1a8a8f0e0f6de3172fb3e4ad97e83d3b1e71e 100644
--- a/module/Application/src/Application/Service/Notification/NotificationService.php
+++ b/module/Application/src/Application/Service/Notification/NotificationService.php
@@ -5,19 +5,26 @@ namespace Application\Service\Notification;
 use Agent\Service\Agent\AgentServiceAwareTrait;
 use Agent\Service\AgentValidateur\AgentValidateurServiceAwareTrait;
 use Application\Service\Url\UrlServiceAwareTrait;
+use UnicaenMail\Entity\Db\Mail;
 use UnicaenMail\Service\Mail\MailServiceAwareTrait;
 use UnicaenParametre\Service\Parametre\ParametreServiceAwareTrait;
 use UnicaenRenderer\Service\Rendu\RenduServiceAwareTrait;
 
 class NotificationService
 {
-    use AgentServiceAwareTrait;
-    use AgentValidateurServiceAwareTrait;
-
     use MailServiceAwareTrait;
     use ParametreServiceAwareTrait;
     use RenduServiceAwareTrait;
-    use UrlServiceAwareTrait;
-
 
+    public function generateAndSend(string $templateCode, string $adresses, array $motsClefs = [], array $vars = []): ?Mail
+    {
+        $rendu = $this->getRenduService()->generateRenduByTemplateCode($templateCode, $vars);
+        $mail = $this->getMailService()->sendMail($adresses, $rendu->getSujet(), $rendu->getCorps(), 'Formation');
+        $motsClefs[] = $rendu->getTemplate()->generateTag();
+        if ($mail !== null) {
+            $mail->setMotsClefs($motsClefs);
+            $this->getMailService()->update($mail);
+        }
+        return $mail;
+    }
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/Notification/NotificationServiceFactory.php b/module/Application/src/Application/Service/Notification/NotificationServiceFactory.php
index 00cb9bc7c698c96f7aaa18db3e7409e3f85b0b8a..1fbd38db6acf17e4f1b2341d0e4af02d6d0b735d 100644
--- a/module/Application/src/Application/Service/Notification/NotificationServiceFactory.php
+++ b/module/Application/src/Application/Service/Notification/NotificationServiceFactory.php
@@ -22,27 +22,18 @@ class NotificationServiceFactory
     public function __invoke(ContainerInterface $container): NotificationService
     {
         /**
-         * @var AgentService $agentService ;
-         * @var AgentValidateurService $agentValidateurService
          * @var MailService $mailService ;
          * @var ParametreService $parametreService ;
          * @var RenduService $renduService
-         * @var UrlService $urlService
          */
-        $agentService = $container->get(AgentService::class);
-        $agentValidateurService = $container->get(AgentValidateurService::class);
         $mailService = $container->get(MailService::class);
         $parametreService = $container->get(ParametreService::class);
         $renduService = $container->get(RenduService::class);
-        $urlService = $container->get(UrlService::class);
 
         $service = new NotificationService();
-        $service->setAgentService($agentService);
-        $service->setAgentValidateurService($agentValidateurService);
         $service->setMailService($mailService);
         $service->setParametreService($parametreService);
         $service->setRenduService($renduService);
-        $service->setUrlService($urlService);
         return $service;
     }
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/Perimetre/PerimetreService.php b/module/Application/src/Application/Service/Perimetre/PerimetreService.php
new file mode 100644
index 0000000000000000000000000000000000000000..5d4bb59995c73477cf1223aa1dceca33fd6315d5
--- /dev/null
+++ b/module/Application/src/Application/Service/Perimetre/PerimetreService.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace Application\Service\Perimetre;
+
+use Application\Provider\Role\RoleProvider as AppRoleProvider;
+use Formation\Provider\Role\FormationRoles as FormationRoleProvider;
+use Structure\Provider\Role\RoleProvider as StructureRoleProvider;
+use Structure\Entity\Db\Structure;
+use Structure\Service\Structure\StructureServiceAwareTrait;
+use UnicaenIndicateur\Service\Perimetre\PerimetreServiceInterface;
+use UnicaenIndicateur\Service\Perimetre\PerimetreServiceTrait;
+use UnicaenUtilisateur\Entity\Db\AbstractRole;
+use UnicaenUtilisateur\Entity\Db\AbstractUser;
+
+class PerimetreService implements PerimetreServiceInterface
+{
+    use PerimetreServiceTrait;
+    use StructureServiceAwareTrait;
+    /**
+     * @param AbstractUser $user
+     * @param AbstractRole $role
+     * @return array
+     */
+    public function getPerimetres(AbstractUser $user, AbstractRole $role) : array
+    {
+        $perimetres = [];
+
+        /** Périmètres de structure $structures ***********************************************************************/
+        $structures = [];
+        switch ($role->getRoleId()) {
+            case AppRoleProvider::ADMIN_TECH:
+            case AppRoleProvider::ADMIN_FONC:
+            case AppRoleProvider::OBSERVATEUR:
+            case FormationRoleProvider::GESTIONNAIRE_FORMATION:
+            case FormationRoleProvider::RESPONSABLE_FORMATION:
+                $structures = $this->getStructureService()->getStructures();
+                break;
+            case StructureRoleProvider::RESPONSABLE:
+                $structures = $this->getStructureService()->getStructuresByResponsable($user);
+                break;
+            case StructureRoleProvider::GESTIONNAIRE:
+                $structures = $this->getStructureService()->getStructuresByGestionnaire($user);
+                break;
+        }
+        $structures = array_map(function (Structure $s) { return 'STRUCTURE_'.$s->getId();}, $structures);
+        $perimetres = array_merge($perimetres, $structures);
+
+        //ROLE
+        //DOMAINE
+
+        return $perimetres;
+    }
+
+}
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/Perimetre/PerimetreServiceAwareTrait.php b/module/Application/src/Application/Service/Perimetre/PerimetreServiceAwareTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..d00634c326f40de42d92ebbdc2f2b6aa78579f7a
--- /dev/null
+++ b/module/Application/src/Application/Service/Perimetre/PerimetreServiceAwareTrait.php
@@ -0,0 +1,20 @@
+<?php
+
+namespace Application\Service\Perimetre;
+
+trait PerimetreServiceAwareTrait
+{
+    private PerimetreService $perimetreService;
+
+    public function getPerimetreService(): PerimetreService
+    {
+        return $this->perimetreService;
+    }
+
+    public function setPerimetreService(PerimetreService $perimetreService): void
+    {
+        $this->perimetreService = $perimetreService;
+    }
+
+
+}
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/Perimetre/PerimetreServiceFactory.php b/module/Application/src/Application/Service/Perimetre/PerimetreServiceFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..a43453c15e8e62447bbe5357656e35c8cfccbdd1
--- /dev/null
+++ b/module/Application/src/Application/Service/Perimetre/PerimetreServiceFactory.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace Application\Service\Perimetre;
+
+use Psr\Container\ContainerInterface;
+use Structure\Service\Structure\StructureService;
+
+class  PerimetreServiceFactory {
+
+    public function __invoke(ContainerInterface $container): PerimetreService
+    {
+        /**
+         * @var StructureService $structureService
+         */
+        $structureService = $container->get(StructureService::class);
+
+        $service = new PerimetreService();
+        $service->setStructureService($structureService);
+        return $service;
+    }
+}
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/RendererAwareTrait.php b/module/Application/src/Application/Service/RendererAwareTrait.php
deleted file mode 100644
index 7a5ffa86152bc5acfea04025c16f996391d4845c..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/Service/RendererAwareTrait.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-namespace Application\Service;
-
-use Laminas\View\Renderer\PhpRenderer;
-
-trait RendererAwareTrait {
-
-    /** @var PhpRenderer */
-    private $renderer;
-
-    /**
-     * @return PhpRenderer
-     */
-    public function getRenderer()
-    {
-        return $this->renderer;
-    }
-
-    /**
-     * @param PhpRenderer $renderer
-     */
-    public function setRenderer($renderer)
-    {
-        $this->renderer = $renderer;
-    }
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/Url/UrlService.php b/module/Application/src/Application/Service/Url/UrlService.php
index 4a11c893138443e03286e1f017930679a631bf05..4f3f6050f8017b356a379a08f8ee7e971f6bb9eb 100644
--- a/module/Application/src/Application/Service/Url/UrlService.php
+++ b/module/Application/src/Application/Service/Url/UrlService.php
@@ -2,7 +2,6 @@
 
 namespace Application\Service\Url;
 
-use DateTime;
 use Laminas\View\Renderer\PhpRenderer;
 
 class UrlService {
diff --git a/module/Application/src/Application/Service/Url/UrlServiceFactory.php b/module/Application/src/Application/Service/Url/UrlServiceFactory.php
index 5fa2b0569cadc53885eb017c00b5ff4d4f5a18c3..915f55fe9efae2854016dec854327d2846540343 100644
--- a/module/Application/src/Application/Service/Url/UrlServiceFactory.php
+++ b/module/Application/src/Application/Service/Url/UrlServiceFactory.php
@@ -2,14 +2,16 @@
 
 namespace Application\Service\Url;
 
-use Interop\Container\ContainerInterface;
 use Laminas\View\Renderer\PhpRenderer;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\ContainerInterface;
+use Psr\Container\NotFoundExceptionInterface;
 
 class UrlServiceFactory {
 
     /**
-     * @param ContainerInterface $container
-     * @return UrlService
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
      */
     public function __invoke(ContainerInterface $container) : UrlService
     {
diff --git a/module/Application/src/Application/View/Helper/AgentViewHelper.php b/module/Application/src/Application/View/Helper/AgentViewHelper.php
deleted file mode 100644
index ce912076dce0970690ec11b010a5bd2c5d418f53..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/View/Helper/AgentViewHelper.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace Application\View\Helper;
-
-use Agent\Entity\Db\Agent;
-use Laminas\View\Helper\AbstractHelper;
-use Laminas\View\Helper\Partial;
-use Laminas\View\Resolver\TemplatePathStack;
-
-
-class AgentViewHelper extends AbstractHelper
-{
-    /**
-     * @param Agent $agent
-     * @param string $mode
-     * @param array $options
-     * @return string|Partial
-     */
-    public function __invoke(Agent $agent, string $mode = 'affichage', array $options = []): string|Partial
-    {
-        $view = $this->getView();
-        $view->resolver()->attach(new TemplatePathStack(['script_paths' => [__DIR__ . "/partial"]]));
-
-        return $view->partial('agent', ['agent' => $agent, 'mode' => $mode, 'options' => $options]);
-    }
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/View/Helper/RaisonsViewHelper.php b/module/Application/src/Application/View/Helper/RaisonsViewHelper.php
deleted file mode 100644
index 01f46bea2f6132e1249f035c4e1bb70793233300..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/View/Helper/RaisonsViewHelper.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-namespace Application\View\Helper;
-
-use Application\View\Renderer\PhpRenderer;
-use Laminas\View\Helper\AbstractHelper;
-use Laminas\View\Helper\Partial;
-use Laminas\View\Resolver\TemplatePathStack;
-
-class RaisonsViewHelper extends AbstractHelper
-{
-    /**
-     * @param array $raisons
-     * @param array $options
-     * @return string|Partial
-     */
-    public function __invoke($raisons, $options = [])
-    {
-        /** @var PhpRenderer $view */
-        $view = $this->getView();
-        $view->resolver()->attach(new TemplatePathStack(['script_paths' => [__DIR__ . "/partial"]]));
-
-        return $view->partial('raisons', ['raisons' => $raisons, 'options' => $options]);
-    }
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/View/Helper/SynchorniserIconViewHelper.php b/module/Application/src/Application/View/Helper/SynchorniserIconViewHelper.php
deleted file mode 100644
index deac953157ca5b7832d1875b4722027a01221dcd..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/View/Helper/SynchorniserIconViewHelper.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace Application\View\Helper;
-
-use Application\View\Renderer\PhpRenderer;
-use Laminas\View\Helper\AbstractHelper;
-use Laminas\View\Helper\Partial;
-use Laminas\View\Resolver\TemplatePathStack;
-
-class SynchorniserIconViewHelper extends AbstractHelper
-{
-
-    /**
-     * @param bool|null $infos
-     * @param array $options
-     * @return string|Partial
-     */
-    public function __invoke(?bool $infos = true, $options = [])
-    {
-        /** @var PhpRenderer $view */
-        $view = $this->getView();
-        $view->resolver()->attach(new TemplatePathStack(['script_paths' => [__DIR__ . "/partial"]]));
-
-        return $view->partial('synchroniser-icon', ['infos' => $infos, 'options' => $options]);
-    }
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/View/Helper/ValidationBadgeViewHelper.php b/module/Application/src/Application/View/Helper/ValidationBadgeViewHelper.php
deleted file mode 100644
index bb22902830fb46979a23b923141c2475f41be2bf..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/View/Helper/ValidationBadgeViewHelper.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-namespace Application\View\Helper;
-
-use Application\Entity\Db\Validation;
-use Application\View\Renderer\PhpRenderer;
-use Laminas\View\Helper\AbstractHelper;
-use Laminas\View\Helper\Partial;
-use Laminas\View\Resolver\TemplatePathStack;
-
-
-class ValidationBadgeViewHelper extends AbstractHelper
-{
-    /**
-     * @param Validation $validation
-     * @param array $options
-     * @return string|Partial
-     */
-    public function __invoke($validation, $options = [])
-    {
-        /** @var PhpRenderer $view */
-        $view = $this->getView();
-        $view->resolver()->attach(new TemplatePathStack(['script_paths' => [__DIR__ . "/partial"]]));
-
-        return $view->partial('validation-badge-bis', ['validation' => $validation, 'options' => $options]);
-    }
-}
\ No newline at end of file
diff --git a/module/Application/src/Application/View/Helper/partial/agent.phtml b/module/Application/src/Application/View/Helper/partial/agent.phtml
deleted file mode 100644
index 8a82d14845c2e872f1594b0ce1eead123c01a33a..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/View/Helper/partial/agent.phtml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-
-/**
- * @var Agent $agent
- * @var string $mode
- * @var array $options
- */
-
-use Agent\Entity\Db\Agent;
-use Application\Provider\Privilege\MissionspecifiqueaffectationPrivileges;
-
-$canVoirMission         = $this->isAllowed(MissionspecifiqueaffectationPrivileges::getResourceId(MissionspecifiqueaffectationPrivileges::MISSIONSPECIFIQUEAFFECTATION_AFFICHER));
-$canLettre              = $canVoirMission;
-$canAjouterMission      = $this->isAllowed(MissionspecifiqueaffectationPrivileges::getResourceId(MissionspecifiqueaffectationPrivileges::MISSIONSPECIFIQUEAFFECTATION_MODIFIER));
-$canModifierMission     = $canAjouterMission;
-$canHistoriserMission   = $this->isAllowed(MissionspecifiqueaffectationPrivileges::getResourceId(MissionspecifiqueaffectationPrivileges::MISSIONSPECIFIQUEAFFECTATION_HISTORISER));
-$canDetruireMission     = $this->isAllowed(MissionspecifiqueaffectationPrivileges::getResourceId(MissionspecifiqueaffectationPrivileges::MISSIONSPECIFIQUEAFFECTATION_DETRUIRE));
-
-$now = new DateTime();
-
-$query = [];
-if (isset($options["retour"])) $query["retour"] = $options["retour"];
-?>
-
-<?php
-?>
-
-<dl class="row">
-    <dt class="col-md-3"> Prénom </dt>
-    <dd class="col-md-9"> <?php echo $agent->getPrenom(); ?> </dd>
-    <dt class="col-md-3"> Nom </dt>
-    <dd class="col-md-9"> <?php echo $agent->getNomUsuel(); ?> </dd>
-    <dt class="col-md-3"> Modalité de service </dt>
-    <dd class="col-md-9">
-        <?php echo $agent->toStringModaliteDeService(); ?>
-    </dd>
-</dl>
-
-<div class="row">
-    <div class="col-md-3">
-        <h3> Affectations actives</h3>
-        <?php foreach ($agent->getAffectationsActifs() as $affectation) : ?>
-            <?php echo $this->agentAffectation($affectation, ['structure' => true, 'periode' => false, 'temoin' => false]); ?>
-        <?php endforeach; ?>
-    </div>
-    <div class="col-md-3">
-        <h3> Statuts actifs</h3>
-        <?php foreach ($agent->getStatutsActifs() as $statut) : ?>
-            <?php echo $this->agentStatut($statut, ['structure' => true, 'periode' => false, 'temoin' => true]); ?>
-        <?php endforeach; ?>
-    </div>
-    <div class="col-md-6">
-        <h3> Grades actifs</h3>
-        <?php foreach ($agent->getGradesActifs() as $grade) : ?>
-            <?php echo $this->agentGrade($grade, ['structure' => true, 'periode' => false, 'temoin' => true, 'echelons' => $agent->getEchelonsActifs()]); ?>
-        <?php endforeach; ?>
-    </div>
-</div>
-
-<?php if (!empty($agent->getMissionsSpecifiques()) OR $mode==='edition') : ?>
-    <div class="row">
-        <div class="col-md-7">
-            <h2>
-                Missions spécifiques
-            </h2>
-        </div>
-        <div class="col-md-4">
-        <?php if ($mode === 'edition') : ?>
-            <?php if ($canAjouterMission) : ?>
-                <a
-                    <?php /** @see \Application\Controller\MissionSpecifiqueAffectationController::ajouterAction() */?>
-                    href="<?php echo $this->url('mission-specifique-affectation/ajouter', [], ['query' => ['agent' => $agent->getId()]], true); ?>"
-                    class="ajax-modal btn btn-primary action pull-right"
-                    data-event="modification"
-                >
-                    <span class="icon icon-ajouter"></span>Ajouter une mission spécifique</a>
-            <?php endif; ?>
-        <?php endif; ?>
-        </div>
-    </div>
-
-
-<?php endif; ?>
\ No newline at end of file
diff --git a/module/Application/src/Application/View/Helper/partial/raisons.phtml b/module/Application/src/Application/View/Helper/partial/raisons.phtml
deleted file mode 100644
index c4896ed385b86f06a76ef9da4b1dcc59db92f117..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/View/Helper/partial/raisons.phtml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-/**
- * @see \Application\View\Helper\RaisonsViewHelper
- * @var array $raisons
- * @var array $options
- */
-
-use Agent\Entity\Db\Agent;
-use FicheMetier\Entity\Db\FicheMetier;
-use FicheMetier\Entity\Db\FicheMetierMission;
-use FicheMetier\Entity\Db\Mission;
-use Formation\Entity\Db\Formation;
-
-
-?>
-<?php if ($raisons !== null) : ?>
-    <?php foreach ($raisons as $raison) : ?>
-        <?php $text = "";
-        switch ($raison) {
-            case $raison instanceof FicheMetier :
-                $text = "Obtenue grâce à la fiche métier [".$raison->getMetier()->getLibelle()."]";
-                $label = "FicheMétier";
-                $class = 'fiche-metier';
-                break;
-            case $raison instanceof FicheMetierMission :
-                $text = $raison->getMission()->getLibelle();
-                $label = "Mission";
-                $class = 'activite';
-                break;
-            case $raison instanceof Mission :
-                $text = "Obtenue grâce à la mission [" . $raison->getLibelle()."]";
-                $label = "Mission";
-                $class = 'mission';
-                break;
-            case $raison instanceof Formation :
-                $text = "Obtenue grâce à la formation <span class='highlight formation'>" . $raison->getLibelle() . "</span>";
-                $label = "Formation";
-                $class = 'raison formation';
-                break;
-            case $raison instanceof Agent :
-                $text = "Liée à l'agent <span class='highlight agent'>" . $raison->getDenomination(true) . "</span>";
-                $label = "Agent";
-                $class = 'agent';
-                break;
-            default :
-//                var_dump($raison);
-                $text = "Provenance inconnue : (".get_class($raison).")";
-                $label = "???";
-                $class = 'inconnue';
-
-        }
-        ?>
-        <span data-bs-toggle='tooltip' data-bs-html='true' class="raison <?php echo $class; ?>" title="<?php echo $text; ?>" ><?php echo $label; ?></span>
-    <?php endforeach;?>
-<?php endif; ?>
-
-<style>
-    span.raison {
-        font-variant-position: super;
-        font-weight: bold;
-    }
-
-    span.raison.agent {
-        color: darkgoldenrod;
-    }
-
-    span.raison.fiche-metier {
-        color: purple;
-    }
-
-    span.raison.activite {
-        color: darkslateblue;
-    }
-
-    span.raison.mission {
-        color: darkred;
-    }
-
-    span.raison.formation {
-        color: darkgreen;
-    }
-
-    span.raison.inconnue {
-        color: gray;
-    }
-</style>
-
-
diff --git a/module/Application/src/Application/View/Helper/partial/synchroniser-icon.phtml b/module/Application/src/Application/View/Helper/partial/synchroniser-icon.phtml
deleted file mode 100644
index 996f330b4b03ddd1fce5c0cbe6c719a7af8f1b78..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/View/Helper/partial/synchroniser-icon.phtml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-/**
- * @var bool $infos;
- */
-
-?>
-
-<span class="icon icon-synchoniser"
-      <?php if ($infos) : ?>
-          title="<span class='icon icon-synchroniser' style='float:left;color:#31708f'></span> <span style='text-align:justify'>Éléments synchronisés journalièrement</span>"
-          data-bs-toggle="tooltip" data-bs-html="true"
-      <?php endif; ?>
->
-</span>
diff --git a/module/Application/src/Application/View/Helper/partial/validation-badge-bis.phtml b/module/Application/src/Application/View/Helper/partial/validation-badge-bis.phtml
deleted file mode 100644
index f0280a6ccbba08658d057994429fd54ffe45c857..0000000000000000000000000000000000000000
--- a/module/Application/src/Application/View/Helper/partial/validation-badge-bis.phtml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-use Application\Entity\Db\Validation;
-use Application\Entity\Db\ValidationValeur;
-use UnicaenApp\Exception\RuntimeException;
-
-/**
- * @var Validation $validation
- * @var array $options
- */
-
-//$icon = $options['icone'];
-//if ($icon === null) throw new RuntimeException("<strong>ActionIcon</strong> ne possèdent pas d'icone ! <br/> Veuillez renseigner l'option 'icone' ");
-//
-//$url = $options['url'];
-//if ($url === null) throw new RuntimeException("<strong>ActionIcon</strong> ne possèdent pas d'url ! <br/> Veuillez renseigner l'option 'url' ");
-//
-//
-//$titre = '';
-//if (isset($options['titre'])) $titre = $options['titre'];
-//
-//$isAllowed = true;
-//if (isset($options['isAllowed'])) $class = $options['isAllowed'];
-//$displayOff = true;
-//if (isset($options['displayOff'])) $displayOff = $options['displayOff'];
-//
-//$class = '';
-//if (isset($options['class'])) $class = $options['class'];
-//$event = '';
-//if (isset($options['event'])) $event = $options['event'];
-?>
-
-<?php
-    $vclass = "";
-    $etiquette = "";
-    $texte = "Date: ".$validation->getHistoModification()->format('d/m/Y à H:i:s')."\nValidateur: ".$validation->getHistoModificateur()->getDisplayName();
-    $valeur = ($validation->getValeur())?$validation->getValeur()->getCode():null;
-    switch($valeur) {
-        case ValidationValeur::VALIDER :
-            $vclass='validation-badge-valider';
-            $etiquette = 'Validée';
-            break;
-        case ValidationValeur::REJETER :
-            $vclass='validation-badge-rejeter';
-            $etiquette = 'Rejetée';
-            break;
-        //case ValidationValeur::A_MODIFIER :
-        default :
-            $vclass='validation-badge-a_modifier';
-            $etiquette = 'À modifier';
-            break;
-    }
-?>
-<a href="<?php echo $this->url('validation-fiche/afficher', ["validation" => $validation->getId()], [], true); ?>" class="ajax-modal">
-    <span class="badge <?php echo $vclass; ?>" title="<?php echo $texte; ?>">
-        <?php echo $etiquette; ?>
-    </span>
-</a>
-
-<style>
-    span.validation-badge-valider {
-        background-color: darkgreen;
-    }
-    span.validation-badge-rejeter {
-        background-color: darkred;
-    }
-    span.validation-badge-a_modifier {
-        background-color: darkorange;
-    }
-</style>
\ No newline at end of file
diff --git a/module/Application/view/application/index/index-gestionnaire.phtml b/module/Application/view/application/index/index-gestionnaire.phtml
index f46f1f5db461f860c1334f6723ceaa93f8b124d3..91768cd1450d9f8e8c83d72ae9cfa8d6e332a681 100644
--- a/module/Application/view/application/index/index-gestionnaire.phtml
+++ b/module/Application/view/application/index/index-gestionnaire.phtml
@@ -63,7 +63,7 @@ foreach ($dictionnaireDemande as $etatCode => $demandes) {
         <div class="card" id="<?php echo $etatCode; ?>">
             <div class="card-header bg-default togglable">
                 <?php echo $this->etattype($etatsTypesSession[$etatCode], ['display-categorie' => false]); ?>
-                <?php echo count($sessions); ?> session·s à l'états
+                <?php echo count($sessions); ?> session·s à l'état
                 [<?php echo $etatsTypesSession[$etatCode]->getLibelle(); ?>]
             </div>
             <?php if (count($sessions) > 0) : ?>
@@ -86,7 +86,7 @@ foreach ($dictionnaireDemande as $etatCode => $demandes) {
         <div class="card">
             <div class="card-header bg-default">
                 <?php echo $this->etattype($etatsTypesDemande[$etatCode], ['display-categorie' => false]); ?>
-                <?php echo count($demandes); ?> demande·s externe·s à l'états
+                <?php echo count($demandes); ?> demande·s à l'état
                 [<?php echo $etatsTypesDemande[$etatCode]->getLibelle(); ?>]
             </div>
             <?php if (count($demandes) > 0) : ?>
diff --git a/module/Application/view/application/index/index-responsable.phtml b/module/Application/view/application/index/index-responsable.phtml
index 3895f42e85cc5fe638338d6e6f7768a2c10d2e51..70890fd284d6fefd4612798cdcbaa969d75fd94a 100644
--- a/module/Application/view/application/index/index-responsable.phtml
+++ b/module/Application/view/application/index/index-responsable.phtml
@@ -98,7 +98,7 @@ $this->headTitle("Index de gestion des formations");
 </table>
 
 
-<h2> Liste des demandes externes pour l'années courantes </h2>
+<h2> Liste des demandes externes pour l'année courante </h2>
 
 <table class="table table-condensed datatable">
     <thead>
diff --git a/module/Application/view/application/index/index.phtml b/module/Application/view/application/index/index.phtml
index f2b2dfe83baf6c01efe973447cafc8b2e38f8f2e..7815504cc29b4e1cc7f7253de9114bfdd4e56bf2 100644
--- a/module/Application/view/application/index/index.phtml
+++ b/module/Application/view/application/index/index.phtml
@@ -19,25 +19,27 @@ use UnicaenUtilisateur\Entity\Db\User;
 <div class="jumbotron" id="preecog">
     <div class="row">
         <div class="col-md-4">
-<!--            <div class="jumbo-title">-->
-<!--                <span class='text-mesformations'>-->
-<!--                    Mes formations-->
-<!--                </span>-->
-<!--            </div>-->
-<!---->
-<!--            <div style="font-size: large">-->
-<!--                Outils de gestion des formations du personnel-->
-<!--            </div>-->
-
-            <img src="<?php echo $this->parametreValue(GlobalParametres::TYPE, GlobalParametres::APP_LOGO); ?>" alt="placeholder" style="width:80%;">
+            <!--            <div class="jumbo-title">-->
+            <!--                <span class='text-mesformations'>-->
+            <!--                    Mes formations-->
+            <!--                </span>-->
+            <!--            </div>-->
+            <!---->
+            <!--            <div style="font-size: large">-->
+            <!--                Outils de gestion des formations du personnel-->
+            <!--            </div>-->
+
+            <img src="<?php echo $this->parametreValue(GlobalParametres::TYPE, GlobalParametres::APP_LOGO); ?>"
+                 alt="placeholder" style="width:80%;">
 
             <br/>
 
             <div>
                 <?php if ($user): ?>
                     <p>
-                        Vous êtes connecté&middot;e en tant que <strong><?php echo $user->getDisplayName(); ?></strong>. <br/>
-                        Vous assumez le rôle de <strong><?php echo ($role)?$role->getLibelle():"???"; ?></strong>.
+                        Vous êtes connecté&middot;e en tant que <strong><?php echo $user->getDisplayName(); ?></strong>.
+                        <br/>
+                        Vous assumez le rôle de <strong><?php echo ($role) ? $role->getLibelle() : "???"; ?></strong>.
                     </p>
                 <?php else: ?>
 
@@ -59,87 +61,88 @@ use UnicaenUtilisateur\Entity\Db\User;
     </div>
 </div>
 <div style="display: none;">
-ceci est un test
-
-<label for="state">State : </label>
-<select class="js-example-basic-single" name="state" id="state">
-    <optgroup label="Alaskan/Hawaiian Time Zone">
-        <option value="AK">Alaska</option>
-        <option value="HI">Hawaii</option>
-    </optgroup>
-    <optgroup label="Pacific Time Zone">
-        <option value="CA">California</option>
-        <option value="NV">Nevada</option>
-        <option value="OR">Oregon</option>
-        <option value="WA">Washington</option>
-    </optgroup>
-    <optgroup label="Mountain Time Zone">
-        <option value="AZ">Arizona</option>
-        <option value="CO">Colorado</option>
-        <option value="ID">Idaho</option>
-        <option value="MT">Montana</option>
-        <option value="NE">Nebraska</option>
-        <option value="NM">New Mexico</option>
-        <option value="ND">North Dakota</option>
-        <option value="UT">Utah</option>
-        <option value="WY">Wyoming</option>
-    </optgroup>
-    <optgroup label="Central Time Zone">
-        <option value="AL">Alabama</option>
-        <option value="AR">Arkansas</option>
-        <option value="IL">Illinois</option>
-        <option value="IA">Iowa</option>
-        <option value="KS">Kansas</option>
-        <option value="KY">Kentucky</option>
-        <option value="LA">Louisiana</option>
-        <option value="MN">Minnesota</option>
-        <option value="MS">Mississippi</option>
-        <option value="MO">Missouri</option>
-        <option value="OK">Oklahoma</option>
-        <option value="SD">South Dakota</option>
-        <option value="TX">Texas</option>
-        <option value="TN">Tennessee</option>
-        <option value="WI">Wisconsin</option>
-    </optgroup>
-    <optgroup label="Eastern Time Zone">
-        <option value="CT">Connecticut</option>
-        <option value="DE">Delaware</option>
-        <option value="FL">Florida</option>
-        <option value="GA">Georgia</option>
-        <option value="IN">Indiana</option>
-        <option value="ME">Maine</option>
-        <option value="MD">Maryland</option>
-        <option value="MA">Massachusetts</option>
-        <option value="MI">Michigan</option>
-        <option value="NH">New Hampshire</option>
-        <option value="NJ">New Jersey</option>
-        <option value="NY">New York</option>
-        <option value="NC">North Carolina</option>
-        <option value="OH">Ohio</option>
-        <option value="PA">Pennsylvania</option>
-        <option value="RI">Rhode Island</option>
-        <option value="SC">South Carolina</option>
-        <option value="VT">Vermont</option>
-        <option value="VA">Virginia</option>
-        <option value="WV">West Virginia</option>
-    </optgroup>
-</select>
-
-<script>
-    // In your Javascript (external .js resource or <script> tag)
-    $(document).ready(function() {
-        $('.js-example-basic-single').select2();
-    });
-</script>
+    ceci est un test
+
+    <label for="state">State : </label>
+    <select class="js-example-basic-single" name="state" id="state">
+        <optgroup label="Alaskan/Hawaiian Time Zone">
+            <option value="AK">Alaska</option>
+            <option value="HI">Hawaii</option>
+        </optgroup>
+        <optgroup label="Pacific Time Zone">
+            <option value="CA">California</option>
+            <option value="NV">Nevada</option>
+            <option value="OR">Oregon</option>
+            <option value="WA">Washington</option>
+        </optgroup>
+        <optgroup label="Mountain Time Zone">
+            <option value="AZ">Arizona</option>
+            <option value="CO">Colorado</option>
+            <option value="ID">Idaho</option>
+            <option value="MT">Montana</option>
+            <option value="NE">Nebraska</option>
+            <option value="NM">New Mexico</option>
+            <option value="ND">North Dakota</option>
+            <option value="UT">Utah</option>
+            <option value="WY">Wyoming</option>
+        </optgroup>
+        <optgroup label="Central Time Zone">
+            <option value="AL">Alabama</option>
+            <option value="AR">Arkansas</option>
+            <option value="IL">Illinois</option>
+            <option value="IA">Iowa</option>
+            <option value="KS">Kansas</option>
+            <option value="KY">Kentucky</option>
+            <option value="LA">Louisiana</option>
+            <option value="MN">Minnesota</option>
+            <option value="MS">Mississippi</option>
+            <option value="MO">Missouri</option>
+            <option value="OK">Oklahoma</option>
+            <option value="SD">South Dakota</option>
+            <option value="TX">Texas</option>
+            <option value="TN">Tennessee</option>
+            <option value="WI">Wisconsin</option>
+        </optgroup>
+        <optgroup label="Eastern Time Zone">
+            <option value="CT">Connecticut</option>
+            <option value="DE">Delaware</option>
+            <option value="FL">Florida</option>
+            <option value="GA">Georgia</option>
+            <option value="IN">Indiana</option>
+            <option value="ME">Maine</option>
+            <option value="MD">Maryland</option>
+            <option value="MA">Massachusetts</option>
+            <option value="MI">Michigan</option>
+            <option value="NH">New Hampshire</option>
+            <option value="NJ">New Jersey</option>
+            <option value="NY">New York</option>
+            <option value="NC">North Carolina</option>
+            <option value="OH">Ohio</option>
+            <option value="PA">Pennsylvania</option>
+            <option value="RI">Rhode Island</option>
+            <option value="SC">South Carolina</option>
+            <option value="VT">Vermont</option>
+            <option value="VA">Virginia</option>
+            <option value="WV">West Virginia</option>
+        </optgroup>
+    </select>
+
+    <script>
+        // In your Javascript (external .js resource or <script> tag)
+        $(document).ready(function () {
+            $('.js-example-basic-single').select2();
+        });
+    </script>
 </div>
 
 <style>
     div.jumbotron {
         margin-top: auto;
         margin-bottom: auto;
-        border-radius: 0.5rem ;
+        border-radius: 0.5rem;
         padding: 1rem;
     }
+
     div#contenu-principal {
         background: var(--body-background);
     }
@@ -154,14 +157,14 @@ ceci est un test
         font-size: xx-large;
         font-weight: bold;
         vertical-align: top;
-        width:49%;
-        display:block;
+        width: 49%;
+        display: block;
     }
 
 
     @media (min-width: 0) and (max-width: 767px) {
         .jumbo-title {
-            width:100%;
+            width: 100%;
             text-align: left;
             padding-left: 2rem;
         }
diff --git a/module/Application/view/application/verification/index.phtml b/module/Application/view/application/verification/index.phtml
index 4db2e43ccbcec11445901483c80fb7d72babb310..050eb899f8678588a961f9e2e14fa92c49d4a89a 100644
--- a/module/Application/view/application/verification/index.phtml
+++ b/module/Application/view/application/verification/index.phtml
@@ -241,7 +241,7 @@ $this->headTitle("Vérification de l'installation");
         <?php if ($path === null) : ?>
         <div class="alert alert-info">
             <span class="icon icon-information"></span>
-            Aucun répertoire Etat >>> Pas de état associé au module
+            Aucun répertoire Etat >>> Pas d'état associé au module
         </div>
     <?php else : ?>
         <div class="card bg-default">
diff --git a/module/Application/view/application/verification/infos.phtml b/module/Application/view/application/verification/infos.phtml
index 2eb69ff69b191ca66a15d1dc85d6dc5c814cceb4..f35a8efd67986767cdb3e468efecb11f340720eb 100644
--- a/module/Application/view/application/verification/infos.phtml
+++ b/module/Application/view/application/verification/infos.phtml
@@ -1,3 +1,3 @@
 <?php
 
-phpinfo(); ?><docke></docke>
\ No newline at end of file
+phpinfo();
\ No newline at end of file
diff --git a/module/Application/view/error/403.phtml b/module/Application/view/error/403.phtml
index b88e452fa8ab587d9ba29df8da513775e1ebe160..c09c313ad6d7fc2f2729b6e951d412729c688518 100644
--- a/module/Application/view/error/403.phtml
+++ b/module/Application/view/error/403.phtml
@@ -11,8 +11,8 @@
 <div style="font-size: 21px; font-weight: 200;">
 Résolution possible :
 <ul>
-    <li> vérifiez que vous êtes bien authentifié·e ;</li>
-    <li> vérifiez que vous incarnez un rôle permettant d'accéder à cette page. </li>
+    <li> Vérifiez que vous êtes bien authentifié·e </li>
+    <li> Vérifiez que vous incarnez un rôle permettant d'accéder à cette page </li>
 </ul>
 
 <?php $this->appInfos()->contact->mail; ?>
diff --git a/module/Application/view/layout/ajax.phtml b/module/Application/view/layout/ajax.phtml
index ef20f50e11bfa138cf0731037cdf3005c805b140..121bc79d8c0999f13c162c4fa8c316addf71e2e6 100644
--- a/module/Application/view/layout/ajax.phtml
+++ b/module/Application/view/layout/ajax.phtml
@@ -1,4 +1,3 @@
 <?php
     echo $this->content;
 
-?>
\ No newline at end of file
diff --git a/module/Application/view/layout/flashMessage.phtml b/module/Application/view/layout/flashMessage.phtml
index 61235852909c9e9ceb14e26116ed1c5679f77ff3..8754fdbb3cce7a344862212c66d6e9efa886aecf 100644
--- a/module/Application/view/layout/flashMessage.phtml
+++ b/module/Application/view/layout/flashMessage.phtml
@@ -1,9 +1,9 @@
 <?php
 
-use Application\View\Renderer\PhpRenderer;
 
 /** @var $this PhpRenderer */
 
+use Laminas\View\Renderer\PhpRenderer;
+
 echo $this->messenger()->addCurrentMessagesFromFlashMessengerWithNoNamespace();
 
-?>
diff --git a/module/Carriere/config/merged/niveau.config.php b/module/Carriere/config/merged/niveau.config.php
index 24d32e5d6430a3f372478c55f8601a66d34971d2..984979289ea2e81e3ab0ed2c2894147486da00e2 100644
--- a/module/Carriere/config/merged/niveau.config.php
+++ b/module/Carriere/config/merged/niveau.config.php
@@ -76,27 +76,6 @@ return [
         ],
     ],
 
-//    'navigation'      => [
-//        'default' => [
-//            'home' => [
-//                'pages' => [
-//                    'ressource' => [
-//                        'pages' => [
-//                            'niveau' => [
-//                                'label'    => 'Niveaux de carrière',
-//                                'route'    => 'niveau',
-//                                'resource' => PrivilegeController::getResourceId(NiveauController::class, 'index') ,
-//                                'order'    => 2500,
-//                                'pages' => [],
-//                                'icon' => 'fas fa-angle-right',
-//                            ],
-//                        ],
-//                    ],
-//                ],
-//            ],
-//        ],
-//    ],
-
     'router'          => [
         'routes' => [
             'niveau' => [
diff --git a/module/Carriere/src/Carriere/Entity/Db/Corps.php b/module/Carriere/src/Carriere/Entity/Db/Corps.php
index f20cb4024e820e87c4c3b1d1e093612300e55479..203eb4e894e665f4c7c9be5bee6ef2b06ea81c21 100644
--- a/module/Carriere/src/Carriere/Entity/Db/Corps.php
+++ b/module/Carriere/src/Carriere/Entity/Db/Corps.php
@@ -4,17 +4,18 @@ namespace Carriere\Entity\Db;
 
 use Agent\Entity\Db\AgentGrade;
 use Application\Entity\Db\Interfaces\HasPeriodeInterface;
-use Application\Entity\Db\Traits\DbImportableAwareTrait;
 use Application\Entity\Db\Traits\HasPeriodeTrait;
 use DateTime;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
+use UnicaenSynchro\Entity\Db\IsSynchronisableInterface;
+use UnicaenSynchro\Entity\Db\IsSynchronisableTrait;
 
 /** Elements synchronisés ********************************/
 
-class Corps implements HasPeriodeInterface
+class Corps implements HasPeriodeInterface, IsSynchronisableInterface
 {
-    use DbImportableAwareTrait;
+    use IsSynchronisableTrait;
     use HasPeriodeTrait;
 
     private ?int $id = null;
diff --git a/module/Carriere/src/Carriere/Entity/Db/Correspondance.php b/module/Carriere/src/Carriere/Entity/Db/Correspondance.php
index 818e06b4da4d8df2b340f8da6479f55093a6d11a..f08fb1b0188f6269f51bb5410ae85656c36f9e0a 100644
--- a/module/Carriere/src/Carriere/Entity/Db/Correspondance.php
+++ b/module/Carriere/src/Carriere/Entity/Db/Correspondance.php
@@ -4,17 +4,19 @@ namespace Carriere\Entity\Db;
 
 use Agent\Entity\Db\AgentGrade;
 use Application\Entity\Db\Interfaces\HasPeriodeInterface;
-use Application\Entity\Db\Traits\DbImportableAwareTrait;
 use Application\Entity\Db\Traits\HasPeriodeTrait;
 use DateTime;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
+use UnicaenSynchro\Entity\Db\IsSynchronisableInterface;
+use UnicaenSynchro\Entity\Db\IsSynchronisableTrait;
 
-class Correspondance  implements HasPeriodeInterface {
-    use DbImportableAwareTrait;
+class Correspondance implements HasPeriodeInterface, IsSynchronisableInterface
+{
+    use IsSynchronisableTrait;
     use HasPeriodeTrait;
 
-    private ?int  $id = null;
+    private ?int $id = null;
     private ?string $categorie = null;
     private ?string $libelleCourt = null;
     private ?string $libelleLong = null;
@@ -28,27 +30,27 @@ class Correspondance  implements HasPeriodeInterface {
         $this->agentGrades = new ArrayCollection();
     }
 
-    public function getId() : ?int
+    public function getId(): ?int
     {
         return $this->id;
     }
 
-    public function getCategorie() : ?string
+    public function getCategorie(): ?string
     {
         return $this->categorie;
     }
 
-    public function setCategorie(string $categorie) : void
+    public function setCategorie(string $categorie): void
     {
         $this->categorie = $categorie;
     }
 
-    public function getLibelleCourt() : ?string
+    public function getLibelleCourt(): ?string
     {
         return $this->libelleCourt;
     }
 
-    public function getLibelleLong() : ?string
+    public function getLibelleLong(): ?string
     {
         return $this->libelleLong;
     }
@@ -63,12 +65,12 @@ class Correspondance  implements HasPeriodeInterface {
         $this->type = $type;
     }
 
-    public function getHisto() : ?DateTime
+    public function getHisto(): ?DateTime
     {
         return $this->histo;
     }
 
-    public function setHisto($histo) : void
+    public function setHisto($histo): void
     {
         $this->histo = $histo;
     }
@@ -76,28 +78,28 @@ class Correspondance  implements HasPeriodeInterface {
     /**
      * @return AgentGrade[]
      */
-    public function getAgentGrades() : array
+    public function getAgentGrades(): array
     {
         return $this->agentGrades->toArray();
     }
 
-    public function __toString() : string
+    public function __toString(): string
     {
         return $this->getLibelleCourt();
     }
 
-    public function generateTooltip() : string
+    public function generateTooltip(): string
     {
-        $text  = "Libelle court : <strong>". $this->getLibelleCourt() . "</strong>";
+        $text = "Libelle court : <strong>" . $this->getLibelleCourt() . "</strong>";
         $text .= "<br/>";
-        $text .= "Libelle long : <strong>". $this->getLibelleLong() . "</strong>";
+        $text .= "Libelle long : <strong>" . $this->getLibelleLong() . "</strong>";
         return $text;
     }
 
-    public function isHisto(?DateTime $date = null) : bool
+    public function isHisto(?DateTime $date = null): bool
     {
         if ($date === null) $date = new DateTime();
-        return ($this->histo !== null AND $date < $this->histo);
+        return ($this->histo !== null and $date < $this->histo);
     }
 
 }
\ No newline at end of file
diff --git a/module/Carriere/src/Carriere/Entity/Db/CorrespondanceType.php b/module/Carriere/src/Carriere/Entity/Db/CorrespondanceType.php
index 6a90bcfd79541eb7486da807284b3560405795ba..0185eb6f73660c7825f8155760dfe5c35277b792 100644
--- a/module/Carriere/src/Carriere/Entity/Db/CorrespondanceType.php
+++ b/module/Carriere/src/Carriere/Entity/Db/CorrespondanceType.php
@@ -2,14 +2,16 @@
 
 namespace Carriere\Entity\Db;
 
-use Application\Entity\Db\Traits\DbImportableAwareTrait;
 use Application\Entity\Db\Traits\HasDescriptionTrait;
 use DateTime;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
+use UnicaenSynchro\Entity\Db\IsSynchronisableInterface;
+use UnicaenSynchro\Entity\Db\IsSynchronisableTrait;
 
-class CorrespondanceType  {
-    use DbImportableAwareTrait;
+class CorrespondanceType implements IsSynchronisableInterface
+{
+    use IsSynchronisableTrait;
     use HasDescriptionTrait;
 
     private ?int $id = null;
diff --git a/module/Carriere/src/Carriere/Entity/Db/EmploiType.php b/module/Carriere/src/Carriere/Entity/Db/EmploiType.php
index 3711ceec785cf2177434f7cfb26034f40e50d692..fec7cfb52bc06c2a82e0338dc0c38f7d4714aa7a 100644
--- a/module/Carriere/src/Carriere/Entity/Db/EmploiType.php
+++ b/module/Carriere/src/Carriere/Entity/Db/EmploiType.php
@@ -4,14 +4,15 @@ namespace Carriere\Entity\Db;
 
 use Agent\Entity\Db\AgentGrade;
 use Application\Entity\Db\Interfaces\HasPeriodeInterface;
-use Application\Entity\Db\Traits\DbImportableAwareTrait;
 use Application\Entity\Db\Traits\HasPeriodeTrait;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
+use UnicaenSynchro\Entity\Db\IsSynchronisableInterface;
+use UnicaenSynchro\Entity\Db\IsSynchronisableTrait;
 
-class EmploiType implements HasPeriodeInterface
+class EmploiType implements HasPeriodeInterface, IsSynchronisableInterface
 {
-    use DbImportableAwareTrait;
+    use IsSynchronisableTrait;
     use HasPeriodeTrait;
 
     private ?int $id = null;
@@ -26,22 +27,22 @@ class EmploiType implements HasPeriodeInterface
         $this->agentGrades = new ArrayCollection();
     }
 
-    public function getId() : ?int
+    public function getId(): ?int
     {
         return $this->id;
     }
 
-    public function getCode() : ?string
+    public function getCode(): ?string
     {
         return $this->code;
     }
 
-    public function setCode(?string $code) : void
+    public function setCode(?string $code): void
     {
         $this->code = $code;
     }
 
-    public function getLibelleCourt() : ?string
+    public function getLibelleCourt(): ?string
     {
         return $this->libelleCourt;
     }
@@ -52,23 +53,23 @@ class EmploiType implements HasPeriodeInterface
     }
 
     /** @return AgentGrade[] */
-    public function getAgentGrades() : array
+    public function getAgentGrades(): array
     {
         return $this->agentGrades->toArray();
     }
 
-    public function __toString() : string
+    public function __toString(): string
     {
         return $this->getLibelleCourt();
     }
 
-    public function generateTooltip() : string
+    public function generateTooltip(): string
     {
-        $text  = "Libelle court : <strong>". $this->getLibelleCourt() . "</strong>";
+        $text = "Libelle court : <strong>" . $this->getLibelleCourt() . "</strong>";
         $text .= "<br/>";
-        $text .= "Libelle long : <strong>". $this->getLibelleLong() . "</strong>";
+        $text .= "Libelle long : <strong>" . $this->getLibelleLong() . "</strong>";
         $text .= "<br/>";
-        $text .= "Code : <strong>". $this->getCode() . "</strong>";
+        $text .= "Code : <strong>" . $this->getCode() . "</strong>";
         return $text;
     }
 }
\ No newline at end of file
diff --git a/module/Carriere/src/Carriere/Entity/Db/Grade.php b/module/Carriere/src/Carriere/Entity/Db/Grade.php
index a51942182cc95aa0ebcb064e642c4f5a6aa482ed..695b874646eea18378126bccf4ed33f862f86e3b 100644
--- a/module/Carriere/src/Carriere/Entity/Db/Grade.php
+++ b/module/Carriere/src/Carriere/Entity/Db/Grade.php
@@ -4,14 +4,16 @@ namespace Carriere\Entity\Db;
 
 use Agent\Entity\Db\AgentGrade;
 use Application\Entity\Db\Interfaces\HasPeriodeInterface;
-use Application\Entity\Db\Traits\DbImportableAwareTrait;
 use Application\Entity\Db\Traits\HasPeriodeTrait;
 use DateTime;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
+use UnicaenSynchro\Entity\Db\IsSynchronisableInterface;
+use UnicaenSynchro\Entity\Db\IsSynchronisableTrait;
 
-class Grade  implements HasPeriodeInterface {
-    use DbImportableAwareTrait;
+class Grade implements HasPeriodeInterface, IsSynchronisableInterface
+{
+    use IsSynchronisableTrait;
     use HasPeriodeTrait;
 
     private ?int $id = null;
@@ -26,37 +28,37 @@ class Grade  implements HasPeriodeInterface {
         $this->agentGrades = new ArrayCollection();
     }
 
-    public function getId() : ?int
+    public function getId(): ?int
     {
         return $this->id;
     }
 
-    public function getLibelleCourt() : ?string
+    public function getLibelleCourt(): ?string
     {
         return $this->libelleCourt;
     }
 
-    public function getLibelleLong() : ?string
+    public function getLibelleLong(): ?string
     {
         return $this->libelleLong;
     }
 
-    public function getCode() : ?string
+    public function getCode(): ?string
     {
         return $this->code;
     }
 
-    public function setCode(?string $code) : void
+    public function setCode(?string $code): void
     {
         $this->code = $code;
     }
 
-    public function getHisto() : ?DateTime
+    public function getHisto(): ?DateTime
     {
         return $this->histo;
     }
 
-    public function setHisto(?DateTime $histo) : void
+    public function setHisto(?DateTime $histo): void
     {
         $this->histo = $histo;
     }
@@ -64,23 +66,23 @@ class Grade  implements HasPeriodeInterface {
     /**
      * @return AgentGrade[]
      */
-    public function getAgentGrades() : array
+    public function getAgentGrades(): array
     {
         return $this->agentGrades->toArray();
     }
 
-    public function __toString() : string
+    public function __toString(): string
     {
         return $this->getLibelleCourt();
     }
 
-    public function generateTooltip() : string
+    public function generateTooltip(): string
     {
-        $text  = "Libelle court : <strong>". $this->getLibelleCourt() . "</strong>";
+        $text = "Libelle court : <strong>" . $this->getLibelleCourt() . "</strong>";
         $text .= "<br/>";
-        $text .= "Libelle long : <strong>". $this->getLibelleLong() . "</strong>";
+        $text .= "Libelle long : <strong>" . $this->getLibelleLong() . "</strong>";
         $text .= "<br/>";
-        $text .= "Code : <strong>". $this->getCode() . "</strong>";
+        $text .= "Code : <strong>" . $this->getCode() . "</strong>";
         return $text;
     }
 }
\ No newline at end of file
diff --git a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Categorie.dcm.xml b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Categorie.dcm.xml
index eb4bddb97bdc23a5fe76adae7569767d1024776b..8e03219ac08e594afa90ec62e4cdaf57917b68cc 100644
--- a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Categorie.dcm.xml
+++ b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Categorie.dcm.xml
@@ -1,26 +1,28 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Carriere\Entity\Db\Categorie" table="carriere_categorie">
 
         <id name="id" type="integer" column="id">
             <generator strategy="IDENTITY"/>
         </id>
 
-        <field name="code"          type="string"  length="255"                column="code"        nullable="false"/>
-        <field name="libelle"       type="string"  length="1024"               column="libelle"     nullable="false"/>
+        <field name="code" length="255" column="code" />
+        <field name="libelle" length="1024" column="libelle" />
         <one-to-many field="metiers" target-entity="Metier\Entity\Db\Metier" mapped-by="categorie"/>
 
         <!-- HISTORISATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-        <field name="histoCreation"     type="datetime"                 column="histo_creation"     nullable="false"/>
-        <field name="histoModification" type="datetime"                 column="histo_modification" nullable="false"/>
-        <field name="histoDestruction"  type="datetime"                 column="histo_destruction"  nullable="true"/>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoCreateur">
+        <field name="histoCreation" type="datetime" column="histo_creation" />
+        <field name="histoModification" type="datetime" column="histo_modification" />
+        <field name="histoDestruction" type="datetime" column="histo_destruction" nullable="true"/>
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoCreateur">
             <join-column name="histo_createur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoModificateur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoModificateur">
             <join-column name="histo_modificateur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoDestructeur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoDestructeur">
             <join-column name="histo_destructeur_id" referenced-column-name="ID"/>
         </many-to-one>
 
diff --git a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Corps.dcm.xml b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Corps.dcm.xml
index 0c96090befb54bb7e4d344a25cacb0c3dffb11aa..8cc05bf25f5609705a6bad8b3be8d0f2e85c12f0 100644
--- a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Corps.dcm.xml
+++ b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Corps.dcm.xml
@@ -1,28 +1,31 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Carriere\Entity\Db\Corps" table="carriere_corps">
 
-        <id name="id"               column="id"             type="integer">
+        <id name="id" column="id" type="integer">
         </id>
 
-        <field name="libelleCourt"  column="lib_court"      type="string"       length="20"  />
-        <field name="libelleLong"   column="lib_long"       type="string"       length="200" />
-        <field name="code"          column="code"           type="string"       length="10"  />
-        <field name="categorie"     column="categorie"      type="string"       length="10"  />
-        <field name="dateDebut"     column="d_ouverture"    type="datetime"  />
-        <field name="dateFin"       column="d_fermeture"    type="datetime"  />
+        <field name="libelleCourt" column="lib_court" length="20"/>
+        <field name="libelleLong" column="lib_long" length="200"/>
+        <field name="code" column="code" length="10"/>
+        <field name="categorie" column="categorie" length="10"/>
+        <field name="dateDebut" column="d_ouverture" type="datetime"/>
+        <field name="dateFin" column="d_fermeture" type="datetime"/>
 
-        <field name="superieurAsAutorite"       column="superieur_as_autorite"    type="boolean"  />
+        <field name="superieurAsAutorite" column="superieur_as_autorite" type="boolean"/>
 
-        <many-to-one target-entity="Carriere\Entity\Db\NiveauEnveloppe"  field="niveaux">
-            <join-column name="niveaux_id" referenced-column-name="id"/>
+        <many-to-one target-entity="Carriere\Entity\Db\NiveauEnveloppe" field="niveaux">
+            <join-column name="niveaux_id" />
         </many-to-one>
 
         <one-to-many field="agentGrades" target-entity="Agent\Entity\Db\AgentGrade" mapped-by="corps"/>
 
         <!-- DB IMPORT #############################  -->
-        <field name="created_on"               column="created_on"       type="datetime"/>
-        <field name="updated_on"               column="updated_on"       type="datetime"/>
-        <field name="deleted_on"               column="deleted_on"       type="datetime"/>
+        <field name="createdOn" column="created_on" type="datetime"/>
+        <field name="updatedOn" column="updated_on" type="datetime"/>
+        <field name="deletedOn" column="deleted_on" type="datetime"/>
+        <field name="sourceId" column="source_id" length="128"/>
     </entity>
 </doctrine-mapping>
diff --git a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Correspondance.dcm.xml b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Correspondance.dcm.xml
index 7a0b50444bfa369b141c86be192f43cab94bbc6d..8b3b756fa6bef9c7eba01793cfdfd9f76bc6f6a7 100644
--- a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Correspondance.dcm.xml
+++ b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Correspondance.dcm.xml
@@ -5,22 +5,23 @@
         <id name="id"               column="id"             type="integer">
         </id>
 
-        <field name="categorie"     column="c_bap"          type="string"       length="10"   />
-        <field name="libelleCourt"  column="lib_court"      type="string"       length="20"   />
-        <field name="libelleLong"   column="lib_long"       type="string"       length="200"  />
+        <field name="categorie"     column="c_bap"                 length="10"   />
+        <field name="libelleCourt"  column="lib_court"             length="20"   />
+        <field name="libelleLong"   column="lib_long"              length="200"  />
         <field name="dateDebut"     column="d_ouverture"    type="datetime"  />
         <field name="dateFin"       column="d_fermeture"    type="datetime"  />
 
         <many-to-one target-entity="Carriere\Entity\Db\CorrespondanceType"  field="type">
-            <join-column name="type_id" referenced-column-name="id"/>
+            <join-column name="type_id"/>
         </many-to-one>
 
         <one-to-many field="agentGrades" target-entity="Agent\Entity\Db\AgentGrade" mapped-by="correspondance"/>
 
         <!-- DB IMPORT #############################  -->
-        <field name="created_on"               column="created_on"       type="datetime"/>
-        <field name="updated_on"               column="updated_on"       type="datetime"/>
-        <field name="deleted_on"               column="deleted_on"       type="datetime"/>
+        <field name="createdOn"               column="created_on"       type="datetime"/>
+        <field name="updatedOn"               column="updated_on"       type="datetime"/>
+        <field name="deletedOn"               column="deleted_on"       type="datetime"/>
+        <field name="sourceId"                 column="source_id"        length="128"/>
 
     </entity>
 </doctrine-mapping>
diff --git a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.CorrespondanceType.dcm.xml b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.CorrespondanceType.dcm.xml
index 3b20ceba531a8ab52c426058d3e9e6d18d634dd4..f8153a6047496aaecc707d53fa0332612942dca6 100644
--- a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.CorrespondanceType.dcm.xml
+++ b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.CorrespondanceType.dcm.xml
@@ -1,23 +1,25 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Carriere\Entity\Db\CorrespondanceType" table="carriere_correspondance_type">
 
-        <id name="id"               column="id"             type="integer">
+        <id name="id" column="id" type="integer">
         </id>
 
-        <field name="code"          column="code"           type="string"       length="64"   />
-        <field name="libelleCourt"  column="libelle_court"  type="string"       length="256"   />
-        <field name="libelleLong"   column="libelle_long"   type="string"       length="1024"  />
-        <field name="description"   column="description"    type="string"       length="9999"  />
-        <field name="dateOuverture" column="d_ouverture"    type="datetime"  />
-        <field name="dateFermeture" column="d_fermeture"    type="datetime"  />
+        <field name="code" column="code" length="64"/>
+        <field name="libelleCourt" column="libelle_court" length="256"/>
+        <field name="libelleLong" column="libelle_long" length="1024"/>
+        <field name="description" column="description" length="9999"/>
+        <field name="dateOuverture" column="d_ouverture" type="datetime"/>
+        <field name="dateFermeture" column="d_fermeture" type="datetime"/>
 
         <one-to-many field="correspondances" target-entity="Carriere\Entity\Db\Correspondance" mapped-by="type"/>
 
         <!-- DB IMPORT #############################  -->
-        <field name="created_on"               column="created_on"       type="datetime"/>
-        <field name="updated_on"               column="updated_on"       type="datetime"/>
-        <field name="deleted_on"               column="deleted_on"       type="datetime"/>
-
+        <field name="createdOn" column="created_on" type="datetime"/>
+        <field name="updatedOn" column="updated_on" type="datetime"/>
+        <field name="deletedOn" column="deleted_on" type="datetime"/>
+        <field name="sourceId" column="source_id" length="128"/>
     </entity>
 </doctrine-mapping>
diff --git a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.EmploiType.dcm.xml b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.EmploiType.dcm.xml
index 2a05ec26b13aa62ed1d79d4c341d8383de9adbc5..70c2e3a585a2a94e44fc615b5b0e016e4c725202 100644
--- a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.EmploiType.dcm.xml
+++ b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.EmploiType.dcm.xml
@@ -1,21 +1,24 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Carriere\Entity\Db\EmploiType" table="carriere_emploitype">
 
-        <id name="id"               column="id"             type="integer">
+        <id name="id" column="id" type="integer">
         </id>
 
-        <field name="libelleCourt"  column="libelle_court"      type="string"       length="20"  />
-        <field name="libelleLong"   column="libelle_long"       type="string"       length="200" />
-        <field name="code"          column="code"           type="string"       length="10"  />
-        <field name="dateDebut"     column="date_debut"    type="datetime"  />
-        <field name="dateFin"       column="date_fin"    type="datetime"  />
+        <field name="libelleCourt" column="libelle_court" length="20"/>
+        <field name="libelleLong" column="libelle_long" length="200"/>
+        <field name="code" column="code" length="10"/>
+        <field name="dateDebut" column="date_debut" type="datetime"/>
+        <field name="dateFin" column="date_fin" type="datetime"/>
 
         <one-to-many field="agentGrades" target-entity="Agent\Entity\Db\AgentGrade" mapped-by="emploiType"/>
 
         <!-- DB IMPORT #############################  -->
-        <field name="created_on"               column="created_on"       type="datetime"/>
-        <field name="updated_on"               column="updated_on"       type="datetime"/>
-        <field name="deleted_on"               column="deleted_on"       type="datetime"/>
+        <field name="createdOn" column="created_on" type="datetime"/>
+        <field name="updatedOn" column="updated_on" type="datetime"/>
+        <field name="deletedOn" column="deleted_on" type="datetime"/>
+        <field name="sourceId" column="source_id" length="128"/>
     </entity>
 </doctrine-mapping>
diff --git a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Grade.dcm.xml b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Grade.dcm.xml
index ad9714932811c2028a16bc877666d45e291f1d8b..95c624ca6dca2406f33d96cab5fcdd30364218dc 100644
--- a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Grade.dcm.xml
+++ b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Grade.dcm.xml
@@ -1,21 +1,24 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Carriere\Entity\Db\Grade" table="carriere_grade">
 
-        <id name="id"               column="id"             type="integer">
+        <id name="id" column="id" type="integer">
         </id>
 
-        <field name="libelleCourt"  column="lib_court"      type="string"       length="20"   />
-        <field name="libelleLong"   column="lib_long"       type="string"       length="200"  />
-        <field name="code"          column="code"           type="string"       length="10"   />
-        <field name="dateDebut"     column="d_ouverture"    type="datetime"  />
-        <field name="dateFin"       column="d_fermeture"    type="datetime"  />
+        <field name="libelleCourt" column="lib_court" length="20"/>
+        <field name="libelleLong" column="lib_long" length="200"/>
+        <field name="code" column="code" length="10"/>
+        <field name="dateDebut" column="d_ouverture" type="datetime"/>
+        <field name="dateFin" column="d_fermeture" type="datetime"/>
 
         <one-to-many field="agentGrades" target-entity="Agent\Entity\Db\AgentGrade" mapped-by="grade"/>
 
         <!-- DB IMPORT #############################  -->
-        <field name="created_on"               column="created_on"       type="datetime"/>
-        <field name="updated_on"               column="updated_on"       type="datetime"/>
-        <field name="deleted_on"               column="deleted_on"       type="datetime"/>
+        <field name="createdOn" column="created_on" type="datetime"/>
+        <field name="updatedOn" column="updated_on" type="datetime"/>
+        <field name="deletedOn" column="deleted_on" type="datetime"/>
+        <field name="sourceId" column="source_id" length="128"/>
     </entity>
 </doctrine-mapping>
diff --git a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Niveau.dcm.xml b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Niveau.dcm.xml
index 1f528f3aab5bd96f98277602c4a85202e6b43414..a0c203a930a256ddee73a1d1d336333bc1a71bb0 100644
--- a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Niveau.dcm.xml
+++ b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.Niveau.dcm.xml
@@ -1,27 +1,29 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Carriere\Entity\Db\Niveau" table="carriere_niveau">
 
         <id name="id" type="integer" column="id">
             <generator strategy="IDENTITY"/>
         </id>
 
-        <field name="niveau"      type="integer"                 column="niveau"      nullable="false"/>
-        <field name="etiquette"   type="string" length="64"      column="label"       nullable="false"/>
-        <field name="libelle"     type="string" length="1024"    column="libelle"     nullable="false"/>
-        <field name="description" type="string" length="9999"    column="description" nullable="true"/>
+        <field name="niveau" type="integer" column="niveau" />
+        <field name="etiquette" length="64" column="label" />
+        <field name="libelle" length="1024" column="libelle" />
+        <field name="description" length="9999" column="description" nullable="true"/>
 
         <!-- HISTORISATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-        <field name="histoCreation"     type="datetime"                 column="histo_creation"     nullable="false"/>
-        <field name="histoModification" type="datetime"                 column="histo_modification" nullable="false"/>
-        <field name="histoDestruction"  type="datetime"                 column="histo_destruction"  nullable="true"/>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoCreateur">
+        <field name="histoCreation" type="datetime" column="histo_creation" />
+        <field name="histoModification" type="datetime" column="histo_modification" />
+        <field name="histoDestruction" type="datetime" column="histo_destruction" nullable="true"/>
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoCreateur">
             <join-column name="histo_createur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoModificateur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoModificateur">
             <join-column name="histo_modificateur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoDestructeur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoDestructeur">
             <join-column name="histo_destructeur_id" referenced-column-name="ID"/>
         </many-to-one>
 
diff --git a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.NiveauEnveloppe.dcm.xml b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.NiveauEnveloppe.dcm.xml
index b159b324e4d8fcdcb9ea22dd57a0f87585cfaee0..8bdc3115fcac4d057a96d73557bf5745849f2ee0 100644
--- a/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.NiveauEnveloppe.dcm.xml
+++ b/module/Carriere/src/Carriere/Entity/Db/Mapping/Carriere.Entity.Db.NiveauEnveloppe.dcm.xml
@@ -1,33 +1,35 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Carriere\Entity\Db\NiveauEnveloppe" table="carriere_niveau_enveloppe">
 
         <id name="id" type="integer" column="id">
             <generator strategy="IDENTITY"/>
         </id>
 
-        <many-to-one target-entity="Carriere\Entity\Db\Niveau"  field="borneInferieure">
-            <join-column name="borne_inferieure_id" referenced-column-name="id"/>
+        <many-to-one target-entity="Carriere\Entity\Db\Niveau" field="borneInferieure">
+            <join-column name="borne_inferieure_id"/>
         </many-to-one>
-        <many-to-one target-entity="Carriere\Entity\Db\Niveau"  field="borneSuperieure">
-            <join-column name="borne_superieure_id" referenced-column-name="id"/>
+        <many-to-one target-entity="Carriere\Entity\Db\Niveau" field="borneSuperieure">
+            <join-column name="borne_superieure_id"/>
         </many-to-one>
-        <many-to-one target-entity="Carriere\Entity\Db\Niveau"  field="valeurRecommandee">
-            <join-column name="valeur_recommandee_id" referenced-column-name="id"/>
+        <many-to-one target-entity="Carriere\Entity\Db\Niveau" field="valeurRecommandee">
+            <join-column name="valeur_recommandee_id"/>
         </many-to-one>
-        <field name="description"       type="string"   length="9999"     column="description"            nullable="true"  />
+        <field name="description" length="9999" column="description" nullable="true"/>
 
         <!-- HISTORISATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-        <field name="histoCreation"     type="datetime"                 column="histo_creation"     nullable="false"/>
-        <field name="histoModification" type="datetime"                 column="histo_modification" nullable="false"/>
-        <field name="histoDestruction"  type="datetime"                 column="histo_destruction"  nullable="true"/>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoCreateur">
+        <field name="histoCreation" type="datetime" column="histo_creation"/>
+        <field name="histoModification" type="datetime" column="histo_modification"/>
+        <field name="histoDestruction" type="datetime" column="histo_destruction" nullable="true"/>
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoCreateur">
             <join-column name="histo_createur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoModificateur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoModificateur">
             <join-column name="histo_modificateur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoDestructeur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoDestructeur">
             <join-column name="histo_destructeur_id" referenced-column-name="ID"/>
         </many-to-one>
     </entity>
diff --git a/module/Carriere/src/Carriere/Service/Corps/CorpsService.php b/module/Carriere/src/Carriere/Service/Corps/CorpsService.php
index b5e18e947324546963a073ec9f26a4155a8a0c60..cf7b6ad3f1fff82ecfbb21df1083a5d428da27b6 100644
--- a/module/Carriere/src/Carriere/Service/Corps/CorpsService.php
+++ b/module/Carriere/src/Carriere/Service/Corps/CorpsService.php
@@ -28,7 +28,7 @@ class CorpsService
     public function createQueryBuilder(): QueryBuilder
     {
         $qb = $this->getObjectManager()->getRepository(Corps::class)->createQueryBuilder('corps')
-            ->andWhere('corps.deleted_on IS NULL');
+            ->andWhere('corps.deletedOn IS NULL');
         return $qb;
     }
 
@@ -41,8 +41,8 @@ class CorpsService
         if ($avecAgent) {
             $qb = $qb->addSelect('agentGrade')->join('corps.agentGrades', 'agentGrade')
                 ->addSelect('agent')->join('agentGrade.agent', 'agent')
-                ->andWhere('agent.deleted_on IS NULL')
-                ->andWhere('agentGrade.deleted_on IS NULL');
+                ->andWhere('agent.deletedOn IS NULL')
+                ->andWhere('agentgrade.deletedOn IS NULL');
             $qb = AgentGrade::decorateWithActif($qb, 'agentGrade');
         }
 
@@ -63,7 +63,7 @@ class CorpsService
         if ($avecAgent) {
             $qb = $qb->addSelect('agentGrade')->join('corps.agentGrades', 'agentGrade')
                 ->addSelect('agent')->join('agentGrade.agent', 'agent')
-                ->andWhere('agent.deleted_on IS NULL');
+                ->andWhere('agent.deletedOn IS NULL');
         }
 
         try {
diff --git a/module/Carriere/src/Carriere/Service/Correspondance/CorrespondanceService.php b/module/Carriere/src/Carriere/Service/Correspondance/CorrespondanceService.php
index dd35576ff8ffd5040513e7c3d9789dbf8b6e452d..00f7d53f894461bba2311ba5ac0bfc4a0eb11a6c 100644
--- a/module/Carriere/src/Carriere/Service/Correspondance/CorrespondanceService.php
+++ b/module/Carriere/src/Carriere/Service/Correspondance/CorrespondanceService.php
@@ -25,7 +25,7 @@ class CorrespondanceService {
     {
         $qb = $this->getObjectManager()->getRepository(Correspondance::class)->createQueryBuilder('correspondance')
             ->leftJoin('correspondance.type', 'ctype')->addSelect('ctype')
-            ->andWhere('correspondance.deleted_on IS NULL');
+            ->andWhere('correspondance.deletedOn IS NULL');
         return $qb;
     }
 
@@ -39,9 +39,9 @@ class CorrespondanceService {
         if ($avecAgent) {
             $qb = $qb
                 ->addSelect('agentGrade')->join('correspondance.agentGrades', 'agentGrade')
-                ->andWhere('agentGrade.deleted_on IS NULL')
+                ->andWhere('agentgrade.deletedOn IS NULL')
                 ->addSelect('agent')->join('agentGrade.agent','agent')
-                ->andWhere('agent.deleted_on IS NULL')
+                ->andWhere('agent.deletedOn IS NULL')
             ;
             $qb = AgentGrade::decorateWithActif($qb, 'agentGrade');
         }
@@ -74,7 +74,7 @@ class CorrespondanceService {
         if ($avecAgent) {
             $qb = $qb->addSelect('agentGrade')->join('correspondance.agentGrades', 'agentGrade')
                 ->addSelect('agent')->join('agentGrade.agent','agent')
-                ->andWhere('agent.deleted_on IS NULL')
+                ->andWhere('agent.deletedOn IS NULL')
             ;
         }
 
diff --git a/module/Carriere/src/Carriere/Service/EmploiType/EmploiTypeService.php b/module/Carriere/src/Carriere/Service/EmploiType/EmploiTypeService.php
index 66e5509bacb81a3f41a1e671edb056278a4f41a0..2f52cbecf31a5a07ba023edf6823fc6e49620f97 100644
--- a/module/Carriere/src/Carriere/Service/EmploiType/EmploiTypeService.php
+++ b/module/Carriere/src/Carriere/Service/EmploiType/EmploiTypeService.php
@@ -28,7 +28,7 @@ class EmploiTypeService
     public function createQueryBuilder(): QueryBuilder
     {
         $qb = $this->getObjectManager()->getRepository(EmploiType::class)->createQueryBuilder('emploitype')
-            ->andWhere('emploitype.deleted_on IS NULL');
+            ->andWhere('emploitype.deletedOn IS NULL');
         return $qb;
     }
 
@@ -41,8 +41,8 @@ class EmploiTypeService
         if ($avecAgent) {
             $qb = $qb->addSelect('agentGrade')->join('emploitype.agentGrades', 'agentGrade')
                 ->addSelect('agent')->join('agentGrade.agent', 'agent')
-                ->andWhere('agent.deleted_on IS NULL')
-                ->andWhere('agentGrade.deleted_on IS NULL');
+                ->andWhere('agent.deletedOn IS NULL')
+                ->andWhere('agentgrade.deletedOn IS NULL');
             $qb = AgentGrade::decorateWithActif($qb, 'agentGrade');
         }
 
@@ -63,7 +63,7 @@ class EmploiTypeService
         if ($avecAgent) {
             $qb = $qb->addSelect('agentGrade')->join('emploitype.agentGrades', 'agentGrade')
                 ->addSelect('agent')->join('agentGrade.agent', 'agent')
-                ->andWhere('agent.deleted_on IS NULL');
+                ->andWhere('agent.deletedOn IS NULL');
         }
 
         try {
diff --git a/module/Carriere/src/Carriere/Service/Grade/GradeService.php b/module/Carriere/src/Carriere/Service/Grade/GradeService.php
index 5c1837d17497474132f143274356218d2b70f6a4..d59007b935fd9f931e6714724c16a07dd5d29138 100644
--- a/module/Carriere/src/Carriere/Service/Grade/GradeService.php
+++ b/module/Carriere/src/Carriere/Service/Grade/GradeService.php
@@ -21,7 +21,7 @@ class GradeService
     public function createQueryBuilder(): QueryBuilder
     {
         $qb = $this->getObjectManager()->getRepository(Grade::class)->createQueryBuilder('grade')
-            ->andWhere('grade.deleted_on IS NULL');
+            ->andWhere('grade.deletedOn IS NULL');
         return $qb;
     }
 
@@ -30,8 +30,8 @@ class GradeService
         $qb = $qb
             ->join('grade.agentGrades', 'agentGrade')->addSelect('agentGrade')
             ->join('agentGrade.agent', 'agent')->addSelect('agent')
-            ->andWhere('agent.deleted_on IS NULL')
-            ->andWhere('agentGrade.deleted_on IS NULL');
+            ->andWhere('agent.deletedOn IS NULL')
+            ->andWhere('agentgrade.deletedOn IS NULL');
         return $qb;
     }
 
diff --git a/module/Carriere/view/carriere/corps/afficher-agents.phtml b/module/Carriere/view/carriere/corps/afficher-agents.phtml
index e1695e4780d4f3e9d3bdc474c295e19e7fd1dcfc..0c7a239958638c836aa640ba7d0636995169cb30 100644
--- a/module/Carriere/view/carriere/corps/afficher-agents.phtml
+++ b/module/Carriere/view/carriere/corps/afficher-agents.phtml
@@ -3,10 +3,11 @@
 /**
  * @see \Carriere\Controller\CorpsController::afficherAgentsAvecCorpsAction();
  * @var Corps $corps
- * @var \Agent\Entity\Db\AgentGrade[] $agentGrades
- * @var \Agent\Entity\Db\Agent[] $agents
+ * @var AgentGrade[] $agentGrades
+ * @var Agent[] $agents
  */
 
+use Agent\Entity\Db\Agent;
 use Agent\Entity\Db\AgentGrade;
 use Agent\Provider\Privilege\AgentPrivileges;
 use Carriere\Entity\Db\Corps;
diff --git a/module/DemandeExterne/config/merged/demande-externe.config.php b/module/DemandeExterne/config/merged/demande-externe.config.php
index 757c7bdbd38ac6961ea3b87975721636de8d6fba..2e99395370aa0918a316cd7c0b87b932cf22f550 100644
--- a/module/DemandeExterne/config/merged/demande-externe.config.php
+++ b/module/DemandeExterne/config/merged/demande-externe.config.php
@@ -13,6 +13,9 @@ use DemandeExterne\Form\DemandeExterne\DemandeExterneFormFactory;
 use DemandeExterne\Provider\Privilege\DemandeexternePrivileges;
 use DemandeExterne\Service\DemandeExterne\DemandeExterneService;
 use DemandeExterne\Service\DemandeExterne\DemandeExterneServiceFactory;
+use DemandeExterne\View\Helper\DemandeExterneArrayViewHelper;
+use DemandeExterne\View\Helper\DemandeExterneArrayViewHelperFactory;
+use DemandeExterne\View\Helper\DemandeExterneViewHelper;
 use Laminas\Router\Http\Literal;
 use Laminas\Router\Http\Segment;
 use UnicaenPrivilege\Guard\PrivilegeController;
@@ -36,8 +39,11 @@ return [
                             DemandeexternePrivileges::DEMANDEEXTERNE_HISTORISER,
                             DemandeexternePrivileges::DEMANDEEXTERNE_SUPPRIMER,
                             DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_AGENT,
+                            DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_VALIDEUR,
+                            DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_GESTIONNAIRE,
                             DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_RESPONSABLE,
                             DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DRH,
+                            DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DGS,
                             DemandeexternePrivileges::DEMANDEEXTERNE_GERER,
                         ],
                         'resources' => ['DemandeExterne'],
@@ -52,6 +58,7 @@ return [
                     'controller' => DemandeExterneController::class,
                     'action' => [
                         'index',
+                        'index-transformation',
                         'rechercher-agent',
                         'rechercher-organisme',
                     ],
@@ -135,6 +142,26 @@ return [
                     ],
                     'assertion' => DemandeExterneAssertion::class
                 ],
+                [
+                    'controller' => DemandeExterneController::class,
+                    'action' => [
+                        'parapheur',
+                    ],
+                    'privileges' => [
+                        DemandeexternePrivileges::DEMANDEEXTERNE_PARAPHEUR
+                    ],
+                ],
+                [
+                    'controller' => DemandeExterneController::class,
+                    'action' => [
+                        'valider-valideur',
+                        'refuser-valideur',
+                    ],
+                    'privileges' => [
+                        DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_VALIDEUR
+                    ],
+                    'assertion' => DemandeExterneAssertion::class
+                ],
                 [
                     'controller' => DemandeExterneController::class,
                     'action' => [
@@ -149,7 +176,6 @@ return [
                 [
                     'controller' => DemandeExterneController::class,
                     'action' => [
-                        'parapheur',
                         'valider-drh',
                         'refuser-drh',
                     ],
@@ -158,6 +184,17 @@ return [
                     ],
                     'assertion' => DemandeExterneAssertion::class
                 ],
+                [
+                    'controller' => DemandeExterneController::class,
+                    'action' => [
+                        'valider-dgs',
+                        'refuser-dgs',
+                    ],
+                    'privileges' => [
+                        DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DGS
+                    ],
+                    'assertion' => DemandeExterneAssertion::class
+                ],
                 [
                     'controller' => DemandeExterneController::class,
                     'action' => [
@@ -172,7 +209,6 @@ return [
                 [
                     'controller' => DemandeExterneController::class,
                     'action' => [
-                        'envoyer-parapheur',
                         'gerer',
                     ],
                     'privileges' => [
@@ -205,6 +241,13 @@ return [
                                 'order' => 2100,
                                 'icon' => 'fas fa-angle-right',
                             ],
+                            'demande-externe-transformation' => [
+                                'label' => 'Demandes à tranformer',
+                                'route' => 'demande-externe/index-transformation',
+                                'resource' => PrivilegeController::getResourceId(DemandeExterneController::class, 'index-transformation'),
+                                'order' => 2110,
+                                'icon' => 'fas fa-angle-right',
+                            ],
                             'demande-externe-parapheur' => [
                                 'label' => 'Parapheur des demandes',
                                 'route' => 'demande-externe/parapheur',
@@ -234,13 +277,13 @@ return [
                 ],
                 'may_terminate' => true,
                 'child_routes' => [
-                    'envoyer-parapheur' => [
-                        'type' => Segment::class,
+                    'index-transformation' => [
+                        'type' => Literal::class,
                         'options' => [
-                            'route' => '/envoyer-parapheur/:demande-externe',
+                            'route' => '/index-transformation',
                             'defaults' => [
-                                /** @see DemandeExterneController::envoyerParapheurAction() */
-                                'action' => 'envoyer-parapheur'
+                                /** @see DemandeExterneController::indexTransformationAction() */
+                                'action' => 'index-transformation'
                             ],
                         ],
                     ],
@@ -249,6 +292,7 @@ return [
                         'options' => [
                             'route' => '/parapheur',
                             'defaults' => [
+                                /** @see DemandeExterneController::parapheurAction() */
                                 'action' => 'parapheur'
                             ],
                         ],
@@ -381,12 +425,32 @@ return [
                             ],
                         ],
                     ],
+                    'valider-valideur' => [
+                        'type' => Segment::class,
+                        'options' => [
+                            'route' => '/valider-valideur/:demande-externe',
+                            'defaults' => [
+                                /** @see DemandeExterneController::validerValideurAction() */
+                                'action' => 'valider-valideur'
+                            ],
+                        ],
+                    ],
+                    'refuser-valideur' => [
+                        'type' => Segment::class,
+                        'options' => [
+                            'route' => '/refuser-valideur/:demande-externe',
+                            'defaults' => [
+                                /** @see DemandeExterneController::refuserValideurAction() */
+                                'action' => 'refuser-valideur'
+                            ],
+                        ],
+                    ],
                     'valider-responsable' => [
                         'type' => Segment::class,
                         'options' => [
                             'route' => '/valider-responsable/:demande-externe',
                             'defaults' => [
-                                'controller' => DemandeExterneController::class,
+                                /** @see DemandeExterneController::validerResponsableAction() */
                                 'action' => 'valider-responsable'
                             ],
                         ],
@@ -396,7 +460,7 @@ return [
                         'options' => [
                             'route' => '/refuser-responsable/:demande-externe',
                             'defaults' => [
-                                'controller' => DemandeExterneController::class,
+                                /** @see DemandeExterneController::refuserResponsableAction() */
                                 'action' => 'refuser-responsable'
                             ],
                         ],
@@ -421,6 +485,26 @@ return [
                             ],
                         ],
                     ],
+                    'valider-dgs' => [
+                        'type' => Segment::class,
+                        'options' => [
+                            'route' => '/valider-dgs/:demande-externe',
+                            'defaults' => [
+                                /** @see DemandeExterneController::validerDgsAction() **/
+                                'action' => 'valider-dgs'
+                            ],
+                        ],
+                    ],
+                    'refuser-dgs' => [
+                        'type' => Segment::class,
+                        'options' => [
+                            'route' => '/refuser-dgs/:demande-externe',
+                            'defaults' => [
+                                /** @see DemandeExterneController::refuserDgs() **/
+                                'action' => 'refuser-dgs'
+                            ],
+                        ],
+                    ],
                     'valider-gestionnaire' => [
                         'type' => Segment::class,
                         'options' => [
@@ -499,11 +583,15 @@ return [
     ],
     'view_helpers' => [
         'invokables' => [
+            'demandeExterne' => DemandeExterneViewHelper::class,
+
         ],
         'factories' => [
+            DemandeExterneArrayViewHelper::class => DemandeExterneArrayViewHelperFactory::class,
         ],
         'aliases' => [
+            'demandeExterneArray' => DemandeExterneArrayViewHelper::class,
         ],
-    ]
+    ],
 
 ];
\ No newline at end of file
diff --git a/module/DemandeExterne/config/module.config.php b/module/DemandeExterne/config/module.config.php
index e39a39e6f76e560e28aada31568548d235da6c1a..990f43de085fd33f0354c2b46f1bb53fd041119a 100755
--- a/module/DemandeExterne/config/module.config.php
+++ b/module/DemandeExterne/config/module.config.php
@@ -4,6 +4,8 @@ namespace DemandeExterne;
 
 use DemandeExterne\Service\Notification\NotificationService;
 use DemandeExterne\Service\Notification\NotificationServiceFactory;
+use DemandeExterne\Service\Url\UrlService;
+use DemandeExterne\Service\Url\UrlServiceFactory;
 use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
 use Doctrine\ORM\Mapping\Driver\XmlDriver;
 use UnicaenPrivilege\Guard\PrivilegeController;
@@ -39,30 +41,10 @@ return [
         ],
     ],
 
-//    'navigation' => [
-//        'default' => [
-//            'home' => [
-//                'pages' => [
-//                    'gestion' => [
-//                        'pages' => [
-//                            'agent' => [
-//                                'label' => 'Agent·es',
-//                                'title' => "Suivi par agent·e",
-//                                'route' => 'agent',
-//                                'resource' => PrivilegeController::getResourceId(AgentController::class, 'index'),
-//                                'order'    => 2100,
-//                                'icon' => 'fas fa-angle-right',
-//                            ]
-//                        ],
-//                    ],
-//                ],
-//            ],
-//        ],
-//    ],
-
     'service_manager' => [
         'factories' => [
             NotificationService::class => NotificationServiceFactory::class,
+            UrlService::class => UrlServiceFactory::class,
         ],
     ],
     'controllers'     => [
diff --git a/module/DemandeExterne/src/Assertion/DemandeExterneAssertion.php b/module/DemandeExterne/src/Assertion/DemandeExterneAssertion.php
index 8b10f5ab3e27712405cb29fdb7db1c18121bcdc1..346ef17f1711fb49faeda57715088fce6fa200bd 100644
--- a/module/DemandeExterne/src/Assertion/DemandeExterneAssertion.php
+++ b/module/DemandeExterne/src/Assertion/DemandeExterneAssertion.php
@@ -3,8 +3,10 @@
 namespace DemandeExterne\Assertion;
 
 use Agent\Entity\Db\Agent;
+use Agent\Entity\Db\AgentValidateur;
 use Agent\Service\Agent\AgentServiceAwareTrait;
 use Agent\Service\AgentValidateur\AgentValidateurServiceAwareTrait;
+use Agent\Provider\Role\RolesProvider as AgentRoleProvider;
 use Application\Provider\Role\RoleProvider as AppRoleProvider;
 use DemandeExterne\Entity\Db\DemandeExterne;
 use DemandeExterne\Provider\Etat\DemandeExterneEtats;
@@ -72,19 +74,36 @@ class DemandeExterneAssertion extends AbstractAssertion
         switch ($role->getRoleId()) {
             case AppRoleProvider::ADMIN_TECH :
             case AppRoleProvider::ADMIN_FONC :
-            case AppRoleProvider::DRH :
-            case FormationRoles::GESTIONNAIRE_FORMATION :
             case FormationRoles::RESPONSABLE_FORMATION :
                 return true;
-            case AppRoleProvider::AGENT :
+            case AgentRoleProvider::ROLE_AGENT :
                 if ($privilege === DemandeexternePrivileges::DEMANDEEXTERNE_MODIFIER and !$demande->isEtatActif(DemandeExterneEtats::ETAT_CREATION_EN_COURS)) return false;
                 return $agent->getUtilisateur() === $user;
-//            case Agent::ROLE_SUPERIEURE :
-//                if ($privilege === DemandeexternePrivileges::DEMANDEEXTERNE_MODIFIER AND !$demande->isEtatActif(DemandeExterneEtats::ETAT_CREATION_EN_COURS)) return false;
-//                $superieurs = array_map(function (AgentSuperieur $a) { return $a->getSuperieur(); }, $this->getAgentSuperieurService()->getAgentsSuperieursByAgent($agent));
-//                return DemandeExterneAssertion::userInAgents($user, $superieurs);
+            case AgentRoleProvider::ROLE_VALIDATEUR :
+                $valideurs = array_map(function (AgentValidateur $a) { return $a->getValidateur(); }, $this->getAgentValidateurService()->getAgentsValidateursByAgent($agent));
+                $isValideur = DemandeExterneAssertion::userInAgents($user, $valideurs);
+                return match ($privilege) {
+                    DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_VALIDEUR => $isValideur and ($demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_AGENT)),
+                    default => $isValideur,
+                };
+            case FormationRoles::GESTIONNAIRE_FORMATION :
+                return match ($privilege) {
+                    DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_GESTIONNAIRE => $demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_VALIDEUR),
+                    default => true
+                };
+            case AppRoleProvider::DRH :
+                return match ($privilege) {
+                    DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DRH => $demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_RESPONSABLE),
+                    default => true
+                };
+            case AppRoleProvider::DGS :
+                return match ($privilege) {
+                    DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DGS => $demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_DRH),
+                    default => true
+                };
             case RoleProvider::RESPONSABLE :
                 if ($privilege === DemandeexternePrivileges::DEMANDEEXTERNE_MODIFIER and !$demande->isEtatActif(DemandeExterneEtats::ETAT_CREATION_EN_COURS)) return false;
+                if ($privilege === DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_RESPONSABLE) return $demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_GESTIONNAIRE);
                 $structures = $this->getAgentService()->computesStructures($agent);
                 $responsables = DemandeExterneAssertion::agentInStructures(RoleProvider::RESPONSABLE, $structures);
                 return DemandeExterneAssertion::userInAgents($user, $responsables);
@@ -129,12 +148,21 @@ class DemandeExterneAssertion extends AbstractAssertion
             => $this->computeAssertion($entity, DemandeexternePrivileges::DEMANDEEXTERNE_SUPPRIMER),
             'valider-agent'
             => $this->computeAssertion($entity, DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_AGENT),
+            'valider-valideur',
+            'refuser-valideur'
+            => $this->computeAssertion($entity, DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_VALIDEUR),
+            'valider-gestionnaire',
+            'refuser-gestionnaire'
+            => $this->computeAssertion($entity, DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_GESTIONNAIRE),
             'valider-responsable',
             'refuser-responsable'
             => $this->computeAssertion($entity, DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_RESPONSABLE),
             'valider-drh',
             'refuser-drh'
             => $this->computeAssertion($entity, DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DRH),
+            'valider-dgs',
+            'refuser-dgs'
+            => $this->computeAssertion($entity, DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DGS),
             default => true,
         };
     }
diff --git a/module/DemandeExterne/src/Controller/DemandeExterneController.php b/module/DemandeExterne/src/Controller/DemandeExterneController.php
index b1aa2709117684e23cf6f3f5e3ae46107c90d195..b9f653e2058b8f9f5b9109f6cec1e01625f8f719 100644
--- a/module/DemandeExterne/src/Controller/DemandeExterneController.php
+++ b/module/DemandeExterne/src/Controller/DemandeExterneController.php
@@ -7,23 +7,21 @@ use Agent\Form\SelectionAgent\SelectionAgentFormAwareTrait;
 use Agent\Service\Agent\AgentServiceAwareTrait;
 use Agent\Service\AgentValidateur\AgentValidateurServiceAwareTrait;
 use Application\Service\NotificationConfiguration\NotificationConfigurationServiceAwareTrait;
+use DateTime;
 use DemandeExterne\Entity\Db\DemandeExterne;
 use DemandeExterne\Form\Demande2Formation\Demande2FormationFormAwareTrait;
 use DemandeExterne\Form\DemandeExterne\DemandeExterneFormAwareTrait;
 use DemandeExterne\Provider\Etat\DemandeExterneEtats;
 use DemandeExterne\Provider\Parametre\DemandeExterneParametres;
 use DemandeExterne\Provider\Template\MailTemplates;
-use DemandeExterne\Provider\Validation\DemandeExterneValidations;
 use DemandeExterne\Service\DemandeExterne\DemandeExterneServiceAwareTrait;
 use DemandeExterne\Service\Notification\NotificationServiceAwareTrait;
 use Fichier\Entity\Db\Fichier;
 use Fichier\Form\Upload\UploadFormAwareTrait;
 use Fichier\Service\Fichier\FichierServiceAwareTrait;
 use Fichier\Service\Nature\NatureServiceAwareTrait;
-use Formation\Entity\Db\Formation;
 use Formation\Form\Justification\JustificationFormAwareTrait;
 use Formation\Form\SelectionGestionnaire\SelectionGestionnaireFormAwareTrait;
-use Formation\Provider\Etat\InscriptionEtats;
 use Formation\Provider\FichierNature\FichierNature;
 use Formation\Provider\Role\FormationRoles;
 use Laminas\Form\Element\Select;
@@ -33,6 +31,7 @@ use Laminas\Mvc\Controller\AbstractActionController;
 use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger;
 use Laminas\View\Model\JsonModel;
 use Laminas\View\Model\ViewModel;
+use UnicaenEtat\Entity\Db\EtatType;
 use UnicaenEtat\Service\EtatInstance\EtatInstanceServiceAwareTrait;
 use UnicaenEtat\Service\EtatType\EtatTypeServiceAwareTrait;
 use UnicaenParametre\Service\Parametre\ParametreServiceAwareTrait;
@@ -62,9 +61,9 @@ class DemandeExterneController extends AbstractActionController
     use SelectionGestionnaireFormAwareTrait;
     use UploadFormAwareTrait;
 
-    public function indexAction(): ViewModel
+
+    public function traiterParamsFromQueries(array $fromQueries, ?array $etatsListe): array
     {
-        $fromQueries = $this->params()->fromQuery();
         $params = [
             'agent' => $this->getAgentService()->getAgent($fromQueries['agent-filtre']['id'] ?? null),
             'organisme' => $fromQueries['organisme']['id'] ?? null,
@@ -82,8 +81,17 @@ class DemandeExterneController extends AbstractActionController
                 }
             }
         } else {
-            $params['etats'] = DemandeExterneEtats::ETATS_OUVERTS;
+            $params['etats'] = $etatsListe;
+            $params['historise'] = 0;
+            $params['annee'] = (new DateTime())->format('Y');
         }
+        return $params;
+    }
+
+    public function indexAction(): ViewModel
+    {
+
+        $params = $this->traiterParamsFromQueries($this->params()->fromQuery(), []);
         $demandes = $this->getDemandeExterneService()->getDemandesExternesWithFiltre($params);
 
         $etats = $this->getEtatTypeService()->getEtatsTypesByCategorieCode(DemandeExterneEtats::TYPE);
@@ -98,6 +106,50 @@ class DemandeExterneController extends AbstractActionController
         ]);
     }
 
+    public function indexTransformationAction(): ViewModel
+    {
+        $params = $this->traiterParamsFromQueries($this->params()->fromQuery(), [DemandeExterneEtats::ETAT_TERMINEE]);
+        $demandes = $this->getDemandeExterneService()->getDemandesExternesWithFiltre($params);
+
+        $demandes = array_filter($demandes, function (DemandeExterne $demande) { return $demande->getInscription() === null;});
+        $etats = [$this->getEtatTypeService()->getEtatTypeByCode(DemandeExterneEtats::ETAT_TERMINEE)];
+
+        return new ViewModel([
+            'demandes' => $demandes,
+            'etats' => $etats,
+
+            'params' => $params,
+            'gestionnaires' => $this->getUserService()->getUtilisateursByRoleIdAsOptions(FormationRoles::GESTIONNAIRE_FORMATION),
+        ]);
+    }
+
+    public function parapheurAction(): ViewModel
+    {
+        $plafond1 = $this->getParametreService()->getValeurForParametre(DemandeExterneParametres::TYPE, DemandeExterneParametres::PLAFOND_DRH);
+        $plafond2 = $this->getParametreService()->getValeurForParametre(DemandeExterneParametres::TYPE, DemandeExterneParametres::PLAFOND_DGS);
+
+        $etats = [
+            $this->getEtatTypeService()->getEtatTypeByCode(DemandeExterneEtats::ETAT_VALIDATION_GESTIONNAIRE,DemandeExterneEtats::TYPE),
+            $this->getEtatTypeService()->getEtatTypeByCode(DemandeExterneEtats::ETAT_VALIDATION_RESPONSABLE,DemandeExterneEtats::TYPE),
+            $this->getEtatTypeService()->getEtatTypeByCode(DemandeExterneEtats::ETAT_VALIDATION_DRH,DemandeExterneEtats::TYPE),
+            $this->getEtatTypeService()->getEtatTypeByCode(DemandeExterneEtats::ETAT_VALIDATION_DGS,DemandeExterneEtats::TYPE),
+        ];
+
+        $params = $this->traiterParamsFromQueries($this->params()->fromQuery(), array_map(function (EtatType $etat) {return $etat->getCode();}, $etats));
+        $demandes = $this->getDemandeExterneService()->getDemandesExternesWithFiltre($params);
+        $gestionnaires = $this->getUserService()->getUtilisateursByRoleIdAsOptions(FormationRoles::GESTIONNAIRE_FORMATION);
+        return new ViewModel([
+            'plafond1' => $plafond1,
+            'plafond2' => $plafond2,
+            'demandes' => $demandes,
+
+            'etats' => $etats,
+            'params' => $params,
+            'gestionnaires' => $gestionnaires,
+        ]);
+
+    }
+
     public function afficherAction(): ViewModel
     {
         $demande = $this->getDemandeExterneService()->getRequestedDemandeExterne($this);
@@ -301,7 +353,7 @@ class DemandeExterneController extends AbstractActionController
         ]);
     }
 
-    /** VALIDATION ***************************************************************************************/
+    /** VALIDATION ****************************************************************************************************/
 
     public function validerAgentAction(): ViewModel
     {
@@ -311,52 +363,46 @@ class DemandeExterneController extends AbstractActionController
         $request = $this->getRequest();
         if ($request->isPost()) {
             $data = $request->getPost();
-            $validation = $demande->getValidationActiveByTypeCode(DemandeExterneValidations::FORMATION_DEMANDE_AGENT);
-            if ($validation === null) {
-                if ($data["reponse"] === "oui") {
-                    $this->getValidationInstanceService()->setValidationActive($demande, DemandeExterneValidations::FORMATION_DEMANDE_AGENT);
-                    $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_VALIDATION_AGENT);
-                    $this->getDemandeExterneService()->update($demande);
-
-                    $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("Demande de formation hors plan de formation", MailTemplates::DEMANDE_EXTERNE_VALIDATION_AGENT, "Validation par l'agent·e");
-                    if ($configuration === null or $configuration->isActive()) $this->getNotificationService()->triggerValidationAgent($demande);
-                }
+            if ($data["reponse"] === "oui") {
+                $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_VALIDATION_AGENT);
+                $this->getDemandeExterneService()->update($demande);
+                $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("Demande de formation hors plan de formation", MailTemplates::DEMANDE_EXTERNE_VALIDATION_AGENT, "Validation par l'agent·e");
+                if ($configuration === null or $configuration->isActive()) $this->getNotificationService()->triggerValidationAgent($demande);
             }
         }
         $vm = new ViewModel();
         $vm->setTemplate('unicaen-validation/validation-instance/validation-modal');
         $vm->setVariables([
             'title' => "Validation de la demande de formation externe",
-            'text' => "<div class='alert alert-info'>En validant cette demande de formation externe vous figer cette demande. Un courrier électronique sera envoyé à votre responsable pour la validation de celle-ci. </div>",
+            'text' => "<div class='alert alert-info'>En validant cette demande de formation externe, vous figez cette demande. Un courrier électronique sera envoyé à votre responsable pour la validation de celle-ci. </div>",
             'action' => $this->url()->fromRoute('demande-externe/valider-agent', ["demande-externe" => $demande->getId()], [], true),
             'refus' => false,
         ]);
         return $vm;
     }
 
-    public function validerResponsableAction(): ViewModel
+    public function validerValideurAction(): ViewModel
     {
         $demande = $this->getDemandeExterneService()->getRequestedDemandeExterne($this);
         $form = $this->getJustificationForm();
-        $form->setAttribute('action', $this->url()->fromRoute('demande-externe/valider-responsable', ['demande-externe' => $demande->getId()], [], true));
+        $form->setAttribute('action', $this->url()->fromRoute('demande-externe/valider-valideur', ['demande-externe' => $demande->getId()], [], true));
         $form->bind($demande);
-        $form->get('etape')->setValue('RESPONSABLE');
+        $form->get('etape')->setValue('VALIDEUR');
 
         $request = $this->getRequest();
         if ($request->isPost()) {
             $data = $request->getPost();
             $form->setData($data);
             if ($form->isValid()) {
-                $this->getValidationInstanceService()->setValidationActive($demande, DemandeExterneValidations::FORMATION_DEMANDE_RESPONSABLE);
-                $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_VALIDATION_RESP);
+                $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_VALIDATION_VALIDEUR);
                 $this->getDemandeExterneService()->update($demande);
                 $this->flashMessenger()->addSuccessMessage("Validation effectuée.");
 
-                $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("Demande de formation hors plan de formation", MailTemplates::DEMANDE_EXTERNE_VALIDATION_RESP_AGENT, "Validation par le ou la valideur·euse");
-                if ($configuration === null or $configuration->isActive()) $this->getNotificationService()->triggerValidationResponsableAgent($demande);
+                $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("Demande de formation hors plan de formation", MailTemplates::DEMANDE_EXTERNE_VALIDEE_VALIDEUR_AGENT, "Validation par le ou la valideur·euse");
+                if ($configuration === null or $configuration->isActive()) $this->getNotificationService()->triggerValidationValideurAgent($demande);
 
-                $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("Demande de formation hors plan de formation", MailTemplates::DEMANDE_EXTERNE_VALIDATION_RESP_DRH, "Validation par le ou la valideur·euse");
-                if ($configuration === null or $configuration->isActive())  $this->getNotificationService()->triggerValidationResponsableDrh($demande);
+                $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("Demande de formation hors plan de formation", MailTemplates::DEMANDE_EXTERNE_VALIDEE_VALIDEUR_DRH, "Validation par le ou la valideur·euse");
+                if ($configuration === null or $configuration->isActive())  $this->getNotificationService()->triggerValidationValideurDrh($demande);
             }
         }
 
@@ -365,15 +411,15 @@ class DemandeExterneController extends AbstractActionController
             'inscription' => $demande,
             'form' => $form,
         ]);
-        $vm->setTemplate('formation/formation-instance-inscrit/inscription');
+        $vm->setTemplate('demande-externe/demande-externe/demande.phtml');
         return $vm;
     }
 
-    public function refuserResponsableAction(): ViewModel
+    public function refuserValideurAction(): ViewModel
     {
         $demande = $this->getDemandeExterneService()->getRequestedDemandeExterne($this);
         $form = $this->getJustificationForm();
-        $form->setAttribute('action', $this->url()->fromRoute('demande-externe/refuser-responsable', ['demande-externe' => $demande->getId()], [], true));
+        $form->setAttribute('action', $this->url()->fromRoute('demande-externe/refuser-valideur', ['demande-externe' => $demande->getId()], [], true));
         $form->bind($demande);
         $form->get('etape')->setValue('REFUS');
 
@@ -382,11 +428,12 @@ class DemandeExterneController extends AbstractActionController
             $data = $request->getPost();
             $form->setData($data);
             if ($form->isValid()) {
-                $this->getValidationInstanceService()->setValidationActive($demande, DemandeExterneValidations::FORMATION_DEMANDE_REFUS);
                 $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_REJETEE);
                 $this->getDemandeExterneService()->update($demande);
                 $this->flashMessenger()->addSuccessMessage("Refus effectué.");
-                $this->getNotificationService()->triggerRefus($demande);
+
+                $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("Demande de formation hors plan de formation", MailTemplates::DEMANDE_EXTERNE_VALIDATION_REFUS, "Refus par le ou la valideur·euse");
+                if ($configuration === null or $configuration->isActive())  $this->getNotificationService()->triggerRefus($demande);
             }
         }
 
@@ -395,7 +442,7 @@ class DemandeExterneController extends AbstractActionController
             'inscription' => $demande,
             'form' => $form,
         ]);
-        $vm->setTemplate('formation/formation-instance-inscrit/inscription');
+        $vm->setTemplate('demande-externe/demande-externe/demande.phtml');
         return $vm;
     }
 
@@ -403,8 +450,6 @@ class DemandeExterneController extends AbstractActionController
     {
         $demande = $this->getDemandeExterneService()->getRequestedDemandeExterne($this);
 
-        $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_VALIDATION_DRH);
-        $this->getDemandeExterneService()->update($demande);
         $form = $this->getJustificationForm();
         $form->setAttribute('action', $this->url()->fromRoute('demande-externe/valider-gestionnaire', ['demande-externe' => $demande->getId()], [], true));
         $form->bind($demande);
@@ -416,11 +461,11 @@ class DemandeExterneController extends AbstractActionController
             $data = $request->getPost();
             $form->setData($data);
             if ($form->isValid()) {
-                $this->getValidationInstanceService()->setValidationActive($demande, DemandeExterneValidations::FORMATION_DEMANDE_DRH);
+                $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_VALIDATION_GESTIONNAIRE);
                 $this->getDemandeExterneService()->update($demande);
                 $this->flashMessenger()->addSuccessMessage("Validation effectuée.");
-                $this->getNotificationService()->triggerValidationDrh($demande);
-                $this->getNotificationService()->triggerValidationComplete($demande);
+                $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("DEMANDE", MailTemplates::DEMANDE_EXTERNE_DEMANDE_COMPLETE, "Notification que la demande est complète");
+                if ($configuration === null or $configuration->isActive()) $this->getNotificationService()->triggerDemandeComplete($demande);
             }
         }
 
@@ -429,7 +474,7 @@ class DemandeExterneController extends AbstractActionController
             'inscription' => $demande,
             'form' => $form,
         ]);
-        $vm->setTemplate('formation/formation-instance-inscrit/inscription');
+        $vm->setTemplate('demande-externe/demande-externe/demande.phtml');
         return $vm;
     }
 
@@ -437,8 +482,6 @@ class DemandeExterneController extends AbstractActionController
     {
         $demande = $this->getDemandeExterneService()->getRequestedDemandeExterne($this);
 
-        $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_VALIDATION_DRH);
-        $this->getDemandeExterneService()->update($demande);
         $form = $this->getJustificationForm();
         $form->setAttribute('action', $this->url()->fromRoute('demande-externe/valider-gestionnaire', ['demande-externe' => $demande->getId()], [], true));
         $form->bind($demande);
@@ -449,10 +492,10 @@ class DemandeExterneController extends AbstractActionController
             $data = $request->getPost();
             $form->setData($data);
             if ($form->isValid()) {
-                $this->getValidationInstanceService()->setValidationActive($demande, DemandeExterneValidations::FORMATION_DEMANDE_REFUS);
                 $this->getDemandeExterneService()->update($demande);
                 $this->flashMessenger()->addSuccessMessage("Refus effectuée.");
-                $this->getNotificationService()->triggerRefus($demande);
+                $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("DEMANDE", MailTemplates::DEMANDE_EXTERNE_VALIDATION_REFUS, "Refus par les gestionnaires");
+                if ($configuration === null or $configuration->isActive()) $this->getNotificationService()->triggerRefus($demande);
             }
         }
 
@@ -461,30 +504,112 @@ class DemandeExterneController extends AbstractActionController
             'inscription' => $demande,
             'form' => $form,
         ]);
-        $vm->setTemplate('formation/formation-instance-inscrit/inscription');
+        $vm->setTemplate('demande-externe/demande-externe/demande.phtml');
         return $vm;
     }
 
+    public function validerResponsableAction(): ViewModel
+    {
+        $demande = $this->getDemandeExterneService()->getRequestedDemandeExterne($this);
+        $user = $this->getUserService()->getConnectedUser();
+
+        $form = $this->getJustificationForm();
+        $form->setAttribute('action', $this->url()->fromRoute('demande-externe/valider-responsable', ['demande-externe' => $demande->getId()], [], true));
+        $form->bind($demande);
+        $form->get('etape')->setValue('RESPONSABLE');
+        $form->get('justification')->setValue('Validation par '.$user->getDisplayName().' - Responsable bureau de gestion des formations');
+
+        $request = $this->getRequest();
+        if ($request->isPost()) {
+            $data = $request->getPost();
+            $form->setData($data);
+            if ($form->isValid()) {
+                if ($demande->getFraisPedagogique() < $this->getParametreService()->getValeurForParametre(DemandeExterneParametres::TYPE, DemandeExterneParametres::PLAFOND_DRH)) {
+                    $this->flashMessenger()->addSuccessMessage("Validation effectuée.");
+                    $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_TERMINEE);
+                    $this->getDemandeExterneService()->update($demande);
+                    $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("DEMANDE", MailTemplates::DEMANDE_EXTERNE_DEMANDE_VALIDEE, "Demande validée par le responsable (plafond ok)");
+                    if ($configuration === null or $configuration->isActive()) $this->getNotificationService()->triggerDemandeValidee($demande);
+                } else {
+                    $this->flashMessenger()->addSuccessMessage("Validation effectuée notification de la DRH pour validation.");
+                    $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_VALIDATION_RESPONSABLE);
+                    $this->getDemandeExterneService()->update($demande);
+                    $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("DEMANDE", MailTemplates::DEMANDE_EXTERNE_DEMANDE_DRH, "Demande validée par le responsable (plafond ko)");
+                    if ($configuration === null or $configuration->isActive()) $this->getNotificationService()->triggerDemandeDRH($demande);
+                }
+            }
+        }
+
+        $vm = new ViewModel([
+            'title' => "Validation de la demande de " . $demande->getAgent()->getDenomination() . " à la formation " . $demande->getLibelle(),
+            'inscription' => $demande,
+            'form' => $form,
+        ]);
+        $vm->setTemplate('demande-externe/demande-externe/demande.phtml');
+        return $vm;
+    }
+
+    public function refuserResponsableAction(): ViewModel
+    {
+        $demande = $this->getDemandeExterneService()->getRequestedDemandeExterne($this);
+
+        $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_VALIDATION_DRH);
+        $this->getDemandeExterneService()->update($demande);
+        $form = $this->getJustificationForm();
+        $form->setAttribute('action', $this->url()->fromRoute('demande-externe/refuser-responsable', ['demande-externe' => $demande->getId()], [], true));
+        $form->bind($demande);
+        $form->get('etape')->setValue('REFUS');
+
+        $request = $this->getRequest();
+        if ($request->isPost()) {
+            $data = $request->getPost();
+            $form->setData($data);
+            if ($form->isValid()) {
+                $this->getDemandeExterneService()->update($demande);
+                $this->flashMessenger()->addSuccessMessage("Refus effectuée.");
+                $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("DEMANDE", MailTemplates::DEMANDE_EXTERNE_VALIDATION_REFUS, "Demande refusée par le responsable");
+                if ($configuration === null or $configuration->isActive()) $this->getNotificationService()->triggerRefus($demande);
+            }
+        }
+
+        $vm = new ViewModel([
+            'title' => "Refus de la demande de " . $demande->getAgent()->getDenomination() . " à la formation " . $demande->getLibelle(),
+            'inscription' => $demande,
+            'form' => $form,
+        ]);
+        $vm->setTemplate('demande-externe/demande-externe/demande.phtml');
+        return $vm;
+    }
 
     public function validerDrhAction(): ViewModel
     {
         $demande = $this->getDemandeExterneService()->getRequestedDemandeExterne($this);
+        $user = $this->getUserService()->getConnectedUser();
+
         $form = $this->getJustificationForm();
         $form->setAttribute('action', $this->url()->fromRoute('demande-externe/valider-drh', ['demande-externe' => $demande->getId()], [], true));
         $form->bind($demande);
         $form->get('etape')->setValue('DRH');
-        $form->get('justification')->setValue('Validation de la Direction des Ressources Humaines');
+        $form->get('justification')->setValue('Validation par '.$user->getDisplayName().' - Direction des Ressources Humaines');
 
         $request = $this->getRequest();
         if ($request->isPost()) {
             $data = $request->getPost();
             $form->setData($data);
             if ($form->isValid()) {
-                $this->getValidationInstanceService()->setValidationActive($demande, DemandeExterneValidations::FORMATION_DEMANDE_DRH);
-                $this->getDemandeExterneService()->update($demande);
-                $this->flashMessenger()->addSuccessMessage("Validation effectuée.");
-                $this->getNotificationService()->triggerValidationDrh($demande);
-                $this->getNotificationService()->triggerValidationComplete($demande);
+                if ($demande->getFraisPedagogique() < $this->getParametreService()->getValeurForParametre(DemandeExterneParametres::TYPE, DemandeExterneParametres::PLAFOND_DGS)) {
+                    $this->flashMessenger()->addSuccessMessage("Validation effectuée.");
+                    $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_TERMINEE);
+                    $this->getDemandeExterneService()->update($demande);
+                    $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("DEMANDE", MailTemplates::DEMANDE_EXTERNE_DEMANDE_VALIDEE, "Demande validée par la DRH (plafond ok)");
+                    if ($configuration === null or $configuration->isActive()) $this->getNotificationService()->triggerDemandeValidee($demande);
+                } else {
+                    $this->flashMessenger()->addSuccessMessage("Validation effectuée notification de la DGS pour validation.");
+                    $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_VALIDATION_DRH);
+                    $this->getDemandeExterneService()->update($demande);
+                    $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("DEMANDE", MailTemplates::DEMANDE_EXTERNE_DEMANDE_DGS, "Demande validée par la DRH (plafond ko)");
+                    if ($configuration === null or $configuration->isActive()) $this->getNotificationService()->triggerDemandeDGS($demande);
+                }
             }
         }
 
@@ -493,15 +618,16 @@ class DemandeExterneController extends AbstractActionController
             'inscription' => $demande,
             'form' => $form,
         ]);
-        $vm->setTemplate('formation/formation-instance-inscrit/inscription');
+        $vm->setTemplate('demande-externe/demande-externe/demande.phtml');
         return $vm;
     }
 
-
     public function refuserDrhAction(): ViewModel
     {
         $demande = $this->getDemandeExterneService()->getRequestedDemandeExterne($this);
 
+        $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_VALIDATION_DRH);
+        $this->getDemandeExterneService()->update($demande);
         $form = $this->getJustificationForm();
         $form->setAttribute('action', $this->url()->fromRoute('demande-externe/refuser-drh', ['demande-externe' => $demande->getId()], [], true));
         $form->bind($demande);
@@ -512,10 +638,10 @@ class DemandeExterneController extends AbstractActionController
             $data = $request->getPost();
             $form->setData($data);
             if ($form->isValid()) {
-                $this->getValidationInstanceService()->setValidationActive($demande, DemandeExterneValidations::FORMATION_DEMANDE_REFUS);
                 $this->getDemandeExterneService()->update($demande);
-                $this->flashMessenger()->addSuccessMessage("Refus effectué.");
-                $this->getNotificationService()->triggerRefus($demande);
+                $this->flashMessenger()->addSuccessMessage("Refus effectuée.");
+                $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("DEMANDE", MailTemplates::DEMANDE_EXTERNE_VALIDATION_REFUS, "Demande refusée par la DRH");
+                if ($configuration === null or $configuration->isActive())  $this->getNotificationService()->triggerRefus($demande);
             }
         }
 
@@ -524,49 +650,76 @@ class DemandeExterneController extends AbstractActionController
             'inscription' => $demande,
             'form' => $form,
         ]);
-        $vm->setTemplate('formation/formation-instance-inscrit/inscription');
+        $vm->setTemplate('demande-externe/demande-externe/demande.phtml');
         return $vm;
     }
 
-    /** GESTION DES DEMANDES *************************************************************************/
-    public function parapheurAction(): ViewModel
+    public function validerDgsAction(): ViewModel
     {
-        $paramsInternes = [
-            'etat' => InscriptionEtats::ETAT_VALIDER_RESPONSABLE,
-            'historise' => '0',
-            'annee' => Formation::getAnnee(),
-        ];
-        $demandesInternes = $this->getDemandeExterneService()->getInscriptionService()->getInscriptionsWithFiltre($paramsInternes);
+        $demande = $this->getDemandeExterneService()->getRequestedDemandeExterne($this);
+        $user = $this->getUserService()->getConnectedUser();
 
-        $plafond = $this->getParametreService()->getValeurForParametre(DemandeExterneParametres::TYPE, DemandeExterneParametres::PLAFOND_DRH);
-        $paramsExternes_standard = [
-            'etat' => $this->getEtatTypeService()->getEtatTypeByCode(DemandeExterneEtats::ETAT_VALIDATION_RESP),
-            'historise' => '0',
-            'annee' => Formation::getAnnee(),
-        ];
-        $demandesExternes_standard = $this->getDemandeExterneService()->getDemandesExternesWithFiltre($paramsExternes_standard);
-        $demandesExternes_standard = array_filter($demandesExternes_standard, function (DemandeExterne $a) use ($plafond) {
-            return $a->getMontant() >= $plafond;
-        });
-
-        $paramsExternes_forcee = [
-            'etat' => $this->getEtatTypeService()->getEtatTypeByCode(DemandeExterneEtats::ETAT_FORCEE_PARAPHEUR),
-            'historise' => '0',
-            'annee' => Formation::getAnnee(),
-        ];
-        $demandesExternes_forcee = $this->getDemandeExterneService()->getDemandesExternesWithFiltre($paramsExternes_forcee);
-        $demandesExternes_forcee = array_filter($demandesExternes_forcee, function (DemandeExterne $a) use ($plafond) {
-            return $a->getMontant() >= $plafond;
-        });
+        $form = $this->getJustificationForm();
+        $form->setAttribute('action', $this->url()->fromRoute('demande-externe/valider-dgs', ['demande-externe' => $demande->getId()], [], true));
+        $form->bind($demande);
+        $form->get('etape')->setValue('DGS');
+        $form->get('justification')->setValue('Validation par '.$user->getDisplayName().' - Direction Générale des Service');
+
+        $request = $this->getRequest();
+        if ($request->isPost()) {
+            $data = $request->getPost();
+            $form->setData($data);
+            if ($form->isValid()) {
+                $this->flashMessenger()->addSuccessMessage("Validation effectuée.");
+                $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_TERMINEE);
+                $this->getDemandeExterneService()->update($demande);
+                $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("DEMANDE", MailTemplates::DEMANDE_EXTERNE_DEMANDE_VALIDEE, "Demande validée par la DGS");
+                if ($configuration === null or $configuration->isActive()) $this->getNotificationService()->triggerDemandeValidee($demande);
+            }
+        }
 
-        $demandesExternes = array_merge($demandesExternes_standard, $demandesExternes_forcee);
+        $vm = new ViewModel([
+            'title' => "Validation de la demande de " . $demande->getAgent()->getDenomination() . " à la formation " . $demande->getLibelle(),
+            'inscription' => $demande,
+            'form' => $form,
+        ]);
+        $vm->setTemplate('demande-externe/demande-externe/demande.phtml');
+        return $vm;
+    }
 
-        return new ViewModel([
-            'demandesInternes' => $demandesInternes,
-            'demandesExternes' => $demandesExternes,
+    public function refuserDgsAction(): ViewModel
+    {
+        $demande = $this->getDemandeExterneService()->getRequestedDemandeExterne($this);
+
+        $form = $this->getJustificationForm();
+        $form->setAttribute('action', $this->url()->fromRoute('demande-externe/refuser-dgs', ['demande-externe' => $demande->getId()], [], true));
+        $form->bind($demande);
+        $form->get('etape')->setValue('REFUS');
+
+        $request = $this->getRequest();
+        if ($request->isPost()) {
+            $data = $request->getPost();
+            $form->setData($data);
+            if ($form->isValid()) {
+                $this->getDemandeExterneService()->update($demande);
+                $this->flashMessenger()->addSuccessMessage("Refus effectuée.");
+                $configuration = $this->getNotificationConfigurationService()->getNotificationConfigurationWithParams("DEMANDE", MailTemplates::DEMANDE_EXTERNE_VALIDATION_REFUS, "Demande refusée par la DGS");
+                if ($configuration === null or $configuration->isActive()) $this->getNotificationService()->triggerRefus($demande);
+            }
+        }
+
+        $vm = new ViewModel([
+            'title' => "Refus de la demande de " . $demande->getAgent()->getDenomination() . " à la formation " . $demande->getLibelle(),
+            'inscription' => $demande,
+            'form' => $form,
         ]);
+        $vm->setTemplate('demande-externe/demande-externe/demande.phtml');
+        return $vm;
     }
 
+    /** GESTION DES DEMANDES *************************************************************************/
+
+
     public function gererAction(): ViewModel
     {
         $demande = $this->getDemandeExterneService()->getRequestedDemandeExterne($this);
@@ -698,42 +851,6 @@ class DemandeExterneController extends AbstractActionController
         return $this->redirect()->toRoute('inscription-externe', [], [], true);
     }
 
-    /** ENVOYER DANS LE PARAPHEUR *************************************************************************************/
-
-    //todo ajouter justification
-    public function envoyerParapheurAction(): ViewModel
-    {
-        $demande = $this->getDemandeExterneService()->getRequestedDemandeExterne($this);
-        $form = $this->getJustificationForm();
-        $form->setAttribute('action', $this->url()->fromRoute('demande-externe/envoyer-parapheur', ['demande-externe' => $demande->getId()], [], true));
-        $form->bind($demande);
-        $form->get('etape')->setValue('GESTIONNAIRE');
-        $form->get('justification')->setValue('Validation');
-
-        $request = $this->getRequest();
-        if ($request->isPost()) {
-            $data = $request->getPost();
-            $form->setData($data);
-            if ($form->isValid()) {
-                $this->getEtatInstanceService()->setEtatActif($demande, DemandeExterneEtats::ETAT_FORCEE_PARAPHEUR);
-                $this->getDemandeExterneService()->update($demande);
-                $this->flashMessenger()->addSuccessMessage("Envoi au parapheur effectué.");
-                $this->getNotificationService()->triggerValidationDrh($demande);
-                $this->getNotificationService()->triggerValidationComplete($demande);
-            }
-        }
-
-        $vm = new ViewModel([
-            'title' => "Envoi au parapheur de la demande de " . $demande->getAgent()->getDenomination() . " à la formation " . $demande->getLibelle(),
-            'inscription' => $demande,
-            'form' => $form,
-        ]);
-        $vm->setTemplate('formation/formation-instance-inscrit/inscription');
-        return $vm;
-
-    }
-
-
     /** FONCTIONS POUR LE FILTRE **************************************************************************************/
 
     public function rechercherAgentAction(): JsonModel
diff --git a/module/DemandeExterne/src/Entity/Db/DemandeExterne.php b/module/DemandeExterne/src/Entity/Db/DemandeExterne.php
index 181a0b6d90a069844806cd5a9f833634e482353f..fa397bb93b9c95bdc5eec952d934f2308bc88d11 100644
--- a/module/DemandeExterne/src/Entity/Db/DemandeExterne.php
+++ b/module/DemandeExterne/src/Entity/Db/DemandeExterne.php
@@ -19,11 +19,10 @@ use UnicaenUtilisateur\Entity\Db\UserInterface;
 use UnicaenValidation\Entity\HasValidationsInterface;
 use UnicaenValidation\Entity\HasValidationsTrait;
 
-class DemandeExterne implements HistoriqueAwareInterface, ResourceInterface, HasEtatsInterface, HasValidationsInterface
+class DemandeExterne implements HistoriqueAwareInterface, ResourceInterface, HasEtatsInterface
 {
     use HistoriqueAwareTrait;
     use HasEtatsTrait;
-    use HasValidationsTrait;
 
     public function getResourceId(): string
     {
@@ -36,21 +35,23 @@ class DemandeExterne implements HistoriqueAwareInterface, ResourceInterface, Has
     private ?string $contact = null;
     private ?string $missions = null;
     private ?string $pourquoi = null;
-    private ?float $montant = null;
+    private ?float $fraisPedagogique = null;
+    private ?string $fraisAnnexe = null;
     private ?string $lieu = null;
     private ?DateTime $debut = null;
     private ?DateTime $fin = null;
     private bool $congeFormationSyndicale = false;
-    private bool $priseEnCharge = true;
-    private ?string $cofinanceur = null;
+
     private string $modalite = "présentiel";
 
     private ?Agent $agent = null;
 
     private ?string $justificationAgent = null;
-    private ?string $justificationResponsable = null;
+    private ?string $justificationValideur = null;
     private ?string $justificationGestionnaire = null;
+    private ?string $justificationResponsable = null;
     private ?string $justificationDrh = null;
+    private ?string $justificationDgs = null;
     private ?string $justificationRefus = null;
     private ?Collection $fichiers;
 
@@ -122,16 +123,34 @@ class DemandeExterne implements HistoriqueAwareInterface, ResourceInterface, Has
         $this->pourquoi = $pourquoi;
     }
 
-    public function getMontant(): ?float
+    public function getFraisAnnexe(): ?string
+    {
+        return $this->fraisAnnexe;
+    }
+
+    public function setFraisAnnexe(?string $fraisAnnexe): void
+    {
+        $this->fraisAnnexe = $fraisAnnexe;
+    }
+
+    public function getFraisPedagogique(): ?float
     {
-        return $this->montant;
+        return $this->fraisPedagogique;
     }
 
-    public function setMontant(?float $montant): void
+    public function setFraisPedagogique(?float $fraisPedagogique): void
     {
-        $this->montant = $montant;
+        $this->fraisPedagogique = $fraisPedagogique;
     }
 
+    public function getMontant(): ?float
+    {
+        //TODO : ici frais annexe est un element textuel (genre 3 nuits) par conséquent l'addition ne peut plus être faite
+        //return $this->fraisAnnexe + $this->fraisPedagogique;
+        return $this->fraisPedagogique;
+    }
+
+
     public function getLieu(): ?string
     {
         return $this->lieu;
@@ -204,106 +223,108 @@ class DemandeExterne implements HistoriqueAwareInterface, ResourceInterface, Has
         $this->modalite = $modalite;
     }
 
-    public function getJustificationAgent(): ?string
+    public function isCongeFormationSyndicale(): bool
     {
-        return $this->justificationAgent;
+        return $this->congeFormationSyndicale;
     }
 
-    public function setJustificationAgent(?string $justificationAgent): void
+    public function setCongeFormationSyndicale(bool $congeFormationSyndicale): void
     {
-        $this->justificationAgent = $justificationAgent;
+        $this->congeFormationSyndicale = $congeFormationSyndicale;
     }
 
-    public function getJustificationGestionnaire(): ?string
+    public function getAgent(): ?Agent
     {
-        return $this->justificationGestionnaire;
+        return $this->agent;
     }
 
-    public function setJustificationGestionnaire(?string $justificationGestionnaire): void
+    public function setAgent(?Agent $agent): void
     {
-        $this->justificationGestionnaire = $justificationGestionnaire;
+        $this->agent = $agent;
     }
 
-    public function getJustificationDrh(): ?string
+    public function generateTag(): string
     {
-        return $this->justificationDrh;
+        return 'DemandeExterne_' . $this->getId();
     }
 
-    public function setJustificationDrh(?string $justificationDrh): void
+    public function isRqth(): bool
     {
-        $this->justificationDrh = $justificationDrh;
+        return false;
     }
 
-    public function isPriseEnCharge(): bool
+    public function setRqth(bool $isRqth): void
     {
-        return $this->priseEnCharge;
     }
 
-    public function setPriseEnCharge(bool $priseEnCharge): void
+    public function getPrecisionRqth(): void
     {
-        $this->priseEnCharge = $priseEnCharge;
     }
 
-    public function isCongeFormationSyndicale(): bool
+    public function setPrecisionRqth(?string $precision = null): void
     {
-        return $this->congeFormationSyndicale;
     }
 
-    public function setCongeFormationSyndicale(bool $congeFormationSyndicale): void
+    /** JUSTIFICATIONS ***************************************************************************************/
+
+    public function getJustificationAgent(): ?string
     {
-        $this->congeFormationSyndicale = $congeFormationSyndicale;
+        return $this->justificationAgent;
     }
 
-    public function getCofinanceur(): ?string
+    public function setJustificationAgent(?string $justificationAgent): void
     {
-        return $this->cofinanceur;
+        $this->justificationAgent = $justificationAgent;
     }
 
-    public function setCofinanceur(?string $cofinanceur): void
+    public function getJustificationValideur(): ?string
     {
-        $this->cofinanceur = $cofinanceur;
+        return $this->justificationValideur;
     }
 
-    public function getAgent(): ?Agent
+    public function setJustificationValideur(?string $justificationValideur): void
     {
-        return $this->agent;
+        $this->justificationValideur = $justificationValideur;
     }
 
-    public function setAgent(?Agent $agent): void
+    public function getJustificationGestionnaire(): ?string
     {
-        $this->agent = $agent;
+        return $this->justificationGestionnaire;
     }
 
-    public function generateTag(): string
+    public function setJustificationGestionnaire(?string $justificationGestionnaire): void
     {
-        return 'DemandeExterne_' . $this->getId();
+        $this->justificationGestionnaire = $justificationGestionnaire;
     }
 
-    public function isRqth(): bool
+    public function getJustificationResponsable(): ?string
     {
-        return false;
+        return $this->justificationResponsable;
     }
 
-    public function setRqth(bool $isRqth): void
+    public function setJustificationResponsable(?string $justificationResponsable): void
     {
+        $this->justificationResponsable = $justificationResponsable;
     }
 
-    public function getPrecisionRqth(): void
+    public function getJustificationDrh(): ?string
     {
+        return $this->justificationDrh;
     }
 
-    public function setPrecisionRqth(?string $precision = null): void
+    public function setJustificationDrh(?string $justificationDrh): void
     {
+        $this->justificationDrh = $justificationDrh;
     }
 
-    public function getJustificationResponsable(): ?string
+    public function getJustificationDgs(): ?string
     {
-        return $this->justificationResponsable;
+        return $this->justificationDgs;
     }
 
-    public function setJustificationResponsable(?string $justificationResponsable): void
+    public function setJustificationDgs(?string $justificationDgs): void
     {
-        $this->justificationResponsable = $justificationResponsable;
+        $this->justificationDgs = $justificationDgs;
     }
 
     public function getJustificationRefus(): ?string
@@ -316,6 +337,8 @@ class DemandeExterne implements HistoriqueAwareInterface, ResourceInterface, Has
         $this->justificationRefus = $justificationRefus;
     }
 
+
+
     public function getInscription(): ?Inscription
     {
         return $this->inscription;
diff --git a/module/DemandeExterne/src/Entity/Db/Mapping/DemandeExterne.Entity.Db.DemandeExterne.dcm.xml b/module/DemandeExterne/src/Entity/Db/Mapping/DemandeExterne.Entity.Db.DemandeExterne.dcm.xml
index d85881273da44d18c827858e4082b1dad3ed313e..3cfb39c2fba20cfb075cf6aa2a4413d15a83754c 100644
--- a/module/DemandeExterne/src/Entity/Db/Mapping/DemandeExterne.Entity.Db.DemandeExterne.dcm.xml
+++ b/module/DemandeExterne/src/Entity/Db/Mapping/DemandeExterne.Entity.Db.DemandeExterne.dcm.xml
@@ -1,54 +1,41 @@
 <?xml version="1.0" encoding="utf-8"?>
 <doctrine-mapping>
-    <entity name="DemandeExterne\Entity\Db\DemandeExterne" table="formation_demande_externe">
+    <entity name="DemandeExterne\Entity\Db\DemandeExterne" table="demandeexterne">
 
         <id name="id" type="integer" column="id">
             <generator strategy="IDENTITY"/>
         </id>
 
-        <field name="libelle"       column="libelle"        type="string"       length="1024"  />
-        <field name="organisme"     column="organisme"      type="string"       length="1024"  />
-        <field name="contact"       column="contact"        type="string"       length="1024"  />
-        <field name="missions"      column="missions"       type="text"                        />
-        <field name="pourquoi"      column="pourquoi"       type="text"                        />
-        <field name="montant"       column="montant"        type="float"                       />
-        <field name="lieu"          column="lieu"           type="string"       length="1024"  />
-        <field name="debut"         column="debut"          type="datetime"  />
-        <field name="fin"           column="fin"            type="datetime"  />
-        <field name="modalite"      column="modalite"       type="string"       length="1024"  />
+        <field name="libelle" column="libelle" type="string" length="1024"/>
+        <field name="organisme" column="organisme" type="string" length="1024"/>
+        <field name="contact" column="contact" type="string" length="1024"/>
+        <field name="missions" column="missions" type="text"/>
+        <field name="pourquoi" column="pourquoi" type="text"/>
+        <field name="fraisPedagogique" column="frais_pedagogique" type="float"/>
+        <field name="fraisAnnexe" column="frais_annexe" length="1024"/>
+        <field name="lieu" column="lieu" type="string" length="1024"/>
+        <field name="debut" column="debut" type="datetime"/>
+        <field name="fin" column="fin" type="datetime"/>
+        <field name="modalite" column="modalite" type="string" length="1024"/>
+        <field name="congeFormationSyndicale" column="conge_formation_syndicale" type="boolean"/>
 
-        <field name="congeFormationSyndicale" column="conge_formation_syndicale" type="boolean"  />
-        <field name="priseEnCharge" column="prise_en_charge" type="boolean"  />
-        <field name="cofinanceur"   column="cofinanceur"    type="string"       length="1024" />
-
-        <many-to-one target-entity="Agent\Entity\Db\Agent"  field="agent">
+        <many-to-one target-entity="Agent\Entity\Db\Agent" field="agent">
             <join-column name="agent_id" referenced-column-name="c_individu"/>
         </many-to-one>
 
         <many-to-many field="etats" target-entity="UnicaenEtat\Entity\Db\EtatInstance">
-            <join-table name="formation_demande_externe_etat">
+            <join-table name="demandeexterne_etat">
                 <join-columns>
-                    <join-column name="demande_id" referenced-column-name="id" />
-                </join-columns>
-                <inverse-join-columns>
-                    <join-column name="etat_id" referenced-column-name="id" />
-                </inverse-join-columns>
-            </join-table>
-        </many-to-many>
-
-        <many-to-many field="validations" target-entity="UnicaenValidation\Entity\Db\ValidationInstance">
-            <join-table name="formation_demande_externe_validation">
-                <join-columns>
-                    <join-column name="demande_id" referenced-column-name="id" />
+                    <join-column name="demande_id" referenced-column-name="id"/>
                 </join-columns>
                 <inverse-join-columns>
-                    <join-column name="validation_id" referenced-column-name="id" />
+                    <join-column name="etat_id" referenced-column-name="id"/>
                 </inverse-join-columns>
             </join-table>
         </many-to-many>
 
         <many-to-many field="fichiers" target-entity="Fichier\Entity\Db\Fichier" inversed-by="fichier" fetch="LAZY">
-            <join-table name="formation_demande_externe_fichier">
+            <join-table name="demandeexterne_fichier">
                 <join-columns>
                     <join-column name="demande_id" referenced-column-name="id"/>
                 </join-columns>
@@ -59,7 +46,7 @@
         </many-to-many>
 
         <many-to-many field="sessions" target-entity="Formation\Entity\Db\Session">
-            <join-table name="formation_demande_externe_session">
+            <join-table name="demandeexterne_session">
                 <join-columns>
                     <join-column name="demande_id" referenced-column-name="id"/>
                 </join-columns>
@@ -70,7 +57,7 @@
         </many-to-many>
 
         <many-to-many field="gestionnaires" target-entity="UnicaenUtilisateur\Entity\Db\User">
-            <join-table name="formation_demande_externe_gestionnaire">
+            <join-table name="demandeexterne_gestionnaire">
                 <join-columns>
                     <join-column name="demande_externe_id" referenced-column-name="id"/>
                 </join-columns>
@@ -80,28 +67,30 @@
             </join-table>
         </many-to-many>
 
-        <field name="justificationAgent"         column="justification_agent"                type="text"  />
-        <field name="justificationResponsable"   column="justification_responsable"          type="text"         nullable="true"/>
-        <field name="justificationGestionnaire"  column="justification_gestionnaire"         type="text"         nullable="true"/>
-        <field name="justificationDrh"           column="justification_drh"                  type="text"         nullable="true"/>
-        <field name="justificationRefus"         column="justification_refus"                type="text"         nullable="true"/>
+        <field name="justificationAgent" column="justification_agent" type="text"/>
+        <field name="justificationValideur" column="justification_valideur" type="text"/>
+        <field name="justificationGestionnaire" column="justification_gestionnaire" type="text" nullable="true"/>
+        <field name="justificationResponsable" column="justification_responsable" type="text" nullable="true"/>
+        <field name="justificationDrh" column="justification_drh" type="text" nullable="true"/>
+        <field name="justificationDgs" column="justification_dgs" type="text" nullable="true"/>
+        <field name="justificationRefus" column="justification_refus" type="text" nullable="true"/>
 
 
         <one-to-one field="inscription" target-entity="Formation\Entity\Db\Inscription">
-            <join-column name="inscription_id" referenced-column-name="id" />
+            <join-column name="inscription_id" referenced-column-name="id"/>
         </one-to-one>
 
         <!-- HISTORISATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-        <field name="histoCreation"     type="datetime"                 column="histo_creation"     nullable="false"/>
-        <field name="histoModification" type="datetime"                 column="histo_modification" nullable="false"/>
-        <field name="histoDestruction"  type="datetime"                 column="histo_destruction"  nullable="true"/>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoCreateur">
+        <field name="histoCreation" type="datetime" column="histo_creation" nullable="false"/>
+        <field name="histoModification" type="datetime" column="histo_modification" nullable="false"/>
+        <field name="histoDestruction" type="datetime" column="histo_destruction" nullable="true"/>
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoCreateur">
             <join-column name="histo_createur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoModificateur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoModificateur">
             <join-column name="histo_modificateur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoDestructeur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoDestructeur">
             <join-column name="histo_destructeur_id" referenced-column-name="ID"/>
         </many-to-one>
 
diff --git a/module/DemandeExterne/src/Form/DemandeExterne/DemandeExterneForm.php b/module/DemandeExterne/src/Form/DemandeExterne/DemandeExterneForm.php
index 4eb1922b555e78f82820c72b4c5279e19687d9ce..913bccc593fc3b77dfa72b8b726c0818f2d31454 100644
--- a/module/DemandeExterne/src/Form/DemandeExterne/DemandeExterneForm.php
+++ b/module/DemandeExterne/src/Form/DemandeExterne/DemandeExterneForm.php
@@ -3,6 +3,7 @@
 namespace DemandeExterne\Form\DemandeExterne;
 
 use Laminas\Form\Element\Button;
+use Laminas\Form\Element\Date;
 use Laminas\Form\Element\Email;
 use Laminas\Form\Element\Radio;
 use Laminas\Form\Element\Text;
@@ -10,7 +11,6 @@ use Laminas\Form\Element\Textarea;
 use Laminas\Form\Form;
 use Laminas\InputFilter\Factory;
 use Laminas\Validator\Regex;
-use UnicaenApp\Form\Element\Date;
 
 class DemandeExterneForm extends Form
 {
@@ -84,7 +84,18 @@ class DemandeExterneForm extends Form
 
         $this->add([
             'type' => Text::class,
-            'name' => 'montant',
+            'name' => 'frais_pedagogique',
+            'options' => [
+                'label' => "Frais pédagogiques <span class='icon icon-obligatoire' title='Champ obligatoire'></span>",
+                'label_options' => ['disable_html_escape' => true,]
+            ],
+            'attributes' => [
+                'id' => 'montant',
+            ],
+        ]);
+        $this->add([
+            'type' => Text::class,
+            'name' => 'frais_annexe',
             'options' => [
                 'label' => "Liste des frais annexes à prévoir (transport, hébergement, restauration, ...) <span class='icon icon-obligatoire' title='Champ obligatoire'></span>",
                 'label_options' => ['disable_html_escape' => true,]
@@ -115,7 +126,6 @@ class DemandeExterneForm extends Form
             'options' => [
                 'label' => "Date de début <span class='icon icon-obligatoire' title='Champ obligatoire'></span> :",
                 'label_options' => ['disable_html_escape' => true,],
-//                'format' => HasPeriodeFieldset::format,
             ],
             'attributes' => [
                 'id' => 'debut',
@@ -129,7 +139,6 @@ class DemandeExterneForm extends Form
             'options' => [
                 'label' => "Date de fin <span class='icon icon-obligatoire' title='Champ obligatoire'></span> :",
                 'label_options' => ['disable_html_escape' => true,],
-//                'format' => 'd/m/Y'
             ],
             'attributes' => [
                 'id' => 'fin',
@@ -239,7 +248,7 @@ class DemandeExterneForm extends Form
             'contact' => ['required' => true,],
             'missions' => ['required' => true,],
             'pourquoi' => ['required' => false,],
-            'montant' => [
+            'frais_pedagogique' => [
                 'required' => true,
                 'validators' => [
                     [
@@ -254,6 +263,7 @@ class DemandeExterneForm extends Form
                     ],
                 ],
             ],
+            'frais_annexe' => [ 'required' => true, ],
             'lieu' => ['required' => true,],
             'debut' => ['required' => true,],
             'fin' => ['required' => true,],
diff --git a/module/DemandeExterne/src/Form/DemandeExterne/DemandeExterneHydrator.php b/module/DemandeExterne/src/Form/DemandeExterne/DemandeExterneHydrator.php
index 50f49fd3a751976441a7edda77ef39f164a688b8..e78b6147a1addad9cc214fc382e2c7f2f4814564 100644
--- a/module/DemandeExterne/src/Form/DemandeExterne/DemandeExterneHydrator.php
+++ b/module/DemandeExterne/src/Form/DemandeExterne/DemandeExterneHydrator.php
@@ -17,15 +17,14 @@ class DemandeExterneHydrator implements HydratorInterface {
             'contact' => $object->getContact(),
             'missions' => $object->getMissions(),
             'pourquoi' => $object->getPourquoi(),
-            'montant' => $object->getMontant(),
+            'frais_pedagogique' => $object->getFraisPedagogique(),
+            'frais_annexe' => $object->getFraisAnnexe(),
             'lieu' => $object->getLieu(),
-            'debut' => $object->getDebut(),
-            'fin' => $object->getFin(),
+            'debut' => ($object->getDebut())?->format('Y-m-d'),
+            'fin' => ($object->getFin())?->format('Y-m-d'),
             'modalite' => $object->getModalite(),
             'motivation' => $object->getJustificationAgent(),
             'conge-formation-syndicale' => $object->isCongeFormationSyndicale(),
-            'prise-en-charge' => $object->isPriseEnCharge(),
-            'cofinanceur' => $object->getCofinanceur(),
         ];
 
 
@@ -39,15 +38,14 @@ class DemandeExterneHydrator implements HydratorInterface {
         $contact = (isset($data['contact']) AND trim($data['contact']) !== '')?trim($data['contact']):null;
         $missions = (isset($data['missions']) AND trim($data['missions']) !== '')?trim($data['missions']):null;
         $pourquoi = (isset($data['pourquoi']) AND trim($data['pourquoi']) !== '')?trim($data['pourquoi']):null;
-        $montant = (isset($data['montant']) AND trim($data['montant']) !== '')? ((float) trim($data['montant'])): null;
+        $fraisPedagogique = (isset($data['frais_pedagogique']) AND trim($data['frais_pedagogique']) !== '')? ((float) trim($data['frais_pedagogique'])): null;
+        $fraisAnnexe = (isset($data['frais_annexe']) AND trim($data['frais_annexe']) !== '')? trim($data['frais_annexe']): null;
         $lieu = (isset($data['lieu']) AND trim($data['lieu']) !== '')?trim($data['lieu']):null;
-        $debut = (isset($data['debut']) AND trim($data['debut']) !== '')?DateTime::createFromFormat('d/m/Y', $data['debut']):null;
-        $fin = (isset($data['fin']) AND trim($data['fin']) !== '')?DateTime::createFromFormat('d/m/Y', $data['fin']):null;
+        $debut = (isset($data['debut']) AND trim($data['debut']) !== '')?DateTime::createFromFormat('Y-m-d', $data['debut']):null;
+        $fin = (isset($data['fin']) AND trim($data['fin']) !== '')?DateTime::createFromFormat('Y-m-d', $data['fin']):null;
         $modalite = $data['modalite']??null;
         $motivation = (isset($data['motivation']) AND trim($data['motivation']) !== '')?trim($data['motivation']):null;
         $congeFormationSyndicale = isset($data['conge-formation-syndicale'])??true;
-        $priseEnCharge = isset($data['prise-en-charge'])??true;
-        $cofinanceur = (isset($data['cofinanceur']) AND trim($data['cofinanceur']) !== '')?trim($data['cofinanceur']):null;
 
         /** @var DemandeExterne $object */
         $object->setLibelle($libelle);
@@ -55,15 +53,14 @@ class DemandeExterneHydrator implements HydratorInterface {
         $object->setContact($contact);
         $object->setMissions($missions);
         $object->setPourquoi($pourquoi);
-        $object->setMontant($montant);
+        $object->setFraisPedagogique($fraisPedagogique);
+        $object->setFraisAnnexe($fraisAnnexe);
         $object->setLieu($lieu);
         $object->setDebut($debut);
         $object->setFin($fin);
         $object->setModalite($modalite);
         $object->setJustificationAgent($motivation);
         $object->setCongeFormationSyndicale($congeFormationSyndicale);
-        $object->setPriseEnCharge($priseEnCharge);
-        $object->setCofinanceur($cofinanceur);
 
         return $object;
     }
diff --git a/module/DemandeExterne/src/Provider/Etat/DemandeExterneEtats.php b/module/DemandeExterne/src/Provider/Etat/DemandeExterneEtats.php
index db855636e01bb74950d1dd2d690e843b779f695b..428754c5cba0ec62b0c4e6d568c4488e2a44d0c6 100644
--- a/module/DemandeExterne/src/Provider/Etat/DemandeExterneEtats.php
+++ b/module/DemandeExterne/src/Provider/Etat/DemandeExterneEtats.php
@@ -8,25 +8,27 @@ class DemandeExterneEtats {
 
     const ETAT_CREATION_EN_COURS       = 'DEMANDE_EXTERNE_REDACTION';
     const ETAT_VALIDATION_AGENT        = 'DEMANDE_EXTERNE_AGENT';
-    const ETAT_VALIDATION_RESP         = 'DEMANDE_EXTERNE_RESP';
+    const ETAT_VALIDATION_VALIDEUR     = 'DEMANDE_EXTERNE_VALIDEUR';
     const ETAT_VALIDATION_GESTIONNAIRE = 'DEMANDE_EXTERNE_GESTIONNAIRE';
+    const ETAT_VALIDATION_RESPONSABLE  = 'DEMANDE_EXTERNE_RESPONSABLE';
     const ETAT_VALIDATION_DRH          = 'DEMANDE_EXTERNE_DRH';
+    const ETAT_VALIDATION_DGS          = 'DEMANDE_EXTERNE_DGS';
     const ETAT_TERMINEE                = 'DEMANDE_EXTERNE_TERMINEE';
     const ETAT_REJETEE                 = 'DEMANDE_EXTERNE_REJETEE';
-    const ETAT_FORCEE_PARAPHEUR        = 'DEMANDE_EXTERNE_FORCEE_PARAPHEUR';
 
     const ETATS_ATTENTE_GESTION = [
-        DemandeExterneEtats::ETAT_VALIDATION_RESP,
+        DemandeExterneEtats::ETAT_VALIDATION_VALIDEUR,
         DemandeExterneEtats::ETAT_VALIDATION_GESTIONNAIRE,
-        DemandeExterneEtats::ETAT_FORCEE_PARAPHEUR];
+    ];
 
     const ETATS_OUVERTS = [
         DemandeExterneEtats::ETAT_CREATION_EN_COURS,
         DemandeExterneEtats::ETAT_VALIDATION_AGENT,
-        DemandeExterneEtats::ETAT_VALIDATION_RESP,
+        DemandeExterneEtats::ETAT_VALIDATION_VALIDEUR,
         DemandeExterneEtats::ETAT_VALIDATION_GESTIONNAIRE,
+        DemandeExterneEtats::ETAT_VALIDATION_RESPONSABLE,
         DemandeExterneEtats::ETAT_VALIDATION_DRH,
-        DemandeExterneEtats::ETAT_FORCEE_PARAPHEUR,
+        DemandeExterneEtats::ETAT_VALIDATION_DGS,
     ];
     const ETATS_FINAUX = [
         DemandeExterneEtats::ETAT_TERMINEE,
diff --git a/module/DemandeExterne/src/Provider/Privilege/DemandeexternePrivileges.php b/module/DemandeExterne/src/Provider/Privilege/DemandeexternePrivileges.php
index d6e4e49e32dfac5aa8bf959d968a71137a6c4cd7..df7dd32cd3731d1724aa4c0b516ed2fdd9bd63f3 100644
--- a/module/DemandeExterne/src/Provider/Privilege/DemandeexternePrivileges.php
+++ b/module/DemandeExterne/src/Provider/Privilege/DemandeexternePrivileges.php
@@ -13,9 +13,12 @@ class DemandeexternePrivileges extends Privileges
     const DEMANDEEXTERNE_HISTORISER = 'demandeexterne-demandeexterne_historiser';
     const DEMANDEEXTERNE_SUPPRIMER = 'demandeexterne-demandeexterne_supprimer';
     const DEMANDEEXTERNE_VALIDER_AGENT = 'demandeexterne-demandeexterne_valider_agent';
-    const DEMANDEEXTERNE_VALIDER_RESPONSABLE = 'demandeexterne-demandeexterne_valider_responsable';
+    const DEMANDEEXTERNE_VALIDER_VALIDEUR = 'demandeexterne-demandeexterne_valider_valideur';
     const DEMANDEEXTERNE_VALIDER_GESTIONNAIRE = 'demandeexterne-demandeexterne_valider_gestionnaire';
+    const DEMANDEEXTERNE_PARAPHEUR = 'demandeexterne-demandeexterne_parapheur';
+    const DEMANDEEXTERNE_VALIDER_RESPONSABLE = 'demandeexterne-demandeexterne_valider_responsable';
     const DEMANDEEXTERNE_VALIDER_DRH = 'demandeexterne-demandeexterne_valider_drh';
+    const DEMANDEEXTERNE_VALIDER_DGS = 'demandeexterne-demandeexterne_valider_dgs';
     const DEMANDEEXTERNE_GERER = 'demandeexterne-demandeexterne_gerer';
 
 }
\ No newline at end of file
diff --git a/module/DemandeExterne/src/Provider/Template/MailTemplates.php b/module/DemandeExterne/src/Provider/Template/MailTemplates.php
index 90e01d6b73187b2dda5581ebc3127226384c5461..e4702acf44ff4f06a1b0072f2ab167783515ff2c 100644
--- a/module/DemandeExterne/src/Provider/Template/MailTemplates.php
+++ b/module/DemandeExterne/src/Provider/Template/MailTemplates.php
@@ -4,10 +4,13 @@ namespace DemandeExterne\Provider\Template;
 
 class MailTemplates {
 
-    const DEMANDE_EXTERNE_VALIDATION_AGENT            = "FORMATION_DEMANDE_EXTERNE_VALIDATION_AGENT";
-    const DEMANDE_EXTERNE_VALIDATION_RESP_DRH         = "FORMATION_DEMANDE_EXTERNE_VALIDATION_RESP_DRH";
-    const DEMANDE_EXTERNE_VALIDATION_RESP_AGENT       = "FORMATION_DEMANDE_EXTERNE_VALIDATION_RESP_AGENT";
-    const DEMANDE_EXTERNE_VALIDATION_DRH              = "FORMATION_DEMANDE_EXTERNE_VALIDATION_DRH";
-    const DEMANDE_EXTERNE_VALIDATION_REFUS            = "FORMATION_DEMANDE_EXTERNE_VALIDATION_REFUS";
-    const DEMANDE_EXTERNE_VALIDATION_COMPLETE         = "FORMATION_DEMANDE_EXTERNE_TOTALEMENT_VALIDEE";
+    const DEMANDE_EXTERNE_VALIDATION_AGENT            = "DEMANDE_EXTERNE_VALIDATION_AGENT";
+    const DEMANDE_EXTERNE_VALIDEE_VALIDEUR_DRH        = "DEMANDE_EXTERNE_VALIDEE_VALIDEUR_DRH";
+    const DEMANDE_EXTERNE_VALIDEE_VALIDEUR_AGENT      = "DEMANDE_EXTERNE_VALIDEE_VALIDEUR_AGENT";
+
+    const DEMANDE_EXTERNE_DEMANDE_COMPLETE            = "DEMANDE_EXTERNE_DEMANDE_COMPLETE";
+    const DEMANDE_EXTERNE_DEMANDE_VALIDEE             = "DEMANDE_EXTERNE_DEMANDE_VALIDEE";
+    const DEMANDE_EXTERNE_DEMANDE_DRH                 = "DEMANDE_EXTERNE_DEMANDE_DRH";
+    const DEMANDE_EXTERNE_DEMANDE_DGS                 = "DEMANDE_EXTERNE_DEMANDE_DGS";
+    const DEMANDE_EXTERNE_VALIDATION_REFUS            = "DEMANDE_EXTERNE_VALIDATION_REFUS";
 }
\ No newline at end of file
diff --git a/module/DemandeExterne/src/Service/DemandeExterne/DemandeExterneService.php b/module/DemandeExterne/src/Service/DemandeExterne/DemandeExterneService.php
index 72627e76877baa3efa8292d09b5f8e2ab2f49426..ce7f8acf9adafb2aced89ffd915ec1eae7ba6cb2 100644
--- a/module/DemandeExterne/src/Service/DemandeExterne/DemandeExterneService.php
+++ b/module/DemandeExterne/src/Service/DemandeExterne/DemandeExterneService.php
@@ -22,6 +22,7 @@ use Formation\Service\Inscription\InscriptionServiceAwareTrait;
 use Formation\Service\Presence\PresenceServiceAwareTrait;
 use Formation\Service\Seance\SeanceServiceAwareTrait;
 use Formation\Service\Session\SessionServiceAwareTrait;
+use Formation\Service\SessionType\SessionTypeServiceAwareTrait;
 use Laminas\Mvc\Controller\AbstractActionController;
 use Structure\Entity\Db\Structure;
 use Structure\Service\Structure\StructureServiceAwareTrait;
@@ -40,6 +41,7 @@ class DemandeExterneService
     use EtatTypeServiceAwareTrait;
     use FormationServiceAwareTrait;
     use SessionServiceAwareTrait;
+    use SessionTypeServiceAwareTrait;
     use InscriptionServiceAwareTrait;
     use SeanceServiceAwareTrait;
     use PresenceServiceAwareTrait;
@@ -59,6 +61,8 @@ class DemandeExterneService
         if (!empty($etats)) {
             $qb = $qb->andWhere('decorateurEtatType.code in (:etats)')
                 ->setParameter('etats', $etats);
+        } else {
+            $qb = $qb->andWhere('decorateurEtat.type IS NULL');
         }
         return $qb;
     }
@@ -197,6 +201,21 @@ class DemandeExterneService
         return $result;
     }
 
+    /**
+     * @param Agent[] $agents
+     * @param string[]$etatTypeCodes
+     * @return DemandeExterne[]
+     */
+    public function getDemandesExternesByAgentsAndEtats(array $agents, array $etatTypeCodes): array
+    {
+        $qb = $this->createQueryBuilder()
+            ->andWhere('demande.agent = (:agents)')->setParameter('agents', $agents)
+            ->andWhere('demande.histoDestruction IS NULL');
+        $qb = DemandeExterne::decorateWithEtatsCodes($qb, 'demande', $etatTypeCodes);
+        $result = $qb->getQuery()->getResult();
+        return $result;
+    }
+
 
     /**
      * @var Agent[] $agents
@@ -387,7 +406,7 @@ class DemandeExterneService
      */
     public function getDemandesExternesNonValideesByAgents(array $agents, ?int $annee): array
     {
-        $etats = [DemandeExterneEtats::ETAT_VALIDATION_AGENT, DemandeExterneEtats::ETAT_VALIDATION_RESP];
+        $etats = [DemandeExterneEtats::ETAT_VALIDATION_AGENT, DemandeExterneEtats::ETAT_VALIDATION_VALIDEUR];
         $result = $this->getDemandesExternesValideesByAgentsAndEtats($agents, $etats, $annee);
         return $result;
     }
@@ -439,13 +458,15 @@ class DemandeExterneService
         $formation->setIdSource($formation->getId());
         $this->getFormationService()->update($formation);
 
+        $type = $this->getSessionTypeService()->getSessionTypeByLibelle("formation hors offre DRH");
+
         //session
         $session = new Session();
         $session->setFormation($formation);
         $session->setAutoInscription();
         $session->setNbPlacePrincipale(1);
         $session->setNbPlaceComplementaire(0);
-        $session->setType("stage externe");
+        $session->setType($type);
         $session->setSource(HasSourceInterface::SOURCE_EMC2);
         $this->getSessionService()->create($session);
         $this->getEtatInstanceService()->setEtatActif($session, SessionEtats::ETAT_CLOTURE_INSTANCE);
@@ -589,6 +610,26 @@ class DemandeExterneService
         return $dictionnaires;
     }
 
+    public function getDemandesExternesParapheurs(?int $annee = null, bool $withHisto = false): array
+    {
+        $types = [ /**  DemandeExterneEtats::ETAT_REJETEE, DemandeExterneEtats::ETAT_TERMINEE, **/
+                    DemandeExterneEtats::ETAT_VALIDATION_GESTIONNAIRE, DemandeExterneEtats::ETAT_VALIDATION_RESPONSABLE,
+                    DemandeExterneEtats::ETAT_VALIDATION_DRH, DemandeExterneEtats::ETAT_VALIDATION_DGS
+        ];
+        $qb = $this->createQueryBuilder()
+            ->join('etat.type', 'type')->addSelect('type')
+            ->andWhere('type.code IN (:types)')->setParameter('types', $types)
+        ;
+        if (!$withHisto) {
+            $qb = $qb->andWhere('demande.histoDestruction IS NULL');
+        }
+        if ($annee !== null) {
+            $qb !== $qb->andWhere('demande.debut >= :debutAnnee')->setParameter('debutAnnee', DateTime::createFromFormat('d/m/Y H:i', '01/01/'.$annee. ' 08:00'));
+        }
+
+        $result = $qb->getQuery()->getResult();
+        return $result;
+    }
 
 
 }
\ No newline at end of file
diff --git a/module/DemandeExterne/src/Service/DemandeExterne/DemandeExterneServiceFactory.php b/module/DemandeExterne/src/Service/DemandeExterne/DemandeExterneServiceFactory.php
index 04a19778fb8cf0e702008c5c38455327a874fcc3..31189e03b3cc443a01b9ac03e08bcee422bb9067 100644
--- a/module/DemandeExterne/src/Service/DemandeExterne/DemandeExterneServiceFactory.php
+++ b/module/DemandeExterne/src/Service/DemandeExterne/DemandeExterneServiceFactory.php
@@ -8,6 +8,7 @@ use Formation\Service\Inscription\InscriptionService;
 use Formation\Service\Presence\PresenceService;
 use Formation\Service\Seance\SeanceService;
 use Formation\Service\Session\SessionService;
+use Formation\Service\SessionType\SessionTypeService;
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\ContainerInterface;
 use Psr\Container\NotFoundExceptionInterface;
@@ -33,9 +34,10 @@ class DemandeExterneServiceFactory
          * @var EtatInstanceService $etatInstanceService
          * @var EtatTypeService $etatTypeService
          * @var FormationService $formationService
-         * @var SessionService $sessionService
          * @var InscriptionService $inscriptionService
          * @var SeanceService $seanceService
+         * @var SessionService $sessionService
+         * @var SessionTypeService $sessionTypeService
          * @var PresenceService $presenceService
          * @var StructureService $structureService
          * @var ValidationInstanceService $validationInstanceService
@@ -45,10 +47,11 @@ class DemandeExterneServiceFactory
         $etatInstanceService = $container->get(EtatInstanceService::class);
         $etatTypeService = $container->get(EtatTypeService::class);
         $formationService = $container->get(FormationService::class);
-        $sessionService = $container->get(SessionService::class);
         $inscriptionService = $container->get(InscriptionService::class);
         $presenceService = $container->get(PresenceService::class);
         $seanceService = $container->get(SeanceService::class);
+        $sessionService = $container->get(SessionService::class);
+        $sessionTypeService = $container->get(SessionTypeService::class);
         $structureService = $container->get(StructureService::class);
         $validationInstanceService = $container->get(ValidationInstanceService::class);
         $validationTypeService = $container->get(ValidationTypeService::class);
@@ -58,10 +61,11 @@ class DemandeExterneServiceFactory
         $service->setEtatInstanceService($etatInstanceService);
         $service->setEtatTypeService($etatTypeService);
         $service->setFormationService($formationService);
+        $service->setSeanceService($seanceService);
         $service->setSessionService($sessionService);
+        $service->setSessionTypeService($sessionTypeService);
         $service->setInscriptionService($inscriptionService);
         $service->setPresenceService($presenceService);
-        $service->setSeanceService($seanceService);
         $service->setStructureService($structureService);
         $service->setValidationInstanceService($validationInstanceService);
         $service->setValidationTypeService($validationTypeService);
diff --git a/module/DemandeExterne/src/Service/Notification/NotificationService.php b/module/DemandeExterne/src/Service/Notification/NotificationService.php
index dc03694327c847d9a9adfb15d6d3fb116a7c6d7e..7520e624c44a8bf7d35bca0d6577562b585e9005 100644
--- a/module/DemandeExterne/src/Service/Notification/NotificationService.php
+++ b/module/DemandeExterne/src/Service/Notification/NotificationService.php
@@ -4,52 +4,73 @@ namespace DemandeExterne\Service\Notification;
 
 use Agent\Entity\Db\Agent;
 use Agent\Entity\Db\AgentValidateur;
-use Agent\Service\Agent\AgentServiceAwareTrait;
 use Agent\Service\AgentValidateur\AgentValidateurServiceAwareTrait;
+use Application\Provider\Role\RoleProvider;
 use Application\Service\Macro\MacroServiceAwareTrait;
 use DemandeExterne\Entity\Db\DemandeExterne;
 use DemandeExterne\Provider\Template\MailTemplates;
-use DoctrineModule\Persistence\ProvidesObjectManager;
-use Formation\Entity\Db\Inscription;
+use DemandeExterne\Service\Url\UrlServiceAwareTrait;
 use Formation\Provider\Role\FormationRoles;
-use Formation\Service\Session\SessionServiceAwareTrait;
-use Formation\Service\Url\UrlServiceAwareTrait;
 use UnicaenMail\Entity\Db\Mail;
-use UnicaenMail\Service\Mail\MailServiceAwareTrait;
-use UnicaenParametre\Service\Parametre\ParametreServiceAwareTrait;
-use UnicaenRenderer\Service\Rendu\RenduServiceAwareTrait;
 use UnicaenUtilisateur\Entity\Db\User;
 use UnicaenUtilisateur\Service\Role\RoleServiceAwareTrait;
 use UnicaenUtilisateur\Service\User\UserServiceAwareTrait;
 
-class NotificationService
+class NotificationService extends \Application\Service\Notification\NotificationService
 {
-    use ProvidesObjectManager;
-    use AgentServiceAwareTrait;
     use AgentValidateurServiceAwareTrait;
-    use MailServiceAwareTrait;
-    use ParametreServiceAwareTrait;
-    use RenduServiceAwareTrait;
     use RoleServiceAwareTrait;
-    use SessionServiceAwareTrait;
     use UserServiceAwareTrait;
     use MacroServiceAwareTrait;
     use UrlServiceAwareTrait;
 
-    /** RECUPERATION DES MAILS *************************/
+    /** RECUPERATION DES MAILS ****************************************************************************************/
 
-    public function getMailsResponsablesFormations(): array
+    public function getMailsGestionnairesFormations(): string
     {
         $role = $this->getRoleService()->findByRoleId(FormationRoles::GESTIONNAIRE_FORMATION);
         $users = $this->getUserService()->findByRole($role);
         $mails = array_map(function (User $a) {
             return $a->getEmail();
         }, $users);
-        return $mails;
+        return implode(",", $mails);
 
     }
 
-    public function getMailsSuperieursByAgent(Agent $agent): array
+    public function getMailsResponsablesFormations(): string
+    {
+        $role = $this->getRoleService()->findByRoleId(FormationRoles::RESPONSABLE_FORMATION);
+        $users = $this->getUserService()->findByRole($role);
+        $mails = array_map(function (User $a) {
+            return $a->getEmail();
+        }, $users);
+        return implode(",", $mails);
+
+    }
+
+    public function getMailsDrh(): string
+    {
+        $role = $this->getRoleService()->findByRoleId(RoleProvider::DRH);
+        $users = $this->getUserService()->findByRole($role);
+        $mails = array_map(function (User $a) {
+            return $a->getEmail();
+        }, $users);
+        return implode(",", $mails);
+
+    }
+
+    public function getMailsDgs(): string
+    {
+        $role = $this->getRoleService()->findByRoleId(RoleProvider::DGS);
+        $users = $this->getUserService()->findByRole($role);
+        $mails = array_map(function (User $a) {
+            return $a->getEmail();
+        }, $users);
+        return implode(",", $mails);
+
+    }
+
+    public function getMailsSuperieursByAgent(Agent $agent): string
     {
         $responsables = $this->getAgentValidateurService()->getAgentsValidateursByAgent($agent);
         $email = array_map(
@@ -58,27 +79,14 @@ class NotificationService
             },
             $responsables
         );
-        return $email;
+        return implode(",", $email);
     }
 
-    public function generateAndSend(string $templateCode, $adresses, array $motsClefs = [], array $vars = []): ?Mail
-    {
-        $rendu = $this->getRenduService()->generateRenduByTemplateCode($templateCode, $vars);
-        $mail = $this->getMailService()->sendMail($adresses, $rendu->getSujet(), $rendu->getCorps(), 'Formation');
-        $motsClefs[] = $rendu->getTemplate()->generateTag();
-        $mail->setMotsClefs($motsClefs);
-        $this->getMailService()->update($mail);
-        return $mail;
-    }
-
-    /** PREPARATION POUR L'ENVOI DE MAIL */
-
-    public function generateVariableArray(Inscription $inscription): array
+    public function generateVariableArray(DemandeExterne $demande): array
     {
         $vars = [
-            'agent' => $inscription->getIndividu(),
-            'session' => $inscription->getSession(),
-            'inscription' => $inscription,
+            'agent' => $demande->getAgent(),
+            'demande' => $demande,
             'MacroService' => $this->getMacroService(),
             'UrlService' => $this->getUrlService(),
         ];
@@ -93,106 +101,86 @@ class NotificationService
     public function triggerValidationAgent(DemandeExterne $demande): ?Mail
     {
         $agent = $demande->getAgent();
-
-        $vars = [
-            'agent' => $demande->getAgent(),
-            'demande' => $demande,
-            'MacroService' => $this->getMacroService(),
-            'UrlService' => $this->getUrlService(),
-        ];
-        $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::DEMANDE_EXTERNE_VALIDATION_AGENT, $vars);
-        $mail = $this->getMailService()->sendMail($this->getMailsSuperieursByAgent($agent), $rendu->getSujet(), $rendu->getCorps(), 'Formation');
-        $mail->setMotsClefs([$rendu->getTemplate()->generateTag(), $demande->generateTag()]);
-        $this->getMailService()->update($mail);
+        $vars = $this->generateVariableArray($demande);
+        $mail = $this->generateAndSend(
+            MailTemplates::DEMANDE_EXTERNE_VALIDATION_AGENT, $this->getMailsSuperieursByAgent($agent),
+            [$demande->generateTag()], $vars);
         return $mail;
     }
 
     /** Notification envoyée vers l'agent·e lors de la validation par le ou la valideur·euse */
-    public function triggerValidationResponsableAgent(DemandeExterne $demande): ?Mail
+    public function triggerValidationValideurAgent(DemandeExterne $demande): ?Mail
     {
         $agent = $demande->getAgent();
-        $email = [$agent->getEmail()];
-
-        $vars = [
-            'agent' => $demande->getAgent(),
-            'demande' => $demande,
-            'MacroService' => $this->getMacroService(),
-            'UrlService' => $this->getUrlService(),
-        ];
-        $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::DEMANDE_EXTERNE_VALIDATION_RESP_AGENT, $vars);
-        $mail = $this->getMailService()->sendMail($email, $rendu->getSujet(), $rendu->getCorps(), 'Formation');
-        $mail->setMotsClefs([$rendu->getTemplate()->generateTag(), $demande->generateTag()]);
-        $this->getMailService()->update($mail);
+        $email = $agent->getEmail();
+        $vars = $this->generateVariableArray($demande);
+        $mail = $this->generateAndSend(
+            MailTemplates::DEMANDE_EXTERNE_VALIDEE_VALIDEUR_AGENT, $email,
+            [$demande->generateTag()], $vars);
         return $mail;
     }
 
     /** Notification envoyée vers le bureau des formations lors de la validation par le ou la valideur·euse */
-    public function triggerValidationResponsableDrh(DemandeExterne $demande): ?Mail
+    public function triggerValidationValideurDrh(DemandeExterne $demande): ?Mail
     {
-        $email = $this->getMailsResponsablesFormations();
-
-        $vars = [
-            'agent' => $demande->getAgent(),
-            'demande' => $demande,
-            'MacroService' => $this->getMacroService(),
-            'UrlService' => $this->getUrlService(),
-        ];
-        $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::DEMANDE_EXTERNE_VALIDATION_RESP_DRH, $vars);
-        $mail = $this->getMailService()->sendMail($email, $rendu->getSujet(), $rendu->getCorps(), 'Formation');
-        $mail->setMotsClefs([$rendu->getTemplate()->generateTag(), $demande->generateTag()]);
-        $this->getMailService()->update($mail);
+        $email = $this->getMailsGestionnairesFormations();
+        $vars = $this->generateVariableArray($demande);
+        $mail = $this->generateAndSend(
+            MailTemplates::DEMANDE_EXTERNE_VALIDEE_VALIDEUR_DRH, $email,
+            [$demande->generateTag()], $vars);
         return $mail;
     }
 
-    public function triggerValidationDrh(DemandeExterne $demande): ?Mail
+    public function triggerRefus(DemandeExterne $demande): ?Mail
     {
         $agent = $demande->getAgent();
-
-        $vars = [
-            'agent' => $demande->getAgent(),
-            'demande' => $demande,
-            'MacroService' => $this->getMacroService(),
-            'UrlService' => $this->getUrlService(),
-        ];
-        $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::DEMANDE_EXTERNE_VALIDATION_DRH, $vars);
-        $mail = $this->getMailService()->sendMail($this->getMailsSuperieursByAgent($agent), $rendu->getSujet(), $rendu->getCorps(), 'Formation');
-        $mail->setMotsClefs([$rendu->getTemplate()->generateTag(), $demande->generateTag()]);
-        $this->getMailService()->update($mail);
+        $vars = $this->generateVariableArray($demande);
+        $adresses = $agent->getEmail() . ",". $this->getMailsSuperieursByAgent($agent);
+        $mail = $this->generateAndSend(
+            MailTemplates::DEMANDE_EXTERNE_VALIDATION_REFUS, $adresses,
+            [$demande->generateTag()], $vars);
         return $mail;
     }
 
-    public function triggerRefus(DemandeExterne $demande): ?Mail
-    {
-        $agent = $demande->getAgent();
 
-        $vars = [
-            'agent' => $demande->getAgent(),
-            'demande' => $demande,
-            'MacroService' => $this->getMacroService(),
-            'UrlService' => $this->getUrlService(),
-        ];
-        $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::DEMANDE_EXTERNE_VALIDATION_REFUS, $vars);
-        $mail = $this->getMailService()->sendMail($this->getMailsSuperieursByAgent($agent), $rendu->getSujet(), $rendu->getCorps(), 'Formation');
-        $mail->setMotsClefs([$rendu->getTemplate()->generateTag(), $demande->generateTag()]);
-        $this->getMailService()->update($mail);
+    public function triggerDemandeComplete(DemandeExterne $demande): ?Mail
+    {
+        $email = $this->getMailsResponsablesFormations();
+        $vars = $this->generateVariableArray($demande);
+        $mail = $this->generateAndSend(
+            MailTemplates::DEMANDE_EXTERNE_DEMANDE_COMPLETE, $email,
+            [$demande->generateTag()], $vars);
         return $mail;
     }
 
 
-    public function triggerValidationComplete(DemandeExterne $demande): ?Mail
+    public function triggerDemandeValidee(DemandeExterne $demande): ?Mail
     {
-        $email = $this->getMailsResponsablesFormations();
+        $email = $demande->getAgent()->getEmail();
+        $vars = $this->generateVariableArray($demande);
+        $mail = $this->generateAndSend(
+            MailTemplates::DEMANDE_EXTERNE_DEMANDE_VALIDEE, $email,
+            [$demande->generateTag()], $vars);
+        return $mail;
+    }
 
-        $vars = [
-            'agent' => $demande->getAgent(),
-            'demande' => $demande,
-            'MacroService' => $this->getMacroService(),
-            'UrlService' => $this->getUrlService(),
-        ];
-        $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::DEMANDE_EXTERNE_VALIDATION_COMPLETE, $vars);
-        $mail = $this->getMailService()->sendMail($email, $rendu->getSujet(), $rendu->getCorps(), 'Formation');
-        $mail->setMotsClefs([$rendu->getTemplate()->generateTag(), $demande->generateTag()]);
-        $this->getMailService()->update($mail);
+    public function triggerDemandeDRH(DemandeExterne $demande): ?Mail
+    {
+        $email = $this->getMailsDrh();
+        $vars = $this->generateVariableArray($demande);
+        $mail = $this->generateAndSend(
+            MailTemplates::DEMANDE_EXTERNE_DEMANDE_DRH, $email,
+            [$demande->generateTag()], $vars);
+        return $mail;
+    }
+
+    public function triggerDemandeDGS(DemandeExterne $demande): ?Mail
+    {
+        $email = $this->getMailsDgs();
+        $vars = $this->generateVariableArray($demande);
+        $mail = $this->generateAndSend(
+            MailTemplates::DEMANDE_EXTERNE_DEMANDE_DGS, $email,
+            [$demande->generateTag()], $vars);
         return $mail;
     }
 
diff --git a/module/DemandeExterne/src/Service/Notification/NotificationServiceFactory.php b/module/DemandeExterne/src/Service/Notification/NotificationServiceFactory.php
index 2d794009f93f4c6829d4946643490739db1213dd..f9a36ca169ccc0e5ce9f072c90c08fdc861dd44b 100644
--- a/module/DemandeExterne/src/Service/Notification/NotificationServiceFactory.php
+++ b/module/DemandeExterne/src/Service/Notification/NotificationServiceFactory.php
@@ -2,12 +2,10 @@
 
 namespace DemandeExterne\Service\Notification;
 
-use Agent\Service\Agent\AgentService;
 use Agent\Service\AgentValidateur\AgentValidateurService;
 use Application\Service\Macro\MacroService;
 use Application\Service\NotificationConfiguration\NotificationConfigurationService;
-use Doctrine\ORM\EntityManager;
-use Formation\Service\Url\UrlService;
+use DemandeExterne\Service\Url\UrlService;
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\Containerinterface;
 use Psr\Container\NotFoundExceptionInterface;
@@ -17,7 +15,8 @@ use UnicaenRenderer\Service\Rendu\RenduService;
 use UnicaenUtilisateur\Service\Role\RoleService;
 use UnicaenUtilisateur\Service\User\UserService;
 
-class NotificationServiceFactory {
+class NotificationServiceFactory
+{
 
     /**
      * @param ContainerInterface $container
@@ -25,11 +24,9 @@ class NotificationServiceFactory {
      * @throws ContainerExceptionInterface
      * @throws NotFoundExceptionInterface
      */
-    public function __invoke(ContainerInterface $container) : NotificationService
+    public function __invoke(ContainerInterface $container): NotificationService
     {
         /**
-         * @var EntityManager $entityManager
-         * @var AgentService $agentService
          * @var AgentValidateurService $agentValidateurService
          * @var MailService $mailService
          * @var NotificationConfigurationService $notificationConfigurationService
@@ -40,8 +37,6 @@ class NotificationServiceFactory {
          * @var MacroService $macroService
          * @var UserService $userService
          */
-        $entityManager = $container->get('doctrine.entitymanager.orm_default');
-        $agentService = $container->get(AgentService::class);
         $agentValidateurService = $container->get(AgentValidateurService::class);
         $mailService = $container->get(MailService::class);
         $parametreService = $container->get(ParametreService::class);
@@ -52,8 +47,6 @@ class NotificationServiceFactory {
         $userService = $container->get(UserService::class);
 
         $service = new NotificationService();
-        $service->setObjectManager($entityManager);
-        $service->setAgentService($agentService);
         $service->setAgentValidateurService($agentValidateurService);
         $service->setMailService($mailService);
         $service->setParametreService($parametreService);
diff --git a/module/DemandeExterne/src/Service/Url/UrlService.php b/module/DemandeExterne/src/Service/Url/UrlService.php
new file mode 100644
index 0000000000000000000000000000000000000000..307aed1abdcee01088237bbff555c4c47fbbb853
--- /dev/null
+++ b/module/DemandeExterne/src/Service/Url/UrlService.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace DemandeExterne\Service\Url;
+
+use DemandeExterne\Controller\DemandeExterneController;
+
+class UrlService extends \Application\Service\Url\UrlService
+{
+    /** @noinspection PhpUnused :: macro URL#Parapheur */
+    public function getParapheurUrl(): string
+    {
+        /** @see DemandeExterneController::parapheurAction() */
+        $url = $this->renderer->url('demande-externe/parapheur', [], ['force_canonical' => true], true);
+        return UrlService::trueLink($url, 'Parapheur');
+    }
+
+    /** @noinspection PhpUnused :: macro Url#ValidateurDemandesExternes */
+    public function getUrlValidateurDemandesExternes(): string
+    {
+        /** @see AgentController::mesAgentsAction() */
+        $url = $this->renderer->url('mes-agents', [], ['fragment' => 'formation-liste', 'force_canonical' => true], true);
+        return UrlService::trueLink($url);
+    }
+
+    /** @noinspection PhpUnused :: macro Url#GestionDemandesExternes */
+    public function getUrlGestionDemandesExternes(): string
+    {
+        /** @see DemandeExterneController::indexAction() */
+        $url = $this->renderer->url('demande-externe', [], ['force_canonical' => true], true);
+        return UrlService::trueLink($url);
+    }
+}
\ No newline at end of file
diff --git a/module/DemandeExterne/src/Service/Url/UrlServiceAwareTrait.php b/module/DemandeExterne/src/Service/Url/UrlServiceAwareTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..9d989259105ffc19ab80a5ed8d17246544f6515f
--- /dev/null
+++ b/module/DemandeExterne/src/Service/Url/UrlServiceAwareTrait.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace DemandeExterne\Service\Url;
+
+trait UrlServiceAwareTrait {
+
+    private UrlService $urlService;
+
+    public function getUrlService(): UrlService
+    {
+        return $this->urlService;
+    }
+
+    public function setUrlService(UrlService $urlService): void
+    {
+        $this->urlService = $urlService;
+    }
+}
\ No newline at end of file
diff --git a/module/DemandeExterne/src/Service/Url/UrlServiceFactory.php b/module/DemandeExterne/src/Service/Url/UrlServiceFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..39c102a36e53cf40b91a77ba1bbbe1f036de5e05
--- /dev/null
+++ b/module/DemandeExterne/src/Service/Url/UrlServiceFactory.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace DemandeExterne\Service\Url;
+
+use Interop\Container\ContainerInterface;
+use Laminas\View\Renderer\PhpRenderer;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\NotFoundExceptionInterface;
+
+class UrlServiceFactory {
+
+    /**
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
+    public function __invoke(ContainerInterface $container) : UrlService
+    {
+        /* @var PhpRenderer $renderer  */
+        $renderer = $container->get('ViewRenderer');
+
+        $service = new UrlService();
+        $service->setRenderer($renderer);
+        return $service;
+    }
+}
\ No newline at end of file
diff --git a/module/Formation/src/Formation/View/Helper/DemandeExterneArrayViewHelper.php b/module/DemandeExterne/src/View/Helper/DemandeExterneArrayViewHelper.php
similarity index 71%
rename from module/Formation/src/Formation/View/Helper/DemandeExterneArrayViewHelper.php
rename to module/DemandeExterne/src/View/Helper/DemandeExterneArrayViewHelper.php
index 49ec8177cd8c806b1c7dcdf6517844e573833c95..4840d613fa098b3c04f9461a4cf860b17a7fa76d 100644
--- a/module/Formation/src/Formation/View/Helper/DemandeExterneArrayViewHelper.php
+++ b/module/DemandeExterne/src/View/Helper/DemandeExterneArrayViewHelper.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Formation\View\Helper;
+namespace DemandeExterne\View\Helper;
 
 use DemandeExterne\Entity\Db\DemandeExterne;
 use DemandeExterne\Provider\Parametre\DemandeExterneParametres;
@@ -26,6 +26,6 @@ class DemandeExterneArrayViewHelper extends AbstractHelper
         $view = $this->getView();
         $view->resolver()->attach(new TemplatePathStack(['script_paths' => [__DIR__ . "/partial"]]));
 
-        return $view->partial('demande-externe-array', ['demandes' => $demandes, 'plafond' => $this->getParametreService()->getValeurForParametre(DemandeExterneParametres::TYPE, DemandeExterneParametres::PLAFOND_DRH), 'options' => $options]);
+        return $view->partial('demande-externe-array', ['demandes' => $demandes, 'plafond1' => $this->getParametreService()->getValeurForParametre(DemandeExterneParametres::TYPE, DemandeExterneParametres::PLAFOND_DRH), 'plafond2' => $this->getParametreService()->getValeurForParametre(DemandeExterneParametres::TYPE, DemandeExterneParametres::PLAFOND_DGS), 'options' => $options]);
     }
 }
\ No newline at end of file
diff --git a/module/Formation/src/Formation/View/Helper/DemandeExterneArrayViewHelperFactory.php b/module/DemandeExterne/src/View/Helper/DemandeExterneArrayViewHelperFactory.php
similarity index 94%
rename from module/Formation/src/Formation/View/Helper/DemandeExterneArrayViewHelperFactory.php
rename to module/DemandeExterne/src/View/Helper/DemandeExterneArrayViewHelperFactory.php
index 71e32055c5d6043a413a606f47e36251475a3f2c..74572a019c84450cf0bac9f92491e3b11c00a3f8 100644
--- a/module/Formation/src/Formation/View/Helper/DemandeExterneArrayViewHelperFactory.php
+++ b/module/DemandeExterne/src/View/Helper/DemandeExterneArrayViewHelperFactory.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Formation\View\Helper;
+namespace DemandeExterne\View\Helper;
 
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\ContainerInterface;
diff --git a/module/Formation/src/Formation/View/Helper/DemandeExterneViewHelper.php b/module/DemandeExterne/src/View/Helper/DemandeExterneViewHelper.php
similarity index 95%
rename from module/Formation/src/Formation/View/Helper/DemandeExterneViewHelper.php
rename to module/DemandeExterne/src/View/Helper/DemandeExterneViewHelper.php
index 18a669bacfb9f637cada159253d33f44f7936714..d0f2a978771a863f155ee44c8a6632c1b518839c 100644
--- a/module/Formation/src/Formation/View/Helper/DemandeExterneViewHelper.php
+++ b/module/DemandeExterne/src/View/Helper/DemandeExterneViewHelper.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Formation\View\Helper;
+namespace DemandeExterne\View\Helper;
 
 use DemandeExterne\Entity\Db\DemandeExterne;
 use Laminas\View\Helper\AbstractHelper;
diff --git a/module/Formation/src/Formation/View/Helper/partial/demande-externe-array.phtml b/module/DemandeExterne/src/View/Helper/partial/demande-externe-array.phtml
similarity index 69%
rename from module/Formation/src/Formation/View/Helper/partial/demande-externe-array.phtml
rename to module/DemandeExterne/src/View/Helper/partial/demande-externe-array.phtml
index 28a1af26032411b23dab80747f6843660a3ebe5a..55bbec763d60357baf1b903ef72e7cc1868c48b0 100644
--- a/module/Formation/src/Formation/View/Helper/partial/demande-externe-array.phtml
+++ b/module/DemandeExterne/src/View/Helper/partial/demande-externe-array.phtml
@@ -4,11 +4,21 @@ use DemandeExterne\Entity\Db\DemandeExterne;
 use DemandeExterne\Provider\Etat\DemandeExterneEtats;
 use DemandeExterne\Provider\Privilege\DemandeexternePrivileges;
 use Fichier\Entity\Db\Fichier;
+use Random\RandomException;
+
+try {
+    $random = random_int(1, 10000000);
+} catch (RandomException $e) {
+    throw new RuntimeException("Problème de génération de l'identifiant du tableau", 0, $e);
+}
+$table_id = 'demandes_' . $random;
+
 
 /**
- * @see \Formation\View\Helper\DemandeExterneArrayViewHelper
+ * @see \DemandeExterne\View\Helper\DemandeExterneArrayViewHelper
  * @var DemandeExterne[] $demandes
- * @var float $plafond
+ * @var float $plafond1
+ * @var float $plafond2
  */
 
 $canAfficher = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_AFFICHER));
@@ -21,7 +31,6 @@ $canValider = $this->isAllowed(DemandeexternePrivileges::getResourceId(Demandeex
 $canTelechargerDevis = $canGerer;
 $canTeleverserDevis = $canGerer;
 
-
 $displayGestionnaire = true;
 if (isset($options['affichage']) and isset($options['affichage']['gestionnaires'])) {
     $displayGestionnaire = $options['affichage']['gestionnaires'];
@@ -31,47 +40,89 @@ $sizeDevis = 2;
 if (!$displayGestionnaire) $sizeDevis += 2;
 ?>
 
-<table class="table table-condensed table-hover">
+<table class="table table-condensed table-hover" id="<?php echo $table_id; ?>">
     <thead>
     <tr>
-        <th class="col-md-2"> Agent</th>
-        <?php if ($displayGestionnaire) : ?>
-            <th class="col-md-2"> Gestionnaires</th> <?php endif; ?>
-        <th class="col-md-2"> Formation</th>
-        <th class="col-md-1"> Organisme</th>
-        <th class="col-md-<?php echo $sizeDevis; ?>"> Devis</th>
-        <th class="col-md-1"> État</th>
-        <th class="col-md-2"> Action</th>
+        <th> Agent</th>
+        <th> Structure·s d'affectation</th>
+        <th> Date de la demande</th>
+        <th> Intitulé de la formation</th>
+        <th data-type="num"> Période de formation</th>
+        <th> Organisme</th>
+        <th> Devis</th>
+        <th> État</th>
+        <th style="width:8rem;"> Action</th>
     </tr>
     </thead>
     <tbody>
     <?php foreach ($demandes as $demande) : ?>
+        <?php
+        $agent = $demande->getAgent();
+        $affectations = $agent->getAffectationsActifs();
+        ?>
         <tr class=" <?php if ($demande->estHistorise()) echo " historise "; ?> ">
-            <td> <?php echo $demande->getAgent()->getDenomination(); ?> </td>
-            <?php if ($displayGestionnaire) : ?>
-                <td class="gestionnaire">
+            <td>
+                <?php echo $agent->getDenomination(); ?>
+                <?php if ($displayGestionnaire) : ?>
+                    <small>
+                    <br>
                     <?php if (empty($demande->getGestionnaires())) : ?>
-                        Aucun·e gestionnaire
+                        Aucun·e gestionnaire <br>
                     <?php else : ?>
+                        Gestionnaire·s :
                         <ul>
                             <?php foreach ($demande->getGestionnaires() as $gestionnaire) : ?>
                                 <li> <?php echo $gestionnaire->getDisplayName(); ?> </li>
                             <?php endforeach; ?>
                         </ul>
                     <?php endif; ?>
-                </td>
-            <?php endif; ?>
+                    <?php if ($canGerer) : ?>
+                        <?php /** @see DemandeExterneController::selectionnerGestionnairesAction() */ ?>
+                        <a href="<?php echo $this->url('demande-externe/selectionner-gestionnaires', ['demande-externe' => $demande->getId()], [], true); ?>"
+                           class="action primary ajax-modal" data-event="modification" style="font-size:small;">
+                            <span class="icon icon-gerer"></span>
+                            Renseigner les gestionnaires
+                        </a>
+                    <?php endif; ?>
+                    </small>
+                <?php endif; ?>
+            </td>
+            <td>
+                <?php foreach ($affectations as $affectation) : ?>
+                    <?php
+                        $structure = $affectation->getStructure();
+                        $niv2 = $structure->getNiv2();
+                    ?>
+                    <?php if ($niv2 AND $niv2 !== $structure) : ?>
+                        <?php echo $niv2->getLibelleCourt(); ?> <br>
+                    <?php endif; ?>
+                    <?php echo $structure->getLibelleCourt(); ?>
+                <?php endforeach; ?>
+            </td>
+            <td> <?php echo $demande->getHistoCreation()->format('d/m/Y'); ?> </td>
+
             <td> <?php echo $demande->getLibelle(); ?> </td>
+            <td data-order="<?php echo $demande->getDebut()?->getTimestamp(); ?>">
+                <?php echo $demande->getPeriode(); ?>
+            </td>
             <td> <?php echo $demande->getOrganisme(); ?> </td>
 
             <td class="action devis">
-                Montant: <?php echo $demande->getMontant(); ?>
-                <?php if ($demande->getMontant() >= $plafond) : ?>
+                Frais pédagogique : <?php echo $demande->getFraisPedagogique(); ?> <br>
+                Frais annexe : <?php echo $demande->getFraisAnnexe(); ?> <br>
+                <?php if (isset($plafond1) and $demande->getFraisPedagogique() >= $plafond1) : ?>
                     <span class="text-warning">
                         <span class="icon icon-attention"
                               title="Plafond dépassé ! Nécessite validation de la DRH."></span>
+                        DRH
                     </span>
                 <?php endif; ?>
+                <?php if (isset($plafond2) and $demande->getFraisPedagogique() >= $plafond2) : ?>
+                    <span class="text-warning">
+                        <span class="icon icon-attention"
+                              title="Plafond dépassé ! Nécessite validation de la DGS."></span>
+                    </span> DGS
+                <?php endif; ?>
                 <br>
                 <?php if (empty($demande->getDevis())) : ?>
                     <span class="text-danger">
@@ -147,7 +198,7 @@ if (!$displayGestionnaire) $sizeDevis += 2;
 
             </td>
             <td>
-                <?php echo $this->etatinstance($demande->getEtatActif(), ['display-categorie' => false]); ?>
+                <?php echo $this->etatinstance($demande->getEtatActif(), ['display-libelle' => true, 'display-categorie' => false]); ?>
             </td>
             <td class="action">
                 <?php if ($canAfficher) : ?>
@@ -165,14 +216,14 @@ if (!$displayGestionnaire) $sizeDevis += 2;
                     >
                         <span class="icon icon-editer"></span> Modifier </a>
                 <?php endif; ?>
-                <?php if ($canValider and $demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_RESP)): ?>
+                <?php if ($canValider and $demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_VALIDEUR)): ?>
                     <br>
                     <?php /** @see DemandeExterneController::validerGestionnaireAction() */ ?>
                     <a href="<?php echo $this->url('demande-externe/valider-gestionnaire', ['demande-externe' => $demande->getId()], [], true); ?>"
                        class="ajax-modal action success" data-event="modification"
                     >
-                        <span class="icon icon-checked"></span>
-                        Valider
+                        <span class="icon icon-commentaire"></span>
+                        Commentaire
                     </a>
                     <br>
                     <?php /** @see DemandeExterneController::refuserGestionnaireAction() */ ?>
@@ -183,47 +234,38 @@ if (!$displayGestionnaire) $sizeDevis += 2;
                         Refuser
                     </a>
 
-                    <?php if ($demande->getMontant() > $plafond) : ?>
+                    <?php if ($demande->getMontant() > $plafond1) : ?>
                         <span class="text-danger">
                         <br>
                         <strong>Nécessite DRH</strong>
                         </span>
                     <?php endif; ?>
-                <?php endif; ?>
-
-
-                <?php if ($canGerer && ($plafond !== null and $plafond < $demande->getMontant()) or $demande->isEtatActif(DemandeExterneEtats::ETAT_CREATION_EN_COURS)) : ?>
-                    <br>
-                    <?php /** @see DemandeExterneController::envoyerParapheurAction() */ ?>
-                    <a href="<?php echo $this->url('demande-externe/envoyer-parapheur', ['demande-externe' => $demande->getId()], [], true); ?>"
-                       class="ajax-modal" data-event="modification"
-                    >
-                        <span class="icon icon-importer"></span> Envoyer parapheur DRH
-                    </a>
-                    <?php /** @see DemandeExterneController::refuserGestionnaireAction() */ ?>
-                    <a href="<?php echo $this->url('demande-externe/refuser-gestionnaire', ['demande-externe' => $demande->getId()], [], true); ?>"
-                       class="ajax-modal" data-event="modification"
-                    >
-                            <span class="text-danger">
-                                <span class="icon icon-ko"></span> Refuser
-                            </span>
-                    </a>
+                    <?php if ($demande->getMontant() > $plafond2) : ?>
+                        <span class="text-danger">
+                        <br>
+                        <strong>Nécessite DGS</strong>
+                        </span>
+                    <?php endif; ?>
                 <?php endif; ?>
                 <?php if ($canGerer) : ?>
-                    <br>
-                    <?php if ($demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_DRH)) : ?>
-                        <?php /** @see DemandeExterneController::gererAction() */ ?>
-                        <a href="<?php echo $this->url('demande-externe/gerer', ['demande-externe' => $demande->getId()], [], true); ?>"
-                           class="ajax-modal" data-event="modification"
-                        >
-                            <span class="icon icon-cloner" title=""></span>
-                            Transformer
-                        </a>
-                    <?php else : ?>
-                        <span class="text-warning" title="La demande n'est pas dans un état valide">
-                            <span class="icon icon-cloner nope"></span>
-                            Transformer
-                        </span>
+
+                    <?php if ($demande->isEtatActif(DemandeExterneEtats::ETAT_TERMINEE)) : ?>
+                        <br>
+                        <?php if ($demande->getInscription() === null) : ?>
+                            <?php /** @see DemandeExterneController::gererAction() */ ?>
+                            <a href="<?php echo $this->url('demande-externe/gerer', ['demande-externe' => $demande->getId()], [], true); ?>"
+                               class="ajax-modal action warning" data-event="modification"
+                            >
+                                <span class="icon icon-cloner" title=""></span>
+                                Transformer
+                            </a>
+                        <?php else : ?>
+                            <?php /** @see \Formation\Controller\SessionController::afficherAction() */ ?>
+                            <a href="<?php echo $this->url('session/afficher', ['session' => $demande->getInscription()->getSession()->getId()], ['fragment' => 'inscriptions'], true); ?>">
+                                <span class="icon icon-voir"></span>
+                                Voir l'inscription
+                            </a>
+                        <?php endif; ?>
                     <?php endif; ?>
                 <?php endif; ?>
                 <?php if ($canHistoriser) : ?>
@@ -260,3 +302,21 @@ if (!$displayGestionnaire) $sizeDevis += 2;
     <?php endforeach; ?>
     </tbody>
 </table>
+
+
+<script>
+    $(function () {
+        $('table#<?php echo $table_id; ?>').DataTable({
+            paging: false,
+            autoWidth: false,
+            // order: [[1, 'asc']],
+            columnDefs: [{
+                "targets": 8,
+                "orderable": false
+            }],
+            "language": {
+                "url": "/js/datatables_fr.json",
+            }
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/module/Formation/src/Formation/View/Helper/partial/demande-externe.phtml b/module/DemandeExterne/src/View/Helper/partial/demande-externe.phtml
similarity index 78%
rename from module/Formation/src/Formation/View/Helper/partial/demande-externe.phtml
rename to module/DemandeExterne/src/View/Helper/partial/demande-externe.phtml
index 54ab152302ddf9e1c192d2f965d3a247a08ea56d..02fca20ac9fcbdfc0707faf39270e8a517de37a9 100644
--- a/module/Formation/src/Formation/View/Helper/partial/demande-externe.phtml
+++ b/module/DemandeExterne/src/View/Helper/partial/demande-externe.phtml
@@ -7,7 +7,7 @@ use DemandeExterne\Provider\Validation\DemandeExterneValidations;
 use Fichier\Entity\Db\Fichier;
 
 /**
- * @see \Formation\View\Helper\DemandeExterneViewHelper
+ * @see \DemandeExterne\View\Helper\DemandeExterneViewHelper
  * @var DemandeExterne $demande
  * @var array $options
  */
@@ -96,7 +96,7 @@ $action = $options['action'] ?? true;
                        class="btn btn-success ajax-modal <?php if (!$canValiderAgentDemande or empty($demande->isJustificatifsOk())) echo " disabled "; ?> "
                        data-event="modification">
                         <span class="icon icon-valider"></span>
-                        Valider la demande (Agent)
+                        Finaliser la demande et notifier mes valideur·euses
                     </a>
                 <?php endif; ?>
                 <?php if ($canModifierDemande) : ?>
@@ -106,10 +106,11 @@ $action = $options['action'] ?? true;
                         <span class="icon icon-modifier"></span>
                         Modifier la demande
                     </a>
+                <br>
                     <?php /** @see DemandeExterneController::ajouterDevisAction() */ ?>
                     <a href="<?php echo $this->url('demande-externe/ajouter-devis', ['demande-externe' => $demande->getId()], [], true); ?>"
                        class="btn btn-primary ajax-modal" data-event="modification">
-                        <span class="icon icon-televerser"></span>Ajouter un devis</a><br/>
+                        <span class="icon icon-televerser"></span>Ajouter un devis</a>
                     <?php /** @see DemandeExterneController::ajouterProgrammeAction() */ ?>
                     <a href="<?php echo $this->url('demande-externe/ajouter-programme', ['demande-externe' => $demande->getId()], [], true); ?>"
                        class="btn btn-primary ajax-modal" data-event="modification">
@@ -117,7 +118,7 @@ $action = $options['action'] ?? true;
                 <?php endif ?>
                 <?php /** @see DemandeExterneController::historiserAction() */ ?>
                 <a href="<?php echo $this->url('demande-externe/historiser', ['demande-externe' => $demande->getId()], ['query' => ['retour' => $retour]], true); ?>"
-                   class="btn btn-danger <?php if (!$canHistoriserDemande) echo " disabled "; ?> ">
+                   class="btn btn-danger ajax-modal <?php if (!$canHistoriserDemande) echo " disabled "; ?> " data-event="modification">
                     <span class="icon icon-unchecked"></span>
                     J'annule mon inscription
                 </a>
@@ -125,24 +126,24 @@ $action = $options['action'] ?? true;
         <?php endif; ?>
 
         <!-- VALIDATION  ------------------------------------------------------------------------------------------------------->
-        <div>
-            <small>
-                <?php $validationAgent = $demande->getValidationsByTypeCode(DemandeExterneValidations::FORMATION_DEMANDE_AGENT); ?>
-                <?php if (!empty($validationAgent)) : ?>
-                    Validée par l'agent (<?php echo $validationAgent[0]->getHistoCreateur()->getDisplayName(); ?>) le <?php echo $validationAgent[0]->getHistoCreation()->format('d/m/Y'); ?>.
-                    <br/>
-                <?php endif; ?>
-                <?php $validationResponsable = $demande->getValidationsByTypeCode(DemandeExterneValidations::FORMATION_DEMANDE_RESPONSABLE); ?>
-                <?php if (!empty($validationResponsable)) : ?>
-                    Validée par le responsable (<?php echo $validationResponsable[0]->getHistoCreateur()->getDisplayName(); ?>) le <?php echo $validationResponsable[0]->getHistoCreation()->format('d/m/Y'); ?>.
-                    <br/>
-                <?php endif; ?>
-                <?php $validationDrh = $demande->getValidationsByTypeCode(DemandeExterneValidations::FORMATION_DEMANDE_DRH); ?>
-                <?php if (!empty($validationDrh)) : ?>
-                    Validée par le bureau de formation (<?php echo $validationDrh[0]->getHistoCreateur()->getDisplayName(); ?>) le <?php echo $validationDrh[0]->getHistoCreation()->format('d/m/Y'); ?>.
-                    <br/>
-                <?php endif; ?>
-            </small>
-        </div>
+<!--        <div>-->
+<!--            <small>-->
+<!--                --><?php //$validationAgent = $demande->getValidationsByTypeCode(DemandeExterneValidations::FORMATION_DEMANDE_AGENT); ?>
+<!--                --><?php //if (!empty($validationAgent)) : ?>
+<!--                    Validée par l'agent (--><?php //echo $validationAgent[0]->getHistoCreateur()->getDisplayName(); ?><!--) le --><?php //echo $validationAgent[0]->getHistoCreation()->format('d/m/Y'); ?><!--.-->
+<!--                    <br/>-->
+<!--                --><?php //endif; ?>
+<!--                --><?php //$validationResponsable = $demande->getValidationsByTypeCode(DemandeExterneValidations::FORMATION_DEMANDE_RESPONSABLE); ?>
+<!--                --><?php //if (!empty($validationResponsable)) : ?>
+<!--                    Validée par le responsable (--><?php //echo $validationResponsable[0]->getHistoCreateur()->getDisplayName(); ?><!--) le --><?php //echo $validationResponsable[0]->getHistoCreation()->format('d/m/Y'); ?><!--.-->
+<!--                    <br/>-->
+<!--                --><?php //endif; ?>
+<!--                --><?php //$validationDrh = $demande->getValidationsByTypeCode(DemandeExterneValidations::FORMATION_DEMANDE_DRH); ?>
+<!--                --><?php //if (!empty($validationDrh)) : ?>
+<!--                    Validée par le bureau de formation (--><?php //echo $validationDrh[0]->getHistoCreateur()->getDisplayName(); ?><!--) le --><?php //echo $validationDrh[0]->getHistoCreation()->format('d/m/Y'); ?><!--.-->
+<!--                    <br/>-->
+<!--                --><?php //endif; ?>
+<!--            </small>-->
+<!--        </div>-->
     </div>
 </div>
diff --git a/module/DemandeExterne/view/demande-externe/demande-externe/afficher-agent.phtml b/module/DemandeExterne/view/demande-externe/demande-externe/afficher-agent.phtml
index a0c3efeed5e5eddfc2a7397df67e8e5c64179d70..31bdcd55b4a9213f50f33b4d9c6e44b11fc5a980 100644
--- a/module/DemandeExterne/view/demande-externe/demande-externe/afficher-agent.phtml
+++ b/module/DemandeExterne/view/demande-externe/demande-externe/afficher-agent.phtml
@@ -25,7 +25,7 @@ $statuts = AgentStatut::generateStatutsArray($agentStatuts);
         <dl class="row">
             <dt class="col-md-4"> Dénomination</dt>
             <dd class="col-md-8"> <?php echo $agent->getDenomination(); ?> </dd>
-            <dt class="col-md-4"> Validateur·trices</dt>
+            <dt class="col-md-4"> Valideur·euses</dt>
             <dd class="col-md-8">
                 <ul>
                     <?php foreach ($validateurs as $validateur) : ?>
@@ -44,7 +44,7 @@ $statuts = AgentStatut::generateStatutsArray($agentStatuts);
                         <li>
                             <?php
                             $structure = $agentAffectation->getStructure();
-                            $niveau2 = $structure ? $structure->getNiv2() : null;
+                            $niveau2 = $structure?->getNiv2();
                             ?>
                             <?php if ($structure) : ?>
                                 <?php echo $structure->getLibelleLong(); ?>
@@ -79,7 +79,6 @@ $statuts = AgentStatut::generateStatutsArray($agentStatuts);
                         <li>
                             <?php echo ($grade) ? $grade->getLibelleLong() : "Grade non renseigné"; ?> <br/>
                             <?php echo ($corps) ? $corps->getLibelleLong() : "Corps non renseigné"; ?> <br/>
-                            <?php //echo ($correspondance) ? $correspondance->getLibelleLong() : "Correspondance non renseignée"; ?>
                         </li>
                     <?php endforeach; ?>
                 </ul>
diff --git a/module/DemandeExterne/view/demande-externe/demande-externe/afficher.phtml b/module/DemandeExterne/view/demande-externe/demande-externe/afficher.phtml
index 415a624611899e202c17a8c445db1599a5cd9139..381ea63315cc0654edf559e9dfc4cf0696b9f06c 100644
--- a/module/DemandeExterne/view/demande-externe/demande-externe/afficher.phtml
+++ b/module/DemandeExterne/view/demande-externe/demande-externe/afficher.phtml
@@ -3,8 +3,8 @@
 use Agent\Entity\Db\Agent;
 use DemandeExterne\Entity\Db\DemandeExterne;
 use DemandeExterne\Provider\Etat\DemandeExterneEtats;
+use DemandeExterne\Provider\Privilege\DemandeexternePrivileges;
 use Formation\Provider\Privilege\FormationinstancePrivileges;
-use DemandeExterne\Provider\Validation\DemandeExterneValidations;
 
 /**
  * @see DemandeExterneController::afficherAction()
@@ -16,7 +16,9 @@ use DemandeExterne\Provider\Validation\DemandeExterneValidations;
 
 $canAfficherSession = $this->isAllowed(FormationinstancePrivileges::getResourceId(FormationinstancePrivileges::FORMATIONINSTANCE_AFFICHER));
 $canModifierSession = $this->isAllowed(FormationinstancePrivileges::getResourceId(FormationinstancePrivileges::FORMATIONINSTANCE_MODIFIER));
-$canGererGestionnaires = $canModifierSession;
+
+$canGererGestionnaires = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_GERER));
+
 ?>
 
 <?php if ($canModifierSession) : ?>
@@ -118,7 +120,11 @@ $canGererGestionnaires = $canModifierSession;
             <dd class="col-md-4"> <?php echo $demande->getLieu(); ?> </dd>
             <dt class="col-md-2"> Periode :</dt>
             <dd class="col-md-4"> <?php echo $demande->getDebut()->format('d/m/Y'); ?> au <?php echo $demande->getFin()->format('d/m/Y'); ?> </dd>
-            <dt class="col-md-4"> Montant : </dt>
+            <dt class="col-md-4"> Frais pédagogiques : </dt>
+            <dd class="col-md-8"><?php echo $demande->getFraisPedagogique(); ?> </dd>
+            <dt class="col-md-4"> Frais annexes : </dt>
+            <dd class="col-md-8"><?php echo $demande->getFraisAnnexe(); ?> </dd>
+            <dt class="col-md-4"> Montant total : </dt>
             <dd class="col-md-8"><?php echo $demande->getMontant(); ?> </dd>
         </dl>
 
@@ -139,13 +145,6 @@ $canGererGestionnaires = $canModifierSession;
             </dl>
         </div>
 
-        <h3> Cofinancement </h3>
-        <dl class="row">
-            <dt class="col-md-4"> Prise en charge </dt>
-            <dd class="col-md-8"> <?php echo ($demande->isPriseEnCharge())?"Oui" : "Non"; ?> </dd>
-            <dt class="col-md-4"> Cofinanceur </dt>
-            <dd class="col-md-8"> <?php echo $demande->getCofinanceur(); ?> </dd>
-        </dl>
     </div></div>
 
 <div class="card">
@@ -155,7 +154,7 @@ $canGererGestionnaires = $canModifierSession;
     <div class="card-body">
         <?php foreach ($demande->getDevis() as $fichier) : ?>
             <strong> Devis </strong>
-            <a href="<?php echo $this->url('download-fichier', ['fichier' => $fichier->getId()], [], true); ?>">
+            <a href="<?php echo $this->url('download-fichier', ['fichier' => $fichier->getId()], [], true); ?>" target="_blank">
                 <span class="icon icon-fichier"></span>
                 <?php echo $fichier->getNomOriginal(); ?>
             </a>&nbsp;
@@ -163,7 +162,7 @@ $canGererGestionnaires = $canModifierSession;
         <?php endforeach; ?>
         <?php foreach ($demande->getProgrammes() as $fichier) : ?>
             <strong> Programme </strong>
-            <a href="<?php echo $this->url('download-fichier', ['fichier' => $fichier->getId()], [], true); ?>">
+            <a href="<?php echo $this->url('download-fichier', ['fichier' => $fichier->getId()], [], true); ?>" target="_blank">
                 <span class="icon icon-fichier"></span>
                 <?php echo $fichier->getNomOriginal(); ?>
             </a>&nbsp;
@@ -179,32 +178,48 @@ $canGererGestionnaires = $canModifierSession;
     </div>
     <div class="card-body">
         <dl class="row">
-            <?php if ($validation = $demande->getValidationActiveByTypeCode(DemandeExterneValidations::FORMATION_DEMANDE_AGENT)) : ?>
-                <dt class="col-md-4"> Validation de l'agent </dt>
+            <dt class="col-md-4"> Motivation de l'agent·e </dt>
+            <dd class="col-md-8">
+                <?php echo $demande->getJustificationAgent(); ?>
+            </dd>
+            <?php if ($demande->getJustificationValideur()) : ?>
+                <dt class="col-md-4"> Motivation du valideur·euse de l'agent·e </dt>
+                <dd class="col-md-8">
+                    <?php echo $demande->getJustificationValideur(); ?>
+                </dd>
+            <?php endif; ?>
+            <?php if ($demande->getJustificationGestionnaire()) : ?>
+                <dt class="col-md-4"> Information du Bureau de formation  </dt>
                 <dd class="col-md-8">
-                    <?php echo $validation->getHistoCreateur()->getDisplayName(); ?> le <?php echo $validation->getHistoCreation()->format('d/m/Y à H:i'); ?> <br/>
-                    <?php echo $demande->getJustificationAgent(); ?>
+                    <?php echo $demande->getJustificationValideur(); ?>
                 </dd>
             <?php endif; ?>
-            <?php if ($validation = $demande->getValidationActiveByTypeCode(DemandeExterneValidations::FORMATION_DEMANDE_RESPONSABLE)) : ?>
-                <dt class="col-md-4"> Validation du responsable </dt>
+            <?php if ($demande->getJustificationResponsable()) : ?>
+                <dt class="col-md-4"> Avis du Responsable de formation </dt>
                 <dd class="col-md-8">
-                    <?php echo $validation->getHistoCreateur()->getDisplayName(); ?> le <?php echo $validation->getHistoCreation()->format('d/m/Y à H:i'); ?> <br/>
                     <?php echo $demande->getJustificationResponsable(); ?>
                 </dd>
             <?php endif; ?>
-            <?php if ($validation = $demande->getValidationActiveByTypeCode(DemandeExterneValidations::FORMATION_DEMANDE_DRH)) : ?>
-                <dt class="col-md-4"> Validation de la DRH </dt>
-                <dd class="col-md-8"> <?php echo $validation->getHistoCreateur()->getDisplayName(); ?> le <?php echo $validation->getHistoCreation()->format('d/m/Y à H:i'); ?> </dd>
+            <?php if ($demande->getJustificationDrh()) : ?>
+                <dt class="col-md-4"> Avis de la Direction des Ressources Humaines </dt>
+                <dd class="col-md-8">
+                    <?php echo $demande->getJustificationDrh(); ?>
+                </dd>
             <?php endif; ?>
-            <?php if ($validation = $demande->getValidationActiveByTypeCode(DemandeExterneValidations::FORMATION_DEMANDE_REFUS)) : ?>
-                <dt class="col-md-4"> Refus </dt>
+            <?php if ($demande->getJustificationDgs()) : ?>
+                <dt class="col-md-4"> Avis de la Direction Générale des Services  </dt>
+                <dd class="col-md-8">
+                    <?php echo $demande->getJustificationDgs(); ?>
+                </dd>
+            <?php endif; ?>
+            <?php if ($demande->isEtatActif(DemandeExterneEtats::ETAT_REJETEE)) : ?>
+                <dt class="col-md-4"> Justification du refus  </dt>
                 <dd class="col-md-8">
-                    <?php echo $validation->getHistoCreateur()->getDisplayName(); ?> le <?php echo $validation->getHistoCreation()->format('d/m/Y à H:i'); ?> <br/>
                     <?php echo $demande->getJustificationRefus(); ?>
                 </dd>
             <?php endif; ?>
 
+
             <?php if ($demande->isEtatActif(DemandeExterneEtats::ETAT_TERMINEE)) : ?>
                 <dt class="col-md-4">Action de formation associée </dt>
                 <dd class="col-md-8">
diff --git a/module/DemandeExterne/view/demande-externe/demande-externe/demande.phtml b/module/DemandeExterne/view/demande-externe/demande-externe/demande.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..52c40bdbc623aea9bf6e46ce41353868f4c1ffa7
--- /dev/null
+++ b/module/DemandeExterne/view/demande-externe/demande-externe/demande.phtml
@@ -0,0 +1,110 @@
+<?php
+
+/**
+ * @see \DemandeExterne\Controller\DemandeExterneController::validerValideurAction()
+ * @see \DemandeExterne\Controller\DemandeExterneController::validerGestionnaireAction()
+ * @see \DemandeExterne\Controller\DemandeExterneController::validerResponsableAction()
+ * @see \DemandeExterne\Controller\DemandeExterneController::validerDrhAction()
+ * @see \DemandeExterne\Controller\DemandeExterneController::validerDgsAction()
+ * @var JustificationForm $form
+ * @var DemandeExterne $inscription
+ */
+
+use DemandeExterne\Entity\Db\DemandeExterne;
+use DemandeExterne\Provider\Etat\DemandeExterneEtats;
+use Formation\Form\Justification\JustificationForm;
+
+$etape = $form->get('etape')->getValue();
+
+?>
+
+<?php if ($etape !== 'ANNULATION') : ?>
+    <dl>
+        <?php if ($inscription->getJustificationAgent()) : ?>
+            <dt> Missions en adéquation avec la demande de formation</dt>
+            <dd> <?php echo $inscription->getMissions(); ?> </dd>
+            <dt> Motivation de l'agent·e</dt>
+            <dd> <?php echo $inscription->getJustificationAgent(); ?></dd>
+        <?php endif; ?>
+        <?php if ($inscription->getJustificationValideur()) : ?>
+            <dt> Motivation du valideur·euse de l'agent·e</dt>
+            <dd> <?php echo $inscription->getJustificationValideur(); ?></dd>
+        <?php endif; ?>
+        <?php if ($inscription->getJustificationGestionnaire()) : ?>
+            <dt> Information du Bureau de formation</dt>
+            <dd> <?php echo $inscription->getJustificationGestionnaire(); ?></dd>
+        <?php endif; ?>
+        <?php if ($inscription->getJustificationResponsable()) : ?>
+            <dt> Avis du Responsable de formation</dt>
+            <dd> <?php echo $inscription->getJustificationResponsable(); ?></dd>
+        <?php endif; ?>
+        <?php if ($inscription->getJustificationDrh()) : ?>
+            <dt> Avis de la Direction des Ressources Humaines</dt>
+            <dd> <?php echo $inscription->getJustificationDrh(); ?></dd>
+        <?php endif; ?>
+        <?php if ($inscription->getJustificationDgs()) : ?>
+            <dt> Avis de la Direction Générale des Services</dt>
+            <dd> <?php echo $inscription->getJustificationDgs(); ?></dd>
+        <?php endif; ?>
+        <?php if ($inscription->getJustificationRefus() and $inscription->isEtatActif(DemandeExterneEtats::ETAT_REJETEE)) : ?>
+            <dt> Motif de refus</dt>
+            <dd> <?php echo $inscription->getJustificationRefus(); ?></dd>
+        <?php endif; ?>
+    </dl>
+<?php endif; ?>
+
+<?php echo $this->form()->openTag($form); ?>
+<?php echo $this->formControlGroup($form->get('etape')); ?>
+<div style="<?php if ($inscription->getEtatActif() !== null) echo " display: none; "; ?>">
+    <?php echo $this->formControlGroup($form->get('missions')); ?>
+    <?php echo $this->formControlGroup($form->get('rqth')); ?>
+</div>
+<?php echo $this->formControlGroup($form->get('justification')); ?>
+<?php echo $this->formControlGroup($form->get('bouton')); ?>
+<?php echo $this->form()->closeTag(); ?>
+
+<script>
+    $(document).ready(function () {
+        $('select').selectpicker();
+
+        tinymce.remove();
+        tinymce.init({
+            selector: '.tinymce',
+            toolbar: 'newdocument undo redo | bold italic underline removeformat | bullist',
+            resize: true,
+            language: 'fr_FR',
+            plugins: 'lists',
+            statusbar: true,
+            browser_spellcheck: true,
+            branding: false,
+            menu: {},
+            menubar: false,
+            height: 200,
+            body_id: 'description',
+            setup: function (editor) {
+                editor.on("focusout", function () {
+                    console.log(tinymce.get('description').getContent());
+                    $('textarea#description').val(tinymce.get('description').getContent());
+                });
+            }
+        });
+    });
+
+
+</script>
+
+<style>
+    .ui-datepicker {
+        position: absolute;
+        z-index: 1050 !important;
+    }
+
+    /*div.ui-datepicker {*/
+    /*    position: absolute;*/
+    /*     z-index:1050;*/
+    /* }*/
+    /* select.ui-datepicker-year option{*/
+    /* position: absolute;*/
+    /*     z-index:3151 !important;*/
+    /* }*/
+</style>
\ No newline at end of file
diff --git a/module/DemandeExterne/view/demande-externe/demande-externe/index-transformation.phtml b/module/DemandeExterne/view/demande-externe/demande-externe/index-transformation.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..cfca67cd61e80d78e13839194bc9fbb16da12b2f
--- /dev/null
+++ b/module/DemandeExterne/view/demande-externe/demande-externe/index-transformation.phtml
@@ -0,0 +1,50 @@
+<?php
+
+use DemandeExterne\Entity\Db\DemandeExterne;
+use DemandeExterne\Provider\Privilege\DemandeexternePrivileges;
+use UnicaenEtat\Entity\Db\EtatType;
+use UnicaenUtilisateur\Entity\Db\User;
+
+/**
+ * @see DemandeExterneController::indexTransformationAction()Action()
+ * @var DemandeExterne[] $demandes
+ * @var EtatType[] $etats
+ * @var User[] $gestionnaires
+ * @var array $params
+ * @var float $plafond
+ */
+
+$this->headTitle("Demandes hors plan de formation à transformer");
+
+// ATTENTION : ici pas d'appel à l'assertion pour économiser du temps
+// TODO revoir le privilege associé à l'action
+$canAjouter = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_MODIFIER));
+?>
+
+<h1 class="page-header">
+    Demandes hors plan de formation à transformer
+</h1>
+
+<?php echo $this->partial('partial/filtre', ['etats' => $etats, 'params' => $params, 'gestionnaires' => $gestionnaires], [], true); ?>
+
+<?php if ($canAjouter) : ?>
+    <?php /** @see DemandeExterneController::creerPourAgentAction() */ ?>
+    <a href="<?php echo $this->url('demande-externe/creer-pour-agent', [], [], true); ?>"
+       class="btn btn-primary ajax-modal">
+        <span class="icon icon-ajouter"></span>
+        Ajouter pour un agent
+    </a>
+<?php endif; ?>
+
+<?php echo $this->demandeExterneArray($demandes); ?>
+
+
+<script>
+    $(function () {
+        $("body").on("modification", function (event) {
+            event.div.modal('hide');
+            tinyMCE.editors = [];
+            window.location.reload();
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/module/DemandeExterne/view/demande-externe/demande-externe/modifier.phtml b/module/DemandeExterne/view/demande-externe/demande-externe/modifier.phtml
index 5e739e68a273f1d870b3b571c377c7272f51e64c..26664ad2dac185983a3abcdedb2a710cb3f6ce18 100644
--- a/module/DemandeExterne/view/demande-externe/demande-externe/modifier.phtml
+++ b/module/DemandeExterne/view/demande-externe/demande-externe/modifier.phtml
@@ -89,7 +89,8 @@ $this->headTitle("Demande de stage externe");
             <div class="col-md-4"><?php echo $this->formControlGroup($form->get('debut')); ?> </div>
             <div class="col-md-4"><?php echo $this->formControlGroup($form->get('fin')); ?> </div>
             <div class="col-md-12"><?php echo $this->formControlGroup($form->get('modalite')); ?> </div>
-            <div class="col-md-12"><?php echo $this->formControlGroup($form->get('montant')); ?> </div>
+            <div class="col-md-12"><?php echo $this->formControlGroup($form->get('frais_pedagogique')); ?> </div>
+            <div class="col-md-12"><?php echo $this->formControlGroup($form->get('frais_annexe')); ?> </div>
         </div>
 
         <h3> Motivation </h3>
diff --git a/module/DemandeExterne/view/demande-externe/demande-externe/parapheur.phtml b/module/DemandeExterne/view/demande-externe/demande-externe/parapheur.phtml
index 695366d14cfafb8b758f937f3606342c01e78a1a..d797830586d7be0a8d6cb9b2647ac1b8c64f3051 100644
--- a/module/DemandeExterne/view/demande-externe/demande-externe/parapheur.phtml
+++ b/module/DemandeExterne/view/demande-externe/demande-externe/parapheur.phtml
@@ -1,24 +1,34 @@
 <?php
 
 use DemandeExterne\Entity\Db\DemandeExterne;
+use DemandeExterne\Provider\Etat\DemandeExterneEtats;
 use DemandeExterne\Provider\Privilege\DemandeexternePrivileges;
-use Formation\Entity\Db\Inscription;
+use Fichier\Entity\Db\Fichier;
+use UnicaenEtat\Entity\Db\EtatType;
+use UnicaenUtilisateur\Entity\Db\User;
 
 /**
  * @see DemandeExterneController::parapheurAction()
- * @var Inscription[] $demandesInternes
- * @var DemandeExterne[] $demandesExternes
+ * @var DemandeExterne[] $demandes
+ * @var array $params
+ * @var EtatType[] $etats
+ * @var User[] $gestionnaires
  */
 
-$this->headTitle("Parapheur des formations externes");
+$this->headTitle("Parapheur des formations en attentes");
 
 // ATTENTION : ici pas d'appel à l'assertion pour économiser du temps
 $canAfficher = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_AFFICHER));
-$canModifier = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_MODIFIER));
 $canHistoriser = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_HISTORISER));
 $canSupprimer = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_SUPPRIMER));
-$canValider = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DRH));
 
+$canValiderResponsable = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_RESPONSABLE));
+$canValiderDrh = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DRH));
+$canValiderDgs = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DGS));
+
+$canGerer = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_GERER));
+$canTelechargerDevis = $canGerer;
+$canTeleverserDevis = $canGerer;
 ?>
 
 <h1 class="page-header">
@@ -26,136 +36,265 @@ $canValider = $this->isAllowed(DemandeexternePrivileges::getResourceId(Demandeex
 </h1>
 
 <h2>
-    Demandes de formation interne
+    Demandes de formation externe
 </h2>
 
+<?php echo $this->partial('partial/filtre', ['etats' => $etats, 'params' => $params, 'gestionnaires' => $gestionnaires], [], true); ?>
 
-<table class="table table-condensed table-hover">
+<table class="table table-condensed table-hover" id="demandes">
     <thead>
     <tr>
-        <th class="agent"> Agent</th>
-        <th class="formation"> Formation</th>
-        <th> Type</th>
-        <th class="etat"> État</th>
-        <th class="action"> Action</th>
+    <tr>
+        <th> Agent</th>
+        <th> Structure·s d'affectation</th>
+        <th> Date de la demande</th>
+        <th> Intitulé de la formation</th>
+        <th data-type="num"> Période de formation</th>
+        <th> Organisme</th>
+        <th> Devis</th>
+        <th> État</th>
+        <th style="width:8rem;"> Action</th>
     </tr>
     </thead>
     <tbody>
-    <?php foreach ($demandesInternes as $demande) : ?>
+    <?php foreach ($demandes as $demande) : ?>
         <tr class=" <?php if ($demande->estHistorise()) echo " historise "; ?> ">
-            <td> <?php echo $demande->getAgent()->getDenomination(); ?> </td>
-            <td> <?php echo $demande->getSession()->getFormation()->getLibelle(); ?> </td>
-            <td> <?php echo $demande->getSession()->getType()?->getLibelle(); ?> </td>
-            <td> <?php
-                echo $this->etatinstance($demande->getEtatActif(), ['display-categorie' => false]);
-                ?> </td>
-            <td class="action">
-                <?php if ($canAfficher) : ?>
-                    <?php /** @see AgentController::afficherAction() */ ?>
-                    <a href="<?php echo $this->url('formation/agent', ['agent' => $demande->getAgent()->getId()], [], true); ?>"
-                       class="ajax-modal">
-                        <span class="icon icon-voir"></span></a>
-                <?php else : ?>
-                    <span class="icon icon-voir nope"></span>
-                <?php endif; ?>
-                <?php if ($canValider) : ?>
-                    <?php /** @see \Formation\Controller\InscriptionController::validerDrhAction() */ ?>
-                    <a href="<?php echo $this->url('inscription/valider-drh', ['inscription' => $demande->getId()], [], true); ?>"
-                       class="ajax-modal" data-event="modification">
-                        <span class="icon icon-ok text-success"></span></a>
-                    <?php /** @see \Formation\Controller\InscriptionController::refuserDrhAction() */ ?>
-                    <a href="<?php echo $this->url('inscription/refuser-drh', ['inscription' => $demande->getId()], [], true); ?>"
-                       class="ajax-modal" data-event="modification">
-                        <span class="icon icon-ko text-danger"></span></a>
-                <?php else: ?>
-                    <span class="icon icon-ok nope"></span>
-                    <span class="icon icon-ko nope"></span>
+            <?php
+            $agent = $demande->getAgent();
+            $affectations = $agent->getAffectationsActifs();
+            ?>
+        <tr class=" <?php if ($demande->estHistorise()) echo " historise "; ?> ">
+            <td>
+                <?php echo $agent->getDenomination(); ?>
+                <?php if ($canGerer) : ?>
+                    <small>
+                        <br>
+                        <?php if (empty($demande->getGestionnaires())) : ?>
+                            Aucun·e gestionnaire <br>
+                        <?php else : ?>
+                            Gestionnaire·s :
+                            <ul>
+                                <?php foreach ($demande->getGestionnaires() as $gestionnaire) : ?>
+                                    <li> <?php echo $gestionnaire->getDisplayName(); ?> </li>
+                                <?php endforeach; ?>
+                            </ul>
+                        <?php endif; ?>
+                        <?php if ($canGerer) : ?>
+                            <?php /** @see DemandeExterneController::selectionnerGestionnairesAction() */ ?>
+                            <a href="<?php echo $this->url('demande-externe/selectionner-gestionnaires', ['demande-externe' => $demande->getId()], [], true); ?>"
+                               class="action primary ajax-modal" data-event="modification" style="font-size:small;">
+                                <span class="icon icon-gerer"></span>
+                                Renseigner les gestionnaires
+                            </a>
+                        <?php endif; ?>
+                    </small>
                 <?php endif; ?>
-                <?php if ($canHistoriser) : ?>
-                    <?php if ($demande->estNonHistorise()) : ?>
-                        <?php /** @see \Formation\Controller\InscriptionController::historiserAction() */ ?>
-                        <a href="<?php echo $this->url('inscription/historiser', ['inscription' => $demande->getId()], [], true); ?>"
-                           title="Supprimer la demande d'inscription"
-                        >
-                            <span class="icon icon-historiser"></span></a>
-                    <?php else : ?>
-                        <?php /** @see \Formation\Controller\InscriptionController::restaurerAgentAction() */ ?>
-                        <a href="<?php echo $this->url('inscription/restaurer', ["inscription" => $demande->getId()], [], true); ?>"
-                           title="Restaurer la demande d'inscription"
-                        >
-                            <span class="icon icon-restaurer"></span></a>
+            </td>
+            <td>
+                <?php foreach ($affectations as $affectation) : ?>
+                    <?php
+                    $structure = $affectation->getStructure();
+                    $niv2 = $structure->getNiv2();
+                    ?>
+                    <?php if ($niv2 AND $niv2 !== $structure) : ?>
+                        <?php echo $niv2->getLibelleCourt(); ?> <br>
                     <?php endif; ?>
-                <?php else : ?>
-                    <span class="icon icon-historiser nope"></span>
-                <?php endif; ?>
+                    <?php echo $structure->getLibelleCourt(); ?>
+                <?php endforeach; ?>
             </td>
-        </tr>
-    <?php endforeach; ?>
-    </tbody>
-</table>
+            <td> <?php echo $demande->getHistoCreation()->format('d/m/Y'); ?> </td>
 
-<h2>
-    Demandes de formation externe
-</h2>
-
-<table class="table table-condensed table-hover">
-    <thead>
-    <tr>
-        <th class="agent"> Agent</th>
-        <th class="formation"> Formation</th>
-        <th> Organisme</th>
-        <th class="etat"> État</th>
-        <th class="action"> Action</th>
-    </tr>
-    </thead>
-    <tbody>
-    <?php foreach ($demandesExternes as $demande) : ?>
-        <tr class=" <?php if ($demande->estHistorise()) echo " historise "; ?> ">
-            <td> <?php echo $demande->getAgent()->getDenomination(); ?> </td>
             <td> <?php echo $demande->getLibelle(); ?> </td>
+            <td data-order="<?php echo $demande->getDebut()?->getTimestamp(); ?>">
+                <?php echo $demande->getPeriode(); ?>
+            </td>
             <td> <?php echo $demande->getOrganisme(); ?> </td>
+
+            <td class="action devis">
+                Frais pédagogique : <?php echo $demande->getFraisPedagogique(); ?> <br>
+                Frais annexe : <?php echo $demande->getFraisAnnexe(); ?> <br>
+                <?php if (isset($plafond1) and $demande->getFraisPedagogique() >= $plafond1) : ?>
+                    <span class="text-warning">
+                        <span class="icon icon-attention"
+                              title="Plafond dépassé ! Nécessite validation de la DRH."></span>
+                        DRH
+                    </span>
+                <?php endif; ?>
+                <?php if (isset($plafond2) and $demande->getFraisPedagogique() >= $plafond2) : ?>
+                    <span class="text-warning">
+                        <span class="icon icon-attention"
+                              title="Plafond dépassé ! Nécessite validation de la DGS."></span>
+                    </span> DGS
+                <?php endif; ?>
+                <br>
+                <?php if (empty($demande->getDevis())) : ?>
+                    <span class="text-danger">
+                        <span class="icon icon-attention"></span>
+                        Aucun devis
+                    </span> <br>
+                <?php else : ?>
+                    <?php /** @var Fichier $devis */ ?>
+                    <?php foreach ($demande->getDevis() as $devis) : ?>
+                        <strong> Devis </strong>
+                        <?php if ($canTelechargerDevis) : ?>
+                            <?php /** @see  \Fichier\Controller\FichierController::downloadAction() */ ?>
+                            <a href="<?php echo $this->url('download-fichier', ['fichier' => $devis->getId()], [], true); ?>">
+                                <?php echo $devis->getNomOriginal(); ?>
+                            </a>
+                        <?php else : ?>
+                            <?php echo $devis->getNomOriginal(); ?>
+                        <?php endif; ?>
+                        <?php if ($canTeleverserDevis && $demande->isEtatActif(DemandeExterneEtats::ETAT_CREATION_EN_COURS)) : ?>
+                            <?php /** @see DemandeExterneController::retirerJustificatifAction() */ ?>
+                            <a href="<?php echo $this->url('demande-externe/retirer-justificatif', ['justificatif' => $devis->getId()], ['query' => ['retour' => $this->url()]], true); ?>">
+                                <span class="text-danger">
+                                    <span class="icon icon-unchecked"></span>
+
+                                </span>
+                            </a>
+                        <?php endif; ?>
+                        <br>
+                    <?php endforeach; ?>
+                <?php endif; ?>
+                <?php if ($canTeleverserDevis && $demande->isEtatActif(DemandeExterneEtats::ETAT_CREATION_EN_COURS)) : ?>
+                    <?php /** @see DemandeExterneController::ajouterDevisAction() */ ?>
+                    <a href="<?php echo $this->url('demande-externe/ajouter-devis', ['demande-externe' => $demande->getId()], ['query' => ['retour' => $this->url(null, [], [], true)]], true); ?>"
+                       class="ajax-modal  action primary" data-event="modification">
+                        <span class="icon icon-televerser"></span>Ajouter un devis</a>
+                <?php endif; ?>
+                <br>
+                <?php if (empty($demande->getProgrammes())) : ?>
+                    <span class="text-danger">
+                        <span class="icon icon-attention"></span>
+                        Aucun programme
+                    </span> <br>
+                <?php else : ?>
+                    <?php /** @var Fichier $devis */ ?>
+                    <?php foreach ($demande->getProgrammes() as $devis) : ?>
+                        <strong> Programme </strong>
+                        <?php if ($canTelechargerDevis) : ?>
+                            <?php /** @see  \Fichier\Controller\FichierController::downloadAction() */ ?>
+                            <a href="<?php echo $this->url('download-fichier', ['fichier' => $devis->getId()], [], true); ?>">
+                                <?php echo $devis->getNomOriginal(); ?>
+                            </a>
+                        <?php else : ?>
+                            <?php echo $devis->getNomOriginal(); ?>
+                        <?php endif; ?>
+                        <?php if ($canTeleverserDevis && $demande->isEtatActif(DemandeExterneEtats::ETAT_CREATION_EN_COURS)) : ?>
+                            <?php /** @see DemandeExterneController::retirerJustificatifAction() */ ?>
+                            <a href="<?php echo $this->url('demande-externe/retirer-justificatif', ['justificatif' => $devis->getId()], ['query' => ['retour' => $this->url()]], true); ?>">
+                                <span class="text-danger">
+                                    <span class="icon icon-unchecked"></span>
+
+                                </span>
+                            </a>
+                        <?php endif; ?>
+                        <br>
+                    <?php endforeach; ?>
+                <?php endif; ?>
+                <?php if ($canTelechargerDevis && $demande->isEtatActif(DemandeExterneEtats::ETAT_CREATION_EN_COURS)) : ?>
+                    <?php /** @see DemandeExterneController::ajouterProgrammeAction() */ ?>
+                    <a href="<?php echo $this->url('demande-externe/ajouter-programme', ['demande-externe' => $demande->getId()], ['query' => ['retour' => $this->url(null, [], [], true)]], true); ?>"
+                       class="ajax-modal action primary" data-event="modification">
+                        <span class="icon icon-televerser"></span>Ajouter un programme</a>
+                <?php endif; ?>
+
+            </td>
             <td>
-                <?php
-                echo $this->etatinstance($demande->getEtatActif(), ['display-categorie' => false]);
-                ?> </td>
+                <?php echo $this->etatinstance($demande->getEtatActif(), ['display-libelle' => true, 'display-categorie' => false]); ?>
+            </td>
             <td class="action">
                 <?php if ($canAfficher) : ?>
                     <?php /** @see DemandeExterneController::afficherAction() */ ?>
                     <a href="<?php echo $this->url('demande-externe/afficher', ['demande-externe' => $demande->getId()], [], true); ?>"
-                       class="ajax-modal">
-                        <span class="icon icon-voir"></span></a>
-                <?php else : ?>
-                    <span class="icon icon-voir nope"></span>
+                       class="ajax-modal action secondary">
+                        <span class="icon icon-voir"></span>
+                        Visualiser
+                    </a>
+                <?php endif; ?>
+                <?php if ($demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_GESTIONNAIRE) and $canValiderResponsable) : ?>
+                    <br>
+                    <?php /** @see \DemandeExterne\Controller\DemandeExterneController::validerResponsableAction() */ ?>
+                    <a href="<?php echo $this->url('demande-externe/valider-responsable', ['demande-externe' => $demande->getId()], [], true); ?>"
+                       class="ajax-modal action success" data-event="modification"
+                    >
+                        <span class="icon icon-checked"></span>
+                        Valider
+                    </a>
+                    <br>
+                    <?php /** @see \DemandeExterne\Controller\DemandeExterneController::refuserResponsableAction() */ ?>
+                    <a href="<?php echo $this->url('demande-externe/refuser-responsable', ['demande-externe' => $demande->getId()], [], true); ?>"
+                       class="ajax-modal action danger" data-event="modification"
+                    >
+                        <span class="icon icon-unchecked"></span>
+                        Refuser
+                    </a>
                 <?php endif; ?>
-                <?php if ($canValider) : ?>
-                    <?php /** @see DemandeExterneController::validerDrhAction() */ ?>
+                <?php if ($demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_RESPONSABLE) and $canValiderDrh) : ?>
+                    <br>
+                    <?php /** @see \DemandeExterne\Controller\DemandeExterneController::validerDrhAction() */ ?>
                     <a href="<?php echo $this->url('demande-externe/valider-drh', ['demande-externe' => $demande->getId()], [], true); ?>"
-                       class="ajax-modal" data-event="modification">
-                        <span class="icon icon-ok text-success"></span></a>
-                    <?php /** @see DemandeExterneController::refuserDrhAction() */ ?>
+                       class="ajax-modal action success" data-event="modification"
+                    >
+                        <span class="icon icon-checked"></span>
+                        Valider
+                    </a>
+                    <br>
+                    <?php /** @see \DemandeExterne\Controller\DemandeExterneController::refuserDrhAction() */ ?>
                     <a href="<?php echo $this->url('demande-externe/refuser-drh', ['demande-externe' => $demande->getId()], [], true); ?>"
-                       class="ajax-modal" data-event="modification">
-                        <span class="icon icon-ko text-danger"></span></a>
-                <?php else: ?>
-                    <span class="icon icon-ok nope"></span>
-                    <span class="icon icon-ko nope"></span>
+                       class="ajax-modal action danger" data-event="modification"
+                    >
+                        <span class="icon icon-unchecked"></span>
+                        Refuser
+                    </a>
+                <?php endif; ?>
+                <?php if ($demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_DRH) and $canValiderDgs) : ?>
+                    <br>
+                    <?php /** @see \DemandeExterne\Controller\DemandeExterneController::validerDgsAction() */ ?>
+                    <a href="<?php echo $this->url('demande-externe/valider-dgs', ['demande-externe' => $demande->getId()], [], true); ?>"
+                       class="ajax-modal action success" data-event="modification"
+                    >
+                        <span class="icon icon-checked"></span>
+                        Valider
+                    </a>
+                    <br>
+                    <?php /** @see \DemandeExterne\Controller\DemandeExterneController::refuserDgsAction() */ ?>
+                    <a href="<?php echo $this->url('demande-externe/refuser-dgs', ['demande-externe' => $demande->getId()], [], true); ?>"
+                       class="ajax-modal action danger" data-event="modification"
+                    >
+                        <span class="icon icon-unchecked"></span>
+                        Refuser
+                    </a>
                 <?php endif; ?>
                 <?php if ($canHistoriser) : ?>
+                    <br>
                     <?php if ($demande->estNonHistorise()) : ?>
                         <?php /** @see DemandeExterneController::historiserAction() */ ?>
                         <a href="<?php echo $this->url('demande-externe/historiser', ['demande-externe' => $demande->getId()], [], true); ?>"
-                           title="Supprimer la demande externe"
+                           class="action warning"
                         >
-                            <span class="icon icon-historiser"></span></a>
+                            <span class="icon icon-historiser"></span>
+                            Supprimer
+                        </a>
                     <?php else : ?>
                         <?php /** @see DemandeExterneController::restaurerAction() */ ?>
                         <a href="<?php echo $this->url('demande-externe/restaurer', ["demande-externe" => $demande->getId()], [], true); ?>"
-                           title="Restaurer la demande externe"
+                           class="action warning"
                         >
-                            <span class="icon icon-restaurer"></span></a>
+                            <span class="icon icon-restaurer"></span>
+                            Restaurer
+                        </a>
                     <?php endif; ?>
-                <?php else : ?>
-                    <span class="icon icon-historiser nope"></span>
+                <?php endif; ?>
+                <?php if ($canSupprimer) : ?>
+                    <br>
+                    <?php /** @see DemandeExterneController::supprimerAction() */ ?>
+                    <a href="<?php echo $this->url('demande-externe/supprimer', ["demande-externe" => $demande->getId()], [], true); ?>"
+                       class="action danger ajax-modal" data-event="modification"
+                    >
+                        <span class="icon icon-unchecked"></span>
+                        Détruire
+                    </a>
                 <?php endif; ?>
             </td>
         </tr>
@@ -168,30 +307,20 @@ $canValider = $this->isAllowed(DemandeexternePrivileges::getResourceId(Demandeex
     $(function () {
         $("body").on("modification", function (event) {
             event.div.modal('hide');
-            tinyMCE.editors = [];
             window.location.reload();
         });
+
+        $('table#demandes').DataTable({
+            paging: false,
+            autoWidth: false,
+            columnDefs: [{
+                "targets": 8,
+                "orderable": false
+            }],
+            "language": {
+                "url": "/js/datatables_fr.json",
+            }
+        });
     });
 </script>
 
-<style>
-    th.etat {
-        min-width: 6rem;
-        width: 6rem;
-    }
-
-    th.action {
-        min-width: 7rem;
-        width: 7rem;
-    }
-
-    th.agent {
-        min-width: 20rem;
-        width: 20rem;
-    }
-
-    th.formation {
-        min-width: 30rem;
-        width: 30rem;
-    }
-</style>
\ No newline at end of file
diff --git a/module/DemandeExterne/view/demande-externe/demande-externe/partial/filtre.phtml b/module/DemandeExterne/view/demande-externe/demande-externe/partial/filtre.phtml
index 8a56e7bed688cdc9c0ff9a875bcc34eb8c75abda..9d619dbb73e590f1f56e3a96cda78a06a0c52e0a 100644
--- a/module/DemandeExterne/view/demande-externe/demande-externe/partial/filtre.phtml
+++ b/module/DemandeExterne/view/demande-externe/demande-externe/partial/filtre.phtml
@@ -40,8 +40,8 @@ use UnicaenUtilisateur\Entity\Db\User;
                             <label for="annee">Année de la demande :  </label>
                             <select id="annee" name="annee" class="selectpicker">
                                 <option value="">Peu importe</option>
-                                <?php for ($annee = 2022 ; $annee <= Formation::getAnnee() ; $annee++) : ?> <!-- todo nope -->
-                                    <option value="<?php echo $annee; ?>"><?php echo $annee; ?>/<?php echo $annee+1; ?></option>
+                                <?php for ($annee = Formation::getAnnee() ; $annee >=2022  ; $annee--) : ?> <!-- todo nope -->
+                                    <option value="<?php echo $annee; ?>"><?php echo $annee; ?></option>
                                 <?php endfor; ?>
                             </select>
                         </div>
@@ -60,7 +60,7 @@ use UnicaenUtilisateur\Entity\Db\User;
                                 <!--                            <option value=""> Peu importe </option>-->
                                 <?php foreach ($etats as $etat) : ?>
                                     <option value="<?php echo $etat->getCode(); ?>" <?php if( isset($params['etats']) AND in_array($etat->getCode(), (is_string($params['etats'])?[$params['etats']]:$params['etats']))) echo " selected "; ?>
-                                            data-content='<?php  echo $this->etattype($etat, ['display-categorie' => false]); ?> <?php echo $etat->getLibelle(); ?>'
+                                            data-content='<?php  echo $this->etattype($etat, ['display-categorie' => false]); ?> <?php echo htmlentities($etat->getLibelle()); ?>'
                                     >
                                         <?php echo $etat->getLibelle(); ?>
                                     </option>
@@ -124,12 +124,12 @@ use UnicaenUtilisateur\Entity\Db\User;
         $('form#filter').submit();
     });
 
-<?php if (isset($params['agent-filtre[id]'])) :?>
-        $('input[name="agent-filtre[label]').val(" <?php echo $params['agent']->getDenomination(); ?> ");
+<?php if (isset($params['agent'])) :?>
+        $('input[name="agent-filtre[label]').val("<?php echo $params['agent']->getDenomination(); ?>");
         $('input[name="agent-filtre[id]').val("<?php echo $params['agent']->getId(); ?>");
 <?php endif; ?>
 <?php if (isset($params['organisme'])) :?>
-        $('input[name="organisme[label]').val(" <?php echo $params['organisme']; ?> ");
+        $('input[name="organisme[label]').val("<?php echo $params['organisme']; ?>");
         $('input[name="organisme[id]').val("<?php echo $params['organisme']; ?>");
 <?php endif; ?>
 <?php if (isset($params['etat'])) :?>
diff --git a/module/Fichier/src/Fichier/Entity/Db/Fichier.php b/module/Fichier/src/Fichier/Entity/Db/Fichier.php
index 2dd7d66e0ee66eb6fe62136f53b60b43d70ef767..85870d0676af54276c51abcb782877bed01fa76b 100644
--- a/module/Fichier/src/Fichier/Entity/Db/Fichier.php
+++ b/module/Fichier/src/Fichier/Entity/Db/Fichier.php
@@ -54,7 +54,7 @@ class Fichier implements  HistoriqueAwareInterface {
         return $this->nature;
     }
 
-    public function setNature(Nature $nature): Fichier
+    public function setNature(?Nature $nature): Fichier
     {
         $this->nature = $nature;
         return $this;
diff --git a/module/Fichier/src/Fichier/Entity/Db/Mapping/Fichier.Entity.Db.Fichier.dcm.xml b/module/Fichier/src/Fichier/Entity/Db/Mapping/Fichier.Entity.Db.Fichier.dcm.xml
index a3ca491b3e475d45a6e254bb1104b9ced42594f1..6ae76eb184e9c50e41c7040fae0fb471ce9fa5a8 100644
--- a/module/Fichier/src/Fichier/Entity/Db/Mapping/Fichier.Entity.Db.Fichier.dcm.xml
+++ b/module/Fichier/src/Fichier/Entity/Db/Mapping/Fichier.Entity.Db.Fichier.dcm.xml
@@ -1,30 +1,32 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Fichier\Entity\Db\Fichier" table="fichier_fichier">
 
         <!-- !!!Remarque!!! il s'agit d'une chaine de caractère générée avec uniqid pour éviter les problèmes de forgeage ! -->
-        <id name="id" type="string" length="13" column="id" />
+        <id name="id" length="13" column="id"/>
 
-        <field name="nomOriginal"       type="string" length="256"      column="nom_original"                nullable="false"/>
-        <field name="nomStockage"       type="string" length="256"      column="nom_stockage"                nullable="false"/>
+        <field name="nomOriginal" length="256" column="nom_original" />
+        <field name="nomStockage" length="256" column="nom_stockage" />
 
-        <many-to-one target-entity="Fichier\Entity\Db\Nature"  field="nature">
-            <join-column name="nature" referenced-column-name="id"/>
+        <many-to-one target-entity="Fichier\Entity\Db\Nature" field="nature">
+            <join-column name="nature"/>
         </many-to-one>
 
-        <field name="typeMime"          type="string" length="256"      column="type_mime"                   nullable="true"/>
-        <field name="taille"            type="string" length="256"      column="taille"                      nullable="true"/>
+        <field name="typeMime" length="256" column="type_mime" nullable="true"/>
+        <field name="taille" length="256" column="taille" nullable="true"/>
 
-        <field name="histoCreation"     type="datetime"                 column="histo_creation"     nullable="false"/>
-        <field name="histoModification" type="datetime"                 column="histo_modification" nullable="false"/>
-        <field name="histoDestruction"  type="datetime"                 column="histo_destruction"  nullable="true"/>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoCreateur">
+        <field name="histoCreation" type="datetime" column="histo_creation" />
+        <field name="histoModification" type="datetime" column="histo_modification" />
+        <field name="histoDestruction" type="datetime" column="histo_destruction" nullable="true"/>
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoCreateur">
             <join-column name="histo_createur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoModificateur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoModificateur">
             <join-column name="histo_modificateur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoDestructeur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoDestructeur">
             <join-column name="histo_destructeur_id" referenced-column-name="ID"/>
         </many-to-one>
     </entity>
diff --git a/module/Fichier/src/Fichier/Entity/Db/Mapping/Fichier.Entity.Db.Nature.dcm.xml b/module/Fichier/src/Fichier/Entity/Db/Mapping/Fichier.Entity.Db.Nature.dcm.xml
index fd9cd391b5be513e91b9ee861f355f74828f1c1b..63a6cdab74d15cb9fa39b0bfdf3fc399c6f8a9fa 100644
--- a/module/Fichier/src/Fichier/Entity/Db/Mapping/Fichier.Entity.Db.Nature.dcm.xml
+++ b/module/Fichier/src/Fichier/Entity/Db/Mapping/Fichier.Entity.Db.Nature.dcm.xml
@@ -1,14 +1,16 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Fichier\Entity\Db\Nature" table="fichier_nature">
 
         <id name="id" type="integer" column="id">
             <generator strategy="IDENTITY"/>
         </id>
 
-        <field name="code"              type="string" length="64"       column="code"                   nullable="false"/>
-        <field name="libelle"           type="string" length="256"      column="libelle"                nullable="false"/>
-        <field name="description"       type="string" length="2048"     column="description"            nullable="true"/>
+        <field name="code" length="64" column="code" />
+        <field name="libelle" length="256" column="libelle" />
+        <field name="description" length="2048" column="description" nullable="true"/>
 
     </entity>
 </doctrine-mapping>
diff --git a/module/Fichier/src/Fichier/Entity/HasFichiersInterface.php b/module/Fichier/src/Fichier/Entity/HasFichiersInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..a76d6875e06db59835942d85a7f9a7c64d664035
--- /dev/null
+++ b/module/Fichier/src/Fichier/Entity/HasFichiersInterface.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Fichier\Entity;
+
+use Fichier\Entity\Db\Fichier;
+
+interface HasFichiersInterface
+{
+    public function getFichiers(): array;
+
+    public function addFichier(Fichier $fichier): void;
+
+    public function removeFichier(Fichier $fichier): void;
+
+    public function fetchFiles(string $nature): array;
+}
\ No newline at end of file
diff --git a/module/Fichier/src/Fichier/Entity/HasFichiersTrait.php b/module/Fichier/src/Fichier/Entity/HasFichiersTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..7d1d43038d6f484bfa2ac4110597251f3c302b85
--- /dev/null
+++ b/module/Fichier/src/Fichier/Entity/HasFichiersTrait.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace Fichier\Entity;
+
+use Doctrine\Common\Collections\Collection;
+use Fichier\Entity\Db\Fichier;
+
+trait HasFichiersTrait
+{
+    private Collection $fichiers;
+
+    /**
+     * @return Fichier[]
+     */
+    public function getFichiers(): array
+    {
+        return $this->fichiers->toArray();
+    }
+
+    public function addFichier(Fichier $fichier): void
+    {
+        $this->fichiers->add($fichier);
+    }
+
+    public function removeFichier(Fichier $fichier): void
+    {
+        $this->fichiers->removeElement($fichier);
+    }
+
+    /**
+     * @param string $nature
+     * @return Fichier[]
+     */
+    public function fetchFiles(string $nature): array
+    {
+        $fichiers = $this->getFichiers();
+        $fichiers = array_filter($fichiers, function (Fichier $f) use ($nature) {
+            return ($f->getHistoDestruction() === null && $f->getNature()->getCode() === $nature);
+        });
+
+        return $fichiers;
+    }
+}
\ No newline at end of file
diff --git a/module/Fichier/src/Fichier/Form/Upload/UploadFormAwareTrait.php b/module/Fichier/src/Fichier/Form/Upload/UploadFormAwareTrait.php
index bc16a112fbb907440510b06437637497d00b1f37..e0cd3fae01a9897571e23b75c30cb24face5dc68 100644
--- a/module/Fichier/src/Fichier/Form/Upload/UploadFormAwareTrait.php
+++ b/module/Fichier/src/Fichier/Form/Upload/UploadFormAwareTrait.php
@@ -4,26 +4,16 @@ namespace Fichier\Form\Upload;
 
 trait UploadFormAwareTrait {
 
-    /** @var UploadForm $uploadForm */
-    private $uploadForm;
+    private UploadForm $uploadForm;
 
-    /**
-     * @return UploadForm
-     */
-    public function getUploadForm()
+    public function getUploadForm(): UploadForm
     {
         return $this->uploadForm;
     }
 
-    /**
-     * @param UploadForm $uploadForm
-     * @return UploadForm
-     */
-    public function setUploadForm($uploadForm)
+    public function setUploadForm(UploadForm $uploadForm): void
     {
         $this->uploadForm = $uploadForm;
-        return $this->uploadForm;
     }
 
-
 }
\ No newline at end of file
diff --git a/module/Fichier/src/Fichier/Form/Upload/UploadFormFactory.php b/module/Fichier/src/Fichier/Form/Upload/UploadFormFactory.php
index 4bb680e00bca239ec057e5c397c91f47f89debab..9e8a9412a2e7a1d5c3fee4c393955521be46a88f 100644
--- a/module/Fichier/src/Fichier/Form/Upload/UploadFormFactory.php
+++ b/module/Fichier/src/Fichier/Form/Upload/UploadFormFactory.php
@@ -4,21 +4,24 @@ namespace Fichier\Form\Upload;
 
 use Fichier\Service\Nature\NatureService;
 use Interop\Container\ContainerInterface;
-use Laminas\Form\FormElementManager;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\NotFoundExceptionInterface;
 
 class UploadFormFactory {
 
-    public function __invoke(ContainerInterface $container)
+    /**
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
+    public function __invoke(ContainerInterface $container): UploadForm
     {
-        /** @var UploadHydrator $hydrator */
-        $hydrator = $container->get('HydratorManager')->get(UploadHydrator::class);
-
         /**
          * @var NatureService $natureService
+         * @var UploadHydrator $hydrator
          */
+        $hydrator = $container->get('HydratorManager')->get(UploadHydrator::class);
         $natureService = $container->get(NatureService::class);
 
-        /** @var UploadForm $form */
         $form = new UploadForm();
         $form->setNatureService($natureService);
         $form->setHydrator($hydrator);
diff --git a/module/Fichier/src/Fichier/Form/Upload/UploadHydrator.php b/module/Fichier/src/Fichier/Form/Upload/UploadHydrator.php
index 7cbe151b9ae50b308b58bab7fc195ab74c9663a2..2df1135a640b0394255318d11e5ae80ccdaa6701 100644
--- a/module/Fichier/src/Fichier/Form/Upload/UploadHydrator.php
+++ b/module/Fichier/src/Fichier/Form/Upload/UploadHydrator.php
@@ -19,7 +19,7 @@ class UploadHydrator implements HydratorInterface {
         return $data;
     }
 
-    public function hydrate(array $data, $object)
+    public function hydrate(array $data, $object): object
     {
         return $object;
     }
diff --git a/module/Fichier/src/Fichier/Service/Fichier/FichierService.php b/module/Fichier/src/Fichier/Service/Fichier/FichierService.php
index 36d3b9e4d9cf290164e088e860bbfe33bd738c82..1d15e28e421bc9f4b5ff59c9dbfde1b7406a348e 100644
--- a/module/Fichier/src/Fichier/Service/Fichier/FichierService.php
+++ b/module/Fichier/src/Fichier/Service/Fichier/FichierService.php
@@ -4,134 +4,61 @@ namespace Fichier\Service\Fichier;
 
 use DateTime;
 use Doctrine\ORM\NonUniqueResultException;
-use Doctrine\ORM\Exception\ORMException;
+use DoctrineModule\Persistence\ProvidesObjectManager;
 use Exception;
 use Fichier\Entity\Db\Fichier;
 use Fichier\Entity\Db\Nature;
+use Laminas\Mvc\Controller\AbstractActionController;
 use UnicaenApp\Exception\RuntimeException;
-use UnicaenApp\Service\EntityManagerAwareTrait;
 use UnicaenUtilisateur\Service\User\UserServiceAwareTrait;
-use Laminas\Mvc\Controller\AbstractActionController;
 
 class FichierService {
-    use EntityManagerAwareTrait;
+    use ProvidesObjectManager;
     use UserServiceAwareTrait;
 
-    private $path;
+    private ?string $path = null;
 
-    /**
-     * @param string $path
-     * @return FichierService
-     */
-    public function setPath($path)
+    public function setPath(?string $path): FichierService
     {
         $this->path = $path;
         return $this;
     }
 
-    /**
-     * @param Fichier $fichier
-     * @return Fichier
-     */
-    public function create($fichier)
+    public function create(Fichier $fichier): Fichier
     {
-        $user = $this->getUserService()->getConnectedUser();
-        $date = new DateTime();
-
-        $fichier->setHistoCreateur($user);
-        $fichier->setHistoCreation($date);
-        $fichier->setHistoModificateur($user);
-        $fichier->setHistoModification($date);
-
-        try {
-            $this->getEntityManager()->persist($fichier);
-            $this->getEntityManager()->flush($fichier);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème s'est produit lors de la création d'un Fichier.", $e);
-        }
+        $this->getObjectManager()->persist($fichier);
+        $this->getObjectManager()->flush($fichier);
         return $fichier;
     }
 
-    /**
-     * @param Fichier $fichier
-     * @return Fichier
-     */
-    public function update($fichier)
+    public function update(Fichier $fichier): Fichier
     {
-        $user = $this->getUserService()->getConnectedUser();
-        $date = new DateTime();
-
-        $fichier->setHistoModificateur($user);
-        $fichier->setHistoModification($date);
-
-        try {
-            $this->getEntityManager()->flush($fichier);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème s'est produit lors de la mise à jour d'un Fichier.", $e);
-        }
+        $this->getObjectManager()->flush($fichier);
         return $fichier;
     }
 
-    /**
-     * @param Fichier $fichier
-     * @return Fichier
-     */
-    public function historise($fichier)
+    public function historise(Fichier $fichier): Fichier
     {
-        $user = $this->getUserService()->getConnectedUser();
-        $date = new DateTime();
-
-        $fichier->setHistoDestructeur($user);
-        $fichier->setHistoDestruction($date);
-
-        try {
-            $this->getEntityManager()->flush($fichier);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème s'est produit lors de l'historisation d'un Fichier.", $e);
-        }
+        $this->getObjectManager()->flush($fichier);
         return $fichier;
     }
 
-    /**
-     * @param Fichier $fichier
-     * @return Fichier
-     */
-    public function restore($fichier)
+    public function restore(Fichier $fichier): Fichier
     {
-        $fichier->setHistoDestructeur(null);
-        $fichier->setHistoDestruction(null);
-
-        try {
-            $this->getEntityManager()->flush($fichier);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème s'est produit lors de la restauration d'un Fichier.", $e);
-        }
+        $this->getObjectManager()->flush($fichier);
         return $fichier;
     }
 
-    /**
-     * @param Fichier $fichier
-     * @return Fichier
-     */
-    public function delete($fichier)
+    public function delete(Fichier $fichier): Fichier
     {
-
-        try {
-            $this->getEntityManager()->remove($fichier);
-            $this->getEntityManager()->flush();
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème s'est produit lors de la suppression d'un Fichier.", $e);
-        }
+        $this->getObjectManager()->remove($fichier);
+        $this->getObjectManager()->flush();
         return $fichier;
     }
 
-    /**
-     * @param integer $id
-     * @return Fichier
-     */
-    public function getFichier($id)
+    public function getFichier(?string $id): ?Fichier
     {
-        $qb = $this->getEntityManager()->getRepository(Fichier::class)->createQueryBuilder('fichier')
+        $qb = $this->getObjectManager()->getRepository(Fichier::class)->createQueryBuilder('fichier')
             ->andWhere('fichier.id = :id')
             ->setParameter('id', $id)
         ;
@@ -143,12 +70,7 @@ class FichierService {
         return $result;
     }
 
-    /**
-     * @param AbstractActionController $controller
-     * @param string $paramName
-     * @return Fichier
-     */
-    public function getRequestedFichier($controller, $paramName)
+    public function getRequestedFichier(AbstractActionController$controller, string $paramName='fichier'): ?Fichier
     {
         $id = $controller->params()->fromRoute($paramName);
         $fichier = $this->getFichier($id);
@@ -207,13 +129,7 @@ class FichierService {
         return $fichier;
     }
 
-    /**
-     * Retourne le contenu d'un Fichier sous la forme d'une chaîne de caractères.
-     *
-     * @param Fichier $fichier
-     * @return string
-     */
-    public function fetchContenuFichier(Fichier $fichier)
+    public function fetchContenuFichier(Fichier $fichier): string
     {
         $filePath = $this->path . $fichier->getNomStockage();
 
@@ -227,7 +143,7 @@ class FichierService {
         return $contenuFichier;
     }
 
-    public function removeFichier(Fichier $fichier)
+    public function removeFichier(Fichier $fichier): void
     {
         $path = $this->path . $fichier->getNomStockage();
         $res = unlink($path);
@@ -240,7 +156,6 @@ class FichierService {
 
     public function readCSV(string $fichier_path, bool $explodeMultiline = false): array
     {
-
         $handle = fopen($fichier_path, "r");
         $array = [];
         $all = "";
diff --git a/module/Fichier/src/Fichier/Service/Fichier/FichierServiceFactory.php b/module/Fichier/src/Fichier/Service/Fichier/FichierServiceFactory.php
index ccf0a5257569fadd474fd8a5097bf851cd0b54b1..9132adde9690d2f42cab53582066ab529313229c 100644
--- a/module/Fichier/src/Fichier/Service/Fichier/FichierServiceFactory.php
+++ b/module/Fichier/src/Fichier/Service/Fichier/FichierServiceFactory.php
@@ -3,13 +3,18 @@
 namespace Fichier\Service\Fichier;
 
 use Doctrine\ORM\EntityManager;
-use Interop\Container\ContainerInterface;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\ContainerInterface;
+use Psr\Container\NotFoundExceptionInterface;
 use UnicaenUtilisateur\Service\User\UserService;
-use Laminas\ServiceManager\ServiceLocatorInterface;
 
 class FichierServiceFactory {
 
-    public function __invoke(ContainerInterface $container)
+    /**
+     * @throws NotFoundExceptionInterface
+     * @throws ContainerExceptionInterface
+     */
+    public function __invoke(ContainerInterface $container): FichierService
     {
         $path = $container->get('Config')['unicaen-fichier']['upload-path'];
 
@@ -20,9 +25,8 @@ class FichierServiceFactory {
         $entityManager = $container->get('doctrine.entitymanager.orm_default');
         $userService = $container->get(UserService::class);
 
-        /** @var FichierService $service */
         $service = new FichierService();
-        $service->setEntityManager($entityManager);
+        $service->setObjectManager($entityManager);
         $service->setUserService($userService);
         $service->setPath($path);
         return $service;
diff --git a/module/Fichier/src/Fichier/Service/Nature/NatureService.php b/module/Fichier/src/Fichier/Service/Nature/NatureService.php
index 654f61f9a2eceb9d341c5ac3a375c4b3add74a9b..3066fdb770b4c791744c6a3d2a1c0fb095006711 100644
--- a/module/Fichier/src/Fichier/Service/Nature/NatureService.php
+++ b/module/Fichier/src/Fichier/Service/Nature/NatureService.php
@@ -3,18 +3,18 @@
 namespace Fichier\Service\Nature;
 
 use Doctrine\ORM\NonUniqueResultException;
+use DoctrineModule\Persistence\ProvidesObjectManager;
 use Fichier\Entity\Db\Nature;
 use UnicaenApp\Exception\RuntimeException;
-use UnicaenApp\Service\EntityManagerAwareTrait;
 
-class NatureService {
-    use EntityManagerAwareTrait;
+class NatureService
+{
+    use ProvidesObjectManager;
 
-    public function getNaturesAsOptions()
+    public function getNaturesAsOptions(): array
     {
-        $qb = $this->getEntityManager()->getRepository(Nature::class)->createQueryBuilder('nature')
+        $qb = $this->getObjectManager()->getRepository(Nature::class)->createQueryBuilder('nature')
             ->orderBy('nature.id');
-            ;
         $result = $qb->getQuery()->getResult();
 
         $options = [];
@@ -26,38 +26,28 @@ class NatureService {
         return $options;
     }
 
-    /**
-     * @param integer $id
-     * @return Nature
-     */
-    public function getNature($id)
+    public function getNature(?int $id): ?Nature
     {
-        $qb = $this->getEntityManager()->getRepository(Nature::class)->createQueryBuilder('nature')
+        $qb = $this->getObjectManager()->getRepository(Nature::class)->createQueryBuilder('nature')
             ->andWhere('nature.id = :id')
-            ->setParameter('id', $id)
-        ;
+            ->setParameter('id', $id);
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
-            throw new RuntimeException("Plusieurs Nature partagent le même identifiant [".$id."]", $e);
+            throw new RuntimeException("Plusieurs Nature partagent le même identifiant [" . $id . "]", $e);
         }
         return $result;
     }
 
-    /**
-     * @param string $code
-     * @return Nature
-     */
-    public function getNatureByCode($code)
+    public function getNatureByCode(?string $code): ?Nature
     {
-        $qb = $this->getEntityManager()->getRepository(Nature::class)->createQueryBuilder('nature')
+        $qb = $this->getObjectManager()->getRepository(Nature::class)->createQueryBuilder('nature')
             ->andWhere('nature.code = :code')
-            ->setParameter('code', $code)
-        ;
+            ->setParameter('code', $code);
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
-            throw new RuntimeException("Plusieurs Nature partagent le même code [".$code."]", $e);
+            throw new RuntimeException("Plusieurs Nature partagent le même code [" . $code . "]", $e);
         }
         return $result;
     }
diff --git a/module/Fichier/src/Fichier/Service/Nature/NatureServiceFactory.php b/module/Fichier/src/Fichier/Service/Nature/NatureServiceFactory.php
index 449c555dc7bc9b2a8044111c058390e7521c0063..791de5e56b718a0072e168b0d861241be847edc7 100644
--- a/module/Fichier/src/Fichier/Service/Nature/NatureServiceFactory.php
+++ b/module/Fichier/src/Fichier/Service/Nature/NatureServiceFactory.php
@@ -3,21 +3,26 @@
 namespace Fichier\Service\Nature;
 
 use Doctrine\ORM\EntityManager;
-use Interop\Container\ContainerInterface;
-use Laminas\ServiceManager\ServiceLocatorInterface;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\ContainerInterface;
+use Psr\Container\NotFoundExceptionInterface;
 
-class NatureServiceFactory {
+class NatureServiceFactory
+{
 
-    public function __invoke(ContainerInterface $container)
+    /**
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
+    public function __invoke(ContainerInterface $container): NatureService
     {
         /**
          * @var EntityManager $entityManager
          */
         $entityManager = $container->get('doctrine.entitymanager.orm_default');
 
-        /** @var NatureService $service */
         $service = new NatureService();
-        $service->setEntityManager($entityManager);
+        $service->setObjectManager($entityManager);
         return $service;
     }
 }
\ No newline at end of file
diff --git a/module/Formation/config/merged/axe.config.php b/module/Formation/config/merged/axe.config.php
index 123933dd539d57e00d4e3e682892c57a52a9b14f..b614f7344c2241a4b10fe206bfeedb2d31dd3eb3 100644
--- a/module/Formation/config/merged/axe.config.php
+++ b/module/Formation/config/merged/axe.config.php
@@ -8,6 +8,10 @@ use Formation\Form\Axe\AxeForm;
 use Formation\Form\Axe\AxeFormFactory;
 use Formation\Form\Axe\AxeHydrator;
 use Formation\Form\Axe\AxeHydratorFactory;
+use Formation\Form\SelectionAxe\SelectionAxeForm;
+use Formation\Form\SelectionAxe\SelectionAxeFormFactory;
+use Formation\Form\SelectionAxe\SelectionAxeHydrator;
+use Formation\Form\SelectionAxe\SelectionAxeHydratorFactory;
 use Formation\Provider\Privilege\AxePrivileges;
 use Formation\Service\Axe\AxeService;
 use Formation\Service\Axe\AxeServiceFactory;
@@ -190,11 +194,13 @@ return [
     'form_elements' => [
         'factories' => [
             AxeForm::class => AxeFormFactory::class,
+            SelectionAxeForm::class => SelectionAxeFormFactory::class,
         ],
     ],
     'hydrators' => [
         'factories' => [
             AxeHydrator::class => AxeHydratorFactory::class,
+            SelectionAxeHydrator::class => SelectionAxeHydratorFactory::class,
         ],
     ]
 
diff --git a/module/Formation/config/merged/domaine.config.php b/module/Formation/config/merged/domaine.config.php
index 1fc307b0c348c2d0aaedc77b2134df4ff3439c63..e0d968c94a8638ee01f4cc278bdf02dbc4f96d08 100644
--- a/module/Formation/config/merged/domaine.config.php
+++ b/module/Formation/config/merged/domaine.config.php
@@ -53,6 +53,7 @@ return [
                     'action' => [
                         'modifier',
                         'gerer-formations',
+                        'gerer-axes',
                         'ajouter-referent',
                         'retirer-referent',
                     ],
@@ -167,6 +168,16 @@ return [
                             ],
                         ],
                     ],
+                    'gerer-axes' => [
+                        'type'  => Segment::class,
+                        'options' => [
+                            'route'    => '/gerer-axes/:domaine',
+                            'defaults' => [
+                                /** @see DomaineController::gererAxesAction() */
+                                'action'     => 'gerer-axes',
+                            ],
+                        ],
+                    ],
                     'ajouter-referent' => [
                         'type'  => Segment::class,
                         'options' => [
diff --git a/module/Formation/config/merged/formation-instance-inscrit.config.php b/module/Formation/config/merged/formation-instance-inscrit.config.php
index 0ae9be7118fd9c13cc49490094702df49a56b720..3ffb72fc4e869e2b3609d7fb909881e18293eab0 100644
--- a/module/Formation/config/merged/formation-instance-inscrit.config.php
+++ b/module/Formation/config/merged/formation-instance-inscrit.config.php
@@ -85,8 +85,9 @@ return [
                         'pages' => [
                             [
                                 'order' => 310,
-                                'label' => 'Mes inscriptions en cours',
+                                'label' => 'Mes inscriptions',
                                 'route' => 'inscriptions',
+                                /** @see FormationInstanceInscritController::inscriptionsAction() */
                                 'resource' => PrivilegeController::getResourceId(FormationInstanceInscritController::class, 'inscriptions'),
                             ],
                             [
diff --git a/module/Formation/config/merged/inscription.config.php b/module/Formation/config/merged/inscription.config.php
index 6794d38264d90bc89fb9192ee268b56d2487bb94..54236453437c412d41bfeb2aa5efc0f6911bdaf1 100644
--- a/module/Formation/config/merged/inscription.config.php
+++ b/module/Formation/config/merged/inscription.config.php
@@ -46,6 +46,7 @@ return [
                     [
                         'privileges' => [
                             InscriptionPrivileges::INSCRIPTION_AFFICHER,
+                            InscriptionPrivileges::INSCRIPTION_ANNULER,
                         ],
                         'resources' => ['Inscription'],
                         'assertion' => InscriptionAssertion::class
@@ -68,6 +69,7 @@ return [
                     'controller' => InscriptionController::class,
                     'action' => [
                         'afficher',
+                        'afficher-cycle-vie',
                     ],
                     'privileges' => [
                         InscriptionPrivileges::INSCRIPTION_AFFICHER,
@@ -139,13 +141,21 @@ return [
                     'controller' => InscriptionController::class,
                     'action' => [
                         'inscription',
-                        'desinscription',
                     ],
                     'roles' => [
                         'Agent',
                         'Stagiaire externe',
                     ],
                 ],
+                [
+                    'controller' => InscriptionController::class,
+                    'action' => [
+                        'desinscription',
+                    ],
+                    'privileges' => [
+                        InscriptionPrivileges::INSCRIPTION_ANNULER,
+                    ],
+                ],
                 [
                     'controller' => InscriptionController::class,
                     'action' => [
@@ -214,6 +224,16 @@ return [
                             ],
                         ],
                     ],
+                    'afficher-cycle-vie' => [
+                        'type' => Segment::class,
+                        'options' => [
+                            'route' => '/afficher-cycle-vie/:inscription',
+                            'defaults' => [
+                                /** @see InscriptionController::afficherCycleVieAction() */
+                                'action' => 'afficher-cycle-vie',
+                            ],
+                        ],
+                    ],
                     'ajouter' => [
                         'type' => Segment::class,
                         'options' => [
diff --git a/module/Formation/config/module.config.php b/module/Formation/config/module.config.php
index 8ae37db0185aaceb5c18aee929f3a3aa28b452d0..843831794b1b19e9fe80c8ff5e6208e50132406d 100755
--- a/module/Formation/config/module.config.php
+++ b/module/Formation/config/module.config.php
@@ -23,9 +23,6 @@ use Formation\Service\Notification\NotificationService;
 use Formation\Service\Notification\NotificationServiceFactory;
 use Formation\Service\Url\UrlService;
 use Formation\Service\Url\UrlServiceFactory;
-use Formation\View\Helper\DemandeExterneArrayViewHelper;
-use Formation\View\Helper\DemandeExterneArrayViewHelperFactory;
-use Formation\View\Helper\DemandeExterneViewHelper;
 use Laminas\Router\Http\Literal;
 use UnicaenPrivilege\Guard\PrivilegeController;
 
@@ -217,14 +214,10 @@ return [
     ],
     'view_helpers' => [
         'invokables' => [
-            'demandeExterne' => DemandeExterneViewHelper::class,
-
         ],
         'factories' => [
-            DemandeExterneArrayViewHelper::class => DemandeExterneArrayViewHelperFactory::class,
         ],
         'aliases' => [
-            'demandeExterneArray' => DemandeExterneArrayViewHelper::class,
         ],
     ],
     'view_manager' => [
diff --git a/module/Formation/src/Formation/Assertion/InscriptionAssertion.php b/module/Formation/src/Formation/Assertion/InscriptionAssertion.php
index 478d46b85505d4f6d99c67bf3daa6c28d02c316b..dde38523a1c16b955914cd6d81c74d8cc95dcc0e 100644
--- a/module/Formation/src/Formation/Assertion/InscriptionAssertion.php
+++ b/module/Formation/src/Formation/Assertion/InscriptionAssertion.php
@@ -9,6 +9,8 @@ use Agent\Service\Agent\AgentServiceAwareTrait;
 use Agent\Service\AgentValidateur\AgentValidateurServiceAwareTrait;
 use Agent\Provider\Privilege\AgentPrivileges;
 use Formation\Entity\Db\Inscription;
+use Formation\Provider\Etat\InscriptionEtats;
+use Formation\Provider\Etat\SessionEtats;
 use Formation\Provider\Privilege\InscriptionPrivileges;
 use Formation\Provider\Role\FormationRoles;
 use Formation\Service\Inscription\InscriptionServiceAwareTrait;
@@ -64,10 +66,16 @@ class InscriptionAssertion extends AbstractAssertion
 
         if (!$this->getPrivilegeService()->checkPrivilege($privilege, $role)) return false;
 
+        $session = $entity->getSession();
+        $sessionEtat = $session->getEtatActif()?->getType()->getCode();
 
         switch ($privilege) {
             case InscriptionPrivileges::INSCRIPTION_AFFICHER:
                 return $this->isScopeCompatible($entity, $user, $role);
+            case InscriptionPrivileges::INSCRIPTION_ANNULER:
+                if (!$this->isScopeCompatible($entity, $user, $role)) return false;
+                if (!in_array($role->getRoleId(), [RolesProvider::ROLE_AGENT, FormationRoles::STAGIAIRE_EXTERNE])) return true;
+                return ($sessionEtat AND in_array($sessionEtat, SessionEtats::ETATS_INSCRIPTION_ANNULABLE));
         }
 
         return true;
diff --git a/module/Formation/src/Formation/Controller/DomaineController.php b/module/Formation/src/Formation/Controller/DomaineController.php
index 145345c51ee1aea9c4c84ca307fa88d95e626db4..3b56f33f2a6a404376971ebc6b6e32927042f8b4 100644
--- a/module/Formation/src/Formation/Controller/DomaineController.php
+++ b/module/Formation/src/Formation/Controller/DomaineController.php
@@ -4,6 +4,7 @@ namespace Formation\Controller;
 
 use Formation\Entity\Db\Domaine;
 use Formation\Form\Domaine\DomaineFormAwareTrait;
+use Formation\Form\SelectionAxe\SelectionAxeFormAwareTrait;
 use Formation\Form\SelectionFormation\SelectionFormationFormAwareTrait;
 use Formation\Form\SelectionReferent\SelectionReferentFormAwareTrait;
 use Formation\Service\Domaine\DomaineServiceAwareTrait;
@@ -18,6 +19,7 @@ class DomaineController extends AbstractActionController
     use DomaineServiceAwareTrait;
     use ReferentServiceAwareTrait;
     use DomaineFormAwareTrait;
+    use SelectionAxeFormAwareTrait;
     use SelectionFormationFormAwareTrait;
     use SelectionReferentFormAwareTrait;
 
@@ -160,8 +162,34 @@ class DomaineController extends AbstractActionController
         exit;
     }
     
-    /** Gerer les formations ******************************************************************************************/
-    
+    /** Gerer axes/formations/reférents *******************************************************************************/
+
+    public function gererAxesAction(): ViewModel
+    {
+        $domaine = $this->getDomaineService()->getRequestedDomaine($this);
+        $form = $this->getSelectionAxeForm();
+        $form->setAttribute('action', $this->url()->fromRoute('formation-domaine/gerer-axes', ['domaine' => $domaine->getId()], [], true));
+        $form->bind($domaine);
+
+        $request = $this->getRequest();
+        if ($request->isPost()) {
+            $data = $request->getPost();
+            $form->setData($data);
+            if ($form->isValid()) {
+                $this->getDomaineService()->update($domaine);
+                exit();
+            }
+        }
+
+        $vm = new ViewModel([
+            'title' => "Gérer les axes associés aux domaines [" . $domaine->getLibelle() . "]",
+            'form' => $form,
+        ]);
+//        $vm->setTemplate('formation/formation/selection-axe-form');
+        $vm->setTemplate('default/default-form');
+        return $vm;
+    }
+
     public function gererFormationsAction(): ViewModel
     {
         $domaine = $this->getDomaineService()->getRequestedDomaine($this);
@@ -182,14 +210,13 @@ class DomaineController extends AbstractActionController
         }
 
         $vm = new ViewModel([
-            'title' => "Gérer les formations associé aux domaines [" . $domaine->getLibelle() . "]",
+            'title' => "Gérer les formations associées aux domaines [" . $domaine->getLibelle() . "]",
             'form' => $form,
         ]);
         $vm->setTemplate('formation/formation/selection-formation-form');
         return $vm;
     }
 
-    /** Gestion référent *****************************************************************************/
 
     public function ajouterReferentAction(): ViewModel
     {
diff --git a/module/Formation/src/Formation/Controller/DomaineControllerFactory.php b/module/Formation/src/Formation/Controller/DomaineControllerFactory.php
index 309e92cfd569678089a33a01f90591de2d4185f8..538feaa46bee11270036aef00c5659bf25f1b423 100644
--- a/module/Formation/src/Formation/Controller/DomaineControllerFactory.php
+++ b/module/Formation/src/Formation/Controller/DomaineControllerFactory.php
@@ -3,6 +3,7 @@
 namespace Formation\Controller;
 
 use Formation\Form\Domaine\DomaineForm;
+use Formation\Form\SelectionAxe\SelectionAxeForm;
 use Formation\Form\SelectionFormation\SelectionFormationForm;
 use Formation\Form\SelectionReferent\SelectionReferentForm;
 use Formation\Service\Domaine\DomaineService;
@@ -26,12 +27,14 @@ class DomaineControllerFactory
          * @var DomaineService $domaineService
          * @var ReferentService $referentService
          * @var DomaineForm $domaineForm
+         * @var SelectionAxeForm $selectionAxeForm
          * @var SelectionFormationForm $selectionFormationForm
          * @var SelectionReferentForm $selectionReferentForm
          */
         $domaineService = $container->get(DomaineService::class);
         $referentService = $container->get(ReferentService::class);
         $domaineForm = $container->get('FormElementManager')->get(DomaineForm::class);
+        $selectionAxeForm = $container->get('FormElementManager')->get(SelectionAxeForm::class);
         $selectionFormationForm = $container->get('FormElementManager')->get(SelectionFormationForm::class);
         $selectionReferentForm = $container->get('FormElementManager')->get(SelectionReferentForm::class);
 
@@ -39,6 +42,7 @@ class DomaineControllerFactory
         $controller->setDomaineService($domaineService);
         $controller->setReferentService($referentService);
         $controller->setDomaineForm($domaineForm);
+        $controller->setSelectionAxeForm($selectionAxeForm);
         $controller->setSelectionFormationForm($selectionFormationForm);
         $controller->setSelectionReferentForm($selectionReferentForm);
         return $controller;
diff --git a/module/Formation/src/Formation/Controller/FormationInstanceInscritController.php b/module/Formation/src/Formation/Controller/FormationInstanceInscritController.php
index b05b9d74f0676a368adf5dd32cf2162a7729bd41..2d668c937853d0f5ede1ecb62f82239b6abf3162 100644
--- a/module/Formation/src/Formation/Controller/FormationInstanceInscritController.php
+++ b/module/Formation/src/Formation/Controller/FormationInstanceInscritController.php
@@ -7,11 +7,14 @@ use DemandeExterne\Service\DemandeExterne\DemandeExterneServiceAwareTrait;
 use Agent\Form\SelectionAgent\SelectionAgentFormAwareTrait;
 use Application\Provider\Parametre\MailParametres;
 use DemandeExterne\Entity\Db\DemandeExterne;
+use Formation\Entity\Db\Inscription;
 use Formation\Form\Inscription\InscriptionFormAwareTrait;
 use DemandeExterne\Provider\Etat\DemandeExterneEtats;
+use Formation\Provider\Etat\InscriptionEtats;
 use Formation\Provider\Etat\SessionEtats;
 use Formation\Provider\Template\TextTemplates;
 use DemandeExterne\Provider\Template\TextTemplates as DemandeExterneTextTemplates;
+use Formation\Service\Domaine\DomaineServiceAwareTrait;
 use Formation\Service\Inscription\InscriptionServiceAwareTrait;
 use Formation\Service\Notification\NotificationServiceAwareTrait;
 use Formation\Service\Session\SessionServiceAwareTrait;
@@ -31,6 +34,7 @@ class FormationInstanceInscritController extends AbstractActionController
 {
     use AgentServiceAwareTrait;
     use DemandeExterneServiceAwareTrait;
+    use DomaineServiceAwareTrait;
     use EtatInstanceServiceAwareTrait;
     use EtatTypeServiceAwareTrait;
     use SessionServiceAwareTrait;
@@ -60,6 +64,7 @@ class FormationInstanceInscritController extends AbstractActionController
         return new ViewModel([
             'sessions' => $sessions,
             'inscriptions' => $inscriptions,
+            'domaines' => $this->getDomaineService()->getDomaines('libelle','asc'),
             'agent' => $agent,
             'rendu' => $rendu,
 //            'stagiaire' => $stagiaire,
@@ -120,24 +125,32 @@ class FormationInstanceInscritController extends AbstractActionController
         $utilisateur = $this->getUserService()->getConnectedUser();
         $agent = $this->getAgentService()->getAgentByUser($utilisateur);
 
-        $inscriptions = $this->getInscriptionService()->getInscriptionsByAgent($agent);
+        $inscriptionsAttentes = $this->getInscriptionService()->getInscriptionsByAgentsAndEtats([$agent],[InscriptionEtats::ETAT_DEMANDE, InscriptionEtats::ETAT_VALIDER_RESPONSABLE], null);
+        $inscriptionsAttentes = array_filter($inscriptionsAttentes, function (Inscription $inscription) { return !in_array($inscription->getSession()->getEtatActif()->getType()->getCode(),  SessionEtats::ETATS_FINAUX);});
+        $inscriptionsValidees = $this->getInscriptionService()->getInscriptionsByAgentsAndEtats([$agent],[InscriptionEtats::ETAT_VALIDER_DRH], null);
+        $inscriptionsValidees = array_filter($inscriptionsValidees, function (Inscription $inscription) { return !in_array($inscription->getSession()->getEtatActif()->getType()->getCode(),  SessionEtats::ETATS_FINAUX);});
+        $inscriptionsRefusees = $this->getInscriptionService()->getInscriptionsByAgentsAndEtats([$agent],[InscriptionEtats::ETAT_REFUSER], null);
+        //$inscriptionsRefusees = array_filter($inscriptionsRefusees, function (Inscription $inscription) { return !in_array($inscription->getSession()->getEtatActif()->getType()->getCode(),  SessionEtats::ETATS_FINAUX);});
+        $inscriptionsDesistements = $this->getInscriptionService()->getInscriptionsByAgentsAndEtats([$agent],[InscriptionEtats::ETAT_DESISTEMENT], null);
+        //$inscriptionsDesistements = array_filter($inscriptionsDesistements, function (Inscription $inscription) { return !in_array($inscription->getSession()->getEtatActif()->getType()->getCode(),  SessionEtats::ETATS_FINAUX);});
 
-        $demandes = $this->getDemandeExterneService()->getDemandesExternesByAgent($agent);
-        $demandes = array_filter($demandes,
-            function (DemandeExterne $d) {
-                return $d->estNonHistorise()
-                    && !$d->isEtatActif(DemandeExterneEtats::ETAT_REJETEE)
-                    && !$d->isEtatActif(DemandeExterneEtats::ETAT_TERMINEE);
-            });
-        $demandesValidees = array_filter($demandes, function (DemandeExterne $d) {
-            return !$d->isEtatActif(DemandeExterneEtats::ETAT_CREATION_EN_COURS);
-        });
+
+        $demandesAttentes  = $this->getDemandeExterneService()->getDemandesExternesByAgentsAndEtats([$agent], DemandeExterneEtats::ETATS_OUVERTS);
+        $demandesValidees  = $this->getDemandeExterneService()->getDemandesExternesByAgentsAndEtats([$agent], [DemandeExterneEtats::ETAT_TERMINEE]);
+        $demandesValidees  = array_filter($demandesValidees, function (DemandeExterne $demandeExterne) { return empty($demandeExterne->getSessions());});
+        $demandesRefusees  = $this->getDemandeExterneService()->getDemandesExternesByAgentsAndEtats([$agent], [DemandeExterneEtats::ETAT_REJETEE]);
 
         return new ViewModel([
             'agent' => $agent,
 
-            'inscriptions' => $inscriptions,
-            'demandes' => $demandesValidees,
+            'inscriptionsAttentes' => $inscriptionsAttentes,
+            'inscriptionsValidees' => $inscriptionsValidees,
+            'inscriptionsRefusees' => $inscriptionsRefusees,
+            'inscriptionsDesistements' => $inscriptionsDesistements,
+
+            'demandesAttentes' => $demandesAttentes,
+            'demandesValidees' => $demandesValidees,
+            'demandesRefusees' => $demandesRefusees,
         ]);
     }
 
diff --git a/module/Formation/src/Formation/Controller/FormationInstanceInscritControllerFactory.php b/module/Formation/src/Formation/Controller/FormationInstanceInscritControllerFactory.php
index ee213ddd1ba8d952fa1113afbbf271f3d7f6a17d..8ff1edff465a1b80161dec9824a94438d027cd62 100644
--- a/module/Formation/src/Formation/Controller/FormationInstanceInscritControllerFactory.php
+++ b/module/Formation/src/Formation/Controller/FormationInstanceInscritControllerFactory.php
@@ -6,6 +6,7 @@ use Agent\Form\SelectionAgent\SelectionAgentForm;
 use Agent\Service\Agent\AgentService;
 use DemandeExterne\Service\DemandeExterne\DemandeExterneService;
 use Formation\Form\Inscription\InscriptionForm;
+use Formation\Service\Domaine\DomaineService;
 use Formation\Service\Inscription\InscriptionService;
 use Formation\Service\Notification\NotificationService;
 use Formation\Service\Session\SessionService;
@@ -34,6 +35,7 @@ class FormationInstanceInscritControllerFactory
         /**
          * @var AgentService $agentService
          * @var DemandeExterneService $demandeExterneService
+         * @var DomaineService $domaineService
          * @var EtatInstanceService $etatInstanceService
          * @var EtatTypeService $etatTypeService
          * @var SessionService $sessionService
@@ -47,6 +49,7 @@ class FormationInstanceInscritControllerFactory
          */
         $agentService = $container->get(AgentService::class);
         $demandeExterneService = $container->get(DemandeExterneService::class);
+        $domaineService = $container->get(DomaineService::class);
         $etatInstanceService = $container->get(EtatInstanceService::class);
         $etatTypeService = $container->get(EtatTypeService::class);
         $sessionService = $container->get(SessionService::class);
@@ -68,6 +71,7 @@ class FormationInstanceInscritControllerFactory
         $controller = new FormationInstanceInscritController();
         $controller->setAgentService($agentService);
         $controller->setDemandeExterneService($demandeExterneService);
+        $controller->setDomaineService($domaineService);
         $controller->setEtatInstanceService($etatInstanceService);
         $controller->setEtatTypeService($etatTypeService);
         $controller->setSessionService($sessionService);
diff --git a/module/Formation/src/Formation/Controller/InscriptionController.php b/module/Formation/src/Formation/Controller/InscriptionController.php
index 484f1615f4951772c10e0ce461b7b377a9f75897..55e672c82a792a6fbe30f443ef7fac2cdc7d0406 100644
--- a/module/Formation/src/Formation/Controller/InscriptionController.php
+++ b/module/Formation/src/Formation/Controller/InscriptionController.php
@@ -36,6 +36,7 @@ use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger;
 use Laminas\View\Model\ViewModel;
 use UnicaenEnquete\Service\Enquete\EnqueteServiceAwareTrait;
 use UnicaenEnquete\Service\Instance\InstanceServiceAwareTrait;
+use UnicaenEtat\Entity\Db\EtatInstance;
 use UnicaenEtat\Service\EtatInstance\EtatInstanceServiceAwareTrait;
 use UnicaenParametre\Service\Parametre\ParametreServiceAwareTrait;
 use UnicaenUtilisateur\Service\User\UserServiceAwareTrait;
@@ -200,6 +201,23 @@ class InscriptionController extends AbstractActionController
         ]);
     }
 
+    public function afficherCycleVieAction(): ViewModel
+    {
+        $inscription = $this->getInscriptionService()->getRequestedInscription($this);
+        $etats = $inscription->getEtats()->toArray();
+        usort($etats, function (EtatInstance $a, EtatInstance $b) {
+            $dateA = $a->getHistoDestruction() ?? $a->getHistoModification() ?? $a->getHistoCreation();
+            $dateB = $b->getHistoDestruction() ?? $b->getHistoModification() ?? $b->getHistoCreation();
+            return $dateA <=> $dateB;
+        });
+
+        return new ViewModel([
+            'title' => "Cycle de vie : états associés",
+            'inscription' => $inscription,
+            'etats' => $etats,
+        ]);
+    }
+
     public function historiserAction(): Response
     {
         $inscrit = $this->getInscriptionService()->getRequestedInscription($this);
diff --git a/module/Formation/src/Formation/Controller/PlanDeFormationController.php b/module/Formation/src/Formation/Controller/PlanDeFormationController.php
index 3cb64d218ddb88e06baed0d5080769fc8d248ffe..6bb14dd7b7da46ce954831beb6f64ecc002cfdec 100644
--- a/module/Formation/src/Formation/Controller/PlanDeFormationController.php
+++ b/module/Formation/src/Formation/Controller/PlanDeFormationController.php
@@ -8,6 +8,7 @@ use Formation\Form\PlanDeFormation\PlanDeFormationFormAwareTrait;
 use Formation\Form\PlanDeFormationImportation\PlanDeFormationImportationFormAwareTrait;
 use Formation\Form\SelectionFormation\SelectionFormationFormAwareTrait;
 use Formation\Form\SelectionPlanDeFormation\SelectionPlanDeFormationFormAwareTrait;
+use Formation\Provider\Parametre\PlanFormationParametres;
 use Formation\Provider\Template\TextTemplates;
 use Formation\Service\Abonnement\AbonnementServiceAwareTrait;
 use Formation\Service\ActionCoutPrevisionnel\ActionCoutPrevisionnelServiceAwareTrait;
@@ -18,6 +19,7 @@ use Formation\Service\PlanDeFormation\PlanDeFormationServiceAwareTrait;
 use Laminas\Http\Response;
 use Laminas\Mvc\Controller\AbstractActionController;
 use Laminas\View\Model\ViewModel;
+use UnicaenParametre\Service\Parametre\ParametreServiceAwareTrait;
 use UnicaenRenderer\Service\Rendu\RenduServiceAwareTrait;
 
 class PlanDeFormationController extends AbstractActionController
@@ -28,6 +30,7 @@ class PlanDeFormationController extends AbstractActionController
     use AgentServiceAwareTrait;
     use DomaineServiceAwareTrait;
     use FormationServiceAwareTrait;
+    use ParametreServiceAwareTrait;
     use PlanDeFormationServiceAwareTrait;
     use RenduServiceAwareTrait;
 
@@ -67,6 +70,9 @@ class PlanDeFormationController extends AbstractActionController
             'domaines' => $domaines,
             'actionsByDomaines' => $actionsByDomaines,
 
+            'navigationActivatee' => $this->getParametreService()->getValeurForParametre(PlanFormationParametres::TYPE, PlanFormationParametres::NAVIGATION_ACTIVEE),
+            'axeAffiche' => $this->getParametreService()->getValeurForParametre(PlanFormationParametres::TYPE, PlanFormationParametres::AXE_AFFICHE),
+
             'agent' => $agent,
             'rendu' => $rendu,
         ]);
@@ -351,7 +357,7 @@ class PlanDeFormationController extends AbstractActionController
                 }
 
                 $header = $array[0];
-                //TODO detecter column
+
                 $axeColumn = array_search("Axe", $header);
                 $formationColumn = array_search("Action", $header);
                 $domaineColumn = array_search("Domaine", $header);
diff --git a/module/Formation/src/Formation/Controller/PlanDeFormationControllerFactory.php b/module/Formation/src/Formation/Controller/PlanDeFormationControllerFactory.php
index 910ebffe0d3cf980d7cfe4240b894523c5293a36..70d82a0e0e53a6b2b11d6b85d2598dd0a7559b07 100644
--- a/module/Formation/src/Formation/Controller/PlanDeFormationControllerFactory.php
+++ b/module/Formation/src/Formation/Controller/PlanDeFormationControllerFactory.php
@@ -16,6 +16,7 @@ use Formation\Service\PlanDeFormation\PlanDeFormationService;
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\ContainerInterface;
 use Psr\Container\NotFoundExceptionInterface;
+use UnicaenParametre\Service\Parametre\ParametreService;
 use UnicaenRenderer\Service\Rendu\RenduService;
 
 class PlanDeFormationControllerFactory
@@ -45,6 +46,7 @@ class PlanDeFormationControllerFactory
         $actionCoutPrevisionnelService = $container->get(ActionCoutPrevisionnelService::class);
         $domaineService = $container->get(DomaineService::class);
         $formationService = $container->get(FormationService::class);
+        $parametreService = $container->get(ParametreService::class);
         $planDeFormationService = $container->get(PlanDeFormationService::class);
         $renduService = $container->get(RenduService::class);
 
@@ -66,6 +68,7 @@ class PlanDeFormationControllerFactory
         $controller->setAxeService($axeService);
         $controller->setDomaineService($domaineService);
         $controller->setFormationService($formationService);
+        $controller->setParametreService($parametreService);
         $controller->setPlanDeFormationService($planDeFormationService);
         $controller->setRenduService($renduService);
         $controller->setPlanDeFormationForm($planDeFormationForm);
diff --git a/module/Formation/src/Formation/Controller/SessionController.php b/module/Formation/src/Formation/Controller/SessionController.php
index d91c4d211fdb738c2ea75516fb201beb6bccf7e4..aae2675fe61328c1b281866c054a57f817b4a234 100644
--- a/module/Formation/src/Formation/Controller/SessionController.php
+++ b/module/Formation/src/Formation/Controller/SessionController.php
@@ -4,6 +4,8 @@ namespace Formation\Controller;
 
 use DateTime;
 use Formation\Entity\Db\Inscription;
+use Formation\Entity\Db\Seance;
+use Formation\Event\InscriptionCloture\InscriptionClotureEventAwareTrait;
 use Formation\Form\Annulation\AnnulationFormAwareTrait;
 use Formation\Form\Notification\NotificationFormAwareTrait;
 use Formation\Form\SelectionFormateur\SelectionFormateurFormAwareTrait;
@@ -55,6 +57,8 @@ class SessionController extends AbstractActionController
     use ResultatServiceAwareTrait;
     use UserServiceAwareTrait;
 
+    use InscriptionClotureEventAwareTrait;
+
     use AnnulationFormAwareTrait;
     use NotificationFormAwareTrait;
     use SelectionFormateurFormAwareTrait;
@@ -222,6 +226,10 @@ class SessionController extends AbstractActionController
             $form->setData($data);
             if ($form->isValid()) {
                 $this->getSessionService()->update($session);
+                if ($session->getDateClotureInscription()) {
+                    $seance = new Seance(); $seance->setInstance($session);
+                    $this->getInscriptionClotureEvent()->updateEvent($seance);
+                }
             }
         }
 
@@ -627,6 +635,7 @@ class SessionController extends AbstractActionController
                 $inscriptions = match ($data['liste']) {
                     Inscription::PRINCIPALE => $session->getListePrincipale(),
                     Inscription::COMPLEMENTAIRE => $session->getListeComplementaire(),
+                    'present' => $session->getListePresents(),
                     'tous' => $session->getListeValide(),
                     default => [],
                 };
diff --git a/module/Formation/src/Formation/Controller/SessionControllerFactory.php b/module/Formation/src/Formation/Controller/SessionControllerFactory.php
index 5174bff76cde9ec6450cc6dfd233fe2e028c2ee3..205c61f721967f5d477d8de5843a7da5be191fd3 100644
--- a/module/Formation/src/Formation/Controller/SessionControllerFactory.php
+++ b/module/Formation/src/Formation/Controller/SessionControllerFactory.php
@@ -2,6 +2,7 @@
 
 namespace Formation\Controller;
 
+use Formation\Event\InscriptionCloture\InscriptionClotureEvent;
 use Formation\Form\Annulation\AnnulationForm;
 use Formation\Form\Notification\NotificationForm;
 use Formation\Form\SelectionFormateur\SelectionFormateurForm;
@@ -67,6 +68,11 @@ class SessionControllerFactory
         $sessionService = $container->get(SessionService::class);
         $userService = $container->get(UserService::class);
 
+        /**
+         * @var InscriptionClotureEvent $inscriptionClotureEvent
+         */
+        $inscriptionClotureEvent = $container->get(InscriptionClotureEvent::class);
+
         /**
          * @var AnnulationForm $annulationForm
          * @var NotificationForm $notificationForm
@@ -96,6 +102,7 @@ class SessionControllerFactory
         $controller->setResultatService($resultatService);
         $controller->setSessionService($sessionService);
         $controller->setUserService($userService);
+        $controller->setInscriptionClotureEvent($inscriptionClotureEvent);
         $controller->setAnnulationForm($annulationForm);
         $controller->setNotificationForm($notificationForm);
         $controller->setSessionForm($sessionForm);
diff --git a/module/Formation/src/Formation/Entity/Db/Axe.php b/module/Formation/src/Formation/Entity/Db/Axe.php
index 3f914c4c67fb1f74dad3e34d2b243c9f7c0db72a..2bb71c4808ccc07e3e644496b1e6126b924094d3 100644
--- a/module/Formation/src/Formation/Entity/Db/Axe.php
+++ b/module/Formation/src/Formation/Entity/Db/Axe.php
@@ -20,11 +20,12 @@ class Axe implements HistoriqueAwareInterface, HasDescriptionInterface
     private ?string $libelle = null;
     private ?int $ordre = null;
     private ?string $couleur = null;
-    private Collection $formations;
+
+    private Collection $domaines;
 
     public function __construct()
     {
-        $this->formations = new ArrayCollection();
+        $this->domaines = new ArrayCollection();
     }
 
     public function getId(): ?int
@@ -62,10 +63,10 @@ class Axe implements HistoriqueAwareInterface, HasDescriptionInterface
         $this->couleur = $couleur;
     }
 
-    /** @return Formation[] */
-    public function getFormations(): array
+    /** @return Domaine[] */
+    public function getDomaines(): array
     {
-        return $this->formations->toArray();
+        return $this->domaines->toArray();
     }
 
 }
\ No newline at end of file
diff --git a/module/Formation/src/Formation/Entity/Db/Domaine.php b/module/Formation/src/Formation/Entity/Db/Domaine.php
index 855df31f7f8cffa1f5b077fce6dfbe37bf5068a8..39159a0055472c956f58203952ec00731286a527 100644
--- a/module/Formation/src/Formation/Entity/Db/Domaine.php
+++ b/module/Formation/src/Formation/Entity/Db/Domaine.php
@@ -24,10 +24,12 @@ class Domaine implements HistoriqueAwareInterface, HasDescriptionInterface, HasF
     private ?int $ordre = null;
     private ?string $couleur = null;
 
+    private Collection $axes;
     private Collection $referents;
 
     public function __construct()
     {
+        $this->axes = new ArrayCollection();
         $this->formations = new ArrayCollection();
         $this->referents = new ArrayCollection();
     }
@@ -93,4 +95,36 @@ class Domaine implements HistoriqueAwareInterface, HasDescriptionInterface, HasF
     {
         return $this->referents->contains($referent);
     }
+
+    public function getAxes(bool $withHisto = false): array
+    {
+        $axes = $this->axes->toArray();
+
+        if (!$withHisto) {
+            $axes = array_filter($axes, function (Axe $axe) { return $axe->estNonHistorise();});
+        }
+        return $axes;
+    }
+
+    public function addAxe(Axe $axe): void
+    {
+        if (!$this->axes->contains($axe)) {
+            $this->axes->add($axe);
+        }
+    }
+
+    public function removeAxe(Axe $axe): void
+    {
+        $this->axes->removeElement($axe);
+    }
+
+    public function hasAxe(Axe $axe): bool
+    {
+        return $this->axes->contains($axe);
+    }
+
+    public function setId(int $id): void
+    {
+        $this->id = $id;
+    }
 }
\ No newline at end of file
diff --git a/module/Formation/src/Formation/Entity/Db/Formation.php b/module/Formation/src/Formation/Entity/Db/Formation.php
index ccf0fa874124313431d34157939a31213c6a7763..ec1c889298e0b91d77831cabd65a2d2d566d9afa 100644
--- a/module/Formation/src/Formation/Entity/Db/Formation.php
+++ b/module/Formation/src/Formation/Entity/Db/Formation.php
@@ -37,7 +37,6 @@ class Formation implements HistoriqueAwareInterface,
     private ?int $id = -1;
     private ?string $libelle = null;
     private ?string $lien = null;
-    private ?Axe $axe = null;
     private bool $affichage = true;
 
     // information sur l'action de formation
@@ -67,10 +66,8 @@ class Formation implements HistoriqueAwareInterface,
     public static function getAnnee(?DateTime $date = null): ?int
     {
         if ($date === null) $date = new DateTime();
-        $month = (int)$date->format("m");
         $year = (int)$date->format("Y");
-        if ($month > 8) return $year;
-        return ($year - 1);
+        return $year;
     }
 
     /**
@@ -117,16 +114,6 @@ class Formation implements HistoriqueAwareInterface,
         return $this;
     }
 
-    public function getAxe(): ?Axe
-    {
-        return $this->axe;
-    }
-
-    public function setAxe(?Axe $axe): void
-    {
-        $this->axe = $axe;
-    }
-
     /**
      * @return bool
      */
diff --git a/module/Formation/src/Formation/Entity/Db/Inscription.php b/module/Formation/src/Formation/Entity/Db/Inscription.php
index ab1d85cbee9ed26e5d27ec183ab152989aff1af0..9aa9396ee1de3685b7693ec1ea8ce09896325f60 100644
--- a/module/Formation/src/Formation/Entity/Db/Inscription.php
+++ b/module/Formation/src/Formation/Entity/Db/Inscription.php
@@ -258,6 +258,15 @@ class Inscription implements
         return true;
     }
 
+    public function hasPresence(): bool
+    {
+        $codes = [Presence::PRESENCE_PRESENCE];
+        foreach ($this->presences as $presence) {
+            if ($presence->estNonHistorise() && in_array($presence->getStatut(), $codes)) return true;
+        }
+        return false;
+    }
+
 
     /** Gestion des fichiers  *****************************************************************************************/
     // TODO trait et interface ?
diff --git a/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Axe.dcm.xml b/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Axe.dcm.xml
index 526f001d9c81e9db11867d00b06051572664de58..7414abeb7ca10828ca7e0ee449e9026247076b70 100644
--- a/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Axe.dcm.xml
+++ b/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Axe.dcm.xml
@@ -11,7 +11,17 @@
         <field name="ordre"         column="ordre"          type="integer"   />
         <field name="couleur"       column="couleur"        type="string"       length="64"   />
 
-       <one-to-many target-entity="Formation\Entity\Db\Formation" mapped-by="axe" field="formations"/>
+        <many-to-many field="domaines" target-entity="Formation\Entity\Db\Domaine">
+            <join-table name="formation_axe_domaine">
+                <join-columns>
+                    <join-column name="axe_id" referenced-column-name="id" />
+                </join-columns>
+                <inverse-join-columns>
+                    <join-column name="domaine_id" referenced-column-name="id" />
+                </inverse-join-columns>
+            </join-table>
+        </many-to-many>
+
 
         <!-- HISTORISATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
         <field name="histoCreation"     type="datetime"                 column="histo_creation"     nullable="false"/>
diff --git a/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Domaine.dcm.xml b/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Domaine.dcm.xml
index e17b9699d39e2daac3e4e0350d7a11f2474403b0..05fcc9110cd2d9be144000a4cfa19d49d3942a2d 100644
--- a/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Domaine.dcm.xml
+++ b/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Domaine.dcm.xml
@@ -33,6 +33,17 @@
             </join-table>
         </many-to-many>
 
+        <many-to-many field="axes" target-entity="Formation\Entity\Db\Axe">
+            <join-table name="formation_axe_domaine">
+                <join-columns>
+                    <join-column name="domaine_id" referenced-column-name="id" />
+                </join-columns>
+                <inverse-join-columns>
+                    <join-column name="axe_id" referenced-column-name="id" />
+                </inverse-join-columns>
+            </join-table>
+        </many-to-many>
+
         <!-- HISTORISATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
         <field name="histoCreation"     type="datetime"                 column="histo_creation"     nullable="false"/>
         <field name="histoModification" type="datetime"                 column="histo_modification" nullable="false"/>
diff --git a/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Formation.dcm.xml b/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Formation.dcm.xml
index e329c246be10a9ad7a597079608dc5ad86589214..db95b72864b2081a5db86d5f402160cf74a993ab 100644
--- a/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Formation.dcm.xml
+++ b/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Formation.dcm.xml
@@ -11,10 +11,6 @@
         <field name="lien"          column="lien"           type="string"       length="1024"  />
         <field name="affichage"     column="affichage"      type="boolean"      />
 
-        <many-to-one target-entity="Formation\Entity\Db\Axe"  field="axe">
-            <join-column name="axe_id" referenced-column-name="id"/>
-        </many-to-one>
-
         <field name="type"            column="type"             type="string" length="64"/>
         <field name="objectifs"       column="objectifs"        type="text" />
         <field name="programme"       column="programme"        type="text" />
diff --git a/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Session.dcm.xml b/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Session.dcm.xml
index febeb022b1b80a101599a436d39ab57751db7917..0f56ca53ae042c8e8c0fbe7697965f3f6aafa97b 100644
--- a/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Session.dcm.xml
+++ b/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Session.dcm.xml
@@ -55,7 +55,7 @@
         </many-to-many>
 
         <many-to-many field="demandes" target-entity="DemandeExterne\Entity\Db\DemandeExterne">
-            <join-table name="formation_demande_externe_session">
+            <join-table name="demandeexterne_session">
                 <join-columns>
                     <join-column name="session_id" referenced-column-name="id"/>
                 </join-columns>
diff --git a/module/Formation/src/Formation/Entity/Db/Seance.php b/module/Formation/src/Formation/Entity/Db/Seance.php
index f6c3aac5620e87fc055f8f3934231341d153a893..fd11532bc90dd087071ab63016a49940b8830bd7 100644
--- a/module/Formation/src/Formation/Entity/Db/Seance.php
+++ b/module/Formation/src/Formation/Entity/Db/Seance.php
@@ -174,7 +174,8 @@ class Seance implements HistoriqueAwareInterface, HasSourceInterface
 
     public function setVolumeDebut(?DateTime $volumeDebut): void
     {
-        $this->volumeDebut = $volumeDebut;
+        $newDate = $volumeDebut?DateTime::createFromFormat('d-m-Y H:i:s', $volumeDebut->format('d-m-Y'). " 08:00:00"):null;
+        $this->volumeDebut = $newDate;
     }
 
     public function getVolumeFin(): ?DateTime
@@ -184,7 +185,8 @@ class Seance implements HistoriqueAwareInterface, HasSourceInterface
 
     public function setVolumeFin(?DateTime $volumeFin): void
     {
-        $this->volumeFin = $volumeFin;
+        $newDate = $volumeFin?DateTime::createFromFormat('d-m-Y H:i:s', $volumeFin->format('d-m-Y'). " 18:00:00"):null;
+        $this->volumeFin = $newDate;
     }
 
     /** AUTRE ****************************************************** */
@@ -213,13 +215,15 @@ class Seance implements HistoriqueAwareInterface, HasSourceInterface
     public function isPremiereSeance(): bool
     {
         $session = $this->getInstance();
-        return ($session->getSeances() === null OR $session->getSeances() === [] OR $this->getDateDebut()->format('d/m/Y H:i') === $session->getDebut());
+        $res =  ($session->getSeances() === null OR $session->getSeances() === [] OR $this->getDateDebut()->format('d/m/Y H:i') === $session->getDebut());
+        return $res;
     }
 
     public function isDerniereSeance(): bool
     {
         $session = $this->getInstance();
-        return ($session->getSeances() === null OR $session->getSeances() === [] OR $this->getDateFin()->format('d/m/Y H:i') === $session->getFin());
+        $res = ($session->getSeances() === null OR $session->getSeances() === [] OR $this->getDateFin()->format('d/m/Y H:i') === $session->getFin());
+        return $res;
     }
 
     /**
diff --git a/module/Formation/src/Formation/Entity/Db/Session.php b/module/Formation/src/Formation/Entity/Db/Session.php
index 2f24912ed30f462f4963cdf0abdcff890e21b1d3..239c983941cc9d2c3e0147aa5312e7bab4d46e83 100644
--- a/module/Formation/src/Formation/Entity/Db/Session.php
+++ b/module/Formation/src/Formation/Entity/Db/Session.php
@@ -429,6 +429,13 @@ class Session implements
         return $array;
     }
 
+    /** @return Inscription[] */
+    public function getListePresents(): array
+    {
+        $array = array_filter($this->getListePrincipale(), function (Inscription $inscription) { return $inscription->hasPresence(); });
+        return $array;
+    }
+
     /**
      * @return Inscription[]
      */
diff --git a/module/Formation/src/Formation/Event/Convocation/ConvocationEvent.php b/module/Formation/src/Formation/Event/Convocation/ConvocationEvent.php
index 91ff222e56ca0644ac51fe7faaff12ea020437af..6d202f379d024933b762da028e917c22e7ca83a7 100644
--- a/module/Formation/src/Formation/Event/Convocation/ConvocationEvent.php
+++ b/module/Formation/src/Formation/Event/Convocation/ConvocationEvent.php
@@ -47,7 +47,11 @@ class ConvocationEvent extends  EvenementService
             $parametres = json_decode($evenement->getParametres(), true);
             /** @var Session|null $session */
             $session = $this->getSessionService()->getSession($parametres['session']);
-
+            if (!$session->getParametre()->isEvenementActive()) {
+                $evenement->setLog("La session est configurée pour ne pas traiter les événements");
+                $this->update($evenement);
+                return Etat::ANNULE;
+            }
             if ($session AND $session->estNonHistorise()
                 AND $session->getEtatActif() AND $session->getEtatActif()->getType()->getCode() === SessionEtats::ETAT_INSCRIPTION_FERMEE) {
                 $this->getSessionService()->envoyerConvocation($session);
diff --git a/module/Formation/src/Formation/Event/DemandeRetour/DemandeRetourEvent.php b/module/Formation/src/Formation/Event/DemandeRetour/DemandeRetourEvent.php
index b38847af56ec9e6272a6482169bcaabd7417f655..2aeba2752a4a98305542749fa7c833e54597f9c8 100644
--- a/module/Formation/src/Formation/Event/DemandeRetour/DemandeRetourEvent.php
+++ b/module/Formation/src/Formation/Event/DemandeRetour/DemandeRetourEvent.php
@@ -47,6 +47,11 @@ class DemandeRetourEvent extends  EvenementService
             $parametres = json_decode($evenement->getParametres(), true);
             /** @var Session|null $session */
             $session = $this->getSessionService()->getSession($parametres['session']);
+            if (!$session->getParametre()->isEvenementActive()) {
+                $evenement->setLog("La session est configurée pour ne pas traiter les événements");
+                $this->update($evenement);
+                return Etat::ANNULE;
+            }
 
             if ($session AND $session->estNonHistorise()
                 AND $session->getEtatActif() AND $session->getEtatActif()->getType()->getCode() === SessionEtats::ETAT_FORMATION_CONVOCATION) {
@@ -83,7 +88,7 @@ class DemandeRetourEvent extends  EvenementService
             } catch (Exception $e) {
                 throw new RuntimeException("Un problème est survenu lors du calcul de l'interval", 0 ,$e);
             }
-            $dateTraitement = $dateFin->sub($interval);
+            $dateTraitement = $dateFin->add($interval);
         }
         if (!$dateTraitement instanceof DateTime) {
             throw new RuntimeException("La date de traitement de l'evenement [".EvenementProvider::DEMANDE_RETOUR."] n'a pas pu être déterminée.");
diff --git a/module/Formation/src/Formation/Event/InscriptionCloture/InscriptionClotureEvent.php b/module/Formation/src/Formation/Event/InscriptionCloture/InscriptionClotureEvent.php
index 0ded03268ddac346e7cf355b7ad83627cccf2305..8d391c362209236a882d913bb243c3537998bacf 100644
--- a/module/Formation/src/Formation/Event/InscriptionCloture/InscriptionClotureEvent.php
+++ b/module/Formation/src/Formation/Event/InscriptionCloture/InscriptionClotureEvent.php
@@ -49,6 +49,11 @@ class InscriptionClotureEvent extends EvenementService
             $parametres = json_decode($evenement->getParametres(), true);
             /** @var Session|null $session */
             $session = $this->getSessionService()->getSession($parametres['session']);
+            if (!$session->getParametre()->isEvenementActive()) {
+                $evenement->setLog("La session est configurée pour ne pas traiter les événements");
+                $this->update($evenement);
+                return Etat::ANNULE;
+            }
 
             if ($session AND $session->estNonHistorise()
                 AND $session->getEtatActif() AND $session->getEtatActif()->getType()->getCode() === SessionEtats::ETAT_INSCRIPTION_OUVERTE) {
diff --git a/module/Formation/src/Formation/Event/RappelAgent/RappelAgentEvent.php b/module/Formation/src/Formation/Event/RappelAgent/RappelAgentEvent.php
index 7855b6f41e2f1198868fcf2bdec8b5e8c210f83d..4ae343e1ff6400b3b7f95846038d04a69b3955fe 100644
--- a/module/Formation/src/Formation/Event/RappelAgent/RappelAgentEvent.php
+++ b/module/Formation/src/Formation/Event/RappelAgent/RappelAgentEvent.php
@@ -49,6 +49,11 @@ class RappelAgentEvent extends EvenementService
             $parametres = json_decode($evenement->getParametres(), true);
             /** @var Session|null $session */
             $session = $this->getSessionService()->getSession($parametres['session']);
+            if (!$session->getParametre()->isEvenementActive()) {
+                $evenement->setLog("La session est configurée pour ne pas traiter les événements");
+                $this->update($evenement);
+                return Etat::ANNULE;
+            }
 
             if ($session and $session->estNonHistorise()
                 and $session->getEtatActif() and $session->estNonHistorise()) {
diff --git a/module/Formation/src/Formation/Event/SessionCloture/SessionClotureEvent.php b/module/Formation/src/Formation/Event/SessionCloture/SessionClotureEvent.php
index 18b86cfcd5971b9e7e12e496fdce07da7764bc05..34d4edf6d8b24b7eef246ae322e15e18a931180e 100644
--- a/module/Formation/src/Formation/Event/SessionCloture/SessionClotureEvent.php
+++ b/module/Formation/src/Formation/Event/SessionCloture/SessionClotureEvent.php
@@ -47,6 +47,11 @@ class SessionClotureEvent extends  EvenementService
             $parametres = json_decode($evenement->getParametres(), true);
             /** @var Session|null $session */
             $session = $this->getSessionService()->getSession($parametres['session']);
+            if (!$session->getParametre()->isEvenementActive()) {
+                $evenement->setLog("La session est configurée pour ne pas traiter les événements");
+                $this->update($evenement);
+                return Etat::ANNULE;
+            }
 
             if ($session AND $session->estNonHistorise()
                 AND $session->getEtatActif() AND $session->getEtatActif()->getType()->getCode() === SessionEtats::ETAT_ATTENTE_RETOURS) {
@@ -83,7 +88,7 @@ class SessionClotureEvent extends  EvenementService
             } catch (Exception $e) {
                 throw new RuntimeException("Un problème est survenu lors du calcul de l'interval", 0 ,$e);
             }
-            $dateTraitement = $dateFin->sub($interval);
+            $dateTraitement = $dateFin->add($interval);
         }
         if (!$dateTraitement instanceof DateTime) {
             throw new RuntimeException("La date de traitement de l'evenement [".EvenementProvider::SESSION_CLOTURE."] n'a pas pu être déterminée.");
diff --git a/module/Formation/src/Formation/Form/Formation/FormationHydrator.php b/module/Formation/src/Formation/Form/Formation/FormationHydrator.php
index 0e819d866d3a65dfc65019a82311a95aef4d6a92..940e87bf492f04d39b1bd87fdbfb25107c21ee85 100644
--- a/module/Formation/src/Formation/Form/Formation/FormationHydrator.php
+++ b/module/Formation/src/Formation/Form/Formation/FormationHydrator.php
@@ -24,7 +24,6 @@ class FormationHydrator implements HydratorInterface
             'lien' => $object->getLien(),
             'affichage' => $object->getAffichage(),
             'type' => $object->getType(),
-            'axe' => ($object->getAxe())?->getId(),
             'domaines' => array_map(function (Domaine $d) { return $d->getId(); }, $object->getDomaines()),
             'actiontype' => ($object->getActionType()) ? $object->getActionType()->getId() : null,
             'objectifs' => $object->getObjectifs(),
@@ -56,7 +55,6 @@ class FormationHydrator implements HydratorInterface
         $object->setLien($data['lien']);
         $object->setAffichage($affichage);
         $object->setActionType($actiontype);
-        $object->setAxe($axe);
         $object->setType($type);
         $object->setObjectifs($objectifs);
         $object->setProgramme($programme);
diff --git a/module/Formation/src/Formation/Form/Justification/JustificationHydrator.php b/module/Formation/src/Formation/Form/Justification/JustificationHydrator.php
index d11f554d59855619bcfbbbb331f87e74c59a7a18..a0f17b436cc58b9de1356df3aa18954e063e9062 100644
--- a/module/Formation/src/Formation/Form/Justification/JustificationHydrator.php
+++ b/module/Formation/src/Formation/Form/Justification/JustificationHydrator.php
@@ -22,7 +22,7 @@ class JustificationHydrator implements HydratorInterface
                 $description = $object->getJustificationResponsable();
                 break;
             case InscriptionEtats::ETAT_VALIDER_RESPONSABLE :
-            case DemandeExterneEtats::ETAT_VALIDATION_RESP :
+            case DemandeExterneEtats::ETAT_VALIDATION_VALIDEUR :
                 $description = $object->getJustificationDrh();
                 break;
             case InscriptionEtats::ETAT_VALIDER_DRH :
@@ -59,8 +59,10 @@ class JustificationHydrator implements HydratorInterface
         switch ($etape) {
             case 'AGENT' : $object->setJustificationAgent($justification); break;
             case 'RESPONSABLE' : $object->setJustificationResponsable($justification); break;
+            case 'VALIDEUR' : $object->setJustificationValideur($justification); break;
             case 'GESTIONNAIRE' : $object->setJustificationGestionnaire($justification); break;
             case 'DRH' : $object->setJustificationDrh($justification); break;
+            case 'DGS' : $object->setJustificationDgs($justification); break;
             case 'REFUS' : $object->setJustificationRefus($justification); break;
             case 'ANNULATION' : $object->setJustificationDesistement($justification); break;
         }
diff --git a/module/Formation/src/Formation/Form/Notification/NotificationForm.php b/module/Formation/src/Formation/Form/Notification/NotificationForm.php
index 81fdd39dc60dc8f5ecf60dbcfd0b512535c88fae..1492903b93a68ff36bf12f2acd87abba68933aca 100644
--- a/module/Formation/src/Formation/Form/Notification/NotificationForm.php
+++ b/module/Formation/src/Formation/Form/Notification/NotificationForm.php
@@ -27,6 +27,7 @@ class NotificationForm extends Form {
                 'value_options' => [
                     Inscription::PRINCIPALE => 'Liste principale',
                     Inscription::COMPLEMENTAIRE => 'Liste complémentaire',
+                    'present' => 'Liste des inscrit·es présent·es à au moins une séance',
                     'tous' => 'Tou·tes les inscrit·es',
                 ],
             ],
diff --git a/module/Formation/src/Formation/Form/PlanDeFormationImportation/PlanDeFormationImportationForm.php b/module/Formation/src/Formation/Form/PlanDeFormationImportation/PlanDeFormationImportationForm.php
index 1d21fdbcdc24af32c4b40d9ad8e6942236a5f7a9..22d2a2a551f1d5f3e4afa8346bb1b89cfc90cb72 100644
--- a/module/Formation/src/Formation/Form/PlanDeFormationImportation/PlanDeFormationImportationForm.php
+++ b/module/Formation/src/Formation/Form/PlanDeFormationImportation/PlanDeFormationImportationForm.php
@@ -4,6 +4,7 @@ namespace Formation\Form\PlanDeFormationImportation;
 
 use Formation\Service\PlanDeFormation\PlanDeFormationServiceAwareTrait;
 use Laminas\Form\Element\Button;
+use Laminas\Form\Element\Checkbox;
 use Laminas\Form\Element\File;
 use Laminas\Form\Element\Select;
 use Laminas\Form\Form;
@@ -54,22 +55,6 @@ class PlanDeFormationImportationForm extends Form {
                 'id' => 'mode',
             ],
         ]);
-        //annee
-//        $this->add([
-//            'type' => Select::class,
-//            'name' => 'annee',
-//            'options' => [
-//                'label' => 'Année asscocié  <span class="icon icon-asterisque" title="Champ obligatoire"></span> :',
-//                'label_options' => [ 'disable_html_escape' => true, ],
-//                'value_options' => [
-//                    '' => "Prévisualisation",
-//                    'import' => "Importation",
-//                ]
-//            ],
-//            'attributes' => [
-//                'id' => 'annee',
-//            ],
-//        ]);
 
         //Submit
         $this->add([
diff --git a/module/Formation/src/Formation/Form/SelectionAxe/SelectionAxeForm.php b/module/Formation/src/Formation/Form/SelectionAxe/SelectionAxeForm.php
new file mode 100644
index 0000000000000000000000000000000000000000..f0cedafddaa2175dca607333aa78bfb00b0f8331
--- /dev/null
+++ b/module/Formation/src/Formation/Form/SelectionAxe/SelectionAxeForm.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace Formation\Form\SelectionAxe;
+
+use Formation\Service\Axe\AxeServiceAwareTrait;
+use Laminas\Form\Element\Button;
+use Laminas\Form\Element\Select;
+use Laminas\Form\Form;
+use Laminas\InputFilter\Factory;
+
+class SelectionAxeForm extends Form
+{
+    use AxeServiceAwareTrait;
+
+    public function init(): void
+    {
+
+        //select multiple avec groupe
+        $this->add([
+            'type' => Select::class,
+            'name' => 'axes',
+            'options' => [
+                'label' => "Axes associés :",
+                'empty_option' => "Sélectionner le ou les axes ...",
+                'value_options' => $this->getAxeService()->getAxesAsOptions(),
+            ],
+            'attributes' => [
+                'id' => 'axes',
+                'class' => 'bootstrap-selectpicker show-tick',
+                'data-live-search' => 'true',
+                'multiple' => 'multiple',
+            ],
+        ]);
+        //button
+        $this->add([
+            'type' => Button::class,
+            'name' => 'enregistrer',
+            'options' => [
+                'label' => '<i class="fas fa-save"></i> Enregistrer',
+                'label_options' => [
+                    'disable_html_escape' => true,
+                ],
+            ],
+            'attributes' => [
+                'id' => 'enregistrer',
+                'type' => 'submit',
+                'class' => 'btn btn-success',
+            ],
+        ]);
+        //inputfilter
+        $this->setInputFilter((new Factory())->createInputFilter([
+            'axes' => ['required' => false,],
+        ]));
+    }
+}
\ No newline at end of file
diff --git a/module/Formation/src/Formation/Form/SelectionAxe/SelectionAxeFormAwareTrait.php b/module/Formation/src/Formation/Form/SelectionAxe/SelectionAxeFormAwareTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..d2c27a02302378aed8135b018f3f3b0863634fda
--- /dev/null
+++ b/module/Formation/src/Formation/Form/SelectionAxe/SelectionAxeFormAwareTrait.php
@@ -0,0 +1,20 @@
+<?php
+
+namespace Formation\Form\SelectionAxe;
+
+trait SelectionAxeFormAwareTrait
+{
+
+    private SelectionAxeForm $selectionAxeForm;
+
+    public function getSelectionAxeForm(): SelectionAxeForm
+    {
+        return $this->selectionAxeForm;
+    }
+
+    public function setSelectionAxeForm(SelectionAxeForm $selectionAxeForm): void
+    {
+        $this->selectionAxeForm = $selectionAxeForm;
+    }
+
+}
diff --git a/module/Formation/src/Formation/Form/SelectionAxe/SelectionAxeFormFactory.php b/module/Formation/src/Formation/Form/SelectionAxe/SelectionAxeFormFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..2d08f162458c22d0dbd33038cf996a82d6175af1
--- /dev/null
+++ b/module/Formation/src/Formation/Form/SelectionAxe/SelectionAxeFormFactory.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Formation\Form\SelectionAxe;
+
+use Formation\Service\Axe\AxeService;
+use Interop\Container\ContainerInterface;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\NotFoundExceptionInterface;
+
+class SelectionAxeFormFactory
+{
+
+    /**
+     * @param ContainerInterface $container
+     * @return SelectionAxeForm
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
+    public function __invoke(ContainerInterface $container): SelectionAxeForm
+    {
+        /**
+         * @var AxeService $axeService
+         */
+        $axeService = $container->get(AxeService::class);
+
+        /**
+         * @var SelectionAxeHydrator $hydrator
+         */
+        $hydrator = $container->get('HydratorManager')->get(SelectionAxeHydrator::class);
+
+        $form = new SelectionAxeForm();
+        $form->setHydrator($hydrator);
+        $form->setAxeService($axeService);
+        return $form;
+    }
+}
\ No newline at end of file
diff --git a/module/Formation/src/Formation/Form/SelectionAxe/SelectionAxeHydrator.php b/module/Formation/src/Formation/Form/SelectionAxe/SelectionAxeHydrator.php
new file mode 100644
index 0000000000000000000000000000000000000000..8a8b9f9d139214093330a3d5efe5f912861cf42e
--- /dev/null
+++ b/module/Formation/src/Formation/Form/SelectionAxe/SelectionAxeHydrator.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace Formation\Form\SelectionAxe;
+
+use Formation\Entity\Db\Axe;
+use Formation\Entity\Db\Domaine;
+use Formation\Service\Axe\AxeServiceAwareTrait;
+use Laminas\Hydrator\HydratorInterface;
+
+class SelectionAxeHydrator implements HydratorInterface
+{
+    use AxeServiceAwareTrait;
+
+    public function extract($object): array
+    {
+        /** @var Domaine $object */
+        $axes = $object->getAxes();
+        $axeIds = array_map(function (Axe $a) {
+            return $a->getId();
+        }, is_array($axes) ? $axes : $axes->toArray());
+        $data = [
+            'axes' => $axeIds,
+        ];
+        return $data;
+    }
+
+    public function hydrate(array $data, $object): object
+    {
+        $axesInForm = [];
+        if (isset($data['axes'])) {
+            foreach ($data['axes'] as $axeId) {
+                $axesInForm[$axeId] = $this->getAxeService()->getAxe($axeId);
+            }
+        }
+
+        /** @var Domaine $object */
+        foreach ($object->getAxes() as $axe) {
+            if (!in_array($axe, $axesInForm)) $object->removeAxe($axe);
+        }
+        foreach ($axesInForm as $axe) {
+            if (!$object->hasAxe($axe)) $object->addAxe($axe);
+        }
+
+        return $object;
+    }
+}
\ No newline at end of file
diff --git a/module/Formation/src/Formation/Form/SelectionAxe/SelectionAxeHydratorFactory.php b/module/Formation/src/Formation/Form/SelectionAxe/SelectionAxeHydratorFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..f401088400f56849f0525b7dd48f961e0f455f25
--- /dev/null
+++ b/module/Formation/src/Formation/Form/SelectionAxe/SelectionAxeHydratorFactory.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Formation\Form\SelectionAxe;
+
+use Formation\Service\Axe\AxeService;
+use Interop\Container\ContainerInterface;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\NotFoundExceptionInterface;
+
+class SelectionAxeHydratorFactory
+{
+
+    /**
+     * @param ContainerInterface $container
+     * @return SelectionAxeHydrator
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
+    public function __invoke(ContainerInterface $container): SelectionAxeHydrator
+    {
+        /**
+         * @var AxeService $axeService
+         */
+        $axeService = $container->get(AxeService::class);
+
+        $hydrator = new SelectionAxeHydrator();
+        $hydrator->setAxeService($axeService);
+        return $hydrator;
+    }
+}
\ No newline at end of file
diff --git a/module/Formation/src/Formation/Provider/Etat/SessionEtats.php b/module/Formation/src/Formation/Provider/Etat/SessionEtats.php
index 34b3187fa35e8f2245548fc9237a22f49978ed4c..4fc070c8e6ca239b9423e13f68d31ec83be092a1 100644
--- a/module/Formation/src/Formation/Provider/Etat/SessionEtats.php
+++ b/module/Formation/src/Formation/Provider/Etat/SessionEtats.php
@@ -32,4 +32,10 @@ class SessionEtats {
         SessionEtats::ETAT_SESSION_ANNULEE,
         SessionEtats::ETAT_CLOTURE_INSTANCE,
     ];
+
+    const ETATS_INSCRIPTION_ANNULABLE = [
+        SessionEtats::ETAT_CREATION_EN_COURS,
+        SessionEtats::ETAT_INSCRIPTION_OUVERTE,
+        SessionEtats::ETAT_INSCRIPTION_FERMEE,
+    ];
 }
\ No newline at end of file
diff --git a/module/Formation/src/Formation/Provider/Parametre/PlanFormationParametres.php b/module/Formation/src/Formation/Provider/Parametre/PlanFormationParametres.php
new file mode 100644
index 0000000000000000000000000000000000000000..40dd6644fa13fa1565597a8359034c862fe3dd7a
--- /dev/null
+++ b/module/Formation/src/Formation/Provider/Parametre/PlanFormationParametres.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace Formation\Provider\Parametre;
+
+class PlanFormationParametres {
+
+    const TYPE = 'PLAN_FORMATION';
+
+    const NAVIGATION_ACTIVEE       = 'NAVIGATION_ACTIVEE';
+    const AXE_AFFICHE              = 'AXE_AFFICHE';
+}
\ No newline at end of file
diff --git a/module/Formation/src/Formation/Provider/Privilege/InscriptionPrivileges.php b/module/Formation/src/Formation/Provider/Privilege/InscriptionPrivileges.php
index 298106ff541d4a0bbc2c56084fffadb0ac19e71f..b26efecfd920dbdc66397a6b8593b7ace527f6c5 100644
--- a/module/Formation/src/Formation/Provider/Privilege/InscriptionPrivileges.php
+++ b/module/Formation/src/Formation/Provider/Privilege/InscriptionPrivileges.php
@@ -7,5 +7,6 @@ use UnicaenPrivilege\Provider\Privilege\Privileges;
 class InscriptionPrivileges extends Privileges
 {
     const INSCRIPTION_AFFICHER = 'inscription-inscription_afficher';
+    const INSCRIPTION_ANNULER = 'inscription-inscription_annuler';
     const INSCRIPTION_ENQUETE = 'inscription-inscription_enquete';
 }
diff --git a/module/Formation/src/Formation/Provider/Template/TextTemplates.php b/module/Formation/src/Formation/Provider/Template/TextTemplates.php
index d3c3d2e65a310fc8807d946c34401014dc3b1e4e..61ab7ee13808ca3234c9997898aa8b7978531af6 100644
--- a/module/Formation/src/Formation/Provider/Template/TextTemplates.php
+++ b/module/Formation/src/Formation/Provider/Template/TextTemplates.php
@@ -4,14 +4,10 @@ namespace Formation\Provider\Template;
 
 class TextTemplates {
 
-    const MES_FORMATIONS_ACCUEIL = "MES_FORMATIONS_ACCUEIL";
     const MES_FORMATIONS_PROJETPERSO = "MES_FORMATIONS_PROJETPERSO";
     const ENQUETE_EXPLICATION = "ENQUETE_EXPLICATION";
 
     const PLANS_DE_FORMATION = "PLANS_DE_FORMATION";
     const INSCRIPTION_FORMATION_DU_PLAN = "INSCRIPTION_FORMATION_DU_PLAN";
 
-    const APROPOS = "APROPOS";
-    const CONTACT = "CONTACT";
-
 }
\ No newline at end of file
diff --git a/module/Formation/src/Formation/Service/Axe/AxeService.php b/module/Formation/src/Formation/Service/Axe/AxeService.php
index 067743d1f0fd90c548efd1da9f76a9acd7dd0fb8..609e3275c3639448ac26dacdfd03c84a86f541e4 100644
--- a/module/Formation/src/Formation/Service/Axe/AxeService.php
+++ b/module/Formation/src/Formation/Service/Axe/AxeService.php
@@ -53,7 +53,7 @@ class AxeService {
     public function createQueryBuilder(): QueryBuilder
     {
         $qb = $this->getObjectManager()->getRepository(Axe::class)->createQueryBuilder('axe')
-            ->leftJoin('axe.formations', 'formation')->addSelect('formation')
+            ->leftJoin('axe.domaines', 'domaine')->addSelect('domaine')
         ;
         return $qb;
     }
diff --git a/module/Formation/src/Formation/Service/Domaine/DomaineService.php b/module/Formation/src/Formation/Service/Domaine/DomaineService.php
index 2b5ac4a272f8b313590140d4893ce0b616ad73ea..4ea93c59ae63b2d95dbf028220a28dd9f8db0e86 100644
--- a/module/Formation/src/Formation/Service/Domaine/DomaineService.php
+++ b/module/Formation/src/Formation/Service/Domaine/DomaineService.php
@@ -84,7 +84,12 @@ class DomaineService {
         if (!$withHisto) $qb = $qb->andWhere('domaine.histoDestruction IS NULL');
 
         $result = $qb->getQuery()->getResult();
-        return $result;
+
+        $domaines = [];
+        foreach ($result as $domaine) {
+            $domaines[$domaine->getId()] = $domaine;
+        }
+        return $domaines;
     }
 
     public function getDomainesAsOptions(string $champ='ordre', string $ordre='ASC', bool $withHisto = false): array
diff --git a/module/Formation/src/Formation/Service/Formateur/FormateurService.php b/module/Formation/src/Formation/Service/Formateur/FormateurService.php
index 3ef4a16894e0e086adb4d7e8ec7766bef3022f1e..f583dba435f1f59b0a2bf949d661c45204200352 100644
--- a/module/Formation/src/Formation/Service/Formateur/FormateurService.php
+++ b/module/Formation/src/Formation/Service/Formateur/FormateurService.php
@@ -126,12 +126,12 @@ class FormateurService
     public function getFormateursWithFiltre(array $params): array
     {
         $type = $params['type']??null;
-        $formateurId = isset($params['formateur'])?$params['formateur']['id']:null;
+//        $formateurId = isset($params['formateur'])?$params['formateur']['id']:null;
         $rattachement = isset($params['rattachement'])?$params['rattachement']['label']:null;
 
         $qb = $this->createQueryBuilder();
         if ($type) $qb = $qb->andWhere('formateur.type = :type')->setParameter('type', $type);
-        if ($formateurId) $qb = $qb->andWhere('formateur.id = :formateurId')->setParameter('formateurId', $formateurId);
+//        if ($formateurId) $qb = $qb->andWhere('formateur.id = :formateurId')->setParameter('formateurId', $formateurId);
         if ($rattachement) $qb = $qb->andWhere('formateur.attachement = :rattachement')->setParameter('rattachement', $rattachement);
 
         $result = $qb->getQuery()->getResult();
@@ -144,7 +144,7 @@ class FormateurService
     public function getFormateursByTerm(?string $term): array
     {
         $qb = $this->getObjectManager()->getRepository(Formateur::class)->createQueryBuilder('formateur')
-            ->andWhere("LOWER(CONCAT(formateur.nom, ' ', formateur.prenom)) like :search OR LOWER(CONCAT(formateur.prenom, ' ', formateur.nom)) like :search OR LOWER(formateur.organisme) like :search")
+            ->andWhere("LOWER(CONCAT(formateur.nom, ' ', formateur.prenom)) like :search OR LOWER(CONCAT(formateur.prenom, ' ', formateur.nom)) like :search OR LOWER(formateur.organisme) like :search OR lower(formateur.email) like :search")
             ->setParameter('search', '%'.strtolower($term).'%')
 //            ->orderBy("coalesce(formateur.organisme, concat(formateur.nom, ' ', formateur.prenom))", 'ASC')
             ->orderBy("concat(formateur.nom, ' ', formateur.prenom)", 'ASC')
diff --git a/module/Formation/src/Formation/Service/Formation/FormationService.php b/module/Formation/src/Formation/Service/Formation/FormationService.php
index c9518a389fc9c35b5809cdabdcde3bc6262d1968..6bce1cfdc572e82a56d3e73365b6d862509c221c 100644
--- a/module/Formation/src/Formation/Service/Formation/FormationService.php
+++ b/module/Formation/src/Formation/Service/Formation/FormationService.php
@@ -84,7 +84,6 @@ class FormationService
     public function createQueryBuilder(): QueryBuilder
     {
         $qb = $this->getObjectManager()->getRepository(Formation::class)->createQueryBuilder('formation')
-            ->addSelect('axe')->leftJoin('formation.axe', 'axe')
             ->addSelect('domaine')->leftJoin('formation.domaines', 'domaine')
             /** ceci semble provoquer un déborderment mémoire en demo **/
 //            ->addSelect('competence')->leftJoin('formation.competences', 'competence')
@@ -198,7 +197,7 @@ class FormationService
         $qb = $this->createQueryBuilder()
             ->andWhere('formation.libelle = :libelle') ->setParameter('libelle', $libelle)
         ;
-        if ($axe) $qb = $qb->andWhere('groupe.axe = :axe')->setParameter('axe', $axe);
+        //if ($axe) $qb = $qb->andWhere('groupe.axe = :axe')->setParameter('axe', $axe);
 
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
diff --git a/module/Formation/src/Formation/Service/Inscription/InscriptionService.php b/module/Formation/src/Formation/Service/Inscription/InscriptionService.php
index d8128daad32a35c2e0e3fb176a615830bcaf350e..e6b25af7e5494c58d728720c88552cab8249b2e1 100644
--- a/module/Formation/src/Formation/Service/Inscription/InscriptionService.php
+++ b/module/Formation/src/Formation/Service/Inscription/InscriptionService.php
@@ -226,8 +226,8 @@ class InscriptionService
     public function getInscriptionsByAgentsAndEtats(array $agents, array $etats, ?int $annee): array
     {
         if ($annee === null) $annee = Formation::getAnnee();
-        $debut = DateTime::createFromFormat('d/m/Y', '01/09/' . $annee);
-        $fin = DateTime::createFromFormat('d/m/Y', '31/08/' . ($annee + 1));
+        $debut = DateTime::createFromFormat('d/m/Y H:m', '01/01/' . $annee. ' 00:01');
+        $fin = DateTime::createFromFormat('d/m/Y H:m', '31/12/' . $annee. ' 23:59');
 
         $qb = $this->createQueryBuilder()
             ->andWhere('inscription.histoDestruction IS NULL')
@@ -239,8 +239,8 @@ class InscriptionService
 
         $result = $qb->getQuery()->getResult();
         $result = array_filter($result, function (Inscription $a) use ($debut, $fin) {
-            $sessionDebut = DateTime::createFromFormat('d/m/Y', $a->getSession()->getDebut());
-            $sessionFin = DateTime::createFromFormat('d/m/Y', $a->getSession()->getFin());
+            $sessionDebut = $a->getSession()->getDebut(true);
+            $sessionFin = $a->getSession()->getFin(true);
             return ($sessionDebut >= $debut && $sessionFin <= $fin);
         });
         return $result;
@@ -278,7 +278,7 @@ class InscriptionService
     /**
      * @return Inscription[]
      */
-    public function getInscriptionsWithFiltre(array $params)
+    public function getInscriptionsWithFiltre(array $params): array
     {
         $qb = $this->createQueryBuilder()->orderBy('inscription.histoCreation', 'asc');
 
diff --git a/module/Formation/src/Formation/Service/Notification/NotificationService.php b/module/Formation/src/Formation/Service/Notification/NotificationService.php
index 25aeeeff1f47e4f881efba1b4b0883097ad0169a..4b4f91468d92f79b393adfad1d25af9a95179585 100644
--- a/module/Formation/src/Formation/Service/Notification/NotificationService.php
+++ b/module/Formation/src/Formation/Service/Notification/NotificationService.php
@@ -54,16 +54,17 @@ class NotificationService
 
     }
 
-    public function getMailsSuperieursByAgent(Agent $agent): array
+    public function getMailsSuperieursByAgent(Agent $agent): ?string
     {
         $responsables = $this->getAgentValidateurService()->getAgentsValidateursByAgent($agent);
+        if (empty($responsables)) { return null;}
         $email = array_map(
             function (AgentValidateur $a) {
                 return $a->getValidateur()->getEmail();
             },
             $responsables
         );
-        return $email;
+        return implode(',', $email);
     }
 
     /** FONCTION GENERIQUE POUR L'ENVOI DE NOTIFICATION ***************************************************************/
@@ -96,7 +97,7 @@ class NotificationService
 
     /** GESTION DES INSCRIPTIONS **************************************************************************************/
 
-    /** Notification vers le ou la validateur·trice lors de l'inscription à une session par un agent */
+    /** Notification vers le ou la valideur·euse lors de l'inscription à une session par un agent */
     public function triggerInscriptionAgent(Inscription $inscription): ?Mail
     {
         $session = $inscription->getSession();
@@ -284,6 +285,7 @@ class NotificationService
             $superieurs = $this->getAgentValidateurService()->getAgentsValidateursByAgent($agent);
             foreach ($superieurs as $superieur) $copie[] = $superieur->getValidateur()->getEmail();
         }
+        $copie = (empty($copie)) ? null : implode(",", $copie);
 
         if ($inscrit->getIndividu() !== null AND $inscrit->getIndividu()->getEmail() !== null) {
             $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::SESSION_CONVOCATION, $vars);
@@ -321,7 +323,7 @@ class NotificationService
         return null;
     }
 
-    /** Notification vers les inscrit·e ayant eu une absence */
+    /** Notification vers les inscrit·es ayant eu une absence */
     public function triggerConstatAbsence(Inscription $inscrit): ?Mail
     {
         $session = $inscrit->getSession();
@@ -388,7 +390,7 @@ class NotificationService
         return $mail;
     }
 
-    /** Notification vers les inscrit·e de l'annulation */
+    /** Notification vers les inscrit·es de l'annulation */
     public function triggerSessionAnnulee(Inscription $inscrit): ?Mail
     {
         $session = $inscrit->getSession();
@@ -442,6 +444,7 @@ class NotificationService
         $vars = [
             'session' => $session,
             'UrlService' => $this->getUrlService(),
+            'MacroService' => $this->getMacroService(),
         ];
         $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::FORMATION_RAPPEL_AVANT_FORMATION, $vars);
 
diff --git a/module/Formation/src/Formation/Service/PlanDeFormation/PlanDeFormationService.php b/module/Formation/src/Formation/Service/PlanDeFormation/PlanDeFormationService.php
index 8f534a00603dc973d85c2fb6694d58ba475c67aa..e0cebd1a477c26ae341c68214eb97f3d57457bd9 100644
--- a/module/Formation/src/Formation/Service/PlanDeFormation/PlanDeFormationService.php
+++ b/module/Formation/src/Formation/Service/PlanDeFormation/PlanDeFormationService.php
@@ -58,7 +58,8 @@ class PlanDeFormationService
     {
         $qb = $this->getObjectManager()->getRepository(PlanDeFormation::class)->createQueryBuilder('plan')
             ->leftjoin('plan.formations', 'formation')->addSelect('formation')
-            ->leftjoin('formation.axe', 'axe')->addSelect('axe')
+            ->leftjoin('formation.domaines', 'domaine')->addSelect('domaine')
+            ->leftjoin('domaine.axes', 'axe')->addSelect('axe')
             ->andWhere('formation.histoDestruction IS NULL');
         return $qb;
     }
diff --git a/module/Formation/src/Formation/Service/SessionType/SessionTypeService.php b/module/Formation/src/Formation/Service/SessionType/SessionTypeService.php
index 5cc7a5c99282b3a8bc4a7d8dadd1733ac991ec28..16bdd467464cb41315445d072d3565f4f71d921d 100644
--- a/module/Formation/src/Formation/Service/SessionType/SessionTypeService.php
+++ b/module/Formation/src/Formation/Service/SessionType/SessionTypeService.php
@@ -102,5 +102,19 @@ class SessionTypeService
         return $result;
     }
 
+    public function getSessionTypeByLibelle(string $libelle): ?SessionType
+    {
+        $qb =  $this->createQueryBuilder()
+            ->andWhere('sessiontype.libelle = :libelle')->setParameter('libelle', $libelle)
+            ->andWhere('sessiontype.histoDestruction IS NULL')
+        ;
+        try {
+            $result = $qb->getQuery()->getOneOrNullResult();
+        } catch (NonUniqueResultException $e) {
+            throw  new RuntimeException("Plusieurs [".SessionType::class."] actifs partagent le même libellé [".$libelle."]",0,$e);
+        }
+        return $result;
+    }
+
     /** FACADE ********************************************************************************************************/
 }
\ No newline at end of file
diff --git a/module/Formation/src/Formation/Service/Url/UrlService.php b/module/Formation/src/Formation/Service/Url/UrlService.php
index 38f5591d599bf680d6c3ed8cf182c6219b2713bb..4352859815781533ce4a0b1fba756fa9afaa3a11 100644
--- a/module/Formation/src/Formation/Service/Url/UrlService.php
+++ b/module/Formation/src/Formation/Service/Url/UrlService.php
@@ -75,22 +75,6 @@ class UrlService extends \Application\Service\Url\UrlService
         return UrlService::trueLink($url);
     }
 
-    /** @noinspection PhpUnused :: macro Url#GestionDemandesExternes */
-    public function getUrlGestionDemandesExternes(): string
-    {
-        /** @see DemandeExterneController::indexAction() */
-        $url = $this->renderer->url('demande-externe', [], ['force_canonical' => true], true);
-        return UrlService::trueLink($url);
-    }
-
-    /** @noinspection PhpUnused :: macro Url#ValidateurDemandesExternes */
-    public function getUrlValidateurDemandesExternes(): string
-    {
-        /** @see AgentController::mesAgentsAction() */
-        $url = $this->renderer->url('mes-agents', [], ['query' => ['fragment' => 'formation-liste'], 'force_canonical' => true], true);
-        return UrlService::trueLink($url);
-    }
-
     /** @noinspection PhpUnused :: macro Url#MesFormations */
     public function getUrlMesFormations(): string
     {
diff --git a/module/Formation/src/Formation/View/Helper/InscriptionViewHelper.php b/module/Formation/src/Formation/View/Helper/InscriptionViewHelper.php
index bd70539e19cb8da0ad7d2526cc3c06caa7175dfe..03a6462360f0688e19c344651e7d77a22d0316e8 100644
--- a/module/Formation/src/Formation/View/Helper/InscriptionViewHelper.php
+++ b/module/Formation/src/Formation/View/Helper/InscriptionViewHelper.php
@@ -22,6 +22,6 @@ class InscriptionViewHelper extends AbstractHelper
         $view = $this->getView();
         $view->resolver()->attach(new TemplatePathStack(['script_paths' => [__DIR__ . "/partial"]]));
 
-        return $view->partial('inscription', ['inscription' => $inscription, 'options' => $options]);
+        return $view->partial('inscription_vh', ['inscription' => $inscription, 'options' => $options]);
     }
 }
\ No newline at end of file
diff --git a/module/Formation/src/Formation/View/Helper/partial/inscription.phtml b/module/Formation/src/Formation/View/Helper/partial/inscription_vh.phtml
similarity index 100%
rename from module/Formation/src/Formation/View/Helper/partial/inscription.phtml
rename to module/Formation/src/Formation/View/Helper/partial/inscription_vh.phtml
diff --git a/module/Formation/src/Formation/View/Helper/partial/inscriptions.phtml b/module/Formation/src/Formation/View/Helper/partial/inscriptions.phtml
index a682cd4a1868760ad272fe034417773dd0168686..d9fd4b73f680130e14063e3d57fe310455806a7c 100644
--- a/module/Formation/src/Formation/View/Helper/partial/inscriptions.phtml
+++ b/module/Formation/src/Formation/View/Helper/partial/inscriptions.phtml
@@ -23,6 +23,7 @@ $urlRetour = (isset($options['url-retour'])) ? $options['url-retour'] : $this->u
 $estAnnulee = ($session->getEtatActif() && $session->isEtatActif(SessionEtats::ETAT_SESSION_ANNULEE));
 
 $canAfficherIndividu = $this->isAllowed(AgentPrivileges::getResourceId(AgentPrivileges::AGENT_AFFICHER));
+$canAfficherCycleVie = $this->isAllowed(AgentPrivileges::getResourceId(AgentPrivileges::AGENT_AFFICHER));
 $canInscritModifier = (!$estAnnulee && $this->isAllowed(FormationinstancePrivileges::getResourceId(FormationinstancePrivileges::FORMATIONINSTANCE_GERER_INSCRIPTION)));
 $canHistoriserInscription = $this->isAllowed(FormationinstancePrivileges::getResourceId(FormationinstancePrivileges::FORMATIONINSTANCE_GERER_INSCRIPTION));
 $canSupprimerInscription = $this->isAllowed(FormationinstanceinscritPrivileges::getResourceId(FormationinstanceinscritPrivileges::INSCRIPTION_SUPPRIMER));
@@ -118,7 +119,9 @@ if (!$displayDocument) $etatSize += 2;
                 <?php if ($displayListe) : ?>
                     <td> <?php echo $inscription->getListe() ?? "Aucune"; ?> </td>
                 <?php endif; ?>
-                <td> <?php echo $this->etatinstance($inscription->getEtatActif(), ['display-categorie' => false]); ?> </td>
+                <td>
+                    <?php echo $this->etatinstance($inscription->getEtatActif(), ['display-categorie' => false]); ?>
+                </td>
                 <?php if ($displayDocument) : ?>
                     <td class="action">
                         <?php if ($canTeleverserAttestation) : ?>
@@ -181,7 +184,16 @@ if (!$displayDocument) $etatSize += 2;
                         >
                             <span class="icon icon-lister"></span> Historique des formations</a>
                     <?php endif; ?>
-
+                    <?php if ($canAfficherCycleVie) : ?>
+                        <br>
+                        <?php /** @see \Formation\Controller\InscriptionController::afficherCycleVieAction() */ ?>
+                        <a href="<?php echo $this->url('inscription/afficher-cycle-vie', ['inscription' => $inscription->getId()], [], true); ?>"
+                           class="action secondary ajax-modal"
+                        >
+                            <span class="icon icon-voir"></span>
+                            Afficher les états associés
+                        </a>
+                    <?php endif; ?>
                     <!-- CONVOCATION & ATTESTATION & ABSENCE ---------------------------------------------------------->
                     <?php if ($inscription->getListe() === Inscription::PRINCIPALE && $inscription->estNonHistorise()) : ?>
                         <?php if (!$inscription->getSession()->estRealisee()): ?>
diff --git a/module/Formation/src/Formation/View/Helper/partial/sessions-array.phtml b/module/Formation/src/Formation/View/Helper/partial/sessions-array.phtml
index b2eea418bc02a6559f0241ddbd48375175159d48..d7a6e684361c447e4f4721a3d146b9c3e6d09fcd 100644
--- a/module/Formation/src/Formation/View/Helper/partial/sessions-array.phtml
+++ b/module/Formation/src/Formation/View/Helper/partial/sessions-array.phtml
@@ -51,7 +51,8 @@ $sessions = array_reverse($sessions);
     <tr>
         <th> Session</th>
         <?php if ($displayGestionnaire) : ?>
-            <th> Gestionnaire·s</th> <?php endif; ?>
+            <th> Gestionnaire·s</th>
+        <?php endif; ?>
         <th data-type="number"> Période</th>
         <th> #Inscrit</th>
         <th> État</th>
@@ -91,7 +92,7 @@ $sessions = array_reverse($sessions);
                         <?php endif; ?>
                     </td>
                 <?php endif; ?>
-                <td class="periode" data-order="<?php echo ($instance->getDebut(true))?$instance->getDebut(true)->getTimestamp():PHP_INT_MAX; ?>">
+                <td class="periode" data-order="<?php echo ($instance->getDebut())?$instance->getDebut(true)->getTimestamp():PHP_INT_MAX; ?>)">
                     <?php echo $instance->getPeriode(); ?> <br>
                     <strong> Clôture des inscriptions </strong>
                     <?php if ($instance->getDateClotureInscription()) : ?>
@@ -99,14 +100,15 @@ $sessions = array_reverse($sessions);
                     <?php else : ?>
                         <span class="text-danger">Date non renseignée</span>
                     <?php endif; ?>
-
                 </td>
                 <td class="listes">
                     <?php if ($instance->getInscriptions()) : ?>
                         <?php
                         $inscriptions = $instance->getInscriptions();
-                        $inscriptions = array_filter($inscriptions, function (Inscription $inscription) { return $inscription->estNonHistorise();});
-                        $inscriptions = array_filter($inscriptions, function (Inscription $inscription) { return !$inscription->isEtatActif(InscriptionEtats::ETAT_DESISTEMENT);});
+                        $inscriptions = array_filter($inscriptions, function (Inscription $inscription) {
+                            return $inscription->estNonHistorise() and !$inscription->isEtatActif(InscriptionEtats::ETAT_DESISTEMENT);
+                        }
+                        );
                         ?>
                         Inscription : <?php echo count($inscriptions); ?><br>
                         <?php if ($instance->getNbPlacePrincipale() === 0): ?>
@@ -182,6 +184,7 @@ $sessions = array_reverse($sessions);
             $('table#<?php echo $id; ?>').dataTable({
                 paging: false,
                 autoWidth: false,
+                order: [[1, 'asc']],
                 "language": {
                     "url": "/js/datatables_fr.json",
                 },
diff --git a/module/Formation/view/error/403.phtml b/module/Formation/view/error/403.phtml
index 0f3156a74475e30c2068682ca5b9924c229f651f..98a9f652a4f1d59094e18aaf9a8a3274201c5e5c 100644
--- a/module/Formation/view/error/403.phtml
+++ b/module/Formation/view/error/403.phtml
@@ -18,8 +18,8 @@ $email_assistance =  $this->parametreValue(MailParametres::TYPE, MailParametres:
 <div style="font-size: 21px; font-weight: 200;">
 Résolution possible :
 <ul>
-    <li> vérifiez que vous êtes bien authentifié·e ;</li>
-    <li> vérifiez que vous incarnez un rôle permettant d'accéder à cette page. </li>
+    <li> Vérifiez que vous êtes bien authentifié·e ;</li>
+    <li> Vérifiez que vous incarnez un rôle permettant d'accéder à cette page. </li>
 </ul>
 
 Si le problème persiste, merci de contacter l'assistance : <a href="mailto:<?php echo $email_assistance; ?>" target="_blank"><?php echo $email_assistance; ?></a>
diff --git a/module/Formation/view/formation/axe/afficher.phtml b/module/Formation/view/formation/axe/afficher.phtml
index f5c0732b07eb90238210f9aabf4fd38628573877..ccc2dc4125ecac7c4a803fe492a78bc7c947d3ac 100644
--- a/module/Formation/view/formation/axe/afficher.phtml
+++ b/module/Formation/view/formation/axe/afficher.phtml
@@ -29,13 +29,20 @@ use Formation\Entity\Db\Axe;
 <!--        --><?php //echo $groupe->getIdSource(); ?>
 <!--    </dd>-->
     <dt>
-        Liste des actions de formation
-        <span class="badge"> <?php echo count($axe->getFormations()); ?></span>
+        Liste des domaines
+        <span class="badge"> <?php echo count($axe->getDomaines()); ?></span>
     </dt>
     <dd>
         <ul>
-            <?php foreach($axe->getFormations() as $formation) : ?>
-                <li> <?php echo $formation->getLibelle(); ?> </li>
+            <?php foreach($axe->getDomaines() as $domaine) : ?>
+                <li>
+                    <?php echo $domaine->getLibelle(); ?>
+                    <ul>
+                    <?php foreach($domaine->getFormations() as $formation) : ?>
+                        <li> <?php echo $formation->getLibelle(); ?> </li>
+                    <?php endforeach; ?>
+                    </ul>
+                </li>
             <?php endforeach; ?>
         </ul>
     </dd>
diff --git a/module/Formation/view/formation/axe/index.phtml b/module/Formation/view/formation/axe/index.phtml
index 1dfe6e93bcaa9b489e087c3ff8947b3d5ba8c79c..84abe4c4cd59a55c02c2197d5fa90760629ed301 100644
--- a/module/Formation/view/formation/axe/index.phtml
+++ b/module/Formation/view/formation/axe/index.phtml
@@ -42,7 +42,7 @@ $this->headTitle("Axes de formation");
     <tr>
         <th> Libellé</th>
         <th> Ordre</th>
-        <th style="width: 10rem;"> #Formations</th>
+        <th style="width: 10rem;"> #domaine</th>
         <th class="action"> Action</th>
     </tr>
     </thead>
@@ -64,7 +64,7 @@ $this->headTitle("Axes de formation");
                 <?php echo $axe->getOrdre(); ?>
             </td>
             <td> <!-- NB THEME -->
-                <?php echo count($axe->getFormations()); ?>
+                <?php echo count($axe->getDomaines()); ?>
             </td>
             <!-- SOURCE -->
 <!--            <td> -->
diff --git a/module/Formation/view/formation/domaine/afficher.phtml b/module/Formation/view/formation/domaine/afficher.phtml
index 2a941ab56fe737ce3afe90562fff74552a4f5554..a23ed3ac8db6447647d6ff9aeefaa905dd74c990 100644
--- a/module/Formation/view/formation/domaine/afficher.phtml
+++ b/module/Formation/view/formation/domaine/afficher.phtml
@@ -70,6 +70,37 @@ $this->headTitle("Domaine : ".$domaine->getLibelle());
     </div>
 </div>
 
+<div class="row">
+    <div class="col-md-8">
+        <dl>
+            <dt>
+                Liste des axes
+                <span class="badge"> <?php echo count($domaine->getAxes()); ?></span>
+            </dt>
+            <dd>
+                <ul>
+                    <?php foreach ($domaine->getAxes() as $axe) : ?>
+                        <li> <?php echo $axe->getLibelle(); ?> </li>
+                    <?php endforeach; ?>
+                </ul>
+            </dd>
+        </dl>
+    </div>
+    <div class="col-md-4">
+        <?php if($canModifierDomaine) : ?>
+            <?php /** @see \Formation\Controller\DomaineController::gererAxesAction() */ ?>
+            <a href="<?php echo $this->url('formation-domaine/gerer-axes', ['domaine' => $domaine->getId()], [], true); ?>"
+               class="btn btn-primary ajax-modal" data-event="modification"
+            >
+                <span class="icon icon-listing"></span>
+                Gérer les axes associés au domaine
+            </a>
+        <?php endif;?>
+    </div>
+</div>
+
+
+
 <div class="row">
     <div class="col-md-8">
         <dl>
diff --git a/module/Formation/view/formation/export/extraction-inscription.phtml b/module/Formation/view/formation/export/extraction-inscription.phtml
index f9322661a35a80a6a67c45682aac834eebb0197a..8bd760be2dacd0fa257a3b9fd6ae608b5e97fd65 100644
--- a/module/Formation/view/formation/export/extraction-inscription.phtml
+++ b/module/Formation/view/formation/export/extraction-inscription.phtml
@@ -122,7 +122,7 @@ $this->headTitle("Extraction d'inscription");
     </div>
 <?php else : ?>
     <?php /** @see \Formation\Controller\ExportController::extractionInscriptionAction(); */ ?>
-    <a href="<?php echo $this->url('export/extraction-inscription', ['csv' => 'csv'], [], true); ?>" class="btn btn-primary">
+    <a href="<?php echo $this->url('export/extraction-inscription', ['csv' => 'csv'], ['query' => $params], true); ?>" class="btn btn-primary">
         <span class="icon icon-csv"></span>
         Exporter au format CSV
     </a>
diff --git a/module/Formation/view/formation/formateur/index.phtml b/module/Formation/view/formation/formateur/index.phtml
index 295ce47e182558fad77f83134ae5d6a909c00912..85ce40ae4ded80cf24be6cd1fe1425d1d297b6a1 100644
--- a/module/Formation/view/formation/formateur/index.phtml
+++ b/module/Formation/view/formation/formateur/index.phtml
@@ -36,7 +36,7 @@ $canCreerCompte = $this->isAllowed(UtilisateurPrivileges::getResourceId(Utilisat
     </a>
 <?php endif; ?>
 
-<table class="table table-condensed datatable" id="formateur">
+<table class="table table-condensed datatable" id="formateurs">
     <thead>
     <tr>
         <th class="col-md-3"> Identification </th>
@@ -172,5 +172,16 @@ $canCreerCompte = $this->isAllowed(UtilisateurPrivileges::getResourceId(Utilisat
             event.div.modal('hide');
             window.location.reload();
         });
+        $('table#formateurs').dataTable({
+            paging: true,
+            autoWidth: false,
+            columnDefs: [{
+                "targets": 4,
+                "orderable": false
+            }],
+            "language": {
+                "url": "/js/datatables_fr.json",
+            },
+        });
     });
 </script>
\ No newline at end of file
diff --git a/module/Formation/view/formation/formation-instance-inscrit/inscription-externe.phtml b/module/Formation/view/formation/formation-instance-inscrit/inscription-externe.phtml
index 66afd16df49a0dc599f2ed00fe2a9caccf1ffe5f..b1faaadbeca4269ce6eb2e0124435d74b9ce9ffa 100644
--- a/module/Formation/view/formation/formation-instance-inscrit/inscription-externe.phtml
+++ b/module/Formation/view/formation/formation-instance-inscrit/inscription-externe.phtml
@@ -45,7 +45,7 @@ $canAjouterDemande = $this->isAllowed(DemandeexternePrivileges::getResourceId(De
     </div>
 <?php else: ?>
     <dl class="row">
-        <dt class="col-md-4"> Validateur·trices</dt>
+        <dt class="col-md-4"> Valideur·euses</dt>
         <dd class="col-md-8">
             <?php foreach ($valisateurs as $valisateur) : ?>
                 <li> <?php echo $valisateur->getValidateur()->getDenomination(); ?> </li>
diff --git a/module/Formation/view/formation/formation-instance-inscrit/inscription-interne.phtml b/module/Formation/view/formation/formation-instance-inscrit/inscription-interne.phtml
index 06f0265b71ea85fb4313bc3265297bd13fb86fcb..65ac3c42ac82acd71ef084bc7dbb0686060cacd6 100644
--- a/module/Formation/view/formation/formation-instance-inscrit/inscription-interne.phtml
+++ b/module/Formation/view/formation/formation-instance-inscrit/inscription-interne.phtml
@@ -4,6 +4,7 @@
  * @see \Formation\Controller\FormationInstanceInscritController::inscriptionInterneAction()
  * @var Session[] $sessions
  * @var Inscription[] $inscriptions
+ * @var Domaine[] $domaines
  * @var Agent $agent
  * @var Rendu $rendu
  */
@@ -11,6 +12,7 @@
 $canInscrire = true; //todo !!!!
 
 use Agent\Entity\Db\Agent;
+use Formation\Entity\Db\Domaine;
 use Formation\Entity\Db\Inscription;
 use Formation\Entity\Db\Session;
 use Formation\Provider\Etat\InscriptionEtats;
@@ -18,6 +20,22 @@ use UnicaenRenderer\Entity\Db\Rendu;
 
 $this->headTitle("M'inscrire à une formation du plan de formation");
 
+
+$dictionnaire = [];
+foreach ($sessions as $session) {
+    $domaines_ = $session->getFormation()->getDomaines();
+    if (empty($domaines_)) $dictionnaire[PHP_INT_MAX][] = $session;
+    else {
+        foreach ($domaines_ as $domaine) {
+            $dictionnaire[$domaine->getId()][] = $session;
+        }
+    }
+}
+$sans = new Domaine();
+$sans->setId(PHP_INT_MAX);
+$sans->setLibelle("Sans domaine");
+$sans->setCouleur("black");
+$domaines[PHP_INT_MAX] = $sans
 ?>
 
 
@@ -41,11 +59,11 @@ $this->headTitle("M'inscrire à une formation du plan de formation");
 <?php if (empty($valisateurs)) : ?>
     <div class="alert alert-danger">
         <span class="icon icon-attention"></span>
-            Aucun·e validateur·trice
+        Aucun·e validateur·trice
     </div>
 <?php else: ?>
     <dl class="row">
-        <dt class="col-md-4"> Validateur·trices</dt>
+        <dt class="col-md-4"> Valideur·euses</dt>
         <dd class="col-md-8">
             <?php foreach ($valisateurs as $valisateur) : ?>
                 <li> <?php echo $valisateur->getValidateur()->getDenomination(); ?> </li>
@@ -54,41 +72,69 @@ $this->headTitle("M'inscrire à une formation du plan de formation");
     </dl>
 <?php endif; ?>
 
-<?php foreach ($sessions as $instance) : ?>
-    <?php
-    $nbPlace = ($instance->getNbPlacePrincipale() + $instance->getNbPlaceComplementaire()) - (count($instance->getListePrincipale()) + count($instance->getListeComplementaire()));
-    $dejaInscrit = !empty(array_filter($inscriptions, function (Inscription $a) use ($instance) {
-        return $a->estNonHistorise() and $a->getSession() === $instance
-            and !$a->isEtatActif(InscriptionEtats::ETAT_DESISTEMENT
-        );
-    }));
-    ?>
-    <div class="row formation-instance">
-        <div class="col-md-8 description">
-            <?php echo $this->sessionInformations($instance, 'bloc'); ?>
-        </div>
-        <div class="col-md-4">
-            <?php if ($dejaInscrit) : ?>
-                <span class="alert alert-success"> <span class="icon icon-checked"></span>Demande d'inscription effectuée.</span>
-            <?php else: ?>
-                <?php if ($nbPlace <= 0) : ?>
-                    <span class="alert alert-danger">Action de formation complète.</span>
-                <?php else: ?>
-                    <?php if ($canInscrire) : ?>
-                        <?php /**  @see \Formation\Controller\InscriptionController::inscriptionAction() */ ?>
-                        <a href="<?php echo $this->url('inscription/creer-inscription', [
-                            'session' => $instance->getId(),
-                            'agent' => $agent->getId()], [], true); ?>"
-                           class="btn btn-primary ajax-modal" data-event="modification">
+
+<span class="toggle-off btn btn-secondary" id="plier"><span class="icon icon-monter"></span> Tous plier</span>
+<span class="toggle-on btn btn-secondary" id="deplier"><span class="icon icon-descendre"></span> Tous déplier </span>
+
+<br>
+
+<?php foreach ($domaines as $domaine) : ?>
+    <?php if (isset($dictionnaire[$domaine->getId()]) and !empty($dictionnaire[$domaine->getId()])) : ?>
+            <?php $sessions_ = $dictionnaire[$domaine->getId()]; ?>
+            <br>
+            <span class="domaine toggler" style="border-color: <?php echo $domaine->getCouleur(); ?>"
+                  id="domaine_<?php echo $domaine->getId(); ?>">
+                <?php echo $domaine->getLibelle(); ?> (<?php echo count($sessions_); ?> actions de formation)
+            </span>
+            <br>
+
+            <div class="liste" id="liste_domaine_<?php echo $domaine->getId(); ?>">
+                <?php
+                $actions_ = $dictionnaire[$domaine->getId()];
+                usort($actions_, function (Session $a, Session $b) {
+                    return $a->getDebut(true) <=> $b->getFin(true);
+                });
+                ?>
+
+                <?php foreach ($dictionnaire[$domaine->getId()] as $session) : ?>
+                    <?php
+                    $nbPlace = ($session->getNbPlacePrincipale() + $session->getNbPlaceComplementaire()) - (count($session->getListePrincipale()) + count($session->getListeComplementaire()));
+                    $dejaInscrit = !empty(array_filter($inscriptions, function (Inscription $a) use ($session) {
+                        return $a->estNonHistorise() and $a->getSession() === $session
+                            and !$a->isEtatActif(InscriptionEtats::ETAT_DESISTEMENT
+                            );
+                    }));
+                    ?>
+                    <div class="row formation-instance">
+                        <div class="col-md-8 description">
+                            <?php echo $this->sessionInformations($session, 'bloc'); ?>
+                        </div>
+                        <div class="col-md-4">
+                            <?php if ($dejaInscrit) : ?>
+                                <span class="alert alert-success"> <span class="icon icon-checked"></span>Demande d'inscription effectuée.</span>
+                            <?php else: ?>
+                                <?php if ($nbPlace <= 0) : ?>
+                                    <span class="alert alert-danger">Action de formation complète.</span>
+                                <?php else: ?>
+                                    <?php if ($canInscrire) : ?>
+                                        <?php /**  @see \Formation\Controller\InscriptionController::inscriptionAction() */ ?>
+                                        <a href="<?php echo $this->url('inscription/creer-inscription', [
+                                            'session' => $session->getId(),
+                                            'agent' => $agent->getId()], [], true); ?>"
+                                           class="btn btn-primary ajax-modal" data-event="modification">
                             <span class="icon icon-ajouter">&nbsp;
                                 Je m'inscris
                             </span>
-                        </a>
-                    <?php endif; ?>
-                <?php endif; ?>
-            <?php endif; ?>
-        </div>
-    </div>
+                                        </a>
+                                    <?php endif; ?>
+                                <?php endif; ?>
+                            <?php endif; ?>
+                        </div>
+                    </div>
+                <?php endforeach; ?>
+
+            </div>
+    <?php endif; ?>
 <?php endforeach; ?>
 
 <script>
@@ -106,4 +152,28 @@ $this->headTitle("M'inscrire à une formation du plan de formation");
             });
         });
     });
-</script>
\ No newline at end of file
+
+    $('span.toggler').on("click", function () {
+        let id = $(this).attr('id');
+        $('div#liste_' + id).toggle();
+    });
+    $('span#plier').on("click", function () {
+        $('div.liste').hide()
+    });
+    $('span#deplier').on("click", function () {
+        $('div.liste').show();
+    });
+</script>
+
+
+<style>
+    span.domaine {
+        border-left: 1rem solid;
+        border-bottom: 0.1rem solid;
+        display: block;
+        margin-bottom: 0.25rem;
+        padding-left: 1rem;
+        font-weight: bold;
+        font-size: large;
+    }
+</style>
\ No newline at end of file
diff --git a/module/Formation/view/formation/formation-instance-inscrit/inscriptions.phtml b/module/Formation/view/formation/formation-instance-inscrit/inscriptions.phtml
index f19fa4c6d932eee5525b6733d8830a79e1cb9a7a..09f8b1b83ca51754d7374c91f8a7b648b076d9d7 100644
--- a/module/Formation/view/formation/formation-instance-inscrit/inscriptions.phtml
+++ b/module/Formation/view/formation/formation-instance-inscrit/inscriptions.phtml
@@ -2,145 +2,283 @@
 
 /**
  * @see \Formation\Controller\FormationInstanceInscritController::inscriptionsAction()
- * @var Session[] $sessions
- * @var Inscription[] $inscriptions
- * @var DemandeExterne[] $demandes
+ * @var Inscription[] $inscriptionsAttentes
+ * @var Inscription[] $inscriptionsValidees
+ * @var Inscription[] $inscriptionsRefusees
+ * @var Inscription[] $inscriptionsDesistements
+ *
+ * @var DemandeExterne[] $demandesAttentes,
+ * @var DemandeExterne[] $demandesValidees,
+ * @var DemandeExterne[] $demandesRefusees,
+ *
  * @var Agent $agent
  */
 
 use Agent\Entity\Db\Agent;
 use DemandeExterne\Entity\Db\DemandeExterne;
 use Formation\Entity\Db\Inscription;
-use Formation\Entity\Db\Session;
-use DemandeExterne\Provider\Etat\DemandeExterneEtats;
-use Formation\Provider\Etat\InscriptionEtats;
 use Formation\Provider\Etat\SessionEtats;
-
-$canInscrire = true;
-
-$formationValidees = [];
-foreach ($inscriptions as $inscription) {
-    if (!$inscription->isEtatActif(InscriptionEtats::ETAT_DESISTEMENT)
-        AND ! $inscription->getSession()->isEtatActif(SessionEtats::ETAT_SESSION_ANNULEE)
-        AND $inscription->getListe() !== null
-        AND !$inscription->getSession()->estRealisee()
-    )
-        $formationValidees[] = $inscription;
-}
-$demandesValidees = [];
-$demandesAttentes = [];
-foreach ($demandes as $demande) {
-    if ($demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_DRH)) {
-        $demandesValidees[] = $demande;
-    } else {
-        $demandesAttentes[] = $demande;
-    }
-}
-
-$formationsAttentes = [];
-foreach ($inscriptions as $inscription) {
-    if (!$inscription->isEtatActif(InscriptionEtats::ETAT_DESISTEMENT)) {
-        if ($inscription->isEtatActif(InscriptionEtats::ETAT_DEMANDE)
-            OR $inscription->isEtatActif(InscriptionEtats::ETAT_VALIDER_RESPONSABLE))
-            $formationsAttentes[] = $inscription;
-    }
-}
+use Formation\Provider\Privilege\InscriptionPrivileges;
 
 ?>
-<h1>
-    Mes inscriptions validées
+
+<h1 class="page-header">
+    Mes inscriptions
 </h1>
 
 <?php echo $this->messenger()->addMessagesFromFlashMessenger(); ?>
 
-<?php if (empty($formationValidees) and empty($demandesValidees)) : ?>
-    <em> Aucune formation validée </em>
-<?php else : ?>
-    <?php foreach ($formationValidees as $inscription) : ?>
-        <?php
-        $instance = $inscription->getSession();
-        $nbPlace = ($instance->getNbPlacePrincipale() + $instance->getNbPlaceComplementaire()) - (count($instance->getListePrincipale()) + count($instance->getListeComplementaire()));
-        ?>
-        <div class="row formation-inscription">
-            <div class="col-md-8 description">
-                <?php echo $this->sessionInformations($instance, 'bloc'); ?>
-                <br/>
-                <strong> Inscrit en liste <?php echo $inscription->getListe(); ?></strong>
+<!-- ONGLET :: TAB ------------------------------------------------------------------------------------------------>
+<div class="nav nav-tabs" id="nav-tab" role="tablist">
+    <button class="nav-link active" id="interne-tab"
+            data-bs-toggle="tab" data-bs-target="#interne"
+            type="button" role="tab" aria-controls="interne" aria-selected="true">
+        Formations au plan de formation
+    </button>
+    <button class="nav-link" id="externe-tab"
+            data-bs-toggle="tab" data-bs-target="#externe"
+            type="button" role="tab" aria-controls="externe" aria-selected="true">
+        Formations hors plan de formation
+    </button>
+</div>
+<div class="tab-content">
+    <div id="interne" class="tab-pane " role="tabpanel">
+
+        <h2> Inscriptions validées</h2>
+
+        <?php if (empty($inscriptionsValidees)) : ?>
+            <div class="alert alert-info">
+                Vous n'avez aucune inscription validée en cours
             </div>
-            <div class="col-md-4">
-                <a
-                    <?php /** @see \Formation\Controller\FormationInstanceInscritController::desinscriptionAction() */ ?>
-                        href="<?php echo $this->url('inscription/annuler-inscription', ['inscription' => $inscription->getId()], [], true); ?>"
-                        class="btn btn-danger ajax-modal" data-event="modification"
-                >
-                    <span class="icon icon-unchecked"> J'annule mon inscription </span>
-                </a>
-                <?php if ($instance->isEtatActif(SessionEtats::ETAT_FORMATION_CONVOCATION) && $inscription->getListe() === Inscription::PRINCIPALE) : ?>
-                    <br/>
-                    <a
-                        <?php /** @see \Formation\Controller\FormationInstanceDocumentController::genererConvocationAction() */ ?>
-                            href="<?php echo $this->url('session/generer-convocation', ['inscription' => $inscription->getId()], [], true); ?>"
-                            class="btn btn-primary"
-                    >
-                        <span class="icon icon-pdf"> Je télécharge ma convocation</span>
-                    </a>
-                <?php endif; ?>
+        <?php else : ?>
+            <?php foreach ($inscriptionsValidees as $inscription) : ?>
+                <?php
+                    $instance = $inscription->getSession();
+                    $nbPlace = ($instance->getNbPlacePrincipale() + $instance->getNbPlaceComplementaire()) - (count($instance->getListePrincipale()) + count($instance->getListeComplementaire()));
+                ?>
+                <div class="row formation-inscription">
+                    <div class="col-md-8">
+                        <strong>Action de formation :</strong> <?php echo $instance->getFormation()->getLibelle(); ?> <br>
+                        <strong>État de la session :</strong> <?php echo $this->etatinstance($instance->getEtatActif(),['display-libelle' => true, 'display-categorie' => false]); ?> <br>
+                        <strong>Période :</strong> <?php echo $instance->getPeriode(); ?> <br>
+                        <strong>État de l'inscription :</strong> <?php echo $this->etatinstance($inscription->getEtatActif(),['display-libelle' => true, 'display-categorie' => false]); ?> <br>
+                        <strong>Inscrit en liste <?php echo $inscription->getListe(); ?></strong>
+                    </div>
+                    <div class="col-md-4">
+                        <?php if ($this->isAllowed($inscription, InscriptionPrivileges::INSCRIPTION_ANNULER)) : ?>
+                        <a
+                            <?php /** @see \Formation\Controller\InscriptionController::desinscriptionAction() */ ?>
+                                href="<?php echo $this->url('inscription/annuler-inscription', ['inscription' => $inscription->getId()], [], true); ?>"
+                                class="btn btn-danger ajax-modal" data-event="modification"
+                        >
+                            <span class="icon icon-unchecked"> J'annule mon inscription </span>
+                        </a>
+                        <?php endif; ?>
+                        <?php if ($instance->isEtatActif(SessionEtats::ETAT_FORMATION_CONVOCATION) && $inscription->getListe() === Inscription::PRINCIPALE) : ?>
+                            <br/>
+                            <a
+                                <?php /** @see \Formation\Controller\FormationInstanceDocumentController::genererConvocationAction() */ ?>
+                                    href="<?php echo $this->url('session/generer-convocation', ['inscription' => $inscription->getId()], [], true); ?>"
+                                    class="btn btn-primary"
+                            >
+                                <span class="icon icon-pdf"> Je télécharge ma convocation</span>
+                            </a>
+                        <?php endif; ?>
+                    </div>
+                </div>
+            <?php endforeach; ?>
+        <?php endif; ?>
+
+        <h2> Inscriptions en attente de validation</h2>
+
+        <?php if (empty($inscriptionsAttentes)) : ?>
+            <div class="alert alert-info">
+                Vous n'avez aucune inscription en attente de validation
             </div>
-        </div>
-        <br/>
-    <?php endforeach; ?>
-    <?php foreach ($demandesValidees as $demande) : ?>
-        <?php echo $this->demandeExterne($demande); ?>
-    <?php endforeach; ?>
-<?php endif; ?>
-
-<h1>
-    Mes inscriptions en attente de validation
-</h1>
+        <?php else : ?>
+            <?php foreach ($inscriptionsAttentes as $inscription) : ?>
+                <?php
+                $instance = $inscription->getSession();
+                $nbPlace = ($instance->getNbPlacePrincipale() + $instance->getNbPlaceComplementaire()) - (count($instance->getListePrincipale()) + count($instance->getListeComplementaire()));
+                ?>
+                <div class="row formation-inscription">
+                    <div class="col-md-8">
+                        <strong>Action de formation :</strong> <?php echo $instance->getFormation()->getLibelle(); ?> <br>
+                        <strong>État de la session :</strong> <?php echo $this->etatinstance($instance->getEtatActif(),['display-libelle' => true, 'display-categorie' => false]); ?> <br>
+                        <strong>Période :</strong> <?php echo $instance->getPeriode(); ?> <br>
+                        <strong>État de l'inscription :</strong> <?php echo $this->etatinstance($inscription->getEtatActif(),['display-libelle' => true, 'display-categorie' => false]); ?> <br>
+                        <?php if ($inscription->getListe()): ?>
+                            <strong>Inscrit en liste <?php echo $inscription->getListe(); ?></strong>
+                        <?php else: ?>
+                            Inscription pas encore classée
+                        <?php endif; ?>
+                    </div>
+                    <div class="col-md-4">
+                        <a
+                            <?php /** @see \Formation\Controller\InscriptionController::desinscriptionAction() */ ?>
+                                href="<?php echo $this->url('inscription/annuler-inscription', ['inscription' => $inscription->getId()], [], true); ?>"
+                                class="btn btn-danger ajax-modal" data-event="modification"
+                        >
+                            <span class="icon icon-unchecked"> J'annule mon inscription </span>
+                        </a>
+                    </div>
+                </div>
+            <?php endforeach; ?>
+        <?php endif; ?>
+
+        <h2> Inscriptions dont vous vous êtes désisté·e</h2>
+
+        <?php if (empty($inscriptionsDesistements)) : ?>
+            <div class="alert alert-info">
+                Vous n'avez aucune inscription en attente de validation
+            </div>
+        <?php else : ?>
+            <?php foreach ($inscriptionsDesistements as $inscription) : ?>
+                <?php
+                $instance = $inscription->getSession();
+                $nbPlace = ($instance->getNbPlacePrincipale() + $instance->getNbPlaceComplementaire()) - (count($instance->getListePrincipale()) + count($instance->getListeComplementaire()));
+                ?>
+                <div class="row formation-inscription">
+                    <div class="col-md-8 ">
+                        <strong>Action de formation :</strong> <?php echo $instance->getFormation()->getLibelle(); ?> <br>
+                        <strong>État de la session :</strong> <?php echo $this->etatinstance($instance->getEtatActif(),['display-libelle' => true, 'display-categorie' => false]); ?> <br>
+                        <strong>Période :</strong> <?php echo $instance->getPeriode(); ?> <br>
+                        <strong>État de l'inscription :</strong> <?php echo $this->etatinstance($inscription->getEtatActif(),['display-libelle' => true, 'display-categorie' => false]); ?>
+                        <br>
+                    </div>
+                    <div class="col-md-4">
+                        <strong>Motif du désistement :</strong> <?php echo $inscription->getJustificationDesistement(); ?>
+                    </div>
+                </div>
+            <?php endforeach; ?>
+        <?php endif; ?>
+
+        <h2> Inscriptions refusées</h2>
+
+        <?php if (empty($inscriptionsRefusees)) : ?>
+            <div class="alert alert-info">
+                Vous n'avez aucune inscription refusée
+            </div>
+        <?php else : ?>
+            <?php foreach ($inscriptionsRefusees as $inscription) : ?>
+                <?php
+                $instance = $inscription->getSession();
+                $nbPlace = ($instance->getNbPlacePrincipale() + $instance->getNbPlaceComplementaire()) - (count($instance->getListePrincipale()) + count($instance->getListeComplementaire()));
+                ?>
+                <div class="row formation-inscription">
+                    <div class="col-md-8 ">
+                        <strong>Action de formation :</strong> <?php echo $instance->getFormation()->getLibelle(); ?> <br>
+                        <strong>État de la session :</strong> <?php echo $this->etatinstance($instance->getEtatActif(),['display-libelle' => true, 'display-categorie' => false]); ?> <br>
+                        <strong>Période :</strong> <?php echo $instance->getPeriode(); ?> <br>
+                        <strong>État de l'inscription :</strong> <?php echo $this->etatinstance($inscription->getEtatActif(),['display-libelle' => true, 'display-categorie' => false]); ?>
+                    </div>
+                    <div class="col-md-4">
+                        <strong>Motif du refus :</strong> <?php echo $inscription->getJustificationRefus(); ?>
+                    </div>
+                </div>
+            <?php endforeach; ?>
+        <?php endif; ?>
 
-<?php if (empty($formationsAttentes) and empty($demandesAttentes)) : ?>
-    <em> Aucune formation en attente de validation </em>
-<?php else : ?>
-    <?php foreach ($formationsAttentes as $inscription) : ?>
-        <?php
-        $instance = $inscription->getSession();
-        $nbPlace = ($instance->getNbPlacePrincipale() + $instance->getNbPlaceComplementaire()) - (count($instance->getListePrincipale()) + count($instance->getListeComplementaire()));
-        ?>
-        <div class="row formation-inscription">
-            <div class="col-md-7 description">
-                <?php echo $this->sessionInformations($instance, 'bloc'); ?>
-                <br/>
+    </div>
+
+
+    <div id="externe" class="tab-pane " role="tabpanel">
+
+        <h2> Demandes hors plan de formation validées</h2>
+
+        <?php if (empty($demandesValidees)) : ?>
+            <div class="alert alert-info">
+                Aucune demande hors plan de formation de validée
             </div>
-            <div class="col-md-5">
-                <a
-                    <?php /** @see \Formation\Controller\InscriptionController::desinscriptionAction() */ ?>
-                        href="<?php echo $this->url('inscription/annuler-inscription', ['inscription' => $inscription->getId()], [], true); ?>"
-                        class="btn btn-danger ajax-modal" data-event="modification"
-                >
-                    <span class="icon icon-unchecked"> J'annule mon inscription </span>
-                </a>
-                <?php if ($instance->isEtatActif(SessionEtats::ETAT_FORMATION_CONVOCATION) && $inscription->getListe() === Inscription::PRINCIPALE) : ?>
-                    <br/>
-                    <a
-                        <?php /** @see \Formation\Controller\InscriptionController::genererConvocationAction() */ ?>
-                            href="<?php echo $this->url('formation/inscripitoninstance/generer-convocation', ['inscrit' => $inscription->getId()], [], true); ?>"
-                            class="btn btn-primary"
-                    >
-                        <span class="icon icon-pdf"> Je télécharge ma convocation</span>
-                    </a>
-                <?php endif; ?>
+        <?php else : ?>
+            <?php foreach ($demandesValidees as $demande) : ?>
+                <div class="row formation-inscription">
+                    <div class="col-md-8 ">
+                        <strong>Action de formation :</strong> <?php echo $demande->getLibelle(); ?> <br>
+                        <strong>Période :</strong> <?php echo $demande->getPeriode(); ?> <br>
+                        <strong>État de l'inscription :</strong> <?php echo $this->etatinstance($demande->getEtatActif(),['display-libelle' => true, 'display-categorie' => false]); ?>
+                    </div>
+                    <div class="col-md-4">
+                    </div>
+                </div>
+            <?php endforeach; ?>
+        <?php endif; ?>
+
+        <h2> Demandes hors plan de formation en attente</h2>
+
+        <?php if (empty($demandesAttentes)) : ?>
+            <div class="alert alert-info">
+                Aucune demande hors plan de formation en attente
             </div>
-        </div>
-        <br/>
-    <?php endforeach; ?>
-    <?php foreach ($demandesAttentes as $demande) : ?>
-        <?php echo $this->demandeExterne($demande); ?>
-    <?php endforeach; ?>
-<?php endif; ?>
+        <?php else : ?>
+            <?php foreach ($demandesAttentes as $demande) : ?>
+                <div class="row formation-inscription">
+                    <div class="col-md-8 ">
+                        <strong>Action de formation :</strong> <?php echo $demande->getLibelle(); ?> <br>
+                        <strong>Période :</strong> <?php echo $demande->getPeriode(); ?> <br>
+                        <strong>État de l'inscription :</strong> <?php echo $this->etatinstance($demande->getEtatActif(),['display-libelle' => true, 'display-categorie' => false]); ?>
+                    </div>
+                    <div class="col-md-4">
+                    </div>
+                </div>
+            <?php endforeach; ?>
+        <?php endif; ?>
 
+        <h2> Demandes hors plan de formation refusée</h2>
+
+        <?php if (empty($demandesRefusees)) : ?>
+            <div class="alert alert-info">
+                Aucune demande hors plan de formation refusée
+            </div>
+        <?php else : ?>
+            <?php foreach ($demandesRefusees as $demande) : ?>
+                <div class="row formation-inscription">
+                    <div class="col-md-8 ">
+                        <strong>Action de formation :</strong> <?php echo $demande->getLibelle(); ?> <br>
+                        <strong>Période :</strong> <?php echo $demande->getPeriode(); ?> <br>
+                        <strong>État de l'inscription :</strong> <?php echo $this->etatinstance($demande->getEtatActif(),['display-libelle' => true, 'display-categorie' => false]); ?>
+                    </div>
+                    <div class="col-md-4">
+                    </div>
+                </div>
+            <?php endforeach; ?>
+        <?php endif; ?>
+
+    </div>
+</div>
+
+<style>
+    div.formation-inscription {
+        background: #f0f0f0;
+        margin-bottom: 0.5rem;
+        border-radius: 0.5rem;
+        padding: 0.5rem;
+
+    }
+</style>
 
 <script>
     $(function () {
+        let hash = $(location).attr('hash');
+        let name = hash.substring(1);
+        if (name === undefined || name === "") name = "interne";
+
+        $('button').removeClass('active');
+        $('button#' + name + '-tab').addClass('active');
+        $('div.tab-pane').hide().removeClass('active');
+        $('div#' + name).show().addClass('active');
+
+        //$('#' + name + '-tab').tab("show");
+        $('button.nav-link').on('click', function (e) {
+            let anchor = $(this).attr('aria-controls');
+            $('div.tab-pane').hide().removeClass('active');
+            $('div#' + anchor).show().addClass('active');
+            $('button').removeClass('active');
+            $('button#' + anchor + '-tab').addClass('active');
+            // console.log(anchor);
+            e.preventDefault(); // >> bloque le scrolling, mais aussi la ré-écriture de l'url "#info" ...
+            history.replaceState(null, null, "#" + anchor);
+        });
         $("body").on("modification", function (event) {
             event.div.modal('hide');
             window.location.reload();
diff --git a/module/Formation/view/formation/formation/index.phtml b/module/Formation/view/formation/formation/index.phtml
index fae64ca831509edcf29f824398ba3cf3f0c49b8e..db59c9fe82afe0ff58f839655525d08df15cb121 100644
--- a/module/Formation/view/formation/formation/index.phtml
+++ b/module/Formation/view/formation/formation/index.phtml
@@ -62,16 +62,6 @@ $this->headTitle("Actions de formation");
             <tr id="<?php echo $formation->getId(); ?>"  class="<?php if ($formation->estHistorise()) echo "historise"; ?>">
             <td> <?php echo $formation->getLibelle(); ?> </td>
             <td>
-                <strong>Axe :</strong>
-                <?php if ($formation->getAxe() !== null) : ?>
-                    <?php echo $formation->getAxe()->getLibelle(); ?>
-                <?php else: ?>
-                    <span class="text-danger">
-                        <span class="icon icon-attention"></span>
-                        Aucun axe pour cette action
-                    </span>
-                <?php endif; ?>
-                <br>
                 <strong>Domaine :</strong>
                 <?php if (!empty($formation->getDomaines())) : ?>
                     <?php foreach ($formation->getDomaines() as $domaine) : ?>
@@ -83,7 +73,6 @@ $this->headTitle("Actions de formation");
                         Aucun domaine pour cette action
                     </span>
                 <?php endif; ?>
-
             </td>
             <td>
                 <span class="badge source <?php echo $formation->getSource(); ?>">
diff --git a/module/Formation/view/formation/inscription/afficher-agent.phtml b/module/Formation/view/formation/inscription/afficher-agent.phtml
index 3212e69c57ef3e450c5cf661303aa4776a277e70..093c0cd8601e7cf79130aa842579ea6d96b65db7 100644
--- a/module/Formation/view/formation/inscription/afficher-agent.phtml
+++ b/module/Formation/view/formation/inscription/afficher-agent.phtml
@@ -26,7 +26,7 @@ $statuts = AgentStatut::generateStatutsArray($agentStatuts);
         <dl class="row">
             <dt class="col-md-4"> Dénomination </dt>
             <dd class="col-md-8"> <?php echo $agent->getDenomination(); ?> </dd>
-            <dt class="col-md-4"> Validateur·trices</dt>
+            <dt class="col-md-4"> Valideur·euses</dt>
             <dd class="col-md-8">
                 <ul>
                     <?php foreach ($validateurs as $validateur) : ?>
@@ -45,7 +45,7 @@ $statuts = AgentStatut::generateStatutsArray($agentStatuts);
                         <li>
                             <?php
                             $structure = $agentAffectation->getStructure();
-                            $niveau2 = $structure?$structure->getNiv2():null;
+                            $niveau2 = $structure?->getNiv2();
                             ?>
                             <?php if ($structure) : ?>
                                 <?php echo $structure->getLibelleLong(); ?>
diff --git a/module/Formation/view/formation/inscription/afficher-cycle-vie.phtml b/module/Formation/view/formation/inscription/afficher-cycle-vie.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..6fec80278fe9b93cd068aac8f60db257ab452035
--- /dev/null
+++ b/module/Formation/view/formation/inscription/afficher-cycle-vie.phtml
@@ -0,0 +1,27 @@
+<?php
+
+use Formation\Entity\Db\Inscription;
+use UnicaenEtat\Entity\Db\EtatInstance;
+
+/**
+ * @see \Formation\Controller\InscriptionController::afficherCycleVieAction()
+ * @var Inscription $inscription
+ * @var EtatInstance[] $etats
+ **/
+
+$this->headTitle("Cycle de vie : État");
+
+?>
+
+
+<!--<h1 class="page-header">-->
+<!--    Cycle de vie : État-->
+<!--</h1>-->
+
+<ul>
+<?php foreach ($etats as $etat) : ?>
+    <li>
+        <?php echo $this->etatinstance($etat, ['display-date' => true, 'display-user' => true, 'display-libelle' => true, 'mode-inline'=> true]); ?>
+    </li>
+<?php endforeach; ?>
+</ul>
\ No newline at end of file
diff --git a/module/Formation/view/formation/inscription/partial/inscription.phtml b/module/Formation/view/formation/inscription/partial/inscription.phtml
index 1e7388ccb8f4e012b3bc566ad0aa4c9e550f0fcd..d85cf1194a41b2ca6a6a8e5b811310cdbe618ed2 100644
--- a/module/Formation/view/formation/inscription/partial/inscription.phtml
+++ b/module/Formation/view/formation/inscription/partial/inscription.phtml
@@ -1,11 +1,12 @@
 <?php
 
 /**
- * @var \Formation\Entity\Db\Inscription $inscription
- * @var \Formation\Entity\Db\Session $session
+ * @var Inscription $inscription
+ * @var Session $session
  */
 
 use Formation\Entity\Db\Inscription;
+use Formation\Entity\Db\Session;
 use Formation\Provider\Etat\InscriptionEtats;
 use Formation\Provider\Etat\SessionEtats;
 
@@ -15,7 +16,7 @@ use Formation\Provider\Etat\SessionEtats;
     <?php if ($inscription->isEtatActif(InscriptionEtats::ETAT_VALIDER_DRH)
         AND $inscription->getListe() === Inscription::PRINCIPALE) : ?>
         <?php $presence = $inscription->getDureePresence(); ?>
-        <?php $duree = $inscription->getSession()->getDuree(); ?>
+        <?php $duree = $inscription->getSession()?->getDuree(); ?>
         <?php echo  $presence; ?> sur <?php echo $duree; ?>
         <br>
         <?php if ($presence != $duree) : ?>
diff --git a/module/Formation/view/formation/plan-de-formation/courant.phtml b/module/Formation/view/formation/plan-de-formation/courant.phtml
index 9c9f35dfbf86d39434401a1617979c731345881d..ce29ecebf741dbdde98a37f15a4726cf4a8d6361 100644
--- a/module/Formation/view/formation/plan-de-formation/courant.phtml
+++ b/module/Formation/view/formation/plan-de-formation/courant.phtml
@@ -1,6 +1,7 @@
 <?php
 
 use Agent\Entity\Db\Agent;
+use Formation\Entity\Db\Axe;
 use Formation\Entity\Db\Domaine;
 use Formation\Entity\Db\Formation;
 use Formation\Entity\Db\PlanDeFormation;
@@ -17,8 +18,11 @@ use UnicaenRenderer\Entity\Db\Rendu;
  * @var Domaine[] $domaines
  * @var array $actionsByDomaines
  * @var Rendu $rendu
+ * @var bool $navigationActivatee
+ * @var bool $axeAffiche
  */
 
+
 $this->headTitle("Plan de formation");
 
 $canListerParFormation = $this->isAllowed(FormationabonnementPrivileges::getResourceId(FormationabonnementPrivileges::FORMATIONABONNEMENT_LISTE_FORMATION));
@@ -38,6 +42,32 @@ if (isset($domaines)) {
         }
         return $a->getOrdre() <=> $b->getOrdre();
     });
+} else {
+    $domaines = [];
+}
+
+usort($domaines, function (Domaine $a, Domaine $b) {
+    return $a->getLibelle() <=> $b->getLibelle();
+});
+$axes = [];
+$axesDomaines = [];
+$domainesAxes = [];
+if (!isset($axeAffiche) or $axeAffiche) {
+    foreach ($domaines as $domaine) {
+        foreach ($domaine->getAxes() as $axe) {
+            $axes[$axe->getId()] = $axe;
+            $axesDomaines[$axe->getId()][] = $domaine;
+            $domainesAxes[$domaine->getId()][] = $axe;
+        }
+    }
+    usort($axes, function (Axe $a, Axe $b) {
+        return $a->getLibelle() <=> $b->getLibelle();
+    });
+    foreach ($axes as $axe) {
+        usort($axesDomaines[$axe->getId()], function (Domaine $a, Domaine $b) {
+            return $a->getLibelle() <=> $b->getLibelle();
+        });
+    }
 }
 
 ?>
@@ -114,79 +144,124 @@ if (isset($domaines)) {
     </a>
 <?php endif; ?>
 
-<?php if (isset($domaines) AND !empty($domaines)) : ?>
+<?php if (!isset($navigationActivatee) or $navigationActivatee) : ?>
+    <div class="navigateur" style="font-size:small;">
+        <h2> Navigation rapide</h2>
+
+        <?php if (!isset($axeAffiche) or $axeAffiche) : ?>
+            Axes <br>
+            <ul>
+                <?php foreach ($axes as $axe) : ?>
+                    <li>
+                <span class="toggleListe" id="axe_<?php echo $axe->getId(); ?>">
+                    <?php echo $axe->getLibelle(); ?>
+                </span>
+                        <span class="icon fas fa-angle-down"></span>
+                        <span class="icon fas fa-angle-up" style="display: none;"></span>
+                        <ul>
+                            <?php foreach ($axesDomaines[$axe->getId()] as $domaine) : ?>
+                                <li class='cliquable'
+                                    onclick="scrollTo2('domaine_<?php echo $domaine->getId(); ?>')"> <?php echo $domaine->getLibelle(); ?></li>
+                            <?php endforeach; ?>
+                        </ul>
+                    </li>
+                <?php endforeach; ?>
+            </ul>
+        <?php endif; ?>
+
+        Domaines <br>
+        <ul>
+            <?php foreach ($domaines as $domaine) : ?>
+                <?php if (!isset($domainesAxes[$domaine->getId()])) : ?>
+                    <li class='cliquable'
+                        onclick="scrollTo2('domaine_<?php echo $domaine->getId(); ?>')"> <?php echo $domaine->getLibelle(); ?></li>
+                <?php endif; ?>
+            <?php endforeach; ?>
+        </ul>
+    </div>
+<?php endif; ?>
+
+<span class="toggle-off btn btn-secondary" id="plier"><span class="icon icon-monter"></span> Tous plier</span>
+<span class="toggle-on btn btn-secondary" id="deplier"><span class="icon icon-descendre"></span> Tous déplier </span>
+
+<?php if (isset($domaines) and !empty($domaines)) : ?>
     <?php foreach ($domaines as $domaine) : ?>
-    <span class="domaine" style="border-color: <?php echo $domaine->getCouleur(); ?>">
+        <span class="domaine toggler" style="border-color: <?php echo $domaine->getCouleur(); ?>"
+              id="domaine_<?php echo $domaine->getId(); ?>">
             <?php echo $domaine->getLibelle(); ?> (<?php echo count($actionsByDomaines[$domaine->getId()]); ?> actions de formation)
         </span>
 
-    <?php
-    $actions_ = $actionsByDomaines[$domaine->getId()];
-    usort($actions_, function (Formation $a, Formation $b) {
-        return $a->getLibelle() <=> $b->getLibelle();
-    });
-    ?>
-    <ul>
-        <?php foreach ($actions_ as $action) : ?>
-            <?php $nbSessions = count($actions[$action->getId()]->getSessionsWithEtats([SessionEtats::ETAT_INSCRIPTION_OUVERTE])); ?>
-            <li>
-                <a id="formation_<?php echo $action->getId(); ?>">
-                <?php if ($canAfficherAction) : ?>
-                    <?php /** @see \Formation\Controller\FormationController::ficheAction() */ ?>
-                    <a href = "<?php echo $this->url('formation/fiche', ['formation' => $action->getId()], [], true); ?>"
-                       class="ajax-modal"
-                    >
-                        <?php echo $action->getLibelle(); ?></a>
-                <?php else : ?>
-                    <?php echo $action->getLibelle(); ?>
-                <?php endif; ?>
+        <div class="liste" id="liste_domaine_<?php echo $domaine->getId(); ?>">
+            <?php
+            $actions_ = $actionsByDomaines[$domaine->getId()];
+            usort($actions_, function (Formation $a, Formation $b) {
+                return $a->getLibelle() <=> $b->getLibelle();
+            });
+            ?>
+            <ul>
+                <?php foreach ($actions_ as $action) : ?>
+                    <?php $nbSessions = count($actions[$action->getId()]->getSessionsWithEtats([SessionEtats::ETAT_INSCRIPTION_OUVERTE])); ?>
+                    <li>
+                        <a id="formation_<?php echo $action->getId(); ?>">
+                            <?php if ($canAfficherAction) : ?>
+                                <?php /** @see \Formation\Controller\FormationController::ficheAction() */ ?>
+                                <a href="<?php echo $this->url('formation/fiche', ['formation' => $action->getId()], [], true); ?>"
+                                   class="ajax-modal"
+                                >
+                                    <?php echo $action->getLibelle(); ?></a>
+                            <?php else : ?>
+                                <?php echo $action->getLibelle(); ?>
+                            <?php endif; ?>
 
-                <?php if ($nbSessions > 0) : ?>
-                    - <strong><?php echo $nbSessions; ?> session<?php if ($nbSessions > 1) echo "s"; ?> ouverte<?php if ($nbSessions > 1) echo "s"; ?></strong>
-                <?php endif; ?>
+                            <?php if ($nbSessions > 0) : ?>
+                                - <strong><?php echo $nbSessions; ?> session<?php if ($nbSessions > 1) echo "s"; ?>
+                                    ouverte<?php if ($nbSessions > 1) echo "s"; ?></strong>
+                            <?php endif; ?>
 
-                <?php
-                    /** @var Formation $action */
-                    $abonnement = $action->getAbonnementByAgent($agent);
-                ?>
-                <?php if ($abonnement !== null ) : ?>
-                    <span class="icon icon-checked text-success"
-                          title="Vous êtes abonné·e aux notifications liées à cette formation"></span>
-                <?php endif; ?>
-                <?php if ($canAbonner and $abonnement === null) : ?>
-                    <?php /** @see \Formation\Controller\AbonnementController::ajouterAction() */ ?>
-                    <a href="<?php echo $this->url('formation/abonnement/ajouter', ['formation' => $action->getId()], [], true); ?>"
-                    >
+                            <?php
+                            /** @var Formation $action */
+                            $abonnement = $action->getAbonnementByAgent($agent);
+                            ?>
+                            <?php if ($abonnement !== null) : ?>
+                                <span class="icon icon-checked text-success"
+                                      title="Vous êtes abonné·e aux notifications liées à cette formation"></span>
+                            <?php endif; ?>
+                            <?php if ($canAbonner and $abonnement === null) : ?>
+                                <?php /** @see \Formation\Controller\AbonnementController::ajouterAction() */ ?>
+                                <a href="<?php echo $this->url('formation/abonnement/ajouter', ['formation' => $action->getId()], [], true); ?>"
+                                >
                         <span class="icon icon-follow text-success"
                               title="S'abonner aux notifications liées à la formation"></span></a>
-                <?php endif; ?>
+                            <?php endif; ?>
 
-                <?php if ($canAbonner and $abonnement !== null) : ?>
-                    <?php /** @see \Formation\Controller\AbonnementController::retirerAction() */ ?>
-                    <a href="<?php echo $this->url('formation/abonnement/retirer', ['abonnement' => $abonnement->getId()], [], true); ?>"
-                    >
+                            <?php if ($canAbonner and $abonnement !== null) : ?>
+                                <?php /** @see \Formation\Controller\AbonnementController::retirerAction() */ ?>
+                                <a href="<?php echo $this->url('formation/abonnement/retirer', ['abonnement' => $abonnement->getId()], [], true); ?>"
+                                >
                         <span class="icon icon-unfollow text-danger"
                               title="Se désabonner des notifications liées à la formation"></span>
-                    </a>
-                <?php endif; ?>
+                                </a>
+                            <?php endif; ?>
 
-                <?php if ($canListerParFormation) : ?>
-                    <?php /** @see \Formation\Controller\AbonnementController::listerAbonnementsParFormationAction() */ ?>
-                    <a href="<?php echo $this->url('formation/abonnement/lister-abonnements-par-formation', ['formation' => $action->getId()], [], true); ?>"
-                       class="ajax-modal"
-                    >
-                        <span class="icon icon-listing" title="lister les abonnements pour cette formation"></span></a>
-                <?php endif; ?>
-                </a>
-            </li>
-        <?php endforeach; ?>
-    </ul>
+                            <?php if ($canListerParFormation) : ?>
+                                <?php /** @see \Formation\Controller\AbonnementController::listerAbonnementsParFormationAction() */ ?>
+                                <a href="<?php echo $this->url('formation/abonnement/lister-abonnements-par-formation', ['formation' => $action->getId()], [], true); ?>"
+                                   class="ajax-modal"
+                                >
+                                <span class="icon icon-listing"
+                                      title="lister les abonnements pour cette formation"></span></a>
+                            <?php endif; ?>
+                        </a>
+                    </li>
+                <?php endforeach; ?>
+            </ul>
+        </div>
 
 
-<?php endforeach; ?>
+    <?php endforeach; ?>
 <?php else : ?>
-<br/>
-<br/>
+    <br/>
+    <br/>
     <div class="alert alert-warning">
         Aucune action de formation n'est pour le moment proposée
     </div>
@@ -198,6 +273,34 @@ if (isset($domaines)) {
             window.location.reload();
         });
     });
+
+    $('span.toggleListe').on('click', toggleListe);
+
+    function toggleListe() {
+        $(this).siblings('ul').toggle();
+        $(this).parent().children('span:not(.toggleListe)').toggle();
+    }
+
+    function scrollTo2(id) {
+        const target = document.getElementById(id);
+        const targetPosition = target.getBoundingClientRect().top + window.pageYOffset - 100;
+
+        window.scrollTo({
+            top: targetPosition,
+            behavior: "smooth"
+        });
+    }
+
+    $('span.toggler').on("click", function() {
+        let id = $(this).attr('id');
+        $('div#liste_' + id).toggle();
+    });
+    $('span#plier').on("click", function() {
+        $('div.liste').hide()
+    });
+    $('span#deplier').on("click", function() {
+        $('div.liste').show();
+    });
 </script>
 
 <style>
@@ -210,4 +313,27 @@ if (isset($domaines)) {
         font-weight: bold;
         font-size: large;
     }
+
+    div.navigateur {
+        position: fixed;
+        right: 50px;
+        top: 180px;
+        background: whitesmoke;
+        border: 1px solid black;
+        padding: 0.5rem;
+        border-radius: 0.25rem;
+    }
+
+    li.cliquable {
+        color: var(--bs-link-color);
+        cursor: pointer;
+    }
+
+    span.toggler {
+        cursor: pointer;
+    }
+
+    span#deplier, span#plier {
+        margin-bottom: 5px;
+    }
 </style>
\ No newline at end of file
diff --git a/module/Formation/view/formation/session/afficher.phtml b/module/Formation/view/formation/session/afficher.phtml
index 7efeedeead14c8664c1d9abbe984636a2197302a..8f0d24fc11fc082eb634502853300d2d8aaf2613 100644
--- a/module/Formation/view/formation/session/afficher.phtml
+++ b/module/Formation/view/formation/session/afficher.phtml
@@ -79,7 +79,7 @@ $canMesSessions = $this->isAllowed(FormateurPrivileges::getResourceId(FormateurP
                         Raison·s :
                         <ul>
                             <?php if (!empty($presencesManquantes)) : ?>
-                                <li> des présences sont non renseignées
+                                <li> Des présences sont non renseignées
                                     (<?php echo implode(", ", array_unique(array_map(function ($a) {
                                         return $a['personne'];
                                     }, $presencesManquantes))); ?>)
@@ -87,7 +87,7 @@ $canMesSessions = $this->isAllowed(FormateurPrivileges::getResourceId(FormateurP
                             <?php endif; ?>
                             <?php if (!empty($fraisManquants)) : ?>
                                 <li>
-                                    des frais sont non renseignés (<?php echo implode(", ", array_map(function ($a) {
+                                    Des frais sont non renseignés (<?php echo implode(", ", array_map(function ($a) {
                                         return $a['personne'];
                                     }, $fraisManquants)); ?>)
                                 </li>
diff --git a/module/Formation/view/formation/session/partial/inscrits.phtml b/module/Formation/view/formation/session/partial/inscrits.phtml
index efc7e866ad8cb657cad01d32bd17f47f92432c12..5a9044a315a4edc1b4965a5ee471a89fc1d0f329 100644
--- a/module/Formation/view/formation/session/partial/inscrits.phtml
+++ b/module/Formation/view/formation/session/partial/inscrits.phtml
@@ -43,8 +43,9 @@ $liste = $instance->getListeDisponible();
 $principaleComplete = $instance->isListePrincipaleComplete();
 $complementaireComplete = $instance->isListeComplementaireComplete();
 $inscriptions = $instance->getInscriptions();
-$inscriptions = array_filter($inscriptions, function (Inscription $inscription) { return $inscription->estNonHistorise();});
-$inscriptions = array_filter($inscriptions, function (Inscription $inscription) { return !$inscription->isEtatActif(InscriptionEtats::ETAT_DESISTEMENT);});
+$inscriptions = array_filter($inscriptions, function (Inscription $inscription) {
+    return $inscription->estNonHistorise() AND !$inscription->isEtatActif(InscriptionEtats::ETAT_DESISTEMENT);}
+);
 
 
 ?>
diff --git a/module/Metier/Module.php b/module/Metier/Module.php
index db201589790ce84b2e90880b8f9e9deae99e9755..3166e8a99f72b3b3e3600109fca6cc8f0881a795 100644
--- a/module/Metier/Module.php
+++ b/module/Metier/Module.php
@@ -1,6 +1,7 @@
 <?php
 namespace Metier;
 
+use Laminas\Config\Config;
 use Laminas\Mvc\ModuleRouteListener;
 use Laminas\Mvc\MvcEvent;
 use Laminas\Config\Factory as ConfigFactory;
@@ -9,14 +10,14 @@ use Laminas\Stdlib\Glob;
 
 class Module
 {
-    public function onBootstrap(MvcEvent $e)
+    public function onBootstrap(MvcEvent $e): void
     {
         $eventManager        = $e->getApplication()->getEventManager();
         $moduleRouteListener = new ModuleRouteListener();
         $moduleRouteListener->attach($eventManager);
     }
 
-    public function getConfig()
+    public function getConfig(): array|Config
     {
         $configInit = [
             __DIR__ . '/config/module.config.php'
@@ -29,14 +30,14 @@ class Module
         return ConfigFactory::fromFiles($configFiles);
     }
 
-    public function getAutoloaderConfig()
+    public function getAutoloaderConfig(): array
     {
-        return array(
-            'Laminas\Loader\StandardAutoloader' => array(
-                'namespaces' => array(
+        return [
+            'Laminas\Loader\StandardAutoloader' => [
+                'namespaces' => [
                     __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
-                ),
-            ),
-        );
+                ],
+            ],
+        ];
     }
 }
diff --git a/module/Metier/config/merged/domaine.config.php b/module/Metier/config/merged/domaine.config.php
index 681f0252a0d16af3ef3467768be8b8e9dba01cce..8f082c88f94af5da4a9b8196169d7e2f8b887dc5 100644
--- a/module/Metier/config/merged/domaine.config.php
+++ b/module/Metier/config/merged/domaine.config.php
@@ -2,9 +2,10 @@
 
 namespace Metier;
 
+use Laminas\Router\Http\Literal;
+use Laminas\Router\Http\Segment;
 use Metier\Controller\DomaineController;
 use Metier\Controller\DomaineControllerFactory;
-use Metier\Controller\MetierController;
 use Metier\Form\Domaine\DomaineForm;
 use Metier\Form\Domaine\DomaineFormFactory;
 use Metier\Form\Domaine\DomaineHydrator;
@@ -17,8 +18,6 @@ use Metier\Provider\Privilege\DomainePrivileges;
 use Metier\Service\Domaine\DomaineService;
 use Metier\Service\Domaine\DomaineServiceFactory;
 use UnicaenPrivilege\Guard\PrivilegeController;
-use Laminas\Router\Http\Literal;
-use Laminas\Router\Http\Segment;
 
 return [
     'bjyauthorize' => [
@@ -84,12 +83,12 @@ return [
         ],
     ],
 
-    'router'          => [
+    'router' => [
         'routes' => [
             'domaine' => [
-                'type'  => Literal::class,
+                'type' => Literal::class,
                 'options' => [
-                    'route'    => '/domaine',
+                    'route' => '/domaine',
                     'defaults' => [
                         /** @see DomaineController::indexAction() */
                         'controller' => DomaineController::class,
@@ -102,68 +101,68 @@ return [
                     /** DOMAINE ***************************************************************************************/
 
                     'afficher' => [
-                        'type'  => Segment::class,
+                        'type' => Segment::class,
                         'options' => [
-                            'route'    => '/afficher/:domaine',
+                            'route' => '/afficher/:domaine',
                             'defaults' => [
                                 /** @see DomaineController::afficherAction() */
                                 'controller' => DomaineController::class,
-                                'action'     => 'afficher',
+                                'action' => 'afficher',
                             ],
                         ],
                     ],
                     'ajouter' => [
-                        'type'  => Literal::class,
+                        'type' => Literal::class,
                         'options' => [
-                            'route'    => '/ajouter',
+                            'route' => '/ajouter',
                             'defaults' => [
                                 /** @see DomaineController::ajouterAction() */
                                 'controller' => DomaineController::class,
-                                'action'     => 'ajouter',
+                                'action' => 'ajouter',
                             ],
                         ],
                     ],
                     'modifier' => [
-                        'type'  => Segment::class,
+                        'type' => Segment::class,
                         'options' => [
-                            'route'    => '/modifier/:domaine',
+                            'route' => '/modifier/:domaine',
                             'defaults' => [
                                 /** @see DomaineController::modifierAction() */
                                 'controller' => DomaineController::class,
-                                'action'     => 'modifier',
+                                'action' => 'modifier',
                             ],
                         ],
                     ],
                     'historiser' => [
-                        'type'  => Segment::class,
+                        'type' => Segment::class,
                         'options' => [
-                            'route'    => '/historiser/:domaine',
+                            'route' => '/historiser/:domaine',
                             'defaults' => [
                                 /** @see DomaineController::historiserAction() */
                                 'controller' => DomaineController::class,
-                                'action'     => 'historiser',
+                                'action' => 'historiser',
                             ],
                         ],
                     ],
                     'restaurer' => [
-                        'type'  => Segment::class,
+                        'type' => Segment::class,
                         'options' => [
-                            'route'    => '/restaurer/:domaine',
+                            'route' => '/restaurer/:domaine',
                             'defaults' => [
                                 /** @see DomaineController::restaurer() */
                                 'controller' => DomaineController::class,
-                                'action'     => 'restaurer',
+                                'action' => 'restaurer',
                             ],
                         ],
                     ],
                     'supprimer' => [
-                        'type'  => Segment::class,
+                        'type' => Segment::class,
                         'options' => [
                             /** @see DomaineController::supprimerAction() */
-                            'route'    => '/supprimer/:domaine',
+                            'route' => '/supprimer/:domaine',
                             'defaults' => [
                                 'controller' => DomaineController::class,
-                                'action'     => 'supprimer',
+                                'action' => 'supprimer',
                             ],
                         ],
                     ],
@@ -197,7 +196,7 @@ return [
             DomaineService::class => DomaineServiceFactory::class,
         ],
     ],
-    'controllers'     => [
+    'controllers' => [
         'factories' => [
             DomaineController::class => DomaineControllerFactory::class,
         ],
diff --git a/module/Metier/config/merged/famille-professionnelle.config.php b/module/Metier/config/merged/famille-professionnelle.config.php
index dc386cb0bde9ec484d570b210958f955b53b1e01..075f1eca6fa73781500f6482c9b376910d02dd2b 100644
--- a/module/Metier/config/merged/famille-professionnelle.config.php
+++ b/module/Metier/config/merged/famille-professionnelle.config.php
@@ -2,14 +2,14 @@
 
 namespace Metier;
 
+use Laminas\Router\Http\Literal;
+use Laminas\Router\Http\Segment;
 use Metier\Controller\FamilleProfessionnelleController;
 use Metier\Controller\FamilleProfessionnelleControllerFactory;
 use Metier\Provider\Privilege\FamilleprofessionnellePrivileges;
 use Metier\Service\FamilleProfessionnelle\FamilleProfessionnelleService;
 use Metier\Service\FamilleProfessionnelle\FamilleProfessionnelleServiceFactory;
 use UnicaenPrivilege\Guard\PrivilegeController;
-use Laminas\Router\Http\Literal;
-use Laminas\Router\Http\Segment;
 
 return [
     'bjyauthorize' => [
@@ -75,12 +75,12 @@ return [
         ],
     ],
 
-    'router'          => [
+    'router' => [
         'routes' => [
             'famille-professionnelle' => [
-                'type'  => Literal::class,
+                'type' => Literal::class,
                 'options' => [
-                    'route'    => '/famille-professionnelle',
+                    'route' => '/famille-professionnelle',
                     'defaults' => [
                         'controller' => FamilleProfessionnelleController::class,
                         'action' => 'index',
@@ -89,68 +89,68 @@ return [
                 'may_terminate' => true,
                 'child_routes' => [
                     'ajouter' => [
-                        'type'  => Literal::class,
+                        'type' => Literal::class,
                         'options' => [
-                            'route'    => '/ajouter',
+                            'route' => '/ajouter',
                             'defaults' => [
                                 /** @see FamilleProfessionnelleController::ajouterAction() */
                                 'controller' => FamilleProfessionnelleController::class,
-                                'action'     => 'ajouter',
+                                'action' => 'ajouter',
                             ],
                         ],
                     ],
                     'afficher' => [
-                        'type'  => Segment::class,
+                        'type' => Segment::class,
                         'options' => [
-                            'route'    => '/afficher/:famille-professionnelle',
+                            'route' => '/afficher/:famille-professionnelle',
                             'defaults' => [
                                 /** @see FamilleProfessionnelleController::afficherAction() */
                                 'controller' => FamilleProfessionnelleController::class,
-                                'action'     => 'afficher',
+                                'action' => 'afficher',
                             ],
                         ],
                     ],
                     'modifier' => [
-                        'type'  => Segment::class,
+                        'type' => Segment::class,
                         'options' => [
-                            'route'    => '/modifier/:famille-professionnelle',
+                            'route' => '/modifier/:famille-professionnelle',
                             'defaults' => [
                                 /** @see FamilleProfessionnelleController::modifierAction() */
                                 'controller' => FamilleProfessionnelleController::class,
-                                'action'     => 'modifier',
+                                'action' => 'modifier',
                             ],
                         ],
                     ],
                     'historiser' => [
-                        'type'  => Segment::class,
+                        'type' => Segment::class,
                         'options' => [
-                            'route'    => '/historiser-famille/:famille-professionnelle',
+                            'route' => '/historiser-famille/:famille-professionnelle',
                             'defaults' => [
                                 /** @see FamilleProfessionnelleController::historiserAction() */
                                 'controller' => FamilleProfessionnelleController::class,
-                                'action'     => 'historiser',
+                                'action' => 'historiser',
                             ],
                         ],
                     ],
                     'restaurer' => [
-                        'type'  => Segment::class,
+                        'type' => Segment::class,
                         'options' => [
-                            'route'    => '/restaurer-famille/:famille-professionnelle',
+                            'route' => '/restaurer-famille/:famille-professionnelle',
                             'defaults' => [
                                 /** @see FamilleProfessionnelleController::restaurerAction() */
                                 'controller' => FamilleProfessionnelleController::class,
-                                'action'     => 'restaurer',
+                                'action' => 'restaurer',
                             ],
                         ],
                     ],
                     'supprimer' => [
-                        'type'  => Segment::class,
+                        'type' => Segment::class,
                         'options' => [
-                            'route'    => '/effacer-famille/:famille-professionnelle',
+                            'route' => '/effacer-famille/:famille-professionnelle',
                             'defaults' => [
                                 /** @see FamilleProfessionnelleController::supprimerAction() */
                                 'controller' => FamilleProfessionnelleController::class,
-                                'action'     => 'supprimer',
+                                'action' => 'supprimer',
                             ],
                         ],
                     ],
@@ -159,32 +159,12 @@ return [
         ],
     ],
 
-//    'navigation' => [
-//        'default' => [
-//            'home' => [
-//                'pages' => [
-//                    'ressource' => [
-//                        'pages' => [
-//                            [
-//                                'order' => 1200,
-//                                'label' => 'Familles professionnelles',
-//                                'route' => 'famille-professionnelle',
-//                                'resource' => PrivilegeController::getResourceId(FamilleProfessionnelleController::class, 'index'),
-//                                'icon' => 'fas fa-angle-right',
-//                            ],
-//                        ],
-//                    ],
-//                ],
-//            ],
-//        ],
-//    ],
-
     'service_manager' => [
         'factories' => [
             FamilleProfessionnelleService::class => FamilleProfessionnelleServiceFactory::class,
         ],
     ],
-    'controllers'     => [
+    'controllers' => [
         'factories' => [
             FamilleProfessionnelleController::class => FamilleProfessionnelleControllerFactory::class,
         ],
diff --git a/module/Metier/config/merged/index.config.php b/module/Metier/config/merged/index.config.php
index 3cc2c2f84354f5a966a2ce54dbf881aabb605740..f5adc81fa79136a687760e6d6dd79fe49a0bf07a 100644
--- a/module/Metier/config/merged/index.config.php
+++ b/module/Metier/config/merged/index.config.php
@@ -37,16 +37,16 @@ return [
             'metier' => [
                 'child_routes' => [
                     'referentiel' => [
-                        'type'  => Literal::class,
+                        'type' => Literal::class,
                         'options' => [
                             'route' => '/index',
                             'defaults' => [
                                 /** @see IndexController::indexAction() */
                                 'controller' => IndexController::class,
-                                'action'     => 'index',
+                                'action' => 'index',
                             ],
                         ],
-                        'may_terminate'=> true,
+                        'may_terminate' => true,
                         'child_routes' => [
                         ],
                     ],
@@ -55,31 +55,12 @@ return [
         ],
     ],
 
-//    'navigation' => [
-//        'default' => [
-//            'home' => [
-//                'pages' => [
-//                    'ressource' => [
-//                        'pages' => [
-//                            [
-//                                'order' => 1000,
-//                                'label' => 'Ressources liées aux métiers',
-//                                'route' => 'metier',
-//                                'resource' => PrivilegeController::getResourceId(IndexController::class, 'index'),
-//                                'dropdown-header' => true,
-//                            ],
-//                        ],
-//                    ],
-//                ],
-//            ],
-//        ],
-//    ],
 
     'service_manager' => [
         'factories' => [
         ],
     ],
-    'controllers'     => [
+    'controllers' => [
         'factories' => [
             IndexController::class => IndexControllerFactory::class,
         ],
diff --git a/module/Metier/config/merged/metier.config.php b/module/Metier/config/merged/metier.config.php
index c2641c9a44cd77584f9a5e3fce7c49e571277e05..ba5f502a0d5f448746729fd23c6dba2dd26b654c 100644
--- a/module/Metier/config/merged/metier.config.php
+++ b/module/Metier/config/merged/metier.config.php
@@ -4,11 +4,8 @@ namespace Metier;
 
 use Laminas\Router\Http\Literal;
 use Laminas\Router\Http\Segment;
-use Metier\Controller\DomaineController;
-use Metier\Controller\FamilleProfessionnelleController;
 use Metier\Controller\MetierController;
 use Metier\Controller\MetierControllerFactory;
-use Metier\Controller\ReferentielController;
 use Metier\Form\Metier\MetierForm;
 use Metier\Form\Metier\MetierFormFactory;
 use Metier\Form\Metier\MetierHydrator;
diff --git a/module/Metier/config/merged/reference.config.php b/module/Metier/config/merged/reference.config.php
index 6f64051d57013963b134368a2459c656d023a468..031f3acb903c2532702d2a1b135647d471eccbcf 100644
--- a/module/Metier/config/merged/reference.config.php
+++ b/module/Metier/config/merged/reference.config.php
@@ -2,6 +2,8 @@
 
 namespace Metier;
 
+use Laminas\Router\Http\Literal;
+use Laminas\Router\Http\Segment;
 use Metier\Controller\ReferenceController;
 use Metier\Controller\ReferenceControllerFactory;
 use Metier\Form\Reference\ReferenceForm;
@@ -13,8 +15,6 @@ use Metier\Service\Reference\ReferenceService;
 use Metier\Service\Reference\ReferenceServiceFactory;
 use Metier\View\Helper\ReferenceViewHelper;
 use UnicaenPrivilege\Guard\PrivilegeController;
-use Laminas\Router\Http\Literal;
-use Laminas\Router\Http\Segment;
 
 return [
     'bjyauthorize' => [
@@ -70,69 +70,69 @@ return [
         ],
     ],
 
-    'router'          => [
+    'router' => [
         'routes' => [
             'metier' => [
                 'child_routes' => [
                     'reference' => [
-                        'type'  => Literal::class,
+                        'type' => Literal::class,
                         'options' => [
                             'route' => '/reference',
                         ],
                         'may_terminate' => false,
                         'child_routes' => [
                             'ajouter' => [
-                                'type'  => Segment::class,
+                                'type' => Segment::class,
                                 'options' => [
-                                    'route'    => '/ajouter/:metier',
+                                    'route' => '/ajouter/:metier',
                                     'defaults' => [
                                         /** @see ReferenceController::ajouterAction() */
                                         'controller' => ReferenceController::class,
-                                        'action'     => 'ajouter',
+                                        'action' => 'ajouter',
                                     ],
                                 ],
                             ],
                             'modifier' => [
-                                'type'  => Segment::class,
+                                'type' => Segment::class,
                                 'options' => [
-                                    'route'    => '/modifier/:reference',
+                                    'route' => '/modifier/:reference',
                                     'defaults' => [
                                         /** @see ReferenceController::modifierAction() */
                                         'controller' => ReferenceController::class,
-                                        'action'     => 'modifier',
+                                        'action' => 'modifier',
                                     ],
                                 ],
                             ],
                             'historiser' => [
-                                'type'  => Segment::class,
+                                'type' => Segment::class,
                                 'options' => [
-                                    'route'    => '/historiser/:reference',
+                                    'route' => '/historiser/:reference',
                                     'defaults' => [
                                         /** @see ReferenceController::historiserAction() */
                                         'controller' => ReferenceController::class,
-                                        'action'     => 'historiser',
+                                        'action' => 'historiser',
                                     ],
                                 ],
                             ],
                             'restaurer' => [
-                                'type'  => Segment::class,
+                                'type' => Segment::class,
                                 'options' => [
-                                    'route'    => '/restaurer/:reference',
+                                    'route' => '/restaurer/:reference',
                                     'defaults' => [
                                         /** @see ReferenceController::restaurerAction() */
                                         'controller' => ReferenceController::class,
-                                        'action'     => 'restaurer',
+                                        'action' => 'restaurer',
                                     ],
                                 ],
                             ],
                             'supprimer' => [
-                                'type'  => Segment::class,
+                                'type' => Segment::class,
                                 'options' => [
-                                    'route'    => '/supprimer/:reference',
+                                    'route' => '/supprimer/:reference',
                                     'defaults' => [
                                         /** @see ReferenceController::supprimerAction() */
                                         'controller' => ReferenceController::class,
-                                        'action'     => 'supprimer',
+                                        'action' => 'supprimer',
                                     ],
                                 ],
                             ],
@@ -148,7 +148,7 @@ return [
             ReferenceService::class => ReferenceServiceFactory::class,
         ],
     ],
-    'controllers'     => [
+    'controllers' => [
         'factories' => [
             ReferenceController::class => ReferenceControllerFactory::class,
         ],
diff --git a/module/Metier/config/merged/referentiel.config.php b/module/Metier/config/merged/referentiel.config.php
index dbdfac509f6cb2ed5ffc066d59aa8babe8d79fee..3529b7f8a921b793905f3c0057b49d608cd9ed64 100644
--- a/module/Metier/config/merged/referentiel.config.php
+++ b/module/Metier/config/merged/referentiel.config.php
@@ -2,6 +2,8 @@
 
 namespace Metier;
 
+use Laminas\Router\Http\Literal;
+use Laminas\Router\Http\Segment;
 use Metier\Controller\ReferentielController;
 use Metier\Controller\ReferentielControllerFactory;
 use Metier\Form\Referentiel\ReferentielForm;
@@ -12,8 +14,6 @@ use Metier\Provider\Privilege\ReferentielmetierPrivileges;
 use Metier\Service\Referentiel\ReferentielService;
 use Metier\Service\Referentiel\ReferentielServiceFactory;
 use UnicaenPrivilege\Guard\PrivilegeController;
-use Laminas\Router\Http\Literal;
-use Laminas\Router\Http\Segment;
 
 return [
     'bjyauthorize' => [
@@ -78,85 +78,85 @@ return [
         ],
     ],
 
-    'router'          => [
+    'router' => [
         'routes' => [
             'metier' => [
                 'child_routes' => [
                     'referentiel' => [
-                        'type'  => Literal::class,
+                        'type' => Literal::class,
                         'options' => [
                             'route' => '/referentiel',
                             'defaults' => [
                                 /** @see ReferentielController::indexAction() */
                                 'controller' => ReferentielController::class,
-                                'action'     => 'index',
+                                'action' => 'index',
                             ],
                         ],
-                        'may_terminate'=> true,
+                        'may_terminate' => true,
                         'child_routes' => [
                             'afficher' => [
-                                'type'  => Segment::class,
+                                'type' => Segment::class,
                                 'options' => [
-                                    'route'    => '/afficher/:referentiel',
+                                    'route' => '/afficher/:referentiel',
                                     'defaults' => [
                                         /** @see ReferentielController::afficherAction() */
                                         'controller' => ReferentielController::class,
-                                        'action'     => 'afficher',
+                                        'action' => 'afficher',
                                     ],
                                 ],
                             ],
                             'ajouter' => [
-                                'type'  => Literal::class,
+                                'type' => Literal::class,
                                 'options' => [
-                                    'route'    => '/ajouter',
+                                    'route' => '/ajouter',
                                     'defaults' => [
                                         /** @see ReferentielController::ajouterAction() */
                                         'controller' => ReferentielController::class,
-                                        'action'     => 'ajouter',
+                                        'action' => 'ajouter',
                                     ],
                                 ],
                             ],
                             'modifier' => [
-                                'type'  => Segment::class,
+                                'type' => Segment::class,
                                 'options' => [
-                                    'route'    => '/modifier/:referentiel',
+                                    'route' => '/modifier/:referentiel',
                                     'defaults' => [
                                         /** @see ReferentielController::modifierAction() */
                                         'controller' => ReferentielController::class,
-                                        'action'     => 'modifier',
+                                        'action' => 'modifier',
                                     ],
                                 ],
                             ],
                             'historiser' => [
-                                'type'  => Segment::class,
+                                'type' => Segment::class,
                                 'options' => [
-                                    'route'    => '/historiser/:referentiel',
+                                    'route' => '/historiser/:referentiel',
                                     'defaults' => [
                                         /** @see ReferentielController::historiserAction() */
                                         'controller' => ReferentielController::class,
-                                        'action'     => 'historiser',
+                                        'action' => 'historiser',
                                     ],
                                 ],
                             ],
                             'restaurer' => [
-                                'type'  => Segment::class,
+                                'type' => Segment::class,
                                 'options' => [
-                                    'route'    => '/restaurer/:referentiel',
+                                    'route' => '/restaurer/:referentiel',
                                     'defaults' => [
                                         /** @see ReferentielController::restaurerAction() */
                                         'controller' => ReferentielController::class,
-                                        'action'     => 'restaurer',
+                                        'action' => 'restaurer',
                                     ],
                                 ],
                             ],
                             'supprimer' => [
-                                'type'  => Segment::class,
+                                'type' => Segment::class,
                                 'options' => [
-                                    'route'    => '/supprimer/:referentiel',
+                                    'route' => '/supprimer/:referentiel',
                                     'defaults' => [
                                         /** @see ReferentielController::supprimerAction() */
                                         'controller' => ReferentielController::class,
-                                        'action'     => 'supprimer',
+                                        'action' => 'supprimer',
                                     ],
                                 ],
                             ],
@@ -167,32 +167,12 @@ return [
         ],
     ],
 
-//    'navigation' => [
-//        'default' => [
-//            'home' => [
-//                'pages' => [
-//                    'ressource' => [
-//                        'pages' => [
-//                            [
-//                                'order' => 1400,
-//                                'label' => 'Référentiels métiers',
-//                                'route' => 'metier/referentiel',
-//                                'resource' => PrivilegeController::getResourceId(ReferentielController::class, 'index'),
-//                                'icon' => 'fas fa-angle-right',
-//                            ],
-//                        ],
-//                    ],
-//                ],
-//            ],
-//        ],
-//    ],
-
     'service_manager' => [
         'factories' => [
             ReferentielService::class => ReferentielServiceFactory::class,
         ],
     ],
-    'controllers'     => [
+    'controllers' => [
         'factories' => [
             ReferentielController::class => ReferentielControllerFactory::class,
         ],
diff --git a/module/Metier/config/module.config.php b/module/Metier/config/module.config.php
index 87954b1e85bcb934408bbe10eb95be68d2d64e1f..5276d1f594f44a6627da3decb1159061be93125c 100755
--- a/module/Metier/config/module.config.php
+++ b/module/Metier/config/module.config.php
@@ -2,8 +2,8 @@
 
 namespace Metier;
 
-use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
 use Doctrine\ORM\Mapping\Driver\XmlDriver;
+use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
 use UnicaenPrivilege\Guard\PrivilegeController;
 
 return [
@@ -41,7 +41,7 @@ return [
         'factories' => [
         ],
     ],
-    'controllers'     => [
+    'controllers' => [
         'factories' => [
         ]
     ],
diff --git a/module/Metier/src/Metier/Controller/DomaineController.php b/module/Metier/src/Metier/Controller/DomaineController.php
index 090a629de7cd8273158e522009711cd72f7c3c6b..b6f380460a4c38670563d9904b144712b1531cfd 100644
--- a/module/Metier/src/Metier/Controller/DomaineController.php
+++ b/module/Metier/src/Metier/Controller/DomaineController.php
@@ -2,25 +2,26 @@
 
 namespace Metier\Controller;
 
-use Metier\Entity\Db\Domaine;
-use Metier\Form\Domaine\DomaineFormAwareTrait;
-use Metier\Service\Domaine\DomaineServiceAwareTrait;
-use Metier\Service\FamilleProfessionnelle\FamilleProfessionnelleServiceAwareTrait;
 use Laminas\Http\Request;
 use Laminas\Http\Response;
 use Laminas\Mvc\Controller\AbstractActionController;
 use Laminas\View\Model\ViewModel;
+use Metier\Entity\Db\Domaine;
+use Metier\Form\Domaine\DomaineFormAwareTrait;
+use Metier\Service\Domaine\DomaineServiceAwareTrait;
+use Metier\Service\FamilleProfessionnelle\FamilleProfessionnelleServiceAwareTrait;
 
-class DomaineController extends AbstractActionController {
+class DomaineController extends AbstractActionController
+{
     use DomaineServiceAwareTrait;
     use FamilleProfessionnelleServiceAwareTrait;
     use DomaineFormAwareTrait;
 
-    public function indexAction() : ViewModel
+    public function indexAction(): ViewModel
     {
         $famille = $this->params()->fromQuery('famille');
         $famille_ = null;
-        if ($famille AND $famille !== ' ') $famille_ = $this->getFamilleProfessionnelleService()->getFamilleProfessionnelle($famille);
+        if ($famille and $famille !== ' ') $famille_ = $this->getFamilleProfessionnelleService()->getFamilleProfessionnelle($famille);
 
         $type = $this->params()->fromQuery('type');
         $historise = $this->params()->fromQuery('historise');
@@ -29,8 +30,12 @@ class DomaineController extends AbstractActionController {
         if ($famille_ !== null) $domaines = array_filter($domaines, function (Domaine $m) use ($famille_) {
             return in_array($famille_, $m->getFamilles());
         });
-        if ($type !== null and $type !== ' ') $domaines = array_filter($domaines, function (Domaine $m) use ($type) { return $m->getTypeFonction() === $type; });
-        if ($historise !== null and $historise !== ' ') $domaines = array_filter($domaines, function (Domaine $m) use ($historise) { if ($historise === '1') return $m->estHistorise(); else return $m->estNonHistorise(); });
+        if ($type !== null and $type !== ' ') $domaines = array_filter($domaines, function (Domaine $m) use ($type) {
+            return $m->getTypeFonction() === $type;
+        });
+        if ($historise !== null and $historise !== ' ') $domaines = array_filter($domaines, function (Domaine $m) use ($historise) {
+            if ($historise === '1') return $m->estHistorise(); else return $m->estNonHistorise();
+        });
 
         $familles = $this->getFamilleProfessionnelleService()->getFamillesProfessionnelles();
 
@@ -45,7 +50,7 @@ class DomaineController extends AbstractActionController {
         ]);
     }
 
-    public function afficherAction() : ViewModel
+    public function afficherAction(): ViewModel
     {
         $domaine = $this->getDomaineService()->getRequestedDomaine($this);
 
@@ -56,9 +61,8 @@ class DomaineController extends AbstractActionController {
         ]);
     }
 
-    public function ajouterAction() : ViewModel
+    public function ajouterAction(): ViewModel
     {
-        /** @var Domaine $domaine */
         $domaine = new Domaine();
 
         $form = $this->getDomaineForm();
@@ -84,7 +88,7 @@ class DomaineController extends AbstractActionController {
         return $vm;
     }
 
-    public function modifierAction() : ViewModel
+    public function modifierAction(): ViewModel
     {
         $domaine = $this->getDomaineService()->getRequestedDomaine($this);
 
@@ -111,7 +115,7 @@ class DomaineController extends AbstractActionController {
         return $vm;
     }
 
-    public function historiserAction() : Response
+    public function historiserAction(): Response
     {
         $domaine = $this->getDomaineService()->getRequestedDomaine($this);
         if ($domaine !== null) {
@@ -120,7 +124,7 @@ class DomaineController extends AbstractActionController {
         return $this->redirect()->toRoute('domaine', [], [], true);
     }
 
-    public function restaurerAction() : Response
+    public function restaurerAction(): Response
     {
         $domaine = $this->getDomaineService()->getRequestedDomaine($this);
         if ($domaine !== null) {
@@ -129,7 +133,7 @@ class DomaineController extends AbstractActionController {
         return $this->redirect()->toRoute('domaine', [], [], true);
     }
 
-    public function supprimerAction() : ViewModel
+    public function supprimerAction(): ViewModel
     {
         $domaine = $this->getDomaineService()->getRequestedDomaine($this);
 
diff --git a/module/Metier/src/Metier/Controller/DomaineControllerFactory.php b/module/Metier/src/Metier/Controller/DomaineControllerFactory.php
index 564b5df292c9e6fd1c9869c7a99ebdb63d764fb1..9d6305fb7b5d76fa36c4d6bdbad6a3d60689169f 100644
--- a/module/Metier/src/Metier/Controller/DomaineControllerFactory.php
+++ b/module/Metier/src/Metier/Controller/DomaineControllerFactory.php
@@ -2,22 +2,21 @@
 
 namespace Metier\Controller;
 
+use Interop\Container\ContainerInterface;
 use Metier\Form\Domaine\DomaineForm;
 use Metier\Service\Domaine\DomaineService;
-use Interop\Container\ContainerInterface;
 use Metier\Service\FamilleProfessionnelle\FamilleProfessionnelleService;
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\NotFoundExceptionInterface;
 
-class DomaineControllerFactory {
+class DomaineControllerFactory
+{
 
     /**
-     * @param ContainerInterface $container
-     * @return DomaineController
      * @throws ContainerExceptionInterface
      * @throws NotFoundExceptionInterface
      */
-    public function __invoke(ContainerInterface $container) : DomaineController
+    public function __invoke(ContainerInterface $container): DomaineController
     {
         /**
          * @var DomaineService $domaineService
diff --git a/module/Metier/src/Metier/Controller/FamilleProfessionnelleController.php b/module/Metier/src/Metier/Controller/FamilleProfessionnelleController.php
index cbbec26232e33a6ced5d7fbc4b95904a945f361a..9beb7d060eb0006ef578d30d64c8331b30a2c84f 100644
--- a/module/Metier/src/Metier/Controller/FamilleProfessionnelleController.php
+++ b/module/Metier/src/Metier/Controller/FamilleProfessionnelleController.php
@@ -2,20 +2,20 @@
 
 namespace Metier\Controller;
 
-use Application\Form\ModifierLibelle\ModifierLibelleForm;
 use Application\Form\ModifierLibelle\ModifierLibelleFormAwareTrait;
-use Metier\Service\FamilleProfessionnelle\FamilleProfessionnelleServiceAwareTrait;
-use Metier\Entity\Db\FamilleProfessionnelle;
 use Laminas\Http\Request;
 use Laminas\Http\Response;
 use Laminas\Mvc\Controller\AbstractActionController;
 use Laminas\View\Model\ViewModel;
+use Metier\Entity\Db\FamilleProfessionnelle;
+use Metier\Service\FamilleProfessionnelle\FamilleProfessionnelleServiceAwareTrait;
 
-class FamilleProfessionnelleController extends AbstractActionController {
+class FamilleProfessionnelleController extends AbstractActionController
+{
     use FamilleProfessionnelleServiceAwareTrait;
     use ModifierLibelleFormAwareTrait;
 
-    public function indexAction() : ViewModel
+    public function indexAction(): ViewModel
     {
         $familles = $this->getFamilleProfessionnelleService()->getFamillesProfessionnelles();
 
@@ -24,7 +24,7 @@ class FamilleProfessionnelleController extends AbstractActionController {
         ]);
     }
 
-    public function afficherAction() : ViewModel
+    public function afficherAction(): ViewModel
     {
         $famille = $this->getFamilleProfessionnelleService()->getRequestedFamilleProfessionnelle($this);
         $domaines = $famille->getDomaines();
@@ -45,11 +45,10 @@ class FamilleProfessionnelleController extends AbstractActionController {
         ]);
     }
 
-    public function ajouterAction() : ViewModel
+    public function ajouterAction(): ViewModel
     {
         $famille = new FamilleProfessionnelle();
 
-        /** @var ModifierLibelleForm $form */
         $form = $this->getModifierLibelleForm();
         $form->setAttribute('action', $this->url()->fromRoute('famille-professionnelle/ajouter', [], [], true));
         $form->bind($famille);
@@ -73,11 +72,10 @@ class FamilleProfessionnelleController extends AbstractActionController {
         return $vm;
     }
 
-    public function modifierAction() : ViewModel
+    public function modifierAction(): ViewModel
     {
         $famille = $this->getFamilleProfessionnelleService()->getRequestedFamilleProfessionnelle($this);
 
-        /** @var ModifierLibelleForm $form */
         $form = $this->getModifierLibelleForm();
         $form->setAttribute('action', $this->url()->fromRoute('famille-professionnelle/modifier', ['famille-professionnelle' => $famille->getId()], [], true));
         $form->bind($famille);
@@ -101,7 +99,7 @@ class FamilleProfessionnelleController extends AbstractActionController {
         return $vm;
     }
 
-    public function historiserAction() : Response
+    public function historiserAction(): Response
     {
         $famille = $this->getFamilleProfessionnelleService()->getRequestedFamilleProfessionnelle($this);
 
@@ -112,7 +110,7 @@ class FamilleProfessionnelleController extends AbstractActionController {
         return $this->redirect()->toRoute('famille-professionnelle', [], [], true);
     }
 
-    public function restaurerAction() : Response
+    public function restaurerAction(): Response
     {
         $famille = $this->getFamilleProfessionnelleService()->getRequestedFamilleProfessionnelle($this);
 
@@ -123,7 +121,7 @@ class FamilleProfessionnelleController extends AbstractActionController {
         return $this->redirect()->toRoute('famille-professionnelle', [], [], true);
     }
 
-    public function supprimerAction() : ViewModel
+    public function supprimerAction(): ViewModel
     {
         $famille = $this->getFamilleProfessionnelleService()->getRequestedFamilleProfessionnelle($this);
 
diff --git a/module/Metier/src/Metier/Controller/FamilleProfessionnelleControllerFactory.php b/module/Metier/src/Metier/Controller/FamilleProfessionnelleControllerFactory.php
index e4ff0aac8975cfe66b9f9b35f7013ec4b5329559..3e1a5dc50243d2ba1a175bfcd614d54c2a84b868 100644
--- a/module/Metier/src/Metier/Controller/FamilleProfessionnelleControllerFactory.php
+++ b/module/Metier/src/Metier/Controller/FamilleProfessionnelleControllerFactory.php
@@ -8,15 +8,14 @@ use Metier\Service\FamilleProfessionnelle\FamilleProfessionnelleService;
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\NotFoundExceptionInterface;
 
-class FamilleProfessionnelleControllerFactory {
+class FamilleProfessionnelleControllerFactory
+{
 
     /**
-     * @param ContainerInterface $container
-     * @return FamilleProfessionnelleController
      * @throws ContainerExceptionInterface
      * @throws NotFoundExceptionInterface
      */
-    public function __invoke(ContainerInterface $container) : FamilleProfessionnelleController
+    public function __invoke(ContainerInterface $container): FamilleProfessionnelleController
     {
         /**
          * @var FamilleProfessionnelleService $familleService
diff --git a/module/Metier/src/Metier/Controller/IndexController.php b/module/Metier/src/Metier/Controller/IndexController.php
index b7daee87906f708120fc7df23f29656b26cafcae..761e80b2debc0eba7ad5df2db41f3a2676e2cbbe 100644
--- a/module/Metier/src/Metier/Controller/IndexController.php
+++ b/module/Metier/src/Metier/Controller/IndexController.php
@@ -5,9 +5,10 @@ namespace Metier\Controller;
 use Laminas\Mvc\Controller\AbstractActionController;
 use Laminas\View\Model\ViewModel;
 
-class IndexController extends AbstractActionController {
+class IndexController extends AbstractActionController
+{
 
-    public function indexAction() : ViewModel
+    public function indexAction(): ViewModel
     {
         return new ViewModel([]);
     }
diff --git a/module/Metier/src/Metier/Controller/IndexControllerFactory.php b/module/Metier/src/Metier/Controller/IndexControllerFactory.php
index d85b9d8ccfdc57a701d2ad86ee3d67468fff9936..138394fe9d85a05762f2495fe8e3a2daa9aef782 100644
--- a/module/Metier/src/Metier/Controller/IndexControllerFactory.php
+++ b/module/Metier/src/Metier/Controller/IndexControllerFactory.php
@@ -4,9 +4,10 @@ namespace Metier\Controller;
 
 use Psr\Container\ContainerInterface;
 
-class IndexControllerFactory {
+class IndexControllerFactory
+{
 
-    public function __invoke(ContainerInterface $container) : IndexController
+    public function __invoke(ContainerInterface $container): IndexController
     {
         $controller = new IndexController();
         return $controller;
diff --git a/module/Metier/src/Metier/Controller/MetierController.php b/module/Metier/src/Metier/Controller/MetierController.php
index 953bb89c9cded9e6295bfdaa1ed82d5fa40dd3fa..fcb7ebfa4ac4057995dab0619f3c6e0287f90cd1 100644
--- a/module/Metier/src/Metier/Controller/MetierController.php
+++ b/module/Metier/src/Metier/Controller/MetierController.php
@@ -19,7 +19,8 @@ use Metier\Service\Metier\MetierService;
 use Metier\Service\Metier\MetierServiceAwareTrait;
 use Metier\Service\Referentiel\ReferentielServiceAwareTrait;
 
-class MetierController extends AbstractActionController {
+class MetierController extends AbstractActionController
+{
     use AgentServiceAwareTrait;
     use DomaineServiceAwareTrait;
     use FamilleProfessionnelleServiceAwareTrait;
@@ -31,19 +32,23 @@ class MetierController extends AbstractActionController {
     use MetierFormAwareTrait;
     use NiveauEnveloppeFormAwareTrait;
 
-    public function indexAction() : ViewModel
+    public function indexAction(): ViewModel
     {
         $domaine = $this->params()->fromQuery('domaine');
         $domaine_ = null;
-        if ($domaine AND $domaine !== ' ') $domaine_ = $this->getDomaineService()->getDomaine($domaine);
+        if ($domaine and $domaine !== ' ') $domaine_ = $this->getDomaineService()->getDomaine($domaine);
 
         $historise = $this->params()->fromQuery('historise');
 
         $metiers = $this->getMetierService()->getMetiers();
         $domaines = $this->getDomaineService()->getDomaines();
 
-        if ($domaine_ !== null) $metiers = array_filter($metiers, function (Metier $m) use ($domaine_) { return $m->hasDomaine($domaine_); });
-        if ($historise !== null) $metiers = array_filter($metiers, function (Metier $m) use ($historise) { if ($historise === '1') return $m->estHistorise(); else return $m->estNonHistorise(); });
+        if ($domaine_ !== null) $metiers = array_filter($metiers, function (Metier $m) use ($domaine_) {
+            return $m->hasDomaine($domaine_);
+        });
+        if ($historise !== null) $metiers = array_filter($metiers, function (Metier $m) use ($historise) {
+            if ($historise === '1') return $m->estHistorise(); else return $m->estNonHistorise();
+        });
 
         return new ViewModel([
             'metiers' => $metiers,
@@ -54,19 +59,18 @@ class MetierController extends AbstractActionController {
         ]);
     }
 
-    public function afficherAction() : ViewModel
+    public function afficherAction(): ViewModel
     {
         $metier = $this->getMetierService()->getRequestedMetier($this);
-        $fiches = $metier->getFichesMetiers();
 
         return new ViewModel([
             'title' => "Affichage du métier",
             'metier' => $metier,
-            'fiches' => $fiches,
+            'fiches' => null,
         ]);
     }
 
-    public function ajouterAction() : ViewModel
+    public function ajouterAction(): ViewModel
     {
         $metier = new Metier();
         $form = $this->getMetierForm();
@@ -91,7 +95,7 @@ class MetierController extends AbstractActionController {
         return $vm;
     }
 
-    public function modifierAction() : ViewModel
+    public function modifierAction(): ViewModel
     {
         $metier = $this->getMetierService()->getRequestedMetier($this);
         $form = $this->getMetierForm();
@@ -116,7 +120,7 @@ class MetierController extends AbstractActionController {
         return $vm;
     }
 
-    public function historiserAction() : Response
+    public function historiserAction(): Response
     {
         $metier = $this->getMetierService()->getRequestedMetier($this);
 
@@ -127,7 +131,7 @@ class MetierController extends AbstractActionController {
         return $this->redirect()->toRoute('metier', [], [], true);
     }
 
-    public function restaurerAction() : Response
+    public function restaurerAction(): Response
     {
         $metier = $this->getMetierService()->getRequestedMetier($this);
 
@@ -138,7 +142,7 @@ class MetierController extends AbstractActionController {
         return $this->redirect()->toRoute('metier', [], [], true);
     }
 
-    public function supprimerAction() : ViewModel
+    public function supprimerAction(): ViewModel
     {
         $metier = $this->getMetierService()->getRequestedMetier($this);
 
@@ -153,29 +157,21 @@ class MetierController extends AbstractActionController {
 
         $vm = new ViewModel();
         if ($metier !== null) {
-            $fiches = $metier->getFichesMetiers();
-
-            if (count($fiches) === 0) {
-                $vm->setTemplate('default/confirmation');
-                $vm->setVariables([
-                    'title' => "Suppression du métier " . $metier->getLibelle(),
-                    'text' => "La suppression est définitive êtes-vous sûr&middot;e de vouloir continuer ?",
-                    'action' => $this->url()->fromRoute('metier/supprimer', ["metier" => $metier->getId()], [], true),
-                ]);
-            } else {
-                $vm->setTemplate('metier/default/probleme');
-                $vm->setVariables([
-                    'title' => "Suppression du métier " . $metier->getLibelle() . " impossible",
-                    'text' => "La suppresion du métier ". $metier->getLibelle() . " est impossible car celui-ci est associé à ". count($fiches). " fiche(s) métier(s).",
-                ]);
-            }
+
+            $vm->setTemplate('default/confirmation');
+            $vm->setVariables([
+                'title' => "Suppression du métier " . $metier->getLibelle(),
+                'text' => "La suppression est définitive êtes-vous sûr&middot;e de vouloir continuer ?",
+                'action' => $this->url()->fromRoute('metier/supprimer', ["metier" => $metier->getId()], [], true),
+            ]);
         }
         return $vm;
     }
 
     /** CARTOGRAPHIE ***************************************************************************************************/
 
-    public function cartographieAction() : ViewModel
+    public
+    function cartographieAction(): ViewModel
     {
         $results = $this->getMetierService()->generateCartographyArray();
 
@@ -187,7 +183,8 @@ class MetierController extends AbstractActionController {
     /** NIVEAUX *******************************************************************************************************/
 
 
-    public function modifierNiveauxAction() : ViewModel
+    public
+    function modifierNiveauxAction(): ViewModel
     {
         $metier = $this->getMetierService()->getRequestedMetier($this);
 
@@ -201,7 +198,7 @@ class MetierController extends AbstractActionController {
         $form->bind($niveaux);
 
         $request = $this->getRequest();
-        if($request->isPost()) {
+        if ($request->isPost()) {
             $data = $request->getPost();
             $form->setData($data);
             if ($form->isValid()) {
@@ -216,19 +213,20 @@ class MetierController extends AbstractActionController {
         }
 
         $vm = new ViewModel([
-            'title' => "Modifier les niveaux du métier [".MetierService::computeEcritureInclusive($metier->getLibelleFeminin(), $metier->getLibelleMasculin())."]",
+            'title' => "Modifier les niveaux du métier [" . MetierService::computeEcritureInclusive($metier->getLibelleFeminin(), $metier->getLibelleMasculin()) . "]",
             'form' => $form,
         ]);
         $vm->setTemplate('default/default-form');
         return $vm;
     }
 
-    public function initialiserNiveauxAction() : Response
+    public
+    function initialiserNiveauxAction(): Response
     {
         $metiers = $this->getMetierService()->getMetiers();
         foreach ($metiers as $metier) {
             $niveau = $this->getNiveauService()->getNiveau($metier->getNiveaux());
-            if ($metier->getNiveaux() === null AND $niveau !== null) {
+            if ($metier->getNiveaux() === null and $niveau !== null) {
                 $niveaux = new NiveauEnveloppe();
                 $niveaux->setBorneInferieure($niveau);
                 $niveaux->setBorneSuperieure($niveau);
@@ -243,7 +241,8 @@ class MetierController extends AbstractActionController {
         return $this->redirect()->toRoute('metier');
     }
 
-    public function listerAgentsAction() : ViewModel
+    public
+    function listerAgentsAction(): ViewModel
     {
         $metier = $this->getMetierService()->getRequestedMetier($this);
         $array = $this->getMetierService()->getInfosAgentsByMetier($metier);
@@ -253,8 +252,8 @@ class MetierController extends AbstractActionController {
         }
         $agents = $this->getAgentService()->getAgentsByIds($agentIds);
 
-        $vm =  new ViewModel([
-            'title' => 'Liste des agents ayants une fiche de poste avec un lien au métiers ['.$metier->getLibelle().']',
+        $vm = new ViewModel([
+            'title' => 'Liste des agents ayants une fiche de poste avec un lien au métiers [' . $metier->getLibelle() . ']',
             'metier' => $metier,
             'agents' => $agents,
             'array' => $array,
diff --git a/module/Metier/src/Metier/Controller/MetierControllerFactory.php b/module/Metier/src/Metier/Controller/MetierControllerFactory.php
index 778bc8b89912ba27690262ef7a8eeaaa1ff28032..1dd4735d7ddb9a395a0ea7d59d5a2a550683239f 100644
--- a/module/Metier/src/Metier/Controller/MetierControllerFactory.php
+++ b/module/Metier/src/Metier/Controller/MetierControllerFactory.php
@@ -15,15 +15,14 @@ use Metier\Service\Referentiel\ReferentielService;
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\NotFoundExceptionInterface;
 
-class MetierControllerFactory {
+class MetierControllerFactory
+{
 
     /**
-     * @param ContainerInterface $container
-     * @return MetierController
      * @throws ContainerExceptionInterface
      * @throws NotFoundExceptionInterface
      */
-    public function __invoke(ContainerInterface $container) : MetierController
+    public function __invoke(ContainerInterface $container): MetierController
     {
         /**
          * @var AgentService $agentService
@@ -49,7 +48,6 @@ class MetierControllerFactory {
         $metierForm = $container->get('FormElementManager')->get(MetierForm::class);
         $niveauEnveloppeForm = $container->get('FormElementManager')->get(NiveauEnveloppeForm::class);
 
-        /** @var MetierController $controller */
         $controller = new MetierController();
         $controller->setAgentService($agentService);
         $controller->setDomaineService($domaineService);
diff --git a/module/Metier/src/Metier/Controller/ReferenceController.php b/module/Metier/src/Metier/Controller/ReferenceController.php
index 367e3a30e130b4a7779ecd180cecd54630542c5b..f82512bb3de5b87f4e7b008ae180e40d9e8bd89b 100644
--- a/module/Metier/src/Metier/Controller/ReferenceController.php
+++ b/module/Metier/src/Metier/Controller/ReferenceController.php
@@ -2,21 +2,22 @@
 
 namespace Metier\Controller;
 
-use Metier\Entity\Db\Reference;
-use Metier\Form\Reference\ReferenceFormAwareTrait;
-use Metier\Service\Metier\MetierServiceAwareTrait;
-use Metier\Service\Reference\ReferenceServiceAwareTrait;
 use Laminas\Http\Request;
 use Laminas\Http\Response;
 use Laminas\Mvc\Controller\AbstractActionController;
 use Laminas\View\Model\ViewModel;
+use Metier\Entity\Db\Reference;
+use Metier\Form\Reference\ReferenceFormAwareTrait;
+use Metier\Service\Metier\MetierServiceAwareTrait;
+use Metier\Service\Reference\ReferenceServiceAwareTrait;
 
-class ReferenceController extends AbstractActionController {
+class ReferenceController extends AbstractActionController
+{
     use MetierServiceAwareTrait;
     use ReferenceServiceAwareTrait;
     use ReferenceFormAwareTrait;
 
-    public function ajouterAction()  :ViewModel
+    public function ajouterAction(): ViewModel
     {
         $metier = $this->getMetierService()->getRequestedMetier($this);
         $reference = new Reference();
@@ -43,7 +44,7 @@ class ReferenceController extends AbstractActionController {
         return $vm;
     }
 
-    public function modifierAction() : ViewModel
+    public function modifierAction(): ViewModel
     {
         $reference = $this->getReferenceService()->getRequestedReference($this);
         $form = $this->getReferenceForm();
@@ -69,21 +70,21 @@ class ReferenceController extends AbstractActionController {
         return $vm;
     }
 
-    public function historiserAction() : Response
+    public function historiserAction(): Response
     {
         $reference = $this->getReferenceService()->getRequestedReference($this);
         $this->getReferenceService()->historise($reference);
         return $this->redirect()->toRoute('metier', [], ["fragment" => "metier"], true);
     }
 
-    public function restaurerAction() : Response
+    public function restaurerAction(): Response
     {
         $reference = $this->getReferenceService()->getRequestedReference($this);
         $this->getReferenceService()->restore($reference);
         return $this->redirect()->toRoute('metier', [], ["fragment" => "metier"], true);
     }
 
-    public function supprimerAction() : ViewModel
+    public function supprimerAction(): ViewModel
     {
         $reference = $this->getReferenceService()->getRequestedReference($this);
 
diff --git a/module/Metier/src/Metier/Controller/ReferenceControllerFactory.php b/module/Metier/src/Metier/Controller/ReferenceControllerFactory.php
index 0bf32bbab88a12edf3abc14a052c95f95d42a434..6bd0c8546d608aaa682a1ffd0b738cd92dfd0ade 100644
--- a/module/Metier/src/Metier/Controller/ReferenceControllerFactory.php
+++ b/module/Metier/src/Metier/Controller/ReferenceControllerFactory.php
@@ -9,7 +9,8 @@ use Metier\Service\Reference\ReferenceService;
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\NotFoundExceptionInterface;
 
-class ReferenceControllerFactory {
+class ReferenceControllerFactory
+{
 
     /**
      * @param ContainerInterface $container
@@ -17,7 +18,7 @@ class ReferenceControllerFactory {
      * @throws ContainerExceptionInterface
      * @throws NotFoundExceptionInterface
      */
-    public function __invoke(ContainerInterface $container) : ReferenceController
+    public function __invoke(ContainerInterface $container): ReferenceController
     {
         /**
          * @var MetierService $metierService
diff --git a/module/Metier/src/Metier/Controller/ReferentielController.php b/module/Metier/src/Metier/Controller/ReferentielController.php
index 657e513f329796e470e27c3e36ae790cf62c6211..4ec8880e7b34d68a159714eb6e7f00552120857d 100644
--- a/module/Metier/src/Metier/Controller/ReferentielController.php
+++ b/module/Metier/src/Metier/Controller/ReferentielController.php
@@ -2,14 +2,14 @@
 
 namespace Metier\Controller;
 
-use Metier\Entity\Db\Referentiel;
-use Metier\Form\Referentiel\ReferentielFormAwareTrait;
-use Metier\Service\Reference\ReferenceServiceAwareTrait;
-use Metier\Service\Referentiel\ReferentielServiceAwareTrait;
 use Laminas\Http\Request;
 use Laminas\Http\Response;
 use Laminas\Mvc\Controller\AbstractActionController;
 use Laminas\View\Model\ViewModel;
+use Metier\Entity\Db\Referentiel;
+use Metier\Form\Referentiel\ReferentielFormAwareTrait;
+use Metier\Service\Reference\ReferenceServiceAwareTrait;
+use Metier\Service\Referentiel\ReferentielServiceAwareTrait;
 
 class ReferentielController extends AbstractActionController
 {
@@ -17,7 +17,7 @@ class ReferentielController extends AbstractActionController
     use ReferentielServiceAwareTrait;
     use ReferentielFormAwareTrait;
 
-    public function indexAction() : ViewModel
+    public function indexAction(): ViewModel
     {
         $referentiels = $this->getReferentielService()->getReferentiels();
 
@@ -27,7 +27,7 @@ class ReferentielController extends AbstractActionController
     }
 
 
-    public function afficherAction() : ViewModel
+    public function afficherAction(): ViewModel
     {
         $referentiel = $this->getReferentielService()->getRequestedReferentiel($this);
         $references = $this->getReferenceService()->getReferencesByReferentiel($referentiel);
@@ -45,7 +45,7 @@ class ReferentielController extends AbstractActionController
         ]);
     }
 
-    public function ajouterAction() : ViewModel
+    public function ajouterAction(): ViewModel
     {
         $referentiel = new Referentiel();
         $form = $this->getReferentielForm();
@@ -70,7 +70,7 @@ class ReferentielController extends AbstractActionController
         return $vm;
     }
 
-    public function modifierAction() : ViewModel
+    public function modifierAction(): ViewModel
     {
         $referentiel = $this->getReferentielService()->getRequestedReferentiel($this);
         $form = $this->getReferentielForm();
@@ -95,21 +95,21 @@ class ReferentielController extends AbstractActionController
         return $vm;
     }
 
-    public function historiserAction() : Response
+    public function historiserAction(): Response
     {
         $referentiel = $this->getReferentielService()->getRequestedReferentiel($this);
         $this->getReferentielService()->historise($referentiel);
         return $this->redirect()->toRoute('metier/referentiel', [], [], true);
     }
 
-    public function restaurerAction() : Response
+    public function restaurerAction(): Response
     {
         $referentiel = $this->getReferentielService()->getRequestedReferentiel($this);
         $this->getReferentielService()->restore($referentiel);
         return $this->redirect()->toRoute('metier/referentiel', [], [], true);
     }
 
-    public function supprimerAction() : ViewModel
+    public function supprimerAction(): ViewModel
     {
         $referentiel = $this->getReferentielService()->getRequestedReferentiel($this);
 
diff --git a/module/Metier/src/Metier/Controller/ReferentielControllerFactory.php b/module/Metier/src/Metier/Controller/ReferentielControllerFactory.php
index 05350da70735fa252d7d14a1b7fdd95e82558522..937f57769a02392faf9a86b0d52c9b49140f57b5 100644
--- a/module/Metier/src/Metier/Controller/ReferentielControllerFactory.php
+++ b/module/Metier/src/Metier/Controller/ReferentielControllerFactory.php
@@ -9,7 +9,8 @@ use Metier\Service\Referentiel\ReferentielService;
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\NotFoundExceptionInterface;
 
-class ReferentielControllerFactory {
+class ReferentielControllerFactory
+{
 
     /**
      * @param ContainerInterface $container
@@ -17,7 +18,7 @@ class ReferentielControllerFactory {
      * @throws ContainerExceptionInterface
      * @throws NotFoundExceptionInterface
      */
-    public function __invoke(ContainerInterface $container) : ReferentielController
+    public function __invoke(ContainerInterface $container): ReferentielController
     {
         /**
          * @var ReferenceService $referenceService
diff --git a/module/Metier/src/Metier/Entity/Db/Domaine.php b/module/Metier/src/Metier/Entity/Db/Domaine.php
index b7279243f5c65c55a54ac32ae109b03cafc5166d..2d71bb521d9fc1b1d34f768d8096206c875a9d36 100644
--- a/module/Metier/src/Metier/Entity/Db/Domaine.php
+++ b/module/Metier/src/Metier/Entity/Db/Domaine.php
@@ -7,7 +7,8 @@ use Doctrine\Common\Collections\Collection;
 use UnicaenUtilisateur\Entity\Db\HistoriqueAwareInterface;
 use UnicaenUtilisateur\Entity\Db\HistoriqueAwareTrait;
 
-class Domaine implements HistoriqueAwareInterface {
+class Domaine implements HistoriqueAwareInterface
+{
     use HistoriqueAwareTrait;
 
     private ?int $id = null;
@@ -23,27 +24,27 @@ class Domaine implements HistoriqueAwareInterface {
         $this->familles = new ArrayCollection();
     }
 
-    public function getId() : ?int
+    public function getId(): ?int
     {
         return $this->id;
     }
 
-    public function getLibelle() : ?string
+    public function getLibelle(): ?string
     {
         return $this->libelle;
     }
 
-    public function setLibelle(?string $libelle) : void
+    public function setLibelle(?string $libelle): void
     {
         $this->libelle = $libelle;
     }
 
-    public function getTypeFonction() : ?string
+    public function getTypeFonction(): ?string
     {
         return $this->typeFonction;
     }
 
-    public function setTypeFonction(?string $typeFonction) : void
+    public function setTypeFonction(?string $typeFonction): void
     {
         $this->typeFonction = $typeFonction;
     }
@@ -51,20 +52,22 @@ class Domaine implements HistoriqueAwareInterface {
     /**
      * @return FamilleProfessionnelle[]
      */
-    public function getFamilles() : array
+    public function getFamilles(): array
     {
-        $familles =  $this->familles->toArray();
-        usort($familles, function (FamilleProfessionnelle $a, FamilleProfessionnelle $b) { return $a->getLibelle() <=> $b->getLibelle();});
+        $familles = $this->familles->toArray();
+        usort($familles, function (FamilleProfessionnelle $a, FamilleProfessionnelle $b) {
+            return $a->getLibelle() <=> $b->getLibelle();
+        });
         return $familles;
     }
 
 
-    public function clearFamilles() : void
+    public function clearFamilles(): void
     {
         $this->familles->clear();
     }
 
-    public function addFamille(FamilleProfessionnelle $famille) : void
+    public function addFamille(FamilleProfessionnelle $famille): void
     {
         $this->familles->add($famille);
     }
@@ -72,12 +75,12 @@ class Domaine implements HistoriqueAwareInterface {
     /**
      * @return Metier[]
      */
-    public function getMetiers() : array
+    public function getMetiers(): array
     {
         return $this->metiers->toArray();
     }
 
-    public function __toString() : string
+    public function __toString(): string
     {
         return $this->getLibelle();
     }
diff --git a/module/Metier/src/Metier/Entity/Db/FamilleProfessionnelle.php b/module/Metier/src/Metier/Entity/Db/FamilleProfessionnelle.php
index 33f9fb018d61b24c6847af0a0ca887505e876701..becbdf95eebda34551b0ac7ff32504c45b77daa3 100644
--- a/module/Metier/src/Metier/Entity/Db/FamilleProfessionnelle.php
+++ b/module/Metier/src/Metier/Entity/Db/FamilleProfessionnelle.php
@@ -7,7 +7,8 @@ use Doctrine\Common\Collections\Collection;
 use UnicaenUtilisateur\Entity\Db\HistoriqueAwareInterface;
 use UnicaenUtilisateur\Entity\Db\HistoriqueAwareTrait;
 
-class FamilleProfessionnelle implements HistoriqueAwareInterface {
+class FamilleProfessionnelle implements HistoriqueAwareInterface
+{
     use HistoriqueAwareTrait;
 
     private ?int $id = null;
@@ -19,17 +20,17 @@ class FamilleProfessionnelle implements HistoriqueAwareInterface {
         $this->domaines = new ArrayCollection();
     }
 
-    public function getId() : ?int
+    public function getId(): ?int
     {
         return $this->id;
     }
 
-    public function getLibelle() : ?string
+    public function getLibelle(): ?string
     {
         return $this->libelle;
     }
 
-    public function setLibelle(?string $libelle) : void
+    public function setLibelle(?string $libelle): void
     {
         $this->libelle = $libelle;
     }
@@ -37,14 +38,16 @@ class FamilleProfessionnelle implements HistoriqueAwareInterface {
     /**
      * @return Domaine[]
      */
-    public function getDomaines() : array
+    public function getDomaines(): array
     {
         $domaines = $this->domaines->toArray();
-        usort($domaines, function (Domaine $a, Domaine $b) { return $a->getLibelle() <=> $b->getLibelle();});
+        usort($domaines, function (Domaine $a, Domaine $b) {
+            return $a->getLibelle() <=> $b->getLibelle();
+        });
         return $domaines;
     }
 
-    public function __toString() : string
+    public function __toString(): string
     {
         return $this->getLibelle();
     }
diff --git a/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Domaine.dcm.xml b/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Domaine.dcm.xml
index c1a2bae8ca6c438eaa4edbbf8b1ac6b5d09d6250..4dfb226500e7a310257025c85a14588234810a9b 100644
--- a/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Domaine.dcm.xml
+++ b/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Domaine.dcm.xml
@@ -1,21 +1,23 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Metier\Entity\Db\Domaine" table="metier_domaine">
 
         <id name="id" type="integer" column="id">
             <generator strategy="IDENTITY"/>
         </id>
 
-        <field name="libelle"           type="string" length="256"      column="libelle"                nullable="false"/>
-        <field name="typeFonction"      type="string" length="256"      column="type_fonction"                nullable="false"/>
+        <field name="libelle" length="256" column="libelle"/>
+        <field name="typeFonction" length="256" column="type_fonction"/>
 
         <many-to-many field="familles" inversed-by="domaine" target-entity="Metier\Entity\Db\FamilleProfessionnelle">
             <join-table name="metier_domaine_famille">
                 <join-columns>
-                    <join-column name="domaine_id" referenced-column-name="id" />
+                    <join-column name="domaine_id"/>
                 </join-columns>
                 <inverse-join-columns>
-                    <join-column name="famille_id" referenced-column-name="id" />
+                    <join-column name="famille_id"/>
                 </inverse-join-columns>
             </join-table>
         </many-to-many>
@@ -23,25 +25,25 @@
         <many-to-many field="metiers" inversed-by="domaines" target-entity="Metier\Entity\Db\Metier">
             <join-table name="metier_metier_domaine">
                 <join-columns>
-                    <join-column name="domaine_id" referenced-column-name="id" />
+                    <join-column name="domaine_id"/>
                 </join-columns>
                 <inverse-join-columns>
-                    <join-column name="metier_id" referenced-column-name="id" />
+                    <join-column name="metier_id"/>
                 </inverse-join-columns>
             </join-table>
         </many-to-many>
 
         <!-- HISTORISATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-        <field name="histoCreation"     type="datetime"                 column="histo_creation"     nullable="false"/>
-        <field name="histoModification" type="datetime"                 column="histo_modification" nullable="false"/>
-        <field name="histoDestruction"  type="datetime"                 column="histo_destruction"  nullable="true"/>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoCreateur">
+        <field name="histoCreation" type="datetime" column="histo_creation"/>
+        <field name="histoModification" type="datetime" column="histo_modification"/>
+        <field name="histoDestruction" type="datetime" column="histo_destruction" nullable="true"/>
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoCreateur">
             <join-column name="histo_createur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoModificateur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoModificateur">
             <join-column name="histo_modificateur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoDestructeur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoDestructeur">
             <join-column name="histo_destructeur_id" referenced-column-name="ID"/>
         </many-to-one>
     </entity>
diff --git a/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.FamilleProfessionnelle.dcm.xml b/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.FamilleProfessionnelle.dcm.xml
index 78b52cfc82f344a8a19a7c51a8dedcb0d46535eb..23e72161da09791b7fbfe8a636f6676451e72e72 100644
--- a/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.FamilleProfessionnelle.dcm.xml
+++ b/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.FamilleProfessionnelle.dcm.xml
@@ -1,35 +1,37 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Metier\Entity\Db\FamilleProfessionnelle" table="metier_familleprofessionnelle">
 
         <id name="id" type="integer" column="id">
             <generator strategy="IDENTITY"/>
         </id>
 
-        <field name="libelle"           type="string"   length="128"      column="libelle"                nullable="false"  />
+        <field name="libelle" length="128" column="libelle"/>
 
         <many-to-many field="domaines" inversed-by="famille" target-entity="Metier\Entity\Db\Domaine">
             <join-table name="metier_domaine_famille">
                 <join-columns>
-                    <join-column name="famille_id" referenced-column-name="id" />
+                    <join-column name="famille_id"/>
                 </join-columns>
                 <inverse-join-columns>
-                    <join-column name="domaine_id" referenced-column-name="id" />
+                    <join-column name="domaine_id"/>
                 </inverse-join-columns>
             </join-table>
         </many-to-many>
 
         <!-- HISTORISATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-        <field name="histoCreation"     type="datetime"                 column="histo_creation"     nullable="false"/>
-        <field name="histoModification" type="datetime"                 column="histo_modification" nullable="false"/>
-        <field name="histoDestruction"  type="datetime"                 column="histo_destruction"  nullable="true"/>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoCreateur">
+        <field name="histoCreation" type="datetime" column="histo_creation"/>
+        <field name="histoModification" type="datetime" column="histo_modification"/>
+        <field name="histoDestruction" type="datetime" column="histo_destruction" nullable="true"/>
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoCreateur">
             <join-column name="histo_createur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoModificateur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoModificateur">
             <join-column name="histo_modificateur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoDestructeur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoDestructeur">
             <join-column name="histo_destructeur_id" referenced-column-name="ID"/>
         </many-to-one>
     </entity>
diff --git a/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Metier.dcm.xml b/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Metier.dcm.xml
index 6b587a8dd7f0ea47dbf9c82ba58a36f23c53cfdf..c6ad3a59152bb95ea2cce94bdd34eda7ffae8aa7 100644
--- a/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Metier.dcm.xml
+++ b/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Metier.dcm.xml
@@ -1,14 +1,16 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Metier\Entity\Db\Metier" table="metier_metier">
 
         <id name="id" type="integer" column="id">
             <generator strategy="IDENTITY"/>
         </id>
 
-        <field name="libelle"           type="string"   length="128"      column="libelle_default"                nullable="false"  />
-        <field name="libelleFeminin"    type="string"   length="128"      column="libelle_feminin"                nullable="false"  />
-        <field name="libelleMasculin"   type="string"   length="128"      column="libelle_masculin"                nullable="false"  />
+        <field name="libelle" length="128" column="libelle_default"/>
+        <field name="libelleFeminin" length="128" column="libelle_feminin"/>
+        <field name="libelleMasculin" length="128" column="libelle_masculin"/>
 
         <one-to-one target-entity="Carriere\Entity\Db\NiveauEnveloppe" field="niveaux"/>
 
@@ -17,31 +19,30 @@
         <many-to-many field="domaines" inversed-by="metiers" target-entity="Metier\Entity\Db\Domaine">
             <join-table name="metier_metier_domaine">
                 <join-columns>
-                    <join-column name="metier_id" referenced-column-name="id" />
+                    <join-column name="metier_id"/>
                 </join-columns>
                 <inverse-join-columns>
-                    <join-column name="domaine_id" referenced-column-name="id" />
+                    <join-column name="domaine_id"/>
                 </inverse-join-columns>
             </join-table>
         </many-to-many>
 
 
-
-        <many-to-one target-entity="Carriere\Entity\Db\Categorie"  field="categorie">
-            <join-column name="categorie_id" referenced-column-name="id"/>
+        <many-to-one target-entity="Carriere\Entity\Db\Categorie" field="categorie">
+            <join-column name="categorie_id"/>
         </many-to-one>
 
         <!-- HISTORISATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-        <field name="histoCreation"     type="datetime"                 column="histo_creation"     nullable="false"/>
-        <field name="histoModification" type="datetime"                 column="histo_modification" nullable="false"/>
-        <field name="histoDestruction"  type="datetime"                 column="histo_destruction"  nullable="true"/>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoCreateur">
+        <field name="histoCreation" type="datetime" column="histo_creation"/>
+        <field name="histoModification" type="datetime" column="histo_modification"/>
+        <field name="histoDestruction" type="datetime" column="histo_destruction" nullable="true"/>
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoCreateur">
             <join-column name="histo_createur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoModificateur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoModificateur">
             <join-column name="histo_modificateur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoDestructeur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoDestructeur">
             <join-column name="histo_destructeur_id" referenced-column-name="ID"/>
         </many-to-one>
     </entity>
diff --git a/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Reference.dcm.xml b/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Reference.dcm.xml
index ee6a84232ee4c15affa73a34fab2b97c91e4273b..dffcf02df33ca44e19e1c3edaee948a6dade7453 100644
--- a/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Reference.dcm.xml
+++ b/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Reference.dcm.xml
@@ -1,32 +1,34 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Metier\Entity\Db\Reference" table="metier_reference">
 
         <id name="id" type="integer" column="id">
             <generator strategy="IDENTITY"/>
         </id>
 
-        <many-to-one target-entity="Metier\Entity\Db\Metier"  field="metier">
-            <join-column name="metier_id" referenced-column-name="id"/>
+        <many-to-one target-entity="Metier\Entity\Db\Metier" field="metier">
+            <join-column name="metier_id"/>
         </many-to-one>
-        <many-to-one target-entity="Metier\Entity\Db\Referentiel"  field="referentiel">
-            <join-column name="referentiel_id" referenced-column-name="id"/>
+        <many-to-one target-entity="Metier\Entity\Db\Referentiel" field="referentiel">
+            <join-column name="referentiel_id"/>
         </many-to-one>
-        <field name="code"           type="string"   length="256"      column="code"               nullable="false"  />
-        <field name="lien"           type="string"   length="1024"     column="lien"               nullable="true"  />
-        <field name="page"           type="integer"                    column="page"               nullable="true"  />
+        <field name="code" length="256" column="code"/>
+        <field name="lien" length="1024" column="lien" nullable="true"/>
+        <field name="page" type="integer" column="page" nullable="true"/>
 
         <!-- HISTORISATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-        <field name="histoCreation"     type="datetime"                 column="histo_creation"     nullable="false"/>
-        <field name="histoModification" type="datetime"                 column="histo_modification" nullable="false"/>
-        <field name="histoDestruction"  type="datetime"                 column="histo_destruction"  nullable="true"/>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoCreateur">
+        <field name="histoCreation" type="datetime" column="histo_creation"/>
+        <field name="histoModification" type="datetime" column="histo_modification"/>
+        <field name="histoDestruction" type="datetime" column="histo_destruction" nullable="true"/>
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoCreateur">
             <join-column name="histo_createur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoModificateur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoModificateur">
             <join-column name="histo_modificateur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoDestructeur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoDestructeur">
             <join-column name="histo_destructeur_id" referenced-column-name="ID"/>
         </many-to-one>
     </entity>
diff --git a/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Referentiel.dcm.xml b/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Referentiel.dcm.xml
index 4f9fd7768888aada8c458b5627cd6c9979c887c5..6da70813ffa7f5ac899c4fcc6c647f732d493190 100644
--- a/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Referentiel.dcm.xml
+++ b/module/Metier/src/Metier/Entity/Db/Mapping/Metier.Entity.Db.Referentiel.dcm.xml
@@ -1,27 +1,29 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Metier\Entity\Db\Referentiel" table="metier_referentiel">
 
         <id name="id" type="integer" column="id">
             <generator strategy="IDENTITY"/>
         </id>
 
-        <field name="libelleCourt"      type="string"   length="256"      column="libelle_court"               nullable="false"  />
-        <field name="libelleLong"       type="string"   length="1024"     column="libelle_long"                nullable="false"  />
-        <field name="prefix"            type="string"   length="1024"     column="prefix"                      nullable="true"  />
-        <field name="type"              type="string"   length="255"      column="type"                        nullable="true"  />
+        <field name="libelleCourt" length="256" column="libelle_court"/>
+        <field name="libelleLong" length="1024" column="libelle_long"/>
+        <field name="prefix" length="1024" column="prefix" nullable="true"/>
+        <field name="type" length="255" column="type" nullable="true"/>
 
         <!-- HISTORISATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-        <field name="histoCreation"     type="datetime"                 column="histo_creation"     nullable="false"/>
-        <field name="histoModification" type="datetime"                 column="histo_modification" nullable="false"/>
-        <field name="histoDestruction"  type="datetime"                 column="histo_destruction"  nullable="true"/>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoCreateur">
+        <field name="histoCreation" type="datetime" column="histo_creation"/>
+        <field name="histoModification" type="datetime" column="histo_modification"/>
+        <field name="histoDestruction" type="datetime" column="histo_destruction" nullable="true"/>
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoCreateur">
             <join-column name="histo_createur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoModificateur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoModificateur">
             <join-column name="histo_modificateur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoDestructeur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoDestructeur">
             <join-column name="histo_destructeur_id" referenced-column-name="ID"/>
         </many-to-one>
     </entity>
diff --git a/module/Metier/src/Metier/Entity/Db/Metier.php b/module/Metier/src/Metier/Entity/Db/Metier.php
index a383a7ec2cb24825df539d652569f35a1fc76bed..0e828aed1e063930e511693c6029ff5f26ba8c44 100644
--- a/module/Metier/src/Metier/Entity/Db/Metier.php
+++ b/module/Metier/src/Metier/Entity/Db/Metier.php
@@ -7,13 +7,15 @@ use Carriere\Entity\Db\Categorie;
 use Carriere\Entity\Db\NiveauEnveloppe;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
-use FicheMetier\Entity\Db\FicheMetier;
+use Metier\Entity\HasDomainesInterface;
+use Metier\Entity\HasDomainesTrait;
 use Metier\Service\Metier\MetierService;
 use UnicaenUtilisateur\Entity\Db\HistoriqueAwareInterface;
 use UnicaenUtilisateur\Entity\Db\HistoriqueAwareTrait;
 
-class Metier implements HistoriqueAwareInterface {
+class Metier implements HistoriqueAwareInterface, HasDomainesInterface {
     use HistoriqueAwareTrait;
+    use HasDomainesTrait;
 
     private ?int $id = null;
     private ?string $libelle = null;
@@ -23,7 +25,6 @@ class Metier implements HistoriqueAwareInterface {
     private ?Categorie $categorie = null;
     private ?NiveauEnveloppe $niveaux = null;
 
-    private Collection $domaines;
     private Collection $references;
     private Collection $fichesMetiers;
 
@@ -97,14 +98,6 @@ class Metier implements HistoriqueAwareInterface {
         $this->niveaux = $niveaux;
     }
 
-    /** Gestion des collections associés au métier ********************************************************************/
-
-    /** @return FicheMetier[] */
-    public function getFichesMetiers() : array
-    {
-        return $this->fichesMetiers->toArray();
-    }
-
     /**
      * @return Reference[]
      */
@@ -113,26 +106,6 @@ class Metier implements HistoriqueAwareInterface {
         return $this->references->toArray();
     }
 
-    /**
-     * @return Domaine[]
-     */
-    public function getDomaines() : array
-    {
-        $domaines =  $this->domaines->toArray();
-        usort($domaines, function (Domaine $a, Domaine $b) { return $a->getLibelle() <=> $b->getLibelle();});
-        return $domaines;
-    }
-
-    public function clearDomaines() : void
-    {
-        $this->domaines->clear();
-    }
-
-    public function addDomaine(Domaine $domaine)
-    {
-        $this->domaines->add($domaine);
-    }
-
     /** Fonctions pour affichage **************************************************************************************/
 
     public function generateTooltip() : string
@@ -168,7 +141,6 @@ class Metier implements HistoriqueAwareInterface {
     {
         $texte = "Réference" . ((count($this->getReferences()) > 1)?"s":"") . " : ";
         $texte .= "<ul id='reference'>";
-        /** @var Reference $reference */
         foreach ($this->getReferences() as $reference) {
             $texte .= "<li>";
             $texte .= "<a href='". $reference->getUrl()."'>";
diff --git a/module/Metier/src/Metier/Entity/Db/Reference.php b/module/Metier/src/Metier/Entity/Db/Reference.php
index 42f764de48105edeee286fb282901e5a39ab5a44..47e682ee22779450c5383ab722072f2ce9e61534 100644
--- a/module/Metier/src/Metier/Entity/Db/Reference.php
+++ b/module/Metier/src/Metier/Entity/Db/Reference.php
@@ -7,7 +7,8 @@ use Metier\Entity\HasMetierTrait;
 use UnicaenUtilisateur\Entity\Db\HistoriqueAwareInterface;
 use UnicaenUtilisateur\Entity\Db\HistoriqueAwareTrait;
 
-class Reference implements HistoriqueAwareInterface, HasMetierInterface {
+class Reference implements HistoriqueAwareInterface, HasMetierInterface
+{
     use HistoriqueAwareTrait;
     use HasMetierTrait;
 
@@ -17,58 +18,58 @@ class Reference implements HistoriqueAwareInterface, HasMetierInterface {
     private ?string $lien = null;
     private ?int $page = null;
 
-    public function getId() : ?int
+    public function getId(): ?int
     {
         return $this->id;
     }
 
-    public function getReferentiel() : ?Referentiel
+    public function getReferentiel(): ?Referentiel
     {
         return $this->referentiel;
     }
 
-    public function setReferentiel(?Referentiel $referentiel) : void
+    public function setReferentiel(?Referentiel $referentiel): void
     {
         $this->referentiel = $referentiel;
     }
 
-    public function getCode() : ?string
+    public function getCode(): ?string
     {
-        if ($this->getReferentiel() !== null AND $this->getReferentiel()->getType() === Referentiel::VIDE) return $this->getReferentiel()->getLibelleCourt() ." - ". $this->code;
+        if ($this->getReferentiel() !== null and $this->getReferentiel()->getType() === Referentiel::VIDE) return $this->getReferentiel()->getLibelleCourt() . " - " . $this->code;
         return $this->code;
     }
 
-    public function setCode(?string $code) : void
+    public function setCode(?string $code): void
     {
         $this->code = $code;
     }
 
-    public function getLien() : ?string
+    public function getLien(): ?string
     {
         return $this->lien;
     }
 
-    public function setLien(?string $lien) : void
+    public function setLien(?string $lien): void
     {
         $this->lien = $lien;
     }
 
-    public function getTitre() : string
+    public function getTitre(): string
     {
         return $this->referentiel->getLibelleCourt() . " - " . $this->getCode();
     }
 
-    public function getUrl() : string
+    public function getUrl(): string
     {
-        switch($this->getReferentiel()->getType()) {
+        switch ($this->getReferentiel()->getType()) {
             case Referentiel::WEB :
-                if ($this->getLien())                       return $this->getLien();
-                if ($this->getReferentiel()->getPrefix())   return $this->referentiel->getPrefix() . $this->getCode();
+                if ($this->getLien()) return $this->getLien();
+                if ($this->getReferentiel()->getPrefix()) return $this->referentiel->getPrefix() . $this->getCode();
                 return "";
             case Referentiel::PDF :
                 $url = "";
-                if ($this->getReferentiel()->getPrefix())   $url = $this->getReferentiel()->getPrefix();
-                if ($this->getLien())                       $url = $this->getLien();
+                if ($this->getReferentiel()->getPrefix()) $url = $this->getReferentiel()->getPrefix();
+                if ($this->getLien()) $url = $this->getLien();
                 if ($this->getPage()) {
                     $url = $url . "#page=" . $this->getPage();
                 }
@@ -77,12 +78,12 @@ class Reference implements HistoriqueAwareInterface, HasMetierInterface {
         return "";
     }
 
-    public function getPage() : ?int
+    public function getPage(): ?int
     {
         return $this->page;
     }
 
-    public function setPage(?int $page) : void
+    public function setPage(?int $page): void
     {
         $this->page = $page;
     }
diff --git a/module/Metier/src/Metier/Entity/Db/Referentiel.php b/module/Metier/src/Metier/Entity/Db/Referentiel.php
index 57356563cf7a0d7f6ccda4c81d7a324f2269cd5f..3089a97ffa53d2f9841b0c841116768d4c13a179 100644
--- a/module/Metier/src/Metier/Entity/Db/Referentiel.php
+++ b/module/Metier/src/Metier/Entity/Db/Referentiel.php
@@ -5,12 +5,13 @@ namespace Metier\Entity\Db;
 use UnicaenUtilisateur\Entity\Db\HistoriqueAwareInterface;
 use UnicaenUtilisateur\Entity\Db\HistoriqueAwareTrait;
 
-class Referentiel implements HistoriqueAwareInterface {
+class Referentiel implements HistoriqueAwareInterface
+{
     use HistoriqueAwareTrait;
 
-    const WEB="web";
-    const PDF="pdf";
-    const VIDE="vide";
+    const WEB = "web";
+    const PDF = "pdf";
+    const VIDE = "vide";
 
     private ?int $id = null;
     private ?string $libelleCourt = null;
@@ -23,42 +24,42 @@ class Referentiel implements HistoriqueAwareInterface {
         return $this->id;
     }
 
-    public function getLibelleCourt() : ?string
+    public function getLibelleCourt(): ?string
     {
         return $this->libelleCourt;
     }
 
-    public function setLibelleCourt(?string $libelleCourt) : void
+    public function setLibelleCourt(?string $libelleCourt): void
     {
         $this->libelleCourt = $libelleCourt;
     }
 
-    public function getLibelleLong() : ?string
+    public function getLibelleLong(): ?string
     {
         return $this->libelleLong;
     }
 
-    public function setLibelleLong(?string $libelleLong) : void
+    public function setLibelleLong(?string $libelleLong): void
     {
         $this->libelleLong = $libelleLong;
     }
 
-    public function getPrefix() : ?string
+    public function getPrefix(): ?string
     {
         return $this->prefix;
     }
 
-    public function setPrefix(?string $prefix) : void
+    public function setPrefix(?string $prefix): void
     {
         $this->prefix = $prefix;
     }
 
-    public function getType() : ?string
+    public function getType(): ?string
     {
         return $this->type;
     }
 
-    public function setType(?string $type) : void
+    public function setType(?string $type): void
     {
         $this->type = $type;
     }
diff --git a/module/Metier/src/Metier/Entity/HasDomainesInterface.php b/module/Metier/src/Metier/Entity/HasDomainesInterface.php
index 4a9859baffafdb42222e0c83b79e209cc9f73dda..b0662a6b606c613187b6c886d37c478ffbf9dc2e 100644
--- a/module/Metier/src/Metier/Entity/HasDomainesInterface.php
+++ b/module/Metier/src/Metier/Entity/HasDomainesInterface.php
@@ -10,4 +10,5 @@ interface HasDomainesInterface
     public function hasDomaine(Domaine $domaine) : bool;
     public function addDomaine(Domaine $domaine) : void;
     public function removeDomaine(Domaine $domaine) : void;
+    public function clearDomaines() : void;
 }
\ No newline at end of file
diff --git a/module/Metier/src/Metier/Entity/HasDomainesTrait.php b/module/Metier/src/Metier/Entity/HasDomainesTrait.php
index 7a9dbf0fe2bef4ece0032a716d80496853ff6169..a3f90135b9594e2fbed3c1424d54aa9883dbaa1f 100644
--- a/module/Metier/src/Metier/Entity/HasDomainesTrait.php
+++ b/module/Metier/src/Metier/Entity/HasDomainesTrait.php
@@ -12,7 +12,9 @@ trait HasDomainesTrait
     /** @return Domaine[] */
     public function getDomaines() : array
     {
-        return $this->domaines->toArray();
+        $domaines = $this->domaines->toArray();
+        usort($domaines, function (Domaine $a, Domaine $b) {return $a->getLibelle() <=> $b->getLibelle();});
+        return $domaines;
     }
 
     public function hasDomaine(Domaine $domaine) : bool
@@ -24,8 +26,14 @@ trait HasDomainesTrait
     {
         if (! $this->hasDomaine($domaine)) $this->domaines->add($domaine);
     }
+
     public function removeDomaine(Domaine $domaine) : void
     {
         $this->domaines->removeElement($domaine);
     }
+
+    public function clearDomaines() : void
+    {
+        $this->domaines->clear();
+    }
 }
\ No newline at end of file
diff --git a/module/Metier/src/Metier/Form/Referentiel/ReferentielFormFactory.php b/module/Metier/src/Metier/Form/Referentiel/ReferentielFormFactory.php
index b8e8f71703bfa2fd539588b14bf20095bd346be6..21a73a6292f1f60a0d0bb850b9f461f2313441f1 100644
--- a/module/Metier/src/Metier/Form/Referentiel/ReferentielFormFactory.php
+++ b/module/Metier/src/Metier/Form/Referentiel/ReferentielFormFactory.php
@@ -19,7 +19,6 @@ class ReferentielFormFactory {
         /** @var ReferentielHydrator $hydrator */
         $hydrator = $container->get('HydratorManager')->get(ReferentielHydrator::class);
 
-        /** @var ReferentielForm $form */
         $form = new ReferentielForm();
         $form->setHydrator($hydrator);
         return $form;
diff --git a/module/Metier/src/Metier/Form/Referentiel/ReferentielHydratorFactory.php b/module/Metier/src/Metier/Form/Referentiel/ReferentielHydratorFactory.php
index b0145373b8737e39b9bef5d40c3e068d4c396ff8..5c94f2e31c853894972682f681e66c46c9b59633 100644
--- a/module/Metier/src/Metier/Form/Referentiel/ReferentielHydratorFactory.php
+++ b/module/Metier/src/Metier/Form/Referentiel/ReferentielHydratorFactory.php
@@ -12,7 +12,6 @@ class ReferentielHydratorFactory {
      */
     public function __invoke(ContainerInterface $container) : ReferentielHydrator
     {
-        /** @var ReferentielHydrator $hydrator */
         $hydrator = new ReferentielHydrator();
         return $hydrator;
     }
diff --git a/module/Metier/src/Metier/Form/SelectionnerDomaines/SelectionnerDomainesHydrator.php b/module/Metier/src/Metier/Form/SelectionnerDomaines/SelectionnerDomainesHydrator.php
index cab64197e4eb9ec67a2ae76a7676e92eee570406..d8c56736facfb8077697f0f0c5e3bde8374e6290 100644
--- a/module/Metier/src/Metier/Form/SelectionnerDomaines/SelectionnerDomainesHydrator.php
+++ b/module/Metier/src/Metier/Form/SelectionnerDomaines/SelectionnerDomainesHydrator.php
@@ -9,12 +9,9 @@ use Metier\Service\Domaine\DomaineServiceAwareTrait;
 class SelectionnerDomainesHydrator implements HydratorInterface {
     use DomaineServiceAwareTrait;
 
-    /**
-     * @param HasDomainesInterface $object
-     * @return array
-     */
     public function extract(object $object): array
     {
+        /** @var HasDomainesInterface $domaineIds */
         $domaineIds = [];
         foreach ($object->getDomaines() as $domaine) $domaineIds[] = $domaine->getId();
         $data = [
@@ -23,13 +20,9 @@ class SelectionnerDomainesHydrator implements HydratorInterface {
         return $data;
     }
 
-    /**
-     * @param array $data
-     * @param HasDomainesInterface $object
-     * @return HasDomainesInterface
-     */
     public function hydrate(array $data, object $object) : object
     {
+        /** @var HasDomainesInterface $object */
         $domaineIds = $data['domaines'] ?? null;
 
         foreach ($object->getDomaines() as $domaine) {
diff --git a/module/Metier/src/Metier/Service/Domaine/DomaineService.php b/module/Metier/src/Metier/Service/Domaine/DomaineService.php
index 1cbc3f390b6353d12bc54f5901f0d0e3dd565aa2..bb1ca5c04b06ae69a7bf7b98cf7c92876aa2299f 100644
--- a/module/Metier/src/Metier/Service/Domaine/DomaineService.php
+++ b/module/Metier/src/Metier/Service/Domaine/DomaineService.php
@@ -2,121 +2,98 @@
 
 namespace Metier\Service\Domaine;
 
-use Doctrine\ORM\Exception\ORMException;
-use Metier\Entity\Db\Domaine;
 use Doctrine\ORM\NonUniqueResultException;
 use Doctrine\ORM\QueryBuilder;
-use UnicaenApp\Exception\RuntimeException;
-use UnicaenApp\Service\EntityManagerAwareTrait;
+use DoctrineModule\Persistence\ProvidesObjectManager;
 use Laminas\Mvc\Controller\AbstractActionController;
+use Metier\Entity\Db\Domaine;
+use UnicaenApp\Exception\RuntimeException;
 
-class DomaineService {
-    use EntityManagerAwareTrait;
+class DomaineService
+{
+    use ProvidesObjectManager;
 
     /** GESTION DES ENTITES *******************************************************************************************/
 
-    public function create(Domaine $domaine) : Domaine
+    public function create(Domaine $domaine): Domaine
     {
-        try {
-            $this->getEntityManager()->persist($domaine);
-            $this->getEntityManager()->flush($domaine);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->persist($domaine);
+        $this->getObjectManager()->flush($domaine);
         return $domaine;
     }
 
-    public function update(Domaine $domaine) : Domaine
+    public function update(Domaine $domaine): Domaine
     {
-        try {
-            $this->getEntityManager()->flush($domaine);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->flush($domaine);
         return $domaine;
     }
 
-    public function historise(Domaine $domaine) : Domaine
+    public function historise(Domaine $domaine): Domaine
     {
-        try {
-            $domaine->historiser();
-            $this->getEntityManager()->flush($domaine);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $domaine->historiser();
+        $this->getObjectManager()->flush($domaine);
         return $domaine;
     }
 
-    public function restore(Domaine $domaine) : Domaine
+    public function restore(Domaine $domaine): Domaine
     {
-        try {
-            $domaine->dehistoriser();
-            $this->getEntityManager()->flush($domaine);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $domaine->dehistoriser();
+        $this->getObjectManager()->flush($domaine);
         return $domaine;
     }
 
-    public function delete(Domaine $domaine) : Domaine
+    public function delete(Domaine $domaine): Domaine
     {
-        try {
-            $this->getEntityManager()->remove($domaine);
-            $this->getEntityManager()->flush($domaine);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->remove($domaine);
+        $this->getObjectManager()->flush($domaine);
         return $domaine;
     }
 
     /** REQUETAGE *****************************************************************************************************/
 
-    public function createQueryBuilder() : QueryBuilder
+    public function createQueryBuilder(): QueryBuilder
     {
-        $qb = $this->getEntityManager()->getRepository(Domaine::class)->createQueryBuilder('domaine')
+        $qb = $this->getObjectManager()->getRepository(Domaine::class)->createQueryBuilder('domaine')
             ->addSelect('famille')->leftJoin('domaine.familles', 'famille')
-            ->addSelect('metier')->leftJoin('domaine.metiers', 'metier')
-        ;
+            ->addSelect('metier')->leftJoin('domaine.metiers', 'metier');
         return $qb;
     }
 
     /** @return Domaine[] */
-    public function getDomaines(string $champ = 'libelle', string $ordre = 'ASC') : array
+    public function getDomaines(string $champ = 'libelle', string $ordre = 'ASC'): array
     {
         $qb = $this->createQueryBuilder()
-            ->orderBy('domaine.' . $champ, $ordre)
-        ;
+            ->orderBy('domaine.' . $champ, $ordre);
         $result = $qb->getQuery()->getResult();
         return $result;
     }
 
     /** @return Domaine[] */
-    public function getDomainesAsOptions(bool $historiser = false) : array
+    public function getDomainesAsOptions(bool $historiser = false): array
     {
         $domaines = $this->getDomaines();
         $options = [];
         foreach ($domaines as $domaine) {
-            if ($historiser OR $domaine->estNonHistorise())
+            if ($historiser or $domaine->estNonHistorise())
                 $options[$domaine->getId()] = $domaine->getLibelle();
         }
         return $options;
     }
 
-    public function getDomaine(?int $id) : ?Domaine
+    public function getDomaine(?int $id): ?Domaine
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('domaine.id = :id')
-            ->setParameter('id', $id)
-        ;
+            ->setParameter('id', $id);
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
-            throw new RuntimeException("Plusieurs [".Domaine::class."] partagent le même identifiant [".$id."]");
+            throw new RuntimeException("Plusieurs [" . Domaine::class . "] partagent le même identifiant [" . $id . "]", 0, $e);
         }
         return $result;
     }
 
-    public function getRequestedDomaine(AbstractActionController $controller, string $paramName = 'domaine') : ?Domaine
+    public function getRequestedDomaine(AbstractActionController $controller, string $paramName = 'domaine'): ?Domaine
     {
         $id = $controller->params()->fromRoute($paramName);
         $domaine = $this->getDomaine($id);
@@ -128,12 +105,11 @@ class DomaineService {
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('domaine.libelle = :libelle')->setParameter('libelle', $libelle)
-            ->andWhere('domaine.histoDestruction IS NULL')
-        ;
+            ->andWhere('domaine.histoDestruction IS NULL');
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
-            throw new RuntimeException("Plusieurs [".Domaine::class."] partagent le même libellé [".$libelle."]");
+            throw new RuntimeException("Plusieurs [" . Domaine::class . "] partagent le même libellé [" . $libelle . "]", 0, $e);
         }
         return $result;
     }
diff --git a/module/Metier/src/Metier/Service/Domaine/DomaineServiceFactory.php b/module/Metier/src/Metier/Service/Domaine/DomaineServiceFactory.php
index c9c11979bb9dadb90e37cc84163b69dcc90552d7..ea800b6d66fda72e80d19a8714e53bca7fe8584a 100644
--- a/module/Metier/src/Metier/Service/Domaine/DomaineServiceFactory.php
+++ b/module/Metier/src/Metier/Service/Domaine/DomaineServiceFactory.php
@@ -7,7 +7,8 @@ use Interop\Container\ContainerInterface;
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\NotFoundExceptionInterface;
 
-class DomaineServiceFactory {
+class DomaineServiceFactory
+{
 
     /**
      * @param ContainerInterface $container
@@ -15,16 +16,15 @@ class DomaineServiceFactory {
      * @throws ContainerExceptionInterface
      * @throws NotFoundExceptionInterface
      */
-    public function __invoke(ContainerInterface $container) : DomaineService
+    public function __invoke(ContainerInterface $container): DomaineService
     {
         /**
          * @var EntityManager $entityManager
          */
         $entityManager = $container->get('doctrine.entitymanager.orm_default');
 
-        /** @var DomaineService $service */
         $service = new DomaineService();
-        $service->setEntityManager($entityManager);
+        $service->setObjectManager($entityManager);
         return $service;
     }
 }
\ No newline at end of file
diff --git a/module/Metier/src/Metier/Service/FamilleProfessionnelle/FamilleProfessionnelleService.php b/module/Metier/src/Metier/Service/FamilleProfessionnelle/FamilleProfessionnelleService.php
index 65ab9473d2c2522281909721cb7b049893b75dab..d792f8f11d06bc8bd9de87d4df0a74853854a3c7 100644
--- a/module/Metier/src/Metier/Service/FamilleProfessionnelle/FamilleProfessionnelleService.php
+++ b/module/Metier/src/Metier/Service/FamilleProfessionnelle/FamilleProfessionnelleService.php
@@ -2,86 +2,65 @@
 
 namespace Metier\Service\FamilleProfessionnelle;
 
-use Doctrine\ORM\Exception\ORMException;
-use Metier\Entity\Db\FamilleProfessionnelle;
 use Doctrine\ORM\NonUniqueResultException;
 use Doctrine\ORM\QueryBuilder;
-use UnicaenApp\Exception\RuntimeException;
-use UnicaenApp\Service\EntityManagerAwareTrait;
+use DoctrineModule\Persistence\ProvidesObjectManager;
 use Laminas\Mvc\Controller\AbstractActionController;
+use Metier\Entity\Db\FamilleProfessionnelle;
+use UnicaenApp\Exception\RuntimeException;
 
-class FamilleProfessionnelleService {
-    use EntityManagerAwareTrait;
+class FamilleProfessionnelleService
+{
+    use ProvidesObjectManager;
 
     /** GESTION DES ENTITES *******************************************************************************************/
 
-    public function create(FamilleProfessionnelle $famille) : FamilleProfessionnelle
+    public function create(FamilleProfessionnelle $famille): FamilleProfessionnelle
     {
-        try {
-            $this->getEntityManager()->persist($famille);
-            $this->getEntityManager()->flush($famille);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->persist($famille);
+        $this->getObjectManager()->flush($famille);
         return $famille;
     }
 
-    public function update(FamilleProfessionnelle $famille) : FamilleProfessionnelle
+    public function update(FamilleProfessionnelle $famille): FamilleProfessionnelle
     {
-        try {
-            $this->getEntityManager()->flush($famille);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->flush($famille);
         return $famille;
     }
 
-    public function historise(FamilleProfessionnelle $famille) : FamilleProfessionnelle
+    public function historise(FamilleProfessionnelle $famille): FamilleProfessionnelle
     {
-        try {
-            $famille->historiser();
-            $this->getEntityManager()->flush($famille);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $famille->historiser();
+        $this->getObjectManager()->flush($famille);
         return $famille;
     }
 
-    public function restore(FamilleProfessionnelle $famille) : FamilleProfessionnelle
+    public function restore(FamilleProfessionnelle $famille): FamilleProfessionnelle
     {
-        try {
-            $famille->dehistoriser();
-            $this->getEntityManager()->flush($famille);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $famille->dehistoriser();
+        $this->getObjectManager()->flush($famille);
         return $famille;
     }
 
-    public function delete(FamilleProfessionnelle $famille) : FamilleProfessionnelle
+    public function delete(FamilleProfessionnelle $famille): FamilleProfessionnelle
     {
-        try {
-            $this->getEntityManager()->remove($famille);
-            $this->getEntityManager()->flush($famille);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->remove($famille);
+        $this->getObjectManager()->flush($famille);
         return $famille;
     }
 
     /** REQUETAGE *****************************************************************************************************/
 
-    public function createQueryBuilder() : QueryBuilder
+    public function createQueryBuilder(): QueryBuilder
     {
-        $qb = $this->getEntityManager()->getRepository(FamilleProfessionnelle::class)->createQueryBuilder('famille')
+        $qb = $this->getObjectManager()->getRepository(FamilleProfessionnelle::class)->createQueryBuilder('famille')
             ->addSelect('domaine')->leftJoin('famille.domaines', 'domaine')
-            ->addSelect('metier')->leftJoin('domaine.metiers', 'metier')
-        ;
+            ->addSelect('metier')->leftJoin('domaine.metiers', 'metier');
         return $qb;
     }
 
     /** @return FamilleProfessionnelle[] */
-    public function getFamillesProfessionnelles() : array
+    public function getFamillesProfessionnelles(): array
     {
         $qb = $this->createQueryBuilder()
             ->addOrderBy('famille.libelle');
@@ -91,33 +70,32 @@ class FamilleProfessionnelleService {
     }
 
     /** @return FamilleProfessionnelle[] */
-    public function getFamillesProfessionnellesAsOptions(bool $historiser = false) : array
+    public function getFamillesProfessionnellesAsOptions(bool $historiser = false): array
     {
         $familles = $this->getFamillesProfessionnelles();
         $options = [];
         foreach ($familles as $famille) {
-            if ($historiser OR $famille->estNonHistorise())
+            if ($historiser or $famille->estNonHistorise())
                 $options[$famille->getId()] = $famille->getLibelle();
         }
         return $options;
     }
 
-    public function getFamilleProfessionnelle(?int $id) : ?FamilleProfessionnelle
+    public function getFamilleProfessionnelle(?int $id): ?FamilleProfessionnelle
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('famille.id = :id')
-            ->setParameter('id', $id)
-        ;
+            ->setParameter('id', $id);
 
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
-            throw new RuntimeException("Plusieurs [".FamilleProfessionnelle::class."] partagent le même identifiant [".$id."]");
+            throw new RuntimeException("Plusieurs [" . FamilleProfessionnelle::class . "] partagent le même identifiant [" . $id . "]", 0, $e);
         }
         return $result;
     }
 
-    public function getRequestedFamilleProfessionnelle(AbstractActionController $controller, string $paramName = 'famille-professionnelle') : ?FamilleProfessionnelle
+    public function getRequestedFamilleProfessionnelle(AbstractActionController $controller, string $paramName = 'famille-professionnelle'): ?FamilleProfessionnelle
     {
         $id = $controller->params()->fromRoute($paramName);
         $famille = $this->getFamilleProfessionnelle($id);
@@ -129,13 +107,12 @@ class FamilleProfessionnelleService {
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('famille.libelle = :libelle')->setParameter('libelle', $libelle)
-            ->andWhere('famille.histoDestruction IS NULL')
-        ;
+            ->andWhere('famille.histoDestruction IS NULL');
 
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
-            throw new RuntimeException("Plusieurs [".FamilleProfessionnelle::class."] partagent le même libellé [".$libelle."]");
+            throw new RuntimeException("Plusieurs [" . FamilleProfessionnelle::class . "] partagent le même libellé [" . $libelle . "]", 0, $e);
         }
         return $result;
     }
@@ -144,7 +121,7 @@ class FamilleProfessionnelleService {
     {
         $famille = new FamilleProfessionnelle();
         $famille->setLibelle($familleLibelle);
-        if ($persist)  $this->create($famille);
+        if ($persist) $this->create($famille);
         return $famille;
     }
 }
diff --git a/module/Metier/src/Metier/Service/FamilleProfessionnelle/FamilleProfessionnelleServiceFactory.php b/module/Metier/src/Metier/Service/FamilleProfessionnelle/FamilleProfessionnelleServiceFactory.php
index 8accaf2c0e72aebc5e6481e3fbb76fad9da55b11..8364e0e06f85f6fedca898e4a0ad373d09d7b6e8 100644
--- a/module/Metier/src/Metier/Service/FamilleProfessionnelle/FamilleProfessionnelleServiceFactory.php
+++ b/module/Metier/src/Metier/Service/FamilleProfessionnelle/FamilleProfessionnelleServiceFactory.php
@@ -7,7 +7,8 @@ use Interop\Container\ContainerInterface;
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\NotFoundExceptionInterface;
 
-class FamilleProfessionnelleServiceFactory {
+class FamilleProfessionnelleServiceFactory
+{
 
     /**
      * @param ContainerInterface $container
@@ -15,7 +16,7 @@ class FamilleProfessionnelleServiceFactory {
      * @throws ContainerExceptionInterface
      * @throws NotFoundExceptionInterface
      */
-    public function __invoke(ContainerInterface $container) : FamilleProfessionnelleService
+    public function __invoke(ContainerInterface $container): FamilleProfessionnelleService
     {
         /**
          * @var EntityManager $entityManager
@@ -23,7 +24,7 @@ class FamilleProfessionnelleServiceFactory {
         $entityManager = $container->get('doctrine.entitymanager.orm_default');
 
         $service = new FamilleProfessionnelleService();
-        $service->setEntityManager($entityManager);
+        $service->setObjectManager($entityManager);
         return $service;
     }
 }
\ No newline at end of file
diff --git a/module/Metier/src/Metier/Service/Metier/MetierService.php b/module/Metier/src/Metier/Service/Metier/MetierService.php
index 40a817b8286d27edc324ee3bf219c34d92c04b37..7d6790dc8c3162635749a4d90eea423f6b2e5d0a 100644
--- a/module/Metier/src/Metier/Service/Metier/MetierService.php
+++ b/module/Metier/src/Metier/Service/Metier/MetierService.php
@@ -5,22 +5,22 @@ namespace Metier\Service\Metier;
 use Carriere\Service\Niveau\NiveauService;
 use Doctrine\DBAL\Driver\Exception as DRV_Exception;
 use Doctrine\DBAL\Exception as DBA_Exception;
-use Doctrine\ORM\Exception\ORMException;
-use Metier\Entity\Db\FamilleProfessionnelle;
-use Metier\Entity\Db\Metier;
 use Doctrine\ORM\NonUniqueResultException;
 use Doctrine\ORM\QueryBuilder;
+use DoctrineModule\Persistence\ProvidesObjectManager;
+use Laminas\Mvc\Controller\AbstractActionController;
+use Metier\Entity\Db\FamilleProfessionnelle;
+use Metier\Entity\Db\Metier;
 use Metier\Entity\Db\Reference;
 use Metier\Service\Domaine\DomaineServiceAwareTrait;
 use Metier\Service\FamilleProfessionnelle\FamilleProfessionnelleServiceAwareTrait;
 use Metier\Service\Reference\ReferenceServiceAwareTrait;
 use Metier\Service\Referentiel\ReferentielServiceAwareTrait;
 use UnicaenApp\Exception\RuntimeException;
-use UnicaenApp\Service\EntityManagerAwareTrait;
-use Laminas\Mvc\Controller\AbstractActionController;
 
-class MetierService {
-    use EntityManagerAwareTrait;
+class MetierService
+{
+    use ProvidesObjectManager;
     use DomaineServiceAwareTrait;
     use FamilleProfessionnelleServiceAwareTrait;
     use ReferenceServiceAwareTrait;
@@ -28,102 +28,79 @@ class MetierService {
 
     /** GESTIONS DES ENTITES ******************************************************************************************/
 
-    public function create(Metier $metier) : Metier
+    public function create(Metier $metier): Metier
     {
-        try {
-            $this->getEntityManager()->persist($metier);
-            $this->getEntityManager()->flush($metier);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->persist($metier);
+        $this->getObjectManager()->flush($metier);
         return $metier;
     }
 
-    public function update(Metier $metier) : Metier
+    public function update(Metier $metier): Metier
     {
-        try {
-            $this->getEntityManager()->flush($metier);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->flush($metier);
         return $metier;
     }
 
-    public function historise(Metier $metier) : Metier
+    public function historise(Metier $metier): Metier
     {
-        try {
-            $metier->historiser();
-            $this->getEntityManager()->flush($metier);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $metier->historiser();
+        $this->getObjectManager()->flush($metier);
         return $metier;
     }
 
-    public function restore(Metier $metier) : Metier
+    public function restore(Metier $metier): Metier
     {
-        try {
-            $metier->dehistoriser();
-            $this->getEntityManager()->flush($metier);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $metier->dehistoriser();
+        $this->getObjectManager()->flush($metier);
         return $metier;
     }
 
-    public function delete(Metier $metier) : Metier
+    public function delete(Metier $metier): Metier
     {
-        try {
-            $this->getEntityManager()->remove($metier);
-            $this->getEntityManager()->flush($metier);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->remove($metier);
+        $this->getObjectManager()->flush($metier);
         return $metier;
     }
 
     /** REQUETAGES ****************************************************************************************************/
 
-    private function createQueryBuilder() : QueryBuilder
+    private function createQueryBuilder(): QueryBuilder
     {
-        $qb = $this->getEntityManager()->getRepository(Metier::class)->createQueryBuilder('metier')
-            ->addSelect('domaine')->leftJoin('metier.domaines','domaine')
-            ->addSelect('famille')->leftJoin('domaine.familles','famille')
+        $qb = $this->getObjectManager()->getRepository(Metier::class)->createQueryBuilder('metier')
+            ->addSelect('domaine')->leftJoin('metier.domaines', 'domaine')
+            ->addSelect('famille')->leftJoin('domaine.familles', 'famille')
             ->addSelect('fichemetier')->leftJoin('metier.fichesMetiers', 'fichemetier')
             ->addSelect('reference')->leftJoin('metier.references', 'reference')
-            ->addSelect('categorie')->leftJoin('metier.categorie', 'categorie')
-        ;
+            ->addSelect('categorie')->leftJoin('metier.categorie', 'categorie');
         $qb = NiveauService::decorateWithNiveau($qb, 'metier');
         return $qb;
     }
 
     /** @return Metier[] */
-    public function getMetiers() : array
+    public function getMetiers(): array
     {
         $qb = $this->createQueryBuilder()
-            ->addOrderBy('metier.libelle')
-        ;
+            ->addOrderBy('metier.libelle');
 
         $result = $qb->getQuery()->getResult();
         return $result;
     }
 
-    public function getMetier(?int $id) : ?Metier
+    public function getMetier(?int $id): ?Metier
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('metier.id = :id')
-            ->setParameter('id', $id)
-        ;
+            ->setParameter('id', $id);
 
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
-            throw new RuntimeException("Plusieurs Metier partagent le même identifiant [".$id."]");
+            throw new RuntimeException("Plusieurs Metier partagent le même identifiant [" . $id . "]", 0, $e);
         }
         return $result;
     }
 
-    public function getRequestedMetier(AbstractActionController $controller, string $paramName = 'metier') : ?Metier
+    public function getRequestedMetier(AbstractActionController $controller, string $paramName = 'metier'): ?Metier
     {
         $id = $controller->params()->fromRoute($paramName);
         $metier = $this->getMetier($id);
@@ -131,15 +108,14 @@ class MetierService {
         return $metier;
     }
 
-    public function getMetiersTypesAsMultiOptions(bool $historiser = false) : array
+    public function getMetiersTypesAsMultiOptions(bool $historiser = false): array
     {
-        /** @var Metier[] $metiers */
         $metiers = $this->getMetiers();
 
         $vide = [];
         $result = [];
         foreach ($metiers as $metier) {
-            if ($historiser OR $metier->estNonHistorise())
+            if ($historiser or $metier->estNonHistorise())
                 if ($metier->getDomaines()) {
                     foreach ($metier->getDomaines() as $domaine) {
                         $result[$domaine->getLibelle()][] = $metier;
@@ -154,7 +130,7 @@ class MetierService {
             //['label'=>'A', 'options' => ["A" => "A", "a"=> "a"]],
             $options = [];
             foreach ($metiers as $metier) {
-                    $options[$metier->getId()] = $metier->getLibelle();
+                $options[$metier->getId()] = $metier->getLibelle();
             }
             $multi[] = ['label' => $key, 'options' => $options];
         }
@@ -166,30 +142,29 @@ class MetierService {
         return $multi;
     }
 
-    public function getMetierByReference(string $referentiel, string $reference) : ?Metier
+    public function getMetierByReference(string $referentiel, string $reference): ?Metier
     {
         $qb = $this->createQueryBuilder()
 //            ->join('metier.references', 'reference')->addSelect('reference')
             ->join('reference.referentiel', 'referentiel')->addSelect('referentiel')
             ->andWhere('referentiel.libelleCourt = :referentiel')->setParameter('referentiel', $referentiel)
-            ->andWhere('reference.code = :reference')->setParameter('reference', $reference)
-        ;
+            ->andWhere('reference.code = :reference')->setParameter('reference', $reference);
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
-            throw new RuntimeException("Plusieurs [Metier] partagent la même référence [".$referentiel."|".$reference."].", 0, $e);
+            throw new RuntimeException("Plusieurs [Metier] partagent la même référence [" . $referentiel . "|" . $reference . "].", 0, $e);
         }
         return $result;
     }
 
     /** FACADE ********************************************************************************************************/
 
-    public function generateCartographyArray() : array
+    public function generateCartographyArray(): array
     {
         $metiers = $this->getMetiers();
 
         $results = [];
-        foreach($metiers as $metier) {
+        foreach ($metiers as $metier) {
             $references = [];
             foreach ($metier->getReferences() as $reference) {
                 $references[] = $reference->getTitre();
@@ -201,24 +176,26 @@ class MetierService {
             foreach ($domaines as $domaine) {
                 $fonction = ($domaine) ? $domaine->getTypeFonction() : null;
                 $familles = ($domaine) ? $domaine->getFamilles() : [];
-                $fTexte = implode(', ', array_map(function (FamilleProfessionnelle $a) { return $a->getLibelle(); }, $familles));
+                $fTexte = implode(', ', array_map(function (FamilleProfessionnelle $a) {
+                    return $a->getLibelle();
+                }, $familles));
 
                 $entry = [
                     'metier' => $metier->__toString(),
 
-                    'niveau' => ($metier->getNiveaux())?"[".$metier->getNiveaux()->getBorneInferieure()->getEtiquette().":".$metier->getNiveaux()->getBorneSuperieure()->getEtiquette()."]":"---",
+                    'niveau' => ($metier->getNiveaux()) ? "[" . $metier->getNiveaux()->getBorneInferieure()->getEtiquette() . ":" . $metier->getNiveaux()->getBorneSuperieure()->getEtiquette() . "]" : "---",
                     'références' => implode("<br/>", $references),
                     'domaine' => ($domaine) ? $domaine->__toString() : "---",
                     'fonction' => ($fonction) ?: "---",
                     'famille' => ($fTexte) ?: "---",
-                    'nbFiche' => count($metier->getFichesMetiers()),
+                    'nbFiche' => 0,
                 ];
                 $results[] = $entry;
             }
         }
 
-        usort($results, function($a, $b) {
-            if ($a['metier'] !== $b['metier'])  return $a['metier'] > $b['metier'];
+        usort($results, function ($a, $b) {
+            if ($a['metier'] !== $b['metier']) return $a['metier'] > $b['metier'];
             return $a['domaine'] <=> $b['domaine'];
         });
 
@@ -231,23 +208,29 @@ class MetierService {
      * @param string $masculin
      * @return string|null
      */
-        public static function computeEcritureInclusive(string $feminin, string $masculin) : ?string
+    public static function computeEcritureInclusive(string $feminin, string $masculin): ?string
     {
         $split_inclusif = [];
-        $split_feminin_ = explode(" ",$feminin);
-        $split_feminin = []; foreach ($split_feminin_ as $item) { if ($item !== '') $split_feminin[] = $item; }
+        $split_feminin_ = explode(" ", $feminin);
+        $split_feminin = [];
+        foreach ($split_feminin_ as $item) {
+            if ($item !== '') $split_feminin[] = $item;
+        }
 //        var_dump($split_feminin);
-        $split_masculin_ = explode(" ",$masculin);
-        $split_masculin = []; foreach ($split_masculin_ as $item) { if ($item !== '') $split_masculin[] = $item; }
+        $split_masculin_ = explode(" ", $masculin);
+        $split_masculin = [];
+        foreach ($split_masculin_ as $item) {
+            if ($item !== '') $split_masculin[] = $item;
+        }
 //        var_dump($split_masculin);
 
         if (count($split_feminin) !== count($split_masculin)) return null;
         $nbElement = count($split_feminin);
 
-        for ($position = 0 ; $position < $nbElement; $position++) {
-            if ($split_feminin[$position] !== "" AND strstr($split_feminin[$position], $split_masculin[$position]) === false) {
+        for ($position = 0; $position < $nbElement; $position++) {
+            if ($split_feminin[$position] !== "" and !str_contains($split_feminin[$position], $split_masculin[$position])) {
                 $prefixe_commun = "";
-                for ($i = 0 ; $i < min(strlen($split_feminin[$position]),strlen($split_masculin[$position])) ; $i++) {
+                for ($i = 0; $i < min(strlen($split_feminin[$position]), strlen($split_masculin[$position])); $i++) {
                     if ($split_feminin[$position][$i] === $split_masculin[$position][$i]) {
                         $prefixe_commun .= $split_feminin[$position][$i];
                     } else {
@@ -255,7 +238,7 @@ class MetierService {
                             $prefixe_commun = substr($prefixe_commun, 0, strlen($prefixe_commun) - 1);
                             $suffixe_feminin = substr($split_feminin[$position], strlen($prefixe_commun));
                             $suffixe_masculin = substr($split_masculin[$position], strlen($prefixe_commun));
-                        } while ( strlen($suffixe_masculin) <= 2);
+                        } while (strlen($suffixe_masculin) <= 2);
                         $split_inclusif[] = $prefixe_commun . $suffixe_masculin . "·" . $suffixe_feminin;
                         break;
                     }
@@ -279,7 +262,7 @@ class MetierService {
      * @param Metier $metier
      * @return array
      */
-    public function getInfosAgentsByMetier(Metier $metier) : array
+    public function getInfosAgentsByMetier(Metier $metier): array
     {
         $params = ["metier" => $metier->getId()];
         $sql = <<<EOS
@@ -316,25 +299,29 @@ and et.code not in ('FICHE_POSTE_REDACTION')
 order by a.nom_usage, a.prenom
 EOS;
 
+        try {
+            $res = $this->getObjectManager()->getConnection()->executeQuery($sql, $params);
             try {
-                $res = $this->getEntityManager()->getConnection()->executeQuery($sql, $params);
-                try {
-                    $tmp = $res->fetchAllAssociative();
-                } catch (DRV_Exception $e) {
-                    throw new RuntimeException("Un problème est survenue lors de la récupération des fonctions d'un groupe d'individus", 0, $e);
-                }
-            } catch (DBA_Exception $e) {
+                $tmp = $res->fetchAllAssociative();
+            } catch (DRV_Exception $e) {
                 throw new RuntimeException("Un problème est survenue lors de la récupération des fonctions d'un groupe d'individus", 0, $e);
             }
-            return $tmp;
+        } catch (DBA_Exception $e) {
+            throw new RuntimeException("Un problème est survenue lors de la récupération des fonctions d'un groupe d'individus", 0, $e);
+        }
+        return $tmp;
     }
 
     public function createWith(string $libelle, string $referentielCode, string $metierCode, string $domaineLibelle, string $familleLibelle, bool $persist = true): ?Metier
     {
         $domaine = $this->getDomaineService()->getDomaineByLibelle($domaineLibelle);
-        if ($domaine === null) { $domaine = $this->getDomaineService()->createWith($domaineLibelle); }
+        if ($domaine === null) {
+            $domaine = $this->getDomaineService()->createWith($domaineLibelle);
+        }
         $famille = $this->getFamilleProfessionnelleService()->getFamilleProfessionnelleByLibelle($familleLibelle);
-        if ($famille === null) { $famille = $this->getFamilleProfessionnelleService()->createWith($familleLibelle); }
+        if ($famille === null) {
+            $famille = $this->getFamilleProfessionnelleService()->createWith($familleLibelle);
+        }
         $referentiel = $this->getReferentielService()->getReferentielByCode($referentielCode);
 
         // metier
@@ -348,13 +335,13 @@ EOS;
         $reference->setCode($metierCode);
         $reference->setReferentiel($referentiel);
         $reference->setMetier($metier);
-        if ($persist)  $this->getReferenceService()->create($reference);
+        if ($persist) $this->getReferenceService()->create($reference);
 
         // domaine et autre
         $metier->addDomaine($domaine);
         $domaine->addFamille($famille);
-        if ($persist)  $this->getDomaineService()->update($domaine);
-        if ($persist)  $this->update($metier);
+        if ($persist) $this->getDomaineService()->update($domaine);
+        if ($persist) $this->update($metier);
 
         return $metier;
     }
diff --git a/module/Metier/src/Metier/Service/Metier/MetierServiceFactory.php b/module/Metier/src/Metier/Service/Metier/MetierServiceFactory.php
index e0fc7a93208f1f3499b68f9ec42d5dcfe0ca3d14..a11e92a1abc9ba8bce745b04d38c556022ac7739 100644
--- a/module/Metier/src/Metier/Service/Metier/MetierServiceFactory.php
+++ b/module/Metier/src/Metier/Service/Metier/MetierServiceFactory.php
@@ -4,7 +4,6 @@ namespace Metier\Service\Metier;
 
 use Doctrine\ORM\EntityManager;
 use Interop\Container\ContainerInterface;
-use Metier\Entity\Db\Reference;
 use Metier\Service\Domaine\DomaineService;
 use Metier\Service\FamilleProfessionnelle\FamilleProfessionnelleService;
 use Metier\Service\Reference\ReferenceService;
@@ -12,7 +11,8 @@ use Metier\Service\Referentiel\ReferentielService;
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\NotFoundExceptionInterface;
 
-class MetierServiceFactory {
+class MetierServiceFactory
+{
 
     /**
      * @param ContainerInterface $container
@@ -20,7 +20,7 @@ class MetierServiceFactory {
      * @throws ContainerExceptionInterface
      * @throws NotFoundExceptionInterface
      */
-    public function __invoke(ContainerInterface $container) : MetierService
+    public function __invoke(ContainerInterface $container): MetierService
     {
         /**
          * @var EntityManager $entityManager
@@ -36,7 +36,7 @@ class MetierServiceFactory {
         $referentielService = $container->get(ReferentielService::class);
 
         $service = new MetierService();
-        $service->setEntityManager($entityManager);
+        $service->setObjectManager($entityManager);
         $service->setDomaineService($domaineService);
         $service->setFamilleProfessionnelleService($familleService);
         $service->setReferenceService($referenceService);
diff --git a/module/Metier/src/Metier/Service/Reference/ReferenceService.php b/module/Metier/src/Metier/Service/Reference/ReferenceService.php
index 8eb4e230a85d1d20dc4f1d5f2c08b9cca129f9b9..6f5bb6376c65b1fc0973875675371f5e6ff17aa5 100644
--- a/module/Metier/src/Metier/Service/Reference/ReferenceService.php
+++ b/module/Metier/src/Metier/Service/Reference/ReferenceService.php
@@ -2,80 +2,59 @@
 
 namespace Metier\Service\Reference;
 
-use Doctrine\ORM\Exception\ORMException;
-use Metier\Entity\Db\Reference;
 use Doctrine\ORM\NonUniqueResultException;
 use Doctrine\ORM\QueryBuilder;
+use DoctrineModule\Persistence\ProvidesObjectManager;
+use Laminas\Mvc\Controller\AbstractActionController;
+use Metier\Entity\Db\Reference;
 use Metier\Entity\Db\Referentiel;
 use UnicaenApp\Exception\RuntimeException;
-use UnicaenApp\Service\EntityManagerAwareTrait;
-use Laminas\Mvc\Controller\AbstractActionController;
 
 class ReferenceService
 {
-    use EntityManagerAwareTrait;
+    use ProvidesObjectManager;
 
     /** GESTION DES ENTITES *******************************************************************************************/
 
-    public function create(Reference $referentiel) : Reference
+    public function create(Reference $referentiel): Reference
     {
-        try {
-            $this->getEntityManager()->persist($referentiel);
-            $this->getEntityManager()->flush($referentiel);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->persist($referentiel);
+        $this->getObjectManager()->flush($referentiel);
         return $referentiel;
     }
 
-    public function update(Reference $referentiel) : Reference
+    public function update(Reference $referentiel): Reference
     {
-        try {
-            $this->getEntityManager()->flush($referentiel);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->flush($referentiel);
         return $referentiel;
     }
 
-    public function historise(Reference $referentiel) : Reference
+    public function historise(Reference $referentiel): Reference
     {
-        try {
-            $referentiel->historiser();
-            $this->getEntityManager()->flush($referentiel);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $referentiel->historiser();
+        $this->getObjectManager()->flush($referentiel);
         return $referentiel;
     }
 
-    public function restore(Reference $referentiel) : Reference
+    public function restore(Reference $referentiel): Reference
     {
-        try {
-            $referentiel->dehistoriser();
-            $this->getEntityManager()->flush($referentiel);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $referentiel->dehistoriser();
+        $this->getObjectManager()->flush($referentiel);
         return $referentiel;
     }
 
-    public function delete(Reference $referentiel) : Reference
+    public function delete(Reference $referentiel): Reference
     {
-        try {
-            $this->getEntityManager()->remove($referentiel);
-            $this->getEntityManager()->flush($referentiel);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->remove($referentiel);
+        $this->getObjectManager()->flush($referentiel);
         return $referentiel;
     }
 
     /** REQUETAGE *****************************************************************************************************/
 
-    public function createQueryBuilder() : QueryBuilder
+    public function createQueryBuilder(): QueryBuilder
     {
-        $qb = $this->getEntityManager()->getRepository(Reference::class)->createQueryBuilder('reference')
+        $qb = $this->getObjectManager()->getRepository(Reference::class)->createQueryBuilder('reference')
             ->addSelect('metier')->join('reference.metier', 'metier')
             ->addSelect('categorie')->leftJoin('metier.categorie', 'categorie')
             ->addSelect('referentiel')->join('reference.referentiel', 'referentiel');
@@ -84,7 +63,7 @@ class ReferenceService
     }
 
     /** @return Reference[] */
-    public function getReferences(string $champ = 'code', string $ordre = 'ASC') : array
+    public function getReferences(string $champ = 'code', string $ordre = 'ASC'): array
     {
         $qb = $this->createQueryBuilder()
             ->orderBy('reference.' . $champ, $ordre);
@@ -95,7 +74,7 @@ class ReferenceService
 
 
     /** @return Reference[] */
-    public function getReferencesByReferentiel(?Referentiel $referentiel, string $champ = 'code', string $ordre = 'ASC') : array
+    public function getReferencesByReferentiel(?Referentiel $referentiel, string $champ = 'code', string $ordre = 'ASC'): array
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('reference.referentiel = :referentiel')->setParameter('referentiel', $referentiel)
@@ -106,7 +85,7 @@ class ReferenceService
     }
 
 
-    public function getReference(?int $id) : ?Reference
+    public function getReference(?int $id): ?Reference
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('reference.id = :id')
@@ -120,7 +99,7 @@ class ReferenceService
         return $result;
     }
 
-    public function getRequestedReference(AbstractActionController $controller, string $param = "reference") : ?Reference
+    public function getRequestedReference(AbstractActionController $controller, string $param = "reference"): ?Reference
     {
         $id = $controller->params()->fromRoute($param);
         $result = $this->getReference($id);
diff --git a/module/Metier/src/Metier/Service/Reference/ReferenceServiceFactory.php b/module/Metier/src/Metier/Service/Reference/ReferenceServiceFactory.php
index 77fb85e469946bc0db442bc3ae4f785b8924de65..674682a538dedd7948fa524618d9f250a0f4fffd 100644
--- a/module/Metier/src/Metier/Service/Reference/ReferenceServiceFactory.php
+++ b/module/Metier/src/Metier/Service/Reference/ReferenceServiceFactory.php
@@ -7,7 +7,8 @@ use Interop\Container\ContainerInterface;
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\NotFoundExceptionInterface;
 
-class ReferenceServiceFactory {
+class ReferenceServiceFactory
+{
 
     /**
      * @param ContainerInterface $container
@@ -15,7 +16,7 @@ class ReferenceServiceFactory {
      * @throws ContainerExceptionInterface
      * @throws NotFoundExceptionInterface
      */
-    public function __invoke(ContainerInterface $container) : ReferenceService
+    public function __invoke(ContainerInterface $container): ReferenceService
     {
         /**
          * @var EntityManager $entityManager
@@ -23,7 +24,7 @@ class ReferenceServiceFactory {
         $entityManager = $container->get('doctrine.entitymanager.orm_default');
 
         $service = new ReferenceService();
-        $service->setEntityManager($entityManager);
+        $service->setObjectManager($entityManager);
 
         return $service;
     }
diff --git a/module/Metier/src/Metier/Service/Referentiel/ReferentielService.php b/module/Metier/src/Metier/Service/Referentiel/ReferentielService.php
index 35be68bbc7593d6fe2e74c950176ae4ce8fe2dab..439280b2c0a00d4632e87d802b0afde4aea7a108 100644
--- a/module/Metier/src/Metier/Service/Referentiel/ReferentielService.php
+++ b/module/Metier/src/Metier/Service/Referentiel/ReferentielService.php
@@ -3,86 +3,63 @@
 namespace Metier\Service\Referentiel;
 
 use Doctrine\ORM\NonUniqueResultException;
-use Doctrine\ORM\Exception\ORMException;
 use Doctrine\ORM\QueryBuilder;
-use Formation\Entity\Db\Formateur;
+use DoctrineModule\Persistence\ProvidesObjectManager;
+use Laminas\Mvc\Controller\AbstractActionController;
 use Metier\Entity\Db\Referentiel;
 use UnicaenApp\Exception\RuntimeException;
-use UnicaenApp\Service\EntityManagerAwareTrait;
-use Laminas\Mvc\Controller\AbstractActionController;
-use UnicaenUtilisateur\Entity\Db\User;
 
-class ReferentielService {
-    use EntityManagerAwareTrait;
+class ReferentielService
+{
+    use ProvidesObjectManager;
 
     /** GESTION DES ENTITES *******************************************************************************************/
 
-    public function create(Referentiel $referentiel) : Referentiel
+    public function create(Referentiel $referentiel): Referentiel
     {
-        try {
-            $this->getEntityManager()->persist($referentiel);
-            $this->getEntityManager()->flush($referentiel);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->persist($referentiel);
+        $this->getObjectManager()->flush($referentiel);
         return $referentiel;
     }
 
-    public function update(Referentiel $referentiel) : Referentiel
+    public function update(Referentiel $referentiel): Referentiel
     {
-        try {
-            $this->getEntityManager()->flush($referentiel);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->flush($referentiel);
         return $referentiel;
     }
 
-    public function historise(Referentiel $referentiel) : Referentiel
+    public function historise(Referentiel $referentiel): Referentiel
     {
-        try {
-            $referentiel->historiser();
-            $this->getEntityManager()->flush($referentiel);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $referentiel->historiser();
+        $this->getObjectManager()->flush($referentiel);
         return $referentiel;
     }
 
-    public function restore(Referentiel $referentiel) : Referentiel
+    public function restore(Referentiel $referentiel): Referentiel
     {
-        try {
-            $referentiel->dehistoriser();
-            $this->getEntityManager()->flush($referentiel);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $referentiel->dehistoriser();
+        $this->getObjectManager()->flush($referentiel);
         return $referentiel;
     }
 
-    public function delete(Referentiel $referentiel) : Referentiel
+    public function delete(Referentiel $referentiel): Referentiel
     {
-        try {
-            $this->getEntityManager()->remove($referentiel);
-            $this->getEntityManager()->flush($referentiel);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->remove($referentiel);
+        $this->getObjectManager()->flush($referentiel);
         return $referentiel;
     }
 
     /** REQUETAGE *****************************************************************************************************/
 
-    public function createQueryBuilder() : QueryBuilder
+    public function createQueryBuilder(): QueryBuilder
     {
-        $qb = $this->getEntityManager()->getRepository(Referentiel::class)->createQueryBuilder('referentiel')
-            ;
+        $qb = $this->getObjectManager()->getRepository(Referentiel::class)->createQueryBuilder('referentiel');
 
         return $qb;
     }
 
     /** @return Referentiel[] */
-    public function getReferentiels(string $champ = 'libelleCourt', string $ordre = 'ASC') : array
+    public function getReferentiels(string $champ = 'libelleCourt', string $ordre = 'ASC'): array
     {
         $qb = $this->createQueryBuilder()
             ->orderBy('referentiel.' . $champ, $ordre);
@@ -91,7 +68,7 @@ class ReferentielService {
         return $result;
     }
 
-    public function getReferentielsAsOptions() : array
+    public function getReferentielsAsOptions(): array
     {
         $referentiels = $this->getReferentiels();
         $array = [];
@@ -103,22 +80,21 @@ class ReferentielService {
         return $array;
     }
 
-    public function getReferentiel(?int $id) : ?Referentiel
+    public function getReferentiel(?int $id): ?Referentiel
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('referentiel.id = :id')
-            ->setParameter('id', $id)
-        ;
+            ->setParameter('id', $id);
 
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
-            throw new RuntimeException("Plusieurs MetierReferentiel partagent le même id [".$id."]",0, $e);
+            throw new RuntimeException("Plusieurs MetierReferentiel partagent le même id [" . $id . "]", 0, $e);
         }
         return $result;
     }
 
-    public function getRequestedReferentiel(AbstractActionController $controller, string $param = "referentiel") : ?Referentiel
+    public function getRequestedReferentiel(AbstractActionController $controller, string $param = "referentiel"): ?Referentiel
     {
         $id = $controller->params()->fromRoute($param);
         $result = $this->getReferentiel($id);
@@ -130,14 +106,13 @@ class ReferentielService {
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('referentiel.libelleCourt = :code')->setParameter('code', $referentielCode)
-            ->andWhere('referentiel.histoDestruction IS NULL')
-        ;
+            ->andWhere('referentiel.histoDestruction IS NULL');
 
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
-            throw new RuntimeException("Plusieurs [".Referentiel::class."] partagent le même code [".$referentielCode."]",0, $e);
+            throw new RuntimeException("Plusieurs [" . Referentiel::class . "] partagent le même code [" . $referentielCode . "]", 0, $e);
         }
         return $result;
-
+    }
 }
\ No newline at end of file
diff --git a/module/Metier/src/Metier/Service/Referentiel/ReferentielServiceFactory.php b/module/Metier/src/Metier/Service/Referentiel/ReferentielServiceFactory.php
index bfb384ce0a8096d25e95cbb4194a01a57a91c3d2..46f1a467c3a731bae878d0eba5f674adaa51ab08 100644
--- a/module/Metier/src/Metier/Service/Referentiel/ReferentielServiceFactory.php
+++ b/module/Metier/src/Metier/Service/Referentiel/ReferentielServiceFactory.php
@@ -7,7 +7,8 @@ use Interop\Container\ContainerInterface;
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\NotFoundExceptionInterface;
 
-class ReferentielServiceFactory {
+class ReferentielServiceFactory
+{
 
     /**
      * @param ContainerInterface $container
@@ -15,15 +16,13 @@ class ReferentielServiceFactory {
      * @throws ContainerExceptionInterface
      * @throws NotFoundExceptionInterface
      */
-    public function __invoke(ContainerInterface $container) : ReferentielService
+    public function __invoke(ContainerInterface $container): ReferentielService
     {
-        /**
-         * @var EntityManager $entityManager
-         */
+        /** @var EntityManager $entityManager */
         $entityManager = $container->get('doctrine.entitymanager.orm_default');
 
         $service = new ReferentielService();
-        $service->setEntityManager($entityManager);
+        $service->setObjectManager($entityManager);
 
         return $service;
     }
diff --git a/module/Metier/src/Metier/View/Helper/ReferenceViewHelper.php b/module/Metier/src/Metier/View/Helper/ReferenceViewHelper.php
index 4998c40cd798aa464f1831f683c78e5d3e3477cd..882085c9d4c598e5e5d8eccd0d0f4e54447759d8 100644
--- a/module/Metier/src/Metier/View/Helper/ReferenceViewHelper.php
+++ b/module/Metier/src/Metier/View/Helper/ReferenceViewHelper.php
@@ -14,7 +14,7 @@ class ReferenceViewHelper extends AbstractHelper
     /**
      * @param Reference $reference
      * @param array $options
-     * @return string|Partial
+     * @return string
      */
     public function __invoke(Reference $reference, array $options = []) : string
     {
diff --git a/module/Metier/src/Metier/View/Helper/TypeFonctionViewHelper.php b/module/Metier/src/Metier/View/Helper/TypeFonctionViewHelper.php
index 1b5da0189ce7e03b4f997db8c59b488982245eee..6adfd9fe9608f18d1c76862285a489d74a4b32d8 100644
--- a/module/Metier/src/Metier/View/Helper/TypeFonctionViewHelper.php
+++ b/module/Metier/src/Metier/View/Helper/TypeFonctionViewHelper.php
@@ -13,7 +13,7 @@ class TypeFonctionViewHelper extends AbstractHelper
     /**
      * @param Domaine $domaine
      * @param array $options
-     * @return string|Partial
+     * @return string
      */
     public function __invoke(Domaine $domaine, array $options = []) : string
     {
diff --git a/module/Metier/view/metier/domaine/index.phtml b/module/Metier/view/metier/domaine/index.phtml
index cb1aaab1b80101d6e137dfdbe777c7b6e5bfc482..9cc0ae6e258ad188097e7fc0206d4b9638415486 100644
--- a/module/Metier/view/metier/domaine/index.phtml
+++ b/module/Metier/view/metier/domaine/index.phtml
@@ -18,7 +18,7 @@ use Metier\Provider\Privilege\DomainePrivileges;
 
 $canAfficher       = $this->isAllowed(DomainePrivileges::getResourceId(DomainePrivileges::DOMAINE_AFFICHER));
 $canAjouter        = $this->isAllowed(DomainePrivileges::getResourceId(DomainePrivileges::DOMAINE_AJOUTER));
-$canEditer         = $this->isAllowed(DomainePrivileges::getResourceId(DomainePrivileges::DOMAINE_MODIFIER));;
+$canEditer         = $this->isAllowed(DomainePrivileges::getResourceId(DomainePrivileges::DOMAINE_MODIFIER));
 $canHistoriser     = $this->isAllowed(DomainePrivileges::getResourceId(DomainePrivileges::DOMAINE_HISTORISER));
 $canEffacer        = $this->isAllowed(DomainePrivileges::getResourceId(DomainePrivileges::DOMAINE_SUPPRIMER));
 
diff --git a/module/Metier/view/metier/metier/cartographie.phtml b/module/Metier/view/metier/metier/cartographie.phtml
index 844495f186c96c1b07ae5f6cd892e7dfcd5de684..437677dee93a7ae4fc61048e57b4c0a37627a91f 100644
--- a/module/Metier/view/metier/metier/cartographie.phtml
+++ b/module/Metier/view/metier/metier/cartographie.phtml
@@ -27,7 +27,7 @@ $this->headTitle('Cartographie des métiers');
 
         <div class="col-md-5 pull-right">
         <div class="alert alert-warning">
-            <strong>Attention :</strong> La cartographie se base sur les métiers. Par conséquent, une fonction  (resp. un domaine ou une famille) vide ne sera pas cartographié.
+            <strong>Attention :</strong> La cartographie se base sur les métiers. Par conséquent, une fonction (resp. un domaine ou une famille) vide ne sera pas cartographié.
         </div>
         </div>
 
@@ -85,7 +85,7 @@ $this->headTitle('Cartographie des métiers');
         csv = csv.join('\r\n')
 
         // Create link and download
-        var link = document.createElement('a');
+        let link = document.createElement('a');
         link.setAttribute('href', 'data:text/csv;charset=utf-8,%EF%BB%BF' + encodeURIComponent(csv));
         link.setAttribute('download', filename);
         link.style.visibility = 'hidden';
diff --git a/module/Structure/config/merged/structure.config.php b/module/Structure/config/merged/structure.config.php
index 41dc84d4713e1a4a9fb21111e4957045ccfca896..7dbcf7100ed44ffca8dff592c57e8ea858a41044 100644
--- a/module/Structure/config/merged/structure.config.php
+++ b/module/Structure/config/merged/structure.config.php
@@ -15,6 +15,10 @@ use Structure\Service\Structure\StructureService;
 use Structure\Service\Structure\StructureServiceFactory;
 use Structure\Service\StructureAgentForce\StructureAgentForceService;
 use Structure\Service\StructureAgentForce\StructureAgentForceServiceFactory;
+use Structure\Service\StructureGestionnaire\StructureGestionnaireService;
+use Structure\Service\StructureGestionnaire\StructureGestionnaireServiceFactory;
+use Structure\Service\StructureResponsable\StructureResponsableService;
+use Structure\Service\StructureResponsable\StructureResponsableServiceFactory;
 use UnicaenPrivilege\Guard\PrivilegeController;
 use UnicaenPrivilege\Provider\Rule\PrivilegeRuleProvider;
 
@@ -31,9 +35,6 @@ return [
                     [
                         'privileges' => [
                             StructurePrivileges::STRUCTURE_AFFICHER,
-                            StructurePrivileges::STRUCTURE_DESCRIPTION,
-                            StructurePrivileges::STRUCTURE_GESTIONNAIRE,
-                            StructurePrivileges::STRUCTURE_AGENT_FORCE,
                         ],
                         'resources' => ['Structure'],
                         'assertion' => StructureAssertion::class
@@ -70,15 +71,6 @@ return [
                     ],
                     'privileges' => StructurePrivileges::STRUCTURE_MESSTRUCTURES,
                 ],
-                [
-                    'controller' => StructureController::class,
-                    'action' => [
-                        'ajouter-manuellement-agent',
-                        'retirer-manuellement-agent',
-                    ],
-                    'privileges' => StructurePrivileges::STRUCTURE_AGENT_FORCE,
-                    'assertion'  => StructureAssertion::class,
-                ],
             ],
         ],
     ],
@@ -237,6 +229,8 @@ return [
         'factories' => [
             StructureService::class => StructureServiceFactory::class,
             StructureAgentForceService::class => StructureAgentForceServiceFactory::class,
+            StructureGestionnaireService::class => StructureGestionnaireServiceFactory::class,
+            StructureResponsableService::class => StructureResponsableServiceFactory::class,
 
             StructureAssertion::class => StructureAssertionFactory::class,
             NotificationService::class => NotificationServiceFactory::class,
diff --git a/module/Structure/src/Structure/Assertion/StructureAssertion.php b/module/Structure/src/Structure/Assertion/StructureAssertion.php
index 08a33b8ded8ade3008ea5eb836973399482c4575..6d3cf337d300b33bb4b88bbc400137822aadcc3d 100644
--- a/module/Structure/src/Structure/Assertion/StructureAssertion.php
+++ b/module/Structure/src/Structure/Assertion/StructureAssertion.php
@@ -42,19 +42,6 @@ class StructureAssertion extends AbstractAssertion {
                 default
                             => false,
             },
-            StructurePrivileges::STRUCTURE_DESCRIPTION,
-            StructurePrivileges::STRUCTURE_GESTIONNAIRE,
-            StructurePrivileges::STRUCTURE_AGENT_FORCE,
-                        => match ($role->getRoleId()) {
-                            AppRoleProvider::ADMIN_FONC,
-                            AppRoleProvider::ADMIN_TECH,
-                            AppRoleProvider::DRH
-                                            => true,
-                            RoleProvider::RESPONSABLE
-                                            => $isResponsable,
-                            default
-                                            => false,
-            },
             default
                         => true,
         };
@@ -77,17 +64,6 @@ class StructureAssertion extends AbstractAssertion {
         return match ($action) {
             'afficher'
                     => $this->computeAssertion($entity, StructurePrivileges::STRUCTURE_AFFICHER),
-            'editer-description',
-            'toggle-resume-mere'
-                    => $this->computeAssertion($entity, StructurePrivileges::STRUCTURE_DESCRIPTION),
-            'ajouter-gestionnaire',
-            'retirer-gestionnaire',
-            'ajouter-responsable',
-            'retirer-responsable'
-                    => $this->computeAssertion($entity, StructurePrivileges::STRUCTURE_GESTIONNAIRE),
-            'ajouter-manuellement-agent',
-            'retirer-manuellement-agent'
-                    => $this->computeAssertion($entity, StructurePrivileges::STRUCTURE_AGENT_FORCE),
             default => true,
         };
     }
diff --git a/module/Structure/src/Structure/Controller/StructureController.php b/module/Structure/src/Structure/Controller/StructureController.php
index b4937bf49ff804a2b8657680dd1cf6e915bc48e4..dfe3c9eb007e27198eaa9b55261bd80b8c111b7b 100644
--- a/module/Structure/src/Structure/Controller/StructureController.php
+++ b/module/Structure/src/Structure/Controller/StructureController.php
@@ -5,6 +5,7 @@ namespace Structure\Controller;
 use Agent\Entity\Db\AgentAffectation;
 use Agent\Entity\Db\AgentStatut;
 use Agent\Service\Agent\AgentServiceAwareTrait;
+use Agent\Service\AgentValidateur\AgentValidateurServiceAwareTrait;
 use DemandeExterne\Service\DemandeExterne\DemandeExterneServiceAwareTrait;
 use DateTime;
 use DemandeExterne\Entity\Db\DemandeExterne;
@@ -26,6 +27,7 @@ use UnicaenUtilisateur\Service\User\UserServiceAwareTrait;
 class StructureController extends AbstractActionController
 {
     use AgentServiceAwareTrait;
+    use AgentValidateurServiceAwareTrait;
     use DemandeExterneServiceAwareTrait;
     use InscriptionServiceAwareTrait;
     use StructureServiceAwareTrait;
@@ -206,11 +208,14 @@ class StructureController extends AbstractActionController
         });
 
 
+        $valideurs = $this->getAgentValidateurService()->getAgentsValidateursByAgents($agents);
+
         return new ViewModel([
             'user' => $user,
             'role' => $role,
             'structures' => $structures,
             'agents' => $agents,
+            'valideurs' => $valideurs,
 
             'inscriptions' => $inscriptions,
             'inscriptionsEnAttente' => $inscriptionsEnAttente,
diff --git a/module/Structure/src/Structure/Controller/StructureControllerFactory.php b/module/Structure/src/Structure/Controller/StructureControllerFactory.php
index 2c464dc7763d0712ce03b177667a99424eaf81be..25247ba4784910bdac821b4e35b2fd99cd7be6f5 100644
--- a/module/Structure/src/Structure/Controller/StructureControllerFactory.php
+++ b/module/Structure/src/Structure/Controller/StructureControllerFactory.php
@@ -2,7 +2,9 @@
 
 namespace Structure\Controller;
 
+use Agent\Entity\Db\AgentValidateur;
 use Agent\Service\Agent\AgentService;
+use Agent\Service\AgentValidateur\AgentValidateurService;
 use DemandeExterne\Service\DemandeExterne\DemandeExterneService;
 use Formation\Service\Inscription\InscriptionService;
 use Psr\Container\ContainerExceptionInterface;
@@ -25,12 +27,14 @@ class StructureControllerFactory
     {
         /**
          * @var AgentService $agentService
+         * @var AgentValidateurService $agentValidateurService
          * @var DemandeExterneService $demandeExterneService
          * @var InscriptionService $inscriptionService
          * @var StructureService $structureService
          * @var UserServiceAwareTrait $userService
          */
         $agentService = $container->get(AgentService::class);
+        $agentValidateurService = $container->get(AgentValidateurService::class);
         $demandeExterneService = $container->get(DemandeExterneService::class);
         $inscriptionService = $container->get(InscriptionService::class);
         $structureService = $container->get(StructureService::class);
@@ -38,6 +42,7 @@ class StructureControllerFactory
 
         $controller = new StructureController();
         $controller->setAgentService($agentService);
+        $controller->setAgentValidateurService($agentValidateurService);
         $controller->setInscriptionService($inscriptionService);
         $controller->setDemandeExterneService($demandeExterneService);
         $controller->setStructureService($structureService);
diff --git a/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.Observateur.dcm.xml b/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.Observateur.dcm.xml
index 0ab88ae50296d067d2e517b18961f1c86b81e086..26287540ed515bdeffb6e9f0cdfcb9968b0439bf 100644
--- a/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.Observateur.dcm.xml
+++ b/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.Observateur.dcm.xml
@@ -1,30 +1,32 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Structure\Entity\Db\Observateur" table="structure_observateur">
 
-        <id    name="id"                        column="id"                 type="integer" >
+        <id name="id" column="id" type="integer">
             <generator strategy="IDENTITY"/>
         </id>
 
         <many-to-one target-entity="Structure\Entity\Db\Structure" field="structure">
-            <join-column name="structure_id" referenced-column-name="id" />
+            <join-column name="structure_id" />
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="utilisateur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="utilisateur">
             <join-column name="utilisateur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <field name="description"               column="description"        type="text"/>
+        <field name="description" column="description" type="text"/>
 
         <!-- HISTORISATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-        <field name="histoCreation"     type="datetime"                 column="histo_creation"     nullable="false"/>
-        <field name="histoModification" type="datetime"                 column="histo_modification" nullable="false"/>
-        <field name="histoDestruction"  type="datetime"                 column="histo_destruction"  nullable="true"/>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoCreateur">
+        <field name="histoCreation" type="datetime" column="histo_creation" />
+        <field name="histoModification" type="datetime" column="histo_modification" />
+        <field name="histoDestruction" type="datetime" column="histo_destruction" nullable="true"/>
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoCreateur">
             <join-column name="histo_createur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoModificateur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoModificateur">
             <join-column name="histo_modificateur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoDestructeur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoDestructeur">
             <join-column name="histo_destructeur_id" referenced-column-name="ID"/>
         </many-to-one>
 
diff --git a/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.Structure.dcm.xml b/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.Structure.dcm.xml
index 088ad3f5f4f9e95bd357b126b6f25a62bd957110..34cd3ccb80f83958a2783e2d1303ec653bc35a1c 100644
--- a/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.Structure.dcm.xml
+++ b/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.Structure.dcm.xml
@@ -1,48 +1,54 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Structure\Entity\Db\Structure" table="structure">
 
-        <id    name="id"                        column="id"                 type="integer" >
+        <id name="id" column="id" type="integer">
         </id>
 
-        <field name="code"                      column="code"               type="string" length="40" />
+        <field name="code" column="code" length="40"/>
 
-        <field name="libelleCourt"              column="libelle_court"      type="string" length="128"/>
-        <field name="libelleLong"               column="libelle_long"       type="string" length="1024"/>
-        <field name="description"               column="description"        type="string" length="10240"/>
-        <field name="adresseFonctionnelle"      column="adresse_fonctionnelle"   type="string" length="1024"/>
-        <field name="ouverture"                 column="d_ouverture"          type="datetime"  />
-        <field name="fermeture"                 column="d_fermeture"          type="datetime"  />
-        <field name="fermetureOW"               column="fermeture_ow"       type="datetime"  />
-        <field name="repriseResumeMere"         column="resume_mere"        type="boolean"  />
+        <field name="libelleCourt" column="libelle_court" length="128"/>
+        <field name="libelleLong" column="libelle_long" length="1024"/>
+        <field name="description" column="description" length="10240"/>
+        <field name="adresseFonctionnelle" column="adresse_fonctionnelle" length="1024"/>
+        <field name="ouverture" column="d_ouverture" type="datetime"/>
+        <field name="fermeture" column="d_fermeture" type="datetime"/>
+        <field name="fermetureOW" column="fermeture_ow" type="datetime"/>
+        <field name="repriseResumeMere" column="resume_mere" type="boolean"/>
 
         <many-to-one target-entity="Structure\Entity\Db\StructureType" field="type">
-            <join-column name="type_id" referenced-column-name="id" />
+            <join-column name="type_id" />
         </many-to-one>
 
-        <one-to-many target-entity="Structure\Entity\Db\StructureAgentForce" mapped-by="structure" field="agentsForces"/>
+        <one-to-many target-entity="Structure\Entity\Db\StructureAgentForce" mapped-by="structure"
+                     field="agentsForces"/>
         <one-to-many target-entity="Agent\Entity\Db\AgentAffectation" mapped-by="structure" field="affectations"/>
 
-        <one-to-many field="gestionnaires"  target-entity="Structure\Entity\Db\StructureGestionnaire" mapped-by="structure"/>
-        <one-to-many field="responsables"  target-entity="Structure\Entity\Db\StructureResponsable" mapped-by="structure"/>
+        <one-to-many field="gestionnaires" target-entity="Structure\Entity\Db\StructureGestionnaire"
+                     mapped-by="structure"/>
+        <one-to-many field="responsables" target-entity="Structure\Entity\Db\StructureResponsable"
+                     mapped-by="structure"/>
 
 
         <many-to-one target-entity="Structure\Entity\Db\Structure" field="parent">
-            <join-column name="parent_id" referenced-column-name="id" />
+            <join-column name="parent_id" />
         </many-to-one>
         <one-to-many target-entity="Structure\Entity\Db\Structure" mapped-by="parent" field="enfants"/>
 
         <many-to-one target-entity="Structure\Entity\Db\Structure" field="niv2">
-            <join-column name="niv2_id" referenced-column-name="id" />
+            <join-column name="niv2_id" />
         </many-to-one>
         <many-to-one target-entity="Structure\Entity\Db\Structure" field="niv2OverWriten">
-            <join-column name="niv2_id_ow" referenced-column-name="id" />
+            <join-column name="niv2_id_ow" />
         </many-to-one>
 
         <!-- DB IMPORT #############################  -->
-        <field name="created_on"               column="created_on"       type="datetime"/>
-        <field name="updated_on"               column="updated_on"       type="datetime"/>
-        <field name="deleted_on"               column="deleted_on"       type="datetime"/>
+        <field name="createdOn" column="created_on" type="datetime"/>
+        <field name="updatedOn" column="updated_on" type="datetime"/>
+        <field name="deletedOn" column="deleted_on" type="datetime"/>
+        <field name="sourceId" column="source_id" length="128"/>
 
     </entity>
 </doctrine-mapping>
diff --git a/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureAgentForce.dcm.xml b/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureAgentForce.dcm.xml
index 53b615fd10421c5973bf5ebe39c9f69a171e5497..55de2a0824fa841e3445a1859e6293913ef764cd 100644
--- a/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureAgentForce.dcm.xml
+++ b/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureAgentForce.dcm.xml
@@ -1,30 +1,32 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Structure\Entity\Db\StructureAgentForce" table="structure_agent_force">
 
-        <id    name="id"                        column="id"                 type="integer" >
+        <id name="id" column="id" type="integer">
             <generator strategy="IDENTITY"/>
         </id>
 
         <many-to-one target-entity="Structure\Entity\Db\Structure" field="structure">
-            <join-column name="structure_id" referenced-column-name="id" />
+            <join-column name="structure_id"/>
         </many-to-one>
 
         <many-to-one target-entity="Agent\Entity\Db\Agent" field="agent">
-            <join-column name="agent_id" referenced-column-name="c_individu" />
+            <join-column name="agent_id" referenced-column-name="c_individu"/>
         </many-to-one>
 
         <!-- HISTO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-        <field name="histoCreation"     type="datetime"                 column="histo_creation"     nullable="false"/>
-        <field name="histoModification" type="datetime"                 column="histo_modification" nullable="false"/>
-        <field name="histoDestruction"  type="datetime"                 column="histo_destruction"  nullable="true"/>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoCreateur">
+        <field name="histoCreation" type="datetime" column="histo_creation"/>
+        <field name="histoModification" type="datetime" column="histo_modification"/>
+        <field name="histoDestruction" type="datetime" column="histo_destruction" nullable="true"/>
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoCreateur">
             <join-column name="histo_createur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoModificateur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoModificateur">
             <join-column name="histo_modificateur_id" referenced-column-name="ID"/>
         </many-to-one>
-        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User"  field="histoDestructeur">
+        <many-to-one target-entity="UnicaenUtilisateur\Entity\Db\User" field="histoDestructeur">
             <join-column name="histo_destructeur_id" referenced-column-name="ID"/>
         </many-to-one>
     </entity>
diff --git a/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureGestionnaire.dcm.xml b/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureGestionnaire.dcm.xml
index 575c99d164ce04d3e0cc6f40363cd666eb80ead4..d52ed3bddd1685fe7e409fc882f3bfa4d8470b3b 100644
--- a/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureGestionnaire.dcm.xml
+++ b/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureGestionnaire.dcm.xml
@@ -1,31 +1,31 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Structure\Entity\Db\StructureGestionnaire" table="structure_gestionnaire">
 
-        <id    name="id"                        column="id"                 type="integer" >
+        <id name="id" column="id" type="integer">
             <generator strategy="IDENTITY"/>
         </id>
 
         <many-to-one target-entity="Structure\Entity\Db\Structure" field="structure">
-            <join-column name="structure_id" referenced-column-name="id" />
+            <join-column name="structure_id"/>
         </many-to-one>
 
         <many-to-one target-entity="Agent\Entity\Db\Agent" field="agent">
-            <join-column name="agent_id" referenced-column-name="c_individu" />
+            <join-column name="agent_id" referenced-column-name="c_individu"/>
         </many-to-one>
 
-        <field name="fonctionId"     type="integer"                 column="fonction_id" nullable="false"/>
+        <field name="fonctionId" type="integer" column="fonction_id"/>
 
-        <field name="dateDebut"     type="datetime"                 column="date_debut"     nullable="false"/>
-        <field name="dateFin"       type="datetime"                 column="date_fin"       nullable="false"/>
-
-        <field name="source"            column="source_id"          type="string"   length="128" nullable="true"/>
-        <field name="idSource"          type="string" length="256"      column="id_orig"          nullable="true"/>
+        <field name="dateDebut" type="datetime" column="date_debut"/>
+        <field name="dateFin" type="datetime" column="date_fin"/>
 
         <!-- DB IMPORT #############################  -->
-        <field name="created_on"               column="created_on"       type="datetime"/>
-        <field name="updated_on"               column="updated_on"       type="datetime"/>
-        <field name="deleted_on"               column="deleted_on"       type="datetime"/>
+        <field name="createdOn" column="created_on" type="datetime"/>
+        <field name="updatedOn" column="updated_on" type="datetime"/>
+        <field name="deletedOn" column="deleted_on" type="datetime"/>
+        <field name="sourceId" column="source_id" length="128"/>
 
     </entity>
 </doctrine-mapping>
diff --git a/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureResponsable.dcm.xml b/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureResponsable.dcm.xml
index ebc7044332babb986ee80c2b13866e2bc28f0e3d..628a42600ed93de462e7fe947db7f4eba5592117 100644
--- a/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureResponsable.dcm.xml
+++ b/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureResponsable.dcm.xml
@@ -1,31 +1,32 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Structure\Entity\Db\StructureResponsable" table="structure_responsable">
 
-        <id    name="id"                        column="id"                 type="integer" >
+        <id name="id" column="id" type="integer">
             <generator strategy="IDENTITY"/>
         </id>
 
         <many-to-one target-entity="Structure\Entity\Db\Structure" field="structure">
-            <join-column name="structure_id" referenced-column-name="id" />
+            <join-column name="structure_id"/>
         </many-to-one>
 
         <many-to-one target-entity="Agent\Entity\Db\Agent" field="agent">
-            <join-column name="agent_id" referenced-column-name="c_individu" />
+            <join-column name="agent_id" referenced-column-name="c_individu"/>
         </many-to-one>
 
-        <field name="fonctionId"     type="integer"                 column="fonction_id" nullable="false"/>
+        <field name="fonctionId" type="integer" column="fonction_id" />
 
-        <field name="dateDebut"     type="datetime"                 column="date_debut"     nullable="false"/>
-        <field name="dateFin"       type="datetime"                 column="date_fin"       nullable="false"/>
+        <field name="dateDebut" type="datetime" column="date_debut" />
+        <field name="dateFin" type="datetime" column="date_fin" />
 
-        <field name="source"            column="source_id"          type="string"   length="128" nullable="true"/>
-        <field name="idSource"          type="string" length="256"      column="id_orig"          nullable="true"/>
 
         <!-- DB IMPORT #############################  -->
-        <field name="created_on"               column="created_on"       type="datetime"/>
-        <field name="updated_on"               column="updated_on"       type="datetime"/>
-        <field name="deleted_on"               column="deleted_on"       type="datetime"/>
+        <field name="createdOn" column="created_on" type="datetime"/>
+        <field name="updatedOn" column="updated_on" type="datetime"/>
+        <field name="deletedOn" column="deleted_on" type="datetime"/>
+        <field name="sourceId" column="source_id" length="128"/>
 
     </entity>
 </doctrine-mapping>
diff --git a/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureType.dcm.xml b/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureType.dcm.xml
index e43145f14e4e59fde7fd6da9a220d95deef61ae5..50e74fc5d74b75614f948b8a7f14bf9e501e18cc 100644
--- a/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureType.dcm.xml
+++ b/module/Structure/src/Structure/Entity/Db/Mapping/Structure.Entity.Db.StructureType.dcm.xml
@@ -1,13 +1,15 @@
 <?xml version="1.0" encoding="utf-8"?>
-<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
     <entity name="Structure\Entity\Db\StructureType" table="structure_type">
 
         <id name="id" type="integer" column="id">
             <generator strategy="IDENTITY"/>
         </id>
 
-        <field name="code"              type="string" length="64"       column="code"                   nullable="false"/>
-        <field name="libelle"           type="string" length="256"      column="libelle"                nullable="false"/>
+        <field name="code" length="64" column="code" />
+        <field name="libelle" length="256" column="libelle" />
 
     </entity>
 </doctrine-mapping>
diff --git a/module/Structure/src/Structure/Entity/Db/Structure.php b/module/Structure/src/Structure/Entity/Db/Structure.php
index 070a3ea950d36dc9718ea3d5ff2d8bf5dd4de2e7..478aac4c991bb3cbf9c037dfdd8d07205652c980 100644
--- a/module/Structure/src/Structure/Entity/Db/Structure.php
+++ b/module/Structure/src/Structure/Entity/Db/Structure.php
@@ -3,17 +3,19 @@
 namespace Structure\Entity\Db;
 
 use Application\Entity\Db\Interfaces\HasDescriptionInterface;
-use Application\Entity\Db\Traits\DbImportableAwareTrait;
 use Application\Entity\Db\Traits\HasDescriptionTrait;
 use DateTime;
 use Doctrine\Common\Collections\Collection;
 use Laminas\Permissions\Acl\Resource\ResourceInterface;
+use UnicaenSynchro\Entity\Db\IsSynchronisableInterface;
+use UnicaenSynchro\Entity\Db\IsSynchronisableTrait;
 
-class Structure implements ResourceInterface, HasDescriptionInterface {
-    use DbImportableAwareTrait;
+class Structure implements ResourceInterface, HasDescriptionInterface, IsSynchronisableInterface
+{
+    use IsSynchronisableTrait;
     use HasDescriptionTrait;
 
-    public function getResourceId() : string
+    public function getResourceId(): string
     {
         return 'Structure';
     }
@@ -21,7 +23,7 @@ class Structure implements ResourceInterface, HasDescriptionInterface {
     /**
      * @return string
      */
-    public function generateTag()  : string
+    public function generateTag(): string
     {
         return 'Structure_' . $this->getId();
     }
@@ -58,43 +60,43 @@ class Structure implements ResourceInterface, HasDescriptionInterface {
 
     private Collection $fichesPostesRecrutements; //[FichePoste]
 
-    public function getId() : string
+    public function getId(): string
     {
         return $this->id;
     }
 
-    public function getCode() : string
+    public function getCode(): string
     {
         return $this->code;
     }
 
-    public function getLibelleCourt() : ?string
+    public function getLibelleCourt(): ?string
     {
         return $this->libelleCourt;
     }
 
-    public function getLibelleLong() : ?string
+    public function getLibelleLong(): ?string
     {
         return $this->libelleLong;
     }
 
-    public function getType() : ?StructureType
+    public function getType(): ?StructureType
     {
         return $this->type;
     }
 
-    public function getOuverture() : ?DateTime
+    public function getOuverture(): ?DateTime
     {
         return $this->ouverture;
     }
 
-    public function getFermeture() : ?DateTime
+    public function getFermeture(): ?DateTime
     {
         if ($this->getFermetureOW() !== null) return $this->getFermetureOW();
         return $this->fermeture;
     }
 
-    public function getFermetureOW() : ?DateTime
+    public function getFermetureOW(): ?DateTime
     {
         return $this->fermetureOW;
     }
@@ -103,17 +105,17 @@ class Structure implements ResourceInterface, HasDescriptionInterface {
     {
         if ($date === null) $date = new DateTime();
         if ($this->ouverture > $date) return false;
-        if ($this->getFermeture() !== null AND $this->getFermeture() <= $date) return false;
+        if ($this->getFermeture() !== null and $this->getFermeture() <= $date) return false;
         return true;
     }
 
-    public function getDescriptionComplete() : string
+    public function getDescriptionComplete(): string
     {
         $text = "";
-        if ($this->getRepriseResumeMere() AND $this->parent !== null) {
+        if ($this->getRepriseResumeMere() and $this->parent !== null) {
             $text .= $this->parent->getDescriptionComplete() . "<br/>";
         }
-        return $text . $this->description ;
+        return $text . $this->description;
     }
 
     public function getAdresseFonctionnelle(): ?string
@@ -127,7 +129,8 @@ class Structure implements ResourceInterface, HasDescriptionInterface {
 //        return $this;
 //    }
 
-    public function computeChemin() : string {
+    public function computeChemin(): string
+    {
         $chemin = $this->getLibelleCourt();
 
         $parent = "";
@@ -142,42 +145,46 @@ class Structure implements ResourceInterface, HasDescriptionInterface {
     /**
      * @return StructureGestionnaire[]
      */
-    public function getGestionnaires() : array
+    public function getGestionnaires(): array
     {
         //if ($this->gestionnaires === null) return [];
         $array = $this->gestionnaires->toArray();
-        $array = array_filter($array, function (StructureGestionnaire $a) { return !$a->isDeleted();});
+        $array = array_filter($array, function (StructureGestionnaire $a) {
+            return !$a->isDeleted();
+        });
         return $array;
     }
 
     /**
      * @return StructureResponsable[]
      */
-    public function getResponsables() : array
+    public function getResponsables(): array
     {
         //if ($this->responsables === null) return [];
         $array = $this->responsables->toArray();
-        $array = array_filter($array, function (StructureResponsable $a) { return !$a->isDeleted() ;});
+        $array = array_filter($array, function (StructureResponsable $a) {
+            return !$a->isDeleted();
+        });
         return $array;
     }
 
-    public function getMissions() : array
+    public function getMissions(): array
     {
         return $this->missions->toArray();
     }
 
-    public function getParent() : ?Structure
+    public function getParent(): ?Structure
     {
         return $this->parent;
     }
 
-    public function getNiv2() : ?Structure
+    public function getNiv2(): ?Structure
     {
         if ($this->getNiv2OW() !== null) return $this->getNiv2OW();
         return $this->niv2;
     }
 
-    public function getNiv2OW() : ?Structure
+    public function getNiv2OW(): ?Structure
     {
         return $this->niv2OverWriten;
     }
@@ -185,19 +192,21 @@ class Structure implements ResourceInterface, HasDescriptionInterface {
     /**
      * @return Structure[]
      */
-    public function getEnfants() : array
+    public function getEnfants(): array
     {
         $enfants = $this->enfants->toArray();
-        $enfants = array_filter($enfants, function(Structure $a) { return $a->isOuverte(); });
+        $enfants = array_filter($enfants, function (Structure $a) {
+            return $a->isOuverte();
+        });
         return $enfants;
     }
 
-    public function getRepriseResumeMere() : bool
+    public function getRepriseResumeMere(): bool
     {
         return $this->repriseResumeMere;
     }
 
-    public function setRepriseResumeMere(bool $repriseResumeMere) : void
+    public function setRepriseResumeMere(bool $repriseResumeMere): void
     {
         $this->repriseResumeMere = $repriseResumeMere;
     }
@@ -215,27 +224,27 @@ class Structure implements ResourceInterface, HasDescriptionInterface {
     /**
      * @return StructureAgentForce[]
      */
-    public function getAgentsForces(bool $keepHisto = false) : array
+    public function getAgentsForces(bool $keepHisto = false): array
     {
         $result = $this->agentsForces->toArray();
-        if (! $keepHisto) {
-            $result = array_filter($result, function (StructureAgentForce $a) { return $a->estNonHistorise();});
+        if (!$keepHisto) {
+            $result = array_filter($result, function (StructureAgentForce $a) {
+                return $a->estNonHistorise();
+            });
         }
 
         return $result;
     }
 
 
-
-
-    public function __toString() : string
+    public function __toString(): string
     {
-        $text = "[".$this->getType()."] ";
+        $text = "[" . $this->getType() . "] ";
         $text .= $this->getLibelleCourt();
         return $text;
     }
 
-    public function toString() : string
+    public function toString(): string
     {
         return $this->__toString();
     }
@@ -243,26 +252,26 @@ class Structure implements ResourceInterface, HasDescriptionInterface {
     /** MACRO *********************************************************************************************************/
 
     /** @noinspection PhpUnused */
-    public function toStringLibelle() : string
+    public function toStringLibelle(): string
     {
         $texte = $this->getLibelleLong();
         return $texte;
     }
 
     /** @noinspection PhpUnused */
-    public function toStringLibelleLong() : string
+    public function toStringLibelleLong(): string
     {
         $texte = "";
 
         $niv2 = $this->getNiv2();
-        if ($niv2 !== null AND $niv2 !== $this) $texte .= $niv2->getLibelleLong() . " > ";
+        if ($niv2 !== null and $niv2 !== $this) $texte .= $niv2->getLibelleLong() . " > ";
         $texte .= $this->getLibelleLong();
 
         return $texte;
     }
 
     /** @noinspection PhpUnused */
-    public function toStringResume() : string
+    public function toStringResume(): string
     {
         /** @var Structure $structure */
         $structure = $this;
@@ -270,7 +279,7 @@ class Structure implements ResourceInterface, HasDescriptionInterface {
         if ($structure->getRepriseResumeMere()) {
             $texte .= $structure->getParent()->toStringResume();
         }
-        if ($structure->getDescription() !== null AND trim($structure->getDescription() !== '')) {
+        if ($structure->getDescription() !== null and trim($structure->getDescription() !== '')) {
             $texte .= "<h3>" . $structure->toStringLibelle() . "</h3>";
             $texte .= $structure->getDescription();
         }
@@ -278,7 +287,7 @@ class Structure implements ResourceInterface, HasDescriptionInterface {
     }
 
     /** @noinspection PhpUnused */
-    public function toStringStructureBloc() : string
+    public function toStringStructureBloc(): string
     {
         /** @var Structure $structure */
         $structure = $this;
@@ -292,19 +301,19 @@ class Structure implements ResourceInterface, HasDescriptionInterface {
     }
 
     /** @noinspection PhpUnused */
-    public function toStringResponsables() : string
+    public function toStringResponsables(): string
     {
         $date = new DateTime();
         $responsables = $this->getResponsables();
         $responsables = array_filter($responsables, function (StructureResponsable $a) use ($date) {
             $encours = $a->estEnCours($date);
             $effacer = $a->isDeleted($date);
-            return ($encours AND !$effacer);
+            return ($encours and !$effacer);
         });
 
         if (empty($responsables)) return "aucun·e responsable";
-        $texte  = "<ul>";
-        foreach ($responsables as $responsable) $texte .= "<li>".$responsable->getAgent()->getDenomination()."</li>";
+        $texte = "<ul>";
+        foreach ($responsables as $responsable) $texte .= "<li>" . $responsable->getAgent()->getDenomination() . "</li>";
         $texte .= "</ul>";
         return $texte;
     }
diff --git a/module/Structure/src/Structure/Entity/Db/StructureGestionnaire.php b/module/Structure/src/Structure/Entity/Db/StructureGestionnaire.php
index a0c1990f964b3cbfcff97e291ec0be5a788c9350..24ddc5b9f82fb7884a9921402049250af88a052c 100644
--- a/module/Structure/src/Structure/Entity/Db/StructureGestionnaire.php
+++ b/module/Structure/src/Structure/Entity/Db/StructureGestionnaire.php
@@ -4,15 +4,14 @@ namespace Structure\Entity\Db;
 
 use Agent\Entity\Db\Agent;
 use Application\Entity\Db\Interfaces\HasPeriodeInterface;
-use Application\Entity\Db\Traits\DbImportableAwareTrait;
 use Application\Entity\Db\Traits\HasPeriodeTrait;
-use Application\Entity\Db\Traits\HasSourceTrait;
+use UnicaenSynchro\Entity\Db\IsSynchronisableInterface;
+use UnicaenSynchro\Entity\Db\IsSynchronisableTrait;
 
-class StructureGestionnaire implements HasPeriodeInterface
+class StructureGestionnaire implements HasPeriodeInterface, IsSynchronisableInterface
 {
-    use DbImportableAwareTrait;
+    use IsSynchronisableTrait;
     use HasPeriodeTrait;
-    use HasSourceTrait;
 
     private ?int $id = -1;
     private ?Structure $structure = null;
diff --git a/module/Structure/src/Structure/Entity/Db/StructureResponsable.php b/module/Structure/src/Structure/Entity/Db/StructureResponsable.php
index 977392ceb4e75b27c27a2897afba702f0c3a084d..f43593d35817380bb24cc6cfdddbd83146c86728 100644
--- a/module/Structure/src/Structure/Entity/Db/StructureResponsable.php
+++ b/module/Structure/src/Structure/Entity/Db/StructureResponsable.php
@@ -4,15 +4,14 @@ namespace Structure\Entity\Db;
 
 use Agent\Entity\Db\Agent;
 use Application\Entity\Db\Interfaces\HasPeriodeInterface;
-use Application\Entity\Db\Traits\DbImportableAwareTrait;
 use Application\Entity\Db\Traits\HasPeriodeTrait;
-use Application\Entity\Db\Traits\HasSourceTrait;
+use UnicaenSynchro\Entity\Db\IsSynchronisableInterface;
+use UnicaenSynchro\Entity\Db\IsSynchronisableTrait;
 
-class StructureResponsable implements HasPeriodeInterface
+class StructureResponsable implements HasPeriodeInterface, IsSynchronisableInterface
 {
-    use DbImportableAwareTrait;
+    use IsSynchronisableTrait;
     use HasPeriodeTrait;
-    use HasSourceTrait;
 
     private ?int $id = -1;
     private ?Structure $structure = null;
diff --git a/module/Structure/src/Structure/Provider/Identity/IdentityProvider.php b/module/Structure/src/Structure/Provider/Identity/IdentityProvider.php
index aa6f2b4165a3beed39f9b58b31f0379044d00fc6..198c2a90c115a3de5f0988cc0e3d627a8168222d 100644
--- a/module/Structure/src/Structure/Provider/Identity/IdentityProvider.php
+++ b/module/Structure/src/Structure/Provider/Identity/IdentityProvider.php
@@ -5,6 +5,7 @@ namespace Structure\Provider\Identity;
 use Agent\Service\Agent\AgentServiceAwareTrait;
 use Structure\Provider\Role\RoleProvider;
 use Structure\Service\Structure\StructureServiceAwareTrait;
+use Structure\Service\StructureResponsable\StructureResponsableServiceAwareTrait;
 use UnicaenUtilisateur\Entity\Db\RoleInterface;
 use UnicaenUtilisateur\Entity\Db\User;
 use UnicaenUtilisateur\Provider\Identity\AbstractIdentityProvider;
@@ -16,6 +17,7 @@ class IdentityProvider extends AbstractIdentityProvider
     use AgentServiceAwareTrait;
     use RoleServiceAwareTrait;
     use StructureServiceAwareTrait;
+    use StructureResponsableServiceAwareTrait;
     use UserServiceAwareTrait;
 
     /**
@@ -46,7 +48,7 @@ class IdentityProvider extends AbstractIdentityProvider
 
         $agent = $this->getAgentService()->getAgentByUser($user);
         if ($agent !== null) {
-            $responsabilites = $this->getAgentService()->getResposabiliteStructure($agent);
+            $responsabilites = $this->getStructureResponsableService()->getStructuresResponsablesByAgent($agent);
             if ($responsabilites !== null and $responsabilites !== []) {
                 $roleResponsable = $this->getRoleService()->findByRoleId(RoleProvider::RESPONSABLE);
                 $roles[] = $roleResponsable;
diff --git a/module/Structure/src/Structure/Provider/Identity/IdentityProviderFactory.php b/module/Structure/src/Structure/Provider/Identity/IdentityProviderFactory.php
index e21d167d30e80f4a922958403071174139516ffc..d9befc07d17ccb2885dc70ba6c51cefbf64497f4 100644
--- a/module/Structure/src/Structure/Provider/Identity/IdentityProviderFactory.php
+++ b/module/Structure/src/Structure/Provider/Identity/IdentityProviderFactory.php
@@ -7,6 +7,7 @@ use Interop\Container\ContainerInterface;
 use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\NotFoundExceptionInterface;
 use Structure\Service\Structure\StructureService;
+use Structure\Service\StructureResponsable\StructureResponsableService;
 use UnicaenUtilisateur\Service\Role\RoleService;
 use UnicaenUtilisateur\Service\User\UserService;
 
@@ -22,17 +23,20 @@ class IdentityProviderFactory
          * @var AgentService $agentService
          * @var RoleService $roleService
          * @var StructureService $structureService
+         * @var StructureResponsableService $structureResponsableService
          * @var UserService $userService
          */
         $agentService = $container->get(AgentService::class);
         $roleService = $container->get(RoleService::class);
         $structureService = $container->get(StructureService::class);
+        $structureResponsableService = $container->get(StructureResponsableService::class);
         $userService = $container->get(UserService::class);
 
         $service = new IdentityProvider();
         $service->setAgentService($agentService);
         $service->setRoleService($roleService);
         $service->setStructureService($structureService);
+        $service->setStructureResponsableService($structureResponsableService);
         $service->setUserService($userService);
         return $service;
     }
diff --git a/module/Structure/src/Structure/Provider/Parametre/StructureParametres.php b/module/Structure/src/Structure/Provider/Parametre/StructureParametres.php
deleted file mode 100644
index 0b4ed2f054d421d298ecc932b593dc2e07ec587c..0000000000000000000000000000000000000000
--- a/module/Structure/src/Structure/Provider/Parametre/StructureParametres.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-namespace Structure\Provider\Parametre;
-
-class StructureParametres {
-
-    const TYPE = 'STRUCTURE';
-
-    const BLOC_GESTIONNAIRE =  'BLOC_GESTIONNAIRE';
-
-}
\ No newline at end of file
diff --git a/module/Structure/src/Structure/Provider/Privilege/StructurePrivileges.php b/module/Structure/src/Structure/Provider/Privilege/StructurePrivileges.php
index 93ed0b86cc070b2053bf06e0735be6d9cc8c1fdc..d7c0d11d52ff685fc87ca8982f60b53d7a076561 100644
--- a/module/Structure/src/Structure/Provider/Privilege/StructurePrivileges.php
+++ b/module/Structure/src/Structure/Provider/Privilege/StructurePrivileges.php
@@ -8,8 +8,5 @@ class StructurePrivileges extends Privileges
 {
     const STRUCTURE_INDEX               = 'structure-structure_index';
     const STRUCTURE_AFFICHER            = 'structure-structure_afficher';
-    const STRUCTURE_DESCRIPTION         = 'structure-structure_description';
-    const STRUCTURE_GESTIONNAIRE        = 'structure-structure_gestionnaire'; //sert pour les délégués
-    const STRUCTURE_AGENT_FORCE         = 'structure-structure_agent_force';
     const STRUCTURE_MESSTRUCTURES       = 'structure-structure_messtructures';
 }
diff --git a/module/Structure/src/Structure/Service/Notification/NotificationService.php b/module/Structure/src/Structure/Service/Notification/NotificationService.php
index 158e710879c98d6e5f0fe0317b1baa9eea789e3b..62ea7cbd2daa03bb6644af2feadd6b046b64dc58 100644
--- a/module/Structure/src/Structure/Service/Notification/NotificationService.php
+++ b/module/Structure/src/Structure/Service/Notification/NotificationService.php
@@ -40,40 +40,4 @@ class NotificationService
 
     }
 
-    /** GESTION DES INSCRIPTIONS **************************************************************************************/
-
-    public function triggerInformations(Structure $structure): ?Mail
-    {
-        $vars = [
-            'structure' => $structure,
-            'MacroService' => $this->getMacroService(),
-            'UrlService' => $this->getUrlService(),
-        ];
-        $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::UPDATE_INFOS, $vars);
-
-        $emails = [];
-
-        if (empty($emails)) {
-            $gestionnaires = $this->getStructureService()->getGestionnaires($structure);
-            if (!empty($gestionnaires)) $emails = array_map(function (StructureGestionnaire $a) {
-                return $a->getAgent()->getEmail();
-            }, $gestionnaires);
-        }
-        if (empty($emails)) {
-            $responsables = $this->getStructureService()->getResponsables($structure);
-            if (!empty($responsables)) $emails = array_map(function (StructureResponsable $a) {
-                return $a->getAgent()->getEmail();
-            }, $responsables);
-        }
-//        if (empty($emails)) {
-//            $emails = $this->getMailsAdministrationFonctionnelle();
-//        }
-
-        if (empty($emails)) return null;
-        $mail = $this->getMailService()->sendMail($emails, $rendu->getSujet(), $rendu->getCorps());
-        $mail->setMotsClefs([$structure->generateTag(), $rendu->getTemplate()->generateTag()]);
-        $this->getMailService()->update($mail);
-        return $mail;
-    }
-
 }
\ No newline at end of file
diff --git a/module/Structure/src/Structure/Service/Structure/StructureService.php b/module/Structure/src/Structure/Service/Structure/StructureService.php
index ea44bc8034c3e7d3d3b8cb4ecfe671d0911b78f4..e161b4b2bd8d3824e74ae07c12cd0415f211cac5 100644
--- a/module/Structure/src/Structure/Service/Structure/StructureService.php
+++ b/module/Structure/src/Structure/Service/Structure/StructureService.php
@@ -51,7 +51,7 @@ class StructureService
             ->addSelect('responsable')->leftJoin('structure.responsables', 'responsable')
             ->leftJoin('responsable.agent', 'rAgent')->addSelect('rAgent')
             ->addSelect('type')->leftjoin('structure.type', 'type')
-            ->andWhere('structure.deleted_on IS NULL')
+            ->andWhere('structure.deletedOn IS NULL')
             ->orderBy('structure.code');
         return $qb;
     }
@@ -106,7 +106,7 @@ class StructureService
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('structure.code = :code')->setParameter('code', $code)
-            ->andWhere('structure.deleted_on IS NULL');
+            ->andWhere('structure.deletedOn IS NULL');
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
@@ -125,7 +125,7 @@ class StructureService
             ->andWhere('LOWER(structure.libelleLong) like :search OR LOWER(structure.libelleCourt) like :search')
             ->setParameter('search', '%' . strtolower($term) . '%')
             ->andWhere('structure.fermeture IS NULL');
-        if (!$histo) $qb = $qb->andWhere('structure.deleted_on IS NULL');
+        if (!$histo) $qb = $qb->andWhere('structure.deletedOn IS NULL');
 
         if ($structures !== null) {
             $qb = $qb->andWhere('structure IN (:structures)')
@@ -146,7 +146,7 @@ class StructureService
             ->andWhere('structure.parent = :structure')
             ->setParameter('structure', $structure)
             ->orderBy('structure.code')
-            ->andWhere("structure.deleted_on IS NULL");
+            ->andWhere("structure.deletedOn IS NULL");
         if ($ouverte) $qb = $qb->andWhere("structure.fermeture IS NULL");
         $result = $qb->getQuery()->getResult();
 
@@ -239,6 +239,25 @@ EOS;
         return $options;
     }
 
+    /**
+     * @param Structure[] $structures
+     * @return Agent[]
+     */
+    public function getAgentsForcesByStructures(array $structures): array
+    {
+        $qb = $this->getObjectManager()->getRepository(Agent::class)->createQueryBuilder('agent')
+            ->addSelect('forcage')->join('agent.structuresForcees', 'forcage')
+            ->andWhere('forcage.histoDestruction IS NULL');
+
+        if (!empty(null)) {
+            $qb = $qb->andWhere('forcage.structure IN (:structures)')
+                ->setParameter('structures', $structures);
+        }
+        $result = $qb->getQuery()->getResult();
+
+        return $result;
+    }
+
     /**
      * @return User[]
      */
@@ -453,7 +472,7 @@ EOS;
             ->setParameter('N', 'N')
             ->andWhere('affectation.dateDebut <= :currentdate')
             ->andWhere('affectation.dateFin IS NULL OR affectation.dateFin >= :currentdate')
-            ->andWhere('affectation.deleted_on IS NULL')
+            ->andWhere('affectation.deletedOn IS NULL')
             ->setParameter('currentdate', $date)//            ->orderBy('agent.nomUsuel, agent.prenom')
         ;
 
@@ -485,7 +504,7 @@ EOS;
 //            ->join('responsable.source', 'source')->addSelect('source')
             ->join('responsable.agent', 'agent')->addSelect('agent')
             ->andWhere('responsable.structure = :structure')->setParameter('structure', $structure)
-            ->andWhere('responsable.deleted_on IS NULL')
+            ->andWhere('responsable.deletedOn IS NULL')
             ->orderBy('agent.nomUsuel, agent.prenom');
         if ($date !== null) $qb = StructureResponsable::decorateWithActif($qb, 'responsable', $date);
 
@@ -549,66 +568,4 @@ EOS;
         return $result;
     }
 
-    /** FACADE ********************************************************************************************************/
-
-    public function trierAgents(array $agents): array
-    {
-        $conserver = [];
-        $retirer = [];
-        $raison = [];
-
-        $now = new DateTime();
-
-        /** @var Agent $agent */
-        foreach ($agents as $agent) {
-            $raison[$agent->getId()] = "<ul>";
-
-            $kept = true;
-
-            if (!$agent->isValideEmploiType(
-                $this->getParametreService()->getParametreByCode(StructureParametres::TYPE, StructureParametres::AGENT_TEMOIN_EMPLOITYPE),
-                $now))
-            {
-                $kept = false;
-                $raison[$agent->getId()] .= "<li>Emploi-type invalide</li>";
-            }
-            if (!$agent->isValideStatut(
-                $this->getParametreService()->getParametreByCode(StructureParametres::TYPE, StructureParametres::AGENT_TEMOIN_STATUT),
-                $now))
-            {
-                $kept = false;
-                $raison[$agent->getId()] .= "<li>Statut invalide</li>";
-
-            }
-            if (!$agent->isValideAffectation(
-                $this->getParametreService()->getParametreByCode(StructureParametres::TYPE, StructureParametres::AGENT_TEMOIN_AFFECTATION),
-                $now))
-            {
-                $kept = false;
-                $raison[$agent->getId()] .= "<li>Affectation invalide</li>";
-            }
-            if (!$agent->isValideGrade(
-                $this->getParametreService()->getParametreByCode(StructureParametres::TYPE, StructureParametres::AGENT_TEMOIN_GRADE),
-                $now))
-            {
-                $kept = false;
-                $raison[$agent->getId()] .= "<li>Grade invalide</li>";
-            }
-            if (!$agent->isValideCorps(
-                $this->getParametreService()->getParametreByCode(StructureParametres::TYPE, StructureParametres::AGENT_TEMOIN_CORPS),
-                $now))
-            {
-                $kept = false;
-                $raison[$agent->getId()] .= "<li>Corps invalide</li>";
-            }
-
-            if ($kept) $conserver[$agent->getId()] = $agent; else $retirer[$agent->getId()] = $agent;
-            $raison[$agent->getId()] .= "</ul>";
-        }
-        return [$conserver, $retirer, $raison];
-    }
-
-    public function isObservateurS(array $getStructures, Agent $inscrit)
-    {
-    }
 }
diff --git a/module/Structure/src/Structure/Service/StructureAgentForce/StructureAgentForceService.php b/module/Structure/src/Structure/Service/StructureAgentForce/StructureAgentForceService.php
index 7833a51afb98fcee3efa58af9b14f9cf316483a1..2a616301201e6066c4e054321ab448433903876b 100644
--- a/module/Structure/src/Structure/Service/StructureAgentForce/StructureAgentForceService.php
+++ b/module/Structure/src/Structure/Service/StructureAgentForce/StructureAgentForceService.php
@@ -3,76 +3,44 @@
 namespace Structure\Service\StructureAgentForce;
 
 use Agent\Entity\Db\Agent;
-use Doctrine\ORM\Exception\ORMException;
 use Doctrine\ORM\NonUniqueResultException;
 use Doctrine\ORM\QueryBuilder;
+use DoctrineModule\Persistence\ProvidesObjectManager;
 use Laminas\Mvc\Controller\AbstractActionController;
 use Structure\Entity\Db\Structure;
 use Structure\Entity\Db\StructureAgentForce;
 use UnicaenApp\Exception\RuntimeException;
-use UnicaenApp\Service\EntityManagerAwareTrait;
 
-class StructureAgentForceService {
-    use EntityManagerAwareTrait;
+class StructureAgentForceService
+{
+    use ProvidesObjectManager;
 
     /** GESTION DES ENTITES *******************************************************************************************/
 
-    /**
-     * @param StructureAgentForce $structureAgentForce
-     * @return StructureAgentForce
-     */
-    public function create(StructureAgentForce $structureAgentForce) : StructureAgentForce
+    public function create(StructureAgentForce $structureAgentForce): StructureAgentForce
     {
-        try {
-            $this->getEntityManager()->persist($structureAgentForce);
-            $this->getEntityManager()->flush($structureAgentForce);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->persist($structureAgentForce);
+        $this->getObjectManager()->flush($structureAgentForce);
         return $structureAgentForce;
     }
 
-    /**
-     * @param StructureAgentForce $structureAgentForce
-     * @return StructureAgentForce
-     */
-    public function upgrade(StructureAgentForce $structureAgentForce) : StructureAgentForce
+    public function update(StructureAgentForce $structureAgentForce): StructureAgentForce
     {
-        try {
-            $this->getEntityManager()->flush($structureAgentForce);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->flush($structureAgentForce);
         return $structureAgentForce;
     }
 
-    /**
-     * @param StructureAgentForce $structureAgentForce
-     * @return StructureAgentForce
-     */
-    public function historise(StructureAgentForce $structureAgentForce) : StructureAgentForce
+    public function historise(StructureAgentForce $structureAgentForce): StructureAgentForce
     {
-        try {
-            $structureAgentForce->historiser();
-            $this->getEntityManager()->flush($structureAgentForce);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $structureAgentForce->historiser();
+        $this->getObjectManager()->flush($structureAgentForce);
         return $structureAgentForce;
     }
 
-    /**
-     * @param StructureAgentForce $structureAgentForce
-     * @return StructureAgentForce
-     */
-    public function restore(StructureAgentForce $structureAgentForce) : StructureAgentForce
+    public function restore(StructureAgentForce $structureAgentForce): StructureAgentForce
     {
-        try {
-            $structureAgentForce->dehistoriser();
-            $this->getEntityManager()->flush($structureAgentForce);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $structureAgentForce->dehistoriser();
+        $this->getObjectManager()->flush($structureAgentForce);
         return $structureAgentForce;
     }
 
@@ -80,28 +48,20 @@ class StructureAgentForceService {
      * @param StructureAgentForce $structureAgentForce
      * @return StructureAgentForce
      */
-    public function delete(StructureAgentForce $structureAgentForce) : StructureAgentForce
+    public function delete(StructureAgentForce $structureAgentForce): StructureAgentForce
     {
-        try {
-            $this->getEntityManager()->remove($structureAgentForce);
-            $this->getEntityManager()->flush($structureAgentForce);
-        } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
-        }
+        $this->getObjectManager()->remove($structureAgentForce);
+        $this->getObjectManager()->flush($structureAgentForce);
         return $structureAgentForce;
     }
 
     /** REQUETAGE *****************************************************************************************************/
 
-    /**
-     * @return QueryBuilder
-     */
-    public function createQueryBuilder() : QueryBuilder
+    public function createQueryBuilder(): QueryBuilder
     {
-        $qb = $this->getEntityManager()->getRepository(StructureAgentForce::class)->createQueryBuilder('force')
+        $qb = $this->getObjectManager()->getRepository(StructureAgentForce::class)->createQueryBuilder('force')
             ->addSelect('agent')->join('force.agent', 'agent')
-            ->addSelect('structure')->join('force.structure', 'structure')
-        ;
+            ->addSelect('structure')->join('force.structure', 'structure');
         return $qb;
     }
 
@@ -109,16 +69,15 @@ class StructureAgentForceService {
      * @param int $id
      * @return StructureAgentForce|null
      */
-    public function getStructureAgentForce(int $id) : ?StructureAgentForce
+    public function getStructureAgentForce(int $id): ?StructureAgentForce
     {
-       $qb = $this->createQueryBuilder()
+        $qb = $this->createQueryBuilder()
             ->andWhere('force.id = :id')
-            ->setParameter('id', $id)
-       ;
+            ->setParameter('id', $id);
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
-            throw new RuntimeException("Plusieurs StructureAgentForce partagent le même id [".$id."]");
+            throw new RuntimeException("Plusieurs StructureAgentForce partagent le même id [" . $id . "]");
         }
         return $result;
     }
@@ -128,7 +87,7 @@ class StructureAgentForceService {
      * @param string $param
      * @return StructureAgentForce|null
      */
-    public function getRequestedStructureAgentForce(AbstractActionController $controller, string $param="structure-agent-force") : ?StructureAgentForce
+    public function getRequestedStructureAgentForce(AbstractActionController $controller, string $param = "structure-agent-force"): ?StructureAgentForce
     {
         $id = $controller->params()->fromRoute($param);
         $result = $this->getStructureAgentForce($id);
@@ -140,19 +99,18 @@ class StructureAgentForceService {
      * @param Agent|null $agent
      * @return StructureAgentForce
      */
-    public function getStructureAgentForceByStructureAndAgent(?Structure $structure, ?Agent $agent) : ?StructureAgentForce
+    public function getStructureAgentForceByStructureAndAgent(?Structure $structure, ?Agent $agent): ?StructureAgentForce
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('force.agent = :agent')
             ->andWhere('force.structure = :structure')
             ->andWhere('force.histoDestruction IS NULL')
             ->setParameter('agent', $agent)
-            ->setParameter('structure', $structure)
-        ;
+            ->setParameter('structure', $structure);
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
-            throw new RuntimeException("Plusieurs StructureAgentForce partagent le même agent [".$agent->getId()."] et la même structure [".$structure->getId()."].");
+            throw new RuntimeException("Plusieurs StructureAgentForce partagent le même agent [" . $agent->getId() . "] et la même structure [" . $structure->getId() . "].");
         }
         return $result;
     }
@@ -165,8 +123,7 @@ class StructureAgentForceService {
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('force.structure in (:structures)')->setParameter('structures', $structures)
-            ->andWhere('force.histoDestruction IS NULL')
-        ;
+            ->andWhere('force.histoDestruction IS NULL');
 
         $result = $qb->getQuery()->getResult();
         return $result;
diff --git a/module/Structure/src/Structure/Service/StructureAgentForce/StructureAgentForceServiceFactory.php b/module/Structure/src/Structure/Service/StructureAgentForce/StructureAgentForceServiceFactory.php
index d5712b8de6ea719d229ac48fdcf60d7bedae7492..1da4306271140ff3e89858606cfc1cf925efaf50 100644
--- a/module/Structure/src/Structure/Service/StructureAgentForce/StructureAgentForceServiceFactory.php
+++ b/module/Structure/src/Structure/Service/StructureAgentForce/StructureAgentForceServiceFactory.php
@@ -5,13 +5,10 @@ namespace Structure\Service\StructureAgentForce;
 use Doctrine\ORM\EntityManager;
 use Interop\Container\ContainerInterface;
 
-class StructureAgentForceServiceFactory {
+class StructureAgentForceServiceFactory
+{
 
-    /**
-     * @param ContainerInterface $container
-     * @return StructureAgentForceService
-     */
-    public function __invoke(ContainerInterface $container)
+    public function __invoke(ContainerInterface $container): StructureAgentForceService
     {
         /**
          * @var EntityManager $entityManager
@@ -19,7 +16,7 @@ class StructureAgentForceServiceFactory {
         $entityManager = $container->get('doctrine.entitymanager.orm_default');
 
         $service = new StructureAgentForceService();
-        $service->setEntityManager($entityManager);
+        $service->setObjectManager($entityManager);
         return $service;
     }
 }
\ No newline at end of file
diff --git a/module/Structure/src/Structure/Service/StructureGestionnaire/StructureGestionnaireService.php b/module/Structure/src/Structure/Service/StructureGestionnaire/StructureGestionnaireService.php
new file mode 100644
index 0000000000000000000000000000000000000000..c216e6160ae70dc09894c02e4fb2dcbc575c8c29
--- /dev/null
+++ b/module/Structure/src/Structure/Service/StructureGestionnaire/StructureGestionnaireService.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace Structure\Service\StructureGestionnaire;
+
+use Agent\Entity\Db\Agent;
+use Application\Entity\Db\Interfaces\HasPeriodeInterface;
+use DateTime;
+use Doctrine\ORM\QueryBuilder;
+use DoctrineModule\Persistence\ProvidesObjectManager;
+use Structure\Entity\Db\StructureGestionnaire;
+use Structure\Entity\Db\StructureResponsable;
+
+class StructureGestionnaireService {
+    use ProvidesObjectManager;
+
+    /** Entité synchronisée */
+
+    /** REQUETAGE ********************************************************************************************/
+
+    public function createQueryBuilder(): QueryBuilder
+    {
+        $qb = $this->getObjectManager()->getRepository(StructureGestionnaire::class)->createQueryBuilder('structuregestionnaire')
+            ->join('structuregestionnaire.structure', 'structure')->addSelect('structure')
+            ->join('structuregestionnaire.agent', 'agent')->addSelect('agent')
+            ->andWhere('structuregestionnaire.deletedOn IS NULL')
+        ;
+        return $qb;
+    }
+
+    public function getStructuresGestionnairesByAgent(?Agent $agent, ?DateTime $date = null): ?array
+    {
+        if ($agent === null) return null;
+
+        $qb = $this->createQueryBuilder()
+            ->andWhere('structuregestionnaire.agent = :agent')->setParameter('agent', $agent);
+        if ($date !== null) $qb = StructureResponsable::decorateWithActif($qb, 'structuregestionnaire', $date);
+
+        $result = $qb->getQuery()->getResult();
+        return $result;
+    }
+}
\ No newline at end of file
diff --git a/module/Structure/src/Structure/Service/StructureGestionnaire/StructureGestionnaireServiceAwareTrait.php b/module/Structure/src/Structure/Service/StructureGestionnaire/StructureGestionnaireServiceAwareTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..a7deb1499ed3d50dcecf9032c20396aa08d7079b
--- /dev/null
+++ b/module/Structure/src/Structure/Service/StructureGestionnaire/StructureGestionnaireServiceAwareTrait.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace Structure\Service\StructureGestionnaire;
+
+trait StructureGestionnaireServiceAwareTrait
+{
+    private StructureGestionnaireService $structureGestionnaireService;
+
+    public function getStructureGestionnaireService(): StructureGestionnaireService
+    {
+        return $this->structureGestionnaireService;
+    }
+
+    public function setStructureGestionnaireService(StructureGestionnaireService $structureGestionnaireService): void
+    {
+        $this->structureGestionnaireService = $structureGestionnaireService;
+    }
+
+}
\ No newline at end of file
diff --git a/module/Structure/src/Structure/Service/StructureGestionnaire/StructureGestionnaireServiceFactory.php b/module/Structure/src/Structure/Service/StructureGestionnaire/StructureGestionnaireServiceFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..4f50ae7a33a7da6c96709ce8f0fcd09ddef88009
--- /dev/null
+++ b/module/Structure/src/Structure/Service/StructureGestionnaire/StructureGestionnaireServiceFactory.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Structure\Service\StructureGestionnaire;
+
+use Doctrine\ORM\EntityManager;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\ContainerInterface;
+use Psr\Container\NotFoundExceptionInterface;
+
+class StructureGestionnaireServiceFactory
+{
+    /**
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
+    public function __invoke(ContainerInterface $container): StructureGestionnaireService
+    {
+        /** @var EntityManager $entityManager */
+        $entityManager = $container->get('doctrine.entitymanager.orm_default');
+
+        $service = new StructureGestionnaireService();
+        $service->setObjectManager($entityManager);
+        return $service;
+    }
+}
\ No newline at end of file
diff --git a/module/Structure/src/Structure/Service/StructureResponsable/StructureResponsableService.php b/module/Structure/src/Structure/Service/StructureResponsable/StructureResponsableService.php
new file mode 100644
index 0000000000000000000000000000000000000000..00fb736de7e86d9a2e2a4183c684f89429079b09
--- /dev/null
+++ b/module/Structure/src/Structure/Service/StructureResponsable/StructureResponsableService.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace Structure\Service\StructureResponsable;
+
+use Agent\Entity\Db\Agent;
+use Application\Entity\Db\Interfaces\HasPeriodeInterface;
+use DateTime;
+use Doctrine\ORM\QueryBuilder;
+use DoctrineModule\Persistence\ProvidesObjectManager;
+use Structure\Entity\Db\StructureResponsable;
+
+class StructureResponsableService {
+    use ProvidesObjectManager;
+
+    /** Entité synchronisée */
+
+    /** REQUETAGE ********************************************************************************************/
+
+    public function createQueryBuilder(): QueryBuilder
+    {
+        $qb = $this->getObjectManager()->getRepository(StructureResponsable::class)->createQueryBuilder('structureresponsable')
+            ->join('structureresponsable.structure', 'structure')->addSelect('structure')
+            ->join('structureresponsable.agent', 'agent')->addSelect('agent')
+            ->andWhere('structureresponsable.deletedOn IS NULL')
+        ;
+        return $qb;
+    }
+
+    public function getStructuresResponsablesByAgent(?Agent $agent, ?DateTime $date = null): ?array
+    {
+        if ($agent === null) return null;
+
+        $qb = $this->createQueryBuilder()
+            ->andWhere('structureresponsable.agent = :agent')->setParameter('agent', $agent);
+        if ($date !== null) $qb = StructureResponsable::decorateWithActif($qb, 'structureresponsable', $date);
+
+        $result = $qb->getQuery()->getResult();
+        return $result;
+    }
+}
\ No newline at end of file
diff --git a/module/Structure/src/Structure/Service/StructureResponsable/StructureResponsableServiceAwareTrait.php b/module/Structure/src/Structure/Service/StructureResponsable/StructureResponsableServiceAwareTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..a745aae5807284d6ef58089d9c2d041f24bac35e
--- /dev/null
+++ b/module/Structure/src/Structure/Service/StructureResponsable/StructureResponsableServiceAwareTrait.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace Structure\Service\StructureResponsable;
+
+trait StructureResponsableServiceAwareTrait
+{
+    private StructureResponsableService $structureResponsableService;
+
+    public function getStructureResponsableService(): StructureResponsableService
+    {
+        return $this->structureResponsableService;
+    }
+
+    public function setStructureResponsableService(StructureResponsableService $structureResponsableService): void
+    {
+        $this->structureResponsableService = $structureResponsableService;
+    }
+
+}
\ No newline at end of file
diff --git a/module/Structure/src/Structure/Service/StructureResponsable/StructureResponsableServiceFactory.php b/module/Structure/src/Structure/Service/StructureResponsable/StructureResponsableServiceFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..5b74c6c2686caf1439273283c958da429f31553a
--- /dev/null
+++ b/module/Structure/src/Structure/Service/StructureResponsable/StructureResponsableServiceFactory.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Structure\Service\StructureResponsable;
+
+use Doctrine\ORM\EntityManager;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\ContainerInterface;
+use Psr\Container\NotFoundExceptionInterface;
+
+class StructureResponsableServiceFactory
+{
+    /**
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
+    public function __invoke(ContainerInterface $container): StructureResponsableService
+    {
+        /** @var EntityManager $entityManager */
+        $entityManager = $container->get('doctrine.entitymanager.orm_default');
+
+        $service = new StructureResponsableService();
+        $service->setObjectManager($entityManager);
+        return $service;
+    }
+}
\ No newline at end of file
diff --git a/module/Structure/src/Structure/Service/Type/TypeService.php b/module/Structure/src/Structure/Service/Type/TypeService.php
index 03d4d2ff95f6979d3556f4437d456284fa7bffe4..d1fc43bd2a4678e16dbeab9335d539d0f5d1adfc 100644
--- a/module/Structure/src/Structure/Service/Type/TypeService.php
+++ b/module/Structure/src/Structure/Service/Type/TypeService.php
@@ -2,77 +2,57 @@
 
 namespace Structure\Service\Type;
 
-use Doctrine\ORM\Exception\ORMException;
-use RuntimeException;
+use DoctrineModule\Persistence\ProvidesObjectManager;
 use Structure\Entity\Db\StructureType;
-use UnicaenApp\Service\EntityManagerAwareTrait;
 
-class TypeService {
-    use EntityManagerAwareTrait;
+class TypeService
+{
+    use ProvidesObjectManager;
 
     /** GESTION DES ENTITES ************************************************/
 
-    public function create(StructureType $type) : StructureType
+    public function create(StructureType $type): StructureType
     {
-        try {
-            $this->getEntityManager()->persist($type);
-            $this->getEntityManager()->flush($type);
-        } catch(ORMException $e) {
-            throw new RuntimeException("Un problème est survenue en base de donnée.",0,$e);
-        }
+        $this->getObjectManager()->persist($type);
+        $this->getObjectManager()->flush($type);
         return $type;
     }
 
-    public function update(StructureType $type) : StructureType
+    public function update(StructureType $type): StructureType
     {
-        try {
-            $this->getEntityManager()->flush($type);
-        } catch(ORMException $e) {
-            throw new RuntimeException("Un problème est survenue en base de donnée.",0,$e);
-        }
+        $this->getObjectManager()->flush($type);
         return $type;
     }
 
-    public function historise(StructureType $type) : StructureType
+    public function historise(StructureType $type): StructureType
     {
-        try {
-            $type->historise();
-            $this->getEntityManager()->flush($type);
-        } catch(ORMException $e) {
-            throw new RuntimeException("Un problème est survenue en base de donnée.",0,$e);
-        }
+        $type->historise();
+        $this->getObjectManager()->flush($type);
         return $type;
     }
 
-    public function restore(StructureType $type) : StructureType
+    public function restore(StructureType $type): StructureType
     {
-        try {
-            $type->dehistorise();
-            $this->getEntityManager()->flush($type);
-        } catch(ORMException $e) {
-            throw new RuntimeException("Un problème est survenue en base de donnée.",0,$e);
-        }
+        $type->dehistorise();
+        $this->getObjectManager()->flush($type);
         return $type;
     }
 
-    public function delete(StructureType $type) : StructureType
+    public function delete(StructureType $type): StructureType
     {
-        try {
-            $this->getEntityManager()->remove($type);
-            $this->getEntityManager()->flush($type);
-        } catch(ORMException $e) {
-            throw new RuntimeException("Un problème est survenue en base de donnée.",0,$e);
-        }
+        $this->getObjectManager()->remove($type);
+        $this->getObjectManager()->flush($type);
         return $type;
     }
 
     /** QUERYING ******************************************************************/
 
     /** @return StructureType[] */
-    public function getTypes() : array
+    public function getTypes(): array
     {
-        $result = $this->getEntityManager()->getRepository(StructureType::class)->findAll();
-        $types = []; foreach ($result as $item) $types[$item->getId()] = $item;
+        $result = $this->getObjectManager()->getRepository(StructureType::class)->findAll();
+        $types = [];
+        foreach ($result as $item) $types[$item->getId()] = $item;
         return $types;
     }
 
diff --git a/module/Structure/src/Structure/Service/Type/TypeServiceFactory.php b/module/Structure/src/Structure/Service/Type/TypeServiceFactory.php
index 70466dab7d57b682f80e3a985eb3905bf8200bf9..0670b8ddfa7e7130736c03965e2acc0e1d2394b8 100644
--- a/module/Structure/src/Structure/Service/Type/TypeServiceFactory.php
+++ b/module/Structure/src/Structure/Service/Type/TypeServiceFactory.php
@@ -3,17 +3,24 @@
 namespace Structure\Service\Type;
 
 use Doctrine\ORM\EntityManager;
+use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\ContainerInterface;
+use Psr\Container\NotFoundExceptionInterface;
 
-class TypeServiceFactory {
+class TypeServiceFactory
+{
 
-    public function __invoke(ContainerInterface $container) : TypeService
+    /**
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
+    public function __invoke(ContainerInterface $container): TypeService
     {
         /** @var EntityManager $entityManager */
         $entityManager = $container->get('doctrine.entitymanager.orm_default');
 
         $service = new TypeService();
-        $service->setEntityManager($entityManager);
+        $service->setObjectManager($entityManager);
         return $service;
     }
 }
\ No newline at end of file
diff --git a/module/Structure/view/structure/structure/mes-structures.phtml b/module/Structure/view/structure/structure/mes-structures.phtml
index 2e50e5d3303f6af196e732fb4756be588ace6ab7..b70d89b35eb07ac282787af7c9e533e2c4c6bda8 100644
--- a/module/Structure/view/structure/structure/mes-structures.phtml
+++ b/module/Structure/view/structure/structure/mes-structures.phtml
@@ -4,6 +4,7 @@
  * @see \Structure\Controller\StructureController::mesStructuresAction()
  * @var Structure[] $structures
  * @var Agent[] $agents
+ * @var AgentValidateur[] $valideurs
  * @var Inscription[] $inscriptions
  * @var Inscription[] $inscriptionsEnAttente
  * @var DemandeExterne[] $demandes
@@ -11,6 +12,7 @@
  */
 
 use Agent\Entity\Db\Agent;
+use Agent\Entity\Db\AgentValidateur;
 use Agent\Provider\Privilege\AgentPrivileges;
 use DemandeExterne\Entity\Db\DemandeExterne;
 use DemandeExterne\Provider\Etat\DemandeExterneEtats;
@@ -190,13 +192,14 @@ $anneeCourante = (new DateTime())->format('Y');
                                     <?php endif; ?>
                                 <?php else: ?>
                                     <?php if ($enAttente) : ?>
-                                        <?php $validateurs = $inscription->getAgent()->getValidateurs(); ?>
+                                        <?php $validateurs = $valideurs[$inscription->getAgent()->getId()]; ?>
                                         <?php if (empty($validateurs)) : ?>
                                             <span class="text-danger">
                                                 <span class="icon icon-attention"></span>
                                                 Aucun·e validateur·trice pour cette demande
                                             </span>
                                         <?php else: ?>
+                                            XXX
                                             En attente de validation de :
                                             <ul>
                                                 <?php foreach ($validateurs as $validateur) : ?>
@@ -296,7 +299,10 @@ $anneeCourante = (new DateTime())->format('Y');
                             </div>
                             <div>
                                 <?php echo $demande->getLibelle(); ?> <br>
-                                <?php echo $demande->getPeriode(); ?>
+                                <?php echo $demande->getPeriode(); ?> <br>
+                                <small>
+                                    Demande créée le <?php echo $demande->getHistoCreation()->format('d/m/Y'); ?>
+                                </small>
                                 <?php if ($canAfficherDemande) : ?>
                                     <br>
                                     <?php /** @see DemandeExterneController::afficherAction() */ ?>
@@ -316,7 +322,7 @@ $anneeCourante = (new DateTime())->format('Y');
                             </div>
                             <div>
                                 <?php if ($enAttente) : ?>
-                                    <?php $validateurs = $inscription->getAgent()->getValidateurs(); ?>
+                                    <?php $validateurs = $valideurs[$demande->getAgent()->getId()]; ?>
                                     <?php if (empty($validateurs)) : ?>
                                         <span class="text-danger">
                                                 <span class="icon icon-attention"></span>
diff --git a/public/css/app.css b/public/css/app.css
index 16032285882f410ea3a476a3e4104e1fad477e17..ae5426511b46e8026389cf2935612554f002fca8 100644
--- a/public/css/app.css
+++ b/public/css/app.css
@@ -1,3 +1,8 @@
+/** Est utilisé pour échapper le titre qui chevauche la div **/
+.unistrap div#contenu-principal {
+    margin-top: 2rem !important;
+}
+
 *.unistrap table tbody tr:hover th,
 .unistrap table tbody tr:hover td {
     background: none;
diff --git a/readme.md b/readme.md
index 89fe76310cb53d234344f04486f2be91b9436de0..5b266ac2f5d97e7ee8e192c80bea9fa41f0c2d27 100644
--- a/readme.md
+++ b/readme.md
@@ -17,6 +17,20 @@ En tant qu'application open-source, elle est distribuée sous la licence CeCILL,
 
 # Changements 
 
+## 1.1.0 (XX/12/2024)
+
+* Ajustement du circuit de validation des demandes hors plan de formation
+* Ajout d'un complément de workflow de validation DRH pour les montants de formation importants
+* Ajout d'un complément de workflow de validation DGS pour les montants de formation très importants
+* Remise en place de l'import de chaine de validation via un CSV + interface associée
+* Ajout d'un menu de navigation rapide pour la page des plans de formation courants
+
+## 1.0.6 (09/12/2024)
+
+* Ajout d'un privilège pour le menu Extractions
+* Correction des comptages pour les inscrits au session
+* Correction des tris des sessions
+
 ## 1.0.5 (06/12/2024)
 
 * Transformation des émargements en un template