From aac3b1c317c2a9d30ac3cc922a568222f51ce039 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Laurent=20L=C3=A9cluse?= <laurent.lecluse@unicaen.fr>
Date: Wed, 1 Jul 2020 15:33:55 +0200
Subject: [PATCH] Travaux en cours

---
 data/ddl/index/TBL_AGREMENT_UN.php            |    1 -
 ..._UN.php => TBL_CHARGENS_SEUILS_DEF_UN.php} |    2 +-
 ...L_CHARGENS__UN.php => TBL_CHARGENS_UN.php} |    2 +-
 data/ddl/index/TBL_CLOTURE_REALISE_UN.php     |   15 -
 data/ddl/index/TBL_CONTRAT_UN.php             |    1 -
 data/ddl/index/TBL_DMEP_LIQUIDATION_UN.php    |    1 -
 data/ddl/index/TBL_DOSSIER_UN.php             |   15 -
 data/ddl/index/TBL_PAIEMENT_UN.php            |    1 -
 ...UN.php => TBL_PIECE_JOINTE_DEMANDE_UN.php} |    3 +-
 ...UN.php => TBL_PIECE_JOINTE_FOURNIE_UN.php} |    2 +-
 ...JOINTE__UN.php => TBL_PIECE_JOINTE_UN.php} |    3 +-
 data/ddl/index/TBL_SERVICE_REFERENTIEL_UN.php |    1 -
 data/ddl/index/TBL_SERVICE_SAISIE_UN.php      |   15 -
 data/ddl/index/TBL_SERVICE_UN.php             |    1 -
 .../index/TBL_VALIDATION_ENSEIGNEMENT_UN.php  |    1 -
 ....php => TBL_VALIDATION_REFERENTIEL_UN.php} |    3 +-
 data/ddl/package/OSE_DIVERS/body.sql          |   62 +-
 data/ddl/package/OSE_DIVERS/definition.sql    |    8 +-
 data/ddl/package/OSE_EVENT/body.sql           |    3 +-
 data/ddl/package/OSE_FORMULE/body.sql         |    6 +-
 data/ddl/package/OSE_FORMULE/definition.sql   |    2 +-
 data/ddl/package/OSE_WORKFLOW/body.sql        |   53 +-
 data/ddl/package/OSE_WORKFLOW/definition.sql  |    4 +-
 data/ddl/package/UNICAEN_TBL/body.sql         | 2101 +----------------
 data/ddl/package/UNICAEN_TBL/definition.sql   |   51 +-
 data/ddl/table/TBL.php                        |   12 +
 data/ddl/table/TBL_AGREMENT.php               |   16 +-
 data/ddl/table/TBL_CHARGENS.php               |   12 -
 data/ddl/table/TBL_CHARGENS_SEUILS_DEF.php    |   12 -
 data/ddl/table/TBL_CLOTURE_REALISE.php        |   12 -
 data/ddl/table/TBL_CONTRAT.php                |   12 -
 data/ddl/table/TBL_DEMS.php                   |  117 +-
 data/ddl/table/TBL_DMEP_LIQUIDATION.php       |   12 -
 data/ddl/table/TBL_DOSSIER.php                |   12 -
 data/ddl/table/TBL_LIEN.php                   |   12 -
 data/ddl/table/TBL_PAIEMENT.php               |   12 -
 data/ddl/table/TBL_PIECE_JOINTE.php           |   12 -
 data/ddl/table/TBL_PIECE_JOINTE_DEMANDE.php   |   14 +-
 data/ddl/table/TBL_PIECE_JOINTE_FOURNIE.php   |   14 +-
 data/ddl/table/TBL_SERVICE.php                |   14 +-
 data/ddl/table/TBL_SERVICE_REFERENTIEL.php    |   12 -
 data/ddl/table/TBL_SERVICE_SAISIE.php         |   12 -
 .../ddl/table/TBL_VALIDATION_ENSEIGNEMENT.php |   12 -
 data/ddl/table/TBL_VALIDATION_REFERENTIEL.php |   12 -
 data/ddl/trigger/F_ELEMENT_MODULATEUR.sql     |    2 +-
 data/ddl/trigger/F_ELEMENT_PEDAGOGIQUE.sql    |    2 +-
 data/ddl/trigger/F_INTERVENANT.sql            |    2 +-
 data/ddl/trigger/F_MODIF_SERVICE_DU.sql       |    4 +-
 data/ddl/trigger/F_MODULATEUR.sql             |    2 +-
 .../trigger/F_MOTIF_MODIFICATION_SERVICE.sql  |    2 +-
 data/ddl/trigger/F_STATUT_INTERVENANT.sql     |    2 +-
 data/ddl/trigger/F_TYPE_INTERVENTION.sql      |    2 +-
 data/ddl/trigger/T_CRG_ETAPE.sql              |    6 +-
 data/ddl/trigger/T_CRG_SCENARIO_NOEUD.sql     |    4 +-
 .../trigger/T_CRG_SCENARIO_NOEUD_EFFECTIF.sql |    4 +-
 .../trigger/T_CRG_SCENARIO_NOEUD_SEUIL.sql    |    4 +-
 data/ddl/trigger/T_CRG_VOLUME_HORAIRE_ENS.sql |    4 +-
 .../ddl/unique-constraint/TBL_AGREMENT_UN.php |    1 -
 ..._UN.php => TBL_CHARGENS_SEUILS_DEF_UN.php} |    4 +-
 ...L_CHARGENS__UN.php => TBL_CHARGENS_UN.php} |    4 +-
 .../TBL_CLOTURE_REALISE_UN.php                |    3 +-
 data/ddl/unique-constraint/TBL_CONTRAT_UN.php |    1 -
 .../TBL_DMEP_LIQUIDATION_UN.php               |    1 -
 data/ddl/unique-constraint/TBL_DOSSIER_UN.php |    3 +-
 .../ddl/unique-constraint/TBL_PAIEMENT_UN.php |    1 -
 ...UN.php => TBL_PIECE_JOINTE_DEMANDE_UN.php} |    5 +-
 ...UN.php => TBL_PIECE_JOINTE_FOURNIE_UN.php} |    4 +-
 ...JOINTE__UN.php => TBL_PIECE_JOINTE_UN.php} |    5 +-
 .../TBL_SERVICE_REFERENTIEL_UN.php            |    1 -
 .../TBL_SERVICE_SAISIE_UN.php                 |    3 +-
 data/ddl/unique-constraint/TBL_SERVICE_UN.php |    1 -
 .../TBL_VALIDATION_ENSEIGNEMENT_UN.php        |    1 -
 ....php => TBL_VALIDATION_REFERENTIEL_UN.php} |    5 +-
 data/ddl_config.php                           |    2 +-
 data/nomenclatures.php                        |   32 +-
 75 files changed, 155 insertions(+), 2662 deletions(-)
 rename data/ddl/index/{TBL_CHARGENS_SEUILS_DEF__UN.php => TBL_CHARGENS_SEUILS_DEF_UN.php} (85%)
 rename data/ddl/index/{TBL_CHARGENS__UN.php => TBL_CHARGENS_UN.php} (91%)
 delete mode 100644 data/ddl/index/TBL_CLOTURE_REALISE_UN.php
 delete mode 100644 data/ddl/index/TBL_DOSSIER_UN.php
 rename data/ddl/index/{TBL_PJD_UN.php => TBL_PIECE_JOINTE_DEMANDE_UN.php} (79%)
 rename data/ddl/index/{TBL_PJF_UN.php => TBL_PIECE_JOINTE_FOURNIE_UN.php} (84%)
 rename data/ddl/index/{TBL_PIECE_JOINTE__UN.php => TBL_PIECE_JOINTE_UN.php} (76%)
 delete mode 100644 data/ddl/index/TBL_SERVICE_SAISIE_UN.php
 rename data/ddl/index/{TBL_VALIDATION_REFERENTIEL__UN.php => TBL_VALIDATION_REFERENTIEL_UN.php} (81%)
 rename data/ddl/unique-constraint/{TBL_CHARGENS_SEUILS_DEF__UN.php => TBL_CHARGENS_SEUILS_DEF_UN.php} (72%)
 rename data/ddl/unique-constraint/{TBL_CHARGENS__UN.php => TBL_CHARGENS_UN.php} (83%)
 rename data/ddl/unique-constraint/{TBL_PJD_UN.php => TBL_PIECE_JOINTE_DEMANDE_UN.php} (65%)
 rename data/ddl/unique-constraint/{TBL_PJF_UN.php => TBL_PIECE_JOINTE_FOURNIE_UN.php} (70%)
 rename data/ddl/unique-constraint/{TBL_PIECE_JOINTE__UN.php => TBL_PIECE_JOINTE_UN.php} (62%)
 rename data/ddl/unique-constraint/{TBL_VALIDATION_REFERENTIEL__UN.php => TBL_VALIDATION_REFERENTIEL_UN.php} (71%)

diff --git a/data/ddl/index/TBL_AGREMENT_UN.php b/data/ddl/index/TBL_AGREMENT_UN.php
index a22c897b4d..d84011da13 100644
--- a/data/ddl/index/TBL_AGREMENT_UN.php
+++ b/data/ddl/index/TBL_AGREMENT_UN.php
@@ -10,7 +10,6 @@ return [
         'TYPE_AGREMENT_ID',
         'INTERVENANT_ID',
         'STRUCTURE_ID',
-        'TO_DELETE',
         'ANNEE_AGREMENT',
     ],
 ];
