diff --git a/data/ddl/package/FORMULE_ULHN/body.sql b/data/ddl/package/FORMULE_ULHN/body.sql
index 82e4e6b5fb588b42f1cf7be302285553eb3496cb..fb1e00835902d58709d59837bf65b82cdf822585 100644
--- a/data/ddl/package/FORMULE_ULHN/body.sql
+++ b/data/ddl/package/FORMULE_ULHN/body.sql
@@ -474,7 +474,12 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_ULHN AS
         HORAIRE_FIN,
         TYPE_INTERVENTION_CODE,
         TAUX_SERVICE_DU,
-        TAUX_SERVICE_COMPL
+        TAUX_SERVICE_COMPL,
+        NULL param_1,
+        NULL param_2,
+        NULL param_3,
+        NULL param_4,
+        NULL param_5
       FROM
         v_formule_volume_horaire
       ORDER BY
diff --git a/data/ddl/package/OSE_WORKFLOW/body.sql b/data/ddl/package/OSE_WORKFLOW/body.sql
index e7c25f56af2e3d0e62d2f2f249121628909b68ec..7c3cc2942bfc62f2f1ab5bd9672793231ea81cb0 100644
--- a/data/ddl/package/OSE_WORKFLOW/body.sql
+++ b/data/ddl/package/OSE_WORKFLOW/body.sql
@@ -688,7 +688,6 @@ CREATE OR REPLACE PACKAGE BODY     OSE_WORKFLOW AS
               ELSE edite
             END                            realisation,
             p2.valeur                      avenant_mode,
-            CASE WHEN p2.valeur = ''avenant_desactive'' THEN rownum ELSE 1 END to_delete
           FROM
             tbl_contrat c
             JOIN parametre p on p.nom = ''contrat_regle_franchissement''
@@ -698,7 +697,6 @@ CREATE OR REPLACE PACKAGE BODY     OSE_WORKFLOW AS
             AND actif = 1
             AND nbvh > 0
         ) c
-        WHERE to_delete = 1
     ';
 
 
@@ -885,4 +883,4 @@ CREATE OR REPLACE PACKAGE BODY     OSE_WORKFLOW AS
     END LOOP;
   END;
 
-END OSE_WORKFLOW;
\ No newline at end of file
+END OSE_WORKFLOW;
diff --git a/data/ddl/view/V_ETAT_PAIEMENT.sql b/data/ddl/view/V_ETAT_PAIEMENT.sql
index 3dc2b47451c6e4d5b20e08441b6208a0c36f3eee..d91948751b9026cb5602f150ef5a4c335e4d0fb7 100644
--- a/data/ddl/view/V_ETAT_PAIEMENT.sql
+++ b/data/ddl/view/V_ETAT_PAIEMENT.sql
@@ -2,6 +2,7 @@ CREATE OR REPLACE FORCE VIEW V_ETAT_PAIEMENT AS
 SELECT
              annee_id,
              type_intervenant_id,
+             statut_id,
              structure_id,
              periode_id,
              intervenant_id,
@@ -14,6 +15,7 @@ SELECT
              date_mise_en_paiement,
              periode,
              statut,
+             statut_libelle,
              intervenant_code,
              intervenant_nom,
              intervenant_numero_insee,
@@ -47,6 +49,7 @@ SELECT
                        periode_id,
                        structure_id,
                        type_intervenant_id,
+                       statut_id,
                        intervenant_id,
                        annee_id,
                        centre_cout_id,
@@ -56,6 +59,7 @@ SELECT
                        date_mise_en_paiement,
                        periode,
                        statut,
+                       statut_libelle,
                        intervenant_code,
                        intervenant_nom,
                        intervenant_numero_insee,
@@ -84,6 +88,7 @@ SELECT
                                 p.id                                                                periode_id,
                                 s.id                                                                structure_id,
                                 i.id                                                                intervenant_id,
+                                si.id                                                               statut_id,
                                 i.annee_id                                                          annee_id,
                                 cc.id                                                               centre_cout_id,
                                 df.id                                                               domaine_fonctionnel_id,
@@ -97,6 +102,7 @@ SELECT
                                 mep.date_mise_en_paiement                                           date_mise_en_paiement,
                                 s.libelle_court                                                     composante,
                                 ti.libelle                                                          statut,
+                                si.libelle                                                          statut_libelle,
                                 i.source_code                                                       intervenant_code,
                                 i.nom_usuel || ' ' || i.prenom                                      intervenant_nom,
                                 i.numero_insee                                                      intervenant_numero_insee,
@@ -129,6 +135,7 @@ SELECT
                             periode_id,
                             structure_id,
                             type_intervenant_id,
