diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2f14f17f324f654f0d43a953a2d70199aa134fbb..6b830b0dfbce646512424b5b269f6e5479b311f9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,18 @@ Journal des modifications
 1.4.0 (??/01/2020)
 ------------------
 
+### Ajouts
+
+- La remise d'un exemplaire papier de la thèse n'est requise que si la diffusion est acceptée avec embargo ou refusée.
+- Inversion des étapes Diffusion et Attestations.
+- Modification des textes liés à l'autorisation de diffusion dans le formulaire et dans la convention PDF générée.
+- Convention de MEL : suppression du petit logo dans l'entête puisqu'il y en a déjà un sous le titre
+- Nouvelle charte de diffusion téléchargeable.
+- Ajout du flag "fermé" pour les structures et utilisations dans la recherche de thèses.
+- Ajout d'un champ "Id HAL" dans le formulaire d'autorisation de diffusion.
 - Ajout d'un menu dépôt pour séparer les action liés au dépôt de la partie annuaire
+- La couverture est maintenant recto/verso lorsque la premiere page n'est pas retirée
+- Ajout de la colonne durée des thèses dans l'export
 
 1.3.3 (18/12/2019)
 ------------------
diff --git a/config/autoload/version.global.php b/config/autoload/version.global.php
index 50a0d36e45a1ad8c567218e2ba547a3012ed4081..27f00e5102c3cee599d47900748e15af1f195629 100644
--- a/config/autoload/version.global.php
+++ b/config/autoload/version.global.php
@@ -2,9 +2,9 @@
 return [
     'unicaen-app' => [
         'app_infos' => [
-            'version' => '1.3.3',
-            'date' => '18/12/2019',
+            'version' => '1.4.0',
+            'date' => '15/01/2020',
         ],
     ],
-    'comment' => 'Fichier généré le 18/12/2019 à 11:49:34 avec /home/metivier/MyWeb/sygal/bump-version',
+    'comment' => 'Fichier généré le 15/01/2020 à 09:22:35 avec /home/gauthierb/workspace/sygal/bump-version',
 ];
