diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2fdf3395956d9739e842ba8ea39ec6155d1a926e..f9abeaf4363c9e9ec20f4f75b1fa09275ec8c31e 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -41,6 +41,7 @@
 * Il est possible de rentrer une date de retour sur un contrat après avoir téléversé le contrat sans avoir besoin de recharger la page
 * Impossibilité de saisir des heures hors établissement (#51483)
 * Paris 1 : modification de la formule de calcul (#48148)
+* Rennes 2 : modification de la formule de calcul (#51135)
 * Filtrage des types d'intervention pour la saisie de service hors établissement (#51512)
 
 
diff --git a/data/ddl/package/FORMULE_RENNES2/body.sql b/data/ddl/package/FORMULE_RENNES2/body.sql
index 30d193fa6f4461e6f845d59fef94439e29721c7d..96019d3addf3a662fa79ae9236b09614500dc281 100644
--- a/data/ddl/package/FORMULE_RENNES2/body.sql
+++ b/data/ddl/package/FORMULE_RENNES2/body.sql
@@ -186,12 +186,12 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS
 
 
 
-      -- AA=IF([.$I20]="Référentiel";0;([.$AM20]+[.$AS20]+[.$AY20]+[.$BE20])*[.H20])
+      -- AA=IF([.$I20]="Référentiel";0;([.$AN20]+[.$AT20]+[.$AZ20]+[.$BF20])*[.H20])
       WHEN 'AA' THEN
         IF vh.volume_horaire_ref_id IS NOT NULL THEN
           RETURN 0;
         ELSE
-          RETURN (cell('AM',l) + cell('AS',l) + cell('AY',l) + cell('BE',l)) * vh.taux_fc;
+          RETURN (cell('AN',l) + cell('AT',l) + cell('AZ',l) + cell('BF',l)) * vh.taux_fc;
         END IF;
 
 
@@ -202,10 +202,10 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS
 
 
 
-      -- AC=IF([.$I20]="Référentiel";[.$AM20]+[.$AS20]+[.$AY20]+[.$BE20];0)
+      -- AC=IF([.$I20]="Référentiel";([.$AN20]+[.$AT20]+[.$AZ20]+[.$BF20]);0)
       WHEN 'AC' THEN
         IF vh.volume_horaire_ref_id IS NOT NULL THEN
-          RETURN cell('AM',l) + cell('AS',l) + cell('AY',l) + cell('BE',l);
+          RETURN (cell('AN',l) + cell('AT',l) + cell('AZ',l) + cell('BF',l));
         ELSE
           RETURN 0;
         END IF;
@@ -264,7 +264,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS
 
 
 
-      -- AI16=[.AI15]>=[.AH16]
+      -- AI16=IF([.AI15]>=[.AH16];1;0)
       WHEN 'AI16' THEN
         IF cell('AI15') >= cell('AH16') THEN
           RETURN 1;
@@ -274,7 +274,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS
 
 
 
-      -- AJ=IF(AND([.$E20]="Oui";[.$D20]<>"Oui";[.$A20]=i_structure_code;[.$O20]="Oui");IF(OR([.$AI$16];[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0)
+      -- AJ=IF(AND([.$E20]="Oui";[.$D20]<>"Oui";[.$A20]=i_structure_code;[.$O20]="Oui");IF(OR([.$AI$16]=1;[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0)
       WHEN 'AJ' THEN
         IF vh.service_statutaire AND NOT vh.structure_is_exterieur AND vh.structure_is_affectation AND vh.param_1 = 'Oui' THEN
           IF cell('AI16') = 1 OR vh.volume_horaire_ref_id IS NULL THEN
@@ -342,7 +342,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS
 
 
 
-      -- AP=IF(AND([.$E20]="Oui";[.$D20]<>"Oui";[.$A20]<>i_structure_code;[.$O20]="Oui");IF(OR([.$AI$16];[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0)
+      -- AP=IF(AND([.$E20]="Oui";[.$D20]<>"Oui";[.$A20]<>i_structure_code;[.$O20]="Oui");IF(OR([.$AI$16]=1;[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0)
       WHEN 'AP' THEN
         IF vh.service_statutaire AND NOT vh.structure_is_exterieur AND NOT vh.structure_is_affectation AND vh.param_1 = 'Oui' THEN
           IF cell('AI16') = 1 OR vh.volume_horaire_ref_id IS NULL THEN
@@ -410,7 +410,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS
 
 
 
-      -- AV=IF(AND([.$E20]="Oui";[.$D20]<>"Oui";[.$O20]<>"Oui");IF(OR([.$AI$16];[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0)
+      -- AV=IF(AND([.$E20]="Oui";[.$D20]<>"Oui";[.$O20]<>"Oui");IF(OR([.$AI$16]=1;[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0)
       WHEN 'AV' THEN
         IF vh.service_statutaire AND NOT vh.structure_is_exterieur AND vh.param_1 <> 'Oui' THEN
           IF cell('AI16') = 1 OR vh.volume_horaire_ref_id IS NULL THEN
@@ -478,7 +478,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS
 
 
 
-      -- BB=IF(AND([.$E20]="Oui";[.$D20]="Oui");IF(OR([.$AI$16];[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0)
+      -- BB=IF(AND([.$E20]="Oui";[.$D20]="Oui");IF(OR([.$AI$16]=1;[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0)
       WHEN 'BB' THEN
         IF vh.service_statutaire AND vh.structure_is_exterieur THEN
           IF cell('AI16') = 1 OR vh.volume_horaire_ref_id IS NULL THEN
diff --git a/data/ddl/package/OSE_PARAMETRE/body.sql b/data/ddl/package/OSE_PARAMETRE/body.sql
index 8364160fc05f9578e3067d16dc0296a89ae73f1b..9218a01e864e1a23aa56ecc4ff78d1214b165dbe 100644
--- a/data/ddl/package/OSE_PARAMETRE/body.sql
+++ b/data/ddl/package/OSE_PARAMETRE/body.sql
@@ -9,6 +9,9 @@ CREATE OR REPLACE PACKAGE BODY "OSE_PARAMETRE" AS
   pourc_s1_pour_annee_civile FLOAT;
   taux_conges_payes FLOAT;
   horaire_nocturne VARCHAR2(5);
+  domaine_fonc_ens_ext NUMERIC;
+  regle_repart_annee_civ VARCHAR2(50);
+  taux_remu NUMERIC;
 
 
 
@@ -117,6 +120,47 @@ CREATE OR REPLACE PACKAGE BODY "OSE_PARAMETRE" AS
 
 
 
+  FUNCTION get_domaine_fonc_ens_ext RETURN NUMERIC IS
+  BEGIN
+    IF domaine_fonc_ens_ext IS NULL THEN
+      SELECT to_number(valeur) INTO domaine_fonc_ens_ext FROM parametre WHERE nom = 'domaine_fonctionnel_ens_ext';
+    END IF;
+
+    IF domaine_fonc_ens_ext = 0 THEN
+      RETURN NULL;
+    ELSE
+      RETURN domaine_fonc_ens_ext;
+    END IF;
+  END;
+
+
+
+  FUNCTION get_regle_repart_annee_civ RETURN VARCHAR2 IS
+  BEGIN
+    IF regle_repart_annee_civ IS NULL THEN
+      SELECT valeur INTO regle_repart_annee_civ FROM parametre WHERE nom = 'regle_repartition_annee_civile';
+    END IF;
+
+    RETURN regle_repart_annee_civ;
+  END;
+
+
+
+  FUNCTION get_taux_remu RETURN NUMERIC IS
+  BEGIN
+    IF taux_remu IS NULL THEN
+      SELECT to_number(valeur) INTO taux_remu FROM parametre WHERE nom = 'taux-remu';
+    END IF;
+
+    IF taux_remu = 0 THEN
+      RETURN NULL;
+    ELSE
+      RETURN taux_remu;
+    END IF;
+  END;
+
+
+
   PROCEDURE CLEAR_CACHE IS
   BEGIN
     annee := NULL;
diff --git a/data/ddl/package/OSE_PARAMETRE/definition.sql b/data/ddl/package/OSE_PARAMETRE/definition.sql
index 8175d148b24e364cc30ee4163aa94ef6ef9047a9..451f0238efa6c6fb27c57d01ed881613990ec8de 100644
--- a/data/ddl/package/OSE_PARAMETRE/definition.sql
+++ b/data/ddl/package/OSE_PARAMETRE/definition.sql
@@ -9,6 +9,9 @@ CREATE OR REPLACE PACKAGE "OSE_PARAMETRE" AS
   FUNCTION get_pourc_s1_annee_civ RETURN FLOAT;
   FUNCTION get_taux_conges_payes RETURN FLOAT;
   FUNCTION get_horaire_nocturne RETURN VARCHAR2;
+  FUNCTION get_domaine_fonc_ens_ext RETURN NUMERIC;
+  FUNCTION get_regle_repart_annee_civ RETURN VARCHAR2;
+  FUNCTION get_taux_remu RETURN NUMERIC;
 
   PROCEDURE CLEAR_CACHE;
 
diff --git a/data/ddl/package/UNICAEN_TBL/body.sql b/data/ddl/package/UNICAEN_TBL/body.sql
index 5d89630027ff67a249f704a9ffe78fb30ed43184..62952fc8eee260532142b6b94ddafa680461ed1a 100644
--- a/data/ddl/package/UNICAEN_TBL/body.sql
+++ b/data/ddl/package/UNICAEN_TBL/body.sql
@@ -1476,7 +1476,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
           COALESCE( ep.structure_id, i.structure_id ) structure_id,
           mep.id                                      mise_en_paiement_id,
           mep.periode_paiement_id                     periode_paiement_id,
-          COALESCE(mep.domaine_fonctionnel_id, e.domaine_fonctionnel_id, to_number(p.valeur)) domaine_fonctionnel_id,
+          COALESCE(mep.domaine_fonctionnel_id, e.domaine_fonctionnel_id, ose_parametre.get_domaine_fonc_ens_ext) domaine_fonctionnel_id,
           frs.heures_compl_fi + frs.heures_compl_fc + frs.heures_compl_fa + frs.heures_compl_fc_majorees heures_a_payer,
           COUNT(*) OVER(PARTITION BY frs.id)          heures_a_payer_pond,
           COALESCE(mep.heures,0)                      heures_demandees,
@@ -1485,22 +1485,19 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
           SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id)  total_heures,
           SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id) * pea.pourc_exercice_aa  total_heures_aa,
           SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id ORDER BY mep.id) cumul_heures,
-          CASE WHEN p2.valeur = ''prorata'' THEN COALESCE(mep.heures,0) * pea.pourc_exercice_aa ELSE ose_divers.CALC_HEURES_AA(
+          CASE WHEN ose_parametre.get_regle_repart_annee_civ = ''prorata'' THEN COALESCE(mep.heures,0) * pea.pourc_exercice_aa ELSE ose_divers.CALC_HEURES_AA(
             COALESCE(mep.heures,0), -- heures
             pea.pourc_exercice_aa, -- pourc_exercice_aa
             SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id), -- total_heures
             SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id ORDER BY mep.id) -- cumul_heures
           ) END heures_aa,
-          COALESCE(si.taux_remu_id, to_number(p3.valeur))                  taux_remu_id,
-          OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(si.taux_remu_id, to_number(p3.valeur)),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire,
+          COALESCE(ep.taux_remu_id, si.taux_remu_id, ose_parametre.get_taux_remu) taux_remu_id,
+          OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(ep.taux_remu_id, si.taux_remu_id, ose_parametre.get_taux_remu),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire,
           1 taux_conges_payes
         FROM
                     formule_resultat_service        frs
                JOIN type_volume_horaire             tvh ON tvh.code = ''REALISE''
                JOIN etat_volume_horaire             evh ON evh.code = ''valide''
-               JOIN parametre                         p ON p.nom = ''domaine_fonctionnel_ens_ext''
-               JOIN parametre                        p2 ON p2.nom = ''regle_repartition_annee_civile''
-               JOIN parametre                        p3 ON p3.nom = ''taux-remu''
                JOIN formule_resultat                 fr ON fr.id = frs.formule_resultat_id
                                                        AND fr.type_volume_horaire_id = tvh.id
                                                        AND fr.etat_volume_horaire_id = evh.id
@@ -1554,21 +1551,19 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
           SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id)  total_heures,
           SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id) * pea.pourc_exercice_aa  total_heures_aa,
           SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id ORDER BY mep.id) cumul_heures,
-          CASE WHEN p2.valeur = ''prorata'' THEN COALESCE(mep.heures,0) * pea.pourc_exercice_aa ELSE ose_divers.CALC_HEURES_AA(
+          CASE WHEN ose_parametre.get_regle_repart_annee_civ = ''prorata'' THEN COALESCE(mep.heures,0) * pea.pourc_exercice_aa ELSE ose_divers.CALC_HEURES_AA(
             COALESCE(mep.heures,0), -- heures
             pea.pourc_exercice_aa, -- pourc_exercice_aa
             SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id), -- total_heures
             SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id ORDER BY mep.id) -- cumul_heures
           ) END heures_aa,
-          COALESCE(si.taux_remu_id, to_number(p3.valeur))                  taux_remu_id,
-          OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(si.taux_remu_id, to_number(p3.valeur)),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire,
+          COALESCE(si.taux_remu_id, ose_parametre.get_taux_remu) taux_remu_id,
+          OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(si.taux_remu_id, ose_parametre.get_taux_remu),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire,
           1 taux_conges_payes
         FROM
                     formule_resultat_service_ref    frs
                JOIN type_volume_horaire             tvh ON tvh.code = ''REALISE''
                JOIN etat_volume_horaire             evh ON evh.code = ''valide''
-               JOIN parametre                        p2 ON p2.nom = ''regle_repartition_annee_civile''
-               JOIN parametre                        p3 ON p3.nom = ''taux-remu''
                JOIN formule_resultat                 fr ON fr.id = frs.formule_resultat_id
                                                        AND fr.type_volume_horaire_id = tvh.id
                                                        AND fr.etat_volume_horaire_id = evh.id
@@ -1669,7 +1664,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
                 m.taux_remu_id
               END, vhm.horaire_debut) taux_horaire,
 
-              ose_parametre.get_taux_conges_payes         taux_conges_payes
+              ose_parametre.get_taux_conges_payes+1       taux_conges_payes
             FROM
               tbl_mission tm
               JOIN mission m ON m.id = tm.mission_id
@@ -2253,64 +2248,99 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
           CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement
         FROM
           (
-          SELECT 10 PLAFOND_ID, NULL PLAFOND_ETAT_ID, p.* FROM (
+          SELECT 1 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM (
             SELECT
-                i.annee_id annee_id,
-                type_volume_horaire_id,
-                intervenant_id,
-                heures,
-                plafond
+                i.annee_id                          annee_id,
+                fr.type_volume_horaire_id           type_volume_horaire_id,
+                fr.intervenant_id                   intervenant_id,
+                fr.heures_compl_fi + fr.heures_compl_fc + fr.heures_compl_fa + fr.heures_compl_referentiel heures
               FROM
-                (
-                SELECT
-                  intervenant_id,
-                  type_volume_horaire_id,
-                  tranche,
-                  sum(heures) heures,
-                  least(min(plafond_tranche_mission), min(plafond_tranche)) plafond
-                FROM
-                  (
-                  SELECT
-                    m.intervenant_id                                         intervenant_id,
-                    vhm.type_volume_horaire_id                               type_volume_horaire_id,
-                    to_char( vhm.horaire_debut, ''YYYY-mm'' )                  tranche,
-                    vhm.heures                                               heures,
-                    ROUND(CASE to_char( vhm.horaire_debut, ''mm'' ) WHEN ''07'' THEN 150 WHEN ''08'' THEN 150 ELSE 67 END / 30 * (m.date_fin - m.date_debut),2) plafond_tranche_mission,
-                    CASE to_char( vhm.horaire_debut, ''mm'' ) WHEN ''07'' THEN 150 WHEN ''08'' THEN 150 ELSE 67 END plafond_tranche
-                  FROM
-                    volume_horaire_mission vhm
-                    JOIN type_volume_horaire tvh ON tvh.id = vhm.type_volume_horaire_id AND tvh.code = ''REALISE''
-                    JOIN mission m ON m.id = vhm.mission_id AND m.histo_destruction IS NULL
-                  WHERE
-                    vhm.histo_destruction IS NULL
-                  ) t
-                GROUP BY
-                  intervenant_id,
-                  type_volume_horaire_id,
-                  tranche
-              ) t
-              JOIN intervenant i ON i.id = t.intervenant_id
+                     intervenant                i
+                JOIN statut                    si ON si.id = i.statut_id
+                JOIN etat_volume_horaire      evh ON evh.code = ''saisi''
+                JOIN formule_resultat          fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id
+            ) p
+
+            UNION ALL
+
+          SELECT 2 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM (
+            SELECT
+                i.annee_id                             annee_id,
+                fr.type_volume_horaire_id              type_volume_horaire_id,
+                i.id                                   intervenant_id,
+                fr.total - fr.heures_compl_fc_majorees heures
+              FROM
+                intervenant                     i
+                JOIN etat_volume_horaire      evh ON evh.code = ''saisi''
+                JOIN formule_resultat          fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id
+                JOIN statut                    si ON si.id = i.statut_id
+            ) p
+
+            UNION ALL
+
+          SELECT 4 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM (
+            SELECT
+                i.annee_id                annee_id,
+                fr.type_volume_horaire_id type_volume_horaire_id,
+                i.id                      intervenant_id,
+                SUM(frvh.heures_compl_fi) heures
+              FROM
+                intervenant                     i
+                JOIN etat_volume_horaire      evh ON evh.code = ''saisi''
+                JOIN formule_resultat          fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id
+                JOIN formule_resultat_vh     frvh ON frvh.formule_resultat_id = fr.id
+                JOIN volume_horaire            vh ON vh.id = frvh.volume_horaire_id
+                JOIN type_intervention         ti ON ti.id = vh.type_intervention_id
+                JOIN statut                    si ON si.id = i.statut_id
               WHERE
-                heures > plafond
-                AND rownum = 1
+                ti.regle_foad = 0
+              GROUP BY
+                fr.type_volume_horaire_id,
+                i.annee_id,
+                i.id,
+                i.statut_id
+            ) p
+
+            UNION ALL
+
+          SELECT 8 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM (
+            SELECT
+                i.annee_id                             annee_id,
+                fr.type_volume_horaire_id              type_volume_horaire_id,
+                i.id                                   intervenant_id,
+                fr.service_referentiel + fr.heures_compl_referentiel heures
+              FROM
+                intervenant                     i
+                JOIN etat_volume_horaire      evh ON evh.code = ''saisi''
+                JOIN formule_resultat          fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id
+                JOIN statut                    si ON si.id = i.statut_id
             ) p
 
             UNION ALL
 
           SELECT 9 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM (
             SELECT
-                i.annee_id                  annee_id,
-                vhm.type_volume_horaire_id  type_volume_horaire_id,
-                i.id                        intervenant_id,
-                SUM(vhm.heures)             heures
+                i.annee_id                annee_id,
+                vh.type_volume_horaire_id type_volume_horaire_id,
+                i.id                      intervenant_id,
+                SUM(vh.heures)            heures
               FROM
-                volume_horaire_mission vhm
-                JOIN mission m ON m.histo_destruction IS NULL AND m.id = vhm.mission_id
-                JOIN intervenant i ON i.id = m.intervenant_id
+                volume_horaire vh
+                JOIN service s ON s.id = vh.service_id
+                JOIN intervenant i ON i.id = s.intervenant_id
+                JOIN statut si ON si.id = i.statut_id
               WHERE
-                vhm.histo_destruction IS NULL
+                vh.histo_destruction IS NULL
+                AND i.histo_destruction IS NULL
+                AND vh.motif_non_paiement_id IS NULL
+                AND si.code IN (''IMP'')
               GROUP BY
-                i.annee_id, vhm.type_volume_horaire_id, i.id
+                i.annee_id,
+                vh.type_volume_horaire_id,
+                i.id,
+                i.statut_id
+              HAVING
+                SUM(vh.heures) >= 0
             ) p
           ) p
           JOIN intervenant i ON i.id = p.intervenant_id
@@ -2500,7 +2530,42 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
           CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement
         FROM
           (
-            SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL INTERVENANT_ID,NULL FONCTION_REFERENTIEL_ID,NULL HEURES,NULL PLAFOND,NULL PLAFOND_ETAT_ID,NULL DEROGATION FROM dual WHERE 0 = 1
+          SELECT 7 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM (
+            SELECT
+                i.annee_id                        annee_id,
+                vhr.type_volume_horaire_id        type_volume_horaire_id,
+                i.id                              intervenant_id,
+                fr.id                             fonction_referentiel_id,
+                SUM(vhr.heures)                   heures
+              FROM
+                     service_referentiel       sr
+                JOIN intervenant                i ON i.id = sr.intervenant_id
+                JOIN fonction_referentiel      fr ON fr.id = sr.fonction_id
+                JOIN volume_horaire_ref       vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL
+              WHERE
+                sr.histo_destruction IS NULL
+              GROUP BY
+                i.annee_id, vhr.type_volume_horaire_id, i.id, fr.id
+
+              UNION ALL
+
+              SELECT
+                i.annee_id                 annee_id,
+                vhr.type_volume_horaire_id type_volume_horaire_id,
+                i.id                       intervenant_id,
+                fr.id                      fonction_referentiel_id,
+                SUM(vhr.heures)            heures
+              FROM
+                service_referentiel       sr
+                JOIN intervenant i ON i.id = sr.intervenant_id
+                JOIN fonction_referentiel      frf ON frf.id = sr.fonction_id
+                JOIN fonction_referentiel      fr ON fr.id = frf.parent_id
+                JOIN volume_horaire_ref       vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL
+              WHERE
+                sr.histo_destruction IS NULL
+              GROUP BY
+                i.annee_id, vhr.type_volume_horaire_id, i.id, fr.id
+            ) p
           ) p
           JOIN intervenant i ON i.id = p.intervenant_id
           LEFT JOIN plafond_referentiel ps ON ps.plafond_id = p.plafond_id AND ps.fonction_referentiel_id = p.fonction_referentiel_id AND ps.annee_id = i.annee_id AND ps.histo_destruction IS NULL
@@ -2597,7 +2662,23 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
           CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement
         FROM
           (
-            SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL INTERVENANT_ID,NULL STRUCTURE_ID,NULL HEURES,NULL PLAFOND,NULL PLAFOND_ETAT_ID,NULL DEROGATION FROM dual WHERE 0 = 1
+          SELECT 6 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM (
+            SELECT
+                i.annee_id                 annee_id,
+                vhr.type_volume_horaire_id type_volume_horaire_id,
+                i.id                       intervenant_id,
+                s.id                       structure_id,
+                SUM(vhr.heures)            heures
+              FROM
+                service_referentiel       sr
+                JOIN intervenant           i ON i.id = sr.intervenant_id
+                JOIN structure             s ON s.id = sr.structure_id
+                JOIN volume_horaire_ref  vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL
+              WHERE
+                sr.histo_destruction IS NULL
+              GROUP BY
+                i.annee_id, vhr.type_volume_horaire_id, i.id, s.id
+            ) p
           ) p
           JOIN intervenant i ON i.id = p.intervenant_id
           LEFT JOIN plafond_structure ps ON ps.plafond_id = p.plafond_id AND ps.structure_id = p.structure_id AND ps.annee_id = i.annee_id AND ps.histo_destruction IS NULL
@@ -2691,7 +2772,64 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
           CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement
         FROM
           (
-            SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL INTERVENANT_ID,NULL ELEMENT_PEDAGOGIQUE_ID,NULL TYPE_INTERVENTION_ID,NULL HEURES,NULL PLAFOND,NULL PLAFOND_ETAT_ID,NULL DEROGATION FROM dual WHERE 0 = 1
+          SELECT 5 PLAFOND_ID, NULL PLAFOND_ETAT_ID, p.* FROM (
+            WITH c AS (
+                SELECT
+                  vhe.element_pedagogique_id,
+                  vhe.type_intervention_id,
+                  MAX(vhe.heures) heures,
+                  COALESCE( MAX(vhe.groupes), ROUND(SUM(t.groupes),10) ) groupes
+
+                FROM
+                  volume_horaire_ens     vhe
+                       JOIN parametre p ON p.nom = ''scenario_charges_services''
+                  LEFT JOIN tbl_chargens   t ON t.element_pedagogique_id = vhe.element_pedagogique_id
+                                            AND t.type_intervention_id = vhe.type_intervention_id
+                                            AND t.scenario_id = to_number(p.valeur)
+                GROUP BY
+                  vhe.element_pedagogique_id,
+                  vhe.type_intervention_id
+              ), s AS (
+                SELECT
+                  i.annee_id,
+                  vh.type_volume_horaire_id,
+                  s.intervenant_id,
+                  s.element_pedagogique_id,
+                  vh.type_intervention_id,
+                  SUM(vh.heures) heures
+                FROM
+                  volume_horaire vh
+                  JOIN service     s ON s.id = vh.service_id
+                                    AND s.element_pedagogique_id IS NOT NULL
+                                    AND s.histo_destruction IS NULL
+                  JOIN intervenant i ON i.id = s.intervenant_id
+                                    AND i.histo_destruction IS NULL
+                WHERE
+                  vh.histo_destruction IS NULL
+                GROUP BY
+                  i.annee_id,
+                  vh.type_volume_horaire_id,
+                  s.intervenant_id,
+                  s.element_pedagogique_id,
+                  vh.type_intervention_id
+              )
+              SELECT
+                s.annee_id                                  annee_id,
+                s.type_volume_horaire_id                    type_volume_horaire_id,
+                s.intervenant_id                            intervenant_id,
+                s.element_pedagogique_id                    element_pedagogique_id,
+                s.type_intervention_id                      type_intervention_id,
+                s.heures                                    heures,
+                COALESCE(c.heures * c.groupes,0)            plafond
+              FROM
+                          s
+                     JOIN type_intervention ti ON ti.id = s.type_intervention_id
+                     JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id
+                LEFT JOIN c ON c.element_pedagogique_id = s.element_pedagogique_id
+                           AND c.type_intervention_id = COALESCE(ti.type_intervention_maquette_id,ti.id)
+              WHERE
+                s.heures - COALESCE(c.heures * c.groupes,0) > 0
+            ) p
           ) p
           JOIN intervenant i ON i.id = p.intervenant_id
           LEFT JOIN plafond_statut ps ON 1 = 0
diff --git a/data/ddl/table/MISSION.php b/data/ddl/table/MISSION.php
index 6d5765a690f719c533cfa86df4256b7476ff0cb5..b0fc95eb35d402da372b069e3dd2bef9bdcb8ecd 100644
--- a/data/ddl/table/MISSION.php
+++ b/data/ddl/table/MISSION.php
@@ -57,18 +57,6 @@ return [
             'position'    => 6,
             'commentaire' => NULL,
         ],
-        'LIBELLE_MISSION'           => [
-            'name'        => 'LIBELLE_MISSION',
-            'type'        => 'string',
-            'bdd-type'    => 'VARCHAR2',
-            'length'      => 4000,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 19,
-            'commentaire' => NULL,
-        ],
         'ETUDIANTS_SUIVIS'      => [
             'name'        => 'ETUDIANTS_SUIVIS',
             'type'        => 'string',
@@ -189,6 +177,18 @@ return [
             'position'    => 2,
             'commentaire' => NULL,
         ],
+        'LIBELLE_MISSION'       => [
+            'name'        => 'LIBELLE_MISSION',
+            'type'        => 'string',
+            'bdd-type'    => 'VARCHAR2',
+            'length'      => 4000,
+            'scale'       => NULL,
+            'precision'   => NULL,
+            'nullable'    => TRUE,
+            'default'     => NULL,
+            'position'    => 19,
+            'commentaire' => NULL,
+        ],
         'STRUCTURE_ID'          => [
             'name'        => 'STRUCTURE_ID',
             'type'        => 'int',
diff --git a/data/ddl/table/STATUT.php b/data/ddl/table/STATUT.php
index 749f8de61a5d073e9f431d85c39691d6beb6d14a..1eef3f827fa78a085837f3d860e5fb2988cfa290 100644
--- a/data/ddl/table/STATUT.php
+++ b/data/ddl/table/STATUT.php
@@ -105,6 +105,30 @@ return [
             'position'    => 70,
             'commentaire' => NULL,
         ],
+        'CODE_INDEMNITE'                 => [
+            'name'        => 'CODE_INDEMNITE',
+            'type'        => 'string',
+            'bdd-type'    => 'VARCHAR2',
+            'length'      => 1000,
+            'scale'       => NULL,
+            'precision'   => NULL,
+            'nullable'    => TRUE,
+            'default'     => NULL,
+            'position'    => 96,
+            'commentaire' => NULL,
+        ],
+        'CODE_INDEMNITE_PRIME'           => [
+            'name'        => 'CODE_INDEMNITE_PRIME',
+            'type'        => 'string',
+            'bdd-type'    => 'VARCHAR2',
+            'length'      => 1000,
+            'scale'       => NULL,
+            'precision'   => NULL,
+            'nullable'    => TRUE,
+            'default'     => NULL,
+            'position'    => 97,
+            'commentaire' => NULL,
+        ],
         'CONSEIL_ACA'                    => [
             'name'        => 'CONSEIL_ACA',
             'type'        => 'bool',
@@ -741,6 +765,30 @@ return [
             'position'    => 88,
             'commentaire' => NULL,
         ],
+        'MODE_CALCUL'                    => [
+            'name'        => 'MODE_CALCUL',
+            'type'        => 'string',
+            'bdd-type'    => 'VARCHAR2',
+            'length'      => 1000,
+            'scale'       => NULL,
+            'precision'   => NULL,
+            'nullable'    => TRUE,
+            'default'     => NULL,
+            'position'    => 94,
+            'commentaire' => NULL,
+        ],
+        'MODE_CALCUL_PRIME'              => [
+            'name'        => 'MODE_CALCUL_PRIME',
+            'type'        => 'string',
+            'bdd-type'    => 'VARCHAR2',
+            'length'      => 1000,
+            'scale'       => NULL,
+            'precision'   => NULL,
+            'nullable'    => TRUE,
+            'default'     => NULL,
+            'position'    => 95,
+            'commentaire' => NULL,
+        ],
         'MODE_ENSEIGNEMENT_PREVISIONNEL' => [
             'name'        => 'MODE_ENSEIGNEMENT_PREVISIONNEL',
             'type'        => 'string',
@@ -1125,55 +1173,7 @@ return [
             'position'    => 4,
             'commentaire' => NULL,
         ],
-        'MODE_CALCUL'                => [
-            'name'        => 'MODE_CALCUL',
-            'type'        => 'string',
-            'bdd-type'    => 'VARCHAR2',
-            'length'      => 1000,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 86,
-            'commentaire' => NULL,
-        ],
-        'MODE_CALCUL_PRIME'                => [
-            'name'        => 'MODE_CALCUL_PRIME',
-            'type'        => 'string',
-            'bdd-type'    => 'VARCHAR2',
-            'length'      => 1000,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 86,
-            'commentaire' => NULL,
-        ],
-        'CODE_INDEMNITE'                => [
-            'name'        => 'CODE_INDEMNITE',
-            'type'        => 'string',
-            'bdd-type'    => 'VARCHAR2',
-            'length'      => 1000,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 86,
-            'commentaire' => NULL,
-        ],
-        'CODE_INDEMNITE_PRIME'                => [
-            'name'        => 'CODE_INDEMNITE_PRIME',
-            'type'        => 'string',
-            'bdd-type'    => 'VARCHAR2',
-            'length'      => 1000,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 86,
-            'commentaire' => NULL,
-        ],
-        'TYPE_PAIE'                => [
+        'TYPE_PAIE'                      => [
             'name'        => 'TYPE_PAIE',
             'type'        => 'string',
             'bdd-type'    => 'VARCHAR2',
@@ -1182,7 +1182,7 @@ return [
             'precision'   => NULL,
             'nullable'    => TRUE,
             'default'     => NULL,
-            'position'    => 86,
+            'position'    => 98,
             'commentaire' => NULL,
         ],
         'TYPE_PAIE_PRIME'                => [
@@ -1194,7 +1194,7 @@ return [
             'precision'   => NULL,
             'nullable'    => TRUE,
             'default'     => NULL,
-            'position'    => 86,
+            'position'    => 99,
             'commentaire' => NULL,
         ],
     ],
diff --git a/data/ddl/view/V_TBL_PAIEMENT.sql b/data/ddl/view/V_TBL_PAIEMENT.sql
index 5d0666f8649f932a6316df761b9cbf26506cae38..ea7feedb12bb7a8977689e0ea947a50e6a5af51f 100644
--- a/data/ddl/view/V_TBL_PAIEMENT.sql
+++ b/data/ddl/view/V_TBL_PAIEMENT.sql
@@ -34,7 +34,7 @@ SELECT
   COALESCE( ep.structure_id, i.structure_id ) structure_id,
   mep.id                                      mise_en_paiement_id,
   mep.periode_paiement_id                     periode_paiement_id,
-  COALESCE(mep.domaine_fonctionnel_id, e.domaine_fonctionnel_id, to_number(p.valeur)) domaine_fonctionnel_id,
+  COALESCE(mep.domaine_fonctionnel_id, e.domaine_fonctionnel_id, ose_parametre.get_domaine_fonc_ens_ext) domaine_fonctionnel_id,
   frs.heures_compl_fi + frs.heures_compl_fc + frs.heures_compl_fa + frs.heures_compl_fc_majorees heures_a_payer,
   COUNT(*) OVER(PARTITION BY frs.id)          heures_a_payer_pond,
   COALESCE(mep.heures,0)                      heures_demandees,
@@ -43,22 +43,19 @@ SELECT
   SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id)  total_heures,
   SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id) * pea.pourc_exercice_aa  total_heures_aa,
   SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id ORDER BY mep.id) cumul_heures,
-  CASE WHEN p2.valeur = 'prorata' THEN COALESCE(mep.heures,0) * pea.pourc_exercice_aa ELSE ose_divers.CALC_HEURES_AA(
+  CASE WHEN ose_parametre.get_regle_repart_annee_civ = 'prorata' THEN COALESCE(mep.heures,0) * pea.pourc_exercice_aa ELSE ose_divers.CALC_HEURES_AA(
     COALESCE(mep.heures,0), -- heures
     pea.pourc_exercice_aa, -- pourc_exercice_aa
     SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id), -- total_heures
     SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id ORDER BY mep.id) -- cumul_heures
   ) END heures_aa,
-  COALESCE(si.taux_remu_id, to_number(p3.valeur))                  taux_remu_id,
-  OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(si.taux_remu_id, to_number(p3.valeur)),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire,
+  COALESCE(ep.taux_remu_id, si.taux_remu_id, ose_parametre.get_taux_remu) taux_remu_id,
+  OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(ep.taux_remu_id, si.taux_remu_id, ose_parametre.get_taux_remu),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire,
   1 taux_conges_payes
 FROM
             formule_resultat_service        frs
        JOIN type_volume_horaire             tvh ON tvh.code = 'REALISE'
        JOIN etat_volume_horaire             evh ON evh.code = 'valide'
-       JOIN parametre                         p ON p.nom = 'domaine_fonctionnel_ens_ext'
-       JOIN parametre                        p2 ON p2.nom = 'regle_repartition_annee_civile'
-       JOIN parametre                        p3 ON p3.nom = 'taux-remu'
        JOIN formule_resultat                 fr ON fr.id = frs.formule_resultat_id
                                                AND fr.type_volume_horaire_id = tvh.id
                                                AND fr.etat_volume_horaire_id = evh.id
@@ -112,21 +109,19 @@ SELECT
   SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id)  total_heures,
   SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id) * pea.pourc_exercice_aa  total_heures_aa,
   SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id ORDER BY mep.id) cumul_heures,
-  CASE WHEN p2.valeur = 'prorata' THEN COALESCE(mep.heures,0) * pea.pourc_exercice_aa ELSE ose_divers.CALC_HEURES_AA(
+  CASE WHEN ose_parametre.get_regle_repart_annee_civ = 'prorata' THEN COALESCE(mep.heures,0) * pea.pourc_exercice_aa ELSE ose_divers.CALC_HEURES_AA(
     COALESCE(mep.heures,0), -- heures
     pea.pourc_exercice_aa, -- pourc_exercice_aa
     SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id), -- total_heures
     SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id ORDER BY mep.id) -- cumul_heures
   ) END heures_aa,
-  COALESCE(si.taux_remu_id, to_number(p3.valeur))                  taux_remu_id,
-  OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(si.taux_remu_id, to_number(p3.valeur)),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire,
+  COALESCE(si.taux_remu_id, ose_parametre.get_taux_remu) taux_remu_id,
+  OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(si.taux_remu_id, ose_parametre.get_taux_remu),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire,
   1 taux_conges_payes
 FROM
             formule_resultat_service_ref    frs
        JOIN type_volume_horaire             tvh ON tvh.code = 'REALISE'
        JOIN etat_volume_horaire             evh ON evh.code = 'valide'
-       JOIN parametre                        p2 ON p2.nom = 'regle_repartition_annee_civile'
-       JOIN parametre                        p3 ON p3.nom = 'taux-remu'
        JOIN formule_resultat                 fr ON fr.id = frs.formule_resultat_id
                                                AND fr.type_volume_horaire_id = tvh.id
                                                AND fr.etat_volume_horaire_id = evh.id
@@ -157,99 +152,4 @@ FROM
        JOIN fonction_referentiel           fncr ON fncr.id = sr.fonction_id
   LEFT JOIN mise_en_paiement                mep ON mep.formule_res_service_ref_id = frs.id
                                                AND mep.histo_destruction IS NULL
-) t
-
-UNION ALL
-
-SELECT
-  t.annee_id,
-  NULL                                        service_id,
-  NULL                                        service_referentiel_id,
-  NULL                                        formule_res_service_id,
-  NULL                                        formule_res_service_ref_id,
-  t.mission_id,
-  t.intervenant_id,
-  t.structure_id,
-  mep.id                                      mise_en_paiement_id,
-  mep.periode_paiement_id                     periode_paiement_id,
-  mep.domaine_fonctionnel_id                  domaine_fonctionnel_id,
-  t.heures_a_payer,
-  COUNT(*) OVER(PARTITION BY t.mission_id, t.taux_remu_id, t.taux_horaire) heures_a_payer_pond,
-  COALESCE(mep.heures,0)                      heures_demandees,
-  CASE WHEN mep.periode_paiement_id IS NULL THEN 0 ELSE mep.heures END heures_payees,
-  ROUND(t.heures_aa / t.heures_a_payer,2) pourc_exercice_aa,
-  1 - ROUND(t.heures_aa / t.heures_a_payer,2) pourc_exercice_ac,
-  t.heures_aa,
-  t.heures_ac,
-  t.taux_remu_id,
-  t.taux_horaire,
-  t.taux_conges_payes
-FROM
-  (
-  SELECT
-    t.annee_id,
-    t.mission_id,
-    t.intervenant_id,
-    t.structure_id,
-    SUM(t.heures_a_payer) heures_a_payer,
-    --CASE WHEN t.aa = 1 THEN SUM(t.heures_a_payer) / SUM(t.heures_a_payer) ELSE 0 END pourc_exercice_aa,
-   -- SUM(t.heures_a_payer) / SUM(CASE WHEN t.aa = 0 THEN t.heures_a_payer ELSE 0 END) pourc_exercice_ac,
-    SUM(CASE WHEN t.aa = 1 THEN t.heures_a_payer ELSE 0 END) heures_aa,
-    SUM(CASE WHEN t.aa = 0 THEN t.heures_a_payer ELSE 0 END) heures_ac,
-    t.taux_remu_id,
-    t.taux_horaire,
-    t.taux_conges_payes
-  FROM
-    (
-    SELECT
-      tm.annee_id annee_id,
-      tm.mission_id                               mission_id,
-      tm.intervenant_id                           intervenant_id,
-      tm.structure_id                             structure_id,
-      vhm.heures                                  heures_a_payer,
-      CASE WHEN to_number(TO_CHAR( vhm.horaire_debut, 'YYYY' )) = tm.annee_id THEN 1 ELSE 0 END aa,
-      CASE WHEN
-        TO_CHAR( vhm.horaire_debut, 'HH24:MI' ) >= ose_parametre.get_horaire_nocturne -- horaire nocturne
-        OR jf.id IS NOT NULL                                                          -- jour ferie
-        OR TO_CHAR(vhm.horaire_debut, 'DAY', 'NLS_DATE_LANGUAGE=FRENCH') = 'DIMANCHE' -- dimanche
-      THEN
-        COALESCE(m.taux_remu_majore_id, m.taux_remu_id)
-      ELSE
-        m.taux_remu_id
-      END                                         taux_remu_id,
-      ose_paiement.get_taux_horaire(CASE WHEN
-        TO_CHAR( vhm.horaire_debut, 'HH24:MI' ) >= ose_parametre.get_horaire_nocturne -- horaire nocturne
-        OR jf.id IS NOT NULL                                                          -- jour ferie
-        OR TO_CHAR(vhm.horaire_debut, 'DAY', 'NLS_DATE_LANGUAGE=FRENCH') = 'DIMANCHE' -- dimanche
-      THEN
-        COALESCE(m.taux_remu_majore_id, m.taux_remu_id)
-      ELSE
-        m.taux_remu_id
-      END, vhm.horaire_debut) taux_horaire,
-
-      ose_parametre.get_taux_conges_payes+1       taux_conges_payes
-    FROM
-      tbl_mission tm
-      JOIN mission m ON m.id = tm.mission_id
-      JOIN volume_horaire_mission vhm ON vhm.histo_destruction IS NULL AND vhm.mission_id = tm.mission_id
-      JOIN type_volume_horaire tvh ON tvh.id = vhm.type_volume_horaire_id AND tvh.code ='REALISE'
-      LEFT JOIN validation_vol_horaire_miss vvhm ON vvhm.volume_horaire_mission_id = vhm.id
-      LEFT JOIN validation v ON v.id = vvhm.validation_id AND v.histo_destruction IS NULL
-      LEFT JOIN jour_ferie jf ON TO_CHAR( jf.date_jour, 'dd/mm/YYYY' ) = TO_CHAR( vhm.horaire_debut, 'dd/mm/YYYY' )
-    WHERE
-      tm.valide = 1
-      /*@INTERVENANT_ID=tm.intervenant_id*/ /*@ANNEE_ID=tm.annee_id*/
-      AND (vhm.auto_validation = 1 OR v.id IS NOT NULL)
-    ORDER BY
-      vhm.horaire_debut
-    ) t
-  GROUP BY
-    t.annee_id,
-    t.mission_id,
-    t.intervenant_id,
-    t.structure_id,
-    t.taux_remu_id,
-    t.taux_horaire,
-    t.taux_conges_payes
-  ) t
-  LEFT JOIN mise_en_paiement mep ON mep.mission_id = t.mission_id AND mep.histo_destruction IS NULL
\ No newline at end of file
+) t
\ No newline at end of file
diff --git a/data/ddl/view/V_TBL_PLAFOND_INTERVENANT.sql b/data/ddl/view/V_TBL_PLAFOND_INTERVENANT.sql
index 7e3a713bfc0fd9806bbdd95c2ead3a2f85d36265..9eb56b25bd468c92ffe340514f62472fab5952b8 100644
--- a/data/ddl/view/V_TBL_PLAFOND_INTERVENANT.sql
+++ b/data/ddl/view/V_TBL_PLAFOND_INTERVENANT.sql
@@ -15,64 +15,99 @@ SELECT
   CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement
 FROM
   (
-  SELECT 10 PLAFOND_ID, NULL PLAFOND_ETAT_ID, p.* FROM (
+  SELECT 1 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM (
     SELECT
-        i.annee_id annee_id,
-        type_volume_horaire_id,
-        intervenant_id,
-        heures,
-        plafond
+        i.annee_id                          annee_id,
+        fr.type_volume_horaire_id           type_volume_horaire_id,
+        fr.intervenant_id                   intervenant_id,
+        fr.heures_compl_fi + fr.heures_compl_fc + fr.heures_compl_fa + fr.heures_compl_referentiel heures
       FROM
-        (
-        SELECT
-          intervenant_id,
-          type_volume_horaire_id,
-          tranche,
-          sum(heures) heures,
-          least(min(plafond_tranche_mission), min(plafond_tranche)) plafond
-        FROM
-          (
-          SELECT
-            m.intervenant_id                                         intervenant_id,
-            vhm.type_volume_horaire_id                               type_volume_horaire_id,
-            to_char( vhm.horaire_debut, 'YYYY-mm' )                  tranche,
-            vhm.heures                                               heures,
-            ROUND(CASE to_char( vhm.horaire_debut, 'mm' ) WHEN '07' THEN 150 WHEN '08' THEN 150 ELSE 67 END / 30 * (m.date_fin - m.date_debut),2) plafond_tranche_mission,
-            CASE to_char( vhm.horaire_debut, 'mm' ) WHEN '07' THEN 150 WHEN '08' THEN 150 ELSE 67 END plafond_tranche
-          FROM
-            volume_horaire_mission vhm
-            JOIN type_volume_horaire tvh ON tvh.id = vhm.type_volume_horaire_id AND tvh.code = 'REALISE'
-            JOIN mission m ON m.id = vhm.mission_id AND m.histo_destruction IS NULL
-          WHERE
-            vhm.histo_destruction IS NULL
-          ) t
-        GROUP BY
-          intervenant_id,
-          type_volume_horaire_id,
-          tranche
-      ) t
-      JOIN intervenant i ON i.id = t.intervenant_id
+             intervenant                i
+        JOIN statut                    si ON si.id = i.statut_id
+        JOIN etat_volume_horaire      evh ON evh.code = 'saisi'
+        JOIN formule_resultat          fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id
+    ) p
+
+    UNION ALL
+
+  SELECT 2 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM (
+    SELECT
+        i.annee_id                             annee_id,
+        fr.type_volume_horaire_id              type_volume_horaire_id,
+        i.id                                   intervenant_id,
+        fr.total - fr.heures_compl_fc_majorees heures
+      FROM
+        intervenant                     i
+        JOIN etat_volume_horaire      evh ON evh.code = 'saisi'
+        JOIN formule_resultat          fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id
+        JOIN statut                    si ON si.id = i.statut_id
+    ) p
+
+    UNION ALL
+
+  SELECT 4 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM (
+    SELECT
+        i.annee_id                annee_id,
+        fr.type_volume_horaire_id type_volume_horaire_id,
+        i.id                      intervenant_id,
+        SUM(frvh.heures_compl_fi) heures
+      FROM
+        intervenant                     i
+        JOIN etat_volume_horaire      evh ON evh.code = 'saisi'
+        JOIN formule_resultat          fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id
+        JOIN formule_resultat_vh     frvh ON frvh.formule_resultat_id = fr.id
+        JOIN volume_horaire            vh ON vh.id = frvh.volume_horaire_id
+        JOIN type_intervention         ti ON ti.id = vh.type_intervention_id
+        JOIN statut                    si ON si.id = i.statut_id
       WHERE
-        heures > plafond
-        AND rownum = 1
+        ti.regle_foad = 0
+      GROUP BY
+        fr.type_volume_horaire_id,
+        i.annee_id,
+        i.id,
+        i.statut_id
+    ) p
+
+    UNION ALL
+
+  SELECT 8 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM (
+    SELECT
+        i.annee_id                             annee_id,
+        fr.type_volume_horaire_id              type_volume_horaire_id,
+        i.id                                   intervenant_id,
+        fr.service_referentiel + fr.heures_compl_referentiel heures
+      FROM
+        intervenant                     i
+        JOIN etat_volume_horaire      evh ON evh.code = 'saisi'
+        JOIN formule_resultat          fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id
+        JOIN statut                    si ON si.id = i.statut_id
     ) p
 
     UNION ALL
 
   SELECT 9 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM (
     SELECT
-        i.annee_id                  annee_id,
-        vhm.type_volume_horaire_id  type_volume_horaire_id,
-        i.id                        intervenant_id,
-        SUM(vhm.heures)             heures
+        i.annee_id                annee_id,
+        vh.type_volume_horaire_id type_volume_horaire_id,
+        i.id                      intervenant_id,
+        SUM(vh.heures)            heures
       FROM
-        volume_horaire_mission vhm
-        JOIN mission m ON m.histo_destruction IS NULL AND m.id = vhm.mission_id
-        JOIN intervenant i ON i.id = m.intervenant_id
+        volume_horaire vh
+        JOIN service s ON s.id = vh.service_id
+        JOIN intervenant i ON i.id = s.intervenant_id
+        JOIN statut si ON si.id = i.statut_id
       WHERE
-        vhm.histo_destruction IS NULL
+        vh.histo_destruction IS NULL
+        AND i.histo_destruction IS NULL
+        AND vh.motif_non_paiement_id IS NULL
+        AND si.code IN ('IMP')
       GROUP BY
-        i.annee_id, vhm.type_volume_horaire_id, i.id
+        i.annee_id,
+        vh.type_volume_horaire_id,
+        i.id,
+        i.statut_id
+      HAVING
+        SUM(vh.heures) >= 0
     ) p
   ) p
   JOIN intervenant i ON i.id = p.intervenant_id
diff --git a/data/ddl/view/V_TBL_PLAFOND_REFERENTIEL.sql b/data/ddl/view/V_TBL_PLAFOND_REFERENTIEL.sql
index 91e06882d0700d0f31c0e2936e2407255be9a3f9..8e0f9a00e33821a340bbfa925196ffa235a7cb27 100644
--- a/data/ddl/view/V_TBL_PLAFOND_REFERENTIEL.sql
+++ b/data/ddl/view/V_TBL_PLAFOND_REFERENTIEL.sql
@@ -16,7 +16,42 @@ SELECT
   CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement
 FROM
   (
-    SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL INTERVENANT_ID,NULL FONCTION_REFERENTIEL_ID,NULL HEURES,NULL PLAFOND,NULL PLAFOND_ETAT_ID,NULL DEROGATION FROM dual WHERE 0 = 1
+  SELECT 7 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM (
+    SELECT
+        i.annee_id                        annee_id,
+        vhr.type_volume_horaire_id        type_volume_horaire_id,
+        i.id                              intervenant_id,
+        fr.id                             fonction_referentiel_id,
+        SUM(vhr.heures)                   heures
+      FROM
+             service_referentiel       sr
+        JOIN intervenant                i ON i.id = sr.intervenant_id
+        JOIN fonction_referentiel      fr ON fr.id = sr.fonction_id
+        JOIN volume_horaire_ref       vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL
+      WHERE
+        sr.histo_destruction IS NULL
+      GROUP BY
+        i.annee_id, vhr.type_volume_horaire_id, i.id, fr.id
+
+      UNION ALL
+
+      SELECT
+        i.annee_id                 annee_id,
+        vhr.type_volume_horaire_id type_volume_horaire_id,
+        i.id                       intervenant_id,
+        fr.id                      fonction_referentiel_id,
+        SUM(vhr.heures)            heures
+      FROM
+        service_referentiel       sr
+        JOIN intervenant i ON i.id = sr.intervenant_id
+        JOIN fonction_referentiel      frf ON frf.id = sr.fonction_id
+        JOIN fonction_referentiel      fr ON fr.id = frf.parent_id
+        JOIN volume_horaire_ref       vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL
+      WHERE
+        sr.histo_destruction IS NULL
+      GROUP BY
+        i.annee_id, vhr.type_volume_horaire_id, i.id, fr.id
+    ) p
   ) p
   JOIN intervenant i ON i.id = p.intervenant_id
   LEFT JOIN plafond_referentiel ps ON ps.plafond_id = p.plafond_id AND ps.fonction_referentiel_id = p.fonction_referentiel_id AND ps.annee_id = i.annee_id AND ps.histo_destruction IS NULL
diff --git a/data/ddl/view/V_TBL_PLAFOND_STRUCTURE.sql b/data/ddl/view/V_TBL_PLAFOND_STRUCTURE.sql
index aa66f5f2403c57d34d6bab0f4ee053f26f6a849c..bcc562a00897ec9377914945254482cac0570425 100644
--- a/data/ddl/view/V_TBL_PLAFOND_STRUCTURE.sql
+++ b/data/ddl/view/V_TBL_PLAFOND_STRUCTURE.sql
@@ -16,7 +16,23 @@ SELECT
   CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement
 FROM
   (
-    SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL INTERVENANT_ID,NULL STRUCTURE_ID,NULL HEURES,NULL PLAFOND,NULL PLAFOND_ETAT_ID,NULL DEROGATION FROM dual WHERE 0 = 1
+  SELECT 6 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM (
+    SELECT
+        i.annee_id                 annee_id,
+        vhr.type_volume_horaire_id type_volume_horaire_id,
+        i.id                       intervenant_id,
+        s.id                       structure_id,
+        SUM(vhr.heures)            heures
+      FROM
+        service_referentiel       sr
+        JOIN intervenant           i ON i.id = sr.intervenant_id
+        JOIN structure             s ON s.id = sr.structure_id
+        JOIN volume_horaire_ref  vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL
+      WHERE
+        sr.histo_destruction IS NULL
+      GROUP BY
+        i.annee_id, vhr.type_volume_horaire_id, i.id, s.id
+    ) p
   ) p
   JOIN intervenant i ON i.id = p.intervenant_id
   LEFT JOIN plafond_structure ps ON ps.plafond_id = p.plafond_id AND ps.structure_id = p.structure_id AND ps.annee_id = i.annee_id AND ps.histo_destruction IS NULL
diff --git a/data/ddl/view/V_TBL_PLAFOND_VOLUME_HORAIRE.sql b/data/ddl/view/V_TBL_PLAFOND_VOLUME_HORAIRE.sql
index c7cd9ee5463f82f4950af3e307c93186f477e99a..6e2e8171bddb6107e9538adc52579baeb9930901 100644
--- a/data/ddl/view/V_TBL_PLAFOND_VOLUME_HORAIRE.sql
+++ b/data/ddl/view/V_TBL_PLAFOND_VOLUME_HORAIRE.sql
@@ -13,7 +13,64 @@ SELECT
   CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement
 FROM
   (
-    SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL INTERVENANT_ID,NULL ELEMENT_PEDAGOGIQUE_ID,NULL TYPE_INTERVENTION_ID,NULL HEURES,NULL PLAFOND,NULL PLAFOND_ETAT_ID,NULL DEROGATION FROM dual WHERE 0 = 1
+  SELECT 5 PLAFOND_ID, NULL PLAFOND_ETAT_ID, p.* FROM (
+    WITH c AS (
+        SELECT
+          vhe.element_pedagogique_id,
+          vhe.type_intervention_id,
+          MAX(vhe.heures) heures,
+          COALESCE( MAX(vhe.groupes), ROUND(SUM(t.groupes),10) ) groupes
+
+        FROM
+          volume_horaire_ens     vhe
+               JOIN parametre p ON p.nom = 'scenario_charges_services'
+          LEFT JOIN tbl_chargens   t ON t.element_pedagogique_id = vhe.element_pedagogique_id
+                                    AND t.type_intervention_id = vhe.type_intervention_id
+                                    AND t.scenario_id = to_number(p.valeur)
+        GROUP BY
+          vhe.element_pedagogique_id,
+          vhe.type_intervention_id
+      ), s AS (
+        SELECT
+          i.annee_id,
+          vh.type_volume_horaire_id,
+          s.intervenant_id,
+          s.element_pedagogique_id,
+          vh.type_intervention_id,
+          SUM(vh.heures) heures
+        FROM
+          volume_horaire vh
+          JOIN service     s ON s.id = vh.service_id
+                            AND s.element_pedagogique_id IS NOT NULL
+                            AND s.histo_destruction IS NULL
+          JOIN intervenant i ON i.id = s.intervenant_id
+                            AND i.histo_destruction IS NULL
+        WHERE
+          vh.histo_destruction IS NULL
+        GROUP BY
+          i.annee_id,
+          vh.type_volume_horaire_id,
+          s.intervenant_id,
+          s.element_pedagogique_id,
+          vh.type_intervention_id
+      )
+      SELECT
+        s.annee_id                                  annee_id,
+        s.type_volume_horaire_id                    type_volume_horaire_id,
+        s.intervenant_id                            intervenant_id,
+        s.element_pedagogique_id                    element_pedagogique_id,
+        s.type_intervention_id                      type_intervention_id,
+        s.heures                                    heures,
+        COALESCE(c.heures * c.groupes,0)            plafond
+      FROM
+                  s
+             JOIN type_intervention ti ON ti.id = s.type_intervention_id
+             JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id
+        LEFT JOIN c ON c.element_pedagogique_id = s.element_pedagogique_id
+                   AND c.type_intervention_id = COALESCE(ti.type_intervention_maquette_id,ti.id)
+      WHERE
+        s.heures - COALESCE(c.heures * c.groupes,0) > 0
+    ) p
   ) p
   JOIN intervenant i ON i.id = p.intervenant_id
   LEFT JOIN plafond_statut ps ON 1 = 0
diff --git a/data/ddl_columns_pos.php b/data/ddl_columns_pos.php
index 8334dc41019755bb60d9972b9ce823801eb8f19c..8b4f6ca8347b7fd064b08bdcee4a3a23c6481e31 100644
--- a/data/ddl_columns_pos.php
+++ b/data/ddl_columns_pos.php
@@ -1335,6 +1335,12 @@ return [
         'MODE_ENSEIGNEMENT_PREVISIONNEL',
         'MODE_ENSEIGNEMENT_REALISE',
         'PAIEMENT',
+        'MODE_CALCUL',
+        'MODE_CALCUL_PRIME',
+        'CODE_INDEMNITE',
+        'CODE_INDEMNITE_PRIME',
+        'TYPE_PAIE',
+        'TYPE_PAIE_PRIME',
     ],
     'STRUCTURE'                      => [
         'ID',
@@ -2209,6 +2215,7 @@ return [
         'ETUDIANTS_SUIVIS',
         'TAUX_REMU_MAJORE_ID',
         'HEURES_FORMATION',
+        'LIBELLE_MISSION',
     ],
     'MISSION_ETUDIANT'               => [
         'MISSION_ID',
diff --git a/module/Paiement/view/paiement/taux-remu/saisir-valeur.phtml b/module/Paiement/view/paiement/taux-remu/saisir-valeur.phtml
index 1d6219f959723458a113f079f2ff117197a8b570..5cabbf8a3e2b21ebbf761941781bc628cc952ad1 100755
--- a/module/Paiement/view/paiement/taux-remu/saisir-valeur.phtml
+++ b/module/Paiement/view/paiement/taux-remu/saisir-valeur.phtml
@@ -3,5 +3,6 @@
  * @var $this  \Application\View\Renderer\PhpRenderer
  */
 
+echo '<h1 class="page-header">Modification de la valeur du taux</h1>';
 echo $this->messenger()->addCurrentMessagesFromFlashMessenger();
 echo $this->form($form);
\ No newline at end of file
diff --git a/module/Paiement/view/paiement/taux-remu/saisir.phtml b/module/Paiement/view/paiement/taux-remu/saisir.phtml
index ac28762d2c392f055cf83ceaa86f7de06e74155e..288710e050a0613f1ecc296fd0969447be04b785 100755
--- a/module/Paiement/view/paiement/taux-remu/saisir.phtml
+++ b/module/Paiement/view/paiement/taux-remu/saisir.phtml
@@ -3,5 +3,6 @@
  * @var $this  \Application\View\Renderer\PhpRenderer
  */
 
+echo '<h1 class="page-header">Saisie du taux</h1>';
 echo $this->messenger()->addCurrentMessagesFromFlashMessenger();
 echo $this->form($form);
diff --git a/module/Referentiel/src/Controller/ServiceReferentielController.php b/module/Referentiel/src/Controller/ServiceReferentielController.php
index d1c15c842c0d42936a3be72105d03baeb76867dc..0f85d965ae4aafbd023e65a90f51caf6f4abc836 100755
--- a/module/Referentiel/src/Controller/ServiceReferentielController.php
+++ b/module/Referentiel/src/Controller/ServiceReferentielController.php
@@ -150,7 +150,7 @@ class ServiceReferentielController extends AbstractController
                 }
                 $hFin = $entity->getVolumeHoraireReferentielListe()->getHeures();
                 $this->updateTableauxBord($intervenant);
-                if (!$this->getProcessusPlafond()->endTransaction($service, $typeVolumeHoraire, $hFin < $hDeb)) {
+                if (!$this->getProcessusPlafond()->endTransaction($entity, $typeVolumeHoraire, $hFin < $hDeb)) {
                     $this->updateTableauxBord($intervenant);
                 }
             } else {