+                            statut_id,
                             intervenant_id,
                             annee_id,
                             centre_cout_id,
@@ -138,6 +145,7 @@ SELECT
                             composante,
                             date_mise_en_paiement,
                             statut,
+                            statut_libelle,
                             intervenant_code,
                             intervenant_nom,
                             intervenant_numero_insee,
@@ -156,6 +164,7 @@ SELECT
                               periode_id,
                               structure_id,
                               type_intervenant_id,
+                              statut_id,
                               intervenant_id,
                               annee_id,
                               centre_cout_id,
@@ -165,6 +174,7 @@ SELECT
                               composante,
                               date_mise_en_paiement,
                               statut,
+                              statut_libelle,
                               intervenant_code,
                               intervenant_nom,
                               intervenant_numero_insee,
@@ -183,6 +193,7 @@ SELECT
       ORDER BY
                annee_id,
                type_intervenant_id,
+               statut_id,
                structure_id,
                periode_id,
                intervenant_nom
\ No newline at end of file
diff --git a/data/ddl/view/V_INTERVENANT_HISTORIQUE.sql b/data/ddl/view/V_INTERVENANT_HISTORIQUE.sql
index fb44b0d1d568fcf1a154c7c8a08d0648cdb14b86..ceb44a97bdf7bcbd78d3a3b78d00bd22288b81c2 100644
--- a/data/ddl/view/V_INTERVENANT_HISTORIQUE.sql
+++ b/data/ddl/view/V_INTERVENANT_HISTORIQUE.sql
@@ -278,7 +278,6 @@ SELECT C.intervenant_id                                intervenant_id,
        5                                               ordre
 FROM fichier f
          JOIN contrat_fichier cf ON cf.fichier_id = f.id AND histo_destruction IS NULL
-         JOIN fichier f ON f.id = cf.fichier_id AND f.histo_destruction IS NULL
          JOIN contrat C ON C.id = cf.contrat_id
          JOIN type_contrat tc ON tc.id = C.type_contrat_id
          JOIN STRUCTURE s ON s.id = C.structure_id
diff --git a/data/ddl/view/V_TBL_PIECE_JOINTE_DEMANDE.sql b/data/ddl/view/V_TBL_PIECE_JOINTE_DEMANDE.sql
index b8b4714b4b629b193778a5e0de771179fe5c8aee..7b53dc99a7a5f04f12d1f2901bc1382436fc037a 100644
--- a/data/ddl/view/V_TBL_PIECE_JOINTE_DEMANDE.sql
+++ b/data/ddl/view/V_TBL_PIECE_JOINTE_DEMANDE.sql
@@ -1,10 +1,12 @@
-CREATE OR REPLACE FORCE VIEW V_TBL_PIECE_JOINTE_DEMANDE AS
+CREATE
+OR REPLACE FORCE VIEW V_TBL_PIECE_JOINTE_DEMANDE AS
 WITH i_h AS (
   SELECT
     s.intervenant_id,
     SUM(CASE WHEN vh.MOTIF_NON_PAIEMENT_ID IS NULL THEN vh.heures ELSE 0 END) heures,
     SUM(CASE WHEN vh.MOTIF_NON_PAIEMENT_ID IS NOT NULL THEN vh.heures ELSE 0 END) heures_non_payables,
-    SUM(ep.taux_fc) fc
+    --SUM(ep.taux_fc) fc
+    SUM(CASE WHEN ep.taux_fc > 0 THEN vh.heures ELSE 0 END) fc
   FROM
          service               s
     JOIN type_volume_horaire tvh ON tvh.code = 'PREVU'
diff --git a/module/Application/src/Controller/ContratController.php b/module/Application/src/Controller/ContratController.php
index 88b297915ebfe514a46bbc4ea5e2db270bc57ccd..3f80a3a8203760f6143d52c32bd475e76c4fdeb5 100755
--- a/module/Application/src/Controller/ContratController.php
+++ b/module/Application/src/Controller/ContratController.php
@@ -437,8 +437,13 @@ class ContratController extends AbstractController
                     //Ajout pour transformer les sauts de lignes en html <br/>
                     $html = nl2br($html);
                     //Personnalisation des variables
-                    $vIntervenant = $contrat->getIntervenant()->getCivilite()->getLibelleCourt() . " " . $contrat->getIntervenant()->getNomUsuel();
-                    $vUtilisateur = $this->getServiceContext()->getUtilisateur()->getDisplayName();
+                    if ($contrat->getIntervenant()->getCivilite() != null) {
+                        $vIntervenant = $contrat->getIntervenant()->getCivilite()->getLibelleCourt() . " " . $contrat->getIntervenant()->getNomUsuel();
+                    } elseif ($dossierIntervenant != null && $dossierIntervenant->getCivilite() != null) {
+                        $vIntervenant = $dossierIntervenant->getCivilite()->getLibelleCourt() . " " . $contrat->getIntervenant()->getNomUsuel();
+                    } else {
+                        $vIntervenant = $contrat->getIntervenant()->getNomUsuel();
+                    }                    $vUtilisateur = $this->getServiceContext()->getUtilisateur()->getDisplayName();
                     $vAnnee       = $this->getServiceContext()->getAnnee()->getLibelle();
                     $html         = str_replace([':intervenant', ':utilisateur', ':annee'], [$vIntervenant, $vUtilisateur, $vAnnee], $html);
                     $subject      = $this->getServiceParametres()->get('contrat_modele_mail_objet');
diff --git a/module/Application/src/Controller/OffreFormation/EtapeController.php b/module/Application/src/Controller/OffreFormation/EtapeController.php
index 6b9f5d22600c22ba07623db6df0b3796e4e57d4c..78b3b004f80cc2b10ad0152fecf3cd430c1092f0 100755
--- a/module/Application/src/Controller/OffreFormation/EtapeController.php
+++ b/module/Application/src/Controller/OffreFormation/EtapeController.php
@@ -37,8 +37,13 @@ class EtapeController extends AbstractController
             Structure::class,
         ]);
 