diff --git a/doc/release-notes/1.4.0/01-schema-1.4.0.sql b/doc/release-notes/1.4.0/01-schema-1.4.0.sql
new file mode 100644
index 0000000000000000000000000000000000000000..e138f6bb3cc89d2b668afacde52452cbb37ae8b8
--- /dev/null
+++ b/doc/release-notes/1.4.0/01-schema-1.4.0.sql
@@ -0,0 +1,987 @@
+
+--
+-- Structure fermée
+--
+
+alter table STRUCTURE
+    add EST_FERME number(1) default 0 ;
+
+--
+-- Id HAL dans le formulaire de diffusion.
+--
+
+alter table DIFFUSION add HAL_ID varchar2(100) ;
+
+--
+-- La remise d'un exemplaire papier dépend de l'autorisation de diffusion.
+--
+
+alter table DIFFUSION add VERSION_CORRIGEE NUMBER(1) default 0 not null;
+alter table ATTESTATION modify EX_IMPR_CONFORM_VER_DEPO default null null;
+alter table ATTESTATION add VERSION_CORRIGEE NUMBER(1) default 0 not null;
+alter table RDV_BU modify EXEMPL_PAPIER_FOURNI default null null;
+
+create or replace view V_WF_ETAPE_PERTIN as
+select
+    to_number(these_id) these_id,
+    to_number(etape_id) etape_id,
+    code,
+    ordre,
+    rownum id
+from (
+         --
+         -- validation_page_de_couverture
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'VALIDATION_PAGE_DE_COUVERTURE'
+         where t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- depot_version_originale
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'DEPOT_VERSION_ORIGINALE'
+         where t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- autorisation_diffusion_these
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'AUTORISATION_DIFFUSION_THESE'
+         where t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- attestations
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'ATTESTATIONS'
+         where t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- signalement_these
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'SIGNALEMENT_THESE'
+         where t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- archivabilite_version_originale
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'ARCHIVABILITE_VERSION_ORIGINALE'
+         where t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- depot_version_archivage
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'DEPOT_VERSION_ARCHIVAGE'
+                  join v_situ_archivab_vo situ on situ.these_id = t.id and situ.est_valide = 0 -- VO non archivable
+         where t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- archivabilite_version_archivage
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'ARCHIVABILITE_VERSION_ARCHIVAGE'
+                  join v_situ_archivab_vo situ on situ.these_id = t.id and situ.est_valide = 0 -- VO non archivable
+         where t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- verification_version_archivage
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'VERIFICATION_VERSION_ARCHIVAGE'
+                  join v_situ_archivab_va situ on situ.these_id = t.id and situ.est_valide = 1 -- VA archivable
+         where t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- rdv_bu_saisie_doctorant
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'RDV_BU_SAISIE_DOCTORANT'
+         where t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- rdv_bu_saisie_bu
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'RDV_BU_SAISIE_BU'
+         where t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- rdv_bu_validation_bu
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'RDV_BU_VALIDATION_BU'
+         where t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+
+
+         union all
+
+
+
+         --
+         -- depot_version_originale_corrigee
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'DEPOT_VERSION_ORIGINALE_CORRIGEE'
+         where (t.correc_autorisee is not null or t.CORREC_AUTORISEE_FORCEE is not null) -- correction attendue
+           and t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- autorisation_diffusion_these_version_corrigee
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'AUTORISATION_DIFFUSION_THESE_VERSION_CORRIGEE'
+         where (t.correc_autorisee is not null or t.CORREC_AUTORISEE_FORCEE is not null) -- correction attendue
+           and t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- attestations_version_corrigee
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'ATTESTATIONS_VERSION_CORRIGEE'
+         where (t.correc_autorisee is not null or t.CORREC_AUTORISEE_FORCEE is not null) -- correction attendue
+           and t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- archivabilite_version_originale_corrigee
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'ARCHIVABILITE_VERSION_ORIGINALE_CORRIGEE'
+         where (t.correc_autorisee is not null or t.CORREC_AUTORISEE_FORCEE is not null) -- correction attendue
+           and t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- depot_version_archivage_corrigee
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'DEPOT_VERSION_ARCHIVAGE_CORRIGEE'
+                  join v_situ_archivab_voc situ on situ.these_id = t.id and situ.est_valide = 0 -- VOC non archivable
+         where (t.correc_autorisee is not null or t.CORREC_AUTORISEE_FORCEE is not null) -- correction attendue
+           and t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- archivabilite_version_archivage_corrigee
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'ARCHIVABILITE_VERSION_ARCHIVAGE_CORRIGEE'
+                  join v_situ_archivab_voc situ on situ.these_id = t.id and situ.est_valide = 0 -- VOC non archivable
+         where (t.correc_autorisee is not null or t.CORREC_AUTORISEE_FORCEE is not null) -- correction attendue
+           and t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- verification_version_archivage_corrigee
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'VERIFICATION_VERSION_ARCHIVAGE_CORRIGEE'
+                  join v_situ_archivab_vac situ on situ.these_id = t.id and situ.est_valide = 1 -- VAC archivable
+         where (t.correc_autorisee is not null or t.CORREC_AUTORISEE_FORCEE is not null) -- correction attendue
+           and t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- depot_version_corrigee_validation_doctorant
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'DEPOT_VERSION_CORRIGEE_VALIDATION_DOCTORANT'
+         where (t.correc_autorisee is not null or t.CORREC_AUTORISEE_FORCEE is not null) -- correction attendue
+           and t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- depot_version_corrigee_validation_directeur
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'DEPOT_VERSION_CORRIGEE_VALIDATION_DIRECTEUR'
+         where (t.correc_autorisee is not null or t.CORREC_AUTORISEE_FORCEE is not null) -- correction attendue
+           and t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+         union all
+
+         --
+         -- REMISE_EXEMPLAIRE_PAPIER_THESE_CORRIGEE
+         --
+         select
+             t.id as these_id,
+             e.id as etape_id,
+             e.code,
+             e.ordre
+         from these t
+                  join wf_etape e on e.code = 'REMISE_EXEMPLAIRE_PAPIER_THESE_CORRIGEE'
+                  join DIFFUSION d on d.VERSION_CORRIGEE = 1 and d.AUTORIS_MEL in (0/*Non*/, 1/*Oui+embargo*/) -- exemplaire papier requis
+         where (t.correc_autorisee is not null or t.CORREC_AUTORISEE_FORCEE is not null) -- correction attendue
+           and t.ETAT_THESE in ('E', 'S') -- thèses en cours ou soutenues
+
+     )
+;
+
+create or replace view V_WORKFLOW as
+SELECT
+    ROWNUM as id,
+    t.THESE_ID,
+    t.ETAPE_ID,
+    t.CODE,
+    t.ORDRE,
+    t.FRANCHIE,
+    t.RESULTAT,
+    t.OBJECTIF,
+    -- NB: dans les 3 lignes suivantes, c'est la même expression 'dense_rank() over(...)' qui est répétée :
+    (dense_rank() over(partition by t.THESE_ID, t.FRANCHIE order by t.ORDRE)) dense_rank,
+    case when t.FRANCHIE = 1 or (dense_rank() over(partition by t.THESE_ID, t.FRANCHIE order by t.ORDRE)) = 1 then 1 else 0 end atteignable,
+    case when (dense_rank() over(partition by t.THESE_ID, t.FRANCHIE order by t.ORDRE)) = 1 and t.FRANCHIE = 0 then 1 else 0 end courante
+FROM (
+
+         --
+         -- VALIDATION_PAGE_DE_COUVERTURE : franchie si version page de couverture validée
+         --
+         SELECT
+             t.id AS    these_id,
+             e.id AS    etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.valide IS NULL THEN 0 ELSE 1 END franchie,
+             CASE WHEN v.valide IS NULL THEN 0 ELSE 1 END resultat,
+             1 objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'VALIDATION_PAGE_DE_COUVERTURE'
+                  LEFT JOIN V_SITU_VALIDATION_PAGE_COUV v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- DEPOT_VERSION_ORIGINALE : franchie si version originale déposée
+         --
+         SELECT
+             t.id AS    these_id,
+             e.id AS    etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.fichier_id IS NULL
+                      THEN 0
+                  ELSE 1 END franchie,
+             CASE WHEN v.fichier_id IS NULL
+                      THEN 0
+                  ELSE 1 END resultat,
+             1          objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'DEPOT_VERSION_ORIGINALE'
+                  LEFT JOIN V_SITU_DEPOT_VO v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- AUTORISATION_DIFFUSION_THESE : franchie si données saisies
+         --
+         SELECT
+             t.id AS    these_id,
+             e.id AS    etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.diffusion_id IS NULL
+                      THEN 0
+                  ELSE 1 END franchie,
+             CASE WHEN v.diffusion_id IS NULL
+                      THEN 0
+                  ELSE 1 END resultat,
+             1          objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'AUTORISATION_DIFFUSION_THESE'
+                  LEFT JOIN V_SITU_AUTORIS_DIFF_THESE v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- ATTESTATIONS : franchie si données saisies
+         --
+         SELECT
+             t.id AS    these_id,
+             e.id AS    etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.attestation_id IS NULL THEN 0 ELSE 1 END franchie,
+             CASE WHEN v.attestation_id IS NULL THEN 0 ELSE 1 END resultat,
+             1          objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'ATTESTATIONS'
+                  LEFT JOIN V_SITU_ATTESTATIONS v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- SIGNALEMENT_THESE : franchie si données saisies
+         --
+         SELECT
+             t.id AS    these_id,
+             e.id AS    etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.description_id IS NULL
+                      THEN 0
+                  ELSE 1 END franchie,
+             CASE WHEN v.description_id IS NULL
+                      THEN 0
+                  ELSE 1 END resultat,
+             1          objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'SIGNALEMENT_THESE'
+                  LEFT JOIN V_SITU_SIGNALEMENT_THESE v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- ARCHIVABILITE_VERSION_ORIGINALE : franchie si l'archivabilité de la version originale a été testée
+         --
+         SELECT
+             t.id AS    these_id,
+             e.id AS    etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.THESE_ID IS NULL THEN 0 ELSE 1 END franchie,
+             -- CASE WHEN v.THESE_ID IS NULL THEN
+             --   0 -- test d'archivabilité inexistant
+             -- ELSE
+             --   CASE WHEN v.EST_VALIDE IS NULL THEN
+             --     1 -- test d'archivabilité existant mais résultat indéterminé (plantage)
+             --   ELSE
+             --     CASE WHEN v.EST_VALIDE = 1 THEN
+             --       1 -- test d'archivabilité réussi
+             --     ELSE
+             --       0 -- test d'archivabilité échoué
+             --     END
+             --   END
+             -- END franchie,
+             CASE WHEN v.EST_VALIDE IS NULL OR v.EST_VALIDE = 0 THEN 0 ELSE 1 END resultat,
+             1 objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'ARCHIVABILITE_VERSION_ORIGINALE'
+                  LEFT JOIN V_SITU_ARCHIVAB_VO v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- DEPOT_VERSION_ARCHIVAGE : franchie si version d'archivage déposée
+         --
+         SELECT
+             t.id AS    these_id,
+             e.id AS    etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.fichier_id IS NULL
+                      THEN 0
+                  ELSE 1 END franchie,
+             CASE WHEN v.fichier_id IS NULL
+                      THEN 0
+                  ELSE 1 END resultat,
+             1          objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'DEPOT_VERSION_ARCHIVAGE'
+                  LEFT JOIN V_SITU_DEPOT_VA v ON v.these_id = t.id
+                  LEFT JOIN fichier f ON f.id = v.fichier_id
+
+         UNION ALL
+
+         --
+         -- ARCHIVABILITE_VERSION_ARCHIVAGE : franchie si l'archivabilité de la version d'archivage a été testée
+         --
+         SELECT
+             t.id AS    these_id,
+             e.id AS    etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.EST_VALIDE IS NULL
+                      THEN 0
+                  ELSE 1 END franchie,
+             CASE WHEN v.EST_VALIDE IS NULL OR v.EST_VALIDE = 0
+                      THEN 0
+                  ELSE 1 END resultat,
+             1          objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'ARCHIVABILITE_VERSION_ARCHIVAGE'
+                  LEFT JOIN V_SITU_ARCHIVAB_VA v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- VERIFICATION_VERSION_ARCHIVAGE : franchie si vérification de la version originale effectuée (peu importe la réponse)
+         --
+         SELECT
+             t.id AS    these_id,
+             e.id AS    etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.EST_CONFORME IS NULL
+                      THEN 0
+                  ELSE 1 END franchie,
+             CASE WHEN v.EST_CONFORME IS NULL OR v.EST_CONFORME = 0
+                      THEN 0
+                  ELSE 1 END resultat,
+             1          objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'VERIFICATION_VERSION_ARCHIVAGE'
+                  LEFT JOIN V_SITU_VERIF_VA v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- RDV_BU_SAISIE_DOCTORANT : franchie si données doctorant saisies
+         --
+         SELECT
+             t.id AS                      these_id,
+             e.id AS                      etape_id,
+             e.code,
+             e.ORDRE,
+             coalesce(v.ok, 0)            franchie,
+             (CASE WHEN rdv.COORD_DOCTORANT IS NULL THEN 0 ELSE 1 END +
+              CASE WHEN rdv.DISPO_DOCTORANT IS NULL THEN 0 ELSE 1 END) resultat,
+             2                            objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'RDV_BU_SAISIE_DOCTORANT'
+                  LEFT JOIN V_SITU_RDV_BU_SAISIE_DOCT v ON v.these_id = t.id
+                  LEFT JOIN RDV_BU rdv ON rdv.THESE_ID = t.id
+
+         UNION ALL
+
+         --
+         -- RDV_BU_VALIDATION_BU : franchie si /*données BU saisies ET*/ une validation BU existe
+         --
+         SELECT
+             t.id AS               these_id,
+             e.id AS               etape_id,
+             e.code,
+             e.ORDRE,
+             /*coalesce(vs.ok, 0) **/ coalesce(v.valide, 0) franchie,
+             /*coalesce(vs.ok, 0) +*/ coalesce(v.valide, 0) resultat,
+             /*2*/1 objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'RDV_BU_VALIDATION_BU'
+             --LEFT JOIN V_SITU_RDV_BU_SAISIE_BU vs ON vs.these_id = t.id
+                  LEFT JOIN V_SITU_RDV_BU_VALIDATION_BU v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- DEPOT_VERSION_ORIGINALE_CORRIGEE : franchie si version originale corrigée déposée
+         --
+         SELECT
+             t.id AS    these_id,
+             e.id AS    etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.fichier_id IS NULL
+                      THEN 0
+                  ELSE 1 END franchie,
+             CASE WHEN v.fichier_id IS NULL
+                      THEN 0
+                  ELSE 1 END resultat,
+             1          objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'DEPOT_VERSION_ORIGINALE_CORRIGEE'
+                  LEFT JOIN V_SITU_DEPOT_VOC v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- AUTORISATION_DIFFUSION_THESE_VERSION_CORRIGEE : franchie si données saisies
+         --
+         SELECT
+             t.id AS these_id,
+             e.id AS etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.diffusion_id IS NULL THEN 0 ELSE 1 END franchie,
+             CASE WHEN v.diffusion_id IS NULL THEN 0 ELSE 1 END resultat,
+             1 objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'AUTORISATION_DIFFUSION_THESE_VERSION_CORRIGEE'
+                  LEFT JOIN V_SITU_AUTORIS_DIFF_THESE_VOC v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- ATTESTATIONS_VERSION_CORRIGEE : franchie si données saisies
+         --
+         SELECT
+             t.id AS these_id,
+             e.id AS etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.attestation_id IS NULL THEN 0 ELSE 1 END franchie,
+             CASE WHEN v.attestation_id IS NULL THEN 0 ELSE 1 END resultat,
+             1 objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'ATTESTATIONS_VERSION_CORRIGEE'
+                  LEFT JOIN V_SITU_ATTESTATIONS_VOC v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- ARCHIVABILITE_VERSION_ORIGINALE_CORRIGEE : franchie si l'archivabilité de la version originale corrigée a été testée
+         --
+         SELECT
+             t.id AS    these_id,
+             e.id AS    etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.THESE_ID IS NULL THEN 0 ELSE 1 END franchie,
+             CASE WHEN v.EST_VALIDE IS NULL OR v.EST_VALIDE = 0 THEN 0 ELSE 1 END resultat,
+             1 objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'ARCHIVABILITE_VERSION_ORIGINALE_CORRIGEE'
+                  LEFT JOIN V_SITU_ARCHIVAB_VOC v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- DEPOT_VERSION_ARCHIVAGE_CORRIGEE : franchie si version d'archivage corrigée déposée
+         --
+         SELECT
+             t.id AS    these_id,
+             e.id AS    etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.fichier_id IS NULL
+                      THEN 0
+                  ELSE 1 END franchie,
+             CASE WHEN v.fichier_id IS NULL
+                      THEN 0
+                  ELSE 1 END resultat,
+             1          objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'DEPOT_VERSION_ARCHIVAGE_CORRIGEE'
+                  LEFT JOIN V_SITU_DEPOT_VAC v ON v.these_id = t.id
+                  LEFT JOIN fichier f ON f.id = v.fichier_id
+
+         UNION ALL
+
+         --
+         -- ARCHIVABILITE_VERSION_ARCHIVAGE_CORRIGEE : franchie si la version d'archivage corrigée est archivable
+         --
+         SELECT
+             t.id AS    these_id,
+             e.id AS    etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.EST_VALIDE = 1 THEN 1 ELSE 0 END franchie,
+             CASE WHEN v.EST_VALIDE = 1 THEN 1 ELSE 0 END resultat,
+             1 objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'ARCHIVABILITE_VERSION_ARCHIVAGE_CORRIGEE'
+                  LEFT JOIN V_SITU_ARCHIVAB_VAC v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- VERIFICATION_VERSION_ARCHIVAGE_CORRIGEE : franchie si la version corrigée est certifiée conforme
+         --
+         SELECT
+             t.id AS    these_id,
+             e.id AS    etape_id,
+             e.code,
+             e.ORDRE,
+             CASE WHEN v.EST_CONFORME = 1 THEN 1 ELSE 0 END franchie,
+             CASE WHEN v.EST_CONFORME = 1 THEN 1 ELSE 0 END resultat,
+             1 objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'VERIFICATION_VERSION_ARCHIVAGE_CORRIGEE'
+                  LEFT JOIN V_SITU_VERIF_VAC v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- DEPOT_VERSION_CORRIGEE_VALIDATION_DOCTORANT : franchie si la validation attendue existe
+         --
+         SELECT
+             t.id AS               these_id,
+             e.id AS               etape_id,
+             e.code,
+             e.ORDRE,
+             coalesce(v.valide, 0) franchie,
+             coalesce(v.valide, 0) resultat,
+             1 objectif
+         FROM these t
+                  JOIN WF_ETAPE e ON e.code = 'DEPOT_VERSION_CORRIGEE_VALIDATION_DOCTORANT'
+                  LEFT JOIN V_SITU_DEPOT_VC_VALID_DOCT v ON v.these_id = t.id
+
+         UNION ALL
+
+         --
+         -- DEPOT_VERSION_CORRIGEE_VALIDATION_DIRECTEUR : franchie si toutes les validations attendues existent
+         --
+         select * from (
+                           WITH tmp AS (
+                               SELECT
+                                   these_id,
+                                   sum(valide)   AS resultat,
+                                   count(valide) AS objectif
+                               FROM V_SITU_DEPOT_VC_VALID_DIR
+                               GROUP BY these_id
+                           )
+                           SELECT
+                               t.id AS                 these_id,
+                               e.id AS                 etape_id,
+                               e.code,
+                               e.ORDRE,
+                               case when coalesce(v.resultat, 0) = v.objectif then 1 else 0 end franchie,
+                               coalesce(v.resultat, 0) resultat,
+                               v.objectif
+                           FROM these t
+                                    JOIN WF_ETAPE e ON e.code = 'DEPOT_VERSION_CORRIGEE_VALIDATION_DIRECTEUR'
+                                    LEFT JOIN tmp v ON v.these_id = t.id
+                       )
+
+         UNION ALL
+
+         --
+         -- REMISE_EXEMPLAIRE_PAPIER_THESE_CORRIGEE  : franchie pas pour le moment
+         --
+         select * from (
+                           WITH tmp_last AS (
+                               SELECT
+                                   THESE_ID as these_id,
+                                   count(THESE_ID) AS resultat
+                               FROM V_SITU_VERSION_PAPIER_CORRIGEE
+                               GROUP BY THESE_ID
+                           )
+                           SELECT
+                               t.id AS                 these_id,
+                               e.id AS                 etape_id,
+                               e.code,
+                               e.ORDRE,
+                               coalesce(tl.resultat, 0) franchie,
+                               0,
+                               1
+                           FROM these t
+                                    JOIN WF_ETAPE e ON e.code = 'REMISE_EXEMPLAIRE_PAPIER_THESE_CORRIGEE'
+                                    LEFT JOIN tmp_last tl ON tl.these_id = t.id
+                       )
+
+     ) t
+         JOIN V_WF_ETAPE_PERTIN v ON t.these_id = v.these_id AND t.etape_id = v.etape_id
+;
+
+create or replace view V_SITU_AUTORIS_DIFF_THESE as
+SELECT
+    d.these_id,
+    d.id AS diffusion_id
+FROM DIFFUSION d
+where d.VERSION_CORRIGEE = 0 and d.HISTO_DESTRUCTEUR_ID is null
+;
+
+create or replace view V_SITU_AUTORIS_DIFF_THESE_VOC as
+SELECT
+    d.these_id,
+    d.id AS diffusion_id
+FROM DIFFUSION d
+         -- NB: on se base sur l'existence d'une version corrigée et pas sur t.CORRECTION_AUTORISEE qui peut revenir à null
+         JOIN FICHIER_THESE ft ON ft.THESE_ID = d.THESE_ID AND EST_ANNEXE = 0 AND EST_EXPURGE = 0
+         JOIN FICHIER f ON ft.FICHIER_ID = f.id and f.HISTO_DESTRUCTION is null
+         JOIN VERSION_FICHIER v ON f.VERSION_FICHIER_ID = v.id AND v.CODE = 'VOC'
+where d.VERSION_CORRIGEE = 1 and d.HISTO_DESTRUCTEUR_ID is null
+;
+
+create or replace view V_SITU_ATTESTATIONS as
+SELECT
+    a.these_id,
+    a.id AS attestation_id
+FROM ATTESTATION a
+where a.VERSION_CORRIGEE = 0 and a.HISTO_DESTRUCTEUR_ID is null
+;
+
+create or replace view V_SITU_ATTESTATIONS_VOC as
+SELECT
+    a.these_id,
+    a.id AS attestation_id
+FROM ATTESTATION a
+         -- NB: on se base sur l'existence d'une version corrigée et pas sur t.CORRECTION_AUTORISEE qui peut revenir à null
+         JOIN FICHIER_THESE ft ON ft.THESE_ID = a.THESE_ID AND EST_ANNEXE = 0 AND EST_EXPURGE = 0
+         JOIN FICHIER f ON ft.FICHIER_ID = f.id and f.HISTO_DESTRUCTION is null
+         JOIN VERSION_FICHIER v ON f.VERSION_FICHIER_ID = v.id AND v.CODE = 'VOC'
+where a.VERSION_CORRIGEE = 1 and a.HISTO_DESTRUCTEUR_ID is null
+;
+
+
+
+--
+-- Ajout des dates d'abandon et de transfert.
+--
+
+alter table TMP_THESE
+    add DAT_ABANDON date
+/
+alter table TMP_THESE
+    add DAT_TRANSFERT_DEP date
+/
+alter table THESE
+    add DATE_ABANDON date
+/
+alter table THESE
+    add DATE_TRANSFERT date
+/
+
+create or replace view SRC_THESE as
+select
+    null                            as id,
+    tmp.source_code                 as source_code,
+    src.id                          as source_id,
+    e.id                            as etablissement_id,
+    d.id                            as doctorant_id,
+    coalesce(ed_substit.id, ed.id)  as ecole_doct_id,
+    coalesce(ur_substit.id, ur.id)  as unite_rech_id,
+    ed.id                           as ecole_doct_id_orig,
+    ur.id                           as unite_rech_id_orig,
+    tmp.lib_ths                     as titre,
+    tmp.eta_ths                     as etat_these,
+    to_number(tmp.cod_neg_tre)      as resultat,
+    tmp.lib_int1_dis                as lib_disc,
+    tmp.dat_deb_ths                 as date_prem_insc,
+    tmp.ANNEE_UNIV_1ERE_INSC        as annee_univ_1ere_insc, -- deprecated
+    tmp.dat_prev_sou                as date_prev_soutenance,
+    tmp.dat_sou_ths                 as date_soutenance,
+    tmp.dat_fin_cfd_ths             as date_fin_confid,
+    tmp.lib_etab_cotut              as lib_etab_cotut,
+    tmp.lib_pays_cotut              as lib_pays_cotut,
+    tmp.correction_possible         as correc_autorisee,
+    tem_sou_aut_ths                 as soutenance_autoris,
+    dat_aut_sou_ths                 as date_autoris_soutenance,
+    tem_avenant_cotut               as tem_avenant_cotut,
+    dat_abandon                     as date_abandon,
+    dat_transfert_dep               as date_transfert
+from tmp_these tmp
+         JOIN STRUCTURE s ON s.SOURCE_CODE = tmp.ETABLISSEMENT_ID
+         join etablissement e on e.structure_id = s.id
+         join source src on src.code = tmp.source_id
+         join doctorant d on d.source_code = tmp.doctorant_id
+         left join ecole_doct ed on ed.source_code = tmp.ecole_doct_id
+         left join unite_rech ur on ur.source_code = tmp.unite_rech_id
+         left join structure_substit ss_ed on ss_ed.from_structure_id = ed.structure_id
+         left join ecole_doct ed_substit on ed_substit.structure_id = ss_ed.to_structure_id
+         left join structure_substit ss_ur on ss_ur.from_structure_id = ur.structure_id
+         left join unite_rech ur_substit on ur_substit.structure_id = ss_ur.to_structure_id
+/
+
+create or replace view V_DIFF_THESE as
+select diff."ID",diff."SOURCE_ID",diff."SOURCE_CODE",diff."IMPORT_ACTION",diff."ANNEE_UNIV_1ERE_INSC",diff."CORREC_AUTORISEE",diff."DATE_ABANDON",diff."DATE_AUTORIS_SOUTENANCE",diff."DATE_FIN_CONFID",diff."DATE_PREM_INSC",diff."DATE_PREV_SOUTENANCE",diff."DATE_SOUTENANCE",diff."DATE_TRANSFERT",diff."DOCTORANT_ID",diff."ECOLE_DOCT_ID",diff."ETABLISSEMENT_ID",diff."ETAT_THESE",diff."LIB_DISC",diff."LIB_ETAB_COTUT",diff."LIB_PAYS_COTUT",diff."RESULTAT",diff."SOUTENANCE_AUTORIS",diff."TEM_AVENANT_COTUT",diff."TITRE",diff."UNITE_RECH_ID",diff."U_ANNEE_UNIV_1ERE_INSC",diff."U_CORREC_AUTORISEE",diff."U_DATE_ABANDON",diff."U_DATE_AUTORIS_SOUTENANCE",diff."U_DATE_FIN_CONFID",diff."U_DATE_PREM_INSC",diff."U_DATE_PREV_SOUTENANCE",diff."U_DATE_SOUTENANCE",diff."U_DATE_TRANSFERT",diff."U_DOCTORANT_ID",diff."U_ECOLE_DOCT_ID",diff."U_ETABLISSEMENT_ID",diff."U_ETAT_THESE",diff."U_LIB_DISC",diff."U_LIB_ETAB_COTUT",diff."U_LIB_PAYS_COTUT",diff."U_RESULTAT",diff."U_SOUTENANCE_AUTORIS",diff."U_TEM_AVENANT_COTUT",diff."U_TITRE",diff."U_UNITE_RECH_ID" from (SELECT
+  COALESCE( D.id, S.id ) id,
+  COALESCE( S.source_id, D.source_id ) source_id,
+  COALESCE( S.source_code, D.source_code ) source_code,
+CASE
+    WHEN S.source_code IS NOT NULL AND D.source_code IS NULL THEN 'insert'
+    WHEN S.source_code IS NOT NULL AND D.source_code IS NOT NULL AND (D.histo_destruction IS NULL OR D.histo_destruction > SYSDATE) THEN 'update'
+    WHEN S.source_code IS NULL AND D.source_code IS NOT NULL AND (D.histo_destruction IS NULL OR D.histo_destruction > SYSDATE) THEN 'delete'
+    WHEN S.source_code IS NOT NULL AND D.source_code IS NOT NULL AND D.histo_destruction IS NOT NULL AND D.histo_destruction <= SYSDATE THEN 'undelete' END import_action,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.ANNEE_UNIV_1ERE_INSC ELSE S.ANNEE_UNIV_1ERE_INSC END ANNEE_UNIV_1ERE_INSC,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.CORREC_AUTORISEE ELSE S.CORREC_AUTORISEE END CORREC_AUTORISEE,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.DATE_ABANDON ELSE S.DATE_ABANDON END DATE_ABANDON,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.DATE_AUTORIS_SOUTENANCE ELSE S.DATE_AUTORIS_SOUTENANCE END DATE_AUTORIS_SOUTENANCE,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.DATE_FIN_CONFID ELSE S.DATE_FIN_CONFID END DATE_FIN_CONFID,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.DATE_PREM_INSC ELSE S.DATE_PREM_INSC END DATE_PREM_INSC,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.DATE_PREV_SOUTENANCE ELSE S.DATE_PREV_SOUTENANCE END DATE_PREV_SOUTENANCE,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.DATE_SOUTENANCE ELSE S.DATE_SOUTENANCE END DATE_SOUTENANCE,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.DATE_TRANSFERT ELSE S.DATE_TRANSFERT END DATE_TRANSFERT,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.DOCTORANT_ID ELSE S.DOCTORANT_ID END DOCTORANT_ID,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.ECOLE_DOCT_ID ELSE S.ECOLE_DOCT_ID END ECOLE_DOCT_ID,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.ETABLISSEMENT_ID ELSE S.ETABLISSEMENT_ID END ETABLISSEMENT_ID,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.ETAT_THESE ELSE S.ETAT_THESE END ETAT_THESE,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.LIB_DISC ELSE S.LIB_DISC END LIB_DISC,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.LIB_ETAB_COTUT ELSE S.LIB_ETAB_COTUT END LIB_ETAB_COTUT,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.LIB_PAYS_COTUT ELSE S.LIB_PAYS_COTUT END LIB_PAYS_COTUT,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.RESULTAT ELSE S.RESULTAT END RESULTAT,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.SOUTENANCE_AUTORIS ELSE S.SOUTENANCE_AUTORIS END SOUTENANCE_AUTORIS,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.TEM_AVENANT_COTUT ELSE S.TEM_AVENANT_COTUT END TEM_AVENANT_COTUT,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.TITRE ELSE S.TITRE END TITRE,
+    CASE WHEN S.source_code IS NULL AND D.source_code IS NOT NULL THEN D.UNITE_RECH_ID ELSE S.UNITE_RECH_ID END UNITE_RECH_ID,
+    CASE WHEN D.ANNEE_UNIV_1ERE_INSC <> S.ANNEE_UNIV_1ERE_INSC OR (D.ANNEE_UNIV_1ERE_INSC IS NULL AND S.ANNEE_UNIV_1ERE_INSC IS NOT NULL) OR (D.ANNEE_UNIV_1ERE_INSC IS NOT NULL AND S.ANNEE_UNIV_1ERE_INSC IS NULL) THEN 1 ELSE 0 END U_ANNEE_UNIV_1ERE_INSC,
+    CASE WHEN D.CORREC_AUTORISEE <> S.CORREC_AUTORISEE OR (D.CORREC_AUTORISEE IS NULL AND S.CORREC_AUTORISEE IS NOT NULL) OR (D.CORREC_AUTORISEE IS NOT NULL AND S.CORREC_AUTORISEE IS NULL) THEN 1 ELSE 0 END U_CORREC_AUTORISEE,
+    CASE WHEN D.DATE_ABANDON <> S.DATE_ABANDON OR (D.DATE_ABANDON IS NULL AND S.DATE_ABANDON IS NOT NULL) OR (D.DATE_ABANDON IS NOT NULL AND S.DATE_ABANDON IS NULL) THEN 1 ELSE 0 END U_DATE_ABANDON,
+    CASE WHEN D.DATE_AUTORIS_SOUTENANCE <> S.DATE_AUTORIS_SOUTENANCE OR (D.DATE_AUTORIS_SOUTENANCE IS NULL AND S.DATE_AUTORIS_SOUTENANCE IS NOT NULL) OR (D.DATE_AUTORIS_SOUTENANCE IS NOT NULL AND S.DATE_AUTORIS_SOUTENANCE IS NULL) THEN 1 ELSE 0 END U_DATE_AUTORIS_SOUTENANCE,
+    CASE WHEN D.DATE_FIN_CONFID <> S.DATE_FIN_CONFID OR (D.DATE_FIN_CONFID IS NULL AND S.DATE_FIN_CONFID IS NOT NULL) OR (D.DATE_FIN_CONFID IS NOT NULL AND S.DATE_FIN_CONFID IS NULL) THEN 1 ELSE 0 END U_DATE_FIN_CONFID,
+    CASE WHEN D.DATE_PREM_INSC <> S.DATE_PREM_INSC OR (D.DATE_PREM_INSC IS NULL AND S.DATE_PREM_INSC IS NOT NULL) OR (D.DATE_PREM_INSC IS NOT NULL AND S.DATE_PREM_INSC IS NULL) THEN 1 ELSE 0 END U_DATE_PREM_INSC,
+    CASE WHEN D.DATE_PREV_SOUTENANCE <> S.DATE_PREV_SOUTENANCE OR (D.DATE_PREV_SOUTENANCE IS NULL AND S.DATE_PREV_SOUTENANCE IS NOT NULL) OR (D.DATE_PREV_SOUTENANCE IS NOT NULL AND S.DATE_PREV_SOUTENANCE IS NULL) THEN 1 ELSE 0 END U_DATE_PREV_SOUTENANCE,
+    CASE WHEN D.DATE_SOUTENANCE <> S.DATE_SOUTENANCE OR (D.DATE_SOUTENANCE IS NULL AND S.DATE_SOUTENANCE IS NOT NULL) OR (D.DATE_SOUTENANCE IS NOT NULL AND S.DATE_SOUTENANCE IS NULL) THEN 1 ELSE 0 END U_DATE_SOUTENANCE,
+    CASE WHEN D.DATE_TRANSFERT <> S.DATE_TRANSFERT OR (D.DATE_TRANSFERT IS NULL AND S.DATE_TRANSFERT IS NOT NULL) OR (D.DATE_TRANSFERT IS NOT NULL AND S.DATE_TRANSFERT IS NULL) THEN 1 ELSE 0 END U_DATE_TRANSFERT,
+    CASE WHEN D.DOCTORANT_ID <> S.DOCTORANT_ID OR (D.DOCTORANT_ID IS NULL AND S.DOCTORANT_ID IS NOT NULL) OR (D.DOCTORANT_ID IS NOT NULL AND S.DOCTORANT_ID IS NULL) THEN 1 ELSE 0 END U_DOCTORANT_ID,
+    CASE WHEN D.ECOLE_DOCT_ID <> S.ECOLE_DOCT_ID OR (D.ECOLE_DOCT_ID IS NULL AND S.ECOLE_DOCT_ID IS NOT NULL) OR (D.ECOLE_DOCT_ID IS NOT NULL AND S.ECOLE_DOCT_ID IS NULL) THEN 1 ELSE 0 END U_ECOLE_DOCT_ID,
+    CASE WHEN D.ETABLISSEMENT_ID <> S.ETABLISSEMENT_ID OR (D.ETABLISSEMENT_ID IS NULL AND S.ETABLISSEMENT_ID IS NOT NULL) OR (D.ETABLISSEMENT_ID IS NOT NULL AND S.ETABLISSEMENT_ID IS NULL) THEN 1 ELSE 0 END U_ETABLISSEMENT_ID,
+    CASE WHEN D.ETAT_THESE <> S.ETAT_THESE OR (D.ETAT_THESE IS NULL AND S.ETAT_THESE IS NOT NULL) OR (D.ETAT_THESE IS NOT NULL AND S.ETAT_THESE IS NULL) THEN 1 ELSE 0 END U_ETAT_THESE,
+    CASE WHEN D.LIB_DISC <> S.LIB_DISC OR (D.LIB_DISC IS NULL AND S.LIB_DISC IS NOT NULL) OR (D.LIB_DISC IS NOT NULL AND S.LIB_DISC IS NULL) THEN 1 ELSE 0 END U_LIB_DISC,
+    CASE WHEN D.LIB_ETAB_COTUT <> S.LIB_ETAB_COTUT OR (D.LIB_ETAB_COTUT IS NULL AND S.LIB_ETAB_COTUT IS NOT NULL) OR (D.LIB_ETAB_COTUT IS NOT NULL AND S.LIB_ETAB_COTUT IS NULL) THEN 1 ELSE 0 END U_LIB_ETAB_COTUT,
+    CASE WHEN D.LIB_PAYS_COTUT <> S.LIB_PAYS_COTUT OR (D.LIB_PAYS_COTUT IS NULL AND S.LIB_PAYS_COTUT IS NOT NULL) OR (D.LIB_PAYS_COTUT IS NOT NULL AND S.LIB_PAYS_COTUT IS NULL) THEN 1 ELSE 0 END U_LIB_PAYS_COTUT,
+    CASE WHEN D.RESULTAT <> S.RESULTAT OR (D.RESULTAT IS NULL AND S.RESULTAT IS NOT NULL) OR (D.RESULTAT IS NOT NULL AND S.RESULTAT IS NULL) THEN 1 ELSE 0 END U_RESULTAT,
+    CASE WHEN D.SOUTENANCE_AUTORIS <> S.SOUTENANCE_AUTORIS OR (D.SOUTENANCE_AUTORIS IS NULL AND S.SOUTENANCE_AUTORIS IS NOT NULL) OR (D.SOUTENANCE_AUTORIS IS NOT NULL AND S.SOUTENANCE_AUTORIS IS NULL) THEN 1 ELSE 0 END U_SOUTENANCE_AUTORIS,
+    CASE WHEN D.TEM_AVENANT_COTUT <> S.TEM_AVENANT_COTUT OR (D.TEM_AVENANT_COTUT IS NULL AND S.TEM_AVENANT_COTUT IS NOT NULL) OR (D.TEM_AVENANT_COTUT IS NOT NULL AND S.TEM_AVENANT_COTUT IS NULL) THEN 1 ELSE 0 END U_TEM_AVENANT_COTUT,
+    CASE WHEN D.TITRE <> S.TITRE OR (D.TITRE IS NULL AND S.TITRE IS NOT NULL) OR (D.TITRE IS NOT NULL AND S.TITRE IS NULL) THEN 1 ELSE 0 END U_TITRE,
+    CASE WHEN D.UNITE_RECH_ID <> S.UNITE_RECH_ID OR (D.UNITE_RECH_ID IS NULL AND S.UNITE_RECH_ID IS NOT NULL) OR (D.UNITE_RECH_ID IS NOT NULL AND S.UNITE_RECH_ID IS NULL) THEN 1 ELSE 0 END U_UNITE_RECH_ID
+FROM
+  THESE D
+  FULL JOIN SRC_THESE S ON S.source_id = D.source_id AND S.source_code = D.source_code
+WHERE
+       (S.source_code IS NOT NULL AND D.source_code IS NOT NULL AND D.histo_destruction IS NOT NULL AND D.histo_destruction <= SYSDATE)
+    OR (S.source_code IS NULL AND D.source_code IS NOT NULL AND (D.histo_destruction IS NULL OR D.histo_destruction > SYSDATE))
+    OR (S.source_code IS NOT NULL AND D.source_code IS NULL)
+    OR D.ANNEE_UNIV_1ERE_INSC <> S.ANNEE_UNIV_1ERE_INSC OR (D.ANNEE_UNIV_1ERE_INSC IS NULL AND S.ANNEE_UNIV_1ERE_INSC IS NOT NULL) OR (D.ANNEE_UNIV_1ERE_INSC IS NOT NULL AND S.ANNEE_UNIV_1ERE_INSC IS NULL)
+  OR D.CORREC_AUTORISEE <> S.CORREC_AUTORISEE OR (D.CORREC_AUTORISEE IS NULL AND S.CORREC_AUTORISEE IS NOT NULL) OR (D.CORREC_AUTORISEE IS NOT NULL AND S.CORREC_AUTORISEE IS NULL)
+  OR D.DATE_ABANDON <> S.DATE_ABANDON OR (D.DATE_ABANDON IS NULL AND S.DATE_ABANDON IS NOT NULL) OR (D.DATE_ABANDON IS NOT NULL AND S.DATE_ABANDON IS NULL)
+  OR D.DATE_AUTORIS_SOUTENANCE <> S.DATE_AUTORIS_SOUTENANCE OR (D.DATE_AUTORIS_SOUTENANCE IS NULL AND S.DATE_AUTORIS_SOUTENANCE IS NOT NULL) OR (D.DATE_AUTORIS_SOUTENANCE IS NOT NULL AND S.DATE_AUTORIS_SOUTENANCE IS NULL)
+  OR D.DATE_FIN_CONFID <> S.DATE_FIN_CONFID OR (D.DATE_FIN_CONFID IS NULL AND S.DATE_FIN_CONFID IS NOT NULL) OR (D.DATE_FIN_CONFID IS NOT NULL AND S.DATE_FIN_CONFID IS NULL)
+  OR D.DATE_PREM_INSC <> S.DATE_PREM_INSC OR (D.DATE_PREM_INSC IS NULL AND S.DATE_PREM_INSC IS NOT NULL) OR (D.DATE_PREM_INSC IS NOT NULL AND S.DATE_PREM_INSC IS NULL)
+  OR D.DATE_PREV_SOUTENANCE <> S.DATE_PREV_SOUTENANCE OR (D.DATE_PREV_SOUTENANCE IS NULL AND S.DATE_PREV_SOUTENANCE IS NOT NULL) OR (D.DATE_PREV_SOUTENANCE IS NOT NULL AND S.DATE_PREV_SOUTENANCE IS NULL)
+  OR D.DATE_SOUTENANCE <> S.DATE_SOUTENANCE OR (D.DATE_SOUTENANCE IS NULL AND S.DATE_SOUTENANCE IS NOT NULL) OR (D.DATE_SOUTENANCE IS NOT NULL AND S.DATE_SOUTENANCE IS NULL)
+  OR D.DATE_TRANSFERT <> S.DATE_TRANSFERT OR (D.DATE_TRANSFERT IS NULL AND S.DATE_TRANSFERT IS NOT NULL) OR (D.DATE_TRANSFERT IS NOT NULL AND S.DATE_TRANSFERT IS NULL)
+  OR D.DOCTORANT_ID <> S.DOCTORANT_ID OR (D.DOCTORANT_ID IS NULL AND S.DOCTORANT_ID IS NOT NULL) OR (D.DOCTORANT_ID IS NOT NULL AND S.DOCTORANT_ID IS NULL)
+  OR D.ECOLE_DOCT_ID <> S.ECOLE_DOCT_ID OR (D.ECOLE_DOCT_ID IS NULL AND S.ECOLE_DOCT_ID IS NOT NULL) OR (D.ECOLE_DOCT_ID IS NOT NULL AND S.ECOLE_DOCT_ID IS NULL)
+  OR D.ETABLISSEMENT_ID <> S.ETABLISSEMENT_ID OR (D.ETABLISSEMENT_ID IS NULL AND S.ETABLISSEMENT_ID IS NOT NULL) OR (D.ETABLISSEMENT_ID IS NOT NULL AND S.ETABLISSEMENT_ID IS NULL)
+  OR D.ETAT_THESE <> S.ETAT_THESE OR (D.ETAT_THESE IS NULL AND S.ETAT_THESE IS NOT NULL) OR (D.ETAT_THESE IS NOT NULL AND S.ETAT_THESE IS NULL)
+  OR D.LIB_DISC <> S.LIB_DISC OR (D.LIB_DISC IS NULL AND S.LIB_DISC IS NOT NULL) OR (D.LIB_DISC IS NOT NULL AND S.LIB_DISC IS NULL)
+  OR D.LIB_ETAB_COTUT <> S.LIB_ETAB_COTUT OR (D.LIB_ETAB_COTUT IS NULL AND S.LIB_ETAB_COTUT IS NOT NULL) OR (D.LIB_ETAB_COTUT IS NOT NULL AND S.LIB_ETAB_COTUT IS NULL)
+  OR D.LIB_PAYS_COTUT <> S.LIB_PAYS_COTUT OR (D.LIB_PAYS_COTUT IS NULL AND S.LIB_PAYS_COTUT IS NOT NULL) OR (D.LIB_PAYS_COTUT IS NOT NULL AND S.LIB_PAYS_COTUT IS NULL)
+  OR D.RESULTAT <> S.RESULTAT OR (D.RESULTAT IS NULL AND S.RESULTAT IS NOT NULL) OR (D.RESULTAT IS NOT NULL AND S.RESULTAT IS NULL)
+  OR D.SOUTENANCE_AUTORIS <> S.SOUTENANCE_AUTORIS OR (D.SOUTENANCE_AUTORIS IS NULL AND S.SOUTENANCE_AUTORIS IS NOT NULL) OR (D.SOUTENANCE_AUTORIS IS NOT NULL AND S.SOUTENANCE_AUTORIS IS NULL)
+  OR D.TEM_AVENANT_COTUT <> S.TEM_AVENANT_COTUT OR (D.TEM_AVENANT_COTUT IS NULL AND S.TEM_AVENANT_COTUT IS NOT NULL) OR (D.TEM_AVENANT_COTUT IS NOT NULL AND S.TEM_AVENANT_COTUT IS NULL)
+  OR D.TITRE <> S.TITRE OR (D.TITRE IS NULL AND S.TITRE IS NOT NULL) OR (D.TITRE IS NOT NULL AND S.TITRE IS NULL)
+  OR D.UNITE_RECH_ID <> S.UNITE_RECH_ID OR (D.UNITE_RECH_ID IS NULL AND S.UNITE_RECH_ID IS NOT NULL) OR (D.UNITE_RECH_ID IS NOT NULL AND S.UNITE_RECH_ID IS NULL)
+) diff JOIN source on source.id = diff.source_id WHERE import_action IS NOT NULL AND source.importable = 1
+/
diff --git a/doc/release-notes/1.4.0/02-data-1.4.0.sql b/doc/release-notes/1.4.0/02-data-1.4.0.sql
new file mode 100644
index 0000000000000000000000000000000000000000..027b05e8003a012088d6fcd7a8eb1517c1ec9d27
--- /dev/null
+++ b/doc/release-notes/1.4.0/02-data-1.4.0.sql
@@ -0,0 +1,11 @@
+
+--
+-- Inversion des étapes du WF Diffusion et Attestations.
+--
+
+update WF_ETAPE set ORDRE = 13  where CODE = 'AUTORISATION_DIFFUSION_THESE' ;
+update WF_ETAPE set ORDRE = 18  where CODE = 'ATTESTATIONS' ;
+update WF_ETAPE set ORDRE = 213 where CODE = 'AUTORISATION_DIFFUSION_THESE_VERSION_CORRIGEE' ;
+update WF_ETAPE set ORDRE = 218 where CODE = 'ATTESTATIONS_VERSION_CORRIGEE' ;
+
+-- COMMIT ;
diff --git a/doc/release-notes/v1.4.0.md b/doc/release-notes/v1.4.0.md
index a32495d23e8ab38259a2d59e5f65a71f3cbe5838..c90f4159e0962c5c90d116e5ebab1748397d2b92 100644
--- a/doc/release-notes/v1.4.0.md
+++ b/doc/release-notes/v1.4.0.md
@@ -16,4 +16,4 @@ bash ./install.sh
 
 ## 2. Dans la base de données
 