diff --git a/data/ddl/index/TBL_CHARGENS_SEUILS_DEF__UN.php b/data/ddl/index/TBL_CHARGENS_SEUILS_DEF_UN.php
similarity index 85%
rename from data/ddl/index/TBL_CHARGENS_SEUILS_DEF__UN.php
rename to data/ddl/index/TBL_CHARGENS_SEUILS_DEF_UN.php
index d640cb965b..3e4e3bee5f 100644
--- a/data/ddl/index/TBL_CHARGENS_SEUILS_DEF__UN.php
+++ b/data/ddl/index/TBL_CHARGENS_SEUILS_DEF_UN.php
@@ -3,7 +3,7 @@
 //@formatter:off
 
 return [
-    'name'    => 'TBL_CHARGENS_SEUILS_DEF__UN',
+    'name'    => 'TBL_CHARGENS_SEUILS_DEF_UN',
     'unique'  => TRUE,
     'table'   => 'TBL_CHARGENS_SEUILS_DEF',
     'columns' => [
diff --git a/data/ddl/index/TBL_CHARGENS__UN.php b/data/ddl/index/TBL_CHARGENS_UN.php
similarity index 91%
rename from data/ddl/index/TBL_CHARGENS__UN.php
rename to data/ddl/index/TBL_CHARGENS_UN.php
index 199a74ed15..30c8a97b07 100644
--- a/data/ddl/index/TBL_CHARGENS__UN.php
+++ b/data/ddl/index/TBL_CHARGENS_UN.php
@@ -3,7 +3,7 @@
 //@formatter:off
 
 return [
-    'name'    => 'TBL_CHARGENS__UN',
+    'name'    => 'TBL_CHARGENS_UN',
     'unique'  => TRUE,
     'table'   => 'TBL_CHARGENS',
     'columns' => [
diff --git a/data/ddl/index/TBL_CLOTURE_REALISE_UN.php b/data/ddl/index/TBL_CLOTURE_REALISE_UN.php
deleted file mode 100644
index 1bca9682aa..0000000000
--- a/data/ddl/index/TBL_CLOTURE_REALISE_UN.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'name'    => 'TBL_CLOTURE_REALISE_UN',
-    'unique'  => TRUE,
-    'table'   => 'TBL_CLOTURE_REALISE',
-    'columns' => [
-        'INTERVENANT_ID',
-        'TO_DELETE',
-    ],
-];
-
-//@formatter:on
diff --git a/data/ddl/index/TBL_CONTRAT_UN.php b/data/ddl/index/TBL_CONTRAT_UN.php
index cf5bf7d9e3..89203f8c90 100644
--- a/data/ddl/index/TBL_CONTRAT_UN.php
+++ b/data/ddl/index/TBL_CONTRAT_UN.php
@@ -9,7 +9,6 @@ return [
     'columns' => [
         'INTERVENANT_ID',
         'STRUCTURE_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/index/TBL_DMEP_LIQUIDATION_UN.php b/data/ddl/index/TBL_DMEP_LIQUIDATION_UN.php
index d011de167d..98779cc057 100644
--- a/data/ddl/index/TBL_DMEP_LIQUIDATION_UN.php
+++ b/data/ddl/index/TBL_DMEP_LIQUIDATION_UN.php
@@ -10,7 +10,6 @@ return [
         'ANNEE_ID',
         'TYPE_RESSOURCE_ID',
         'STRUCTURE_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/index/TBL_DOSSIER_UN.php b/data/ddl/index/TBL_DOSSIER_UN.php
deleted file mode 100644
index 26720e2c5b..0000000000
--- a/data/ddl/index/TBL_DOSSIER_UN.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'name'    => 'TBL_DOSSIER_UN',
-    'unique'  => TRUE,
-    'table'   => 'TBL_DOSSIER',
-    'columns' => [
-        'INTERVENANT_ID',
-        'TO_DELETE',
-    ],
-];
-
-//@formatter:on
diff --git a/data/ddl/index/TBL_PAIEMENT_UN.php b/data/ddl/index/TBL_PAIEMENT_UN.php
index 2c4089b88d..a05e1a0791 100644
--- a/data/ddl/index/TBL_PAIEMENT_UN.php
+++ b/data/ddl/index/TBL_PAIEMENT_UN.php
@@ -8,7 +8,6 @@ return [
     'table'   => 'TBL_PAIEMENT',
     'columns' => [
         'INTERVENANT_ID',
-        'TO_DELETE',
         'MISE_EN_PAIEMENT_ID',
         'FORMULE_RES_SERVICE_ID',
         'FORMULE_RES_SERVICE_REF_ID',
diff --git a/data/ddl/index/TBL_PJD_UN.php b/data/ddl/index/TBL_PIECE_JOINTE_DEMANDE_UN.php
similarity index 79%
rename from data/ddl/index/TBL_PJD_UN.php
rename to data/ddl/index/TBL_PIECE_JOINTE_DEMANDE_UN.php
index ae879d05d8..86fd484cfe 100644
--- a/data/ddl/index/TBL_PJD_UN.php
+++ b/data/ddl/index/TBL_PIECE_JOINTE_DEMANDE_UN.php
@@ -3,13 +3,12 @@
 //@formatter:off
 
 return [
-    'name'    => 'TBL_PJD_UN',
+    'name'    => 'TBL_PIECE_JOINTE_DEMANDE_UN',
     'unique'  => TRUE,
     'table'   => 'TBL_PIECE_JOINTE_DEMANDE',
     'columns' => [
         'TYPE_PIECE_JOINTE_ID',
         'INTERVENANT_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/index/TBL_PJF_UN.php b/data/ddl/index/TBL_PIECE_JOINTE_FOURNIE_UN.php
similarity index 84%
rename from data/ddl/index/TBL_PJF_UN.php
rename to data/ddl/index/TBL_PIECE_JOINTE_FOURNIE_UN.php
index 2f4a75aebf..a0b5fff7b5 100644
--- a/data/ddl/index/TBL_PJF_UN.php
+++ b/data/ddl/index/TBL_PIECE_JOINTE_FOURNIE_UN.php
@@ -3,7 +3,7 @@
 //@formatter:off
 
 return [
-    'name'    => 'TBL_PJF_UN',
+    'name'    => 'TBL_PIECE_JOINTE_FOURNIE_UN',
     'unique'  => TRUE,
     'table'   => 'TBL_PIECE_JOINTE_FOURNIE',
     'columns' => [
diff --git a/data/ddl/index/TBL_PIECE_JOINTE__UN.php b/data/ddl/index/TBL_PIECE_JOINTE_UN.php
similarity index 76%
rename from data/ddl/index/TBL_PIECE_JOINTE__UN.php
rename to data/ddl/index/TBL_PIECE_JOINTE_UN.php
index d5bf8a5a9b..15452058c5 100644
--- a/data/ddl/index/TBL_PIECE_JOINTE__UN.php
+++ b/data/ddl/index/TBL_PIECE_JOINTE_UN.php
@@ -3,13 +3,12 @@
 //@formatter:off
 
 return [
-    'name'    => 'TBL_PIECE_JOINTE__UN',
+    'name'    => 'TBL_PIECE_JOINTE_UN',
     'unique'  => TRUE,
     'table'   => 'TBL_PIECE_JOINTE',
     'columns' => [
         'TYPE_PIECE_JOINTE_ID',
         'INTERVENANT_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/index/TBL_SERVICE_REFERENTIEL_UN.php b/data/ddl/index/TBL_SERVICE_REFERENTIEL_UN.php
index 0a5fc9e35c..ae232b7b81 100644
--- a/data/ddl/index/TBL_SERVICE_REFERENTIEL_UN.php
+++ b/data/ddl/index/TBL_SERVICE_REFERENTIEL_UN.php
@@ -10,7 +10,6 @@ return [
         'INTERVENANT_ID',
         'TYPE_VOLUME_HORAIRE_ID',
         'STRUCTURE_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/index/TBL_SERVICE_SAISIE_UN.php b/data/ddl/index/TBL_SERVICE_SAISIE_UN.php
deleted file mode 100644
index 0e5cd250fa..0000000000
--- a/data/ddl/index/TBL_SERVICE_SAISIE_UN.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-//@formatter:off
-
-return [
-    'name'    => 'TBL_SERVICE_SAISIE_UN',
-    'unique'  => TRUE,
-    'table'   => 'TBL_SERVICE_SAISIE',
-    'columns' => [
-        'INTERVENANT_ID',
-        'TO_DELETE',
-    ],
-];
-
-//@formatter:on
diff --git a/data/ddl/index/TBL_SERVICE_UN.php b/data/ddl/index/TBL_SERVICE_UN.php
index 7b59af6989..d88f69c38e 100644
--- a/data/ddl/index/TBL_SERVICE_UN.php
+++ b/data/ddl/index/TBL_SERVICE_UN.php
@@ -9,7 +9,6 @@ return [
     'columns' => [
         'SERVICE_ID',
         'TYPE_VOLUME_HORAIRE_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/index/TBL_VALIDATION_ENSEIGNEMENT_UN.php b/data/ddl/index/TBL_VALIDATION_ENSEIGNEMENT_UN.php
index a3c2a8fc1b..9d0a643dcf 100644
--- a/data/ddl/index/TBL_VALIDATION_ENSEIGNEMENT_UN.php
+++ b/data/ddl/index/TBL_VALIDATION_ENSEIGNEMENT_UN.php
@@ -13,7 +13,6 @@ return [
         'SERVICE_ID',
         'VOLUME_HORAIRE_ID',
         'VALIDATION_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/index/TBL_VALIDATION_REFERENTIEL__UN.php b/data/ddl/index/TBL_VALIDATION_REFERENTIEL_UN.php
similarity index 81%
rename from data/ddl/index/TBL_VALIDATION_REFERENTIEL__UN.php
rename to data/ddl/index/TBL_VALIDATION_REFERENTIEL_UN.php
index 17b2f4913f..2aa1784359 100644
--- a/data/ddl/index/TBL_VALIDATION_REFERENTIEL__UN.php
+++ b/data/ddl/index/TBL_VALIDATION_REFERENTIEL_UN.php
@@ -3,7 +3,7 @@
 //@formatter:off
 
 return [
-    'name'    => 'TBL_VALIDATION_REFERENTIEL__UN',
+    'name'    => 'TBL_VALIDATION_REFERENTIEL_UN',
     'unique'  => TRUE,
     'table'   => 'TBL_VALIDATION_REFERENTIEL',
     'columns' => [
@@ -13,7 +13,6 @@ return [
         'SERVICE_REFERENTIEL_ID',
         'VOLUME_HORAIRE_REF_ID',
         'VALIDATION_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/package/OSE_DIVERS/body.sql b/data/ddl/package/OSE_DIVERS/body.sql
index 549d679959..ccf8447248 100644
--- a/data/ddl/package/OSE_DIVERS/body.sql
+++ b/data/ddl/package/OSE_DIVERS/body.sql
@@ -12,8 +12,7 @@ CREATE OR REPLACE PACKAGE BODY "OSE_DIVERS" AS
       FROM tbl
       WHERE tbl_name <> 'formule' -- TROP LONG !!
       ORDER BY ordre
-    )
-    LOOP
+    )LOOP
       UNICAEN_TBL.CALCULER(d.tbl_name);
       dbms_output.put_line('Calcul du tableau de bord "' || d.tbl_name || '" effectué');
       COMMIT;
@@ -22,6 +21,20 @@ CREATE OR REPLACE PACKAGE BODY "OSE_DIVERS" AS
 
 
 
+  PROCEDURE CALCUL_FEUILLE_DE_ROUTE( INTERVENANT_ID NUMERIC ) IS
+  BEGIN
+    FOR d IN (
+      SELECT   tbl_name
+      FROM     tbl
+      WHERE    feuille_de_route = 1
+      ORDER BY ordre
+    ) LOOP
+      UNICAEN_TBL.CALCULER(d.tbl_name,'INTERVENANT_ID',intervenant_id);
+    END LOOP;
+  END;
+
+
+
   FUNCTION GET_OSE_UTILISATEUR_ID RETURN NUMERIC IS
   BEGIN
     IF OSE_DIVERS.OSE_UTILISATEUR_ID IS NULL THEN
@@ -103,20 +116,6 @@ CREATE OR REPLACE PACKAGE BODY "OSE_DIVERS" AS
     RETURN res;
   END;
 
-  FUNCTION implode(i_query VARCHAR2, i_seperator VARCHAR2 DEFAULT ',') RETURN VARCHAR2 AS
-    l_return CLOB:='';
-    l_temp CLOB;
-    TYPE r_cursor is REF CURSOR;
-    rc r_cursor;
-  BEGIN
-    OPEN rc FOR i_query;
-    LOOP
-      FETCH rc INTO L_TEMP;
-      EXIT WHEN RC%NOTFOUND;
-      l_return:=l_return||L_TEMP||i_seperator;
-    END LOOP;
-    RETURN RTRIM(l_return,i_seperator);
-  END;
 
   PROCEDURE intervenant_horodatage_service( INTERVENANT_ID NUMERIC, TYPE_VOLUME_HORAIRE_ID NUMERIC, REFERENTIEL NUMERIC, HISTO_MODIFICATEUR_ID NUMERIC, HISTO_MODIFICATION DATE ) AS
   BEGIN
@@ -259,13 +258,7 @@ CREATE OR REPLACE PACKAGE BODY "OSE_DIVERS" AS
     INSERT INTO SYNC_LOG( id, date_sync, message ) VALUES ( sync_log_id_seq.nextval, systimestamp, msg );
   END;
 
-  FUNCTION FORMATTED_RIB (bic VARCHAR2, iban VARCHAR2) RETURN VARCHAR2 IS
-  BEGIN
-    if bic is null and iban is null then
-      return null;
-    end if;
-    RETURN regexp_replace(bic, '[[:space:]]+', '') || '-' || regexp_replace(iban, '[[:space:]]+', '');
-  END;
+
 
   FUNCTION FORMATTED_ADRESSE(precisions VARCHAR2, lieu_dit VARCHAR2, numero VARCHAR2, numero_compl_id NUMERIC, voirie_id NUMERIC, voie VARCHAR2, code_postal VARCHAR2, commune VARCHAR2, pays_id VARCHAR2 ) RETURN VARCHAR2 IS
     a VARCHAR2(4000) DEFAULT '';
@@ -338,27 +331,4 @@ CREATE OR REPLACE PACKAGE BODY "OSE_DIVERS" AS
     RETURN a;
   END;
 
-
-  PROCEDURE CALCUL_FEUILLE_DE_ROUTE( CONDS VARCHAR2 ) IS
-  BEGIN
-    FOR d IN (
-      SELECT   tbl_name
-      FROM     tbl
-      WHERE    feuille_de_route = 1
-      ORDER BY ordre
-    ) LOOP
-      UNICAEN_TBL.CALCULER(d.tbl_name,CONDS);
-    END LOOP;
-  END;
-
-
-
-  FUNCTION GET_TRIGGER_BODY( TRIGGER_NAME VARCHAR2 ) RETURN VARCHAR2 IS
-    vlong long;
-  BEGIN
-    SELECT trigger_body INTO vlong FROM all_triggers WHERE trigger_name = GET_TRIGGER_BODY.TRIGGER_NAME;
-
-    RETURN substr(vlong, 1, 32767);
-  END;
-
 END OSE_DIVERS;
\ No newline at end of file
diff --git a/data/ddl/package/OSE_DIVERS/definition.sql b/data/ddl/package/OSE_DIVERS/definition.sql
index f089b34b7c..6249cd087d 100644
--- a/data/ddl/package/OSE_DIVERS/definition.sql
+++ b/data/ddl/package/OSE_DIVERS/definition.sql
@@ -1,14 +1,13 @@
 CREATE OR REPLACE PACKAGE "OSE_DIVERS" AS
 
   PROCEDURE CALCULER_TABLEAUX_BORD;
+  PROCEDURE CALCUL_FEUILLE_DE_ROUTE( INTERVENANT_ID NUMERIC );
 
   FUNCTION GET_OSE_UTILISATEUR_ID RETURN NUMERIC;
   FUNCTION GET_OSE_SOURCE_ID RETURN NUMERIC;
 
   FUNCTION INTERVENANT_HAS_PRIVILEGE( intervenant_id NUMERIC, privilege_name VARCHAR2 ) RETURN NUMERIC;
 
-  FUNCTION implode(i_query VARCHAR2, i_seperator VARCHAR2 DEFAULT ',') RETURN VARCHAR2;
-
   PROCEDURE intervenant_horodatage_service( INTERVENANT_ID NUMERIC, TYPE_VOLUME_HORAIRE_ID NUMERIC, REFERENTIEL NUMERIC, HISTO_MODIFICATEUR_ID NUMERIC, HISTO_MODIFICATION DATE );
 
   FUNCTION NIVEAU_FORMATION_ID_CALC( gtf_id NUMERIC, gtf_pertinence_niveau NUMERIC, niveau NUMERIC DEFAULT NULL ) RETURN NUMERIC;
@@ -27,8 +26,6 @@ CREATE OR REPLACE PACKAGE "OSE_DIVERS" AS
 
   PROCEDURE SYNC_LOG( msg VARCHAR2 );
 
-  FUNCTION FORMATTED_RIB (bic VARCHAR2, iban VARCHAR2) RETURN VARCHAR2;
-
   FUNCTION FORMATTED_ADRESSE(
     precisions VARCHAR2,
     lieu_dit VARCHAR2,
@@ -41,7 +38,4 @@ CREATE OR REPLACE PACKAGE "OSE_DIVERS" AS
     pays_id VARCHAR2
   ) RETURN VARCHAR2;
 
-  PROCEDURE CALCUL_FEUILLE_DE_ROUTE( CONDS VARCHAR2 );
-
-  FUNCTION GET_TRIGGER_BODY( TRIGGER_NAME VARCHAR2 ) RETURN VARCHAR2;
 END OSE_DIVERS;
\ No newline at end of file
diff --git a/data/ddl/package/OSE_EVENT/body.sql b/data/ddl/package/OSE_EVENT/body.sql
index d91969d323..c3f8c12e7c 100644
--- a/data/ddl/package/OSE_EVENT/body.sql
+++ b/data/ddl/package/OSE_EVENT/body.sql
@@ -1,9 +1,8 @@
 CREATE OR REPLACE PACKAGE BODY "OSE_EVENT" AS
 
   PROCEDURE ON_AFTER_FORMULE_CALC( INTERVENANT_ID NUMERIC ) IS
-    p unicaen_tbl.t_params;
   BEGIN
-    p := UNICAEN_TBL.make_params('INTERVENANT_ID', ON_AFTER_FORMULE_CALC.intervenant_id);
+    RETURN;
   END;
 
 END OSE_EVENT;
\ No newline at end of file
diff --git a/data/ddl/package/OSE_FORMULE/body.sql b/data/ddl/package/OSE_FORMULE/body.sql
index c403227111..c17e5c1ee5 100644
--- a/data/ddl/package/OSE_FORMULE/body.sql
+++ b/data/ddl/package/OSE_FORMULE/body.sql
@@ -833,13 +833,13 @@ CREATE OR REPLACE PACKAGE BODY "OSE_FORMULE" AS
 
 
 
-  PROCEDURE CALCULER_TBL( PARAMS UNICAEN_TBL.T_PARAMS ) IS
+  PROCEDURE CALCULER_TBL(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL) IS
     intervenant_id NUMERIC;
     TYPE r_cursor IS REF CURSOR;
     diff_cur r_cursor;
   BEGIN
-    OPEN diff_cur FOR 'WITH interv AS (SELECT id intervenant_id, intervenant.* FROM intervenant)
-    SELECT intervenant_id FROM interv WHERE ' || unicaen_tbl.PARAMS_TO_CONDS( params );
+    OPEN diff_cur FOR 'SELECT id FROM intervenant WHERE '
+      || unicaen_tbl.MAKE_WHERE( CASE param WHEN 'INTERVENANT_ID' THEN 'ID' ELSE param END, value );
     LOOP
       FETCH diff_cur INTO intervenant_id; EXIT WHEN diff_cur%NOTFOUND;
       BEGIN
diff --git a/data/ddl/package/OSE_FORMULE/definition.sql b/data/ddl/package/OSE_FORMULE/definition.sql
index 2184c43a69..5dce603ad6 100644
--- a/data/ddl/package/OSE_FORMULE/definition.sql
+++ b/data/ddl/package/OSE_FORMULE/definition.sql
@@ -91,7 +91,7 @@ CREATE OR REPLACE PACKAGE "OSE_FORMULE" AS
 
   PROCEDURE CALCULER( INTERVENANT_ID NUMERIC );
   PROCEDURE CALCULER_TOUT( ANNEE_ID NUMERIC DEFAULT NULL );        -- mise à jour de TOUTES les données ! ! ! !
-  PROCEDURE CALCULER_TBL( PARAMS UNICAEN_TBL.T_PARAMS );
+  PROCEDURE CALCULER_TBL(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL);
 
   PROCEDURE TEST( INTERVENANT_TEST_ID NUMERIC );
   PROCEDURE TEST_TOUT;
diff --git a/data/ddl/package/OSE_WORKFLOW/body.sql b/data/ddl/package/OSE_WORKFLOW/body.sql
index d05f556c42..6aae7612c9 100644
--- a/data/ddl/package/OSE_WORKFLOW/body.sql
+++ b/data/ddl/package/OSE_WORKFLOW/body.sql
@@ -329,7 +329,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
 
   PROCEDURE CALCULER( INTERVENANT_ID NUMERIC ) IS
   BEGIN
-    CALCULER_TBL(unicaen_tbl.make_params('intervenant_id', INTERVENANT_ID));
+    CALCULER_TBL('INTERVENANT_ID', INTERVENANT_ID);
   END;
 
 
@@ -337,17 +337,17 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
   PROCEDURE CALCULER_TOUT( ANNEE_ID NUMERIC DEFAULT NULL ) IS
   BEGIN
     IF ANNEE_ID IS NULL THEN
-      CALCULER_TBL(unicaen_tbl.make_params());
+      CALCULER_TBL();
     ELSE
-      CALCULER_TBL(unicaen_tbl.make_params('annee_id', ANNEE_ID));
+      CALCULER_TBL('ANNEE_ID', ANNEE_ID);
     END IF;
   END;
 
 
 
 
-  FUNCTION MAKE_V_TBL_WORKFLOW(PARAMS UNICAEN_TBL.T_PARAMS) RETURN CLOB IS
-    p CLOB;
+  FUNCTION MAKE_V_TBL_WORKFLOW(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL) RETURN CLOB IS
+    p VARCHAR2(30);
     dems CLOB;
     intervenant CLOB;
     dossier CLOB;
@@ -360,8 +360,6 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
     cloture CLOB;
     contrat CLOB;
   BEGIN
-    p := unicaen_tbl.params_to_conds(params);
-
     dems := '
         WHEN e.code = ''DONNEES_PERSO_SAISIE'' OR e.code = ''DONNEES_PERSO_VALIDATION'' THEN
           si.peut_saisir_dossier
@@ -410,18 +408,13 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
 
     intervenant := '
       SELECT
-        *
+        id                  intervenant_id,
+        annee_id            annee_id,
+        statut_id           statut_intervenant_id
       FROM
-        (
-        SELECT
-          id                  intervenant_id,
-          annee_id            annee_id,
-          statut_id           statut_intervenant_id
-        FROM
-          intervenant
-        )
+        intervenant
       WHERE
-        ' || p || '
+        ' || unicaen_tbl.MAKE_WHERE(CASE param WHEN 'INTERVENANT_ID' THEN 'ID' ELSE param END, value) || '
     ';
 
 
@@ -447,7 +440,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
             UNION SELECT ''DONNEES_PERSO_VALIDATION'' code FROM dual
           ) e ON 1=1
         WHERE
-          ' || p || '
+          ' || unicaen_tbl.MAKE_WHERE(param, value) || '
           AND d.peut_saisir_dossier = 1
     ';
 
@@ -474,7 +467,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
             UNION SELECT ''SERVICE_SAISIE_REALISE''         code FROM dual
           ) e ON 1=1
         WHERE
-          ' || p || '
+          ' || unicaen_tbl.MAKE_WHERE(param, value) || '
           AND (tss.peut_saisir_service = 1 OR tss.peut_saisir_referentiel = 1)
     ';
 
@@ -494,7 +487,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
           tbl_validation_enseignement tve
           JOIN type_volume_horaire tvh ON tvh.id = tve.type_volume_horaire_id
         WHERE
-          ' || p || '
+          ' || unicaen_tbl.MAKE_WHERE(param, value) || '
           AND tve.auto_validation = 0
         GROUP BY
           tve.intervenant_id,
@@ -518,7 +511,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
           tbl_validation_referentiel tvr
           JOIN type_volume_horaire tvh ON tvh.id = tvr.type_volume_horaire_id
         WHERE
-          ' || p || '
+          ' || unicaen_tbl.MAKE_WHERE(param, value) || '
           AND tvr.auto_validation = 0
         GROUP BY
           tvr.intervenant_id,
@@ -551,7 +544,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
           FROM
             tbl_piece_jointe
           WHERE
-            ' || p || '
+            ' || unicaen_tbl.MAKE_WHERE(param, value) || '
             AND demandee > 0
             AND obligatoire = 1
           GROUP BY
@@ -580,7 +573,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
           tbl_agrement a
           JOIN type_agrement ta ON ta.id = a.type_agrement_id
         WHERE
-          ' || p || '
+          ' || unicaen_tbl.MAKE_WHERE(param, value) || '
     ';
 
 
@@ -595,7 +588,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
         FROM
           tbl_cloture_realise c
         WHERE
-          ' || p || '
+          ' || unicaen_tbl.MAKE_WHERE(param, value) || '
           AND c.peut_cloturer_saisie = 1
     ';
 
@@ -625,7 +618,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
             FROM
               tbl_paiement
             WHERE
-              ' || p || '
+              ' || unicaen_tbl.MAKE_WHERE(param, value) || '
             GROUP BY
               annee_id,
               intervenant_id,
@@ -656,7 +649,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
           tbl_contrat c
           JOIN parametre p on p.nom = ''contrat_regle_franchissement''
         WHERE
-          ' || p || '
+          ' || unicaen_tbl.MAKE_WHERE(param, value) || '
           AND peut_avoir_contrat = 1
           AND nbvh > 0
     ';
@@ -698,7 +691,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
 
 
 
-  PROCEDURE CALCULER_TBL( PARAMS UNICAEN_TBL.T_PARAMS ) IS
+  PROCEDURE CALCULER_TBL( param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL ) IS
     TYPE t_v_tbl_workflow IS RECORD(
       annee_id              NUMERIC,
       intervenant_id        NUMERIC,
@@ -737,7 +730,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
     u BOOLEAN;
   BEGIN
     INITIALISATION;
-    OPEN c FOR 'SELECT * FROM tbl_workflow WHERE ' || unicaen_tbl.PARAMS_TO_CONDS( params );
+    OPEN c FOR 'SELECT * FROM tbl_workflow WHERE ' || unicaen_tbl.MAKE_WHERE(param, value);
     LOOP
       FETCH c INTO t; EXIT WHEN c%NOTFOUND;
       IF NOT intervenants.exists(t.intervenant_id) THEN
@@ -764,7 +757,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
     END LOOP;
     CLOSE c;
 
-    OPEN c FOR MAKE_V_TBL_WORKFLOW(params);
+    OPEN c FOR MAKE_V_TBL_WORKFLOW(param, value);
     LOOP
       FETCH c INTO v; EXIT WHEN c%NOTFOUND;
 
@@ -817,7 +810,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS
     FROM
       wf_dep_bloquante wdb
       JOIN tbl_workflow v ON v.id= wdb.tbl_workflow_id
-    WHERE ' || unicaen_tbl.PARAMS_TO_CONDS( params, 'v' );
+    WHERE ' || unicaen_tbl.MAKE_WHERE( param, value, 'v' );
     LOOP
       FETCH c INTO wdb; EXIT WHEN c%NOTFOUND;
       we_ec := MAKE_FR_ETAPE_INDEX( wdb.etape_id, wdb.structure_id );
diff --git a/data/ddl/package/OSE_WORKFLOW/definition.sql b/data/ddl/package/OSE_WORKFLOW/definition.sql
index fb69957f81..ac9d22d4df 100644
--- a/data/ddl/package/OSE_WORKFLOW/definition.sql
+++ b/data/ddl/package/OSE_WORKFLOW/definition.sql
@@ -4,8 +4,8 @@ CREATE OR REPLACE PACKAGE "OSE_WORKFLOW" AS
 
   PROCEDURE CALCULER( INTERVENANT_ID NUMERIC );
   PROCEDURE CALCULER_TOUT( ANNEE_ID NUMERIC DEFAULT NULL );
-  PROCEDURE CALCULER_TBL( PARAMS UNICAEN_TBL.T_PARAMS );
+  PROCEDURE CALCULER_TBL(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL);
 
   PROCEDURE DEP_CHECK( etape_suiv_id NUMERIC, etape_prec_id NUMERIC );
-  FUNCTION MAKE_V_TBL_WORKFLOW(PARAMS UNICAEN_TBL.T_PARAMS) RETURN CLOB;
+  FUNCTION MAKE_V_TBL_WORKFLOW(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL) RETURN CLOB;
 END OSE_WORKFLOW;
\ No newline at end of file
diff --git a/data/ddl/package/UNICAEN_TBL/body.sql b/data/ddl/package/UNICAEN_TBL/body.sql
index 74958cd5c0..1f5066adeb 100644
--- a/data/ddl/package/UNICAEN_TBL/body.sql
+++ b/data/ddl/package/UNICAEN_TBL/body.sql
@@ -1,259 +1,64 @@
 CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
 
-  FUNCTION MAKE_PARAMS(
-    c1 VARCHAR2 DEFAULT NULL, v1 VARCHAR2 DEFAULT NULL,
-    c2 VARCHAR2 DEFAULT NULL, v2 VARCHAR2 DEFAULT NULL,
-    c3 VARCHAR2 DEFAULT NULL, v3 VARCHAR2 DEFAULT NULL,
-    c4 VARCHAR2 DEFAULT NULL, v4 VARCHAR2 DEFAULT NULL,
-    c5 VARCHAR2 DEFAULT NULL, v5 VARCHAR2 DEFAULT NULL,
-    sqlcond CLOB DEFAULT NULL
-  ) RETURN t_params IS
-    params t_params;
-  BEGIN
-    IF c1 IS NOT NULL THEN
-      params.c1 := c1;
-      params.v1 := v1;
-    END IF;
-    IF c2 IS NOT NULL THEN
-      params.c2 := c2;
-      params.v2 := v2;
-    END IF;
-    IF c3 IS NOT NULL THEN
-      params.c3 := c3;
-      params.v3 := v3;
-    END IF;
-    IF c4 IS NOT NULL THEN
-      params.c4 := c4;
-      params.v4 := v4;
-    END IF;
-    IF c5 IS NOT NULL THEN
-      params.c5 := c5;
-      params.v5 := v5;
-    END IF;
-    params.sqlcond := sqlcond;
-
-    RETURN params;
-  END;
-
-
-
-  PROCEDURE DEMANDE_CALCUL( TBL_NAME VARCHAR2 ) IS
-    p t_params;
-  BEGIN
-    DEMANDE_CALCUL( tbl_name, p );
-  END;
-
-
-
-  PROCEDURE DEMANDE_CALCUL( TBL_NAME VARCHAR2, CONDS CLOB ) IS
-    p t_params;
-  BEGIN
-    p.sqlcond := CONDS;
-    DEMANDE_CALCUL( tbl_name, p );
-  END;
-
-
-
-  PROCEDURE DEMANDE_CALCUL( TBL_NAME VARCHAR2, PARAMS t_params ) IS
+  PROCEDURE DEMANDE_CALCUL( TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2 ) IS
   BEGIN
     INSERT INTO tbl_dems (
       ID,
       TBL_NAME,
-      c1, v1,
-      c2, v2,
-      c3, v3,
-      c4, v4,
-      c5, v5,
-      sqlcond
+      PARAM, VALUE
     ) VALUES (
       TBL_DEMS_ID_SEQ.NEXTVAL,
       TBL_NAME,
-      PARAMS.c1, PARAMS.v1,
-      PARAMS.c2, PARAMS.v2,
-      PARAMS.c3, PARAMS.v3,
-      PARAMS.c4, PARAMS.v4,
-      PARAMS.c5, PARAMS.v5,
-      PARAMS.sqlcond
+      PARAM, VALUE
     );
   END;
 
 
 
-  FUNCTION PARAMS_FROM_DEMS( TBL_NAME VARCHAR2 ) RETURN t_params IS
-    res t_params;
-    conds CLOB := '';
-    cond CLOB;
+  FUNCTION MAKE_WHERE(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL, alias VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
+    res VARCHAR2(120) DEFAULT '';
   BEGIN
-    FOR d IN (
-      SELECT *
-      FROM   tbl_dems
-      WHERE  tbl_name = PARAMS_FROM_DEMS.TBL_NAME
-    )
-    LOOP
-
-      cond := '';
-
-      IF d.c1 IS NOT NULL THEN
-        IF cond IS NOT NULL THEN cond := cond || ' AND '; END IF;
-        IF d.v1 IS NULL THEN
-          cond := cond || d.c1 || ' IS NULL';
-        ELSE
-          cond := cond || d.c1 || '=' || d.v1;
-        END IF;
-      END IF;
-
-      IF d.c2 IS NOT NULL THEN
-        IF cond IS NOT NULL THEN cond := cond || ' AND '; END IF;
-        IF d.v2 IS NULL THEN
-          cond := cond || d.c2 || ' IS NULL';
-        ELSE
-          cond := cond || d.c2 || '=' || d.v2;
-        END IF;
-      END IF;
-
-      IF d.c3 IS NOT NULL THEN
-        IF cond IS NOT NULL THEN cond := cond || ' AND '; END IF;
-        IF d.v3 IS NULL THEN
-          cond := cond || d.c3 || ' IS NULL';
-        ELSE
-          cond := cond || d.c3 || '=' || d.v3;
-        END IF;
-      END IF;
-
-      IF d.c4 IS NOT NULL THEN
-        IF cond IS NOT NULL THEN cond := cond || ' AND '; END IF;
-        IF d.v4 IS NULL THEN
-          cond := cond || d.c4 || ' IS NULL';
-        ELSE
-          cond := cond || d.c4 || '=' || d.v4;
-        END IF;
-      END IF;
-
-      IF d.c5 IS NOT NULL THEN
-        IF cond IS NOT NULL THEN cond := cond || ' AND '; END IF;
-        IF d.v5 IS NULL THEN
-          cond := cond || d.c5 || ' IS NULL';
-        ELSE
-          cond := cond || d.c5 || '=' || d.v5;
-        END IF;
-      END IF;
-
-      IF d.sqlcond IS NOT NULL THEN
-        IF cond IS NOT NULL THEN cond := cond || ' AND '; END IF;
-        cond := cond || '(' || d.sqlcond || ')';
-      END IF;
-
-      IF conds IS NOT NULL THEN
-        conds := conds || ' OR ';
-      END IF;
-      conds := conds || '(' || cond || ')';
-    END LOOP;
-
-    res.sqlcond := conds;
-    DELETE FROM tbl_dems WHERE tbl_name = PARAMS_FROM_DEMS.TBL_NAME;
-    RETURN res;
-  END;
-
-
-
-  FUNCTION PARAMS_TO_CONDS ( PARAMS UNICAEN_TBL.T_PARAMS, alias VARCHAR2 DEFAULT NULL ) RETURN CLOB IS
-    cond CLOB;
-    a VARCHAR2(30);
-  BEGIN
-    IF alias IS NULL THEN
-      a := '';
-    ELSE
-      a := alias || '.';
-    END IF;
-    IF params.c1 IS NOT NULL THEN
-      IF params.v1 IS NULL THEN
-        cond := cond || a || params.c1 || ' IS NULL';
-      ELSE
-        cond := cond || a || params.c1 || '=' || params.v1;
-      END IF;
-    END IF;
-
-    IF params.c2 IS NOT NULL THEN
-      IF cond IS NOT NULL THEN cond := cond || ' AND '; END IF;
-      IF params.v2 IS NULL THEN
-        cond := cond || a || params.c2 || ' IS NULL';
-      ELSE
-        cond := cond || a || params.c2 || '=' || params.v2;
-      END IF;
-    END IF;
-
-    IF params.c3 IS NOT NULL THEN
-      IF cond IS NOT NULL THEN cond := cond || ' AND '; END IF;
-      IF params.v3 IS NULL THEN
-        cond := cond || a || params.c3 || ' IS NULL';
-      ELSE
-        cond := cond || a || params.c3 || '=' || params.v3;
-      END IF;
-    END IF;
-
-    IF params.c4 IS NOT NULL THEN
-      IF cond IS NOT NULL THEN cond := cond || ' AND '; END IF;
-      IF params.v4 IS NULL THEN
-        cond := cond || a || params.c4 || ' IS NULL';
-      ELSE
-        cond := cond || a || params.c4 || '=' || params.v4;
-      END IF;
+    IF param IS NULL THEN
+      RETURN '1=1';
     END IF;
 
-    IF params.c5 IS NOT NULL THEN
-      IF cond IS NOT NULL THEN cond := cond || ' AND '; END IF;
-      IF params.v5 IS NULL THEN
-        cond := cond || a || params.c5 || ' IS NULL';
-      ELSE
-        cond := cond || a || params.c5 || '=' || params.v5;
-      END IF;
+    IF alias IS NOT NULL THEN
+      res := alias || '.';
     END IF;
 
-    IF params.sqlcond IS NOT NULL THEN
-      IF cond IS NOT NULL THEN cond := cond || ' AND '; END IF;
-      cond := cond || '(' || params.sqlcond || ')';
+    IF value IS NULL THEN
+      RETURN res || param || ' IS NULL';
     END IF;
 
-    IF cond IS NULL THEN cond := '1=1'; END IF;
-
-    RETURN cond;
+    RETURN res || param || ' = ' || value;
   END;
 
 
 
   PROCEDURE CALCULER( TBL_NAME VARCHAR2 ) IS
-    p t_params;
   BEGIN
     ANNULER_DEMANDES( TBL_NAME );
-    CALCULER(TBL_NAME, p);
+    CALCULER(TBL_NAME, null, null);
   END;
 
 
 
-  PROCEDURE CALCULER( TBL_NAME VARCHAR2, CONDS CLOB ) IS
-    p t_params;
-  BEGIN
-    p.sqlcond := CONDS;
-    CALCULER(TBL_NAME, p);
-  END;
-
-
-
-  PROCEDURE CALCULER( TBL_NAME VARCHAR2, PARAMS t_params ) IS
+  PROCEDURE CALCULER( TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2 ) IS
     calcul_proc varchar2(30);
   BEGIN
     IF NOT UNICAEN_TBL.ACTIV_CALCULS THEN RETURN; END IF;
 
     SELECT custom_calcul_proc INTO calcul_proc FROM tbl WHERE tbl_name = CALCULER.TBL_NAME;
 
-    UNICAEN_TBL.CALCUL_PROC_PARAMS := PARAMS;
+    UNICAEN_TBL.CALCUL_PROC_PARAM := PARAM;
+    UNICAEN_TBL.CALCUL_PROC_VALUE := VALUE;
     IF calcul_proc IS NOT NULL THEN
       EXECUTE IMMEDIATE
-        'BEGIN ' || calcul_proc || '(UNICAEN_TBL.CALCUL_PROC_PARAMS); END;'
+        'BEGIN ' || calcul_proc || '(UNICAEN_TBL.CALCUL_PROC_PARAM,UNICAEN_TBL.CALCUL_PROC_VALUE); END;'
       ;
     ELSE
       EXECUTE IMMEDIATE
-        'BEGIN UNICAEN_TBL.C_' || TBL_NAME || '(UNICAEN_TBL.CALCUL_PROC_PARAMS); END;'
+        'BEGIN UNICAEN_TBL.C_' || TBL_NAME || '(UNICAEN_TBL.CALCUL_PROC_PARAM,UNICAEN_TBL.CALCUL_PROC_VALUE); END;'
       ;
     END IF;
 
@@ -286,13 +91,11 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
 
 
   PROCEDURE CALCULER_DEMANDES IS
-    dems t_params;
   BEGIN
     FOR d IN (
-      SELECT DISTINCT tbl_name FROM tbl_dems
+      SELECT DISTINCT tbl_name, param, value FROM tbl_dems
     ) LOOP
-      dems := PARAMS_FROM_DEMS( d.tbl_name );
-      calculer( d.tbl_name, dems );
+      calculer( d.tbl_name, d.param, d.value );
     END LOOP;
 
     IF HAS_DEMANDES THEN -- pour les boucles !!
@@ -304,1870 +107,6 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
 
   -- AUTOMATIC GENERATION --
 
-  PROCEDURE C_AGREMENT( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_AGREMENT SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_AGREMENT t
-    USING (
-
-      SELECT
-        tv.*
-      FROM
-        (WITH i_s AS (
-          SELECT
-            fr.intervenant_id,
-            ep.structure_id
-          FROM
-            formule_resultat fr
-            JOIN type_volume_horaire  tvh ON tvh.code = ''PREVU'' AND tvh.id = fr.type_volume_horaire_id
-            JOIN etat_volume_horaire  evh ON evh.code = ''valide'' AND evh.id = fr.etat_volume_horaire_id
-
-            JOIN formule_resultat_service frs ON frs.formule_resultat_id = fr.id
-            JOIN service s ON s.id = frs.service_id
-            JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id
-          WHERE
-            frs.total > 0
-        ),
-        avi AS (
-            SELECT
-                i.code                code_intervenant,
-                i.annee_id            annee_id,
-                a.type_agrement_id    type_agrement,
-                a.id             agrement_id,
-                tas.duree_vie         duree_vie,
-                i.annee_id+duree_vie date_validite
-            FROM intervenant i
-            JOIN type_agrement_statut tas ON tas.statut_intervenant_id = i.statut_id
-            JOIN agrement a ON a.intervenant_id = i.id AND tas.type_agrement_id = a.type_agrement_id AND a.histo_destruction IS NULL
-        )
-        SELECT DISTINCT "ANNEE_ID","ANNEE_AGREMENT","TYPE_AGREMENT_ID","INTERVENANT_ID","CODE_INTERVENANT","STRUCTURE_ID","OBLIGATOIRE","AGREMENT_ID","DUREE_VIE","RANK" FROM (
-            SELECT
-              i.annee_id                     annee_id,
-              CASE
-                WHEN NVL(NVL(a.id, avi.agrement_id),0) = 0
-                THEN NULL
-                ELSE NVL(avi.annee_id, i.annee_id) END   annee_agrement,
-              tas.type_agrement_id                       type_agrement_id,
-              i.id                                       intervenant_id,
-              i.code                                     code_intervenant,
-              null                                       structure_id,
-              tas.obligatoire                            obligatoire,
-              NVL(a.id, avi.agrement_id)                 agrement_id,
-              tas.duree_vie                              duree_vie,
-              RANK() OVER(
-                PARTITION BY i.code,i.annee_id ORDER BY
-                CASE
-                WHEN NVL(NVL(a.id, avi.agrement_id),0) = 0
-                THEN NULL
-                ELSE NVL(avi.annee_id, i.annee_id) END DESC
-              ) rank
-            FROM
-              type_agrement                  ta
-              JOIN type_agrement_statut      tas ON tas.type_agrement_id = ta.id
-                                                AND tas.histo_destruction IS NULL
-
-              JOIN intervenant                 i ON i.histo_destruction IS NULL
-                                                AND i.statut_id = tas.statut_intervenant_id
-
-              JOIN                           i_s ON i_s.intervenant_id = i.id
-
-
-              LEFT JOIN agrement               a ON a.type_agrement_id = ta.id
-                                                AND a.intervenant_id = i.id
-                                                AND a.histo_destruction IS NULL
-
-              LEFT JOIN                      avi ON i.code = avi.code_intervenant
-                                                AND tas.type_agrement_id = avi.type_agrement
-                                                AND i.annee_id < avi.date_validite
-                                                AND i.annee_id >= avi.annee_id
-
-            WHERE
-              ta.code = ''CONSEIL_ACADEMIQUE'')
-        WHERE
-          rank = 1
-
-        UNION ALL
-        SELECT DISTINCT "ANNEE_ID","ANNEE_AGREMENT","TYPE_AGREMENT_ID","INTERVENANT_ID","CODE_INTERVENANT","STRUCTURE_ID","OBLIGATOIRE","AGREMENT_ID","DUREE_VIE","RANK" FROM (
-            SELECT
-              i.annee_id                                  annee_id,
-              CASE
-                WHEN NVL(NVL(a.id, avi.agrement_id),0) = 0
-                THEN NULL
-                ELSE NVL(avi.annee_id, i.annee_id) END    annee_agrement,
-              tas.type_agrement_id                        type_agrement_id,
-              i.id                                        intervenant_id,
-              i.code                                      code_intervenant,
-              a.structure_id                            structure_id,
-              tas.obligatoire                             obligatoire,
-              NVL(a.id, avi.agrement_id)                  agrement_id,
-              tas.duree_vie                               duree_vie,
-              RANK() OVER(
-                PARTITION BY i.code,i.annee_id ORDER BY
-                CASE
-                WHEN NVL(NVL(a.id, avi.agrement_id),0) = 0
-                THEN NULL
-                ELSE NVL(avi.annee_id, i.annee_id) END DESC
-              ) rank
-            FROM
-              type_agrement                   ta
-              JOIN type_agrement_statut      tas ON tas.type_agrement_id = ta.id
-                                                AND tas.histo_destruction IS NULL
-
-              JOIN intervenant                 i ON i.histo_destruction IS NULL
-                                                AND i.statut_id = tas.statut_intervenant_id
-
-              JOIN                           i_s ON i_s.intervenant_id = i.id
-
-              LEFT JOIN agrement               a ON a.type_agrement_id = ta.id
-                                                AND a.intervenant_id = i.id
-                                                AND a.histo_destruction IS NULL
-
-              LEFT JOIN                      avi ON i.code = avi.code_intervenant
-                                                AND tas.type_agrement_id = avi.type_agrement
-                                                AND i.annee_id < avi.date_validite
-                                                AND i.annee_id >= avi.annee_id
-
-
-            WHERE
-              ta.code = ''CONSEIL_RESTREINT'')
-        WHERE
-          rank = 1) tv
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            t.TYPE_AGREMENT_ID = v.TYPE_AGREMENT_ID
-        AND t.INTERVENANT_ID   = v.INTERVENANT_ID
-        AND COALESCE(t.STRUCTURE_ID,0) = COALESCE(v.STRUCTURE_ID,0)
-        AND COALESCE(t.ANNEE_AGREMENT,0) = COALESCE(v.ANNEE_AGREMENT,0)
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      ANNEE_ID         = v.ANNEE_ID,
-      OBLIGATOIRE      = v.OBLIGATOIRE,
-      AGREMENT_ID      = v.AGREMENT_ID,
-      CODE_INTERVENANT = v.CODE_INTERVENANT,
-      DUREE_VIE        = v.DUREE_VIE,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      TYPE_AGREMENT_ID,
-      INTERVENANT_ID,
-      STRUCTURE_ID,
-      OBLIGATOIRE,
-      AGREMENT_ID,
-      ANNEE_AGREMENT,
-      CODE_INTERVENANT,
-      DUREE_VIE,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_AGREMENT_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.TYPE_AGREMENT_ID,
-      v.INTERVENANT_ID,
-      v.STRUCTURE_ID,
-      v.OBLIGATOIRE,
-      v.AGREMENT_ID,
-      v.ANNEE_AGREMENT,
-      v.CODE_INTERVENANT,
-      v.DUREE_VIE,
-      0
-
-    );
-
-    DELETE TBL_AGREMENT WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
-
-
-  PROCEDURE C_CHARGENS( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_CHARGENS SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_CHARGENS t
-    USING (
-
-      SELECT
-        tv.*
-      FROM
-        (WITH t AS (
-        SELECT
-          n.annee_id                        annee_id,
-          n.noeud_id                        noeud_id,
-          sn.scenario_id                    scenario_id,
-          sne.type_heures_id                type_heures_id,
-          ti.id                             type_intervention_id,
-
-          n.element_pedagogique_id          element_pedagogique_id,
-          n.element_pedagogique_etape_id    etape_id,
-          sne.etape_id                      etape_ens_id,
-          n.structure_id                    structure_id,
-          n.groupe_type_formation_id        groupe_type_formation_id,
-
-          vhe.heures                        heures,
-          vhe.heures * ti.taux_hetd_service hetd,
-
-          GREATEST(COALESCE(sns.ouverture, 1),1)                                           ouverture,
-          GREATEST(COALESCE(sns.dedoublement, snsetp.dedoublement, csdd.dedoublement,1),1) dedoublement,
-          COALESCE(sns.assiduite,1)                                                        assiduite,
-          sne.effectif*COALESCE(sns.assiduite,1)                                           effectif,
-
-          SUM(sne.effectif*COALESCE(sns.assiduite,1)) OVER (PARTITION BY n.noeud_id, sn.scenario_id, ti.id) t_effectif
-
-        FROM
-                    scenario_noeud_effectif    sne
-               JOIN etape                        e ON e.id = sne.etape_id
-                                                  AND e.histo_destruction IS NULL
-
-               JOIN scenario_noeud              sn ON sn.id = sne.scenario_noeud_id
-                                                  AND sn.histo_destruction IS NULL
-
-               JOIN tbl_noeud                       n ON n.noeud_id = sn.noeud_id
-
-               JOIN volume_horaire_ens         vhe ON vhe.element_pedagogique_id = n.element_pedagogique_id
-                                                  AND vhe.histo_destruction IS NULL
-                                                  AND vhe.heures > 0
-
-               JOIN type_intervention           ti ON ti.id = vhe.type_intervention_id
-
-          LEFT JOIN tbl_noeud                 netp ON netp.etape_id = e.id
-
-          LEFT JOIN scenario_noeud           snetp ON snetp.scenario_id = sn.scenario_id
-                                                  AND snetp.noeud_id = netp.noeud_id
-                                                  AND snetp.histo_destruction IS NULL
-
-          LEFT JOIN scenario_noeud_seuil    snsetp ON snsetp.scenario_noeud_id = snetp.id
-                                                  AND snsetp.type_intervention_id = ti.id
-
-          LEFT JOIN tbl_chargens_seuils_def   csdd ON csdd.annee_id = n.annee_id
-                                                  AND csdd.scenario_id = sn.scenario_id
-                                                  AND csdd.type_intervention_id = ti.id
-                                                  AND csdd.groupe_type_formation_id = n.groupe_type_formation_id
-                                                  AND csdd.structure_id = n.structure_id
-
-          LEFT JOIN scenario_noeud_seuil       sns ON sns.scenario_noeud_id = sn.id
-                                                  AND sns.type_intervention_id = ti.id
-        )
-        SELECT
-          annee_id,
-          noeud_id,
-          scenario_id,
-          type_heures_id,
-          type_intervention_id,
-
-          element_pedagogique_id,
-          etape_id,
-          etape_ens_id,
-          structure_id,
-          groupe_type_formation_id,
-
-          ouverture,
-          dedoublement,
-          assiduite,
-          effectif,
-          heures heures_ens,
-          --t_effectif,
-
-          CASE WHEN t_effectif < ouverture THEN 0 ELSE
-            CEIL( t_effectif / dedoublement ) * effectif / t_effectif
-          END groupes,
-
-          CASE WHEN t_effectif < ouverture THEN 0 ELSE
-            CEIL( t_effectif / dedoublement ) * heures * effectif / t_effectif
-          END heures,
-
-          CASE WHEN t_effectif < ouverture THEN 0 ELSE
-            CEIL( t_effectif / dedoublement ) * hetd * effectif / t_effectif
-          END  hetd
-
-        FROM
-          t) tv
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            t.ANNEE_ID                 = v.ANNEE_ID
-        AND t.NOEUD_ID                 = v.NOEUD_ID
-        AND t.SCENARIO_ID              = v.SCENARIO_ID
-        AND t.TYPE_HEURES_ID           = v.TYPE_HEURES_ID
-        AND t.TYPE_INTERVENTION_ID     = v.TYPE_INTERVENTION_ID
-        AND t.ELEMENT_PEDAGOGIQUE_ID   = v.ELEMENT_PEDAGOGIQUE_ID
-        AND t.ETAPE_ID                 = v.ETAPE_ID
-        AND t.ETAPE_ENS_ID             = v.ETAPE_ENS_ID
-        AND t.STRUCTURE_ID             = v.STRUCTURE_ID
-        AND t.GROUPE_TYPE_FORMATION_ID = v.GROUPE_TYPE_FORMATION_ID
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      OUVERTURE                = v.OUVERTURE,
-      DEDOUBLEMENT             = v.DEDOUBLEMENT,
-      ASSIDUITE                = v.ASSIDUITE,
-      EFFECTIF                 = v.EFFECTIF,
-      HEURES_ENS               = v.HEURES_ENS,
-      GROUPES                  = v.GROUPES,
-      HEURES                   = v.HEURES,
-      HETD                     = v.HETD,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      NOEUD_ID,
-      SCENARIO_ID,
-      TYPE_HEURES_ID,
-      TYPE_INTERVENTION_ID,
-      ELEMENT_PEDAGOGIQUE_ID,
-      ETAPE_ID,
-      ETAPE_ENS_ID,
-      STRUCTURE_ID,
-      GROUPE_TYPE_FORMATION_ID,
-      OUVERTURE,
-      DEDOUBLEMENT,
-      ASSIDUITE,
-      EFFECTIF,
-      HEURES_ENS,
-      GROUPES,
-      HEURES,
-      HETD,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_CHARGENS_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.NOEUD_ID,
-      v.SCENARIO_ID,
-      v.TYPE_HEURES_ID,
-      v.TYPE_INTERVENTION_ID,
-      v.ELEMENT_PEDAGOGIQUE_ID,
-      v.ETAPE_ID,
-      v.ETAPE_ENS_ID,
-      v.STRUCTURE_ID,
-      v.GROUPE_TYPE_FORMATION_ID,
-      v.OUVERTURE,
-      v.DEDOUBLEMENT,
-      v.ASSIDUITE,
-      v.EFFECTIF,
-      v.HEURES_ENS,
-      v.GROUPES,
-      v.HEURES,
-      v.HETD,
-      0
-
-    );
-
-    DELETE TBL_CHARGENS WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
-
-
-  PROCEDURE C_CHARGENS_SEUILS_DEF( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_CHARGENS_SEUILS_DEF SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_CHARGENS_SEUILS_DEF t
-    USING (
-
-      SELECT
-        tv.*
-      FROM
-        (SELECT
-          sta.annee_id,
-          sta.scenario_id,
-          s.structure_id,
-          gtf.groupe_type_formation_id,
-          sta.type_intervention_id,
-          COALESCE(sc1.dedoublement, sc2.dedoublement, sc3.dedoublement, sc4.dedoublement) dedoublement
-        FROM
-          (SELECT DISTINCT scenario_id, type_intervention_id, annee_id FROM seuil_charge WHERE histo_destruction IS NULL) sta
-          JOIN (SELECT DISTINCT structure_id FROM noeud WHERE structure_id IS NOT NULL) s ON 1=1
-          JOIN (SELECT id groupe_type_formation_id FROM groupe_type_formation) gtf ON 1=1
-
-          LEFT JOIN seuil_charge sc1 ON
-            sc1.histo_destruction            IS NULL
-            AND sc1.annee_id                 = sta.annee_id
-            AND sc1.scenario_id              = sta.scenario_id
-            AND sc1.type_intervention_id     = sta.type_intervention_id
-            AND sc1.structure_id             = s.structure_id
-            AND sc1.groupe_type_formation_id = gtf.groupe_type_formation_id
-
-          LEFT JOIN seuil_charge sc2 ON
-            sc2.histo_destruction            IS NULL
-            AND sc2.annee_id                 = sta.annee_id
-            AND sc2.scenario_id              = sta.scenario_id
-            AND sc2.type_intervention_id     = sta.type_intervention_id
-            AND sc2.structure_id             = s.structure_id
-            AND sc2.groupe_type_formation_id IS NULL
-
-          LEFT JOIN seuil_charge sc3 ON
-            sc3.histo_destruction            IS NULL
-            AND sc3.annee_id                 = sta.annee_id
-            AND sc3.scenario_id              = sta.scenario_id
-            AND sc3.type_intervention_id     = sta.type_intervention_id
-            AND sc3.structure_id             IS NULL
-            AND sc3.groupe_type_formation_id = gtf.groupe_type_formation_id
-
-          LEFT JOIN seuil_charge sc4 ON
-            sc4.histo_destruction            IS NULL
-            AND sc4.annee_id                 = sta.annee_id
-            AND sc4.scenario_id              = sta.scenario_id
-            AND sc4.type_intervention_id     = sta.type_intervention_id
-            AND sc4.structure_id             IS NULL
-            AND sc4.groupe_type_formation_id IS NULL
-        WHERE
-          COALESCE(sc1.dedoublement, sc2.dedoublement, sc3.dedoublement, sc4.dedoublement, 1) <> 1) tv
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            t.ANNEE_ID                 = v.ANNEE_ID
-        AND t.SCENARIO_ID              = v.SCENARIO_ID
-        AND t.STRUCTURE_ID             = v.STRUCTURE_ID
-        AND t.GROUPE_TYPE_FORMATION_ID = v.GROUPE_TYPE_FORMATION_ID
-        AND t.TYPE_INTERVENTION_ID     = v.TYPE_INTERVENTION_ID
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      DEDOUBLEMENT             = v.DEDOUBLEMENT,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      SCENARIO_ID,
-      STRUCTURE_ID,
-      GROUPE_TYPE_FORMATION_ID,
-      TYPE_INTERVENTION_ID,
-      DEDOUBLEMENT,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_CHARGENS_SEUILS_DEF_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.SCENARIO_ID,
-      v.STRUCTURE_ID,
-      v.GROUPE_TYPE_FORMATION_ID,
-      v.TYPE_INTERVENTION_ID,
-      v.DEDOUBLEMENT,
-      0
-
-    );
-
-    DELETE TBL_CHARGENS_SEUILS_DEF WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
-
-
-  PROCEDURE C_CLOTURE_REALISE( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_CLOTURE_REALISE SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_CLOTURE_REALISE t
-    USING (
-
-      SELECT
-        tv.*
-      FROM
-        (WITH t AS (
-          SELECT
-            i.annee_id              annee_id,
-            i.id                    intervenant_id,
-            si.peut_cloturer_saisie peut_cloturer_saisie,
-            CASE WHEN v.id IS NULL THEN 0 ELSE 1 END cloture
-          FROM
-                      intervenant         i
-                 JOIN statut_intervenant si ON si.id = i.statut_id
-                 JOIN type_validation    tv ON tv.code = ''CLOTURE_REALISE''
-
-            LEFT JOIN validation          v ON v.intervenant_id = i.id
-                                           AND v.type_validation_id = tv.id
-                                           AND v.histo_destruction IS NULL
-
-          WHERE
-            i.histo_destruction IS NULL
-        )
-        SELECT
-          annee_id,
-          intervenant_id,
-          peut_cloturer_saisie,
-          CASE WHEN sum(cloture) = 0 THEN 0 ELSE 1 END cloture
-        FROM
-          t
-        GROUP BY
-          annee_id,
-          intervenant_id,
-          peut_cloturer_saisie) tv
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            t.INTERVENANT_ID = v.INTERVENANT_ID
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      ANNEE_ID             = v.ANNEE_ID,
-      PEUT_CLOTURER_SAISIE = v.PEUT_CLOTURER_SAISIE,
-      CLOTURE              = v.CLOTURE,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      INTERVENANT_ID,
-      PEUT_CLOTURER_SAISIE,
-      CLOTURE,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_CLOTURE_REALISE_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.INTERVENANT_ID,
-      v.PEUT_CLOTURER_SAISIE,
-      v.CLOTURE,
-      0
-
-    );
-
-    DELETE TBL_CLOTURE_REALISE WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
-
-
-  PROCEDURE C_CONTRAT( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_CONTRAT SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_CONTRAT t
-    USING (
-
-      SELECT
-        tv.*
-      FROM
-        (WITH t AS (
-          SELECT
-            i.annee_id                                                                annee_id,
-            i.id                                                                      intervenant_id,
-            si.peut_avoir_contrat                                                     peut_avoir_contrat,
-            NVL(ep.structure_id, i.structure_id)                                      structure_id,
-            CASE WHEN evh.code IN (''contrat-edite'',''contrat-signe'') THEN 1 ELSE 0 END edite,
-            CASE WHEN evh.code IN (''contrat-signe'')                 THEN 1 ELSE 0 END signe
-          FROM
-                      intervenant                 i
-
-                 JOIN statut_intervenant         si ON si.id = i.statut_id
-
-                 JOIN service                     s ON s.intervenant_id = i.id
-                                                   AND s.histo_destruction IS NULL
-
-                 JOIN type_volume_horaire       tvh ON tvh.code = ''PREVU''
-
-                 JOIN volume_horaire             vh ON vh.service_id = s.id
-                                                   AND vh.histo_destruction IS NULL
-                                                   AND vh.heures <> 0
-                                                   AND vh.type_volume_horaire_id = tvh.id
-                                                   AND vh.motif_non_paiement_id IS NULL
-
-                 JOIN v_volume_horaire_etat     vhe ON vhe.volume_horaire_id = vh.id
-
-                 JOIN etat_volume_horaire       evh ON evh.id = vhe.etat_volume_horaire_id
-                                                   AND evh.code IN (''valide'', ''contrat-edite'', ''contrat-signe'')
-
-                 JOIN element_pedagogique        ep ON ep.id = s.element_pedagogique_id
-
-          WHERE
-            i.histo_destruction IS NULL
-            AND NOT (si.peut_avoir_contrat = 0 AND evh.code = ''valide'')
-
-          UNION ALL
-
-          SELECT
-            i.annee_id                                                                annee_id,
-            i.id                                                                      intervenant_id,
-            si.peut_avoir_contrat                                                     peut_avoir_contrat,
-            s.structure_id                                                            structure_id,
-            CASE WHEN evh.code IN (''contrat-edite'',''contrat-signe'') THEN 1 ELSE 0 END edite,
-            CASE WHEN evh.code IN (''contrat-signe'')                 THEN 1 ELSE 0 END signe
-          FROM
-                      intervenant                 i
-
-                 JOIN statut_intervenant         si ON si.id = i.statut_id
-
-                 JOIN service_referentiel         s ON s.intervenant_id = i.id
-                                                   AND s.histo_destruction IS NULL
-
-                 JOIN type_volume_horaire       tvh ON tvh.code = ''PREVU''
-
-                 JOIN volume_horaire_ref         vh ON vh.service_referentiel_id = s.id
-                                                   AND vh.histo_destruction IS NULL
-                                                   AND vh.heures <> 0
-                                                   AND vh.type_volume_horaire_id = tvh.id
-
-                 JOIN v_volume_horaire_ref_etat vhe ON vhe.volume_horaire_ref_id = vh.id
-
-                 JOIN etat_volume_horaire       evh ON evh.id = vhe.etat_volume_horaire_id
-                                                   AND evh.code IN (''valide'', ''contrat-edite'', ''contrat-signe'')
-
-          WHERE
-            i.histo_destruction IS NULL
-            AND NOT (si.peut_avoir_contrat = 0 AND evh.code = ''valide'')
-        )
-        SELECT
-          annee_id,
-          intervenant_id,
-          peut_avoir_contrat,
-          structure_id,
-          count(*) as nbvh,
-          sum(edite) as edite,
-          sum(signe) as signe
-        FROM
-          t
-        GROUP BY
-          annee_id,
-          intervenant_id,
-          peut_avoir_contrat,
-          structure_id) tv
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            t.INTERVENANT_ID = v.INTERVENANT_ID
-        AND COALESCE(t.STRUCTURE_ID,0) = COALESCE(v.STRUCTURE_ID,0)
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      ANNEE_ID           = v.ANNEE_ID,
-      PEUT_AVOIR_CONTRAT = v.PEUT_AVOIR_CONTRAT,
-      NBVH               = v.NBVH,
-      EDITE              = v.EDITE,
-      SIGNE              = v.SIGNE,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      INTERVENANT_ID,
-      PEUT_AVOIR_CONTRAT,
-      STRUCTURE_ID,
-      NBVH,
-      EDITE,
-      SIGNE,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_CONTRAT_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.INTERVENANT_ID,
-      v.PEUT_AVOIR_CONTRAT,
-      v.STRUCTURE_ID,
-      v.NBVH,
-      v.EDITE,
-      v.SIGNE,
-      0
-
-    );
-
-    DELETE TBL_CONTRAT WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
-
-
-  PROCEDURE C_DMEP_LIQUIDATION( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_DMEP_LIQUIDATION SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_DMEP_LIQUIDATION t
-    USING (
-
-      SELECT
-        tv.*
-      FROM
-        (SELECT
-          annee_id,
-          type_ressource_id,
-          structure_id,
-          SUM(heures) heures
-        FROM
-        (
-          SELECT
-            i.annee_id,
-            cc.type_ressource_id,
-            COALESCE( ep.structure_id, i.structure_id ) structure_id,
-            mep.heures
-          FROM
-                      mise_en_paiement         mep
-                 JOIN centre_cout               cc ON cc.id = mep.centre_cout_id
-                 JOIN formule_resultat_service frs ON frs.id = mep.formule_res_service_id
-                 JOIN service                    s ON s.id = frs.service_id
-                 JOIN intervenant                i ON i.id = s.intervenant_id
-            LEFT JOIN element_pedagogique       ep ON ep.id = s.element_pedagogique_id
-          WHERE
-            mep.histo_destruction IS NULL
-
-          UNION ALL
-
-          SELECT
-            i.annee_id,
-            cc.type_ressource_id,
-            sr.structure_id structure_id,
-            heures
-          FROM
-                      mise_en_paiement              mep
-                 JOIN centre_cout                    cc ON cc.id = mep.centre_cout_id
-                 JOIN formule_resultat_service_ref frsr ON frsr.id = mep.formule_res_service_ref_id
-                 JOIN service_referentiel            sr ON sr.id = frsr.service_referentiel_id
-                 JOIN intervenant                     i ON i.id = sr.intervenant_id
-
-          WHERE
-            mep.histo_destruction IS NULL
-
-        ) t1
-        GROUP BY
-          annee_id, type_ressource_id, structure_id) tv
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            t.ANNEE_ID          = v.ANNEE_ID
-        AND t.TYPE_RESSOURCE_ID = v.TYPE_RESSOURCE_ID
-        AND t.STRUCTURE_ID      = v.STRUCTURE_ID
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      HEURES            = v.HEURES,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      TYPE_RESSOURCE_ID,
-      STRUCTURE_ID,
-      HEURES,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_DMEP_LIQUIDATION_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.TYPE_RESSOURCE_ID,
-      v.STRUCTURE_ID,
-      v.HEURES,
-      0
-
-    );
-
-    DELETE TBL_DMEP_LIQUIDATION WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
-
-
-  PROCEDURE C_DOSSIER( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_DOSSIER SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_DOSSIER t
-    USING (
-
-      SELECT
-        tv.*
-      FROM
-        (SELECT
-          i.annee_id,
-          i.id intervenant_id,
-          si.peut_saisir_dossier,
-          d.id dossier_id,
-          v.id validation_id
-        FROM
-                    intervenant         i
-               JOIN statut_intervenant si ON si.id = i.statut_id
-          LEFT JOIN dossier             d ON d.intervenant_id = i.id
-                                      AND d.histo_destruction IS NULL
-
-               JOIN type_validation tv ON tv.code = ''DONNEES_PERSO_PAR_COMP''
-          LEFT JOIN validation       v ON v.intervenant_id = i.id
-                                      AND v.type_validation_id = tv.id
-                                      AND v.histo_destruction IS NULL
-        WHERE
-          i.histo_destruction IS NULL) tv
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            t.INTERVENANT_ID = v.INTERVENANT_ID
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      ANNEE_ID            = v.ANNEE_ID,
-      PEUT_SAISIR_DOSSIER = v.PEUT_SAISIR_DOSSIER,
-      DOSSIER_ID          = v.DOSSIER_ID,
-      VALIDATION_ID       = v.VALIDATION_ID,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      INTERVENANT_ID,
-      PEUT_SAISIR_DOSSIER,
-      DOSSIER_ID,
-      VALIDATION_ID,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_DOSSIER_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.INTERVENANT_ID,
-      v.PEUT_SAISIR_DOSSIER,
-      v.DOSSIER_ID,
-      v.VALIDATION_ID,
-      0
-
-    );
-
-    DELETE TBL_DOSSIER WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
-
-
-  PROCEDURE C_PAIEMENT( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_PAIEMENT SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_PAIEMENT t
-    USING (
-
-      SELECT
-        tv.*
-      FROM
-        (SELECT
-          i.annee_id                                  annee_id,
-          frs.service_id                              service_id,
-          null                                        service_referentiel_id,
-          frs.id                                      formule_res_service_id,
-          null                                        formule_res_service_ref_id,
-          i.id                                        intervenant_id,
-          COALESCE( ep.structure_id, i.structure_id ) structure_id,
-          mep.id                                      mise_en_paiement_id,
-          mep.periode_paiement_id                     periode_paiement_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,
-          NVL(mep.heures,0)                           heures_demandees,
-          CASE WHEN mep.periode_paiement_id IS NULL THEN 0 ELSE mep.heures END heures_payees
-        FROM
-                    formule_resultat_service        frs
-               JOIN type_volume_horaire             tvh ON tvh.code = ''REALISE''
-               JOIN etat_volume_horaire             evh ON evh.code = ''valide''
-               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
-
-               JOIN intervenant                       i ON i.id = fr.intervenant_id
-               JOIN service                           s ON s.id = frs.service_id
-          LEFT JOIN element_pedagogique              ep ON ep.id = s.element_pedagogique_id
-          LEFT JOIN mise_en_paiement                mep ON mep.formule_res_service_id = frs.id
-                                                       AND mep.histo_destruction IS NULL
-
-        UNION ALL
-
-        SELECT
-          i.annee_id                                  annee_id,
-          null                                        service_id,
-          frs.service_referentiel_id                  service_referentiel_id,
-          null                                        formule_res_service_id,
-          frs.id                                      formule_res_service_ref_id,
-          i.id                                        intervenant_id,
-          s.structure_id                              structure_id,
-          mep.id                                      mise_en_paiement_id,
-          mep.periode_paiement_id                     periode_paiement_id,
-          frs.heures_compl_referentiel                heures_a_payer,
-          count(*) OVER(PARTITION BY frs.id)          heures_a_payer_pond,
-          NVL(mep.heures,0)                           heures_demandees,
-          CASE WHEN mep.periode_paiement_id IS NULL THEN 0 ELSE mep.heures END heures_payees
-        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 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
-
-               JOIN intervenant                       i ON i.id = fr.intervenant_id
-               JOIN service_referentiel               s ON s.id = frs.service_referentiel_id
-          LEFT JOIN mise_en_paiement                mep ON mep.formule_res_service_ref_id = frs.id
-                                                       AND mep.histo_destruction IS NULL) tv
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            t.INTERVENANT_ID             = v.INTERVENANT_ID
-        AND COALESCE(t.MISE_EN_PAIEMENT_ID,0) = COALESCE(v.MISE_EN_PAIEMENT_ID,0)
-        AND COALESCE(t.FORMULE_RES_SERVICE_ID,0) = COALESCE(v.FORMULE_RES_SERVICE_ID,0)
-        AND COALESCE(t.FORMULE_RES_SERVICE_REF_ID,0) = COALESCE(v.FORMULE_RES_SERVICE_REF_ID,0)
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      ANNEE_ID                   = v.ANNEE_ID,
-      STRUCTURE_ID               = v.STRUCTURE_ID,
-      PERIODE_PAIEMENT_ID        = v.PERIODE_PAIEMENT_ID,
-      HEURES_A_PAYER             = v.HEURES_A_PAYER,
-      HEURES_A_PAYER_POND        = v.HEURES_A_PAYER_POND,
-      HEURES_DEMANDEES           = v.HEURES_DEMANDEES,
-      HEURES_PAYEES              = v.HEURES_PAYEES,
-      SERVICE_ID                 = v.SERVICE_ID,
-      SERVICE_REFERENTIEL_ID     = v.SERVICE_REFERENTIEL_ID,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      INTERVENANT_ID,
-      STRUCTURE_ID,
-      MISE_EN_PAIEMENT_ID,
-      PERIODE_PAIEMENT_ID,
-      HEURES_A_PAYER,
-      HEURES_A_PAYER_POND,
-      HEURES_DEMANDEES,
-      HEURES_PAYEES,
-      FORMULE_RES_SERVICE_ID,
-      FORMULE_RES_SERVICE_REF_ID,
-      SERVICE_ID,
-      SERVICE_REFERENTIEL_ID,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_PAIEMENT_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.INTERVENANT_ID,
-      v.STRUCTURE_ID,
-      v.MISE_EN_PAIEMENT_ID,
-      v.PERIODE_PAIEMENT_ID,
-      v.HEURES_A_PAYER,
-      v.HEURES_A_PAYER_POND,
-      v.HEURES_DEMANDEES,
-      v.HEURES_PAYEES,
-      v.FORMULE_RES_SERVICE_ID,
-      v.FORMULE_RES_SERVICE_REF_ID,
-      v.SERVICE_ID,
-      v.SERVICE_REFERENTIEL_ID,
-      0
-
-    );
-
-    DELETE TBL_PAIEMENT WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
-
-
-  PROCEDURE C_PIECE_JOINTE( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_PIECE_JOINTE SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_PIECE_JOINTE t
-    USING (
-
-      SELECT
-        *
-      FROM
-        v_tbl_piece_jointe
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            t.TYPE_PIECE_JOINTE_ID = v.TYPE_PIECE_JOINTE_ID
-        AND t.INTERVENANT_ID       = v.INTERVENANT_ID
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      ANNEE_ID             = v.ANNEE_ID,
-      DEMANDEE             = v.DEMANDEE,
-      FOURNIE              = v.FOURNIE,
-      VALIDEE              = v.VALIDEE,
-      HEURES_POUR_SEUIL    = v.HEURES_POUR_SEUIL,
-      OBLIGATOIRE          = v.OBLIGATOIRE,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      TYPE_PIECE_JOINTE_ID,
-      INTERVENANT_ID,
-      DEMANDEE,
-      FOURNIE,
-      VALIDEE,
-      HEURES_POUR_SEUIL,
-      OBLIGATOIRE,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_PIECE_JOINTE_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.TYPE_PIECE_JOINTE_ID,
-      v.INTERVENANT_ID,
-      v.DEMANDEE,
-      v.FOURNIE,
-      v.VALIDEE,
-      v.HEURES_POUR_SEUIL,
-      v.OBLIGATOIRE,
-      0
-
-    );
-
-    DELETE TBL_PIECE_JOINTE WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
-
-
-  PROCEDURE C_PIECE_JOINTE_DEMANDE( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_PIECE_JOINTE_DEMANDE SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_PIECE_JOINTE_DEMANDE t
-    USING (
-      SELECT
-        *
-      FROM
-        v_tbl_piece_jointe_demande
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            t.TYPE_PIECE_JOINTE_ID = v.TYPE_PIECE_JOINTE_ID
-        AND t.INTERVENANT_ID       = v.INTERVENANT_ID
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      ANNEE_ID             = v.ANNEE_ID,
-      HEURES_POUR_SEUIL    = v.HEURES_POUR_SEUIL,
-      OBLIGATOIRE          = v.OBLIGATOIRE,
-      CODE_INTERVENANT     = v.CODE_INTERVENANT,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      TYPE_PIECE_JOINTE_ID,
-      INTERVENANT_ID,
-      HEURES_POUR_SEUIL,
-      OBLIGATOIRE,
-      CODE_INTERVENANT,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_PIECE_JOINTE_DEMAND_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.TYPE_PIECE_JOINTE_ID,
-      v.INTERVENANT_ID,
-      v.HEURES_POUR_SEUIL,
-      v.OBLIGATOIRE,
-      v.CODE_INTERVENANT,
-      0
-
-    );
-
-    DELETE TBL_PIECE_JOINTE_DEMANDE WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
-
-
-  PROCEDURE C_PIECE_JOINTE_FOURNIE( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_PIECE_JOINTE_FOURNIE SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_PIECE_JOINTE_FOURNIE t
-    USING (
-
-      SELECT
-        tv.*
-      FROM
-        (SELECT
-          i.annee_id,
-          i.code code_intervenant,
-          pj.type_piece_jointe_id,
-          pj.intervenant_id,
-          pj.id piece_jointe_id,
-          v.id validation_id,
-          f.id fichier_id,
-          MIN(tpjs.duree_vie) duree_vie,
-          MIN(i.annee_id+tpjs.duree_vie) date_validite,
-          pj.date_archive date_archive
-        FROM
-                    piece_jointe          pj
-               JOIN intervenant            i ON i.id = pj.intervenant_id
-                                            AND i.histo_destruction IS NULL
-               JOIN piece_jointe_fichier pjf ON pjf.piece_jointe_id = pj.id
-               JOIN fichier                f ON f.id = pjf.fichier_id
-                                            AND f.histo_destruction IS NULL
-                JOIN type_piece_jointe_statut tpjs ON tpjs.statut_intervenant_id = i.statut_id
-                                                   AND tpjs.type_piece_jointe_id = pj.type_piece_jointe_id
-                                                   AND tpjs.HISTO_DESTRUCTION IS NULL
-
-         LEFT JOIN validation             v ON v.id = pj.validation_id
-                                            AND v.histo_destruction IS NULL
-        WHERE
-          pj.histo_destruction IS NULL
-        GROUP BY
-        i.annee_id,
-          i.code,
-          pj.type_piece_jointe_id,
-          pj.intervenant_id,
-          pj.id,
-          v.id,
-          f.id,
-          pj.date_archive) tv
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            t.TYPE_PIECE_JOINTE_ID = v.TYPE_PIECE_JOINTE_ID
-        AND t.INTERVENANT_ID       = v.INTERVENANT_ID
-        AND COALESCE(t.VALIDATION_ID,0) = COALESCE(v.VALIDATION_ID,0)
-        AND COALESCE(t.FICHIER_ID,0) = COALESCE(v.FICHIER_ID,0)
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      ANNEE_ID             = v.ANNEE_ID,
-      PIECE_JOINTE_ID      = v.PIECE_JOINTE_ID,
-      DUREE_VIE            = v.DUREE_VIE,
-      CODE_INTERVENANT     = v.CODE_INTERVENANT,
-      DATE_VALIDITE        = v.DATE_VALIDITE,
-      DATE_ARCHIVE         = v.DATE_ARCHIVE,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      TYPE_PIECE_JOINTE_ID,
-      INTERVENANT_ID,
-      VALIDATION_ID,
-      FICHIER_ID,
-      PIECE_JOINTE_ID,
-      DUREE_VIE,
-      CODE_INTERVENANT,
-      DATE_VALIDITE,
-      DATE_ARCHIVE,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_PIECE_JOINTE_FOURNI_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.TYPE_PIECE_JOINTE_ID,
-      v.INTERVENANT_ID,
-      v.VALIDATION_ID,
-      v.FICHIER_ID,
-      v.PIECE_JOINTE_ID,
-      v.DUREE_VIE,
-      v.CODE_INTERVENANT,
-      v.DATE_VALIDITE,
-      v.DATE_ARCHIVE,
-      0
-
-    );
-
-    DELETE TBL_PIECE_JOINTE_FOURNIE WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
-
-
-  PROCEDURE C_SERVICE( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_SERVICE SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_SERVICE t
-    USING (
-
-      SELECT
-        tv.*
-      FROM
-        (WITH t AS (
-        SELECT
-          s.id                                                                                      service_id,
-          s.intervenant_id                                                                          intervenant_id,
-          ep.structure_id                                                                           structure_id,
-          ep.id                                                                                     element_pedagogique_id,
-          ep.periode_id                                                                             element_pedagogique_periode_id,
-          etp.id                                                                                    etape_id,
-
-          vh.type_volume_horaire_id                                                                 type_volume_horaire_id,
-          vh.heures                                                                                 heures,
-          tvh.code                                                                                  type_volume_horaire_code,
-
-          CASE WHEN ep.histo_destruction IS NULL THEN 1 ELSE 0 END                                  element_pedagogique_histo,
-          CASE WHEN etp.histo_destruction IS NULL OR cp.id IS NOT NULL THEN 1 ELSE 0 END            etape_histo,
-
-          CASE WHEN ep.periode_id IS NOT NULL THEN
-            SUM( CASE WHEN vh.periode_id <> ep.periode_id THEN 1 ELSE 0 END ) OVER( PARTITION BY vh.service_id, vh.periode_id, vh.type_volume_horaire_id, vh.type_intervention_id )
-          ELSE 0 END has_heures_mauvaise_periode,
-
-          CASE WHEN v.id IS NULL AND vh.auto_validation=0 THEN 0 ELSE 1 END valide
-        FROM
-          service                                       s
-          LEFT JOIN element_pedagogique                ep ON ep.id = s.element_pedagogique_id
-          LEFT JOIN etape                             etp ON etp.id = ep.etape_id
-          LEFT JOIN chemin_pedagogique                 cp ON cp.etape_id = etp.id
-                                                         AND cp.element_pedagogique_id = ep.id
-                                                         AND cp.histo_destruction IS NULL
-
-               JOIN volume_horaire                     vh ON vh.service_id = s.id
-                                                         AND vh.histo_destruction IS NULL
-
-               JOIN type_volume_horaire               tvh ON tvh.id = vh.type_volume_horaire_id
-
-          LEFT JOIN validation_vol_horaire            vvh ON vvh.volume_horaire_id = vh.id
-
-          LEFT JOIN validation                          v ON v.id = vvh.validation_id
-                                                         AND v.histo_destruction IS NULL
-        WHERE
-          s.histo_destruction IS NULL
-        )
-        SELECT
-          i.annee_id                                                                                annee_id,
-          i.id                                                                                      intervenant_id,
-          i.structure_id                                                                            intervenant_structure_id,
-          NVL( t.structure_id, i.structure_id )                                                     structure_id,
-          ti.id                                                                                     type_intervenant_id,
-          ti.code                                                                                   type_intervenant_code,
-          si.peut_saisir_service                                                                    peut_saisir_service,
-
-          t.element_pedagogique_id,
-          t.service_id,
-          t.element_pedagogique_periode_id,
-          t.etape_id,
-          t.type_volume_horaire_id,
-          t.type_volume_horaire_code,
-          t.element_pedagogique_histo,
-          t.etape_histo,
-
-          CASE WHEN SUM(t.has_heures_mauvaise_periode) > 0 THEN 1 ELSE 0 END has_heures_mauvaise_periode,
-
-          CASE WHEN type_volume_horaire_id IS NULL THEN 0 ELSE count(*) END nbvh,
-          CASE WHEN type_volume_horaire_id IS NULL THEN 0 ELSE sum(t.heures) END heures,
-          sum(valide) valide
-        FROM
-          t
-          JOIN intervenant                              i ON i.id = t.intervenant_id
-          JOIN statut_intervenant                      si ON si.id = i.statut_id
-          JOIN type_intervenant                        ti ON ti.id = si.type_intervenant_id
-        GROUP BY
-          i.annee_id,
-          i.id,
-          i.structure_id,
-          t.structure_id,
-          i.structure_id,
-          ti.id,
-          ti.code,
-          si.peut_saisir_service,
-          t.element_pedagogique_id,
-          t.service_id,
-          t.element_pedagogique_periode_id,
-          t.etape_id,
-          t.type_volume_horaire_id,
-          t.type_volume_horaire_code,
-          t.element_pedagogique_histo,
-          t.etape_histo) tv
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0) = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0)
-        AND t.SERVICE_ID             = v.SERVICE_ID
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      ANNEE_ID                       = v.ANNEE_ID,
-      INTERVENANT_ID                 = v.INTERVENANT_ID,
-      PEUT_SAISIR_SERVICE            = v.PEUT_SAISIR_SERVICE,
-      STRUCTURE_ID                   = v.STRUCTURE_ID,
-      NBVH                           = v.NBVH,
-      VALIDE                         = v.VALIDE,
-      ELEMENT_PEDAGOGIQUE_ID         = v.ELEMENT_PEDAGOGIQUE_ID,
-      ELEMENT_PEDAGOGIQUE_PERIODE_ID = v.ELEMENT_PEDAGOGIQUE_PERIODE_ID,
-      ETAPE_ID                       = v.ETAPE_ID,
-      ELEMENT_PEDAGOGIQUE_HISTO      = v.ELEMENT_PEDAGOGIQUE_HISTO,
-      ETAPE_HISTO                    = v.ETAPE_HISTO,
-      HAS_HEURES_MAUVAISE_PERIODE    = v.HAS_HEURES_MAUVAISE_PERIODE,
-      INTERVENANT_STRUCTURE_ID       = v.INTERVENANT_STRUCTURE_ID,
-      TYPE_INTERVENANT_ID            = v.TYPE_INTERVENANT_ID,
-      TYPE_INTERVENANT_CODE          = v.TYPE_INTERVENANT_CODE,
-      TYPE_VOLUME_HORAIRE_CODE       = v.TYPE_VOLUME_HORAIRE_CODE,
-      HEURES                         = v.HEURES,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      INTERVENANT_ID,
-      PEUT_SAISIR_SERVICE,
-      TYPE_VOLUME_HORAIRE_ID,
-      STRUCTURE_ID,
-      NBVH,
-      VALIDE,
-      ELEMENT_PEDAGOGIQUE_ID,
-      ELEMENT_PEDAGOGIQUE_PERIODE_ID,
-      ETAPE_ID,
-      ELEMENT_PEDAGOGIQUE_HISTO,
-      ETAPE_HISTO,
-      HAS_HEURES_MAUVAISE_PERIODE,
-      SERVICE_ID,
-      INTERVENANT_STRUCTURE_ID,
-      TYPE_INTERVENANT_ID,
-      TYPE_INTERVENANT_CODE,
-      TYPE_VOLUME_HORAIRE_CODE,
-      HEURES,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_SERVICE_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.INTERVENANT_ID,
-      v.PEUT_SAISIR_SERVICE,
-      v.TYPE_VOLUME_HORAIRE_ID,
-      v.STRUCTURE_ID,
-      v.NBVH,
-      v.VALIDE,
-      v.ELEMENT_PEDAGOGIQUE_ID,
-      v.ELEMENT_PEDAGOGIQUE_PERIODE_ID,
-      v.ETAPE_ID,
-      v.ELEMENT_PEDAGOGIQUE_HISTO,
-      v.ETAPE_HISTO,
-      v.HAS_HEURES_MAUVAISE_PERIODE,
-      v.SERVICE_ID,
-      v.INTERVENANT_STRUCTURE_ID,
-      v.TYPE_INTERVENANT_ID,
-      v.TYPE_INTERVENANT_CODE,
-      v.TYPE_VOLUME_HORAIRE_CODE,
-      v.HEURES,
-      0
-
-    );
-
-    DELETE TBL_SERVICE WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
-
-
-  PROCEDURE C_SERVICE_REFERENTIEL( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_SERVICE_REFERENTIEL SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_SERVICE_REFERENTIEL t
-    USING (
-
-      SELECT
-        tv.*
-      FROM
-        (WITH t AS (
-
-          SELECT
-            i.annee_id,
-            i.id intervenant_id,
-            si.peut_saisir_referentiel peut_saisir_service,
-            vh.type_volume_horaire_id,
-            s.structure_id,
-            CASE WHEN v.id IS NULL AND vh.auto_validation=0 THEN 0 ELSE 1 END valide
-          FROM
-                      intervenant                     i
-
-                 JOIN statut_intervenant          si ON si.id = i.statut_id
-
-            LEFT JOIN service_referentiel          s ON s.intervenant_id = i.id
-                                                    AND s.histo_destruction IS NULL
-
-            LEFT JOIN volume_horaire_ref          vh ON vh.service_referentiel_id = s.id
-                                                    AND vh.histo_destruction IS NULL
-
-            LEFT JOIN validation_vol_horaire_ref vvh ON vvh.volume_horaire_ref_id = vh.id
-
-            LEFT JOIN validation                   v ON v.id = vvh.validation_id
-                                                    AND v.histo_destruction IS NULL
-          WHERE
-            i.histo_destruction IS NULL
-
-        )
-        SELECT
-          annee_id,
-          intervenant_id,
-          peut_saisir_service,
-          type_volume_horaire_id,
-          structure_id,
-          CASE WHEN type_volume_horaire_id IS NULL THEN 0 ELSE count(*) END nbvh,
-          sum(valide) valide
-        FROM
-          t
-        WHERE
-          NOT (structure_id IS NOT NULL AND type_volume_horaire_id IS NULL)
-        GROUP BY
-          annee_id,
-          intervenant_id,
-          peut_saisir_service,
-          type_volume_horaire_id,
-          structure_id) tv
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            t.INTERVENANT_ID         = v.INTERVENANT_ID
-        AND COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0) = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0)
-        AND COALESCE(t.STRUCTURE_ID,0) = COALESCE(v.STRUCTURE_ID,0)
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      ANNEE_ID               = v.ANNEE_ID,
-      PEUT_SAISIR_SERVICE    = v.PEUT_SAISIR_SERVICE,
-      NBVH                   = v.NBVH,
-      VALIDE                 = v.VALIDE,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      INTERVENANT_ID,
-      PEUT_SAISIR_SERVICE,
-      TYPE_VOLUME_HORAIRE_ID,
-      STRUCTURE_ID,
-      NBVH,
-      VALIDE,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_SERVICE_REFERENTIEL_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.INTERVENANT_ID,
-      v.PEUT_SAISIR_SERVICE,
-      v.TYPE_VOLUME_HORAIRE_ID,
-      v.STRUCTURE_ID,
-      v.NBVH,
-      v.VALIDE,
-      0
-
-    );
-
-    DELETE TBL_SERVICE_REFERENTIEL WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
-
-
-  PROCEDURE C_SERVICE_SAISIE( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_SERVICE_SAISIE SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_SERVICE_SAISIE t
-    USING (
-
-      SELECT
-        tv.*
-      FROM
-        (SELECT
-          i.annee_id,
-          i.id intervenant_id,
-          si.peut_saisir_service,
-          si.peut_saisir_referentiel,
-          SUM( CASE WHEN tvhs.code = ''PREVU''   THEN NVL(vh .heures,0) ELSE 0 END ) heures_service_prev,
-          SUM( CASE WHEN tvhs.code = ''PREVU''   THEN NVL(vhr.heures,0) ELSE 0 END ) heures_referentiel_prev,
-          SUM( CASE WHEN tvhs.code = ''REALISE'' THEN NVL(vh .heures,0) ELSE 0 END ) heures_service_real,
-          SUM( CASE WHEN tvhs.code = ''REALISE'' THEN NVL(vhr.heures,0) ELSE 0 END ) heures_referentiel_real
-        FROM
-          intervenant i
-          JOIN statut_intervenant si ON si.id = i.statut_id
-          LEFT JOIN service s ON s.intervenant_id = i.id AND s.histo_destruction IS NULL
-          LEFT JOIN volume_horaire vh ON vh.service_id = s.id AND vh.histo_destruction IS NULL
-          LEFT JOIN type_volume_horaire tvhs ON tvhs.id = vh.type_volume_horaire_id
-
-          LEFT JOIN service_referentiel sr ON sr.intervenant_id = i.id AND sr.histo_destruction IS NULL
-          LEFT JOIN volume_horaire_ref vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL
-          LEFT JOIN type_volume_horaire tvhrs ON tvhrs.id = vhr.type_volume_horaire_id
-        WHERE
-          i.histo_destruction IS NULL
-        GROUP BY
-          i.annee_id,
-          i.id,
-          si.peut_saisir_service,
-          si.peut_saisir_referentiel) tv
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            t.INTERVENANT_ID = v.INTERVENANT_ID
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      ANNEE_ID                = v.ANNEE_ID,
-      PEUT_SAISIR_SERVICE     = v.PEUT_SAISIR_SERVICE,
-      PEUT_SAISIR_REFERENTIEL = v.PEUT_SAISIR_REFERENTIEL,
-      HEURES_SERVICE_PREV     = v.HEURES_SERVICE_PREV,
-      HEURES_REFERENTIEL_PREV = v.HEURES_REFERENTIEL_PREV,
-      HEURES_SERVICE_REAL     = v.HEURES_SERVICE_REAL,
-      HEURES_REFERENTIEL_REAL = v.HEURES_REFERENTIEL_REAL,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      INTERVENANT_ID,
-      PEUT_SAISIR_SERVICE,
-      PEUT_SAISIR_REFERENTIEL,
-      HEURES_SERVICE_PREV,
-      HEURES_REFERENTIEL_PREV,
-      HEURES_SERVICE_REAL,
-      HEURES_REFERENTIEL_REAL,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_SERVICE_SAISIE_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.INTERVENANT_ID,
-      v.PEUT_SAISIR_SERVICE,
-      v.PEUT_SAISIR_REFERENTIEL,
-      v.HEURES_SERVICE_PREV,
-      v.HEURES_REFERENTIEL_PREV,
-      v.HEURES_SERVICE_REAL,
-      v.HEURES_REFERENTIEL_REAL,
-      0
-
-    );
-
-    DELETE TBL_SERVICE_SAISIE WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
-
-
-  PROCEDURE C_VALIDATION_ENSEIGNEMENT( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_VALIDATION_ENSEIGNEMENT SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_VALIDATION_ENSEIGNEMENT t
-    USING (
-
-      SELECT
-        tv.*
-      FROM
-        (SELECT DISTINCT
-          i.annee_id,
-          i.id intervenant_id,
-          CASE WHEN rsv.priorite = ''affectation'' THEN
-            COALESCE( i.structure_id, ep.structure_id )
-          ELSE
-            COALESCE( ep.structure_id, i.structure_id )
-          END structure_id,
-          vh.type_volume_horaire_id,
-          s.id service_id,
-          vh.id volume_horaire_id,
-          vh.auto_validation,
-          v.id validation_id
-        FROM
-          service s
-          JOIN volume_horaire vh ON vh.service_id = s.id AND vh.histo_destruction IS NULL
-          JOIN intervenant i ON i.id = s.intervenant_id AND i.histo_destruction IS NULL
-          JOIN statut_intervenant si ON si.id = i.statut_id
-          JOIN regle_structure_validation rsv ON rsv.type_intervenant_id = si.type_intervenant_id AND rsv.type_volume_horaire_id = vh.type_volume_horaire_id
-          LEFT JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id
-          LEFT JOIN validation_vol_horaire vvh ON vvh.volume_horaire_id = vh.id
-          LEFT JOIN validation v ON v.id = vvh.validation_id AND v.histo_destruction IS NULL
-        WHERE
-          s.histo_destruction IS NULL
-          AND NOT (vvh.validation_id IS NOT NULL AND v.id IS NULL)) tv
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            t.INTERVENANT_ID         = v.INTERVENANT_ID
-        AND t.STRUCTURE_ID           = v.STRUCTURE_ID
-        AND t.TYPE_VOLUME_HORAIRE_ID = v.TYPE_VOLUME_HORAIRE_ID
-        AND t.SERVICE_ID             = v.SERVICE_ID
-        AND COALESCE(t.VALIDATION_ID,0) = COALESCE(v.VALIDATION_ID,0)
-        AND t.VOLUME_HORAIRE_ID      = v.VOLUME_HORAIRE_ID
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      ANNEE_ID               = v.ANNEE_ID,
-      AUTO_VALIDATION        = v.AUTO_VALIDATION,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      INTERVENANT_ID,
-      STRUCTURE_ID,
-      TYPE_VOLUME_HORAIRE_ID,
-      SERVICE_ID,
-      VALIDATION_ID,
-      VOLUME_HORAIRE_ID,
-      AUTO_VALIDATION,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_VALIDATION_ENSEIGNE_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.INTERVENANT_ID,
-      v.STRUCTURE_ID,
-      v.TYPE_VOLUME_HORAIRE_ID,
-      v.SERVICE_ID,
-      v.VALIDATION_ID,
-      v.VOLUME_HORAIRE_ID,
-      v.AUTO_VALIDATION,
-      0
-
-    );
-
-    DELETE TBL_VALIDATION_ENSEIGNEMENT WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
-
-
-  PROCEDURE C_VALIDATION_REFERENTIEL( PARAMS UNICAEN_TBL.T_PARAMS ) IS
-    conds CLOB;
-  BEGIN
-    conds := params_to_conds( params );
-
-    EXECUTE IMMEDIATE 'BEGIN
-
-    UPDATE TBL_VALIDATION_REFERENTIEL SET to_delete = 1 WHERE ' || conds || ';
-
-    MERGE INTO
-      TBL_VALIDATION_REFERENTIEL t
-    USING (
-
-      SELECT
-        tv.*
-      FROM
-        (SELECT DISTINCT
-          i.annee_id,
-          i.id intervenant_id,
-          CASE WHEN rsv.priorite = ''affectation'' THEN
-            COALESCE( i.structure_id, s.structure_id )
-          ELSE
-            COALESCE( s.structure_id, i.structure_id )
-          END structure_id,
-          vh.type_volume_horaire_id,
-          s.id service_referentiel_id,
-          vh.id volume_horaire_ref_id,
-          vh.auto_validation,
-          v.id validation_id
-        FROM
-          service_referentiel s
-          JOIN volume_horaire_ref vh ON vh.service_referentiel_id = s.id AND vh.histo_destruction IS NULL
-          JOIN intervenant i ON i.id = s.intervenant_id AND i.histo_destruction IS NULL
-          JOIN statut_intervenant si ON si.id = i.statut_id
-          JOIN regle_structure_validation rsv ON rsv.type_intervenant_id = si.type_intervenant_id AND rsv.type_volume_horaire_id = vh.type_volume_horaire_id
-          LEFT JOIN validation_vol_horaire_ref vvh ON vvh.volume_horaire_ref_id = vh.id
-          LEFT JOIN validation v ON v.id = vvh.validation_id AND v.histo_destruction IS NULL
-        WHERE
-          s.histo_destruction IS NULL) tv
-      WHERE
-        ' || conds || '
-
-    ) v ON (
-            t.INTERVENANT_ID         = v.INTERVENANT_ID
-        AND t.STRUCTURE_ID           = v.STRUCTURE_ID
-        AND t.TYPE_VOLUME_HORAIRE_ID = v.TYPE_VOLUME_HORAIRE_ID
-        AND t.SERVICE_REFERENTIEL_ID = v.SERVICE_REFERENTIEL_ID
-        AND COALESCE(t.VALIDATION_ID,0) = COALESCE(v.VALIDATION_ID,0)
-        AND t.VOLUME_HORAIRE_REF_ID  = v.VOLUME_HORAIRE_REF_ID
-
-    ) WHEN MATCHED THEN UPDATE SET
-
-      ANNEE_ID               = v.ANNEE_ID,
-      AUTO_VALIDATION        = v.AUTO_VALIDATION,
-      to_delete = 0
-
-    WHEN NOT MATCHED THEN INSERT (
-
-      ID,
-      ANNEE_ID,
-      INTERVENANT_ID,
-      STRUCTURE_ID,
-      TYPE_VOLUME_HORAIRE_ID,
-      SERVICE_REFERENTIEL_ID,
-      VALIDATION_ID,
-      VOLUME_HORAIRE_REF_ID,
-      AUTO_VALIDATION,
-      TO_DELETE
-
-    ) VALUES (
-
-      TBL_VALIDATION_REFERENT_ID_SEQ.NEXTVAL,
-      v.ANNEE_ID,
-      v.INTERVENANT_ID,
-      v.STRUCTURE_ID,
-      v.TYPE_VOLUME_HORAIRE_ID,
-      v.SERVICE_REFERENTIEL_ID,
-      v.VALIDATION_ID,
-      v.VOLUME_HORAIRE_REF_ID,
-      v.AUTO_VALIDATION,
-      0
-
-    );
-
-    DELETE TBL_VALIDATION_REFERENTIEL WHERE to_delete = 1 AND ' || conds || ';
-
-    END;';
-
-  END;
-
   -- END OF AUTOMATIC GENERATION --
 
 END UNICAEN_TBL;
\ No newline at end of file
diff --git a/data/ddl/package/UNICAEN_TBL/definition.sql b/data/ddl/package/UNICAEN_TBL/definition.sql
index ffc8a0c898..b9681715dd 100644
--- a/data/ddl/package/UNICAEN_TBL/definition.sql
+++ b/data/ddl/package/UNICAEN_TBL/definition.sql
@@ -1,60 +1,21 @@
 CREATE OR REPLACE PACKAGE "UNICAEN_TBL" AS
 
-  TYPE t_params IS RECORD (
-    c1 VARCHAR2(30), v1 VARCHAR2(80),
-    c2 VARCHAR2(30), v2 VARCHAR2(80),
-    c3 VARCHAR2(30), v3 VARCHAR2(80),
-    c4 VARCHAR2(30), v4 VARCHAR2(80),
-    c5 VARCHAR2(30), v5 VARCHAR2(80),
-    sqlcond CLOB
-  );
-
   ACTIV_TRIGGERS BOOLEAN DEFAULT TRUE;
   ACTIV_CALCULS  BOOLEAN DEFAULT TRUE;
-  CALCUL_PROC_PARAMS t_params;
-
-  FUNCTION MAKE_PARAMS(
-    c1 VARCHAR2 DEFAULT NULL, v1 VARCHAR2 DEFAULT NULL,
-    c2 VARCHAR2 DEFAULT NULL, v2 VARCHAR2 DEFAULT NULL,
-    c3 VARCHAR2 DEFAULT NULL, v3 VARCHAR2 DEFAULT NULL,
-    c4 VARCHAR2 DEFAULT NULL, v4 VARCHAR2 DEFAULT NULL,
-    c5 VARCHAR2 DEFAULT NULL, v5 VARCHAR2 DEFAULT NULL,
-    sqlcond CLOB DEFAULT NULL
-  ) RETURN t_params;
-
-  FUNCTION PARAMS_FROM_DEMS( TBL_NAME VARCHAR2 ) RETURN t_params;
-  FUNCTION PARAMS_TO_CONDS ( PARAMS UNICAEN_TBL.T_PARAMS, alias VARCHAR2 DEFAULT NULL ) RETURN CLOB;
-
-  PROCEDURE DEMANDE_CALCUL( TBL_NAME VARCHAR2 );
-  PROCEDURE DEMANDE_CALCUL( TBL_NAME VARCHAR2, CONDS CLOB );
-  PROCEDURE DEMANDE_CALCUL( TBL_NAME VARCHAR2, PARAMS t_params );
+  CALCUL_PROC_PARAM VARCHAR2(30);
+  CALCUL_PROC_VALUE VARCHAR2(80);
 
   PROCEDURE CALCULER( TBL_NAME VARCHAR2 );
-  PROCEDURE CALCULER( TBL_NAME VARCHAR2, CONDS CLOB );
-  PROCEDURE CALCULER( TBL_NAME VARCHAR2, PARAMS t_params );
+  PROCEDURE CALCULER( TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2 );
+  PROCEDURE DEMANDE_CALCUL( TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2 );
 
   PROCEDURE ANNULER_DEMANDES;
   PROCEDURE ANNULER_DEMANDES( TBL_NAME VARCHAR2 );
   PROCEDURE CALCULER_DEMANDES;
 
-  -- AUTOMATIC GENERATION --
+  FUNCTION MAKE_WHERE(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL, alias VARCHAR2 DEFAULT NULL) RETURN VARCHAR2;
 
-  PROCEDURE C_AGREMENT( PARAMS UNICAEN_TBL.T_PARAMS );
-  PROCEDURE C_CHARGENS( PARAMS UNICAEN_TBL.T_PARAMS );
-  PROCEDURE C_CHARGENS_SEUILS_DEF( PARAMS UNICAEN_TBL.T_PARAMS );
-  PROCEDURE C_CLOTURE_REALISE( PARAMS UNICAEN_TBL.T_PARAMS );
-  PROCEDURE C_CONTRAT( PARAMS UNICAEN_TBL.T_PARAMS );
-  PROCEDURE C_DMEP_LIQUIDATION( PARAMS UNICAEN_TBL.T_PARAMS );
-  PROCEDURE C_DOSSIER( PARAMS UNICAEN_TBL.T_PARAMS );
-  PROCEDURE C_PAIEMENT( PARAMS UNICAEN_TBL.T_PARAMS );
-  PROCEDURE C_PIECE_JOINTE( PARAMS UNICAEN_TBL.T_PARAMS );
-  PROCEDURE C_PIECE_JOINTE_DEMANDE( PARAMS UNICAEN_TBL.T_PARAMS );
-  PROCEDURE C_PIECE_JOINTE_FOURNIE( PARAMS UNICAEN_TBL.T_PARAMS );
-  PROCEDURE C_SERVICE( PARAMS UNICAEN_TBL.T_PARAMS );
-  PROCEDURE C_SERVICE_REFERENTIEL( PARAMS UNICAEN_TBL.T_PARAMS );
-  PROCEDURE C_SERVICE_SAISIE( PARAMS UNICAEN_TBL.T_PARAMS );
-  PROCEDURE C_VALIDATION_ENSEIGNEMENT( PARAMS UNICAEN_TBL.T_PARAMS );
-  PROCEDURE C_VALIDATION_REFERENTIEL( PARAMS UNICAEN_TBL.T_PARAMS );
+  -- AUTOMATIC GENERATION --
 
   -- END OF AUTOMATIC GENERATION --
 
diff --git a/data/ddl/table/TBL.php b/data/ddl/table/TBL.php
index 55d5d68015..ae4d0526ce 100644
--- a/data/ddl/table/TBL.php
+++ b/data/ddl/table/TBL.php
@@ -105,6 +105,18 @@ return [
             'position'    => 8,
             'commentaire' => NULL,
         ],
+        'PARAMETRES'          => [
+            'name'        => 'PARAMETRES',
+            'type'        => 'string',
+            'bdd-type'    => 'VARCHAR2',
+            'length'      => 500,
+            'scale'       => NULL,
+            'precision'   => NULL,
+            'nullable'    => TRUE,
+            'default'     => NULL,
+            'position'    => 9,
+            'commentaire' => NULL,
+        ],
     ],
 ];
 
diff --git a/data/ddl/table/TBL_AGREMENT.php b/data/ddl/table/TBL_AGREMENT.php
index a4c081ca25..ffc4471e15 100644
--- a/data/ddl/table/TBL_AGREMENT.php
+++ b/data/ddl/table/TBL_AGREMENT.php
@@ -52,7 +52,7 @@ return [
             'length'      => 255,
             'scale'       => NULL,
             'precision'   => NULL,
-            'nullable'    => TRUE,
+            'nullable'    => FALSE,
             'default'     => NULL,
             'position'    => 4,
             'commentaire' => NULL,
@@ -64,7 +64,7 @@ return [
             'length'      => 0,
             'scale'       => NULL,
             'precision'   => NULL,
-            'nullable'    => TRUE,
+            'nullable'    => FALSE,
             'default'     => '1',
             'position'    => 5,
             'commentaire' => NULL,
@@ -117,18 +117,6 @@ return [
             'position'    => 9,
             'commentaire' => NULL,
         ],
-        'TO_DELETE'        => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 10,
-            'commentaire' => NULL,
-        ],
         'TYPE_AGREMENT_ID' => [
             'name'        => 'TYPE_AGREMENT_ID',
             'type'        => 'int',
diff --git a/data/ddl/table/TBL_CHARGENS.php b/data/ddl/table/TBL_CHARGENS.php
index 1f8f80a715..c8b9b2b66a 100644
--- a/data/ddl/table/TBL_CHARGENS.php
+++ b/data/ddl/table/TBL_CHARGENS.php
@@ -213,18 +213,6 @@ return [
             'position'    => 17,
             'commentaire' => NULL,
         ],
-        'TO_DELETE'                => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 18,
-            'commentaire' => NULL,
-        ],
         'TYPE_HEURES_ID'           => [
             'name'        => 'TYPE_HEURES_ID',
             'type'        => 'int',
diff --git a/data/ddl/table/TBL_CHARGENS_SEUILS_DEF.php b/data/ddl/table/TBL_CHARGENS_SEUILS_DEF.php
index 182e657739..1f63a6ca95 100644
--- a/data/ddl/table/TBL_CHARGENS_SEUILS_DEF.php
+++ b/data/ddl/table/TBL_CHARGENS_SEUILS_DEF.php
@@ -81,18 +81,6 @@ return [
             'position'    => 6,
             'commentaire' => NULL,
         ],
-        'TO_DELETE'                => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 7,
-            'commentaire' => NULL,
-        ],
         'TYPE_INTERVENTION_ID'     => [
             'name'        => 'TYPE_INTERVENTION_ID',
             'type'        => 'int',
diff --git a/data/ddl/table/TBL_CLOTURE_REALISE.php b/data/ddl/table/TBL_CLOTURE_REALISE.php
index 48e092e206..13378ee1b0 100644
--- a/data/ddl/table/TBL_CLOTURE_REALISE.php
+++ b/data/ddl/table/TBL_CLOTURE_REALISE.php
@@ -69,18 +69,6 @@ return [
             'position'    => 5,
             'commentaire' => 'Témoin (0 ou 1)',
         ],
-        'TO_DELETE'            => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 6,
-            'commentaire' => NULL,
-        ],
     ],
 ];
 
diff --git a/data/ddl/table/TBL_CONTRAT.php b/data/ddl/table/TBL_CONTRAT.php
index e9ec6a6bb9..351457e109 100644
--- a/data/ddl/table/TBL_CONTRAT.php
+++ b/data/ddl/table/TBL_CONTRAT.php
@@ -105,18 +105,6 @@ return [
             'position'    => 8,
             'commentaire' => NULL,
         ],
-        'TO_DELETE'          => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 9,
-            'commentaire' => NULL,
-        ],
     ],
 ];
 
diff --git a/data/ddl/table/TBL_DEMS.php b/data/ddl/table/TBL_DEMS.php
index 52b82c5615..9af961bd4e 100644
--- a/data/ddl/table/TBL_DEMS.php
+++ b/data/ddl/table/TBL_DEMS.php
@@ -9,8 +9,8 @@ return [
     'commentaire' => NULL,
     'sequence'    => 'TBL_DEMS_ID_SEQ',
     'columns'     => [
-        'C1'       => [
-            'name'        => 'C1',
+        'PARAM'       => [
+            'name'        => 'PARAM',
             'type'        => 'string',
             'bdd-type'    => 'VARCHAR2',
             'length'      => 30,
@@ -21,54 +21,7 @@ return [
             'position'    => 1,
             'commentaire' => NULL,
         ],
-        'C2'       => [
-            'name'        => 'C2',
-            'type'        => 'string',
-            'bdd-type'    => 'VARCHAR2',
-            'length'      => 30,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 2,
-            'commentaire' => NULL,
-        ],
-        'C3'       => [
-            'name'        => 'C3',
-            'type'        => 'string',
-            'bdd-type'    => 'VARCHAR2',
-            'length'      => 30,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 3,
-            'commentaire' => NULL,
-        ],
-        'C4'       => [
-            'name'        => 'C4',
-            'type'        => 'string',
-            'bdd-type'    => 'VARCHAR2',
-            'length'      => 30,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 4,
-            'commentaire' => NULL,
-        ],
-        'C5'       => [
-            'name'        => 'C5',
-            'type'        => 'string',
-            'bdd-type'    => 'VARCHAR2',
-            'length'      => 30,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 5,
-            'commentaire' => NULL,
-        ],
+
         'ID'       => [
             'name'        => 'ID',
             'type'        => 'int',
@@ -81,18 +34,6 @@ return [
             'position'    => 6,
             'commentaire' => NULL,
         ],
-        'SQLCOND'  => [
-            'name'        => 'SQLCOND',
-            'type'        => 'string',
-            'bdd-type'    => 'VARCHAR2',
-            'length'      => 3500,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 7,
-            'commentaire' => NULL,
-        ],
         'TBL_NAME' => [
             'name'        => 'TBL_NAME',
             'type'        => 'string',
@@ -105,8 +46,8 @@ return [
             'position'    => 8,
             'commentaire' => NULL,
         ],
-        'V1'       => [
-            'name'        => 'V1',
+        'VALUE'       => [
+            'name'        => 'VALUE',
             'type'        => 'string',
             'bdd-type'    => 'VARCHAR2',
             'length'      => 80,
@@ -117,54 +58,6 @@ return [
             'position'    => 9,
             'commentaire' => NULL,
         ],
-        'V2'       => [
-            'name'        => 'V2',
-            'type'        => 'string',
-            'bdd-type'    => 'VARCHAR2',
-            'length'      => 80,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 10,
-            'commentaire' => NULL,
-        ],
-        'V3'       => [
-            'name'        => 'V3',
-            'type'        => 'string',
-            'bdd-type'    => 'VARCHAR2',
-            'length'      => 80,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 11,
-            'commentaire' => NULL,
-        ],
-        'V4'       => [
-            'name'        => 'V4',
-            'type'        => 'string',
-            'bdd-type'    => 'VARCHAR2',
-            'length'      => 80,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 12,
-            'commentaire' => NULL,
-        ],
-        'V5'       => [
-            'name'        => 'V5',
-            'type'        => 'string',
-            'bdd-type'    => 'VARCHAR2',
-            'length'      => 80,
-            'scale'       => NULL,
-            'precision'   => NULL,
-            'nullable'    => TRUE,
-            'default'     => NULL,
-            'position'    => 13,
-            'commentaire' => NULL,
-        ],
     ],
 ];
 
diff --git a/data/ddl/table/TBL_DMEP_LIQUIDATION.php b/data/ddl/table/TBL_DMEP_LIQUIDATION.php
index d0e93e6a10..fefbca9ba1 100644
--- a/data/ddl/table/TBL_DMEP_LIQUIDATION.php
+++ b/data/ddl/table/TBL_DMEP_LIQUIDATION.php
@@ -57,18 +57,6 @@ return [
             'position'    => 4,
             'commentaire' => NULL,
         ],
-        'TO_DELETE'         => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 5,
-            'commentaire' => NULL,
-        ],
         'TYPE_RESSOURCE_ID' => [
             'name'        => 'TYPE_RESSOURCE_ID',
             'type'        => 'int',
diff --git a/data/ddl/table/TBL_DOSSIER.php b/data/ddl/table/TBL_DOSSIER.php
index fcd186d71f..a1ae7ae59b 100644
--- a/data/ddl/table/TBL_DOSSIER.php
+++ b/data/ddl/table/TBL_DOSSIER.php
@@ -69,18 +69,6 @@ return [
             'position'    => 5,
             'commentaire' => '1 Si l\'intervenant a un dossier, 0 sinon',
         ],
-        'TO_DELETE'           => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 6,
-            'commentaire' => NULL,
-        ],
         'VALIDATION_ID'       => [
             'name'        => 'VALIDATION_ID',
             'type'        => 'int',
diff --git a/data/ddl/table/TBL_LIEN.php b/data/ddl/table/TBL_LIEN.php
index a8a652877f..8938edca3f 100644
--- a/data/ddl/table/TBL_LIEN.php
+++ b/data/ddl/table/TBL_LIEN.php
@@ -177,18 +177,6 @@ return [
             'position'    => 14,
             'commentaire' => 'Total de poids des fils',
         ],
-        'TO_DELETE'        => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 15,
-            'commentaire' => NULL,
-        ],
     ],
 ];
 
diff --git a/data/ddl/table/TBL_PAIEMENT.php b/data/ddl/table/TBL_PAIEMENT.php
index f412f8b1a1..6de40af45c 100644
--- a/data/ddl/table/TBL_PAIEMENT.php
+++ b/data/ddl/table/TBL_PAIEMENT.php
@@ -177,18 +177,6 @@ return [
             'position'    => 14,
             'commentaire' => NULL,
         ],
-        'TO_DELETE'                  => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 15,
-            'commentaire' => NULL,
-        ],
     ],
 ];
 
diff --git a/data/ddl/table/TBL_PIECE_JOINTE.php b/data/ddl/table/TBL_PIECE_JOINTE.php
index 9b78324d2d..ff4ab81a54 100644
--- a/data/ddl/table/TBL_PIECE_JOINTE.php
+++ b/data/ddl/table/TBL_PIECE_JOINTE.php
@@ -93,18 +93,6 @@ return [
             'position'    => 7,
             'commentaire' => NULL,
         ],
-        'TO_DELETE'            => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 8,
-            'commentaire' => NULL,
-        ],
         'TYPE_PIECE_JOINTE_ID' => [
             'name'        => 'TYPE_PIECE_JOINTE_ID',
             'type'        => 'int',
diff --git a/data/ddl/table/TBL_PIECE_JOINTE_DEMANDE.php b/data/ddl/table/TBL_PIECE_JOINTE_DEMANDE.php
index f480cb6726..fa67fa36ff 100644
--- a/data/ddl/table/TBL_PIECE_JOINTE_DEMANDE.php
+++ b/data/ddl/table/TBL_PIECE_JOINTE_DEMANDE.php
@@ -28,7 +28,7 @@ return [
             'length'      => 255,
             'scale'       => NULL,
             'precision'   => NULL,
-            'nullable'    => TRUE,
+            'nullable'    => FALSE,
             'default'     => NULL,
             'position'    => 2,
             'commentaire' => NULL,
@@ -81,18 +81,6 @@ return [
             'position'    => 6,
             'commentaire' => NULL,
         ],
-        'TO_DELETE'            => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 7,
-            'commentaire' => NULL,
-        ],
         'TYPE_PIECE_JOINTE_ID' => [
             'name'        => 'TYPE_PIECE_JOINTE_ID',
             'type'        => 'int',
diff --git a/data/ddl/table/TBL_PIECE_JOINTE_FOURNIE.php b/data/ddl/table/TBL_PIECE_JOINTE_FOURNIE.php
index 4478c58b2c..a9a5c56f12 100644
--- a/data/ddl/table/TBL_PIECE_JOINTE_FOURNIE.php
+++ b/data/ddl/table/TBL_PIECE_JOINTE_FOURNIE.php
@@ -28,7 +28,7 @@ return [
             'length'      => 255,
             'scale'       => NULL,
             'precision'   => NULL,
-            'nullable'    => TRUE,
+            'nullable'    => FALSE,
             'default'     => NULL,
             'position'    => 2,
             'commentaire' => NULL,
@@ -117,18 +117,6 @@ return [
             'position'    => 9,
             'commentaire' => NULL,
         ],
-        'TO_DELETE'            => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 10,
-            'commentaire' => NULL,
-        ],
         'TYPE_PIECE_JOINTE_ID' => [
             'name'        => 'TYPE_PIECE_JOINTE_ID',
             'type'        => 'int',
diff --git a/data/ddl/table/TBL_SERVICE.php b/data/ddl/table/TBL_SERVICE.php
index 698796e1e8..a235d52206 100644
--- a/data/ddl/table/TBL_SERVICE.php
+++ b/data/ddl/table/TBL_SERVICE.php
@@ -189,18 +189,6 @@ return [
             'position'    => 15,
             'commentaire' => NULL,
         ],
-        'TO_DELETE'                      => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 16,
-            'commentaire' => NULL,
-        ],
         'TYPE_INTERVENANT_CODE'          => [
             'name'        => 'TYPE_INTERVENANT_CODE',
             'type'        => 'string',
@@ -232,7 +220,7 @@ return [
             'length'      => 15,
             'scale'       => NULL,
             'precision'   => NULL,
-            'nullable'    => TRUE,
+            'nullable'    => FALSE,
             'default'     => NULL,
             'position'    => 19,
             'commentaire' => NULL,
diff --git a/data/ddl/table/TBL_SERVICE_REFERENTIEL.php b/data/ddl/table/TBL_SERVICE_REFERENTIEL.php
index a339506737..4fd2d1f4bf 100644
--- a/data/ddl/table/TBL_SERVICE_REFERENTIEL.php
+++ b/data/ddl/table/TBL_SERVICE_REFERENTIEL.php
@@ -81,18 +81,6 @@ return [
             'position'    => 6,
             'commentaire' => NULL,
         ],
-        'TO_DELETE'              => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 7,
-            'commentaire' => NULL,
-        ],
         'TYPE_VOLUME_HORAIRE_ID' => [
             'name'        => 'TYPE_VOLUME_HORAIRE_ID',
             'type'        => 'int',
diff --git a/data/ddl/table/TBL_SERVICE_SAISIE.php b/data/ddl/table/TBL_SERVICE_SAISIE.php
index 58a0578bbd..b32fd830b0 100644
--- a/data/ddl/table/TBL_SERVICE_SAISIE.php
+++ b/data/ddl/table/TBL_SERVICE_SAISIE.php
@@ -117,18 +117,6 @@ return [
             'position'    => 9,
             'commentaire' => 'Témoin (0 ou 1)',
         ],
-        'TO_DELETE'               => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 10,
-            'commentaire' => NULL,
-        ],
     ],
 ];
 
diff --git a/data/ddl/table/TBL_VALIDATION_ENSEIGNEMENT.php b/data/ddl/table/TBL_VALIDATION_ENSEIGNEMENT.php
index 59232ee574..3cb7bcf099 100644
--- a/data/ddl/table/TBL_VALIDATION_ENSEIGNEMENT.php
+++ b/data/ddl/table/TBL_VALIDATION_ENSEIGNEMENT.php
@@ -81,18 +81,6 @@ return [
             'position'    => 6,
             'commentaire' => NULL,
         ],
-        'TO_DELETE'              => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 7,
-            'commentaire' => NULL,
-        ],
         'TYPE_VOLUME_HORAIRE_ID' => [
             'name'        => 'TYPE_VOLUME_HORAIRE_ID',
             'type'        => 'int',
diff --git a/data/ddl/table/TBL_VALIDATION_REFERENTIEL.php b/data/ddl/table/TBL_VALIDATION_REFERENTIEL.php
index a286501db5..8284f9b449 100644
--- a/data/ddl/table/TBL_VALIDATION_REFERENTIEL.php
+++ b/data/ddl/table/TBL_VALIDATION_REFERENTIEL.php
@@ -81,18 +81,6 @@ return [
             'position'    => 6,
             'commentaire' => NULL,
         ],
-        'TO_DELETE'              => [
-            'name'        => 'TO_DELETE',
-            'type'        => 'bool',
-            'bdd-type'    => 'NUMBER',
-            'length'      => 0,
-            'scale'       => '0',
-            'precision'   => 1,
-            'nullable'    => FALSE,
-            'default'     => '0',
-            'position'    => 7,
-            'commentaire' => NULL,
-        ],
         'TYPE_VOLUME_HORAIRE_ID' => [
             'name'        => 'TYPE_VOLUME_HORAIRE_ID',
             'type'        => 'int',
diff --git a/data/ddl/trigger/F_ELEMENT_MODULATEUR.sql b/data/ddl/trigger/F_ELEMENT_MODULATEUR.sql
index 125d7511fd..1029e91c26 100644
--- a/data/ddl/trigger/F_ELEMENT_MODULATEUR.sql
+++ b/data/ddl/trigger/F_ELEMENT_MODULATEUR.sql
@@ -17,7 +17,7 @@ BEGIN
 
   ) LOOP
 
-    UNICAEN_TBL.DEMANDE_CALCUL('formule', UNICAEN_TBL.make_params('INTERVENANT_ID', p.intervenant_id) );
+    UNICAEN_TBL.DEMANDE_CALCUL('formule', 'INTERVENANT_ID', p.intervenant_id );
 
   END LOOP;
 
diff --git a/data/ddl/trigger/F_ELEMENT_PEDAGOGIQUE.sql b/data/ddl/trigger/F_ELEMENT_PEDAGOGIQUE.sql
index c47a6bb2cc..bab429a2cc 100644
--- a/data/ddl/trigger/F_ELEMENT_PEDAGOGIQUE.sql
+++ b/data/ddl/trigger/F_ELEMENT_PEDAGOGIQUE.sql
@@ -11,6 +11,6 @@ CREATE OR REPLACE TRIGGER "F_ELEMENT_PEDAGOGIQUE"
     WHERE (s.element_pedagogique_id = :NEW.id
     OR s.element_pedagogique_id     = :OLD.id)
     AND s.histo_destruction IS NULL
-    ) LOOP UNICAEN_TBL.DEMANDE_CALCUL('formule', UNICAEN_TBL.make_params('INTERVENANT_ID', p.intervenant_id) );
+    ) LOOP UNICAEN_TBL.DEMANDE_CALCUL('formule', 'INTERVENANT_ID', p.intervenant_id );
 END LOOP;
 END;
\ No newline at end of file
diff --git a/data/ddl/trigger/F_INTERVENANT.sql b/data/ddl/trigger/F_INTERVENANT.sql
index e5703958c2..b4cfb1bf86 100644
--- a/data/ddl/trigger/F_INTERVENANT.sql
+++ b/data/ddl/trigger/F_INTERVENANT.sql
@@ -16,7 +16,7 @@ CREATE OR REPLACE TRIGGER "F_INTERVENANT"
 
   ) LOOP
 
-    UNICAEN_TBL.DEMANDE_CALCUL('formule', UNICAEN_TBL.make_params('INTERVENANT_ID', p.intervenant_id) );
+    UNICAEN_TBL.DEMANDE_CALCUL('formule', 'INTERVENANT_ID', p.intervenant_id );
 
   END LOOP;
 
diff --git a/data/ddl/trigger/F_MODIF_SERVICE_DU.sql b/data/ddl/trigger/F_MODIF_SERVICE_DU.sql
index 7a43abd508..d47880f075 100644
--- a/data/ddl/trigger/F_MODIF_SERVICE_DU.sql
+++ b/data/ddl/trigger/F_MODIF_SERVICE_DU.sql
@@ -6,10 +6,10 @@ BEGIN
   IF NOT UNICAEN_TBL.ACTIV_TRIGGERS THEN RETURN; END IF;
 
   IF DELETING OR UPDATING THEN
-    UNICAEN_TBL.DEMANDE_CALCUL('formule', UNICAEN_TBL.make_params('INTERVENANT_ID', :OLD.intervenant_id) );
+    UNICAEN_TBL.DEMANDE_CALCUL('formule', 'INTERVENANT_ID', :OLD.intervenant_id );
   END IF;
   IF INSERTING OR UPDATING THEN
-    UNICAEN_TBL.DEMANDE_CALCUL('formule', UNICAEN_TBL.make_params('INTERVENANT_ID', :NEW.intervenant_id) );
+    UNICAEN_TBL.DEMANDE_CALCUL('formule', 'INTERVENANT_ID', :NEW.intervenant_id );
   END IF;
 
 END;
\ No newline at end of file
diff --git a/data/ddl/trigger/F_MODULATEUR.sql b/data/ddl/trigger/F_MODULATEUR.sql
index 70c3e19e8d..bbdae3ae77 100644
--- a/data/ddl/trigger/F_MODULATEUR.sql
+++ b/data/ddl/trigger/F_MODULATEUR.sql
@@ -20,7 +20,7 @@ BEGIN
 
   ) LOOP
 
-    UNICAEN_TBL.DEMANDE_CALCUL('formule', UNICAEN_TBL.make_params('INTERVENANT_ID', p.intervenant_id) );
+    UNICAEN_TBL.DEMANDE_CALCUL('formule', 'INTERVENANT_ID', p.intervenant_id );
 
   END LOOP;
 END;
\ No newline at end of file
diff --git a/data/ddl/trigger/F_MOTIF_MODIFICATION_SERVICE.sql b/data/ddl/trigger/F_MOTIF_MODIFICATION_SERVICE.sql
index 88b0ba898b..280fefd211 100644
--- a/data/ddl/trigger/F_MOTIF_MODIFICATION_SERVICE.sql
+++ b/data/ddl/trigger/F_MOTIF_MODIFICATION_SERVICE.sql
@@ -17,7 +17,7 @@ BEGIN
 
   ) LOOP
 
-    UNICAEN_TBL.DEMANDE_CALCUL('formule', UNICAEN_TBL.make_params('INTERVENANT_ID', p.intervenant_id) );
+    UNICAEN_TBL.DEMANDE_CALCUL('formule', 'INTERVENANT_ID', p.intervenant_id );
 
   END LOOP;
 
diff --git a/data/ddl/trigger/F_STATUT_INTERVENANT.sql b/data/ddl/trigger/F_STATUT_INTERVENANT.sql
index c4275d3a9c..132e780304 100644
--- a/data/ddl/trigger/F_STATUT_INTERVENANT.sql
+++ b/data/ddl/trigger/F_STATUT_INTERVENANT.sql
@@ -23,7 +23,7 @@ BEGIN return; /* Désactivation du trigger... */
 
   ) LOOP
 
-    UNICAEN_TBL.DEMANDE_CALCUL('formule', UNICAEN_TBL.make_params('INTERVENANT_ID', p.intervenant_id) );
+    UNICAEN_TBL.DEMANDE_CALCUL('formule', 'INTERVENANT_ID', p.intervenant_id);
 
   END LOOP;
 END;
\ No newline at end of file
diff --git a/data/ddl/trigger/F_TYPE_INTERVENTION.sql b/data/ddl/trigger/F_TYPE_INTERVENTION.sql
index 92d89f7815..a41129027c 100644
--- a/data/ddl/trigger/F_TYPE_INTERVENTION.sql
+++ b/data/ddl/trigger/F_TYPE_INTERVENTION.sql
@@ -21,7 +21,7 @@ BEGIN
 
   ) LOOP
 
-    UNICAEN_TBL.DEMANDE_CALCUL('formule', UNICAEN_TBL.make_params('INTERVENANT_ID', p.intervenant_id) );
+    UNICAEN_TBL.DEMANDE_CALCUL('formule', 'INTERVENANT_ID', p.intervenant_id );
 
   END LOOP;
 END;
\ No newline at end of file
diff --git a/data/ddl/trigger/T_CRG_ETAPE.sql b/data/ddl/trigger/T_CRG_ETAPE.sql
index 410537c5f6..2a9cb28699 100644
--- a/data/ddl/trigger/T_CRG_ETAPE.sql
+++ b/data/ddl/trigger/T_CRG_ETAPE.sql
@@ -5,9 +5,11 @@ CREATE OR REPLACE TRIGGER "T_CRG_ETAPE"
   IF NOT UNICAEN_TBL.ACTIV_TRIGGERS THEN RETURN; END IF;
 
   IF DELETING THEN
-    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', 'etape_id = ' || :OLD.id || ' OR etape_ens_id = ' || :OLD.id );
+    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', 'etape_id', :OLD.id );
+    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', 'etape_ens_id', :OLD.id );
   ELSE
-    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', 'etape_id = ' || :NEW.id || ' OR etape_ens_id = ' || :NEW.id );
+    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', 'etape_id', :NEW.id );
+    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', 'etape_ens_id', :NEW.id );
   END IF;
 
 END;
\ No newline at end of file
diff --git a/data/ddl/trigger/T_CRG_SCENARIO_NOEUD.sql b/data/ddl/trigger/T_CRG_SCENARIO_NOEUD.sql
index 97be5c149e..994fb0deb7 100644
--- a/data/ddl/trigger/T_CRG_SCENARIO_NOEUD.sql
+++ b/data/ddl/trigger/T_CRG_SCENARIO_NOEUD.sql
@@ -5,9 +5,9 @@ CREATE OR REPLACE TRIGGER "T_CRG_SCENARIO_NOEUD"
   IF NOT UNICAEN_TBL.ACTIV_TRIGGERS THEN RETURN; END IF;
 
   IF DELETING THEN
-    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', unicaen_tbl.make_params('noeud_id', :OLD.noeud_id, 'scenario_id', :OLD.scenario_id ) );
+    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', 'noeud_id', :OLD.noeud_id );
   ELSE
-    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', unicaen_tbl.make_params('noeud_id', :NEW.noeud_id, 'scenario_id', :NEW.scenario_id ) );
+    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', 'noeud_id', :NEW.noeud_id );
   END IF;
 
 END;
\ No newline at end of file
diff --git a/data/ddl/trigger/T_CRG_SCENARIO_NOEUD_EFFECTIF.sql b/data/ddl/trigger/T_CRG_SCENARIO_NOEUD_EFFECTIF.sql
index 986b94ae64..d7d04611c4 100644
--- a/data/ddl/trigger/T_CRG_SCENARIO_NOEUD_EFFECTIF.sql
+++ b/data/ddl/trigger/T_CRG_SCENARIO_NOEUD_EFFECTIF.sql
@@ -17,9 +17,9 @@ CREATE OR REPLACE TRIGGER "T_CRG_SCENARIO_NOEUD_EFFECTIF"
   ) LOOP
 
     IF p.etape_id IS NOT NULL THEN
-      UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', unicaen_tbl.make_params('etape_ens_id', p.etape_id, 'scenario_id', p.scenario_id ) );
+      UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', 'etape_ens_id', p.etape_id );
     END IF;
-    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', unicaen_tbl.make_params('noeud_id', p.noeud_id, 'scenario_id', p.scenario_id ) );
+    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', 'noeud_id', p.noeud_id );
 
   END LOOP;
 
diff --git a/data/ddl/trigger/T_CRG_SCENARIO_NOEUD_SEUIL.sql b/data/ddl/trigger/T_CRG_SCENARIO_NOEUD_SEUIL.sql
index 6958b539db..d5c01814f7 100644
--- a/data/ddl/trigger/T_CRG_SCENARIO_NOEUD_SEUIL.sql
+++ b/data/ddl/trigger/T_CRG_SCENARIO_NOEUD_SEUIL.sql
@@ -17,9 +17,9 @@ CREATE OR REPLACE TRIGGER "T_CRG_SCENARIO_NOEUD_SEUIL"
   ) LOOP
 
     IF p.etape_id IS NOT NULL THEN
-      UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', unicaen_tbl.make_params('etape_ens_id', p.etape_id, 'scenario_id', p.scenario_id ) );
+      UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', 'etape_ens_id', p.etape_id );
     END IF;
-    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', unicaen_tbl.make_params('noeud_id', p.noeud_id, 'scenario_id', p.scenario_id ) );
+    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', 'noeud_id', p.noeud_id );
 
   END LOOP;
 
diff --git a/data/ddl/trigger/T_CRG_VOLUME_HORAIRE_ENS.sql b/data/ddl/trigger/T_CRG_VOLUME_HORAIRE_ENS.sql
index d37ce2ad7e..f0ce213c3f 100644
--- a/data/ddl/trigger/T_CRG_VOLUME_HORAIRE_ENS.sql
+++ b/data/ddl/trigger/T_CRG_VOLUME_HORAIRE_ENS.sql
@@ -5,9 +5,9 @@ CREATE OR REPLACE TRIGGER "T_CRG_VOLUME_HORAIRE_ENS"
   IF NOT UNICAEN_TBL.ACTIV_TRIGGERS THEN RETURN; END IF;
 
   IF DELETING THEN
-    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', unicaen_tbl.make_params('element_pedagogique_id', :OLD.element_pedagogique_id ) );
+    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', 'element_pedagogique_id', :OLD.element_pedagogique_id );
   ELSE
-    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', unicaen_tbl.make_params('element_pedagogique_id', :NEW.element_pedagogique_id ) );
+    UNICAEN_TBL.DEMANDE_CALCUL( 'chargens', 'element_pedagogique_id', :NEW.element_pedagogique_id );
   END IF;
 
 END;
\ No newline at end of file
diff --git a/data/ddl/unique-constraint/TBL_AGREMENT_UN.php b/data/ddl/unique-constraint/TBL_AGREMENT_UN.php
index 0269a91665..ca57eb93cd 100644
--- a/data/ddl/unique-constraint/TBL_AGREMENT_UN.php
+++ b/data/ddl/unique-constraint/TBL_AGREMENT_UN.php
@@ -10,7 +10,6 @@ return [
         'TYPE_AGREMENT_ID',
         'INTERVENANT_ID',
         'STRUCTURE_ID',
-        'TO_DELETE',
         'ANNEE_AGREMENT',
     ],
 ];
diff --git a/data/ddl/unique-constraint/TBL_CHARGENS_SEUILS_DEF__UN.php b/data/ddl/unique-constraint/TBL_CHARGENS_SEUILS_DEF_UN.php
similarity index 72%
rename from data/ddl/unique-constraint/TBL_CHARGENS_SEUILS_DEF__UN.php
rename to data/ddl/unique-constraint/TBL_CHARGENS_SEUILS_DEF_UN.php
index a0aecddf59..f7749bd3d7 100644
--- a/data/ddl/unique-constraint/TBL_CHARGENS_SEUILS_DEF__UN.php
+++ b/data/ddl/unique-constraint/TBL_CHARGENS_SEUILS_DEF_UN.php
@@ -3,9 +3,9 @@
 //@formatter:off
 
 return [
-    'name'    => 'TBL_CHARGENS_SEUILS_DEF__UN',
+    'name'    => 'TBL_CHARGENS_SEUILS_DEF_UN',
     'table'   => 'TBL_CHARGENS_SEUILS_DEF',
-    'index'   => 'TBL_CHARGENS_SEUILS_DEF__UN',
+    'index'   => 'TBL_CHARGENS_SEUILS_DEF_UN',
     'columns' => [
         'SCENARIO_ID',
         'TYPE_INTERVENTION_ID',
diff --git a/data/ddl/unique-constraint/TBL_CHARGENS__UN.php b/data/ddl/unique-constraint/TBL_CHARGENS_UN.php
similarity index 83%
rename from data/ddl/unique-constraint/TBL_CHARGENS__UN.php
rename to data/ddl/unique-constraint/TBL_CHARGENS_UN.php
index fad3d5aeb5..40f861497f 100644
--- a/data/ddl/unique-constraint/TBL_CHARGENS__UN.php
+++ b/data/ddl/unique-constraint/TBL_CHARGENS_UN.php
@@ -3,9 +3,9 @@
 //@formatter:off
 
 return [
-    'name'    => 'TBL_CHARGENS__UN',
+    'name'    => 'TBL_CHARGENS_UN',
     'table'   => 'TBL_CHARGENS',
-    'index'   => 'TBL_CHARGENS__UN',
+    'index'   => 'TBL_CHARGENS_UN',
     'columns' => [
         'ANNEE_ID',
         'NOEUD_ID',
diff --git a/data/ddl/unique-constraint/TBL_CLOTURE_REALISE_UN.php b/data/ddl/unique-constraint/TBL_CLOTURE_REALISE_UN.php
index 9e03c22419..62208320b5 100644
--- a/data/ddl/unique-constraint/TBL_CLOTURE_REALISE_UN.php
+++ b/data/ddl/unique-constraint/TBL_CLOTURE_REALISE_UN.php
@@ -5,10 +5,9 @@
 return [
     'name'    => 'TBL_CLOTURE_REALISE_UN',
     'table'   => 'TBL_CLOTURE_REALISE',
-    'index'   => 'TBL_CLOTURE_REALISE_UN',
+    'index'   => 'TBL_CLO_REAL_INTERVENANT_FK',
     'columns' => [
         'INTERVENANT_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/unique-constraint/TBL_CONTRAT_UN.php b/data/ddl/unique-constraint/TBL_CONTRAT_UN.php
index 58f2296271..26ec38919a 100644
--- a/data/ddl/unique-constraint/TBL_CONTRAT_UN.php
+++ b/data/ddl/unique-constraint/TBL_CONTRAT_UN.php
@@ -9,7 +9,6 @@ return [
     'columns' => [
         'INTERVENANT_ID',
         'STRUCTURE_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/unique-constraint/TBL_DMEP_LIQUIDATION_UN.php b/data/ddl/unique-constraint/TBL_DMEP_LIQUIDATION_UN.php
index c3d53f59db..eb04d56f4f 100644
--- a/data/ddl/unique-constraint/TBL_DMEP_LIQUIDATION_UN.php
+++ b/data/ddl/unique-constraint/TBL_DMEP_LIQUIDATION_UN.php
@@ -10,7 +10,6 @@ return [
         'ANNEE_ID',
         'TYPE_RESSOURCE_ID',
         'STRUCTURE_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/unique-constraint/TBL_DOSSIER_UN.php b/data/ddl/unique-constraint/TBL_DOSSIER_UN.php
index 61a626019d..fc1658b6df 100644
--- a/data/ddl/unique-constraint/TBL_DOSSIER_UN.php
+++ b/data/ddl/unique-constraint/TBL_DOSSIER_UN.php
@@ -5,10 +5,9 @@
 return [
     'name'    => 'TBL_DOSSIER_UN',
     'table'   => 'TBL_DOSSIER',
-    'index'   => 'TBL_DOSSIER_UN',
+    'index'   => 'TBL_DOSSIER_INTERVENANT_FK',
     'columns' => [
         'INTERVENANT_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/unique-constraint/TBL_PAIEMENT_UN.php b/data/ddl/unique-constraint/TBL_PAIEMENT_UN.php
index 39104ef2ca..720c29aa09 100644
--- a/data/ddl/unique-constraint/TBL_PAIEMENT_UN.php
+++ b/data/ddl/unique-constraint/TBL_PAIEMENT_UN.php
@@ -8,7 +8,6 @@ return [
     'index'   => 'TBL_PAIEMENT_UN',
     'columns' => [
         'INTERVENANT_ID',
-        'TO_DELETE',
         'MISE_EN_PAIEMENT_ID',
         'FORMULE_RES_SERVICE_ID',
         'FORMULE_RES_SERVICE_REF_ID',
diff --git a/data/ddl/unique-constraint/TBL_PJD_UN.php b/data/ddl/unique-constraint/TBL_PIECE_JOINTE_DEMANDE_UN.php
similarity index 65%
rename from data/ddl/unique-constraint/TBL_PJD_UN.php
rename to data/ddl/unique-constraint/TBL_PIECE_JOINTE_DEMANDE_UN.php
index 4cc1370271..5771c23c7d 100644
--- a/data/ddl/unique-constraint/TBL_PJD_UN.php
+++ b/data/ddl/unique-constraint/TBL_PIECE_JOINTE_DEMANDE_UN.php
@@ -3,13 +3,12 @@
 //@formatter:off
 
 return [
-    'name'    => 'TBL_PJD_UN',
+    'name'    => 'TBL_PIECE_JOINTE_DEMANDE_UN',
     'table'   => 'TBL_PIECE_JOINTE_DEMANDE',
-    'index'   => 'TBL_PJD_UN',
+    'index'   => 'TBL_PIECE_JOINTE_DEMANDE_UN',
     'columns' => [
         'TYPE_PIECE_JOINTE_ID',
         'INTERVENANT_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/unique-constraint/TBL_PJF_UN.php b/data/ddl/unique-constraint/TBL_PIECE_JOINTE_FOURNIE_UN.php
similarity index 70%
rename from data/ddl/unique-constraint/TBL_PJF_UN.php
rename to data/ddl/unique-constraint/TBL_PIECE_JOINTE_FOURNIE_UN.php
index aadf418f29..609e57d8f4 100644
--- a/data/ddl/unique-constraint/TBL_PJF_UN.php
+++ b/data/ddl/unique-constraint/TBL_PIECE_JOINTE_FOURNIE_UN.php
@@ -3,9 +3,9 @@
 //@formatter:off
 
 return [
-    'name'    => 'TBL_PJF_UN',
+    'name'    => 'TBL_PIECE_JOINTE_FOURNIE_UN',
     'table'   => 'TBL_PIECE_JOINTE_FOURNIE',
-    'index'   => 'TBL_PJF_UN',
+    'index'   => 'TBL_PIECE_JOINTE_FOURNIE_UN',
     'columns' => [
         'TYPE_PIECE_JOINTE_ID',
         'INTERVENANT_ID',
diff --git a/data/ddl/unique-constraint/TBL_PIECE_JOINTE__UN.php b/data/ddl/unique-constraint/TBL_PIECE_JOINTE_UN.php
similarity index 62%
rename from data/ddl/unique-constraint/TBL_PIECE_JOINTE__UN.php
rename to data/ddl/unique-constraint/TBL_PIECE_JOINTE_UN.php
index 3eb74e3b52..f21450f1c7 100644
--- a/data/ddl/unique-constraint/TBL_PIECE_JOINTE__UN.php
+++ b/data/ddl/unique-constraint/TBL_PIECE_JOINTE_UN.php
@@ -3,13 +3,12 @@
 //@formatter:off
 
 return [
-    'name'    => 'TBL_PIECE_JOINTE__UN',
+    'name'    => 'TBL_PIECE_JOINTE_UN',
     'table'   => 'TBL_PIECE_JOINTE',
-    'index'   => 'TBL_PIECE_JOINTE__UN',
+    'index'   => 'TBL_PIECE_JOINTE_UN',
     'columns' => [
         'TYPE_PIECE_JOINTE_ID',
         'INTERVENANT_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/unique-constraint/TBL_SERVICE_REFERENTIEL_UN.php b/data/ddl/unique-constraint/TBL_SERVICE_REFERENTIEL_UN.php
index 2718a25448..0c47a44e40 100644
--- a/data/ddl/unique-constraint/TBL_SERVICE_REFERENTIEL_UN.php
+++ b/data/ddl/unique-constraint/TBL_SERVICE_REFERENTIEL_UN.php
@@ -10,7 +10,6 @@ return [
         'INTERVENANT_ID',
         'TYPE_VOLUME_HORAIRE_ID',
         'STRUCTURE_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/unique-constraint/TBL_SERVICE_SAISIE_UN.php b/data/ddl/unique-constraint/TBL_SERVICE_SAISIE_UN.php
index c8481f31e0..6cd40bd079 100644
--- a/data/ddl/unique-constraint/TBL_SERVICE_SAISIE_UN.php
+++ b/data/ddl/unique-constraint/TBL_SERVICE_SAISIE_UN.php
@@ -5,10 +5,9 @@
 return [
     'name'    => 'TBL_SERVICE_SAISIE_UN',
     'table'   => 'TBL_SERVICE_SAISIE',
-    'index'   => 'TBL_SERVICE_SAISIE_UN',
+    'index'   => 'TBL_SRV_SAISIE_INTERVENANT_FK',
     'columns' => [
         'INTERVENANT_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/unique-constraint/TBL_SERVICE_UN.php b/data/ddl/unique-constraint/TBL_SERVICE_UN.php
index 900cc3a694..1a37de92ae 100644
--- a/data/ddl/unique-constraint/TBL_SERVICE_UN.php
+++ b/data/ddl/unique-constraint/TBL_SERVICE_UN.php
@@ -9,7 +9,6 @@ return [
     'columns' => [
         'SERVICE_ID',
         'TYPE_VOLUME_HORAIRE_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/unique-constraint/TBL_VALIDATION_ENSEIGNEMENT_UN.php b/data/ddl/unique-constraint/TBL_VALIDATION_ENSEIGNEMENT_UN.php
index d4817e70d9..24b25ea609 100644
--- a/data/ddl/unique-constraint/TBL_VALIDATION_ENSEIGNEMENT_UN.php
+++ b/data/ddl/unique-constraint/TBL_VALIDATION_ENSEIGNEMENT_UN.php
@@ -13,7 +13,6 @@ return [
         'SERVICE_ID',
         'VOLUME_HORAIRE_ID',
         'VALIDATION_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl/unique-constraint/TBL_VALIDATION_REFERENTIEL__UN.php b/data/ddl/unique-constraint/TBL_VALIDATION_REFERENTIEL_UN.php
similarity index 71%
rename from data/ddl/unique-constraint/TBL_VALIDATION_REFERENTIEL__UN.php
rename to data/ddl/unique-constraint/TBL_VALIDATION_REFERENTIEL_UN.php
index b2ecf7e462..211d1736f1 100644
--- a/data/ddl/unique-constraint/TBL_VALIDATION_REFERENTIEL__UN.php
+++ b/data/ddl/unique-constraint/TBL_VALIDATION_REFERENTIEL_UN.php
@@ -3,9 +3,9 @@
 //@formatter:off
 
 return [
-    'name'    => 'TBL_VALIDATION_REFERENTIEL__UN',
+    'name'    => 'TBL_VALIDATION_REFERENTIEL_UN',
     'table'   => 'TBL_VALIDATION_REFERENTIEL',
-    'index'   => 'TBL_VALIDATION_REFERENTIEL__UN',
+    'index'   => 'TBL_VALIDATION_REFERENTIEL_UN',
     'columns' => [
         'INTERVENANT_ID',
         'STRUCTURE_ID',
@@ -13,7 +13,6 @@ return [
         'SERVICE_REFERENTIEL_ID',
         'VOLUME_HORAIRE_REF_ID',
         'VALIDATION_ID',
-        'TO_DELETE',
     ],
 ];
 
diff --git a/data/ddl_config.php b/data/ddl_config.php
index 6cc06701e3..709e848e88 100644
--- a/data/ddl_config.php
+++ b/data/ddl_config.php
@@ -18,7 +18,7 @@ return [
 
     ]],
     'trigger'           => ['includes' => [
-
+        'F_CONTRAT', 'F_CONTRAT_S',
     ]],
     'sequence'          => ['includes' => [
 
diff --git a/data/nomenclatures.php b/data/nomenclatures.php
index 34e539a25a..49f0f04b09 100644
--- a/data/nomenclatures.php
+++ b/data/nomenclatures.php
@@ -489,7 +489,7 @@ return [
             'TABLE_NAME'         => 'TBL_CHARGENS_SEUILS_DEF',
             'VIEW_NAME'          => 'V_TBL_CHARGENS_SEUILS_DEF',
             'SEQUENCE_NAME'      => null,
-            'CONSTRAINT_NAME'    => 'TBL_CHARGENS_SEUILS_DEF__UN',
+            'CONSTRAINT_NAME'    => 'TBL_CHARGENS_SEUILS_DEF_UN',
             'CUSTOM_CALCUL_PROC' => null,
             'ORDRE'              => 1,
             'FEUILLE_DE_ROUTE'   => false,
@@ -503,13 +503,14 @@ return [
             'CUSTOM_CALCUL_PROC' => 'OSE_FORMULE.CALCULER_TBL',
             'ORDRE'              => 1,
             'FEUILLE_DE_ROUTE'   => true,
+            'PARAMS'             => 'INTERVENANT_ID,ANNEE_ID',
         ],
         [
             'TBL_NAME'           => 'chargens',
             'TABLE_NAME'         => 'TBL_CHARGENS',
             'VIEW_NAME'          => 'V_TBL_CHARGENS',
             'SEQUENCE_NAME'      => null,
-            'CONSTRAINT_NAME'    => 'TBL_CHARGENS__UN',
+            'CONSTRAINT_NAME'    => 'TBL_CHARGENS_UN',
             'CUSTOM_CALCUL_PROC' => null,
             'ORDRE'              => 1,
             'FEUILLE_DE_ROUTE'   => false,
@@ -519,7 +520,7 @@ return [
             'TABLE_NAME'         => 'TBL_DMEP_LIQUIDATION',
             'VIEW_NAME'          => 'V_TBL_DMEP_LIQUIDATION',
             'SEQUENCE_NAME'      => null,
-            'CONSTRAINT_NAME'    => 'TBL_DMEP_LIQUIDATION__UN',
+            'CONSTRAINT_NAME'    => 'TBL_DMEP_LIQUIDATION_UN',
             'CUSTOM_CALCUL_PROC' => null,
             'ORDRE'              => 1,
             'FEUILLE_DE_ROUTE'   => false,
@@ -529,7 +530,7 @@ return [
             'TABLE_NAME'         => 'TBL_PIECE_JOINTE_DEMANDE',
             'VIEW_NAME'          => 'V_TBL_PIECE_JOINTE_DEMANDE',
             'SEQUENCE_NAME'      => null,
-            'CONSTRAINT_NAME'    => 'TBL_PIECE_JOINTE_DEMANDE__UN',
+            'CONSTRAINT_NAME'    => 'TBL_PIECE_JOINTE_DEMANDE_UN',
             'CUSTOM_CALCUL_PROC' => null,
             'ORDRE'              => 2,
             'FEUILLE_DE_ROUTE'   => true,
@@ -539,7 +540,7 @@ return [
             'TABLE_NAME'         => 'TBL_PIECE_JOINTE_FOURNIE',
             'VIEW_NAME'          => 'V_TBL_PIECE_JOINTE_FOURNIE',
             'SEQUENCE_NAME'      => null,
-            'CONSTRAINT_NAME'    => 'TBL_PIECE_JOINTE_FOURNIE__UN',
+            'CONSTRAINT_NAME'    => 'TBL_PIECE_JOINTE_FOURNIE_UN',
             'CUSTOM_CALCUL_PROC' => null,
             'ORDRE'              => 3,
             'FEUILLE_DE_ROUTE'   => true,
@@ -549,7 +550,7 @@ return [
             'TABLE_NAME'         => 'TBL_AGREMENT',
             'VIEW_NAME'          => 'V_TBL_AGREMENT',
             'SEQUENCE_NAME'      => null,
-            'CONSTRAINT_NAME'    => 'TBL_AGREMENT__UN',
+            'CONSTRAINT_NAME'    => 'TBL_AGREMENT_UN',
             'CUSTOM_CALCUL_PROC' => null,
             'ORDRE'              => 4,
             'FEUILLE_DE_ROUTE'   => true,
@@ -559,7 +560,7 @@ return [
             'TABLE_NAME'         => 'TBL_CLOTURE_REALISE',
             'VIEW_NAME'          => 'V_TBL_CLOTURE_REALISE',
             'SEQUENCE_NAME'      => null,
-            'CONSTRAINT_NAME'    => 'TBL_CLOTURE_REALISE__UN',
+            'CONSTRAINT_NAME'    => 'TBL_CLOTURE_REALISE_UN',
             'CUSTOM_CALCUL_PROC' => null,
             'ORDRE'              => 5,
             'FEUILLE_DE_ROUTE'   => true,
@@ -569,7 +570,7 @@ return [
             'TABLE_NAME'         => 'TBL_CONTRAT',
             'VIEW_NAME'          => 'V_TBL_CONTRAT',
             'SEQUENCE_NAME'      => null,
-            'CONSTRAINT_NAME'    => 'TBL_CONTRAT__UN',
+            'CONSTRAINT_NAME'    => 'TBL_CONTRAT_UN',
             'CUSTOM_CALCUL_PROC' => null,
             'ORDRE'              => 6,
             'FEUILLE_DE_ROUTE'   => true,
@@ -579,7 +580,7 @@ return [
             'TABLE_NAME'         => 'TBL_DOSSIER',
             'VIEW_NAME'          => 'V_TBL_DOSSIER',
             'SEQUENCE_NAME'      => null,
-            'CONSTRAINT_NAME'    => 'TBL_DOSSIER__UN',
+            'CONSTRAINT_NAME'    => 'TBL_DOSSIER_UN',
             'CUSTOM_CALCUL_PROC' => null,
             'ORDRE'              => 7,
             'FEUILLE_DE_ROUTE'   => true,
@@ -589,7 +590,7 @@ return [
             'TABLE_NAME'         => 'TBL_PAIEMENT',
             'VIEW_NAME'          => 'V_TBL_PAIEMENT',
             'SEQUENCE_NAME'      => null,
-            'CONSTRAINT_NAME'    => 'TBL_PAIEMENT__UN',
+            'CONSTRAINT_NAME'    => 'TBL_PAIEMENT_UN',
             'CUSTOM_CALCUL_PROC' => null,
             'ORDRE'              => 8,
             'FEUILLE_DE_ROUTE'   => true,
@@ -599,7 +600,7 @@ return [
             'TABLE_NAME'         => 'TBL_PIECE_JOINTE',
             'VIEW_NAME'          => 'V_TBL_PIECE_JOINTE',
             'SEQUENCE_NAME'      => null,
-            'CONSTRAINT_NAME'    => 'TBL_PIECE_JOINTE__UN',
+            'CONSTRAINT_NAME'    => 'TBL_PIECE_JOINTE_UN',
             'CUSTOM_CALCUL_PROC' => null,
             'ORDRE'              => 9,
             'FEUILLE_DE_ROUTE'   => true,
@@ -609,7 +610,7 @@ return [
             'TABLE_NAME'         => 'TBL_SERVICE_SAISIE',
             'VIEW_NAME'          => 'V_TBL_SERVICE_SAISIE',
             'SEQUENCE_NAME'      => null,
-            'CONSTRAINT_NAME'    => 'TBL_SERVICE_SAISIE__UN',
+            'CONSTRAINT_NAME'    => 'TBL_SERVICE_SAISIE_UN',
             'CUSTOM_CALCUL_PROC' => null,
             'ORDRE'              => 10,
             'FEUILLE_DE_ROUTE'   => true,
@@ -619,7 +620,7 @@ return [
             'TABLE_NAME'         => 'TBL_SERVICE_REFERENTIEL',
             'VIEW_NAME'          => 'V_TBL_SERVICE_REFERENTIEL',
             'SEQUENCE_NAME'      => null,
-            'CONSTRAINT_NAME'    => 'TBL_SERVICE_REFERENTIEL__UN',
+            'CONSTRAINT_NAME'    => 'TBL_SERVICE_REFERENTIEL_UN',
             'CUSTOM_CALCUL_PROC' => null,
             'ORDRE'              => 11,
             'FEUILLE_DE_ROUTE'   => true,
@@ -639,7 +640,7 @@ return [
             'TABLE_NAME'         => 'TBL_VALIDATION_REFERENTIEL',
             'VIEW_NAME'          => 'V_TBL_VALIDATION_REFERENTIEL',
             'SEQUENCE_NAME'      => null,
-            'CONSTRAINT_NAME'    => 'TBL_VALIDATION_REFERENTIEL__UN',
+            'CONSTRAINT_NAME'    => 'TBL_VALIDATION_REFERENTIEL_UN',
             'CUSTOM_CALCUL_PROC' => null,
             'ORDRE'              => 13,
             'FEUILLE_DE_ROUTE'   => true,
@@ -649,7 +650,7 @@ return [
             'TABLE_NAME'         => 'TBL_SERVICE',
             'VIEW_NAME'          => 'V_TBL_SERVICE',
             'SEQUENCE_NAME'      => null,
-            'CONSTRAINT_NAME'    => 'TBL_SERVICE__UN',
+            'CONSTRAINT_NAME'    => 'TBL_SERVICE_UN',
             'CUSTOM_CALCUL_PROC' => null,
             'ORDRE'              => 14,
             'FEUILLE_DE_ROUTE'   => true,
@@ -663,6 +664,7 @@ return [
             'CUSTOM_CALCUL_PROC' => 'OSE_WORKFLOW.CALCULER_TBL',
             'ORDRE'              => 15,
             'FEUILLE_DE_ROUTE'   => true,
+            'PARAMS'             => 'INTERVENANT_ID,ANNEE_ID',
         ],
     ],
 
-- 
GitLab