-        $structure = $this->em()->find(Structure::class, $this->params()->fromRoute('structure'));
-        $etape     = $this->getEvent()->getParam('etape');
+        $structureId = $this->params()->fromRoute('structure');
+        if ($structureId) {
+            $structure = $this->em()->find(Structure::class, $structureId);
+        } else {
+            $structure = null;
+        }
+        $etape = $this->getEvent()->getParam('etape');
 
         $title  = $etape ? "Modification d'une formation" : "Création d'une nouvelle formation";
         $form   = $this->getFormOffreFormationEtapeSaisie();
diff --git a/module/Application/src/Controller/PieceJointeController.php b/module/Application/src/Controller/PieceJointeController.php
index 18ec7a2ff259d1c7a2a8cb3df40d664cfb077557..a525cf28ca8c38c138a1038d37eaa34793c6c9d6 100755
--- a/module/Application/src/Controller/PieceJointeController.php
+++ b/module/Application/src/Controller/PieceJointeController.php
@@ -10,6 +10,7 @@ use Application\Entity\Db\TblPieceJointeDemande;
 use Application\Entity\Db\TypePieceJointe;
 use Application\Entity\Db\TypePieceJointeStatut;
 use Application\Entity\Db\Validation;
+use Application\Entity\Db\WfEtape;
 use Application\Form\PieceJointe\Traits\ModifierTypePieceJointeStatutFormAwareTrait;
 use Application\Service\Traits\IntervenantServiceAwareTrait;
 use Application\Service\Traits\PieceJointeServiceAwareTrait;
@@ -97,7 +98,7 @@ class PieceJointeController extends AbstractController
 
         $annee = $this->getServiceContext()->getAnnee();
 
-        $messages = $this->makeMessages($demandees, $fournies);
+        $messages = $this->makeMessages($intervenant);
 
         $alertContrat = $role->getIntervenant() && $intervenant->getStatut()->getContrat();
 
@@ -119,51 +120,29 @@ class PieceJointeController extends AbstractController
         $demandees = $this->getServicePieceJointe()->getTypesPiecesDemandees($intervenant);
         $fournies = $this->getServicePieceJointe()->getPiecesFournies($intervenant);
 
-        $messages = $this->makeMessages($demandees, $fournies);
+        $messages = $this->makeMessages($intervenant);
 
         return compact('messages');
     }
 
 
     /**
-     * @param TblPieceJointeDemande[] $demandees
-     * @param TblPieceJointeFournie[] $fournies
+     * @param Intervenant $intervenant
      *
      * @return array
      */