-Rien à faire
\ No newline at end of file
+Exécuter dans l'ordre les scripts SQL présents dans le répertoire [1.4.0](1.4.0).
diff --git a/module/Application/src/Application/Command/AbstractCommand.php b/module/Application/src/Application/Command/AbstractCommand.php
index 39767c3b0b4048a5526f3b32d75b5cd587773a93..f2c56494e620a50aa94f73ff864d9499403e524b 100644
--- a/module/Application/src/Application/Command/AbstractCommand.php
+++ b/module/Application/src/Application/Command/AbstractCommand.php
@@ -2,7 +2,7 @@
 
 namespace Application\Command;
 
-use Retraitement\Exception\TimedOutCommandException;
+use Application\Command\Exception\TimedOutCommandException;
 use UnicaenApp\Exception\LogicException;
 use UnicaenApp\Exception\RuntimeException;
 
@@ -44,6 +44,7 @@ abstract class AbstractCommand implements CommandInterface
 
     /**
      * @return string
+     * @throws TimedOutCommandException Si un timeout d'exécution a été défini et qu'il a expiré
      */
     public function execute()
     {
@@ -73,23 +74,6 @@ abstract class AbstractCommand implements CommandInterface
         return $output;
     }
 
-    /**
-     * Exécute la commande avec une limite de temps d'exécution.
-     *
-     * @param string $timeoutValue Ex: '60s', '1m', '2h', '1d'. Cf. "man timeout".
-     * @return string
-     */
-    public function executeWithTimeout($timeoutValue = '20s')
-    {
-        if (!$this->commandLine) {
-            throw new LogicException("La ligne de commande n'a pas été générée, utilisez generate().");
-        }
-
-        $this->commandLine = "timeout --signal=HUP $timeoutValue " . $this->commandLine;
-
-        return $this->execute();
-    }
-
     /**
      * @return int|null
      */