-    protected function makeMessages(array $demandees, array $fournies)
+    protected function makeMessages(Intervenant $intervenant)
     {
-        $role = $this->getServiceContext()->getSelectedIdentityRole();
-        $isIntervenant = (boolean)$role->getIntervenant();
-        $nbDemandees = 0;
-        $nbFournies = 0;
-        $nbValidees = 0;
-        $nbObligatoiresNonFournis = 0;
-
-        foreach ($demandees as $demandee) {
-            if ($demandee->isObligatoire()) {
-                $nbDemandees++;
-                if (isset($fournies[$demandee->getTypePieceJointe()->getId()])) {
-                    $pj = $fournies[$demandee->getTypePieceJointe()->getId()];
-                    if (!$pj->getFichier()->isEmpty()) {
-                        $nbFournies++;
-                        if ($pj->getValidation()) {
-                            $nbValidees++;
-                        }
-                    }
-                }
-            }
-        }
 
+        $workflowEtapePjSaisie = $this->getServiceWorkflow()->getEtape(WfEtape::CODE_PJ_SAISIE, $intervenant);
+        $workflowEtapePjValide = $this->getServiceWorkflow()->getEtape(WfEtape::CODE_PJ_VALIDATION, $intervenant);
         $msgs = [];
 
-        if (0 == $nbDemandees) {
-            $msgs['info'][] = 'Aucune pièce justificative obligatoire n\'est à fournir';
-        } elseif ($nbFournies < $nbDemandees) {
+        if ($workflowEtapePjSaisie->getFranchie() != 1) {
             $msgs['danger'][] = "Des pièces justificatives obligatoires n'ont pas été fournies.";
-        } elseif ($nbFournies == $nbDemandees && $nbValidees == $nbDemandees) {
+        } elseif ($workflowEtapePjSaisie->getFranchie() == 1 && $workflowEtapePjValide->getFranchie() == 1) {
             $msgs['success'][] = "Toutes les pièces justificatives obligatoires ont été fournies et validées.";
-        } elseif ($nbFournies == $nbDemandees && $nbValidees < $nbFournies) {
+        } elseif ($workflowEtapePjSaisie->getFranchie() == 1 && $workflowEtapePjValide->getFranchie() != 1) {
             $msgs['success'][] = "Toutes les pièces justificatives obligatoires ont été fournies.";
             $msgs['warning'][] = "Mais certaines doivent encore être validées par un gestionnaire.";
         }
diff --git a/module/Application/src/Controller/ServiceController.php b/module/Application/src/Controller/ServiceController.php
index 3b1acc7aba5d95fca3692bb756241ff35eac793a..90301fa2f179dd2d97941d71d4b6c876053b5b8d 100755
--- a/module/Application/src/Controller/ServiceController.php
+++ b/module/Application/src/Controller/ServiceController.php
@@ -605,7 +605,7 @@ class ServiceController extends AbstractController
             }
             $this->flashMessenger()->addSuccessMessage($message);
         }
-
+        $this->updateTableauxBord($intervenant);
         return compact('title', 'typeVolumeHoraire', 'intervenant', 'validations', 'services');
     }
 
@@ -648,6 +648,7 @@ class ServiceController extends AbstractController
             $this->flashMessenger()->addErrorMessage('Vous n\'avez pas le droit de valider ces enseignements.');
         }
 
+        $this->updateTableauxBord($intervenant);
         return new MessengerViewModel();
     }
 
diff --git a/module/Application/src/Form/ServiceReferentiel/SaisieFieldset.php b/module/Application/src/Form/ServiceReferentiel/SaisieFieldset.php
index cc50cdb977ece2c3eb36ddf538249276f89fd63e..1b17b70dd76d3e675bf305425bed3f73669069ee 100755
--- a/module/Application/src/Form/ServiceReferentiel/SaisieFieldset.php
+++ b/module/Application/src/Form/ServiceReferentiel/SaisieFieldset.php
@@ -170,6 +170,7 @@ class SaisieFieldset extends AbstractFieldset
                 $filles = [];
                 foreach ($fonction->getFille() as $fille) {
                     $filles[$fille->getId()] = (string)$fille;
+                    asort($filles);
                 }
                 $fonctions[$fonction->getId()] = ['label' => (string)$fonction, 'options' => $filles];
             } elseif (!$fonction->getParent()) {
@@ -177,12 +178,6 @@ class SaisieFieldset extends AbstractFieldset
             }
         }
         asort($fonctions);
-        foreach ($fonctions as $key => $fonction) {
-            if (isset($fonction['options']) && is_array($fonction['options'])) {
-                asort($fonctions[$key]['options']);
-            }
-        }
-
         return $fonctions;
     }
 
diff --git a/module/Application/src/View/Helper/Service/Ligne.php b/module/Application/src/View/Helper/Service/Ligne.php
index 93058345e3be74d2d5b163c5ebacbcd68ea2a535..69ab4ebae560801f72e5c072e14e07986ee744e1 100755
--- a/module/Application/src/View/Helper/Service/Ligne.php
+++ b/module/Application/src/View/Helper/Service/Ligne.php
@@ -261,11 +261,11 @@ class Ligne extends AbstractViewHelper
         $display = $this->getListe()->getTypeInterventionVisibility($liste->getTypeIntervention()) ? '' : ';display:none';
 
         $attribs = [
-            'class'                       => 'heures type-intervention ' . $liste->getTypeIntervention()->getCode(),
-            'style'                       => 'text-align:right' . $display,
-            'id'                          => 'service-' . $liste->getService()->getId() . '-ti-' . $liste->getTypeIntervention()->getId(),
-            'data-value'                  => $heures,
-            'data-type-intervention-code' => $liste->getTypeIntervention()->getCode(),
+            'class'                     => 'heures type-intervention ti' . $liste->getTypeIntervention()->getId(),
+            'style'                     => 'text-align:right' . $display,
+            'id'                        => 'service-' . $liste->getService()->getId() . '-ti-' . $liste->getTypeIntervention()->getId(),
+            'data-value'                => $heures,
+            'data-type-intervention-id' => $liste->getTypeIntervention()->getId(),
         ];
         $out     = '<td ' . $this->htmlAttribs($attribs) . '>';
         if ($hasForbiddenPeriodes) $out .= '<abbr class="bg-danger" title="Des heures sont renseignées sur une période non conforme à la période de l\'enseignement">';
diff --git a/module/Application/src/View/Helper/Service/Liste.php b/module/Application/src/View/Helper/Service/Liste.php
index a17bd41fde26695fd5126c6f2ff06966783d43b4..3ce7eb4040a485fa96c95d4cb866a51791bb6753 100755
--- a/module/Application/src/View/Helper/Service/Liste.php
+++ b/module/Application/src/View/Helper/Service/Liste.php
@@ -204,7 +204,7 @@ class Liste extends AbstractViewHelper
         foreach ($typesIntervention as $ti) {
             $display = $this->getTypeInterventionVisibility($ti) ? '' : ';display:none';
             $colspan++;
-            $out .= "<th class=\"heures type-intervention " . $ti->getCode() . "\" style=\"width:8%$display\"><abbr title=\"" . $ti->getLibelle() . "\">" . $ti->getCode() . "</abbr></th>\n";
+            $out .= "<th class=\"heures type-intervention ti" . $ti->getId() . "\" style=\"width:8%$display\"><abbr title=\"" . $ti->getLibelle() . "\">" . $ti->getCode() . "</abbr></th>\n";
         }
         $out .= "<th>&nbsp;</th>\n";
         $out .= "</tr>\n";
@@ -431,7 +431,7 @@ class Liste extends AbstractViewHelper
             } else {
                 $display = ';display:none';
             }
-            $out .= "<td id=\"" . $ti->getCode() . "\" class=\"type-intervention " . $ti->getCode() . "\" style=\"text-align:right$display\">" . \UnicaenApp\Util::formattedNumber($data[$ti->getCode()]) . "</td>\n";
+            $out .= "<td id=\"" . $ti->getCode() . "\" class=\"type-intervention ti" . $ti->getId() . "\" style=\"text-align:right$display\">" . \UnicaenApp\Util::formattedNumber($data[$ti->getCode()]) . "</td>\n";
         }
         $out .= "<td>&nbsp;</td>\n";
         $out .= "</tr>\n";
diff --git a/module/ExportRh/src/Connecteur/Siham/SihamConnecteur.php b/module/ExportRh/src/Connecteur/Siham/SihamConnecteur.php
index 2054aaf3c61180640a81ec6aeb2d6af41d5a1e5a..3ec3dcffc158c49d035f3f16dc0a8c4bab233f22 100644
--- a/module/ExportRh/src/Connecteur/Siham/SihamConnecteur.php
+++ b/module/ExportRh/src/Connecteur/Siham/SihamConnecteur.php
@@ -487,13 +487,25 @@ class SihamConnecteur implements ConnecteurRhInterface
                 $paysNaissance = '';
             }
 