diff --git a/module/Application/src/Application/Command/CommandInterface.php b/module/Application/src/Application/Command/CommandInterface.php
index 5f5ebc07e925320653fa92d53f80f0316f6f7265..57e065ba2a1452f07737de7f1c47761227388bc9 100644
--- a/module/Application/src/Application/Command/CommandInterface.php
+++ b/module/Application/src/Application/Command/CommandInterface.php
@@ -2,6 +2,7 @@
 
 namespace Application\Command;
 
+use Application\Command\Exception\TimedOutCommandException;
 use UnicaenApp\Exception\RuntimeException;
 
 interface CommandInterface
@@ -37,6 +38,7 @@ interface CommandInterface
 
     /**
      * @return string
+     * @throws TimedOutCommandException Si un timeout d'exécution a été défini et qu'il a expiré
      */
     public function execute();
 
diff --git a/module/Retraitement/src/Retraitement/Exception/TimedOutCommandException.php b/module/Application/src/Application/Command/Exception/TimedOutCommandException.php
similarity index 66%
rename from module/Retraitement/src/Retraitement/Exception/TimedOutCommandException.php
rename to module/Application/src/Application/Command/Exception/TimedOutCommandException.php
index fa1fcf1ec8f000910d7b91237b70cb3689ba9e98..0a6ada4b9079deca689fd6368845eab5f06b483d 100644
--- a/module/Retraitement/src/Retraitement/Exception/TimedOutCommandException.php
+++ b/module/Application/src/Application/Command/Exception/TimedOutCommandException.php
@@ -1,16 +1,14 @@
 <?php
 
-namespace Retraitement\Exception;
+namespace Application\Command\Exception;
 
-use UnicaenApp\Exception\RuntimeException;
-
-class TimedOutCommandException extends RuntimeException
+class TimedOutCommandException extends \Exception
 {
     private $timeout;
 
     /**
      * @param string $userFirendlyTimeout
-     * @return TimedOutCommandException
+     * @return $this
      */
     public function setTimeout($userFirendlyTimeout)
     {
diff --git a/module/Application/src/Application/Controller/ExportController.php b/module/Application/src/Application/Controller/ExportController.php
index 455f6a4adb1ad0083f6e6c89b842e68a4cdc8727..9b594b56f9c8022c73ba80ec353ec685627c726d 100644
--- a/module/Application/src/Application/Controller/ExportController.php
+++ b/module/Application/src/Application/Controller/ExportController.php
@@ -82,6 +82,8 @@ class ExportController extends AbstractController
 
             //Dates
             'Date de première inscription'          => function (These $these) { return $these->getDatePremiereInscription(); },
+            "Date d'abandon"                        => function (These $these) { return $these->getDateAbandon(); },
+            'Date de transfert'                     => function (These $these) { return $these->getDateTransfert(); },
             'Date de prévisionnel de soutenance'    => function (These $these) { return $these->getDatePrevisionSoutenance(); },
             'Date de soutenance'                    => function (These $these) { return $these->getDateSoutenance(); },
             'Date de fin de confientialité'         => function (These $these) { return $these->getDateFinConfidentialite(); },
diff --git a/module/Application/src/Application/Controller/FichierTheseController.php b/module/Application/src/Application/Controller/FichierTheseController.php
index c636167881569d2ef4283d489531d1669329d6ae..fb96f3d33245526830d5be4a09b589d0067ddb3f 100644
--- a/module/Application/src/Application/Controller/FichierTheseController.php
+++ b/module/Application/src/Application/Controller/FichierTheseController.php
@@ -2,9 +2,9 @@
 
 namespace Application\Controller;
 
+use Application\Command\Exception\TimedOutCommandException;
 use Application\Entity\Db\Fichier;
 use Application\Entity\Db\FichierThese;
-use Application\Entity\Db\NatureFichier;
 use Application\Entity\Db\These;
 use Application\Entity\Db\VersionFichier;
 use Application\EventRouterReplacerAwareTrait;
@@ -445,7 +445,11 @@ class FichierTheseController extends AbstractController
         }
 
         $pdcData = $this->theseService->fetchInformationsPageDeCouverture($these);
-        $outputFilePath = $this->fichierTheseService->fusionnerPdcEtThese($these, $pdcData, $versionFichier, $removeFirstPage);
+        try {
+            $outputFilePath = $this->fichierTheseService->fusionnerPdcEtThese($these, $pdcData, $versionFichier, $removeFirstPage);
+        } catch (TimedOutCommandException $e) {
+            // n'arrive jamais car aucun timeout n'a été spécifié lors de l'appel à fusionnerPdcEtThese()
+        }
 
         $this->eventRouterReplacer->replaceEventRouter($this->getEvent());
 
diff --git a/module/Application/src/Application/Controller/StructureConcreteController.php b/module/Application/src/Application/Controller/StructureConcreteController.php
index 729a28bc594a7dc7d94692674ae72deeb90befbb..62a2456a4de5c5dd9242f3eb79b09b3d4fff5d25 100644
--- a/module/Application/src/Application/Controller/StructureConcreteController.php
+++ b/module/Application/src/Application/Controller/StructureConcreteController.php
@@ -278,7 +278,7 @@ abstract class StructureConcreteController extends AbstractController
         $structureId = $this->params()->fromRoute("structure");
         $this->supprimerLogoStructure();
 
-        return $this->redirect()->toRoute($this->routeName, [], ['query' => ['selected' => $structureId], "fragment" => $structureId], true);
+        return $this->redirect()->toRoute($this->routeName."/information", [], ['query' => ['selected' => $structureId], "fragment" => $structureId], true);
     }
 
     /**
diff --git a/module/Application/src/Application/Controller/TheseController.php b/module/Application/src/Application/Controller/TheseController.php
index c1ecd4350bb585b19ceff228298b9d5933e2d85f..30ff5b2454f396117a40f5ce16deee7c64e20395 100755
--- a/module/Application/src/Application/Controller/TheseController.php
+++ b/module/Application/src/Application/Controller/TheseController.php
@@ -2,6 +2,7 @@
 
 namespace Application\Controller;
 
+use Application\Command\Exception\TimedOutCommandException;
 use Application\Entity\Db\Attestation;
 use Application\Entity\Db\Diffusion;
 use Application\Entity\Db\FichierThese;
@@ -24,8 +25,6 @@ use Application\Form\MetadonneeTheseForm;
 use Application\Form\PointsDeVigilanceForm;
 use Application\Form\RdvBuTheseDoctorantForm;
 use Application\Form\RdvBuTheseForm;
-use Application\Rule\AutorisationDiffusionRule;
-use Application\Rule\SuppressionAttestationsRequiseRule;
 use Application\Service\Etablissement\EtablissementServiceAwareTrait;
 use Application\Service\FichierThese\Exception\ValidationImpossibleException;
 use Application\Service\FichierThese\FichierTheseServiceAwareTrait;
@@ -48,7 +47,6 @@ use Doctrine\ORM\OptimisticLockException;
 use Doctrine\ORM\Tools\Pagination\Paginator;
 use DoctrineORMModule\Paginator\Adapter\DoctrinePaginator;
 use Import\Service\Traits\ImportServiceAwareTrait;
-use Retraitement\Exception\TimedOutCommandException;
 use UnicaenApp\Exception\RuntimeException;
 use UnicaenApp\Service\EntityManagerAwareTrait;
 use UnicaenApp\Service\MessageCollectorAwareTrait;
@@ -497,6 +495,7 @@ class TheseController extends AbstractController
     {
         $estDoctorant = (bool) $this->userContextService->getSelectedRoleDoctorant();
         $these = $this->requestedThese();
+        $version = $this->fichierTheseService->fetchVersionFichier(VersionFichier::CODE_ORIG);
         $asynchronous = $this->params()->fromRoute('asynchronous');
 
         $versionArchivable = $this->fichierTheseService->getRepository()->getVersionArchivable($these);
@@ -508,6 +507,7 @@ class TheseController extends AbstractController
 
         $view = new ViewModel([
             'these'        => $these,
+            'diffusion'    => $these->getDiffusionForVersion($version),
             'estDoctorant' => $estDoctorant,
             'modifierUrl'  => $this->urlThese()->modifierRdvBuUrl($these),
             'validerUrl'   => $this->urlThese()->validerRdvBuUrl($these),
@@ -623,7 +623,7 @@ class TheseController extends AbstractController
         $form = $this->getServiceLocator()->get('formElementManager')->get($estDoctorant ? 'RdvBuTheseDoctorantForm' : 'RdvBuTheseForm');
         $form->bind($rdvBu);
 
-        if (! $this->theseService->isExemplPapierFourniPertinent($these)) {
+        if ($form instanceof RdvBuTheseForm && ! $this->theseService->isExemplPapierFourniPertinent($these)) {
             $form->disableExemplPapierFourni();
         }
 
@@ -806,8 +806,6 @@ class TheseController extends AbstractController
                 } catch (TimedOutCommandException $toce) {
                     // relancer le retraitement en tâche de fond
                     $this->fichierTheseService->creerFichierTheseRetraiteAsync($fichierVersionOriginale);
-                } catch (RuntimeException $re) {
-                    // erreur prévue
                 }
             }
             return $this->redirect()->toRoute(null, [], ['query'=>$this->params()->fromQuery()], true);
@@ -1327,7 +1325,6 @@ class TheseController extends AbstractController
         $codes = [
             Variable::CODE_ETB_LIB,
             Variable::CODE_ETB_ART_ETB_LIB,
-            Variable::CODE_TRIBUNAL_COMPETENT,
         ];
         $dateObs = $these->getDateSoutenance() ?: $these->getDatePrevisionSoutenance();
         $variableRepo = $this->variableService->getRepository();
@@ -1337,7 +1334,6 @@ class TheseController extends AbstractController
         $libEtablissementA = "à " . $letab;
         $libEtablissementLe = $letab;
         $libEtablissementDe = "de " . $letab;
-        $libTribunal = lcfirst($vars[Variable::CODE_TRIBUNAL_COMPETENT]->getValeur());
 
         $renderer = $this->getServiceLocator()->get('view_renderer'); /* @var $renderer \Zend\View\Renderer\PhpRenderer */
         $exporter = new ConventionPdfExporter($renderer, 'A4');
@@ -1350,7 +1346,6 @@ class TheseController extends AbstractController
             'libEtablissementA'  => $libEtablissementA,
             'libEtablissementLe' => $libEtablissementLe,
             'libEtablissementDe' => $libEtablissementDe,
-            'libTribunal'        => $libTribunal,
         ]);
         $exporter->export('export.pdf');
         exit;
@@ -1567,7 +1562,7 @@ class TheseController extends AbstractController
         $pdcData = $this->theseService->fetchInformationsPageDeCouverture($these);
 
         try {
-            // Un timeout peut être appliqué au lancement du  script de retraitement.
+            // Un timeout peut être appliqué au lancement du  script.
             // Si ce timout est atteint, l'exécution du script est interrompue
             // et une exception TimedOutCommandException est levée.
             $timeout = $this->timeoutRetraitement;
@@ -1576,10 +1571,8 @@ class TheseController extends AbstractController
             $destinataires = [ $this->userContextService->getIdentityDb()->getEmail() ] ;
             // relancer le retraitement en tâche de fond
             $this->fichierTheseService->fusionneFichierTheseAsync($these, $versionFichier, $removal, $destinataires);
+
             return $this->redirect()->toRoute('these/rdv-bu', ['these' => $these->getId(), 'asynchronous' => 1], [], true);
-            exit();
-        } catch (RuntimeException $re) {
-            // erreur prévue
         }
 
         /** Retourner un PDF ...  */
diff --git a/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.Structure.dcm.xml b/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.Structure.dcm.xml
index ac2f4c947e5d5c1fb168386581a6daba48bf61e7..a9a5026241c2dc3bd8f23d9ee1bcee69aaa5c513 100644
--- a/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.Structure.dcm.xml
+++ b/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.Structure.dcm.xml
@@ -10,6 +10,7 @@
         </id>
         <field name="sigle"      type="string" column="SIGLE"       length="32"  nullable="true"/>
         <field name="libelle"    type="string" column="LIBELLE"     length="128" nullable="false"/>
+        <field name="ferme"      type="integer" column="EST_FERME"   nullable="false"/>
         <field name="cheminLogo" type="string" column="CHEMIN_LOGO" length="200" nullable="true"/>
 
         <many-to-one field="typeStructure" target-entity="Application\Entity\Db\TypeStructure">
diff --git a/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.These.dcm.xml b/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.These.dcm.xml
index 683409d7a9c7a56f6bb72c45edfcf91e334bacc1..364a890adda6beeb46337b1c0dd3f467915a4236 100644
--- a/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.These.dcm.xml
+++ b/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.These.dcm.xml
@@ -16,6 +16,8 @@
         <field name="datePrevisionSoutenance" type="datetime" column="DATE_PREV_SOUTENANCE" nullable="true"/>
         <field name="dateSoutenance" type="datetime" column="DATE_SOUTENANCE" nullable="true"/>
         <field name="dateFinConfidentialite" type="datetime" column="DATE_FIN_CONFID" nullable="true"/>
+        <field name="dateAbandon" type="datetime" column="DATE_ABANDON" nullable="true"/>
+        <field name="dateTransfert" type="datetime" column="DATE_TRANSFERT" nullable="true"/>
         <field name="codeUniteRecherche" type="string" column="COD_UNIT_RECH" length="50" nullable="true"/>
         <field name="libelleUniteRecherche" type="string" column="LIB_UNIT_RECH" length="200" nullable="true"/>
         <field name="correctionAutorisee" type="string" column="CORREC_AUTORISEE" nullable="true"/>
diff --git a/module/Application/src/Application/Entity/Db/Structure.php b/module/Application/src/Application/Entity/Db/Structure.php
index 887e73433b322f1d992ce572bbc6c182795d7150..ba0a853f3a5a8b1c2a97fc8588eac598d791cfc2 100644
--- a/module/Application/src/Application/Entity/Db/Structure.php
+++ b/module/Application/src/Application/Entity/Db/Structure.php
@@ -23,11 +23,13 @@ class Structure implements StructureInterface, HistoriqueAwareInterface, SourceA
      * @var string $sigle
      * @var string $libelle
      * @var string $cheminLogo
+     * @var integer $cheminLogo
      */
     private     $id;
     protected   $sigle;
     protected   $libelle;
     protected   $cheminLogo;
+    protected   $ferme;
 
     /**
      * @var string
@@ -341,4 +343,20 @@ class Structure implements StructureInterface, HistoriqueAwareInterface, SourceA
     {
         return 'structure';
     }
+
+    /**
+     * @return bool
+     */
+    public function isFerme()
+    {
+        return $this->ferme === 1;
+    }
+
+    /**
+     * @param boolean $ferme
+     */
+    public function setFerme($ferme)
+    {
+        if (!$ferme) $this->ferme = 0; else $this->ferme = 1;
+    }
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Entity/Db/These.php b/module/Application/src/Application/Entity/Db/These.php
index a5cf586a49a1e0d32ffa851515a7bdcb9031874d..132ee4d5e4bef8343ae04a23bd9d9412dfab6572 100644
--- a/module/Application/src/Application/Entity/Db/These.php
+++ b/module/Application/src/Application/Entity/Db/These.php
@@ -125,6 +125,16 @@ class These implements HistoriqueAwareInterface, ResourceInterface
      */
     protected $dateFinConfidentialite;
 
+    /**
+     * @var DateTime|null
+     */
+    protected $dateAbandon;
+
+    /**
+     * @var DateTime|null
+     */
+    protected $dateTransfert;
+
     /**
      * @var string
      */
@@ -451,6 +461,60 @@ class These implements HistoriqueAwareInterface, ResourceInterface
         return $this;
     }
 
+    /**
+     * @return DateTime|null
+     */
+    public function getDateAbandon()
+    {
+        return $this->dateAbandon;
+    }
+
+    /**
+     * @return string
+     */
+    public function getDateAbandonToString(): string
+    {
+        return Util::formattedDate($this->getDateAbandon());
+    }
+
+    /**
+     * @param DateTime|null $dateAbandon
+     * @return These
+     */
+    public function setDateAbandon(DateTime $dateAbandon = null): These
+    {
+        $this->dateAbandon = $dateAbandon;
+
+        return $this;
+    }
+
+    /**
+     * @return DateTime|null
+     */
+    public function getDateTransfert()
+    {
+        return $this->dateTransfert;
+    }
+
+    /**
+     * @return string
+     */
+    public function getDateTransfertToString(): string
+    {
+        return Util::formattedDate($this->getDateTransfert());
+    }
+
+    /**
+     * @param DateTime|null $dateTransfert
+     * @return These
+     */
+    public function setDateTransfert(DateTime $dateTransfert = null): These
+    {
+        $this->dateTransfert = $dateTransfert;
+
+        return $this;
+    }
+
     /**
      * @return string
      */
diff --git a/module/Application/src/Application/Entity/Db/Variable.php b/module/Application/src/Application/Entity/Db/Variable.php
index 9450e6e0140038fd73664e48e9a426b407dbd9d3..c99b9a58a3d85cd1cf0ba681e292aa2d49e1577f 100644
--- a/module/Application/src/Application/Entity/Db/Variable.php
+++ b/module/Application/src/Application/Entity/Db/Variable.php
@@ -21,7 +21,6 @@ class Variable implements HistoriqueAwareInterface
     const CODE_ETB_LIB                       = 'ETB_LIB';           // Ex: "Université de Caen Normandie"
     const CODE_ETB_LIB_TIT_RESP              = 'ETB_LIB_TIT_RESP';  // Ex: "Le Président"
     const CODE_ETB_LIB_NOM_RESP              = 'ETB_LIB_NOM_RESP';  // Ex: "Pierre Denise"
-    const CODE_TRIBUNAL_COMPETENT            = 'TRIBUNAL_COMPETENT';  // Ex: "Trinbunal administratif de Caen"
 
     /**
      * @var string
diff --git a/module/Application/src/Application/Form/DiffusionTheseForm.php b/module/Application/src/Application/Form/DiffusionTheseForm.php
index 42fa9cd1748a41f398e2a31fec426888d7f6d43a..04ac65f9273e840f27233da809d30b0a65f8775a 100644
--- a/module/Application/src/Application/Form/DiffusionTheseForm.php
+++ b/module/Application/src/Application/Form/DiffusionTheseForm.php
@@ -218,7 +218,7 @@ class DiffusionTheseForm extends Form
             'type'       => 'Text',
             'name'       => 'halId',
             'options'    => [
-                'label' => 'Identifiant HAL (facultatif)',
+                'label' => 'IdHAL (facultatif)',
             ],
             'attributes' => [
                 'title' => "",
diff --git a/module/Application/src/Application/Form/EcoleDoctoraleForm.php b/module/Application/src/Application/Form/EcoleDoctoraleForm.php
index 579a28b20496835063e29557baa27125d7a9be9d..6a32a25fc53a326961bedee17ee925d45461dc52 100644
--- a/module/Application/src/Application/Form/EcoleDoctoraleForm.php
+++ b/module/Application/src/Application/Form/EcoleDoctoraleForm.php
@@ -3,6 +3,7 @@
 namespace Application\Form;
 
 use Application\Entity\Db\EcoleDoctorale;
+use Zend\Form\Element\Checkbox;
 use Zend\Form\Element\Hidden;
 use Zend\Form\Element\File;
 use Zend\Form\Element\Submit;
@@ -39,6 +40,10 @@ class EcoleDoctoraleForm extends Form
                 new Text('code'))
                     ->setLabel("Code :")
         );
+        $this->add(
+            (new Checkbox('estFerme'))
+                ->setLabel("École doctorale fermée")
+        );
         $this
             ->add((
                 new File('cheminLogo'))
diff --git a/module/Application/src/Application/Form/EtablissementForm.php b/module/Application/src/Application/Form/EtablissementForm.php
index 4a9b80fe20a1f1ec3e15c1d8fecd3f5a934dbae8..b41d209319175b285f2b15dca5845486bd3d4441 100644
--- a/module/Application/src/Application/Form/EtablissementForm.php
+++ b/module/Application/src/Application/Form/EtablissementForm.php
@@ -54,6 +54,10 @@ class EtablissementForm extends Form
             (new Checkbox('estAssocie'))
                 ->setLabel("Établissement associé")
         );
+        $this->add(
+            (new Checkbox('estFerme'))
+                ->setLabel("Établissement fermé")
+        );
 
         $this
             ->add((
diff --git a/module/Application/src/Application/Form/Hydrator/EcoleDoctoraleHydrator.php b/module/Application/src/Application/Form/Hydrator/EcoleDoctoraleHydrator.php
index 718f12a6b8bc26fe1960b7e87fdacd81856be0ba..bf1bfbac0cd994133a4cb3dc78d5ffced3addef4 100644
--- a/module/Application/src/Application/Form/Hydrator/EcoleDoctoraleHydrator.php
+++ b/module/Application/src/Application/Form/Hydrator/EcoleDoctoraleHydrator.php
@@ -20,6 +20,7 @@ class EcoleDoctoraleHydrator extends DoctrineObject
         $data['code'] = $ed->getStructure()->getCode();
         $data['sigle'] = $ed->getSigle();
         $data['cheminLogo'] = $ed->getCheminLogo();
+        $data['estFerme'] = $ed->getStructure()->isFerme();
 
         return $data;
     }
@@ -40,6 +41,7 @@ class EcoleDoctoraleHydrator extends DoctrineObject
         $object->getStructure()->setCode($data['code']);
         $object->setSigle($data['sigle']);
         $object->setCheminLogo($data['cheminLogo']);
+        if (isset($data['estFerme']) AND $data['estFerme'] === "1") $object->getStructure()->setFerme(true); else $object->getStructure()->setFerme(false);
 
         return $object;
     }
diff --git a/module/Application/src/Application/Form/Hydrator/EtablissementHydrator.php b/module/Application/src/Application/Form/Hydrator/EtablissementHydrator.php
index 632fd8da184579f2ca625acd46ca13cd73528bf2..9f71687023fc738e5c0dc4563316d86eb24b4258 100644
--- a/module/Application/src/Application/Form/Hydrator/EtablissementHydrator.php
+++ b/module/Application/src/Application/Form/Hydrator/EtablissementHydrator.php
@@ -24,6 +24,7 @@ class EtablissementHydrator extends DoctrineObject
         $data['estMembre'] = $etablissement->estMembre();
         $data['estAssocie'] = $etablissement->estAssocie();
         $data['cheminLogo'] = $etablissement->getCheminLogo();
+        $data['estFerme'] = $etablissement->getStructure()->isFerme();
 
         return $data;
     }
@@ -47,7 +48,7 @@ class EtablissementHydrator extends DoctrineObject
         $object->setEstMembre($data['estMembre']);
         $object->setEstAssocie($data['estAssocie']);
         $object->setCheminLogo($data['cheminLogo']);
-
+        if (isset($data['estFerme']) AND $data['estFerme'] === "1") $object->getStructure()->setFerme(true); else $object->getStructure()->setFerme(false);
         return $object;
     }
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Form/Hydrator/UniteRechercheHydrator.php b/module/Application/src/Application/Form/Hydrator/UniteRechercheHydrator.php
index cb40b5857d53ff8bbc97bb0e964213970172cc84..3684eb8923215ebd0f98ce925ef46c28ae44ee37 100644
--- a/module/Application/src/Application/Form/Hydrator/UniteRechercheHydrator.php
+++ b/module/Application/src/Application/Form/Hydrator/UniteRechercheHydrator.php
@@ -21,6 +21,7 @@ class UniteRechercheHydrator extends DoctrineObject
         $data['sigle'] = $ur->getSigle();
         $data['cheminLogo'] = $ur->getCheminLogo();
         $data['RNSR'] = $ur->getRNSR();
+        $data['estFerme'] = $ur->getStructure()->isFerme();
 
         return $data;
     }
@@ -42,6 +43,7 @@ class UniteRechercheHydrator extends DoctrineObject
         $object->setSigle($data['sigle']);
         $object->setCheminLogo($data['cheminLogo']);
         $object->setRNSR($data['RNSR']);
+        if (isset($data['estFerme']) AND $data['estFerme'] === "1") $object->getStructure()->setFerme(true); else $object->getStructure()->setFerme(false);
 
         return $object;
     }
diff --git a/module/Application/src/Application/Form/RdvBuTheseForm.php b/module/Application/src/Application/Form/RdvBuTheseForm.php
index 72ef07b746ee4c839ce4921fef30bb401b377903..c6e1e8dbc14775aa01e954fb5c3799e691d48cef 100644
--- a/module/Application/src/Application/Form/RdvBuTheseForm.php
+++ b/module/Application/src/Application/Form/RdvBuTheseForm.php
@@ -109,7 +109,7 @@ class RdvBuTheseForm extends Form
             'type'       => 'Text',
             'name'       => 'halId',
             'options'    => [
-                'label' => 'Identifiant HAL (facultatif)',
+                'label' => 'IdHAL (facultatif)',
             ],
             'attributes' => [
                 'title' => "",
diff --git a/module/Application/src/Application/Form/UniteRechercheForm.php b/module/Application/src/Application/Form/UniteRechercheForm.php
index 372dfbbafc14727d1ad747f4fe14cdd99525e641..38c51bc8f9d97b4a35ab94abfbac54e080104ea3 100644
--- a/module/Application/src/Application/Form/UniteRechercheForm.php
+++ b/module/Application/src/Application/Form/UniteRechercheForm.php
@@ -3,6 +3,7 @@
 namespace Application\Form;
 
 use Application\Entity\Db\UniteRecherche;
+use Zend\Form\Element\Checkbox;
 use Zend\Form\Element\Submit;
 use Zend\Form\Element\Text;
 use Zend\Form\Element\File;
@@ -42,6 +43,10 @@ class UniteRechercheForm extends Form
             new Text('RNSR'))
                 ->setLabel("Identifiant RNSR :")
             );
+        $this->add(
+            (new Checkbox('estFerme'))
+                ->setLabel("Unité de recherche fermée")
+        );
         $this
             ->add((
         new File('cheminLogo'))
diff --git a/module/Application/src/Application/Service/FichierThese/FichierTheseService.php b/module/Application/src/Application/Service/FichierThese/FichierTheseService.php
index 74497f3eb4569a9b888b48cee622559b27e7c927..5880a66b994dfcdaed75f494a268eb925d9798b7 100644
--- a/module/Application/src/Application/Service/FichierThese/FichierTheseService.php
+++ b/module/Application/src/Application/Service/FichierThese/FichierTheseService.php
@@ -26,7 +26,7 @@ use Application\Service\VersionFichier\VersionFichierServiceAwareTrait;
 use Application\Validator\Exception\CinesErrorException;
 use Application\Validator\FichierCinesValidator;
 use Doctrine\ORM\OptimisticLockException;
-use Retraitement\Exception\TimedOutCommandException;
+use Application\Command\Exception\TimedOutCommandException;
 use Retraitement\Service\RetraitementServiceAwareTrait;
 use UnicaenApp\Exception\LogicException;
 use UnicaenApp\Exception\RuntimeException;
@@ -286,6 +286,7 @@ class FichierTheseService extends BaseService
      * @param FichierThese $fichierThese Fichier à retraiter
      * @param string       $timeout      Timeout éventuel à appliquer au lancement du script de retraitement.
      * @return FichierThese Fichier retraité
+     * @throws TimedOutCommandException
      */
     public function creerFichierTheseRetraite(FichierThese $fichierThese, $timeout = null)
     {
@@ -437,12 +438,14 @@ class FichierTheseService extends BaseService
      * @param PdcData     $pdcData
      * @param PhpRenderer $renderer
      * @param string      $filepath
+     * @param boolean     $recto
      */
-    public function generatePageDeCouverture(PdcData $pdcData, PhpRenderer $renderer, $filepath = null)
+    public function generatePageDeCouverture(PdcData $pdcData, PhpRenderer $renderer, $filepath = null, $recto = true)
     {
         $exporter = new PageDeCouverturePdfExporter($renderer, 'A4');
         $exporter->setVars([
             'informations' => $pdcData,
+            'recto/verso' => $recto,
         ]);
         if ($filepath !== null) {
             $exporter->export($filepath, Pdf::DESTINATION_FILE);
@@ -507,6 +510,7 @@ class FichierTheseService extends BaseService
      * @param bool    $removeFirstPage
      * @param int     $timeout
      * @return string
+     * @throws TimedOutCommandException
      */
     public function fusionnerPdcEtThese(These $these, PdcData $pdcData, $versionFichier, $removeFirstPage = false, $timeout = 0)
     {
@@ -531,9 +535,6 @@ class FichierTheseService extends BaseService
                 ));
             }
         }