+            //Traitement du départmenent
+            $valueDepartement = '';
+            if (!empty($dossierIntervenant->getDepartementNaissance())) {
+                $departementCode = $dossierIntervenant->getDepartementNaissance()->getCode();
+                if (substr($departementCode, 0, 1) == '9') {
+                    $valueDepartement = $departementCode;
+                } else {
+                    $valueDepartement = substr($departementCode, 1, 2);
+                }
+            }
+
+
             $params = [
                 'categorieEntree'           => 'ACTIVE',
                 'civilite'                  => ($dossierIntervenant->getCivilite() == 'M.') ? '1' : '2',
                 'dateEmbauche'              => $dateEffet,
                 'dateNaissance'             => $dossierIntervenant->getDateNaissance()->format('Y-m-d'),
                 'villeNaissance'            => $dossierIntervenant->getCommuneNaissance(),
-                'departementNaissance'      => (!empty($dossierIntervenant->getDepartementNaissance())) ? substr($dossierIntervenant->getDepartementNaissance()->getCode(), 1, 2) : '',
+                'departementNaissance'      => $valueDepartement,
                 'paysNaissance'             => $paysNaissance,
                 'emploi'                    => $datas['connecteurForm']['emploi'],
                 'listeCoordonneesPostales'  => $coordonneesPostales,
diff --git a/module/Intervenant/view/intervenant/statut/saisie.phtml b/module/Intervenant/view/intervenant/statut/saisie.phtml
index 3726daaa45702fa97efba958f055bc6b71ca1886..33791785f416c7f4e44c6af9f43ff2d2adc0cd21 100755
--- a/module/Intervenant/view/intervenant/statut/saisie.phtml
+++ b/module/Intervenant/view/intervenant/statut/saisie.phtml
@@ -31,7 +31,7 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA
             echo $this->tag('div', ['class' => 'list-group']);
             foreach ($statuts as $s) {
                 if ($s->getTypeIntervenant() == $typeIntervenant) {
-                    $url    = $this->url('statut/saisie', ['statut' => $s->getId()]);
+                    $url = $this->url('statut/saisie', ['statut' => $s->getId()]);
                     $active = $s == $statut ? ' active' : '';
                     echo $this->tag('a', ['class' => 'list-group-item' . $active, 'href' => $url])->html($s) . "\n";
                 }
@@ -49,9 +49,9 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA
         <h1><?= $title ?></h1>
 
         <!-- Informations générales -->
-        <div class="panel panel-default">
-            <div class="panel-heading">Informations générales</div>
-            <div class="panel-body">
+        <div class="card bg-default">
+            <div class="card-header">Informations générales</div>
+            <div class="card-body">
                 <div class="row">
                     <div class="col-md-4">
                         <?= $this->formControlGroup($form->get('typeIntervenant')); ?>
@@ -67,6 +67,9 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA
                     <div class="col-md-4">
                         <?= $this->formControlGroup($form->get('tauxChargesPatronales')); ?>
                     </div>
+                    <div class="col-md-4">
+                        <?= $this->formControlGroup($form->get('tauxChargesTTC')); ?>
+                    </div>
                 </div>
                 <div class="row">
                     <?php for ($i = 1; $i <= 4; $i++): if ($form->has('codesCorresp' . $i)): ?>
@@ -81,9 +84,9 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA
 
 
         <!-- Données personnelles -->
-        <div class="panel panel-default">
-            <div class="panel-heading">Données personnelles</div>
-            <div class="panel-body">
+        <div class="card bg-default">
+            <div class="card-header">Données personnelles</div>
+            <div class="card-body">
                 <div class="row">
                     <div class="col-md-12">
                         <?= $this->formControlGroup($form->get('dossier')); ?>
@@ -150,9 +153,9 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA
 
 
         <!-- Pièces justificatives -->
-        <div class="panel panel-default">
-            <div class="panel-heading">Pièces justificatives</div>
-            <div class="panel-body">
+        <div class="card bg-default">
+            <div class="card-header">Pièces justificatives</div>
+            <div class="card-body">
                 <div class="row">
                     <div class="col-md-12">
                         <?= $this->formControlGroup($form->get('pieceJustificative')); ?>
@@ -169,9 +172,9 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA
 
 
         <!-- Services -->
-        <div class="panel panel-default">
-            <div class="panel-heading">Services d'enseignement</div>
-            <div class="panel-body">
+        <div class="card bg-default">
+            <div class="card-header">Services d'enseignement</div>
+            <div class="card-body">
                 <div class="row">
                     <div class="col-md-6">
                         <?= $this->formControlGroup($form->get('servicePrevu')); ?>
@@ -190,9 +193,9 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA
 
 
         <!-- Référentiel -->
-        <div class="panel panel-default">
-            <div class="panel-heading">Référentiel</div>
-            <div class="panel-body">
+        <div class="card bg-default">
+            <div class="card-header">Référentiel</div>
+            <div class="card-body">
                 <div class="row">
                     <div class="col-md-6">
                         <?= $this->formControlGroup($form->get('referentielPrevu')); ?>
@@ -206,9 +209,9 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA
 
 
         <!-- Agréments -->
-        <div class="panel panel-default">
-            <div class="panel-heading">Agréments</div>
-            <div class="panel-body">
+        <div class="card bg-default">
+            <div class="card-header">Agréments</div>
+            <div class="card-body">
                 <div class="row">
                     <div class="col-md-6">
                         <?= $this->formControlGroup($form->get('conseilRestreint')); ?>
@@ -230,15 +233,19 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA
 
 
         <!-- Contrat -->
-        <div class="panel panel-default">
-            <div class="panel-heading">Contrat de travail et avenants</div>
-            <div class="panel-body">
+        <div class="card bg-default">
+            <div class="card-header">Contrat de travail et avenants</div>
+            <div class="card-body">
                 <div class="row">
                     <div class="col-md-12">
                         <?= $this->formControlGroup($form->get('contrat')); ?>
-                        <?php if ($this->isAllowed(Privileges::getResourceId(Privileges::CONTRAT_MODELES_VISUALISATION))): ?>
-                            <a target="_blank" href="<?= $this->url('contrat/modeles'); ?>">Page d'administration des modèles de contrats de travail</a>
-                        <?php endif; ?>
+                        <div class="contratDetails">
+                            <?= $this->formControlGroup($form->get('contratEtatSortie')); ?>
+                            <?php if ($this->isAllowed(Privileges::getResourceId(Privileges::ETAT_SORTIE_ADMINISTRATION_VISUALISATION))): ?>
+                                <a target="_blank" href="<?= $this->url('etat-sortie'); ?>">Page d'administration des
+                                    états de sortie</a>
+                            <?php endif; ?>
+                        </div>
                     </div>
                 </div>
             </div>
@@ -246,9 +253,9 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA
 
 
         <!-- Calcul des heures complémentaires et mises en paiement -->
-        <div class="panel panel-default">
-            <div class="panel-heading">Calcul des heures complémentaires et mises en paiement</div>
-            <div class="panel-body">
+        <div class="card bg-default">
+            <div class="card-header">Calcul des heures complémentaires et mises en paiement</div>
+            <div class="card-body">
                 <div class="row">
                     <div class="col-md-6">
                         <?= $this->formControlGroup($form->get('serviceStatutaire')); ?>
@@ -267,11 +274,11 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA
 
 
         <!-- Plafonds -->
-        <div class="panel panel-default">
-            <div class="panel-heading">Plafonds</div>
+        <div class="card bg-default">
+            <div class="card-header">Plafonds</div>
             <?= $this->plafondConfig()->afficher($statut, $canEdit); ?>
             <?php if ($this->isAllowed(Privileges::getResourceId(Privileges::PLAFONDS_VISUALISATION))): ?>
-                <div class="panel panel-body"><a target="_blank" href="<?= $this->url('plafond'); ?>">
+                <div class="card-body"><a target="_blank" href="<?= $this->url('plafond'); ?>">
                         Page d'administration des plafonds
                     </a>
                 </div>
@@ -280,7 +287,7 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA
 
 
         <!-- Boutons d'actions -->
-        <a href="<?= $this->url('statut') ?>" class="btn btn-default">
+        <a href="<?= $this->url('statut') ?>" class="btn btn-secondary">
             <i class="fas fa-rotate-left"></i> Retour à la liste des statuts
         </a>
         <?php if ($canEdit): ?>
@@ -299,7 +306,8 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA
                    title="Dupliquer le statut d'intervenant">
                     <i class="fas fa-rotate-right"></i> Dupliquer</a>
             <?php endif; ?>
-            <a href="<?= $this->url('plafond/construire-calculer') ?>" class="btn btn-info pop-ajax">Construction & calcul de tous les plafonds</a>
+            <a href="<?= $this->url('plafond/construire-calculer') ?>" class="btn btn-info pop-ajax">Construction &
+                calcul de tous les plafonds</a>
         <?php endif; ?>
 
         <?= $this->form()->closeTag(); ?>
@@ -310,53 +318,52 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA
 
 <script type="text/javascript">
     $(function () {
-        $("body").on("statut_delete", function (event, popAjax)
-        {
+        $("body").on("statut_delete", function (event, popAjax) {
             window.location.href = '<?= (string)$this->url('statut'); ?>';
         });
 
 
         WidgetInitializer.add('statut', {
 
-            donneesVisu: function ()
-            {
+            donneesVisu: function () {
                 var visible = this.el('dossier').val() != 'desactive';
 
                 this.element.find('.donneesDetails').toggle(visible);
             },
 
 
-            donneesContactVisu: function ()
-            {
+            donneesContactVisu: function () {
                 var visible = this.el('dossierContact').is(':checked');
 
                 this.element.find('.donneesContactDetails').toggle(visible);
             },
 
 
-            servicesVisu: function ()
-            {
+            servicesVisu: function () {
                 var visible = !(this.el('servicePrevu').val() == 'desactive' && this.el('serviceRealise').val() == 'desactive');
 
                 this.element.find('.servicesDetails').toggle(visible);
             },
 
-            agrementCRVisu: function ()
-            {
+            agrementCRVisu: function () {
                 var visible = this.el('conseilRestreint').val() != 'desactive';
 
                 this.element.find('.agrementCRDetails').toggle(visible);
             },
 
-            agrementCAVisu: function ()
-            {
+            agrementCAVisu: function () {
                 var visible = this.el('conseilAcademique').val() != 'desactive';
 
                 this.element.find('.agrementCADetails').toggle(visible);
             },
 
-            _create: function ()
-            {
+            contratVisu: function () {
+                var visible = this.el('contrat').val() != 'desactive';
+
+                this.element.find('.contratDetails').toggle(visible);
+            },
+
+            _create: function () {
                 var that = this;
 
                 that.donneesVisu();
@@ -364,18 +371,33 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA
                 that.servicesVisu();
                 that.agrementCRVisu();
                 that.agrementCAVisu();
-
-                that.el('dossier').change(function () {that.donneesVisu()});
-                that.el('dossierContact').change(function () {that.donneesContactVisu()});
-                that.el('servicePrevu').change(function () {that.servicesVisu()});
-                that.el('serviceRealise').change(function () {that.servicesVisu()});
-                that.el('conseilRestreint').change(function () {that.agrementCRVisu()});
-                that.el('conseilAcademique').change(function () {that.agrementCAVisu()});
+                that.contratVisu();
+
+                that.el('dossier').change(function () {
+                    that.donneesVisu()
+                });
+                that.el('dossierContact').change(function () {
+                    that.donneesContactVisu()
+                });
+                that.el('servicePrevu').change(function () {
+                    that.servicesVisu()
+                });
+                that.el('serviceRealise').change(function () {
+                    that.servicesVisu()
+                });
+                that.el('conseilRestreint').change(function () {
+                    that.agrementCRVisu()
+                });
+                that.el('conseilAcademique').change(function () {
+                    that.agrementCAVisu()
+                });
+                that.el('contrat').change(function () {
+                    that.contratVisu()
+                });
             },
 
 
-            el: function (name)
-            {
+            el: function (name) {
                 return this.element.find('[name=' + name + ']');
             }
         });
diff --git a/public/js/service.js b/public/js/service.js
index 71e26a606d6c88838e1b4cb749ac68c00fc7335d..6d59375c0dddf3cce744b4b81f3b4f8c29b63b2c 100755
--- a/public/js/service.js
+++ b/public/js/service.js
@@ -11,17 +11,18 @@ $.widget("ose.serviceListe", {
         for (var i in this.totaux) {
             if (this.totaux[i] != 0) {
                 count++;
-                this.element.find("table.service tr th." + i).show(); // entête
-                this.element.find("table.service tr.service-ligne td.type-intervention." + i).show();
-                this.element.find("table.service tfoot tr td." + i).show(); // total
+                this.element.find("table.service tr th.ti" + i).show(); // entête
+                this.element.find("table.service tr.service-ligne td.type-intervention.ti" + i).show();
+                this.element.find("table.service tfoot tr td.ti" + i).show(); // total
             } else {
-                this.element.find("table.service tr th." + i).hide(); // entête
-                this.element.find("table.service tr.service-ligne td.type-intervention." + i).hide();
-                this.element.find("table.service tfoot tr td." + i).hide(); // total
+                this.element.find("table.service tr th.ti" + i).hide(); // entête
+                this.element.find("table.service tr.service-ligne td.type-intervention.ti" + i).hide();
+                this.element.find("table.service tfoot tr td.ti" + i).hide(); // total
             }
         }
         this.element.find("table.service #total-general").attr('colspan', count);
         if (count == 0) {
+            this.element.find("table.service tr th.type-intervention").hide(); // entête
             this.element.find("table.service tfoot").hide();
         } else {
             this.element.find("table.service tfoot").show();
@@ -35,19 +36,19 @@ $.widget("ose.serviceListe", {
         this.total = 0;
 
         this.element.find("table.service tr.service-ligne td.type-intervention").each(function () {
-            var typeInterventionCode = $(this).data('type-intervention-code');
+            var typeInterventionId = $(this).data('type-intervention-id');
             var value = $(this).data('value');
 
-            if (that.totaux[typeInterventionCode] == undefined) that.totaux[typeInterventionCode] = 0;
+            if (that.totaux[typeInterventionId] == undefined) that.totaux[typeInterventionId] = 0;
 
-            that.totaux[typeInterventionCode] += value;
+            that.totaux[typeInterventionId] += value;
             that.total += value;
         });
 
         // on met à jour aussi les entêtes et les totaux
         for (var ti in this.totaux) {
             var heures = this.totaux[ti];
-            this.element.find("table.service tfoot tr td." + ti).html(Util.formattedHeures(heures));
+            this.element.find("table.service tfoot tr td.ti" + ti).html(Util.formattedHeures(heures));
         }
         this.element.find("table.service #total-general").html(Util.formattedHeures(this.total));
     },