-        catch (TimedOutCommandException $toce) {
-            throw $toce;
-        }
         catch (RuntimeException $rte) {
             throw new RuntimeException(
                 "Une erreur est survenue lors de l'exécution de la commande " . $command->getName(),
@@ -568,12 +569,17 @@ class FichierTheseService extends BaseService
     {
         // generation de la couverture
         $filename = "sygal_couverture_" . $these->getId() . "_" . uniqid() . ".pdf";
-        $this->generatePageDeCouverture($pdcData, $this->renderer, $filename);
+        $this->generatePageDeCouverture($pdcData, $this->renderer, $filename, !$removeFirstPage);
 
         // recuperation de la bonne version du manuscript
         $manuscritFichier = current($this->getRepository()->fetchFichierTheses($these, NatureFichier::CODE_THESE_PDF, $versionFichier));
         $manuscritChemin = $this->fichierService->computeDestinationFilePathForFichier($manuscritFichier->getFichier());
 
+        if (!is_readable($manuscritChemin)) {
+            throw new RuntimeException(
+                "Le fichier suivant n'existe pas ou n'est pas accessible sur le serveur : " . $manuscritChemin);
+        }
+
         $inputFiles = [
             'couverture' => sys_get_temp_dir() . '/' . $filename,
             'manuscrit' => $manuscritChemin
diff --git a/module/Application/src/Application/Service/Structure/StructureService.php b/module/Application/src/Application/Service/Structure/StructureService.php
index 4cc5b54061a95d3c648f57db77d613b83a4b968c..3e09b44040c9882693fe2fdb06360a6466d44e59 100755
--- a/module/Application/src/Application/Service/Structure/StructureService.php
+++ b/module/Application/src/Application/Service/Structure/StructureService.php
@@ -5,7 +5,6 @@ namespace Application\Service\Structure;
 use Application\Command\ConvertCommand;
 use Application\Entity\Db\EcoleDoctorale;
 use Application\Entity\Db\Etablissement;
-use Application\Entity\Db\Source;
 use Application\Entity\Db\Structure;
 use Application\Entity\Db\StructureConcreteInterface;
 use Application\Entity\Db\StructureInterface;
@@ -25,7 +24,7 @@ use Doctrine\ORM\NonUniqueResultException;
 use Doctrine\ORM\OptimisticLockException;
 use DoctrineModule\Stdlib\Hydrator\DoctrineObject;
 use Import\Service\Traits\SynchroServiceAwareTrait;
-use Retraitement\Exception\TimedOutCommandException;
+use Application\Command\Exception\TimedOutCommandException;
 use UnicaenApp\Exception\RuntimeException;
 use UnicaenApp\Util;
 use Webmozart\Assert\Assert;
@@ -635,9 +634,9 @@ class StructureService extends BaseService
             ->leftJoin('structure.structureSubstituante', 'substitutionTo')
             ->leftJoin('structure.structuresSubstituees', 'substitutionFrom')
             ->andWhere('substitutionTo.id IS NULL OR pasHistorise(substitutionTo) != 1');
-        if ($order) $qb->orderBy('structure.' . $order);
+        if ($order) $qb->orderBy(' structure.' . $order);
         else {
-            if ($type === TypeStructure::CODE_ECOLE_DOCTORALE) $qb->orderBy('structureConcrete.sourceCode');
+            if ($type === TypeStructure::CODE_ECOLE_DOCTORALE) $qb->orderBy('structure.ferme, structureConcrete.sourceCode');
         }
 
         $result = $qb->getQuery()->getResult();
@@ -889,7 +888,7 @@ class StructureService extends BaseService
                 ));
             }
         } catch (TimedOutCommandException $toce) {
-            throw $toce;
+            // n'arrive jamais car aucun timeout n'a été transmis à ConvertCommand
         }
         catch (RuntimeException $rte) {
             throw new RuntimeException(
diff --git a/module/Application/src/Application/Service/These/Convention/ConventionPdfExporter.php b/module/Application/src/Application/Service/These/Convention/ConventionPdfExporter.php
index ef36a7eccb9055ce059aa7e367bfe8ba6a263e58..e9d17dfd17f7e87bdf402935d2fe643fc91aba37 100644
--- a/module/Application/src/Application/Service/These/Convention/ConventionPdfExporter.php
+++ b/module/Application/src/Application/Service/These/Convention/ConventionPdfExporter.php
@@ -8,14 +8,21 @@ use Zend\View\Renderer\PhpRenderer;
 use Zend\View\Resolver\AggregateResolver;
 use Zend\View\Resolver\TemplatePathStack;
 
-
 class ConventionPdfExporter extends PdfExporter
 {
+    /**
+     * @var array
+     */
     private $vars;
 
-
-
-
+    /**
+     * ConventionPdfExporter constructor.
+     *
+     * @param PhpRenderer|null $renderer
+     * @param string           $format
+     * @param bool             $orientationPaysage
+     * @param int              $defaultFontSize
+     */
     public function __construct(PhpRenderer $renderer = null, $format = 'A4', $orientationPaysage = false, $defaultFontSize = 10)
     {
         parent::__construct($renderer, $format, $orientationPaysage, $defaultFontSize);
@@ -25,13 +32,18 @@ class ConventionPdfExporter extends PdfExporter
         $resolver->attach(new TemplatePathStack(['script_paths' => [__DIR__]]));
 
         $this->setLogo(file_get_contents(APPLICATION_DIR . '/public/logo_normandie_univ.jpg')); // 'var:logo' dans les phtml
-        $this->setHeaderScript('partial/header.phtml');
+        $this->setHeaderScript('partial/header-odd.phtml', 'O');  // pages paires
+        $this->setHeaderScript('partial/header-even.phtml', 'E'); // pages impaires
         $this->setFooterScript('partial/footer.phtml');
         $this->setMarginTop(20);
         $this->setMarginBottom(25);
         $this->setFooterTitle("Convention de mise en ligne");
     }
 
+    /**
+     * @param array $vars
+     * @return $this
+     */
     public function setVars(array $vars)
     {
         $this->vars = $vars;
@@ -40,6 +52,12 @@ class ConventionPdfExporter extends PdfExporter
         return $this;
     }
 
+    /**
+     * @param string $filename
+     * @param string $destination
+     * @param string $memoryLimit
+     * @return string
+     */
     public function export($filename = null, $destination = self::DESTINATION_BROWSER, $memoryLimit = null)
     {
         if (empty($this->vars)) {
diff --git a/module/Application/src/Application/Service/These/Convention/convention.phtml b/module/Application/src/Application/Service/These/Convention/convention.phtml
index b5ca2f1db443835460c94d172fb5f497261dbda8..f14751ceced1d4efa03f8ffc5088c7ce74efe25c 100644
--- a/module/Application/src/Application/Service/These/Convention/convention.phtml
+++ b/module/Application/src/Application/Service/These/Convention/convention.phtml
@@ -1,16 +1,17 @@
 <?php
 
+use Application\Entity\Db\Diffusion;
 use Application\Entity\Db\These;
+use Application\Service\Message\DiffusionMessages;
 use Application\View\Renderer\PhpRenderer;
 
 /**
  * @var PhpRenderer $this
  * @var These       $these
+ * @var Diffusion   $diffusion
  * @var string      $libEtablissement
  * @var string      $libEtablissementA
  * @var string      $libEtablissementLe
- * @var string      $libEtablissementDe
- * @var string      $libTribunal
  */
 ?>
 
@@ -75,12 +76,7 @@ use Application\View\Renderer\PhpRenderer;
 
 <div>
     <p>
-        La thèse est disponible en version imprimée au service de documentation <?php echo $libEtablissementDe ?> et
-        en PDF pour l'esemble de la communauté universitaire (en intranet ou dans le cadre du Prêt Entre Bibliothèques).
-    </p>
-    <p>
-        La loi applicable à cette présente convention est la loi française. Le tribunal compétent pour juger de tout
-        contentieux lié au présent contrat est <?php echo $libTribunal ?>.
+        <?php echo $this->message()->render(DiffusionMessages::AUTORIS_MISE_EN_LIGNE_LAIUS, [], $diffusion) ?>
     </p>
 </div>
 
diff --git a/module/Application/src/Application/Service/These/Convention/partial/diffusion.phtml b/module/Application/src/Application/Service/These/Convention/partial/diffusion.phtml
index 042ad8675688dc23202f84ac9264a41dfa9e790d..2b45a8faae8066086b7e71a57b8c9963b746f4ce 100644
--- a/module/Application/src/Application/Service/These/Convention/partial/diffusion.phtml
+++ b/module/Application/src/Application/Service/These/Convention/partial/diffusion.phtml
@@ -28,7 +28,4 @@ use Application\View\Renderer\PhpRenderer;
     <div class="diffusion-item-value">
         <?php echo $this->message()->render(DiffusionMessages::AUTORIS_MISE_EN_LIGNE_REPONSE, [], $diffusion) ?>
     </div>
-    <div class="autorisation-laius text-info">
-        <?php echo $this->message()->render(DiffusionMessages::AUTORIS_MISE_EN_LIGNE_LAIUS, [], $diffusion) ?>
-    </div>
 </div>
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/These/Convention/partial/header.phtml b/module/Application/src/Application/Service/These/Convention/partial/header-even.phtml
similarity index 100%
rename from module/Application/src/Application/Service/These/Convention/partial/header.phtml
rename to module/Application/src/Application/Service/These/Convention/partial/header-even.phtml
diff --git a/module/Application/src/Application/Service/These/Convention/partial/header-odd.phtml b/module/Application/src/Application/Service/These/Convention/partial/header-odd.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..f6219cbd3c3257895db6a637e7d518f5e4c37049
--- /dev/null
+++ b/module/Application/src/Application/Service/These/Convention/partial/header-odd.phtml
@@ -0,0 +1,14 @@
+<table width="100%" style="font-size: 110%; vertical-align: top;">
+    <tr>
+        <td width="30%" style="text-align: left;">
+            <?php echo $this->headerSubtitle; ?>
+        </td>
+        <td width="40%" align="cegnter" style="font-weight: bold; /*font-size: 120%;*/">
+            <?php echo $this->headerTitle; ?>
+        </td>
+        <td width="20" style="text-align: right;">
+
+        </td>
+    </tr>
+</table>
+
diff --git a/module/Application/src/Application/Service/These/PageDeGarde/PageDeCouverturePdfExporter.php b/module/Application/src/Application/Service/These/PageDeGarde/PageDeCouverturePdfExporter.php
index f3fb5e0434c91727d39694c5e1c5b2c3bc26f6d7..e769a14f0c6b3f0ddb5d7beefb4f3514aa6b479c 100644
--- a/module/Application/src/Application/Service/These/PageDeGarde/PageDeCouverturePdfExporter.php
+++ b/module/Application/src/Application/Service/These/PageDeGarde/PageDeCouverturePdfExporter.php
@@ -31,6 +31,9 @@ class PageDeCouverturePdfExporter extends PdfExporter
         $this->setHeaderScript('empty.phtml');
         $this->setFooterScript('empty.phtml');
         $this->addBodyScript('pagedecouverture.phtml', false, $this->vars);
+        if (isset($this->vars['recto/verso']) AND $this->vars['recto/verso'] === true) {
+            $this->addBodyScript('empty.phtml', true, $this->vars);
+        }
         return PdfExporter::export($filename, $destination, $memoryLimit);
     }
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/These/TheseRechercheService.php b/module/Application/src/Application/Service/These/TheseRechercheService.php
index 24973213674564de7bf823d848b7b16175c67e99..1e58e4b9b510abbe64e54d318cfc916332f439c6 100644
--- a/module/Application/src/Application/Service/These/TheseRechercheService.php
+++ b/module/Application/src/Application/Service/These/TheseRechercheService.php
@@ -775,11 +775,17 @@ class TheseRechercheService
     private function optionify($value = null, $label = null)
     {
         if ($value instanceof Etablissement) {
-            return ['value' => $value->getStructure()->getCode(), 'label' => $value->getSigle()];
+            $subtext = $value->getLibelle();
+            if ($value->getStructure()->isFerme()) $subtext.= "&nbsp; <span class='label' style='color:darkred;'>FERME</span>";
+            return ['value' => $value->getStructure()->getCode(), 'label' => $subtext];
         } elseif ($value instanceof EcoleDoctorale) {
-            return ['value' => $value->getSourceCode(), 'label' => $value->getSigle(), 'subtext' => $value->getLibelle()];
+            $subtext = $value->getLibelle();
+            if ($value->getStructure()->isFerme()) $subtext.= "&nbsp; <span class='label' style='color:darkred;'>FERMEE</span>";
+            return ['value' => $value->getSourceCode(), 'label' => $value->getSigle(), 'subtext' => $subtext];
         } elseif ($value instanceof UniteRecherche) {
-            return ['value' => $value->getSourceCode(), 'label' => $value->getCode(), 'subtext' => $value->getLibelle()];
+            $subtext = $value->getLibelle();
+            if ($value->getStructure()->isFerme()) $subtext.= "&nbsp; <span class='label' style='color:darkred;'>FERMEE</span>";
+            return ['value' => $value->getSourceCode(), 'label' => $value->getCode(), 'subtext' => $subtext];
         } elseif ($value instanceof DomaineScientifique) {
             return ['value' => (string) $value->getId(), 'label' => $value->getLibelle()];
         } elseif ($value instanceof OrigineFinancement) {
diff --git a/module/Application/view/application/ecole-doctorale/index.phtml b/module/Application/view/application/ecole-doctorale/index.phtml
index e6989fc6d3b58949ac764aa0340fe38d845e4551..b4ab849da140ad17dd0aaae63dd2bbb5bd276bb1 100644
--- a/module/Application/view/application/ecole-doctorale/index.phtml
+++ b/module/Application/view/application/ecole-doctorale/index.phtml
@@ -60,6 +60,9 @@ $canSubstituer = $this->isAllowed(SubstitutionPrivileges::getResourceId(Substitu
                 <td>
                     <a href="<?php echo $this->url('ecole-doctorale/information', ['structure' => $ecole->getStructure()->getId()], [], true); ?>">
                         <?php echo $ecole->getLibelle(); ?>
+                        <?php if ($ecole->getStructure()->isFerme()) : ?>
+                            &nbsp;<span class="label" style="background-color: darkred">Structure fermée</span>
+                        <?php endif; ?>
                     </a>
                 </td>
                 <td>
diff --git a/module/Application/view/application/ecole-doctorale/information.phtml b/module/Application/view/application/ecole-doctorale/information.phtml
index 5fac43e9e90ed2029f0b9657203b70504822af65..efa65afca9aefd5bd22b38a3fbe4739f6215a4de 100644
--- a/module/Application/view/application/ecole-doctorale/information.phtml
+++ b/module/Application/view/application/ecole-doctorale/information.phtml
@@ -38,6 +38,14 @@ $canAddRole = $canEdit;
                 <dd>    <?php echo $ecole->getSigle(); ?>       </dd>
                 <dt> Code :</dt>
                 <dd>    <?php echo $ecole->getStructure()->getCode(); ?>        </dd>
+                <dt> Statut :</dt>
+                <dd>
+                    <?php if ($ecole->getStructure()->isFerme()) : ?>
+                        <span class="label" style="background-color:darkred">Structure fermée</span>
+                    <?php else : ?>
+                        <span class="label" style="background-color:darkgreen">Structure ouverte</span>
+                    <?php endif; ?>
+                </dd>
             </dl>
         </div>
         <div class="col-md-4">
diff --git a/module/Application/view/application/ecole-doctorale/modifier.phtml b/module/Application/view/application/ecole-doctorale/modifier.phtml
index 6177ff87b37f0a922772639d9b6fd351b93fcfe0..03136e73504fd534f350de7d001c513c825aefad 100644
--- a/module/Application/view/application/ecole-doctorale/modifier.phtml
+++ b/module/Application/view/application/ecole-doctorale/modifier.phtml
@@ -45,6 +45,7 @@ $form->get('code')->setAttribute('readonly', !$editable);
         <?php echo $fcg($form->get('libelle')) ?>
         <?php echo $fcg($form->get('sigle')) ?>
         <?php echo $fcg($form->get('code')) ?>
+        <?php echo $fcg($form->get('estFerme')) ?>
     </div>
 
     <div id="logo-div" class="col-md-6">
diff --git a/module/Application/view/application/etablissement/index.phtml b/module/Application/view/application/etablissement/index.phtml
index 51ebdd5abe4f97c6bcfb45e05369e9ca326a2a58..0551a9a9b1c3028e5e43d783a2a3a5f20d17adf6 100644
--- a/module/Application/view/application/etablissement/index.phtml
+++ b/module/Application/view/application/etablissement/index.phtml
@@ -72,6 +72,9 @@ $canSubstituer = $this->isAllowed(SubstitutionPrivileges::getResourceId(Substitu
                 <td>
                     <a href="<?php echo $this->url('etablissement/information', ['structure' => $etablissement->getStructure()->getId()], [], true); ?>">
                         <?php echo $etablissement->getLibelle(); ?>
+                        <?php if ($etablissement->getStructure()->isFerme()) : ?>
+                            &nbsp;<span class="label" style="background-color: darkred">Structure fermée</span>
+                        <?php endif; ?>
                     </a>
                     <?php if ($etablissement->estMembre()): ?>
                         <span class="label label-primary">Membre</span>
diff --git a/module/Application/view/application/etablissement/information.phtml b/module/Application/view/application/etablissement/information.phtml
index a508ad5409510eaf59d1a9383a19a29b51d9db67..7a4480fa1525b3c52b996ed492d72191f7b944a3 100644
--- a/module/Application/view/application/etablissement/information.phtml
+++ b/module/Application/view/application/etablissement/information.phtml
@@ -67,6 +67,11 @@ $canAddRole = true;
                     <?php if ($etablissement->estAssocie()): ?>
                         <span class="label label-info">Associé</span>
                     <?php endif ?>
+                    <?php if ($etablissement->getStructure()->isFerme()) : ?>
+                        <span class="label" style="background-color:darkred">Structure fermée</span>
+                    <?php else : ?>
+                        <span class="label" style="background-color:darkgreen">Structure ouverte</span>
+                    <?php endif; ?>
                 </dd>
             </dl>
         </div>
diff --git a/module/Application/view/application/etablissement/modifier.phtml b/module/Application/view/application/etablissement/modifier.phtml
index 1cc03b970e1c3a56e916b4f79c25536192381211..70c31d7e0417835e68dab79db562e85c8455db01 100644
--- a/module/Application/view/application/etablissement/modifier.phtml
+++ b/module/Application/view/application/etablissement/modifier.phtml
@@ -19,13 +19,19 @@ $fcg = $this->formControlGroup();
 ?>
 
 <?php echo $this->form()->openTag($form->prepare()->setAttribute('class', 'etablissement')) ?>
-<?php echo $this->formHidden($form->get('id')) ?>
-<?php echo $fcg($form->get('libelle')) ?>
-<?php echo $fcg($form->get('sigle')) ?>
-<?php echo $fcg($form->get('code')) ?>
-<?php echo $fcg($form->get('domaine')) ?>
-<?php echo $fcg($form->get('estMembre')) ?>
-<?php echo $fcg($form->get('estAssocie')) ?>
+
+<div class="row">
+    <div class="col-md-6">
+        <?php echo $this->formHidden($form->get('id')) ?>
+        <?php echo $fcg($form->get('libelle')) ?>
+        <?php echo $fcg($form->get('sigle')) ?>
+        <?php echo $fcg($form->get('code')) ?>
+        <?php echo $fcg($form->get('domaine')) ?>
+        <?php echo $fcg($form->get('estMembre')) ?>
+        <?php echo $fcg($form->get('estAssocie')) ?>
+        <?php echo $fcg($form->get('estFerme')) ?>
+    </div>
+    <div class="col-md-6">
 
     <div id="logo-div">
         <?php
@@ -76,8 +82,9 @@ $fcg = $this->formControlGroup();
                 </ul>
             </small>
         </div>
-
     </div>
+    </div>
+</div>
 <?php echo $this->formElement($form->get('submit')) ?>
 <?php echo $this->form()->closeTag() ?>
 
diff --git a/module/Application/view/application/substitution/index-structure.phtml b/module/Application/view/application/substitution/index-structure.phtml
index b67682a673f554bf720d28cf49955122e4ff9b20..5ff760e277c3db384b234c509a6fb7a94f59a8e3 100644
--- a/module/Application/view/application/substitution/index-structure.phtml
+++ b/module/Application/view/application/substitution/index-structure.phtml
@@ -31,14 +31,14 @@ $canEdit =  $this->isAllowed(SubstitutionPrivileges::getResourceId(SubstitutionP
 ?>
 
 <?php if ($canView): ?>
-    <div class="panel panel-info">
+    <div class="box panel panel-info">
         <div class="panel-heading">
-            <h3>
+            <h2>
                 <?php echo $libelle; ?>
                 <span class="badge">
                     <?php echo count($structures); ?>
                 </span>
-            </h3>
+            </h2>
 
         </div>
         <div class="panel-body">
diff --git a/module/Application/view/application/these/identite.phtml b/module/Application/view/application/these/identite.phtml
index c35ed6290483cfcb1b79f6ea45ba30699770d830..d41a49dc1b0283b60badaf058cb4a8309aef7de7 100644
--- a/module/Application/view/application/these/identite.phtml
+++ b/module/Application/view/application/these/identite.phtml
@@ -323,6 +323,16 @@ $financementFormatter->setDisplayAs(FinancementFormatter::DISPLAY_AS_LINE);
             <dt>Années universitaires<br>d'inscription</dt>
             <dd><?php echo $these->getAnneesUnivInscriptionToString('<br>') ?: "(Non renseignée)" ?></dd>
 
+            <?php if ($these->getDateAbandon()): ?>
+            <dt>Date d'abandon</dt>
+            <dd><?php echo $these->getDateAbandonToString() ?></dd>
+            <?php endif ?>
+
+            <?php if ($these->getDateTransfert()): ?>
+            <dt>Date de transfert
+            <dd><?php echo $these->getDateTransfertToString() ?></dd>
+            <?php endif ?>
+
             <?php if ($these->getSoutenanceAutorisee()): ?>
                 <dt>Soutenance autorisée</dt>
                 <dd><?php echo $these->getSoutenanceAutorisee() === 'O' ? "Oui" : "Non" ?></dd>
diff --git a/module/Application/view/application/these/partial/diffusion.phtml b/module/Application/view/application/these/partial/diffusion.phtml
index 090cb431e7c4a687ad38de9d235a04ac84fcad2d..3902b4edd1247e29fea50ef5bc2f89eeb463cb81 100644
--- a/module/Application/view/application/these/partial/diffusion.phtml
+++ b/module/Application/view/application/these/partial/diffusion.phtml
@@ -49,6 +49,6 @@ use Application\Service\Message\DiffusionMessages;
     <?php endif ?>
 
     <?php if ($halId = $diffusion->getHalId()): ?>
-        <li>Identifiant HAL : <code class="text-muted"><?php echo $halId ?></code></li>
+        <li>IdHAL : <code class="text-muted"><?php echo $halId ?></code></li>
     <?php endif ?>
 </ul>
\ No newline at end of file
diff --git a/module/Application/view/application/these/rdv-bu-doctorant.phtml b/module/Application/view/application/these/rdv-bu-doctorant.phtml
index 594e0d4233410872ed3f2063d891fe35a1770ce6..6f97899ea244976bcac83be900d60b9a06595067 100644
--- a/module/Application/view/application/these/rdv-bu-doctorant.phtml
+++ b/module/Application/view/application/these/rdv-bu-doctorant.phtml
@@ -1,5 +1,6 @@
 <?php
 
+use Application\Entity\Db\Diffusion;
 use Application\Entity\Db\These;
 use Application\Entity\Db\Validation;
 use Application\Provider\Privilege\ThesePrivileges;
@@ -8,6 +9,7 @@ use Application\View\Renderer\PhpRenderer;
 /**
  * @var                 $this PhpRenderer
  * @var These           $these
+ * @var Diffusion       $diffusion
  * @var bool            $estDoctorant
  * @var string          $modifierUrl
  * @var Validation|null $validation
@@ -27,13 +29,17 @@ $rdvBu = $these->getRdvBu();
 
 <div class="panel panel-info box">
     <div class="panel-heading">
-        <h2 class="first">Téléchargement de la version imprimable de votre thèse </h2>
+        <h2 class="first">Téléchargement de la version imprimable de votre thèse</h2>
     </div>
     <div class="panel-body">
 
         <p>
-        Avant de vous rendre au rendez-vous à la BU, vous devez imprimer un exemplaire papier de votre thèse.<br/>
-        Pour obtenir la version imprimable de votre thèse (avec page de couverture), veuillez cliquer sur le bouton ci-dessous.
+            <?php if ($diffusion->isRemiseExemplairePapierRequise()): ?>
+                Avant que la BU ne prenne contact avec vous, vous devez télécharger la thèse complète, c'est à dire le corps du mémoire auquel est ajoutée la page de couverture générée automatiquement par l'application.
+                Une fois la thèse complète téléchargée, assurez-vous que toutes les informations sur la page de couverture sont présentes et que la fusion n'a pas endommagé le mémoire.
+            <?php else: ?>
+                Vous pouvez obtenir la version imprimable de votre thèse (avec page de couverture) en cliquant sur le bouton ci-dessous.
+            <?php endif ?>
         </p>
 
 <!--        <div class="pull-right">-->
diff --git a/module/Application/view/application/these/rdv-bu.phtml b/module/Application/view/application/these/rdv-bu.phtml
index 6c2d75b5d76a0ba22d16c30723623cf031177063..b187557d99cd108ee2a720df2b22a9d26895d65e 100644
--- a/module/Application/view/application/these/rdv-bu.phtml
+++ b/module/Application/view/application/these/rdv-bu.phtml
@@ -1,5 +1,7 @@
 <?php
 
+use Application\Controller\TheseController;
+use Application\Entity\Db\Diffusion;
 use Application\Entity\Db\These;
 use Application\Entity\Db\Validation;
 use Application\Entity\Db\WfEtape;
@@ -12,6 +14,7 @@ use Application\Entity\Db\Repository\FichierTheseRepository;
 /**
  * @var PhpRenderer            $this
  * @var These                  $these
+ * @var Diffusion              $diffusion
  * @var bool                   $estDoctorant
  * @var string                 $modifierUrl
  * @var string                 $validerUrl
@@ -21,6 +24,8 @@ use Application\Entity\Db\Repository\FichierTheseRepository;
  * @var string                 $nextStepUrl
  * @var FichierTheseRepository $fichierRepository
  * @var boolean                $asynchronous
+ *
+ * @see TheseController::modifierRdvBuAction()
  */
 
 $canEdit = $this->isAllowed($these, ThesePrivileges::THESE_SAISIE_RDV_BU);
@@ -38,14 +43,18 @@ $rdvBu = $these->getRdvBu();
 
 <div class="panel panel-info box">
     <div class="panel-heading">
-        <h2 class="first">Téléchargement de la thèse avec page de couverture</h2>
+        <h2 class="first">Téléchargement de la version imprimable de votre thèse</h2>
     </div>
     <div class="panel-body">
         <p>
+        <?php if ($diffusion->isRemiseExemplairePapierRequise()): ?>
             Avant que la BU ne prenne contact avec vous, vous devez télécharger la thèse complète, c'est à dire le corps du mémoire auquel est ajoutée la page de couverture générée automatiquement par l'application.
             Une fois la thèse complète téléchargée, assurez-vous que toutes les informations sur la page de couverture sont présentes et que la fusion n'a pas endommagé le mémoire.
+        <?php else: ?>
+            Vous pouvez obtenir la version imprimable de votre thèse (avec page de couverture) en cliquant sur le bouton ci-dessous.
+        <?php endif ?>
         </p>
-        <div class="checkbox">
+        <div class="checkbox checkbox-sm">
             <label for="removal">
                 <input type="checkbox" id="removal"/>
                 <span class="checkbox-label">La 1ère page du corps du mémoire est une page de couverture fournie par le doctorant et je veux retirer cette 1ère page.</span>
diff --git a/module/Application/view/application/these/validation-these-corrigee.phtml b/module/Application/view/application/these/validation-these-corrigee.phtml
index 5e676d440180b5839c7bc8093ee2c8e112ed220a..904be7102a792e2c323d017dc5191748e47c85e5 100644
--- a/module/Application/view/application/these/validation-these-corrigee.phtml
+++ b/module/Application/view/application/these/validation-these-corrigee.phtml
@@ -32,7 +32,7 @@ $canUnvalidate = $this->isAllowed($these, ValidationPrivileges::VALIDATION_DEPOT
 </h1>
 
 <div>
-    <div class="panel panel-info">
+    <div class="box panel panel-info">
         <div class="panel-heading"> <h2 class="first">Téléchargement de la thèse corrigée complète </h2></div>
         <div class="panel-body">
 
diff --git a/module/Application/view/application/unite-recherche/index.phtml b/module/Application/view/application/unite-recherche/index.phtml
index b1d8a8928fa72ad4a4dd8dbda360c592c726f969..94714dcf89728690be1b1e2a6bbbbef1fdbb3fd2 100644
--- a/module/Application/view/application/unite-recherche/index.phtml
+++ b/module/Application/view/application/unite-recherche/index.phtml
@@ -62,6 +62,9 @@ $canSubstituer = $this->isAllowed(SubstitutionPrivileges::getResourceId(Substitu
                 <td>
                     <a href="<?php echo $this->url('unite-recherche/information', ['structure' => $unite->getStructure()->getId()], [], true); ?>">
                         <?php echo $unite->getLibelle(); ?>
+                        <?php if ($unite->getStructure()->isFerme()) : ?>
+                            &nbsp;<span class="label" style="background-color: darkred">Structure fermée</span>
+                        <?php endif; ?>
                     </a>
                 </td>
                 <td>
diff --git a/module/Application/view/application/unite-recherche/information.phtml b/module/Application/view/application/unite-recherche/information.phtml
index 6bfc2968b42f4daf83cadbd203ba9d957ab92c91..578a56dc93fe6cc660e1aeffba5c9f95bf88e0e1 100644
--- a/module/Application/view/application/unite-recherche/information.phtml
+++ b/module/Application/view/application/unite-recherche/information.phtml
@@ -57,6 +57,14 @@ $canAddRole = $canEdit;
                     <?php endforeach; ?>
                 </ul>
             </dd>
+            <dt> Statut :</dt>
+            <dd>
+                <?php if ($unite->getStructure()->isFerme()) : ?>
+                    <span class="label" style="background-color:darkred">Structure fermée</span>
+                <?php else : ?>
+                    <span class="label" style="background-color:darkgreen">Structure ouverte</span>
+                <?php endif; ?>
+            </dd>
         </dl>
     </div>
     <div class="col-md-4">
diff --git a/module/Application/view/application/unite-recherche/modifier.phtml b/module/Application/view/application/unite-recherche/modifier.phtml
index 005006c86ca21c1d667fc41f9457fa05ee36707b..d05928138b126d81af0a7e8cfdf67ba66fea8287 100644
--- a/module/Application/view/application/unite-recherche/modifier.phtml
+++ b/module/Application/view/application/unite-recherche/modifier.phtml
@@ -59,6 +59,7 @@ $form->get('code')->setAttribute('readonly', !$editable);
         <?php echo $fcg($form->get('sigle')) ?>
         <?php echo $fcg($form->get('code')) ?>
         <?php echo $fcg($form->get('RNSR')) ?>
+        <?php echo $fcg($form->get('estFerme')) ?>
     </div>
 
     <div class="col-md-6" id="logo-div">
diff --git a/module/Import/src/Import/Model/Mapping/Import.Model.TmpThese.dcm.xml b/module/Import/src/Import/Model/Mapping/Import.Model.TmpThese.dcm.xml
index 07c1eca8fcc0365a1c177d32a86b6ed03e853fb6..7a38f90e4442c1b876c4ae3926a871e55a23eb7d 100644
--- a/module/Import/src/Import/Model/Mapping/Import.Model.TmpThese.dcm.xml
+++ b/module/Import/src/Import/Model/Mapping/Import.Model.TmpThese.dcm.xml
@@ -17,6 +17,8 @@
         <field name="datePremiereInsc"          type="date" column="DAT_DEB_THS" nullable="true"/>
         <field name="dateSoutenancePrev"        type="date" column="DAT_PREV_SOU" nullable="true"/>
         <field name="dateSoutenance"            type="date" column="DAT_SOU_THS" nullable="true"/>
+        <field name="dateAbandon"               type="date" column="DAT_ABANDON" nullable="true"/>
+        <field name="dateTransfert"             type="date" column="DAT_TRANSFERT_DEP" nullable="true"/>
 
         <field name="etatThese"                 type="string" column="ETA_THS" length="20" nullable="true"/>
         <field name="libDiscipline"             type="string" column="LIB_INT1_DIS" length="200" nullable="true"/>
diff --git a/module/Import/src/Import/Model/TmpThese.php b/module/Import/src/Import/Model/TmpThese.php
index 86833dcf0e93da41627825f8cf589a83dd16cd18..3acc2544a98cd4b1f115cbea00dc74626a2ede87 100644
--- a/module/Import/src/Import/Model/TmpThese.php
+++ b/module/Import/src/Import/Model/TmpThese.php
@@ -62,6 +62,16 @@ class TmpThese
      */
     private $dateSoutenance;
 
+    /**
+     * @var \DateTime
+     */
+    private $dateAbandon;
+
+    /**
+     * @var \DateTime
+     */
+    private $dateTransfert;
+
     /**
      * @var string
      */
diff --git a/module/Retraitement/src/Retraitement/Service/RetraitementService.php b/module/Retraitement/src/Retraitement/Service/RetraitementService.php
index 56011b62ed21f0e7134b617e95c335a6fb69418d..99ca1cfec08c716fffa0556773ee96d44ae97f72 100644
--- a/module/Retraitement/src/Retraitement/Service/RetraitementService.php
+++ b/module/Retraitement/src/Retraitement/Service/RetraitementService.php
@@ -2,16 +2,16 @@
 
 namespace Retraitement\Service;
 
-use Retraitement\Exception\TimedOutCommandException;
+use Application\Command\Exception\TimedOutCommandException;
 use Application\Command\CommandInterface;
 use RuntimeException;
 
 class RetraitementService
 {
     /**
-     * FichierStarCorrector constructor.
+     * RetraitementService constructor.
      *
-     * @param \Application\Filter\Command\\Application\Command\CommandInterface $command
+     * @param CommandInterface $command
      */
     public function __construct(CommandInterface $command)
     {
@@ -19,12 +19,12 @@ class RetraitementService
     }
 
     /**
-     * @var \Application\Filter\Command\\Application\Command\CommandInterface
+     * @var CommandInterface
      */
     private $command;
 
     /**
-     * @param \Application\Filter\Command\CommandInterface $command
+     * @param CommandInterface $command
      * @return self
      */
     public function setCommand(CommandInterface $command)
@@ -40,7 +40,7 @@ class RetraitementService
      * @param string $inputFilePath Chemin du fichier à retraiter
      * @param string $outputFilePath Chemin du fichier retraité généré
      * @param string  $timeout Timeout à appliquer au lancement du script de retraitement.
-     * @throws TimedOutCommandException Le timout a été atteint
+     * @throws TimedOutCommandException Le timout d'exécution a été atteint
      */
     private function retraiterFichierByPath($inputFilePath, $outputFilePath, $timeout = null)
     {
@@ -62,9 +62,6 @@ class RetraitementService
                 ));
             }
         }
-        catch (TimedOutCommandException $toce) {
-            throw $toce;
-        }
         catch (RuntimeException $rte) {
             throw new RuntimeException(
                 "Une erreur est survenue lors de l'exécution de la commande de retraitement " . $this->command->getName(),
diff --git a/module/Retraitement/src/Retraitement/Service/RetraitementServiceFactory.php b/module/Retraitement/src/Retraitement/Service/RetraitementServiceFactory.php
index 0eae5abda5ff45005a96099a27ddc11e6f36dd6e..0d82e1042a3b7396786a6f876975ad43af05461f 100644
--- a/module/Retraitement/src/Retraitement/Service/RetraitementServiceFactory.php
+++ b/module/Retraitement/src/Retraitement/Service/RetraitementServiceFactory.php
@@ -2,7 +2,6 @@
 
 namespace Retraitement\Service;
 
-use Application\Service\FichierThese\FichierTheseService;
 use Application\Command\CommandInterface;
 use Zend\ServiceManager\Exception\InvalidArgumentException;
 use Zend\ServiceManager\FactoryInterface;
@@ -20,11 +19,13 @@ class RetraitementServiceFactory implements FactoryInterface
     {
         $command = $this->createCommand($serviceLocator);
 
-        $service = new RetraitementService($command);
-
-        return $service;
+        return new RetraitementService($command);
     }
 
+    /**
+     * @param ServiceLocatorInterface $serviceLocator
+     * @return CommandInterface
+     */
     private function createCommand(ServiceLocatorInterface $serviceLocator)
     {
         $config = $serviceLocator->get('config');
@@ -37,7 +38,7 @@ class RetraitementServiceFactory implements FactoryInterface
             throw new InvalidArgumentException("La classe spécifiée dans l'option de 'config sygal.retraitement.command.class' n'existe pas");
         }
 
-        /** @var \Application\Filter\Command\\Application\Command\CommandInterface $command */
+        /** @var CommandInterface $command */
         $command = new $commandClass;
 
         if (isset($config['sygal']['retraitement']['command']['options'])) {
diff --git a/public/css/app.css b/public/css/app.css
index af69191f920c129afc3f9236403f96bf6019896e..3dca3cde511a25edc23bdda8c10c2f0940f00230 100644
--- a/public/css/app.css
+++ b/public/css/app.css
@@ -406,6 +406,12 @@ p.autoris-diffusion-motif {
 .checkbox .checkbox-label {
   margin-left: 5px; }
 
+.checkbox-sm input[type="checkbox"] {
+  transform: scale(0.9); }
+.checkbox-sm .checkbox-label {
+  margin-left: 2px;
+  font-size: 90%; }
+
 form.form-retraiter {
   margin: 4px 0 15px 0; }
 
diff --git a/public/css/app.css.map b/public/css/app.css.map
index 2db31d52c8b43d7e43f614f1e221aff7c533f0a4..f1daf68a8bb2008dcf3fbc1e7cf3625e0168c0a8 100644
--- a/public/css/app.css.map
+++ b/public/css/app.css.map
@@ -1,6 +1,6 @@
 {
 "version": 3,
-"mappings": "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",
+"mappings": ";AAOA,UAAW;EACT,WAAW,EAAE,IAAI;;AAGnB,EAAG;EACD,UAAU,EAAE,IAAI;;AAGlB,iBAAkB;EAChB,UAAU,EAAE,IAAI;;AAGlB,4BAA6B;EAC3B,gBAAgB,EAAE,8BAA8B;EAChD,iBAAiB,EAAE,SAAS;EAC5B,eAAe,EAAE,SAAS;EAC1B,mBAAmB,EAAE,SAAS;EAC9B,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,OAAO;;AAIpB,cAAG;EACD,SAAS,EAAE,IAAI;AAEjB,6BAAkB;EAChB,UAAU,EAAE,CAAC;;AAIjB,cAAe;EACb,gBAAgB,EAAE,KAAK;EACvB,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,CAAC;EACb,OAAO,EAAE,CAAC;;AAGZ,4BAA6B;EAEzB,WAAG,EAAE,GAAG;EACR,cAAM,EAAE,GAAG;;AAGf,aAAc;EACZ,gBAAgB,EAAE,OAAiB;EACnC,0BAAa;IACX,KAAK,EAAE,KAAK;IACZ,gBAAgB,EAAE,WAAW;;AAI/B,kBAAK;EACH,OAAO,EAAE,OAAO;;AAIpB,UAAW;EACT,aAAa,EAAE,IAAI;EAEnB,yBAAe;IACb,OAAO,EAAE,QAAQ;IACjB,4BAAG;MACD,SAAS,EAAE,IAAI;MACf,MAAM,EAAE,CAAC;IAEX,wCAAe;MACb,YAAY,EAAE,GAAG;EAInB,yBAAG;IAEC,SAAI,EAAE,IAAI;EAGd,yBAAG;IAEC,SAAI,EAAE,IAAI;IACV,WAAM,EAAE,IAAI;EAIhB,wCAAkB;IAChB,UAAU,EAAE,CAAC;EAEf,kIAAuC;IACrC,UAAU,EAAE,CAAC;EAGf,0CAAoB;IAClB,KAAK,EAAE,GAAG;IACV,SAAS,EAAE,KAAK;IAEd,UAAG,EAAE,IAAI;IACT,WAAI,EAAE,CAAC;;AAKf,4BAA6B;EAC3B,KAAK,EAAE,GAAG;;AAGZ,qBAAsB;EACpB,cAAc,EAAE,SAAS;;AAG3B,WAAY;EACV,YAAY,EAnHF,OAAO;;AAqHnB,4BAA6B;EAC3B,KAAK,EAAE,KAAK;EACZ,gBAAgB,EAvHN,OAAO;EAwHjB,YAAY,EAxHF,OAAO;;AA2HnB,cAAe;EACb,YAAY,EA3HC,OAAO;;AA6HtB,+BAAgC;EAC9B,KAAK,EAAE,KAAK;EACZ,gBAAgB,EA/HH,OAAO;EAgIpB,YAAY,EAhIC,OAAO;;AAmItB,aAAc;EACZ,YAAY,EAlIA,OAAO;;AAoIrB,8BAA+B;EAC7B,KAAK,EAAE,KAAK;EACZ,gBAAgB,EAtIJ,OAAO;EAuInB,YAAY,EAvIA,OAAO;;AA0IrB,cAAe;EACb,YAAY,EA5IC,OAAO;;AA8ItB,+BAAgC;EAC9B,KAAK,EAAE,KAAK;EACZ,gBAAgB,EAhJH,OAAO;EAiJpB,YAAY,EAjJC,OAAO;;AAqJtB,eAAgB;EACd,SAAS,EAAE,GAAG;EACd;6BACY;IACV,OAAO,EAAE,QAAQ;;AAKnB,2DAA4B;EAC1B,SAAS,EAAE,GAAG;EACd,OAAO,EAAE,OAAO;;AAIpB,qCAAsC;EACpC,YAAY,EAAE,CAAC;EACf,eAAe,EAAE,IAAI;EACrB,2CAAG;IACD,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,GAAG;IAClB,WAAW,EAAE,SAAS;IACtB,iDAAG;MACD,MAAM,EAAE,CAAC;;AAKb,gBAAG;EAED,iBAAiB,EAAE,OAAO;;AAI5B,yBAAG;EAED,iBAAiB,EAAE,OAAO;;AAI9B,UAAW;EACT,SAAS,EAAE,IAAI;EACf,aAAG;IACD,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,IAAI;;AAItB;mBACoB;EAClB,SAAS,EAAE,IAAI;;AAGjB,kBAAmB;EAEf,UAAG,EAAE,KAAK;EACV,aAAM,EAAE,IAAI;;AAIhB,WAAY;EACV,gBAAgB,EAAE,iDAAiD;EACnE,mBAAmB,EAAE,aAAa;EAClC,UAAU,EAAE,IAAI;EAChB,aAAE;IACA,OAAO,EAAE,GAAG;;AAKd,4BAAS;EACP,gBAAgB,EAAE,iDAAiD;EACnE,mBAAmB,EAAE,OAAO;;AAqBhC,eAAgB;EACd,SAAS,EAAE,IAAI;EACf,YAAY,EAAE,IAAI;;AAGpB,WAAY;EACV,aAAa,EAAE,IAAI;EACnB,sBAAW;IACT,YAAY,EAAE,GAAG;;AAIrB,qBAAsB;EACpB,UAAU,EAAE,KAAK;;AAGnB,2BAA4B;EAC1B,UAAU,EAAE,CAAC;;AAGf,kBAAmB;EACjB,SAAS,EAAE,GAAG;;AAGhB,YAAa;EACX,SAAS,EAAE,GAAG;EAEZ,UAAG,EAAE,IAAI;EAEX,KAAK,EAAE,OAAO;;AAGhB,gBAAiB;EACf,OAAO,EAAE,eAAe;EACxB,aAAa,EAAE,IAAI;EACnB,MAAM,EAAE,eAAe;EAErB,8EAAiB;IACf,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,GAAG;IAChB,KAAK,EAAE,OAAO;IAEZ,SAAI,EAAE,GAAG;IACT,WAAM,EAAE,IAAI;IAEd,cAAc,EAAE,GAAG;;AAKzB,cAAe;EACb,OAAO,EAAE,KAAK;EAEZ,WAAI,EAAE,IAAI;EACV,YAAK,EAAE,IAAI;EAEb,KAAK,EAAE,KAAK;;AAIZ,kBAAK;EACH,OAAO,EAAE,OAAO;EAChB,SAAS,EAAE,GAAG;;AAIlB,kBAAmB;EACjB,SAAS,EAAE,GAAG;;AAGhB,YAAa;EACX,SAAS,EAAE,GAAG;;AAEhB,8BAA+B;EAC7B,UAAU,EAAE,IAAI;EAChB,aAAa,EAAE,GAAG;EAClB,OAAO,EAAE,YAAY;;AAEvB,6BAA8B;EAC5B,UAAU,EAAE,GAAG;;AAGjB,8CAA+C;EAC7C,eAAe,EAAE,IAAI;;AAKvB,YAAY;AAGV,cAAG;EAEC,WAAM,EAAE,IAAI;EACZ,SAAI,EAAE,IAAI;EAGV,UAAG,EAAE,CAAC;EACN,aAAM,EAAE,CAAC;;AAKf,eAAgB;EACd,OAAO,EAAE,aAAa;EACtB,WAAW,EAAE,cAAc;;AAG7B,uBAAwB;EACtB,OAAO,EAAE,KAAK;;AAId,4BAAK;EAED,SAAI,EAAE,GAAG;EACT,WAAM,EAAE,MAAM;;AAMlB,4BAAY;EACV,WAAW,EAAE,GAAG;;AAKlB,8BAAa;EACX,WAAW,EAAE,IAAI;;AAKnB,iBAAG;EACD,UAAU,EAAE,GAAG;EACf,SAAS,EAAE,IAAI;AAEjB,oDAAuB;EACrB,WAAW,EAAE,mBAAmB;;AAKlC,uCAAoB;EAClB,SAAS,EAvYU,GAAG;;AA4YxB,0CAAiB;EACf,SAAS,EA7YU,GAAG;;AAkZxB,KAAG;EAED,aAAa,EAAE,oBAAoB;AAErC,KAAG;EACD,YAAY,EAAE,IAAI;EAClB,aAAa,EAAE,GAAG;;AAKpB,sBAAQ;EACN,UAAU,EAAE,KAAK;;AAIrB,gBAAiB;EACf,aAAa,EAAE,IAAI;;AAGrB,cAAe;EACb,SAAS,EAAE,GAAG;EACd,IAAI,EAAE,KAAK;EACX,GAAG,EAAE,KAAK;EACV,KAAK,EAAE,gBAAgB;EACvB,QAAQ,EAAE,QAAQ;;AAIpB,sBAAuB;EACrB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;;AAGd,QAAS;EACP,SAAS,EAAE,GAAG;;AAGhB,QAAS;EACP,SAAS,EAAE,GAAG;;AAId,iBAAW;EACT,KAAK,EAAE,IAAI;EACX,aAAa,EAAE,GAAG;;AAItB,mBAAoB;EAClB,WAAW,EAAE,IAAI;;AAGnB,eAAgB;EACd,SAAS,EAAE,GAAG;EACd,OAAO,EAAE,QAAQ;;AAGnB,eAAgB;EACd,SAAS,EAAE,GAAG;EACd,OAAO,EAAE,OAAO;;AAGlB,SAAU;EACR,SAAS,EAAE,GAAG;EAEd,MAAM,EAAE,eAAe;EAErB,gBAAK,EAAE,IAAI;EACX,gBAAK,EAAE,WAAW;EAEpB,sBAAa;IACX,WAAW,EAAE,GAAG;;AAKlB,aAAG;EACD,OAAO,EAAE,CAAC;EACV,eAAe,EAAE,IAAI;EACrB,gBAAG;IACD,aAAa,EAAE,oBAAoB;EAErC,oCAAuB;IACrB,aAAa,EAAE,IAAI;;AASrB;oBACG;EAEC,WAAI,EAAE,eAAe;EACrB,YAAK,EAAE,eAAe;EAGtB,WAAG,EAAE,cAAc;EACnB,cAAM,EAAE,cAAc;AAI5B,0BAAe;EACb,OAAO,EAAE,QAAQ;AAEnB,uBAAY;EACV,aAAa,EAAE,GAAG;EAClB;2BACE;IACA,SAAS,EAAE,GAAG;AAIlB,gBAAK;EACH,OAAO,EAAE,IAAI;EACb,4BAAY;IACV,YAAY,EAAE,GAAG;IACjB,cAAc,EAAE,MAAM;IACtB,SAAS,EA/BI,IAAI;IAgCjB,6CAAiB;MACf,SAAS,EAjCE,IAAI;MAkCf,+CAAE;QACA,OAAO,EAAE,OAAO;IAGpB,6CAAiB;MACf,SAAS,EAvCE,IAAI;MAwCf,OAAO,EAAE,iBAAiB;EAQ9B,sBAAM;IACJ,OAAO,EAAE,KAAK;IACd,aAAa,EAAE,GAAG;IAClB,WAAW,EAAE,GAAG;EAElB,+DAA8B;IAC5B,SAAS,EAtDI,IAAI;;AA2DvB,iBAAkB;EAChB,SAAS,EAAE,KAAK;EAChB,SAAS,EAAE,GAAG;;AAGhB,QAAS;EACP,SAAS,EAAE,IAAI;EAAE,4DAA4D;;AAG/E,mBAAoB;EAEhB,SAAI,EAAE,GAAG;EACT,UAAK,EAAE,OAAO;;AAKhB,4BAAG;EACD,aAAa,EAAE,IAAI;EACnB,sDAA0B;IACxB,YAAY,EAAE,IAAI;;AAKxB,2BAA4B;EAC1B,SAAS,EAAE,GAAG;;AAGhB,0BAA2B;EACzB,OAAO,EAAE,SAAS;EAClB,WAAW,EAAE,GAAG;EAChB,KAAK,EAAE,OAAO;EAEZ,SAAI,EAAE,GAAG;EACT,WAAM,EAAE,IAAI;EAEd,cAAc,EAAE,GAAG;;AAGrB,oBAAqB;EACnB,eAAe,EAAE,YAAY;;AAG/B,oBAAqB;EACnB,UAAU,EAAE,GAAG;;AAGjB,yBAA0B;EACxB,SAAS,EAAE,GAAG;;AAGhB,oBAAqB;EACnB,SAAS,EAAE,GAAG;;AAEhB,cAAe;EACb,OAAO,EAAE,SAAS;EAClB,MAAM,EAAE,cAAc;EACtB,aAAa,EAAE,GAAG;;AAGpB,wBAAyB;EACvB,UAAU,EAAE,GAAG;;AAIf,sBAAI;EACF,UAAU,EAAE,iBAAiB;EAC7B,OAAO,EAAE,KAAK;;AAIlB,yBAA0B;EACxB,SAAS,EAAE,GAAG;;AAId,gCAAuB;EACrB,UAAU,EAAE,GAAG;AAEjB,yBAAgB;EACd,WAAW,EAAE,GAAG;;AAIlB,mCAAuB;EACrB,SAAS,EAAG,UAAU;AAExB,4BAAgB;EACd,WAAW,EAAE,GAAG;EAChB,SAAS,EAAE,GAAG;;AAIlB,mBAAoB;EAClB,MAAM,EAAE,YAAY;;AAGtB,yBAA0B;EAEtB,kCAAG;IACD,KAAK,EAAE,KAAK;EAEd,kCAAG;IACD,WAAW,EAAE,KAAK;;EAIpB,kCAAG;IACD,KAAK,EAAE,KAAK;EAEd,kCAAG;IACD,WAAW,EAAE,KAAK;AAKxB,0BAA2B;EACzB,aAAc;IACZ,KAAK,EAAE,MAAM;AAIjB,0BAA2B;EACzB,UAAW;IACT,KAAK,EAAE,MAAM;AAIjB,0BAA2B;EACzB,UAAW;IACT,KAAK,EAAE,MAAM;AAKf,yBAAqB;EACnB,UAAU,EAAE,IAAI;;AAIpB,8BAA8B;AAG5B,mBAAe;EACb,YAAY,EAAE,GAAG;;AAIrB,SAAU;EACR,gBAAgB,EA3rBN,OAAO;EA4rBjB,YAAY,EA5rBF,OAAO;;AA8rBnB,YAAa;EACX,gBAAgB,EA9rBH,OAAO;EA+rBpB,YAAY,EA/rBC,OAAO;;AAisBtB,WAAY;EACV,gBAAgB,EAhsBJ,OAAO;EAisBnB,YAAY,EAjsBA,OAAO;;AAmsBrB,YAAa;EACX,gBAAgB,EArsBH,OAAO;EAssBpB,YAAY,EAtsBC,OAAO;;AA0sBpB,0BAAe;EACb,YAAY,EAAE,GAAG;;AAKnB,qBAAiB;EACf,aAAa,EAAE,IAAI;EAEjB,YAAI,EAAE,IAAI;EACV,aAAK,EAAE,IAAI;AAGf,qCAAiC;EAC/B,aAAa,EAAE,IAAI;;AAIvB,oCAAoC;AAGlC;4CAC+B;EAC7B,SAAS,EAAE,IAAI;EACf,YAAY,EAAE,GAAG;;AAIrB,qBAAsB;EACpB,MAAM,EAAE,KAAK;EACb,wBAAG;IACD,SAAS,EAAE,eAAe;IAExB,uDAAW;MACT,YAAY,EAAE,GAAG;MACjB,SAAS,EAAE,IAAI;MACf,cAAc,EAAE,WAAW;;AAOnC,kCAAkC;AAElC;mBACoB;EAClB,UAAU,EAAE,OAAO;EACnB,aAAa,EAAE,GAAG;EAClB,OAAO,EAAE,GAAG;EACZ,UAAU,EAAE,WAAW;EAEvB;wBAAG;IACD,UAAU,EAAE,CAAC;IAEb;uCAAa;MACX,OAAO,EAAE,KAAK;MACd,MAAM,EAAE,GAAG;MACX,UAAU,EAAE,iBAAiB;IAI/B;oCAAU;MACR,WAAW,EAAE,IAAI;IAKnB;kEAAwC;MACtC,OAAO,EAAE,GAAG;IAEd;6EAAmD;MACjD,OAAO,EAAE,IAAI;IAEf;;yEAA+F;MAC7F,OAAO,EAAE,GAAG;;AAKlB,2BAA4B;EAC1B,WAAW,EAAE,IAAI;EACjB,SAAS,EAAE,IAAI;EACf,aAAa,EAAE,GAAG;EAClB,MAAM,EAAE,iBAAiB;EACzB,OAAO,EAAE,GAAG;EACZ,UAAU,EAAE,MAAM;EAClB,gBAAgB,EAAE,IAAI;EACtB,aAAa,EAAE,IAAI;;AAKrB;2BAC4B;EAC1B,gCAAgC;EAChC,2BAA2B;EAC3B,gBAAgB,EAAE,uBAAuB;EACzC,KAAK,EAAE,KAAK;;AAKZ;6BAAE;EACA,KAAK,EAAE,KAAK;;AAMZ,4BAAO;EACL,SAAS,EAAE,GAAG;EACd,KAAK,EAAE,IAAI;;AAMjB,oDAAc;EACZ,WAAW,EAAE,GAAG;EAChB,KAAK,EAAE,OAAO;EAEZ,SAAI,EAAE,GAAG;EACT,WAAM,EAAE,IAAI;;AAIhB,kBAAmB;EAEjB,OAAO,EAAE,WAAW;;AAEtB,iBAAkB;EAEhB,OAAO,EAAE,UAAU;;AAIrB,6CAA6C;AAE7C,qBAAsB;EACpB,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;EAEX,YAAK,EAAE,MAAM;EACb,YAAK,EAAE,SAAS;EAChB,YAAK,EAAE,GAAG;;AAGd,6BAA8B;EAC5B,UAAU,EAAE,kEAAkE;;AAGhF,UAAW;EACT,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,IAAI;EACX,YAAY,EAAE,IAAI;;AAIpB,iCAAiC;AAG/B,SAAG;EACD,WAAW,EAAE,IAAI;EACjB,SAAS,EAAE,IAAI;;AAKnB,gDAAgD;AAEhD,kBAAmB;EACjB,WAAW,EAAE,IAAI;EACjB,MAAM,EAAE,CAAC;;AAOX,yBAA0B;EACxB,OAAO,EAAE,MAAM;EACf,8CAAqB;IACnB,MAAM,EAAE,SAAS;;AAKrB,qBAAsB;EACpB,UAAU,EAAE,IAAI;EAChB,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,oBAAoB;EAChC,iCAAY;IACV,KAAK,EAAE,IAAI;IACX,YAAY,EAAE,GAAG;EAEnB,0BAAK;IACH,UAAU,EAAE,CAAC",
 "sources": ["app.scss"],
 "names": [],
 "file": "app.css"
diff --git a/public/css/app.scss b/public/css/app.scss
index cccae9d1346378437f9dc534239f261bbf3d5c23..bf43078a21c02a5b18c4eff293895c124b22f477 100755
--- a/public/css/app.scss
+++ b/public/css/app.scss
@@ -633,7 +633,15 @@ p.autoris-diffusion-motif {
     margin-left: 5px;
   }
 }
-
+.checkbox-sm {
+  input[type="checkbox"] {
+    transform : scale(0.9);
+  }
+  .checkbox-label {
+    margin-left: 2px;
+    font-size: 90%;
+  }
+}
 
 form.form-retraiter {
   margin: 4px 0 15px 0;