From f8e5468d15c670a43b27b466b5e0ea832b5ff3d1 Mon Sep 17 00:00:00 2001
From: vmaubert <github@vcmb.dev>
Date: Thu, 20 Jun 2024 11:47:29 +0200
Subject: [PATCH] =?UTF-8?q?feat(etapes):=20fusionner=20les=20=C3=A9tapes?=
 =?UTF-8?q?=20des=20avis=20(#1243)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 package-lock.json                             | 5592 +++++++++++------
 packages/api/package.json                     |    4 +-
 packages/api/src/api/_format/titres-etapes.ts |  135 +
 ...ons-permissions-etapes.test.integration.ts |   18 +-
 packages/api/src/api/graphql/resolvers.ts     |    5 +-
 .../resolvers/_titre-etape-email.test.ts      |    5 +-
 .../graphql/resolvers/_titre-etape-email.ts   |   14 +-
 .../graphql/resolvers/titres-etapes.test.ts   |   34 -
 .../api/graphql/resolvers/titres-etapes.ts    |  518 +-
 .../graphql/schemas/administrations.graphql   |   24 -
 .../api/graphql/schemas/entreprises.graphql   |   25 -
 .../api/src/api/graphql/schemas/index.graphql |   10 -
 .../api/src/api/graphql/schemas/metas.graphql |    4 -
 .../api/graphql/schemas/titres-etapes.graphql |  110 -
 .../src/api/graphql/schemas/titres.graphql    |    5 -
 .../api/graphql/schemas/utilisateurs.graphql  |    1 -
 .../titres-demarches.test.integration.ts      |    3 +-
 .../titres-etapes-creer.test.integration.ts   |  261 -
 ...titres-etapes-modifier.test.integration.ts |  407 --
 .../api/graphql/titres.test.integration.ts    |   41 +-
 .../api/src/api/rest/demarches.queries.ts     |    4 +-
 .../api/rest/demarches.test.integration.ts    |    5 +-
 .../api/rest/entreprises.test.integration.ts  |    3 +-
 .../api/rest/etape-creer.test.integration.ts  |  306 +
 .../rest/etape-modifier.test.integration.ts   |  491 ++
 packages/api/src/api/rest/etapes.queries.ts   |   22 +-
 .../src/api/rest/etapes.test.integration.ts   |  101 +-
 packages/api/src/api/rest/etapes.test.ts      |  137 +-
 packages/api/src/api/rest/etapes.ts           |  675 +-
 packages/api/src/api/rest/express-type.ts     |    2 +-
 packages/api/src/api/rest/fichiers.ts         |   19 +-
 .../api/src/api/rest/perimetre.queries.ts     |    2 +-
 packages/api/src/api/rest/perimetre.ts        |    8 +-
 .../api/src/api/rest/permissions/avis.test.ts |  115 +
 packages/api/src/api/rest/permissions/avis.ts |   43 +
 .../src/api/rest/permissions/etapes.test.ts   |    4 +-
 packages/api/src/api/rest/titre-demande.ts    |    4 +-
 .../api/src/api/rest/titre-heritage.test.ts   |    5 +-
 packages/api/src/api/rest/titres.queries.ts   |   37 +-
 .../src/api/rest/titres.test.integration.ts   |   17 +-
 .../titres-demarches-depot-create.test.ts     |   11 +-
 ...titres-demarches-statut-ids-update.test.ts |    9 +-
 ...pes-administrations-locales-update.test.ts |   15 +-
 ...es-etapes-areas-update.test.integration.ts |    3 +-
 ...-etapes-heritage-contenu-update.queries.ts |    7 +-
 .../titres-etapes-heritage-contenu-update.ts  |    4 +-
 .../titres-etapes-ordre-update.test.ts        |   24 +-
 .../processes/titres-phases-update.test.ts    |   13 +-
 .../__snapshots__/oct.machine.test.ts.snap    |    2 +-
 .../business/rules-demarches/arm/oct.cas.json |    2 +-
 .../rules-demarches/arm/oct.machine.test.ts   |  190 +-
 .../rules-demarches/arm/oct.machine.ts        |   84 +-
 .../arm/ren-pro.machine.test.ts               |    7 +-
 .../rules-demarches/arm/ren-pro.machine.ts    |   70 +-
 .../business/rules-demarches/arm/ren.cas.json |    2 +-
 .../business/rules-demarches/axm/oct.cas.json |    2 +-
 .../rules-demarches/axm/oct.machine.test.ts   |  112 +-
 .../rules-demarches/axm/oct.machine.ts        |  221 +-
 .../business/rules-demarches/axm/pro.cas.json |    2 +-
 .../rules-demarches/axm/pro.machine.test.ts   |    2 +-
 .../rules-demarches/axm/pro.machine.ts        |  194 +-
 .../rules-demarches/machine-common.test.ts    |    7 +-
 .../rules-demarches/machine-common.ts         |    7 +-
 .../rules-demarches/machine-helper.test.ts    |   99 +-
 .../business/rules-demarches/prm/oct.cas.json |    2 +-
 .../rules-demarches/prm/oct.machine.test.ts   |   44 +-
 .../rules-demarches/prm/oct.machine.ts        |  172 +-
 .../business/rules-demarches/pxg/oct.cas.json |    2 +-
 .../rules-demarches/pxg/oct.machine.test.ts   |   12 +-
 .../rules-demarches/pxg/oct.machine.ts        |  143 +-
 .../titre-activites-build.test.ts.snap        |   48 +
 .../rules/titre-activites-build.test.ts       |    3 +-
 .../business/rules/titre-activites-build.ts   |   15 +-
 ...-demarche-annulation-date-fin-find.test.ts |    7 +-
 .../rules/titre-demarche-public-find.test.ts  |   55 +-
 .../titre-demarche-statut-id-find.test.ts     |   52 +-
 .../rules/titre-demarche-statut-id-find.ts    |   19 +-
 .../rules/titre-etape-prop-find.test.ts       |   71 +-
 .../business/rules/titre-phases-find.test.ts  |  317 +-
 .../rules/titre-prop-etape-find.test.ts       |  102 +-
 .../titre-etape-heritage-contenu-find.test.ts |   16 +-
 .../utils/titre-etape-heritage-props-find.ts  |    7 +-
 .../business/utils/titre-etapes-sort.test.ts  |  129 +-
 .../src/business/utils/titre-etapes-sort.ts   |   15 +-
 .../titre-demarche-etat-validate.test.ts      |   45 +-
 .../titre-demarche-etat-validate.ts           |    9 +-
 ...tre-etape-type-and-status-validate.test.ts |    2 +-
 .../titre-etape-type-and-status-validate.ts   |    2 +-
 .../titre-etape-updation-validate.test.ts     |  251 +-
 .../titre-etape-updation-validate.ts          |  115 +-
 .../utils/contenu-dates-check.test.ts         |   13 +-
 .../validations/utils/contenu-dates-check.ts  |   18 +-
 .../utils/contenu-numbers-check.test.ts       |   10 +-
 .../utils/contenu-numbers-check.ts            |   18 +-
 .../utils/heritage-contenu-validate.test.ts   |   76 -
 .../utils/heritage-contenu-validate.ts        |   54 -
 .../validations/utils/props-dates-check.ts    |   30 -
 .../validations/utils/props-numbers-check.ts  |   15 -
 .../src/database/models/_format/id-create.ts  |    8 +-
 .../api/src/database/models/titres-etapes.ts  |    5 +
 .../titres-etapes.test.integration.ts         |    5 +-
 .../titres-demarches.test.integration.ts      |    3 +-
 .../database/queries/titres-etapes.queries.ts |  206 +-
 .../queries/titres-etapes.queries.types.ts    |  109 +
 .../queries/titres.test.integration.ts        |    3 +-
 .../20240610091608_add_avis-documents.ts      |  237 +
 packages/api/src/pg-database.ts               |    7 +-
 packages/api/src/server/rest.ts               |   23 +-
 .../api/src/tools/demarches/tests-creation.ts |    6 +-
 .../api/src/tools/phases/tests-creation.ts    |    3 +-
 packages/api/src/types.ts                     |   83 +-
 .../_utils/administrations-permissions.ts     |  135 +-
 packages/api/tests/_utils/index.ts            |    4 +-
 .../tests/queries/titre-etape-creer.graphql   |    9 -
 .../queries/titre-etape-modifier.graphql      |    9 -
 packages/common/package.json                  |    4 +-
 packages/common/src/date.test.ts              |    3 +
 packages/common/src/date.ts                   |    5 +-
 packages/common/src/demarche.test.ts          |    2 +-
 packages/common/src/demarche.ts               |    5 +-
 packages/common/src/etape-form.ts             |   65 +-
 packages/common/src/etape.ts                  |   76 +-
 packages/common/src/number.ts                 |    4 +-
 packages/common/src/perimetre.ts              |    2 +-
 .../common/src/permissions/documents.test.ts  |   53 -
 packages/common/src/permissions/documents.ts  |   27 -
 .../common/src/permissions/etape-form.test.ts |  498 +-
 packages/common/src/permissions/etape-form.ts |  236 +-
 .../common/src/permissions/sections.test.ts   |   14 -
 packages/common/src/permissions/sections.ts   |   17 -
 .../src/permissions/titres-etapes.test.ts     |  313 +-
 .../common/src/permissions/titres-etapes.ts   |  237 +-
 packages/common/src/rest.ts                   |   21 +-
 packages/common/src/sections.test.ts          |   62 +
 packages/common/src/sections.ts               |   55 +-
 packages/common/src/static/activitesTypes.ts  |   73 +
 .../administrationsTitresTypesEtapesTypes.ts  |  107 +-
 packages/common/src/static/avisTypes.ts       |   67 +
 packages/common/src/static/etapesTypes.ts     |  421 +-
 .../src/static/etapesTypesEtapesStatuts.ts    |  164 +-
 .../documents.ts                              |   32 -
 .../index.test.ts                             |    7 +-
 .../index.ts                                  |  226 +-
 .../sections.test.ts                          |   62 +-
 .../sections.ts                               |   89 +-
 packages/common/src/titres.test.ts            |    9 +-
 packages/common/src/titres.ts                 |    5 +-
 packages/common/src/typescript-tools.ts       |    1 +
 packages/ui/package.json                      |   39 +-
 .../document-type-typeahead.stories.tsx       |   15 -
 ...e-typeahead.stories_snapshots_Default.html |    7 -
 .../_common/document-type-typeahead.tsx       |   53 -
 .../_common/etape-statut.stories.tsx          |   17 +-
 .../etape-statut.stories_snapshots_All.html   |   30 +
 .../src/components/_common/etape-statut.tsx   |   13 +
 .../_common/new-section-element.stories.tsx   |   10 +
 .../_common/new-section.stories.tsx           |    5 +-
 .../_common/new-sections-edit.stories.tsx     |   34 +-
 .../src/components/_ui/typeahead-single.tsx   |   20 +-
 .../components/_ui/typeahead-smart-single.tsx |   52 +
 .../src/components/_ui/typeahead.stories.tsx  |   22 +
 ...eahead.stories_snapshots_SmartSingle.html} |    0
 ...snapshots_SmartSingleWithInitialValue.html |    4 +
 .../components/activite-edition.stories.tsx   |   15 +-
 .../ui/src/components/activite.stories.tsx    |    2 +-
 ...permissions.stories_snapshots_Default.html |  310 +-
 .../demarche/demarche-etape.stories.tsx       |  109 +-
 ...ape.stories_snapshots_AvisDefavorable.html |    3 +-
 ...es_snapshots_AxmDeposableAvecDaeEtAsl.html |    3 +-
 ...snapshots_DemandeArmMecaniseDeposable.html |    3 +-
 ...pshots_DemandeArmMecaniseNonDeposable.html |    3 +-
 ...pshots_DemandeArmNonMecaniseDeposable.html |    3 +-
 ...e.stories_snapshots_DemandeAvecForage.html |    3 +-
 ...ories_snapshots_DemandeAvecGrosseNote.html |    3 +-
 ...apshots_DemandeAvecSeulementPerimetre.html |    3 +-
 ...s_DemandeMultipleEntreprisesDocuments.html |    1 +
 ...-etape.stories_snapshots_DemandeNoMap.html |    1 +
 ...stories_snapshots_DemandeNonDeposable.html |    3 +-
 ...ories_snapshots_DemandeNonSupprimable.html |    3 +-
 ...emarche-etape.stories_snapshots_Depot.html |    1 +
 .../components/demarche/demarche-etape.tsx    |  106 +-
 .../src/components/etape-edition.stories.tsx  |  171 +-
 ...ition.stories_snapshots_AffichageAide.html |    4 +-
 ...ion.stories_snapshots_AxmEnZoneDuSdom.html |    4 +-
 ....stories_snapshots_DemandeArmComplete.html |    1 +
 ...dition.stories_snapshots_Modification.html |    4 +-
 ..._snapshots_ModificationDemandeHeritee.html |    1 +
 packages/ui/src/components/etape-edition.tsx  |    5 +-
 .../etape/add-etape-avis-popup.stories.tsx    |   68 +
 ...apshots_DocumentInitialDejaSauvegarde.html |   93 +
 ...s_snapshots_DocumentInitialTemporaire.html |   93 +
 ...stories_snapshots_SansDocumentInitial.html |   93 +
 .../components/etape/add-etape-avis-popup.tsx |  141 +
 .../etape/add-etape-document-popup.tsx        |    5 +-
 .../etape/autocomplete-entreprise-single.tsx  |    4 +-
 .../src/components/etape/date-type-edit.tsx   |   12 -
 .../src/components/etape/etape-api-client.ts  |  431 +-
 .../etape/etape-avis-edit.stories.tsx         |  104 +
 ...s-edit.stories_snapshots_AvisEnGuyane.html |   97 +
 ...ape-avis-edit.stories_snapshots_Empty.html |    4 +
 ...pe-avis-edit.stories_snapshots_Rempli.html |   81 +
 .../src/components/etape/etape-avis-edit.tsx  |  251 +
 .../components/etape/etape-avis.stories.tsx   |   55 +
 .../etape-avis.stories_snapshots_Empty.html   |    3 +
 ...e-avis.stories_snapshots_NotConnected.html |   45 +
 ....stories_snapshots_UserAdministration.html |   45 +
 ...avis.stories_snapshots_UserEntreprise.html |   45 +
 ...tape-avis.stories_snapshots_UserSuper.html |   45 +
 .../ui/src/components/etape/etape-avis.tsx    |   77 +
 .../etape/etape-documents-edit.stories.tsx    |   28 +-
 .../components/etape/etape-documents-edit.tsx |    9 +-
 .../etape/etape-edit-form.stories.tsx         |   76 +-
 ...e-edit-form.stories_snapshots_Default.html |    1 +
 ...m.stories_snapshots_EtapeModification.html |    1 +
 .../src/components/etape/etape-edit-form.tsx  |  308 +-
 .../etape/fondamentales-edit.stories.tsx      |    4 +-
 .../components/etape/fondamentales-edit.tsx   |    2 +-
 .../ui/src/components/etape/sections-edit.tsx |   15 +-
 packages/ui/src/components/titre.stories.tsx  |   26 +-
 ...stories_snapshots_AbattisKoticaOctroi.html |    3 +
 .../titre.stories_snapshots_BasseManaMod.html |    7 +
 ...tre.stories_snapshots_BonEspoirOctroi.html |    4 +-
 ...ries_snapshots_BonEspoirProlongation2.html |    6 +-
 ...re.stories_snapshots_BonEspoirTravaux.html |    4 +
 ...e.stories_snapshots_ChantepieMutation.html |    2 +
 ...tre.stories_snapshots_ChantepieOctroi.html |    2 +
 ...snapshots_ChantepieOctroiAsEntreprise.html |    2 +
 ...stories_snapshots_CriqueAdolpheOctroi.html |    8 +
 .../titre.stories_snapshots_Full.html         |    1 +
 .../titre.stories_snapshots_Lenoncourt.html   |    2 +
 ...treAvecUneSeuleDemarcheEnConstruction.html |    1 +
 packages/ui/src/components/titre/phase.ts     |    4 +-
 .../src/components/titre/titre-demarche.tsx   |   59 +-
 packages/ui/tsconfig.json                     |    2 +-
 234 files changed, 11361 insertions(+), 8105 deletions(-)
 delete mode 100644 packages/api/src/api/graphql/resolvers/titres-etapes.test.ts
 delete mode 100644 packages/api/src/api/graphql/schemas/administrations.graphql
 delete mode 100644 packages/api/src/api/graphql/titres-etapes-creer.test.integration.ts
 delete mode 100644 packages/api/src/api/graphql/titres-etapes-modifier.test.integration.ts
 create mode 100644 packages/api/src/api/rest/etape-creer.test.integration.ts
 create mode 100644 packages/api/src/api/rest/etape-modifier.test.integration.ts
 create mode 100644 packages/api/src/api/rest/permissions/avis.test.ts
 create mode 100644 packages/api/src/api/rest/permissions/avis.ts
 delete mode 100644 packages/api/src/business/validations/utils/heritage-contenu-validate.test.ts
 delete mode 100644 packages/api/src/business/validations/utils/heritage-contenu-validate.ts
 delete mode 100644 packages/api/src/business/validations/utils/props-dates-check.ts
 delete mode 100644 packages/api/src/business/validations/utils/props-numbers-check.ts
 create mode 100644 packages/api/src/knex/migrations/20240610091608_add_avis-documents.ts
 delete mode 100644 packages/api/tests/queries/titre-etape-creer.graphql
 delete mode 100644 packages/api/tests/queries/titre-etape-modifier.graphql
 delete mode 100644 packages/common/src/permissions/documents.test.ts
 delete mode 100644 packages/common/src/permissions/documents.ts
 create mode 100644 packages/common/src/sections.test.ts
 create mode 100644 packages/common/src/static/avisTypes.ts
 delete mode 100644 packages/ui/src/components/_common/document-type-typeahead.stories.tsx
 delete mode 100644 packages/ui/src/components/_common/document-type-typeahead.stories_snapshots_Default.html
 delete mode 100644 packages/ui/src/components/_common/document-type-typeahead.tsx
 create mode 100644 packages/ui/src/components/_ui/typeahead-smart-single.tsx
 rename packages/ui/src/components/{_common/document-type-typeahead.stories_snapshots_WithDocumentTypeAlreadySelected.html => _ui/typeahead.stories_snapshots_SmartSingle.html} (100%)
 create mode 100644 packages/ui/src/components/_ui/typeahead.stories_snapshots_SmartSingleWithInitialValue.html
 create mode 100644 packages/ui/src/components/etape/add-etape-avis-popup.stories.tsx
 create mode 100644 packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialDejaSauvegarde.html
 create mode 100644 packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialTemporaire.html
 create mode 100644 packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_SansDocumentInitial.html
 create mode 100644 packages/ui/src/components/etape/add-etape-avis-popup.tsx
 create mode 100644 packages/ui/src/components/etape/etape-avis-edit.stories.tsx
 create mode 100644 packages/ui/src/components/etape/etape-avis-edit.stories_snapshots_AvisEnGuyane.html
 create mode 100644 packages/ui/src/components/etape/etape-avis-edit.stories_snapshots_Empty.html
 create mode 100644 packages/ui/src/components/etape/etape-avis-edit.stories_snapshots_Rempli.html
 create mode 100644 packages/ui/src/components/etape/etape-avis-edit.tsx
 create mode 100644 packages/ui/src/components/etape/etape-avis.stories.tsx
 create mode 100644 packages/ui/src/components/etape/etape-avis.stories_snapshots_Empty.html
 create mode 100644 packages/ui/src/components/etape/etape-avis.stories_snapshots_NotConnected.html
 create mode 100644 packages/ui/src/components/etape/etape-avis.stories_snapshots_UserAdministration.html
 create mode 100644 packages/ui/src/components/etape/etape-avis.stories_snapshots_UserEntreprise.html
 create mode 100644 packages/ui/src/components/etape/etape-avis.stories_snapshots_UserSuper.html
 create mode 100644 packages/ui/src/components/etape/etape-avis.tsx

diff --git a/package-lock.json b/package-lock.json
index 0824f6e6a..345888ff0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -59,12 +59,12 @@
       }
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.24.2",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
-      "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+      "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
       "dev": true,
       "dependencies": {
-        "@babel/highlight": "^7.24.2",
+        "@babel/highlight": "^7.24.7",
         "picocolors": "^1.0.0"
       },
       "engines": {
@@ -72,30 +72,30 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.24.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz",
-      "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz",
+      "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.24.4",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz",
-      "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz",
+      "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==",
       "dev": true,
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.24.2",
-        "@babel/generator": "^7.24.4",
-        "@babel/helper-compilation-targets": "^7.23.6",
-        "@babel/helper-module-transforms": "^7.23.3",
-        "@babel/helpers": "^7.24.4",
-        "@babel/parser": "^7.24.4",
-        "@babel/template": "^7.24.0",
-        "@babel/traverse": "^7.24.1",
-        "@babel/types": "^7.24.0",
+        "@babel/code-frame": "^7.24.7",
+        "@babel/generator": "^7.24.7",
+        "@babel/helper-compilation-targets": "^7.24.7",
+        "@babel/helper-module-transforms": "^7.24.7",
+        "@babel/helpers": "^7.24.7",
+        "@babel/parser": "^7.24.7",
+        "@babel/template": "^7.24.7",
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7",
         "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -120,9 +120,9 @@
       }
     },
     "node_modules/@babel/eslint-parser": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz",
-      "integrity": "sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.7.tgz",
+      "integrity": "sha512-SO5E3bVxDuxyNxM5agFv480YA2HO6ohZbGxbazZdIk3KQOPOGVNw6q78I9/lbviIf95eq6tPozeYnJLbjnC8IA==",
       "dev": true,
       "dependencies": {
         "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
@@ -134,7 +134,7 @@
       },
       "peerDependencies": {
         "@babel/core": "^7.11.0",
-        "eslint": "^7.5.0 || ^8.0.0"
+        "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0"
       }
     },
     "node_modules/@babel/eslint-parser/node_modules/semver": {
@@ -147,12 +147,12 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.24.4",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz",
-      "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz",
+      "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.24.0",
+        "@babel/types": "^7.24.7",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
         "jsesc": "^2.5.1"
@@ -162,37 +162,38 @@
       }
     },
     "node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
-      "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
+      "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.22.5"
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz",
-      "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
+      "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.22.15"
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.23.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
-      "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz",
+      "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==",
       "dev": true,
       "dependencies": {
-        "@babel/compat-data": "^7.23.5",
-        "@babel/helper-validator-option": "^7.23.5",
+        "@babel/compat-data": "^7.24.7",
+        "@babel/helper-validator-option": "^7.24.7",
         "browserslist": "^4.22.2",
         "lru-cache": "^5.1.1",
         "semver": "^6.3.1"
@@ -226,19 +227,19 @@
       "dev": true
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.24.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz",
-      "integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.22.5",
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-function-name": "^7.23.0",
-        "@babel/helper-member-expression-to-functions": "^7.23.0",
-        "@babel/helper-optimise-call-expression": "^7.22.5",
-        "@babel/helper-replace-supers": "^7.24.1",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
-        "@babel/helper-split-export-declaration": "^7.22.6",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz",
+      "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.24.7",
+        "@babel/helper-environment-visitor": "^7.24.7",
+        "@babel/helper-function-name": "^7.24.7",
+        "@babel/helper-member-expression-to-functions": "^7.24.7",
+        "@babel/helper-optimise-call-expression": "^7.24.7",
+        "@babel/helper-replace-supers": "^7.24.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+        "@babel/helper-split-export-declaration": "^7.24.7",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -258,12 +259,12 @@
       }
     },
     "node_modules/@babel/helper-create-regexp-features-plugin": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz",
-      "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz",
+      "integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-annotate-as-pure": "^7.24.7",
         "regexpu-core": "^5.3.1",
         "semver": "^6.3.1"
       },
@@ -300,74 +301,79 @@
       }
     },
     "node_modules/@babel/helper-environment-visitor": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
-      "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
+      "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
       "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.24.7"
+      },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-function-name": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
-      "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
+      "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
       "dev": true,
       "dependencies": {
-        "@babel/template": "^7.22.15",
-        "@babel/types": "^7.23.0"
+        "@babel/template": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-hoist-variables": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
-      "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz",
+      "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.22.5"
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
-      "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz",
+      "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.23.0"
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.24.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz",
-      "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
+      "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.24.0"
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.23.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
-      "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz",
+      "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-module-imports": "^7.22.15",
-        "@babel/helper-simple-access": "^7.22.5",
-        "@babel/helper-split-export-declaration": "^7.22.6",
-        "@babel/helper-validator-identifier": "^7.22.20"
+        "@babel/helper-environment-visitor": "^7.24.7",
+        "@babel/helper-module-imports": "^7.24.7",
+        "@babel/helper-simple-access": "^7.24.7",
+        "@babel/helper-split-export-declaration": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -377,35 +383,35 @@
       }
     },
     "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
-      "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
+      "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.22.5"
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz",
-      "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz",
+      "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-remap-async-to-generator": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz",
-      "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz",
+      "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.22.5",
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-wrap-function": "^7.22.20"
+        "@babel/helper-annotate-as-pure": "^7.24.7",
+        "@babel/helper-environment-visitor": "^7.24.7",
+        "@babel/helper-wrap-function": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -415,14 +421,14 @@
       }
     },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz",
-      "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz",
+      "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-member-expression-to-functions": "^7.23.0",
-        "@babel/helper-optimise-call-expression": "^7.22.5"
+        "@babel/helper-environment-visitor": "^7.24.7",
+        "@babel/helper-member-expression-to-functions": "^7.24.7",
+        "@babel/helper-optimise-call-expression": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -432,103 +438,105 @@
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
-      "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
+      "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.22.5"
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
-      "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
+      "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.22.5"
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-split-export-declaration": {
-      "version": "7.22.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
-      "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
+      "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.22.5"
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz",
-      "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz",
+      "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
-      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.23.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
-      "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz",
+      "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-wrap-function": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz",
-      "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz",
+      "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-function-name": "^7.22.5",
-        "@babel/template": "^7.22.15",
-        "@babel/types": "^7.22.19"
+        "@babel/helper-function-name": "^7.24.7",
+        "@babel/template": "^7.24.7",
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.24.4",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz",
-      "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz",
+      "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==",
       "dev": true,
       "dependencies": {
-        "@babel/template": "^7.24.0",
-        "@babel/traverse": "^7.24.1",
-        "@babel/types": "^7.24.0"
+        "@babel/template": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.24.2",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
-      "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+      "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.22.20",
+        "@babel/helper-validator-identifier": "^7.24.7",
         "chalk": "^2.4.2",
         "js-tokens": "^4.0.0",
         "picocolors": "^1.0.0"
@@ -594,9 +602,9 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.24.4",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz",
-      "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz",
+      "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==",
       "dev": true,
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -606,13 +614,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
-      "version": "7.24.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz",
-      "integrity": "sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz",
+      "integrity": "sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-environment-visitor": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -622,12 +630,12 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz",
-      "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz",
+      "integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -637,14 +645,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz",
-      "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz",
+      "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
-        "@babel/plugin-transform-optional-chaining": "^7.24.1"
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+        "@babel/plugin-transform-optional-chaining": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -654,13 +662,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz",
-      "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz",
+      "integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-environment-visitor": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -745,12 +753,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-flow": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz",
-      "integrity": "sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz",
+      "integrity": "sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -760,12 +768,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-assertions": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz",
-      "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz",
+      "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -775,12 +783,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-attributes": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz",
-      "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz",
+      "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -814,12 +822,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-jsx": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz",
-      "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
+      "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -931,12 +939,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-typescript": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz",
-      "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz",
+      "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -962,12 +970,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-arrow-functions": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz",
-      "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz",
+      "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -977,14 +985,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-generator-functions": {
-      "version": "7.24.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz",
-      "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz",
+      "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/helper-remap-async-to-generator": "^7.22.20",
+        "@babel/helper-environment-visitor": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-remap-async-to-generator": "^7.24.7",
         "@babel/plugin-syntax-async-generators": "^7.8.4"
       },
       "engines": {
@@ -995,14 +1003,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-to-generator": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz",
-      "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz",
+      "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.1",
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/helper-remap-async-to-generator": "^7.22.20"
+        "@babel/helper-module-imports": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-remap-async-to-generator": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1012,12 +1020,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz",
-      "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz",
+      "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1027,12 +1035,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoping": {
-      "version": "7.24.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz",
-      "integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz",
+      "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1042,13 +1050,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-properties": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz",
-      "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz",
+      "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.1",
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-create-class-features-plugin": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1058,13 +1066,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-static-block": {
-      "version": "7.24.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz",
-      "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz",
+      "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.4",
-        "@babel/helper-plugin-utils": "^7.24.0",
+        "@babel/helper-create-class-features-plugin": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7",
         "@babel/plugin-syntax-class-static-block": "^7.14.5"
       },
       "engines": {
@@ -1075,18 +1083,18 @@
       }
     },
     "node_modules/@babel/plugin-transform-classes": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz",
-      "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.22.5",
-        "@babel/helper-compilation-targets": "^7.23.6",
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-function-name": "^7.23.0",
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/helper-replace-supers": "^7.24.1",
-        "@babel/helper-split-export-declaration": "^7.22.6",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz",
+      "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.24.7",
+        "@babel/helper-compilation-targets": "^7.24.7",
+        "@babel/helper-environment-visitor": "^7.24.7",
+        "@babel/helper-function-name": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-replace-supers": "^7.24.7",
+        "@babel/helper-split-export-declaration": "^7.24.7",
         "globals": "^11.1.0"
       },
       "engines": {
@@ -1097,13 +1105,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-computed-properties": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz",
-      "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
+      "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/template": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/template": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1113,12 +1121,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-destructuring": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz",
-      "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz",
+      "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1128,13 +1136,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-dotall-regex": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz",
-      "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz",
+      "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.22.15",
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1144,12 +1152,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-keys": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz",
-      "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz",
+      "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1159,12 +1167,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-dynamic-import": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz",
-      "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
+      "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
+        "@babel/helper-plugin-utils": "^7.24.7",
         "@babel/plugin-syntax-dynamic-import": "^7.8.3"
       },
       "engines": {
@@ -1175,13 +1183,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz",
-      "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz",
+      "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15",
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1191,12 +1199,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-export-namespace-from": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz",
-      "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz",
+      "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
+        "@babel/helper-plugin-utils": "^7.24.7",
         "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
       },
       "engines": {
@@ -1207,13 +1215,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-flow-strip-types": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.1.tgz",
-      "integrity": "sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.7.tgz",
+      "integrity": "sha512-cjRKJ7FobOH2eakx7Ja+KpJRj8+y+/SiB3ooYm/n2UJfxu0oEaOoxOinitkJcPqv9KxS0kxTGPUaR7L2XcXDXA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/plugin-syntax-flow": "^7.24.1"
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/plugin-syntax-flow": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1223,13 +1231,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-for-of": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz",
-      "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz",
+      "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1239,14 +1247,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-function-name": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz",
-      "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz",
+      "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.23.6",
-        "@babel/helper-function-name": "^7.23.0",
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-compilation-targets": "^7.24.7",
+        "@babel/helper-function-name": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1256,12 +1264,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-json-strings": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz",
-      "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz",
+      "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
+        "@babel/helper-plugin-utils": "^7.24.7",
         "@babel/plugin-syntax-json-strings": "^7.8.3"
       },
       "engines": {
@@ -1272,12 +1280,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-literals": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz",
-      "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz",
+      "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1287,12 +1295,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-logical-assignment-operators": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz",
-      "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz",
+      "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
+        "@babel/helper-plugin-utils": "^7.24.7",
         "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
       },
       "engines": {
@@ -1303,12 +1311,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-member-expression-literals": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz",
-      "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz",
+      "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1318,13 +1326,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-amd": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz",
-      "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz",
+      "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.23.3",
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-module-transforms": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1334,14 +1342,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz",
-      "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz",
+      "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.23.3",
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/helper-simple-access": "^7.22.5"
+        "@babel/helper-module-transforms": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-simple-access": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1351,15 +1359,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-systemjs": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz",
-      "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz",
+      "integrity": "sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-hoist-variables": "^7.22.5",
-        "@babel/helper-module-transforms": "^7.23.3",
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/helper-validator-identifier": "^7.22.20"
+        "@babel/helper-hoist-variables": "^7.24.7",
+        "@babel/helper-module-transforms": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1369,13 +1377,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-umd": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz",
-      "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz",
+      "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.23.3",
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-module-transforms": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1385,13 +1393,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
-      "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz",
+      "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.22.5",
-        "@babel/helper-plugin-utils": "^7.22.5"
+        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1401,12 +1409,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-new-target": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz",
-      "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz",
+      "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1416,12 +1424,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz",
-      "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz",
+      "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
+        "@babel/helper-plugin-utils": "^7.24.7",
         "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
       },
       "engines": {
@@ -1432,12 +1440,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-numeric-separator": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz",
-      "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz",
+      "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
+        "@babel/helper-plugin-utils": "^7.24.7",
         "@babel/plugin-syntax-numeric-separator": "^7.10.4"
       },
       "engines": {
@@ -1448,15 +1456,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-rest-spread": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz",
-      "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz",
+      "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.23.6",
-        "@babel/helper-plugin-utils": "^7.24.0",
+        "@babel/helper-compilation-targets": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7",
         "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-transform-parameters": "^7.24.1"
+        "@babel/plugin-transform-parameters": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1466,13 +1474,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-super": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz",
-      "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz",
+      "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/helper-replace-supers": "^7.24.1"
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-replace-supers": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1482,12 +1490,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-catch-binding": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz",
-      "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz",
+      "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
+        "@babel/helper-plugin-utils": "^7.24.7",
         "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
       },
       "engines": {
@@ -1498,13 +1506,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-chaining": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz",
-      "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz",
+      "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
         "@babel/plugin-syntax-optional-chaining": "^7.8.3"
       },
       "engines": {
@@ -1515,12 +1523,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-parameters": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz",
-      "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
+      "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1530,13 +1538,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-methods": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz",
-      "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz",
+      "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.1",
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-create-class-features-plugin": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1546,14 +1554,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-property-in-object": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz",
-      "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz",
+      "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.22.5",
-        "@babel/helper-create-class-features-plugin": "^7.24.1",
-        "@babel/helper-plugin-utils": "^7.24.0",
+        "@babel/helper-annotate-as-pure": "^7.24.7",
+        "@babel/helper-create-class-features-plugin": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7",
         "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
       },
       "engines": {
@@ -1564,12 +1572,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-property-literals": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz",
-      "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz",
+      "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1579,12 +1587,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-regenerator": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz",
-      "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz",
+      "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
+        "@babel/helper-plugin-utils": "^7.24.7",
         "regenerator-transform": "^0.15.2"
       },
       "engines": {
@@ -1595,12 +1603,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-reserved-words": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz",
-      "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz",
+      "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1610,12 +1618,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-shorthand-properties": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz",
-      "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz",
+      "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1625,13 +1633,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-spread": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz",
-      "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz",
+      "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1641,12 +1649,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-sticky-regex": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz",
-      "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz",
+      "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1656,12 +1664,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-template-literals": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz",
-      "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz",
+      "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1671,12 +1679,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-typeof-symbol": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz",
-      "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz",
+      "integrity": "sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1686,15 +1694,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-typescript": {
-      "version": "7.24.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz",
-      "integrity": "sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz",
+      "integrity": "sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.22.5",
-        "@babel/helper-create-class-features-plugin": "^7.24.4",
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/plugin-syntax-typescript": "^7.24.1"
+        "@babel/helper-annotate-as-pure": "^7.24.7",
+        "@babel/helper-create-class-features-plugin": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/plugin-syntax-typescript": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1704,12 +1712,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-escapes": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz",
-      "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz",
+      "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1719,13 +1727,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-property-regex": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz",
-      "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz",
+      "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.22.15",
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1735,13 +1743,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-regex": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz",
-      "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz",
+      "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.22.15",
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1751,13 +1759,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-sets-regex": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz",
-      "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz",
+      "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.22.15",
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1767,27 +1775,27 @@
       }
     },
     "node_modules/@babel/preset-env": {
-      "version": "7.24.4",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz",
-      "integrity": "sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==",
-      "dev": true,
-      "dependencies": {
-        "@babel/compat-data": "^7.24.4",
-        "@babel/helper-compilation-targets": "^7.23.6",
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/helper-validator-option": "^7.23.5",
-        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.4",
-        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1",
-        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1",
-        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz",
+      "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/compat-data": "^7.24.7",
+        "@babel/helper-compilation-targets": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-validator-option": "^7.24.7",
+        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7",
+        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
+        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7",
         "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
         "@babel/plugin-syntax-async-generators": "^7.8.4",
         "@babel/plugin-syntax-class-properties": "^7.12.13",
         "@babel/plugin-syntax-class-static-block": "^7.14.5",
         "@babel/plugin-syntax-dynamic-import": "^7.8.3",
         "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
-        "@babel/plugin-syntax-import-assertions": "^7.24.1",
-        "@babel/plugin-syntax-import-attributes": "^7.24.1",
+        "@babel/plugin-syntax-import-assertions": "^7.24.7",
+        "@babel/plugin-syntax-import-attributes": "^7.24.7",
         "@babel/plugin-syntax-import-meta": "^7.10.4",
         "@babel/plugin-syntax-json-strings": "^7.8.3",
         "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
@@ -1799,54 +1807,54 @@
         "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
         "@babel/plugin-syntax-top-level-await": "^7.14.5",
         "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
-        "@babel/plugin-transform-arrow-functions": "^7.24.1",
-        "@babel/plugin-transform-async-generator-functions": "^7.24.3",
-        "@babel/plugin-transform-async-to-generator": "^7.24.1",
-        "@babel/plugin-transform-block-scoped-functions": "^7.24.1",
-        "@babel/plugin-transform-block-scoping": "^7.24.4",
-        "@babel/plugin-transform-class-properties": "^7.24.1",
-        "@babel/plugin-transform-class-static-block": "^7.24.4",
-        "@babel/plugin-transform-classes": "^7.24.1",
-        "@babel/plugin-transform-computed-properties": "^7.24.1",
-        "@babel/plugin-transform-destructuring": "^7.24.1",
-        "@babel/plugin-transform-dotall-regex": "^7.24.1",
-        "@babel/plugin-transform-duplicate-keys": "^7.24.1",
-        "@babel/plugin-transform-dynamic-import": "^7.24.1",
-        "@babel/plugin-transform-exponentiation-operator": "^7.24.1",
-        "@babel/plugin-transform-export-namespace-from": "^7.24.1",
-        "@babel/plugin-transform-for-of": "^7.24.1",
-        "@babel/plugin-transform-function-name": "^7.24.1",
-        "@babel/plugin-transform-json-strings": "^7.24.1",
-        "@babel/plugin-transform-literals": "^7.24.1",
-        "@babel/plugin-transform-logical-assignment-operators": "^7.24.1",
-        "@babel/plugin-transform-member-expression-literals": "^7.24.1",
-        "@babel/plugin-transform-modules-amd": "^7.24.1",
-        "@babel/plugin-transform-modules-commonjs": "^7.24.1",
-        "@babel/plugin-transform-modules-systemjs": "^7.24.1",
-        "@babel/plugin-transform-modules-umd": "^7.24.1",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
-        "@babel/plugin-transform-new-target": "^7.24.1",
-        "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1",
-        "@babel/plugin-transform-numeric-separator": "^7.24.1",
-        "@babel/plugin-transform-object-rest-spread": "^7.24.1",
-        "@babel/plugin-transform-object-super": "^7.24.1",
-        "@babel/plugin-transform-optional-catch-binding": "^7.24.1",
-        "@babel/plugin-transform-optional-chaining": "^7.24.1",
-        "@babel/plugin-transform-parameters": "^7.24.1",
-        "@babel/plugin-transform-private-methods": "^7.24.1",
-        "@babel/plugin-transform-private-property-in-object": "^7.24.1",
-        "@babel/plugin-transform-property-literals": "^7.24.1",
-        "@babel/plugin-transform-regenerator": "^7.24.1",
-        "@babel/plugin-transform-reserved-words": "^7.24.1",
-        "@babel/plugin-transform-shorthand-properties": "^7.24.1",
-        "@babel/plugin-transform-spread": "^7.24.1",
-        "@babel/plugin-transform-sticky-regex": "^7.24.1",
-        "@babel/plugin-transform-template-literals": "^7.24.1",
-        "@babel/plugin-transform-typeof-symbol": "^7.24.1",
-        "@babel/plugin-transform-unicode-escapes": "^7.24.1",
-        "@babel/plugin-transform-unicode-property-regex": "^7.24.1",
-        "@babel/plugin-transform-unicode-regex": "^7.24.1",
-        "@babel/plugin-transform-unicode-sets-regex": "^7.24.1",
+        "@babel/plugin-transform-arrow-functions": "^7.24.7",
+        "@babel/plugin-transform-async-generator-functions": "^7.24.7",
+        "@babel/plugin-transform-async-to-generator": "^7.24.7",
+        "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
+        "@babel/plugin-transform-block-scoping": "^7.24.7",
+        "@babel/plugin-transform-class-properties": "^7.24.7",
+        "@babel/plugin-transform-class-static-block": "^7.24.7",
+        "@babel/plugin-transform-classes": "^7.24.7",
+        "@babel/plugin-transform-computed-properties": "^7.24.7",
+        "@babel/plugin-transform-destructuring": "^7.24.7",
+        "@babel/plugin-transform-dotall-regex": "^7.24.7",
+        "@babel/plugin-transform-duplicate-keys": "^7.24.7",
+        "@babel/plugin-transform-dynamic-import": "^7.24.7",
+        "@babel/plugin-transform-exponentiation-operator": "^7.24.7",
+        "@babel/plugin-transform-export-namespace-from": "^7.24.7",
+        "@babel/plugin-transform-for-of": "^7.24.7",
+        "@babel/plugin-transform-function-name": "^7.24.7",
+        "@babel/plugin-transform-json-strings": "^7.24.7",
+        "@babel/plugin-transform-literals": "^7.24.7",
+        "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
+        "@babel/plugin-transform-member-expression-literals": "^7.24.7",
+        "@babel/plugin-transform-modules-amd": "^7.24.7",
+        "@babel/plugin-transform-modules-commonjs": "^7.24.7",
+        "@babel/plugin-transform-modules-systemjs": "^7.24.7",
+        "@babel/plugin-transform-modules-umd": "^7.24.7",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
+        "@babel/plugin-transform-new-target": "^7.24.7",
+        "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
+        "@babel/plugin-transform-numeric-separator": "^7.24.7",
+        "@babel/plugin-transform-object-rest-spread": "^7.24.7",
+        "@babel/plugin-transform-object-super": "^7.24.7",
+        "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
+        "@babel/plugin-transform-optional-chaining": "^7.24.7",
+        "@babel/plugin-transform-parameters": "^7.24.7",
+        "@babel/plugin-transform-private-methods": "^7.24.7",
+        "@babel/plugin-transform-private-property-in-object": "^7.24.7",
+        "@babel/plugin-transform-property-literals": "^7.24.7",
+        "@babel/plugin-transform-regenerator": "^7.24.7",
+        "@babel/plugin-transform-reserved-words": "^7.24.7",
+        "@babel/plugin-transform-shorthand-properties": "^7.24.7",
+        "@babel/plugin-transform-spread": "^7.24.7",
+        "@babel/plugin-transform-sticky-regex": "^7.24.7",
+        "@babel/plugin-transform-template-literals": "^7.24.7",
+        "@babel/plugin-transform-typeof-symbol": "^7.24.7",
+        "@babel/plugin-transform-unicode-escapes": "^7.24.7",
+        "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
+        "@babel/plugin-transform-unicode-regex": "^7.24.7",
+        "@babel/plugin-transform-unicode-sets-regex": "^7.24.7",
         "@babel/preset-modules": "0.1.6-no-external-plugins",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
         "babel-plugin-polyfill-corejs3": "^0.10.4",
@@ -1871,14 +1879,14 @@
       }
     },
     "node_modules/@babel/preset-flow": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.1.tgz",
-      "integrity": "sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.7.tgz",
+      "integrity": "sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/helper-validator-option": "^7.23.5",
-        "@babel/plugin-transform-flow-strip-types": "^7.24.1"
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-validator-option": "^7.24.7",
+        "@babel/plugin-transform-flow-strip-types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1902,16 +1910,16 @@
       }
     },
     "node_modules/@babel/preset-typescript": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz",
-      "integrity": "sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz",
+      "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0",
-        "@babel/helper-validator-option": "^7.23.5",
-        "@babel/plugin-syntax-jsx": "^7.24.1",
-        "@babel/plugin-transform-modules-commonjs": "^7.24.1",
-        "@babel/plugin-transform-typescript": "^7.24.1"
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-validator-option": "^7.24.7",
+        "@babel/plugin-syntax-jsx": "^7.24.7",
+        "@babel/plugin-transform-modules-commonjs": "^7.24.7",
+        "@babel/plugin-transform-typescript": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1921,9 +1929,9 @@
       }
     },
     "node_modules/@babel/register": {
-      "version": "7.23.7",
-      "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz",
-      "integrity": "sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==",
+      "version": "7.24.6",
+      "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.24.6.tgz",
+      "integrity": "sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==",
       "dev": true,
       "dependencies": {
         "clone-deep": "^4.0.1",
@@ -2064,9 +2072,9 @@
       "dev": true
     },
     "node_modules/@babel/runtime": {
-      "version": "7.24.4",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz",
-      "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz",
+      "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==",
       "dev": true,
       "dependencies": {
         "regenerator-runtime": "^0.14.0"
@@ -2076,33 +2084,33 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz",
-      "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz",
+      "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==",
       "dev": true,
       "dependencies": {
-        "@babel/code-frame": "^7.23.5",
-        "@babel/parser": "^7.24.0",
-        "@babel/types": "^7.24.0"
+        "@babel/code-frame": "^7.24.7",
+        "@babel/parser": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.24.1",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz",
-      "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.24.1",
-        "@babel/generator": "^7.24.1",
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-function-name": "^7.23.0",
-        "@babel/helper-hoist-variables": "^7.22.5",
-        "@babel/helper-split-export-declaration": "^7.22.6",
-        "@babel/parser": "^7.24.1",
-        "@babel/types": "^7.24.0",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+      "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.24.7",
+        "@babel/generator": "^7.24.7",
+        "@babel/helper-environment-visitor": "^7.24.7",
+        "@babel/helper-function-name": "^7.24.7",
+        "@babel/helper-hoist-variables": "^7.24.7",
+        "@babel/helper-split-export-declaration": "^7.24.7",
+        "@babel/parser": "^7.24.7",
+        "@babel/types": "^7.24.7",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -2111,13 +2119,13 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz",
-      "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz",
+      "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-string-parser": "^7.23.4",
-        "@babel/helper-validator-identifier": "^7.22.20",
+        "@babel/helper-string-parser": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.24.7",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -2161,9 +2169,9 @@
       }
     },
     "node_modules/@csstools/cascade-layer-name-parser": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.9.tgz",
-      "integrity": "sha512-RRqNjxTZDUhx7pxYOBG/AkCVmPS3zYzfE47GEhIGkFuWFTQGJBgWOUUkKNo5MfxIfjDz5/1L3F3rF1oIsYaIpw==",
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.11.tgz",
+      "integrity": "sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w==",
       "dev": true,
       "funding": [
         {
@@ -2179,8 +2187,8 @@
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4"
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1"
       }
     },
     "node_modules/@csstools/color-helpers": {
@@ -2203,9 +2211,9 @@
       }
     },
     "node_modules/@csstools/css-calc": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.0.tgz",
-      "integrity": "sha512-iQqIW5vDPqQdLx07/atCuNKDprhIWjB0b8XRhUyXZWBZYUG+9mNyFwyu30rypX84WLevVo25NYW2ipxR8WyseQ==",
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.2.tgz",
+      "integrity": "sha512-0owrl7AruDRKAxoSIW8XzJdz7GnuW3AOj4rYLfmXsoKIX2ZZzttzGXoiC8n8V08X7wIBlEWWVB4C8fAN18+I6Q==",
       "dev": true,
       "funding": [
         {
@@ -2221,14 +2229,14 @@
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4"
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1"
       }
     },
     "node_modules/@csstools/css-color-parser": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.0.tgz",
-      "integrity": "sha512-0/v6OPpcg+b8TJT2N1Rcp0oH5xEvVOU5K2qDkaR3IMHNXuJ7XfVCQLINt3Cuj8mr54DbilEoZ9uvAmHBoZ//Fw==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.2.tgz",
+      "integrity": "sha512-Agx2YmxTcZ7TfB7KNZQ+iekaxbWSdblvtA35aTwE3KfuYyjOlCg3P4KGGdQF/cjm1pHWVSBo5duF/BRfZ8s07A==",
       "dev": true,
       "funding": [
         {
@@ -2242,20 +2250,20 @@
       ],
       "dependencies": {
         "@csstools/color-helpers": "^4.2.0",
-        "@csstools/css-calc": "^1.2.0"
+        "@csstools/css-calc": "^1.2.2"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4"
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1"
       }
     },
     "node_modules/@csstools/css-parser-algorithms": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz",
-      "integrity": "sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz",
+      "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==",
       "dev": true,
       "funding": [
         {
@@ -2271,13 +2279,13 @@
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-tokenizer": "^2.2.4"
+        "@csstools/css-tokenizer": "^2.3.1"
       }
     },
     "node_modules/@csstools/css-tokenizer": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz",
-      "integrity": "sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz",
+      "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==",
       "dev": true,
       "funding": [
         {
@@ -2294,9 +2302,9 @@
       }
     },
     "node_modules/@csstools/media-query-list-parser": {
-      "version": "2.1.9",
-      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz",
-      "integrity": "sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==",
+      "version": "2.1.11",
+      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz",
+      "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==",
       "dev": true,
       "funding": [
         {
@@ -2312,14 +2320,14 @@
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4"
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1"
       }
     },
     "node_modules/@csstools/postcss-cascade-layers": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.4.tgz",
-      "integrity": "sha512-MKErv8lpEwVmAcAwidY1Kfd3oWrh2Q14kxHs9xn26XzjP/PrcdngWq63lJsZeMlBY7o+WlEOeE+FP6zPzeY2uw==",
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.6.tgz",
+      "integrity": "sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA==",
       "dev": true,
       "funding": [
         {
@@ -2332,7 +2340,7 @@
         }
       ],
       "dependencies": {
-        "@csstools/selector-specificity": "^3.0.3",
+        "@csstools/selector-specificity": "^3.1.1",
         "postcss-selector-parser": "^6.0.13"
       },
       "engines": {
@@ -2343,9 +2351,9 @@
       }
     },
     "node_modules/@csstools/postcss-color-function": {
-      "version": "3.0.14",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.14.tgz",
-      "integrity": "sha512-joGAf5bT3Jg1CpybupMJ4DwNg/VNjmLWZoWMDmX0MTy/ftHA1Qr4+CslqTT4AA1n6Dx4Wa+DSMGPrDLHtRP0jg==",
+      "version": "3.0.16",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.16.tgz",
+      "integrity": "sha512-KtmXfckANSKsLBoTQCzggvKft1cmmmDKYjFO4yVlB23nWUgGInVBTE9T5JLmH29NNdTWSEPLWPUxoQ6XiIEn2Q==",
       "dev": true,
       "funding": [
         {
@@ -2358,9 +2366,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^2.0.0",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4",
+        "@csstools/css-color-parser": "^2.0.2",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1",
         "@csstools/postcss-progressive-custom-properties": "^3.2.0",
         "@csstools/utilities": "^1.0.0"
       },
@@ -2372,9 +2380,9 @@
       }
     },
     "node_modules/@csstools/postcss-color-mix-function": {
-      "version": "2.0.14",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.14.tgz",
-      "integrity": "sha512-ZLbgtdhyuOoWoRo/W8jFv68q+IMgTJHOAI+WunRbrRPqI+vJ0K2rud/lS9Se5urzM/imVKs/kz0Uobm5Yj4HUg==",
+      "version": "2.0.16",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.16.tgz",
+      "integrity": "sha512-BJnD1M5Pdypl1cJuwGuzVC52PqgzaObsDLu34jgf+QU7daVFqz432PvpqvXTmfTSNt4OckOT1QIzWexEFlDNXw==",
       "dev": true,
       "funding": [
         {
@@ -2387,9 +2395,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^2.0.0",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4",
+        "@csstools/css-color-parser": "^2.0.2",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1",
         "@csstools/postcss-progressive-custom-properties": "^3.2.0",
         "@csstools/utilities": "^1.0.0"
       },
@@ -2401,9 +2409,9 @@
       }
     },
     "node_modules/@csstools/postcss-exponential-functions": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.5.tgz",
-      "integrity": "sha512-7S7I7KgwHWQYzJJAoIjRtUf7DQs1dxipeg1A6ikZr0PYapNJX7UHz0evlpE67SQqYj1xBs70gpG7xUv3uLp4PA==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.7.tgz",
+      "integrity": "sha512-9usBPQX74OhiF/VuaVrp44UAPzqbKNyoaxEa6tbEXiFp+OAm3yB/TLRKyPUWg5tvvHGCduGJVdJJB3w8c8NBtA==",
       "dev": true,
       "funding": [
         {
@@ -2416,9 +2424,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-calc": "^1.2.0",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4"
+        "@csstools/css-calc": "^1.2.2",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -2454,9 +2462,9 @@
       }
     },
     "node_modules/@csstools/postcss-gamut-mapping": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.7.tgz",
-      "integrity": "sha512-vrsHsl5TN6NB5CT0rPG6JE9V2GLFftcmPtF/k4cWT4gyVMCsDyS9wEVl82sgvh/JQ32TaUo6bh8Ndl+XRJqGQw==",
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.9.tgz",
+      "integrity": "sha512-JmOeiBJj1RJriAkr+aLBaiYUpEqdNOIo3ERQ5a4uNzy18upzrQ6tz7m2Vt1GQpJ62zQj7rC5PjAhCoZCoyE31g==",
       "dev": true,
       "funding": [
         {
@@ -2469,9 +2477,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^2.0.0",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4"
+        "@csstools/css-color-parser": "^2.0.2",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -2481,9 +2489,9 @@
       }
     },
     "node_modules/@csstools/postcss-gradients-interpolation-method": {
-      "version": "4.0.15",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.15.tgz",
-      "integrity": "sha512-0xQ5r4WU/6W2lDmnOTx9liC1Cq6RSnrkEzqX7d0cRA3fz5hjC276pA0nLMoAiY3vtAp0u71nTk/3TRdnCx/OUw==",
+      "version": "4.0.17",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.17.tgz",
+      "integrity": "sha512-qSNIqzLPKd2SadfWwHZv42lDRyYlLaM+Vx5rRIsnYCZbQxzFfe1XAwssrcCsHgba5bA6bi5oDoFCx0W+PRCpfw==",
       "dev": true,
       "funding": [
         {
@@ -2496,9 +2504,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^2.0.0",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4",
+        "@csstools/css-color-parser": "^2.0.2",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1",
         "@csstools/postcss-progressive-custom-properties": "^3.2.0",
         "@csstools/utilities": "^1.0.0"
       },
@@ -2510,9 +2518,9 @@
       }
     },
     "node_modules/@csstools/postcss-hwb-function": {
-      "version": "3.0.13",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.13.tgz",
-      "integrity": "sha512-f44tgkFSxJBGm8UjlkAfBP7xE2x2XFFdvNdedHl8jpx2pQcW8a50OT3yeMnM3NB9Y2Ynd7Wn8iXARiV/IHoKvw==",
+      "version": "3.0.15",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.15.tgz",
+      "integrity": "sha512-l34fRiZ7o5+pULv7OplXniBTU4TuKYNNOv0abuvUanddWGSy3+YHlMKUSgcVFo0d1DorxPAhJSTCrugl+4OmMQ==",
       "dev": true,
       "funding": [
         {
@@ -2525,9 +2533,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^2.0.0",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4",
+        "@csstools/css-color-parser": "^2.0.2",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1",
         "@csstools/postcss-progressive-custom-properties": "^3.2.0",
         "@csstools/utilities": "^1.0.0"
       },
@@ -2588,9 +2596,9 @@
       }
     },
     "node_modules/@csstools/postcss-is-pseudo-class": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.6.tgz",
-      "integrity": "sha512-HilOhAsMpFheMYkuaREZx+CGa4hsG6kQdzwXSsuqKDFzYz2eIMP213+3dH/vUbPXaWrzqLKr8m3i0dgYPoh7vg==",
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.8.tgz",
+      "integrity": "sha512-0aj591yGlq5Qac+plaWCbn5cpjs5Sh0daovYUKJUOMjIp70prGH/XPLp7QjxtbFXz3CTvb0H9a35dpEuIuUi3Q==",
       "dev": true,
       "funding": [
         {
@@ -2603,7 +2611,7 @@
         }
       ],
       "dependencies": {
-        "@csstools/selector-specificity": "^3.0.3",
+        "@csstools/selector-specificity": "^3.1.1",
         "postcss-selector-parser": "^6.0.13"
       },
       "engines": {
@@ -2614,9 +2622,9 @@
       }
     },
     "node_modules/@csstools/postcss-light-dark-function": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.3.tgz",
-      "integrity": "sha512-izW8hvhOqJlarLcGXO5PSylW9pQS3fytmhRdx2/e1oZFi15vs7ZShOHcREHJ3FfGdYqDA10cP9uhH0A3hmm1Rw==",
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.5.tgz",
+      "integrity": "sha512-kKM9dtEaVmSTb3scL2pgef62KyWv6SK19JiAnCCuiDhlRE6PADKzaPPBXmP3qj4IEgIH+cQhdEosB0eroU6Fnw==",
       "dev": true,
       "funding": [
         {
@@ -2629,8 +2637,8 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1",
         "@csstools/postcss-progressive-custom-properties": "^3.2.0",
         "@csstools/utilities": "^1.0.0"
       },
@@ -2733,9 +2741,9 @@
       }
     },
     "node_modules/@csstools/postcss-logical-viewport-units": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.7.tgz",
-      "integrity": "sha512-L4G3zsp/bnU0+WXUyysihCUH14LkfMgUJsS9vKz3vCYbVobOTqQRoNXnEPpyNp8WYyolLqAWbGGJhVu8J6u2OQ==",
+      "version": "2.0.9",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.9.tgz",
+      "integrity": "sha512-iBBJuExgHwedFH9AqNOHWzZFgYnt17zhu1qWjmSihu1P5pw0lIG9q5t3uIgJJFDNmYoOGfBKan66z9u1QH8yBQ==",
       "dev": true,
       "funding": [
         {
@@ -2748,7 +2756,7 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-tokenizer": "^2.2.4",
+        "@csstools/css-tokenizer": "^2.3.1",
         "@csstools/utilities": "^1.0.0"
       },
       "engines": {
@@ -2759,9 +2767,9 @@
       }
     },
     "node_modules/@csstools/postcss-media-minmax": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.4.tgz",
-      "integrity": "sha512-xl/PIO3TUbXO1ZA4SA6HCw+Q9UGe2cgeRKx3lHCzoNig2D4bT5vfVCOrwhxjUb09oHihc9eI3I0iIfVPiXaN1A==",
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.6.tgz",
+      "integrity": "sha512-bc0frf2Lod53j6wEHVsaVElfvCf6uhc96v99M/wUfer4MmNYfO3YLx1kFuB8xXvb0AXiWx4fohCJqemHV3bfRg==",
       "dev": true,
       "funding": [
         {
@@ -2774,10 +2782,10 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-calc": "^1.2.0",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4",
-        "@csstools/media-query-list-parser": "^2.1.9"
+        "@csstools/css-calc": "^1.2.2",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1",
+        "@csstools/media-query-list-parser": "^2.1.11"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -2787,9 +2795,9 @@
       }
     },
     "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.7.tgz",
-      "integrity": "sha512-HBDAQw1K0NilcHGMUHv8jzf2mpOtcWTVKtuY3AeZ5TS1uyWWNVi5/yuA/tREPLU9WifNdqHQ+rfbsV/8zTIkTg==",
+      "version": "2.0.9",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.9.tgz",
+      "integrity": "sha512-PR0s3tFSxPoKoPLoKuiZuYhwQC5bQxq/gFfywX2u/kh8rMzesARPZYKxE71I3jHWi6KDHGZl9Xb5xcFPwtvLiQ==",
       "dev": true,
       "funding": [
         {
@@ -2802,9 +2810,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4",
-        "@csstools/media-query-list-parser": "^2.1.9"
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1",
+        "@csstools/media-query-list-parser": "^2.1.11"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -2865,9 +2873,9 @@
       }
     },
     "node_modules/@csstools/postcss-oklab-function": {
-      "version": "3.0.14",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.14.tgz",
-      "integrity": "sha512-92xdpcfc2wB3z4+GftPA0PXMuGI/tRLw9Tc0+HzpaAHHxyLK6aCJtoQIcw0Ox/PthXtqXZn/3wWT/Idfe8I7Wg==",
+      "version": "3.0.16",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.16.tgz",
+      "integrity": "sha512-zm8nND+EraZrmbO4mgcT8FrJrAQUfWNfMmbV5uTCpWtAcO5ycX3E3bO8T1TjczKYRxC5QMM/91n9YExYCF4Mvw==",
       "dev": true,
       "funding": [
         {
@@ -2880,9 +2888,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^2.0.0",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4",
+        "@csstools/css-color-parser": "^2.0.2",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1",
         "@csstools/postcss-progressive-custom-properties": "^3.2.0",
         "@csstools/utilities": "^1.0.0"
       },
@@ -2919,9 +2927,9 @@
       }
     },
     "node_modules/@csstools/postcss-relative-color-syntax": {
-      "version": "2.0.14",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.14.tgz",
-      "integrity": "sha512-NlxgLjAjVCTUVGiWk8WNj3dKvux9eC6O5aLM3BmdA8UXEwBHYI9r4IqlanxG9PlcXnzhTUX6eZsqgmxwt4FPow==",
+      "version": "2.0.16",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.16.tgz",
+      "integrity": "sha512-TSM8fVqJkT8JZDranZPnkpxjU/Q1sNR192lXMND+EcKOUjYa6uYpGSfHgjnWjCRiBSciettS+sL7y9wmnas7qQ==",
       "dev": true,
       "funding": [
         {
@@ -2934,9 +2942,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^2.0.0",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4",
+        "@csstools/css-color-parser": "^2.0.2",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1",
         "@csstools/postcss-progressive-custom-properties": "^3.2.0",
         "@csstools/utilities": "^1.0.0"
       },
@@ -2973,9 +2981,9 @@
       }
     },
     "node_modules/@csstools/postcss-stepped-value-functions": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.6.tgz",
-      "integrity": "sha512-rnyp8tWRuBXERTHVdB5hjUlif5dQgPcyN+BX55wUnYpZ3LN9QPfK2Z3/HUZymwyou8Gg6vhd6X2W+g1pLq1jYg==",
+      "version": "3.0.8",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.8.tgz",
+      "integrity": "sha512-X76+thsvsmH/SkqVbN+vjeFKe1ABGLRx8/Wl68QTb/zvJWdzgx5S/nbszZP5O3nTRc5eI8NxIOrQUiy30fR+0g==",
       "dev": true,
       "funding": [
         {
@@ -2988,9 +2996,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-calc": "^1.2.0",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4"
+        "@csstools/css-calc": "^1.2.2",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -3026,9 +3034,9 @@
       }
     },
     "node_modules/@csstools/postcss-trigonometric-functions": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.6.tgz",
-      "integrity": "sha512-i5Zd0bMJooZAn+ZcDmPij2WCkcOJJJ6opzK+QeDjxbMrYmoGQl0CY8FDHdeQyBF1Nly+Q0Fq3S7QfdNLKBBaCg==",
+      "version": "3.0.8",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.8.tgz",
+      "integrity": "sha512-zEzyGriPqoIYFgHJqWNy8bmoxjM4+ONyTap1ZzQK/Lll/VsCYvx0IckB33W/u89uLSVeeB8xC7uTrkoQ7ogKyQ==",
       "dev": true,
       "funding": [
         {
@@ -3041,9 +3049,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-calc": "^1.2.0",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4"
+        "@csstools/css-calc": "^1.2.2",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -3097,9 +3105,9 @@
       }
     },
     "node_modules/@csstools/selector-specificity": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz",
-      "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz",
+      "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==",
       "dev": true,
       "funding": [
         {
@@ -3554,9 +3562,9 @@
       }
     },
     "node_modules/@eslint-community/regexpp": {
-      "version": "4.10.0",
-      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
-      "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+      "version": "4.10.1",
+      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz",
+      "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==",
       "dev": true,
       "engines": {
         "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
@@ -3662,12 +3670,15 @@
       "dev": true
     },
     "node_modules/@gouvfr/dsfr": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npmjs.org/@gouvfr/dsfr/-/dsfr-1.10.2.tgz",
-      "integrity": "sha512-twPj+VFMTOKUfI9vbBnK8fH1iDpXuDVWeMJzgmmQ5LKjRtZdUsvSbHNlp7HWcDvhWxDGNHxSboErC7UB3oskYQ==",
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/@gouvfr/dsfr/-/dsfr-1.12.0.tgz",
+      "integrity": "sha512-/HDTLC8TV0MfZDreRS35xSD4Gzi9g3HjuaJD+zuzvvBiikSy+t2f36iUaE1Y9ojdBdmjz4/jYmA35w4+B6DMjQ==",
       "dev": true,
       "engines": {
         "node": ">=18.16.1"
+      },
+      "peerDependencies": {
+        "browser-sync": "^2.27.10"
       }
     },
     "node_modules/@graphql-tools/graphql-file-loader": {
@@ -3763,9 +3774,9 @@
       }
     },
     "node_modules/@graphql-tools/merge": {
-      "version": "9.0.3",
-      "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.3.tgz",
-      "integrity": "sha512-FeKv9lKLMwqDu0pQjPpF59GY3HReUkWXKsMIuMuJQOKh9BETu7zPEFUELvcw8w+lwZkl4ileJsHXC9+AnsT2Lw==",
+      "version": "9.0.4",
+      "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.4.tgz",
+      "integrity": "sha512-MivbDLUQ+4Q8G/Hp/9V72hbn810IJDEZQ57F01sHnlrrijyadibfVhaQfW/pNH+9T/l8ySZpaR/DpL5i+ruZ+g==",
       "dependencies": {
         "@graphql-tools/utils": "^10.0.13",
         "tslib": "^2.4.0"
@@ -3778,12 +3789,12 @@
       }
     },
     "node_modules/@graphql-tools/schema": {
-      "version": "10.0.3",
-      "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.3.tgz",
-      "integrity": "sha512-p28Oh9EcOna6i0yLaCFOnkcBDQECVf3SCexT6ktb86QNj9idnkhI+tCxnwZDh58Qvjd2nURdkbevvoZkvxzCog==",
+      "version": "10.0.4",
+      "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.4.tgz",
+      "integrity": "sha512-HuIwqbKxPaJujox25Ra4qwz0uQzlpsaBOzO6CVfzB/MemZdd+Gib8AIvfhQArK0YIN40aDran/yi+E5Xf0mQww==",
       "dependencies": {
         "@graphql-tools/merge": "^9.0.3",
-        "@graphql-tools/utils": "^10.0.13",
+        "@graphql-tools/utils": "^10.2.1",
         "tslib": "^2.4.0",
         "value-or-promise": "^1.0.12"
       },
@@ -3795,9 +3806,9 @@
       }
     },
     "node_modules/@graphql-tools/utils": {
-      "version": "10.2.0",
-      "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.2.0.tgz",
-      "integrity": "sha512-HYV7dO6pNA2nGKawygaBpk8y+vXOUjjzzO43W/Kb7EPRmXUEQKjHxPYRvQbiF72u1N3XxwGK5jnnFk9WVhUwYw==",
+      "version": "10.2.2",
+      "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.2.2.tgz",
+      "integrity": "sha512-ueoplzHIgFfxhFrF4Mf/niU/tYHuO6Uekm2nCYU72qpI+7Hn9dA2/o5XOBvFXDk27Lp5VSvQY5WfmRbqwVxaYQ==",
       "dependencies": {
         "@graphql-typed-document-node/core": "^3.1.1",
         "cross-inspect": "1.0.0",
@@ -3823,6 +3834,7 @@
       "version": "0.11.14",
       "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
       "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+      "deprecated": "Use @eslint/config-array instead",
       "dev": true,
       "dependencies": {
         "@humanwhocodes/object-schema": "^2.0.2",
@@ -3872,6 +3884,7 @@
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
       "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+      "deprecated": "Use @eslint/object-schema instead",
       "dev": true
     },
     "node_modules/@isaacs/cliui": {
@@ -4086,17 +4099,19 @@
       }
     },
     "node_modules/@maplibre/maplibre-gl-style-spec": {
-      "version": "20.1.1",
-      "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.1.1.tgz",
-      "integrity": "sha512-z85ARNPCBI2Cs5cPOS3DSbraTN+ue8zrcYVoSWBuNrD/mA+2SKAJ+hIzI22uN7gac6jBMnCdpPKRxS/V0KSZVQ==",
+      "version": "20.3.0",
+      "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.3.0.tgz",
+      "integrity": "sha512-eSiQ3E5LUSxAOY9ABXGyfNhout2iEa6mUxKeaQ9nJ8NL1NuaQYU7zKqzx/LEYcXe1neT4uYAgM1wYZj3fTSXtA==",
       "dev": true,
       "dependencies": {
         "@mapbox/jsonlint-lines-primitives": "~2.0.2",
         "@mapbox/unitbezier": "^0.0.1",
         "json-stringify-pretty-compact": "^4.0.0",
         "minimist": "^1.2.8",
+        "quickselect": "^2.0.0",
         "rw": "^1.3.3",
-        "sort-object": "^3.0.3"
+        "sort-object": "^3.0.3",
+        "tinyqueue": "^2.0.3"
       },
       "bin": {
         "gl-style-format": "dist/gl-style-format.mjs",
@@ -4259,18 +4274,18 @@
       }
     },
     "node_modules/@octokit/openapi-types": {
-      "version": "22.1.0",
-      "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.1.0.tgz",
-      "integrity": "sha512-pGUdSP+eEPfZiQHNkZI0U01HLipxncisdJQB4G//OAmfeO8sqTQ9KRa0KF03TUPCziNsoXUrTg4B2Q1EX++T0Q==",
+      "version": "22.2.0",
+      "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
+      "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==",
       "dev": true
     },
     "node_modules/@octokit/plugin-paginate-rest": {
-      "version": "11.2.0",
-      "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.2.0.tgz",
-      "integrity": "sha512-Nd3hCJbr5GUwTgV6j2dMONIigoqNwJRm+yvA5BYb1dnGBTmVUrGYGNwYsGl2hN+xtDAYpqxDiz8vysh/NqEN+A==",
+      "version": "11.3.0",
+      "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.0.tgz",
+      "integrity": "sha512-n4znWfRinnUQF6TPyxs7EctSAA3yVSP4qlJP2YgI3g9d4Ae2n5F3XDOjbUluKRxPU3rfsgpOboI4O4VtPc6Ilg==",
       "dev": true,
       "dependencies": {
-        "@octokit/types": "^13.4.1"
+        "@octokit/types": "^13.5.0"
       },
       "engines": {
         "node": ">= 18"
@@ -4297,9 +4312,9 @@
       }
     },
     "node_modules/@octokit/plugin-throttling": {
-      "version": "9.2.1",
-      "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.2.1.tgz",
-      "integrity": "sha512-n6EK4/1Npva54sAFDdpUxAbO14FbzudJ/k7DZPjQuLYOvNTWj4DGeH//J9ZCVoLkAlvRWV5sWKLaICsmGvqg2g==",
+      "version": "9.3.0",
+      "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.3.0.tgz",
+      "integrity": "sha512-B5YTToSRTzNSeEyssnrT7WwGhpIdbpV9NKIs3KyTWHX6PhpYn7gqF/+lL3BvsASBM3Sg5BAUYk7KZx5p/Ec77w==",
       "dev": true,
       "dependencies": {
         "@octokit/types": "^13.0.0",
@@ -4340,12 +4355,12 @@
       }
     },
     "node_modules/@octokit/types": {
-      "version": "13.4.1",
-      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.4.1.tgz",
-      "integrity": "sha512-Y73oOAzRBAUzR/iRAbGULzpNkX8vaxKCqEtg6K74Ff3w9f5apFnWtE/2nade7dMWWW3bS5Kkd6DJS4HF04xreg==",
+      "version": "13.5.0",
+      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
+      "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
       "dev": true,
       "dependencies": {
-        "@octokit/openapi-types": "^22.1.0"
+        "@octokit/openapi-types": "^22.2.0"
       }
     },
     "node_modules/@one-ini/wasm": {
@@ -4571,9 +4586,9 @@
       }
     },
     "node_modules/@redis/client": {
-      "version": "1.5.14",
-      "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.5.14.tgz",
-      "integrity": "sha512-YGn0GqsRBFUQxklhY7v562VMOP0DcmlrHHs3IV1mFE3cbxe31IITUkqhBcIhVSI/2JqtWAJXg5mjV4aU+zD0HA==",
+      "version": "1.5.16",
+      "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.5.16.tgz",
+      "integrity": "sha512-X1a3xQ5kEMvTib5fBrHKh6Y+pXbeKXqziYuxOUo1ojQNECg4M5Etd1qqyhMap+lFUOAh8S7UYevgJHOm4A+NOg==",
       "optional": true,
       "dependencies": {
         "cluster-key-slot": "1.1.2",
@@ -4654,9 +4669,9 @@
       }
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.1.tgz",
-      "integrity": "sha512-P6Wg856Ou/DLpR+O0ZLneNmrv7QpqBg+hK4wE05ijbC/t349BRfMfx+UFj5Ha3fCFopIa6iSZlpdaB4agkWp2Q==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz",
+      "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==",
       "cpu": [
         "arm"
       ],
@@ -4667,9 +4682,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.1.tgz",
-      "integrity": "sha512-piwZDjuW2WiHr05djVdUkrG5JbjnGbtx8BXQchYCMfib/nhjzWoiScelZ+s5IJI7lecrwSxHCzW026MWBL+oJQ==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz",
+      "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==",
       "cpu": [
         "arm64"
       ],
@@ -4680,9 +4695,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.1.tgz",
-      "integrity": "sha512-LsZXXIsN5Q460cKDT4Y+bzoPDhBmO5DTr7wP80d+2EnYlxSgkwdPfE3hbE+Fk8dtya+8092N9srjBTJ0di8RIA==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz",
+      "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==",
       "cpu": [
         "arm64"
       ],
@@ -4693,9 +4708,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.1.tgz",
-      "integrity": "sha512-S7TYNQpWXB9APkxu/SLmYHezWwCoZRA9QLgrDeml+SR2A1LLPD2DBUdUlvmCF7FUpRMKvbeeWky+iizQj65Etw==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz",
+      "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==",
       "cpu": [
         "x64"
       ],
@@ -4706,9 +4721,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.1.tgz",
-      "integrity": "sha512-Lq2JR5a5jsA5um2ZoLiXXEaOagnVyCpCW7xvlcqHC7y46tLwTEgUSTM3a2TfmmTMmdqv+jknUioWXlmxYxE9Yw==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz",
+      "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==",
       "cpu": [
         "arm"
       ],
@@ -4719,9 +4734,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.1.tgz",
-      "integrity": "sha512-9BfzwyPNV0IizQoR+5HTNBGkh1KXE8BqU0DBkqMngmyFW7BfuIZyMjQ0s6igJEiPSBvT3ZcnIFohZ19OqjhDPg==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz",
+      "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==",
       "cpu": [
         "arm"
       ],
@@ -4732,9 +4747,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.1.tgz",
-      "integrity": "sha512-e2uWaoxo/rtzA52OifrTSXTvJhAXb0XeRkz4CdHBK2KtxrFmuU/uNd544Ogkpu938BzEfvmWs8NZ8Axhw33FDw==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz",
+      "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==",
       "cpu": [
         "arm64"
       ],
@@ -4745,9 +4760,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.1.tgz",
-      "integrity": "sha512-ekggix/Bc/d/60H1Mi4YeYb/7dbal1kEDZ6sIFVAE8pUSx7PiWeEh+NWbL7bGu0X68BBIkgF3ibRJe1oFTksQQ==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz",
+      "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==",
       "cpu": [
         "arm64"
       ],
@@ -4758,9 +4773,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.1.tgz",
-      "integrity": "sha512-UGV0dUo/xCv4pkr/C8KY7XLFwBNnvladt8q+VmdKrw/3RUd3rD0TptwjisvE2TTnnlENtuY4/PZuoOYRiGp8Gw==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz",
+      "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==",
       "cpu": [
         "ppc64"
       ],
@@ -4771,9 +4786,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.1.tgz",
-      "integrity": "sha512-gEYmYYHaehdvX46mwXrU49vD6Euf1Bxhq9pPb82cbUU9UT2NV+RSckQ5tKWOnNXZixKsy8/cPGtiUWqzPuAcXQ==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz",
+      "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==",
       "cpu": [
         "riscv64"
       ],
@@ -4784,9 +4799,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.1.tgz",
-      "integrity": "sha512-xeae5pMAxHFp6yX5vajInG2toST5lsCTrckSRUFwNgzYqnUjNBcQyqk1bXUxX5yhjWFl2Mnz3F8vQjl+2FRIcw==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz",
+      "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==",
       "cpu": [
         "s390x"
       ],
@@ -4797,9 +4812,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.1.tgz",
-      "integrity": "sha512-AsdnINQoDWfKpBzCPqQWxSPdAWzSgnYbrJYtn6W0H2E9It5bZss99PiLA8CgmDRfvKygt20UpZ3xkhFlIfX9zQ==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz",
+      "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==",
       "cpu": [
         "x64"
       ],
@@ -4810,9 +4825,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.1.tgz",
-      "integrity": "sha512-KoB4fyKXTR+wYENkIG3fFF+5G6N4GFvzYx8Jax8BR4vmddtuqSb5oQmYu2Uu067vT/Fod7gxeQYKupm8gAcMSQ==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz",
+      "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==",
       "cpu": [
         "x64"
       ],
@@ -4823,9 +4838,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.1.tgz",
-      "integrity": "sha512-J0d3NVNf7wBL9t4blCNat+d0PYqAx8wOoY+/9Q5cujnafbX7BmtYk3XvzkqLmFECaWvXGLuHmKj/wrILUinmQg==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz",
+      "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==",
       "cpu": [
         "arm64"
       ],
@@ -4836,9 +4851,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.1.tgz",
-      "integrity": "sha512-xjgkWUwlq7IbgJSIxvl516FJ2iuC/7ttjsAxSPpC9kkI5iQQFHKyEN5BjbhvJ/IXIZ3yIBcW5QDlWAyrA+TFag==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz",
+      "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==",
       "cpu": [
         "ia32"
       ],
@@ -4849,9 +4864,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.1.tgz",
-      "integrity": "sha512-0QbCkfk6cnnVKWqqlC0cUrrUMDMfu5ffvYMTUHf+qMN2uAb3MKP31LPcwiMXBNsvoFGs/kYdFOsuLmvppCopXA==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz",
+      "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==",
       "cpu": [
         "x64"
       ],
@@ -4861,6 +4876,12 @@
         "win32"
       ]
     },
+    "node_modules/@sec-ant/readable-stream": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
+      "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
+      "dev": true
+    },
     "node_modules/@selderee/plugin-htmlparser2": {
       "version": "0.11.0",
       "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz",
@@ -4904,9 +4925,9 @@
       }
     },
     "node_modules/@semantic-release/github": {
-      "version": "10.0.3",
-      "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-10.0.3.tgz",
-      "integrity": "sha512-nSJQboKrG4xBn7hHpRMrK8lt5DgqJg50ZMz9UbrsfTxuRk55XVoQEadbGZ2L9M0xZAC6hkuwkDhQJKqfPU35Fw==",
+      "version": "10.0.6",
+      "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-10.0.6.tgz",
+      "integrity": "sha512-sS4psqZacGTFEN49UQGqwFNG6Jyx2/RX1BhhDGn/2WoPbhAHislohOY05/5r+JoL4gJMWycfH7tEm1eGVutYeg==",
       "dev": true,
       "dependencies": {
         "@octokit/core": "^6.0.0",
@@ -4934,14 +4955,14 @@
       }
     },
     "node_modules/@semantic-release/npm": {
-      "version": "12.0.0",
-      "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-12.0.0.tgz",
-      "integrity": "sha512-72TVYQCH9NvVsO/y13eF8vE4bNnfls518+4KcFwJUKi7AtA/ZXoNgSg9gTTfw5eMZMkiH0izUrpGXgZE/cSQhA==",
+      "version": "12.0.1",
+      "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-12.0.1.tgz",
+      "integrity": "sha512-/6nntGSUGK2aTOI0rHPwY3ZjgY9FkXmEHbW9Kr+62NVOsyqpKKeP0lrCH+tphv+EsNdJNmqqwijTEnVWUMQ2Nw==",
       "dev": true,
       "dependencies": {
         "@semantic-release/error": "^4.0.0",
         "aggregate-error": "^5.0.0",
-        "execa": "^8.0.0",
+        "execa": "^9.0.0",
         "fs-extra": "^11.0.0",
         "lodash-es": "^4.17.21",
         "nerf-dart": "^1.0.0",
@@ -4960,6 +4981,93 @@
         "semantic-release": ">=20.1.0"
       }
     },
+    "node_modules/@semantic-release/npm/node_modules/@sindresorhus/merge-streams": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
+      "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@semantic-release/npm/node_modules/execa": {
+      "version": "9.2.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-9.2.0.tgz",
+      "integrity": "sha512-vpOyYg7UAVKLAWWtRS2gAdgkT7oJbCn0me3gmUmxZih4kd3MF/oo8kNTBTIbkO3yuuF5uB4ZCZfn8BOolITYhg==",
+      "dev": true,
+      "dependencies": {
+        "@sindresorhus/merge-streams": "^4.0.0",
+        "cross-spawn": "^7.0.3",
+        "figures": "^6.1.0",
+        "get-stream": "^9.0.0",
+        "human-signals": "^7.0.0",
+        "is-plain-obj": "^4.1.0",
+        "is-stream": "^4.0.1",
+        "npm-run-path": "^5.2.0",
+        "pretty-ms": "^9.0.0",
+        "signal-exit": "^4.1.0",
+        "strip-final-newline": "^4.0.0",
+        "yoctocolors": "^2.0.0"
+      },
+      "engines": {
+        "node": "^18.19.0 || >=20.5.0"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
+      }
+    },
+    "node_modules/@semantic-release/npm/node_modules/get-stream": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
+      "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
+      "dev": true,
+      "dependencies": {
+        "@sec-ant/readable-stream": "^0.4.1",
+        "is-stream": "^4.0.1"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@semantic-release/npm/node_modules/human-signals": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-7.0.0.tgz",
+      "integrity": "sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=18.18.0"
+      }
+    },
+    "node_modules/@semantic-release/npm/node_modules/is-stream": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
+      "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@semantic-release/npm/node_modules/strip-final-newline": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz",
+      "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/@semantic-release/release-notes-generator": {
       "version": "13.0.0",
       "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-13.0.0.tgz",
@@ -4997,38 +5105,38 @@
       }
     },
     "node_modules/@sentry-internal/tracing": {
-      "version": "7.112.2",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.112.2.tgz",
-      "integrity": "sha512-fT1Y46J4lfXZkgFkb03YMNeIEs2xS6jdKMoukMFQfRfVvL9fSWEbTgZpHPd/YTT8r2i082XzjtAoQNgklm/0Hw==",
+      "version": "7.117.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.117.0.tgz",
+      "integrity": "sha512-fAIyijNvKBZNA12IcKo+dOYDRTNrzNsdzbm3DP37vJRKVQu19ucqP4Y6InvKokffDP2HZPzFPDoGXYuXkDhUZg==",
       "dependencies": {
-        "@sentry/core": "7.112.2",
-        "@sentry/types": "7.112.2",
-        "@sentry/utils": "7.112.2"
+        "@sentry/core": "7.117.0",
+        "@sentry/types": "7.117.0",
+        "@sentry/utils": "7.117.0"
       },
       "engines": {
         "node": ">=8"
       }
     },
     "node_modules/@sentry/core": {
-      "version": "7.112.2",
-      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.112.2.tgz",
-      "integrity": "sha512-gHPCcJobbMkk0VR18J65WYQTt3ED4qC6X9lHKp27Ddt63E+MDGkG6lvYBU1LS8cV7CdyBGC1XXDCfor61GvLsA==",
+      "version": "7.117.0",
+      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.117.0.tgz",
+      "integrity": "sha512-1XZ4/d/DEwnfM2zBMloXDwX+W7s76lGKQMgd8bwgPJZjjEztMJ7X0uopKAGwlQcjn242q+hsCBR6C+fSuI5kvg==",
       "dependencies": {
-        "@sentry/types": "7.112.2",
-        "@sentry/utils": "7.112.2"
+        "@sentry/types": "7.117.0",
+        "@sentry/utils": "7.117.0"
       },
       "engines": {
         "node": ">=8"
       }
     },
     "node_modules/@sentry/integrations": {
-      "version": "7.112.2",
-      "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.112.2.tgz",
-      "integrity": "sha512-ioC2yyU6DqtLkdmWnm87oNvdn2+9oKctJeA4t+jkS6JaJ10DcezjCwiLscX4rhB9aWJV3IWF7Op0O6K3w0t2Hg==",
+      "version": "7.117.0",
+      "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.117.0.tgz",
+      "integrity": "sha512-U3suSZysmU9EiQqg0ga5CxveAyNbi9IVdsapMDq5EQGNcVDvheXtULs+BOc11WYP3Kw2yWB38VDqLepfc/Fg2g==",
       "dependencies": {
-        "@sentry/core": "7.112.2",
-        "@sentry/types": "7.112.2",
-        "@sentry/utils": "7.112.2",
+        "@sentry/core": "7.117.0",
+        "@sentry/types": "7.117.0",
+        "@sentry/utils": "7.117.0",
         "localforage": "^1.8.1"
       },
       "engines": {
@@ -5036,34 +5144,34 @@
       }
     },
     "node_modules/@sentry/node": {
-      "version": "7.112.2",
-      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.112.2.tgz",
-      "integrity": "sha512-MNzkqER8jc2xOS3ArkCLH5hakzu15tcjeC7qjU7rQ1Ms4WuV+MG0docSRESux0/p23Qjzf9tZOc8C5Eq+Sxduw==",
+      "version": "7.117.0",
+      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.117.0.tgz",
+      "integrity": "sha512-0MWXdT8dv1MtQGF0aeB8LQTBTJS1L1Vz24+wvdXroR3/52mPYrPWlzuc7+Ew/Dlqdlb5LKVIlkuDSRWj8UKpTQ==",
       "dependencies": {
-        "@sentry-internal/tracing": "7.112.2",
-        "@sentry/core": "7.112.2",
-        "@sentry/integrations": "7.112.2",
-        "@sentry/types": "7.112.2",
-        "@sentry/utils": "7.112.2"
+        "@sentry-internal/tracing": "7.117.0",
+        "@sentry/core": "7.117.0",
+        "@sentry/integrations": "7.117.0",
+        "@sentry/types": "7.117.0",
+        "@sentry/utils": "7.117.0"
       },
       "engines": {
         "node": ">=8"
       }
     },
     "node_modules/@sentry/types": {
-      "version": "7.112.2",
-      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.112.2.tgz",
-      "integrity": "sha512-kCMLt7yhY5OkWE9MeowlTNmox9pqDxcpvqguMo4BDNZM5+v9SEb1AauAdR78E1a1V8TyCzjBD7JDfXWhvpYBcQ==",
+      "version": "7.117.0",
+      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.117.0.tgz",
+      "integrity": "sha512-5dtdulcUttc3F0Te7ekZmpSp/ebt/CA71ELx0uyqVGjWsSAINwskFD77sdcjqvZWek//WjiYX1+GRKlpJ1QqsA==",
       "engines": {
         "node": ">=8"
       }
     },
     "node_modules/@sentry/utils": {
-      "version": "7.112.2",
-      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.112.2.tgz",
-      "integrity": "sha512-OjLh0hx0t1EcL4ZIjf+4svlmmP+tHUDGcr5qpFWH78tjmkPW4+cqPuZCZfHSuWcDdeiaXi8TnYoVRqDcJKK/eQ==",
+      "version": "7.117.0",
+      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.117.0.tgz",
+      "integrity": "sha512-KkcLY8643SGBiDyPvMQOubBkwVX5IPknMHInc7jYC8pDVncGp7C65Wi506bCNPpKCWspUd/0VDNWOOen51/qKA==",
       "dependencies": {
-        "@sentry/types": "7.112.2"
+        "@sentry/types": "7.117.0"
       },
       "engines": {
         "node": ">=8"
@@ -5099,6 +5207,13 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/@socket.io/component-emitter": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+      "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/@storybook/addon-actions": {
       "version": "8.0.9",
       "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.0.9.tgz",
@@ -6304,9 +6419,9 @@
       }
     },
     "node_modules/@storybook/core-server/node_modules/@types/node": {
-      "version": "18.19.31",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz",
-      "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==",
+      "version": "18.19.36",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.36.tgz",
+      "integrity": "sha512-tX1BNmYSWEvViftB26VLNxT6mEr37M7+ldUtq7rlKnv4/2fKYsJIOmqJAjT6h1DNuwQjIKgw3VJ/Dtw3yiTIQw==",
       "dev": true,
       "dependencies": {
         "undici-types": "~5.26.4"
@@ -6538,9 +6653,9 @@
       }
     },
     "node_modules/@storybook/csf": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.5.tgz",
-      "integrity": "sha512-pW7Dtk/bE2JGrAe/KuBY4Io02NBe/2CLP2DkgVgWlSwvEVdm/rbQyiwy8RaL0lQlJCv9CsGBY+n9HQG8d4bZjQ==",
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.8.tgz",
+      "integrity": "sha512-Ntab9o7LjBCbFIao5l42itFiaSh/Qu+l16l/r/9qmV9LnYZkO+JQ7tzhdlwpgJfhs+B5xeejpdAtftDRyXNajw==",
       "dev": true,
       "dependencies": {
         "type-fest": "^2.19.0"
@@ -6956,6 +7071,7 @@
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.2.2.tgz",
       "integrity": "sha512-L8sXFJUHmrlyU2BsWWZGuAjv39Jl1uAqUHdxmN42JY15M4+XCMjGlArdCCjDe1wpTSW6USYISA9axjZojgtvnw==",
+      "deprecated": "In Storybook 8, this package functionality has been integrated to a new package called @storybook/test, which uses Vitest APIs for an improved experience. When upgrading to Storybook 8 with 'npx storybook@latest upgrade', you will get prompted and will get an automigration for the new package. Please migrate when you can.",
       "dev": true,
       "dependencies": {
         "@testing-library/dom": "^9.0.0",
@@ -7153,9 +7269,9 @@
       }
     },
     "node_modules/@testing-library/vue": {
-      "version": "8.0.3",
-      "resolved": "https://registry.npmjs.org/@testing-library/vue/-/vue-8.0.3.tgz",
-      "integrity": "sha512-wSsbNlZ69ZFQgVlHMtc/ZC/g9BHO7MhyDrd4nHyfEubtMr3kToN/w4/BsSBknGIF8w9UmPbsgbIuq/CbdBHzCA==",
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/@testing-library/vue/-/vue-8.1.0.tgz",
+      "integrity": "sha512-ls4RiHO1ta4mxqqajWRh8158uFObVrrtAPoxk7cIp4HrnQUj/ScKzqz53HxYpG3X6Zb7H2v+0eTGLSoy8HQ2nA==",
       "dev": true,
       "dependencies": {
         "@babel/runtime": "^7.23.2",
@@ -7176,9 +7292,9 @@
       }
     },
     "node_modules/@transloadit/prettier-bytes": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@transloadit/prettier-bytes/-/prettier-bytes-0.3.2.tgz",
-      "integrity": "sha512-YMRk9+RKgbRcAsgrDgJmcJ7H+R3OfecsyMx56YeRdTeJLXkxapeZmK5NG1Ehvu570SGZo0K63ZeBUS2Z5/8ZzA==",
+      "version": "0.3.4",
+      "resolved": "https://registry.npmjs.org/@transloadit/prettier-bytes/-/prettier-bytes-0.3.4.tgz",
+      "integrity": "sha512-8/SnIF9Q2k52mbjRVAYLranwkaDTLb+O9r4Z/uo8uNw//SjygKvvbF4BHSOuReufaAyum1q13602VcNud25Dfg==",
       "dev": true
     },
     "node_modules/@tsconfig/node10": {
@@ -7202,11 +7318,11 @@
       "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="
     },
     "node_modules/@tus/file-store": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/@tus/file-store/-/file-store-1.3.2.tgz",
-      "integrity": "sha512-PFogHwWCg5RtrzTk3SNs5s1wAszluCKD/AeW4zDQybuZSxrs7lzQS593DumJBsFXYZ1q0IVsJJOb7WyZhbBVCQ==",
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/@tus/file-store/-/file-store-1.3.3.tgz",
+      "integrity": "sha512-IxgWdnIz64ua4x86pGHHRpTm6JEJCNdMiqwvc8uhdAxyKrfGEdwE2dYfhN/BfqGlu2FtOZqlH3iBSSgUQJM+ng==",
       "dependencies": {
-        "@tus/utils": "^0.1.0",
+        "@tus/utils": "^0.2.0",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -7217,12 +7333,13 @@
       }
     },
     "node_modules/@tus/server": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@tus/server/-/server-1.5.0.tgz",
-      "integrity": "sha512-TIE6zKxf+Vg6dFppI3RzcKfvtsScx12LKweYNIzSZJSyq8ylbWRIfML9+aQU/xd64CLjwS2s9EabTBZNyafd4Q==",
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/@tus/server/-/server-1.6.0.tgz",
+      "integrity": "sha512-bjZMmlyrXJ0ZxQ7eFGHToAvw2QIxTUucpgdMD+fdfMmxg30dIXXmQybis5ErVf+Qx7JtkBmRyQb3zE2hLvwfGw==",
       "dependencies": {
-        "@tus/utils": "^0.1.0",
-        "debug": "^4.3.4"
+        "@tus/utils": "^0.2.0",
+        "debug": "^4.3.4",
+        "lodash.throttle": "^4.1.1"
       },
       "engines": {
         "node": ">=16"
@@ -7232,9 +7349,9 @@
       }
     },
     "node_modules/@tus/utils": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/@tus/utils/-/utils-0.1.0.tgz",
-      "integrity": "sha512-RXSeAKPfBJk3G0yyyDAqKPJUb1JsHNvwxNWSjZmvxRlSwtPmOlSkSrXRRReAqHzSlxAlNOGzDWqYiCBkLjOu0g==",
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/@tus/utils/-/utils-0.2.0.tgz",
+      "integrity": "sha512-wTZS5PL+wfa6AisJoTtpt9r/GNNWq/rXkcXchAcV5z5GNUXGzgcAl/+u0d9uPkmmOHiJfGcM3MJGGnmsD2a5Kg==",
       "engines": {
         "node": ">=16"
       }
@@ -7278,9 +7395,9 @@
       }
     },
     "node_modules/@types/babel__traverse": {
-      "version": "7.20.5",
-      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz",
-      "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==",
+      "version": "7.20.6",
+      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
+      "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
       "dev": true,
       "dependencies": {
         "@babel/types": "^7.20.7"
@@ -7333,6 +7450,13 @@
         "@types/node": "*"
       }
     },
+    "node_modules/@types/cookie": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
+      "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/@types/cookie-parser": {
       "version": "1.4.7",
       "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.7.tgz",
@@ -7389,9 +7513,9 @@
       "dev": true
     },
     "node_modules/@types/emscripten": {
-      "version": "1.39.10",
-      "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.10.tgz",
-      "integrity": "sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==",
+      "version": "1.39.13",
+      "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.13.tgz",
+      "integrity": "sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==",
       "dev": true
     },
     "node_modules/@types/eslint": {
@@ -7434,9 +7558,9 @@
       }
     },
     "node_modules/@types/express-serve-static-core": {
-      "version": "4.19.0",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz",
-      "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==",
+      "version": "4.19.3",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.3.tgz",
+      "integrity": "sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==",
       "dependencies": {
         "@types/node": "*",
         "@types/qs": "*",
@@ -7514,6 +7638,12 @@
         "@types/node": "*"
       }
     },
+    "node_modules/@types/junit-report-builder": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@types/junit-report-builder/-/junit-report-builder-3.0.2.tgz",
+      "integrity": "sha512-R5M+SYhMbwBeQcNXYWNCZkl09vkVfAtcPIaCGdzIkkbeaTrVbGQ7HVgi4s+EmM/M1K4ZuWQH0jGcvMvNePfxYA==",
+      "dev": true
+    },
     "node_modules/@types/leaflet": {
       "version": "1.9.12",
       "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.12.tgz",
@@ -7533,9 +7663,9 @@
       }
     },
     "node_modules/@types/lodash": {
-      "version": "4.17.0",
-      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz",
-      "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==",
+      "version": "4.17.5",
+      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.5.tgz",
+      "integrity": "sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==",
       "dev": true
     },
     "node_modules/@types/mapbox__point-geometry": {
@@ -7567,9 +7697,9 @@
       "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="
     },
     "node_modules/@types/node": {
-      "version": "20.12.7",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz",
-      "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==",
+      "version": "20.14.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.5.tgz",
+      "integrity": "sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==",
       "dependencies": {
         "undici-types": "~5.26.4"
       }
@@ -7587,9 +7717,9 @@
       "dev": true
     },
     "node_modules/@types/pg": {
-      "version": "8.11.5",
-      "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.5.tgz",
-      "integrity": "sha512-2xMjVviMxneZHDHX5p5S6tsRRs7TpDHeeK7kTTMe/kAC/mRRNjWHjZg0rkiY+e17jXSZV3zJYDxXV8Cy72/Vuw==",
+      "version": "8.11.6",
+      "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.6.tgz",
+      "integrity": "sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==",
       "dependencies": {
         "@types/node": "*",
         "pg-protocol": "*",
@@ -7710,9 +7840,9 @@
       }
     },
     "node_modules/@types/superagent": {
-      "version": "8.1.6",
-      "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.6.tgz",
-      "integrity": "sha512-yzBOv+6meEHSzV2NThYYOA6RtqvPr3Hbob9ZLp3i07SH27CrYVfm8CrF7ydTmidtelsFiKx2I4gZAiAOamGgvQ==",
+      "version": "8.1.7",
+      "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.7.tgz",
+      "integrity": "sha512-NmIsd0Yj4DDhftfWvvAku482PZum4DBW7U51OvS8gvOkDDY0WT1jsVyDV3hK+vplrsYw8oDwi9QxOM7U68iwww==",
       "dev": true,
       "dependencies": {
         "@types/cookiejar": "^2.1.5",
@@ -7746,21 +7876,19 @@
       "dev": true
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "7.7.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.1.tgz",
-      "integrity": "sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==",
+      "version": "7.13.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.1.tgz",
+      "integrity": "sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg==",
       "dev": true,
       "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "7.7.1",
-        "@typescript-eslint/type-utils": "7.7.1",
-        "@typescript-eslint/utils": "7.7.1",
-        "@typescript-eslint/visitor-keys": "7.7.1",
-        "debug": "^4.3.4",
+        "@typescript-eslint/scope-manager": "7.13.1",
+        "@typescript-eslint/type-utils": "7.13.1",
+        "@typescript-eslint/utils": "7.13.1",
+        "@typescript-eslint/visitor-keys": "7.13.1",
         "graphemer": "^1.4.0",
         "ignore": "^5.3.1",
         "natural-compare": "^1.4.0",
-        "semver": "^7.6.0",
         "ts-api-utils": "^1.3.0"
       },
       "engines": {
@@ -7781,15 +7909,15 @@
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "7.7.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz",
-      "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==",
+      "version": "7.13.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz",
+      "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "7.7.1",
-        "@typescript-eslint/types": "7.7.1",
-        "@typescript-eslint/typescript-estree": "7.7.1",
-        "@typescript-eslint/visitor-keys": "7.7.1",
+        "@typescript-eslint/scope-manager": "7.13.1",
+        "@typescript-eslint/types": "7.13.1",
+        "@typescript-eslint/typescript-estree": "7.13.1",
+        "@typescript-eslint/visitor-keys": "7.13.1",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -7809,13 +7937,13 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "7.7.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz",
-      "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==",
+      "version": "7.13.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz",
+      "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "7.7.1",
-        "@typescript-eslint/visitor-keys": "7.7.1"
+        "@typescript-eslint/types": "7.13.1",
+        "@typescript-eslint/visitor-keys": "7.13.1"
       },
       "engines": {
         "node": "^18.18.0 || >=20.0.0"
@@ -7826,13 +7954,13 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "7.7.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.1.tgz",
-      "integrity": "sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==",
+      "version": "7.13.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.1.tgz",
+      "integrity": "sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "7.7.1",
-        "@typescript-eslint/utils": "7.7.1",
+        "@typescript-eslint/typescript-estree": "7.13.1",
+        "@typescript-eslint/utils": "7.13.1",
         "debug": "^4.3.4",
         "ts-api-utils": "^1.3.0"
       },
@@ -7853,9 +7981,9 @@
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "7.7.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz",
-      "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==",
+      "version": "7.13.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz",
+      "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==",
       "dev": true,
       "engines": {
         "node": "^18.18.0 || >=20.0.0"
@@ -7866,13 +7994,13 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "7.7.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz",
-      "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==",
+      "version": "7.13.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz",
+      "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "7.7.1",
-        "@typescript-eslint/visitor-keys": "7.7.1",
+        "@typescript-eslint/types": "7.13.1",
+        "@typescript-eslint/visitor-keys": "7.13.1",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -7923,18 +8051,15 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "7.7.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz",
-      "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==",
+      "version": "7.13.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.1.tgz",
+      "integrity": "sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ==",
       "dev": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
-        "@types/json-schema": "^7.0.15",
-        "@types/semver": "^7.5.8",
-        "@typescript-eslint/scope-manager": "7.7.1",
-        "@typescript-eslint/types": "7.7.1",
-        "@typescript-eslint/typescript-estree": "7.7.1",
-        "semver": "^7.6.0"
+        "@typescript-eslint/scope-manager": "7.13.1",
+        "@typescript-eslint/types": "7.13.1",
+        "@typescript-eslint/typescript-estree": "7.13.1"
       },
       "engines": {
         "node": "^18.18.0 || >=20.0.0"
@@ -7948,12 +8073,12 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "7.7.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz",
-      "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==",
+      "version": "7.13.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz",
+      "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "7.7.1",
+        "@typescript-eslint/types": "7.13.1",
         "eslint-visitor-keys": "^3.4.3"
       },
       "engines": {
@@ -7983,28 +8108,28 @@
       "dev": true
     },
     "node_modules/@uppy/companion-client": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/@uppy/companion-client/-/companion-client-3.8.0.tgz",
-      "integrity": "sha512-CnIUAlmwz3qvT0LC9EMTiXH6hv9veGsYEZfXYsVb7b+hg21pOktkQrYB71Gf+rH9XdpZPcPBRrTx9ihZZnvAdg==",
+      "version": "3.8.1",
+      "resolved": "https://registry.npmjs.org/@uppy/companion-client/-/companion-client-3.8.1.tgz",
+      "integrity": "sha512-A1k9cOgGMsJNx1lI0Lj2ZaLAH3WIL3xImi2EPXuAHgL1uBZqjuffP2P9XK4nr+KVc+PBivOxH7MoiYpJm97/xw==",
       "dev": true,
       "dependencies": {
-        "@uppy/utils": "^5.7.5",
+        "@uppy/utils": "^5.9.0",
         "namespace-emitter": "^2.0.1",
         "p-retry": "^6.1.0"
       },
       "peerDependencies": {
-        "@uppy/core": "^3.10.0"
+        "@uppy/core": "^3.11.0"
       }
     },
     "node_modules/@uppy/core": {
-      "version": "3.10.1",
-      "resolved": "https://registry.npmjs.org/@uppy/core/-/core-3.10.1.tgz",
-      "integrity": "sha512-sxA5zzVZzUabX8APMBLrvT/zZA3QZMYdyfqLCfZntLSPqmGONoQwkFDIYqnhW5RZP4ZBY4CnC6W9e2XeudB9cw==",
+      "version": "3.13.0",
+      "resolved": "https://registry.npmjs.org/@uppy/core/-/core-3.13.0.tgz",
+      "integrity": "sha512-qyht4dJ72AGWriwyy14h0wesrizgMEAU8Y6U3GKZYj6vfPOeEN0VbrbrkqlLxsczB5uyuUbhrPkPRU7srGDvtg==",
       "dev": true,
       "dependencies": {
-        "@transloadit/prettier-bytes": "^0.3.0",
+        "@transloadit/prettier-bytes": "^0.3.4",
         "@uppy/store-default": "^3.2.2",
-        "@uppy/utils": "^5.7.5",
+        "@uppy/utils": "^5.9.0",
         "lodash": "^4.17.21",
         "mime-match": "^1.0.2",
         "namespace-emitter": "^2.0.1",
@@ -8037,17 +8162,17 @@
       "dev": true
     },
     "node_modules/@uppy/tus": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@uppy/tus/-/tus-3.5.4.tgz",
-      "integrity": "sha512-Pv3JeUeuGsZi9WP8G6fX36G+NJdOpjv0UhVTtuFRATQAtEMtexpV3B6yKM7uZWHXa3la554wyfjZhtOmahXhAg==",
+      "version": "3.5.5",
+      "resolved": "https://registry.npmjs.org/@uppy/tus/-/tus-3.5.5.tgz",
+      "integrity": "sha512-Dcvqc897tSWRe9oiJo2ZCiyebn0G3j8FMYa99GYeLV9AeL37V/7akMAPG5ama4mTQLBXHcpziLqosTrf07ZMYQ==",
       "dev": true,
       "dependencies": {
-        "@uppy/companion-client": "^3.8.0",
-        "@uppy/utils": "^5.7.5",
+        "@uppy/companion-client": "^3.8.1",
+        "@uppy/utils": "^5.9.0",
         "tus-js-client": "^3.1.3"
       },
       "peerDependencies": {
-        "@uppy/core": "^3.10.0"
+        "@uppy/core": "^3.11.3"
       }
     },
     "node_modules/@uppy/tus/node_modules/is-stream": {
@@ -8078,9 +8203,9 @@
       }
     },
     "node_modules/@uppy/utils": {
-      "version": "5.8.0",
-      "resolved": "https://registry.npmjs.org/@uppy/utils/-/utils-5.8.0.tgz",
-      "integrity": "sha512-FB1Z4dTOsNo6yEc7dx8ACkjOVOZz2X4N1kPiBEhEKLTamCzz9kInax1vAl+XXBM8SG1XNQwz17EMm1UUY0NciQ==",
+      "version": "5.9.0",
+      "resolved": "https://registry.npmjs.org/@uppy/utils/-/utils-5.9.0.tgz",
+      "integrity": "sha512-9Ubddd3orCOLYjf0KobwgJ+aTrABSxk9t4X/QdM4qJHVZuMIftkaMplrViRUO+kvIBCXEZDIP2AmS060siDNGw==",
       "dev": true,
       "dependencies": {
         "lodash": "^4.17.21",
@@ -8106,9 +8231,9 @@
       }
     },
     "node_modules/@vitest/coverage-v8": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.5.2.tgz",
-      "integrity": "sha512-QJqxRnbCwNtbbegK9E93rBmhN3dbfG1bC/o52Bqr0zGCYhQzwgwvrJBG7Q8vw3zilX6Ryy6oa/mkZku2lLJx1Q==",
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.6.0.tgz",
+      "integrity": "sha512-KvapcbMY/8GYIG0rlwwOKCVNRc0OL20rrhFkg/CHNzncV03TE2XWvO5w9uZYoxNiMEBacAJt3unSOiZ7svePew==",
       "dev": true,
       "dependencies": {
         "@ampproject/remapping": "^2.2.1",
@@ -8129,17 +8254,17 @@
         "url": "https://opencollective.com/vitest"
       },
       "peerDependencies": {
-        "vitest": "1.5.2"
+        "vitest": "1.6.0"
       }
     },
     "node_modules/@vitest/expect": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.5.2.tgz",
-      "integrity": "sha512-rf7MTD1WCoDlN3FfYJ9Llfp0PbdtOMZ3FIF0AVkDnKbp3oiMW1c8AmvRZBcqbAhDUAvF52e9zx4WQM1r3oraVA==",
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz",
+      "integrity": "sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==",
       "dev": true,
       "dependencies": {
-        "@vitest/spy": "1.5.2",
-        "@vitest/utils": "1.5.2",
+        "@vitest/spy": "1.6.0",
+        "@vitest/utils": "1.6.0",
         "chai": "^4.3.10"
       },
       "funding": {
@@ -8147,12 +8272,12 @@
       }
     },
     "node_modules/@vitest/runner": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.5.2.tgz",
-      "integrity": "sha512-7IJ7sJhMZrqx7HIEpv3WrMYcq8ZNz9L6alo81Y6f8hV5mIE6yVZsFoivLZmr0D777klm1ReqonE9LyChdcmw6g==",
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.0.tgz",
+      "integrity": "sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==",
       "dev": true,
       "dependencies": {
-        "@vitest/utils": "1.5.2",
+        "@vitest/utils": "1.6.0",
         "p-limit": "^5.0.0",
         "pathe": "^1.1.1"
       },
@@ -8188,9 +8313,9 @@
       }
     },
     "node_modules/@vitest/snapshot": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.5.2.tgz",
-      "integrity": "sha512-CTEp/lTYos8fuCc9+Z55Ga5NVPKUgExritjF5VY7heRFUfheoAqBneUlvXSUJHUZPjnPmyZA96yLRJDP1QATFQ==",
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.0.tgz",
+      "integrity": "sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==",
       "dev": true,
       "dependencies": {
         "magic-string": "^0.30.5",
@@ -8234,9 +8359,9 @@
       "dev": true
     },
     "node_modules/@vitest/spy": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.5.2.tgz",
-      "integrity": "sha512-xCcPvI8JpCtgikT9nLpHPL1/81AYqZy1GCy4+MCHBE7xi8jgsYkULpW5hrx5PGLgOQjUpb6fd15lqcriJ40tfQ==",
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz",
+      "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==",
       "dev": true,
       "dependencies": {
         "tinyspy": "^2.2.0"
@@ -8246,9 +8371,9 @@
       }
     },
     "node_modules/@vitest/utils": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.5.2.tgz",
-      "integrity": "sha512-sWOmyofuXLJ85VvXNsroZur7mOJGiQeM0JN3/0D1uU8U9bGFM69X1iqHaRXl6R8BwaLY6yPCogP257zxTzkUdA==",
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz",
+      "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==",
       "dev": true,
       "dependencies": {
         "diff-sequences": "^29.6.3",
@@ -8302,31 +8427,32 @@
       "dev": true
     },
     "node_modules/@volar/language-core": {
-      "version": "2.2.0-alpha.10",
-      "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.2.0-alpha.10.tgz",
-      "integrity": "sha512-njVJLtpu0zMvDaEk7K5q4BRpOgbyEUljU++un9TfJoJNhxG0z/hWwpwgTRImO42EKvwIxF3XUzeMk+qatAFy7Q==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.3.0.tgz",
+      "integrity": "sha512-pvhL24WUh3VDnv7Yw5N1sjhPtdx7q9g+Wl3tggmnkMcyK8GcCNElF2zHiKznryn0DiUGk+eez/p2qQhz+puuHw==",
       "dev": true,
       "dependencies": {
-        "@volar/source-map": "2.2.0-alpha.10"
+        "@volar/source-map": "2.3.0"
       }
     },
     "node_modules/@volar/source-map": {
-      "version": "2.2.0-alpha.10",
-      "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.2.0-alpha.10.tgz",
-      "integrity": "sha512-nrdWApVkP5cksAnDEyy1JD9rKdwOJsEq1B+seWO4vNXmZNcxQQCx4DULLBvKt7AzRUAQiAuw5aQkb9RBaSqdVA==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.3.0.tgz",
+      "integrity": "sha512-G/228aZjAOGhDjhlyZ++nDbKrS9uk+5DMaEstjvzglaAw7nqtDyhnQAsYzUg6BMP9BtwZ59RIw5HGePrutn00Q==",
       "dev": true,
       "dependencies": {
         "muggle-string": "^0.4.0"
       }
     },
     "node_modules/@volar/typescript": {
-      "version": "2.2.0-alpha.10",
-      "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.2.0-alpha.10.tgz",
-      "integrity": "sha512-GCa0vTVVdA9ULUsu2Rx7jwsIuyZQPvPVT9o3NrANTbYv+523Ao1gv3glC5vzNSDPM6bUl37r94HbCj7KINQr+g==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.3.0.tgz",
+      "integrity": "sha512-PtUwMM87WsKVeLJN33GSTUjBexlKfKgouWlOUIv7pjrOnTwhXHZNSmpc312xgXdTjQPpToK6KXSIcKu9sBQ5LQ==",
       "dev": true,
       "dependencies": {
-        "@volar/language-core": "2.2.0-alpha.10",
-        "path-browserify": "^1.0.1"
+        "@volar/language-core": "2.3.0",
+        "path-browserify": "^1.0.1",
+        "vscode-uri": "^3.0.8"
       }
     },
     "node_modules/@vue/babel-helper-vue-transform-on": {
@@ -8453,9 +8579,9 @@
       }
     },
     "node_modules/@vue/devtools-api": {
-      "version": "6.6.1",
-      "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.1.tgz",
-      "integrity": "sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==",
+      "version": "6.6.3",
+      "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.3.tgz",
+      "integrity": "sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==",
       "dev": true
     },
     "node_modules/@vue/eslint-config-prettier": {
@@ -8587,12 +8713,12 @@
       }
     },
     "node_modules/@vue/language-core": {
-      "version": "2.0.14",
-      "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.14.tgz",
-      "integrity": "sha512-3q8mHSNcGTR7sfp2X6jZdcb4yt8AjBXAfKk0qkZIh7GAJxOnoZ10h5HToZglw4ToFvAnq+xu/Z2FFbglh9Icag==",
+      "version": "2.0.21",
+      "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.21.tgz",
+      "integrity": "sha512-vjs6KwnCK++kIXT+eI63BGpJHfHNVJcUCr3RnvJsccT3vbJnZV5IhHR2puEkoOkIbDdp0Gqi1wEnv3hEd3WsxQ==",
       "dev": true,
       "dependencies": {
-        "@volar/language-core": "2.2.0-alpha.10",
+        "@volar/language-core": "~2.3.0-alpha.15",
         "@vue/compiler-dom": "^3.4.0",
         "@vue/shared": "^3.4.0",
         "computeds": "^0.0.1",
@@ -8659,9 +8785,9 @@
       "dev": true
     },
     "node_modules/@vue/test-utils": {
-      "version": "2.4.5",
-      "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.5.tgz",
-      "integrity": "sha512-oo2u7vktOyKUked36R93NB7mg2B+N7Plr8lxp2JBGwr18ch6EggFjixSCdIVVLkT6Qr0z359Xvnafc9dcKyDUg==",
+      "version": "2.4.6",
+      "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz",
+      "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==",
       "dev": true,
       "dependencies": {
         "js-beautify": "^1.14.9",
@@ -8918,9 +9044,9 @@
       }
     },
     "node_modules/acorn": {
-      "version": "8.11.3",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
-      "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+      "version": "8.12.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz",
+      "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==",
       "bin": {
         "acorn": "bin/acorn"
       },
@@ -8928,10 +9054,10 @@
         "node": ">=0.4.0"
       }
     },
-    "node_modules/acorn-import-assertions": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
-      "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
+    "node_modules/acorn-import-attributes": {
+      "version": "1.9.5",
+      "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
+      "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
       "dev": true,
       "peer": true,
       "peerDependencies": {
@@ -8948,9 +9074,12 @@
       }
     },
     "node_modules/acorn-walk": {
-      "version": "8.3.2",
-      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
-      "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
+      "version": "8.3.3",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz",
+      "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==",
+      "dependencies": {
+        "acorn": "^8.11.0"
+      },
       "engines": {
         "node": ">=0.4.0"
       }
@@ -9033,14 +9162,14 @@
       }
     },
     "node_modules/ajv-formats/node_modules/ajv": {
-      "version": "8.12.0",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
-      "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+      "version": "8.16.0",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
+      "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
       "dependencies": {
-        "fast-deep-equal": "^3.1.1",
+        "fast-deep-equal": "^3.1.3",
         "json-schema-traverse": "^1.0.0",
         "require-from-string": "^2.0.2",
-        "uri-js": "^4.2.2"
+        "uri-js": "^4.4.1"
       },
       "funding": {
         "type": "github",
@@ -9366,6 +9495,16 @@
       "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
       "dev": true
     },
+    "node_modules/async-each-series": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz",
+      "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
     "node_modules/asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -9424,9 +9563,9 @@
       }
     },
     "node_modules/axios": {
-      "version": "1.6.8",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz",
-      "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==",
+      "version": "1.7.2",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
+      "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
       "dev": true,
       "dependencies": {
         "follow-redirects": "^1.15.6",
@@ -9720,35 +9859,35 @@
       "dev": true
     },
     "node_modules/bare-events": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz",
-      "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==",
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz",
+      "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==",
       "dev": true,
       "optional": true
     },
     "node_modules/bare-fs": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.0.tgz",
-      "integrity": "sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz",
+      "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==",
       "dev": true,
       "optional": true,
       "dependencies": {
         "bare-events": "^2.0.0",
         "bare-path": "^2.0.0",
-        "bare-stream": "^1.0.0"
+        "bare-stream": "^2.0.0"
       }
     },
     "node_modules/bare-os": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.3.0.tgz",
-      "integrity": "sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg==",
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz",
+      "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==",
       "dev": true,
       "optional": true
     },
     "node_modules/bare-path": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.2.tgz",
-      "integrity": "sha512-o7KSt4prEphWUHa3QUwCxUI00R86VdjiuxmJK0iNVDHYPGo+HsDaVCnqCmPbf/MiW1ok8F4p3m8RTHlWk8K2ig==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz",
+      "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -9756,13 +9895,13 @@
       }
     },
     "node_modules/bare-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-1.0.0.tgz",
-      "integrity": "sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.3.tgz",
+      "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==",
       "dev": true,
       "optional": true,
       "dependencies": {
-        "streamx": "^2.16.1"
+        "streamx": "^2.18.0"
       }
     },
     "node_modules/base64-js": {
@@ -9785,6 +9924,16 @@
         }
       ]
     },
+    "node_modules/base64id": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+      "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": "^4.5.0 || >= 5.9"
+      }
+    },
     "node_modules/basic-auth": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
@@ -9796,6 +9945,13 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/batch": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+      "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/bcryptjs": {
       "version": "2.4.3",
       "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
@@ -9966,11 +10122,11 @@
       }
     },
     "node_modules/braces": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
       "dependencies": {
-        "fill-range": "^7.0.1"
+        "fill-range": "^7.1.1"
       },
       "engines": {
         "node": ">=8"
@@ -9982,57 +10138,277 @@
       "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==",
       "dev": true
     },
-    "node_modules/browserify-zlib": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
-      "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==",
+    "node_modules/browser-sync": {
+      "version": "2.29.3",
+      "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.29.3.tgz",
+      "integrity": "sha512-NiM38O6XU84+MN+gzspVmXV2fTOoe+jBqIBx3IBdhZrdeURr6ZgznJr/p+hQ+KzkKEiGH/GcC4SQFSL0jV49bg==",
       "dev": true,
+      "peer": true,
       "dependencies": {
-        "pako": "~0.2.0"
+        "browser-sync-client": "^2.29.3",
+        "browser-sync-ui": "^2.29.3",
+        "bs-recipes": "1.3.4",
+        "chalk": "4.1.2",
+        "chokidar": "^3.5.1",
+        "connect": "3.6.6",
+        "connect-history-api-fallback": "^1",
+        "dev-ip": "^1.0.1",
+        "easy-extender": "^2.3.4",
+        "eazy-logger": "^4.0.1",
+        "etag": "^1.8.1",
+        "fresh": "^0.5.2",
+        "fs-extra": "3.0.1",
+        "http-proxy": "^1.18.1",
+        "immutable": "^3",
+        "localtunnel": "^2.0.1",
+        "micromatch": "^4.0.2",
+        "opn": "5.3.0",
+        "portscanner": "2.2.0",
+        "raw-body": "^2.3.2",
+        "resp-modifier": "6.0.2",
+        "rx": "4.1.0",
+        "send": "0.16.2",
+        "serve-index": "1.9.1",
+        "serve-static": "1.13.2",
+        "server-destroy": "1.0.1",
+        "socket.io": "^4.4.1",
+        "ua-parser-js": "^1.0.33",
+        "yargs": "^17.3.1"
+      },
+      "bin": {
+        "browser-sync": "dist/bin.js"
+      },
+      "engines": {
+        "node": ">= 8.0.0"
       }
     },
-    "node_modules/browserify-zlib/node_modules/pako": {
-      "version": "0.2.9",
-      "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
-      "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
-      "dev": true
-    },
-    "node_modules/browserslist": {
-      "version": "4.23.0",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
-      "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
+    "node_modules/browser-sync-client": {
+      "version": "2.29.3",
+      "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.3.tgz",
+      "integrity": "sha512-4tK5JKCl7v/3aLbmCBMzpufiYLsB1+UI+7tUXCCp5qF0AllHy/jAqYu6k7hUF3hYtlClKpxExWaR+rH+ny07wQ==",
       "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/browserslist"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
+      "peer": true,
       "dependencies": {
-        "caniuse-lite": "^1.0.30001587",
-        "electron-to-chromium": "^1.4.668",
-        "node-releases": "^2.0.14",
-        "update-browserslist-db": "^1.0.13"
-      },
-      "bin": {
-        "browserslist": "cli.js"
+        "etag": "1.8.1",
+        "fresh": "0.5.2",
+        "mitt": "^1.1.3"
       },
       "engines": {
-        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+        "node": ">=8.0.0"
       }
     },
-    "node_modules/buffer": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
-      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+    "node_modules/browser-sync-ui": {
+      "version": "2.29.3",
+      "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.3.tgz",
+      "integrity": "sha512-kBYOIQjU/D/3kYtUIJtj82e797Egk1FB2broqItkr3i4eF1qiHbFCG6srksu9gWhfmuM/TNG76jMfzAdxEPakg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "async-each-series": "0.1.1",
+        "chalk": "4.1.2",
+        "connect-history-api-fallback": "^1",
+        "immutable": "^3",
+        "server-destroy": "1.0.1",
+        "socket.io-client": "^4.4.1",
+        "stream-throttle": "^0.1.3"
+      }
+    },
+    "node_modules/browser-sync-ui/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/browser-sync-ui/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/browser-sync-ui/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/browser-sync-ui/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/browser-sync/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/browser-sync/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/browser-sync/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/browser-sync/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/browser-sync/node_modules/fs-extra": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
+      "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "graceful-fs": "^4.1.2",
+        "jsonfile": "^3.0.0",
+        "universalify": "^0.1.0"
+      }
+    },
+    "node_modules/browser-sync/node_modules/jsonfile": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
+      "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==",
+      "dev": true,
+      "peer": true,
+      "optionalDependencies": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "node_modules/browser-sync/node_modules/universalify": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">= 4.0.0"
+      }
+    },
+    "node_modules/browserify-zlib": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+      "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==",
+      "dev": true,
+      "dependencies": {
+        "pako": "~0.2.0"
+      }
+    },
+    "node_modules/browserify-zlib/node_modules/pako": {
+      "version": "0.2.9",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+      "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
+      "dev": true
+    },
+    "node_modules/browserslist": {
+      "version": "4.23.1",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz",
+      "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "dependencies": {
+        "caniuse-lite": "^1.0.30001629",
+        "electron-to-chromium": "^1.4.796",
+        "node-releases": "^2.0.14",
+        "update-browserslist-db": "^1.0.16"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      }
+    },
+    "node_modules/bs-recipes": {
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
+      "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/buffer": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
       "dev": true,
       "funding": [
         {
@@ -10182,9 +10558,9 @@
       "link": true
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001614",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz",
-      "integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==",
+      "version": "1.0.30001636",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz",
+      "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==",
       "dev": true,
       "funding": [
         {
@@ -10202,14 +10578,14 @@
       ]
     },
     "node_modules/carbone": {
-      "version": "3.5.5",
-      "resolved": "https://registry.npmjs.org/carbone/-/carbone-3.5.5.tgz",
-      "integrity": "sha512-timDDy9nCW3R7YqgV1i6aFdbaZ12TNWmdGVv8zzurZa2u6p4iqHaWjiuxfqJV4Sn/0bCKoc7iC0n7j9QOpyP/w==",
+      "version": "3.5.6",
+      "resolved": "https://registry.npmjs.org/carbone/-/carbone-3.5.6.tgz",
+      "integrity": "sha512-bjTEJAmVQnMJoFAIs6Z0tAUpQoglUH0i4dLV34m8rCKWKagfhAM/zJyyKkU6n9EeyuuoOfCyppsShdvYr0ZfDw==",
       "dev": true,
       "dependencies": {
-        "dayjs": "=1.11.7",
+        "dayjs": "=1.11.11",
         "dayjs-timezone-iana-plugin": "=0.1.0",
-        "debug": "=4.3.4",
+        "debug": "=4.3.5",
         "which": "=2.0.2",
         "yauzl": "=2.10.0",
         "yazl": "=2.5.1"
@@ -10281,9 +10657,9 @@
       }
     },
     "node_modules/chart.js": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.2.tgz",
-      "integrity": "sha512-6GD7iKwFpP5kbSD4MeRRRlTnQvxfQREy36uEtm1hzHzcOqwWx0YEHuspuoNlslu+nciLIB7fjjsHkUv/FzFcOg==",
+      "version": "4.4.3",
+      "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.3.tgz",
+      "integrity": "sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==",
       "dev": true,
       "dependencies": {
         "@kurkle/color": "^0.3.0"
@@ -10338,9 +10714,9 @@
       }
     },
     "node_modules/chrome-trace-event": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
-      "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+      "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
       "dev": true,
       "peer": true,
       "engines": {
@@ -10574,9 +10950,9 @@
       }
     },
     "node_modules/cli-table3": {
-      "version": "0.6.4",
-      "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.4.tgz",
-      "integrity": "sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==",
+      "version": "0.6.5",
+      "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz",
+      "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==",
       "dev": true,
       "dependencies": {
         "string-width": "^4.2.0"
@@ -10861,12 +11237,12 @@
       }
     },
     "node_modules/commander": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
-      "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+      "version": "12.1.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+      "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
       "dev": true,
       "engines": {
-        "node": ">=16"
+        "node": ">=18"
       }
     },
     "node_modules/common-path-prefix": {
@@ -10969,6 +11345,49 @@
         "proto-list": "~1.2.1"
       }
     },
+    "node_modules/connect": {
+      "version": "3.6.6",
+      "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
+      "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "debug": "2.6.9",
+        "finalhandler": "1.1.0",
+        "parseurl": "~1.3.2",
+        "utils-merge": "1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.10.0"
+      }
+    },
+    "node_modules/connect-history-api-fallback": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+      "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/connect/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/connect/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/consola": {
       "version": "3.2.3",
       "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz",
@@ -11147,9 +11566,9 @@
       }
     },
     "node_modules/core-js": {
-      "version": "3.37.0",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz",
-      "integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==",
+      "version": "3.37.1",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz",
+      "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==",
       "dev": true,
       "hasInstallScript": true,
       "funding": {
@@ -11158,9 +11577,9 @@
       }
     },
     "node_modules/core-js-compat": {
-      "version": "3.37.0",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz",
-      "integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==",
+      "version": "3.37.1",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
+      "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
       "dev": true,
       "dependencies": {
         "browserslist": "^4.23.0"
@@ -11307,9 +11726,9 @@
       }
     },
     "node_modules/css-has-pseudo": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.3.tgz",
-      "integrity": "sha512-qIsDxK/z0byH/mpNsv5hzQ5NOl8m1FRmOLgZpx4bG5uYHnOlO2XafeMI4mFIgNSViHwoUWcxSJZyyijaAmbs+A==",
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.5.tgz",
+      "integrity": "sha512-ZTv6RlvJJZKp32jPYnAJVhowDCrRrHUTAxsYSuUPBEDJjzws6neMnzkRblxtgmv1RgcV5dhH2gn7E3wA9Wt6lw==",
       "dev": true,
       "funding": [
         {
@@ -11322,7 +11741,7 @@
         }
       ],
       "dependencies": {
-        "@csstools/selector-specificity": "^3.0.3",
+        "@csstools/selector-specificity": "^3.1.1",
         "postcss-selector-parser": "^6.0.13",
         "postcss-value-parser": "^4.2.0"
       },
@@ -11356,9 +11775,9 @@
       }
     },
     "node_modules/cssdb": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.0.0.tgz",
-      "integrity": "sha512-hfpm8VXc7/dhcEWpLvKDLwImOSk1sa2DxL36OEiY/4h2MGfKjPYIMZo4hnEEl+TCJr2GwcX46jF5TafRASDe9w==",
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.0.2.tgz",
+      "integrity": "sha512-zbOCmmbcHvr2lP+XrZSgftGMGumbosC6IM3dbxwifwPEBD70pVJaH3Ho191VBEqDg644AM7PPPVj0ZXokTjZng==",
       "dev": true,
       "funding": [
         {
@@ -11395,6 +11814,12 @@
         "node": ">=18"
       }
     },
+    "node_modules/cssstyle/node_modules/rrweb-cssom": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
+      "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
+      "dev": true
+    },
     "node_modules/csstype": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
@@ -11472,9 +11897,9 @@
       }
     },
     "node_modules/dayjs": {
-      "version": "1.11.7",
-      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz",
-      "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==",
+      "version": "1.11.11",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz",
+      "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==",
       "dev": true
     },
     "node_modules/dayjs-timezone-iana-plugin": {
@@ -11495,9 +11920,9 @@
       "dev": true
     },
     "node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "version": "4.3.5",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
+      "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
       "dependencies": {
         "ms": "2.1.2"
       },
@@ -11516,9 +11941,9 @@
       "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
     },
     "node_modules/deep-eql": {
-      "version": "4.1.3",
-      "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
-      "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
+      "version": "4.1.4",
+      "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz",
+      "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==",
       "dev": true,
       "dependencies": {
         "type-detect": "^4.0.0"
@@ -11924,9 +12349,9 @@
       }
     },
     "node_modules/detect-port": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz",
-      "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==",
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz",
+      "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==",
       "dev": true,
       "dependencies": {
         "address": "^1.0.1",
@@ -11935,6 +12360,22 @@
       "bin": {
         "detect": "bin/detect-port.js",
         "detect-port": "bin/detect-port.js"
+      },
+      "engines": {
+        "node": ">= 4.0.0"
+      }
+    },
+    "node_modules/dev-ip": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz",
+      "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==",
+      "dev": true,
+      "peer": true,
+      "bin": {
+        "dev-ip": "lib/dev-ip.js"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
     "node_modules/dezalgo": {
@@ -12128,22 +12569,101 @@
       "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
       "dev": true
     },
-    "node_modules/ecdsa-sig-formatter": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
-      "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+    "node_modules/easy-extender": {
+      "version": "2.3.4",
+      "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz",
+      "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==",
+      "dev": true,
+      "peer": true,
       "dependencies": {
-        "safe-buffer": "^5.0.1"
+        "lodash": "^4.17.10"
+      },
+      "engines": {
+        "node": ">= 4.0.0"
       }
     },
-    "node_modules/editorconfig": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz",
-      "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==",
+    "node_modules/eazy-logger": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz",
+      "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==",
       "dev": true,
+      "peer": true,
       "dependencies": {
-        "@one-ini/wasm": "0.1.1",
-        "commander": "^10.0.0",
+        "chalk": "4.1.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/eazy-logger/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/eazy-logger/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/eazy-logger/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/eazy-logger/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/ecdsa-sig-formatter": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+      "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+      "dependencies": {
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "node_modules/editorconfig": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz",
+      "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==",
+      "dev": true,
+      "dependencies": {
+        "@one-ini/wasm": "0.1.1",
+        "commander": "^10.0.0",
         "minimatch": "9.0.1",
         "semver": "^7.5.3"
       },
@@ -12199,9 +12719,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.750",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.750.tgz",
-      "integrity": "sha512-9ItEpeu15hW5m8jKdriL+BQrgwDTXEL9pn4SkillWFu73ZNNNQ2BKKLS+ZHv2vC9UkNhosAeyfxOf/5OSeTCPA==",
+      "version": "1.4.806",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.806.tgz",
+      "integrity": "sha512-nkoEX2QIB8kwCOtvtgwhXWy2IHVcOLQZu9Qo36uaGB835mdX/h8uLRlosL6QIhLVUnAiicXRW00PwaPZC74Nrg==",
       "dev": true
     },
     "node_modules/email-validator": {
@@ -12242,10 +12762,56 @@
         "once": "^1.4.0"
       }
     },
+    "node_modules/engine.io": {
+      "version": "6.5.5",
+      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz",
+      "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@types/cookie": "^0.4.1",
+        "@types/cors": "^2.8.12",
+        "@types/node": ">=10.0.0",
+        "accepts": "~1.3.4",
+        "base64id": "2.0.0",
+        "cookie": "~0.4.1",
+        "cors": "~2.8.5",
+        "debug": "~4.3.1",
+        "engine.io-parser": "~5.2.1",
+        "ws": "~8.17.1"
+      },
+      "engines": {
+        "node": ">=10.2.0"
+      }
+    },
+    "node_modules/engine.io-client": {
+      "version": "6.5.4",
+      "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz",
+      "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@socket.io/component-emitter": "~3.1.0",
+        "debug": "~4.3.1",
+        "engine.io-parser": "~5.2.1",
+        "ws": "~8.17.1",
+        "xmlhttprequest-ssl": "~2.0.0"
+      }
+    },
+    "node_modules/engine.io-parser": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz",
+      "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
     "node_modules/enhanced-resolve": {
-      "version": "5.16.0",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz",
-      "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==",
+      "version": "5.17.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz",
+      "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==",
       "dev": true,
       "peer": true,
       "dependencies": {
@@ -12301,6 +12867,18 @@
         "node": ">=4"
       }
     },
+    "node_modules/environment": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz",
+      "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/errno": {
       "version": "0.1.8",
       "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
@@ -12623,9 +13201,9 @@
       }
     },
     "node_modules/eslint-compat-utils": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz",
-      "integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==",
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz",
+      "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==",
       "dev": true,
       "dependencies": {
         "semver": "^7.5.4"
@@ -12769,21 +13347,22 @@
       }
     },
     "node_modules/eslint-plugin-es-x": {
-      "version": "7.6.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.6.0.tgz",
-      "integrity": "sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==",
+      "version": "7.7.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.7.0.tgz",
+      "integrity": "sha512-aP3qj8BwiEDPttxQkZdI221DLKq9sI/qHolE2YSQL1/9+xk7dTV+tB1Fz8/IaCA+lnLA1bDEnvaS2LKs0k2Uig==",
       "dev": true,
+      "funding": [
+        "https://github.com/sponsors/ota-meshi",
+        "https://opencollective.com/eslint"
+      ],
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.1.2",
         "@eslint-community/regexpp": "^4.6.0",
-        "eslint-compat-utils": "^0.5.0"
+        "eslint-compat-utils": "^0.5.1"
       },
       "engines": {
         "node": "^14.18.0 || >=16.0.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/ota-meshi"
-      },
       "peerDependencies": {
         "eslint": ">=8"
       }
@@ -13030,15 +13609,18 @@
       }
     },
     "node_modules/eslint-plugin-promise": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz",
-      "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==",
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.2.0.tgz",
+      "integrity": "sha512-QmAqwizauvnKOlifxyDj2ObfULpHQawlg/zQdgEixur9vl0CvZGv/LCJV2rtj3210QCoeGBzVMfMXqGAOr/4fA==",
       "dev": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      },
       "peerDependencies": {
-        "eslint": "^7.0.0 || ^8.0.0"
+        "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
       }
     },
     "node_modules/eslint-plugin-sql": {
@@ -13061,9 +13643,9 @@
       }
     },
     "node_modules/eslint-plugin-vue": {
-      "version": "9.25.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.25.0.tgz",
-      "integrity": "sha512-tDWlx14bVe6Bs+Nnh3IGrD+hb11kf2nukfm6jLsmJIhmiRQ1SUaksvwY9U5MvPB0pcrg0QK0xapQkfITs3RKOA==",
+      "version": "9.26.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.26.0.tgz",
+      "integrity": "sha512-eTvlxXgd4ijE1cdur850G6KalZqk65k1JKoOI2d1kT3hr8sPD07j1q98FRFdNnpxBELGPWxZmInxeHGF/GxtqQ==",
       "dev": true,
       "peer": true,
       "dependencies": {
@@ -13632,9 +14214,9 @@
       }
     },
     "node_modules/express-rate-limit": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.2.0.tgz",
-      "integrity": "sha512-T7nul1t4TNyfZMJ7pKRKkdeVJWa2CqB8NA1P8BwYaoDI5QSBZARv5oMS43J7b7I5P+4asjVXjb7ONuwDKucahg==",
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.3.1.tgz",
+      "integrity": "sha512-BbaryvkY4wEgDqLgD18/NSy2lDO2jTuT9Y8c1Mpx0X63Yz0sYd5zN6KPe7UvpuSVvV33T6RaE1o1IVZQjHMYgw==",
       "engines": {
         "node": ">= 16"
       },
@@ -13666,6 +14248,34 @@
         "ms": "2.0.0"
       }
     },
+    "node_modules/express/node_modules/finalhandler": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+      "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+      "dependencies": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "2.4.1",
+        "parseurl": "~1.3.3",
+        "statuses": "2.0.1",
+        "unpipe": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/express/node_modules/mime": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/express/node_modules/ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -13704,6 +14314,48 @@
         }
       ]
     },
+    "node_modules/express/node_modules/send": {
+      "version": "0.18.0",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+      "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+      "dependencies": {
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "2.0.0",
+        "mime": "1.6.0",
+        "ms": "2.1.3",
+        "on-finished": "2.4.1",
+        "range-parser": "~1.2.1",
+        "statuses": "2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/express/node_modules/send/node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+    },
+    "node_modules/express/node_modules/serve-static": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+      "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+      "dependencies": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "0.18.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
     "node_modules/extend-shallow": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
@@ -13883,9 +14535,9 @@
       }
     },
     "node_modules/fill-range": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
       "dependencies": {
         "to-regex-range": "^5.0.1"
       },
@@ -13894,16 +14546,18 @@
       }
     },
     "node_modules/finalhandler": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
-      "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
+      "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==",
+      "dev": true,
+      "peer": true,
       "dependencies": {
         "debug": "2.6.9",
-        "encodeurl": "~1.0.2",
+        "encodeurl": "~1.0.1",
         "escape-html": "~1.0.3",
-        "on-finished": "2.4.1",
-        "parseurl": "~1.3.3",
-        "statuses": "2.0.1",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.2",
+        "statuses": "~1.3.1",
         "unpipe": "~1.0.0"
       },
       "engines": {
@@ -13914,6 +14568,8 @@
       "version": "2.6.9",
       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
       "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "peer": true,
       "dependencies": {
         "ms": "2.0.0"
       }
@@ -13921,7 +14577,32 @@
     "node_modules/finalhandler/node_modules/ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/finalhandler/node_modules/on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+      "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ee-first": "1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/finalhandler/node_modules/statuses": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+      "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
     },
     "node_modules/find-cache-dir": {
       "version": "3.3.2",
@@ -14089,9 +14770,9 @@
       "dev": true
     },
     "node_modules/flow-parser": {
-      "version": "0.235.1",
-      "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.235.1.tgz",
-      "integrity": "sha512-s04193L4JE+ntEcQXbD6jxRRlyj9QXcgEl2W6xSjH4l9x4b0eHoCHfbYHjqf9LdZFUiM5LhgpiqsvLj/AyOyYQ==",
+      "version": "0.238.0",
+      "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.238.0.tgz",
+      "integrity": "sha512-VE7XSv1epljsIN2YeBnxCmGJihpNIAnLLu/pPOdA+Gkso7qDltJwUi6vfHjgxdBbjSdAuPGnhuOHJUQG+yYwIg==",
       "dev": true,
       "engines": {
         "node": ">=0.4.0"
@@ -14126,9 +14807,9 @@
       }
     },
     "node_modules/foreground-child": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
-      "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
+      "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
       "dev": true,
       "dependencies": {
         "cross-spawn": "^7.0.0",
@@ -14288,9 +14969,9 @@
       }
     },
     "node_modules/function-timeout": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-1.0.1.tgz",
-      "integrity": "sha512-6yPMImFFuaMPNaTMTBuolA8EanHJWF5Vju0NHpObRURT105J6x1Mf2a7J4P7Sqk2xDxv24N5L0RatEhTBhNmdA==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-1.0.2.tgz",
+      "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==",
       "dev": true,
       "engines": {
         "node": ">=18"
@@ -14445,9 +15126,9 @@
       }
     },
     "node_modules/get-tsconfig": {
-      "version": "4.7.3",
-      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
-      "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==",
+      "version": "4.7.5",
+      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz",
+      "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==",
       "dev": true,
       "dependencies": {
         "resolve-pkg-maps": "^1.0.0"
@@ -14519,22 +15200,23 @@
       "dev": true
     },
     "node_modules/glob": {
-      "version": "10.3.12",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz",
-      "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==",
+      "version": "10.4.2",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
+      "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
       "dev": true,
       "dependencies": {
         "foreground-child": "^3.1.0",
-        "jackspeak": "^2.3.6",
-        "minimatch": "^9.0.1",
-        "minipass": "^7.0.4",
-        "path-scurry": "^1.10.2"
+        "jackspeak": "^3.1.2",
+        "minimatch": "^9.0.4",
+        "minipass": "^7.1.2",
+        "package-json-from-dist": "^1.0.0",
+        "path-scurry": "^1.11.1"
       },
       "bin": {
         "glob": "dist/esm/bin.mjs"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.17"
+        "node": ">=16 || 14 >=14.18"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
@@ -14593,12 +15275,13 @@
       }
     },
     "node_modules/globalthis": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
-      "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+      "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
       "dev": true,
       "dependencies": {
-        "define-properties": "^1.1.3"
+        "define-properties": "^1.2.1",
+        "gopd": "^1.0.1"
       },
       "engines": {
         "node": ">= 0.4"
@@ -14663,9 +15346,9 @@
       "dev": true
     },
     "node_modules/graphql": {
-      "version": "16.8.1",
-      "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz",
-      "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==",
+      "version": "16.8.2",
+      "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.2.tgz",
+      "integrity": "sha512-cvVIBILwuoSyD54U4cF/UXDh5yAobhNV/tPygI4lZhgOIJQE/WLWC4waBRb4I6bDVYb3OVx3lfHbaQOEoUD5sg==",
       "engines": {
         "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0"
       }
@@ -14905,9 +15588,9 @@
       }
     },
     "node_modules/hosted-git-info": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz",
-      "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==",
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+      "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
       "dev": true,
       "dependencies": {
         "lru-cache": "^10.0.1"
@@ -14994,6 +15677,21 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/http-proxy": {
+      "version": "1.18.1",
+      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+      "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "eventemitter3": "^4.0.0",
+        "follow-redirects": "^1.0.0",
+        "requires-port": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
     "node_modules/http-proxy-agent": {
       "version": "7.0.2",
       "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
@@ -15007,6 +15705,13 @@
         "node": ">= 14"
       }
     },
+    "node_modules/http-proxy/node_modules/eventemitter3": {
+      "version": "4.0.7",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+      "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/https-proxy-agent": {
       "version": "7.0.4",
       "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
@@ -15114,10 +15819,14 @@
       "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
     },
     "node_modules/immutable": {
-      "version": "4.3.5",
-      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
-      "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
-      "dev": true
+      "version": "3.8.2",
+      "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
+      "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
     "node_modules/import-fresh": {
       "version": "3.3.0",
@@ -15204,6 +15913,7 @@
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+      "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
       "dev": true,
       "dependencies": {
         "once": "^1.3.0",
@@ -15601,6 +16311,16 @@
         "node": ">=0.12.0"
       }
     },
+    "node_modules/is-number-like": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz",
+      "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "lodash.isfinite": "^3.3.2"
+      }
+    },
     "node_modules/is-number-object": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
@@ -15882,9 +16602,9 @@
       }
     },
     "node_modules/issue-parser": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.0.tgz",
-      "integrity": "sha512-jgAw78HO3gs9UrKqJNQvfDj9Ouy8Mhu40fbEJ8yXff4MW8+/Fcn9iFjyWUQ6SKbX8ipPk3X5A3AyfYHRu6uVLw==",
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz",
+      "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==",
       "dev": true,
       "dependencies": {
         "lodash.capitalize": "^4.2.1",
@@ -15968,9 +16688,9 @@
       "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg=="
     },
     "node_modules/jackspeak": {
-      "version": "2.3.6",
-      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
-      "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
+      "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
       "dev": true,
       "dependencies": {
         "@isaacs/cliui": "^8.0.2"
@@ -15986,9 +16706,9 @@
       }
     },
     "node_modules/jake": {
-      "version": "10.8.7",
-      "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz",
-      "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==",
+      "version": "10.9.1",
+      "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz",
+      "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==",
       "dev": true,
       "dependencies": {
         "async": "^3.2.3",
@@ -16263,9 +16983,9 @@
       "dev": true
     },
     "node_modules/jsdom": {
-      "version": "24.0.0",
-      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz",
-      "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==",
+      "version": "24.1.0",
+      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.0.tgz",
+      "integrity": "sha512-6gpM7pRXCwIOKxX47cgOyvyQDN/Eh0f1MeKySBV2xGdKtqJBLj8P25eY3EVCWo2mglDDzozR2r2MW4T+JiNUZA==",
       "dev": true,
       "dependencies": {
         "cssstyle": "^4.0.1",
@@ -16273,21 +16993,21 @@
         "decimal.js": "^10.4.3",
         "form-data": "^4.0.0",
         "html-encoding-sniffer": "^4.0.0",
-        "http-proxy-agent": "^7.0.0",
-        "https-proxy-agent": "^7.0.2",
+        "http-proxy-agent": "^7.0.2",
+        "https-proxy-agent": "^7.0.4",
         "is-potential-custom-element-name": "^1.0.1",
-        "nwsapi": "^2.2.7",
+        "nwsapi": "^2.2.10",
         "parse5": "^7.1.2",
-        "rrweb-cssom": "^0.6.0",
+        "rrweb-cssom": "^0.7.0",
         "saxes": "^6.0.0",
         "symbol-tree": "^3.2.4",
-        "tough-cookie": "^4.1.3",
+        "tough-cookie": "^4.1.4",
         "w3c-xmlserializer": "^5.0.0",
         "webidl-conversions": "^7.0.0",
         "whatwg-encoding": "^3.1.1",
         "whatwg-mimetype": "^4.0.0",
         "whatwg-url": "^14.0.0",
-        "ws": "^8.16.0",
+        "ws": "^8.17.0",
         "xml-name-validator": "^5.0.0"
       },
       "engines": {
@@ -16622,13 +17342,29 @@
         "node": ">=14"
       }
     },
-    "node_modules/lazy-universal-dotenv": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz",
-      "integrity": "sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==",
-      "dev": true,
-      "dependencies": {
-        "app-root-dir": "^1.0.2",
+    "node_modules/knex/node_modules/debug": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/lazy-universal-dotenv": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz",
+      "integrity": "sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==",
+      "dev": true,
+      "dependencies": {
+        "app-root-dir": "^1.0.2",
         "dotenv": "^16.0.0",
         "dotenv-expand": "^10.0.0"
       },
@@ -16775,14 +17511,24 @@
       }
     },
     "node_modules/lilconfig": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
-      "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
+      "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
       "dev": true,
       "engines": {
         "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antonk52"
       }
     },
+    "node_modules/limiter": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz",
+      "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/lines-and-columns": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
@@ -16790,21 +17536,21 @@
       "dev": true
     },
     "node_modules/lint-staged": {
-      "version": "15.2.2",
-      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz",
-      "integrity": "sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "5.3.0",
-        "commander": "11.1.0",
-        "debug": "4.3.4",
-        "execa": "8.0.1",
-        "lilconfig": "3.0.0",
-        "listr2": "8.0.1",
-        "micromatch": "4.0.5",
-        "pidtree": "0.6.0",
-        "string-argv": "0.3.2",
-        "yaml": "2.3.4"
+      "version": "15.2.7",
+      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz",
+      "integrity": "sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==",
+      "dev": true,
+      "dependencies": {
+        "chalk": "~5.3.0",
+        "commander": "~12.1.0",
+        "debug": "~4.3.4",
+        "execa": "~8.0.1",
+        "lilconfig": "~3.1.1",
+        "listr2": "~8.2.1",
+        "micromatch": "~4.0.7",
+        "pidtree": "~0.6.0",
+        "string-argv": "~0.3.2",
+        "yaml": "~2.4.2"
       },
       "bin": {
         "lint-staged": "bin/lint-staged.js"
@@ -16817,16 +17563,16 @@
       }
     },
     "node_modules/listr2": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz",
-      "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==",
+      "version": "8.2.1",
+      "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz",
+      "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==",
       "dev": true,
       "dependencies": {
         "cli-truncate": "^4.0.0",
         "colorette": "^2.0.20",
         "eventemitter3": "^5.0.1",
         "log-update": "^6.0.0",
-        "rfdc": "^1.3.0",
+        "rfdc": "^1.3.1",
         "wrap-ansi": "^9.0.0"
       },
       "engines": {
@@ -16903,6 +17649,203 @@
         "immediate": "~3.0.5"
       }
     },
+    "node_modules/localtunnel": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz",
+      "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "axios": "0.21.4",
+        "debug": "4.3.2",
+        "openurl": "1.1.1",
+        "yargs": "17.1.1"
+      },
+      "bin": {
+        "lt": "bin/lt.js"
+      },
+      "engines": {
+        "node": ">=8.3.0"
+      }
+    },
+    "node_modules/localtunnel/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/localtunnel/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/localtunnel/node_modules/axios": {
+      "version": "0.21.4",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+      "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "follow-redirects": "^1.14.0"
+      }
+    },
+    "node_modules/localtunnel/node_modules/cliui": {
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+      "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^7.0.0"
+      }
+    },
+    "node_modules/localtunnel/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/localtunnel/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/localtunnel/node_modules/debug": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+      "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/localtunnel/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/localtunnel/node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/localtunnel/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/localtunnel/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/localtunnel/node_modules/wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/localtunnel/node_modules/yargs": {
+      "version": "17.1.1",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz",
+      "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "cliui": "^7.0.2",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.0",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^20.2.2"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/localtunnel/node_modules/yargs-parser": {
+      "version": "20.2.9",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/locate-path": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
@@ -17007,6 +17950,13 @@
       "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
       "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
     },
+    "node_modules/lodash.isfinite": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
+      "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/lodash.isinteger": {
       "version": "4.0.4",
       "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
@@ -17041,8 +17991,7 @@
     "node_modules/lodash.throttle": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
-      "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==",
-      "dev": true
+      "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ=="
     },
     "node_modules/lodash.uniqby": {
       "version": "4.7.0",
@@ -17273,9 +18222,9 @@
       "dev": true
     },
     "node_modules/maplibre-gl": {
-      "version": "4.1.3",
-      "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.1.3.tgz",
-      "integrity": "sha512-nMy5h0kzq9Z66C6AIb3p2BvLIVHz75dGGQow22x+h9/VOihr0IPQI26ylAi6lHqvEy2VqjiRmKAMlFwt0xFKfQ==",
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.4.1.tgz",
+      "integrity": "sha512-tD+wn8qWSLCGhABKBrbewmgFfyopZDz+fkYXeOM8vdBhnf126DvMPyaYGGoKvoF4QuswCsgikETd2c39wK+OQw==",
       "dev": true,
       "dependencies": {
         "@mapbox/geojson-rewind": "^0.5.2",
@@ -17285,9 +18234,10 @@
         "@mapbox/unitbezier": "^0.0.1",
         "@mapbox/vector-tile": "^1.3.1",
         "@mapbox/whoots-js": "^3.1.0",
-        "@maplibre/maplibre-gl-style-spec": "^20.1.1",
+        "@maplibre/maplibre-gl-style-spec": "^20.3.0",
         "@types/geojson": "^7946.0.14",
         "@types/geojson-vt": "3.2.5",
+        "@types/junit-report-builder": "^3.0.2",
         "@types/mapbox__point-geometry": "^0.1.4",
         "@types/mapbox__vector-tile": "^1.3.4",
         "@types/pbf": "^3.0.5",
@@ -17338,15 +18288,15 @@
       }
     },
     "node_modules/marked-terminal": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-7.0.0.tgz",
-      "integrity": "sha512-sNEx8nn9Ktcm6pL0TnRz8tnXq/mSS0Q1FRSwJOAqw4lAB4l49UeDf85Gm1n9RPFm5qurCPjwi1StAQT2XExhZw==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-7.1.0.tgz",
+      "integrity": "sha512-+pvwa14KZL74MVXjYdPR3nSInhGhNvPce/3mqLVZT2oUvt654sL1XImFuLZ1pkA866IYZ3ikDTOFUIC7XzpZZg==",
       "dev": true,
       "dependencies": {
-        "ansi-escapes": "^6.2.0",
+        "ansi-escapes": "^7.0.0",
         "chalk": "^5.3.0",
         "cli-highlight": "^2.1.11",
-        "cli-table3": "^0.6.3",
+        "cli-table3": "^0.6.5",
         "node-emoji": "^2.1.3",
         "supports-hyperlinks": "^3.0.0"
       },
@@ -17354,7 +18304,22 @@
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "marked": ">=1 <13"
+        "marked": ">=1 <14"
+      }
+    },
+    "node_modules/marked-terminal/node_modules/ansi-escapes": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz",
+      "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==",
+      "dev": true,
+      "dependencies": {
+        "environment": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/media-typer": {
@@ -17419,11 +18384,11 @@
       "integrity": "sha512-awNbTOqCxK1DBGjalK3xqWIstBZgN6fxsMSiXLs9/spqWkF2pAhb2rrYCFSsr1/tT7PhcDGjZndG8SWYn0byYA=="
     },
     "node_modules/micromatch": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "version": "4.0.7",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+      "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
       "dependencies": {
-        "braces": "^3.0.2",
+        "braces": "^3.0.3",
         "picomatch": "^2.3.1"
       },
       "engines": {
@@ -17510,9 +18475,9 @@
       }
     },
     "node_modules/minipass": {
-      "version": "7.0.4",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
-      "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+      "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
       "dev": true,
       "engines": {
         "node": ">=16 || 14 >=14.17"
@@ -17543,6 +18508,13 @@
         "node": ">=8"
       }
     },
+    "node_modules/mitt": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz",
+      "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/mkdirp": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
@@ -17562,15 +18534,15 @@
       "dev": true
     },
     "node_modules/mlly": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz",
-      "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==",
+      "version": "1.7.1",
+      "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz",
+      "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==",
       "dev": true,
       "dependencies": {
         "acorn": "^8.11.3",
         "pathe": "^1.1.2",
-        "pkg-types": "^1.0.3",
-        "ufo": "^1.3.2"
+        "pkg-types": "^1.1.1",
+        "ufo": "^1.5.3"
       }
     },
     "node_modules/ms": {
@@ -17814,9 +18786,9 @@
       "dev": true
     },
     "node_modules/nopt": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz",
-      "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==",
+      "version": "7.2.1",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
+      "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
       "dev": true,
       "dependencies": {
         "abbrev": "^2.0.0"
@@ -17829,9 +18801,9 @@
       }
     },
     "node_modules/normalize-package-data": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz",
-      "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.1.tgz",
+      "integrity": "sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==",
       "dev": true,
       "dependencies": {
         "hosted-git-info": "^7.0.0",
@@ -17874,9 +18846,9 @@
       }
     },
     "node_modules/npm": {
-      "version": "10.6.0",
-      "resolved": "https://registry.npmjs.org/npm/-/npm-10.6.0.tgz",
-      "integrity": "sha512-KC70Su2ZnO9v4i2t+M0sQcsRERk++XcYbK9fy4bLWzUCV2nELhSN7UAkoe42P4HQTg2LyQxcfntgYS89OEaOsA==",
+      "version": "10.8.1",
+      "resolved": "https://registry.npmjs.org/npm/-/npm-10.8.1.tgz",
+      "integrity": "sha512-Dp1C6SvSMYQI7YHq/y2l94uvI+59Eqbu1EpuKQHQ8p16txXRuRit5gH3Lnaagk2aXDIjg/Iru9pd05bnneKgdw==",
       "bundleDependencies": [
         "@isaacs/string-locale-compare",
         "@npmcli/arborist",
@@ -17933,7 +18905,6 @@
         "pacote",
         "parse-conflict-json",
         "proc-log",
-        "proggy",
         "qrcode-terminal",
         "read",
         "semver",
@@ -17958,72 +18929,71 @@
       ],
       "dependencies": {
         "@isaacs/string-locale-compare": "^1.1.0",
-        "@npmcli/arborist": "^7.2.1",
-        "@npmcli/config": "^8.0.2",
-        "@npmcli/fs": "^3.1.0",
+        "@npmcli/arborist": "^7.5.3",
+        "@npmcli/config": "^8.3.3",
+        "@npmcli/fs": "^3.1.1",
         "@npmcli/map-workspaces": "^3.0.6",
-        "@npmcli/package-json": "^5.1.0",
-        "@npmcli/promise-spawn": "^7.0.1",
-        "@npmcli/redact": "^1.1.0",
-        "@npmcli/run-script": "^8.0.0",
-        "@sigstore/tuf": "^2.3.2",
+        "@npmcli/package-json": "^5.1.1",
+        "@npmcli/promise-spawn": "^7.0.2",
+        "@npmcli/redact": "^2.0.0",
+        "@npmcli/run-script": "^8.1.0",
+        "@sigstore/tuf": "^2.3.4",
         "abbrev": "^2.0.0",
         "archy": "~1.0.0",
-        "cacache": "^18.0.2",
+        "cacache": "^18.0.3",
         "chalk": "^5.3.0",
         "ci-info": "^4.0.0",
         "cli-columns": "^4.0.0",
         "fastest-levenshtein": "^1.0.16",
         "fs-minipass": "^3.0.3",
-        "glob": "^10.3.12",
+        "glob": "^10.4.1",
         "graceful-fs": "^4.2.11",
-        "hosted-git-info": "^7.0.1",
-        "ini": "^4.1.2",
-        "init-package-json": "^6.0.2",
-        "is-cidr": "^5.0.5",
-        "json-parse-even-better-errors": "^3.0.1",
-        "libnpmaccess": "^8.0.1",
-        "libnpmdiff": "^6.0.3",
-        "libnpmexec": "^7.0.4",
-        "libnpmfund": "^5.0.1",
-        "libnpmhook": "^10.0.0",
-        "libnpmorg": "^6.0.1",
-        "libnpmpack": "^6.0.3",
-        "libnpmpublish": "^9.0.2",
-        "libnpmsearch": "^7.0.0",
-        "libnpmteam": "^6.0.0",
-        "libnpmversion": "^5.0.1",
-        "make-fetch-happen": "^13.0.0",
+        "hosted-git-info": "^7.0.2",
+        "ini": "^4.1.3",
+        "init-package-json": "^6.0.3",
+        "is-cidr": "^5.1.0",
+        "json-parse-even-better-errors": "^3.0.2",
+        "libnpmaccess": "^8.0.6",
+        "libnpmdiff": "^6.1.3",
+        "libnpmexec": "^8.1.2",
+        "libnpmfund": "^5.0.11",
+        "libnpmhook": "^10.0.5",
+        "libnpmorg": "^6.0.6",
+        "libnpmpack": "^7.0.3",
+        "libnpmpublish": "^9.0.9",
+        "libnpmsearch": "^7.0.6",
+        "libnpmteam": "^6.0.5",
+        "libnpmversion": "^6.0.3",
+        "make-fetch-happen": "^13.0.1",
         "minimatch": "^9.0.4",
-        "minipass": "^7.0.4",
+        "minipass": "^7.1.1",
         "minipass-pipeline": "^1.2.4",
         "ms": "^2.1.2",
         "node-gyp": "^10.1.0",
-        "nopt": "^7.2.0",
-        "normalize-package-data": "^6.0.0",
+        "nopt": "^7.2.1",
+        "normalize-package-data": "^6.0.1",
         "npm-audit-report": "^5.0.0",
         "npm-install-checks": "^6.3.0",
         "npm-package-arg": "^11.0.2",
-        "npm-pick-manifest": "^9.0.0",
-        "npm-profile": "^9.0.1",
-        "npm-registry-fetch": "^16.2.1",
-        "npm-user-validate": "^2.0.0",
+        "npm-pick-manifest": "^9.0.1",
+        "npm-profile": "^10.0.0",
+        "npm-registry-fetch": "^17.0.1",
+        "npm-user-validate": "^2.0.1",
         "p-map": "^4.0.0",
-        "pacote": "^18.0.2",
+        "pacote": "^18.0.6",
         "parse-conflict-json": "^3.0.1",
         "proc-log": "^4.2.0",
-        "proggy": "^2.0.0",
         "qrcode-terminal": "^0.12.0",
         "read": "^3.0.1",
-        "semver": "^7.6.0",
+        "semver": "^7.6.2",
         "spdx-expression-parse": "^4.0.0",
-        "ssri": "^10.0.5",
+        "ssri": "^10.0.6",
         "supports-color": "^9.4.0",
         "tar": "^6.2.1",
         "text-table": "~0.2.0",
         "tiny-relative-date": "^1.3.0",
         "treeverse": "^3.0.0",
-        "validate-npm-package-name": "^5.0.0",
+        "validate-npm-package-name": "^5.0.1",
         "which": "^4.0.0",
         "write-file-atomic": "^5.0.1"
       },
@@ -18152,35 +19122,36 @@
       }
     },
     "node_modules/npm/node_modules/@npmcli/arborist": {
-      "version": "7.5.0",
+      "version": "7.5.3",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
         "@isaacs/string-locale-compare": "^1.1.0",
-        "@npmcli/fs": "^3.1.0",
+        "@npmcli/fs": "^3.1.1",
         "@npmcli/installed-package-contents": "^2.1.0",
         "@npmcli/map-workspaces": "^3.0.2",
-        "@npmcli/metavuln-calculator": "^7.1.0",
+        "@npmcli/metavuln-calculator": "^7.1.1",
         "@npmcli/name-from-folder": "^2.0.0",
         "@npmcli/node-gyp": "^3.0.0",
         "@npmcli/package-json": "^5.1.0",
         "@npmcli/query": "^3.1.0",
-        "@npmcli/redact": "^1.1.0",
-        "@npmcli/run-script": "^8.0.0",
-        "bin-links": "^4.0.1",
-        "cacache": "^18.0.0",
+        "@npmcli/redact": "^2.0.0",
+        "@npmcli/run-script": "^8.1.0",
+        "bin-links": "^4.0.4",
+        "cacache": "^18.0.3",
         "common-ancestor-path": "^1.0.1",
-        "hosted-git-info": "^7.0.1",
-        "json-parse-even-better-errors": "^3.0.0",
+        "hosted-git-info": "^7.0.2",
+        "json-parse-even-better-errors": "^3.0.2",
         "json-stringify-nice": "^1.1.4",
+        "lru-cache": "^10.2.2",
         "minimatch": "^9.0.4",
-        "nopt": "^7.0.0",
+        "nopt": "^7.2.1",
         "npm-install-checks": "^6.2.0",
         "npm-package-arg": "^11.0.2",
-        "npm-pick-manifest": "^9.0.0",
-        "npm-registry-fetch": "^16.2.1",
-        "pacote": "^18.0.1",
+        "npm-pick-manifest": "^9.0.1",
+        "npm-registry-fetch": "^17.0.1",
+        "pacote": "^18.0.6",
         "parse-conflict-json": "^3.0.0",
         "proc-log": "^4.2.0",
         "proggy": "^2.0.0",
@@ -18188,7 +19159,7 @@
         "promise-call-limit": "^3.0.1",
         "read-package-json-fast": "^3.0.2",
         "semver": "^7.3.7",
-        "ssri": "^10.0.5",
+        "ssri": "^10.0.6",
         "treeverse": "^3.0.0",
         "walk-up-path": "^3.0.1"
       },
@@ -18200,7 +19171,7 @@
       }
     },
     "node_modules/npm/node_modules/@npmcli/config": {
-      "version": "8.3.0",
+      "version": "8.3.3",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -18208,7 +19179,7 @@
         "@npmcli/map-workspaces": "^3.0.2",
         "ci-info": "^4.0.0",
         "ini": "^4.1.2",
-        "nopt": "^7.0.0",
+        "nopt": "^7.2.1",
         "proc-log": "^4.2.0",
         "read-package-json-fast": "^3.0.2",
         "semver": "^7.3.5",
@@ -18219,7 +19190,7 @@
       }
     },
     "node_modules/npm/node_modules/@npmcli/fs": {
-      "version": "3.1.0",
+      "version": "3.1.1",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -18231,7 +19202,7 @@
       }
     },
     "node_modules/npm/node_modules/@npmcli/git": {
-      "version": "5.0.6",
+      "version": "5.0.7",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -18281,7 +19252,7 @@
       }
     },
     "node_modules/npm/node_modules/@npmcli/metavuln-calculator": {
-      "version": "7.1.0",
+      "version": "7.1.1",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -18315,7 +19286,7 @@
       }
     },
     "node_modules/npm/node_modules/@npmcli/package-json": {
-      "version": "5.1.0",
+      "version": "5.1.1",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -18333,7 +19304,7 @@
       }
     },
     "node_modules/npm/node_modules/@npmcli/promise-spawn": {
-      "version": "7.0.1",
+      "version": "7.0.2",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -18357,7 +19328,7 @@
       }
     },
     "node_modules/npm/node_modules/@npmcli/redact": {
-      "version": "1.1.0",
+      "version": "2.0.0",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -18366,7 +19337,7 @@
       }
     },
     "node_modules/npm/node_modules/@npmcli/run-script": {
-      "version": "8.0.0",
+      "version": "8.1.0",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -18393,12 +19364,12 @@
       }
     },
     "node_modules/npm/node_modules/@sigstore/bundle": {
-      "version": "2.3.1",
+      "version": "2.3.2",
       "dev": true,
       "inBundle": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@sigstore/protobuf-specs": "^0.3.1"
+        "@sigstore/protobuf-specs": "^0.3.2"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
@@ -18414,7 +19385,7 @@
       }
     },
     "node_modules/npm/node_modules/@sigstore/protobuf-specs": {
-      "version": "0.3.1",
+      "version": "0.3.2",
       "dev": true,
       "inBundle": true,
       "license": "Apache-2.0",
@@ -18423,42 +19394,44 @@
       }
     },
     "node_modules/npm/node_modules/@sigstore/sign": {
-      "version": "2.3.0",
+      "version": "2.3.2",
       "dev": true,
       "inBundle": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@sigstore/bundle": "^2.3.0",
+        "@sigstore/bundle": "^2.3.2",
         "@sigstore/core": "^1.0.0",
-        "@sigstore/protobuf-specs": "^0.3.1",
-        "make-fetch-happen": "^13.0.0"
+        "@sigstore/protobuf-specs": "^0.3.2",
+        "make-fetch-happen": "^13.0.1",
+        "proc-log": "^4.2.0",
+        "promise-retry": "^2.0.1"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
     "node_modules/npm/node_modules/@sigstore/tuf": {
-      "version": "2.3.2",
+      "version": "2.3.4",
       "dev": true,
       "inBundle": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@sigstore/protobuf-specs": "^0.3.0",
-        "tuf-js": "^2.2.0"
+        "@sigstore/protobuf-specs": "^0.3.2",
+        "tuf-js": "^2.2.1"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
     "node_modules/npm/node_modules/@sigstore/verify": {
-      "version": "1.2.0",
+      "version": "1.2.1",
       "dev": true,
       "inBundle": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@sigstore/bundle": "^2.3.1",
+        "@sigstore/bundle": "^2.3.2",
         "@sigstore/core": "^1.1.0",
-        "@sigstore/protobuf-specs": "^0.3.1"
+        "@sigstore/protobuf-specs": "^0.3.2"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
@@ -18474,13 +19447,13 @@
       }
     },
     "node_modules/npm/node_modules/@tufjs/models": {
-      "version": "2.0.0",
+      "version": "2.0.1",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
         "@tufjs/canonical-json": "2.0.0",
-        "minimatch": "^9.0.3"
+        "minimatch": "^9.0.4"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
@@ -18560,7 +19533,7 @@
       "license": "MIT"
     },
     "node_modules/npm/node_modules/bin-links": {
-      "version": "4.0.3",
+      "version": "4.0.4",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -18595,17 +19568,8 @@
         "balanced-match": "^1.0.0"
       }
     },
-    "node_modules/npm/node_modules/builtins": {
-      "version": "5.1.0",
-      "dev": true,
-      "inBundle": true,
-      "license": "MIT",
-      "dependencies": {
-        "semver": "^7.0.0"
-      }
-    },
     "node_modules/npm/node_modules/cacache": {
-      "version": "18.0.2",
+      "version": "18.0.3",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -18664,7 +19628,7 @@
       }
     },
     "node_modules/npm/node_modules/cidr-regex": {
-      "version": "4.0.5",
+      "version": "4.1.1",
       "dev": true,
       "inBundle": true,
       "license": "BSD-2-Clause",
@@ -18698,7 +19662,7 @@
       }
     },
     "node_modules/npm/node_modules/cmd-shim": {
-      "version": "6.0.2",
+      "version": "6.0.3",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -18893,22 +19857,22 @@
       }
     },
     "node_modules/npm/node_modules/glob": {
-      "version": "10.3.12",
+      "version": "10.4.1",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
         "foreground-child": "^3.1.0",
-        "jackspeak": "^2.3.6",
-        "minimatch": "^9.0.1",
-        "minipass": "^7.0.4",
-        "path-scurry": "^1.10.2"
+        "jackspeak": "^3.1.2",
+        "minimatch": "^9.0.4",
+        "minipass": "^7.1.2",
+        "path-scurry": "^1.11.1"
       },
       "bin": {
         "glob": "dist/esm/bin.mjs"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.17"
+        "node": ">=16 || 14 >=14.18"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
@@ -18933,7 +19897,7 @@
       }
     },
     "node_modules/npm/node_modules/hosted-git-info": {
-      "version": "7.0.1",
+      "version": "7.0.2",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -18990,7 +19954,7 @@
       }
     },
     "node_modules/npm/node_modules/ignore-walk": {
-      "version": "6.0.4",
+      "version": "6.0.5",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -19020,7 +19984,7 @@
       }
     },
     "node_modules/npm/node_modules/ini": {
-      "version": "4.1.2",
+      "version": "4.1.3",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -19029,7 +19993,7 @@
       }
     },
     "node_modules/npm/node_modules/init-package-json": {
-      "version": "6.0.2",
+      "version": "6.0.3",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -19059,12 +20023,6 @@
         "node": ">= 12"
       }
     },
-    "node_modules/npm/node_modules/ip-address/node_modules/sprintf-js": {
-      "version": "1.1.3",
-      "dev": true,
-      "inBundle": true,
-      "license": "BSD-3-Clause"
-    },
     "node_modules/npm/node_modules/ip-regex": {
       "version": "5.0.0",
       "dev": true,
@@ -19078,12 +20036,12 @@
       }
     },
     "node_modules/npm/node_modules/is-cidr": {
-      "version": "5.0.5",
+      "version": "5.1.0",
       "dev": true,
       "inBundle": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "cidr-regex": "^4.0.4"
+        "cidr-regex": "^4.1.1"
       },
       "engines": {
         "node": ">=14"
@@ -19123,7 +20081,7 @@
       "license": "ISC"
     },
     "node_modules/npm/node_modules/jackspeak": {
-      "version": "2.3.6",
+      "version": "3.1.2",
       "dev": true,
       "inBundle": true,
       "license": "BlueOak-1.0.0",
@@ -19147,7 +20105,7 @@
       "license": "MIT"
     },
     "node_modules/npm/node_modules/json-parse-even-better-errors": {
-      "version": "3.0.1",
+      "version": "3.0.2",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
@@ -19186,31 +20144,31 @@
       "license": "MIT"
     },
     "node_modules/npm/node_modules/libnpmaccess": {
-      "version": "8.0.4",
+      "version": "8.0.6",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
         "npm-package-arg": "^11.0.2",
-        "npm-registry-fetch": "^16.2.1"
+        "npm-registry-fetch": "^17.0.1"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
     "node_modules/npm/node_modules/libnpmdiff": {
-      "version": "6.1.0",
+      "version": "6.1.3",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
-        "@npmcli/arborist": "^7.2.1",
+        "@npmcli/arborist": "^7.5.3",
         "@npmcli/installed-package-contents": "^2.1.0",
         "binary-extensions": "^2.3.0",
         "diff": "^5.1.0",
         "minimatch": "^9.0.4",
         "npm-package-arg": "^11.0.2",
-        "pacote": "^18.0.1",
+        "pacote": "^18.0.6",
         "tar": "^6.2.1"
       },
       "engines": {
@@ -19218,16 +20176,16 @@
       }
     },
     "node_modules/npm/node_modules/libnpmexec": {
-      "version": "8.0.0",
+      "version": "8.1.2",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
-        "@npmcli/arborist": "^7.2.1",
-        "@npmcli/run-script": "^8.0.0",
+        "@npmcli/arborist": "^7.5.3",
+        "@npmcli/run-script": "^8.1.0",
         "ci-info": "^4.0.0",
         "npm-package-arg": "^11.0.2",
-        "pacote": "^18.0.1",
+        "pacote": "^18.0.6",
         "proc-log": "^4.2.0",
         "read": "^3.0.1",
         "read-package-json-fast": "^3.0.2",
@@ -19239,111 +20197,111 @@
       }
     },
     "node_modules/npm/node_modules/libnpmfund": {
-      "version": "5.0.8",
+      "version": "5.0.11",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
-        "@npmcli/arborist": "^7.2.1"
+        "@npmcli/arborist": "^7.5.3"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
     "node_modules/npm/node_modules/libnpmhook": {
-      "version": "10.0.3",
+      "version": "10.0.5",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
         "aproba": "^2.0.0",
-        "npm-registry-fetch": "^16.2.1"
+        "npm-registry-fetch": "^17.0.1"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
     "node_modules/npm/node_modules/libnpmorg": {
-      "version": "6.0.4",
+      "version": "6.0.6",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
         "aproba": "^2.0.0",
-        "npm-registry-fetch": "^16.2.1"
+        "npm-registry-fetch": "^17.0.1"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
     "node_modules/npm/node_modules/libnpmpack": {
-      "version": "7.0.0",
+      "version": "7.0.3",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
-        "@npmcli/arborist": "^7.2.1",
-        "@npmcli/run-script": "^8.0.0",
+        "@npmcli/arborist": "^7.5.3",
+        "@npmcli/run-script": "^8.1.0",
         "npm-package-arg": "^11.0.2",
-        "pacote": "^18.0.1"
+        "pacote": "^18.0.6"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
     "node_modules/npm/node_modules/libnpmpublish": {
-      "version": "9.0.6",
+      "version": "9.0.9",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
         "ci-info": "^4.0.0",
-        "normalize-package-data": "^6.0.0",
+        "normalize-package-data": "^6.0.1",
         "npm-package-arg": "^11.0.2",
-        "npm-registry-fetch": "^16.2.1",
+        "npm-registry-fetch": "^17.0.1",
         "proc-log": "^4.2.0",
         "semver": "^7.3.7",
         "sigstore": "^2.2.0",
-        "ssri": "^10.0.5"
+        "ssri": "^10.0.6"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
     "node_modules/npm/node_modules/libnpmsearch": {
-      "version": "7.0.3",
+      "version": "7.0.6",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
-        "npm-registry-fetch": "^16.2.1"
+        "npm-registry-fetch": "^17.0.1"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
     "node_modules/npm/node_modules/libnpmteam": {
-      "version": "6.0.3",
+      "version": "6.0.5",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
         "aproba": "^2.0.0",
-        "npm-registry-fetch": "^16.2.1"
+        "npm-registry-fetch": "^17.0.1"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
     "node_modules/npm/node_modules/libnpmversion": {
-      "version": "6.0.0",
+      "version": "6.0.3",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
-        "@npmcli/git": "^5.0.6",
-        "@npmcli/run-script": "^8.0.0",
-        "json-parse-even-better-errors": "^3.0.0",
+        "@npmcli/git": "^5.0.7",
+        "@npmcli/run-script": "^8.1.0",
+        "json-parse-even-better-errors": "^3.0.2",
         "proc-log": "^4.2.0",
         "semver": "^7.3.7"
       },
@@ -19352,7 +20310,7 @@
       }
     },
     "node_modules/npm/node_modules/lru-cache": {
-      "version": "10.2.0",
+      "version": "10.2.2",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -19361,7 +20319,7 @@
       }
     },
     "node_modules/npm/node_modules/make-fetch-happen": {
-      "version": "13.0.0",
+      "version": "13.0.1",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -19375,6 +20333,7 @@
         "minipass-flush": "^1.0.5",
         "minipass-pipeline": "^1.2.4",
         "negotiator": "^0.6.3",
+        "proc-log": "^4.2.0",
         "promise-retry": "^2.0.1",
         "ssri": "^10.0.0"
       },
@@ -19398,7 +20357,7 @@
       }
     },
     "node_modules/npm/node_modules/minipass": {
-      "version": "7.0.4",
+      "version": "7.1.2",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -19419,7 +20378,7 @@
       }
     },
     "node_modules/npm/node_modules/minipass-fetch": {
-      "version": "3.0.4",
+      "version": "3.0.5",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
@@ -19624,7 +20583,7 @@
       }
     },
     "node_modules/npm/node_modules/nopt": {
-      "version": "7.2.0",
+      "version": "7.2.1",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -19639,7 +20598,7 @@
       }
     },
     "node_modules/npm/node_modules/normalize-package-data": {
-      "version": "6.0.0",
+      "version": "6.0.1",
       "dev": true,
       "inBundle": true,
       "license": "BSD-2-Clause",
@@ -19663,7 +20622,7 @@
       }
     },
     "node_modules/npm/node_modules/npm-bundled": {
-      "version": "3.0.0",
+      "version": "3.0.1",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -19723,7 +20682,7 @@
       }
     },
     "node_modules/npm/node_modules/npm-pick-manifest": {
-      "version": "9.0.0",
+      "version": "9.0.1",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -19738,25 +20697,25 @@
       }
     },
     "node_modules/npm/node_modules/npm-profile": {
-      "version": "9.0.1",
+      "version": "10.0.0",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
-        "npm-registry-fetch": "^16.0.0",
+        "npm-registry-fetch": "^17.0.1",
         "proc-log": "^4.0.0"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": ">=18.0.0"
       }
     },
     "node_modules/npm/node_modules/npm-registry-fetch": {
-      "version": "16.2.1",
+      "version": "17.0.1",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
       "dependencies": {
-        "@npmcli/redact": "^1.1.0",
+        "@npmcli/redact": "^2.0.0",
         "make-fetch-happen": "^13.0.0",
         "minipass": "^7.0.2",
         "minipass-fetch": "^3.0.0",
@@ -19770,7 +20729,7 @@
       }
     },
     "node_modules/npm/node_modules/npm-user-validate": {
-      "version": "2.0.0",
+      "version": "2.0.1",
       "dev": true,
       "inBundle": true,
       "license": "BSD-2-Clause",
@@ -19794,7 +20753,7 @@
       }
     },
     "node_modules/npm/node_modules/pacote": {
-      "version": "18.0.2",
+      "version": "18.0.6",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -19810,7 +20769,7 @@
         "npm-package-arg": "^11.0.0",
         "npm-packlist": "^8.0.0",
         "npm-pick-manifest": "^9.0.0",
-        "npm-registry-fetch": "^16.0.0",
+        "npm-registry-fetch": "^17.0.0",
         "proc-log": "^4.0.0",
         "promise-retry": "^2.0.1",
         "sigstore": "^2.2.0",
@@ -19818,7 +20777,7 @@
         "tar": "^6.1.11"
       },
       "bin": {
-        "pacote": "lib/bin.js"
+        "pacote": "bin/index.js"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
@@ -19848,7 +20807,7 @@
       }
     },
     "node_modules/npm/node_modules/path-scurry": {
-      "version": "1.10.2",
+      "version": "1.11.1",
       "dev": true,
       "inBundle": true,
       "license": "BlueOak-1.0.0",
@@ -19857,14 +20816,14 @@
         "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.17"
+        "node": ">=16 || 14 >=14.18"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
       }
     },
     "node_modules/npm/node_modules/postcss-selector-parser": {
-      "version": "6.0.16",
+      "version": "6.1.0",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
@@ -19932,7 +20891,7 @@
       }
     },
     "node_modules/npm/node_modules/promzard": {
-      "version": "1.0.1",
+      "version": "1.0.2",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -20002,13 +20961,10 @@
       "optional": true
     },
     "node_modules/npm/node_modules/semver": {
-      "version": "7.6.0",
+      "version": "7.6.2",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
-      "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
       "bin": {
         "semver": "bin/semver.js"
       },
@@ -20016,18 +20972,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/npm/node_modules/semver/node_modules/lru-cache": {
-      "version": "6.0.0",
-      "dev": true,
-      "inBundle": true,
-      "license": "ISC",
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/npm/node_modules/shebang-command": {
       "version": "2.0.0",
       "dev": true,
@@ -20062,17 +21006,17 @@
       }
     },
     "node_modules/npm/node_modules/sigstore": {
-      "version": "2.3.0",
+      "version": "2.3.1",
       "dev": true,
       "inBundle": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@sigstore/bundle": "^2.3.1",
+        "@sigstore/bundle": "^2.3.2",
         "@sigstore/core": "^1.0.0",
-        "@sigstore/protobuf-specs": "^0.3.1",
-        "@sigstore/sign": "^2.3.0",
-        "@sigstore/tuf": "^2.3.1",
-        "@sigstore/verify": "^1.2.0"
+        "@sigstore/protobuf-specs": "^0.3.2",
+        "@sigstore/sign": "^2.3.2",
+        "@sigstore/tuf": "^2.3.4",
+        "@sigstore/verify": "^1.2.1"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
@@ -20153,13 +21097,19 @@
       }
     },
     "node_modules/npm/node_modules/spdx-license-ids": {
-      "version": "3.0.17",
+      "version": "3.0.18",
       "dev": true,
       "inBundle": true,
       "license": "CC0-1.0"
     },
+    "node_modules/npm/node_modules/sprintf-js": {
+      "version": "1.1.3",
+      "dev": true,
+      "inBundle": true,
+      "license": "BSD-3-Clause"
+    },
     "node_modules/npm/node_modules/ssri": {
-      "version": "10.0.5",
+      "version": "10.0.6",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -20308,14 +21258,14 @@
       }
     },
     "node_modules/npm/node_modules/tuf-js": {
-      "version": "2.2.0",
+      "version": "2.2.1",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
-        "@tufjs/models": "2.0.0",
+        "@tufjs/models": "2.0.1",
         "debug": "^4.3.4",
-        "make-fetch-happen": "^13.0.0"
+        "make-fetch-happen": "^13.0.1"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
@@ -20372,13 +21322,10 @@
       }
     },
     "node_modules/npm/node_modules/validate-npm-package-name": {
-      "version": "5.0.0",
+      "version": "5.0.1",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
-      "dependencies": {
-        "builtins": "^5.0.0"
-      },
       "engines": {
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
@@ -20546,9 +21493,9 @@
       }
     },
     "node_modules/nwsapi": {
-      "version": "2.2.9",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.9.tgz",
-      "integrity": "sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==",
+      "version": "2.2.10",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz",
+      "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==",
       "dev": true
     },
     "node_modules/nypm": {
@@ -20695,14 +21642,14 @@
       }
     },
     "node_modules/objection/node_modules/ajv": {
-      "version": "8.12.0",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
-      "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+      "version": "8.16.0",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
+      "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
       "dependencies": {
-        "fast-deep-equal": "^3.1.1",
+        "fast-deep-equal": "^3.1.3",
         "json-schema-traverse": "^1.0.0",
         "require-from-string": "^2.0.2",
-        "uri-js": "^4.2.2"
+        "uri-js": "^4.4.1"
       },
       "funding": {
         "type": "github",
@@ -20785,6 +21732,36 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/openurl": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz",
+      "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/opn": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
+      "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "is-wsl": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/opn/node_modules/is-wsl": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+      "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/optionator": {
       "version": "0.9.4",
       "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
@@ -21072,6 +22049,12 @@
         "node": ">=4"
       }
     },
+    "node_modules/package-json-from-dist": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
+      "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+      "dev": true
+    },
     "node_modules/pako": {
       "version": "1.0.11",
       "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
@@ -21107,6 +22090,18 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/parse-ms": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz",
+      "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/parse-node-version": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
@@ -21205,16 +22200,16 @@
       "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
     },
     "node_modules/path-scurry": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz",
-      "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==",
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
       "dev": true,
       "dependencies": {
         "lru-cache": "^10.2.0",
         "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.17"
+        "node": ">=16 || 14 >=14.18"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
@@ -21287,9 +22282,9 @@
       "dev": true
     },
     "node_modules/pg": {
-      "version": "8.11.5",
-      "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.5.tgz",
-      "integrity": "sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw==",
+      "version": "8.12.0",
+      "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz",
+      "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==",
       "dependencies": {
         "pg-connection-string": "^2.6.4",
         "pg-pool": "^3.6.2",
@@ -21342,9 +22337,9 @@
       }
     },
     "node_modules/pg-formatter/node_modules/rimraf": {
-      "version": "5.0.5",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz",
-      "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==",
+      "version": "5.0.7",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.7.tgz",
+      "integrity": "sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==",
       "dev": true,
       "dependencies": {
         "glob": "^10.3.7"
@@ -21353,7 +22348,7 @@
         "rimraf": "dist/esm/bin.mjs"
       },
       "engines": {
-        "node": ">=14"
+        "node": ">=14.18"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
@@ -21477,9 +22472,9 @@
       }
     },
     "node_modules/picocolors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
       "dev": true
     },
     "node_modules/picomatch": {
@@ -21619,13 +22614,13 @@
       }
     },
     "node_modules/pkg-types": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.0.tgz",
-      "integrity": "sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.1.tgz",
+      "integrity": "sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==",
       "dev": true,
       "dependencies": {
         "confbox": "^0.1.7",
-        "mlly": "^1.6.1",
+        "mlly": "^1.7.0",
         "pathe": "^1.1.2"
       }
     },
@@ -21641,6 +22636,31 @@
         "node": ">=10"
       }
     },
+    "node_modules/portscanner": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz",
+      "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "async": "^2.6.0",
+        "is-number-like": "^1.0.3"
+      },
+      "engines": {
+        "node": ">=0.4",
+        "npm": ">=1.0.0"
+      }
+    },
+    "node_modules/portscanner/node_modules/async": {
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+      "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "lodash": "^4.17.14"
+      }
+    },
     "node_modules/possible-typed-array-names": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
@@ -21719,9 +22739,9 @@
       }
     },
     "node_modules/postcss-color-functional-notation": {
-      "version": "6.0.9",
-      "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.9.tgz",
-      "integrity": "sha512-8i/ofOArZ4fljp+3g+HI6Pok01Kb8YaSqInrJt2vMimEKrI0ZDNRLpH+wLhXBNu/Bi8zeWDvxhvCqsGSpu8E6Q==",
+      "version": "6.0.11",
+      "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.11.tgz",
+      "integrity": "sha512-gJ+hAtAsgBF4w7eh28Pg7EA60lx7vE5xO/B/yZawaI6FYHky+5avA9YSe73nJHnAMEVFpCMeJc6Wts5g+niksg==",
       "dev": true,
       "funding": [
         {
@@ -21734,9 +22754,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^2.0.0",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4",
+        "@csstools/css-color-parser": "^2.0.2",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1",
         "@csstools/postcss-progressive-custom-properties": "^3.2.0",
         "@csstools/utilities": "^1.0.0"
       },
@@ -21800,9 +22820,9 @@
       }
     },
     "node_modules/postcss-custom-media": {
-      "version": "10.0.4",
-      "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.4.tgz",
-      "integrity": "sha512-Ubs7O3wj2prghaKRa68VHBvuy3KnTQ0zbGwqDYY1mntxJD0QL2AeiAy+AMfl3HBedTCVr2IcFNktwty9YpSskA==",
+      "version": "10.0.6",
+      "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.6.tgz",
+      "integrity": "sha512-BjihQoIO4Wjqv9fQNExSJIim8UAmkhLxuJnhJsLTRFSba1y1MhxkJK5awsM//6JJ+/Tu5QUxf624RQAvKHv6SA==",
       "dev": true,
       "funding": [
         {
@@ -21815,10 +22835,10 @@
         }
       ],
       "dependencies": {
-        "@csstools/cascade-layer-name-parser": "^1.0.9",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4",
-        "@csstools/media-query-list-parser": "^2.1.9"
+        "@csstools/cascade-layer-name-parser": "^1.0.11",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1",
+        "@csstools/media-query-list-parser": "^2.1.11"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -21828,9 +22848,9 @@
       }
     },
     "node_modules/postcss-custom-properties": {
-      "version": "13.3.8",
-      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.8.tgz",
-      "integrity": "sha512-OP9yj4yXxYOiW2n2TRpnE7C0yePvBiZb72S22mZVNzZEObdTYFjNaX6oZO4R4E8Ie9RmC/Jxw8EKYSbLrC1EFA==",
+      "version": "13.3.10",
+      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.10.tgz",
+      "integrity": "sha512-ejaalIpl7p0k0L5ngIZ86AZGmp3m1KdeOCbSQTK4gQcB1ncaoPTHorw206+tsZRIhIDYvh5ZButEje6740YDXw==",
       "dev": true,
       "funding": [
         {
@@ -21843,9 +22863,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/cascade-layer-name-parser": "^1.0.9",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4",
+        "@csstools/cascade-layer-name-parser": "^1.0.11",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1",
         "@csstools/utilities": "^1.0.0",
         "postcss-value-parser": "^4.2.0"
       },
@@ -21857,9 +22877,9 @@
       }
     },
     "node_modules/postcss-custom-selectors": {
-      "version": "7.1.8",
-      "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.8.tgz",
-      "integrity": "sha512-fqDkGSEsO7+oQaqdRdR8nwwqH+N2uk6LE/2g4myVJJYz/Ly418lHKEleKTdV/GzjBjFcG4n0dbfuH/Pd2BE8YA==",
+      "version": "7.1.10",
+      "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.10.tgz",
+      "integrity": "sha512-bV/6+IExyT2J4kMzX6c+ZMlN1xDfjcC4ePr1ywKezcTgwgUn11qQN3jdzFBpo8Dk1K7vO/OYOwMb5AtJP4JZcg==",
       "dev": true,
       "funding": [
         {
@@ -21872,9 +22892,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/cascade-layer-name-parser": "^1.0.9",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4",
+        "@csstools/cascade-layer-name-parser": "^1.0.11",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1",
         "postcss-selector-parser": "^6.0.13"
       },
       "engines": {
@@ -22044,9 +23064,9 @@
       }
     },
     "node_modules/postcss-lab-function": {
-      "version": "6.0.14",
-      "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.14.tgz",
-      "integrity": "sha512-ddQS9FRWT8sfl4wfW0ae8fpP2JdLIuhC9pYpHq1077avjrLzg73T9IEVu5QmFa72nJhYFlO9CbqjcoSdEzfY9A==",
+      "version": "6.0.16",
+      "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.16.tgz",
+      "integrity": "sha512-QWv0VxfjgIl8jBR/wuQcm/o31jn4P/LwzYuVKzNQoO5t7HPcU0d3RfWUiDrHN3frmSv+YYZppr3P81tKFTDyqg==",
       "dev": true,
       "funding": [
         {
@@ -22059,9 +23079,9 @@
         }
       ],
       "dependencies": {
-        "@csstools/css-color-parser": "^2.0.0",
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4",
+        "@csstools/css-color-parser": "^2.0.2",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1",
         "@csstools/postcss-progressive-custom-properties": "^3.2.0",
         "@csstools/utilities": "^1.0.0"
       },
@@ -22189,9 +23209,9 @@
       }
     },
     "node_modules/postcss-nesting": {
-      "version": "12.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.2.tgz",
-      "integrity": "sha512-FUmTHGDNundodutB4PUBxt/EPuhgtpk8FJGRsBhOuy+6FnkR2A8RZWIsyyy6XmhvX2DZQQWIkvu+HB4IbJm+Ew==",
+      "version": "12.1.5",
+      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.5.tgz",
+      "integrity": "sha512-N1NgI1PDCiAGWPTYrwqm8wpjv0bgDmkYHH72pNsqTCv9CObxjxftdYu6AKtGN+pnJa7FQjMm3v4sp8QJbFsYdQ==",
       "dev": true,
       "funding": [
         {
@@ -22205,8 +23225,8 @@
       ],
       "dependencies": {
         "@csstools/selector-resolve-nested": "^1.1.0",
-        "@csstools/selector-specificity": "^3.0.3",
-        "postcss-selector-parser": "^6.0.13"
+        "@csstools/selector-specificity": "^3.1.1",
+        "postcss-selector-parser": "^6.1.0"
       },
       "engines": {
         "node": "^14 || ^16 || >=18"
@@ -22297,9 +23317,9 @@
       }
     },
     "node_modules/postcss-preset-env": {
-      "version": "9.5.9",
-      "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.9.tgz",
-      "integrity": "sha512-W+WgDH1MOWLT3Fsvknd45pzGMQ8Sp3fmt94Pxeik3Zkqfhw2XUDF8FehfV3Naxw4l/NrKPWLtltPJYVnpjMmfw==",
+      "version": "9.5.14",
+      "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.14.tgz",
+      "integrity": "sha512-gTMi+3kENN/mN+K59aR+vEOjlkujTmmXJcM9rnAqGh9Y/euQ/ypdp9rd8mO1eoIjAD8vNS15+xbkBxoi+65BqQ==",
       "dev": true,
       "funding": [
         {
@@ -22312,49 +23332,49 @@
         }
       ],
       "dependencies": {
-        "@csstools/postcss-cascade-layers": "^4.0.4",
-        "@csstools/postcss-color-function": "^3.0.14",
-        "@csstools/postcss-color-mix-function": "^2.0.14",
-        "@csstools/postcss-exponential-functions": "^1.0.5",
+        "@csstools/postcss-cascade-layers": "^4.0.6",
+        "@csstools/postcss-color-function": "^3.0.16",
+        "@csstools/postcss-color-mix-function": "^2.0.16",
+        "@csstools/postcss-exponential-functions": "^1.0.7",
         "@csstools/postcss-font-format-keywords": "^3.0.2",
-        "@csstools/postcss-gamut-mapping": "^1.0.7",
-        "@csstools/postcss-gradients-interpolation-method": "^4.0.15",
-        "@csstools/postcss-hwb-function": "^3.0.13",
+        "@csstools/postcss-gamut-mapping": "^1.0.9",
+        "@csstools/postcss-gradients-interpolation-method": "^4.0.17",
+        "@csstools/postcss-hwb-function": "^3.0.15",
         "@csstools/postcss-ic-unit": "^3.0.6",
         "@csstools/postcss-initial": "^1.0.1",
-        "@csstools/postcss-is-pseudo-class": "^4.0.6",
-        "@csstools/postcss-light-dark-function": "^1.0.3",
+        "@csstools/postcss-is-pseudo-class": "^4.0.8",
+        "@csstools/postcss-light-dark-function": "^1.0.5",
         "@csstools/postcss-logical-float-and-clear": "^2.0.1",
         "@csstools/postcss-logical-overflow": "^1.0.1",
         "@csstools/postcss-logical-overscroll-behavior": "^1.0.1",
         "@csstools/postcss-logical-resize": "^2.0.1",
-        "@csstools/postcss-logical-viewport-units": "^2.0.7",
-        "@csstools/postcss-media-minmax": "^1.1.4",
-        "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.7",
+        "@csstools/postcss-logical-viewport-units": "^2.0.9",
+        "@csstools/postcss-media-minmax": "^1.1.6",
+        "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.9",
         "@csstools/postcss-nested-calc": "^3.0.2",
         "@csstools/postcss-normalize-display-values": "^3.0.2",
-        "@csstools/postcss-oklab-function": "^3.0.14",
+        "@csstools/postcss-oklab-function": "^3.0.16",
         "@csstools/postcss-progressive-custom-properties": "^3.2.0",
-        "@csstools/postcss-relative-color-syntax": "^2.0.14",
+        "@csstools/postcss-relative-color-syntax": "^2.0.16",
         "@csstools/postcss-scope-pseudo-class": "^3.0.1",
-        "@csstools/postcss-stepped-value-functions": "^3.0.6",
+        "@csstools/postcss-stepped-value-functions": "^3.0.8",
         "@csstools/postcss-text-decoration-shorthand": "^3.0.6",
-        "@csstools/postcss-trigonometric-functions": "^3.0.6",
+        "@csstools/postcss-trigonometric-functions": "^3.0.8",
         "@csstools/postcss-unset-value": "^3.0.1",
         "autoprefixer": "^10.4.19",
         "browserslist": "^4.22.3",
         "css-blank-pseudo": "^6.0.2",
-        "css-has-pseudo": "^6.0.3",
+        "css-has-pseudo": "^6.0.5",
         "css-prefers-color-scheme": "^9.0.1",
         "cssdb": "^8.0.0",
         "postcss-attribute-case-insensitive": "^6.0.3",
         "postcss-clamp": "^4.1.0",
-        "postcss-color-functional-notation": "^6.0.9",
+        "postcss-color-functional-notation": "^6.0.11",
         "postcss-color-hex-alpha": "^9.0.4",
         "postcss-color-rebeccapurple": "^9.0.3",
-        "postcss-custom-media": "^10.0.4",
-        "postcss-custom-properties": "^13.3.8",
-        "postcss-custom-selectors": "^7.1.8",
+        "postcss-custom-media": "^10.0.6",
+        "postcss-custom-properties": "^13.3.10",
+        "postcss-custom-selectors": "^7.1.10",
         "postcss-dir-pseudo-class": "^8.0.1",
         "postcss-double-position-gradients": "^5.0.6",
         "postcss-focus-visible": "^9.0.1",
@@ -22362,9 +23382,9 @@
         "postcss-font-variant": "^5.0.0",
         "postcss-gap-properties": "^5.0.1",
         "postcss-image-set-function": "^6.0.3",
-        "postcss-lab-function": "^6.0.14",
+        "postcss-lab-function": "^6.0.16",
         "postcss-logical": "^7.0.1",
-        "postcss-nesting": "^12.1.2",
+        "postcss-nesting": "^12.1.5",
         "postcss-opacity-percentage": "^2.0.0",
         "postcss-overflow-shorthand": "^5.0.1",
         "postcss-page-break": "^3.0.4",
@@ -22440,9 +23460,9 @@
       }
     },
     "node_modules/postcss-selector-parser": {
-      "version": "6.0.16",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
-      "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
+      "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
       "dev": true,
       "dependencies": {
         "cssesc": "^3.0.0",
@@ -22505,9 +23525,9 @@
       "dev": true
     },
     "node_modules/preact": {
-      "version": "10.20.2",
-      "resolved": "https://registry.npmjs.org/preact/-/preact-10.20.2.tgz",
-      "integrity": "sha512-S1d1ernz3KQ+Y2awUxKakpfOg2CEmJmwOP+6igPx6dgr6pgDvenqYviyokWso2rhHvGtTlWWnJDa7RaPbQerTg==",
+      "version": "10.22.0",
+      "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.0.tgz",
+      "integrity": "sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==",
       "dev": true,
       "funding": {
         "type": "opencollective",
@@ -22524,9 +23544,9 @@
       }
     },
     "node_modules/prettier": {
-      "version": "3.2.5",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
-      "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz",
+      "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==",
       "bin": {
         "prettier": "bin/prettier.cjs"
       },
@@ -22593,6 +23613,21 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/pretty-ms": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.0.0.tgz",
+      "integrity": "sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==",
+      "dev": true,
+      "dependencies": {
+        "parse-ms": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/process": {
       "version": "0.11.10",
       "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -22707,12 +23742,12 @@
       "dev": true
     },
     "node_modules/pug": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz",
-      "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz",
+      "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==",
       "dev": true,
       "dependencies": {
-        "pug-code-gen": "^3.0.2",
+        "pug-code-gen": "^3.0.3",
         "pug-filters": "^4.0.0",
         "pug-lexer": "^5.0.1",
         "pug-linker": "^4.0.0",
@@ -22734,25 +23769,25 @@
       }
     },
     "node_modules/pug-code-gen": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz",
-      "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz",
+      "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==",
       "dev": true,
       "dependencies": {
         "constantinople": "^4.0.1",
         "doctypes": "^1.1.0",
         "js-stringify": "^1.0.2",
         "pug-attrs": "^3.0.0",
-        "pug-error": "^2.0.0",
-        "pug-runtime": "^3.0.0",
+        "pug-error": "^2.1.0",
+        "pug-runtime": "^3.0.1",
         "void-elements": "^3.1.0",
         "with": "^7.0.0"
       }
     },
     "node_modules/pug-error": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz",
-      "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz",
+      "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==",
       "dev": true
     },
     "node_modules/pug-filters": {
@@ -23141,9 +24176,9 @@
       }
     },
     "node_modules/recast": {
-      "version": "0.23.6",
-      "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.6.tgz",
-      "integrity": "sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==",
+      "version": "0.23.9",
+      "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz",
+      "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==",
       "dev": true,
       "dependencies": {
         "ast-types": "^0.16.1",
@@ -23356,6 +24391,61 @@
         "protocol-buffers-schema": "^3.3.1"
       }
     },
+    "node_modules/resp-modifier": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz",
+      "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "debug": "^2.2.0",
+        "minimatch": "^3.0.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/resp-modifier/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/resp-modifier/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/resp-modifier/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/resp-modifier/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/restore-cursor": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
@@ -23421,15 +24511,16 @@
       }
     },
     "node_modules/rfdc": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz",
-      "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==",
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
       "dev": true
     },
     "node_modules/rimraf": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
       "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "deprecated": "Rimraf versions prior to v4 are no longer supported",
       "dev": true,
       "dependencies": {
         "glob": "^7.1.3"
@@ -23455,6 +24546,7 @@
       "version": "7.2.3",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
       "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
       "dev": true,
       "dependencies": {
         "fs.realpath": "^1.0.0",
@@ -23484,9 +24576,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.1.tgz",
-      "integrity": "sha512-0gG94inrUtg25sB2V/pApwiv1lUb0bQ25FPNuzO89Baa+B+c0ccaaBKM5zkZV/12pUUdH+lWCSm9wmHqyocuVQ==",
+      "version": "4.18.0",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
+      "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==",
       "dev": true,
       "dependencies": {
         "@types/estree": "1.0.5"
@@ -23499,22 +24591,22 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.17.1",
-        "@rollup/rollup-android-arm64": "4.17.1",
-        "@rollup/rollup-darwin-arm64": "4.17.1",
-        "@rollup/rollup-darwin-x64": "4.17.1",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.17.1",
-        "@rollup/rollup-linux-arm-musleabihf": "4.17.1",
-        "@rollup/rollup-linux-arm64-gnu": "4.17.1",
-        "@rollup/rollup-linux-arm64-musl": "4.17.1",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.17.1",
-        "@rollup/rollup-linux-riscv64-gnu": "4.17.1",
-        "@rollup/rollup-linux-s390x-gnu": "4.17.1",
-        "@rollup/rollup-linux-x64-gnu": "4.17.1",
-        "@rollup/rollup-linux-x64-musl": "4.17.1",
-        "@rollup/rollup-win32-arm64-msvc": "4.17.1",
-        "@rollup/rollup-win32-ia32-msvc": "4.17.1",
-        "@rollup/rollup-win32-x64-msvc": "4.17.1",
+        "@rollup/rollup-android-arm-eabi": "4.18.0",
+        "@rollup/rollup-android-arm64": "4.18.0",
+        "@rollup/rollup-darwin-arm64": "4.18.0",
+        "@rollup/rollup-darwin-x64": "4.18.0",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.18.0",
+        "@rollup/rollup-linux-arm-musleabihf": "4.18.0",
+        "@rollup/rollup-linux-arm64-gnu": "4.18.0",
+        "@rollup/rollup-linux-arm64-musl": "4.18.0",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0",
+        "@rollup/rollup-linux-riscv64-gnu": "4.18.0",
+        "@rollup/rollup-linux-s390x-gnu": "4.18.0",
+        "@rollup/rollup-linux-x64-gnu": "4.18.0",
+        "@rollup/rollup-linux-x64-musl": "4.18.0",
+        "@rollup/rollup-win32-arm64-msvc": "4.18.0",
+        "@rollup/rollup-win32-ia32-msvc": "4.18.0",
+        "@rollup/rollup-win32-x64-msvc": "4.18.0",
         "fsevents": "~2.3.2"
       }
     },
@@ -23554,9 +24646,9 @@
       }
     },
     "node_modules/rrweb-cssom": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
-      "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
+      "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
       "dev": true
     },
     "node_modules/run-parallel": {
@@ -23587,6 +24679,13 @@
       "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==",
       "dev": true
     },
+    "node_modules/rx": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
+      "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/safe-array-concat": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
@@ -23639,9 +24738,9 @@
       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
     "node_modules/sass": {
-      "version": "1.75.0",
-      "resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz",
-      "integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==",
+      "version": "1.77.6",
+      "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz",
+      "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==",
       "dev": true,
       "dependencies": {
         "chokidar": ">=3.0.0 <4.0.0",
@@ -23655,12 +24754,19 @@
         "node": ">=14.0.0"
       }
     },
-    "node_modules/sax": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz",
-      "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==",
+    "node_modules/sass/node_modules/immutable": {
+      "version": "4.3.6",
+      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz",
+      "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==",
       "dev": true
     },
+    "node_modules/sax": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
+      "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
+      "dev": true,
+      "optional": true
+    },
     "node_modules/saxes": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
@@ -23703,15 +24809,15 @@
       }
     },
     "node_modules/schema-utils/node_modules/ajv": {
-      "version": "8.12.0",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
-      "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+      "version": "8.16.0",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
+      "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
       "dev": true,
       "dependencies": {
-        "fast-deep-equal": "^3.1.1",
+        "fast-deep-equal": "^3.1.3",
         "json-schema-traverse": "^1.0.0",
         "require-from-string": "^2.0.2",
-        "uri-js": "^4.2.2"
+        "uri-js": "^4.4.1"
       },
       "funding": {
         "type": "github",
@@ -23748,9 +24854,9 @@
       }
     },
     "node_modules/semantic-release": {
-      "version": "23.0.8",
-      "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-23.0.8.tgz",
-      "integrity": "sha512-yZkuWcTTfh5h/DrR4Q4QvJSARJdb6wjwn/sN0qKMYEkvwaVFek8YWfrgtL8oWaRdl0fLte0Y1wWMzLbwoaII1g==",
+      "version": "23.1.1",
+      "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-23.1.1.tgz",
+      "integrity": "sha512-qqJDBhbtHsjUEMsojWKGuL5lQFCJuPtiXKEIlFKyTzDDGTAE/oyvznaP8GeOr5PvcqBJ6LQz4JCENWPLeehSpA==",
       "dev": true,
       "dependencies": {
         "@semantic-release/commit-analyzer": "^12.0.0",
@@ -23762,7 +24868,7 @@
         "cosmiconfig": "^9.0.0",
         "debug": "^4.0.0",
         "env-ci": "^11.0.0",
-        "execa": "^8.0.0",
+        "execa": "^9.0.0",
         "figures": "^6.0.0",
         "find-versions": "^6.0.0",
         "get-stream": "^6.0.0",
@@ -23799,6 +24905,60 @@
         "axios": "^1.6.8"
       }
     },
+    "node_modules/semantic-release/node_modules/@sindresorhus/merge-streams": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
+      "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/semantic-release/node_modules/execa": {
+      "version": "9.2.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-9.2.0.tgz",
+      "integrity": "sha512-vpOyYg7UAVKLAWWtRS2gAdgkT7oJbCn0me3gmUmxZih4kd3MF/oo8kNTBTIbkO3yuuF5uB4ZCZfn8BOolITYhg==",
+      "dev": true,
+      "dependencies": {
+        "@sindresorhus/merge-streams": "^4.0.0",
+        "cross-spawn": "^7.0.3",
+        "figures": "^6.1.0",
+        "get-stream": "^9.0.0",
+        "human-signals": "^7.0.0",
+        "is-plain-obj": "^4.1.0",
+        "is-stream": "^4.0.1",
+        "npm-run-path": "^5.2.0",
+        "pretty-ms": "^9.0.0",
+        "signal-exit": "^4.1.0",
+        "strip-final-newline": "^4.0.0",
+        "yoctocolors": "^2.0.0"
+      },
+      "engines": {
+        "node": "^18.19.0 || >=20.5.0"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
+      }
+    },
+    "node_modules/semantic-release/node_modules/execa/node_modules/get-stream": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
+      "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
+      "dev": true,
+      "dependencies": {
+        "@sec-ant/readable-stream": "^0.4.1",
+        "is-stream": "^4.0.1"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/semantic-release/node_modules/get-stream": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
@@ -23811,13 +24971,43 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/semver": {
-      "version": "7.6.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
-      "dependencies": {
-        "lru-cache": "^6.0.0"
+    "node_modules/semantic-release/node_modules/human-signals": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-7.0.0.tgz",
+      "integrity": "sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=18.18.0"
+      }
+    },
+    "node_modules/semantic-release/node_modules/is-stream": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
+      "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/semantic-release/node_modules/strip-final-newline": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz",
+      "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
       },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/semver": {
+      "version": "7.6.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+      "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
       "bin": {
         "semver": "bin/semver.js"
       },
@@ -23852,35 +25042,26 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/semver/node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/send": {
-      "version": "0.18.0",
-      "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
-      "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+      "version": "0.16.2",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+      "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+      "dev": true,
+      "peer": true,
       "dependencies": {
         "debug": "2.6.9",
-        "depd": "2.0.0",
-        "destroy": "1.2.0",
+        "depd": "~1.1.2",
+        "destroy": "~1.0.4",
         "encodeurl": "~1.0.2",
         "escape-html": "~1.0.3",
         "etag": "~1.8.1",
         "fresh": "0.5.2",
-        "http-errors": "2.0.0",
-        "mime": "1.6.0",
-        "ms": "2.1.3",
-        "on-finished": "2.4.1",
-        "range-parser": "~1.2.1",
-        "statuses": "2.0.1"
+        "http-errors": "~1.6.2",
+        "mime": "1.4.1",
+        "ms": "2.0.0",
+        "on-finished": "~2.3.0",
+        "range-parser": "~1.2.0",
+        "statuses": "~1.4.0"
       },
       "engines": {
         "node": ">= 0.8.0"
@@ -23890,30 +25071,98 @@
       "version": "2.6.9",
       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
       "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "peer": true,
       "dependencies": {
         "ms": "2.0.0"
       }
     },
-    "node_modules/send/node_modules/debug/node_modules/ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+    "node_modules/send/node_modules/depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+      "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/send/node_modules/destroy": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+      "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/send/node_modules/http-errors": {
+      "version": "1.6.3",
+      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+      "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "depd": "~1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.0",
+        "statuses": ">= 1.4.0 < 2"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/send/node_modules/inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+      "dev": true,
+      "peer": true
     },
     "node_modules/send/node_modules/mime": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
-      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+      "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+      "dev": true,
+      "peer": true,
       "bin": {
         "mime": "cli.js"
+      }
+    },
+    "node_modules/send/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/send/node_modules/on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+      "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ee-first": "1.1.1"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">= 0.8"
       }
     },
-    "node_modules/send/node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+    "node_modules/send/node_modules/setprototypeof": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+      "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/send/node_modules/statuses": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+      "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
     },
     "node_modules/serialize-javascript": {
       "version": "6.0.2",
@@ -23925,20 +25174,115 @@
         "randombytes": "^2.1.0"
       }
     },
+    "node_modules/serve-index": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+      "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "accepts": "~1.3.4",
+        "batch": "0.6.1",
+        "debug": "2.6.9",
+        "escape-html": "~1.0.3",
+        "http-errors": "~1.6.2",
+        "mime-types": "~2.1.17",
+        "parseurl": "~1.3.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/serve-index/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/serve-index/node_modules/depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+      "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/serve-index/node_modules/http-errors": {
+      "version": "1.6.3",
+      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+      "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "depd": "~1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.0",
+        "statuses": ">= 1.4.0 < 2"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/serve-index/node_modules/inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/serve-index/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/serve-index/node_modules/setprototypeof": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+      "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/serve-index/node_modules/statuses": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+      "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/serve-static": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
-      "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+      "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+      "dev": true,
+      "peer": true,
       "dependencies": {
         "encodeurl": "~1.0.2",
         "escape-html": "~1.0.3",
-        "parseurl": "~1.3.3",
-        "send": "0.18.0"
+        "parseurl": "~1.3.2",
+        "send": "0.16.2"
       },
       "engines": {
         "node": ">= 0.8.0"
       }
     },
+    "node_modules/server-destroy": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
+      "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==",
+      "dev": true,
+      "peer": true
+    },
     "node_modules/set-function-length": {
       "version": "1.2.2",
       "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
@@ -24208,6 +25552,66 @@
         "url": "https://github.com/chalk/slice-ansi?sponsor=1"
       }
     },
+    "node_modules/socket.io": {
+      "version": "4.7.5",
+      "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz",
+      "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "accepts": "~1.3.4",
+        "base64id": "~2.0.0",
+        "cors": "~2.8.5",
+        "debug": "~4.3.2",
+        "engine.io": "~6.5.2",
+        "socket.io-adapter": "~2.5.2",
+        "socket.io-parser": "~4.2.4"
+      },
+      "engines": {
+        "node": ">=10.2.0"
+      }
+    },
+    "node_modules/socket.io-adapter": {
+      "version": "2.5.5",
+      "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
+      "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "debug": "~4.3.4",
+        "ws": "~8.17.1"
+      }
+    },
+    "node_modules/socket.io-client": {
+      "version": "4.7.5",
+      "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz",
+      "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@socket.io/component-emitter": "~3.1.0",
+        "debug": "~4.3.2",
+        "engine.io-client": "~6.5.2",
+        "socket.io-parser": "~4.2.4"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/socket.io-parser": {
+      "version": "4.2.4",
+      "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
+      "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@socket.io/component-emitter": "~3.1.0",
+        "debug": "~4.3.1"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
     "node_modules/sort-asc": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz",
@@ -24304,9 +25708,9 @@
       }
     },
     "node_modules/spdx-license-ids": {
-      "version": "3.0.17",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz",
-      "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==",
+      "version": "3.0.18",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
+      "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
       "dev": true
     },
     "node_modules/split-string": {
@@ -24481,14 +25885,39 @@
       "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==",
       "dev": true
     },
-    "node_modules/streamx": {
-      "version": "2.16.1",
-      "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz",
-      "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==",
+    "node_modules/stream-throttle": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz",
+      "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==",
       "dev": true,
+      "peer": true,
       "dependencies": {
-        "fast-fifo": "^1.1.0",
-        "queue-tick": "^1.0.1"
+        "commander": "^2.2.0",
+        "limiter": "^1.0.5"
+      },
+      "bin": {
+        "throttleproxy": "bin/throttleproxy.js"
+      },
+      "engines": {
+        "node": ">= 0.10.0"
+      }
+    },
+    "node_modules/stream-throttle/node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/streamx": {
+      "version": "2.18.0",
+      "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz",
+      "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==",
+      "dev": true,
+      "dependencies": {
+        "fast-fifo": "^1.3.2",
+        "queue-tick": "^1.0.1",
+        "text-decoder": "^1.1.0"
       },
       "optionalDependencies": {
         "bare-events": "^2.2.0"
@@ -24749,6 +26178,7 @@
       "version": "7.2.3",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
       "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
       "dev": true,
       "dependencies": {
         "fs.realpath": "^1.0.0",
@@ -24777,6 +26207,12 @@
         "node": "*"
       }
     },
+    "node_modules/stylus/node_modules/sax": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz",
+      "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==",
+      "dev": true
+    },
     "node_modules/stylus/node_modules/source-map": {
       "version": "0.7.4",
       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
@@ -24803,9 +26239,9 @@
       }
     },
     "node_modules/superagent": {
-      "version": "9.0.1",
-      "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.1.tgz",
-      "integrity": "sha512-CcRSdb/P2oUVaEpQ87w9Obsl+E9FruRd6b2b7LdiBtJoyMr2DQt7a89anAfiX/EL59j9b2CbRFvf2S91DhuCww==",
+      "version": "9.0.2",
+      "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz",
+      "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==",
       "dev": true,
       "dependencies": {
         "component-emitter": "^1.3.0",
@@ -24816,8 +26252,7 @@
         "formidable": "^3.5.1",
         "methods": "^1.1.2",
         "mime": "2.6.0",
-        "qs": "^6.11.0",
-        "semver": "^7.3.8"
+        "qs": "^6.11.0"
       },
       "engines": {
         "node": ">=14.18.0"
@@ -25033,6 +26468,7 @@
       "version": "7.2.3",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
       "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
       "dev": true,
       "dependencies": {
         "fs.realpath": "^1.0.0",
@@ -25065,6 +26501,7 @@
       "version": "2.6.3",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
       "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+      "deprecated": "Rimraf versions prior to v4 are no longer supported",
       "dev": true,
       "dependencies": {
         "glob": "^7.1.3"
@@ -25104,9 +26541,9 @@
       }
     },
     "node_modules/terser": {
-      "version": "5.30.4",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.4.tgz",
-      "integrity": "sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==",
+      "version": "5.31.1",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz",
+      "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==",
       "dev": true,
       "peer": true,
       "dependencies": {
@@ -25211,6 +26648,7 @@
       "version": "7.2.3",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
       "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
       "dev": true,
       "dependencies": {
         "fs.realpath": "^1.0.0",
@@ -25239,6 +26677,15 @@
         "node": "*"
       }
     },
+    "node_modules/text-decoder": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz",
+      "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==",
+      "dev": true,
+      "dependencies": {
+        "b4a": "^1.6.4"
+      }
+    },
     "node_modules/text-encoding-polyfill": {
       "version": "0.6.7",
       "resolved": "https://registry.npmjs.org/text-encoding-polyfill/-/text-encoding-polyfill-0.6.7.tgz",
@@ -25379,9 +26826,9 @@
       }
     },
     "node_modules/tocbot": {
-      "version": "4.27.13",
-      "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.27.13.tgz",
-      "integrity": "sha512-zS8GVVg14x/KBTxbvF6s3BNLltfMNZxTPaBpj+FjuwmnSv+ZK0trNN4uV5Ptw64NLFi2E30gt33+/a1Fkt3cWQ==",
+      "version": "4.28.2",
+      "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.28.2.tgz",
+      "integrity": "sha512-/MaSa9xI6mIo84IxqqliSCtPlH0oy7sLcY9s26qPMyH/2CxtZ2vNAXYlIdEQ7kjAkCQnc0rbLygf//F5c663oQ==",
       "dev": true
     },
     "node_modules/toidentifier": {
@@ -25399,9 +26846,9 @@
       "dev": true
     },
     "node_modules/tough-cookie": {
-      "version": "4.1.3",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
-      "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+      "version": "4.1.4",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
+      "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
       "dev": true,
       "dependencies": {
         "psl": "^1.1.33",
@@ -25545,9 +26992,9 @@
       }
     },
     "node_modules/tslib": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
-      "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+      "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
     },
     "node_modules/tus-js-client": {
       "version": "4.1.0",
@@ -25601,9 +27048,9 @@
       }
     },
     "node_modules/type-fest": {
-      "version": "4.18.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.18.0.tgz",
-      "integrity": "sha512-+dbmiyliDY/2TTcjCS7NpI9yV2iEFlUDk5TKnsbkN7ZoRu5s7bT+zvYtNFhFXC2oLwURGT2frACAZvbbyNBI+w==",
+      "version": "4.20.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz",
+      "integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==",
       "dev": true,
       "engines": {
         "node": ">=16"
@@ -25785,6 +27232,30 @@
       "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==",
       "dev": true
     },
+    "node_modules/ua-parser-js": {
+      "version": "1.0.38",
+      "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.38.tgz",
+      "integrity": "sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/ua-parser-js"
+        },
+        {
+          "type": "paypal",
+          "url": "https://paypal.me/faisalman"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/faisalman"
+        }
+      ],
+      "peer": true,
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/ufo": {
       "version": "1.5.3",
       "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz",
@@ -25792,9 +27263,9 @@
       "dev": true
     },
     "node_modules/uglify-js": {
-      "version": "3.17.4",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
-      "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+      "version": "3.18.0",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz",
+      "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==",
       "dev": true,
       "optional": true,
       "bin": {
@@ -25985,9 +27456,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.0.13",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
-      "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+      "version": "1.0.16",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
+      "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==",
       "dev": true,
       "funding": [
         {
@@ -26004,8 +27475,8 @@
         }
       ],
       "dependencies": {
-        "escalade": "^3.1.1",
-        "picocolors": "^1.0.0"
+        "escalade": "^3.1.2",
+        "picocolors": "^1.0.1"
       },
       "bin": {
         "update-browserslist-db": "cli.js"
@@ -26014,191 +27485,597 @@
         "browserslist": ">= 4.21.0"
       }
     },
-    "node_modules/uri-js": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-      "dependencies": {
-        "punycode": "^2.1.0"
+    "node_modules/uri-js": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+      "dependencies": {
+        "punycode": "^2.1.0"
+      }
+    },
+    "node_modules/url-join": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz",
+      "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==",
+      "dev": true,
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
+    "node_modules/url-parse": {
+      "version": "1.5.10",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+      "dev": true,
+      "dependencies": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "node_modules/util": {
+      "version": "0.12.5",
+      "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+      "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+      "dev": true,
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "is-arguments": "^1.0.4",
+        "is-generator-function": "^1.0.7",
+        "is-typed-array": "^1.1.3",
+        "which-typed-array": "^1.1.2"
+      }
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+    },
+    "node_modules/utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/uuid": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+      "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+      "dev": true,
+      "funding": [
+        "https://github.com/sponsors/broofa",
+        "https://github.com/sponsors/ctavan"
+      ],
+      "bin": {
+        "uuid": "dist/bin/uuid"
+      }
+    },
+    "node_modules/v8-compile-cache-lib": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+      "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="
+    },
+    "node_modules/validate-npm-package-license": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+      "dev": true,
+      "dependencies": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
+      }
+    },
+    "node_modules/value-or-promise": {
+      "version": "1.0.12",
+      "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz",
+      "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/vite": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz",
+      "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==",
+      "dev": true,
+      "dependencies": {
+        "esbuild": "^0.21.3",
+        "postcss": "^8.4.38",
+        "rollup": "^4.13.0"
+      },
+      "bin": {
+        "vite": "bin/vite.js"
+      },
+      "engines": {
+        "node": "^18.0.0 || >=20.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/vitejs/vite?sponsor=1"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.3"
+      },
+      "peerDependencies": {
+        "@types/node": "^18.0.0 || >=20.0.0",
+        "less": "*",
+        "lightningcss": "^1.21.0",
+        "sass": "*",
+        "stylus": "*",
+        "sugarss": "*",
+        "terser": "^5.4.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "less": {
+          "optional": true
+        },
+        "lightningcss": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "stylus": {
+          "optional": true
+        },
+        "sugarss": {
+          "optional": true
+        },
+        "terser": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vite-node": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz",
+      "integrity": "sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==",
+      "dev": true,
+      "dependencies": {
+        "cac": "^6.7.14",
+        "debug": "^4.3.4",
+        "pathe": "^1.1.1",
+        "picocolors": "^1.0.0",
+        "vite": "^5.0.0"
+      },
+      "bin": {
+        "vite-node": "vite-node.mjs"
+      },
+      "engines": {
+        "node": "^18.0.0 || >=20.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/vitest"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/aix-ppc64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+      "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "aix"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/android-arm": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+      "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/android-arm64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+      "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/android-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+      "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/darwin-arm64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+      "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/darwin-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+      "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+      "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/freebsd-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+      "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/linux-arm": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+      "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/linux-arm64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+      "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/linux-ia32": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+      "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/linux-loong64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+      "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/linux-mips64el": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+      "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+      "cpu": [
+        "mips64el"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/linux-ppc64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+      "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
       }
     },
-    "node_modules/url-join": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz",
-      "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==",
+    "node_modules/vite/node_modules/@esbuild/linux-riscv64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+      "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+      "cpu": [
+        "riscv64"
+      ],
       "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=12"
       }
     },
-    "node_modules/url-parse": {
-      "version": "1.5.10",
-      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
-      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+    "node_modules/vite/node_modules/@esbuild/linux-s390x": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+      "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+      "cpu": [
+        "s390x"
+      ],
       "dev": true,
-      "dependencies": {
-        "querystringify": "^2.1.1",
-        "requires-port": "^1.0.0"
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
       }
     },
-    "node_modules/util": {
-      "version": "0.12.5",
-      "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
-      "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+    "node_modules/vite/node_modules/@esbuild/linux-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+      "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "dependencies": {
-        "inherits": "^2.0.3",
-        "is-arguments": "^1.0.4",
-        "is-generator-function": "^1.0.7",
-        "is-typed-array": "^1.1.3",
-        "which-typed-array": "^1.1.2"
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
       }
     },
-    "node_modules/util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
-    },
-    "node_modules/utils-merge": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
-      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+    "node_modules/vite/node_modules/@esbuild/netbsd-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+      "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
       "engines": {
-        "node": ">= 0.4.0"
+        "node": ">=12"
       }
     },
-    "node_modules/uuid": {
-      "version": "9.0.1",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
-      "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+    "node_modules/vite/node_modules/@esbuild/openbsd-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+      "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "funding": [
-        "https://github.com/sponsors/broofa",
-        "https://github.com/sponsors/ctavan"
+      "optional": true,
+      "os": [
+        "openbsd"
       ],
-      "bin": {
-        "uuid": "dist/bin/uuid"
+      "engines": {
+        "node": ">=12"
       }
     },
-    "node_modules/v8-compile-cache-lib": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
-      "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="
-    },
-    "node_modules/validate-npm-package-license": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
-      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+    "node_modules/vite/node_modules/@esbuild/sunos-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+      "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "dependencies": {
-        "spdx-correct": "^3.0.0",
-        "spdx-expression-parse": "^3.0.0"
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=12"
       }
     },
-    "node_modules/value-or-promise": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz",
-      "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==",
+    "node_modules/vite/node_modules/@esbuild/win32-arm64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+      "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
         "node": ">=12"
       }
     },
-    "node_modules/vary": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+    "node_modules/vite/node_modules/@esbuild/win32-ia32": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+      "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": ">= 0.8"
+        "node": ">=12"
       }
     },
-    "node_modules/vite": {
-      "version": "5.2.10",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.10.tgz",
-      "integrity": "sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==",
+    "node_modules/vite/node_modules/@esbuild/win32-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+      "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "dependencies": {
-        "esbuild": "^0.20.1",
-        "postcss": "^8.4.38",
-        "rollup": "^4.13.0"
-      },
-      "bin": {
-        "vite": "bin/vite.js"
-      },
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": "^18.0.0 || >=20.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/vitejs/vite?sponsor=1"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.3"
-      },
-      "peerDependencies": {
-        "@types/node": "^18.0.0 || >=20.0.0",
-        "less": "*",
-        "lightningcss": "^1.21.0",
-        "sass": "*",
-        "stylus": "*",
-        "sugarss": "*",
-        "terser": "^5.4.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/node": {
-          "optional": true
-        },
-        "less": {
-          "optional": true
-        },
-        "lightningcss": {
-          "optional": true
-        },
-        "sass": {
-          "optional": true
-        },
-        "stylus": {
-          "optional": true
-        },
-        "sugarss": {
-          "optional": true
-        },
-        "terser": {
-          "optional": true
-        }
+        "node": ">=12"
       }
     },
-    "node_modules/vite-node": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.5.2.tgz",
-      "integrity": "sha512-Y8p91kz9zU+bWtF7HGt6DVw2JbhyuB2RlZix3FPYAYmUyZ3n7iTp8eSyLyY6sxtPegvxQtmlTMhfPhUfCUF93A==",
+    "node_modules/vite/node_modules/esbuild": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+      "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
       "dev": true,
-      "dependencies": {
-        "cac": "^6.7.14",
-        "debug": "^4.3.4",
-        "pathe": "^1.1.1",
-        "picocolors": "^1.0.0",
-        "vite": "^5.0.0"
-      },
+      "hasInstallScript": true,
       "bin": {
-        "vite-node": "vite-node.mjs"
+        "esbuild": "bin/esbuild"
       },
       "engines": {
-        "node": "^18.0.0 || >=20.0.0"
+        "node": ">=12"
       },
-      "funding": {
-        "url": "https://opencollective.com/vitest"
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.21.5",
+        "@esbuild/android-arm": "0.21.5",
+        "@esbuild/android-arm64": "0.21.5",
+        "@esbuild/android-x64": "0.21.5",
+        "@esbuild/darwin-arm64": "0.21.5",
+        "@esbuild/darwin-x64": "0.21.5",
+        "@esbuild/freebsd-arm64": "0.21.5",
+        "@esbuild/freebsd-x64": "0.21.5",
+        "@esbuild/linux-arm": "0.21.5",
+        "@esbuild/linux-arm64": "0.21.5",
+        "@esbuild/linux-ia32": "0.21.5",
+        "@esbuild/linux-loong64": "0.21.5",
+        "@esbuild/linux-mips64el": "0.21.5",
+        "@esbuild/linux-ppc64": "0.21.5",
+        "@esbuild/linux-riscv64": "0.21.5",
+        "@esbuild/linux-s390x": "0.21.5",
+        "@esbuild/linux-x64": "0.21.5",
+        "@esbuild/netbsd-x64": "0.21.5",
+        "@esbuild/openbsd-x64": "0.21.5",
+        "@esbuild/sunos-x64": "0.21.5",
+        "@esbuild/win32-arm64": "0.21.5",
+        "@esbuild/win32-ia32": "0.21.5",
+        "@esbuild/win32-x64": "0.21.5"
       }
     },
     "node_modules/vitest": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.5.2.tgz",
-      "integrity": "sha512-l9gwIkq16ug3xY7BxHwcBQovLZG75zZL0PlsiYQbf76Rz6QGs54416UWMtC0jXeihvHvcHrf2ROEjkQRVpoZYw==",
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.6.0.tgz",
+      "integrity": "sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==",
       "dev": true,
       "dependencies": {
-        "@vitest/expect": "1.5.2",
-        "@vitest/runner": "1.5.2",
-        "@vitest/snapshot": "1.5.2",
-        "@vitest/spy": "1.5.2",
-        "@vitest/utils": "1.5.2",
+        "@vitest/expect": "1.6.0",
+        "@vitest/runner": "1.6.0",
+        "@vitest/snapshot": "1.6.0",
+        "@vitest/spy": "1.6.0",
+        "@vitest/utils": "1.6.0",
         "acorn-walk": "^8.3.2",
         "chai": "^4.3.10",
         "debug": "^4.3.4",
@@ -26212,7 +28089,7 @@
         "tinybench": "^2.5.1",
         "tinypool": "^0.8.3",
         "vite": "^5.0.0",
-        "vite-node": "1.5.2",
+        "vite-node": "1.6.0",
         "why-is-node-running": "^2.2.2"
       },
       "bin": {
@@ -26227,8 +28104,8 @@
       "peerDependencies": {
         "@edge-runtime/vm": "*",
         "@types/node": "^18.0.0 || >=20.0.0",
-        "@vitest/browser": "1.5.2",
-        "@vitest/ui": "1.5.2",
+        "@vitest/browser": "1.6.0",
+        "@vitest/ui": "1.6.0",
         "happy-dom": "*",
         "jsdom": "*"
       },
@@ -26262,6 +28139,12 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/vscode-uri": {
+      "version": "3.0.8",
+      "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
+      "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==",
+      "dev": true
+    },
     "node_modules/vt-pbf": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz",
@@ -26295,15 +28178,15 @@
       }
     },
     "node_modules/vue-component-meta": {
-      "version": "2.0.14",
-      "resolved": "https://registry.npmjs.org/vue-component-meta/-/vue-component-meta-2.0.14.tgz",
-      "integrity": "sha512-6ycN+5bkLLNsjno5pX+OFmFxrAXllJo95lk7jPD7g7cbtWsZY5F+pg+/YMXldHA36STrBHTfCu5QoklDV9Gynw==",
+      "version": "2.0.21",
+      "resolved": "https://registry.npmjs.org/vue-component-meta/-/vue-component-meta-2.0.21.tgz",
+      "integrity": "sha512-K7B/wu1nrtYnrDkCkrqqllIe2bxbKNtQG/kc/cquMNw0PYt5xbnAItXZLhC2tHtiIlw6DPYFKpAhnFDi2NGqeA==",
       "dev": true,
       "dependencies": {
-        "@volar/typescript": "2.2.0-alpha.10",
-        "@vue/language-core": "2.0.14",
+        "@volar/typescript": "~2.3.0-alpha.15",
+        "@vue/language-core": "2.0.21",
         "path-browserify": "^1.0.1",
-        "vue-component-type-helpers": "2.0.14"
+        "vue-component-type-helpers": "2.0.21"
       },
       "peerDependencies": {
         "typescript": "*"
@@ -26315,9 +28198,9 @@
       }
     },
     "node_modules/vue-component-type-helpers": {
-      "version": "2.0.14",
-      "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.14.tgz",
-      "integrity": "sha512-DInfgOyXlMyliyqAAD9frK28tTfch0+tMi4qoWJcZlRxUf+NFAtraJBnAsKLep+FOyLMiajkhfyEb3xLK08i7w==",
+      "version": "2.0.21",
+      "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.21.tgz",
+      "integrity": "sha512-3NaicyZ7N4B6cft4bfb7dOnPbE9CjLcx+6wZWAg5zwszfO4qXRh+U52dN5r5ZZfc6iMaxKCEcoH9CmxxoFZHLg==",
       "dev": true
     },
     "node_modules/vue-docgen-api": {
@@ -26353,9 +28236,9 @@
       }
     },
     "node_modules/vue-eslint-parser": {
-      "version": "9.4.2",
-      "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz",
-      "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==",
+      "version": "9.4.3",
+      "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz",
+      "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==",
       "dev": true,
       "peer": true,
       "dependencies": {
@@ -26427,9 +28310,9 @@
       }
     },
     "node_modules/vue-router": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.3.2.tgz",
-      "integrity": "sha512-hKQJ1vDAZ5LVkKEnHhmm1f9pMiWIBNGF5AwU67PdH7TyXCj/a4hTccuUuYCAMgJK6rO/NVYtQIEN3yL8CECa7Q==",
+      "version": "4.3.3",
+      "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.3.3.tgz",
+      "integrity": "sha512-8Q+u+WP4N2SXY38FDcF2H1dUEbYVHVPtPCPZj/GTZx8RCbiB8AtJP9+YIxn4Vs0svMTNQcLIzka4GH7Utkx9xQ==",
       "dev": true,
       "dependencies": {
         "@vue/devtools-api": "^6.5.1"
@@ -26504,9 +28387,9 @@
       }
     },
     "node_modules/webpack": {
-      "version": "5.91.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz",
-      "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==",
+      "version": "5.92.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.0.tgz",
+      "integrity": "sha512-Bsw2X39MYIgxouNATyVpCNVWBCuUwDgWtN78g6lSdPJRLaQ/PUVm/oXcaRAyY/sMFoKFQrsPeqvTizWtq7QPCA==",
       "dev": true,
       "peer": true,
       "dependencies": {
@@ -26516,10 +28399,10 @@
         "@webassemblyjs/wasm-edit": "^1.12.1",
         "@webassemblyjs/wasm-parser": "^1.12.1",
         "acorn": "^8.7.1",
-        "acorn-import-assertions": "^1.9.0",
+        "acorn-import-attributes": "^1.9.5",
         "browserslist": "^4.21.10",
         "chrome-trace-event": "^1.0.2",
-        "enhanced-resolve": "^5.16.0",
+        "enhanced-resolve": "^5.17.0",
         "es-module-lexer": "^1.2.1",
         "eslint-scope": "5.1.1",
         "events": "^3.2.0",
@@ -26561,15 +28444,15 @@
       }
     },
     "node_modules/webpack-virtual-modules": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz",
-      "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==",
+      "version": "0.6.2",
+      "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
+      "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
       "dev": true
     },
     "node_modules/webpack/node_modules/es-module-lexer": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.2.tgz",
-      "integrity": "sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==",
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz",
+      "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==",
       "dev": true,
       "peer": true
     },
@@ -26921,9 +28804,9 @@
       "dev": true
     },
     "node_modules/ws": {
-      "version": "8.17.0",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz",
-      "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==",
+      "version": "8.17.1",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
+      "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
       "dev": true,
       "engines": {
         "node": ">=10.0.0"
@@ -26977,10 +28860,20 @@
       "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
       "dev": true
     },
+    "node_modules/xmlhttprequest-ssl": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
+      "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
     "node_modules/xstate": {
-      "version": "5.12.0",
-      "resolved": "https://registry.npmjs.org/xstate/-/xstate-5.12.0.tgz",
-      "integrity": "sha512-4W/Hj553mwVnTLQ1itc3rni/cGtM5OkjyavTjaxCelc0ZZKE/ks6tYllc98KbekIoUrEPm4CJH/wTB5p5pPGEw==",
+      "version": "5.13.2",
+      "resolved": "https://registry.npmjs.org/xstate/-/xstate-5.13.2.tgz",
+      "integrity": "sha512-cFbFJUuK7n8NGe9rsT9G8QjK/8KQO5WaxCkpl1GxnvSDb9oXM/+cbZbEtLT/YaAjDfaGA2nzOKyw5oev2LuNRw==",
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/xstate"
@@ -27006,13 +28899,17 @@
     "node_modules/yallist": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "devOptional": true
     },
     "node_modules/yaml": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
-      "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
+      "version": "2.4.5",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz",
+      "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==",
       "dev": true,
+      "bin": {
+        "yaml": "bin.mjs"
+      },
       "engines": {
         "node": ">= 14"
       }
@@ -27132,10 +29029,22 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/yoctocolors": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.0.2.tgz",
+      "integrity": "sha512-Ct97huExsu7cWeEjmrXlofevF8CvzUglJ4iGUet5B8xn1oumtAZBpHU4GzYuoE6PVqcZ5hghtBrSlhwHuR1Jmw==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/zod": {
-      "version": "3.23.4",
-      "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.4.tgz",
-      "integrity": "sha512-/AtWOKbBgjzEYYQRNfoGKHObgfAZag6qUJX1VbHo2PRBgS+wfWagEY2mizjfyAPcGesrJOcx/wcl0L9WnVrHFw==",
+      "version": "3.23.8",
+      "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
+      "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
       "funding": {
         "url": "https://github.com/sponsors/colinhacks"
       }
@@ -27202,8 +29111,8 @@
         "@types/pg-large-object": "^2.0.7",
         "@types/stream-json": "^1.7.7",
         "@types/supertest": "^6.0.2",
-        "@typescript-eslint/eslint-plugin": "^7.7.1",
-        "@typescript-eslint/parser": "^7.7.1",
+        "@typescript-eslint/eslint-plugin": "^7.12.0",
+        "@typescript-eslint/parser": "^7.12.0",
         "@vitest/coverage-v8": "^1.5.2",
         "carbone": "^3.5.5",
         "eslint": "^8.56.0",
@@ -27226,8 +29135,8 @@
         "zod": "^3.23.4"
       },
       "devDependencies": {
-        "@typescript-eslint/eslint-plugin": "^7.7.1",
-        "@typescript-eslint/parser": "^7.7.1",
+        "@typescript-eslint/eslint-plugin": "^7.12.0",
+        "@typescript-eslint/parser": "^7.12.0",
         "@vitest/coverage-v8": "^1.5.2",
         "prettier": "^3.2.5",
         "typescript": "^5.4.5",
@@ -27258,8 +29167,8 @@
         "@types/geojson": "^7946.0.14",
         "@types/leaflet": "^1.9.12",
         "@types/leaflet.markercluster": "^1.5.4",
-        "@typescript-eslint/eslint-plugin": "^7.7.1",
-        "@typescript-eslint/parser": "^7.7.1",
+        "@typescript-eslint/eslint-plugin": "^7.12.0",
+        "@typescript-eslint/parser": "^7.12.0",
         "@uppy/core": "^3.10.1",
         "@uppy/tus": "^3.5.4",
         "@vitejs/plugin-vue-jsx": "^3.1.0",
@@ -27300,6 +29209,7 @@
         "rollup-plugin-visualizer": "^5.12.0",
         "storybook": "8.0.9",
         "storybook-vue3-router": "^5.0.0",
+        "ts-node": "^10.9.2",
         "tus-js-client": "^4.1.0",
         "typescript": "^5.4.5",
         "typescript-plugin-css-modules": "^5.1.0",
diff --git a/packages/api/package.json b/packages/api/package.json
index 96e33d805..414563c9c 100644
--- a/packages/api/package.json
+++ b/packages/api/package.json
@@ -96,8 +96,8 @@
     "@types/pg-large-object": "^2.0.7",
     "@types/stream-json": "^1.7.7",
     "@types/supertest": "^6.0.2",
-    "@typescript-eslint/eslint-plugin": "^7.7.1",
-    "@typescript-eslint/parser": "^7.7.1",
+    "@typescript-eslint/eslint-plugin": "^7.12.0",
+    "@typescript-eslint/parser": "^7.12.0",
     "@vitest/coverage-v8": "^1.5.2",
     "carbone": "^3.5.5",
     "eslint": "^8.56.0",
diff --git a/packages/api/src/api/_format/titres-etapes.ts b/packages/api/src/api/_format/titres-etapes.ts
index dc1bed14f..c469b5dea 100644
--- a/packages/api/src/api/_format/titres-etapes.ts
+++ b/packages/api/src/api/_format/titres-etapes.ts
@@ -1,8 +1,143 @@
+import { FlattenEtape, defaultHeritageProps, flattenEtapeValidator, heritageContenuValidator } from 'camino-common/src/etape-form.js'
+import { simpleContenuToFlattenedContenu } from 'camino-common/src/sections.js'
+import { isNotNullNorUndefined, isNullOrUndefined } from 'camino-common/src/typescript-tools.js'
 import { ITitreEtape } from '../../types.js'
 
 import { titreEtapeFormatFields } from './_fields.js'
 import { titreDemarcheFormat } from './titres-demarches.js'
+import { EtapesTypes } from 'camino-common/src/static/etapesTypes.js'
 
+const getPerimetreFromITitreEtape = (
+  titreEtape: Pick<
+    ITitreEtape,
+    'geojson4326Perimetre' | 'geojson4326Points' | 'geojsonOriginePerimetre' | 'geojsonOriginePoints' | 'geojson4326Forages' | 'geojsonOrigineForages' | 'geojsonOrigineGeoSystemeId' | 'surface'
+  >
+): FlattenEtape['perimetre']['value'] => ({
+  geojson4326Perimetre: titreEtape.geojson4326Perimetre ?? null,
+  geojson4326Points: titreEtape.geojson4326Points ?? null,
+  geojsonOriginePerimetre: titreEtape.geojsonOriginePerimetre ?? null,
+  geojsonOriginePoints: titreEtape.geojsonOriginePoints ?? null,
+  geojson4326Forages: titreEtape.geojson4326Forages ?? null,
+  geojsonOrigineForages: titreEtape.geojsonOrigineForages ?? null,
+  geojsonOrigineGeoSystemeId: titreEtape.geojsonOrigineGeoSystemeId ?? null,
+  surface: titreEtape.surface ?? null,
+})
+
+export const iTitreEtapeToFlattenEtape = (titreEtape: ITitreEtape): FlattenEtape => {
+  const titreTypeId = titreEtape.demarche?.titre?.typeId
+  const demarcheTypeId = titreEtape.demarche?.typeId
+  const heritageProps = EtapesTypes[titreEtape.typeId].fondamentale ? titreEtape.heritageProps : defaultHeritageProps
+  const heritageContenu = titreEtape.heritageContenu
+  const slug = titreEtape.slug
+  if (isNullOrUndefined(titreTypeId)) {
+    throw new Error('pas de démarche ou de titre chargé')
+  }
+  if (isNullOrUndefined(demarcheTypeId)) {
+    throw new Error('pas de démarche chargée')
+  }
+  if (isNullOrUndefined(heritageProps)) {
+    throw new Error("pas d'héritage chargé")
+  }
+
+  if (isNullOrUndefined(slug)) {
+    throw new Error('pas de slug')
+  }
+  const contenu = simpleContenuToFlattenedContenu(titreTypeId, demarcheTypeId, titreEtape.typeId, titreEtape.contenu ?? {}, heritageContenuValidator.parse(heritageContenu))
+  const flattenEtape: FlattenEtape = {
+    ...titreEtape,
+    slug,
+    notes: titreEtape.notes ?? null,
+    duree: {
+      value: (heritageProps.duree.actif ? heritageProps.duree.etape?.duree : titreEtape.duree) ?? null,
+      heritee: heritageProps.duree.actif,
+      etapeHeritee: isNotNullNorUndefined(heritageProps.duree.etape)
+        ? {
+            etapeTypeId: heritageProps.duree.etape.typeId,
+            date: heritageProps.duree.etape.date,
+            value: heritageProps.duree.etape.duree ?? null,
+          }
+        : null,
+    },
+    perimetre: {
+      value: heritageProps.perimetre.actif
+        ? isNotNullNorUndefined(heritageProps.perimetre.etape)
+          ? getPerimetreFromITitreEtape(heritageProps.perimetre.etape)
+          : null
+        : getPerimetreFromITitreEtape(titreEtape),
+
+      heritee: heritageProps.perimetre.actif,
+      etapeHeritee: isNotNullNorUndefined(heritageProps.perimetre.etape)
+        ? {
+            etapeTypeId: heritageProps.perimetre.etape.typeId,
+            date: heritageProps.perimetre.etape.date,
+            value: getPerimetreFromITitreEtape(heritageProps.perimetre.etape),
+          }
+        : null,
+    },
+    dateDebut: {
+      value: (heritageProps.dateDebut.actif ? heritageProps.dateDebut.etape?.dateDebut : titreEtape.dateDebut) ?? null,
+      heritee: heritageProps.dateDebut.actif,
+      etapeHeritee: isNotNullNorUndefined(heritageProps.dateDebut.etape)
+        ? {
+            etapeTypeId: heritageProps.dateDebut.etape.typeId,
+            date: heritageProps.dateDebut.etape.date,
+            value: heritageProps.dateDebut.etape.dateDebut ?? null,
+          }
+        : null,
+    },
+    dateFin: {
+      value: (heritageProps.dateFin.actif ? heritageProps.dateFin.etape?.dateFin : titreEtape.dateFin) ?? null,
+      heritee: heritageProps.dateFin.actif,
+      etapeHeritee: isNotNullNorUndefined(heritageProps.dateFin.etape)
+        ? {
+            etapeTypeId: heritageProps.dateFin.etape.typeId,
+            date: heritageProps.dateFin.etape.date,
+            value: heritageProps.dateFin.etape.dateFin ?? null,
+          }
+        : null,
+    },
+    substances: {
+      value: (heritageProps.substances.actif ? (isNotNullNorUndefined(heritageProps.substances.etape) ? heritageProps.substances.etape.substances : []) : titreEtape.substances) ?? [],
+
+      heritee: heritageProps.substances.actif,
+      etapeHeritee: isNotNullNorUndefined(heritageProps.substances.etape)
+        ? {
+            etapeTypeId: heritageProps.substances.etape.typeId,
+            date: heritageProps.substances.etape.date,
+            value: heritageProps.substances.etape.substances ?? [],
+          }
+        : null,
+    },
+    amodiataires: {
+      value: (heritageProps.amodiataires.actif ? (isNotNullNorUndefined(heritageProps.amodiataires.etape) ? heritageProps.amodiataires.etape.amodiataireIds : []) : titreEtape.amodiataireIds) ?? [],
+
+      heritee: heritageProps.amodiataires.actif,
+      etapeHeritee: isNotNullNorUndefined(heritageProps.amodiataires.etape)
+        ? {
+            etapeTypeId: heritageProps.amodiataires.etape.typeId,
+            date: heritageProps.amodiataires.etape.date,
+            value: heritageProps.amodiataires.etape.amodiataireIds ?? [],
+          }
+        : null,
+    },
+    titulaires: {
+      value: (heritageProps.titulaires.actif ? (isNotNullNorUndefined(heritageProps.titulaires.etape) ? heritageProps.titulaires.etape.titulaireIds : []) : titreEtape.titulaireIds) ?? [],
+
+      heritee: heritageProps.titulaires.actif,
+      etapeHeritee: isNotNullNorUndefined(heritageProps.titulaires.etape)
+        ? {
+            etapeTypeId: heritageProps.titulaires.etape.typeId,
+            date: heritageProps.titulaires.etape.date,
+            value: heritageProps.titulaires.etape.titulaireIds ?? [],
+          }
+        : null,
+    },
+    contenu,
+  }
+
+  // On zod parse ici pour enlever les champs supplémentaires qu'il y'a par exemple dans perimetre
+  return flattenEtapeValidator.parse(flattenEtape)
+}
 export const titreEtapeFormat = (titreEtape: ITitreEtape, fields = titreEtapeFormatFields) => {
   if (titreEtape.demarche) {
     titreEtape.demarche = titreDemarcheFormat(titreEtape.demarche, fields.demarche)
diff --git a/packages/api/src/api/graphql/administrations-permissions-etapes.test.integration.ts b/packages/api/src/api/graphql/administrations-permissions-etapes.test.integration.ts
index de2207c05..117b3d305 100644
--- a/packages/api/src/api/graphql/administrations-permissions-etapes.test.integration.ts
+++ b/packages/api/src/api/graphql/administrations-permissions-etapes.test.integration.ts
@@ -1,9 +1,8 @@
 import { dbManager } from '../../../tests/db-manager.js'
 import { creationCheck, visibleCheck } from '../../../tests/_utils/administrations-permissions.js'
-import { afterAll, beforeEach, beforeAll, describe, test, vi } from 'vitest'
+import { afterAll, beforeAll, describe, test, vi } from 'vitest'
 import { AdministrationId } from 'camino-common/src/static/administrations.js'
 import { EtapeTypeId } from 'camino-common/src/static/etapesTypes.js'
-import Utilisateurs from '../../database/models/utilisateurs'
 import type { Pool } from 'pg'
 vi.mock('../../tools/dir-create', () => ({
   __esModule: true,
@@ -13,9 +12,6 @@ vi.mock('../../tools/dir-create', () => ({
 console.info = vi.fn()
 console.error = vi.fn()
 
-beforeEach(async () => {
-  await Utilisateurs.query().delete()
-})
 let dbPool: Pool
 beforeAll(async () => {
   const { pool } = await dbManager.populateDb()
@@ -59,9 +55,15 @@ describe('Visibilité des étapes', () => {
 })
 
 describe('Création des étapes', () => {
-  test('un utilisateur admin de l’administration min-mtes-dgaln-01 peut créer une étape $etapeTypeId sur un titre CXM', () => creationCheck(dbPool, 'min-mtes-dgaln-01', true, 'etapes', 'cxm'))
+  test('un utilisateur admin de l’administration min-mtes-dgaln-01 peut créer une étape $etapeTypeId sur un titre CXM', async () => {
+    await creationCheck(dbPool, 'min-mtes-dgaln-01', true, 'etapes', 'cxm')
+  })
 
-  test('un utilisateur admin de l’administration "min-mtes-dgaln-01" peut créer une étape mfr sur un titre PRM', () => creationCheck(dbPool, 'min-mtes-dgaln-01', true, 'etapes', 'prm'))
+  test('un utilisateur admin de l’administration "min-mtes-dgaln-01" peut créer une étape mfr sur un titre PRM', async () => {
+    await creationCheck(dbPool, 'min-mtes-dgaln-01', true, 'etapes', 'prm')
+  })
 
-  test('un utilisateur admin de l’administration "min-mtes-dgaln-01" peut créer une étape mfr sur un titre PXM', () => creationCheck(dbPool, 'min-mtes-dgaln-01', true, 'etapes', 'pxm'))
+  test('un utilisateur admin de l’administration "min-mtes-dgaln-01" peut créer une étape mfr sur un titre PXM', async () => {
+    await creationCheck(dbPool, 'min-mtes-dgaln-01', true, 'etapes', 'pxm')
+  })
 })
diff --git a/packages/api/src/api/graphql/resolvers.ts b/packages/api/src/api/graphql/resolvers.ts
index 8f5199280..1d08d170e 100644
--- a/packages/api/src/api/graphql/resolvers.ts
+++ b/packages/api/src/api/graphql/resolvers.ts
@@ -2,7 +2,7 @@ import GraphQLJSON from 'graphql-type-json'
 
 import { titres, titreCreer } from './resolvers/titres.js'
 
-import { etape, etapeHeritage, etapeCreer, etapeModifier } from './resolvers/titres-etapes.js'
+import { etapeHeritage } from './resolvers/titres-etapes.js'
 
 import { demarches, demarcheCreer, demarcheModifier, demarcheSupprimer } from './resolvers/titres-demarches.js'
 
@@ -45,7 +45,6 @@ export default {
   Json: GraphQLJSON,
 
   //  queries
-  etape,
   etapeHeritage,
   demarches,
   demarchesTypes,
@@ -83,8 +82,6 @@ export default {
   demarcheCreer,
   demarcheModifier,
   demarcheSupprimer,
-  etapeCreer,
-  etapeModifier,
   activiteDeposer,
   newsletterInscrire,
   titreDemandeCreer,
diff --git a/packages/api/src/api/graphql/resolvers/_titre-etape-email.test.ts b/packages/api/src/api/graphql/resolvers/_titre-etape-email.test.ts
index fdcc0f7fd..23d3b2760 100644
--- a/packages/api/src/api/graphql/resolvers/_titre-etape-email.test.ts
+++ b/packages/api/src/api/graphql/resolvers/_titre-etape-email.test.ts
@@ -3,6 +3,7 @@ import { userSuper } from '../../../database/user-super.js'
 import { expect, test } from 'vitest'
 import { UserNotNull } from 'camino-common/src/roles.js'
 import { newUtilisateurId } from '../../../database/models/_format/id-create.js'
+import { ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
 
 test('envoie un email sur une étape non existante', () => {
   const actual = emailsForAdministrationsGet(undefined, '', '', '', userSuper, undefined)
@@ -23,7 +24,7 @@ test("envoie un email sur un octroi d'AEX", () => {
     {
       typeId: 'mfr',
       statutId: 'fai',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
     },
     'oct',
     'titreId',
@@ -40,7 +41,7 @@ test("envoie un email sur un octroi d'ARM", () => {
     {
       typeId: 'mdp',
       statutId: 'fai',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
     },
     'oct',
     'titreId',
diff --git a/packages/api/src/api/graphql/resolvers/_titre-etape-email.ts b/packages/api/src/api/graphql/resolvers/_titre-etape-email.ts
index aa4d0bb10..7fd1a6a2a 100644
--- a/packages/api/src/api/graphql/resolvers/_titre-etape-email.ts
+++ b/packages/api/src/api/graphql/resolvers/_titre-etape-email.ts
@@ -8,6 +8,7 @@ import { EmailAdministration } from '../../../tools/api-mailjet/types.js'
 import { UserNotNull } from 'camino-common/src/roles.js'
 import { EtapesTypes } from 'camino-common/src/static/etapesTypes.js'
 import { isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty } from 'camino-common/src/typescript-tools.js'
+import { ETAPE_IS_BROUILLON, ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
 
 const emailForAdministrationContentFormat = (titreTypeId: string, etapeNom: string, titreId: string, user: UserNotNull) => {
   const titreUrl = titreUrlGet(titreId)
@@ -43,7 +44,7 @@ export const emailsForAdministrationsGet = (
 
   if (demarcheTypeId === 'oct' && titreTypeId === 'arm') {
     // lorsque la demande est déposée
-    if (!etape.isBrouillon && (oldEtape?.isBrouillon ?? true)) {
+    if (etape.isBrouillon === ETAPE_IS_NOT_BROUILLON && (oldEtape?.isBrouillon ?? ETAPE_IS_BROUILLON) === ETAPE_IS_BROUILLON) {
       emails.push(EmailAdministration.PTMG)
       emails.push(EmailAdministration.ONF)
 
@@ -62,7 +63,7 @@ export const emailsForAdministrationsGet = (
       title = 'Nouvelle demande complète'
     }
   } else if (demarcheTypeId === 'oct' && titreTypeId === 'axm') {
-    if (!etape.isBrouillon && (oldEtape?.isBrouillon ?? true)) {
+    if (etape.isBrouillon === ETAPE_IS_NOT_BROUILLON && (oldEtape?.isBrouillon ?? ETAPE_IS_BROUILLON) === ETAPE_IS_BROUILLON) {
       emails.push(EmailAdministration.DGTM)
 
       title = 'Nouvelle demande déposée'
@@ -85,7 +86,14 @@ export const emailsForAdministrationsGet = (
   return { subject, content, emails }
 }
 
-export const titreEtapeAdministrationsEmailsSend = async (etape: ITitreEtape, demarcheTypeId: string, titreId: string, titreTypeId: string, user: UserNotNull, oldEtape?: ITitreEtape) => {
+export const titreEtapeAdministrationsEmailsSend = async (
+  etape: Pick<ITitreEtape, 'typeId' | 'statutId' | 'isBrouillon'>,
+  demarcheTypeId: string,
+  titreId: string,
+  titreTypeId: string,
+  user: UserNotNull,
+  oldEtape?: ITitreEtape
+) => {
   const emailsForAdministrations = emailsForAdministrationsGet(etape, demarcheTypeId, titreId, titreTypeId, user, oldEtape)
 
   if (emailsForAdministrations) {
diff --git a/packages/api/src/api/graphql/resolvers/titres-etapes.test.ts b/packages/api/src/api/graphql/resolvers/titres-etapes.test.ts
deleted file mode 100644
index 12b7c7a79..000000000
--- a/packages/api/src/api/graphql/resolvers/titres-etapes.test.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { expect, test } from 'vitest'
-import { arePointsOnPerimeter } from './titres-etapes'
-import { FeatureMultiPolygon } from 'camino-common/src/perimetre'
-
-const bigGeoJson: FeatureMultiPolygon = {
-  type: 'Feature',
-  properties: {},
-  geometry: {
-    type: 'MultiPolygon',
-    // prettier-ignore
-    "coordinates": [      [        [          [            -4.370364497124209,            48.53380508608616          ],          [            -4.373271574712479,            48.47151134163559          ],          [            -4.03753485335386,            48.579164636474836          ],          [            -3.89919702975027,            48.603980178934115          ],          [            -3.860482328708233,            48.62511389817695          ],          [            -3.858436311611334,            48.629031691751045          ],          [            -3.862157259991486,            48.633014015139416          ],          [            -3.870281882041237,            48.63550010399696          ],          [            -3.879786359001045,            48.639113643702565          ],          [            -3.895430188480503,            48.64455770816115          ],          [            -3.89902273351368,            48.64822789311303          ],          [            -3.902536979616769,            48.654435032933826          ],          [            -3.906528075174153,            48.66061643462235          ],          [            -3.904489574558275,            48.6643307169305          ],          [            -3.89647573803132,            48.66601900245078          ],          [            -3.890673665115296,            48.667020244464325          ],          [            -3.890721315690864,            48.67062455977177          ],          [            -3.892950905315848,            48.67088770685571          ],          [            -3.898005277721187,            48.6723935639094          ],          [            -3.8992413951649,            48.67074624589731          ],          [            -3.903300809713803,            48.67034264689684          ],          [            -3.907548440632195,            48.66910635173531          ],          [            -3.91185396569359,            48.669954398127075          ],          [            -3.914635548862354,            48.67322568941628          ],          [            -3.920575104032537,            48.67458696237509          ],          [            -3.924157593611878,            48.669749821082725          ],          [            -3.927138109422188,            48.66538094626539          ],          [            -3.927802453245391,            48.66178827244388          ],          [            -3.92880004801291,            48.660065331624466          ],          [            -3.930674658925236,            48.657424523021          ],          [            -3.934385020441046,            48.65730036039394          ],          [            -3.940574301992641,            48.65682750256307          ],          [            -3.949892212356874,            48.653210569309856          ],          [            -3.9518951695476,            48.64983646195122          ],          [            -3.95135848409069,            48.646306571150944          ],          [            -3.952791103114349,            48.64456097348628          ],          [            -3.954311041643234,            48.64535110107629          ],          [            -3.957178207067545,            48.65093506946735          ],          [            -3.95632686509049,            48.654756209794456          ],          [            -3.954939197043658,            48.66049485799891          ],          [            -3.958264581105623,            48.66351217516115          ],          [            -3.954301077151103,            48.665175330569724          ],          [            -3.958113788215813,            48.66678821578858          ],          [            -3.958288500972019,            48.67004622329816          ],          [            -3.953583216471425,            48.67102223996598          ],          [            -3.952154912225681,            48.67280542236          ],          [            -3.954601922703807,            48.67354649576719          ],          [            -3.957150323952388,            48.6728667311387          ],          [            -3.962232217223142,            48.674085603023535          ],          [            -3.96509885038279,            48.67647290565392          ],          [            -3.968196892552599,            48.67354977814375          ],          [            -3.970552500285286,            48.67336152037275          ],          [            -3.971907150463719,            48.67429537178488          ],          [            -3.971687730880199,            48.67565139942766          ],          [            -3.968925351937541,            48.67998621214178          ],          [            -3.97276835094199,            48.68681279071675          ],          [            -3.969905040239144,            48.687617856017994          ],          [            -3.967785856011854,            48.69274164929216          ],          [            -3.97050395358365,            48.693904041872074          ],          [            -3.974129066864182,            48.69665141578885          ],          [            -3.976827175680581,            48.699084231748806          ],          [            -3.973964059500176,            48.70207052891004          ],          [            -3.97557715354335,            48.70449012698265          ],          [            -3.972337757698344,            48.70582333762662          ],          [            -3.974038535718974,            48.710344199247295          ],          [            -3.972061362590358,            48.71168433267898          ],          [            -3.969407494937729,            48.71919463600953          ],          [            -3.966114995158957,            48.719188628020184          ],          [            -3.964815895310649,            48.72248973384656          ],          [            -3.968123622922862,            48.72216808659624          ],          [            -3.970117554054281,            48.7239825094888          ],          [            -3.971030085004171,            48.72531725688056          ],          [            -3.974105493634571,            48.72442714535237          ],          [            -3.977130032296356,            48.72223266964199          ],          [            -3.98038470744471,            48.72282149601802          ],          [            -3.98267568678471,            48.72451484026706          ],          [            -3.983159793997456,            48.72623219482621          ],          [            -3.985655519886893,            48.726898196761965          ],          [            -3.988412331317411,            48.727004809776105          ],          [            -3.990251104366354,            48.72588975599552          ],          [            -3.992106999472123,            48.723541171653366          ],          [            -3.992308257471176,            48.72204072794657          ],          [            -3.990818477440011,            48.71838055340067          ],          [            -3.993241558794496,            48.715311146944074          ],          [            -3.99726181945054,            48.71273584775902          ],          [            -4.000886986292233,            48.71141716999743          ],          [            -4.005573266114372,            48.715195490443925          ],          [            -4.004640753163968,            48.716989015759715          ],          [            -4.007861713401779,            48.72044675798358          ],          [            -4.009590286562232,            48.72068101995395          ],          [            -4.012907971574204,            48.71865165832863          ],          [            -4.010881803078078,            48.716872551149415          ],          [            -4.013298574720932,            48.713765123429766          ],          [            -4.018283788022766,            48.71146515516518          ],          [            -4.02502266800395,            48.710486602386844          ],          [            -4.029102910364339,            48.7109751516783          ],          [            -4.032895375568785,            48.712496949149184          ],          [            -4.034013864663466,            48.71364906002572          ],          [            -4.035203599079426,            48.71386049099469          ],          [            -4.036426674181452,            48.711761570746404          ],          [            -4.035857818689737,            48.70935978588029          ],          [            -4.037836186006247,            48.70536884991981          ],          [            -4.040876440962449,            48.70331706201061          ],          [            -4.042661395770205,            48.70267658451317          ],          [            -4.044522857875245,            48.70264835316387          ],          [            -4.048746772595955,            48.70536952092104          ],          [            -4.051782617787177,            48.70458102418029          ],          [            -4.053387641319855,            48.70237110662314          ],          [            -4.054960885021424,            48.69887510664347          ],          [            -4.057098904957046,            48.688336149296134          ],          [            -4.047492224129947,            48.6881905546806          ],          [            -4.04264615919883,            48.688356681641565          ],          [            -4.05570877851515,            48.685187990084636          ],          [            -4.061384711067841,            48.687678086132514          ],          [            -4.063856568443375,            48.68626486757381          ],          [            -4.069006699782528,            48.687977416990556          ],          [            -4.066114156101222,            48.68600063748565          ],          [            -4.065917761777147,            48.68383188367652          ],          [            -4.06536435070835,            48.68281963355705          ],          [            -4.062811851052143,            48.68243638561189          ],          [            -4.063604286352126,            48.680735563101265          ],          [            -4.061249339782617,            48.68019915458731          ],          [            -4.060491984152113,            48.67893668983929          ],          [            -4.056630622211962,            48.67523642323898          ],          [            -4.055350396131191,            48.67179995101334          ],          [            -4.057224936686009,            48.670572879663034          ],          [            -4.057969445321888,            48.675068847630506          ],          [            -4.059622862128396,            48.675122344607715          ],          [            -4.06024682153259,            48.67613145254186          ],          [            -4.063213863275964,            48.67815002912692          ],          [            -4.064507934140134,            48.677605925445725          ],          [            -4.067195178609656,            48.67891661518815          ],          [            -4.068000601946539,            48.68272446881325          ],          [            -4.07116708376152,            48.68462241191764          ],          [            -4.080222240659125,            48.689712089777736          ],          [            -4.082890717412141,            48.693212237422216          ],          [            -4.0837341887691,            48.69168549285934          ],          [            -4.08645810312384,            48.69005696722575          ],          [            -4.08922980276701,            48.69161527586137          ],          [            -4.091651149022687,            48.69171173600047          ],          [            -4.095188717132302,            48.686965610139666          ],          [            -4.097383839952319,            48.69356464812578          ],          [            -4.102536986221444,            48.69351221259058          ],          [            -4.106197887484285,            48.692515838515405          ],          [            -4.109568285925066,            48.69472448012849          ],          [            -4.115803404112282,            48.69506791354793          ],          [            -4.118098969264236,            48.692778728280935          ],          [            -4.12511664716867,            48.693877169595176          ],          [            -4.127837461875522,            48.69361476668908          ],          [            -4.131236501370729,            48.6960475956426          ],          [            -4.136181126707938,            48.69293107079426          ],          [            -4.142132619722753,            48.69237814384752          ],          [            -4.150020162763907,            48.69217377284019          ],          [            -4.152170300893284,            48.691487051119246          ],          [            -4.162483098525137,            48.68833023827453          ],          [            -4.174170898732186,            48.657628672506775          ],          [            -4.409843663429304,            48.633874515395604          ],          [            -4.370364497124209,            48.53380508608616          ]
-        ]
-      ]
-    ],
-  },
-}
-
-test('arePointsOnPerimeter', () => {
-  expect(arePointsOnPerimeter(bigGeoJson, { type: 'FeatureCollection', features: [{ type: 'Feature', properties: {}, geometry: { type: 'Point', coordinates: [1, 2] } }] })).toBe(false)
-  expect(
-    arePointsOnPerimeter(bigGeoJson, { type: 'FeatureCollection', features: [{ type: 'Feature', properties: {}, geometry: { type: 'Point', coordinates: [-4.174170898732186, 48.657628672506775] } }] })
-  ).toBe(true)
-})
-
-test('arePointsOnPerimeter every point is on the perimeter', () => {
-  expect(
-    arePointsOnPerimeter(bigGeoJson, {
-      type: 'FeatureCollection',
-      features: bigGeoJson.geometry.coordinates.flatMap(coordinates =>
-        coordinates.flatMap(sub => sub.flatMap(coordinate => ({ type: 'Feature', properties: {}, geometry: { type: 'Point', coordinates: [coordinate[0], coordinate[1]] } })))
-      ),
-    })
-  ).toBe(true)
-})
diff --git a/packages/api/src/api/graphql/resolvers/titres-etapes.ts b/packages/api/src/api/graphql/resolvers/titres-etapes.ts
index 73b1a3a11..bdd6d1a82 100644
--- a/packages/api/src/api/graphql/resolvers/titres-etapes.ts
+++ b/packages/api/src/api/graphql/resolvers/titres-etapes.ts
@@ -1,106 +1,16 @@
-import { GraphQLResolveInfo } from 'graphql'
+import { Context } from '../../../types.js'
 
-import { Context, ITitre, ITitreEtape } from '../../../types.js'
-
-import { titreEtapeGet, titreEtapeUpsert } from '../../../database/queries/titres-etapes.js'
 import { titreDemarcheGet } from '../../../database/queries/titres-demarches.js'
 
-import { titreEtapeUpdateTask } from '../../../business/titre-etape-update.js'
 import { titreEtapeHeritageBuild } from './_titre-etape.js'
-import { titreEtapeUpdationValidate } from '../../../business/validations/titre-etape-updation-validate.js'
 
-import { fieldsBuild } from './_fields-build.js'
 import { titreEtapeFormat } from '../../_format/titres-etapes.js'
 import { userSuper } from '../../../database/user-super.js'
-import { titreEtapeAdministrationsEmailsSend, titreEtapeUtilisateursEmailsSend } from './_titre-etape-email.js'
-import { EtapeTypeId, canBeBrouillon } from 'camino-common/src/static/etapesTypes.js'
-import { isNonEmptyArray, isNotNullNorUndefined, isNullOrUndefined, onlyUnique } from 'camino-common/src/typescript-tools.js'
-import { User } from 'camino-common/src/roles.js'
+import { EtapeTypeId } from 'camino-common/src/static/etapesTypes.js'
 import { CaminoDate } from 'camino-common/src/date.js'
 import { titreEtapeFormatFields } from '../../_format/_fields.js'
-import { canCreateEtape, canEditDates, canEditDuree, canEditEtape } from 'camino-common/src/permissions/titres-etapes.js'
-import { TitresStatutIds } from 'camino-common/src/static/titresStatuts.js'
-import {
-  EtapeId,
-  documentComplementaireAslEtapeDocumentModificationValidator,
-  documentComplementaireDaeEtapeDocumentModificationValidator,
-  etapeDocumentModificationValidator,
-  needAslAndDae,
-  tempEtapeDocumentValidator,
-} from 'camino-common/src/etape.js'
-import { checkEntreprisesExist, getEntrepriseDocuments } from '../../rest/entreprises.queries.js'
-import { deleteTitreEtapeEntrepriseDocument, insertEtapeDocuments, insertTitreEtapeEntrepriseDocument, updateEtapeDocuments } from '../../../database/queries/titres-etapes.queries.js'
-import { EntrepriseDocument, EntrepriseId } from 'camino-common/src/entreprise.js'
-import { Pool } from 'pg'
-import { convertPoints, getGeojsonInformation } from '../../rest/perimetre.queries.js'
-import { SDOMZoneId } from 'camino-common/src/static/sdom.js'
-import { getSecteurMaritime } from 'camino-common/src/static/facades.js'
-import { FeatureCollectionPoints, FeatureMultiPolygon, equalGeojson } from 'camino-common/src/perimetre.js'
-import { FieldsEtape } from '../../../database/queries/_options'
-import { canHaveForages } from 'camino-common/src/permissions/titres.js'
-import { GEO_SYSTEME_IDS } from 'camino-common/src/static/geoSystemes.js'
-import { TitreTypeId } from 'camino-common/src/static/titresTypes.js'
-import { getEtapeByDemarcheIdAndEtapeTypeId } from '../../rest/etapes.queries.js'
+import { EtapeId } from 'camino-common/src/etape.js'
 import { DemarcheId } from 'camino-common/src/demarche.js'
-import { z } from 'zod'
-
-export const etape = async ({ id }: { id: EtapeId }, { user }: Context, info: GraphQLResolveInfo) => {
-  try {
-    const fields: FieldsEtape = fieldsBuild(info)
-
-    if (isNullOrUndefined(fields.demarche)) {
-      fields.demarche = { titre: { pointsEtape: { id: {} } } }
-    }
-    if (isNullOrUndefined(fields.demarche.titre)) {
-      fields.demarche.titre = { pointsEtape: { id: {} } }
-    }
-    if (isNullOrUndefined(fields.demarche.titre.pointsEtape)) {
-      fields.demarche.titre.pointsEtape = { id: {} }
-    }
-
-    const titreEtape = await titreEtapeGet(id, { fields, fetchHeritage: true }, user)
-
-    if (isNullOrUndefined(titreEtape)) {
-      throw new Error("l'étape n'existe pas")
-    }
-    if (
-      isNullOrUndefined(titreEtape.titulaireIds) ||
-      !titreEtape.demarche ||
-      !titreEtape.demarche.titre ||
-      titreEtape.demarche.titre.administrationsLocales === undefined ||
-      !titreEtape.demarche.titre.titreStatutId
-    ) {
-      throw new Error('la démarche n’est pas chargée complètement')
-    }
-
-    // Cette route est utilisée que par l’ancienne interface qui permet d’éditer une étape. Graphql permet de récupérer trop de champs si on ne fait pas ça.
-    if (
-      !canEditEtape(user, titreEtape.typeId, titreEtape.isBrouillon, titreEtape.titulaireIds ?? [], titreEtape.demarche.titre.administrationsLocales ?? [], titreEtape.demarche.typeId, {
-        typeId: titreEtape.demarche.titre.typeId,
-        titreStatutId: titreEtape.demarche.titre.titreStatutId,
-      })
-    )
-      throw new Error('droits insuffisants')
-
-    const titreDemarche = await titreDemarcheGet(
-      titreEtape.titreDemarcheId,
-      {
-        fields: {
-          id: {},
-        },
-      },
-      user
-    )
-
-    if (!titreDemarche) throw new Error("la démarche n'existe pas")
-
-    return titreEtapeFormat(titreEtape)
-  } catch (e) {
-    console.error(e)
-
-    throw e
-  }
-}
 
 export const etapeHeritage = async ({ date, titreDemarcheId, typeId, etapeId }: { date: CaminoDate; titreDemarcheId: DemarcheId; typeId: EtapeTypeId; etapeId: EtapeId | null }, { user }: Context) => {
   try {
@@ -132,425 +42,3 @@ export const etapeHeritage = async ({ date, titreDemarcheId, typeId, etapeId }:
     throw e
   }
 }
-
-export const arePointsOnPerimeter = (perimetre: FeatureMultiPolygon, points: FeatureCollectionPoints): boolean => {
-  const coordinatesSet = new Set()
-
-  perimetre.geometry.coordinates.forEach(geometry => geometry.forEach(sub => sub.forEach(coordinate => coordinatesSet.add(`${coordinate[0]}-${coordinate[1]}`))))
-
-  return points.features.every(point => {
-    return coordinatesSet.has(`${point.geometry.coordinates[0]}-${point.geometry.coordinates[1]}`)
-  })
-}
-
-const getForagesProperties = async (
-  titreTypeId: TitreTypeId,
-  geojsonOrigineGeoSystemeId: ITitreEtape['geojsonOrigineGeoSystemeId'],
-  geojsonOrigineForages: ITitreEtape['geojsonOrigineForages'],
-  pool: Pool
-): Promise<Pick<ITitreEtape, 'geojson4326Forages' | 'geojsonOrigineForages'>> => {
-  if (canHaveForages(titreTypeId) && isNotNullNorUndefined(geojsonOrigineForages) && isNotNullNorUndefined(geojsonOrigineGeoSystemeId)) {
-    return {
-      geojson4326Forages: await convertPoints(pool, geojsonOrigineGeoSystemeId, GEO_SYSTEME_IDS.WGS84, geojsonOrigineForages),
-      geojsonOrigineForages,
-    }
-  }
-
-  return {
-    geojson4326Forages: null,
-    geojsonOrigineForages: null,
-  }
-}
-
-export const etapeCreer = async ({ etape }: { etape: Omit<ITitreEtape, 'isBrouillon'> & { etapeDocuments: unknown } }, context: Context, info: GraphQLResolveInfo) => {
-  try {
-    const user = context.user
-    if (!user) {
-      throw new Error("la démarche n'existe pas")
-    }
-
-    let titreDemarche = await titreDemarcheGet(etape.titreDemarcheId, { fields: {} }, user)
-
-    if (!titreDemarche) throw new Error("la démarche n'existe pas")
-
-    titreDemarche = await titreDemarcheGet(
-      etape.titreDemarcheId,
-      {
-        fields: {
-          titre: {
-            demarches: { etapes: { id: {} } },
-            pointsEtape: { id: {} },
-            titulairesEtape: { id: {} },
-            amodiatairesEtape: { id: {} },
-          },
-          etapes: { id: {} },
-        },
-      },
-      userSuper
-    )
-
-    if (!titreDemarche || !titreDemarche.titre) throw new Error("le titre n'existe pas")
-
-    const entrepriseDocuments: EntrepriseDocument[] = await validateAndGetEntrepriseDocuments(context.pool, etape, titreDemarche.titre, user)
-    delete etape.entrepriseDocumentIds
-
-    const etapeDocumentsParsed = z.array(tempEtapeDocumentValidator).safeParse(etape.etapeDocuments)
-
-    if (!etapeDocumentsParsed.success) {
-      console.warn(etapeDocumentsParsed.error)
-      throw new Error('Les documents envoyés ne sont pas conformes')
-    }
-
-    const etapeDocuments = etapeDocumentsParsed.data
-    delete etape.etapeDocuments
-
-    const sdomZones: SDOMZoneId[] = []
-    if (isNotNullNorUndefined(etape.geojson4326Perimetre)) {
-      if (isNotNullNorUndefined(etape.geojsonOriginePerimetre) && isNotNullNorUndefined(etape.geojsonOriginePoints)) {
-        if (!arePointsOnPerimeter(etape.geojsonOriginePerimetre, etape.geojsonOriginePoints)) {
-          throw new Error(`les points doivent être sur le périmètre`)
-        }
-      }
-      const { communes, sdom, surface, forets, secteurs } = await getGeojsonInformation(context.pool, etape.geojson4326Perimetre.geometry)
-      etape.surface = surface
-
-      etape.communes = communes
-      etape.forets = forets
-      etape.secteursMaritime = secteurs.map(id => getSecteurMaritime(id))
-      etape.sdomZones = sdom
-
-      sdomZones.push(...sdom)
-    } else {
-      etape.communes = []
-      etape.forets = []
-      etape.secteursMaritime = []
-      etape.sdomZones = []
-      etape.surface = null
-    }
-
-    const titreTypeId = titreDemarche?.titre?.typeId
-    if (!titreTypeId) {
-      throw new Error(`le type du titre de la ${titreDemarche.id} n'est pas chargé`)
-    }
-
-    const etapeToSave: ITitreEtape = {
-      ...etape,
-      isBrouillon: canBeBrouillon(etape.typeId),
-      ...(await getForagesProperties(titreTypeId, etape.geojsonOrigineGeoSystemeId, etape.geojsonOrigineForages, context.pool)),
-    }
-
-    const rulesErrors = titreEtapeUpdationValidate(etapeToSave, titreDemarche, titreDemarche.titre, etapeDocuments, entrepriseDocuments, sdomZones, user, null, null)
-    if (rulesErrors.length) {
-      throw new Error(rulesErrors.join(', '))
-    }
-    if (
-      !canCreateEtape(user, etape.typeId, etapeToSave.isBrouillon, titreDemarche.titre.titulaireIds ?? [], titreDemarche.titre.administrationsLocales ?? [], titreDemarche.typeId, {
-        typeId: titreDemarche.titre.typeId,
-        titreStatutId: titreDemarche.titre.titreStatutId ?? TitresStatutIds.Indetermine,
-      })
-    ) {
-      throw new Error('droits insuffisants pour créer cette étape')
-    }
-
-    if (!(await checkEntreprisesExist(context.pool, [...(etape.titulaireIds ?? []), ...(etape.amodiataireIds ?? [])]))) {
-      throw new Error("certaines entreprises n'existent pas")
-    }
-
-    if (!canEditDuree(titreTypeId, titreDemarche.typeId)) {
-      etape.duree = null
-    }
-
-    if (!canEditDates(titreTypeId, titreDemarche.typeId, etape.typeId, user) && (isNotNullNorUndefined(etape.dateDebut) || isNotNullNorUndefined(etape.dateFin))) {
-      etape.dateDebut = null
-      etape.dateFin = null
-    }
-
-    let etapeUpdated: ITitreEtape | undefined = await titreEtapeUpsert(etapeToSave, user!, titreDemarche.titreId)
-    if (isNullOrUndefined(etapeUpdated)) {
-      throw new Error("Une erreur est survenue lors de la création de l'étape")
-    }
-
-    await insertEtapeDocuments(context.pool, etapeUpdated.id, etapeDocuments)
-    for (const document of entrepriseDocuments) {
-      await insertTitreEtapeEntrepriseDocument(context.pool, { titre_etape_id: etapeUpdated.id, entreprise_document_id: document.id })
-    }
-
-    try {
-      await titreEtapeUpdateTask(context.pool, etapeUpdated.id, etapeUpdated.titreDemarcheId, user)
-    } catch (e) {
-      console.error('une erreur est survenue lors des tâches annexes', e)
-    }
-
-    await titreEtapeAdministrationsEmailsSend(etapeUpdated, titreDemarche.typeId, titreDemarche.titreId, titreDemarche.titre.typeId, user)
-    await titreEtapeUtilisateursEmailsSend(etapeUpdated, titreDemarche.titreId)
-    const fields = fieldsBuild(info)
-
-    etapeUpdated = await titreEtapeGet(etapeUpdated.id, { fields }, user)
-
-    return titreEtapeFormat(etapeUpdated!)
-  } catch (e) {
-    console.error(e)
-
-    throw e
-  }
-}
-
-const validateAndGetEntrepriseDocuments = async (
-  pool: Pool,
-  etape: Pick<ITitreEtape, 'heritageProps' | 'titulaireIds' | 'amodiataireIds' | 'entrepriseDocumentIds'>,
-  titre: Pick<ITitre, 'titulaireIds' | 'amodiataireIds'>,
-  user: User
-): Promise<EntrepriseDocument[]> => {
-  const entrepriseDocuments: EntrepriseDocument[] = []
-
-  // si l’héritage est désactivé => on récupère les titulaires sur l’étape
-  // sinon on les trouve sur le titre
-  const titulaires = !(etape.heritageProps?.titulaires.actif ?? false) ? etape.titulaireIds : titre.titulaireIds
-  const amodiataires = !(etape.heritageProps?.amodiataires.actif ?? false) ? etape.amodiataireIds : titre.amodiataireIds
-  if (etape.entrepriseDocumentIds && isNonEmptyArray(etape.entrepriseDocumentIds)) {
-    let entrepriseIds: EntrepriseId[] = []
-    if (titulaires) {
-      entrepriseIds.push(...titulaires)
-    }
-    if (amodiataires) {
-      entrepriseIds.push(...amodiataires)
-    }
-    entrepriseIds = entrepriseIds.filter(onlyUnique)
-
-    if (isNonEmptyArray(entrepriseIds)) {
-      entrepriseDocuments.push(...(await getEntrepriseDocuments(etape.entrepriseDocumentIds, entrepriseIds, pool, user)))
-    }
-
-    if (etape.entrepriseDocumentIds.length !== entrepriseDocuments.length) {
-      throw new Error("document d'entreprise incorrects")
-    }
-  }
-
-  return entrepriseDocuments
-}
-
-export const etapeModifier = async (
-  { etape }: { etape: Omit<ITitreEtape, 'isBrouillon'> & { etapeDocuments: unknown; daeDocument: unknown; aslDocument: unknown } },
-  context: Context,
-  info: GraphQLResolveInfo
-) => {
-  try {
-    const user = context.user
-    if (!user) {
-      throw new Error("l'étape n'existe pas")
-    }
-
-    const titreEtapeOld = await titreEtapeGet(
-      etape.id,
-      {
-        fields: {
-          demarche: { titre: { pointsEtape: { id: {} } } },
-        },
-      },
-      user
-    )
-
-    if (isNullOrUndefined(titreEtapeOld)) throw new Error("l'étape n'existe pas")
-
-    if (!titreEtapeOld.demarche || !titreEtapeOld.demarche.titre || titreEtapeOld.demarche.titre.administrationsLocales === undefined || !titreEtapeOld.demarche.titre.titreStatutId) {
-      throw new Error('la démarche n’est pas chargée complètement')
-    }
-
-    if (
-      !canEditEtape(user, titreEtapeOld.typeId, titreEtapeOld.isBrouillon, titreEtapeOld.titulaireIds ?? [], titreEtapeOld.demarche.titre.administrationsLocales ?? [], titreEtapeOld.demarche.typeId, {
-        typeId: titreEtapeOld.demarche.titre.typeId,
-        titreStatutId: titreEtapeOld.demarche.titre.titreStatutId,
-      })
-    )
-      throw new Error('droits insuffisants')
-
-    if (titreEtapeOld.typeId !== etape.typeId) throw new Error("Il est interdit d'éditer le type d'étape")
-
-    if (titreEtapeOld.titreDemarcheId !== etape.titreDemarcheId) throw new Error("la démarche n'existe pas")
-
-    const titreDemarche = await titreDemarcheGet(
-      etape.titreDemarcheId,
-      {
-        fields: {
-          titre: {
-            demarches: { etapes: { id: {} } },
-            titulairesEtape: { id: {} },
-            amodiatairesEtape: { id: {} },
-          },
-          etapes: { id: {} },
-        },
-      },
-      userSuper
-    )
-
-    if (!titreDemarche || !titreDemarche.titre) throw new Error("le titre n'existe pas")
-    if (isNullOrUndefined(titreDemarche.titre.titulaireIds) || isNullOrUndefined(titreDemarche.titre.amodiataireIds)) throw new Error('la démarche n’est pas chargée complètement')
-
-    const entrepriseDocuments: EntrepriseDocument[] = await validateAndGetEntrepriseDocuments(context.pool, etape, titreDemarche.titre, user)
-    delete etape.entrepriseDocumentIds
-
-    const etapeDocumentsParsed = z.array(etapeDocumentModificationValidator).safeParse(etape.etapeDocuments)
-
-    if (!etapeDocumentsParsed.success) {
-      console.warn(etapeDocumentsParsed.error)
-      throw new Error('Les documents envoyés ne sont pas conformes')
-    }
-
-    const etapeDocuments = etapeDocumentsParsed.data
-    delete etape.etapeDocuments
-
-    const needToCreateAslAndDae = needAslAndDae({ etapeTypeId: etape.typeId, demarcheTypeId: titreDemarche.typeId, titreTypeId: titreDemarche.titre.typeId }, titreEtapeOld.isBrouillon, user)
-    let daeDocument = null
-    let aslDocument = null
-    if (needToCreateAslAndDae) {
-      const daeDocumentParsed = documentComplementaireDaeEtapeDocumentModificationValidator.nullable().safeParse(etape.daeDocument)
-      if (!daeDocumentParsed.success) {
-        console.warn(daeDocumentParsed.error)
-        throw new Error('L’arrêté préfectoral n’est pas conforme')
-      }
-
-      daeDocument = daeDocumentParsed.data
-
-      const aslDocumentParsed = documentComplementaireAslEtapeDocumentModificationValidator.nullable().safeParse(etape.aslDocument)
-      if (!aslDocumentParsed.success) {
-        console.warn(aslDocumentParsed.error)
-        throw new Error('La lettre du propriétaire du sol n’est pas conforme')
-      }
-
-      aslDocument = aslDocumentParsed.data
-    }
-    delete etape.daeDocument
-    delete etape.aslDocument
-
-    const sdomZones: SDOMZoneId[] = []
-    if (isNotNullNorUndefined(etape.geojson4326Perimetre)) {
-      if (isNotNullNorUndefined(etape.geojsonOriginePerimetre) && isNotNullNorUndefined(etape.geojsonOriginePoints)) {
-        if (!arePointsOnPerimeter(etape.geojsonOriginePerimetre, etape.geojsonOriginePoints)) {
-          throw new Error(`les points doivent être sur le périmètre`)
-        }
-      }
-
-      const { communes, sdom, surface, forets, secteurs } = await getGeojsonInformation(context.pool, etape.geojson4326Perimetre.geometry)
-
-      if (!equalGeojson(etape.geojson4326Perimetre.geometry, titreEtapeOld.geojson4326Perimetre?.geometry)) {
-        etape.surface = surface
-      } else {
-        etape.surface = titreEtapeOld.surface
-      }
-
-      etape.communes = communes
-      etape.forets = forets
-      etape.secteursMaritime = secteurs.map(id => getSecteurMaritime(id))
-      etape.sdomZones = sdom
-
-      sdomZones.push(...sdom)
-    } else {
-      etape.communes = []
-      etape.forets = []
-      etape.secteursMaritime = []
-      etape.sdomZones = []
-      etape.surface = null
-    }
-
-    const titreTypeId = titreDemarche?.titre?.typeId
-    if (!titreTypeId) {
-      throw new Error(`le type du titre de la ${titreDemarche.id} n'est pas chargé`)
-    }
-    const etapeToSave: ITitreEtape = {
-      ...etape,
-      isBrouillon: titreEtapeOld.isBrouillon,
-      ...(await getForagesProperties(titreTypeId, etape.geojsonOrigineGeoSystemeId, etape.geojsonOrigineForages, context.pool)),
-    }
-
-    const rulesErrors = titreEtapeUpdationValidate(etapeToSave, titreDemarche, titreDemarche.titre, etapeDocuments, entrepriseDocuments, sdomZones, user, daeDocument, aslDocument, titreEtapeOld)
-
-    if (rulesErrors.length) {
-      throw new Error(rulesErrors.join(', '))
-    }
-
-    if (!canEditDuree(titreTypeId, titreDemarche.typeId)) {
-      etape.duree = titreEtapeOld.duree
-    }
-
-    if (!canEditDates(titreTypeId, titreDemarche.typeId, etape.typeId, user)) {
-      etape.dateDebut = titreEtapeOld.dateDebut
-      etape.dateFin = titreEtapeOld.dateFin
-    }
-
-    if (!(await checkEntreprisesExist(context.pool, [...(etape.titulaireIds ?? []), ...(etape.amodiataireIds ?? [])]))) {
-      throw new Error("certaines entreprises n'existent pas")
-    }
-
-    let etapeUpdated: ITitreEtape | undefined = await titreEtapeUpsert(etapeToSave, user!, titreDemarche.titreId)
-    if (isNullOrUndefined(etapeUpdated)) {
-      throw new Error("Une erreur est survenue lors de la modification de l'étape")
-    }
-    await updateEtapeDocuments(context.pool, user, etapeUpdated.id, etapeUpdated.isBrouillon, etapeDocuments)
-    await deleteTitreEtapeEntrepriseDocument(context.pool, { titre_etape_id: etapeUpdated.id })
-    for (const document of entrepriseDocuments) {
-      await insertTitreEtapeEntrepriseDocument(context.pool, { titre_etape_id: etapeUpdated.id, entreprise_document_id: document.id })
-    }
-
-    if (needToCreateAslAndDae) {
-      if (daeDocument !== null) {
-        const daeEtapeInDb = await getEtapeByDemarcheIdAndEtapeTypeId(context.pool, 'dae', titreDemarche.id)
-
-        const daeEtape = await titreEtapeUpsert(
-          {
-            id: daeEtapeInDb?.etape_id ?? undefined,
-            typeId: 'dae',
-            statutId: daeDocument.etape_statut_id,
-            isBrouillon: false,
-            titreDemarcheId: titreDemarche.id,
-            date: daeDocument.date,
-            contenu: {
-              mea: { arrete: daeDocument.arrete_prefectoral },
-            },
-          },
-          user!,
-          titreDemarche.titreId
-        )
-        if (isNullOrUndefined(daeEtape)) {
-          throw new Error("impossible d'intégrer le document lié à la DAE")
-        }
-
-        await updateEtapeDocuments(context.pool, user, daeEtape.id, titreEtapeOld.isBrouillon, [daeDocument])
-      }
-
-      if (aslDocument !== null) {
-        const aslEtapeInDb = await getEtapeByDemarcheIdAndEtapeTypeId(context.pool, 'asl', titreDemarche.id)
-
-        const aslEtape = await titreEtapeUpsert(
-          {
-            id: aslEtapeInDb?.etape_id ?? undefined,
-            typeId: 'asl',
-            statutId: aslDocument.etape_statut_id,
-            isBrouillon: false,
-            titreDemarcheId: titreDemarche.id,
-            date: aslDocument.date,
-          },
-          user!,
-          titreDemarche.titreId
-        )
-
-        if (isNullOrUndefined(aslEtape)) {
-          throw new Error("impossible d'intégrer le document lié à la ASL")
-        }
-        await updateEtapeDocuments(context.pool, user, aslEtape.id, titreEtapeOld.isBrouillon, [aslDocument])
-      }
-    }
-
-    await titreEtapeUpdateTask(context.pool, etapeUpdated.id, etapeUpdated.titreDemarcheId, user)
-
-    await titreEtapeAdministrationsEmailsSend(etapeToSave, titreDemarche.typeId, titreDemarche.titreId, titreDemarche.titre.typeId, user, titreEtapeOld)
-
-    const fields = fieldsBuild(info)
-    etapeUpdated = await titreEtapeGet(etapeUpdated.id, { fields }, user)
-
-    return titreEtapeFormat(etapeUpdated!)
-  } catch (e) {
-    console.error(e)
-
-    throw e
-  }
-}
diff --git a/packages/api/src/api/graphql/schemas/administrations.graphql b/packages/api/src/api/graphql/schemas/administrations.graphql
deleted file mode 100644
index 14be61a70..000000000
--- a/packages/api/src/api/graphql/schemas/administrations.graphql
+++ /dev/null
@@ -1,24 +0,0 @@
-# import * from 'metas.graphql'
-# import * from 'administrations.graphql'
-# import * from 'utilisateurs.graphql'
-# import * from 'titres.graphql'
-# import * from 'metas.graphql'
-# import * from 'territoires.graphql'
-
-input InputAdministrationTitreTypeTitreStatut {
-  administrationId: ID!
-  titreTypeId: ID!
-  titreStatutId: ID!
-  titresModificationInterdit: Boolean
-  demarchesModificationInterdit: Boolean
-  etapesModificationInterdit: Boolean
-}
-
-input InputAdministrationTitreTypeEtapeType {
-  administrationId: ID!
-  titreTypeId: ID!
-  etapeTypeId: ID!
-  lectureInterdit: Boolean
-  modificationInterdit: Boolean
-  creationInterdit: Boolean
-}
diff --git a/packages/api/src/api/graphql/schemas/entreprises.graphql b/packages/api/src/api/graphql/schemas/entreprises.graphql
index ff6319480..1eb0af43b 100644
--- a/packages/api/src/api/graphql/schemas/entreprises.graphql
+++ b/packages/api/src/api/graphql/schemas/entreprises.graphql
@@ -31,28 +31,3 @@ type EntrepriseEtablissement {
   dateFin: String
   legalSiret: String
 }
-
-input InputEntreprise {
-  id: ID!
-  nom: String
-  paysId: String
-  legalSiren: String
-  legalEtranger: String
-  legalForme: String
-  categorie: String
-  adresse: String
-  codePostal: String
-  commune: String
-  cedex: String
-  url: String
-  telephone: String
-  email: String
-}
-
-input InputEtablissements {
-  id: ID!
-  nom: String
-  legalSiret: String
-  dateDebut: String
-  dateFin: String
-}
diff --git a/packages/api/src/api/graphql/schemas/index.graphql b/packages/api/src/api/graphql/schemas/index.graphql
index 2dee39909..ca1c8e5fe 100644
--- a/packages/api/src/api/graphql/schemas/index.graphql
+++ b/packages/api/src/api/graphql/schemas/index.graphql
@@ -1,5 +1,4 @@
 # import * from 'scalars.graphql'
-# import * from 'administrations.graphql'
 # import * from 'entreprises.graphql'
 # import * from 'geojsons.graphql'
 # import * from 'metas-activites.graphql'
@@ -75,9 +74,6 @@ type Query {
     travaux: Boolean
   ): Demarches
 
-  "Étape d’une démarche en fonction de son id"
-  etape(id: ID!): Etape
-
   etapeHeritage(date: String!, titreDemarcheId: ID!, typeId: ID!, etapeId: ID): EtapeHeritage
 
   "Liste des activités"
@@ -174,12 +170,6 @@ type Mutation {
   "Supprime une démarche et met à jour le titre minier"
   demarcheSupprimer(id: ID!): ID
 
-  "Crée une étape et met à jour le titre minier"
-  etapeCreer(etape: InputEtapeCreation!): Etape
-
-  "Modifie une étape et met à jour le titre minier"
-  etapeModifier(etape: InputEtapeModification!): Etape
-
   "Dépose une activité"
   activiteDeposer(id: ID!): Activite
 }
diff --git a/packages/api/src/api/graphql/schemas/metas.graphql b/packages/api/src/api/graphql/schemas/metas.graphql
index c5411166e..224ea88a7 100644
--- a/packages/api/src/api/graphql/schemas/metas.graphql
+++ b/packages/api/src/api/graphql/schemas/metas.graphql
@@ -233,7 +233,3 @@ enum Couleur {
   success
   warning
 }
-
-input InputId {
-  id: ID!
-}
diff --git a/packages/api/src/api/graphql/schemas/titres-etapes.graphql b/packages/api/src/api/graphql/schemas/titres-etapes.graphql
index 6c7dde9d1..1efdb32b4 100644
--- a/packages/api/src/api/graphql/schemas/titres-etapes.graphql
+++ b/packages/api/src/api/graphql/schemas/titres-etapes.graphql
@@ -1,4 +1,3 @@
-# import * from 'administrations.graphql'
 # import * from 'entreprises.graphql'
 # import * from 'substances.graphql'
 # import * from 'geojsons.graphql'
@@ -149,118 +148,9 @@ type HeritageProp {
   actif: Boolean
 }
 
-input InputEtapeCreation {
-  typeId: ID!
-  statutId: ID
-  titreDemarcheId: ID!
-  date: String!
-  ordre: Int
-  duree: Int
-  dateDebut: String
-  dateFin: String
-  substances: [String!]
-  geojson4326Perimetre: Json
-  geojson4326Points: Json
-  geojsonOriginePoints: Json
-  geojsonOriginePerimetre: Json
-  geojsonOrigineForages: Json
-  geojsonOrigineGeoSystemeId: String
-  titulaireIds: [String!]
-  amodiataireIds: [String!]
-  heritageProps: InputHeritageProps
-  heritageContenu: Json
-  contenu: Json
-  etapeDocuments: [InputEtapeDocumentCreation]
-  entrepriseDocumentIds: [ID]
-  notes: String
-}
-
-input DaeDocument {
-  id: String
-  temp_document_name: String
-  etape_document_type_id: String!
-  description: String
-  public_lecture: Boolean!
-  entreprises_lecture: Boolean!
-  etape_statut_id: String!
-  date: String!
-  arrete_prefectoral: String
-}
-
-input AslDocument {
-  id: String
-  temp_document_name: String
-  etape_document_type_id: String!
-  description: String
-  public_lecture: Boolean!
-  entreprises_lecture: Boolean!
-  etape_statut_id: String!
-  date: String!
-}
-
-input InputEtapeDocumentCreation {
-  temp_document_name: String!
-  etape_document_type_id: String!
-  description: String
-  public_lecture: Boolean!
-  entreprises_lecture: Boolean!
-}
-
-input InputEtapeModification {
-  id: ID!
-  typeId: ID!
-  statutId: ID
-  titreDemarcheId: ID!
-  date: String!
-  ordre: Int
-  duree: Int
-  dateDebut: String
-  dateFin: String
-  substances: [String!]
-  titulaireIds: [String!]
-  amodiataireIds: [String!]
-  heritageProps: InputHeritageProps
-  heritageContenu: Json
-  contenu: Json
-  etapeDocuments: [InputEtapeDocumentModification]
-  entrepriseDocumentIds: [ID]
-  notes: String
-  geojson4326Perimetre: Json
-  geojson4326Points: Json
-  geojsonOriginePoints: Json
-  geojsonOriginePerimetre: Json
-  geojsonOrigineForages: Json
-  geojsonOrigineGeoSystemeId: String
-  daeDocument: DaeDocument
-  aslDocument: AslDocument
-}
-
-input InputEtapeDocumentModification {
-  id: ID
-  temp_document_name: String
-  etape_document_type_id: String!
-  description: String
-  public_lecture: Boolean!
-  entreprises_lecture: Boolean!
-}
-
 input InputEtapeFiltre {
   typeId: ID!
   statutId: ID
   dateDebut: String
   dateFin: String
 }
-
-input InputHeritageProps {
-  dateDebut: InputHeritageProp
-  dateFin: InputHeritageProp
-  duree: InputHeritageProp
-  perimetre: InputHeritageProp
-  substances: InputHeritageProp
-  titulaires: InputHeritageProp
-  amodiataires: InputHeritageProp
-}
-
-input InputHeritageProp {
-  actif: Boolean
-}
diff --git a/packages/api/src/api/graphql/schemas/titres.graphql b/packages/api/src/api/graphql/schemas/titres.graphql
index 9eee2c472..bb0a596ba 100644
--- a/packages/api/src/api/graphql/schemas/titres.graphql
+++ b/packages/api/src/api/graphql/schemas/titres.graphql
@@ -1,5 +1,4 @@
 # import * from 'scalars.graphql'
-# import * from 'administrations.graphql'
 # import * from 'entreprises.graphql'
 # import * from 'titres-demarches.graphql'
 # import * from 'metas.graphql'
@@ -106,10 +105,6 @@ input InputTitreCreation {
   references: [InputReference]
 }
 
-input InputId {
-  id: ID
-}
-
 input InputReference {
   referenceTypeId: String!
   nom: String!
diff --git a/packages/api/src/api/graphql/schemas/utilisateurs.graphql b/packages/api/src/api/graphql/schemas/utilisateurs.graphql
index 838e70d1c..bffac8af9 100644
--- a/packages/api/src/api/graphql/schemas/utilisateurs.graphql
+++ b/packages/api/src/api/graphql/schemas/utilisateurs.graphql
@@ -1,5 +1,4 @@
 # import * from 'scalars.graphql'
-# import * from 'administrations.graphql'
 # import * from 'entreprises.graphql'
 # import * from 'metas.graphql'
 
diff --git a/packages/api/src/api/graphql/titres-demarches.test.integration.ts b/packages/api/src/api/graphql/titres-demarches.test.integration.ts
index deae5b1a2..c3d536931 100644
--- a/packages/api/src/api/graphql/titres-demarches.test.integration.ts
+++ b/packages/api/src/api/graphql/titres-demarches.test.integration.ts
@@ -10,6 +10,7 @@ import { afterAll, beforeAll, afterEach, describe, test, expect, vi } from 'vite
 import type { Pool } from 'pg'
 import { newEtapeId } from '../../database/models/_format/id-create.js'
 import TitresDemarches from '../../database/models/titres-demarches.js'
+import { ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
 
 console.info = vi.fn()
 console.error = vi.fn()
@@ -233,7 +234,7 @@ describe('demarcheModifier', () => {
         statutId: 'acc',
         ordre: 1,
         date: toCaminoDate('2020-01-01'),
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
       },
       userSuper,
       titreId
diff --git a/packages/api/src/api/graphql/titres-etapes-creer.test.integration.ts b/packages/api/src/api/graphql/titres-etapes-creer.test.integration.ts
deleted file mode 100644
index acaf4e08c..000000000
--- a/packages/api/src/api/graphql/titres-etapes-creer.test.integration.ts
+++ /dev/null
@@ -1,261 +0,0 @@
-import { dbManager } from '../../../tests/db-manager.js'
-import { graphQLCall, queryImport } from '../../../tests/_utils/index.js'
-import { titreDemarcheCreate } from '../../database/queries/titres-demarches.js'
-import { titreCreate } from '../../database/queries/titres.js'
-import Titres from '../../database/models/titres.js'
-import { ADMINISTRATION_IDS } from 'camino-common/src/static/administrations.js'
-import { isAdministrationRole, Role } from 'camino-common/src/roles.js'
-import { userSuper } from '../../database/user-super'
-
-import { afterAll, beforeEach, beforeAll, describe, test, expect, vi } from 'vitest'
-import type { Pool } from 'pg'
-import { ETAPE_HERITAGE_PROPS } from 'camino-common/src/heritage.js'
-
-vi.mock('../../tools/dir-create', () => ({
-  __esModule: true,
-  default: vi.fn(),
-}))
-
-console.info = vi.fn()
-console.error = vi.fn()
-let dbPool: Pool
-
-beforeAll(async () => {
-  const { pool } = await dbManager.populateDb()
-  dbPool = pool
-})
-
-beforeEach(async () => {
-  await Titres.query().delete()
-})
-
-afterAll(async () => {
-  await dbManager.closeKnex()
-})
-
-const demarcheCreate = async () => {
-  const titre = await titreCreate(
-    {
-      nom: 'mon titre',
-      typeId: 'arm',
-      titreStatutId: 'ind',
-      propsTitreEtapesIds: {},
-    },
-    {}
-  )
-
-  const titreDemarche = await titreDemarcheCreate({
-    titreId: titre.id,
-    typeId: 'oct',
-  })
-
-  return titreDemarche.id
-}
-
-describe('etapeCreer', () => {
-  const etapeCreerQuery = queryImport('titre-etape-creer')
-
-  test.each([undefined, 'editeur' as Role])('ne peut pas créer une étape (utilisateur %s)', async (role: Role | undefined) => {
-    const res = await graphQLCall(
-      dbPool,
-      etapeCreerQuery,
-      { etape: { typeId: '', statutId: '', titreDemarcheId: '', date: '' } },
-      role && isAdministrationRole(role) ? { role, administrationId: 'ope-onf-973-01' } : undefined
-    )
-
-    expect(res.body.errors[0].message).toBe("la démarche n'existe pas")
-  })
-
-  test('ne peut pas créer une étape sur une démarche inexistante (utilisateur admin)', async () => {
-    const res = await graphQLCall(dbPool, etapeCreerQuery, { etape: { typeId: '', statutId: '', titreDemarcheId: '', date: '' } }, { role: 'admin', administrationId: 'ope-onf-973-01' })
-
-    expect(res.body.errors[0].message).toBe("la démarche n'existe pas")
-  })
-
-  test('ne peut pas créer une étape de mia faite avec le ptmg', async () => {
-    const titreDemarcheId = await demarcheCreate()
-
-    const res = await graphQLCall(
-      dbPool,
-      etapeCreerQuery,
-      {
-        etape: {
-          typeId: 'mia',
-          statutId: 'fai',
-          titreDemarcheId,
-          date: '2018-01-01',
-          etapeDocuments: [],
-        },
-      },
-      {
-        role: 'admin',
-        administrationId: ADMINISTRATION_IDS['PÔLE TECHNIQUE MINIER DE GUYANE'],
-      }
-    )
-
-    expect(res.body.errors[0].message).toBe('droits insuffisants pour créer cette étape')
-  })
-  test('ne peut pas créer une étape incohérente (mia avec statut fav) (utilisateur admin)', async () => {
-    const titreDemarcheId = await demarcheCreate()
-
-    const res = await graphQLCall(
-      dbPool,
-      etapeCreerQuery,
-      {
-        etape: {
-          typeId: 'mia',
-          statutId: 'fav',
-          titreDemarcheId,
-          date: '2018-01-01',
-          etapeDocuments: [],
-        },
-      },
-      {
-        role: 'admin',
-        administrationId: ADMINISTRATION_IDS['PÔLE TECHNIQUE MINIER DE GUYANE'],
-      }
-    )
-
-    expect(res.body.errors[0].message).toBe('statut de l\'étape "fav" invalide pour une type d\'étape mia pour une démarche de type octroi')
-  })
-
-  test('peut créer une étape mia avec un statut fai (utilisateur super)', async () => {
-    const titreDemarcheId = await demarcheCreate()
-
-    const res = await graphQLCall(
-      dbPool,
-      etapeCreerQuery,
-      {
-        etape: {
-          typeId: 'mia',
-          statutId: 'fai',
-          titreDemarcheId,
-          date: '2018-01-01',
-          etapeDocuments: [],
-        },
-      },
-      userSuper
-    )
-
-    expect(res.body.errors).toBe(undefined)
-  })
-
-  test('peut créer une étape MEN sur un titre ARM en tant que PTMG (utilisateur admin)', async () => {
-    const titreDemarcheId = await demarcheCreate()
-    const res = await graphQLCall(
-      dbPool,
-      etapeCreerQuery,
-      {
-        etape: {
-          typeId: 'men',
-          statutId: 'fai',
-          titreDemarcheId,
-          date: '2018-01-01',
-          etapeDocuments: [],
-        },
-      },
-      {
-        role: 'admin',
-        administrationId: ADMINISTRATION_IDS['PÔLE TECHNIQUE MINIER DE GUYANE'],
-      }
-    )
-
-    expect(res.body.errors).toBe(undefined)
-  })
-
-  test('ne peut pas créer une étape EDE sur un titre ARM en tant que PTMG (utilisateur admin)', async () => {
-    const titreDemarcheId = await demarcheCreate()
-
-    const res = await graphQLCall(
-      dbPool,
-      etapeCreerQuery,
-      {
-        etape: {
-          typeId: 'ede',
-          statutId: 'fai',
-          titreDemarcheId,
-          date: '2018-01-01',
-          heritageContenu: {
-            deal: { motifs: { actif: false }, agent: { actif: false } },
-          },
-          contenu: {
-            deal: { motifs: 'motif', agent: 'agent' },
-          },
-          etapeDocuments: [],
-        },
-      },
-      {
-        role: 'admin',
-        administrationId: ADMINISTRATION_IDS['PÔLE TECHNIQUE MINIER DE GUYANE'],
-      }
-    )
-
-    expect(res.body.errors[0].message).toBe('statut de l\'étape "fai" invalide pour une type d\'étape ede pour une démarche de type octroi')
-  })
-
-  test('ne peut pas créer une étape avec des titulaires inexistants', async () => {
-    const titreDemarcheId = await demarcheCreate()
-
-    const res = await graphQLCall(
-      dbPool,
-      etapeCreerQuery,
-      {
-        etape: {
-          typeId: 'ede',
-          statutId: 'fav',
-          titreDemarcheId,
-          titulaireIds: ['inexistant'],
-          date: '2018-01-01',
-          heritageContenu: {
-            deal: { motifs: { actif: false }, agent: { actif: false } },
-          },
-          contenu: {
-            deal: { motifs: 'motif', agent: 'agent' },
-          },
-          etapeDocuments: [],
-        },
-      },
-      {
-        role: 'super',
-      }
-    )
-
-    expect(res.body.errors[0].message).toBe("certaines entreprises n'existent pas")
-  })
-
-  test('peut créer une étape mfr en brouillon avec un champ obligatoire manquant (utilisateur super)', async () => {
-    const titreDemarcheId = await demarcheCreate()
-    const res = await graphQLCall(
-      dbPool,
-      etapeCreerQuery,
-      {
-        etape: {
-          typeId: 'mfr',
-          statutId: 'fai',
-          titreDemarcheId,
-          date: '2018-01-01',
-          heritageProps: ETAPE_HERITAGE_PROPS.reduce(
-            (acc, prop) => {
-              acc[prop] = { actif: false }
-
-              return acc
-            },
-            {} as {
-              [key: string]: { actif: boolean }
-            }
-          ),
-          heritageContenu: {
-            arm: {
-              mecanise: { actif: true },
-              franchissements: { actif: true },
-            },
-          },
-          etapeDocuments: [],
-        },
-      },
-      userSuper
-    )
-
-    expect(res.body.errors).toBe(undefined)
-  })
-})
diff --git a/packages/api/src/api/graphql/titres-etapes-modifier.test.integration.ts b/packages/api/src/api/graphql/titres-etapes-modifier.test.integration.ts
deleted file mode 100644
index 78e923e1e..000000000
--- a/packages/api/src/api/graphql/titres-etapes-modifier.test.integration.ts
+++ /dev/null
@@ -1,407 +0,0 @@
-import { dbManager } from '../../../tests/db-manager.js'
-import { graphQLCall, queryImport, restCall } from '../../../tests/_utils/index.js'
-import { titreDemarcheCreate } from '../../database/queries/titres-demarches.js'
-import { titreCreate } from '../../database/queries/titres.js'
-import { titreEtapeCreate } from '../../database/queries/titres-etapes.js'
-import Titres from '../../database/models/titres.js'
-import { userSuper } from '../../database/user-super.js'
-import { ADMINISTRATION_IDS } from 'camino-common/src/static/administrations.js'
-import { isAdministrationRole, Role } from 'camino-common/src/roles.js'
-import { toCaminoDate } from 'camino-common/src/date.js'
-
-import { afterAll, beforeEach, beforeAll, describe, test, expect, vi } from 'vitest'
-import type { Pool } from 'pg'
-import { ETAPE_HERITAGE_PROPS } from 'camino-common/src/heritage.js'
-import { EtapeTypeId, canBeBrouillon } from 'camino-common/src/static/etapesTypes.js'
-import { isNotNullNorUndefined } from 'camino-common/src/typescript-tools.js'
-import { idGenerate } from '../../database/models/_format/id-create.js'
-import { copyFileSync, mkdirSync } from 'fs'
-import { TempEtapeDocument } from 'camino-common/src/etape.js'
-import { tempDocumentNameValidator } from 'camino-common/src/document.js'
-import { HTTP_STATUS } from 'camino-common/src/http.js'
-import { Knex } from 'knex'
-import { testDocumentCreateTemp } from '../../../tests/_utils/administrations-permissions.js'
-
-vi.mock('../../tools/dir-create', () => ({
-  __esModule: true,
-  default: vi.fn(),
-}))
-
-console.info = vi.fn()
-console.error = vi.fn()
-let dbPool: Pool
-let knexInstance: Knex
-beforeAll(async () => {
-  const { pool, knex } = await dbManager.populateDb()
-  dbPool = pool
-  knexInstance = knex
-})
-
-beforeEach(async () => {
-  await knexInstance.raw('delete from etapes_documents')
-  await Titres.query().delete()
-})
-
-afterAll(async () => {
-  await dbManager.closeKnex()
-})
-
-async function etapeCreate(typeId?: EtapeTypeId) {
-  const titre = await titreCreate(
-    {
-      nom: 'mon titre',
-      typeId: 'arm',
-      titreStatutId: 'ind',
-      propsTitreEtapesIds: {},
-    },
-    {}
-  )
-  const titreDemarche = await titreDemarcheCreate({
-    titreId: titre.id,
-    typeId: 'oct',
-  })
-
-  const myTypeId = isNotNullNorUndefined(typeId) ? typeId : 'mfr'
-  const titreEtape = await titreEtapeCreate(
-    {
-      typeId: myTypeId,
-      statutId: 'fai',
-      ordre: 1,
-      titreDemarcheId: titreDemarche.id,
-      date: toCaminoDate('2018-01-01'),
-      isBrouillon: canBeBrouillon(myTypeId),
-    },
-    userSuper,
-    titre.id
-  )
-
-  return { titreDemarcheId: titreDemarche.id, titreEtapeId: titreEtape.id }
-}
-
-describe('etapeModifier', () => {
-  const etapeModifierQuery = queryImport('titre-etape-modifier')
-
-  test.each([undefined, 'editeur' as Role])('ne peut pas modifier une étape (utilisateur %s)', async (role: Role | undefined) => {
-    const res = await graphQLCall(
-      dbPool,
-      etapeModifierQuery,
-      {
-        etape: {
-          id: '',
-          typeId: '',
-          statutId: '',
-          titreDemarcheId: '',
-          date: '',
-        },
-      },
-      role && isAdministrationRole(role) ? { role, administrationId: 'ope-onf-973-01' } : undefined
-    )
-
-    expect(res.body.errors[0].message).toBe("l'étape n'existe pas")
-  })
-
-  test('ne peut pas modifier une étape sur une démarche inexistante (utilisateur super)', async () => {
-    const res = await graphQLCall(
-      dbPool,
-      etapeModifierQuery,
-      {
-        etape: {
-          id: '',
-          typeId: '',
-          statutId: '',
-          titreDemarcheId: '',
-          date: '',
-        },
-      },
-      userSuper
-    )
-
-    expect(res.body.errors[0].message).toBe("l'étape n'existe pas")
-  })
-
-  test('peut modifier une étape mfr en brouillon (utilisateur super)', async () => {
-    const { titreDemarcheId, titreEtapeId } = await etapeCreate()
-    const res = await graphQLCall(
-      dbPool,
-      etapeModifierQuery,
-      {
-        etape: {
-          id: titreEtapeId,
-          typeId: 'mfr',
-          statutId: 'fai',
-          titreDemarcheId,
-          date: '2018-01-01',
-          heritageProps: ETAPE_HERITAGE_PROPS.reduce(
-            (acc, prop) => {
-              acc[prop] = { actif: false }
-
-              return acc
-            },
-            {} as {
-              [key: string]: { actif: boolean }
-            }
-          ),
-          heritageContenu: {
-            arm: {
-              mecanise: { actif: false },
-              franchissements: { actif: false },
-            },
-          },
-          contenu: {
-            arm: { mecanise: true, franchissements: 3 },
-          },
-          etapeDocuments: [],
-        },
-      },
-      userSuper
-    )
-
-    expect(res.body.errors).toBe(undefined)
-  })
-
-  test("ne peut pas modifier une étape avec des entreprises qui n'existent pas", async () => {
-    const { titreDemarcheId, titreEtapeId } = await etapeCreate()
-    const res = await graphQLCall(
-      dbPool,
-      etapeModifierQuery,
-      {
-        etape: {
-          id: titreEtapeId,
-          typeId: 'mfr',
-          statutId: 'fai',
-          titulaireIds: ['inexistant'],
-          titreDemarcheId,
-          date: '2018-01-01',
-          heritageProps: ETAPE_HERITAGE_PROPS.reduce(
-            (acc, prop) => {
-              acc[prop] = { actif: false }
-
-              return acc
-            },
-            {} as {
-              [key: string]: { actif: boolean }
-            }
-          ),
-          heritageContenu: {
-            arm: {
-              mecanise: { actif: false },
-              franchissements: { actif: false },
-            },
-          },
-          contenu: {
-            arm: { mecanise: true, franchissements: 3 },
-          },
-          etapeDocuments: [],
-        },
-      },
-      userSuper
-    )
-
-    expect(res.body.errors[0].message).toBe("certaines entreprises n'existent pas")
-  })
-
-  test("peut supprimer un document d'une demande en brouillon (utilisateur super)", async () => {
-    const { titreDemarcheId, titreEtapeId } = await etapeCreate()
-
-    const documentToInsert = testDocumentCreateTemp('aac')
-
-    const etape = {
-      id: titreEtapeId,
-      typeId: 'mfr',
-      statutId: 'fai',
-      titreDemarcheId,
-      date: '2018-01-01',
-      heritageProps: ETAPE_HERITAGE_PROPS.reduce(
-        (acc, prop) => {
-          acc[prop] = { actif: false }
-
-          return acc
-        },
-        {} as {
-          [key: string]: { actif: boolean }
-        }
-      ),
-      heritageContenu: {
-        arm: {
-          mecanise: { actif: false },
-          franchissements: { actif: false },
-        },
-      },
-      contenu: {
-        arm: { mecanise: true, franchissements: 3 },
-      },
-      etapeDocuments: [documentToInsert],
-    }
-
-    let res = await graphQLCall(dbPool, etapeModifierQuery, { etape }, userSuper)
-
-    expect(res.body.errors).toBe(undefined)
-
-    const documents = await restCall(dbPool, '/rest/etapes/:etapeId/etapeDocuments', { etapeId: titreEtapeId }, userSuper)
-    expect(documents.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
-    expect(documents.body.etapeDocuments).toHaveLength(1)
-    expect(documents.body.etapeDocuments[0]).toMatchInlineSnapshot(
-      { id: expect.any(String) },
-      `
-      {
-        "description": "desc",
-        "entreprises_lecture": true,
-        "etape_document_type_id": "aac",
-        "id": Any<String>,
-        "public_lecture": true,
-      }
-    `
-    )
-    res = await graphQLCall(dbPool, etapeModifierQuery, { etape: { ...etape, etapeDocuments: [] } }, userSuper)
-
-    expect(res.body.errors).toBe(undefined)
-  })
-
-  test("ne peut pas supprimer un document obligatoire d'une étape qui n'est pas en brouillon (utilisateur super)", async () => {
-    const { titreDemarcheId, titreEtapeId } = await etapeCreate('dae')
-    const dir = `${process.cwd()}/files/tmp/`
-
-    const fileName = `existing_temp_file_${idGenerate()}`
-    mkdirSync(dir, { recursive: true })
-    copyFileSync(`./src/tools/small.pdf`, `${dir}/${fileName}`)
-    const documentToInsert: TempEtapeDocument = {
-      etape_document_type_id: 'aac',
-      entreprises_lecture: true,
-      public_lecture: true,
-      description: 'desc',
-      temp_document_name: tempDocumentNameValidator.parse(fileName),
-    }
-
-    const etape = {
-      id: titreEtapeId,
-      typeId: 'dae',
-      statutId: 'exe',
-      titreDemarcheId,
-      date: '2018-01-01',
-      heritageProps: ETAPE_HERITAGE_PROPS.reduce(
-        (acc, prop) => {
-          acc[prop] = { actif: false }
-
-          return acc
-        },
-        {} as {
-          [key: string]: { actif: boolean }
-        }
-      ),
-      heritageContenu: {
-        mea: {
-          arrete: { actif: false },
-        },
-      },
-      contenu: {
-        mea: { arrete: 'arrete' },
-      },
-      etapeDocuments: [documentToInsert],
-    }
-
-    let res = await graphQLCall(dbPool, etapeModifierQuery, { etape }, userSuper)
-
-    expect(res.body.errors).toBe(undefined)
-
-    res = await graphQLCall(dbPool, etapeModifierQuery, { etape: { ...etape, etapeDocuments: [] } }, userSuper)
-
-    expect(res.body.errors[0].message).toBe('Impossible de supprimer les documents')
-  })
-
-  test('peut modifier une étape mia avec un statut fai (utilisateur super)', async () => {
-    const { titreDemarcheId, titreEtapeId } = await etapeCreate('mia')
-
-    const res = await graphQLCall(
-      dbPool,
-      etapeModifierQuery,
-      {
-        etape: {
-          id: titreEtapeId,
-          typeId: 'mia',
-          statutId: 'fai',
-          titreDemarcheId,
-          date: '2018-01-01',
-          etapeDocuments: [],
-        },
-      },
-      userSuper
-    )
-
-    expect(res.body.errors).toBe(undefined)
-  })
-
-  test('ne peut pas modifier une étape mia avec un statut fav (utilisateur admin)', async () => {
-    const { titreDemarcheId, titreEtapeId } = await etapeCreate('mia')
-
-    const res = await graphQLCall(
-      dbPool,
-      etapeModifierQuery,
-      {
-        etape: {
-          id: titreEtapeId,
-          typeId: 'mia',
-          statutId: 'fav',
-          titreDemarcheId,
-          date: '2018-01-01',
-        },
-      },
-      {
-        role: 'admin',
-        administrationId: ADMINISTRATION_IDS['PÔLE TECHNIQUE MINIER DE GUYANE'],
-      }
-    )
-
-    expect(res.body.errors[0].message).toBe("l'étape n'existe pas")
-  })
-
-  test('peut modifier une étape MEN sur un titre ARM en tant que PTMG (utilisateur admin)', async () => {
-    const { titreDemarcheId, titreEtapeId } = await etapeCreate('men')
-    const res = await graphQLCall(
-      dbPool,
-      etapeModifierQuery,
-      {
-        etape: {
-          id: titreEtapeId,
-          typeId: 'men',
-          statutId: 'fai',
-          titreDemarcheId,
-          date: '2016-01-01',
-          etapeDocuments: [],
-        },
-      },
-      {
-        role: 'admin',
-        administrationId: ADMINISTRATION_IDS['PÔLE TECHNIQUE MINIER DE GUYANE'],
-      }
-    )
-
-    expect(res.body.errors).toBe(undefined)
-  })
-
-  test('ne peut pas modifier une étape EDE sur un titre ARM en tant que PTMG (utilisateur admin)', async () => {
-    const { titreDemarcheId, titreEtapeId } = await etapeCreate('ede')
-    const res = await graphQLCall(
-      dbPool,
-      etapeModifierQuery,
-      {
-        etape: {
-          id: titreEtapeId,
-          typeId: 'ede',
-          statutId: 'fai',
-          titreDemarcheId,
-          date: '2018-01-01',
-          heritageContenu: {
-            deal: { motifs: { actif: false }, agent: { actif: false } },
-          },
-          contenu: { deal: { motifs: 'motif', agent: 'agent' } },
-        },
-      },
-      {
-        role: 'admin',
-        administrationId: ADMINISTRATION_IDS['PÔLE TECHNIQUE MINIER DE GUYANE'],
-      }
-    )
-
-    expect(res.body.errors[0].message).toBe("l'étape n'existe pas")
-  })
-})
diff --git a/packages/api/src/api/graphql/titres.test.integration.ts b/packages/api/src/api/graphql/titres.test.integration.ts
index 3765f092d..c2c641e43 100644
--- a/packages/api/src/api/graphql/titres.test.integration.ts
+++ b/packages/api/src/api/graphql/titres.test.integration.ts
@@ -15,6 +15,7 @@ import { newEntrepriseId } from 'camino-common/src/entreprise.js'
 import { communeIdValidator } from 'camino-common/src/static/communes.js'
 import type { Knex } from 'knex'
 import Titres from '../../database/models/titres'
+import { ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
 
 console.info = vi.fn()
 console.error = vi.fn()
@@ -80,22 +81,13 @@ const titreEtapesPubliques: ITitre = {
       publicLecture: true,
       etapes: [
         {
-          id: newEtapeId('titre-id-demarche-id-aof'),
-          typeId: 'aof',
+          id: newEtapeId('titre-id-demarche-id-asc'),
+          typeId: 'asc',
           ordre: 8,
           titreDemarcheId: newDemarcheId('titre-id-demarche-id'),
-          statutId: 'acc',
-          date: toCaminoDate('2020-02-02'),
-          isBrouillon: false,
-        },
-        {
-          id: newEtapeId('titre-id-demarche-id-eof'),
-          typeId: 'eof',
-          ordre: 7,
-          titreDemarcheId: newDemarcheId('titre-id-demarche-id'),
-          statutId: 'acc',
+          statutId: 'fai',
           date: toCaminoDate('2020-02-02'),
-          isBrouillon: false,
+          isBrouillon: ETAPE_IS_NOT_BROUILLON,
         },
         {
           id: newEtapeId('titre-id-demarche-id-edm'),
@@ -104,7 +96,7 @@ const titreEtapesPubliques: ITitre = {
           titreDemarcheId: newDemarcheId('titre-id-demarche-id'),
           statutId: 'acc',
           date: toCaminoDate('2020-02-02'),
-          isBrouillon: false,
+          isBrouillon: ETAPE_IS_NOT_BROUILLON,
         },
         {
           id: newEtapeId('titre-id-demarche-id-ede'),
@@ -113,7 +105,7 @@ const titreEtapesPubliques: ITitre = {
           titreDemarcheId: newDemarcheId('titre-id-demarche-id'),
           statutId: 'acc',
           date: toCaminoDate('2020-02-02'),
-          isBrouillon: false,
+          isBrouillon: ETAPE_IS_NOT_BROUILLON,
         },
         {
           id: newEtapeId('titre-id-demarche-id-pfd'),
@@ -122,7 +114,7 @@ const titreEtapesPubliques: ITitre = {
           titreDemarcheId: newDemarcheId('titre-id-demarche-id'),
           statutId: 'acc',
           date: toCaminoDate('2020-02-02'),
-          isBrouillon: false,
+          isBrouillon: ETAPE_IS_NOT_BROUILLON,
         },
         {
           id: newEtapeId('titre-id-demarche-id-pfc'),
@@ -131,7 +123,7 @@ const titreEtapesPubliques: ITitre = {
           titreDemarcheId: newDemarcheId('titre-id-demarche-id'),
           statutId: 'acc',
           date: toCaminoDate('2020-02-02'),
-          isBrouillon: false,
+          isBrouillon: ETAPE_IS_NOT_BROUILLON,
         },
         {
           id: newEtapeId('titre-id-demarche-id-vfd'),
@@ -140,7 +132,7 @@ const titreEtapesPubliques: ITitre = {
           titreDemarcheId: newDemarcheId('titre-id-demarche-id'),
           statutId: 'acc',
           date: toCaminoDate('2020-02-02'),
-          isBrouillon: false,
+          isBrouillon: ETAPE_IS_NOT_BROUILLON,
         },
         {
           id: newEtapeId('titre-id-demarche-id-vfc'),
@@ -149,7 +141,7 @@ const titreEtapesPubliques: ITitre = {
           titreDemarcheId: newDemarcheId('titre-id-demarche-id'),
           statutId: 'acc',
           date: toCaminoDate('2020-02-02'),
-          isBrouillon: false,
+          isBrouillon: ETAPE_IS_NOT_BROUILLON,
         },
         {
           id: newEtapeId('titre-id-demarche-id-dpu'),
@@ -159,7 +151,7 @@ const titreEtapesPubliques: ITitre = {
           statutId: 'acc',
           date: toCaminoDate('2020-02-02'),
           administrationsLocales: ['dea-guyane-01'],
-          isBrouillon: false,
+          isBrouillon: ETAPE_IS_NOT_BROUILLON,
         },
       ],
     },
@@ -235,7 +227,7 @@ describe('titre', () => {
       }))
     ).toEqual(
       expect.arrayContaining([
-        { id: 'titre-id-demarche-id-aof' },
+        { id: 'titre-id-demarche-id-asc' },
         { id: 'titre-id-demarche-id-dpu' },
         { id: 'titre-id-demarche-id-ede' },
         { id: 'titre-id-demarche-id-edm' },
@@ -260,15 +252,14 @@ describe('titre', () => {
     )
 
     expect(res.body.errors).toBe(undefined)
-    expect(res.body.data.titres.elements[0].demarches[0].etapes.length).toEqual(9)
+    expect(res.body.data.titres.elements[0].demarches[0].etapes.length).toEqual(8)
     expect(
       res.body.data.titres.elements[0].demarches[0].etapes.map(({ id }: { id: string }) => ({
         id,
       }))
     ).toEqual(
       expect.arrayContaining([
-        { id: 'titre-id-demarche-id-aof' },
-        { id: 'titre-id-demarche-id-eof' },
+        { id: 'titre-id-demarche-id-asc' },
         { id: 'titre-id-demarche-id-edm' },
         { id: 'titre-id-demarche-id-pfc' },
         { id: 'titre-id-demarche-id-pfd' },
@@ -312,7 +303,7 @@ describe('titres', () => {
             administrationsLocales: ['dea-guyane-01'],
             titulaireIds: [entrepriseId1],
             communes: [{ id: communeId }],
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
           },
         ],
       },
diff --git a/packages/api/src/api/rest/demarches.queries.ts b/packages/api/src/api/rest/demarches.queries.ts
index 919776f10..c8003d69e 100644
--- a/packages/api/src/api/rest/demarches.queries.ts
+++ b/packages/api/src/api/rest/demarches.queries.ts
@@ -9,7 +9,7 @@ import { communeValidator } from 'camino-common/src/static/communes.js'
 import { secteurMaritimeValidator } from 'camino-common/src/static/facades.js'
 import { substanceLegaleIdValidator } from 'camino-common/src/static/substancesLegales.js'
 import { etapeTypeIdValidator } from 'camino-common/src/static/etapesTypes.js'
-import { etapeIdValidator, etapeSlugValidator } from 'camino-common/src/etape.js'
+import { etapeBrouillonValidator, etapeIdValidator, etapeSlugValidator } from 'camino-common/src/etape.js'
 import { etapeStatutIdValidator } from 'camino-common/src/static/etapesStatuts.js'
 import { contenuValidator } from './activites.queries.js'
 import { sdomZoneIdValidator } from 'camino-common/src/static/sdom.js'
@@ -51,7 +51,7 @@ const getEtapesByDemarcheIdDbValidator = z.object({
   geojson_origine_forages: featureCollectionForagesValidator.nullable(),
   titulaire_ids: z.array(entrepriseIdValidator),
   amodiataire_ids: z.array(entrepriseIdValidator),
-  is_brouillon: z.boolean(),
+  is_brouillon: etapeBrouillonValidator,
 })
 
 export const getEtapesByDemarcheId = async (pool: Pool, demarcheId: DemarcheId) => {
diff --git a/packages/api/src/api/rest/demarches.test.integration.ts b/packages/api/src/api/rest/demarches.test.integration.ts
index f52a55598..3778ad997 100644
--- a/packages/api/src/api/rest/demarches.test.integration.ts
+++ b/packages/api/src/api/rest/demarches.test.integration.ts
@@ -15,6 +15,7 @@ import { entrepriseUpsert } from '../../database/queries/entreprises.js'
 import { FeatureMultiPolygon } from 'camino-common/src/perimetre.js'
 import { codePostalValidator } from 'camino-common/src/static/departement.js'
 import crypto from 'crypto'
+import { km2Validator } from 'camino-common/src/number.js'
 
 console.info = vi.fn()
 console.error = vi.fn()
@@ -99,7 +100,7 @@ describe('downloadDemarches', () => {
       statutId: 'fai',
       date: toCaminoDate('2022-01-01'),
       ordre: 1,
-      surface: 42,
+      surface: km2Validator.parse(42),
       geojson4326Perimetre: multiPolygonWith4Points,
       geojsonOriginePerimetre: multiPolygonWith4Points,
       geojsonOrigineGeoSystemeId: '4326',
@@ -154,7 +155,7 @@ slug,mon titre,minéraux et métaux,autorisation d'exploitation,valide,octroi,in
       statutId: 'fai',
       date: toCaminoDate('2023-01-01'),
       ordre: 2,
-      surface: 102,
+      surface: km2Validator.parse(102),
       geojson4326Perimetre: multiPolygonWith4Points,
       geojsonOriginePerimetre: multiPolygonWith4Points,
       geojsonOrigineGeoSystemeId: '4326',
diff --git a/packages/api/src/api/rest/entreprises.test.integration.ts b/packages/api/src/api/rest/entreprises.test.integration.ts
index f8fec9b30..593b2ca3e 100644
--- a/packages/api/src/api/rest/entreprises.test.integration.ts
+++ b/packages/api/src/api/rest/entreprises.test.integration.ts
@@ -19,6 +19,7 @@ import { idGenerate } from '../../database/models/_format/id-create'
 import { insertTitreEtapeEntrepriseDocument } from '../../database/queries/titres-etapes.queries.js'
 import { titreSlugValidator } from 'camino-common/src/validators/titres.js'
 import type { Knex } from 'knex'
+import { ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
 console.info = vi.fn()
 console.error = vi.fn()
 vi.mock('../../tools/api-insee/fetch', () => ({
@@ -287,7 +288,7 @@ describe('getEntrepriseDocument', () => {
         titreDemarcheId: titreDemarche.id,
         date: toCaminoDate('2022-01-01'),
         ordre: 1,
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
       },
       userSuper,
       titre.id
diff --git a/packages/api/src/api/rest/etape-creer.test.integration.ts b/packages/api/src/api/rest/etape-creer.test.integration.ts
new file mode 100644
index 000000000..b51e8de4c
--- /dev/null
+++ b/packages/api/src/api/rest/etape-creer.test.integration.ts
@@ -0,0 +1,306 @@
+import { dbManager } from '../../../tests/db-manager.js'
+import { restPostCall } from '../../../tests/_utils/index.js'
+import { titreDemarcheCreate } from '../../database/queries/titres-demarches.js'
+import { titreCreate } from '../../database/queries/titres.js'
+import Titres from '../../database/models/titres.js'
+import { ADMINISTRATION_IDS } from 'camino-common/src/static/administrations.js'
+import { userSuper } from '../../database/user-super'
+
+import { afterAll, beforeEach, beforeAll, describe, test, expect, vi } from 'vitest'
+import type { Pool } from 'pg'
+import { demarcheIdValidator } from 'camino-common/src/demarche.js'
+import { RestEtapeCreation, defaultHeritageProps } from 'camino-common/src/etape-form.js'
+import { HTTP_STATUS } from 'camino-common/src/http.js'
+import { toCaminoDate } from 'camino-common/src/date.js'
+import { entrepriseIdValidator } from 'camino-common/src/entreprise.js'
+
+console.info = vi.fn()
+console.error = vi.fn()
+let dbPool: Pool
+
+beforeAll(async () => {
+  const { pool } = await dbManager.populateDb()
+  dbPool = pool
+})
+
+beforeEach(async () => {
+  await Titres.query().delete()
+})
+
+afterAll(async () => {
+  await dbManager.closeKnex()
+})
+
+const demarcheCreate = async () => {
+  const titre = await titreCreate(
+    {
+      nom: 'mon titre',
+      typeId: 'arm',
+      titreStatutId: 'ind',
+      propsTitreEtapesIds: {},
+    },
+    {}
+  )
+
+  const titreDemarche = await titreDemarcheCreate({
+    titreId: titre.id,
+    typeId: 'oct',
+  })
+
+  return titreDemarche.id
+}
+
+const blankEtapeProps: Pick<
+  RestEtapeCreation,
+  | 'etapeDocuments'
+  | 'duree'
+  | 'dateDebut'
+  | 'dateFin'
+  | 'substances'
+  | 'geojson4326Perimetre'
+  | 'geojsonOriginePerimetre'
+  | 'geojson4326Points'
+  | 'geojsonOriginePoints'
+  | 'geojsonOrigineForages'
+  | 'geojsonOrigineGeoSystemeId'
+  | 'titulaireIds'
+  | 'amodiataireIds'
+  | 'notes'
+  | 'etapeAvis'
+  | 'entrepriseDocumentIds'
+  | 'heritageProps'
+  | 'heritageContenu'
+  | 'contenu'
+> = {
+  etapeDocuments: [],
+  duree: null,
+  dateDebut: null,
+  dateFin: null,
+  substances: [],
+  geojson4326Perimetre: null,
+  geojsonOriginePerimetre: null,
+  geojson4326Points: null,
+  geojsonOriginePoints: null,
+  geojsonOrigineForages: null,
+  geojsonOrigineGeoSystemeId: null,
+  titulaireIds: [],
+  amodiataireIds: [],
+  notes: null,
+  etapeAvis: [],
+  entrepriseDocumentIds: [],
+  heritageProps: defaultHeritageProps,
+  heritageContenu: {},
+  contenu: {},
+} as const
+describe('etapeCreer', () => {
+  test('ne peut pas créer une étape (utilisateur non authentifié)', async () => {
+    const result = await restPostCall(dbPool, '/rest/etapes', {}, undefined, { typeId: '', statutId: '', titreDemarcheId: '', date: '' } as unknown as RestEtapeCreation)
+
+    expect(result.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_FORBIDDEN)
+  })
+  test('ne peut pas créer une étape (utilisateur administration)', async () => {
+    const result = await restPostCall(dbPool, '/rest/etapes', {}, { role: 'editeur', administrationId: 'ope-onf-973-01' }, {
+      typeId: '',
+      statutId: '',
+      titreDemarcheId: '',
+      date: '',
+    } as unknown as RestEtapeCreation)
+
+    expect(result.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST)
+    expect(result.body).toStrictEqual({ errorMessage: "l'étape n'est pas correctement formatée" })
+  })
+
+  test('ne peut pas créer une étape sur une démarche inexistante (utilisateur admin)', async () => {
+    const res = await restPostCall(
+      dbPool,
+      '/rest/etapes',
+      {},
+      { role: 'admin', administrationId: 'ope-onf-973-01' },
+      {
+        typeId: 'mfr',
+        statutId: 'fai',
+        titreDemarcheId: demarcheIdValidator.parse(''),
+        date: toCaminoDate('2018-01-01'),
+        ...blankEtapeProps,
+      }
+    )
+
+    expect(res.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_NOT_FOUND)
+    expect(res.body).toMatchInlineSnapshot(`
+      {
+        "errorMessage": "la démarche n'existe pas",
+      }
+    `)
+  })
+
+  test('ne peut pas créer une étape de mia faite avec le ptmg', async () => {
+    const titreDemarcheId = await demarcheCreate()
+
+    const res = await restPostCall(
+      dbPool,
+      '/rest/etapes',
+      {},
+
+      {
+        role: 'admin',
+        administrationId: ADMINISTRATION_IDS['PÔLE TECHNIQUE MINIER DE GUYANE'],
+      },
+      {
+        typeId: 'sca',
+        statutId: 'fai',
+        titreDemarcheId,
+        date: toCaminoDate('2018-01-01'),
+        ...blankEtapeProps,
+      }
+    )
+
+    expect(res.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST)
+    expect(res.body).toMatchInlineSnapshot(`
+      {
+        "errorMessage": "droits insuffisants pour créer cette étape",
+      }
+    `)
+  })
+  test('ne peut pas créer une étape incohérente (asc avec statut fav) (utilisateur admin)', async () => {
+    const titreDemarcheId = await demarcheCreate()
+
+    const res = await restPostCall(
+      dbPool,
+      '/rest/etapes',
+      {},
+      {
+        role: 'admin',
+        administrationId: ADMINISTRATION_IDS['PÔLE TECHNIQUE MINIER DE GUYANE'],
+      },
+      {
+        typeId: 'asc',
+        statutId: 'fav',
+        titreDemarcheId,
+        date: toCaminoDate('2018-01-01'),
+        ...blankEtapeProps,
+      }
+    )
+
+    expect(res.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST)
+    expect(res.body).toMatchInlineSnapshot(`
+      {
+        "errorMessage": "statut de l'étape "fav" invalide pour une étape asc pour une démarche de type octroi",
+      }
+    `)
+  })
+
+  test('peut créer une étape asc avec un statut fai (utilisateur super)', async () => {
+    const titreDemarcheId = await demarcheCreate()
+
+    const res = await restPostCall(dbPool, '/rest/etapes', {}, userSuper, {
+      typeId: 'asc',
+      statutId: 'fai',
+      titreDemarcheId,
+      date: toCaminoDate('2018-01-01'),
+      ...blankEtapeProps,
+    })
+
+    expect(res.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
+  })
+
+  test('peut créer une étape MEN sur un titre ARM en tant que PTMG (utilisateur admin)', async () => {
+    const titreDemarcheId = await demarcheCreate()
+    const res = await restPostCall(
+      dbPool,
+      '/rest/etapes',
+      {},
+      {
+        role: 'admin',
+        administrationId: ADMINISTRATION_IDS['PÔLE TECHNIQUE MINIER DE GUYANE'],
+      },
+      {
+        typeId: 'men',
+        statutId: 'fai',
+        titreDemarcheId,
+        date: toCaminoDate('2018-01-01'),
+        ...blankEtapeProps,
+      }
+    )
+
+    expect(res.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
+  })
+
+  test('ne peut pas créer une étape EDE sur un titre ARM en tant que PTMG (utilisateur admin)', async () => {
+    const titreDemarcheId = await demarcheCreate()
+
+    const res = await restPostCall(
+      dbPool,
+      '/rest/etapes',
+      {},
+      {
+        role: 'admin',
+        administrationId: ADMINISTRATION_IDS['PÔLE TECHNIQUE MINIER DE GUYANE'],
+      },
+      {
+        typeId: 'ede',
+        statutId: 'fai',
+        titreDemarcheId,
+        date: toCaminoDate('2018-01-01'),
+        ...blankEtapeProps,
+        heritageContenu: {
+          deal: { motifs: { actif: false }, agent: { actif: false } },
+        },
+        contenu: {
+          deal: { motifs: 'motif', agent: 'agent' },
+        },
+      }
+    )
+
+    expect(res.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST)
+    expect(res.body).toMatchInlineSnapshot(`
+      {
+        "errorMessage": "statut de l'étape "fai" invalide pour une étape ede pour une démarche de type octroi",
+      }
+    `)
+  })
+
+  test('ne peut pas créer une étape avec des titulaires inexistants', async () => {
+    const titreDemarcheId = await demarcheCreate()
+
+    const res = await restPostCall(dbPool, '/rest/etapes', {}, userSuper, {
+      typeId: 'ede',
+      statutId: 'fav',
+      titreDemarcheId,
+      date: toCaminoDate('2018-01-01'),
+      ...blankEtapeProps,
+      titulaireIds: [entrepriseIdValidator.parse('inexistant')],
+      heritageContenu: {
+        deal: { motifs: { actif: false }, agent: { actif: false } },
+      },
+      contenu: {
+        deal: { motifs: 'motif', agent: 'agent' },
+      },
+    })
+
+    expect(res.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST)
+    expect(res.body).toMatchInlineSnapshot(`
+      {
+        "errorMessage": "certaines entreprises n'existent pas",
+      }
+    `)
+  })
+
+  test('peut créer une étape mfr en brouillon avec un champ obligatoire manquant (utilisateur super)', async () => {
+    const titreDemarcheId = await demarcheCreate()
+    const res = await restPostCall(dbPool, '/rest/etapes', {}, userSuper, {
+      typeId: 'mfr',
+      statutId: 'fai',
+      titreDemarcheId,
+      date: toCaminoDate('2018-01-01'),
+      ...blankEtapeProps,
+      heritageContenu: {
+        arm: {
+          mecanise: { actif: true },
+          franchissements: { actif: true },
+        },
+      },
+    })
+
+    expect(res.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
+  })
+})
diff --git a/packages/api/src/api/rest/etape-modifier.test.integration.ts b/packages/api/src/api/rest/etape-modifier.test.integration.ts
new file mode 100644
index 000000000..23c272196
--- /dev/null
+++ b/packages/api/src/api/rest/etape-modifier.test.integration.ts
@@ -0,0 +1,491 @@
+import { dbManager } from '../../../tests/db-manager.js'
+import { restPutCall, restCall } from '../../../tests/_utils/index.js'
+import { titreDemarcheCreate } from '../../database/queries/titres-demarches.js'
+import { titreCreate } from '../../database/queries/titres.js'
+import { titreEtapeCreate } from '../../database/queries/titres-etapes.js'
+import Titres from '../../database/models/titres.js'
+import { userSuper } from '../../database/user-super.js'
+import { ADMINISTRATION_IDS } from 'camino-common/src/static/administrations.js'
+import { caminoDateValidator, toCaminoDate } from 'camino-common/src/date.js'
+
+import { afterAll, beforeEach, beforeAll, describe, test, expect, vi } from 'vitest'
+import type { Pool } from 'pg'
+import { ETAPE_HERITAGE_PROPS, EtapeHeritageProps } from 'camino-common/src/heritage.js'
+import { EtapeTypeId, canBeBrouillon } from 'camino-common/src/static/etapesTypes.js'
+import { isNotNullNorUndefined } from 'camino-common/src/typescript-tools.js'
+import { idGenerate } from '../../database/models/_format/id-create.js'
+import { copyFileSync, mkdirSync } from 'fs'
+import { TempEtapeDocument } from 'camino-common/src/etape.js'
+import { tempDocumentNameValidator } from 'camino-common/src/document.js'
+import { HTTP_STATUS } from 'camino-common/src/http.js'
+import { Knex } from 'knex'
+import { testDocumentCreateTemp } from '../../../tests/_utils/administrations-permissions.js'
+import { RestEtapeModification } from 'camino-common/src/etape-form.js'
+import { EntrepriseId } from 'camino-common/src/entreprise.js'
+
+vi.mock('../../tools/dir-create', () => ({
+  __esModule: true,
+  default: vi.fn(),
+}))
+
+console.info = vi.fn()
+console.error = vi.fn()
+let dbPool: Pool
+let knexInstance: Knex
+beforeAll(async () => {
+  const { pool, knex } = await dbManager.populateDb()
+  dbPool = pool
+  knexInstance = knex
+})
+
+beforeEach(async () => {
+  await knexInstance.raw('delete from etapes_documents')
+  await Titres.query().delete()
+})
+
+afterAll(async () => {
+  await dbManager.closeKnex()
+})
+
+async function etapeCreate(typeId?: EtapeTypeId) {
+  const titre = await titreCreate(
+    {
+      nom: 'mon titre',
+      typeId: 'arm',
+      titreStatutId: 'ind',
+      propsTitreEtapesIds: {},
+    },
+    {}
+  )
+  const titreDemarche = await titreDemarcheCreate({
+    titreId: titre.id,
+    typeId: 'oct',
+  })
+
+  const myTypeId = isNotNullNorUndefined(typeId) ? typeId : 'mfr'
+  const titreEtape = await titreEtapeCreate(
+    {
+      typeId: myTypeId,
+      statutId: 'fai',
+      ordre: 1,
+      titreDemarcheId: titreDemarche.id,
+      date: toCaminoDate('2018-01-01'),
+      isBrouillon: canBeBrouillon(myTypeId),
+    },
+    userSuper,
+    titre.id
+  )
+
+  return { titreDemarcheId: titreDemarche.id, titreEtapeId: titreEtape.id }
+}
+
+describe('etapeModifier', () => {
+  test('ne peut pas modifier une étape (utilisateur anonyme)', async () => {
+    const result = await restPutCall(dbPool, '/rest/etapes', {}, undefined, { id: '', typeId: '', statutId: '', titreDemarcheId: '', date: '' } as unknown as RestEtapeModification)
+
+    expect(result.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_FORBIDDEN)
+  })
+
+  test('ne peut pas modifier une étape mal formatée (utilisateur super)', async () => {
+    const result = await restPutCall(dbPool, '/rest/etapes', {}, userSuper, {
+      id: '',
+      typeId: '',
+      statutId: '',
+      date: '',
+    } as unknown as RestEtapeModification)
+
+    expect(result.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST)
+  })
+
+  test('peut modifier une étape mfr en brouillon (utilisateur super)', async () => {
+    const { titreDemarcheId, titreEtapeId } = await etapeCreate()
+    const result = await restPutCall(dbPool, '/rest/etapes', {}, userSuper, {
+      id: titreEtapeId,
+      typeId: 'mfr',
+      statutId: 'fai',
+      titreDemarcheId,
+      date: caminoDateValidator.parse('2018-01-01'),
+      duree: null,
+      dateDebut: null,
+      dateFin: null,
+      substances: [],
+      geojson4326Perimetre: null,
+      geojsonOriginePerimetre: null,
+      geojson4326Points: null,
+      geojsonOriginePoints: null,
+      geojsonOrigineForages: null,
+      geojsonOrigineGeoSystemeId: null,
+      titulaireIds: [],
+      amodiataireIds: [],
+      notes: null,
+      etapeAvis: [],
+      entrepriseDocumentIds: [],
+      daeDocument: null,
+      aslDocument: null,
+      heritageProps: ETAPE_HERITAGE_PROPS.reduce(
+        (acc, prop) => {
+          acc[prop] = { actif: false }
+
+          return acc
+        },
+        {} as {
+          [key in EtapeHeritageProps]: { actif: boolean }
+        }
+      ),
+      heritageContenu: {
+        arm: {
+          mecanise: { actif: false },
+          franchissements: { actif: false },
+        },
+      },
+      contenu: {
+        arm: { mecanise: true, franchissements: 3 },
+      },
+      etapeDocuments: [],
+    })
+    expect(result.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
+  })
+
+  test("ne peut pas modifier une étape avec des entreprises qui n'existent pas", async () => {
+    const { titreDemarcheId, titreEtapeId } = await etapeCreate()
+    const result = await restPutCall(dbPool, '/rest/etapes', {}, userSuper, {
+      id: titreEtapeId,
+      typeId: 'mfr',
+      statutId: 'fai',
+      titulaireIds: ['inexistant' as EntrepriseId],
+      titreDemarcheId,
+      date: caminoDateValidator.parse('2018-01-01'),
+      duree: null,
+      dateDebut: null,
+      dateFin: null,
+      substances: [],
+      geojson4326Perimetre: null,
+      geojsonOriginePerimetre: null,
+      geojson4326Points: null,
+      geojsonOriginePoints: null,
+      geojsonOrigineForages: null,
+      geojsonOrigineGeoSystemeId: null,
+      amodiataireIds: [],
+      notes: null,
+      etapeAvis: [],
+      entrepriseDocumentIds: [],
+      daeDocument: null,
+      aslDocument: null,
+      heritageProps: ETAPE_HERITAGE_PROPS.reduce(
+        (acc, prop) => {
+          acc[prop] = { actif: false }
+
+          return acc
+        },
+        {} as {
+          [key in EtapeHeritageProps]: { actif: boolean }
+        }
+      ),
+      heritageContenu: {
+        arm: {
+          mecanise: { actif: false },
+          franchissements: { actif: false },
+        },
+      },
+      contenu: {
+        arm: { mecanise: true, franchissements: 3 },
+      },
+      etapeDocuments: [],
+    })
+
+    expect(result.body.errorMessage).toBe("certaines entreprises n'existent pas")
+  })
+
+  test("peut supprimer un document d'une demande en brouillon (utilisateur super)", async () => {
+    const { titreDemarcheId, titreEtapeId } = await etapeCreate()
+
+    const documentToInsert = testDocumentCreateTemp('aac')
+
+    const etape: RestEtapeModification = {
+      id: titreEtapeId,
+      typeId: 'mfr',
+      statutId: 'fai',
+      titreDemarcheId,
+      date: caminoDateValidator.parse('2018-01-01'),
+      duree: null,
+      dateDebut: null,
+      dateFin: null,
+      substances: [],
+      geojson4326Perimetre: null,
+      geojsonOriginePerimetre: null,
+      geojson4326Points: null,
+      geojsonOriginePoints: null,
+      geojsonOrigineForages: null,
+      geojsonOrigineGeoSystemeId: null,
+      amodiataireIds: [],
+      titulaireIds: [],
+      notes: null,
+      etapeAvis: [],
+      entrepriseDocumentIds: [],
+      daeDocument: null,
+      aslDocument: null,
+      heritageProps: ETAPE_HERITAGE_PROPS.reduce(
+        (acc, prop) => {
+          acc[prop] = { actif: false }
+
+          return acc
+        },
+        {} as {
+          [key in EtapeHeritageProps]: { actif: boolean }
+        }
+      ),
+      heritageContenu: {
+        arm: {
+          mecanise: { actif: false },
+          franchissements: { actif: false },
+        },
+      },
+      contenu: {
+        arm: { mecanise: true, franchissements: 3 },
+      },
+      etapeDocuments: [documentToInsert],
+    }
+
+    let res = await restPutCall(dbPool, '/rest/etapes', {}, userSuper, etape)
+
+    expect(res.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
+
+    const documents = await restCall(dbPool, '/rest/etapes/:etapeId/etapeDocuments', { etapeId: titreEtapeId }, userSuper)
+    expect(documents.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
+    expect(documents.body.etapeDocuments).toHaveLength(1)
+    expect(documents.body.etapeDocuments[0]).toMatchInlineSnapshot(
+      { id: expect.any(String) },
+      `
+      {
+        "description": "desc",
+        "entreprises_lecture": true,
+        "etape_document_type_id": "aac",
+        "id": Any<String>,
+        "public_lecture": true,
+      }
+    `
+    )
+    res = await restPutCall(dbPool, '/rest/etapes', {}, userSuper, { ...etape, etapeDocuments: [] })
+
+    expect(res.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
+  })
+
+  test("ne peut pas supprimer un document obligatoire d'une étape qui n'est pas en brouillon (utilisateur super)", async () => {
+    const { titreDemarcheId, titreEtapeId } = await etapeCreate('dae')
+    const dir = `${process.cwd()}/files/tmp/`
+
+    const fileName = `existing_temp_file_${idGenerate()}`
+    mkdirSync(dir, { recursive: true })
+    copyFileSync(`./src/tools/small.pdf`, `${dir}/${fileName}`)
+    const documentToInsert: TempEtapeDocument = {
+      etape_document_type_id: 'aac',
+      entreprises_lecture: true,
+      public_lecture: true,
+      description: 'desc',
+      temp_document_name: tempDocumentNameValidator.parse(fileName),
+    }
+
+    const etape: RestEtapeModification = {
+      id: titreEtapeId,
+      typeId: 'dae',
+      statutId: 'exe',
+      titreDemarcheId,
+      date: caminoDateValidator.parse('2018-01-01'),
+      duree: null,
+      dateDebut: null,
+      dateFin: null,
+      substances: [],
+      geojson4326Perimetre: null,
+      geojsonOriginePerimetre: null,
+      geojson4326Points: null,
+      geojsonOriginePoints: null,
+      geojsonOrigineForages: null,
+      geojsonOrigineGeoSystemeId: null,
+      amodiataireIds: [],
+      titulaireIds: [],
+      notes: null,
+      etapeAvis: [],
+      entrepriseDocumentIds: [],
+      daeDocument: null,
+      aslDocument: null,
+
+      heritageProps: ETAPE_HERITAGE_PROPS.reduce(
+        (acc, prop) => {
+          acc[prop] = { actif: false }
+
+          return acc
+        },
+        {} as {
+          [key in EtapeHeritageProps]: { actif: boolean }
+        }
+      ),
+      heritageContenu: {
+        mea: {
+          arrete: { actif: false },
+        },
+      },
+      contenu: {
+        mea: { arrete: 'arrete' },
+      },
+      etapeDocuments: [documentToInsert],
+    }
+
+    let res = await restPutCall(dbPool, '/rest/etapes', {}, userSuper, etape)
+
+    expect(res.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
+
+    res = await restPutCall(dbPool, '/rest/etapes', {}, userSuper, { ...etape, etapeDocuments: [] })
+
+    expect(res.body.errorMessage).toBe('Impossible de supprimer les documents')
+  })
+
+  test('peut modifier une étape mia avec un statut fai (utilisateur super)', async () => {
+    const { titreDemarcheId, titreEtapeId } = await etapeCreate('asc')
+
+    const res = await restPutCall(dbPool, '/rest/etapes', {}, userSuper, {
+      id: titreEtapeId,
+      typeId: 'asc',
+      statutId: 'fai',
+      titreDemarcheId,
+      date: caminoDateValidator.parse('2018-01-01'),
+      etapeDocuments: [],
+      duree: null,
+      dateDebut: null,
+      dateFin: null,
+      substances: [],
+      geojson4326Perimetre: null,
+      geojsonOriginePerimetre: null,
+      geojson4326Points: null,
+      geojsonOriginePoints: null,
+      geojsonOrigineForages: null,
+      geojsonOrigineGeoSystemeId: null,
+      amodiataireIds: [],
+      titulaireIds: [],
+      notes: null,
+      etapeAvis: [],
+      entrepriseDocumentIds: [],
+      daeDocument: null,
+      aslDocument: null,
+      heritageProps: ETAPE_HERITAGE_PROPS.reduce(
+        (acc, prop) => {
+          acc[prop] = { actif: false }
+
+          return acc
+        },
+        {} as {
+          [key in EtapeHeritageProps]: { actif: boolean }
+        }
+      ),
+      heritageContenu: {},
+      contenu: {},
+    })
+
+    expect(res.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
+  })
+
+  test('peut modifier une étape MEN sur un titre ARM en tant que PTMG (utilisateur admin)', async () => {
+    const { titreDemarcheId, titreEtapeId } = await etapeCreate('men')
+    const res = await restPutCall(
+      dbPool,
+      '/rest/etapes',
+      {},
+      {
+        role: 'admin',
+        administrationId: ADMINISTRATION_IDS['PÔLE TECHNIQUE MINIER DE GUYANE'],
+      },
+      {
+        id: titreEtapeId,
+        typeId: 'men',
+        statutId: 'fai',
+        titreDemarcheId,
+        date: caminoDateValidator.parse('2016-01-01'),
+        etapeDocuments: [],
+        duree: null,
+        dateDebut: null,
+        dateFin: null,
+        substances: [],
+        geojson4326Perimetre: null,
+        geojsonOriginePerimetre: null,
+        geojson4326Points: null,
+        geojsonOriginePoints: null,
+        geojsonOrigineForages: null,
+        geojsonOrigineGeoSystemeId: null,
+        amodiataireIds: [],
+        titulaireIds: [],
+        notes: null,
+        etapeAvis: [],
+        entrepriseDocumentIds: [],
+        daeDocument: null,
+        aslDocument: null,
+        heritageProps: ETAPE_HERITAGE_PROPS.reduce(
+          (acc, prop) => {
+            acc[prop] = { actif: false }
+
+            return acc
+          },
+          {} as {
+            [key in EtapeHeritageProps]: { actif: boolean }
+          }
+        ),
+        heritageContenu: {},
+        contenu: {},
+      }
+    )
+
+    expect(res.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
+  })
+
+  test('ne peut pas modifier une étape EDE sur un titre ARM en tant que PTMG (utilisateur admin)', async () => {
+    const { titreDemarcheId, titreEtapeId } = await etapeCreate('ede')
+    const res = await restPutCall(
+      dbPool,
+      '/rest/etapes',
+      {},
+      {
+        role: 'admin',
+        administrationId: ADMINISTRATION_IDS['PÔLE TECHNIQUE MINIER DE GUYANE'],
+      },
+      {
+        id: titreEtapeId,
+        typeId: 'ede',
+        statutId: 'fai',
+        titreDemarcheId,
+        date: caminoDateValidator.parse('2018-01-01'),
+        duree: null,
+        dateDebut: null,
+        dateFin: null,
+        substances: [],
+        geojson4326Perimetre: null,
+        geojsonOriginePerimetre: null,
+        geojson4326Points: null,
+        geojsonOriginePoints: null,
+        geojsonOrigineForages: null,
+        geojsonOrigineGeoSystemeId: null,
+        amodiataireIds: [],
+        titulaireIds: [],
+        notes: null,
+        etapeAvis: [],
+        entrepriseDocumentIds: [],
+        daeDocument: null,
+        aslDocument: null,
+        etapeDocuments: [],
+        heritageProps: ETAPE_HERITAGE_PROPS.reduce(
+          (acc, prop) => {
+            acc[prop] = { actif: false }
+
+            return acc
+          },
+          {} as {
+            [key in EtapeHeritageProps]: { actif: boolean }
+          }
+        ),
+        heritageContenu: {
+          deal: { motifs: { actif: false }, agent: { actif: false } },
+        },
+        contenu: { deal: { motifs: 'motif', agent: 'agent' } },
+      }
+    )
+
+    expect(res.body.errorMessage).toBe("l'étape n'existe pas")
+  })
+})
diff --git a/packages/api/src/api/rest/etapes.queries.ts b/packages/api/src/api/rest/etapes.queries.ts
index 9804fb22b..18d72e778 100644
--- a/packages/api/src/api/rest/etapes.queries.ts
+++ b/packages/api/src/api/rest/etapes.queries.ts
@@ -1,5 +1,5 @@
 /* eslint-disable no-restricted-syntax */
-import { EtapeDocumentId, EtapeId, EtapeIdOrSlug, etapeIdValidator, etapeSlugValidator } from 'camino-common/src/etape.js'
+import { EtapeDocumentId, EtapeId, EtapeIdOrSlug, etapeBrouillonValidator, etapeIdValidator, etapeSlugValidator } from 'camino-common/src/etape.js'
 import { EtapeTypeId, etapeTypeIdValidator } from 'camino-common/src/static/etapesTypes.js'
 import { Pool } from 'pg'
 import { z } from 'zod'
@@ -73,11 +73,7 @@ export const getLargeobjectIdByEtapeDocumentId = async (pool: Pool, user: User,
 
   if (result.length === 1) {
     const etapeDocument = result[0]
-    const etapeData = await getEtapeDataForEdition(pool, etapeDocument.etape_id)
-
-    const titreTypeId = memoize(() => Promise.resolve(etapeData.titre_type_id))
-    const administrationsLocales = memoize(() => administrationsLocalesByEtapeId(etapeDocument.etape_id, pool))
-    const entreprisesTitulairesOuAmodiataires = memoize(() => entreprisesTitulairesOuAmoditairesByEtapeId(etapeDocument.etape_id, pool))
+    const { etapeData, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires } = await getEtapeDataForEdition(pool, etapeDocument.etape_id)
 
     if (
       await canReadDocument(etapeDocument, user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires, etapeData.etape_type_id, {
@@ -107,7 +103,13 @@ LIMIT 1
 `
 
 export const getEtapeDataForEdition = async (pool: Pool, etapeId: EtapeId) => {
-  return (await dbQueryAndValidate(getEtapeDataForEditionDb, { etapeId }, pool, getEtapeDataForEditionValidator))[0]
+  const etapeData = (await dbQueryAndValidate(getEtapeDataForEditionDb, { etapeId }, pool, getEtapeDataForEditionValidator))[0]
+
+  const titreTypeId = memoize(() => Promise.resolve(etapeData.titre_type_id))
+  const administrationsLocales = memoize(() => administrationsLocalesByEtapeId(etapeId, pool))
+  const entreprisesTitulairesOuAmodiataires = memoize(() => entreprisesTitulairesOuAmoditairesByEtapeId(etapeId, pool))
+
+  return { etapeData, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires }
 }
 
 const getEtapeDataForEditionValidator = z.object({
@@ -120,7 +122,7 @@ const getEtapeDataForEditionValidator = z.object({
   demarche_entreprises_lecture: z.boolean(),
   titre_public_lecture: z.boolean(),
   etape_slug: etapeSlugValidator,
-  etape_is_brouillon: z.boolean(),
+  etape_is_brouillon: etapeBrouillonValidator,
 })
 
 export type GetEtapeDataForEdition = z.infer<typeof getEtapeDataForEditionValidator>
@@ -145,7 +147,7 @@ where
     te.id = $ etapeId !
 `
 
-export const administrationsLocalesByEtapeId = async (etapeId: EtapeId, pool: Pool): Promise<AdministrationId[]> => {
+const administrationsLocalesByEtapeId = async (etapeId: EtapeId, pool: Pool): Promise<AdministrationId[]> => {
   const admins = await dbQueryAndValidate(getAdministrationsLocalesByEtapeId, { etapeId }, pool, administrationsLocalesValidator)
   if (admins.length > 1) {
     throw new Error(`Trop d'administrations locales trouvées pour l'etape ${etapeId}`)
@@ -170,7 +172,7 @@ where
     te.id = $ etapeId !
 `
 
-export const entreprisesTitulairesOuAmoditairesByEtapeId = async (etapeId: EtapeId, pool: Pool): Promise<EntrepriseId[]> => {
+const entreprisesTitulairesOuAmoditairesByEtapeId = async (etapeId: EtapeId, pool: Pool): Promise<EntrepriseId[]> => {
   const entreprises = await dbQueryAndValidate(getTitulairesAmodiatairesTitreEtape, { etapeId }, pool, entrepriseIdObjectValidator)
 
   return entreprises.map(({ id }) => id)
diff --git a/packages/api/src/api/rest/etapes.test.integration.ts b/packages/api/src/api/rest/etapes.test.integration.ts
index 2791fe0fb..c35ca8561 100644
--- a/packages/api/src/api/rest/etapes.test.integration.ts
+++ b/packages/api/src/api/rest/etapes.test.integration.ts
@@ -3,16 +3,21 @@ import { titreCreate } from '../../database/queries/titres.js'
 import { titreDemarcheCreate } from '../../database/queries/titres-demarches.js'
 import { userSuper } from '../../database/user-super.js'
 import { restCall, restDeleteCall } from '../../../tests/_utils/index.js'
-import { getCurrent, toCaminoDate } from 'camino-common/src/date.js'
+import { caminoDateValidator, getCurrent, toCaminoDate } from 'camino-common/src/date.js'
 import { afterAll, beforeAll, test, expect, describe, vi } from 'vitest'
 import type { Pool } from 'pg'
 import { HTTP_STATUS } from 'camino-common/src/http.js'
 import { Role, isAdministrationRole } from 'camino-common/src/roles.js'
-import { titreEtapeCreate } from '../../database/queries/titres-etapes.js'
+import { titreEtapeCreate, titreEtapeUpdate } from '../../database/queries/titres-etapes.js'
 import { entrepriseIdValidator } from 'camino-common/src/entreprise.js'
 import { TestUser, testBlankUser } from 'camino-common/src/tests-utils.js'
 import { entrepriseUpsert } from '../../database/queries/entreprises.js'
 import { Knex } from 'knex'
+import { ETAPE_IS_BROUILLON, etapeAvisIdValidator } from 'camino-common/src/etape.js'
+import { insertEtapeAvisWithLargeObjectId } from '../../database/queries/titres-etapes.queries.js'
+import { largeObjectIdValidator } from '../../database/largeobjects.js'
+import { AvisVisibilityIds } from 'camino-common/src/static/avisTypes.js'
+import { tempDocumentNameValidator } from 'camino-common/src/document.js'
 
 console.info = vi.fn()
 console.error = vi.fn()
@@ -48,6 +53,10 @@ test('getEtapesTypesEtapesStatusWithMainStep', async () => {
   const tested = await restCall(dbPool, '/rest/etapesTypes/:demarcheId/:date', { demarcheId: titreDemarche.id, date: getCurrent() }, userSuper)
 
   expect(tested.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
+  // TODO 2024-06-19 changer ce format ?
+  // Partir plutôt sur un object avec comme clé le etapeTypeId, une liste de etapeStatut associée et la clé mainStep (soit sur le statut, soit directement au top niveau)
+  // soit { mfr: {statuts: ['fai'], mainStep: true}}
+  // soit { mfr: {statuts: [{id: 'fai', mainStep: true}]}}
   expect(tested.body).toMatchInlineSnapshot(`
     [
       {
@@ -123,7 +132,7 @@ describe('etapeSupprimer', () => {
       {
         typeId: 'mfr',
         statutId: 'fai',
-        isBrouillon: true,
+        isBrouillon: ETAPE_IS_BROUILLON,
         ordre: 1,
         titreDemarcheId: titreDemarche.id,
         date: toCaminoDate('2018-01-01'),
@@ -131,7 +140,12 @@ describe('etapeSupprimer', () => {
       userSuper,
       titre.id
     )
-    const tested = await restDeleteCall(dbPool, '/rest/etapes/:etapeId', { etapeId: titreEtape.id }, role && isAdministrationRole(role) ? { role, administrationId: 'dea-guyane-01' } : undefined)
+    const tested = await restDeleteCall(
+      dbPool,
+      '/rest/etapes/:etapeIdOrSlug',
+      { etapeIdOrSlug: titreEtape.id },
+      role && isAdministrationRole(role) ? { role, administrationId: 'dea-guyane-01' } : undefined
+    )
 
     expect(tested.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_FORBIDDEN)
   })
@@ -155,7 +169,7 @@ describe('etapeSupprimer', () => {
       {
         typeId: 'mfr',
         statutId: 'fai',
-        isBrouillon: true,
+        isBrouillon: ETAPE_IS_BROUILLON,
         ordre: 1,
         titreDemarcheId: titreDemarche.id,
         date: toCaminoDate('2018-01-01'),
@@ -163,7 +177,7 @@ describe('etapeSupprimer', () => {
       userSuper,
       titre.id
     )
-    const tested = await restDeleteCall(dbPool, '/rest/etapes/:etapeId', { etapeId: titreEtape.id }, userSuper)
+    const tested = await restDeleteCall(dbPool, '/rest/etapes/:etapeIdOrSlug', { etapeIdOrSlug: titreEtape.id }, userSuper)
 
     expect(tested.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_NO_CONTENT)
   })
@@ -194,7 +208,7 @@ describe('etapeSupprimer', () => {
       {
         typeId: 'mfr',
         statutId: 'fai',
-        isBrouillon: true,
+        isBrouillon: ETAPE_IS_BROUILLON,
         ordre: 1,
         titreDemarcheId: titreDemarche.id,
         date: toCaminoDate('2018-01-01'),
@@ -215,8 +229,79 @@ describe('etapeSupprimer', () => {
     const getEtape = await restCall(dbPool, '/rest/titres/:titreId', { titreId: titre.id }, user)
     expect(getEtape.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
 
-    const tested = await restDeleteCall(dbPool, '/rest/etapes/:etapeId', { etapeId: titreEtape.id }, user)
+    const tested = await restDeleteCall(dbPool, '/rest/etapes/:etapeIdOrSlug', { etapeIdOrSlug: titreEtape.id }, user)
 
     expect(tested.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_FORBIDDEN)
   })
 })
+
+describe('getEtapeAvis', () => {
+  test('test la récupération des avis', async () => {
+    const titre = await titreCreate(
+      {
+        nom: 'nomTitre',
+        typeId: 'arm',
+        titreStatutId: 'val',
+        propsTitreEtapesIds: {},
+      },
+      {}
+    )
+
+    const titreDemarche = await titreDemarcheCreate({
+      titreId: titre.id,
+      typeId: 'oct',
+    })
+
+    const titreEtape = await titreEtapeCreate(
+      {
+        typeId: 'mfr',
+        statutId: 'fai',
+        isBrouillon: ETAPE_IS_BROUILLON,
+        ordre: 1,
+        titreDemarcheId: titreDemarche.id,
+        date: toCaminoDate('2018-01-01'),
+      },
+      userSuper,
+      titre.id
+    )
+
+    let getAvis = await restCall(dbPool, '/rest/etapes/:etapeId/etapeAvis', { etapeId: titreEtape.id }, userSuper)
+    expect(getAvis.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
+    expect(getAvis.body).toStrictEqual([])
+
+    await titreEtapeUpdate(titreEtape.id, { typeId: 'asc' }, userSuper, titre.id)
+    getAvis = await restCall(dbPool, '/rest/etapes/:etapeId/etapeAvis', { etapeId: titreEtape.id }, userSuper)
+    expect(getAvis.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
+    expect(getAvis.body).toStrictEqual([])
+
+    await insertEtapeAvisWithLargeObjectId(
+      dbPool,
+      titreEtape.id,
+      {
+        avis_type_id: 'autreAvis',
+        date: caminoDateValidator.parse('2023-02-01'),
+        avis_statut_id: 'Favorable',
+        description: 'Super',
+        avis_visibility_id: AvisVisibilityIds.Administrations,
+        temp_document_name: tempDocumentNameValidator.parse('fakeTempDocumentName'),
+      },
+      etapeAvisIdValidator.parse('avisId'),
+      largeObjectIdValidator.parse(42)
+    )
+    getAvis = await restCall(dbPool, '/rest/etapes/:etapeId/etapeAvis', { etapeId: titreEtape.id }, userSuper)
+    expect(getAvis.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
+    expect(getAvis.body).toMatchInlineSnapshot(`
+      [
+        {
+          "avis_statut_id": "Favorable",
+          "avis_type_id": "autreAvis",
+          "avis_visibility_id": "Administrations",
+          "date": "2023-02-01",
+          "description": "Super",
+          "has_file": true,
+          "id": "avisId",
+        },
+      ]
+    `)
+  })
+})
diff --git a/packages/api/src/api/rest/etapes.test.ts b/packages/api/src/api/rest/etapes.test.ts
index 7c27d9c38..1b4313ead 100644
--- a/packages/api/src/api/rest/etapes.test.ts
+++ b/packages/api/src/api/rest/etapes.test.ts
@@ -1,18 +1,51 @@
-import { etapesTypesPossibleACetteDateOuALaPlaceDeLEtape } from './etapes.js'
+import { arePointsOnPerimeter, etapesTypesPossibleACetteDateOuALaPlaceDeLEtape } from './etapes.js'
 import { ArmOctMachine } from '../../business/rules-demarches/arm/oct.machine.js'
 import { toCaminoDate } from 'camino-common/src/date.js'
 import { describe, expect, test, vi } from 'vitest'
 import { onlyUnique } from 'camino-common/src/typescript-tools.js'
 import { newEtapeId } from '../../database/models/_format/id-create.js'
 import { TitreEtapeForMachine } from '../../business/rules-demarches/machine-common.js'
+import { ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
 
+import { FeatureMultiPolygon } from 'camino-common/src/perimetre'
+
+const bigGeoJson: FeatureMultiPolygon = {
+  type: 'Feature',
+  properties: {},
+  geometry: {
+    type: 'MultiPolygon',
+    // prettier-ignore
+    "coordinates": [      [        [          [            -4.370364497124209,            48.53380508608616          ],          [            -4.373271574712479,            48.47151134163559          ],          [            -4.03753485335386,            48.579164636474836          ],          [            -3.89919702975027,            48.603980178934115          ],          [            -3.860482328708233,            48.62511389817695          ],          [            -3.858436311611334,            48.629031691751045          ],          [            -3.862157259991486,            48.633014015139416          ],          [            -3.870281882041237,            48.63550010399696          ],          [            -3.879786359001045,            48.639113643702565          ],          [            -3.895430188480503,            48.64455770816115          ],          [            -3.89902273351368,            48.64822789311303          ],          [            -3.902536979616769,            48.654435032933826          ],          [            -3.906528075174153,            48.66061643462235          ],          [            -3.904489574558275,            48.6643307169305          ],          [            -3.89647573803132,            48.66601900245078          ],          [            -3.890673665115296,            48.667020244464325          ],          [            -3.890721315690864,            48.67062455977177          ],          [            -3.892950905315848,            48.67088770685571          ],          [            -3.898005277721187,            48.6723935639094          ],          [            -3.8992413951649,            48.67074624589731          ],          [            -3.903300809713803,            48.67034264689684          ],          [            -3.907548440632195,            48.66910635173531          ],          [            -3.91185396569359,            48.669954398127075          ],          [            -3.914635548862354,            48.67322568941628          ],          [            -3.920575104032537,            48.67458696237509          ],          [            -3.924157593611878,            48.669749821082725          ],          [            -3.927138109422188,            48.66538094626539          ],          [            -3.927802453245391,            48.66178827244388          ],          [            -3.92880004801291,            48.660065331624466          ],          [            -3.930674658925236,            48.657424523021          ],          [            -3.934385020441046,            48.65730036039394          ],          [            -3.940574301992641,            48.65682750256307          ],          [            -3.949892212356874,            48.653210569309856          ],          [            -3.9518951695476,            48.64983646195122          ],          [            -3.95135848409069,            48.646306571150944          ],          [            -3.952791103114349,            48.64456097348628          ],          [            -3.954311041643234,            48.64535110107629          ],          [            -3.957178207067545,            48.65093506946735          ],          [            -3.95632686509049,            48.654756209794456          ],          [            -3.954939197043658,            48.66049485799891          ],          [            -3.958264581105623,            48.66351217516115          ],          [            -3.954301077151103,            48.665175330569724          ],          [            -3.958113788215813,            48.66678821578858          ],          [            -3.958288500972019,            48.67004622329816          ],          [            -3.953583216471425,            48.67102223996598          ],          [            -3.952154912225681,            48.67280542236          ],          [            -3.954601922703807,            48.67354649576719          ],          [            -3.957150323952388,            48.6728667311387          ],          [            -3.962232217223142,            48.674085603023535          ],          [            -3.96509885038279,            48.67647290565392          ],          [            -3.968196892552599,            48.67354977814375          ],          [            -3.970552500285286,            48.67336152037275          ],          [            -3.971907150463719,            48.67429537178488          ],          [            -3.971687730880199,            48.67565139942766          ],          [            -3.968925351937541,            48.67998621214178          ],          [            -3.97276835094199,            48.68681279071675          ],          [            -3.969905040239144,            48.687617856017994          ],          [            -3.967785856011854,            48.69274164929216          ],          [            -3.97050395358365,            48.693904041872074          ],          [            -3.974129066864182,            48.69665141578885          ],          [            -3.976827175680581,            48.699084231748806          ],          [            -3.973964059500176,            48.70207052891004          ],          [            -3.97557715354335,            48.70449012698265          ],          [            -3.972337757698344,            48.70582333762662          ],          [            -3.974038535718974,            48.710344199247295          ],          [            -3.972061362590358,            48.71168433267898          ],          [            -3.969407494937729,            48.71919463600953          ],          [            -3.966114995158957,            48.719188628020184          ],          [            -3.964815895310649,            48.72248973384656          ],          [            -3.968123622922862,            48.72216808659624          ],          [            -3.970117554054281,            48.7239825094888          ],          [            -3.971030085004171,            48.72531725688056          ],          [            -3.974105493634571,            48.72442714535237          ],          [            -3.977130032296356,            48.72223266964199          ],          [            -3.98038470744471,            48.72282149601802          ],          [            -3.98267568678471,            48.72451484026706          ],          [            -3.983159793997456,            48.72623219482621          ],          [            -3.985655519886893,            48.726898196761965          ],          [            -3.988412331317411,            48.727004809776105          ],          [            -3.990251104366354,            48.72588975599552          ],          [            -3.992106999472123,            48.723541171653366          ],          [            -3.992308257471176,            48.72204072794657          ],          [            -3.990818477440011,            48.71838055340067          ],          [            -3.993241558794496,            48.715311146944074          ],          [            -3.99726181945054,            48.71273584775902          ],          [            -4.000886986292233,            48.71141716999743          ],          [            -4.005573266114372,            48.715195490443925          ],          [            -4.004640753163968,            48.716989015759715          ],          [            -4.007861713401779,            48.72044675798358          ],          [            -4.009590286562232,            48.72068101995395          ],          [            -4.012907971574204,            48.71865165832863          ],          [            -4.010881803078078,            48.716872551149415          ],          [            -4.013298574720932,            48.713765123429766          ],          [            -4.018283788022766,            48.71146515516518          ],          [            -4.02502266800395,            48.710486602386844          ],          [            -4.029102910364339,            48.7109751516783          ],          [            -4.032895375568785,            48.712496949149184          ],          [            -4.034013864663466,            48.71364906002572          ],          [            -4.035203599079426,            48.71386049099469          ],          [            -4.036426674181452,            48.711761570746404          ],          [            -4.035857818689737,            48.70935978588029          ],          [            -4.037836186006247,            48.70536884991981          ],          [            -4.040876440962449,            48.70331706201061          ],          [            -4.042661395770205,            48.70267658451317          ],          [            -4.044522857875245,            48.70264835316387          ],          [            -4.048746772595955,            48.70536952092104          ],          [            -4.051782617787177,            48.70458102418029          ],          [            -4.053387641319855,            48.70237110662314          ],          [            -4.054960885021424,            48.69887510664347          ],          [            -4.057098904957046,            48.688336149296134          ],          [            -4.047492224129947,            48.6881905546806          ],          [            -4.04264615919883,            48.688356681641565          ],          [            -4.05570877851515,            48.685187990084636          ],          [            -4.061384711067841,            48.687678086132514          ],          [            -4.063856568443375,            48.68626486757381          ],          [            -4.069006699782528,            48.687977416990556          ],          [            -4.066114156101222,            48.68600063748565          ],          [            -4.065917761777147,            48.68383188367652          ],          [            -4.06536435070835,            48.68281963355705          ],          [            -4.062811851052143,            48.68243638561189          ],          [            -4.063604286352126,            48.680735563101265          ],          [            -4.061249339782617,            48.68019915458731          ],          [            -4.060491984152113,            48.67893668983929          ],          [            -4.056630622211962,            48.67523642323898          ],          [            -4.055350396131191,            48.67179995101334          ],          [            -4.057224936686009,            48.670572879663034          ],          [            -4.057969445321888,            48.675068847630506          ],          [            -4.059622862128396,            48.675122344607715          ],          [            -4.06024682153259,            48.67613145254186          ],          [            -4.063213863275964,            48.67815002912692          ],          [            -4.064507934140134,            48.677605925445725          ],          [            -4.067195178609656,            48.67891661518815          ],          [            -4.068000601946539,            48.68272446881325          ],          [            -4.07116708376152,            48.68462241191764          ],          [            -4.080222240659125,            48.689712089777736          ],          [            -4.082890717412141,            48.693212237422216          ],          [            -4.0837341887691,            48.69168549285934          ],          [            -4.08645810312384,            48.69005696722575          ],          [            -4.08922980276701,            48.69161527586137          ],          [            -4.091651149022687,            48.69171173600047          ],          [            -4.095188717132302,            48.686965610139666          ],          [            -4.097383839952319,            48.69356464812578          ],          [            -4.102536986221444,            48.69351221259058          ],          [            -4.106197887484285,            48.692515838515405          ],          [            -4.109568285925066,            48.69472448012849          ],          [            -4.115803404112282,            48.69506791354793          ],          [            -4.118098969264236,            48.692778728280935          ],          [            -4.12511664716867,            48.693877169595176          ],          [            -4.127837461875522,            48.69361476668908          ],          [            -4.131236501370729,            48.6960475956426          ],          [            -4.136181126707938,            48.69293107079426          ],          [            -4.142132619722753,            48.69237814384752          ],          [            -4.150020162763907,            48.69217377284019          ],          [            -4.152170300893284,            48.691487051119246          ],          [            -4.162483098525137,            48.68833023827453          ],          [            -4.174170898732186,            48.657628672506775          ],          [            -4.409843663429304,            48.633874515395604          ],          [            -4.370364497124209,            48.53380508608616          ]
+        ]
+      ]
+    ],
+  },
+}
+
+test('arePointsOnPerimeter', () => {
+  expect(arePointsOnPerimeter(bigGeoJson, { type: 'FeatureCollection', features: [{ type: 'Feature', properties: {}, geometry: { type: 'Point', coordinates: [1, 2] } }] })).toBe(false)
+  expect(
+    arePointsOnPerimeter(bigGeoJson, { type: 'FeatureCollection', features: [{ type: 'Feature', properties: {}, geometry: { type: 'Point', coordinates: [-4.174170898732186, 48.657628672506775] } }] })
+  ).toBe(true)
+})
+
+test('arePointsOnPerimeter every point is on the perimeter', () => {
+  expect(
+    arePointsOnPerimeter(bigGeoJson, {
+      type: 'FeatureCollection',
+      features: bigGeoJson.geometry.coordinates.flatMap(coordinates =>
+        coordinates.flatMap(sub => sub.flatMap(coordinate => ({ type: 'Feature', properties: {}, geometry: { type: 'Point', coordinates: [coordinate[0], coordinate[1]] } })))
+      ),
+    })
+  ).toBe(true)
+})
 describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
   const etapes: TitreEtapeForMachine[] = [
     {
       id: newEtapeId('etapeId16'),
       typeId: 'sco',
       statutId: 'fai',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 16,
       date: toCaminoDate('2020-08-17'),
       contenu: { arm: { mecanise: true } },
@@ -23,7 +56,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
       id: newEtapeId('etapeId1'),
       typeId: 'mfr',
       statutId: 'fai',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 1,
       date: toCaminoDate('2019-09-19'),
       contenu: { arm: { mecanise: true, franchissements: 19 } },
@@ -34,7 +67,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
       id: newEtapeId('etapeId5'),
       typeId: 'mcp',
       statutId: 'com',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 5,
       date: toCaminoDate('2019-11-27'),
       contenu: null,
@@ -43,21 +76,10 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
     },
     {
       id: newEtapeId('etapeId10'),
-      typeId: 'aof',
-      statutId: 'fav',
-      isBrouillon: false,
-      ordre: 10,
-      date: toCaminoDate('2019-12-04'),
-      contenu: null,
-      communes: [],
-      surface: null,
-    },
-    {
-      id: newEtapeId('etapeId9'),
-      typeId: 'eof',
+      typeId: 'asc',
       statutId: 'fai',
-      isBrouillon: false,
-      ordre: 9,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
+      ordre: 10,
       date: toCaminoDate('2019-12-04'),
       contenu: null,
       communes: [],
@@ -67,7 +89,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
       id: newEtapeId('etapeId14'),
       typeId: 'pfc',
       statutId: 'fai',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 14,
       date: toCaminoDate('2020-05-22'),
       contenu: null,
@@ -78,7 +100,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
       id: newEtapeId('etapeId8'),
       typeId: 'mcr',
       statutId: 'fav',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 8,
       date: toCaminoDate('2019-12-04'),
       contenu: null,
@@ -89,7 +111,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
       id: newEtapeId('etapeId4'),
       typeId: 'pfd',
       statutId: 'fai',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 4,
       date: toCaminoDate('2019-11-20'),
       contenu: null,
@@ -100,7 +122,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
       id: newEtapeId('etapeId15'),
       typeId: 'vfc',
       statutId: 'fai',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 15,
       date: toCaminoDate('2020-05-22'),
       contenu: null,
@@ -111,7 +133,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
       id: newEtapeId('etapeId13'),
       typeId: 'mnb',
       statutId: 'fai',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 13,
       date: toCaminoDate('2020-05-18'),
       contenu: null,
@@ -122,7 +144,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
       id: newEtapeId('etapeId12'),
       typeId: 'aca',
       statutId: 'fav',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 12,
       date: toCaminoDate('2020-05-13'),
       contenu: null,
@@ -133,7 +155,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
       id: newEtapeId('etapeId6'),
       typeId: 'rde',
       statutId: 'fav',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 6,
       date: toCaminoDate('2019-12-04'),
       communes: [],
@@ -144,7 +166,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
       id: newEtapeId('etapeId2'),
       typeId: 'mdp',
       statutId: 'fai',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 2,
       date: toCaminoDate('2019-09-20'),
       contenu: null,
@@ -155,7 +177,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
       id: newEtapeId('etapeId7'),
       typeId: 'vfd',
       statutId: 'fai',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 7,
       date: toCaminoDate('2019-12-04'),
       contenu: null,
@@ -166,7 +188,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
       id: newEtapeId('etapeId11'),
       typeId: 'sca',
       statutId: 'fai',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 11,
       date: toCaminoDate('2020-05-04'),
       contenu: null,
@@ -177,7 +199,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
       id: newEtapeId('etapeId3'),
       typeId: 'dae',
       statutId: 'exe',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 3,
       date: toCaminoDate('2019-10-11'),
       contenu: null,
@@ -188,7 +210,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
       id: newEtapeId('etapeId17'),
       typeId: 'aco',
       statutId: 'fai',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 17,
       date: toCaminoDate('2022-05-05'),
       contenu: null,
@@ -227,7 +249,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
     const tested = etapesTypesPossibleACetteDateOuALaPlaceDeLEtape(machine, etapes, null, toCaminoDate('2019-12-04'))
       .map(({ etapeTypeId }) => etapeTypeId)
       .filter(onlyUnique)
-    expect(tested).toStrictEqual(['mod'])
+    expect(tested).toStrictEqual(['mod', 'ede', 'edm'])
   })
 
   test('peut faire une dae, une rde et pfd AVANT la mfr', () => {
@@ -237,7 +259,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         ordre: 1,
         typeId: 'mfr',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2022-05-16'),
         contenu: { arm: { mecanise: true, franchissements: 2 } },
         communes: [],
@@ -248,7 +270,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         ordre: 2,
         typeId: 'mdp',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2022-05-17'),
         contenu: null,
         communes: [],
@@ -269,7 +291,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         ordre: 1,
         typeId: 'mfr',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2022-05-16'),
         contenu: { arm: { mecanise: false } },
         communes: [],
@@ -280,7 +302,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         ordre: 2,
         typeId: 'mdp',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2022-05-17'),
         contenu: null,
         communes: [],
@@ -302,7 +324,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         date: toCaminoDate('2021-11-02'),
         typeId: 'mfr',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         contenu: {
           arm: {
             mecanise: true,
@@ -318,7 +340,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         date: toCaminoDate('2021-11-17'),
         typeId: 'rcm',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         contenu: {
           arm: {
             mecanise: true,
@@ -334,7 +356,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         date: toCaminoDate('2021-11-05'),
         typeId: 'mcp',
         statutId: 'inc',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         ordre: 5,
         contenu: null,
         communes: [],
@@ -345,29 +367,18 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         date: toCaminoDate('2021-11-17'),
         typeId: 'mcp',
         statutId: 'com',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         ordre: 8,
         contenu: null,
         communes: [],
         surface: null,
       },
-      {
-        id: newEtapeId('ideof'),
-        date: toCaminoDate('2021-11-22'),
-        typeId: 'eof',
-        statutId: 'fai',
-        isBrouillon: false,
-        ordre: 11,
-        contenu: null,
-        communes: [],
-        surface: null,
-      },
       {
         id: newEtapeId('iddae'),
         date: toCaminoDate('2021-10-15'),
         typeId: 'dae',
         statutId: 'exe',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
 
         ordre: 1,
         contenu: null,
@@ -379,7 +390,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         date: toCaminoDate('2021-11-22'),
         typeId: 'mcr',
         statutId: 'fav',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         contenu: null,
         ordre: 10,
         communes: [],
@@ -390,7 +401,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         date: toCaminoDate('2021-12-09'),
         typeId: 'mcb',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
 
         ordre: 13,
         contenu: null,
@@ -402,7 +413,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         date: toCaminoDate('2021-11-30'),
         typeId: 'edm',
         statutId: 'fav',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         ordre: 12,
         contenu: null,
         communes: [],
@@ -413,7 +424,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         date: toCaminoDate('2021-11-19'),
         typeId: 'vfd',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         ordre: 9,
         contenu: null,
         communes: [],
@@ -424,7 +435,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         date: toCaminoDate('2021-10-26'),
         typeId: 'pfd',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         ordre: 2,
         contenu: null,
         communes: [],
@@ -435,7 +446,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         date: toCaminoDate('2021-11-02'),
         typeId: 'mdp',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         ordre: 4,
         contenu: null,
         communes: [],
@@ -446,7 +457,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         date: toCaminoDate('2021-11-05'),
         typeId: 'mcm',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         ordre: 6,
         contenu: null,
         communes: [],
@@ -457,7 +468,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
     const tested = etapesTypesPossibleACetteDateOuALaPlaceDeLEtape(machine, etapes, null, toCaminoDate('2022-07-01'))
       .map(({ etapeTypeId }) => etapeTypeId)
       .filter(onlyUnique)
-    expect(tested).toStrictEqual(['mod', 'des', 'css', 'aof', 'ede', 'mia', 'rcb', 'rde', 'mcb'])
+    expect(tested).toStrictEqual(['mod', 'des', 'css', 'ede', 'asc', 'rcb', 'rde', 'mcb'])
     vi.resetAllMocks()
   })
   test('peut faire une completude (mcp) le même jour que le dépôt (mdp) de la demande', () => {
@@ -466,7 +477,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         id: newEtapeId('id3'),
         typeId: 'mfr',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2022-06-23'),
         contenu: {
           arm: {
@@ -482,7 +493,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
         id: newEtapeId('id1'),
         typeId: 'dae',
         statutId: 'exe',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2021-06-22'),
         ordre: 1,
         contenu: null,
@@ -494,7 +505,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
 
         typeId: 'mdp',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2022-07-01'),
         ordre: 4,
         contenu: null,
@@ -506,7 +517,7 @@ describe('etapesTypesPossibleACetteDateOuALaPlaceDeLEtape', function () {
 
         typeId: 'pfd',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2021-07-05'),
         ordre: 2,
         contenu: null,
diff --git a/packages/api/src/api/rest/etapes.ts b/packages/api/src/api/rest/etapes.ts
index cb729c253..2327261c9 100644
--- a/packages/api/src/api/rest/etapes.ts
+++ b/packages/api/src/api/rest/etapes.ts
@@ -1,40 +1,82 @@
 import { z } from 'zod'
 import { CaminoRequest, CustomResponse } from './express-type.js'
-import { EtapeTypeEtapeStatutWithMainStep, etapeIdValidator, EtapeId, GetEtapeDocumentsByEtapeId, needAslAndDae, documentTypeIdComplementaireObligatoireDAE } from 'camino-common/src/etape.js'
+import {
+  EtapeTypeEtapeStatutWithMainStep,
+  etapeIdValidator,
+  EtapeId,
+  GetEtapeDocumentsByEtapeId,
+  needAslAndDae,
+  documentTypeIdComplementaireObligatoireDAE,
+  ETAPE_IS_NOT_BROUILLON,
+  etapeIdOrSlugValidator,
+  GetEtapeAvisByEtapeId,
+  getEtapeAvisByEtapeIdValidator,
+  tempEtapeAvisValidator,
+  tempEtapeDocumentValidator,
+  EtapeBrouillon,
+  etapeSlugValidator,
+  etapeDocumentModificationValidator,
+  documentComplementaireDaeEtapeDocumentModificationValidator,
+  documentComplementaireAslEtapeDocumentModificationValidator,
+  EtapeSlug,
+} from 'camino-common/src/etape.js'
 import { DemarcheId, demarcheIdValidator } from 'camino-common/src/demarche.js'
 import { HTTP_STATUS } from 'camino-common/src/http.js'
 import { CaminoDate, caminoDateValidator, getCurrent } from 'camino-common/src/date.js'
 import { titreDemarcheGet } from '../../database/queries/titres-demarches.js'
 import { userSuper } from '../../database/user-super.js'
-import { titreEtapeGet, titreEtapeUpdate } from '../../database/queries/titres-etapes.js'
+import { titreEtapeGet, titreEtapeUpdate, titreEtapeUpsert } from '../../database/queries/titres-etapes.js'
 import { demarcheDefinitionFind } from '../../business/rules-demarches/definitions.js'
 import { etapeTypeDateFinCheck } from '../_format/etapes-types.js'
 import { User, isBureauDEtudes, isEntreprise } from 'camino-common/src/roles.js'
-import { canCreateEtape, isEtapeDeposable, canDeleteEtape } from 'camino-common/src/permissions/titres-etapes.js'
+import { canCreateEtape, canDeposeEtape, canDeleteEtape, canEditEtape, canEditDates, canEditDuree } from 'camino-common/src/permissions/titres-etapes.js'
 import { TitresStatutIds } from 'camino-common/src/static/titresStatuts.js'
 import { CaminoMachines } from '../../business/rules-demarches/machines.js'
 import { titreEtapesSortAscByOrdre } from '../../business/utils/titre-etapes-sort.js'
 import { Etape, TitreEtapeForMachine, titreEtapeForMachineValidator, toMachineEtapes } from '../../business/rules-demarches/machine-common.js'
 import { canBeBrouillon, EtapesTypes, EtapeTypeId } from 'camino-common/src/static/etapesTypes.js'
-import { SimplePromiseFn, isNotNullNorUndefined, isNullOrUndefined, memoize, onlyUnique } from 'camino-common/src/typescript-tools.js'
+import { DeepReadonly, SimplePromiseFn, isNonEmptyArray, isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty, isNullOrUndefined, memoize, onlyUnique } from 'camino-common/src/typescript-tools.js'
 import { getEtapesTDE, isTDEExist } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/index.js'
 import { EtapeStatutId } from 'camino-common/src/static/etapesStatuts.js'
 import { getEtapesStatuts } from 'camino-common/src/static/etapesTypesEtapesStatuts.js'
 import { DemarchesTypes } from 'camino-common/src/static/demarchesTypes.js'
 import { Pool } from 'pg'
-import { EntrepriseId, EtapeEntrepriseDocument } from 'camino-common/src/entreprise.js'
-import { getDocumentsByEtapeId, getEntrepriseDocumentIdsByEtapeId } from '../../database/queries/titres-etapes.queries.js'
-import { GetEtapeDataForEdition, administrationsLocalesByEtapeId, entreprisesTitulairesOuAmoditairesByEtapeId, getEtapeByDemarcheIdAndEtapeTypeId, getEtapeDataForEdition } from './etapes.queries.js'
+import { EntrepriseDocument, EntrepriseDocumentId, EntrepriseId, EtapeEntrepriseDocument } from 'camino-common/src/entreprise.js'
+import {
+  deleteTitreEtapeEntrepriseDocument,
+  getDocumentsByEtapeId,
+  getEntrepriseDocumentIdsByEtapeId,
+  getEtapeAvisLargeObjectIdsByEtapeId,
+  insertEtapeAvis,
+  insertEtapeDocuments,
+  insertTitreEtapeEntrepriseDocument,
+  updateEtapeAvis,
+  updateEtapeDocuments,
+} from '../../database/queries/titres-etapes.queries.js'
+import { GetEtapeDataForEdition, getEtapeByDemarcheIdAndEtapeTypeId, getEtapeDataForEdition } from './etapes.queries.js'
 import { SDOMZoneId } from 'camino-common/src/static/sdom.js'
 import { objectClone } from '../../tools/index.js'
-import { titreEtapeAdministrationsEmailsSend } from '../graphql/resolvers/_titre-etape-email.js'
-import { getGeojsonInformation } from './perimetre.queries.js'
+import { titreEtapeAdministrationsEmailsSend, titreEtapeUtilisateursEmailsSend } from '../graphql/resolvers/_titre-etape-email.js'
+import { GetGeojsonInformation, convertPoints, getGeojsonInformation } from './perimetre.queries.js'
 import { titreEtapeUpdateTask } from '../../business/titre-etape-update.js'
 import { valeurFind } from 'camino-common/src/sections.js'
 import { getElementWithValue, getSections, getSectionsWithValue } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.js'
 import { TitreTypeId } from 'camino-common/src/static/titresTypes.js'
 import { AdministrationId } from 'camino-common/src/static/administrations.js'
 import { titreDemarcheUpdatedEtatValidate } from '../../business/validations/titre-demarche-etat-validate.js'
+import { FlattenEtape, GraphqlEtape, RestEtapeCreation, RestEtapeModification, restEtapeCreationValidator, restEtapeModificationValidator } from 'camino-common/src/etape-form.js'
+import { iTitreEtapeToFlattenEtape } from '../_format/titres-etapes.js'
+import { CommuneId } from 'camino-common/src/static/communes.js'
+import { titreEtapeUpdationValidate } from '../../business/validations/titre-etape-updation-validate.js'
+import { IHeritageContenu, IHeritageProps, ITitreDemarche, ITitreEtape } from '../../types.js'
+import { checkEntreprisesExist, getEntrepriseDocuments } from './entreprises.queries.js'
+import { ETAPE_HERITAGE_PROPS } from 'camino-common/src/heritage.js'
+import { titreEtapeHeritageBuild } from '../graphql/resolvers/_titre-etape.js'
+import { KM2 } from 'camino-common/src/number.js'
+import { FeatureMultiPolygon, FeatureCollectionPoints } from 'camino-common/src/perimetre.js'
+import { canHaveForages } from 'camino-common/src/permissions/titres.js'
+import { SecteursMaritimes, getSecteurMaritime } from 'camino-common/src/static/facades.js'
+import { GEO_SYSTEME_IDS } from 'camino-common/src/static/geoSystemes.js'
 
 export const getEtapeEntrepriseDocuments =
   (pool: Pool) =>
@@ -140,11 +182,7 @@ export const getEtapeDocuments =
       res.sendStatus(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST)
     } else {
       try {
-        const etapeData = await getEtapeDataForEdition(pool, etapeIdParsed.data)
-
-        const titreTypeId = memoize(() => Promise.resolve(etapeData.titre_type_id))
-        const administrationsLocales = memoize(() => administrationsLocalesByEtapeId(etapeIdParsed.data, pool))
-        const entreprisesTitulairesOuAmodiataires = memoize(() => entreprisesTitulairesOuAmoditairesByEtapeId(etapeIdParsed.data, pool))
+        const { etapeData, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires } = await getEtapeDataForEdition(pool, etapeIdParsed.data)
 
         const result = await getDocumentsByEtapeId(etapeIdParsed.data, pool, user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires, etapeData.etape_type_id, {
           demarche_type_id: etapeData.demarche_type_id,
@@ -168,10 +206,38 @@ export const getEtapeDocuments =
     }
   }
 
+export const getEtapeAvis =
+  (pool: Pool) =>
+  async (req: CaminoRequest, res: CustomResponse<GetEtapeAvisByEtapeId>): Promise<void> => {
+    const etapeIdParsed = etapeIdValidator.safeParse(req.params.etapeId)
+    const user = req.auth
+
+    if (!etapeIdParsed.success) {
+      res.sendStatus(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST)
+    } else {
+      try {
+        const { etapeData, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires } = await getEtapeDataForEdition(pool, etapeIdParsed.data)
+
+        const result = await getEtapeAvisLargeObjectIdsByEtapeId(etapeIdParsed.data, pool, user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires, etapeData.etape_type_id, {
+          demarche_type_id: etapeData.demarche_type_id,
+          entreprises_lecture: etapeData.demarche_entreprises_lecture,
+          public_lecture: etapeData.demarche_public_lecture,
+          titre_public_lecture: etapeData.titre_public_lecture,
+        })
+
+        const avis: GetEtapeAvisByEtapeId = result.map(a => ({ ...a, has_file: isNotNullNorUndefined(a.largeobject_id) }))
+        res.json(getEtapeAvisByEtapeIdValidator.parse(avis))
+      } catch (e) {
+        res.sendStatus(HTTP_STATUS.HTTP_STATUS_INTERNAL_SERVER_ERROR)
+        console.error(e)
+      }
+    }
+  }
+
 export const deleteEtape = (pool: Pool) => async (req: CaminoRequest, res: CustomResponse<void>) => {
   const user = req.auth
 
-  const etapeId = etapeIdValidator.safeParse(req.params.etapeId)
+  const etapeId = etapeIdOrSlugValidator.safeParse(req.params.etapeIdOrSlug)
   if (!etapeId.success) {
     res.sendStatus(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST)
   } else if (isNullOrUndefined(user)) {
@@ -225,7 +291,7 @@ export const deleteEtape = (pool: Pool) => async (req: CaminoRequest, res: Custo
           if (rulesErrors.length) {
             throw new Error(rulesErrors.join(', '))
           }
-          await titreEtapeUpdate(etapeId.data, { archive: true }, user, titreDemarche.titreId)
+          await titreEtapeUpdate(titreEtape.id, { archive: true }, user, titreDemarche.titreId)
 
           await titreEtapeUpdateTask(pool, null, titreEtape.titreDemarcheId, user)
 
@@ -238,6 +304,540 @@ export const deleteEtape = (pool: Pool) => async (req: CaminoRequest, res: Custo
     }
   }
 }
+export const getEtape = (_pool: Pool) => async (req: CaminoRequest, res: CustomResponse<DeepReadonly<FlattenEtape>>) => {
+  const user = req.auth
+
+  const etapeId = etapeIdOrSlugValidator.safeParse(req.params.etapeIdOrSlug)
+  if (!etapeId.success) {
+    res.sendStatus(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST)
+  } else if (isNullOrUndefined(user)) {
+    res.sendStatus(HTTP_STATUS.HTTP_STATUS_FORBIDDEN)
+  } else {
+    try {
+      const titreEtape = await titreEtapeGet(etapeId.data, { fields: { demarche: { titre: { pointsEtape: { id: {} } } } }, fetchHeritage: true }, user)
+
+      if (isNullOrUndefined(titreEtape)) {
+        res.sendStatus(HTTP_STATUS.HTTP_STATUS_NOT_FOUND)
+      } else if (isNullOrUndefined(titreEtape.titulaireIds) || isNullOrUndefined(titreEtape.demarche?.titre) || titreEtape.demarche.titre.administrationsLocales === undefined) {
+        console.error('la démarche n’est pas chargée complètement')
+        res.sendStatus(HTTP_STATUS.HTTP_STATUS_INTERNAL_SERVER_ERROR)
+      } else if (
+        !canEditEtape(user, titreEtape.typeId, titreEtape.isBrouillon, titreEtape.titulaireIds ?? [], titreEtape.demarche.titre.administrationsLocales ?? [], titreEtape.demarche.typeId, {
+          typeId: titreEtape.demarche.titre.typeId,
+          titreStatutId: titreEtape.demarche.titre.titreStatutId,
+        })
+      ) {
+        res.sendStatus(HTTP_STATUS.HTTP_STATUS_FORBIDDEN)
+      } else {
+        res.json(iTitreEtapeToFlattenEtape(titreEtape))
+      }
+    } catch (e) {
+      console.error(e)
+
+      res.sendStatus(HTTP_STATUS.HTTP_STATUS_INTERNAL_SERVER_ERROR)
+    }
+  }
+}
+const validateAndGetEntrepriseDocuments = async (pool: Pool, etape: FlattenEtape, entrepriseDocumentIds: EntrepriseDocumentId[], user: User): Promise<EntrepriseDocument[]> => {
+  const entrepriseDocuments: EntrepriseDocument[] = []
+
+  const titulaires = etape.titulaires.value
+  const amodiataires = etape.amodiataires.value
+  if (isNotNullNorUndefinedNorEmpty(entrepriseDocumentIds)) {
+    let entrepriseIds: EntrepriseId[] = []
+    if (isNotNullNorUndefinedNorEmpty(titulaires)) {
+      entrepriseIds.push(...titulaires)
+    }
+    if (isNotNullNorUndefinedNorEmpty(amodiataires)) {
+      entrepriseIds.push(...amodiataires)
+    }
+    entrepriseIds = entrepriseIds.filter(onlyUnique)
+
+    if (isNonEmptyArray(entrepriseIds)) {
+      entrepriseDocuments.push(...(await getEntrepriseDocuments(entrepriseDocumentIds, entrepriseIds, pool, user)))
+    }
+
+    if (entrepriseDocumentIds.length !== entrepriseDocuments.length) {
+      throw new Error("document d'entreprise incorrects")
+    }
+  }
+
+  return entrepriseDocuments
+}
+
+export const arePointsOnPerimeter = (perimetre: FeatureMultiPolygon, points: FeatureCollectionPoints): boolean => {
+  const coordinatesSet = new Set()
+
+  perimetre.geometry.coordinates.forEach(geometry => geometry.forEach(sub => sub.forEach(coordinate => coordinatesSet.add(`${coordinate[0]}-${coordinate[1]}`))))
+
+  return points.features.every(point => {
+    return coordinatesSet.has(`${point.geometry.coordinates[0]}-${point.geometry.coordinates[1]}`)
+  })
+}
+const getForagesProperties = async (
+  titreTypeId: TitreTypeId,
+  geojsonOrigineGeoSystemeId: GraphqlEtape['geojsonOrigineGeoSystemeId'],
+  geojsonOrigineForages: GraphqlEtape['geojsonOrigineForages'],
+  pool: Pool
+): Promise<Pick<GraphqlEtape, 'geojson4326Forages' | 'geojsonOrigineForages'>> => {
+  if (canHaveForages(titreTypeId) && isNotNullNorUndefined(geojsonOrigineForages) && isNotNullNorUndefined(geojsonOrigineGeoSystemeId)) {
+    return {
+      geojson4326Forages: await convertPoints(pool, geojsonOrigineGeoSystemeId, GEO_SYSTEME_IDS.WGS84, geojsonOrigineForages),
+      geojsonOrigineForages,
+    }
+  }
+
+  return {
+    geojson4326Forages: null,
+    geojsonOrigineForages: null,
+  }
+}
+type PerimetreInfos = {
+  secteursMaritime: SecteursMaritimes[]
+  sdomZones: SDOMZoneId[]
+  surface: KM2 | null
+} & Pick<GraphqlEtape, 'geojson4326Forages' | 'geojsonOrigineForages'> &
+  Pick<GetGeojsonInformation, 'communes' | 'forets'>
+const getPerimetreInfosInternal = async (
+  pool: Pool,
+  geojson4326Perimetre: GraphqlEtape['geojson4326Perimetre'],
+  geojsonOriginePerimetre: GraphqlEtape['geojsonOriginePerimetre'],
+  geojsonOriginePoints: GraphqlEtape['geojsonOriginePoints'],
+  titreTypeId: TitreTypeId,
+  geojsonOrigineGeoSystemeId: GraphqlEtape['geojsonOrigineGeoSystemeId'],
+  geojsonOrigineForages: GraphqlEtape['geojsonOrigineForages']
+): Promise<PerimetreInfos> => {
+  if (isNotNullNorUndefined(geojson4326Perimetre)) {
+    if (isNotNullNorUndefined(geojsonOriginePerimetre) && isNotNullNorUndefined(geojsonOriginePoints)) {
+      if (!arePointsOnPerimeter(geojsonOriginePerimetre, geojsonOriginePoints)) {
+        throw new Error(`les points doivent être sur le périmètre`)
+      }
+    }
+    const { communes, sdom, surface, forets, secteurs } = await getGeojsonInformation(pool, geojson4326Perimetre.geometry)
+    const { geojson4326Forages } = await getForagesProperties(titreTypeId, geojsonOrigineGeoSystemeId, geojsonOrigineForages, pool)
+
+    return {
+      surface,
+      communes,
+      forets,
+      secteursMaritime: secteurs.map(s => getSecteurMaritime(s)),
+      sdomZones: sdom,
+      geojson4326Forages,
+      geojsonOrigineForages,
+    }
+  } else {
+    return {
+      communes: [],
+      forets: [],
+      secteursMaritime: [],
+      sdomZones: [],
+      surface: null,
+      geojson4326Forages: null,
+      geojsonOrigineForages: null,
+    }
+  }
+}
+const getFlattenEtape = async (
+  etape: RestEtapeCreation | RestEtapeModification,
+  demarche: ITitreDemarche,
+  titreTypeId: TitreTypeId,
+  isBrouillon: EtapeBrouillon,
+  etapeSlug: EtapeSlug | undefined,
+  pool: Pool
+): Promise<{ flattenEtape: FlattenEtape; perimetreInfos: PerimetreInfos }> => {
+  const perimetreInfos = await getPerimetreInfosInternal(
+    pool,
+    etape.geojson4326Perimetre,
+    etape.geojsonOriginePerimetre,
+    etape.geojsonOriginePoints,
+    titreTypeId,
+    etape.geojsonOrigineGeoSystemeId,
+    etape.geojsonOrigineForages
+  )
+  const titreEtapeHeritage = titreEtapeHeritageBuild(etape.date, etape.typeId, demarche, titreTypeId, demarche.typeId, null)
+
+  const heritageProps = ETAPE_HERITAGE_PROPS.reduce<IHeritageProps>((acc, propId) => {
+    acc[propId] = {
+      actif: etape.heritageProps[propId].actif,
+      etape: titreEtapeHeritage.heritageProps?.[propId].etape,
+    }
+
+    return acc
+  }, {} as IHeritageProps)
+
+  const sections = getSections(titreTypeId, demarche.typeId, etape.typeId)
+  const heritageContenu = sections.reduce<IHeritageContenu>((accSections, section) => {
+    accSections[section.id] = section.elements.reduce<IHeritageContenu[string]>((accElements, element) => {
+      accElements[element.id] = {
+        actif: etape.heritageContenu[section.id]?.[element.id]?.actif ?? false,
+        etape: titreEtapeHeritage.heritageContenu?.[section.id]?.[element.id]?.etape ?? undefined,
+      }
+
+      return accElements
+    }, {})
+
+    return accSections
+  }, {})
+
+  return {
+    flattenEtape: iTitreEtapeToFlattenEtape({
+      ...etape,
+      demarche,
+      ...perimetreInfos,
+      isBrouillon,
+      heritageProps,
+      heritageContenu,
+      // On ne voit pas comment mieux faire
+      id: 'id' in etape ? etape.id : etapeIdValidator.parse('newId'),
+      slug: etapeSlug,
+    }),
+    perimetreInfos,
+  }
+}
+export const createEtape = (pool: Pool) => async (req: CaminoRequest, res: CustomResponse<EtapeId>) => {
+  try {
+    const { success, data: etape, error } = restEtapeCreationValidator.safeParse(req.body)
+
+    if (!success) {
+      console.error('[etapeCreer] étape non correctement formatée', error)
+      res.status(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST).json({ errorMessage: "l'étape n'est pas correctement formatée" })
+    } else {
+      const user = req.auth
+      if (!user) {
+        res.status(HTTP_STATUS.HTTP_STATUS_NOT_FOUND).json({ errorMessage: "la démarche n'existe pas" })
+      } else {
+        let titreDemarche = await titreDemarcheGet(etape.titreDemarcheId, { fields: {} }, user)
+
+        if (!titreDemarche) {
+          res.status(HTTP_STATUS.HTTP_STATUS_NOT_FOUND).json({ errorMessage: "la démarche n'existe pas" })
+        } else {
+          titreDemarche = await titreDemarcheGet(
+            etape.titreDemarcheId,
+            {
+              fields: {
+                titre: {
+                  demarches: { etapes: { id: {} } },
+                  pointsEtape: { id: {} },
+                  titulairesEtape: { id: {} },
+                  amodiatairesEtape: { id: {} },
+                },
+                etapes: { id: {} },
+              },
+            },
+            userSuper
+          )
+
+          if (!titreDemarche || !titreDemarche.titre) {
+            res.status(HTTP_STATUS.HTTP_STATUS_NOT_FOUND).json({ errorMessage: "le titre n'existe pas" })
+          } else {
+            const titreTypeId = titreDemarche?.titre?.typeId
+            if (!titreTypeId) {
+              res.status(HTTP_STATUS.HTTP_STATUS_INTERNAL_SERVER_ERROR).json({ errorMessage: `le type du titre de la ${titreDemarche.id} n'est pas chargé` })
+            } else {
+              const isBrouillon = canBeBrouillon(etape.typeId)
+              const { flattenEtape, perimetreInfos } = await getFlattenEtape(etape, titreDemarche, titreTypeId, isBrouillon, etapeSlugValidator.parse('unknown'), pool)
+              const entrepriseDocuments: EntrepriseDocument[] = await validateAndGetEntrepriseDocuments(pool, flattenEtape, etape.entrepriseDocumentIds, user)
+
+              const etapeDocumentsParsed = z.array(tempEtapeDocumentValidator).safeParse(etape.etapeDocuments)
+
+              if (!etapeDocumentsParsed.success) {
+                console.warn(etapeDocumentsParsed.error)
+
+                res.status(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST).json({ errorMessage: 'Les documents envoyés ne sont pas conformes' })
+              } else {
+                const etapeDocuments = etapeDocumentsParsed.data
+
+                const etapeAvisParsed = z.array(tempEtapeAvisValidator).safeParse(etape.etapeAvis)
+                if (!etapeAvisParsed.success) {
+                  console.warn(etapeAvisParsed.error)
+                  res.status(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST).json({ errorMessage: 'Les avis envoyés ne sont pas conformes' })
+                } else {
+                  const etapeAvis = etapeAvisParsed.data
+                  const rulesErrors = titreEtapeUpdationValidate(
+                    flattenEtape,
+                    titreDemarche,
+                    titreDemarche.titre,
+                    etapeDocuments,
+                    etapeAvis,
+                    entrepriseDocuments,
+                    perimetreInfos.sdomZones,
+                    perimetreInfos.communes.map(({ id }) => id),
+                    user,
+                    null,
+                    null
+                  )
+                  if (rulesErrors.length) {
+                    res.status(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST).json({ errorMessage: rulesErrors.join(', ') })
+                  } else if (
+                    !canCreateEtape(user, etape.typeId, isBrouillon, titreDemarche.titre.titulaireIds ?? [], titreDemarche.titre.administrationsLocales ?? [], titreDemarche.typeId, {
+                      typeId: titreDemarche.titre.typeId,
+                      titreStatutId: titreDemarche.titre.titreStatutId ?? TitresStatutIds.Indetermine,
+                    })
+                  ) {
+                    res.status(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST).json({ errorMessage: 'droits insuffisants pour créer cette étape' })
+                  } else if (!(await checkEntreprisesExist(pool, [...(etape.titulaireIds ?? []), ...(etape.amodiataireIds ?? [])]))) {
+                    res.status(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST).json({ errorMessage: "certaines entreprises n'existent pas" })
+                  } else {
+                    if (!canEditDuree(titreTypeId, titreDemarche.typeId)) {
+                      etape.duree = null
+                    }
+
+                    if (!canEditDates(titreTypeId, titreDemarche.typeId, etape.typeId, user) && (isNotNullNorUndefined(etape.dateDebut) || isNotNullNorUndefined(etape.dateFin))) {
+                      etape.dateDebut = null
+                      etape.dateFin = null
+                    }
+
+                    const etapeUpdated: ITitreEtape | undefined = await titreEtapeUpsert({ ...etape, ...perimetreInfos, isBrouillon }, user!, titreDemarche.titreId)
+                    if (isNullOrUndefined(etapeUpdated)) {
+                      res.status(HTTP_STATUS.HTTP_STATUS_INTERNAL_SERVER_ERROR).json({ errorMessage: "Une erreur est survenue lors de la création de l'étape" })
+                    } else {
+                      await insertEtapeDocuments(pool, etapeUpdated.id, etapeDocuments)
+                      for (const document of entrepriseDocuments) {
+                        await insertTitreEtapeEntrepriseDocument(pool, { titre_etape_id: etapeUpdated.id, entreprise_document_id: document.id })
+                      }
+
+                      await insertEtapeAvis(pool, etapeUpdated.id, etapeAvis)
+
+                      try {
+                        await titreEtapeUpdateTask(pool, etapeUpdated.id, etapeUpdated.titreDemarcheId, user)
+                      } catch (e) {
+                        console.error('une erreur est survenue lors des tâches annexes', e)
+                      }
+
+                      await titreEtapeAdministrationsEmailsSend(etapeUpdated, titreDemarche.typeId, titreDemarche.titreId, titreDemarche.titre.typeId, user)
+                      await titreEtapeUtilisateursEmailsSend(etapeUpdated, titreDemarche.titreId)
+
+                      res.json(etapeUpdated.id)
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  } catch (e) {
+    console.error(e)
+
+    res.status(HTTP_STATUS.HTTP_STATUS_INTERNAL_SERVER_ERROR).json({ errorMessage: "Une erreur est survenue lors de la création de l'étape", extra: e })
+  }
+}
+
+export const updateEtape = (pool: Pool) => async (req: CaminoRequest, res: CustomResponse<EtapeId>) => {
+  try {
+    const { success, data: etape, error } = restEtapeModificationValidator.safeParse(req.body)
+
+    if (!success) {
+      console.error('[etapeModifier] étape non correctement formatée', error)
+      res.status(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST).json({ errorMessage: "l'étape n'est pas correctement formatée" })
+    } else {
+      const user = req.auth
+      if (!user) {
+        res.status(HTTP_STATUS.HTTP_STATUS_NOT_FOUND).json({ errorMessage: "la démarche n'existe pas" })
+      } else {
+        const titreEtapeOld = await titreEtapeGet(
+          etape.id,
+          {
+            fields: {
+              demarche: { titre: { pointsEtape: { id: {} } } },
+            },
+          },
+          user
+        )
+
+        if (isNullOrUndefined(titreEtapeOld)) throw new Error("l'étape n'existe pas")
+        if (!titreEtapeOld.demarche || !titreEtapeOld.demarche.titre || titreEtapeOld.demarche.titre.administrationsLocales === undefined || !titreEtapeOld.demarche.titre.titreStatutId) {
+          throw new Error('la démarche n’est pas chargée complètement')
+        }
+
+        if (
+          !canEditEtape(
+            user,
+            titreEtapeOld.typeId,
+            titreEtapeOld.isBrouillon,
+            titreEtapeOld.titulaireIds ?? [],
+            titreEtapeOld.demarche.titre.administrationsLocales ?? [],
+            titreEtapeOld.demarche.typeId,
+            {
+              typeId: titreEtapeOld.demarche.titre.typeId,
+              titreStatutId: titreEtapeOld.demarche.titre.titreStatutId,
+            }
+          )
+        )
+          throw new Error('droits insuffisants')
+
+        if (titreEtapeOld.typeId !== etape.typeId) throw new Error("Il est interdit d'éditer le type d'étape")
+
+        if (titreEtapeOld.titreDemarcheId !== etape.titreDemarcheId) throw new Error("la démarche n'existe pas")
+        const titreDemarche = await titreDemarcheGet(
+          etape.titreDemarcheId,
+          {
+            fields: {
+              titre: {
+                demarches: { etapes: { id: {} } },
+                titulairesEtape: { id: {} },
+                amodiatairesEtape: { id: {} },
+              },
+              etapes: { id: {} },
+            },
+          },
+          userSuper
+        )
+
+        if (!titreDemarche || !titreDemarche.titre) throw new Error("le titre n'existe pas")
+        if (isNullOrUndefined(titreDemarche.titre.titulaireIds) || isNullOrUndefined(titreDemarche.titre.amodiataireIds)) throw new Error('la démarche n’est pas chargée complètement')
+        const titreTypeId = titreDemarche?.titre?.typeId
+        if (!titreTypeId) {
+          throw new Error(`le type du titre de la ${titreDemarche.id} n'est pas chargé`)
+        }
+        const isBrouillon = titreEtapeOld.isBrouillon
+        const { flattenEtape, perimetreInfos } = await getFlattenEtape(etape, titreDemarche, titreTypeId, isBrouillon, titreEtapeOld.slug, pool)
+        const entrepriseDocuments: EntrepriseDocument[] = await validateAndGetEntrepriseDocuments(pool, flattenEtape, etape.entrepriseDocumentIds, user)
+
+        const etapeDocumentsParsed = z.array(etapeDocumentModificationValidator).safeParse(etape.etapeDocuments)
+
+        if (!etapeDocumentsParsed.success) {
+          console.warn(etapeDocumentsParsed.error)
+          throw new Error('Les documents envoyés ne sont pas conformes')
+        }
+
+        const etapeDocuments = etapeDocumentsParsed.data
+
+        const needToCreateAslAndDae = needAslAndDae({ etapeTypeId: etape.typeId, demarcheTypeId: titreDemarche.typeId, titreTypeId: titreDemarche.titre.typeId }, titreEtapeOld.isBrouillon, user)
+        let daeDocument = null
+        let aslDocument = null
+        if (needToCreateAslAndDae) {
+          const daeDocumentParsed = documentComplementaireDaeEtapeDocumentModificationValidator.nullable().safeParse(etape.daeDocument)
+          if (!daeDocumentParsed.success) {
+            console.warn(daeDocumentParsed.error)
+            throw new Error('L’arrêté préfectoral n’est pas conforme')
+          }
+
+          daeDocument = daeDocumentParsed.data
+
+          const aslDocumentParsed = documentComplementaireAslEtapeDocumentModificationValidator.nullable().safeParse(etape.aslDocument)
+          if (!aslDocumentParsed.success) {
+            console.warn(aslDocumentParsed.error)
+            throw new Error('La lettre du propriétaire du sol n’est pas conforme')
+          }
+
+          aslDocument = aslDocumentParsed.data
+        }
+
+        const rulesErrors = titreEtapeUpdationValidate(
+          flattenEtape,
+          titreDemarche,
+          titreDemarche.titre,
+          etapeDocuments,
+          etape.etapeAvis,
+          entrepriseDocuments,
+          perimetreInfos.sdomZones,
+          perimetreInfos.communes.map(({ id }) => id),
+          user,
+          daeDocument,
+          aslDocument,
+          titreEtapeOld
+        )
+
+        if (rulesErrors.length) {
+          throw new Error(rulesErrors.join(', '))
+        }
+
+        if (!canEditDuree(titreTypeId, titreDemarche.typeId)) {
+          etape.duree = titreEtapeOld.duree ?? null
+        }
+
+        if (!canEditDates(titreTypeId, titreDemarche.typeId, etape.typeId, user)) {
+          etape.dateDebut = titreEtapeOld.dateDebut ?? null
+          etape.dateFin = titreEtapeOld.dateFin ?? null
+        }
+
+        if (!(await checkEntreprisesExist(pool, [...(etape.titulaireIds ?? []), ...(etape.amodiataireIds ?? [])]))) {
+          throw new Error("certaines entreprises n'existent pas")
+        }
+
+        const etapeUpdated: ITitreEtape | undefined = await titreEtapeUpsert({ ...etape, ...perimetreInfos, isBrouillon: titreEtapeOld.isBrouillon }, user!, titreDemarche.titreId)
+        if (isNullOrUndefined(etapeUpdated)) {
+          throw new Error("Une erreur est survenue lors de la modification de l'étape")
+        }
+        await updateEtapeDocuments(pool, user, etapeUpdated.id, etapeUpdated.isBrouillon, etapeDocuments)
+        await deleteTitreEtapeEntrepriseDocument(pool, { titre_etape_id: etapeUpdated.id })
+        for (const document of entrepriseDocuments) {
+          await insertTitreEtapeEntrepriseDocument(pool, { titre_etape_id: etapeUpdated.id, entreprise_document_id: document.id })
+        }
+
+        if (needToCreateAslAndDae) {
+          if (daeDocument !== null) {
+            const daeEtapeInDb = await getEtapeByDemarcheIdAndEtapeTypeId(pool, 'dae', titreDemarche.id)
+
+            const daeEtape = await titreEtapeUpsert(
+              {
+                id: daeEtapeInDb?.etape_id ?? undefined,
+                typeId: 'dae',
+                statutId: daeDocument.etape_statut_id,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
+                titreDemarcheId: titreDemarche.id,
+                date: daeDocument.date,
+                contenu: {
+                  mea: { arrete: daeDocument.arrete_prefectoral },
+                },
+              },
+              user!,
+              titreDemarche.titreId
+            )
+            if (isNullOrUndefined(daeEtape)) {
+              throw new Error("impossible d'intégrer le document lié à la DAE")
+            }
+
+            await updateEtapeDocuments(pool, user, daeEtape.id, titreEtapeOld.isBrouillon, [daeDocument])
+          }
+
+          if (aslDocument !== null) {
+            const aslEtapeInDb = await getEtapeByDemarcheIdAndEtapeTypeId(pool, 'asl', titreDemarche.id)
+
+            const aslEtape = await titreEtapeUpsert(
+              {
+                id: aslEtapeInDb?.etape_id ?? undefined,
+                typeId: 'asl',
+                statutId: aslDocument.etape_statut_id,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
+                titreDemarcheId: titreDemarche.id,
+                date: aslDocument.date,
+              },
+              user!,
+              titreDemarche.titreId
+            )
+
+            if (isNullOrUndefined(aslEtape)) {
+              throw new Error("impossible d'intégrer le document lié à la ASL")
+            }
+            await updateEtapeDocuments(pool, user, aslEtape.id, titreEtapeOld.isBrouillon, [aslDocument])
+          }
+        }
+
+        await updateEtapeAvis(
+          pool,
+          etapeUpdated.id,
+          isBrouillon,
+          etape.etapeAvis,
+          etape.typeId,
+          titreTypeId,
+          perimetreInfos.communes.map(({ id }) => id)
+        )
+
+        await titreEtapeUpdateTask(pool, etapeUpdated.id, etapeUpdated.titreDemarcheId, user)
+
+        await titreEtapeAdministrationsEmailsSend(flattenEtape, titreDemarche.typeId, titreDemarche.titreId, titreDemarche.titre.typeId, user, titreEtapeOld)
+        res.json(titreEtapeOld.id)
+      }
+    }
+  } catch (e: any) {
+    console.error(e)
+
+    res.status(HTTP_STATUS.HTTP_STATUS_INTERNAL_SERVER_ERROR).json({ errorMessage: e.message, extra: e })
+  }
+}
 
 export const deposeEtape = (pool: Pool) => async (req: CaminoRequest, res: CustomResponse<void>) => {
   const user = req.auth
@@ -279,9 +879,11 @@ export const deposeEtape = (pool: Pool) => async (req: CaminoRequest, res: Custo
       if (isNullOrUndefined(titreEtape.slug)) throw new Error("le slug de l'étape est obligatoire")
 
       const sdomZones: SDOMZoneId[] = []
+      const communes: CommuneId[] = []
       if (isNotNullNorUndefined(titreEtape.geojson4326Perimetre)) {
-        const { sdom } = await getGeojsonInformation(pool, titreEtape.geojson4326Perimetre.geometry)
+        const { sdom, communes: communeFromGeoJson } = await getGeojsonInformation(pool, titreEtape.geojson4326Perimetre.geometry)
 
+        communes.push(...communeFromGeoJson.map(({ id }) => id))
         sdomZones.push(...sdom)
       }
       const titreTypeId = memoize(() => Promise.resolve(titre.typeId))
@@ -324,21 +926,32 @@ export const deposeEtape = (pool: Pool) => async (req: CaminoRequest, res: Custo
         etape_is_brouillon: titreEtape.isBrouillon,
       })
 
+      // On utilise le userSuper pour charger tous les avis, car celui qui dépose ne peut peut-être pas voir tous les avis
+      const etapeAvis = await getEtapeAvisLargeObjectIdsByEtapeId(id, pool, userSuper, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires, titreEtape.typeId, {
+        demarche_type_id: titreDemarche.typeId,
+        entreprises_lecture: titreDemarche.entreprisesLecture ?? false,
+        public_lecture: titreDemarche.publicLecture ?? false,
+        titre_public_lecture: titre.publicLecture ?? false,
+      })
+
       // TODO 2023-06-14 TS 5.1 n’arrive pas réduire le type de titre
-      const deposable = isEtapeDeposable(
+      const flattenEtape = iTitreEtapeToFlattenEtape(titreEtape)
+      const deposable = canDeposeEtape(
         user,
         { ...titre, titulaires: titre.titulaireIds ?? [], administrationsLocales: titre.administrationsLocales ?? [] },
         titreDemarche.typeId,
-        { ...titreEtape, contenu: titreEtape.contenu ?? {} },
+        flattenEtape,
         etapeDocuments,
         entrepriseDocuments,
         sdomZones,
+        communes,
         daeDocument,
-        aslDocument
+        aslDocument,
+        etapeAvis
       )
       if (!deposable) throw new Error('droits insuffisants')
 
-      if (!canBeBrouillon(titreEtape.typeId)) {
+      if (canBeBrouillon(titreEtape.typeId) === ETAPE_IS_NOT_BROUILLON) {
         throw new Error('cette étape ne peut-être déposée')
       }
 
@@ -348,7 +961,7 @@ export const deposeEtape = (pool: Pool) => async (req: CaminoRequest, res: Custo
         titreEtape.id,
         {
           date,
-          isBrouillon: false,
+          isBrouillon: ETAPE_IS_NOT_BROUILLON,
         },
         user,
         titreDemarche.titreId
@@ -448,12 +1061,18 @@ const demarcheEtapesTypesGet = async (titreDemarcheId: DemarcheId, date: CaminoD
     etapesTypes.push(...etapesTypesTDE.flatMap(etapeTypeId => getEtapesStatuts(etapeTypeId).map(etapeStatut => ({ etapeTypeId, etapeStatutId: etapeStatut.id, mainStep: false }))))
   }
 
-  return etapesTypes.filter(({ etapeTypeId }) =>
-    canCreateEtape(user, etapeTypeId, true, titre.titulaireIds ?? [], titre.administrationsLocales ?? [], titreDemarche.typeId, {
-      typeId: titre.typeId,
-      titreStatutId: titre.titreStatutId ?? TitresStatutIds.Indetermine,
-    })
-  )
+  // FIXME integration tests
+  // On ne peut pas avoir 2 fois le même type d'étape en brouillon
+  const etapeTypeIdInBrouillon = titreDemarche.etapes?.filter(({ isBrouillon, id }) => id !== titreEtapeId && isBrouillon).map(({ typeId }) => typeId) ?? []
+
+  return etapesTypes
+    .filter(({ etapeTypeId }) =>
+      canCreateEtape(user, etapeTypeId, true, titre.titulaireIds ?? [], titre.administrationsLocales ?? [], titreDemarche.typeId, {
+        typeId: titre.typeId,
+        titreStatutId: titre.titreStatutId ?? TitresStatutIds.Indetermine,
+      })
+    )
+    .filter(({ etapeTypeId }) => !etapeTypeIdInBrouillon.includes(etapeTypeId))
 }
 
 // VISIBLE_FOR_TESTING
diff --git a/packages/api/src/api/rest/express-type.ts b/packages/api/src/api/rest/express-type.ts
index ea30f25d1..085b21bc6 100644
--- a/packages/api/src/api/rest/express-type.ts
+++ b/packages/api/src/api/rest/express-type.ts
@@ -5,7 +5,7 @@ import { User } from 'camino-common/src/roles'
 type MyResponse<T, U = Response> = (body?: T) => U
 
 export interface CustomResponse<T> extends Response {
-  json: MyResponse<T, this>
+  json: MyResponse<T | { errorMessage: string; extra?: unknown }, this>
 }
 
 export type CaminoRequest = Request<User>
diff --git a/packages/api/src/api/rest/fichiers.ts b/packages/api/src/api/rest/fichiers.ts
index 2c82ed31a..72cc63066 100644
--- a/packages/api/src/api/rest/fichiers.ts
+++ b/packages/api/src/api/rest/fichiers.ts
@@ -3,16 +3,15 @@ import { createWriteStream } from 'node:fs'
 import { User } from 'camino-common/src/roles'
 import { DOWNLOAD_FORMATS, contentTypes } from 'camino-common/src/rest.js'
 import { Pool } from 'pg'
-import { EtapeId, etapeDocumentIdValidator } from 'camino-common/src/etape.js'
-import { getEntrepriseDocumentLargeObjectIdsByEtapeId, getEtapeDocumentLargeObjectIdsByEtapeId } from '../../database/queries/titres-etapes.queries.js'
+import { EtapeId, etapeAvisIdValidator, etapeDocumentIdValidator } from 'camino-common/src/etape.js'
+import { getEntrepriseDocumentLargeObjectIdsByEtapeId, getEtapeDocumentLargeObjectIdsByEtapeId, getLargeobjectIdByEtapeAvisId } from '../../database/queries/titres-etapes.queries.js'
 import { LargeObjectManager } from 'pg-large-object'
 
 import express from 'express'
 import { join } from 'node:path'
 import { DocumentsTypes } from 'camino-common/src/static/documentsTypes.js'
 import { slugify } from 'camino-common/src/strings.js'
-import { administrationsLocalesByEtapeId, entreprisesTitulairesOuAmoditairesByEtapeId, getEtapeDataForEdition, getLargeobjectIdByEtapeDocumentId } from './etapes.queries.js'
-import { memoize } from 'camino-common/src/typescript-tools.js'
+import { getEtapeDataForEdition, getLargeobjectIdByEtapeDocumentId } from './etapes.queries.js'
 import { EtapesTypes } from 'camino-common/src/static/etapesTypes.js'
 export type NewDownload = (params: Record<string, unknown>, user: User, pool: Pool) => Promise<{ loid: number | null; fileName: string }>
 
@@ -25,11 +24,7 @@ export const etapeTelecharger =
       throw new Error("id d'étape absent")
     }
 
-    const etapeData = await getEtapeDataForEdition(pool, etapeId)
-
-    const titreTypeId = memoize(() => Promise.resolve(etapeData.titre_type_id))
-    const administrationsLocales = memoize(() => administrationsLocalesByEtapeId(etapeId, pool))
-    const entreprisesTitulairesOuAmodiataires = memoize(() => entreprisesTitulairesOuAmoditairesByEtapeId(etapeId, pool))
+    const { etapeData, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires } = await getEtapeDataForEdition(pool, etapeId)
 
     const documents = await getEtapeDocumentLargeObjectIdsByEtapeId(etapeId, pool, user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires, etapeData.etape_type_id, {
       demarche_type_id: etapeData.demarche_type_id,
@@ -136,3 +131,9 @@ export const etapeDocumentDownload: NewDownload = async (params, user, pool) =>
 
   return { loid: activiteDocumentLargeObjectId, fileName: etapeDocumentId }
 }
+export const avisDocumentDownload: NewDownload = async (params, user, pool) => {
+  const etapeAvisId = etapeAvisIdValidator.parse(params.etapeAvisId)
+  const avisDocumentLargeObjectId = await getLargeobjectIdByEtapeAvisId(pool, user, etapeAvisId)
+
+  return { loid: avisDocumentLargeObjectId, fileName: etapeAvisId }
+}
diff --git a/packages/api/src/api/rest/perimetre.queries.ts b/packages/api/src/api/rest/perimetre.queries.ts
index 547b51f04..bcaca71f0 100644
--- a/packages/api/src/api/rest/perimetre.queries.ts
+++ b/packages/api/src/api/rest/perimetre.queries.ts
@@ -151,7 +151,7 @@ const getGeojsonInformationValidator = z.object({
 
 // Surface maximale acceptée pour un titre
 const SURFACE_M2_MAX = 100_000 * 1_000_000
-type GetGeojsonInformation = z.infer<typeof getGeojsonInformationValidator>
+export type GetGeojsonInformation = z.infer<typeof getGeojsonInformationValidator>
 const getGeojsonInformationDbValidator = z.object({
   surface: z.number().max(SURFACE_M2_MAX),
   sdom: z.array(sdomZoneIdValidator).nullable().transform(nullToEmptyArray),
diff --git a/packages/api/src/api/rest/perimetre.ts b/packages/api/src/api/rest/perimetre.ts
index 683ed5f85..b8412842c 100644
--- a/packages/api/src/api/rest/perimetre.ts
+++ b/packages/api/src/api/rest/perimetre.ts
@@ -41,6 +41,7 @@ import { canReadEtape } from './permissions/etapes.js'
 import { EtapeTypeId } from 'camino-common/src/static/etapesTypes.js'
 import xlsx from 'xlsx'
 import { ZodTypeAny, z } from 'zod'
+import { CommuneId } from 'camino-common/src/static/communes'
 
 export const convertGeojsonPointsToGeoSystemeId = (pool: Pool) => async (req: CaminoRequest, res: CustomResponse<FeatureCollectionPoints>) => {
   const geoSystemeIdParsed = geoSystemeIdValidator.safeParse(req.params.geoSystemeId)
@@ -71,11 +72,11 @@ export const getPerimetreInfos = (pool: Pool) => async (req: CaminoRequest, res:
       res.sendStatus(HTTP_STATUS.HTTP_STATUS_BAD_REQUEST)
     } else {
       try {
-        let etape: null | { demarche_id: DemarcheId; geojson4326_perimetre: MultiPolygon | null; sdom_zones: SDOMZoneId[]; etape_type_id: EtapeTypeId } = null
+        let etape: null | { demarche_id: DemarcheId; geojson4326_perimetre: MultiPolygon | null; sdom_zones: SDOMZoneId[]; etape_type_id: EtapeTypeId; communes: CommuneId[] } = null
         if (etapeIdOrSlugParsed.success) {
           const myEtape = await getEtapeById(pool, etapeIdOrSlugParsed.data)
 
-          etape = { demarche_id: myEtape.demarche_id, geojson4326_perimetre: myEtape.geojson4326_perimetre, sdom_zones: myEtape.sdom_zones ?? [], etape_type_id: myEtape.etape_type_id }
+          etape = { demarche_id: myEtape.demarche_id, geojson4326_perimetre: myEtape.geojson4326_perimetre, sdom_zones: myEtape.sdom_zones ?? [], etape_type_id: myEtape.etape_type_id, communes: [] }
         } else if (demarcheIdOrSlugParsed.success) {
           const demarche = await getDemarcheByIdOrSlug(pool, demarcheIdOrSlugParsed.data)
           const etapes = await getEtapesByDemarcheId(pool, demarche.demarche_id)
@@ -87,6 +88,7 @@ export const getPerimetreInfos = (pool: Pool) => async (req: CaminoRequest, res:
               geojson4326_perimetre: mostRecentEtapeFondamentale.geojson4326_perimetre,
               sdom_zones: mostRecentEtapeFondamentale.sdom_zones ?? [],
               etape_type_id: mostRecentEtapeFondamentale.etape_type_id,
+              communes: mostRecentEtapeFondamentale.communes.map(({ id }) => id),
             }
           }
         } else {
@@ -98,6 +100,7 @@ export const getPerimetreInfos = (pool: Pool) => async (req: CaminoRequest, res:
           res.json({
             superposition_alertes: [],
             sdomZoneIds: [],
+            communes: [],
           })
         } else {
           const demarche = await getDemarcheByIdOrSlug(pool, etape.demarche_id)
@@ -118,6 +121,7 @@ export const getPerimetreInfos = (pool: Pool) => async (req: CaminoRequest, res:
             res.json({
               superposition_alertes: await getAlertesSuperposition(etape.geojson4326_perimetre, titre.titre_type_id, titre.titre_slug, user, pool),
               sdomZoneIds: etape.sdom_zones,
+              communes: etape.communes,
             })
           } else {
             res.sendStatus(HTTP_STATUS.HTTP_STATUS_FORBIDDEN)
diff --git a/packages/api/src/api/rest/permissions/avis.test.ts b/packages/api/src/api/rest/permissions/avis.test.ts
new file mode 100644
index 000000000..caf765b72
--- /dev/null
+++ b/packages/api/src/api/rest/permissions/avis.test.ts
@@ -0,0 +1,115 @@
+import { describe, expect, test } from 'vitest'
+import { testBlankUser } from 'camino-common/src/tests-utils'
+import { canReadAvis } from './avis'
+import { ADMINISTRATION_ROLES, EntrepriseUserNotNull, User } from 'camino-common/src/roles'
+import { newEntrepriseId } from 'camino-common/src/entreprise'
+import { AvisVisibilityIds } from 'camino-common/src/static/avisTypes'
+
+const shouldNotBeCalled = () => Promise.reject(new Error('should not be called'))
+
+describe('canReadAvis', () => {
+  test('en tant que super je peux lire tous les documnents', async () => {
+    expect(
+      await canReadAvis({ avis_visibility_id: AvisVisibilityIds.Administrations }, { ...testBlankUser, role: 'super' }, shouldNotBeCalled, shouldNotBeCalled, shouldNotBeCalled, 'mfr', {
+        public_lecture: false,
+        entreprises_lecture: false,
+        titre_public_lecture: false,
+        demarche_type_id: 'oct',
+      })
+    ).toBe(true)
+  })
+
+  test('en tant qu’administration je peux lire tous les documents', async () => {
+    for (const role of ADMINISTRATION_ROLES) {
+      expect(
+        await canReadAvis(
+          { avis_visibility_id: AvisVisibilityIds.Administrations },
+          { ...testBlankUser, role, administrationId: 'dea-guyane-01' },
+          () => Promise.resolve('arm'),
+          () => Promise.resolve(['dea-guyane-01']),
+          shouldNotBeCalled,
+          'mfr',
+          { public_lecture: false, entreprises_lecture: false, titre_public_lecture: false, demarche_type_id: 'oct' }
+        )
+      ).toBe(true)
+    }
+  })
+
+  test('en tant qu’entreprise ou non connecté, je peux lire les documents public', async () => {
+    const users: User[] = [
+      { ...testBlankUser, role: 'defaut' },
+      { ...testBlankUser, role: 'entreprise', entreprises: [{ id: newEntrepriseId('entreprise1'), nom: 'nom' }] },
+      { ...testBlankUser, role: 'bureau d’études', entreprises: [{ id: newEntrepriseId('entreprise2'), nom: 'nom' }] },
+    ]
+    for (const user of users) {
+      expect(
+        await canReadAvis({ avis_visibility_id: AvisVisibilityIds.Public }, user, shouldNotBeCalled, shouldNotBeCalled, shouldNotBeCalled, 'mfr', {
+          public_lecture: true,
+          entreprises_lecture: false,
+          titre_public_lecture: true,
+          demarche_type_id: 'oct',
+        })
+      ).toBe(true)
+    }
+  })
+
+  test('en tant qu’entreprise je peux lire les documents en fonction de entreprise_lecture', async () => {
+    const users: EntrepriseUserNotNull[] = [
+      { ...testBlankUser, role: 'entreprise', entreprises: [{ id: newEntrepriseId('entreprise1'), nom: 'nom' }] },
+      { ...testBlankUser, role: 'bureau d’études', entreprises: [{ id: newEntrepriseId('entreprise2'), nom: 'nom' }] },
+    ]
+    for (const user of users) {
+      expect(
+        await canReadAvis({ avis_visibility_id: AvisVisibilityIds.Administrations }, user, shouldNotBeCalled, shouldNotBeCalled, shouldNotBeCalled, 'mfr', {
+          public_lecture: true,
+          entreprises_lecture: false,
+          titre_public_lecture: true,
+          demarche_type_id: 'oct',
+        })
+      ).toBe(false)
+      expect(
+        await canReadAvis(
+          { avis_visibility_id: AvisVisibilityIds.TitulairesEtAdministrations },
+          user,
+          shouldNotBeCalled,
+          shouldNotBeCalled,
+          () => Promise.resolve(user.entreprises.map(({ id }) => id)),
+          'mfr',
+          {
+            public_lecture: true,
+            entreprises_lecture: false,
+            titre_public_lecture: true,
+            demarche_type_id: 'oct',
+          }
+        )
+      ).toBe(true)
+      expect(
+        await canReadAvis({ avis_visibility_id: AvisVisibilityIds.TitulairesEtAdministrations }, user, shouldNotBeCalled, shouldNotBeCalled, () => Promise.resolve([]), 'mfr', {
+          public_lecture: true,
+          entreprises_lecture: false,
+          titre_public_lecture: true,
+          demarche_type_id: 'oct',
+        })
+      ).toBe(false)
+    }
+  })
+
+  test('en tant non connecté, je peux lire seulement les documents public', async () => {
+    expect(
+      await canReadAvis({ avis_visibility_id: AvisVisibilityIds.Public }, { ...testBlankUser, role: 'defaut' }, shouldNotBeCalled, shouldNotBeCalled, shouldNotBeCalled, 'mfr', {
+        public_lecture: true,
+        entreprises_lecture: false,
+        titre_public_lecture: true,
+        demarche_type_id: 'oct',
+      })
+    ).toBe(true)
+    expect(
+      await canReadAvis({ avis_visibility_id: AvisVisibilityIds.Administrations }, { ...testBlankUser, role: 'defaut' }, shouldNotBeCalled, shouldNotBeCalled, shouldNotBeCalled, 'mfr', {
+        public_lecture: true,
+        entreprises_lecture: false,
+        titre_public_lecture: true,
+        demarche_type_id: 'oct',
+      })
+    ).toBe(false)
+  })
+})
diff --git a/packages/api/src/api/rest/permissions/avis.ts b/packages/api/src/api/rest/permissions/avis.ts
new file mode 100644
index 000000000..11bd20f5b
--- /dev/null
+++ b/packages/api/src/api/rest/permissions/avis.ts
@@ -0,0 +1,43 @@
+import { EntrepriseId } from 'camino-common/src/entreprise.js'
+import { isSuper, isAdministration, isEntrepriseOrBureauDEtude, User } from 'camino-common/src/roles.js'
+import { AdministrationId } from 'camino-common/src/static/administrations.js'
+import { EtapeTypeId } from 'camino-common/src/static/etapesTypes.js'
+import { TitreTypeId } from 'camino-common/src/static/titresTypes.js'
+import { SimplePromiseFn } from 'camino-common/src/typescript-tools.js'
+import { CanReadDemarche } from './demarches.js'
+import { canReadEtape } from './etapes.js'
+import { AvisVisibilityId, AvisVisibilityIds } from 'camino-common/src/static/avisTypes.js'
+
+export const canReadAvis = async (
+  avis: { avis_visibility_id: AvisVisibilityId },
+  user: User,
+  titreTypeId: SimplePromiseFn<TitreTypeId>,
+  titresAdministrationsLocales: SimplePromiseFn<AdministrationId[]>,
+  entreprisesTitulairesOuAmodiataires: SimplePromiseFn<EntrepriseId[]>,
+  etapeTypeId: EtapeTypeId,
+  demarche: CanReadDemarche
+): Promise<boolean> => {
+  if (isSuper(user)) {
+    return true
+  }
+
+  if (!(await canReadEtape(user, titreTypeId, titresAdministrationsLocales, entreprisesTitulairesOuAmodiataires, etapeTypeId, demarche))) {
+    return false
+  }
+
+  if (isAdministration(user)) {
+    return true
+  }
+
+  if (avis.avis_visibility_id === AvisVisibilityIds.Public) {
+    return true
+  }
+
+  if (isEntrepriseOrBureauDEtude(user) && avis.avis_visibility_id === AvisVisibilityIds.TitulairesEtAdministrations) {
+    const titulaires = await entreprisesTitulairesOuAmodiataires()
+
+    return titulaires.some(entrepriseId => user.entreprises?.some(({ id }) => id === entrepriseId) ?? false)
+  }
+
+  return false
+}
diff --git a/packages/api/src/api/rest/permissions/etapes.test.ts b/packages/api/src/api/rest/permissions/etapes.test.ts
index 328e31f28..72f7cf3d4 100644
--- a/packages/api/src/api/rest/permissions/etapes.test.ts
+++ b/packages/api/src/api/rest/permissions/etapes.test.ts
@@ -29,7 +29,7 @@ describe('canReadEtape', () => {
         () => Promise.resolve(titreTypeId),
         () => Promise.resolve([]),
         shouldNotBeCalled,
-        'aof',
+        'ede',
         demarche
       )
     ).toBe(false)
@@ -40,7 +40,7 @@ describe('canReadEtape', () => {
         () => Promise.resolve(titreTypeId),
         () => Promise.resolve([]),
         shouldNotBeCalled,
-        'aof',
+        'ede',
         demarche
       )
     ).toBe(true)
diff --git a/packages/api/src/api/rest/titre-demande.ts b/packages/api/src/api/rest/titre-demande.ts
index a7d6c8668..5f377df6e 100644
--- a/packages/api/src/api/rest/titre-demande.ts
+++ b/packages/api/src/api/rest/titre-demande.ts
@@ -14,7 +14,7 @@ import { checkTitreLinks } from '../../business/validations/titre-links-validate
 import { utilisateurTitreCreate } from '../../database/queries/utilisateurs.js'
 import { toCaminoDate } from 'camino-common/src/date.js'
 import { isNotNullNorUndefinedNorEmpty, isNullOrUndefined } from 'camino-common/src/typescript-tools.js'
-import { EtapeId } from 'camino-common/src/etape.js'
+import { ETAPE_IS_BROUILLON, EtapeId } from 'camino-common/src/etape.js'
 import { titreDemandeValidator } from 'camino-common/src/titres.js'
 import { HTTP_STATUS } from 'camino-common/src/http.js'
 import { Pool } from 'pg'
@@ -89,7 +89,7 @@ export const titreDemandeCreer = (pool: Pool) => async (req: CaminoRequest, res:
           titreDemarcheId,
           typeId: 'mfr',
           statutId: 'fai',
-          isBrouillon: true,
+          isBrouillon: ETAPE_IS_BROUILLON,
           date,
           duree: titreDemande.typeId === 'arm' ? 4 : undefined,
           titulaireIds: [titreDemande.entrepriseId],
diff --git a/packages/api/src/api/rest/titre-heritage.test.ts b/packages/api/src/api/rest/titre-heritage.test.ts
index a3d8369c4..36957d8c3 100644
--- a/packages/api/src/api/rest/titre-heritage.test.ts
+++ b/packages/api/src/api/rest/titre-heritage.test.ts
@@ -3,11 +3,12 @@ import { TitrePropTitreEtapeFindDemarcheEtape } from 'camino-common/src/titres'
 import { getMostRecentEtapeFondamentaleValide } from './titre-heritage'
 import { entrepriseIdValidator } from 'camino-common/src/entreprise'
 import { toCaminoDate } from 'camino-common/src/date'
+import { ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape'
 describe('getMostRecentValueProp', () => {
   test('retourne le dernier titulaire même si les étapes ne sont pas dans le bon ordre', () => {
     const dpu: TitrePropTitreEtapeFindDemarcheEtape = {
       etape_type_id: 'dpu',
-      is_brouillon: false,
+      is_brouillon: ETAPE_IS_NOT_BROUILLON,
       fondamentale: {
         date_debut: null,
         date_fin: toCaminoDate('2032-08-18'),
@@ -23,7 +24,7 @@ describe('getMostRecentValueProp', () => {
 
     const dex: TitrePropTitreEtapeFindDemarcheEtape = {
       etape_type_id: 'dex',
-      is_brouillon: false,
+      is_brouillon: ETAPE_IS_NOT_BROUILLON,
       fondamentale: {
         date_debut: null,
         date_fin: null,
diff --git a/packages/api/src/api/rest/titres.queries.ts b/packages/api/src/api/rest/titres.queries.ts
index d3051dbd3..6b28852ff 100644
--- a/packages/api/src/api/rest/titres.queries.ts
+++ b/packages/api/src/api/rest/titres.queries.ts
@@ -27,13 +27,13 @@ import { canReadDemarche } from './permissions/demarches.js'
 import { SectionWithValue } from 'camino-common/src/sections.js'
 import { getDocuments } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/documents.js'
 import { getSections, getSectionsWithValue } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.js'
-import { OmitDistributive, isNonEmptyArray, isNotNullNorUndefined, memoize } from 'camino-common/src/typescript-tools.js'
-import { getEntrepriseDocumentIdsByEtapeId, getDocumentsByEtapeId } from '../../database/queries/titres-etapes.queries.js'
+import { OmitDistributive, isNonEmptyArray, isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty, memoize } from 'camino-common/src/typescript-tools.js'
+import { getEntrepriseDocumentIdsByEtapeId, getDocumentsByEtapeId, getEtapeAvisLargeObjectIdsByEtapeId } from '../../database/queries/titres-etapes.queries.js'
 import { getAdministrationsLocales } from 'camino-common/src/administrations.js'
 import { getEntrepriseDocuments } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/entrepriseDocuments.js'
 import { isEtapeTypeIdFondamentale } from 'camino-common/src/static/etapesTypes.js'
 import { getCommunes } from '../../database/queries/communes.queries.js'
-import { EtapeDocument } from 'camino-common/src/etape.js'
+import { EtapeAvis, EtapeDocument } from 'camino-common/src/etape.js'
 import { getDateLastJournal } from './journal.queries.js'
 import { canHaveActivites, canReadTitre } from 'camino-common/src/permissions/titres.js'
 import { canReadTitreActivites } from 'camino-common/src/permissions/activites.js'
@@ -41,8 +41,9 @@ import { TitreIdOrSlug, titreIdValidator, titreSlugValidator, TitreId } from 'ca
 import { EntrepriseId, entrepriseIdValidator } from 'camino-common/src/entreprise.js'
 import { AdministrationId } from 'camino-common/src/static/administrations.js'
 import { secteurMaritimeValidator } from 'camino-common/src/static/facades.js'
+import { getAvisTypes } from 'camino-common/src/permissions/etape-form.js'
 
-type SuperEtapeDemarcheTitreGet = OmitDistributive<DemarcheEtape, 'etape_documents'>
+type SuperEtapeDemarcheTitreGet = OmitDistributive<DemarcheEtape, 'etape_documents' | 'avis_documents'>
 type SuperDemarcheTitreGet = Omit<TitreGet['demarches'][0], 'etapes'> & { etapes: SuperEtapeDemarcheTitreGet[]; public_lecture: boolean; entreprises_lecture: boolean; titre_public_lecture: boolean }
 
 export const getTitre = async (pool: Pool, user: User, idOrSlug: TitreIdOrSlug): Promise<TitreGet | null> => {
@@ -78,7 +79,7 @@ export const getTitre = async (pool: Pool, user: User, idOrSlug: TitreIdOrSlug):
           entrepriseDocuments.push(...(await getEntrepriseDocumentIdsByEtapeId({ titre_etape_id: etape.id }, pool, user)))
         }
 
-        const etapeCommon: Omit<DemarcheEtapeCommon, 'etape_documents'> = {
+        const etapeCommon: Omit<DemarcheEtapeCommon, 'etape_documents' | 'avis_documents'> = {
           date: etape.date,
           ordre: etape.ordre,
           notes: etape.notes,
@@ -141,7 +142,7 @@ export const getTitre = async (pool: Pool, user: User, idOrSlug: TitreIdOrSlug):
             }
           }
 
-          const etapeFondamentale: Omit<DemarcheEtapeFondamentale, 'etape_documents'> = {
+          const etapeFondamentale: Omit<DemarcheEtapeFondamentale, 'etape_documents' | 'avis_documents'> = {
             etape_type_id: etape.etape_type_id,
             fondamentale: {
               amodiataireIds,
@@ -157,7 +158,7 @@ export const getTitre = async (pool: Pool, user: User, idOrSlug: TitreIdOrSlug):
 
           formatedEtapes.push(etapeFondamentale)
         } else {
-          const etapeNonFondamentale: Omit<DemarcheEtapeNonFondamentale, 'etape_documents'> = { etape_type_id: etape.etape_type_id, ...etapeCommon }
+          const etapeNonFondamentale: Omit<DemarcheEtapeNonFondamentale, 'etape_documents' | 'avis_documents'> = { etape_type_id: etape.etape_type_id, ...etapeCommon }
 
           formatedEtapes.push(etapeNonFondamentale)
         }
@@ -210,12 +211,30 @@ export const getTitre = async (pool: Pool, user: User, idOrSlug: TitreIdOrSlug):
           if (canRead) {
             const etape_documents: EtapeDocument[] = []
             const documentsTypes = getDocuments(titre.titre_type_id, superDemarche.demarche_type_id, superEtape.etape_type_id)
-            if (documentsTypes.length > 0) {
+            if (isNotNullNorUndefinedNorEmpty(documentsTypes)) {
               etape_documents.push(
                 ...(await getDocumentsByEtapeId(superEtape.id, pool, user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires, superEtape.etape_type_id, superDemarche))
               )
             }
-            etapes.push({ ...superEtape, etape_documents })
+
+            const avis_documents: EtapeAvis[] = []
+            const avisTypes = getAvisTypes(superEtape.etape_type_id, titre.titre_type_id, perimetre?.communes.map(({ id }) => id) ?? [])
+            if (isNotNullNorUndefinedNorEmpty(avisTypes)) {
+              const avisWithLargeObjectId = await getEtapeAvisLargeObjectIdsByEtapeId(
+                superEtape.id,
+                pool,
+                user,
+                titreTypeId,
+                administrationsLocales,
+                entreprisesTitulairesOuAmodiataires,
+                superEtape.etape_type_id,
+                superDemarche
+              )
+
+              avis_documents.push(...avisWithLargeObjectId.map(a => ({ ...a, has_file: isNotNullNorUndefined(a.largeobject_id) })))
+            }
+
+            etapes.push({ ...superEtape, etape_documents, avis_documents })
           }
         }
 
diff --git a/packages/api/src/api/rest/titres.test.integration.ts b/packages/api/src/api/rest/titres.test.integration.ts
index d591f28a9..322865200 100644
--- a/packages/api/src/api/rest/titres.test.integration.ts
+++ b/packages/api/src/api/rest/titres.test.integration.ts
@@ -20,6 +20,7 @@ import { titreSlugValidator } from 'camino-common/src/validators/titres.js'
 import TitresDemarches from '../../database/models/titres-demarches.js'
 import TitresEtapes from '../../database/models/titres-etapes.js'
 import Titres from '../../database/models/titres.js'
+import { ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
 
 console.info = vi.fn()
 console.error = vi.fn()
@@ -49,7 +50,7 @@ beforeAll(async () => {
       {
         typeId: 'mfr',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2022-01-01'),
         ordre: 0,
         administrationsLocales: [ADMINISTRATION_IDS['DGTM - GUYANE']],
@@ -58,21 +59,21 @@ beforeAll(async () => {
       {
         typeId: 'mdp',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2022-02-01'),
         ordre: 1,
       },
       {
         typeId: 'pfd',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2022-02-10'),
         ordre: 2,
       },
       {
         typeId: 'mcp',
         statutId: 'com',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2022-03-10'),
         ordre: 3,
       },
@@ -85,7 +86,7 @@ beforeAll(async () => {
       {
         typeId: 'mfr',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2022-01-01'),
         ordre: 0,
         administrationsLocales: [ADMINISTRATION_IDS['DGTM - GUYANE']],
@@ -93,14 +94,14 @@ beforeAll(async () => {
       {
         typeId: 'mdp',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2022-02-01'),
         ordre: 1,
       },
       {
         typeId: 'pfd',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2022-02-10'),
         ordre: 2,
       },
@@ -493,6 +494,7 @@ describe('getTitre', () => {
             "description": null,
             "etapes": [
               {
+                "avis_documents": [],
                 "date": "2022-01-01",
                 "entreprises_documents": [],
                 "etape_documents": [],
@@ -518,6 +520,7 @@ describe('getTitre', () => {
                         "description": "",
                         "id": "mecanise",
                         "nom": "Prospection mécanisée",
+                        "optionnel": false,
                         "type": "radio",
                         "value": null,
                       },
diff --git a/packages/api/src/business/processes/titres-demarches-depot-create.test.ts b/packages/api/src/business/processes/titres-demarches-depot-create.test.ts
index 9ac9a44fb..2359912a0 100644
--- a/packages/api/src/business/processes/titres-demarches-depot-create.test.ts
+++ b/packages/api/src/business/processes/titres-demarches-depot-create.test.ts
@@ -1,3 +1,4 @@
+import { ETAPE_IS_NOT_BROUILLON, ETAPE_IS_BROUILLON } from 'camino-common/src/etape.js'
 import type { ITitre, ITitreEtape, ITitreDemarche } from '../../types.js'
 import { titreDemarcheDepotCheck } from './titres-demarches-depot-create.js'
 
@@ -5,14 +6,14 @@ import { describe, expect, test } from 'vitest'
 
 describe('créer le dépot de la démarche', () => {
   test.each<[string, ITitreEtape[], boolean]>([
-    ['crée un dépot d’une ARM avec une demande faite', [{ date: '2021-01-01', typeId: 'mfr', statutId: 'fai', isBrouillon: false }] as ITitreEtape[], true],
-    ['ne crée pas un dépot d’une ARM si sa demande est en construction', [{ date: '2021-01-01', typeId: 'mfr', statutId: 'fai', isBrouillon: true }] as ITitreEtape[], false],
-    ['ne crée pas un dépot d’une ARM si sa demande est historique', [{ date: '2018-01-01', typeId: 'mfr', statutId: 'fai', isBrouillon: false }] as ITitreEtape[], false],
+    ['crée un dépot d’une ARM avec une demande faite', [{ date: '2021-01-01', typeId: 'mfr', statutId: 'fai', isBrouillon: ETAPE_IS_NOT_BROUILLON }] as ITitreEtape[], true],
+    ['ne crée pas un dépot d’une ARM si sa demande est en construction', [{ date: '2021-01-01', typeId: 'mfr', statutId: 'fai', isBrouillon: ETAPE_IS_BROUILLON }] as ITitreEtape[], false],
+    ['ne crée pas un dépot d’une ARM si sa demande est historique', [{ date: '2018-01-01', typeId: 'mfr', statutId: 'fai', isBrouillon: ETAPE_IS_NOT_BROUILLON }] as ITitreEtape[], false],
     [
       'ne crée pas un dépot d’une ARM si déjà déposée',
       [
-        { date: '2021-01-01', typeId: 'mfr', statutId: 'fai', isBrouillon: false },
-        { date: '2021-01-02', typeId: 'mdp', statutId: 'fai', isBrouillon: false },
+        { date: '2021-01-01', typeId: 'mfr', statutId: 'fai', isBrouillon: ETAPE_IS_NOT_BROUILLON },
+        { date: '2021-01-02', typeId: 'mdp', statutId: 'fai', isBrouillon: ETAPE_IS_NOT_BROUILLON },
       ] as ITitreEtape[],
       false,
     ],
diff --git a/packages/api/src/business/processes/titres-demarches-statut-ids-update.test.ts b/packages/api/src/business/processes/titres-demarches-statut-ids-update.test.ts
index 9de575130..d021c08e7 100644
--- a/packages/api/src/business/processes/titres-demarches-statut-ids-update.test.ts
+++ b/packages/api/src/business/processes/titres-demarches-statut-ids-update.test.ts
@@ -4,6 +4,7 @@ import { getDemarches } from './titres-etapes-heritage-contenu-update.queries.js
 import { newDemarcheId, newEtapeId, newTitreId } from '../../database/models/_format/id-create.js'
 import { toCaminoDate } from 'camino-common/src/date.js'
 import { Pool } from 'pg'
+import { ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
 
 vi.mock('./titres-etapes-heritage-contenu-update.queries', () => ({
   getDemarches: vi.fn().mockResolvedValue(true),
@@ -31,7 +32,7 @@ describe("statut des démarches d'un titre", () => {
             id: newEtapeId('h-cx-courdemanges-1988-oct01-dpu01'),
             typeId: 'dpu',
             statutId: 'acc',
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             ordre: 2,
             date: toCaminoDate('1988-03-11'),
             communes: [],
@@ -43,7 +44,7 @@ describe("statut des démarches d'un titre", () => {
             id: newEtapeId('h-cx-courdemanges-1988-oct01-dex01'),
             typeId: 'dex',
             statutId: 'acc',
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             ordre: 1,
             date: toCaminoDate('1988-03-06'),
             communes: [],
@@ -72,7 +73,7 @@ describe("statut des démarches d'un titre", () => {
             id: newEtapeId('h-cx-courdemanges-1988-oct01-dpu01'),
             typeId: 'dpu',
             statutId: 'acc',
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             ordre: 2,
             date: toCaminoDate('1988-03-11'),
             communes: [],
@@ -84,7 +85,7 @@ describe("statut des démarches d'un titre", () => {
             id: newEtapeId('h-cx-courdemanges-1988-oct01-dex01'),
             typeId: 'dex',
             statutId: 'acc',
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             ordre: 1,
             date: toCaminoDate('1988-03-06'),
             communes: [],
diff --git a/packages/api/src/business/processes/titres-etapes-administrations-locales-update.test.ts b/packages/api/src/business/processes/titres-etapes-administrations-locales-update.test.ts
index ad2f8e3fe..079e4464a 100644
--- a/packages/api/src/business/processes/titres-etapes-administrations-locales-update.test.ts
+++ b/packages/api/src/business/processes/titres-etapes-administrations-locales-update.test.ts
@@ -7,6 +7,7 @@ import { ADMINISTRATION_IDS } from 'camino-common/src/static/administrations.js'
 import { toCaminoDate } from 'camino-common/src/date.js'
 import { vi, describe, expect, test } from 'vitest'
 import { toCommuneId } from 'camino-common/src/static/communes.js'
+import { ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
 vi.mock('../../database/queries/titres-etapes', () => ({
   titresEtapesGet: vi.fn(),
 }))
@@ -35,7 +36,7 @@ describe("administrations d'une étape", () => {
         statutId: 'fai',
         date: toCaminoDate('2022-01-01'),
         typeId: 'dpu',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         communes: [
           {
             id: toCommuneId('97300'),
@@ -48,8 +49,8 @@ describe("administrations d'une étape", () => {
         titreDemarcheId: newDemarcheId(),
         statutId: 'fai',
         date: toCaminoDate('2022-01-01'),
-        typeId: 'aac',
-        isBrouillon: false,
+        typeId: 'asc',
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         communes: [
           {
             id: toCommuneId('87000'),
@@ -72,7 +73,7 @@ describe("administrations d'une étape", () => {
         titreDemarcheId: newDemarcheId('h-cx-courdemanges-1988-oct01'),
         typeId: 'dpu',
         statutId: 'acc',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         ordre: 2,
         date: toCaminoDate('1988-03-11'),
         communes: [
@@ -96,7 +97,7 @@ describe("administrations d'une étape", () => {
         titreDemarcheId: newDemarcheId('h-cx-courdemanges-1988-oct01'),
         typeId: 'dpu',
         statutId: 'acc',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         ordre: 2,
         date: toCaminoDate('1988-03-11'),
         communes: [],
@@ -114,7 +115,7 @@ describe("administrations d'une étape", () => {
       id: newEtapeId('h-cx-courdemanges-1988-oct01-dpu01'),
       titreDemarcheId: newDemarcheId(),
       statutId: 'fai',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       date: toCaminoDate('2022-01-01'),
       typeId: 'dpu',
       communes: [],
@@ -131,7 +132,7 @@ describe("administrations d'une étape", () => {
   test("supprime une administration si l'étape ne la contient plus dans ses communes", async () => {
     const titreEtape: ITitreEtape = {
       statutId: 'fai',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       date: toCaminoDate('2022-01-01'),
       id: newEtapeId('h-cx-courdemanges-1988-oct01-dpu01'),
       titreDemarcheId: newDemarcheId('h-cx-courdemanges-1988-oct01'),
diff --git a/packages/api/src/business/processes/titres-etapes-areas-update.test.integration.ts b/packages/api/src/business/processes/titres-etapes-areas-update.test.integration.ts
index f5f575c44..02d263ef1 100644
--- a/packages/api/src/business/processes/titres-etapes-areas-update.test.integration.ts
+++ b/packages/api/src/business/processes/titres-etapes-areas-update.test.integration.ts
@@ -16,6 +16,7 @@ import { insertCommune } from '../../database/queries/communes.queries.js'
 import { Pool } from 'pg'
 import { titreSlugValidator } from 'camino-common/src/validators/titres.js'
 import { FeatureMultiPolygon } from 'camino-common/src/perimetre.js'
+import { ETAPE_IS_BROUILLON } from 'camino-common/src/etape.js'
 
 console.info = vi.fn()
 console.error = vi.fn()
@@ -97,7 +98,7 @@ describe('titresEtapesAreasUpdate', () => {
         date: toCaminoDate('2022-03-09'),
         typeId: 'mfr',
         statutId: 'fai',
-        isBrouillon: true,
+        isBrouillon: ETAPE_IS_BROUILLON,
         titreDemarcheId,
         archive: false,
         sdomZones: [SDOMZoneIds.Zone2],
diff --git a/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.queries.ts b/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.queries.ts
index 90fdbddef..556b516a7 100644
--- a/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.queries.ts
+++ b/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.queries.ts
@@ -10,12 +10,13 @@ import { etapeStatutIdValidator } from 'camino-common/src/static/etapesStatuts.j
 import { TitreTypeId, titreTypeIdValidator } from 'camino-common/src/static/titresTypes.js'
 import { etapeTypeIdValidator } from 'camino-common/src/static/etapesTypes.js'
 import { TitreId, titreIdValidator } from 'camino-common/src/validators/titres.js'
-import { etapeIdValidator } from 'camino-common/src/etape.js'
+import { etapeBrouillonValidator, etapeIdValidator } from 'camino-common/src/etape.js'
 import { z } from 'zod'
 import { Pool } from 'pg'
 import { communeValidator } from 'camino-common/src/static/communes.js'
 import { TitreEtapeForMachine } from '../rules-demarches/machine-common.js'
 import { isNotNullNorUndefined } from 'camino-common/src/typescript-tools.js'
+import { km2Validator } from 'camino-common/src/number.js'
 
 const getEtapesByDemarcheValidator = z.object({
   contenu: z.any().nullable(),
@@ -30,9 +31,9 @@ const getEtapesByDemarcheValidator = z.object({
   titre_id: titreIdValidator,
   titre_type_id: titreTypeIdValidator,
   communes: z.array(communeValidator.pick({ id: true })).nullable(),
-  surface: z.number().nullable(),
+  surface: km2Validator.nullable(),
   type_id: etapeTypeIdValidator.nullable(),
-  is_brouillon: z.boolean().nullable(),
+  is_brouillon: etapeBrouillonValidator.nullable(),
 })
 
 export const getDemarches = async (
diff --git a/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.ts b/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.ts
index bdac7e256..cc596e0a2 100644
--- a/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.ts
+++ b/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.ts
@@ -4,7 +4,7 @@ import { titreEtapeHeritageContenuFind } from '../utils/titre-etape-heritage-con
 import { titreEtapesSortAscByOrdre, titreEtapesSortDescByOrdre } from '../utils/titre-etapes-sort.js'
 import { UserNotNull } from 'camino-common/src/roles.js'
 import { getSections, Section } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.js'
-import { DeepReadonly } from 'camino-common/src/typescript-tools.js'
+import { DeepReadonly, isNotNullNorUndefinedNorEmpty } from 'camino-common/src/typescript-tools.js'
 import { DemarcheId } from 'camino-common/src/demarche.js'
 import { Pool } from 'pg'
 import { getDemarches } from './titres-etapes-heritage-contenu-update.queries.js'
@@ -32,7 +32,7 @@ export const titresEtapesHeritageContenuUpdate = async (pool: Pool, user: UserNo
       }, {})
       const titreEtapes = titreEtapesSortAscByOrdre(titreDemarche.etapes?.filter(e => etapeSectionsDictionary[e.id]) ?? [])
 
-      if (titreEtapes) {
+      if (isNotNullNorUndefinedNorEmpty(titreEtapes)) {
         for (let index = 0; index < titreEtapes.length; index++) {
           const titreEtape = titreEtapes[index]
           const titreEtapesFiltered = titreEtapesSortDescByOrdre(titreEtapes.slice(0, index))
diff --git a/packages/api/src/business/processes/titres-etapes-ordre-update.test.ts b/packages/api/src/business/processes/titres-etapes-ordre-update.test.ts
index 276db6080..07f22b9ff 100644
--- a/packages/api/src/business/processes/titres-etapes-ordre-update.test.ts
+++ b/packages/api/src/business/processes/titres-etapes-ordre-update.test.ts
@@ -10,6 +10,8 @@ import { DemarcheTypeId } from 'camino-common/src/static/demarchesTypes.js'
 import { TitreTypeId } from 'camino-common/src/static/titresTypes.js'
 import { TitreId, titreIdValidator } from 'camino-common/src/validators/titres.js'
 import { TitreEtapeForMachine } from '../rules-demarches/machine-common.js'
+import { ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
+import { ZERO_KM2 } from 'camino-common/src/number.js'
 vi.mock('../../database/queries/titres-etapes', () => ({
   titreEtapeUpdate: vi.fn().mockResolvedValue(true),
 }))
@@ -30,8 +32,26 @@ const titresDemarchesEtapes: {
     titreTypeId: 'apc',
     titreId: titreIdValidator.parse('titreId'),
     etapes: [
-      { id: newEtapeId(), ordre: 1, date: caminoDateValidator.parse('1988-03-06'), typeId: 'aac', statutId: 'acc', isBrouillon: false, surface: 0, communes: null },
-      { id: newEtapeId(), ordre: 1, date: caminoDateValidator.parse('1988-03-08'), typeId: 'aac', statutId: 'acc', isBrouillon: false, surface: 0, communes: null },
+      {
+        id: newEtapeId(),
+        ordre: 1,
+        date: caminoDateValidator.parse('1988-03-06'),
+        typeId: 'asc',
+        statutId: 'fai',
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
+        surface: ZERO_KM2,
+        communes: null,
+      },
+      {
+        id: newEtapeId(),
+        ordre: 1,
+        date: caminoDateValidator.parse('1988-03-08'),
+        typeId: 'asc',
+        statutId: 'fai',
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
+        surface: ZERO_KM2,
+        communes: null,
+      },
     ],
   },
 }
diff --git a/packages/api/src/business/processes/titres-phases-update.test.ts b/packages/api/src/business/processes/titres-phases-update.test.ts
index 3d4678445..c4d81924b 100644
--- a/packages/api/src/business/processes/titres-phases-update.test.ts
+++ b/packages/api/src/business/processes/titres-phases-update.test.ts
@@ -6,6 +6,7 @@ import { ITitre } from '../../types.js'
 import { newDemarcheId, newEtapeId, newTitreId } from '../../database/models/_format/id-create.js'
 import { Pool } from 'pg'
 import { updateDatesDemarche } from './titres-phases-update.queries.js'
+import { ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
 
 vi.mock('../../database/queries/titres', () => ({
   titresGet: vi.fn(),
@@ -51,7 +52,7 @@ describe("phases d'un titre", () => {
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1988-oct01'),
                 typeId: 'dpu',
                 statutId: 'acc',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 ordre: 2,
                 date: toCaminoDate('2200-01-01'),
                 dateFin: toCaminoDate('2500-01-01'),
@@ -61,7 +62,7 @@ describe("phases d'un titre", () => {
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1988-oct01'),
                 typeId: 'dex',
                 statutId: 'acc',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 ordre: 1,
                 date: toCaminoDate('2200-01-01'),
                 dateFin: toCaminoDate('2500-01-01'),
@@ -101,7 +102,7 @@ describe("phases d'un titre", () => {
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1988-oct01'),
                 typeId: 'dpu',
                 statutId: 'acc',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 ordre: 2,
                 date: toCaminoDate('2200-01-01'),
                 dateFin: toCaminoDate('2500-01-01'),
@@ -111,7 +112,7 @@ describe("phases d'un titre", () => {
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1988-oct01'),
                 typeId: 'dex',
                 statutId: 'acc',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 ordre: 1,
                 date: toCaminoDate('2200-01-01'),
                 dateFin: toCaminoDate('2500-01-01'),
@@ -179,7 +180,7 @@ describe("phases d'un titre", () => {
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1988-oct01'),
                 typeId: 'dpu',
                 statutId: 'acc',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 ordre: 2,
                 date: toCaminoDate('2200-01-01'),
                 dateFin: toCaminoDate('2500-01-01'),
@@ -189,7 +190,7 @@ describe("phases d'un titre", () => {
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1988-oct01'),
                 typeId: 'dex',
                 statutId: 'acc',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 ordre: 1,
                 date: toCaminoDate('2200-01-01'),
                 dateFin: toCaminoDate('2500-01-01'),
diff --git a/packages/api/src/business/rules-demarches/arm/__snapshots__/oct.machine.test.ts.snap b/packages/api/src/business/rules-demarches/arm/__snapshots__/oct.machine.test.ts.snap
index 649f4b115..d2a5a3a8d 100644
--- a/packages/api/src/business/rules-demarches/arm/__snapshots__/oct.machine.test.ts.snap
+++ b/packages/api/src/business/rules-demarches/arm/__snapshots__/oct.machine.test.ts.snap
@@ -6,7 +6,7 @@ exports[`vérifie l’arbre d’octroi d’ARM > ne peut pas créer deux "des" 1
 
 exports[`vérifie l’arbre d’octroi d’ARM > ne peut pas créer une "css" après une "des" 1`] = `[Error: Error: cannot execute step: '{"etapeTypeId":"css","etapeStatutId":"fai","date":"2020-01-05"}' after '["mfr_fai","mdp_fai","des_fai"]'. The event {"type":"CLASSER_SANS_SUITE"} should be one of 'VALIDER_FRAIS_DE_DOSSIER']`;
 
-exports[`vérifie l’arbre d’octroi d’ARM > ne peut pas créer une "mno" après la "aca" si le titre n’est pas mécanisé 1`] = `[Error: Error: cannot execute step: '{"etapeTypeId":"mnb","etapeStatutId":"fai","date":"2020-01-04"}' after '["mfr_fai","mdp_fai","pfd_fai","mcp_com","vfd_fai","mcr_fav","eof_fai","aof_fav","sca_fai","aca_fav"]'. The event {"type":"NOTIFIER_DEMANDEUR_AVIS_FAVORABLE_CARM"} should be one of 'CLASSER_SANS_SUITE,DESISTER_PAR_LE_DEMANDEUR,SIGNER_AUTORISATION_DE_RECHERCHE_MINIERE']`;
+exports[`vérifie l’arbre d’octroi d’ARM > ne peut pas créer une "mno" après la "aca" si le titre n’est pas mécanisé 1`] = `[Error: Error: cannot execute step: '{"etapeTypeId":"mnb","etapeStatutId":"fai","date":"2020-01-04"}' after '["mfr_fai","mdp_fai","pfd_fai","mcp_com","vfd_fai","mcr_fav","asc_fai","sca_fai","aca_fav"]'. The event {"type":"NOTIFIER_DEMANDEUR_AVIS_FAVORABLE_CARM"} should be one of 'CLASSER_SANS_SUITE,DESISTER_PAR_LE_DEMANDEUR,SIGNER_AUTORISATION_DE_RECHERCHE_MINIERE']`;
 
 exports[`vérifie l’arbre d’octroi d’ARM > ne peut pas créer une étape "{ etapeTypeId: 'mcb', etapeStatutId: 'fai', date: '2020-01-01' }" si il n’existe pas d’autres étapes 1`] = `[Error: Error: cannot execute step: '{"etapeTypeId":"mcb","etapeStatutId":"fai","date":"2020-01-01"}' after '[]'. The event {"type":"DEMANDER_COMPLEMENTS_RDE"} should be one of 'ACCEPTER_RDE,DEMANDER_MODIFICATION_DE_LA_DEMANDE,EXEMPTER_DAE,FAIRE_DEMANDE,PAYER_FRAIS_DE_DOSSIER,REFUSER_RDE']`;
 
diff --git a/packages/api/src/business/rules-demarches/arm/oct.cas.json b/packages/api/src/business/rules-demarches/arm/oct.cas.json
index 9d2ed22d3..413f40a3e 100644
--- a/packages/api/src/business/rules-demarches/arm/oct.cas.json
+++ b/packages/api/src/business/rules-demarches/arm/oct.cas.json
@@ -1 +1 @@
-[{"id":0,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2022-11-13","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-11-22","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-11-29","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2022-11-29","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-12-01","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-12-19","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-12-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-12-19","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2023-02-03","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2023-03-10","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2023-03-19","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-03-19","etapeTypeId":"aca","etapeStatutId":"fav"}]},{"id":1,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2022-09-15","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-09-27","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-09-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-09-27","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-09-28","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-10-19","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2022-11-16","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-11-16","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-01-24","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":2,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2022-09-01","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-09-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-10-14","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":12}}},{"date":"2022-10-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-11-04","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-11-10","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-11-10","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-11-10","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-12-04","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":12}}},{"date":"2022-12-10","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2022-12-17","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-12-17","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-12-29","etapeTypeId":"mnb","etapeStatutId":"fai"}]},{"id":3,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-11-02","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-11-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-11-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-11-13","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-11-13","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-11-19","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-11-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-20","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-11-24","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":5}}},{"date":"2022-01-28","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2022-02-05","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-02-05","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-03-02","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-03-02","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-03-02","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-03-05","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2022-07-06","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":4,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-01-15","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-02-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-02-18","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":3}}},{"date":"2022-02-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-04","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-03-04","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-03-04","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-03-10","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":3}}},{"date":"2022-03-11","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-04-30","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2022-05-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-06-04","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-07-04","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-08-05","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-08-05","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-09-22","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":5,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2022-03-31","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-03-31","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-06-15","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":6,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-12","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-08-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-08-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-08-16","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-08-20","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-09-02","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-09-02","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-09-04","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-10-02","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-11-14","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-11-20","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-11-20","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-12-03","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-01-20","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-01-20","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-02-07","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":7,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-03-03","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-03-05","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-03-23","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":13}}},{"date":"2020-04-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-04-21","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-04-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-04-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-27","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-06-01","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":13}}},{"date":"2020-08-27","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-08-28","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-09-02","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-09","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-09-15","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-09-15","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-09-18","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":8,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-06-19","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2020-06-20","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-27","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-07-10","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":9}}},{"date":"2020-07-11","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-11","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-21","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-07-21","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-08-15","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-20","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-08-27","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-10-17","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-10-17","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-11-26","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":9,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-10-08","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-10-08","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-10-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-10-23","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-11-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-11-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-11","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-12-25","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-12-26","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-01-16","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-01-24","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-01-25","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":10,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-07-10","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":6}}},{"date":"2021-07-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-07-11","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-11","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-07-11","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-07-18","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-07-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-20","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-11-22","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-12-10","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"franchissements":6}}},{"date":"2021-12-17","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":7}}},{"date":"2022-01-17","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-01-25","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-01-25","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":11,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-03-21","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-05-16","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":3}}},{"date":"2020-05-20","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-05-20","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-05-27","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-06-09","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-06-09","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-18","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-06-18","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-07-10","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":3}}},{"date":"2020-08-01","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-16","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-17","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-09-25","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-09-25","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-09-30","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":12,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-19","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-06-28","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":11}}},{"date":"2020-06-28","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-07-09","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-07-09","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-07-23","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":11}}},{"date":"2020-07-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-30","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-07-30","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-08-24","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-05","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-09-20","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-09-20","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-09-25","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":13,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-14","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-01-24","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-02-24","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2021-02-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-03-08","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-03-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-03-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-03-14","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-04-13","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-04-18","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2021-04-24","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2021-04-26","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-26","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-05-15","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-06-08","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-06-08","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-06-09","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":14,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-23","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-08-08","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-08-29","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-09-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-09-03","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-10-14","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2020-10-17","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2020-10-24","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-10-24","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-10-24","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":4}}},{"date":"2020-10-24","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-10-24","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-12-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-12-18","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-12-31","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-01-19","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-01-19","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-02-07","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":15,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-01-02","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":7}}},{"date":"2020-01-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-01-26","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-01-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-01-31","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-02-13","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-02-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-02-21","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-02-21","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-04-27","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":7}}},{"date":"2020-05-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-20","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-06-11","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-08-06","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-08-06","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-08-28","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":16,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-20","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-08-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2020-08-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-10-12","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-10-17","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-10-18","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-10-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-10-18","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-10-18","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2020-10-26","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2020-12-20","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-12-20","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-01-02","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-03-05","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-03-05","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-04-03","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":17,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-04-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-05-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":7}}},{"date":"2020-05-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-05-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-05-17","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-05-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-05-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-05","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-06-05","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-06-11","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":7}}},{"date":"2020-07-19","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-07-24","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-04","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-09-12","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-09-12","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-09-17","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":18,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-06-04","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-06-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-25","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-06-25","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-29","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-07-24","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-24","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-31","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-09-30","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-02-01","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":14}}},{"date":"2021-04-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-07","etapeTypeId":"aca","etapeStatutId":"ajo"},{"date":"2021-04-13","etapeTypeId":"mna","etapeStatutId":"fai"},{"date":"2021-12-02","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-12-02","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":19,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2019-10-31","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2019-11-05","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-03-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-03-12","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-03-18","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-03-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-03-31","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-04-05","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2020-05-31","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-06-02","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-06-24","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":20,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2019-11-19","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2019-12-03","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2019-12-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-12-14","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2019-12-18","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2019-12-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2019-12-19","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-03-26","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-03-31","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2020-04-01","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-04-02","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-04-11","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":21,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-04-30","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-04-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-04-30","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-05-15","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-05-16","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-05-16","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-05-25","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-08-31","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-09-01","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-09-06","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-13","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":22,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-09-18","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2019-10-02","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-02-24","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-02-24","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-03-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-03-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-03-26","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-03-26","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-04-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-06","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-05-29","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-05-29","etapeTypeId":"mns","etapeStatutId":"fai"}]},{"id":23,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-09-10","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-09-10","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-09-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-09-24","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-09-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-09-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-09-28","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-10-14","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2020-12-16","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-12-16","etapeTypeId":"aca","etapeStatutId":"ajo"},{"date":"2020-12-29","etapeTypeId":"mna","etapeStatutId":"fai"},{"date":"2021-03-03","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":24,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-09-10","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-09-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false,"franchissements":0}}},{"date":"2020-09-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-10-02","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-10-05","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-10-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-10-26","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-12-07","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2020-12-13","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-12-13","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-12-26","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":25,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-09-06","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false,"franchissements":0}}},{"date":"2020-09-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-09-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-10-11","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-10-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-10-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-10-14","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-12-02","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2020-12-08","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-12-08","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-12-21","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":26,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-19","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-05-29","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-29","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-05-29","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-03","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-03","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-04","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-07-11","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-09-22","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-09-23","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-09-23","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-10-14","etapeTypeId":"sco","etapeStatutId":"fai"}]},{"id":27,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-11-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false,"franchissements":0}}},{"date":"2020-11-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-11-03","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-11-04","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-11-13","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-11-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-02","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-02-18","etapeTypeId":"edm","etapeStatutId":"def"},{"date":"2021-02-18","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-04-01","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-03","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":28,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-19","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-06-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-19","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-06-19","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-05","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-07-19","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-09-30","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-10-01","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-10-01","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-10-22","etapeTypeId":"sco","etapeStatutId":"fai"}]},{"id":29,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-09-18","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":19}}},{"date":"2019-10-06","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2019-11-15","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2019-11-16","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-11-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2019-11-29","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2019-11-29","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2019-11-29","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":19}}},{"date":"2019-11-29","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2019-11-29","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-04-29","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-08","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-05-13","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-05-17","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-05-17","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-08-12","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":30,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-01-06","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false,"franchissements":0}}},{"date":"2021-01-07","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-01-26","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-05","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-02-05","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-02-23","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-04-28","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-05-01","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-05-06","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2021-05-21","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":31,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-12-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2019-12-30","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":18}}},{"date":"2020-01-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-01-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-01-23","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2020-02-04","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-02-05","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-02-12","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":18}}},{"date":"2020-02-27","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":18}}},{"date":"2020-03-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-03-19","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-04-02","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-05-12","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-12","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-05-17","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-06-16","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-06-16","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-08-19","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":32,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-06-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":10}}},{"date":"2021-06-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-19","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-19","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-25","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-07-05","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-09-16","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":17}}},{"date":"2021-10-18","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-10-25","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-10-25","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-11-01","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-12-02","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-12-02","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-12-02","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2022-04-16","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2022-04-16","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":33,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2020-05-14","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":10}}},{"date":"2020-05-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-19","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":10}}},{"date":"2020-06-20","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-07-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-07-17","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-08-14","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":34,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-06-21","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":12}}},{"date":"2021-06-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-21","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-27","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-07-07","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-09-21","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":17}}},{"date":"2021-10-20","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-10-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-10-27","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-11-03","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-11-21","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-11-21","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-12-04","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2022-04-18","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2022-04-18","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":35,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-11-04","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2019-11-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-11-05","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2019-11-18","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2019-11-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2019-11-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2019-11-30","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2019-11-30","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-05-13","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-27","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-06-10","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":36,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-01-06","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false,"franchissements":0}}},{"date":"2021-01-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-01-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-29","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-12","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-03-01","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-03-17","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-04-09","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-04-14","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-14","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-05-10","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-05-10","etapeTypeId":"mns","etapeStatutId":"fai"}]},{"id":37,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-08-15","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-12-28","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-01-08","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":0}}},{"date":"2021-01-09","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-24","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-01-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-01-29","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-02-07","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-02-26","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-03-06","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-04-06","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-11","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-04-16","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-05-08","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-05-08","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-05-08","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":38,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-11-18","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-11-18","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-11-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-11-19","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-01-13","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-01-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-01-14","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-03-06","etapeTypeId":"edm","etapeStatutId":"def"},{"date":"2021-03-09","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-04-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-18","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":39,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-17","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-06-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-06-17","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-03","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-07-17","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-09-28","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-09-29","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-09-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-10-20","etapeTypeId":"sco","etapeStatutId":"fai"}]},{"id":40,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-09-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-09-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-09-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-09-29","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-10-05","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-10-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-10-24","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-03-08","etapeTypeId":"edm","etapeStatutId":"def"},{"date":"2021-03-11","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-04-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-20","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":41,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-12-25","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":5}}},{"date":"2020-12-29","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-01-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-01-25","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-26","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-01-30","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-01-31","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-02-22","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-02-22","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-02-27","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-03-27","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"franchissements":5}}},{"date":"2021-10-26","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":5}}},{"date":"2021-10-27","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-03-02","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-03-02","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":42,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-12-15","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-12-23","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":5}}},{"date":"2020-12-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-01-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-12","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-16","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-16","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-02-16","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-03-06","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-03-29","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-07-27","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":5}}},{"date":"2021-09-25","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-09-26","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-09-26","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2021-10-12","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":43,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-07-07","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2021-07-07","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-07-07","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-07-07","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-07-16","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-07-16","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-24","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-12-02","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":4}}},{"date":"2022-02-04","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-02-12","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-02-12","etapeTypeId":"aca","etapeStatutId":"ajo"},{"date":"2022-02-25","etapeTypeId":"mna","etapeStatutId":"fai"},{"date":"2022-03-17","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-03-17","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2022-04-01","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":44,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-11-11","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-11-17","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2020-11-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-01-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-02-10","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-20","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":9}}},{"date":"2021-02-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-03-04","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-04-21","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-04-24","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-05-18","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-06-10","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-06-10","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-06-10","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":45,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-10-21","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-10-21","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-10-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-11-05","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-11-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-11-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-01-01","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-01-07","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-01-08","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-01-29","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-01-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-02-07","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":46,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-06-02","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-06-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":12}}},{"date":"2021-06-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-11","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-03","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-07-08","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-07-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-11","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-02-05","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":12}}},{"date":"2022-02-06","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-03-04","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-03-04","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2022-03-20","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":47,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-11-27","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-11-27","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-11-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-11-28","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-12-08","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-12-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-01-03","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-03-14","etapeTypeId":"edm","etapeStatutId":"def"},{"date":"2021-03-18","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-04-25","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-27","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":48,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-02-05","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-02-19","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2021-02-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-02-19","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-02-26","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-03-08","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-03-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-03-14","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-04-26","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-07-21","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":9}}},{"date":"2021-09-18","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-09-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-09-18","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2021-10-08","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":49,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-02-16","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-02-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-02-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-02-25","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-03-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-03-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-17","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-04-17","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-05-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-27","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-06-19","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":50,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-03-12","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-03-20","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2020-03-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-03-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-03-28","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-04-23","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-04-23","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-23","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-04-23","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-05-14","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":9}}},{"date":"2020-07-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-01","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-08-23","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-08-24","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-08-24","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-08-28","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":51,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":11}}},{"date":"2020-08-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-10-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-10-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-10-17","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-11-06","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-11-06","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-11-12","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":11}}},{"date":"2020-12-11","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-12-17","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-12-18","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-01-08","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-01-08","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-01-16","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-01-27","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-01-27","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-02-27","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":52,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2018-09-01","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2019-12-31","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-01-01","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-01-01","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-01-08","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-02-25","etapeTypeId":"mod","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-03-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-03-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-05-04","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-05-04","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-05-04","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-07","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-05-12","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-07-10","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":53,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-04-19","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":3}}},{"date":"2020-05-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-06-02","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-17","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-06-20","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-06-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-22","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-08-11","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":3}}},{"date":"2020-09-28","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-09-28","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2020-10-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-11-01","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-11-15","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":54,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-04-16","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-04-18","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-04-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-05-16","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-06-02","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-06-02","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-06","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-06-06","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2020-07-25","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-05","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-08-05","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":55,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-07-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-07-25","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-07-29","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-08-01","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-08-12","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-08-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-09-13","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-09-25","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-10-02","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2020-10-29","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-11-08","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-11-12","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":56,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-07-19","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":1}}},{"date":"2021-07-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-07-20","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-20","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-07-20","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-07-21","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-09-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-09-08","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-12-05","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":1}}},{"date":"2021-12-12","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-02-03","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-02-03","etapeTypeId":"aca","etapeStatutId":"ajo"},{"date":"2022-02-15","etapeTypeId":"mna","etapeStatutId":"fai"},{"date":"2022-03-08","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-03-08","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-03-23","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-04-18","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-04-18","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-04-18","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":57,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2019-10-23","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2019-10-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2019-11-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-11-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2019-11-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2019-11-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-16","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-04-16","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2020-05-22","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-22","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-05-27","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":58,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-09-25","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-09-28","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-09-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-10-08","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-10-18","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-10-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-11-06","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-11-07","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2020-11-15","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-11-20","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-12-17","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":59,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-09","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-05-23","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-05-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-23","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-05-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-05-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-03","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-06-17","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-08-29","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-08-30","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-08-30","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-09-18","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":60,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-06-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-06-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-27","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-07-15","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-15","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-15","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-07-15","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2020-08-01","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-10","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-08-16","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":61,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-11-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-11-17","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-11-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-01","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-12-04","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-12-04","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-22","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-01-06","etapeTypeId":"edm","etapeStatutId":"def"},{"date":"2021-01-11","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-01-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-02-04","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-03-11","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":62,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-06-04","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-06-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":10}}},{"date":"2020-06-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-21","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-07-04","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":10}}},{"date":"2020-07-05","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-15","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-07-15","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-08-09","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-14","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-08-21","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-10-14","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":63,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-06-14","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-07-14","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":10}}},{"date":"2020-11-17","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":10}}},{"date":"2020-11-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-11-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-11-18","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-11-29","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-11-29","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-07","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-12-14","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-12-19","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-01-04","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-01-04","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-01-13","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-02-22","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":64,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-03-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-03-10","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":7}}},{"date":"2020-03-13","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-03-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-03-18","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-04-13","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-04-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-13","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-04-13","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-05-12","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":7}}},{"date":"2020-07-17","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-07-22","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-08-13","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-08-14","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-08-14","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-08-18","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":65,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-04-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-04-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-04-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-04-28","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-05-11","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-05-11","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-05-11","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-05-11","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2020-08-14","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-19","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-08-26","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":66,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2019-10-20","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":10}}},{"date":"2019-11-20","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2019-11-24","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2019-11-25","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-12-08","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2019-12-11","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2019-12-12","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":10}}},{"date":"2019-12-15","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-01-12","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-03-03","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-03-08","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2020-03-09","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-03-10","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-03-19","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":67,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-11-23","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":12}}},{"date":"2020-11-30","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-12-02","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-24","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-02-01","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-09","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-09","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-02-09","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-03-07","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-03-28","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-04-06","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"franchissements":12}}},{"date":"2021-07-28","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":12}}},{"date":"2021-09-27","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-09-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-09-27","etapeTypeId":"aca","etapeStatutId":"ajo"},{"date":"2021-10-16","etapeTypeId":"mna","etapeStatutId":"fai"},{"date":"2021-12-15","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-12-15","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":68,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-08-18","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-09-08","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2020-09-08","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-09-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-10-24","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-11-22","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-11-22","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-11-28","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-01-03","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-03-29","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-05-03","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"franchissements":9}}},{"date":"2021-05-10","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-05-11","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":9}}},{"date":"2021-05-17","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-05-17","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-08-22","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-08-22","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-08-22","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-08-22","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-12-22","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":69,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-02-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-03-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-03-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-03-13","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-03-19","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-03-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-03-20","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-04-20","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-04-24","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2021-04-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-05-02","etapeTypeId":"aca","etapeStatutId":"ajo"},{"date":"2021-05-21","etapeTypeId":"mna","etapeStatutId":"fai"},{"date":"2021-09-11","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-09-11","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-09-28","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-09-28","etapeTypeId":"mns","etapeStatutId":"fai"},{"date":"2021-12-30","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-12-31","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":70,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2020-07-11","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-07-17","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2020-07-18","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-07-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-07-31","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-08-02","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":9}}},{"date":"2020-09-11","etapeTypeId":"des","etapeStatutId":"fai"},{"date":"2020-11-08","etapeTypeId":"vfd","etapeStatutId":"fai"}]},{"id":71,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-10-06","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-10-06","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-10-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-10-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-11-12","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-11-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-11-17","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-12-23","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-12-24","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-01-14","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-01-14","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-01-23","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":72,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-07-10","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2021-07-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-07-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-10","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-07-10","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-07-15","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-07-15","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-17","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-08-31","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":9}}},{"date":"2021-10-02","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-10-09","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-10-09","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-10-16","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-11-09","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-11-09","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-11-16","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2022-03-31","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2022-03-31","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":73,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":14}}},{"date":"2020-12-03","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-12-08","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-12-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-14","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-12-31","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-01-04","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-01-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-01-27","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-01-27","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-02-19","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":14}}},{"date":"2021-03-23","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2021-04-02","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-09","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-04-14","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-06-02","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-06-02","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-06-02","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-10-05","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":74,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2021-10-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-27","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-10-30","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-10-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-11-02","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-11-21","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-11-21","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-21","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-03-16","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":75,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-10-07","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-10-14","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2021-10-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-19","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-10-22","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-10-22","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-10-22","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-11-29","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":4}}},{"date":"2021-12-06","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2022-01-28","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-01-28","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-02-22","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-02-22","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-03-11","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-03-11","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2022-06-15","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":76,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2021-12-18","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-12-18","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-12-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-12-19","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-12-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-12-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-01-08","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-03-28","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":77,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-08-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2021-08-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-08-14","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-08-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-08-14","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-08-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-08-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-08-14","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-09-27","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-12-29","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":4}}},{"date":"2022-04-30","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-05-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-06-04","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2022-07-04","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":78,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2021-08-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-08-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-09-01","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":10}}},{"date":"2021-09-01","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-09-01","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-09-02","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-09-06","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-09-07","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-03-03","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":79,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-09-25","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-10-02","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":7}}},{"date":"2021-10-02","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-02","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-10-28","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":7}}},{"date":"2021-12-01","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-12-01","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-12-01","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-12-16","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-12-17","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-12-17","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-12-29","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-01-14","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-01-28","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-01-28","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":80,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-10-20","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-11-05","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-11-10","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":13}}},{"date":"2021-11-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-11-18","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-11-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-11-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-27","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-12-10","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2022-01-25","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"franchissements":13}}},{"date":"2022-01-28","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":14}}},{"date":"2022-02-04","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2022-02-12","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-02-12","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-03-09","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-03-09","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-03-31","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-03-31","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":81,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-11-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-12-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-12-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-12-05","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-12-12","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-12-14","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":9}}},{"date":"2021-12-21","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-12-21","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-01-04","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-02-01","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-02-09","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-02-09","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":82,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-08-24","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-11-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-30","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-10-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-31","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-11-21","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2021-11-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-11-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-28","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-12-11","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-12-12","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-12-12","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-12-24","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-01-10","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-01-27","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-01-27","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2022-08-12","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":83,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2021-12-16","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-12-21","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-12-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-12-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-01-10","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-01-17","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-01-17","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-01-17","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-05-08","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":84,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-09-09","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-09-09","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-09-10","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-09-10","etapeTypeId":"mcp","etapeStatutId":"inc"},{"date":"2021-09-10","etapeTypeId":"mcm","etapeStatutId":"fai"},{"date":"2021-09-17","etapeTypeId":"rcm","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-09-17","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-09-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-09-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-09-28","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-11-29","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2022-01-21","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-01-21","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-02-03","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":85,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-05-23","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-08-15","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-08-16","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-08-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-08-28","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-09-12","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-09-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-09-30","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-10-16","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2020-11-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-11-12","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-12-10","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-02-24","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":86,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-07-13","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-07-21","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":5}}},{"date":"2021-07-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-07-22","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-07-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-07-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-26","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-11-29","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":5}}},{"date":"2022-02-02","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2022-02-10","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-02-10","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-03-07","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-03-07","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-03-30","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-03-30","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":87,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-15","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{}}},{"date":"2021-05-15","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-05-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-05-29","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-05-29","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-02","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-06-20","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-06-30","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-06-30","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-07-18","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":88,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-20","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{}}},{"date":"2021-05-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-05-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-27","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-03","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-03","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-07","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-06-25","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-07-05","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-07-05","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-07-23","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":89,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-25","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{}}},{"date":"2021-05-25","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-06-01","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-01","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-08","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-12","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-06-30","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-07-10","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-07-10","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-07-28","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":90,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-06-30","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-08-06","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-01-29","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":5}}},{"date":"2021-01-29","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-29","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-10","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-10","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-02-16","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-02-17","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-04-02","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-05-20","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":5}}},{"date":"2021-08-24","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-08-24","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-08-24","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2021-09-09","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":91,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-03-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-09-19","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-09-20","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":13}}},{"date":"2020-12-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-12","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-02-12","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-03-01","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-03-06","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-04-16","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":13}}},{"date":"2021-04-16","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-16","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-04-26","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-05-11","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-05-11","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-05-20","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":92,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-01-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-01-06","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-01-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-12","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-01","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-01","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-02-02","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-02-02","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-03-16","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-04-08","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-13","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-05-09","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":93,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-07-22","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":7}}},{"date":"2021-07-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-07-22","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-07-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-07-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-07-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-25","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-09-12","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-12-13","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":7}}},{"date":"2022-05-06","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-05-13","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-06-10","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2022-07-10","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":94,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-02-08","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-02-25","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2021-04-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-04-11","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-04-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-04-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-04-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-04-30","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-07-26","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":8}}},{"date":"2021-09-24","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-09-24","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-09-24","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2021-10-10","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":95,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-01-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2019-01-27","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":3}}},{"date":"2020-02-19","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":3}}},{"date":"2020-02-25","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-03-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-03-08","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-03-17","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-03-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-03-31","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-04-08","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2020-05-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-18","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-05-23","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-06-22","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-06-22","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-07-06","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":96,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-12-15","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":7}}},{"date":"2019-12-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-12-15","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-01-17","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-01-26","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-02-08","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-02-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-02-08","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-02-08","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-02-14","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":7}}},{"date":"2020-06-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-06-20","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-07-12","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-07-19","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-07-19","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-10-01","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":97,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-11","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-07-18","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-07-19","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":11}}},{"date":"2020-07-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-07-19","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-08-08","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":11}}},{"date":"2020-08-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-08-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-08-26","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-08-26","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-09-13","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-09-18","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-25","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-10-03","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-10-03","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-10-15","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":98,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-04-01","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":4}}},{"date":"2021-05-12","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2021-05-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-12","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-05-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-05-12","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-05-12","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-05-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-05-25","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-05-31","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-06-10","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-06-10","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-06-28","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-07-29","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-07-29","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-07-29","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-11-23","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":99,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-03-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-03-17","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-03-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-03-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-03-20","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-04-02","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-04-02","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-02","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-04-15","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2020-06-15","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-06-17","etapeTypeId":"aca","etapeStatutId":"ajo"},{"date":"2020-07-09","etapeTypeId":"mna","etapeStatutId":"fai"},{"date":"2020-12-23","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":100,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-09-01","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":6}}},{"date":"2019-09-01","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2019-09-06","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-02-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-02-24","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-03-08","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-03-09","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-03-21","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-03-27","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-05-08","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":6}}},{"date":"2020-05-21","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-23","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-06-06","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-06-14","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-06-14","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-07-25","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":101,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-05-21","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-06-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2020-06-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-05","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-13","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-06-20","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-06-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-06","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-07-06","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-07-17","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":4}}},{"date":"2020-08-24","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-20","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-10-18","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-10-18","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-10-26","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":102,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-01-04","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-05-26","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-06-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-07-09","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-08-13","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-08-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-08-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-08-27","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-08-27","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-09-10","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2020-09-13","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":5}}},{"date":"2020-09-20","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":5}}},{"date":"2020-11-14","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-11-14","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-11-27","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-02-06","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":103,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-01-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":10}}},{"date":"2020-01-16","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-01-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-02-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-02-03","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-02-13","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-02-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-02-17","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":10}}},{"date":"2020-04-02","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-04-02","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2020-04-13","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-04-15","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-04-20","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":104,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2020-06-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-15","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-06-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-20","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-06-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-07","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":105,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-26","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-29","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-06-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-07-05","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-07-21","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-21","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-21","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-07-21","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-08-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-16","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-08-23","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":106,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-05-14","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{}}},{"date":"2021-05-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-05-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-05-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-01","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-06-19","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-06-29","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-06-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-07-17","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":107,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-20","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-05-22","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{}}},{"date":"2021-05-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-30","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-05","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-09","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-06-27","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-07-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-07-07","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-07-25","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":108,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2021-06-07","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-11-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-01-23","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":2}}},{"date":"2022-02-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-02-08","etapeTypeId":"mcp","etapeStatutId":"inc"},{"date":"2022-02-08","etapeTypeId":"mcm","etapeStatutId":"fai"},{"date":"2022-02-17","etapeTypeId":"des","etapeStatutId":"fai"},{"date":"2022-02-21","etapeTypeId":"vfd","etapeStatutId":"fai"}]},{"id":109,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-08-10","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-03-02","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-03-02","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-02","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-03-04","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-03-04","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-03-04","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-04-13","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-04-20","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-05-18","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2022-06-17","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":110,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-08-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-03-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-03-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-13","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-03-15","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-03-15","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-03-15","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-04-25","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-05-02","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-05-30","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2022-06-29","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":111,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2022-03-12","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-03-19","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-03-26","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2022-03-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-27","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-03-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-03-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-03-29","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-04-16","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2022-07-08","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-07-17","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-07-17","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":112,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-02-22","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-02-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-02-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-03-05","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-03-06","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-03-06","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-03-07","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-05-01","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2022-05-08","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-06-05","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-07-09","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":113,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-02-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-02-26","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-02-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-06","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-03-08","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-03-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-03-08","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-05-02","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2022-05-09","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-06-06","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-07-10","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":114,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2021-08-16","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-03-15","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-03-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-24","etapeTypeId":"mcp","etapeStatutId":"inc"},{"date":"2022-03-24","etapeTypeId":"mcm","etapeStatutId":"fai"},{"date":"2022-04-27","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":115,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2022-09-15","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-09-24","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-09-24","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-09-24","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-24","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-24","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-09-27","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-10-19","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2022-11-16","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-11-16","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-01-24","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":116,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2022-06-19","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-06-25","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-08-16","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":18}}},{"date":"2022-08-16","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-08-23","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-09-14","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2023-01-09","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":18}}},{"date":"2023-01-22","etapeTypeId":"ede","etapeStatutId":"def"},{"date":"2023-01-23","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2023-01-30","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-02-01","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":117,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-05-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-06-01","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-08-10","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2022-08-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-08-10","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-09-14","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-12-07","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2022-12-26","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2023-01-02","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-01-02","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-01-14","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2023-02-04","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-02-04","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-02-18","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":118,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-06-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2022-06-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-06-20","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-11","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-11","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-09-11","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-11-27","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":4}}},{"date":"2022-12-23","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2022-12-30","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-12-30","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-01-11","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2023-03-22","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-03-22","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-03-23","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":119,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2022-05-21","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-07-09","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-09-26","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2022-09-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-09-26","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-10-03","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-10-03","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-10-06","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-10-09","etapeTypeId":"edm","etapeStatutId":"fav"}]},{"id":120,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2022-05-18","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-06-24","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-09-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2022-09-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-09-14","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-18","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-09-21","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-09-24","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2023-01-26","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":4}}}]},{"id":121,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-06-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-07-01","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-07-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2022-07-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-07-06","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-21","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-21","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-09-21","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-12-07","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2023-01-02","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2023-01-09","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-01-09","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-01-21","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2023-02-11","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-02-11","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-02-11","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":122,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-04-13","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-04-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-05-09","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":14}}},{"date":"2022-05-09","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-05-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-05-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-05-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-05-29","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-06-06","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":14}}},{"date":"2022-10-09","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2022-10-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-10-18","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-10-22","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-11-01","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-01-21","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-01-21","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":123,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2022-03-16","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-03-26","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-03-28","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":3}}},{"date":"2022-03-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-28","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-03-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-03-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-03-29","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-07-04","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2022-12-08","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":3}}},{"date":"2023-01-03","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2023-01-10","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-01-10","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":124,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2023-01-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2023-01-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2023-01-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-01-14","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2023-01-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2023-01-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-01-19","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2023-01-24","etapeTypeId":"edm","etapeStatutId":"fav"}]},{"id":125,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2023-01-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2023-01-27","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2023-01-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-01-27","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2023-01-31","etapeTypeId":"vfd","etapeStatutId":"fai"}]},{"id":126,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2023-02-20","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2023-02-20","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false,"franchissements":0}}},{"date":"2023-02-20","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-02-21","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2023-02-21","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2023-02-21","etapeTypeId":"mcr","etapeStatutId":"fav"}]},{"id":127,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-12-15","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-12-25","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-12-25","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-01-10","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2023-01-19","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2023-01-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-01-22","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2023-01-22","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2023-01-24","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2023-01-31","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-02-05","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-02-05","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":128,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-12-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2023-01-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2023-01-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-01-28","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2023-02-11","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2023-02-11","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-02-14","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2023-02-14","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2023-02-16","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2023-02-23","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-02-28","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-02-28","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":129,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2022-10-25","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-10-25","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2022-10-25","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-11-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-11-02","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-11-04","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-11-04","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-11-07","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2023-01-16","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2023-02-27","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":8}}},{"date":"2023-03-07","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2023-03-16","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-03-16","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":130,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-09-24","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":0}}},{"date":"2019-10-18","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2019-11-19","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2019-11-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-12-20","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2019-12-31","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2019-12-31","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-02-02","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-03-22","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-03-22","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-03-29","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-03-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-04-07","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-05-03","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-05-03","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-05-16","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":131,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2022-04-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-04-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-06-17","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":132,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2018-07-15","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-02-06","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-02-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-02-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-02-24","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-03-03","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2020-03-04","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":0}}},{"date":"2020-03-04","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-03-04","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-04","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-04-04","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-05-05","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-05","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-06-09","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-06-16","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-06-16","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":133,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-03","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-06-07","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-06-07","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-07","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-03","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-09-13","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-11-20","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-11-21","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-11-21","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-12-03","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":134,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2022-04-20","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-04-21","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-04-22","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":3}}},{"date":"2022-06-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-06-23","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-10-02","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-10-02","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-10-02","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-10-13","etapeTypeId":"aof","etapeStatutId":"fav"}]},{"id":135,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-10-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-21","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-10-28","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2021-10-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-31","etapeTypeId":"mcp","etapeStatutId":"inc"},{"date":"2021-10-31","etapeTypeId":"mcm","etapeStatutId":"fai"},{"date":"2021-11-12","etapeTypeId":"rcm","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2021-11-12","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-11-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-11-17","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-17","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-11-25","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-12-04","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2022-01-16","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"franchissements":9}}},{"date":"2023-01-13","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":9}}},{"date":"2023-01-26","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2023-02-03","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-02-05","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":136,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-03-17","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-03-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-04-06","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-04-12","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-04-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-04-20","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-06-20","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2022-06-29","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-06-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-07-20","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":137,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-04-06","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-05-17","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-05-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-05-25","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-05-31","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-05-31","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-06-01","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-06-28","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2022-07-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-07-07","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-07-28","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-07-28","etapeTypeId":"mns","etapeStatutId":"fai"},{"date":"2022-10-15","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":138,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2023-04-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2023-04-05","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":139,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2023-03-19","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2023-04-01","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2023-04-01","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-04-01","etapeTypeId":"mcp","etapeStatutId":"com"}]},{"id":140,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-03-06","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-03-31","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-06-02","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2022-06-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-06-07","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-08-29","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-08-29","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-08-29","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-11-14","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":3}}},{"date":"2022-12-10","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2022-12-17","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-12-17","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-12-29","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2023-02-02","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-02-02","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-02-02","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":141,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2022-04-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-12-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-12-12","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":3}}},{"date":"2022-12-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-12-13","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-12-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-12-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-12-14","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2023-01-14","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2023-02-25","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":3}}},{"date":"2023-03-05","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2023-03-14","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-03-14","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":142,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-06-14","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-06-25","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-07-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2022-07-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-07-04","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-21","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-21","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-09-21","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-12-07","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2023-01-02","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2023-01-09","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-01-09","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-01-21","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2023-02-25","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-02-25","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-02-25","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":143,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-04-17","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-04-24","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-04-26","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":12}}},{"date":"2022-04-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-05-10","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-05-13","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-05-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-06-13","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-06-27","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2022-12-01","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":12}}},{"date":"2022-12-27","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2023-01-03","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-01-03","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-01-15","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2023-02-05","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-02-05","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-02-05","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":144,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-09-18","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-11-04","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-05-15","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":6}}},{"date":"2022-05-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-05-30","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-07-23","etapeTypeId":"mod","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":6}}},{"date":"2022-09-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-09-28","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2022-12-14","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":6}}},{"date":"2023-01-09","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2023-01-16","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-01-16","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-02-15","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2023-02-15","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-02-15","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-02-15","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":145,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2022-01-20","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2023-02-27","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2023-02-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-03-09","etapeTypeId":"mcp","etapeStatutId":"com"}]},{"id":146,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2021-10-06","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":5}}},{"date":"2021-10-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-07","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-10-07","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-10-13","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-10-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-10-13","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-11-25","etapeTypeId":"edm","etapeStatutId":"def"},{"date":"2022-03-17","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":5}}},{"date":"2022-09-29","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-10-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-10-08","etapeTypeId":"aca","etapeStatutId":"ajo"}]},{"id":147,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-04","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-06-04","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-04","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-10","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-07-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-26","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-08-22","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-08-23","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-28","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-04","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":148,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-05-01","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-05-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-05-06","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-05-18","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-08-05","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-08-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-08-06","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-08-06","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-08-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-12","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-08-19","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-08-19","etapeTypeId":"mns","etapeStatutId":"fai"}]},{"id":149,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-05-21","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-05-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-05-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-02","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-06-23","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-09","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-07-09","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-08-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-09-01","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-08","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]}]
\ No newline at end of file
+[{"id":0,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2022-11-13","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-11-22","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-11-29","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2022-11-29","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-12-01","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-12-19","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-12-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-02-03","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2023-03-10","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-03-19","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-03-19","etapeTypeId":"aca","etapeStatutId":"fav"}]},{"id":1,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2022-09-15","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-09-27","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-09-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-09-27","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-10-19","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-11-16","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-11-16","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-01-24","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":2,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2022-09-01","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-09-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-10-14","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":12}}},{"date":"2022-10-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-11-04","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-11-10","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-11-10","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-12-04","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":12}}},{"date":"2022-12-10","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-12-17","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-12-17","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-12-29","etapeTypeId":"mnb","etapeStatutId":"fai"}]},{"id":3,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-11-02","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-11-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-11-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-11-13","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-11-13","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-11-19","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-11-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-24","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":5}}},{"date":"2022-01-28","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-02-05","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-02-05","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-03-02","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-03-02","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-03-02","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-03-05","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2022-07-06","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":4,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-01-15","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-02-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-02-18","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":3}}},{"date":"2022-02-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-04","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-03-04","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-03-04","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-03-10","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":3}}},{"date":"2022-04-30","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-05-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-06-04","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-07-04","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-08-05","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-08-05","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-09-22","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":5,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2022-03-31","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-03-31","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-06-15","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":6,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-12","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-08-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-08-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-08-16","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-08-20","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-09-02","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-09-02","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-10-02","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-11-14","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-11-20","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-11-20","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-12-03","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-01-20","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-01-20","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-02-07","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":7,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-03-03","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-03-05","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-03-23","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":13}}},{"date":"2020-04-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-04-21","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-04-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-04-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-01","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":13}}},{"date":"2020-08-27","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-08-28","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-09-02","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-09","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-09-15","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-09-15","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-09-18","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":8,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-06-19","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2020-06-20","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-27","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-07-10","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":9}}},{"date":"2020-07-11","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-11","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-21","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-08-15","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-20","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-08-27","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-10-17","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-10-17","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-11-26","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":9,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-10-08","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-10-08","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-10-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-10-23","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-11-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-11-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-25","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-12-26","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-01-16","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-01-24","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-01-25","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":10,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-07-10","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":6}}},{"date":"2021-07-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-07-11","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-11","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-07-11","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-07-18","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-07-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-22","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-12-10","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"franchissements":6}}},{"date":"2021-12-17","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":7}}},{"date":"2022-01-17","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-01-25","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-01-25","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":11,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-03-21","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-05-16","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":3}}},{"date":"2020-05-20","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-05-20","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-05-27","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-06-09","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-06-09","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-18","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-07-10","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":3}}},{"date":"2020-08-01","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-16","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-17","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-09-25","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-09-25","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-09-30","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":12,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-19","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-06-28","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":11}}},{"date":"2020-06-28","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-07-09","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-07-09","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-07-23","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":11}}},{"date":"2020-07-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-30","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-08-24","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-05","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-09-20","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-09-20","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-09-25","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":13,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-14","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-01-24","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-02-24","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2021-02-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-03-08","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-03-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-03-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-04-13","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-04-18","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-04-24","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2021-04-26","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-26","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-05-15","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-06-08","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-06-08","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-06-09","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":14,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-23","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-08-08","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-08-29","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-09-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-09-03","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-10-14","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2020-10-17","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2020-10-24","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-10-24","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-10-24","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":4}}},{"date":"2020-10-24","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-12-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-12-18","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-12-31","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-01-19","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-01-19","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-02-07","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":15,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-01-02","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":7}}},{"date":"2020-01-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-01-26","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-01-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-01-31","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-02-13","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-02-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-02-21","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-04-27","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":7}}},{"date":"2020-05-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-20","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-06-11","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-08-06","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-08-06","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-08-28","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":16,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-20","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-08-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2020-08-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-10-12","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-10-17","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-10-18","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-10-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-10-18","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-10-26","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2020-12-20","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-12-20","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-01-02","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-03-05","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-03-05","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-04-03","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":17,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-04-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-05-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":7}}},{"date":"2020-05-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-05-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-05-17","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-05-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-05-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-05","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-06-11","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":7}}},{"date":"2020-07-19","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-07-24","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-04","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-09-12","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-09-12","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-09-17","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":18,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-06-04","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-06-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-25","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-06-25","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-29","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-07-24","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-24","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-09-30","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-02-01","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":14}}},{"date":"2021-04-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-07","etapeTypeId":"aca","etapeStatutId":"ajo"},{"date":"2021-04-13","etapeTypeId":"mna","etapeStatutId":"fai"},{"date":"2021-12-02","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-12-02","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":19,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2019-10-31","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2019-11-05","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-03-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-03-12","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-03-18","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-03-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-05","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-05-31","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-06-02","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-06-24","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":20,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2019-11-19","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2019-12-03","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2019-12-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-12-14","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2019-12-18","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2019-12-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-03-26","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-03-31","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-04-01","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-04-02","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-04-11","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":21,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-04-30","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-04-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-04-30","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-05-15","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-05-16","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-05-16","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-08-31","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-09-01","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-09-06","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-13","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":22,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-09-18","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2019-10-02","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-02-24","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-02-24","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-03-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-03-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-03-26","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-04-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-06","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-05-29","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-05-29","etapeTypeId":"mns","etapeStatutId":"fai"}]},{"id":23,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-09-10","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-09-10","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-09-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-09-24","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-09-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-09-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-10-14","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-12-16","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-12-16","etapeTypeId":"aca","etapeStatutId":"ajo"},{"date":"2020-12-29","etapeTypeId":"mna","etapeStatutId":"fai"},{"date":"2021-03-03","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":24,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-09-10","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-09-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false,"franchissements":0}}},{"date":"2020-09-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-10-02","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-10-05","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-10-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-07","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-12-13","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-12-13","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-12-26","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":25,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-09-06","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false,"franchissements":0}}},{"date":"2020-09-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-09-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-10-11","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-10-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-10-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-02","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-12-08","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-12-08","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-12-21","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":26,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-19","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-05-29","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-29","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-05-29","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-03","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-03","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-11","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-09-22","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-09-23","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-09-23","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-10-14","etapeTypeId":"sco","etapeStatutId":"fai"}]},{"id":27,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-11-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false,"franchissements":0}}},{"date":"2020-11-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-11-03","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-11-04","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-11-13","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-11-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-02-18","etapeTypeId":"edm","etapeStatutId":"def"},{"date":"2021-02-18","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-04-01","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-03","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":28,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-19","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-06-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-19","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-06-19","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-19","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-09-30","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-10-01","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-10-01","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-10-22","etapeTypeId":"sco","etapeStatutId":"fai"}]},{"id":29,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-09-18","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":19}}},{"date":"2019-10-06","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2019-11-15","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2019-11-16","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-11-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2019-11-29","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2019-11-29","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2019-11-29","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":19}}},{"date":"2019-11-29","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-04-29","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-08","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-05-13","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-05-17","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-05-17","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-08-12","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":30,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-01-06","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false,"franchissements":0}}},{"date":"2021-01-07","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-01-26","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-05","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-02-23","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-04-28","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-05-01","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-05-06","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2021-05-21","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":31,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-12-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2019-12-30","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":18}}},{"date":"2020-01-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-01-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-01-23","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2020-02-04","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-02-05","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-02-12","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":18}}},{"date":"2020-02-27","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":18}}},{"date":"2020-03-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-02","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-05-12","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-12","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-05-17","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-06-16","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-06-16","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-08-19","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":32,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-06-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":10}}},{"date":"2021-06-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-19","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-19","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-05","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-09-16","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":17}}},{"date":"2021-10-18","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-10-25","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-10-25","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-11-01","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-12-02","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-12-02","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-12-02","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2022-04-16","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2022-04-16","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":33,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2020-05-14","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":10}}},{"date":"2020-05-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-19","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":10}}},{"date":"2020-06-20","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-07-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-07-17","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-08-14","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":34,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-06-21","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":12}}},{"date":"2021-06-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-21","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-07","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-09-21","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":17}}},{"date":"2021-10-20","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-10-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-10-27","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-11-03","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-11-21","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-11-21","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-12-04","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2022-04-18","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2022-04-18","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":35,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-11-04","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2019-11-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-11-05","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2019-11-18","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2019-11-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2019-11-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2019-11-30","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-05-13","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-27","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-06-10","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":36,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-01-06","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false,"franchissements":0}}},{"date":"2021-01-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-01-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-29","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-12","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-03-01","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-04-09","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-04-14","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-14","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-05-10","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-05-10","etapeTypeId":"mns","etapeStatutId":"fai"}]},{"id":37,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-08-15","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-12-28","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-01-08","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":0}}},{"date":"2021-01-09","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-24","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-01-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-01-29","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-02-26","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-03-06","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-04-06","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-11","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-04-16","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-05-08","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-05-08","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-05-08","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":38,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-11-18","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-11-18","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-11-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-11-19","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-01-13","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-01-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-03-06","etapeTypeId":"edm","etapeStatutId":"def"},{"date":"2021-03-09","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-04-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-18","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":39,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-17","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-06-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-06-17","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-17","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-09-28","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-09-29","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-09-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-10-20","etapeTypeId":"sco","etapeStatutId":"fai"}]},{"id":40,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-09-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-09-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-09-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-09-29","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-10-05","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-10-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-03-08","etapeTypeId":"edm","etapeStatutId":"def"},{"date":"2021-03-11","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-04-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-20","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":41,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-12-25","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":5}}},{"date":"2020-12-29","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-01-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-01-25","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-26","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-01-30","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-01-31","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-02-22","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-02-27","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-03-27","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"franchissements":5}}},{"date":"2021-10-26","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":5}}},{"date":"2021-10-27","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-03-02","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-03-02","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":42,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-12-15","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-12-23","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":5}}},{"date":"2020-12-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-01-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-12","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-16","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-16","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-03-06","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-03-29","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-07-27","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":5}}},{"date":"2021-09-25","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-09-26","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-09-26","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2021-10-12","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":43,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-07-07","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2021-07-07","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-07-07","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-07-07","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-07-16","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-07-16","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-12-02","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":4}}},{"date":"2022-02-04","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-02-12","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-02-12","etapeTypeId":"aca","etapeStatutId":"ajo"},{"date":"2022-02-25","etapeTypeId":"mna","etapeStatutId":"fai"},{"date":"2022-03-17","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-03-17","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2022-04-01","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":44,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-11-11","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-11-17","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2020-11-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-01-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-02-10","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-20","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":9}}},{"date":"2021-02-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-04-21","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-04-24","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-05-18","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-06-10","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-06-10","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-06-10","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":45,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-10-21","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-10-21","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-10-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-11-05","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-11-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-11-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-01-07","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-01-08","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-01-29","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-01-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-02-07","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":46,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-06-02","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-06-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":12}}},{"date":"2021-06-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-11","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-03","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-07-08","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-07-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-02-05","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":12}}},{"date":"2022-02-06","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-03-04","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-03-04","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2022-03-20","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":47,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-11-27","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-11-27","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-11-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-11-28","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-12-08","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-12-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-03-14","etapeTypeId":"edm","etapeStatutId":"def"},{"date":"2021-03-18","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-04-25","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-27","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":48,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-02-05","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-02-19","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2021-02-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-02-19","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-02-26","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-03-08","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-03-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-04-26","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-07-21","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":9}}},{"date":"2021-09-18","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-09-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-09-18","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2021-10-08","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":49,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-02-16","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-02-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-02-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-02-25","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-03-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-03-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-17","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-05-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-27","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-06-19","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":50,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-03-12","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-03-20","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2020-03-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-03-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-03-28","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-04-23","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-04-23","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-23","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-05-14","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":9}}},{"date":"2020-07-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-01","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-08-23","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-08-24","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-08-24","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-08-28","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":51,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":11}}},{"date":"2020-08-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-10-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-10-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-10-17","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-11-06","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-11-06","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-11-12","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":11}}},{"date":"2020-12-17","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-12-18","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-01-08","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-01-08","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-01-16","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-01-27","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-01-27","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-02-27","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":52,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2018-09-01","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2019-12-31","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-01-01","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-01-01","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-01-08","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-02-25","etapeTypeId":"mod","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-03-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-03-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-05-04","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-05-04","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-07","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-05-12","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-07-10","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":53,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-04-19","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":3}}},{"date":"2020-05-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-06-02","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-17","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-06-20","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-06-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-08-11","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":3}}},{"date":"2020-09-28","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-09-28","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-10-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-11-01","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-11-15","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":54,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-04-16","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-04-18","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-04-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-05-16","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-06-02","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-06-02","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-06","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-07-25","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-05","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-08-05","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":55,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-07-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-07-25","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-07-29","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-08-01","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-08-12","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-08-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-09-25","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-10-02","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-10-29","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-11-08","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-11-12","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":56,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-07-19","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":1}}},{"date":"2021-07-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-07-20","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-20","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-07-20","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-07-21","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-09-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-12-05","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":1}}},{"date":"2021-12-12","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-02-03","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-02-03","etapeTypeId":"aca","etapeStatutId":"ajo"},{"date":"2022-02-15","etapeTypeId":"mna","etapeStatutId":"fai"},{"date":"2022-03-08","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-03-08","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-03-23","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-04-18","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-04-18","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-04-18","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":57,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2019-10-23","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2019-10-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2019-11-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-11-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2019-11-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2019-11-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-16","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-05-22","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-22","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-05-27","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":58,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-09-25","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-09-28","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-09-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-10-08","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-10-18","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-10-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-11-07","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-11-15","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-11-20","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-12-17","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":59,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-09","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-05-23","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-05-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-23","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-05-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-05-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-17","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-08-29","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-08-30","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-08-30","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-09-18","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":60,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-06-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-06-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-27","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-07-15","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-15","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-15","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-08-01","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-10","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-08-16","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":61,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-11-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-11-17","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-11-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-01","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-12-04","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-12-04","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-01-06","etapeTypeId":"edm","etapeStatutId":"def"},{"date":"2021-01-11","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-01-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-02-04","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-03-11","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":62,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-06-04","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-06-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":10}}},{"date":"2020-06-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-21","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-07-04","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":10}}},{"date":"2020-07-05","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-15","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-08-09","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-14","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-08-21","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-10-14","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":63,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-06-14","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-07-14","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":10}}},{"date":"2020-11-17","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":10}}},{"date":"2020-11-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-11-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-11-18","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-11-29","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-11-29","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-14","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-12-19","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-01-04","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-01-04","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-01-13","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-02-22","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":64,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-03-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-03-10","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":7}}},{"date":"2020-03-13","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-03-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-03-18","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-04-13","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-04-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-13","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-05-12","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":7}}},{"date":"2020-07-17","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-07-22","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-08-13","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-08-14","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-08-14","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-08-18","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":65,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-04-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-04-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-04-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-04-28","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-05-11","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-05-11","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-05-11","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-08-14","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-19","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-08-26","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":66,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2019-10-20","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":10}}},{"date":"2019-11-20","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2019-11-24","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2019-11-25","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-12-08","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2019-12-11","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2019-12-12","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":10}}},{"date":"2019-12-15","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-03-03","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-03-08","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-03-09","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-03-10","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-03-19","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":67,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-11-23","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":12}}},{"date":"2020-11-30","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-12-02","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-24","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-02-01","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-09","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-09","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-03-07","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-03-28","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-04-06","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"franchissements":12}}},{"date":"2021-07-28","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":12}}},{"date":"2021-09-27","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-09-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-09-27","etapeTypeId":"aca","etapeStatutId":"ajo"},{"date":"2021-10-16","etapeTypeId":"mna","etapeStatutId":"fai"},{"date":"2021-12-15","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-12-15","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":68,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-08-18","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-09-08","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2020-09-08","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-09-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-10-24","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-11-22","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-11-22","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-01-03","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-03-29","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-05-03","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"franchissements":9}}},{"date":"2021-05-10","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-05-11","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":9}}},{"date":"2021-05-17","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-05-17","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-08-22","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-08-22","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-08-22","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-08-22","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-12-22","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":69,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-02-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-03-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-03-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-03-13","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-03-19","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-03-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-04-20","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-04-24","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-04-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-05-02","etapeTypeId":"aca","etapeStatutId":"ajo"},{"date":"2021-05-21","etapeTypeId":"mna","etapeStatutId":"fai"},{"date":"2021-09-11","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-09-11","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-09-28","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-09-28","etapeTypeId":"mns","etapeStatutId":"fai"},{"date":"2021-12-30","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-12-31","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":70,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2020-07-11","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-07-17","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2020-07-18","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-07-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-07-31","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-08-02","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":9}}},{"date":"2020-09-11","etapeTypeId":"des","etapeStatutId":"fai"},{"date":"2020-11-08","etapeTypeId":"vfd","etapeStatutId":"fai"}]},{"id":71,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-10-06","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-10-06","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-10-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-10-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-11-12","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-11-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-23","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-12-24","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-01-14","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-01-14","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-01-23","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":72,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-07-10","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2021-07-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-07-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-10","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-07-10","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-07-15","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-07-15","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-08-31","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":9}}},{"date":"2021-10-02","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-10-09","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-10-09","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-10-16","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-11-09","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-11-09","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-11-16","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2022-03-31","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2022-03-31","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":73,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":14}}},{"date":"2020-12-03","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-12-08","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-12-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-14","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-12-31","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-01-04","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-01-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-01-27","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-02-19","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":14}}},{"date":"2021-03-23","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-04-02","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-09","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-04-14","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-06-02","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-06-02","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-06-02","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-10-05","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":74,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2021-10-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-27","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-10-30","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-10-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-11-02","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-11-21","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-11-21","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-03-16","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":75,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-10-07","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-10-14","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2021-10-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-19","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-10-22","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-10-22","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-29","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":4}}},{"date":"2021-12-06","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-01-28","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-01-28","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-02-22","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-02-22","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-03-11","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-03-11","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2022-06-15","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":76,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2021-12-18","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-12-18","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-12-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-12-19","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-12-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-12-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-03-28","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":77,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-08-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2021-08-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-08-14","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-08-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-08-14","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-08-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-08-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-09-27","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-12-29","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":4}}},{"date":"2022-04-30","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-05-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-06-04","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2022-07-04","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":78,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2021-08-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-08-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-09-01","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":10}}},{"date":"2021-09-01","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-09-01","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-09-02","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-09-06","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-03-03","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":79,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-09-25","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-10-02","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":7}}},{"date":"2021-10-02","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-02","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-10-28","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":7}}},{"date":"2021-12-01","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-12-01","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-12-16","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-12-17","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-12-17","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-12-29","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-01-14","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-01-28","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-01-28","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":80,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-10-20","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-11-05","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-11-10","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":13}}},{"date":"2021-11-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-11-18","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-11-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-11-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-12-10","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2022-01-25","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"franchissements":13}}},{"date":"2022-01-28","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":14}}},{"date":"2022-02-04","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-02-12","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-02-12","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-03-09","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-03-09","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-03-31","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-03-31","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":81,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-11-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-12-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-12-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-12-05","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-12-12","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-12-14","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":9}}},{"date":"2021-12-21","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-12-21","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-02-01","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-02-09","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-02-09","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":82,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-08-24","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-11-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-30","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-10-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-31","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-11-21","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2021-11-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-11-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-12-11","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-12-12","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-12-12","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-12-24","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-01-10","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-01-27","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-01-27","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2022-08-12","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":83,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2021-12-16","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-12-21","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-12-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-12-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-01-10","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-01-17","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-01-17","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-05-08","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":84,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-09-09","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-09-09","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-09-10","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-09-10","etapeTypeId":"mcp","etapeStatutId":"inc"},{"date":"2021-09-10","etapeTypeId":"mcm","etapeStatutId":"fai"},{"date":"2021-09-17","etapeTypeId":"rcm","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-09-17","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-09-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-09-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-29","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-01-21","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-01-21","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-02-03","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":85,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-05-23","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-08-15","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-08-16","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-08-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-08-28","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-09-12","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-09-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-10-16","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-11-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-11-12","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-12-10","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-02-24","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":86,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-07-13","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-07-21","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":5}}},{"date":"2021-07-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-07-22","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-07-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-07-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-29","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":5}}},{"date":"2022-02-02","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-02-10","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-02-10","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-03-07","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-03-07","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2022-03-30","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2022-03-30","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":87,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-15","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{}}},{"date":"2021-05-15","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-05-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-05-29","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-05-29","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-20","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-06-30","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-06-30","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-07-18","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":88,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-20","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{}}},{"date":"2021-05-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-05-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-27","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-03","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-03","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-25","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-07-05","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-07-05","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-07-23","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":89,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-25","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{}}},{"date":"2021-05-25","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-06-01","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-01","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-08","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-30","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-07-10","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-07-10","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-07-28","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":90,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-06-30","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-08-06","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-01-29","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":5}}},{"date":"2021-01-29","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-29","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-10","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-10","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-02-16","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-04-02","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-05-20","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":5}}},{"date":"2021-08-24","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-08-24","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-08-24","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2021-09-09","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":91,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-03-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-09-19","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-09-20","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":13}}},{"date":"2020-12-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-12","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-03-01","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-03-06","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-04-16","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":13}}},{"date":"2021-04-16","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-16","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-04-26","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-05-11","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-05-11","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-05-20","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":92,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-01-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-01-06","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-01-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-12","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-02-01","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-02-01","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-02-02","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-03-16","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-04-08","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-04-13","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-05-09","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":93,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-07-22","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":7}}},{"date":"2021-07-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-07-22","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-07-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-07-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-07-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-09-12","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2021-12-13","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":7}}},{"date":"2022-05-06","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-05-13","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-06-10","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2022-07-10","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":94,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-02-08","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-02-25","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2021-04-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-04-11","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-04-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-04-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-04-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-26","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":8}}},{"date":"2021-09-24","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-09-24","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-09-24","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2021-10-10","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":95,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-01-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2019-01-27","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":3}}},{"date":"2020-02-19","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":3}}},{"date":"2020-02-25","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-03-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-03-08","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-03-17","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-03-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-08","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-05-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-18","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-05-23","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-06-22","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-06-22","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-07-06","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":96,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-12-15","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":7}}},{"date":"2019-12-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-12-15","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-01-17","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-01-26","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-02-08","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-02-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-02-08","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-02-14","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":7}}},{"date":"2020-06-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-06-20","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-07-12","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-07-19","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-07-19","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-10-01","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":97,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-11","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-07-18","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-07-19","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":11}}},{"date":"2020-07-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-07-19","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-08-08","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":11}}},{"date":"2020-08-26","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-08-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-08-26","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-09-13","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-09-18","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-25","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-10-03","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-10-03","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-10-15","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":98,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-04-01","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":4}}},{"date":"2021-05-12","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2021-05-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-12","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-05-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-05-12","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-05-12","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-05-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-05-31","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-06-10","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-06-10","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-06-28","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-07-29","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2021-07-29","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2021-07-29","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2021-11-23","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":99,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-03-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-03-17","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-03-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-03-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-03-20","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-04-02","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-04-02","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-15","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-06-15","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-06-17","etapeTypeId":"aca","etapeStatutId":"ajo"},{"date":"2020-07-09","etapeTypeId":"mna","etapeStatutId":"fai"},{"date":"2020-12-23","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":100,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-09-01","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":6}}},{"date":"2019-09-01","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2019-09-06","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-02-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-02-24","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-03-08","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-03-09","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-03-27","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-05-08","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":6}}},{"date":"2020-05-21","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-23","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-06-06","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-06-14","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-06-14","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-07-25","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":101,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-05-21","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-06-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2020-06-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-05","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-13","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-06-20","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-06-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-06","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-07-17","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":4}}},{"date":"2020-08-24","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-20","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-10-18","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-10-18","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-10-26","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":102,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-01-04","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-05-26","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-06-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-07-09","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-08-13","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-08-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-08-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-08-27","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-09-10","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2020-09-13","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":5}}},{"date":"2020-09-20","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":5}}},{"date":"2020-11-14","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-11-14","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-11-27","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2021-02-06","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":103,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2020-01-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":10}}},{"date":"2020-01-16","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-01-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-02-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-02-03","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-02-13","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-02-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-02-17","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":10}}},{"date":"2020-04-02","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-04-13","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-04-15","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2020-04-20","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":104,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2020-06-14","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-15","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-06-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-20","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-06-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-07","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":105,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-26","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-29","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-06-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-07-05","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-07-21","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-21","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-21","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-08-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-16","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-08-23","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":106,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-05-14","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{}}},{"date":"2021-05-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-05-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-05-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-19","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-06-29","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-06-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-07-17","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":107,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-20","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-05-22","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{}}},{"date":"2021-05-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-30","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-05","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-27","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-07-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-07-07","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-07-25","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":108,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2021-06-07","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-11-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-01-23","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":2}}},{"date":"2022-02-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-02-08","etapeTypeId":"mcp","etapeStatutId":"inc"},{"date":"2022-02-08","etapeTypeId":"mcm","etapeStatutId":"fai"},{"date":"2022-02-17","etapeTypeId":"des","etapeStatutId":"fai"},{"date":"2022-02-21","etapeTypeId":"vfd","etapeStatutId":"fai"}]},{"id":109,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-08-10","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-03-02","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-03-02","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-02","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-03-04","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-03-04","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-04-13","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-04-20","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-05-18","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2022-06-17","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":110,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-08-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-03-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-03-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-13","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-03-15","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-03-15","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-04-25","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-05-02","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-05-30","etapeTypeId":"aca","etapeStatutId":"def"},{"date":"2022-06-29","etapeTypeId":"mnd","etapeStatutId":"fai"}]},{"id":111,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2022-03-12","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-03-19","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-03-26","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2022-03-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-27","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-03-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-03-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-04-16","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2022-07-08","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-07-17","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-07-17","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":112,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-02-22","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-02-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-02-22","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-03-05","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-03-06","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-03-06","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-05-01","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-05-08","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-06-05","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-07-09","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":113,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-02-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-02-26","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-02-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-06","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-03-08","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-03-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-05-02","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-05-09","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-06-06","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-07-10","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":114,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2021-08-16","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-03-15","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-03-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-24","etapeTypeId":"mcp","etapeStatutId":"inc"},{"date":"2022-03-24","etapeTypeId":"mcm","etapeStatutId":"fai"},{"date":"2022-04-27","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":115,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2022-09-15","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-09-24","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-09-24","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-09-24","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-24","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-24","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-10-19","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-11-16","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-11-16","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-01-24","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":116,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2022-06-19","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-06-25","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-08-16","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":18}}},{"date":"2022-08-16","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-08-23","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-01-09","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":18}}},{"date":"2023-01-22","etapeTypeId":"ede","etapeStatutId":"def"},{"date":"2023-01-23","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-01-30","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-02-01","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":117,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-05-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-06-01","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-08-10","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2022-08-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-08-10","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-12-07","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2022-12-26","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-01-02","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-01-02","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-01-14","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2023-02-04","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-02-04","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-02-18","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":118,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-06-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2022-06-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-06-20","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-11","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-11","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-11-27","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":4}}},{"date":"2022-12-23","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-12-30","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-12-30","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-01-11","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2023-03-22","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-03-22","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-03-23","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":119,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2022-05-21","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-07-09","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-09-26","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2022-09-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-09-26","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-10-03","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-10-03","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-10-09","etapeTypeId":"edm","etapeStatutId":"fav"}]},{"id":120,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2022-05-18","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-06-24","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-09-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":4}}},{"date":"2022-09-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-09-14","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-18","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-09-24","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2023-01-26","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":4}}}]},{"id":121,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-06-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-07-01","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-07-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2022-07-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-07-06","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-21","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-21","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-12-07","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2023-01-02","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-01-09","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-01-09","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-01-21","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2023-02-11","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-02-11","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-02-11","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":122,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-04-13","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-04-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-05-09","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":14}}},{"date":"2022-05-09","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-05-22","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-05-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-05-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-06-06","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":14}}},{"date":"2022-10-09","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-10-18","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-10-18","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-10-22","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2022-11-01","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-01-21","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-01-21","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":123,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2022-03-16","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-03-26","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-03-28","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":3}}},{"date":"2022-03-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-28","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-03-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-03-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-07-04","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2022-12-08","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":3}}},{"date":"2023-01-03","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-01-10","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-01-10","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":124,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2023-01-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2023-01-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2023-01-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-01-14","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2023-01-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2023-01-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-01-24","etapeTypeId":"edm","etapeStatutId":"fav"}]},{"id":125,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2023-01-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2023-01-27","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2023-01-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-01-27","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2023-01-31","etapeTypeId":"vfd","etapeStatutId":"fai"}]},{"id":126,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2023-02-20","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2023-02-20","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false,"franchissements":0}}},{"date":"2023-02-20","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-02-21","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2023-02-21","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2023-02-21","etapeTypeId":"mcr","etapeStatutId":"fav"}]},{"id":127,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-12-15","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-12-25","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-12-25","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-01-10","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2023-01-19","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2023-01-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-01-22","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2023-01-24","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-01-31","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-02-05","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-02-05","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":128,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-12-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2023-01-13","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2023-01-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-01-28","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2023-02-11","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2023-02-11","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-02-14","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2023-02-16","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-02-23","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-02-28","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-02-28","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":129,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2022-10-25","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-10-25","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2022-10-25","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-11-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-11-02","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-11-04","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-11-04","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-01-16","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2023-02-27","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":8}}},{"date":"2023-03-07","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-03-16","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-03-16","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":130,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-09-24","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":0}}},{"date":"2019-10-18","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2019-11-19","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2019-11-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-12-20","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2019-12-31","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2019-12-31","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-03-22","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2020-03-22","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-03-29","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-03-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-04-07","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-05-03","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-05-03","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-05-16","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":131,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2022-04-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-04-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-06-17","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":132,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2018-07-15","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-02-06","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2020-02-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-02-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-02-24","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-03-03","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2020-03-04","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":0}}},{"date":"2020-03-04","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-03-04","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-04","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-05-05","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-05-05","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-06-09","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2020-06-16","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2020-06-16","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":133,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-03","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-06-07","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-06-07","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-07","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-06-27","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-06-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-09-13","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-11-20","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-11-21","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2021-11-21","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2021-12-03","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":134,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2022-04-20","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-04-21","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-04-22","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":3}}},{"date":"2022-06-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-06-23","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-10-02","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-10-02","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-10-13","etapeTypeId":"asc","etapeStatutId":"fai"}]},{"id":135,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-10-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-21","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-10-28","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2021-10-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-31","etapeTypeId":"mcp","etapeStatutId":"inc"},{"date":"2021-10-31","etapeTypeId":"mcm","etapeStatutId":"fai"},{"date":"2021-11-12","etapeTypeId":"rcm","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":9}}},{"date":"2021-11-12","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-11-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-11-17","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-25","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2021-12-04","etapeTypeId":"mcb","etapeStatutId":"fai"},{"date":"2022-01-16","etapeTypeId":"rcb","etapeStatutId":"fai","contenu":{"arm":{"franchissements":9}}},{"date":"2023-01-13","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":9}}},{"date":"2023-01-26","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-02-03","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-02-05","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":136,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-03-17","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-03-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-03-17","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-04-06","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-04-12","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-04-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-06-20","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-06-29","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-06-29","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-07-20","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":137,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-04-06","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-05-17","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-05-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-05-25","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-05-31","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-05-31","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-06-28","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-07-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-07-07","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-07-28","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2022-07-28","etapeTypeId":"mns","etapeStatutId":"fai"},{"date":"2022-10-15","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":138,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2023-04-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2023-04-05","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":139,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2023-03-19","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2023-04-01","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2023-04-01","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-04-01","etapeTypeId":"mcp","etapeStatutId":"com"}]},{"id":140,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-03-06","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-03-31","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-06-02","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}},{"date":"2022-06-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-06-07","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-08-29","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-08-29","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-11-14","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":3}}},{"date":"2022-12-10","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-12-17","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-12-17","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2022-12-29","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2023-02-02","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-02-02","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-02-02","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":141,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2022-04-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-12-12","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-12-12","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":3}}},{"date":"2022-12-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-12-13","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-12-14","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-12-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-01-14","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2023-02-25","etapeTypeId":"rde","etapeStatutId":"def","contenu":{"arm":{"franchissements":3}}},{"date":"2023-03-05","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-03-14","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-03-14","etapeTypeId":"aca","etapeStatutId":"def"}]},{"id":142,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-06-14","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-06-25","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-07-03","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":8}}},{"date":"2022-07-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-07-04","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-09-21","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-21","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-12-07","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":8}}},{"date":"2023-01-02","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-01-09","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-01-09","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-01-21","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2023-02-25","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-02-25","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-02-25","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":143,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-04-17","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-04-24","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-04-26","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":12}}},{"date":"2022-04-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-05-10","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-05-13","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-05-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-06-27","etapeTypeId":"edm","etapeStatutId":"fav"},{"date":"2022-12-01","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":12}}},{"date":"2022-12-27","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-01-03","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-01-03","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-01-15","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2023-02-05","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-02-05","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-02-05","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":144,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-09-18","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-11-04","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2022-05-15","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":6}}},{"date":"2022-05-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-05-30","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2022-07-23","etapeTypeId":"mod","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":6}}},{"date":"2022-09-28","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2022-09-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-12-14","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":6}}},{"date":"2023-01-09","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-01-16","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2023-01-16","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2023-02-15","etapeTypeId":"mnb","etapeStatutId":"fai"},{"date":"2023-02-15","etapeTypeId":"pfc","etapeStatutId":"fai"},{"date":"2023-02-15","etapeTypeId":"vfc","etapeStatutId":"fai"},{"date":"2023-02-15","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true}}}]},{"id":145,"demarcheStatutId":"ins","demarchePublique":false,"etapes":[{"date":"2022-01-20","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2023-02-27","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2023-02-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-03-09","etapeTypeId":"mcp","etapeStatutId":"com"}]},{"id":146,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2021-10-06","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":true,"franchissements":5}}},{"date":"2021-10-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-07","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-07","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2021-10-07","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2021-10-13","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2021-10-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-25","etapeTypeId":"edm","etapeStatutId":"def"},{"date":"2022-03-17","etapeTypeId":"rde","etapeStatutId":"fav","contenu":{"arm":{"franchissements":5}}},{"date":"2022-09-29","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-10-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2022-10-08","etapeTypeId":"aca","etapeStatutId":"ajo"}]},{"id":147,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-04","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-06-04","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-04","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-10","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-07-25","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-07-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-08-22","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-08-23","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-28","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-04","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]},{"id":148,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-05-01","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-05-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-05-06","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-05-18","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-08-05","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-08-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-08-06","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-08-07","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-08-12","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-08-19","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-08-19","etapeTypeId":"mns","etapeStatutId":"fai"}]},{"id":149,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-05-21","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-05-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-05-23","etapeTypeId":"pfd","etapeStatutId":"fai"},{"date":"2020-06-02","etapeTypeId":"mcp","etapeStatutId":"com"},{"date":"2020-06-23","etapeTypeId":"vfd","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-09","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-08-27","etapeTypeId":"sca","etapeStatutId":"fai"},{"date":"2020-09-01","etapeTypeId":"aca","etapeStatutId":"fav"},{"date":"2020-09-08","etapeTypeId":"sco","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}}]}]
diff --git a/packages/api/src/business/rules-demarches/arm/oct.machine.test.ts b/packages/api/src/business/rules-demarches/arm/oct.machine.test.ts
index afb4dbd0d..91fb032d7 100644
--- a/packages/api/src/business/rules-demarches/arm/oct.machine.test.ts
+++ b/packages/api/src/business/rules-demarches/arm/oct.machine.test.ts
@@ -3,9 +3,11 @@ import { interpretMachine, orderAndInterpretMachine as commonOrderAndInterpretMa
 import { IContenu } from '../../../types.js'
 import { EtapeStatutId, ETAPES_STATUTS } from 'camino-common/src/static/etapesStatuts.js'
 import { ETAPES_TYPES, EtapeTypeId } from 'camino-common/src/static/etapesTypes.js'
+import { EtapesTypesEtapesStatuts as ETES } from 'camino-common/src/static/etapesTypesEtapesStatuts.js'
 import { Etape } from '../machine-common.js'
 import { toCaminoDate } from 'camino-common/src/date.js'
 import { describe, expect, test } from 'vitest'
+import { PAYS_IDS } from 'camino-common/src/static/pays.js'
 const etapesProd = require('./oct.cas.json')
 const orderAndInterpretMachine = (etapes: readonly Etape[]) => {
   return commonOrderAndInterpretMachine(new ArmOctMachine(), etapes)
@@ -122,7 +124,33 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
       'MODIFIER_DEMANDE',
     ])
   })
-
+  test('peut faire une edm après une asc', () => {
+    const etapes = [
+      { ...ETES.paiementDesFraisDeDossier.FAIT, date: toCaminoDate('2023-09-01') },
+      { ...ETES.demande.FAIT, date: toCaminoDate('2023-09-09'), paysId: PAYS_IDS['Département de la Guyane'], surface: 3.14 },
+      { ...ETES.depotDeLaDemande.FAIT, date: toCaminoDate('2023-09-09') },
+      { ...ETES.completudeDeLaDemande.COMPLETE, date: toCaminoDate('2023-09-20') },
+      { ...ETES.validationDuPaiementDesFraisDeDossier.FAIT, date: toCaminoDate('2023-09-26') },
+      { ...ETES.recevabiliteDeLaDemande.FAVORABLE, date: toCaminoDate('2023-09-27') },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2023-09-27') },
+      { ...ETES.expertiseDGTMServicePreventionDesRisquesEtIndustriesExtractives_DATE_.FAVORABLE, date: toCaminoDate('2024-03-27') },
+    ]
+    expect(() => orderAndInterpretMachine(etapes)).not.toThrowError()
+  })
+  test('ne peut pas faire une sca avant la asc', () => {
+    const etapes = [
+      { ...ETES.paiementDesFraisDeDossier.FAIT, date: toCaminoDate('2023-09-01') },
+      { ...ETES.demande.FAIT, date: toCaminoDate('2023-09-09'), paysId: PAYS_IDS['Département de la Guyane'], surface: 3.14 },
+      { ...ETES.depotDeLaDemande.FAIT, date: toCaminoDate('2023-09-09') },
+      { ...ETES.completudeDeLaDemande.COMPLETE, date: toCaminoDate('2023-09-20') },
+      { ...ETES.validationDuPaiementDesFraisDeDossier.FAIT, date: toCaminoDate('2023-09-26') },
+      { ...ETES.recevabiliteDeLaDemande.FAVORABLE, date: toCaminoDate('2023-09-27') },
+      { ...ETES.saisineDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_.FAIT, date: toCaminoDate('2023-09-27') },
+    ]
+    expect(() => orderAndInterpretMachine(etapes)).toThrowErrorMatchingInlineSnapshot(
+      `[Error: Error: cannot execute step: '{"etapeTypeId":"sca","etapeStatutId":"fai","date":"2023-09-27"}' after '["pfd_fai","mfr_fai","mdp_fai","mcp_com","vfd_fai","mcr_fav"]'. The event {"type":"FAIRE_SAISINE_CARM"} should be one of 'CLASSER_SANS_SUITE,DESISTER_PAR_LE_DEMANDEUR,MODIFIER_DEMANDE,RECEVOIR_EXPERTISE_SERVICE_EAU,RECEVOIR_EXPERTISE_SERVICE_MINES,RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES']`
+    )
+  })
   test('la demande ne peut pas être effectuée après une modification de la demande', () => {
     const service = orderAndInterpretMachine([
       {
@@ -441,13 +469,8 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
         date: toCaminoDate('2020-01-07'),
       },
       {
-        etapeTypeId: 'eof',
+        etapeTypeId: 'asc',
         etapeStatutId: 'fai',
-        date: toCaminoDate('2020-01-08'),
-      },
-      {
-        etapeTypeId: 'aof',
-        etapeStatutId: 'fav',
         date: toCaminoDate('2020-01-09'),
       },
       {
@@ -507,15 +530,10 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
           date: toCaminoDate('2020-01-01'),
         },
         {
-          etapeTypeId: 'eof',
+          etapeTypeId: 'asc',
           etapeStatutId: 'fai',
           date: toCaminoDate('2020-01-01'),
         },
-        {
-          etapeTypeId: 'aof',
-          etapeStatutId: 'fav',
-          date: toCaminoDate('2020-01-01'),
-        },
         {
           etapeTypeId: 'sca',
           etapeStatutId: 'fai',
@@ -553,12 +571,7 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
         etapeStatutId: 'fai',
       },
       {
-        etapeTypeId: 'aof',
-        date: toCaminoDate('2020-06-19'),
-        etapeStatutId: 'def',
-      },
-      {
-        etapeTypeId: 'eof',
+        etapeTypeId: 'asc',
         date: toCaminoDate('2020-06-19'),
         etapeStatutId: 'fai',
       },
@@ -628,15 +641,10 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
         etapeStatutId: 'fav',
       },
       {
-        etapeTypeId: 'eof',
+        etapeTypeId: 'asc',
         date: toCaminoDate('2020-02-05'),
         etapeStatutId: 'fai',
       },
-      {
-        etapeTypeId: 'aof',
-        date: toCaminoDate('2020-02-05'),
-        etapeStatutId: 'fav',
-      },
       {
         etapeTypeId: 'mod',
         date: toCaminoDate('2020-06-17'),
@@ -670,7 +678,7 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
     ])
   })
 
-  test('peut créer une "sca" après une "aof" et "rde"', () => {
+  test('peut créer une "sca" après une "asc" et "rde"', () => {
     orderAndInterpretMachine([
       {
         etapeTypeId: 'dae',
@@ -715,15 +723,10 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
         etapeStatutId: 'fav',
       },
       {
-        etapeTypeId: 'eof',
+        etapeTypeId: 'asc',
         date: toCaminoDate('2020-08-10'),
         etapeStatutId: 'fai',
       },
-      {
-        etapeTypeId: 'aof',
-        date: toCaminoDate('2020-08-10'),
-        etapeStatutId: 'fav',
-      },
       {
         etapeTypeId: 'sca',
         date: toCaminoDate('2020-09-04'),
@@ -771,12 +774,7 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
         contenu: { arm: { franchissements: 3 } },
       },
       {
-        etapeTypeId: 'aof',
-        etapeStatutId: 'fav',
-        date: toCaminoDate('2020-02-08'),
-      },
-      {
-        etapeTypeId: 'eof',
+        etapeTypeId: 'asc',
         etapeStatutId: 'fai',
         date: toCaminoDate('2020-02-07'),
       },
@@ -822,12 +820,7 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
   test('les étapes sont vérifiées dans le bon ordre', () => {
     orderAndInterpretMachine([
       {
-        etapeTypeId: 'aof',
-        etapeStatutId: 'fav',
-        date: toCaminoDate('2021-06-08'),
-      },
-      {
-        etapeTypeId: 'eof',
+        etapeTypeId: 'asc',
         etapeStatutId: 'fai',
         date: toCaminoDate('2021-06-02'),
       },
@@ -909,8 +902,8 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
         date: toCaminoDate('2021-09-24'),
       },
       {
-        etapeTypeId: 'aof',
-        etapeStatutId: 'def',
+        etapeTypeId: 'asc',
+        etapeStatutId: 'fai',
         date: toCaminoDate('2021-09-23'),
       },
       {
@@ -924,11 +917,6 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
         etapeStatutId: 'fav',
         date: toCaminoDate('2021-04-30'),
       },
-      {
-        etapeTypeId: 'eof',
-        etapeStatutId: 'fai',
-        date: toCaminoDate('2021-03-17'),
-      },
       {
         etapeTypeId: 'mcb',
         etapeStatutId: 'fai',
@@ -973,61 +961,6 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
     ])
   })
 
-  test('peut réaliser une demande d’informations sur l’avis de l’ONF', () => {
-    orderAndInterpretMachine([
-      {
-        etapeTypeId: 'aof',
-        etapeStatutId: 'def',
-        date: toCaminoDate('2021-09-23'),
-      },
-      {
-        etapeTypeId: 'ria',
-        etapeStatutId: 'fai',
-        date: toCaminoDate('2021-09-21'),
-      },
-      {
-        etapeTypeId: 'mia',
-        etapeStatutId: 'fai',
-        date: toCaminoDate('2021-09-20'),
-      },
-      {
-        etapeTypeId: 'eof',
-        etapeStatutId: 'fai',
-        date: toCaminoDate('2021-03-17'),
-      },
-      {
-        etapeTypeId: 'mcr',
-        etapeStatutId: 'fav',
-        date: toCaminoDate('2021-03-10'),
-      },
-      {
-        etapeTypeId: 'vfd',
-        etapeStatutId: 'fai',
-        date: toCaminoDate('2021-03-10'),
-      },
-      {
-        etapeTypeId: 'mcp',
-        etapeStatutId: 'com',
-        date: toCaminoDate('2021-02-26'),
-      },
-      {
-        etapeTypeId: 'mdp',
-        etapeStatutId: 'fai',
-        date: toCaminoDate('2021-02-26'),
-      },
-      {
-        etapeTypeId: 'mfr',
-        etapeStatutId: 'fai',
-        date: toCaminoDate('2021-02-26'),
-      },
-      {
-        etapeTypeId: 'pfd',
-        etapeStatutId: 'fai',
-        date: toCaminoDate('2020-09-03'),
-      },
-    ])
-  })
-
   test('peut réaliser une demande de compléments après un avis de la CARM ajourné', () => {
     orderAndInterpretMachine([
       {
@@ -1061,14 +994,9 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
         date: toCaminoDate('2021-09-24'),
       },
       {
-        etapeTypeId: 'aof',
-        etapeStatutId: 'fav',
-        date: toCaminoDate('2021-09-23'),
-      },
-      {
-        etapeTypeId: 'eof',
+        etapeTypeId: 'asc',
         etapeStatutId: 'fai',
-        date: toCaminoDate('2021-03-17'),
+        date: toCaminoDate('2021-09-23'),
       },
       {
         etapeTypeId: 'mcr',
@@ -1136,14 +1064,9 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
         date: toCaminoDate('2021-09-24'),
       },
       {
-        etapeTypeId: 'aof',
-        etapeStatutId: 'fav',
-        date: toCaminoDate('2021-09-23'),
-      },
-      {
-        etapeTypeId: 'eof',
+        etapeTypeId: 'asc',
         etapeStatutId: 'fai',
-        date: toCaminoDate('2021-03-17'),
+        date: toCaminoDate('2021-09-23'),
       },
       {
         etapeTypeId: 'mcr',
@@ -1221,14 +1144,9 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
         date: toCaminoDate('2021-09-24'),
       },
       {
-        etapeTypeId: 'aof',
-        etapeStatutId: 'fav',
-        date: toCaminoDate('2021-09-23'),
-      },
-      {
-        etapeTypeId: 'eof',
+        etapeTypeId: 'asc',
         etapeStatutId: 'fai',
-        date: toCaminoDate('2021-03-17'),
+        date: toCaminoDate('2021-09-23'),
       },
       {
         etapeTypeId: 'mcr',
@@ -1374,14 +1292,9 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
         date: toCaminoDate('2021-10-01'),
       },
       {
-        etapeTypeId: 'aof',
-        etapeStatutId: 'fav',
-        date: toCaminoDate('2021-09-23'),
-      },
-      {
-        etapeTypeId: 'eof',
+        etapeTypeId: 'asc',
         etapeStatutId: 'fai',
-        date: toCaminoDate('2021-03-17'),
+        date: toCaminoDate('2021-09-23'),
       },
       {
         etapeTypeId: 'mcr',
@@ -1481,14 +1394,9 @@ describe('vérifie l’arbre d’octroi d’ARM', () => {
         date: toCaminoDate('2021-10-01'),
       },
       {
-        etapeTypeId: 'aof',
-        etapeStatutId: 'fav',
-        date: toCaminoDate('2021-09-23'),
-      },
-      {
-        etapeTypeId: 'eof',
+        etapeTypeId: 'asc',
         etapeStatutId: 'fai',
-        date: toCaminoDate('2021-03-17'),
+        date: toCaminoDate('2021-09-23'),
       },
       {
         etapeTypeId: 'mcr',
diff --git a/packages/api/src/business/rules-demarches/arm/oct.machine.ts b/packages/api/src/business/rules-demarches/arm/oct.machine.ts
index f2c695404..87be32dfc 100644
--- a/packages/api/src/business/rules-demarches/arm/oct.machine.ts
+++ b/packages/api/src/business/rules-demarches/arm/oct.machine.ts
@@ -50,10 +50,7 @@ type XStateEvent =
   | { type: 'NOTIFIER_DEMANDEUR_CSS' }
   | { type: 'DECLARER_DEMANDE_FAVORABLE' }
   | { type: 'DECLARER_DEMANDE_DEFAVORABLE' }
-  | { type: 'FAIRE_EXPERTISE_ONF' }
-  | { type: 'RENDRE_AVIS_ONF' }
-  | { type: 'DEMANDER_INFORMATION_AVIS_ONF' }
-  | { type: 'RECEVOIR_INFORMATION_AVIS_ONF' }
+  | { type: 'RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES' }
   | { type: 'FAIRE_SAISINE_CARM' }
   | { type: 'RENDRE_AVIS_FAVORABLE_CARM' }
   | { type: 'RENDRE_AVIS_DEFAVORABLE_CARM' }
@@ -70,8 +67,6 @@ type XStateEvent =
   | { type: 'RECEVOIR_INFORMATION_MCR' }
   | { type: 'DEMANDER_COMPLEMENTS_MCR' }
   | { type: 'RECEVOIR_COMPLEMENTS_MCR' }
-  | { type: 'DEMANDER_INFORMATION_EXPERTISE_ONF' }
-  | { type: 'RECEVOIR_INFORMATION_EXPERTISE_ONF' }
   | { type: 'RECEVOIR_EXPERTISE_SERVICE_EAU' }
   | { type: 'RECEVOIR_EXPERTISE_SERVICE_MINES' }
   | { type: 'NOTIFIER_DEMANDEUR_SIGNATURE_ARM' }
@@ -143,10 +138,7 @@ const trad: { [key in Event]: { db: DBEtat; mainStep: boolean } } = {
     },
     mainStep: false,
   },
-  FAIRE_EXPERTISE_ONF: { db: EtapesTypesEtapesStatuts.expertiseDeLOfficeNationalDesForets, mainStep: true },
-  RENDRE_AVIS_ONF: { db: EtapesTypesEtapesStatuts.avisDeLOfficeNationalDesForets, mainStep: true },
-  DEMANDER_INFORMATION_AVIS_ONF: { db: EtapesTypesEtapesStatuts.demandeDinformations_AvisDeLOfficeNationalDesForets_, mainStep: false },
-  RECEVOIR_INFORMATION_AVIS_ONF: { db: EtapesTypesEtapesStatuts.receptionDinformation_AvisDeLOfficeNationalDesForets_, mainStep: false },
+  RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES: { db: EtapesTypesEtapesStatuts.avisDesServicesEtCommissionsConsultatives, mainStep: true },
   FAIRE_SAISINE_CARM: { db: EtapesTypesEtapesStatuts.saisineDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_, mainStep: true },
   RENDRE_AVIS_FAVORABLE_CARM: {
     db: {
@@ -179,8 +171,6 @@ const trad: { [key in Event]: { db: DBEtat; mainStep: boolean } } = {
   RECEVOIR_INFORMATION_MCR: { db: EtapesTypesEtapesStatuts.receptionDinformation_RecevabiliteDeLaDemande_, mainStep: false },
   DEMANDER_COMPLEMENTS_MCR: { db: EtapesTypesEtapesStatuts.demandeDeComplements_RecevabiliteDeLaDemande_, mainStep: false },
   RECEVOIR_COMPLEMENTS_MCR: { db: EtapesTypesEtapesStatuts.receptionDeComplements_RecevabiliteDeLaDemande_, mainStep: false },
-  DEMANDER_INFORMATION_EXPERTISE_ONF: { db: EtapesTypesEtapesStatuts.demandeDinformations_ExpertiseDeLOfficeNationalDesForets_, mainStep: false },
-  RECEVOIR_INFORMATION_EXPERTISE_ONF: { db: EtapesTypesEtapesStatuts.receptionDinformation_ExpertiseDeLOfficeNationalDesForets_, mainStep: false },
   RECEVOIR_EXPERTISE_SERVICE_EAU: { db: EtapesTypesEtapesStatuts.expertiseDREALOuDGTMServiceEau, mainStep: false },
   RECEVOIR_EXPERTISE_SERVICE_MINES: { db: EtapesTypesEtapesStatuts.expertiseDGTMServicePreventionDesRisquesEtIndustriesExtractives_DATE_, mainStep: false },
   NOTIFIER_DEMANDEUR_SIGNATURE_ARM: { db: EtapesTypesEtapesStatuts.notificationAuDemandeur_SignatureDeLautorisationDeRechercheMiniere_, mainStep: true },
@@ -307,7 +297,7 @@ type MecanisationInconnu = MecanisationConnu | 'inconnu'
 
 interface OctARMContext extends CaminoCommonContext {
   mecanisation: MecanisationInconnu
-  expertiseONFFaite: boolean
+  avisDesServicesEtCommissionsConsultativesFait: boolean
   paiementFraisDossierValide: boolean
 }
 
@@ -413,8 +403,8 @@ const armOctMachine = createMachine({
   initial: 'demandeEnConstructionOuDeposeeOuEnInstructionMachine',
   context: {
     mecanisation: 'inconnu',
-    expertiseONFFaite: false,
     visibilite: 'confidentielle',
+    avisDesServicesEtCommissionsConsultativesFait: false,
     demarcheStatut: DemarchesStatutsIds.EnConstruction,
     paiementFraisDossierValide: false,
   },
@@ -616,54 +606,26 @@ const armOctMachine = createMachine({
                 DEMANDER_INFORMATION_MCR: 'receptionInformationPourLaRecevabiliteAFaire',
                 DEMANDER_COMPLEMENTS_MCR: 'receptionComplementsPourLaRecevabiliteAFaire',
                 DECLARER_DEMANDE_FAVORABLE: 'expertisesMachine',
-                DECLARER_DEMANDE_DEFAVORABLE: 'avisONFARendre',
+                DECLARER_DEMANDE_DEFAVORABLE: 'avisDesServicesEtCommissionsConsultativesARendre',
               },
             },
             receptionInformationPourLaRecevabiliteAFaire: {
               on: {
                 RECEVOIR_INFORMATION_MCR: 'recevabiliteDeLaDemandeAFaire',
                 DECLARER_DEMANDE_FAVORABLE: 'expertisesMachine',
-                DECLARER_DEMANDE_DEFAVORABLE: 'avisONFARendre',
+                DECLARER_DEMANDE_DEFAVORABLE: 'avisDesServicesEtCommissionsConsultativesARendre',
               },
             },
             receptionComplementsPourLaRecevabiliteAFaire: {
               on: {
                 RECEVOIR_COMPLEMENTS_MCR: 'recevabiliteDeLaDemandeAFaire',
                 DECLARER_DEMANDE_FAVORABLE: 'expertisesMachine',
-                DECLARER_DEMANDE_DEFAVORABLE: 'avisONFARendre',
+                DECLARER_DEMANDE_DEFAVORABLE: 'avisDesServicesEtCommissionsConsultativesARendre',
               },
             },
             expertisesMachine: {
               type: 'parallel',
               states: {
-                expertiseONFMachine: {
-                  initial: 'expertiseONFAFaire',
-                  states: {
-                    expertiseONFAFaire: {
-                      on: {
-                        DEMANDER_INFORMATION_EXPERTISE_ONF: 'expertiseOuReceptionInformationONFAFaire',
-                        FAIRE_EXPERTISE_ONF: 'demandeAvisONFAFaire',
-                      },
-                    },
-                    expertiseOuReceptionInformationONFAFaire: {
-                      on: {
-                        FAIRE_EXPERTISE_ONF: 'demandeAvisONFAFaire',
-                        RECEVOIR_INFORMATION_EXPERTISE_ONF: 'expertiseONFAFaire',
-                      },
-                    },
-                    demandeAvisONFAFaire: {
-                      on: {
-                        DEMANDER_INFORMATION_AVIS_ONF: 'receptionInformationAvisONFAFaire',
-                      },
-                      entry: assign({ expertiseONFFaite: true }),
-                    },
-                    receptionInformationAvisONFAFaire: {
-                      on: {
-                        RECEVOIR_INFORMATION_AVIS_ONF: 'demandeAvisONFAFaire',
-                      },
-                    },
-                  },
-                },
                 expertiseServiceEauMachine: {
                   initial: 'expertiseServiceEauAfaire',
                   states: {
@@ -688,20 +650,37 @@ const armOctMachine = createMachine({
                     expertiseServiceMinesFait: { type: 'final' },
                   },
                 },
+                avisDesServicesEtCommissionsConsultativesMachine: {
+                  initial: 'avisDesServicesEtCommissionsConsultativesARendre',
+                  states: {
+                    avisDesServicesEtCommissionsConsultativesARendre: {
+                      on: {
+                        RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES: {
+                          target: 'avisDesServicesEtCommissionsConsultativesRendu',
+                          actions: assign({ avisDesServicesEtCommissionsConsultativesFait: true }),
+                        },
+                      },
+                    },
+                    avisDesServicesEtCommissionsConsultativesRendu: { type: 'final' },
+                  },
+                },
               },
               on: {
-                RENDRE_AVIS_ONF: {
-                  target: 'avisONFRendu',
-                  guard: ({ context }) => context.expertiseONFFaite,
+                FAIRE_SAISINE_CARM: {
+                  target: '#avisCommissionAutorisationDeRecherchesMinieresAFaire',
+                  actions: assign({
+                    visibilite: 'publique',
+                  }),
+                  guard: ({ context }) => context.avisDesServicesEtCommissionsConsultativesFait,
                 },
               },
             },
-            avisONFARendre: {
+            avisDesServicesEtCommissionsConsultativesARendre: {
               on: {
-                RENDRE_AVIS_ONF: 'avisONFRendu',
+                RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES: 'avisDesServicesEtCommissionsConsultativesRendu',
               },
             },
-            avisONFRendu: { type: 'final' },
+            avisDesServicesEtCommissionsConsultativesRendu: { type: 'final' },
           },
         },
         declarationLoiSurLEauMachine: {
@@ -784,7 +763,7 @@ const armOctMachine = createMachine({
         DEMANDER_COMPLEMENTS_RDE: {
           target: [
             'demandeEnConstructionOuDeposeeOuEnInstructionMachine.declarationLoiSurLEauMachine.receptionDeComplementsAFaire',
-            'demandeEnConstructionOuDeposeeOuEnInstructionMachine.pasRdeMachine.avisONFRendu',
+            'demandeEnConstructionOuDeposeeOuEnInstructionMachine.pasRdeMachine.avisDesServicesEtCommissionsConsultativesRendu',
           ],
           guard: ({ context }) => isMecanise(context.mecanisation) && !context.mecanisation.franchissementCoursEau,
         },
@@ -801,6 +780,7 @@ const armOctMachine = createMachine({
       },
     },
     avisCommissionAutorisationDeRecherchesMinieresAFaire: {
+      id: 'avisCommissionAutorisationDeRecherchesMinieresAFaire',
       on: {
         RENDRE_AVIS_FAVORABLE_CARM: [
           {
diff --git a/packages/api/src/business/rules-demarches/arm/ren-pro.machine.test.ts b/packages/api/src/business/rules-demarches/arm/ren-pro.machine.test.ts
index 691a61fff..c8ebbe191 100644
--- a/packages/api/src/business/rules-demarches/arm/ren-pro.machine.test.ts
+++ b/packages/api/src/business/rules-demarches/arm/ren-pro.machine.test.ts
@@ -26,7 +26,7 @@ describe('vérifie l’arbre de renonciation et de prolongation d’ARM', () =>
         { ...ETES.modificationDeLaDemande.FAIT, date: toCaminoDate('2020-06-30') },
       ])
     ).toThrowErrorMatchingInlineSnapshot(
-      `[Error: Error: cannot execute step: '{"etapeTypeId":"mod","etapeStatutId":"fai","date":"2020-06-30"}' after '["mfr_fai","mdp_fai","mcr_fav"]'. The event {"type":"RECEVOIR_MODIFICATION_DE_LA_DEMANDE"} should be one of 'CLASSER_SANS_SUITE,DEMANDER_INFORMATION_EXPERTISE_ONF,DESISTER_PAR_LE_DEMANDEUR,FAIRE_EXPERTISE_ONF']`
+      `[Error: Error: cannot execute step: '{"etapeTypeId":"mod","etapeStatutId":"fai","date":"2020-06-30"}' after '["mfr_fai","mdp_fai","mcr_fav"]'. The event {"type":"RECEVOIR_MODIFICATION_DE_LA_DEMANDE"} should be one of 'CLASSER_SANS_SUITE,DESISTER_PAR_LE_DEMANDEUR,RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES']`
     )
   })
 
@@ -44,13 +44,12 @@ describe('vérifie l’arbre de renonciation et de prolongation d’ARM', () =>
     )
   })
 
-  test('peut mettre une "aof" après une "eof"', () => {
+  test('peut mettre une "asc" après une "mcp"', () => {
     const service = orderAndInterpretMachine(armRenProMachine, [
       { ...ETES.demande.FAIT, date: toCaminoDate('2020-05-27') },
       { ...ETES.depotDeLaDemande.FAIT, date: toCaminoDate('2020-05-30') },
       { ...ETES.recevabiliteDeLaDemande.FAVORABLE, date: toCaminoDate('2020-05-30') },
-      { ...ETES.expertiseDeLOfficeNationalDesForets.FAIT, date: toCaminoDate('2020-06-30') },
-      { ...ETES.avisDeLOfficeNationalDesForets.FAVORABLE, date: toCaminoDate('2020-06-30') },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2020-06-30') },
     ])
     expect(service.getSnapshot().context.demarcheStatut).toBe(DemarchesStatutsIds.Accepte)
   })
diff --git a/packages/api/src/business/rules-demarches/arm/ren-pro.machine.ts b/packages/api/src/business/rules-demarches/arm/ren-pro.machine.ts
index 44cce6caf..687f4db4e 100644
--- a/packages/api/src/business/rules-demarches/arm/ren-pro.machine.ts
+++ b/packages/api/src/business/rules-demarches/arm/ren-pro.machine.ts
@@ -12,14 +12,7 @@ type XStateEvent =
   | { type: 'FAIRE_RECEVABILITE_DEMANDE_DEFAVORABLE' }
   | { type: 'RECEVOIR_MODIFICATION_DE_LA_DEMANDE' }
   | { type: 'RECEVOIR_COMPLEMENTS_POUR_RECEVABILITE' }
-  | { type: 'DEMANDER_INFORMATION_EXPERTISE_ONF' }
-  | { type: 'RECEVOIR_INFORMATION_EXPERTISE_ONF' }
-  | { type: 'FAIRE_EXPERTISE_ONF' }
-  | { type: 'DEMANDER_INFORMATION_AVIS_ONF' }
-  | { type: 'RECEVOIR_INFORMATION_AVIS_ONF' }
-  | { type: 'RENDRE_AVIS_ONF_FAVORABLE' }
-  | { type: 'RENDRE_AVIS_ONF_DEFAVORABLE' }
-  | { type: 'NOTIFIER_DEMANDEUR_APRES_AVIS_ONF_DEFAVORABLE' }
+  | { type: 'RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES' }
   | { type: 'FAIRE_AVENANT_ARM' }
   | { type: 'NOTIFIER_AVENANT_ARM' }
   | { type: 'DESISTER_PAR_LE_DEMANDEUR' }
@@ -27,7 +20,8 @@ type XStateEvent =
   | { type: 'NOTIFIER_DEMANDEUR_APRES_CLASSEMENT_SANS_SUITE' }
 
 type Event = XStateEvent['type']
-
+// TODO 2024-06-12 on finit toujours en statut accepté après l'avis, et on fait l'avenant à l'autorisation de recherch minière (aco)
+// Si un jour on a un cas de rejet (peu probable car cette arbre ne sera plus utilisé avec la réforme), il faudra probablement rajouter une étape intermédiaire
 const trad: { [key in Event]: { db: DBEtat; mainStep: boolean } } = {
   FAIRE_DEMANDE: { db: EtapesTypesEtapesStatuts.demande, mainStep: true },
   DEPOSER_DEMANDE: { db: EtapesTypesEtapesStatuts.depotDeLaDemande, mainStep: true },
@@ -46,14 +40,7 @@ const trad: { [key in Event]: { db: DBEtat; mainStep: boolean } } = {
   },
   RECEVOIR_MODIFICATION_DE_LA_DEMANDE: { db: EtapesTypesEtapesStatuts.modificationDeLaDemande, mainStep: false },
   RECEVOIR_COMPLEMENTS_POUR_RECEVABILITE: { db: EtapesTypesEtapesStatuts.receptionDeComplements_RecevabiliteDeLaDemande_, mainStep: false },
-  DEMANDER_INFORMATION_EXPERTISE_ONF: { db: EtapesTypesEtapesStatuts.demandeDinformations_ExpertiseDeLOfficeNationalDesForets_, mainStep: false },
-  RECEVOIR_INFORMATION_EXPERTISE_ONF: { db: EtapesTypesEtapesStatuts.receptionDinformation_ExpertiseDeLOfficeNationalDesForets_, mainStep: false },
-  FAIRE_EXPERTISE_ONF: { db: EtapesTypesEtapesStatuts.expertiseDeLOfficeNationalDesForets, mainStep: true },
-  DEMANDER_INFORMATION_AVIS_ONF: { db: EtapesTypesEtapesStatuts.demandeDinformations_AvisDeLOfficeNationalDesForets_, mainStep: false },
-  RECEVOIR_INFORMATION_AVIS_ONF: { db: EtapesTypesEtapesStatuts.receptionDinformation_AvisDeLOfficeNationalDesForets_, mainStep: false },
-  RENDRE_AVIS_ONF_FAVORABLE: { db: { FAVORABLE: EtapesTypesEtapesStatuts.avisDeLOfficeNationalDesForets.FAVORABLE }, mainStep: true },
-  RENDRE_AVIS_ONF_DEFAVORABLE: { db: { DEFAVORABLE: EtapesTypesEtapesStatuts.avisDeLOfficeNationalDesForets.DEFAVORABLE }, mainStep: true },
-  NOTIFIER_DEMANDEUR_APRES_AVIS_ONF_DEFAVORABLE: { db: EtapesTypesEtapesStatuts.notificationAuDemandeur_AvisDefavorable_, mainStep: true },
+  RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES: { db: EtapesTypesEtapesStatuts.avisDesServicesEtCommissionsConsultatives, mainStep: true },
   FAIRE_AVENANT_ARM: { db: EtapesTypesEtapesStatuts.avenantALautorisationDeRechercheMiniere, mainStep: true },
   NOTIFIER_AVENANT_ARM: { db: EtapesTypesEtapesStatuts.notificationAuDemandeur_SignatureDeLavenantALautorisationDeRechercheMiniere_, mainStep: true },
   DESISTER_PAR_LE_DEMANDEUR: { db: EtapesTypesEtapesStatuts.desistementDuDemandeur, mainStep: false },
@@ -134,7 +121,7 @@ const armRenProMachine = createMachine({
       on: {
         DEMANDER_COMPLEMENTS_POUR_RECEVABILITE: 'complementsPourRecevabiliteAFaire',
         FAIRE_RECEVABILITE_DEMANDE_FAVORABLE: {
-          target: 'expertiseONFAFaire',
+          target: 'avisDesServicesEtCommissionsConsultativesARendre',
           actions: assign({
             demarcheStatut: DemarchesStatutsIds.EnInstruction,
             visibilite: 'publique',
@@ -147,7 +134,7 @@ const armRenProMachine = createMachine({
       on: {
         RECEVOIR_COMPLEMENTS_POUR_RECEVABILITE: 'recevabiliteDeLaDemandeAFaire',
         FAIRE_RECEVABILITE_DEMANDE_FAVORABLE: {
-          target: 'expertiseONFAFaire',
+          target: 'avisDesServicesEtCommissionsConsultativesARendre',
           actions: assign({
             demarcheStatut: DemarchesStatutsIds.EnInstruction,
             visibilite: 'publique',
@@ -161,50 +148,14 @@ const armRenProMachine = createMachine({
         RECEVOIR_MODIFICATION_DE_LA_DEMANDE: 'recevabiliteDeLaDemandeAFaire',
       },
     },
-    expertiseONFAFaire: {
-      on: {
-        DEMANDER_INFORMATION_EXPERTISE_ONF: 'expertiseOuReceptionInformationONFAFaire',
-        FAIRE_EXPERTISE_ONF: 'demandeAvisONFAFaire',
-      },
-    },
-    expertiseOuReceptionInformationONFAFaire: {
-      on: {
-        FAIRE_EXPERTISE_ONF: 'demandeAvisONFAFaire',
-        RECEVOIR_INFORMATION_EXPERTISE_ONF: 'expertiseONFAFaire',
-      },
-    },
-    demandeAvisONFAFaire: {
-      on: {
-        DEMANDER_INFORMATION_AVIS_ONF: 'receptionInformationAvisONFAFaire',
-        RENDRE_AVIS_ONF_FAVORABLE: {
-          target: 'avenantARMAFaire',
-          actions: assign({
-            demarcheStatut: DemarchesStatutsIds.Accepte,
-          }),
-        },
-        RENDRE_AVIS_ONF_DEFAVORABLE: {
-          target: 'notificationDuDemandeurApresAvisONFDefavorableAFaire',
-          actions: assign({
-            demarcheStatut: DemarchesStatutsIds.Rejete,
-          }),
-        },
-      },
-    },
-    receptionInformationAvisONFAFaire: {
+    avisDesServicesEtCommissionsConsultativesARendre: {
       on: {
-        RECEVOIR_INFORMATION_AVIS_ONF: 'demandeAvisONFAFaire',
-        RENDRE_AVIS_ONF_FAVORABLE: {
+        RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES: {
           target: 'avenantARMAFaire',
           actions: assign({
             demarcheStatut: DemarchesStatutsIds.Accepte,
           }),
         },
-        RENDRE_AVIS_ONF_DEFAVORABLE: {
-          target: 'notificationDuDemandeurApresAvisONFDefavorableAFaire',
-          actions: assign({
-            demarcheStatut: DemarchesStatutsIds.Rejete,
-          }),
-        },
       },
     },
     avenantARMAFaire: {
@@ -213,11 +164,6 @@ const armRenProMachine = createMachine({
     notificationAvenantARMAFaire: {
       on: { NOTIFIER_AVENANT_ARM: 'avenantARMAFaire' },
     },
-    notificationDuDemandeurApresAvisONFDefavorableAFaire: {
-      on: {
-        NOTIFIER_DEMANDEUR_APRES_AVIS_ONF_DEFAVORABLE: 'done',
-      },
-    },
     notificationDuDemandeurApresClassementSansSuiteAFaire: {
       on: { NOTIFIER_DEMANDEUR_APRES_CLASSEMENT_SANS_SUITE: 'done' },
     },
diff --git a/packages/api/src/business/rules-demarches/arm/ren.cas.json b/packages/api/src/business/rules-demarches/arm/ren.cas.json
index a2ee7b307..c37370ef2 100644
--- a/packages/api/src/business/rules-demarches/arm/ren.cas.json
+++ b/packages/api/src/business/rules-demarches/arm/ren.cas.json
@@ -1 +1 @@
-[{"id":0,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-16","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-06-16","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-16","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-16","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-06-16","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-06-16","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-06-16","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":1,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-04-18","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-04-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-04-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-04-18","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-04-18","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-04-18","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":2,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-11","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-11","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-17","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-06-17","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-06-17","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":3,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-11-04","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-11-04","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-11-04","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-11-04","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-11-04","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-12-09","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":4,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-01-18","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-01-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-01-18","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-01-21","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-01-21","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-01-21","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":5,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-01-03","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-01-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-06","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-01-06","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-01-06","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-01-06","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":6,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-12-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-13","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-12-13","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-12-13","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-12-31","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":7,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-17","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-17","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-18","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-06-19","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-06-23","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":8,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-24","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-12-24","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-24","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-26","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-12-26","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-12-26","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-01-09","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":9,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-04-14","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-04-24","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-04-24","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-24","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-04-24","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-04-26","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-04-26","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":10,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-06","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-06-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-06","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-06","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-06-06","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-06-06","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-06-06","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":11,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-08-19","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-08-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-08-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-08-19","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-08-19","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-08-19","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":12,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-05-15","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-05-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-05-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-05-18","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-06-11","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-06-11","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":13,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-05","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-12-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-13","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-12-13","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-12-13","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-12-30","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":14,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-03","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-05-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-03","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-05-03","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-05-03","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-05-04","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-05-04","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":15,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-03-17","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-03-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-03-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-03-18","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-03-18","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-03-18","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-03-24","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":16,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-23","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-06-29","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-06-29","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":17,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-01","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-01","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-01","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-07","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-06-07","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-06-08","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-06-08","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":18,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[]},{"id":19,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-04-05","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-04-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-04-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-15","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-04-15","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-04-15","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-05-11","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":20,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2020-06-13","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-26","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":21,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-12","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-06-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-12","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-06-12","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-06-12","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-06-12","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":22,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-11-14","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-11-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-19","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-12-19","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-12-19","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":23,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-01-01","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-01-01","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-01-05","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-01-05","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-01-05","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-01-05","etapeTypeId":"mnv","etapeStatutId":"fai"},{"date":"2021-07-19","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":24,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-04-08","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-04-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-04-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-04-08","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-04-08","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-04-08","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":25,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-23","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-06-30","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-06-30","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":26,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-04-15","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-04-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-04-15","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-04-15","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2021-04-15","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-04-15","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":27,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-07","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-07","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-07","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-07","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-06-14","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-06-14","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-06-14","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":28,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-05","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-05","etapeTypeId":"eof","etapeStatutId":"fai"},{"date":"2020-06-05","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2020-06-10","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-06-10","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":29,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2020-03-06","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-03-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-03-03","etapeTypeId":"des","etapeStatutId":"fai"}]}]
+[{"id":0,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-16","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-06-16","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-16","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-16","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-06-16","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-06-16","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":1,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-04-18","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-04-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-04-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-04-18","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-04-18","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":2,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-11","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-11","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-17","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-06-17","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":3,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-11-04","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-11-04","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-11-04","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-11-04","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-12-09","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":4,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-01-18","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-01-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-01-18","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-01-21","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-01-21","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":5,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-01-03","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-01-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-06","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-01-06","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-01-06","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":6,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2020-12-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-13","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-12-13","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-12-31","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":7,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-17","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-17","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-18","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":8,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-24","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-12-24","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-24","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-26","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-12-26","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-01-09","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":9,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-04-14","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-04-24","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-04-24","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-24","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-04-26","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-04-26","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":10,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-06","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-06-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-06","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-06","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-06-06","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-06-06","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":11,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-08-19","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-08-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-08-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-08-19","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-08-19","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":12,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-05-15","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-05-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-05-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-05-18","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-06-11","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":13,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-05","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-12-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-13","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-12-13","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-12-30","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":14,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-03","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-05-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-03","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-05-03","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-05-04","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-05-04","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":15,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-03-17","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-03-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-03-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-03-18","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-03-18","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-03-24","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":16,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-23","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-06-29","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-06-29","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":17,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-01","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-01","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-01","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-07","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-06-08","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-06-08","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":18,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[]},{"id":19,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-04-05","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-04-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-04-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-15","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-04-15","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-05-11","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":20,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2020-06-13","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-26","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":21,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-12","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-06-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-12","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-06-12","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-06-12","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":22,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-11-14","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-11-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-12-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-12-19","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-12-19","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":23,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-01-01","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-01-01","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-01-05","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-01-05","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2021-01-05","etapeTypeId":"mnv","etapeStatutId":"fai"},{"date":"2021-07-19","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":24,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-04-08","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-04-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-04-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-04-08","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-04-08","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":25,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-23","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-06-30","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-06-30","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":26,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-04-15","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-04-15","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-04-15","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-04-15","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-04-15","etapeTypeId":"aco","etapeStatutId":"fai"}]},{"id":27,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-07","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-07","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-07","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-07","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-06-14","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-06-14","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":28,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-06-05","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-06-05","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-06-05","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-06-10","etapeTypeId":"aco","etapeStatutId":"fai"},{"date":"2020-06-10","etapeTypeId":"mnv","etapeStatutId":"fai"}]},{"id":29,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2020-03-06","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-03-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-03-03","etapeTypeId":"des","etapeStatutId":"fai"}]}]
diff --git a/packages/api/src/business/rules-demarches/axm/oct.cas.json b/packages/api/src/business/rules-demarches/axm/oct.cas.json
index a7f733b48..4c1df6ef7 100644
--- a/packages/api/src/business/rules-demarches/axm/oct.cas.json
+++ b/packages/api/src/business/rules-demarches/axm/oct.cas.json
@@ -1 +1 @@
-[{"id":0,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2021-03-31","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-19","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-03-08","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-03-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-10-23","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-10-23","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-10-23","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2022-10-23","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-10-25","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2022-11-01","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2022-11-05","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-11-21","etapeTypeId":"agn","etapeStatutId":"fav"},{"date":"2022-11-26","etapeTypeId":"apd","etapeStatutId":"fre"},{"date":"2022-11-26","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-12-04","etapeTypeId":"apo","etapeStatutId":"ajo"}]},{"id":1,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-03-28","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-16","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-03-05","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-03-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-10-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-10-20","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-10-20","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2022-10-20","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-10-22","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2022-10-29","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2022-11-02","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-11-18","etapeTypeId":"agn","etapeStatutId":"fav"},{"date":"2022-11-23","etapeTypeId":"apd","etapeStatutId":"fre"},{"date":"2022-11-23","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-12-01","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-12-11","etapeTypeId":"dex","etapeStatutId":"acc"},{"date":"2022-12-15","etapeTypeId":"mno","etapeStatutId":"fai"}]},{"id":2,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-09-26","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2020-10-03","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-01-06","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-01-09","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-05-29","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-06-03","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-06-03","etapeTypeId":"afp","etapeStatutId":"fre"},{"date":"2022-06-03","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-06-05","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2022-06-11","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2022-06-20","etapeTypeId":"ass","etapeStatutId":"fav"},{"date":"2022-06-27","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-06-30","etapeTypeId":"agn","etapeStatutId":"fav"},{"date":"2022-07-25","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-09-01","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-09-10","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-09-19","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":3,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2021-07-22","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-10-28","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-10-29","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-10-29","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":4,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[{"date":"2021-01-01","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-01-14","etapeTypeId":"dae","etapeStatutId":"exe"}]},{"id":5,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-11-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-12-10","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2023-01-02","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2023-01-02","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":6,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-03-20","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-08","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-10","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-06-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-09-03","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-09-29","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-10-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-10-13","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-10-13","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-10-29","etapeTypeId":"agn","etapeStatutId":"def"},{"date":"2021-11-03","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-11-18","etapeTypeId":"apd","etapeStatutId":"def"},{"date":"2021-12-09","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-12-17","etapeTypeId":"apo","etapeStatutId":"def"},{"date":"2022-01-11","etapeTypeId":"dex","etapeStatutId":"rej"}]},{"id":7,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2021-06-12","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-01","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-07-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-01-21","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":8,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-10","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-07-13","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-08-19","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2020-10-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-04-05","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-05-11","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-05-16","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-05-16","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-05-16","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-05-17","etapeTypeId":"afp","etapeStatutId":"fre"},{"date":"2021-05-19","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2021-05-30","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2021-05-31","etapeTypeId":"ass","etapeStatutId":"fav"},{"date":"2021-06-05","etapeTypeId":"agn","etapeStatutId":"fav"},{"date":"2021-07-28","etapeTypeId":"cps","etapeStatutId":"fav"},{"date":"2021-07-28","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2021-08-23","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-09-08","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2021-09-11","etapeTypeId":"sas","etapeStatutId":"fai"},{"date":"2021-10-23","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":9,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-21","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-07-24","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-08-30","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2020-10-16","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-04-16","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-05-22","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-05-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-05-27","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-05-27","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-05-28","etapeTypeId":"afp","etapeStatutId":"fre"},{"date":"2021-05-30","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2021-06-10","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2021-06-11","etapeTypeId":"ass","etapeStatutId":"fav"},{"date":"2021-06-16","etapeTypeId":"agn","etapeStatutId":"fav"},{"date":"2021-08-08","etapeTypeId":"cps","etapeStatutId":"fav"},{"date":"2021-08-08","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2021-09-03","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-09-19","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2021-09-22","etapeTypeId":"sas","etapeStatutId":"fai"},{"date":"2021-11-03","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":10,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-05","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-07-08","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-08-14","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2020-09-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-03-31","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-05-06","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-05-11","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-05-11","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-05-11","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-05-12","etapeTypeId":"afp","etapeStatutId":"fre"},{"date":"2021-05-14","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2021-05-25","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2021-05-26","etapeTypeId":"ass","etapeStatutId":"fav"},{"date":"2021-05-31","etapeTypeId":"agn","etapeStatutId":"fav"},{"date":"2021-07-23","etapeTypeId":"cps","etapeStatutId":"fav"},{"date":"2021-07-23","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2021-08-18","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-09-03","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2021-09-06","etapeTypeId":"sas","etapeStatutId":"fai"},{"date":"2021-10-18","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":11,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-08-16","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-01-05","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-02-18","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-02-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-07-20","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-07-22","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-07-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-27","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-07-27","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-07-27","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2021-07-30","etapeTypeId":"auc","etapeStatutId":"fav"},{"date":"2021-07-30","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2021-09-10","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2021-10-26","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-11-05","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2021-11-17","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":12,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-20","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-01-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-01-12","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-01-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-15","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-10-15","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-10-15","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-10-24","etapeTypeId":"agn","etapeStatutId":"fav"},{"date":"2021-11-01","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2021-11-18","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2021-11-21","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2021-12-04","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-12-12","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-01-06","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":13,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-03-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-15","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-17","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-06-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-09-10","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-10-06","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-10-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-10-20","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-10-20","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-11-05","etapeTypeId":"agn","etapeStatutId":"def"},{"date":"2021-11-10","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-11-25","etapeTypeId":"apd","etapeStatutId":"def"},{"date":"2021-12-16","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-12-24","etapeTypeId":"apo","etapeStatutId":"def"},{"date":"2022-01-18","etapeTypeId":"dex","etapeStatutId":"rej"}]},{"id":14,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-10-05","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-11-06","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-01-25","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-01-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-08-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-08-25","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-08-25","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-08-26","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2022-08-26","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2022-08-30","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2022-09-07","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-09-22","etapeTypeId":"agn","etapeStatutId":"def"},{"date":"2022-10-26","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-11-04","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-11-24","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":15,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2020-10-04","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-11-24","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-12-12","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2020-12-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-04","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":16,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[{"date":"2021-01-20","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-02-03","etapeTypeId":"dae","etapeStatutId":"exe"}]},{"id":17,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-17","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-09","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-06-15","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-10","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-10-10","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-10-10","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-10-25","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-11-08","etapeTypeId":"agn","etapeStatutId":"def"},{"date":"2021-11-13","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2021-12-28","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-01-16","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-01-26","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-02-20","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":18,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-30","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-06-28","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-23","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-10-23","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-10-23","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-11-07","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-11-21","etapeTypeId":"agn","etapeStatutId":"def"},{"date":"2021-11-26","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2022-01-10","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-01-29","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-02-08","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-03-05","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":19,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-02-24","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-04-28","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-04-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-20","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-07-30","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-08-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-08-14","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-08-14","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-01-13","etapeTypeId":"aec","etapeStatutId":"fav"},{"date":"2022-01-15","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2022-01-19","etapeTypeId":"ass","etapeStatutId":"fav"},{"date":"2022-01-20","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2022-01-26","etapeTypeId":"agn","etapeStatutId":"def"},{"date":"2022-01-28","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-02-24","etapeTypeId":"apd","etapeStatutId":"fre"},{"date":"2022-02-24","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-03-04","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-03-16","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":20,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-10-29","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-24","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-07-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-12-14","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2022-01-10","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2022-01-24","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-01-24","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-01-24","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-01-25","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2022-01-27","etapeTypeId":"ass","etapeStatutId":"fav"},{"date":"2022-02-08","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2022-02-14","etapeTypeId":"agn","etapeStatutId":"def"},{"date":"2022-02-21","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2022-03-15","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-03-15","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-03-23","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-04-04","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":21,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-11-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-03-04","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-06-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-08-26","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-09-09","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-09-30","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-09-30","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-09-30","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-10-01","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2021-10-13","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2021-10-22","etapeTypeId":"auc","etapeStatutId":"fav"},{"date":"2021-10-22","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-10-29","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2021-10-29","etapeTypeId":"agn","etapeStatutId":"fav"},{"date":"2021-11-03","etapeTypeId":"abs","etapeStatutId":"dre"},{"date":"2022-01-30","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-02-10","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-02-18","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-03-02","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":22,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-07","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-09-24","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-11-06","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-11-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-02-11","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-02-11","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-02-11","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-02-18","etapeTypeId":"afp","etapeStatutId":"fre"},{"date":"2022-02-18","etapeTypeId":"ass","etapeStatutId":"fre"},{"date":"2022-02-22","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2022-03-15","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2022-03-20","etapeTypeId":"agn","etapeStatutId":"fav"},{"date":"2022-03-26","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-03-26","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-04-05","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-04-25","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":23,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-09-29","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-11-26","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-03-30","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-03-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-08-22","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-09-16","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-11-01","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-01","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-11-01","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-11-02","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2021-11-07","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2021-11-08","etapeTypeId":"auc","etapeStatutId":"fav"},{"date":"2021-11-11","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2021-11-24","etapeTypeId":"agn","etapeStatutId":"def"},{"date":"2021-12-06","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2022-01-09","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-03-28","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-04-07","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-04-21","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":24,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-10-01","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2020-11-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-02-22","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-02-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-06-15","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2022-06-25","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2022-07-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-11-24","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-11-24","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2022-11-24","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-11-25","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2022-12-01","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2022-12-12","etapeTypeId":"ass","etapeStatutId":"fav"},{"date":"2022-12-16","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-12-22","etapeTypeId":"agn","etapeStatutId":"def"},{"date":"2022-12-23","etapeTypeId":"ama","etapeStatutId":"fav"},{"date":"2023-01-05","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2023-02-01","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2023-02-15","etapeTypeId":"dex","etapeStatutId":"acc"},{"date":"2023-02-16","etapeTypeId":"mno","etapeStatutId":"fai"}]},{"id":25,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2022-04-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-06-16","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-06-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-06-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-01-05","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2023-01-19","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2023-02-16","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-02-16","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2023-02-16","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2023-03-06","etapeTypeId":"abs","etapeStatutId":"def"},{"date":"2023-03-09","etapeTypeId":"ars","etapeStatutId":"def"},{"date":"2023-03-10","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2023-03-14","etapeTypeId":"aof","etapeStatutId":"fre"}]},{"id":26,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2022-04-11","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-06-01","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-06-08","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-06-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-12-21","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2023-01-04","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2023-02-01","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-02-01","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2023-02-01","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2023-02-19","etapeTypeId":"abs","etapeStatutId":"def"},{"date":"2023-02-22","etapeTypeId":"ars","etapeStatutId":"def"},{"date":"2023-02-23","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2023-02-27","etapeTypeId":"aof","etapeStatutId":"fre"}]},{"id":27,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-04-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-04-29","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-07-02","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-07-02","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":28,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-04-17","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-04-20","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-06-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-06-23","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":29,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-05","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-08-21","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-08-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-12-30","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2022-03-07","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2022-03-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-03-18","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-03-18","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-03-19","etapeTypeId":"aec","etapeStatutId":"fav"},{"date":"2022-03-19","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2022-03-19","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2022-03-31","etapeTypeId":"ass","etapeStatutId":"fav"},{"date":"2022-04-08","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-04-09","etapeTypeId":"agn","etapeStatutId":"def"},{"date":"2022-06-16","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-06-16","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-06-25","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-07-07","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":30,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-01-24","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-07-07","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-08-10","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-08-11","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":31,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-01-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-07-08","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-08-11","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-08-12","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":32,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-07-24","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-08-30","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-11-22","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-11-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-05-17","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2022-06-07","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2022-06-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-06-26","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-06-26","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-06-27","etapeTypeId":"afp","etapeStatutId":"fre"},{"date":"2022-07-13","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2022-07-17","etapeTypeId":"agn","etapeStatutId":"def"},{"date":"2022-07-20","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2022-07-26","etapeTypeId":"abs","etapeStatutId":"fre"},{"date":"2022-07-31","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2022-09-10","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-09-10","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-09-19","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-09-28","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":33,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2020-09-23","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2020-09-30","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-11-09","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-11-09","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-26","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-07-08","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-07-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-13","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-07-13","etapeTypeId":"afp","etapeStatutId":"def"},{"date":"2021-11-22","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":34,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-06-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-10-02","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-12-09","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-12-09","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":35,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-11-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-12-10","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-12-21","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2023-12-21","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":36,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-07-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-10-26","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-12-21","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-12-21","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":37,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2021-01-19","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-01-30","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-04-18","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-06-21","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":38,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[{"date":"2022-07-23","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-10-18","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-11-21","etapeTypeId":"mfr","etapeStatutId":"fai"}]},{"id":39,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2021-06-07","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-07","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-10-14","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-10-14","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":40,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2021-06-22","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-22","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-10-29","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-10-29","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":41,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-11-25","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-12-05","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2023-01-16","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2023-01-16","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":42,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-01-18","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-03-18","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-05-02","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-05-02","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-09-06","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-09-19","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-09-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-09-27","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-09-27","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-09-27","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2021-10-10","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2021-10-14","etapeTypeId":"agn","etapeStatutId":"def"},{"date":"2021-10-27","etapeTypeId":"ama","etapeStatutId":"fav"},{"date":"2021-10-27","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2021-11-04","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2021-12-11","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-12-19","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-01-22","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":43,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[]},{"id":44,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[]},{"id":45,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-28","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-03-27","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-07-04","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-07-04","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-02-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-02-19","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-02-19","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-02-19","etapeTypeId":"ass","etapeStatutId":"fav"},{"date":"2022-02-28","etapeTypeId":"aec","etapeStatutId":"fav"},{"date":"2022-03-12","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2022-03-21","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-04-02","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-04-12","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-04-26","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":46,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-29","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-03-28","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-07-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-07-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-12-05","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-12-06","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2022-02-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-02-20","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-02-20","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-02-20","etapeTypeId":"ass","etapeStatutId":"fav"},{"date":"2022-03-01","etapeTypeId":"aec","etapeStatutId":"fav"},{"date":"2022-03-13","etapeTypeId":"aof","etapeStatutId":"fav"},{"date":"2022-03-22","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-04-03","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-04-13","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-04-27","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":47,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-02-03","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-02-17","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-05-03","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-05-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-11-29","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-02-09","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-02-09","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-02-10","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2022-02-13","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2022-02-13","etapeTypeId":"agn","etapeStatutId":"fav"},{"date":"2022-02-23","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2022-03-13","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-04-11","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-04-21","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-05-05","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":48,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-03-30","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-04-25","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-05","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-06-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-09-10","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-10-17","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-11-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-12","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-11-12","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-11-13","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2021-11-13","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2021-11-20","etapeTypeId":"auc","etapeStatutId":"fav"},{"date":"2021-11-21","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-12-06","etapeTypeId":"agn","etapeStatutId":"def"},{"date":"2021-12-12","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2022-03-12","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-05-13","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-05-15","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-05-29","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":49,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-03-07","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-04-18","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-06-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-08-24","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-11-25","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-12-31","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-12-31","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-12-31","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-01-01","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2022-01-03","etapeTypeId":"aec","etapeStatutId":"fav"},{"date":"2022-01-14","etapeTypeId":"ass","etapeStatutId":"fav"},{"date":"2022-01-15","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2022-01-17","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2022-01-17","etapeTypeId":"agn","etapeStatutId":"def"},{"date":"2022-01-31","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2022-04-15","etapeTypeId":"apd","etapeStatutId":"def"},{"date":"2022-04-22","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-04-24","etapeTypeId":"apo","etapeStatutId":"def"},{"date":"2022-05-08","etapeTypeId":"dex","etapeStatutId":"rej"}]},{"id":50,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-02-01","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-10-09","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-03-13","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-03-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-08-26","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-09-26","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-11-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-18","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-11-18","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-11-19","etapeTypeId":"afp","etapeStatutId":"def"},{"date":"2021-11-24","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2021-11-25","etapeTypeId":"auc","etapeStatutId":"fav"},{"date":"2021-12-02","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2021-12-05","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2021-12-11","etapeTypeId":"agn","etapeStatutId":"fav"},{"date":"2022-05-11","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-05-18","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-05-20","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-06-03","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":51,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-14","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-08-04","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-08-04","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-02-28","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2022-03-15","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2022-03-31","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-03-31","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-03-31","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-04-04","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2022-04-11","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2022-04-18","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2022-04-26","etapeTypeId":"aof","etapeStatutId":"fre"},{"date":"2022-04-26","etapeTypeId":"agn","etapeStatutId":"def"},{"date":"2022-05-09","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-05-22","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-05-31","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-06-12","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":52,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2021-12-17","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-03-16","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-03-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-03-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-12-06","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2023-02-28","etapeTypeId":"rca","etapeStatutId":"fai"}]},{"id":53,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-03-15","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-04-02","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-04-03","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-04-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-11-28","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2022-12-07","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2022-12-21","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-12-21","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-12-21","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-12-25","etapeTypeId":"afp","etapeStatutId":"fav"},{"date":"2022-12-27","etapeTypeId":"aac","etapeStatutId":"fav"},{"date":"2023-01-02","etapeTypeId":"ars","etapeStatutId":"fav"},{"date":"2023-01-09","etapeTypeId":"agn","etapeStatutId":"fav"},{"date":"2023-01-15","etapeTypeId":"aof","etapeStatutId":"def"},{"date":"2023-01-18","etapeTypeId":"abs","etapeStatutId":"def"},{"date":"2023-03-04","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2023-03-21","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2023-04-03","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":54,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-10-08","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2023-04-03","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2023-04-03","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2023-04-03","etapeTypeId":"mdp","etapeStatutId":"fai"}]}]
+[{"id":0,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2021-03-31","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-19","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-03-08","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-03-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-10-23","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-10-23","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-10-23","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-11-26","etapeTypeId":"apd","etapeStatutId":"fre"},{"date":"2022-11-26","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-12-04","etapeTypeId":"apo","etapeStatutId":"ajo"}]},{"id":1,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-03-28","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-16","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-03-05","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-03-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-10-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-10-20","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-10-20","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-11-23","etapeTypeId":"apd","etapeStatutId":"fre"},{"date":"2022-11-23","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-12-01","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-12-11","etapeTypeId":"dex","etapeStatutId":"acc"},{"date":"2022-12-15","etapeTypeId":"mno","etapeStatutId":"fai"}]},{"id":2,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-09-26","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2020-10-03","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-01-06","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-01-09","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-05-29","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-06-03","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-06-03","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-07-25","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-09-01","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-09-10","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-09-19","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":3,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2021-07-22","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-10-28","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-10-29","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-10-29","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":4,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[{"date":"2021-01-01","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-01-14","etapeTypeId":"dae","etapeStatutId":"exe"}]},{"id":5,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-11-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-12-10","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2023-01-02","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2023-01-02","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":6,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-03-20","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-08","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-10","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-06-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-09-03","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-09-29","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-10-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-10-13","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-10-13","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-11-18","etapeTypeId":"apd","etapeStatutId":"def"},{"date":"2021-12-09","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-12-17","etapeTypeId":"apo","etapeStatutId":"def"},{"date":"2022-01-11","etapeTypeId":"dex","etapeStatutId":"rej"}]},{"id":7,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2021-06-12","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-01","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-07-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-01-21","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":8,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-10","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-07-13","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-08-19","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2020-10-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-04-05","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-05-11","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-05-16","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-05-16","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-05-16","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-07-28","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2021-08-23","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-09-08","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2021-09-11","etapeTypeId":"sas","etapeStatutId":"fai"},{"date":"2021-10-23","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":9,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-21","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-07-24","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-08-30","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2020-10-16","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-04-16","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-05-22","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-05-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-05-27","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-05-27","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-08-08","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2021-09-03","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-09-19","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2021-09-22","etapeTypeId":"sas","etapeStatutId":"fai"},{"date":"2021-11-03","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":10,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-05","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-07-08","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-08-14","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2020-09-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-03-31","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-05-06","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-05-11","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-05-11","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-05-11","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-07-23","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2021-08-18","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-09-03","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2021-09-06","etapeTypeId":"sas","etapeStatutId":"fai"},{"date":"2021-10-18","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":11,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-08-16","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-01-05","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-02-18","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-02-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-07-20","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-07-22","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-07-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-27","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-07-27","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-09-10","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2021-10-26","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-11-05","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2021-11-17","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":12,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-20","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-01-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-01-12","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-01-14","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-15","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-10-15","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-10-15","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-11-21","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2021-12-04","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-12-12","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-01-06","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":13,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-03-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-15","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-17","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-06-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-09-10","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-10-06","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-10-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-10-20","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-10-20","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-11-25","etapeTypeId":"apd","etapeStatutId":"def"},{"date":"2021-12-16","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-12-24","etapeTypeId":"apo","etapeStatutId":"def"},{"date":"2022-01-18","etapeTypeId":"dex","etapeStatutId":"rej"}]},{"id":14,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-10-05","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-11-06","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-01-25","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-01-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-08-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-08-25","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-08-25","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-10-26","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-11-04","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-11-24","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":15,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2020-10-04","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-11-24","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-12-12","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2020-12-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-04","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":16,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[{"date":"2021-01-20","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-02-03","etapeTypeId":"dae","etapeStatutId":"exe"}]},{"id":17,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-17","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-09","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-06-15","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-10","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-10-10","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-10-10","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-12-28","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-01-16","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-01-26","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-02-20","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":18,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-05-30","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-06-28","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-10","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-10-23","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-10-23","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-10-23","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-01-10","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-01-29","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-02-08","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-03-05","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":19,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-10","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-02-24","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-04-28","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-04-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-06-20","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-07-30","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-08-14","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-08-14","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-08-14","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-02-24","etapeTypeId":"apd","etapeStatutId":"fre"},{"date":"2022-02-24","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-03-04","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-03-16","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":20,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-10-29","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-24","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-07-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-12-14","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2022-01-10","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2022-01-24","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-01-24","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-01-24","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-03-15","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-03-15","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-03-23","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-04-04","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":21,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-11-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-03-04","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-06-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-08-26","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-09-09","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-09-30","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-09-30","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-09-30","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-01-30","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-02-10","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-02-18","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-03-02","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":22,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-07","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-09-24","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-11-06","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-11-06","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-02-11","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-02-11","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-02-11","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-03-26","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-03-26","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-04-05","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-04-25","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":23,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-09-29","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-11-26","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-03-30","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-03-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-08-22","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-09-16","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-11-01","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-01","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-11-01","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-01-09","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-03-28","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-04-07","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-04-21","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":24,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-10-01","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2020-11-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-02-22","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-02-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-06-15","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2022-06-25","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2022-07-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-11-24","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-11-24","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-12-23","etapeTypeId":"ama","etapeStatutId":"fav"},{"date":"2023-01-05","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2023-02-01","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2023-02-15","etapeTypeId":"dex","etapeStatutId":"acc"},{"date":"2023-02-16","etapeTypeId":"mno","etapeStatutId":"fai"}]},{"id":25,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2022-04-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-06-16","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-06-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-06-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-01-05","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2023-01-19","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2023-02-16","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-02-16","etapeTypeId":"asc","etapeStatutId":"fai"}]},{"id":26,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2022-04-11","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-06-01","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-06-08","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-06-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-12-21","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2023-01-04","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2023-02-01","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-02-01","etapeTypeId":"asc","etapeStatutId":"fai"}]},{"id":27,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-04-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-04-29","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-07-02","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-07-02","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":28,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-04-17","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-04-20","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-06-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-06-23","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":29,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-05","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-08-21","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-08-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-12-30","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2022-03-07","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2022-03-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-03-18","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-03-18","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-06-16","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-06-16","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-06-25","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-07-07","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":30,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-01-24","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-07-07","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-08-10","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-08-11","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":31,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-01-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-07-08","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-08-11","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-08-12","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":32,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-07-24","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-08-30","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-11-22","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-11-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-05-17","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2022-06-07","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2022-06-26","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-06-26","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-06-26","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-09-10","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-09-10","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-09-19","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-09-28","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":33,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2020-09-23","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2020-09-30","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-11-09","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-11-09","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-26","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-07-08","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-07-13","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-13","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-11-22","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":34,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-06-02","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-10-02","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-12-09","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-12-09","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":35,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-11-26","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-12-10","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-12-21","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2023-12-21","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":36,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-07-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-10-26","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-12-21","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-12-21","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":37,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2021-01-19","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-01-30","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-04-18","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-06-21","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":38,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[{"date":"2022-07-23","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-10-18","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-11-21","etapeTypeId":"mfr","etapeStatutId":"fai"}]},{"id":39,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2021-06-07","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-07","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-10-14","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-10-14","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":40,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2021-06-22","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-10-22","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-10-29","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-10-29","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":41,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-11-25","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-12-05","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2023-01-16","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2023-01-16","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":42,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-01-18","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-03-18","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-05-02","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-05-02","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-09-06","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-09-19","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-09-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-09-27","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-09-27","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-10-27","etapeTypeId":"ama","etapeStatutId":"fav"},{"date":"2021-11-04","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2021-12-11","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2021-12-19","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-01-22","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":43,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[]},{"id":44,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[]},{"id":45,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-28","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-03-27","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-07-04","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-07-04","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-02-19","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-02-19","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-02-19","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-03-21","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-04-02","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-04-12","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-04-26","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":46,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-12-29","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-03-28","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-07-05","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-07-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-12-05","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-12-06","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2022-02-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-02-20","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-02-20","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-03-22","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-04-03","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-04-13","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-04-27","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":47,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-02-03","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-02-17","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-05-03","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-05-03","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-11-29","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-02-09","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-02-09","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-03-13","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-04-11","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-04-21","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-05-05","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":48,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-03-30","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-04-25","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-06-05","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-06-05","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-09-10","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-10-17","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-11-12","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-12","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-11-12","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-03-12","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-05-13","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-05-15","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-05-29","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":49,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2021-03-07","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-04-18","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-06-11","etapeTypeId":"mfr","etapeStatutId":"fai","contenu":{"arm":{"mecanise":false}}},{"date":"2021-06-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-08-24","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-11-25","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-12-31","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-12-31","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-12-31","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-04-15","etapeTypeId":"apd","etapeStatutId":"def"},{"date":"2022-04-22","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-04-24","etapeTypeId":"apo","etapeStatutId":"def"},{"date":"2022-05-08","etapeTypeId":"dex","etapeStatutId":"rej"}]},{"id":50,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-02-01","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2020-10-09","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-03-13","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-03-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-08-26","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-09-26","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2021-11-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-11-18","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-11-18","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-05-11","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-05-18","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-05-20","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-06-03","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":51,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2021-06-27","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2021-07-14","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2021-08-04","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-08-04","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-02-28","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2022-03-15","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2022-03-31","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-03-31","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-03-31","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-05-09","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-05-22","etapeTypeId":"spo","etapeStatutId":"fai"},{"date":"2022-05-31","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2022-06-12","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":52,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2021-12-17","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-03-16","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-03-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-03-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-12-06","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2023-02-28","etapeTypeId":"rca","etapeStatutId":"fai"}]},{"id":53,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-03-15","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2022-04-02","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-04-03","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2022-04-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-11-28","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2022-12-07","etapeTypeId":"rca","etapeStatutId":"fai"},{"date":"2022-12-21","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-12-21","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-12-21","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-03-04","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2023-03-21","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2023-04-03","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":54,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-10-08","etapeTypeId":"dae","etapeStatutId":"exe"},{"date":"2023-04-03","etapeTypeId":"asl","etapeStatutId":"fav"},{"date":"2023-04-03","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2023-04-03","etapeTypeId":"mdp","etapeStatutId":"fai"}]}]
diff --git a/packages/api/src/business/rules-demarches/axm/oct.machine.test.ts b/packages/api/src/business/rules-demarches/axm/oct.machine.test.ts
index 46d58fc62..5dbfc4082 100644
--- a/packages/api/src/business/rules-demarches/axm/oct.machine.test.ts
+++ b/packages/api/src/business/rules-demarches/axm/oct.machine.test.ts
@@ -104,7 +104,7 @@ describe('vérifie l’arbre d’octroi d’AXM', () => {
         ...ETES.saisineDesCollectivitesLocales.FAIT,
         date: toCaminoDate('2022-04-15'),
       },
-      { ...ETES.saisineDesServices.FAIT, date: toCaminoDate('2022-04-15') },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2022-04-15') },
       {
         ...ETES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement.FAVORABLE,
         date: toCaminoDate('2022-06-15'),
@@ -139,7 +139,7 @@ describe('vérifie l’arbre d’octroi d’AXM', () => {
         ...ETES.saisineDesCollectivitesLocales.FAIT,
         date: toCaminoDate('2022-04-15'),
       },
-      { ...ETES.saisineDesServices.FAIT, date: toCaminoDate('2022-04-15') },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2022-04-15') },
       {
         ...ETES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement.FAVORABLE,
         date: toCaminoDate('2022-06-15'),
@@ -170,82 +170,6 @@ describe('vérifie l’arbre d’octroi d’AXM', () => {
       'RENDRE_DECISION_ADMINISTRATION_REJETE',
     ])
   })
-  test('après une saisine des services avec un accord du propriétaire du sol AVEC réserves, la confirmation de l’accord est obligatoire', () => {
-    const service = orderAndInterpretMachine(axmOctMachine, [
-      { ...ETES.demande.FAIT, date: toCaminoDate('2022-04-14') },
-      {
-        ...ETES.decisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_.EXEMPTE,
-        date: toCaminoDate('2020-01-01'),
-      },
-      {
-        ...ETES.decisionDuProprietaireDuSol.FAVORABLE_AVEC_RESERVE,
-        date: toCaminoDate('2020-01-01'),
-      },
-      { ...ETES.depotDeLaDemande.FAIT, date: toCaminoDate('2022-04-15') },
-      {
-        ...ETES.recevabiliteDeLaDemande.FAVORABLE,
-        date: toCaminoDate('2022-04-15'),
-      },
-      {
-        ...ETES.saisineDesCollectivitesLocales.FAIT,
-        date: toCaminoDate('2022-04-15'),
-      },
-      { ...ETES.avisDunMaire.FAVORABLE, date: toCaminoDate('2022-04-15') },
-      { ...ETES.saisineDesServices.FAIT, date: toCaminoDate('2022-04-15') },
-      {
-        ...ETES.avisDGTMServiceMilieuxNaturelsBiodiversiteSitesEtPaysages_MNBST_.FAVORABLE,
-        date: toCaminoDate('2022-04-15'),
-      },
-      {
-        ...ETES.avisDGTMServiceAmenagementUrbanismeConstructionLogement_AUCL_.FAVORABLE,
-        date: toCaminoDate('2022-04-16'),
-      },
-      {
-        ...ETES.avisDeLaDirectionDesEntreprisesDeLaConcurrenceDeLaConsommationDuTravailEtDeLemploi.FAVORABLE,
-        date: toCaminoDate('2022-04-16'),
-      },
-      {
-        ...ETES.avisDeLaDirectionDalimentationDeLagricultureEtDeLaForet.FAVORABLE,
-        date: toCaminoDate('2022-04-16'),
-      },
-      {
-        ...ETES.avisDeDirectionRegionaleDesAffairesCulturelles.FAVORABLE,
-        date: toCaminoDate('2022-04-16'),
-      },
-      {
-        ...ETES.avisDeLagenceRegionaleDeSante.FAVORABLE,
-        date: toCaminoDate('2022-04-16'),
-      },
-      {
-        ...ETES.avisDeLaDirectionRegionaleDesFinancesPubliques.FAVORABLE,
-        date: toCaminoDate('2022-04-16'),
-      },
-      {
-        ...ETES.avisDeLaCaisseGeneraleDeSecuriteSociale.FAVORABLE,
-        date: toCaminoDate('2022-04-16'),
-      },
-      {
-        ...ETES.avisDeLOfficeNationalDesForets.FAVORABLE,
-        date: toCaminoDate('2022-04-16'),
-      },
-      {
-        ...ETES.avisDeLetatMajorOrpaillageEtPecheIllicite_EMOPI_.FAVORABLE,
-        date: toCaminoDate('2022-04-16'),
-      },
-      {
-        ...ETES.avisDeLaGendarmerieNationale.FAVORABLE,
-        date: toCaminoDate('2022-04-16'),
-      },
-    ])
-
-    expect(service).canOnlyTransitionTo({ machine: axmOctMachine, date: toCaminoDate('2022-04-16') }, [
-      'DEMANDER_INFORMATION_POUR_AVIS_DREAL',
-      'FAIRE_CLASSEMENT_SANS_SUITE',
-      'FAIRE_CONFIRMATION_PROPRIETAIRE_DU_SOL',
-      'FAIRE_DESISTEMENT_DEMANDEUR',
-      'FAIRE_NOTE_INTERNE_SIGNALEE',
-    ])
-  })
 
   test('ne peut pas faire de note interne signalée avant une demande', () => {
     const service = orderAndInterpretMachine(axmOctMachine, [])
@@ -358,11 +282,7 @@ describe('vérifie l’arbre d’octroi d’AXM', () => {
         date: toCaminoDate('2022-04-16'),
       },
       { ...ETES.avisDunMaire.FAVORABLE, date: toCaminoDate('2022-04-17') },
-      { ...ETES.saisineDesServices.FAIT, date: toCaminoDate('2022-04-18') },
-      {
-        ...ETES.avisDGTMServiceMilieuxNaturelsBiodiversiteSitesEtPaysages_MNBST_.FAVORABLE,
-        date: toCaminoDate('2022-04-19'),
-      },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2022-04-18') },
       {
         ...ETES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement.FAVORABLE,
         date: toCaminoDate('2022-05-20'),
@@ -422,47 +342,23 @@ describe('vérifie l’arbre d’octroi d’AXM', () => {
         ...ETES.saisineDesCollectivitesLocales.FAIT,
         date: toCaminoDate('2022-04-16'),
       },
-      { ...ETES.saisineDesServices.FAIT, date: toCaminoDate('2022-04-18') },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2022-04-18') },
     ]
     const service = orderAndInterpretMachine(axmOctMachine, etapes)
     expect(service).canOnlyTransitionTo({ machine: axmOctMachine, date: toCaminoDate('2022-05-18') }, [
       'RENDRE_AVIS_DREAL',
       'FAIRE_CLASSEMENT_SANS_SUITE',
       'DEMANDER_INFORMATION_POUR_AVIS_DREAL',
-      'FAIRE_CONFIRMATION_PROPRIETAIRE_DU_SOL',
       'FAIRE_DESISTEMENT_DEMANDEUR',
       'FAIRE_NOTE_INTERNE_SIGNALEE',
-      'RENDRE_AVIS_AGENCE_REGIONALE_SANTE',
-      'RENDRE_AVIS_CAISSE_GENERALE_DE_SECURITE_SOCIALE',
-      'RENDRE_AVIS_DGTMAUCL',
-      'RENDRE_AVIS_DGTM_MNBST',
-      'RENDRE_AVIS_DIRECTION_ALIMENTATION_AGRICULTURE_FORET',
-      'RENDRE_AVIS_DIRECTION_ENTREPRISE_CONCURRENCE_CONSOMMATION_TRAVAIL_EMPLOI',
-      'RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES',
-      'RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES',
       'RENDRE_AVIS_DUN_MAIRE',
-      'RENDRE_AVIS_ETAT_MAJOR_ORPAILLAGE_ET_PECHE_ILLICITE',
-      'RENDRE_AVIS_GENDARMERIE_NATIONALE',
-      'RENDRE_AVIS_OFFICE_NATIONAL_DES_FORETS',
     ])
     expect(service).canOnlyTransitionTo({ machine: axmOctMachine, date: toCaminoDate('2022-05-17') }, [
       'FAIRE_CLASSEMENT_SANS_SUITE',
       'DEMANDER_INFORMATION_POUR_AVIS_DREAL',
-      'FAIRE_CONFIRMATION_PROPRIETAIRE_DU_SOL',
       'FAIRE_DESISTEMENT_DEMANDEUR',
       'FAIRE_NOTE_INTERNE_SIGNALEE',
-      'RENDRE_AVIS_AGENCE_REGIONALE_SANTE',
-      'RENDRE_AVIS_CAISSE_GENERALE_DE_SECURITE_SOCIALE',
-      'RENDRE_AVIS_DGTMAUCL',
-      'RENDRE_AVIS_DGTM_MNBST',
-      'RENDRE_AVIS_DIRECTION_ALIMENTATION_AGRICULTURE_FORET',
-      'RENDRE_AVIS_DIRECTION_ENTREPRISE_CONCURRENCE_CONSOMMATION_TRAVAIL_EMPLOI',
-      'RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES',
-      'RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES',
       'RENDRE_AVIS_DUN_MAIRE',
-      'RENDRE_AVIS_ETAT_MAJOR_ORPAILLAGE_ET_PECHE_ILLICITE',
-      'RENDRE_AVIS_GENDARMERIE_NATIONALE',
-      'RENDRE_AVIS_OFFICE_NATIONAL_DES_FORETS',
     ])
   })
 
diff --git a/packages/api/src/business/rules-demarches/axm/oct.machine.ts b/packages/api/src/business/rules-demarches/axm/oct.machine.ts
index 3dc310cd4..c7b371234 100644
--- a/packages/api/src/business/rules-demarches/axm/oct.machine.ts
+++ b/packages/api/src/business/rules-demarches/axm/oct.machine.ts
@@ -6,9 +6,9 @@ import { DemarchesStatutsIds } from 'camino-common/src/static/demarchesStatuts.j
 import { ADMINISTRATION_IDS } from 'camino-common/src/static/administrations.js'
 import { CaminoDate, dateAddMonths, daysBetween } from 'camino-common/src/date.js'
 
-type FaireSaisineDesServices = {
+type RendreAvisDesServicesEtCommissionsConsultatives = {
   date: CaminoDate
-  type: 'FAIRE_SAISINE_DES_SERVICES'
+  type: 'RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES'
 }
 
 type RendreAvisDreal = {
@@ -33,8 +33,7 @@ type AXMOctXStateEvent =
   | { type: 'FAIRE_SAISINE_COLLECTIVITES_LOCALES' }
   | { type: 'RENDRE_AVIS_DUN_MAIRE' }
   | RendreAvisDreal
-  | FaireSaisineDesServices
-  | { type: 'RENDRE_AVIS_DGTM_MNBST' }
+  | RendreAvisDesServicesEtCommissionsConsultatives
   | { type: 'FAIRE_SAISINE_COMMISSION_DEPARTEMENTALE_DES_MINES' }
   | { type: 'RENDRE_AVIS_COMMISSION_DEPARTEMENTALE_DES_MINES' }
   | { type: 'RENDRE_AVIS_COMMISSION_DEPARTEMENTALE_DES_MINES_AJOURNE' }
@@ -46,19 +45,6 @@ type AXMOctXStateEvent =
   | { type: 'PUBLIER_DANS_UN_JOURNAL_LOCAL_OU_NATIONAL' }
   | { type: 'NOTIFIER_COLLECTIVITES_LOCALES' }
   | { type: 'RENDRE_DECISION_ABROGATION' }
-  | { type: 'RENDRE_AVIS_DGTMAUCL' }
-  | {
-      type: 'RENDRE_AVIS_DIRECTION_ENTREPRISE_CONCURRENCE_CONSOMMATION_TRAVAIL_EMPLOI'
-    }
-  | { type: 'RENDRE_AVIS_DIRECTION_ALIMENTATION_AGRICULTURE_FORET' }
-  | { type: 'RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES' }
-  | { type: 'RENDRE_AVIS_AGENCE_REGIONALE_SANTE' }
-  | { type: 'RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES' }
-  | { type: 'RENDRE_AVIS_CAISSE_GENERALE_DE_SECURITE_SOCIALE' }
-  | { type: 'RENDRE_AVIS_OFFICE_NATIONAL_DES_FORETS' }
-  | { type: 'RENDRE_AVIS_ETAT_MAJOR_ORPAILLAGE_ET_PECHE_ILLICITE' }
-  | { type: 'RENDRE_AVIS_GENDARMERIE_NATIONALE' }
-  | { type: 'FAIRE_CONFIRMATION_PROPRIETAIRE_DU_SOL' }
   | { type: 'FAIRE_NOTE_INTERNE_SIGNALEE' }
   | { type: 'DEMANDER_INFORMATION_POUR_AVIS_DREAL' }
   | { type: 'RECEVOIR_INFORMATION_POUR_AVIS_DREAL' }
@@ -148,8 +134,7 @@ const trad: { [key in Event]: { db: DBEtat; mainStep: boolean } } = {
   FAIRE_SAISINE_COLLECTIVITES_LOCALES: { db: ETES.saisineDesCollectivitesLocales, mainStep: true },
   RENDRE_AVIS_DUN_MAIRE: { db: ETES.avisDunMaire, mainStep: false },
   RENDRE_AVIS_DREAL: { db: ETES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement, mainStep: true },
-  FAIRE_SAISINE_DES_SERVICES: { db: ETES.saisineDesServices, mainStep: true },
-  RENDRE_AVIS_DGTM_MNBST: { db: ETES.avisDGTMServiceMilieuxNaturelsBiodiversiteSitesEtPaysages_MNBST_, mainStep: false },
+  RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES: { db: ETES.avisDesServicesEtCommissionsConsultatives, mainStep: true },
   FAIRE_SAISINE_COMMISSION_DEPARTEMENTALE_DES_MINES: { db: ETES.saisineDeLaCommissionDepartementaleDesMines_CDM_, mainStep: false },
   FAIRE_SAISINE_AUTORITE_SIGNATAIRE: { db: ETES.saisineDeLautoriteSignataire, mainStep: false },
   NOTIFIER_DEMANDEUR: { db: ETES.notificationAuDemandeur, mainStep: true },
@@ -157,17 +142,6 @@ const trad: { [key in Event]: { db: DBEtat; mainStep: boolean } } = {
   PUBLIER_DANS_UN_JOURNAL_LOCAL_OU_NATIONAL: { db: ETES.publicationDansUnJournalLocalOuNational, mainStep: true },
   NOTIFIER_COLLECTIVITES_LOCALES: { db: ETES.notificationDesCollectivitesLocales, mainStep: true },
   RENDRE_DECISION_ABROGATION: { db: ETES.abrogationDeLaDecision, mainStep: false },
-  RENDRE_AVIS_DGTMAUCL: { db: ETES.avisDGTMServiceAmenagementUrbanismeConstructionLogement_AUCL_, mainStep: false },
-  RENDRE_AVIS_DIRECTION_ENTREPRISE_CONCURRENCE_CONSOMMATION_TRAVAIL_EMPLOI: { db: ETES.avisDeLaDirectionDesEntreprisesDeLaConcurrenceDeLaConsommationDuTravailEtDeLemploi, mainStep: false },
-  RENDRE_AVIS_DIRECTION_ALIMENTATION_AGRICULTURE_FORET: { db: ETES.avisDeLaDirectionDalimentationDeLagricultureEtDeLaForet, mainStep: false },
-  RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES: { db: ETES.avisDeDirectionRegionaleDesAffairesCulturelles, mainStep: false },
-  RENDRE_AVIS_AGENCE_REGIONALE_SANTE: { db: ETES.avisDeLagenceRegionaleDeSante, mainStep: false },
-  RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES: { db: ETES.avisDeLaDirectionRegionaleDesFinancesPubliques, mainStep: false },
-  RENDRE_AVIS_CAISSE_GENERALE_DE_SECURITE_SOCIALE: { db: ETES.avisDeLaCaisseGeneraleDeSecuriteSociale, mainStep: false },
-  RENDRE_AVIS_OFFICE_NATIONAL_DES_FORETS: { db: ETES.avisDeLOfficeNationalDesForets, mainStep: false },
-  RENDRE_AVIS_ETAT_MAJOR_ORPAILLAGE_ET_PECHE_ILLICITE: { db: ETES.avisDeLetatMajorOrpaillageEtPecheIllicite_EMOPI_, mainStep: false },
-  RENDRE_AVIS_GENDARMERIE_NATIONALE: { db: ETES.avisDeLaGendarmerieNationale, mainStep: false },
-  FAIRE_CONFIRMATION_PROPRIETAIRE_DU_SOL: { db: ETES.confirmationDeLaccordDuProprietaireDuSol, mainStep: true },
   FAIRE_NOTE_INTERNE_SIGNALEE: { db: ETES.noteInterneSignalee, mainStep: false },
   DEMANDER_INFORMATION_POUR_AVIS_DREAL: { db: ETES.demandeDinformations_AvisDuDREALDEALOuDGTM_, mainStep: false },
   RECEVOIR_INFORMATION_POUR_AVIS_DREAL: { db: ETES.receptionDinformation_AvisDuDREALDEALOuDGTM_, mainStep: false },
@@ -189,7 +163,7 @@ export class AxmOctMachine extends CaminoMachine<AxmContext, AXMOctXStateEvent>
 
   toPotentialCaminoXStateEvent(event: AXMOctXStateEvent['type'], date: CaminoDate): AXMOctXStateEvent[] {
     switch (event) {
-      case 'FAIRE_SAISINE_DES_SERVICES':
+      case 'RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES':
       case 'RENDRE_AVIS_DREAL':
         return [{ type: event, date }]
       default:
@@ -210,7 +184,7 @@ export class AxmOctMachine extends CaminoMachine<AxmContext, AXMOctXStateEvent>
     if (entry) {
       const eventFromEntry = entry[0]
       switch (eventFromEntry) {
-        case 'FAIRE_SAISINE_DES_SERVICES':
+        case 'RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES':
         case 'RENDRE_AVIS_DREAL': {
           return { type: eventFromEntry, date: etape.date }
         }
@@ -225,7 +199,7 @@ export class AxmOctMachine extends CaminoMachine<AxmContext, AXMOctXStateEvent>
   }
 }
 
-type SaisineDesServices = { faite: false } | { faite: true; date: CaminoDate }
+type RendreAvisDesServicesEtCommissonsConsultatives = { faite: false } | { faite: true; date: CaminoDate }
 interface AxmContext extends CaminoCommonContext {
   demandeFaite: boolean
   notificationDuDemandeurFaite: boolean
@@ -233,13 +207,12 @@ interface AxmContext extends CaminoCommonContext {
   publicationDecisionsRecueilActesAdministratifsFaite: boolean
   publicationDansUnJournalLocalOuNationalFaite: boolean
   daeRequiseOuDemandeDeposee: boolean
-  decisionDuProprietaireDuSolFavorableSansReserve: boolean
   saisineDesCollectivitesLocalesFaite: boolean
-  saisineDesServices: SaisineDesServices
+  avisDesServicesEtCommissionsConsultatives: RendreAvisDesServicesEtCommissonsConsultatives
 }
 
 const peutRendreAvisDREAL = ({ context, event }: { context: AxmContext; event: RendreAvisDreal }): boolean => {
-  return context.saisineDesServices.faite && daysBetween(dateAddMonths(context.saisineDesServices.date, 1), event.date) >= 0
+  return context.avisDesServicesEtCommissionsConsultatives.faite && daysBetween(dateAddMonths(context.avisDesServicesEtCommissionsConsultatives.date, 1), event.date) >= 0
 }
 
 const axmOctMachine = createMachine({
@@ -254,9 +227,8 @@ const axmOctMachine = createMachine({
     notificationDesCollectivitesLocalesFaite: false,
     publicationDecisionsRecueilActesAdministratifsFaite: false,
     publicationDansUnJournalLocalOuNationalFaite: false,
-    decisionDuProprietaireDuSolFavorableSansReserve: false,
     saisineDesCollectivitesLocalesFaite: false,
-    saisineDesServices: { faite: false },
+    avisDesServicesEtCommissionsConsultatives: { faite: false },
     daeRequiseOuDemandeDeposee: false,
     visibilite: 'confidentielle',
   },
@@ -319,12 +291,7 @@ const axmOctMachine = createMachine({
           states: {
             decisionARendre: {
               on: {
-                RENDRE_DECISION_DU_PROPRIETAIRE_DU_SOL_FAVORABLE: {
-                  target: 'decisionRendue',
-                  actions: assign({
-                    decisionDuProprietaireDuSolFavorableSansReserve: true,
-                  }),
-                },
+                RENDRE_DECISION_DU_PROPRIETAIRE_DU_SOL_FAVORABLE: 'decisionRendue',
                 RENDRE_DECISION_DU_PROPRIETAIRE_DU_SOL_FAVORABLE_AVEC_RESERVE: 'decisionRendue',
                 RENDRE_DECISION_DU_PROPRIETAIRE_DU_SOL_DEFAVORABLE: '#classementSansSuiteAFaire',
               },
@@ -398,7 +365,7 @@ const axmOctMachine = createMachine({
             rendreAvisDrealPasEncorePossible: {
               always: {
                 target: 'rendreAvisDrealAFaire',
-                guard: ({ context }) => context.saisineDesServices.faite && context.saisineDesCollectivitesLocalesFaite && context.decisionDuProprietaireDuSolFavorableSansReserve,
+                guard: ({ context }) => context.avisDesServicesEtCommissionsConsultatives.faite && context.saisineDesCollectivitesLocalesFaite,
               },
             },
             rendreAvisDrealAFaire: {
@@ -447,16 +414,16 @@ const axmOctMachine = createMachine({
             avisDunMaireRendu: { type: 'final' },
           },
         },
-        saisineDesServicesMachine: {
-          initial: 'saisineDesServicesAFaire',
+        avisDesServicesEtCommissionsConsultativesMachine: {
+          initial: 'avisDesServicesEtCommissionsConsultativesAFaire',
           states: {
-            saisineDesServicesAFaire: {
+            avisDesServicesEtCommissionsConsultativesAFaire: {
               on: {
-                FAIRE_SAISINE_DES_SERVICES: {
-                  target: 'avisDesServicesARendre',
-                  guard: ({ context }) => !context.saisineDesServices.faite,
+                RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES: {
+                  target: 'avisDesServicesEtCommissionsConsultativesRendu',
+                  guard: ({ context }) => !context.avisDesServicesEtCommissionsConsultatives.faite,
                   actions: assign({
-                    saisineDesServices: ({ event }) => {
+                    avisDesServicesEtCommissionsConsultatives: ({ event }) => {
                       return {
                         faite: true,
                         date: event.date,
@@ -466,155 +433,7 @@ const axmOctMachine = createMachine({
                 },
               },
             },
-            avisDesServicesARendre: {
-              type: 'parallel',
-
-              states: {
-                confirmationAccordProprietaireDuSolMachine: {
-                  initial: 'confirmationAccordProprietaireDuSolAFaire',
-                  states: {
-                    confirmationAccordProprietaireDuSolAFaire: {
-                      on: {
-                        FAIRE_CONFIRMATION_PROPRIETAIRE_DU_SOL: 'confirmationAccordProprietaireDuSolFait',
-                      },
-                    },
-                    confirmationAccordProprietaireDuSolFait: {
-                      type: 'final',
-                      entry: assign({
-                        decisionDuProprietaireDuSolFavorableSansReserve: true,
-                      }),
-                    },
-                  },
-                },
-                avisDgtmMNBSTMachine: {
-                  initial: 'avisDgtmMNBSTARendre',
-                  states: {
-                    avisDgtmMNBSTARendre: {
-                      on: { RENDRE_AVIS_DGTM_MNBST: 'avisDgtmMNBSTRendu' },
-                    },
-                    avisDgtmMNBSTRendu: { type: 'final' },
-                  },
-                },
-                avisDGTMAUCLMachine: {
-                  initial: 'avisDGTMAUCLARendre',
-                  states: {
-                    avisDGTMAUCLARendre: {
-                      on: { RENDRE_AVIS_DGTMAUCL: 'avisDGTMAUCLRendu' },
-                    },
-                    avisDGTMAUCLRendu: { type: 'final' },
-                  },
-                },
-                avisDirectionEntrepriseConcurrenceConsommationTravailEmploiMachine: {
-                  initial: 'avisDirectionEntrepriseConcurrenceConsommationTravailEmploiARendre',
-                  states: {
-                    avisDirectionEntrepriseConcurrenceConsommationTravailEmploiARendre: {
-                      on: {
-                        RENDRE_AVIS_DIRECTION_ENTREPRISE_CONCURRENCE_CONSOMMATION_TRAVAIL_EMPLOI: 'avisDirectionEntrepriseConcurrenceConsommationTravailEmploiRendu',
-                      },
-                    },
-                    avisDirectionEntrepriseConcurrenceConsommationTravailEmploiRendu: { type: 'final' },
-                  },
-                },
-                avisDirectionAlimentationAgricultureForetMachine: {
-                  initial: 'avisDirectionAlimentationAgricultureForetARendre',
-                  states: {
-                    avisDirectionAlimentationAgricultureForetARendre: {
-                      on: {
-                        RENDRE_AVIS_DIRECTION_ALIMENTATION_AGRICULTURE_FORET: 'avisDirectionAlimentationAgricultureForetRendu',
-                      },
-                    },
-                    avisDirectionAlimentationAgricultureForetRendu: {
-                      type: 'final',
-                    },
-                  },
-                },
-                avisDirectionRegionaleAffairesCulturellesMachine: {
-                  initial: 'avisDirectionRegionaleAffairesCulturellesARendre',
-                  states: {
-                    avisDirectionRegionaleAffairesCulturellesARendre: {
-                      on: {
-                        RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES: 'avisDirectionRegionaleAffairesCulturellesRendu',
-                      },
-                    },
-                    avisDirectionRegionaleAffairesCulturellesRendu: {
-                      type: 'final',
-                    },
-                  },
-                },
-                avisAgenceRegionaleSanteMachine: {
-                  initial: 'avisAgenceRegionaleSanteARendre',
-                  states: {
-                    avisAgenceRegionaleSanteARendre: {
-                      on: {
-                        RENDRE_AVIS_AGENCE_REGIONALE_SANTE: 'avisAgenceRegionaleSanteRendu',
-                      },
-                    },
-                    avisAgenceRegionaleSanteRendu: { type: 'final' },
-                  },
-                },
-                avisDirectionRegionaleFinancesPubliquesMachine: {
-                  initial: 'avisDirectionRegionaleFinancesPubliquesARendre',
-                  states: {
-                    avisDirectionRegionaleFinancesPubliquesARendre: {
-                      on: {
-                        RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES: 'avisDirectionRegionaleFinancesPubliquesRendu',
-                      },
-                    },
-                    avisDirectionRegionaleFinancesPubliquesRendu: {
-                      type: 'final',
-                    },
-                  },
-                },
-                avisCaisseGeneraleDeSecuriteSocialeMachine: {
-                  initial: 'avisCaisseGeneraleDeSecuriteSocialeARendre',
-                  states: {
-                    avisCaisseGeneraleDeSecuriteSocialeARendre: {
-                      on: {
-                        RENDRE_AVIS_CAISSE_GENERALE_DE_SECURITE_SOCIALE: 'avisCaisseGeneraleDeSecuriteSocialeRendu',
-                      },
-                    },
-                    avisCaisseGeneraleDeSecuriteSocialeRendu: { type: 'final' },
-                  },
-                },
-                avisOfficeNationalDesForetsMachine: {
-                  initial: 'avisOfficeNationalDesForetsARendre',
-                  states: {
-                    avisOfficeNationalDesForetsARendre: {
-                      on: {
-                        RENDRE_AVIS_OFFICE_NATIONAL_DES_FORETS: 'avisOfficeNationalDesForetsRendu',
-                      },
-                    },
-                    avisOfficeNationalDesForetsRendu: { type: 'final' },
-                  },
-                },
-                avisGendarmerieNationaleMachine: {
-                  initial: 'avisGendarmerieNationaleARendre',
-                  states: {
-                    avisGendarmerieNationaleARendre: {
-                      on: {
-                        RENDRE_AVIS_GENDARMERIE_NATIONALE: 'avisGendarmerieNationaleRendu',
-                      },
-                    },
-                    avisGendarmerieNationaleRendu: { type: 'final' },
-                  },
-                },
-                avisEtatMajorOrpaillageEtPecheIlliciteMachine: {
-                  initial: 'avisEtatMajorOrpaillageEtPecheIlliciteARendre',
-                  states: {
-                    avisEtatMajorOrpaillageEtPecheIlliciteARendre: {
-                      on: {
-                        RENDRE_AVIS_ETAT_MAJOR_ORPAILLAGE_ET_PECHE_ILLICITE: 'avisEtatMajorOrpaillageEtPecheIlliciteRendu',
-                      },
-                    },
-                    avisEtatMajorOrpaillageEtPecheIlliciteRendu: {
-                      type: 'final',
-                    },
-                  },
-                },
-              },
-              onDone: 'avisDesServicesRendus',
-            },
-            avisDesServicesRendus: { type: 'final' },
+            avisDesServicesEtCommissionsConsultativesRendu: { type: 'final' },
           },
         },
       },
diff --git a/packages/api/src/business/rules-demarches/axm/pro.cas.json b/packages/api/src/business/rules-demarches/axm/pro.cas.json
index 9097ae289..66e4746bb 100644
--- a/packages/api/src/business/rules-demarches/axm/pro.cas.json
+++ b/packages/api/src/business/rules-demarches/axm/pro.cas.json
@@ -1 +1 @@
-[{"id":0,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-11-11","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-11-14","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":1,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2019-01-17","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2019-01-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-22","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":2,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2021-11-16","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-11-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-04-26","etapeTypeId":"mcr","etapeStatutId":"fav"}]},{"id":3,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2019-12-21","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2019-12-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-02-09","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":4,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-02-21","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-02-25","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-10-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-10-25","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-10-25","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2023-02-16","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2023-03-16","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2023-03-29","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":5,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-03-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-03-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-10-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-10-20","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-10-20","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-12-04","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2023-01-13","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2023-01-27","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":6,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2012-06-13","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2012-06-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2014-05-06","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":7,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2023-02-15","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2023-02-15","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":8,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2011-09-16","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2011-09-16","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":9,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2019-12-12","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2019-12-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-12-15","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-01-22","etapeTypeId":"dim","etapeStatutId":"rej"}]},{"id":10,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2019-10-06","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2019-10-26","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":11,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2020-02-05","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-02-24","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":12,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-06-04","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-06-04","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":13,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2022-03-08","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-03-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-11-05","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":14,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2016-10-11","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2016-10-11","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":15,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2013-11-18","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2013-11-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2015-08-10","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":16,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-05-18","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-05-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-11-15","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":17,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2017-05-01","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2017-05-01","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-18","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":18,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-06-30","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-08-14","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":19,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-04-22","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-04-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-12-01","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-12-01","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-12-01","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2023-01-06","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2023-01-20","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2023-01-29","etapeTypeId":"dex","etapeStatutId":"acc"}]}]
\ No newline at end of file
+[{"id":0,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-11-11","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-11-14","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":1,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2019-01-17","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2019-01-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-22","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":2,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2021-11-16","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2021-11-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-04-26","etapeTypeId":"mcr","etapeStatutId":"fav"}]},{"id":3,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2019-12-21","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2019-12-21","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-02-09","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":4,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-02-21","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-02-25","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-10-25","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-10-25","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-10-25","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-02-16","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2023-03-16","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2023-03-29","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":5,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-03-23","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-03-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-10-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-10-20","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-10-20","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-12-04","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2023-01-13","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2023-01-27","etapeTypeId":"dex","etapeStatutId":"acc"}]},{"id":6,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2012-06-13","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2012-06-13","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2014-05-06","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":7,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2023-02-15","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2023-02-15","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":8,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2011-09-16","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2011-09-16","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":9,"demarcheStatutId":"rej","demarchePublique":true,"etapes":[{"date":"2019-12-12","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2019-12-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-12-15","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-01-22","etapeTypeId":"dim","etapeStatutId":"rej"}]},{"id":10,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2019-10-06","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2019-10-26","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":11,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2020-02-05","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-02-24","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":12,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-06-04","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-06-04","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":13,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2022-03-08","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-03-08","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-11-05","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":14,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2016-10-11","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2016-10-11","etapeTypeId":"mdp","etapeStatutId":"fai"}]},{"id":15,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2013-11-18","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2013-11-18","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2015-08-10","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":16,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-05-18","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-05-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-11-15","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":17,"demarcheStatutId":"des","demarchePublique":true,"etapes":[{"date":"2017-05-01","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2017-05-01","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-18","etapeTypeId":"des","etapeStatutId":"fai"}]},{"id":18,"demarcheStatutId":"cls","demarchePublique":true,"etapes":[{"date":"2020-06-30","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2020-06-30","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-08-14","etapeTypeId":"css","etapeStatutId":"fai"}]},{"id":19,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-04-22","etapeTypeId":"mfr","etapeStatutId":"fai"},{"date":"2022-04-28","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-12-01","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-12-01","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2022-12-01","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-01-06","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2023-01-20","etapeTypeId":"apo","etapeStatutId":"fav"},{"date":"2023-01-29","etapeTypeId":"dex","etapeStatutId":"acc"}]}]
diff --git a/packages/api/src/business/rules-demarches/axm/pro.machine.test.ts b/packages/api/src/business/rules-demarches/axm/pro.machine.test.ts
index 5533d41c6..cfa15d642 100644
--- a/packages/api/src/business/rules-demarches/axm/pro.machine.test.ts
+++ b/packages/api/src/business/rules-demarches/axm/pro.machine.test.ts
@@ -21,7 +21,7 @@ describe('vérifie l’arbre de prolongation d’AXM', () => {
       'FAIRE_CLASSEMENT_SANS_SUITE',
       'FAIRE_DESISTEMENT_DEMANDEUR',
       'FAIRE_SAISINE_COLLECTIVITES_LOCALES',
-      'FAIRE_SAISINE_DES_SERVICES',
+      'RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES',
       'RENDRE_DECISION_IMPLICITE_REJET',
     ])
   })
diff --git a/packages/api/src/business/rules-demarches/axm/pro.machine.ts b/packages/api/src/business/rules-demarches/axm/pro.machine.ts
index e890c7232..73709e0c3 100644
--- a/packages/api/src/business/rules-demarches/axm/pro.machine.ts
+++ b/packages/api/src/business/rules-demarches/axm/pro.machine.ts
@@ -6,9 +6,9 @@ import { DemarchesStatutsIds } from 'camino-common/src/static/demarchesStatuts.j
 import { ADMINISTRATION_IDS } from 'camino-common/src/static/administrations.js'
 import { CaminoDate, dateAddMonths, daysBetween } from 'camino-common/src/date.js'
 
-type FaireSaisineDesServices = {
+type RendreAvisDesServicesEtCommissionsConsultatives = {
   date: CaminoDate
-  type: 'FAIRE_SAISINE_DES_SERVICES'
+  type: 'RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES'
 }
 
 type RendreAvisDreal = {
@@ -27,8 +27,7 @@ type AXMProXStateEvent =
   | { type: 'FAIRE_SAISINE_COLLECTIVITES_LOCALES' }
   | { type: 'RENDRE_AVIS_DUN_MAIRE' }
   | RendreAvisDreal
-  | FaireSaisineDesServices
-  | { type: 'RENDRE_AVIS_DGTM_MNBST' }
+  | RendreAvisDesServicesEtCommissionsConsultatives
   | { type: 'FAIRE_SAISINE_COMMISSION_DEPARTEMENTALE_DES_MINES' }
   | { type: 'RENDRE_AVIS_COMMISSION_DEPARTEMENTALE_DES_MINES' }
   | { type: 'RENDRE_AVIS_COMMISSION_DEPARTEMENTALE_DES_MINES_AJOURNE' }
@@ -40,18 +39,6 @@ type AXMProXStateEvent =
   | { type: 'PUBLIER_DANS_UN_JOURNAL_LOCAL_OU_NATIONAL' }
   | { type: 'NOTIFIER_COLLECTIVITES_LOCALES' }
   | { type: 'RENDRE_DECISION_ABROGATION' }
-  | { type: 'RENDRE_AVIS_DGTMAUCL' }
-  | {
-      type: 'RENDRE_AVIS_DIRECTION_ENTREPRISE_CONCURRENCE_CONSOMMATION_TRAVAIL_EMPLOI'
-    }
-  | { type: 'RENDRE_AVIS_DIRECTION_ALIMENTATION_AGRICULTURE_FORET' }
-  | { type: 'RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES' }
-  | { type: 'RENDRE_AVIS_AGENCE_REGIONALE_SANTE' }
-  | { type: 'RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES' }
-  | { type: 'RENDRE_AVIS_CAISSE_GENERALE_DE_SECURITE_SOCIALE' }
-  | { type: 'RENDRE_AVIS_OFFICE_NATIONAL_DES_FORETS' }
-  | { type: 'RENDRE_AVIS_ETAT_MAJOR_ORPAILLAGE_ET_PECHE_ILLICITE' }
-  | { type: 'RENDRE_AVIS_GENDARMERIE_NATIONALE' }
   | { type: 'DEMANDER_INFORMATION_POUR_AVIS_DREAL' }
   | { type: 'RECEVOIR_INFORMATION_POUR_AVIS_DREAL' }
   | { type: 'RENDRE_DECISION_IMPLICITE_REJET' }
@@ -70,24 +57,13 @@ const trad: { [key in Event]: { db: DBEtat; mainStep: boolean } } = {
   FAIRE_SAISINE_COLLECTIVITES_LOCALES: { db: ETES.saisineDesCollectivitesLocales, mainStep: true },
   RENDRE_AVIS_DUN_MAIRE: { db: ETES.avisDunMaire, mainStep: false },
   RENDRE_AVIS_DREAL: { db: ETES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement, mainStep: true },
-  FAIRE_SAISINE_DES_SERVICES: { db: ETES.saisineDesServices, mainStep: true },
-  RENDRE_AVIS_DGTM_MNBST: { db: ETES.avisDGTMServiceMilieuxNaturelsBiodiversiteSitesEtPaysages_MNBST_, mainStep: false },
+  RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES: { db: ETES.avisDesServicesEtCommissionsConsultatives, mainStep: true },
   FAIRE_SAISINE_COMMISSION_DEPARTEMENTALE_DES_MINES: { db: ETES.saisineDeLaCommissionDepartementaleDesMines_CDM_, mainStep: false },
   NOTIFIER_DEMANDEUR: { db: ETES.notificationAuDemandeur, mainStep: true },
   PUBLIER_DECISIONS_RECUEIL_ACTES_ADMINISTRATIFS: { db: ETES.publicationDeDecisionAuRecueilDesActesAdministratifs, mainStep: true },
   PUBLIER_DANS_UN_JOURNAL_LOCAL_OU_NATIONAL: { db: ETES.publicationDansUnJournalLocalOuNational, mainStep: true },
   NOTIFIER_COLLECTIVITES_LOCALES: { db: ETES.notificationDesCollectivitesLocales, mainStep: true },
   RENDRE_DECISION_ABROGATION: { db: ETES.abrogationDeLaDecision, mainStep: false },
-  RENDRE_AVIS_DGTMAUCL: { db: ETES.avisDGTMServiceAmenagementUrbanismeConstructionLogement_AUCL_, mainStep: false },
-  RENDRE_AVIS_DIRECTION_ENTREPRISE_CONCURRENCE_CONSOMMATION_TRAVAIL_EMPLOI: { db: ETES.avisDeLaDirectionDesEntreprisesDeLaConcurrenceDeLaConsommationDuTravailEtDeLemploi, mainStep: false },
-  RENDRE_AVIS_DIRECTION_ALIMENTATION_AGRICULTURE_FORET: { db: ETES.avisDeLaDirectionDalimentationDeLagricultureEtDeLaForet, mainStep: false },
-  RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES: { db: ETES.avisDeDirectionRegionaleDesAffairesCulturelles, mainStep: false },
-  RENDRE_AVIS_AGENCE_REGIONALE_SANTE: { db: ETES.avisDeLagenceRegionaleDeSante, mainStep: false },
-  RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES: { db: ETES.avisDeLaDirectionRegionaleDesFinancesPubliques, mainStep: false },
-  RENDRE_AVIS_CAISSE_GENERALE_DE_SECURITE_SOCIALE: { db: ETES.avisDeLaCaisseGeneraleDeSecuriteSociale, mainStep: false },
-  RENDRE_AVIS_OFFICE_NATIONAL_DES_FORETS: { db: ETES.avisDeLOfficeNationalDesForets, mainStep: false },
-  RENDRE_AVIS_ETAT_MAJOR_ORPAILLAGE_ET_PECHE_ILLICITE: { db: ETES.avisDeLetatMajorOrpaillageEtPecheIllicite_EMOPI_, mainStep: false },
-  RENDRE_AVIS_GENDARMERIE_NATIONALE: { db: ETES.avisDeLaGendarmerieNationale, mainStep: false },
   DEMANDER_INFORMATION_POUR_AVIS_DREAL: { db: ETES.demandeDinformations_AvisDuDREALDEALOuDGTM_, mainStep: false },
   RECEVOIR_INFORMATION_POUR_AVIS_DREAL: { db: ETES.receptionDinformation_AvisDuDREALDEALOuDGTM_, mainStep: false },
   RENDRE_DECISION_ANNULATION_PAR_JUGE_ADMINISTRATIF: { db: ETES.decisionDuJugeAdministratif, mainStep: false },
@@ -156,7 +132,7 @@ export class AxmProMachine extends CaminoMachine<AxmProContext, AXMProXStateEven
 
   toPotentialCaminoXStateEvent(event: AXMProXStateEvent['type'], date: CaminoDate): AXMProXStateEvent[] {
     switch (event) {
-      case 'FAIRE_SAISINE_DES_SERVICES':
+      case 'RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES':
       case 'RENDRE_AVIS_DREAL':
         return [{ type: event, date }]
       default:
@@ -177,7 +153,7 @@ export class AxmProMachine extends CaminoMachine<AxmProContext, AXMProXStateEven
     if (entry) {
       const eventFromEntry = entry[0]
       switch (eventFromEntry) {
-        case 'FAIRE_SAISINE_DES_SERVICES':
+        case 'RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES':
         case 'RENDRE_AVIS_DREAL': {
           return { type: eventFromEntry, date: etape.date }
         }
@@ -192,10 +168,10 @@ export class AxmProMachine extends CaminoMachine<AxmProContext, AXMProXStateEven
   }
 }
 
-type SaisineDesServices = { faite: false } | { faite: true; date: CaminoDate }
+type AvisDesServicesEtCommissionsConsultatives = { faite: false } | { faite: true; date: CaminoDate }
 interface AxmProContext extends CaminoCommonContext {
   saisineDesCollectivitesLocalesFaite: boolean
-  saisineDesServices: SaisineDesServices
+  avisDesServicesEtCommissionsConsultatives: AvisDesServicesEtCommissionsConsultatives
   notificationDuDemandeurFaite: boolean
   notificationDesCollectivitesLocalesFaite: boolean
   publicationDecisionsRecueilActesAdministratifsFaite: boolean
@@ -203,7 +179,7 @@ interface AxmProContext extends CaminoCommonContext {
 }
 
 const peutRendreAvisDREAL = ({ context, event }: { context: AxmProContext; event: RendreAvisDreal }): boolean => {
-  return context.saisineDesServices.faite && daysBetween(dateAddMonths(context.saisineDesServices.date, 1), event.date) >= 0
+  return context.avisDesServicesEtCommissionsConsultatives.faite && daysBetween(dateAddMonths(context.avisDesServicesEtCommissionsConsultatives.date, 1), event.date) >= 0
 }
 
 const axmProMachine = createMachine({
@@ -218,7 +194,7 @@ const axmProMachine = createMachine({
     publicationDecisionsRecueilActesAdministratifsFaite: false,
     publicationDansUnJournalLocalOuNationalFaite: false,
     saisineDesCollectivitesLocalesFaite: false,
-    saisineDesServices: { faite: false },
+    avisDesServicesEtCommissionsConsultatives: { faite: false },
     visibilite: 'confidentielle',
   },
   on: {
@@ -297,7 +273,7 @@ const axmProMachine = createMachine({
             rendreAvisDrealPasEncorePossible: {
               always: {
                 target: 'rendreAvisDrealAFaire',
-                guard: ({ context }) => context.saisineDesServices.faite && context.saisineDesCollectivitesLocalesFaite,
+                guard: ({ context }) => context.avisDesServicesEtCommissionsConsultatives.faite && context.saisineDesCollectivitesLocalesFaite,
               },
             },
             rendreAvisDrealAFaire: {
@@ -346,16 +322,16 @@ const axmProMachine = createMachine({
             avisDunMaireRendu: { type: 'final' },
           },
         },
-        saisineDesServicesMachine: {
-          initial: 'saisineDesServicesAFaire',
+        avisDesServicesEtCommissionsConsultativesMachine: {
+          initial: 'avisDesServicesEtCommissionsConsultativesAFaire',
           states: {
-            saisineDesServicesAFaire: {
+            avisDesServicesEtCommissionsConsultativesAFaire: {
               on: {
-                FAIRE_SAISINE_DES_SERVICES: {
-                  target: 'avisDesServicesARendre',
-                  guard: ({ context }) => !context.saisineDesServices.faite,
+                RENDRE_AVIS_DES_SERVICES_ET_COMMISSIONS_CONSULTATIVES: {
+                  target: 'avisDesServicesEtCommissionsConsultativesRendu',
+                  guard: ({ context }) => !context.avisDesServicesEtCommissionsConsultatives.faite,
                   actions: assign({
-                    saisineDesServices: ({ event }) => {
+                    avisDesServicesEtCommissionsConsultatives: ({ event }) => {
                       return {
                         faite: true,
                         date: event.date,
@@ -365,139 +341,7 @@ const axmProMachine = createMachine({
                 },
               },
             },
-            avisDesServicesARendre: {
-              type: 'parallel',
-
-              states: {
-                avisDgtmMNBSTMachine: {
-                  initial: 'avisDgtmMNBSTARendre',
-                  states: {
-                    avisDgtmMNBSTARendre: {
-                      on: { RENDRE_AVIS_DGTM_MNBST: 'avisDgtmMNBSTRendu' },
-                    },
-                    avisDgtmMNBSTRendu: { type: 'final' },
-                  },
-                },
-                avisDGTMAUCLMachine: {
-                  initial: 'avisDGTMAUCLARendre',
-                  states: {
-                    avisDGTMAUCLARendre: {
-                      on: { RENDRE_AVIS_DGTMAUCL: 'avisDGTMAUCLRendu' },
-                    },
-                    avisDGTMAUCLRendu: { type: 'final' },
-                  },
-                },
-                avisDirectionEntrepriseConcurrenceConsommationTravailEmploiMachine: {
-                  initial: 'avisDirectionEntrepriseConcurrenceConsommationTravailEmploiARendre',
-                  states: {
-                    avisDirectionEntrepriseConcurrenceConsommationTravailEmploiARendre: {
-                      on: {
-                        RENDRE_AVIS_DIRECTION_ENTREPRISE_CONCURRENCE_CONSOMMATION_TRAVAIL_EMPLOI: 'avisDirectionEntrepriseConcurrenceConsommationTravailEmploiRendu',
-                      },
-                    },
-                    avisDirectionEntrepriseConcurrenceConsommationTravailEmploiRendu: { type: 'final' },
-                  },
-                },
-                avisDirectionAlimentationAgricultureForetMachine: {
-                  initial: 'avisDirectionAlimentationAgricultureForetARendre',
-                  states: {
-                    avisDirectionAlimentationAgricultureForetARendre: {
-                      on: {
-                        RENDRE_AVIS_DIRECTION_ALIMENTATION_AGRICULTURE_FORET: 'avisDirectionAlimentationAgricultureForetRendu',
-                      },
-                    },
-                    avisDirectionAlimentationAgricultureForetRendu: {
-                      type: 'final',
-                    },
-                  },
-                },
-                avisDirectionRegionaleAffairesCulturellesMachine: {
-                  initial: 'avisDirectionRegionaleAffairesCulturellesARendre',
-                  states: {
-                    avisDirectionRegionaleAffairesCulturellesARendre: {
-                      on: {
-                        RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES: 'avisDirectionRegionaleAffairesCulturellesRendu',
-                      },
-                    },
-                    avisDirectionRegionaleAffairesCulturellesRendu: {
-                      type: 'final',
-                    },
-                  },
-                },
-                avisAgenceRegionaleSanteMachine: {
-                  initial: 'avisAgenceRegionaleSanteARendre',
-                  states: {
-                    avisAgenceRegionaleSanteARendre: {
-                      on: {
-                        RENDRE_AVIS_AGENCE_REGIONALE_SANTE: 'avisAgenceRegionaleSanteRendu',
-                      },
-                    },
-                    avisAgenceRegionaleSanteRendu: { type: 'final' },
-                  },
-                },
-                avisDirectionRegionaleFinancesPubliquesMachine: {
-                  initial: 'avisDirectionRegionaleFinancesPubliquesARendre',
-                  states: {
-                    avisDirectionRegionaleFinancesPubliquesARendre: {
-                      on: {
-                        RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES: 'avisDirectionRegionaleFinancesPubliquesRendu',
-                      },
-                    },
-                    avisDirectionRegionaleFinancesPubliquesRendu: {
-                      type: 'final',
-                    },
-                  },
-                },
-                avisCaisseGeneraleDeSecuriteSocialeMachine: {
-                  initial: 'avisCaisseGeneraleDeSecuriteSocialeARendre',
-                  states: {
-                    avisCaisseGeneraleDeSecuriteSocialeARendre: {
-                      on: {
-                        RENDRE_AVIS_CAISSE_GENERALE_DE_SECURITE_SOCIALE: 'avisCaisseGeneraleDeSecuriteSocialeRendu',
-                      },
-                    },
-                    avisCaisseGeneraleDeSecuriteSocialeRendu: { type: 'final' },
-                  },
-                },
-                avisOfficeNationalDesForetsMachine: {
-                  initial: 'avisOfficeNationalDesForetsARendre',
-                  states: {
-                    avisOfficeNationalDesForetsARendre: {
-                      on: {
-                        RENDRE_AVIS_OFFICE_NATIONAL_DES_FORETS: 'avisOfficeNationalDesForetsRendu',
-                      },
-                    },
-                    avisOfficeNationalDesForetsRendu: { type: 'final' },
-                  },
-                },
-                avisGendarmerieNationaleMachine: {
-                  initial: 'avisGendarmerieNationaleARendre',
-                  states: {
-                    avisGendarmerieNationaleARendre: {
-                      on: {
-                        RENDRE_AVIS_GENDARMERIE_NATIONALE: 'avisGendarmerieNationaleRendu',
-                      },
-                    },
-                    avisGendarmerieNationaleRendu: { type: 'final' },
-                  },
-                },
-                avisEtatMajorOrpaillageEtPecheIlliciteMachine: {
-                  initial: 'avisEtatMajorOrpaillageEtPecheIlliciteARendre',
-                  states: {
-                    avisEtatMajorOrpaillageEtPecheIlliciteARendre: {
-                      on: {
-                        RENDRE_AVIS_ETAT_MAJOR_ORPAILLAGE_ET_PECHE_ILLICITE: 'avisEtatMajorOrpaillageEtPecheIlliciteRendu',
-                      },
-                    },
-                    avisEtatMajorOrpaillageEtPecheIlliciteRendu: {
-                      type: 'final',
-                    },
-                  },
-                },
-              },
-              onDone: 'avisDesServicesRendus',
-            },
-            avisDesServicesRendus: { type: 'final' },
+            avisDesServicesEtCommissionsConsultativesRendu: { type: 'final' },
           },
         },
       },
diff --git a/packages/api/src/business/rules-demarches/machine-common.test.ts b/packages/api/src/business/rules-demarches/machine-common.test.ts
index 51a19d744..c27c497aa 100644
--- a/packages/api/src/business/rules-demarches/machine-common.test.ts
+++ b/packages/api/src/business/rules-demarches/machine-common.test.ts
@@ -1,6 +1,7 @@
 import { toCaminoDate } from 'camino-common/src/date.js'
 import { TitreEtapeForMachine, toMachineEtapes } from './machine-common.js'
 import { describe, expect, test, vi } from 'vitest'
+import { ETAPE_IS_NOT_BROUILLON, ETAPE_IS_BROUILLON } from 'camino-common/src/etape.js'
 
 console.error = vi.fn()
 describe('toMachineEtapes', () => {
@@ -11,7 +12,7 @@ describe('toMachineEtapes', () => {
           typeId: 'mfr',
           statutId: 'fai',
           date: toCaminoDate('2022-01-01'),
-          isBrouillon: false,
+          isBrouillon: ETAPE_IS_NOT_BROUILLON,
           communes: [],
           ordre: 0,
           surface: null,
@@ -31,7 +32,7 @@ describe('toMachineEtapes', () => {
         {
           typeId: 'mfr',
           statutId: 'fai',
-          isBrouillon: false,
+          isBrouillon: ETAPE_IS_NOT_BROUILLON,
           date: toCaminoDate('2022-01-01'),
           contenu: { arm: { mecanise: true } },
           communes: [],
@@ -55,7 +56,7 @@ describe('toMachineEtapes', () => {
         {
           typeId: 'mfr',
           statutId: 'fai',
-          isBrouillon: true,
+          isBrouillon: ETAPE_IS_BROUILLON,
           date: toCaminoDate('2022-01-01'),
           contenu: { arm: { mecanise: true } },
           communes: [],
diff --git a/packages/api/src/business/rules-demarches/machine-common.ts b/packages/api/src/business/rules-demarches/machine-common.ts
index bc4a0f4b5..db7605501 100644
--- a/packages/api/src/business/rules-demarches/machine-common.ts
+++ b/packages/api/src/business/rules-demarches/machine-common.ts
@@ -10,8 +10,9 @@ import { Regions } from 'camino-common/src/static/region.js'
 import { PaysId } from 'camino-common/src/static/pays.js'
 import { communeIdValidator } from 'camino-common/src/static/communes.js'
 import { z } from 'zod'
-import { etapeIdValidator } from 'camino-common/src/etape.js'
+import { etapeBrouillonValidator, etapeIdValidator } from 'camino-common/src/etape.js'
 import { isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty } from 'camino-common/src/typescript-tools.js'
+import { km2Validator } from 'camino-common/src/number.js'
 export interface Etape {
   // TODO 2022-07-28 : ceci pourrait être réduit en utilisant les états de 'trad'
   etapeTypeId: EtapeTypeId
@@ -36,8 +37,8 @@ export const titreEtapeForMachineValidator = z.object({
   contenu: z.any().nullable(),
   heritageContenu: z.any().nullable(),
   communes: z.array(z.object({ id: communeIdValidator })).nullable(),
-  surface: z.number().nullable(),
-  isBrouillon: z.boolean(),
+  surface: km2Validator.nullable(),
+  isBrouillon: etapeBrouillonValidator,
 })
 
 export type TitreEtapeForMachine = z.infer<typeof titreEtapeForMachineValidator>
diff --git a/packages/api/src/business/rules-demarches/machine-helper.test.ts b/packages/api/src/business/rules-demarches/machine-helper.test.ts
index 156777195..bd7da5431 100644
--- a/packages/api/src/business/rules-demarches/machine-helper.test.ts
+++ b/packages/api/src/business/rules-demarches/machine-helper.test.ts
@@ -68,15 +68,10 @@ describe('orderMachine', () => {
           date: toCaminoDate('2020-01-11'),
         },
         {
-          etapeTypeId: 'eof',
+          etapeTypeId: 'asc',
           etapeStatutId: 'fai',
           date: toCaminoDate('2020-01-11'),
         },
-        {
-          etapeTypeId: 'aof',
-          etapeStatutId: 'fav',
-          date: toCaminoDate('2020-01-11'),
-        },
         {
           etapeTypeId: 'sca',
           etapeStatutId: 'fai',
@@ -153,12 +148,7 @@ describe('orderMachine', () => {
         {
           "date": "2020-01-11",
           "etapeStatutId": "fai",
-          "etapeTypeId": "eof",
-        },
-        {
-          "date": "2020-01-11",
-          "etapeStatutId": "fav",
-          "etapeTypeId": "aof",
+          "etapeTypeId": "asc",
         },
         {
           "date": "2020-01-11",
@@ -230,11 +220,6 @@ describe('demarcheStatut', () => {
           etapeTypeId: 'mcr',
           etapeStatutId: 'fav',
         },
-        {
-          date: toCaminoDate('2021-09-16'),
-          etapeTypeId: 'eof',
-          etapeStatutId: 'fai',
-        },
         {
           date: toCaminoDate('2021-12-13'),
           etapeTypeId: 'rde',
@@ -243,8 +228,8 @@ describe('demarcheStatut', () => {
         },
         {
           date: toCaminoDate('2021-12-20'),
-          etapeTypeId: 'aof',
-          etapeStatutId: 'def',
+          etapeTypeId: 'asc',
+          etapeStatutId: 'fai',
         },
         {
           date: toCaminoDate('2022-02-11'),
@@ -431,7 +416,7 @@ describe('mainStep', () => {
       ]
     `)
   })
-  test('possibleNextEtapes après une recevabilité favorable on doit faire une expertise de l’onf', () => {
+  test('possibleNextEtapes après une recevabilité favorable on rendre un avis des services et commissions consultatives', () => {
     expect(
       armOctMachine.possibleNextEtapes(
         [
@@ -464,18 +449,6 @@ describe('mainStep', () => {
           "etapeTypeId": "css",
           "mainStep": false,
         },
-        {
-          "contenu": undefined,
-          "etapeStatutId": "fai",
-          "etapeTypeId": "mio",
-          "mainStep": false,
-        },
-        {
-          "contenu": undefined,
-          "etapeStatutId": "fai",
-          "etapeTypeId": "eof",
-          "mainStep": true,
-        },
         {
           "contenu": undefined,
           "etapeStatutId": "fav",
@@ -500,10 +473,16 @@ describe('mainStep', () => {
           "etapeTypeId": "edm",
           "mainStep": false,
         },
+        {
+          "contenu": undefined,
+          "etapeStatutId": "fai",
+          "etapeTypeId": "asc",
+          "mainStep": true,
+        },
       ]
     `)
   })
-  test('après une expertise de l’onf on doit avoir l’avis de l’onf', () => {
+  test('après un avis des services et commissions consultatives on doit avoir la saisine de la commission des autorisations de recherches minières', () => {
     expect(
       armOctMachine.possibleNextEtapes(
         [
@@ -513,7 +492,7 @@ describe('mainStep', () => {
           { etapeTypeId: 'mcp', etapeStatutId: 'com', date: toCaminoDate('2021-02-02') },
           { etapeTypeId: 'vfd', etapeStatutId: 'fai', date: toCaminoDate('2021-02-02') },
           { etapeTypeId: 'mcr', etapeStatutId: 'fav', date: toCaminoDate('2021-02-02') },
-          { etapeTypeId: 'eof', etapeStatutId: 'fai', date: toCaminoDate('2021-02-02') },
+          { etapeTypeId: 'asc', etapeStatutId: 'fai', date: toCaminoDate('2020-02-02') },
         ],
         toCaminoDate('2021-02-03')
       )
@@ -539,26 +518,8 @@ describe('mainStep', () => {
         },
         {
           "contenu": undefined,
-          "etapeStatutId": "fav",
-          "etapeTypeId": "aof",
-          "mainStep": true,
-        },
-        {
-          "contenu": undefined,
-          "etapeStatutId": "fre",
-          "etapeTypeId": "aof",
-          "mainStep": true,
-        },
-        {
-          "contenu": undefined,
-          "etapeStatutId": "def",
-          "etapeTypeId": "aof",
-          "mainStep": true,
-        },
-        {
-          "contenu": undefined,
-          "etapeStatutId": "dre",
-          "etapeTypeId": "aof",
+          "etapeStatutId": "fai",
+          "etapeTypeId": "sca",
           "mainStep": true,
         },
         {
@@ -585,12 +546,6 @@ describe('mainStep', () => {
           "etapeTypeId": "edm",
           "mainStep": false,
         },
-        {
-          "contenu": undefined,
-          "etapeStatutId": "fai",
-          "etapeTypeId": "mia",
-          "mainStep": false,
-        },
       ]
     `)
   })
@@ -653,7 +608,7 @@ describe('mainStep', () => {
       ]
     `)
   })
-  test('après une recevabilité défavorable on doit avoir un avis de l’onf', () => {
+  test('après une recevabilité défavorable on doit avoir un avis des services et commissions consultatives', () => {
     expect(
       armOctMachine.possibleNextEtapes(
         [
@@ -688,26 +643,8 @@ describe('mainStep', () => {
         },
         {
           "contenu": undefined,
-          "etapeStatutId": "fav",
-          "etapeTypeId": "aof",
-          "mainStep": true,
-        },
-        {
-          "contenu": undefined,
-          "etapeStatutId": "fre",
-          "etapeTypeId": "aof",
-          "mainStep": true,
-        },
-        {
-          "contenu": undefined,
-          "etapeStatutId": "def",
-          "etapeTypeId": "aof",
-          "mainStep": true,
-        },
-        {
-          "contenu": undefined,
-          "etapeStatutId": "dre",
-          "etapeTypeId": "aof",
+          "etapeStatutId": "fai",
+          "etapeTypeId": "asc",
           "mainStep": true,
         },
       ]
diff --git a/packages/api/src/business/rules-demarches/prm/oct.cas.json b/packages/api/src/business/rules-demarches/prm/oct.cas.json
index 1710c4c18..9f8a58e58 100644
--- a/packages/api/src/business/rules-demarches/prm/oct.cas.json
+++ b/packages/api/src/business/rules-demarches/prm/oct.cas.json
@@ -1 +1 @@
-[{"id":0,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2022-08-11","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":155.79},{"date":"2022-08-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-08-14","etapeTypeId":"spp","etapeStatutId":"fai"},{"date":"2022-12-04","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-12-10","etapeTypeId":"anf","etapeStatutId":"ter","paysId":"FR","surface":155.79},{"date":"2023-04-26","etapeTypeId":"ppu","etapeStatutId":"pro"}]},{"id":1,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2019-11-25","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"GF"},{"date":"2019-12-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-02-19","etapeTypeId":"spp","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"mif","etapeStatutId":"fai"},{"date":"2020-07-29","etapeTypeId":"rif","etapeStatutId":"fai"}]},{"id":2,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[{"date":"2022-12-22","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR"}]},{"id":3,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2023-02-06","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR"},{"date":"2023-02-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-03-08","etapeTypeId":"spp","etapeStatutId":"fai"},{"date":"2023-03-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-04-07","etapeTypeId":"anf","etapeStatutId":"enc","paysId":"FR"}]},{"id":4,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-04-26","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"GF","surface":24.96},{"date":"2022-05-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-05-23","etapeTypeId":"spp","etapeStatutId":"fai"}]},{"id":5,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2019-11-27","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"GF","surface":149.52},{"date":"2019-12-25","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-02-21","etapeTypeId":"spp","etapeStatutId":"fai"},{"date":"2020-06-26","etapeTypeId":"mif","etapeStatutId":"fai"},{"date":"2020-07-31","etapeTypeId":"rif","etapeStatutId":"fai"}]},{"id":6,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2020-10-16","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"GF","surface":178.72},{"date":"2020-12-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-12","etapeTypeId":"spp","etapeStatutId":"fai"}]},{"id":7,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2021-05-20","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":171},{"date":"2021-05-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-29","etapeTypeId":"mod","etapeStatutId":"fai","paysId":"FR","surface":171},{"date":"2021-07-11","etapeTypeId":"spp","etapeStatutId":"fai"},{"date":"2022-02-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-02-22","etapeTypeId":"anf","etapeStatutId":"fai","paysId":"FR","surface":171},{"date":"2022-02-23","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-03-07","etapeTypeId":"ars","etapeStatutId":"fre"},{"date":"2022-03-07","etapeTypeId":"apm","etapeStatutId":"fav"},{"date":"2022-03-12","etapeTypeId":"aac","etapeStatutId":"fre"},{"date":"2022-03-19","etapeTypeId":"apl","etapeStatutId":"fre"},{"date":"2022-07-21","etapeTypeId":"ppu","etapeStatutId":"fai"},{"date":"2022-08-18","etapeTypeId":"ppc","etapeStatutId":"ter"},{"date":"2023-06-25","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2023-06-25","etapeTypeId":"app","etapeStatutId":"fav"}]},{"id":8,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2022-07-12","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":226.6},{"date":"2022-07-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-08-09","etapeTypeId":"spp","etapeStatutId":"fai"},{"date":"2022-09-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-11-17","etapeTypeId":"anf","etapeStatutId":"ter","paysId":"FR"},{"date":"2023-01-09","etapeTypeId":"ppu","etapeStatutId":"fai"}]},{"id":9,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2022-03-30","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":39.2},{"date":"2022-04-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-06-05","etapeTypeId":"spp","etapeStatutId":"fai"},{"date":"2022-09-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-12-28","etapeTypeId":"anf","etapeStatutId":"fai","paysId":"FR","surface":39.2},{"date":"2023-01-09","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2023-05-30","etapeTypeId":"ppu","etapeStatutId":"pro"}]},{"id":10,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[{"date":"2023-03-13","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":9}]}]
\ No newline at end of file
+[{"id":0,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2022-08-11","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":155.79},{"date":"2022-08-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-08-14","etapeTypeId":"spp","etapeStatutId":"fai"},{"date":"2022-12-04","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-12-10","etapeTypeId":"anf","etapeStatutId":"ter","paysId":"FR","surface":155.79},{"date":"2023-04-26","etapeTypeId":"ppu","etapeStatutId":"pro"}]},{"id":1,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2019-11-25","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"GF"},{"date":"2019-12-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-02-19","etapeTypeId":"spp","etapeStatutId":"fai"},{"date":"2020-06-23","etapeTypeId":"mif","etapeStatutId":"fai"},{"date":"2020-07-29","etapeTypeId":"rif","etapeStatutId":"fai"}]},{"id":2,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[{"date":"2022-12-22","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR"}]},{"id":3,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2023-02-06","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR"},{"date":"2023-02-22","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2023-03-08","etapeTypeId":"spp","etapeStatutId":"fai"},{"date":"2023-03-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2023-04-07","etapeTypeId":"anf","etapeStatutId":"enc","paysId":"FR"}]},{"id":4,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2022-04-26","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"GF","surface":24.96},{"date":"2022-05-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-05-23","etapeTypeId":"spp","etapeStatutId":"fai"}]},{"id":5,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2019-11-27","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"GF","surface":149.52},{"date":"2019-12-25","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-02-21","etapeTypeId":"spp","etapeStatutId":"fai"},{"date":"2020-06-26","etapeTypeId":"mif","etapeStatutId":"fai"},{"date":"2020-07-31","etapeTypeId":"rif","etapeStatutId":"fai"}]},{"id":6,"demarcheStatutId":"dep","demarchePublique":false,"etapes":[{"date":"2020-10-16","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"GF","surface":178.72},{"date":"2020-12-11","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-01-12","etapeTypeId":"spp","etapeStatutId":"fai"}]},{"id":7,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2021-05-20","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":171},{"date":"2021-05-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-05-29","etapeTypeId":"mod","etapeStatutId":"fai","paysId":"FR","surface":171},{"date":"2021-07-11","etapeTypeId":"spp","etapeStatutId":"fai"},{"date":"2022-02-18","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-02-22","etapeTypeId":"anf","etapeStatutId":"fai","paysId":"FR","surface":171},{"date":"2022-02-23","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-07-21","etapeTypeId":"ppu","etapeStatutId":"fai"},{"date":"2022-08-18","etapeTypeId":"ppc","etapeStatutId":"ter"},{"date":"2023-06-25","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2023-06-25","etapeTypeId":"app","etapeStatutId":"fav"}]},{"id":8,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2022-07-12","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":226.6},{"date":"2022-07-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-08-09","etapeTypeId":"spp","etapeStatutId":"fai"},{"date":"2022-09-27","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-11-17","etapeTypeId":"anf","etapeStatutId":"ter","paysId":"FR"},{"date":"2023-01-09","etapeTypeId":"ppu","etapeStatutId":"fai"}]},{"id":9,"demarcheStatutId":"ins","demarchePublique":true,"etapes":[{"date":"2022-03-30","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":39.2},{"date":"2022-04-26","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-06-05","etapeTypeId":"spp","etapeStatutId":"fai"},{"date":"2022-09-20","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-12-28","etapeTypeId":"anf","etapeStatutId":"fai","paysId":"FR","surface":39.2},{"date":"2023-01-09","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-05-30","etapeTypeId":"ppu","etapeStatutId":"pro"}]},{"id":10,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[{"date":"2023-03-13","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":9}]}]
diff --git a/packages/api/src/business/rules-demarches/prm/oct.machine.test.ts b/packages/api/src/business/rules-demarches/prm/oct.machine.test.ts
index a7d276791..0229b089e 100644
--- a/packages/api/src/business/rules-demarches/prm/oct.machine.test.ts
+++ b/packages/api/src/business/rules-demarches/prm/oct.machine.test.ts
@@ -15,8 +15,7 @@ describe('vérifie l’arbre d’octroi de PRM', () => {
       { ...ETES.saisineDuPrefet.FAIT, date: toCaminoDate('2022-04-16') },
       { ...ETES.recevabiliteDeLaDemande.FAVORABLE, date: toCaminoDate('2022-04-17') },
       { ...ETES.avisDeMiseEnConcurrenceAuJORF.FAIT, date: toCaminoDate('2022-04-18') },
-      { ...ETES.saisineDesServices.FAIT, date: toCaminoDate('2022-04-19') },
-      { ...ETES.avisDeLOfficeNationalDesForets.FAVORABLE, date: toCaminoDate('2022-04-20') },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2022-04-19') },
       { ...ETES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement.FAVORABLE, date: toCaminoDate('2022-05-20') },
       { ...ETES.avisDuPrefet.FAVORABLE, date: toCaminoDate('2022-05-20') },
       { ...ETES.ouvertureDeLaParticipationDuPublic.FAIT, date: toCaminoDate('2022-05-18') },
@@ -51,10 +50,9 @@ describe('vérifie l’arbre d’octroi de PRM', () => {
       { ...ETES.saisineDuPrefet.FAIT, date: toCaminoDate('2022-04-16') },
       { ...ETES.recevabiliteDeLaDemande.FAVORABLE, date: toCaminoDate('2022-04-17') },
       { ...ETES.avisDeMiseEnConcurrenceAuJORF.FAIT, date: toCaminoDate('2022-04-18') },
-      { ...ETES.saisineDesServices.FAIT, date: toCaminoDate('2022-04-19') },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2022-04-19') },
       { ...ETES.saisineDesCollectivitesLocales.FAIT, date: toCaminoDate('2022-04-19') },
       { ...ETES.avisDunMaire.FAVORABLE, date: toCaminoDate('2022-04-19') },
-      { ...ETES.avisDeLOfficeNationalDesForets.FAVORABLE, date: toCaminoDate('2022-04-20') },
       { ...ETES.avisDeLaCommissionDepartementaleDesMines_CDM_.FAVORABLE, date: toCaminoDate('2022-05-20') },
       { ...ETES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement.FAVORABLE, date: toCaminoDate('2022-05-20') },
       { ...ETES.avisDuPrefet.FAVORABLE, date: toCaminoDate('2022-05-20') },
@@ -63,6 +61,22 @@ describe('vérifie l’arbre d’octroi de PRM', () => {
     ]
     expect(() => orderAndInterpretMachine(prmOctMachine, etapes)).not.toThrowError()
   })
+  test('peut créer une demande d’octroi de PRM en Guyane sans avis du maire', () => {
+    const etapes = [
+      { ...ETES.demande.FAIT, date: toCaminoDate('2023-09-05'), paysId: PAYS_IDS['Département de la Guyane'], surface: 14 },
+      { ...ETES.depotDeLaDemande.FAIT, date: toCaminoDate('2023-09-06') },
+      { ...ETES.saisineDuPrefet.FAIT, date: toCaminoDate('2023-09-21') },
+      { ...ETES.demandeDeComplements_RecevabiliteDeLaDemande_.FAIT, date: toCaminoDate('2023-11-16') },
+      { ...ETES.receptionDeComplements_RecevabiliteDeLaDemande_.FAIT, date: toCaminoDate('2023-11-22') },
+      { ...ETES.recevabiliteDeLaDemande.FAVORABLE, date: toCaminoDate('2023-12-06') },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2023-12-06') },
+      { ...ETES.saisineDesCollectivitesLocales.FAIT, date: toCaminoDate('2023-12-06') },
+      { ...ETES.avisDeLaCommissionDepartementaleDesMines_CDM_.FAVORABLE, date: toCaminoDate('2024-01-29') },
+      { ...ETES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement.FAVORABLE, date: toCaminoDate('2024-02-02') },
+      { ...ETES.avisDuPrefet.FAVORABLE, date: toCaminoDate('2024-02-15') },
+    ]
+    expect(() => orderAndInterpretMachine(prmOctMachine, etapes)).not.toThrowError()
+  })
 
   test('peut créer une demande d’octroi de PRM en Outre mer (hors Guyane)', () => {
     const etapes = [
@@ -71,8 +85,7 @@ describe('vérifie l’arbre d’octroi de PRM', () => {
       { ...ETES.saisineDuPrefet.FAIT, date: toCaminoDate('2022-04-16') },
       { ...ETES.recevabiliteDeLaDemande.FAVORABLE, date: toCaminoDate('2022-04-17') },
       { ...ETES.avisDeMiseEnConcurrenceAuJORF.FAIT, date: toCaminoDate('2022-04-18') },
-      { ...ETES.saisineDesServices.FAIT, date: toCaminoDate('2022-04-19') },
-      { ...ETES.avisDeLOfficeNationalDesForets.FAVORABLE, date: toCaminoDate('2022-04-20') },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2022-04-19') },
       { ...ETES.avisDeLaCommissionDepartementaleDesMines_CDM_.FAVORABLE, date: toCaminoDate('2022-05-20') },
       { ...ETES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement.FAVORABLE, date: toCaminoDate('2022-05-20') },
       { ...ETES.avisDuPrefet.FAVORABLE, date: toCaminoDate('2022-05-20') },
@@ -89,26 +102,26 @@ describe('vérifie l’arbre d’octroi de PRM', () => {
       { ...ETES.saisineDuPrefet.FAIT, date: toCaminoDate('2022-04-16') },
       { ...ETES.recevabiliteDeLaDemande.FAVORABLE, date: toCaminoDate('2022-04-17') },
       { ...ETES.avisDeMiseEnConcurrenceAuJORF.FAIT, date: toCaminoDate('2022-04-18') },
-      { ...ETES.saisineDesServices.FAIT, date: toCaminoDate('2022-04-19') },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2022-04-19') },
       { ...ETES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement.FAVORABLE, date: toCaminoDate('2022-04-20') },
     ]
     expect(() => orderAndInterpretMachine(prmOctMachine, etapes)).toThrowErrorMatchingInlineSnapshot(
-      `[Error: Error: cannot execute step: '{"etapeTypeId":"apd","etapeStatutId":"fav","date":"2022-04-20"}' after '["mfr_fai","mdp_fai","spp_fai","mcr_fav","anf_fai","ssr_fai"]'. The event {"type":"RENDRE_RAPPORT_DREAL","date":"2022-04-20"} should be one of 'CLASSER_SANS_SUITE,DEMANDER_INFORMATIONS,DEPOSER_DEMANDE_CONCURRENTE,DESISTER_PAR_LE_DEMANDEUR,MODIFIER_DEMANDE,RECEVOIR_INFORMATIONS,RENDRE_AVIS_AGENCE_REGIONALE_SANTE_ARS,RENDRE_AVIS_AUTORITE_MILITAIRE,RENDRE_AVIS_DES_DTT,RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES,RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES,RENDRE_AVIS_INSTITUT_NATIONAL_ORIGINE_ET_QUALITE_INAO,RENDRE_AVIS_ONF,RENDRE_AVIS_PARC_NATIONAL,RENDRE_AVIS_PARC_NATUREL_REGIONAL,RENDRE_AVIS_SERVICE_ADMINISTRATIF_CIVIL_LOCAL']`
+      `[Error: Error: cannot execute step: '{"etapeTypeId":"apd","etapeStatutId":"fav","date":"2022-04-20"}' after '["mfr_fai","mdp_fai","spp_fai","mcr_fav","anf_fai","asc_fai"]'. The event {"type":"RENDRE_RAPPORT_DREAL","date":"2022-04-20"} should be one of 'CLASSER_SANS_SUITE,DEMANDER_INFORMATIONS,DEPOSER_DEMANDE_CONCURRENTE,DESISTER_PAR_LE_DEMANDEUR,MODIFIER_DEMANDE,RECEVOIR_INFORMATIONS']`
     )
   })
 
-  test('ne peut pas faire 2 saisines des services', () => {
+  test('ne peut pas faire 2 avis des services et commissions consultatives', () => {
     const etapes = [
       { ...ETES.demande.FAIT, date: toCaminoDate('2022-04-14'), paysId: PAYS_IDS['République Française'] },
       { ...ETES.depotDeLaDemande.FAIT, date: toCaminoDate('2022-04-15') },
       { ...ETES.saisineDuPrefet.FAIT, date: toCaminoDate('2022-04-16') },
       { ...ETES.recevabiliteDeLaDemande.FAVORABLE, date: toCaminoDate('2022-04-17') },
       { ...ETES.avisDeMiseEnConcurrenceAuJORF.FAIT, date: toCaminoDate('2022-04-18') },
-      { ...ETES.saisineDesServices.FAIT, date: toCaminoDate('2022-04-19') },
-      { ...ETES.saisineDesServices.FAIT, date: toCaminoDate('2022-04-19') },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2022-04-19') },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2022-04-19') },
     ]
     expect(() => orderAndInterpretMachine(prmOctMachine, etapes)).toThrowErrorMatchingInlineSnapshot(
-      `[Error: Error: cannot execute step: '{"etapeTypeId":"ssr","etapeStatutId":"fai","date":"2022-04-19"}' after '["mfr_fai","mdp_fai","spp_fai","mcr_fav","anf_fai","ssr_fai"]'. The event {"type":"FAIRE_SAISINE_DES_SERVICES","date":"2022-04-19"} should be one of 'CLASSER_SANS_SUITE,DEMANDER_INFORMATIONS,DEPOSER_DEMANDE_CONCURRENTE,DESISTER_PAR_LE_DEMANDEUR,MODIFIER_DEMANDE,RECEVOIR_INFORMATIONS,RENDRE_AVIS_AGENCE_REGIONALE_SANTE_ARS,RENDRE_AVIS_AUTORITE_MILITAIRE,RENDRE_AVIS_DES_DTT,RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES,RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES,RENDRE_AVIS_INSTITUT_NATIONAL_ORIGINE_ET_QUALITE_INAO,RENDRE_AVIS_ONF,RENDRE_AVIS_PARC_NATIONAL,RENDRE_AVIS_PARC_NATUREL_REGIONAL,RENDRE_AVIS_SERVICE_ADMINISTRATIF_CIVIL_LOCAL']`
+      `[Error: Error: cannot execute step: '{"etapeTypeId":"asc","etapeStatutId":"fai","date":"2022-04-19"}' after '["mfr_fai","mdp_fai","spp_fai","mcr_fav","anf_fai","asc_fai"]'. The event {"type":"RENDRE_AVIS_SERVICES_ET_COMMISSIONS_CONSULTATIVES","date":"2022-04-19"} should be one of 'CLASSER_SANS_SUITE,DEMANDER_INFORMATIONS,DEPOSER_DEMANDE_CONCURRENTE,DESISTER_PAR_LE_DEMANDEUR,MODIFIER_DEMANDE,RECEVOIR_INFORMATIONS']`
     )
   })
 
@@ -122,7 +135,7 @@ describe('vérifie l’arbre d’octroi de PRM', () => {
       { ...ETES.ouvertureDeLaParticipationDuPublic.FAIT, date: toCaminoDate('2022-04-19') },
     ]
     expect(() => orderAndInterpretMachine(prmOctMachine, etapes)).toThrowErrorMatchingInlineSnapshot(
-      `[Error: Error: cannot execute step: '{"etapeTypeId":"ppu","etapeStatutId":"fai","date":"2022-04-19"}' after '["mfr_fai","mdp_fai","spp_fai","mcr_fav","anf_fai"]'. The event {"type":"OUVRIR_PARTICIPATION_DU_PUBLIC","date":"2022-04-19"} should be one of 'CLASSER_SANS_SUITE,DEMANDER_INFORMATIONS,DEPOSER_DEMANDE_CONCURRENTE,DESISTER_PAR_LE_DEMANDEUR,FAIRE_SAISINE_DES_SERVICES,MODIFIER_DEMANDE,RECEVOIR_INFORMATIONS']`
+      `[Error: Error: cannot execute step: '{"etapeTypeId":"ppu","etapeStatutId":"fai","date":"2022-04-19"}' after '["mfr_fai","mdp_fai","spp_fai","mcr_fav","anf_fai"]'. The event {"type":"OUVRIR_PARTICIPATION_DU_PUBLIC","date":"2022-04-19"} should be one of 'CLASSER_SANS_SUITE,DEMANDER_INFORMATIONS,DEPOSER_DEMANDE_CONCURRENTE,DESISTER_PAR_LE_DEMANDEUR,MODIFIER_DEMANDE,RECEVOIR_INFORMATIONS,RENDRE_AVIS_SERVICES_ET_COMMISSIONS_CONSULTATIVES']`
     )
   })
 
@@ -133,8 +146,7 @@ describe('vérifie l’arbre d’octroi de PRM', () => {
       { ...ETES.saisineDuPrefet.FAIT, date: toCaminoDate('2022-04-16') },
       { ...ETES.recevabiliteDeLaDemande.FAVORABLE, date: toCaminoDate('2022-04-17') },
       { ...ETES.avisDeMiseEnConcurrenceAuJORF.FAIT, date: toCaminoDate('2022-04-18') },
-      { ...ETES.saisineDesServices.FAIT, date: toCaminoDate('2022-04-19') },
-      { ...ETES.avisDeLOfficeNationalDesForets.FAVORABLE, date: toCaminoDate('2022-04-20') },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2022-04-19') },
       { ...ETES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement.FAVORABLE, date: toCaminoDate('2022-05-20') },
       { ...ETES.avisDuPrefet.FAVORABLE, date: toCaminoDate('2022-05-20') },
       { ...ETES.ouvertureDeLaParticipationDuPublic.FAIT, date: toCaminoDate('2022-05-18') },
@@ -151,7 +163,7 @@ describe('vérifie l’arbre d’octroi de PRM', () => {
     ]
 
     expect(() => orderAndInterpretMachine(prmOctMachine, etapes)).toThrowErrorMatchingInlineSnapshot(
-      `[Error: Error: cannot execute step: '{"etapeTypeId":"rpu","etapeStatutId":"fai","date":"2022-06-01"}' after '["mfr_fai","mdp_fai","spp_fai","mcr_fav","anf_fai","ssr_fai","aof_fav","ppu_fai","ppc_ter","apd_fav","app_fav","cac_fai","scg_fai","rcg_fav","acg_fav","sas_fai","dex_rej","npp_fai","mno_fai"]'. The event {"type":"PUBLIER_DECISIONS_RECUEIL_ACTES_ADMINISTRATIFS"} should be one of 'RENDRE_DECISION_ABROGATION,RENDRE_DECISION_ANNULATION_PAR_JUGE_ADMINISTRATIF']`
+      `[Error: Error: cannot execute step: '{"etapeTypeId":"rpu","etapeStatutId":"fai","date":"2022-06-01"}' after '["mfr_fai","mdp_fai","spp_fai","mcr_fav","anf_fai","asc_fai","ppu_fai","ppc_ter","apd_fav","app_fav","cac_fai","scg_fai","rcg_fav","acg_fav","sas_fai","dex_rej","npp_fai","mno_fai"]'. The event {"type":"PUBLIER_DECISIONS_RECUEIL_ACTES_ADMINISTRATIFS"} should be one of 'RENDRE_DECISION_ABROGATION,RENDRE_DECISION_ANNULATION_PAR_JUGE_ADMINISTRATIF']`
     )
   })
 
diff --git a/packages/api/src/business/rules-demarches/prm/oct.machine.ts b/packages/api/src/business/rules-demarches/prm/oct.machine.ts
index d64a03d68..f689782b5 100644
--- a/packages/api/src/business/rules-demarches/prm/oct.machine.ts
+++ b/packages/api/src/business/rules-demarches/prm/oct.machine.ts
@@ -16,9 +16,9 @@ type OuvrirParticipationDuPublic = {
   type: 'OUVRIR_PARTICIPATION_DU_PUBLIC'
 }
 
-type FaireSaisineDesServices = {
+type RendreAvisServicesEtCommissionsConsultatives = {
   date: CaminoDate
-  type: 'FAIRE_SAISINE_DES_SERVICES'
+  type: 'RENDRE_AVIS_SERVICES_ET_COMMISSIONS_CONSULTATIVES'
 }
 
 type RendreAvisCDM = {
@@ -49,17 +49,7 @@ type XStateEvent =
   | { type: 'DEPOSER_DEMANDE_CONCURRENTE' }
   | OuvrirParticipationDuPublic
   | { type: 'CLOTURER_PARTICIPATION_DU_PUBLIC' }
-  | FaireSaisineDesServices
-  | { type: 'RENDRE_AVIS_ONF' }
-  | { type: 'RENDRE_AVIS_SERVICE_ADMINISTRATIF_CIVIL_LOCAL' }
-  | { type: 'RENDRE_AVIS_AUTORITE_MILITAIRE' }
-  | { type: 'RENDRE_AVIS_DES_DTT' }
-  | { type: 'RENDRE_AVIS_PARC_NATUREL_REGIONAL' }
-  | { type: 'RENDRE_AVIS_PARC_NATIONAL' }
-  | { type: 'RENDRE_AVIS_AGENCE_REGIONALE_SANTE_ARS' }
-  | { type: 'RENDRE_AVIS_INSTITUT_NATIONAL_ORIGINE_ET_QUALITE_INAO' }
-  | { type: 'RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES' }
-  | { type: 'RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES' }
+  | RendreAvisServicesEtCommissionsConsultatives
   | { type: 'RENDRE_AVIS_POLICE_EAU' }
   | RendreAvisCDM
   | RendreRapportDREAL
@@ -111,17 +101,7 @@ const trad: { [key in Event]: { db: DBEtat; mainStep: boolean } } = {
   DEPOSER_DEMANDE_CONCURRENTE: { db: EtapesTypesEtapesStatuts.avisDeDemandeConcurrente, mainStep: false },
   OUVRIR_PARTICIPATION_DU_PUBLIC: { db: EtapesTypesEtapesStatuts.ouvertureDeLaParticipationDuPublic, mainStep: true },
   CLOTURER_PARTICIPATION_DU_PUBLIC: { db: EtapesTypesEtapesStatuts.clotureDeLaParticipationDuPublic, mainStep: true },
-  FAIRE_SAISINE_DES_SERVICES: { db: EtapesTypesEtapesStatuts.saisineDesServices, mainStep: true },
-  RENDRE_AVIS_ONF: { db: EtapesTypesEtapesStatuts.avisDeLOfficeNationalDesForets, mainStep: false },
-  RENDRE_AVIS_SERVICE_ADMINISTRATIF_CIVIL_LOCAL: { db: EtapesTypesEtapesStatuts.avisDunServiceAdministratifLocal, mainStep: false },
-  RENDRE_AVIS_AUTORITE_MILITAIRE: { db: EtapesTypesEtapesStatuts.avisDeLautoriteMilitaire, mainStep: false },
-  RENDRE_AVIS_DES_DTT: { db: EtapesTypesEtapesStatuts.avisDeLaDirectionDepartementaleDesTerritoiresEtDeLaMerDDT_M_, mainStep: false },
-  RENDRE_AVIS_PARC_NATUREL_REGIONAL: { db: EtapesTypesEtapesStatuts.avisDuParcNaturelRegional, mainStep: false },
-  RENDRE_AVIS_PARC_NATIONAL: { db: EtapesTypesEtapesStatuts.avisDuParcNational, mainStep: false },
-  RENDRE_AVIS_AGENCE_REGIONALE_SANTE_ARS: { db: EtapesTypesEtapesStatuts.avisDeLagenceRegionaleDeSante, mainStep: false },
-  RENDRE_AVIS_INSTITUT_NATIONAL_ORIGINE_ET_QUALITE_INAO: { db: EtapesTypesEtapesStatuts.avisDeLInstitutNationalDeLorigineEtDeLaQualite, mainStep: false },
-  RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES: { db: EtapesTypesEtapesStatuts.avisDeDirectionRegionaleDesAffairesCulturelles, mainStep: false },
-  RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES: { db: EtapesTypesEtapesStatuts.avisDeLaDirectionRegionaleDesFinancesPubliques, mainStep: false },
+  RENDRE_AVIS_SERVICES_ET_COMMISSIONS_CONSULTATIVES: { db: EtapesTypesEtapesStatuts.avisDesServicesEtCommissionsConsultatives, mainStep: true },
   RENDRE_AVIS_POLICE_EAU: { db: EtapesTypesEtapesStatuts.expertiseDREALOuDGTMServiceEau, mainStep: false },
 
   RENDRE_AVIS_CDM: { db: EtapesTypesEtapesStatuts.avisDeLaCommissionDepartementaleDesMines_CDM_, mainStep: true },
@@ -165,7 +145,7 @@ export class PrmOctMachine extends CaminoMachine<PrmOctContext, XStateEvent> {
     switch (event) {
       case 'RENDRE_AVIS_DE_MISE_EN_CONCURRENCE_AU_JORF':
       case 'OUVRIR_PARTICIPATION_DU_PUBLIC':
-      case 'FAIRE_SAISINE_DES_SERVICES':
+      case 'RENDRE_AVIS_SERVICES_ET_COMMISSIONS_CONSULTATIVES':
       case 'RENDRE_AVIS_CDM':
       case 'RENDRE_RAPPORT_DREAL':
         return [{ type: event, date }]
@@ -196,7 +176,7 @@ export class PrmOctMachine extends CaminoMachine<PrmOctContext, XStateEvent> {
       switch (eventFromEntry) {
         case 'RENDRE_AVIS_DE_MISE_EN_CONCURRENCE_AU_JORF':
         case 'OUVRIR_PARTICIPATION_DU_PUBLIC':
-        case 'FAIRE_SAISINE_DES_SERVICES':
+        case 'RENDRE_AVIS_SERVICES_ET_COMMISSIONS_CONSULTATIVES':
         case 'RENDRE_AVIS_CDM':
         case 'RENDRE_RAPPORT_DREAL':
           return { type: eventFromEntry, date: etape.date }
@@ -225,7 +205,7 @@ export class PrmOctMachine extends CaminoMachine<PrmOctContext, XStateEvent> {
 
 interface PrmOctContext extends CaminoCommonContext {
   dateAvisMiseEnConcurrentJorf: CaminoDate | null
-  dateSaisineDesServices: CaminoDate | null
+  dateAvisDesServicesEtCommissionsConsultatives: CaminoDate | null
   paysId: PaysId | null
   surface: number | null
 }
@@ -235,11 +215,11 @@ const peutOuvrirParticipationDuPublic = ({ context, event }: { context: PrmOctCo
 }
 
 const peutRendreRapportDREAL = ({ context, event }: { context: PrmOctContext; event: RendreRapportDREAL }): boolean => {
-  return isMetropole(context.paysId) && !!context.dateSaisineDesServices && daysBetween(dateAddMonths(context.dateSaisineDesServices, 1), event.date) >= 0
+  return !!context.dateAvisDesServicesEtCommissionsConsultatives && daysBetween(dateAddMonths(context.dateAvisDesServicesEtCommissionsConsultatives, 1), event.date) >= 0
 }
 
 const peutRendreAvisCDM = ({ context, event }: { context: PrmOctContext; event: RendreAvisCDM }): boolean => {
-  return isOutreMer(context.paysId) && !!context.dateSaisineDesServices && daysBetween(dateAddMonths(context.dateSaisineDesServices, 1), event.date) >= 0
+  return isOutreMer(context.paysId) && !!context.dateAvisDesServicesEtCommissionsConsultatives && daysBetween(dateAddMonths(context.dateAvisDesServicesEtCommissionsConsultatives, 1), event.date) >= 0
 }
 
 const estExempteDeLaMiseEnConcurrence = ({ context }: { context: PrmOctContext }): boolean => {
@@ -260,7 +240,7 @@ const prmOctMachine = createMachine({
   initial: 'demandeAFaire',
   context: {
     dateAvisMiseEnConcurrentJorf: null,
-    dateSaisineDesServices: null,
+    dateAvisDesServicesEtCommissionsConsultatives: null,
     visibilite: 'confidentielle',
     demarcheStatut: DemarchesStatutsIds.EnConstruction,
     paysId: null,
@@ -398,126 +378,26 @@ const prmOctMachine = createMachine({
                     done: { type: 'final' },
                   },
                 },
-                saisineDesServicesMachine: {
-                  initial: 'saisineDesServicesAFaire',
+                avisDesServicesEtCommissionsConsultativesMachine: {
+                  initial: 'avisDesServicesEtCommissionsConsultativesAFaire',
                   states: {
-                    saisineDesServicesAFaire: {
+                    avisDesServicesEtCommissionsConsultativesAFaire: {
                       on: {
-                        FAIRE_SAISINE_DES_SERVICES: {
-                          target: 'avisDesServicesARendre',
+                        RENDRE_AVIS_SERVICES_ET_COMMISSIONS_CONSULTATIVES: {
+                          target: 'avisDesServicesRendus',
                           actions: assign({
-                            dateSaisineDesServices: ({ event }) => event.date,
+                            dateAvisDesServicesEtCommissionsConsultatives: ({ event }) => event.date,
                           }),
                         },
                       },
                     },
-                    avisDesServicesARendre: {
-                      type: 'parallel',
-
-                      states: {
-                        rendreAvisDrealAFaire: {
-                          on: {
-                            RENDRE_AVIS_CDM: { target: '#rapportDREALAFaire', guard: peutRendreAvisCDM },
-                            RENDRE_RAPPORT_DREAL: { target: '#avisPrefetARendre', guard: peutRendreRapportDREAL },
-                          },
-                        },
-                        avisServiceAdministratifCivilLocal: {
-                          initial: 'avisServiceAdministratifCivilLocalARendre',
-                          states: {
-                            avisServiceAdministratifCivilLocalARendre: {
-                              on: { RENDRE_AVIS_SERVICE_ADMINISTRATIF_CIVIL_LOCAL: 'avisServiceAdministratifCivilLocalRendu' },
-                            },
-                            avisServiceAdministratifCivilLocalRendu: { type: 'final' },
-                          },
-                        },
-                        avisAutoriteMilitaire: {
-                          initial: 'avisAutoriteMilitaireARendre',
-                          states: {
-                            avisAutoriteMilitaireARendre: {
-                              on: { RENDRE_AVIS_AUTORITE_MILITAIRE: 'avisAutoriteMilitaireRendu' },
-                            },
-                            avisAutoriteMilitaireRendu: { type: 'final' },
-                          },
-                        },
-                        avisDesDDT: {
-                          initial: 'avisDesDDTARendre',
-                          states: {
-                            avisDesDDTARendre: {
-                              on: {
-                                RENDRE_AVIS_DES_DTT: { target: 'avisDesDDTRendu', guard: ({ context }) => !isGuyane(context.paysId) },
-                                RENDRE_AVIS_POLICE_EAU: { target: 'avisDesDDTRendu', guard: ({ context }) => isGuyane(context.paysId) },
-                              },
-                            },
-                            avisDesDDTRendu: { type: 'final' },
-                          },
-                        },
-                        avisParcNaturelRegional: {
-                          initial: 'avisParcNaturelRegionalARendre',
-                          states: {
-                            avisParcNaturelRegionalARendre: {
-                              on: { RENDRE_AVIS_PARC_NATUREL_REGIONAL: 'avisParcNaturelRegionalRendu' },
-                            },
-                            avisParcNaturelRegionalRendu: { type: 'final' },
-                          },
-                        },
-                        avisParcNational: {
-                          initial: 'avisParcNationalARendre',
-                          states: {
-                            avisParcNationalARendre: {
-                              on: { RENDRE_AVIS_PARC_NATIONAL: 'avisParcNationalRendu' },
-                            },
-                            avisParcNationalRendu: { type: 'final' },
-                          },
-                        },
-                        avisAgenceRegionaleSanteARS: {
-                          initial: 'avisAgenceRegionaleSanteARSARendre',
-                          states: {
-                            avisAgenceRegionaleSanteARSARendre: {
-                              on: { RENDRE_AVIS_AGENCE_REGIONALE_SANTE_ARS: 'avisAgenceRegionaleSanteARSRendu' },
-                            },
-                            avisAgenceRegionaleSanteARSRendu: { type: 'final' },
-                          },
-                        },
-                        avisONF: {
-                          initial: 'avisONFARendre',
-                          states: {
-                            avisONFARendre: {
-                              on: { RENDRE_AVIS_ONF: 'avisONFRendu' },
-                            },
-                            avisONFRendu: { type: 'final' },
-                          },
-                        },
-                        avisInstitutNationalOrigineEtQualiteINAO: {
-                          initial: 'avisInstitutNationalOrigineEtQualiteINAOARendre',
-                          states: {
-                            avisInstitutNationalOrigineEtQualiteINAOARendre: {
-                              on: { RENDRE_AVIS_INSTITUT_NATIONAL_ORIGINE_ET_QUALITE_INAO: 'avisInstitutNationalOrigineEtQualiteINAORendu' },
-                            },
-                            avisInstitutNationalOrigineEtQualiteINAORendu: { type: 'final' },
-                          },
-                        },
-                        avisDirectionRegionaleAffairesCulturelles: {
-                          initial: 'avisDirectionRegionaleAffairesCulturellesARendre',
-                          states: {
-                            avisDirectionRegionaleAffairesCulturellesARendre: {
-                              on: { RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES: 'avisDirectionRegionaleAffairesCulturellesRendu' },
-                            },
-                            avisDirectionRegionaleAffairesCulturellesRendu: { type: 'final' },
-                          },
-                        },
-                        avisDirectionRegionaleFinancesPubliques: {
-                          initial: 'avisDirectionRegionaleFinancesPubliquesARendre',
-                          states: {
-                            avisDirectionRegionaleFinancesPubliquesARendre: {
-                              on: { RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES: 'avisDirectionRegionaleFinancesPubliquesRendu' },
-                            },
-                            avisDirectionRegionaleFinancesPubliquesRendu: { type: 'final' },
-                          },
-                        },
+                    avisDesServicesRendus: {
+                      type: 'final',
+                      on: {
+                        RENDRE_AVIS_CDM: { target: '#rapportDREALAFaire', guard: peutRendreAvisCDM },
+                        RENDRE_RAPPORT_DREAL: { target: '#avisPrefetARendre', guard: peutRendreRapportDREAL },
                       },
-                      onDone: 'avisDesServicesRendus',
                     },
-                    avisDesServicesRendus: { type: 'final' },
                   },
                 },
               },
@@ -537,13 +417,19 @@ const prmOctMachine = createMachine({
             },
             avisCommissionDepartementaleDesMinesEnGuyaneEtOutreMerARendre: {
               on: {
-                RENDRE_AVIS_CDM: 'rapportDREALAFaire',
+                RENDRE_AVIS_CDM: {
+                  target: 'rapportDREALAFaire',
+                  guard: peutRendreAvisCDM,
+                },
               },
             },
             rapportDREALAFaire: {
               id: 'rapportDREALAFaire',
               on: {
-                RENDRE_RAPPORT_DREAL: 'avisPrefetARendre',
+                RENDRE_RAPPORT_DREAL: {
+                  target: 'avisPrefetARendre',
+                  guard: peutRendreRapportDREAL,
+                },
               },
             },
             avisPrefetARendre: {
diff --git a/packages/api/src/business/rules-demarches/pxg/oct.cas.json b/packages/api/src/business/rules-demarches/pxg/oct.cas.json
index 5c5ede6ba..96d3f064d 100644
--- a/packages/api/src/business/rules-demarches/pxg/oct.cas.json
+++ b/packages/api/src/business/rules-demarches/pxg/oct.cas.json
@@ -1 +1 @@
-[{"id":0,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[{"date":"2022-03-26","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":0.15}]},{"id":1,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-03","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR"},{"date":"2020-07-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-09-08","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2020-10-05","etapeTypeId":"rca","etapeStatutId":"fai","paysId":"FR"},{"date":"2020-11-16","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-15","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2021-07-21","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-07-26","etapeTypeId":"wse","etapeStatutId":"fai"},{"date":"2021-09-26","etapeTypeId":"wae","etapeStatutId":"fav"},{"date":"2021-12-05","etapeTypeId":"epu","etapeStatutId":"fai"},{"date":"2022-01-03","etapeTypeId":"epc","etapeStatutId":"ter"},{"date":"2022-04-11","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-05-02","etapeTypeId":"wtp","etapeStatutId":"fai"},{"date":"2022-05-13","etapeTypeId":"wau","etapeStatutId":"fav"},{"date":"2022-05-13","etapeTypeId":"acd","etapeStatutId":"fav"},{"date":"2022-05-23","etapeTypeId":"dex","etapeStatutId":"acc","paysId":"FR"}]},{"id":2,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-06-23","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR"},{"date":"2019-06-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-09-12","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2020-02-24","etapeTypeId":"rca","etapeStatutId":"fai","paysId":"FR"},{"date":"2020-04-03","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-03","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2020-04-11","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2020-05-12","etapeTypeId":"wse","etapeStatutId":"fai"},{"date":"2020-07-12","etapeTypeId":"wae","etapeStatutId":"fav"},{"date":"2022-05-09","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-06-05","etapeTypeId":"wtp","etapeStatutId":"fai"},{"date":"2022-06-05","etapeTypeId":"wau","etapeStatutId":"fav"},{"date":"2022-06-05","etapeTypeId":"acd","etapeStatutId":"fav"},{"date":"2022-07-25","etapeTypeId":"dex","etapeStatutId":"acc","paysId":"FR"}]},{"id":3,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-11-17","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR"},{"date":"2020-11-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-04-11","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-06-13","etapeTypeId":"rca","etapeStatutId":"fai","paysId":"FR"},{"date":"2021-06-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-28","etapeTypeId":"wse","etapeStatutId":"fai"},{"date":"2021-06-29","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-08-29","etapeTypeId":"wae","etapeStatutId":"fav"},{"date":"2021-08-30","etapeTypeId":"ama","etapeStatutId":"fav"},{"date":"2021-09-13","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2022-01-26","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-02-01","etapeTypeId":"wtp","etapeStatutId":"fai"},{"date":"2022-02-12","etapeTypeId":"wau","etapeStatutId":"fav"},{"date":"2022-02-13","etapeTypeId":"acd","etapeStatutId":"fav"},{"date":"2022-02-21","etapeTypeId":"dex","etapeStatutId":"acc","paysId":"FR"}]},{"id":4,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-12-19","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":0.03},{"date":"2019-12-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-04-06","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2020-05-28","etapeTypeId":"rca","etapeStatutId":"fai","paysId":"FR","surface":0.03},{"date":"2020-07-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-08","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2020-07-08","etapeTypeId":"wse","etapeStatutId":"fai"},{"date":"2020-07-08","etapeTypeId":"wae","etapeStatutId":"fav"},{"date":"2020-07-08","etapeTypeId":"epu","etapeStatutId":"fai"},{"date":"2020-07-08","etapeTypeId":"epc","etapeStatutId":"ter"},{"date":"2020-07-08","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2020-08-05","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2020-08-05","etapeTypeId":"wtp","etapeStatutId":"fai"},{"date":"2020-08-05","etapeTypeId":"wau","etapeStatutId":"fav"},{"date":"2020-09-30","etapeTypeId":"dex","etapeStatutId":"acc","paysId":"FR","surface":0.03}]},{"id":5,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2017-10-31","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR"},{"date":"2017-10-31","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2018-01-10","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2018-12-15","etapeTypeId":"rca","etapeStatutId":"fai","paysId":"FR"},{"date":"2019-01-17","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2019-01-17","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2019-01-17","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2019-01-18","etapeTypeId":"wse","etapeStatutId":"fai"},{"date":"2019-03-18","etapeTypeId":"wae","etapeStatutId":"fav"},{"date":"2019-08-23","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2019-09-13","etapeTypeId":"wtp","etapeStatutId":"fai"},{"date":"2019-09-13","etapeTypeId":"wau","etapeStatutId":"fav"},{"date":"2019-09-13","etapeTypeId":"acd","etapeStatutId":"fav"},{"date":"2019-10-10","etapeTypeId":"dex","etapeStatutId":"acc","paysId":"FR"}]},{"id":6,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-06-27","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":0.19},{"date":"2022-06-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-07-02","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-09-04","etapeTypeId":"wse","etapeStatutId":"fai"},{"date":"2022-11-04","etapeTypeId":"wae","etapeStatutId":"fav"},{"date":"2022-12-15","etapeTypeId":"epu","etapeStatutId":"fai"},{"date":"2023-01-16","etapeTypeId":"ssr","etapeStatutId":"fai"},{"date":"2023-01-16","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2023-01-16","etapeTypeId":"epc","etapeStatutId":"ter"},{"date":"2023-04-21","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2023-06-03","etapeTypeId":"wtp","etapeStatutId":"fai"},{"date":"2023-06-17","etapeTypeId":"wau","etapeStatutId":"fav"},{"date":"2023-06-23","etapeTypeId":"dex","etapeStatutId":"acc","paysId":"FR","surface":0.19}]},{"id":7,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[]}]
+[{"id":0,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[{"date":"2022-03-26","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":0.15}]},{"id":1,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-07-03","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR"},{"date":"2020-07-12","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-09-08","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2020-10-05","etapeTypeId":"rca","etapeStatutId":"fai","paysId":"FR"},{"date":"2020-11-16","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-07-15","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2021-07-21","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-07-26","etapeTypeId":"wse","etapeStatutId":"fai"},{"date":"2021-09-26","etapeTypeId":"wae","etapeStatutId":"fav"},{"date":"2021-12-05","etapeTypeId":"epu","etapeStatutId":"fai"},{"date":"2022-01-03","etapeTypeId":"epc","etapeStatutId":"ter"},{"date":"2022-04-11","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-05-02","etapeTypeId":"wtp","etapeStatutId":"fai"},{"date":"2022-05-13","etapeTypeId":"wau","etapeStatutId":"fav"},{"date":"2022-05-23","etapeTypeId":"dex","etapeStatutId":"acc","paysId":"FR"}]},{"id":2,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-06-23","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR"},{"date":"2019-06-23","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2019-09-12","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2020-02-24","etapeTypeId":"rca","etapeStatutId":"fai","paysId":"FR"},{"date":"2020-04-03","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-04-03","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-04-11","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2020-05-12","etapeTypeId":"wse","etapeStatutId":"fai"},{"date":"2020-07-12","etapeTypeId":"wae","etapeStatutId":"fav"},{"date":"2022-05-09","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-06-05","etapeTypeId":"wtp","etapeStatutId":"fai"},{"date":"2022-06-05","etapeTypeId":"wau","etapeStatutId":"fav"},{"date":"2022-07-25","etapeTypeId":"dex","etapeStatutId":"acc","paysId":"FR"}]},{"id":3,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2020-11-17","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR"},{"date":"2020-11-17","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2021-04-11","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2021-06-13","etapeTypeId":"rca","etapeStatutId":"fai","paysId":"FR"},{"date":"2021-06-28","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2021-06-28","etapeTypeId":"wse","etapeStatutId":"fai"},{"date":"2021-06-29","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2021-08-29","etapeTypeId":"wae","etapeStatutId":"fav"},{"date":"2021-08-30","etapeTypeId":"ama","etapeStatutId":"fav"},{"date":"2021-09-13","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2022-01-26","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2022-02-01","etapeTypeId":"wtp","etapeStatutId":"fai"},{"date":"2022-02-12","etapeTypeId":"wau","etapeStatutId":"fav"},{"date":"2022-02-21","etapeTypeId":"dex","etapeStatutId":"acc","paysId":"FR"}]},{"id":4,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2019-12-19","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":0.03},{"date":"2019-12-19","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2020-04-06","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2020-05-28","etapeTypeId":"rca","etapeStatutId":"fai","paysId":"FR","surface":0.03},{"date":"2020-07-08","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2020-07-08","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2020-07-08","etapeTypeId":"wse","etapeStatutId":"fai"},{"date":"2020-07-08","etapeTypeId":"wae","etapeStatutId":"fav"},{"date":"2020-07-08","etapeTypeId":"epu","etapeStatutId":"fai"},{"date":"2020-07-08","etapeTypeId":"epc","etapeStatutId":"ter"},{"date":"2020-07-08","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2020-08-05","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2020-08-05","etapeTypeId":"wtp","etapeStatutId":"fai"},{"date":"2020-08-05","etapeTypeId":"wau","etapeStatutId":"fav"},{"date":"2020-09-30","etapeTypeId":"dex","etapeStatutId":"acc","paysId":"FR","surface":0.03}]},{"id":5,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2017-10-31","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR"},{"date":"2017-10-31","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2018-01-10","etapeTypeId":"mca","etapeStatutId":"fai"},{"date":"2018-12-15","etapeTypeId":"rca","etapeStatutId":"fai","paysId":"FR"},{"date":"2019-01-17","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2019-01-17","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2019-01-17","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2019-01-18","etapeTypeId":"wse","etapeStatutId":"fai"},{"date":"2019-03-18","etapeTypeId":"wae","etapeStatutId":"fav"},{"date":"2019-08-23","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2019-09-13","etapeTypeId":"wtp","etapeStatutId":"fai"},{"date":"2019-09-13","etapeTypeId":"wau","etapeStatutId":"fav"},{"date":"2019-10-10","etapeTypeId":"dex","etapeStatutId":"acc","paysId":"FR"}]},{"id":6,"demarcheStatutId":"acc","demarchePublique":true,"etapes":[{"date":"2022-06-27","etapeTypeId":"mfr","etapeStatutId":"fai","paysId":"FR","surface":0.19},{"date":"2022-06-27","etapeTypeId":"mdp","etapeStatutId":"fai"},{"date":"2022-07-02","etapeTypeId":"mcr","etapeStatutId":"fav"},{"date":"2022-09-04","etapeTypeId":"wse","etapeStatutId":"fai"},{"date":"2022-11-04","etapeTypeId":"wae","etapeStatutId":"fav"},{"date":"2022-12-15","etapeTypeId":"epu","etapeStatutId":"fai"},{"date":"2023-01-16","etapeTypeId":"asc","etapeStatutId":"fai"},{"date":"2023-01-16","etapeTypeId":"scl","etapeStatutId":"fai"},{"date":"2023-01-16","etapeTypeId":"epc","etapeStatutId":"ter"},{"date":"2023-04-21","etapeTypeId":"apd","etapeStatutId":"fav"},{"date":"2023-06-03","etapeTypeId":"wtp","etapeStatutId":"fai"},{"date":"2023-06-17","etapeTypeId":"wau","etapeStatutId":"fav"},{"date":"2023-06-23","etapeTypeId":"dex","etapeStatutId":"acc","paysId":"FR","surface":0.19}]},{"id":7,"demarcheStatutId":"eco","demarchePublique":false,"etapes":[]}]
diff --git a/packages/api/src/business/rules-demarches/pxg/oct.machine.test.ts b/packages/api/src/business/rules-demarches/pxg/oct.machine.test.ts
index 0c95b4427..27deba799 100644
--- a/packages/api/src/business/rules-demarches/pxg/oct.machine.test.ts
+++ b/packages/api/src/business/rules-demarches/pxg/oct.machine.test.ts
@@ -31,11 +31,7 @@ describe('vérifie l’arbre d’octroi des PXG', () => {
         ...ETES.recevabiliteDeLaDemande.FAVORABLE,
         date: toCaminoDate('2022-04-17'),
       },
-      { ...ETES.saisineDesServices.FAIT, date: toCaminoDate('2022-04-18') },
-      {
-        ...ETES.avisDeLaDirectionDesEntreprisesDeLaConcurrenceDeLaConsommationDuTravailEtDeLemploi.FAVORABLE,
-        date: toCaminoDate('2022-04-18'),
-      },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2022-04-18') },
       {
         ...ETES.saisineDesCollectivitesLocales.FAIT,
         date: toCaminoDate('2022-04-19'),
@@ -94,11 +90,7 @@ describe('vérifie l’arbre d’octroi des PXG', () => {
         ...ETES.recevabiliteDeLaDemande.FAVORABLE,
         date: toCaminoDate('2022-04-17'),
       },
-      { ...ETES.saisineDesServices.FAIT, date: toCaminoDate('2022-04-18') },
-      {
-        ...ETES.avisDeLaDirectionDesEntreprisesDeLaConcurrenceDeLaConsommationDuTravailEtDeLemploi.FAVORABLE,
-        date: toCaminoDate('2022-04-18'),
-      },
+      { ...ETES.avisDesServicesEtCommissionsConsultatives.FAIT, date: toCaminoDate('2022-04-18') },
       {
         ...ETES.saisineDesCollectivitesLocales.FAIT,
         date: toCaminoDate('2022-04-19'),
diff --git a/packages/api/src/business/rules-demarches/pxg/oct.machine.ts b/packages/api/src/business/rules-demarches/pxg/oct.machine.ts
index 328f7b3b6..882b8411e 100644
--- a/packages/api/src/business/rules-demarches/pxg/oct.machine.ts
+++ b/packages/api/src/business/rules-demarches/pxg/oct.machine.ts
@@ -12,17 +12,7 @@ type PXGOctXStateEvent =
   | { type: 'FAIRE_RECEVABILITE_DEMANDE_DEFAVORABLE' }
   | { type: 'RECEVOIR_MODIFICATION_DE_LA_DEMANDE' }
   | { type: 'RECEVOIR_COMPLEMENTS_POUR_RECEVABILITE' }
-  | { type: 'FAIRE_SAISINES_DES_SERVICES' }
-  | { type: 'RENDRE_AVIS_DGTM_MNBST' }
-  | { type: 'RENDRE_AVIS_DGTMAUCL' }
-  | {
-      type: 'RENDRE_AVIS_DIRECTION_ENTREPRISE_CONCURRENCE_CONSOMMATION_TRAVAIL_EMPLOI'
-    }
-  | { type: 'RENDRE_AVIS_DIRECTION_ALIMENTATION_AGRICULTURE_FORET' }
-  | { type: 'RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES' }
-  | { type: 'RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES' }
-  | { type: 'RENDRE_AVIS_CAISSE_GENERALE_DE_SECURITE_SOCIALE' }
-  | { type: 'RENDRE_AVIS_AGENCE_REGIONALE_SANTE' }
+  | { type: 'RENDRE_AVIS_SERVICES_ET_COMMISSIONS_CONSULTATIVES' }
   | { type: 'RENDRE_AVIS_DREAL' }
   | { type: 'FAIRE_SAISINE_DES_COLLECTIVITES_LOCALES' }
   | { type: 'RENDRE_CONSULTATION_DES_CONSEILS_MUNICIPAUX' }
@@ -33,7 +23,6 @@ type PXGOctXStateEvent =
   | { type: 'CLOTURER_ENQUETE_PUBLIQUE' }
   | { type: 'TRANSMETTRE_PROJET_DE_PRESCRIPTIONS_AU_DEMANDEUR' }
   | { type: 'RENDRE_AVIS_DU_DEMANDEUR_SUR_LES_PRESCRIPTIONS_PROPOSEES' }
-  | { type: 'RENDRE_PASSAGE_CODERST' }
   | { type: 'RENDRE_DECISION_ADMINISTRATION_FAVORABLE' }
   | { type: 'RENDRE_DECISION_ADMINISTRATION_DEFAVORABLE' }
   | { type: 'NOTIFICATION_DU_DEMANDEUR' }
@@ -73,15 +62,7 @@ const trad: { [key in Event]: { db: DBEtat; mainStep: boolean } } = {
   DEMANDER_COMPLEMENTS_POUR_RECEVABILITE: { db: ETES.demandeDeComplements_RecevabiliteDeLaDemande_, mainStep: false },
   RECEVOIR_MODIFICATION_DE_LA_DEMANDE: { db: ETES.modificationDeLaDemande, mainStep: true },
   RECEVOIR_COMPLEMENTS_POUR_RECEVABILITE: { db: ETES.receptionDeComplements_RecevabiliteDeLaDemande_, mainStep: false },
-  FAIRE_SAISINES_DES_SERVICES: { db: ETES.saisineDesServices, mainStep: true },
-  RENDRE_AVIS_DGTM_MNBST: { db: ETES.avisDGTMServiceMilieuxNaturelsBiodiversiteSitesEtPaysages_MNBST_, mainStep: false },
-  RENDRE_AVIS_DGTMAUCL: { db: ETES.avisDGTMServiceAmenagementUrbanismeConstructionLogement_AUCL_, mainStep: false },
-  RENDRE_AVIS_DIRECTION_ENTREPRISE_CONCURRENCE_CONSOMMATION_TRAVAIL_EMPLOI: { db: ETES.avisDeLaDirectionDesEntreprisesDeLaConcurrenceDeLaConsommationDuTravailEtDeLemploi, mainStep: false },
-  RENDRE_AVIS_DIRECTION_ALIMENTATION_AGRICULTURE_FORET: { db: ETES.avisDeLaDirectionDalimentationDeLagricultureEtDeLaForet, mainStep: false },
-  RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES: { db: ETES.avisDeDirectionRegionaleDesAffairesCulturelles, mainStep: false },
-  RENDRE_AVIS_AGENCE_REGIONALE_SANTE: { db: ETES.avisDeLagenceRegionaleDeSante, mainStep: false },
-  RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES: { db: ETES.avisDeLaDirectionRegionaleDesFinancesPubliques, mainStep: false },
-  RENDRE_AVIS_CAISSE_GENERALE_DE_SECURITE_SOCIALE: { db: ETES.avisDeLaCaisseGeneraleDeSecuriteSociale, mainStep: false },
+  RENDRE_AVIS_SERVICES_ET_COMMISSIONS_CONSULTATIVES: { db: ETES.avisDesServicesEtCommissionsConsultatives, mainStep: true },
   RENDRE_AVIS_DREAL: { db: ETES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement, mainStep: true },
   FAIRE_SAISINE_DES_COLLECTIVITES_LOCALES: { db: ETES.saisineDesCollectivitesLocales, mainStep: true },
   RENDRE_CONSULTATION_DES_CONSEILS_MUNICIPAUX: { db: ETES.avisDunMaire, mainStep: false },
@@ -92,7 +73,6 @@ const trad: { [key in Event]: { db: DBEtat; mainStep: boolean } } = {
   CLOTURER_ENQUETE_PUBLIQUE: { db: ETES.clotureDeLenquetePublique, mainStep: false },
   TRANSMETTRE_PROJET_DE_PRESCRIPTIONS_AU_DEMANDEUR: { db: ETES.transmissionDuProjetDePrescriptionsAuDemandeur, mainStep: true },
   RENDRE_AVIS_DU_DEMANDEUR_SUR_LES_PRESCRIPTIONS_PROPOSEES: { db: ETES.avisDuDemandeurSurLesPrescriptionsProposees, mainStep: true },
-  RENDRE_PASSAGE_CODERST: { db: ETES.avisDuConseilDepartementalDeLenvironnementEtDesRisquesSanitairesEtTechnologiques_Coderst_, mainStep: false },
   NOTIFICATION_DU_DEMANDEUR: { db: ETES.notificationAuDemandeur, mainStep: true },
   PUBLIER_DECISION_RECUEIL_DES_ACTES_ADMINISTRATIFS: { db: ETES.publicationDeDecisionAuRecueilDesActesAdministratifs, mainStep: true },
   FAIRE_DESISTEMENT_DEMANDEUR: { db: ETES.desistementDuDemandeur, mainStep: false },
@@ -130,7 +110,7 @@ export class PxgOctMachine extends CaminoMachine<PxgContext, PXGOctXStateEvent>
 }
 
 interface PxgContext extends CaminoCommonContext {
-  saisineDesServicesFaite: boolean
+  avisDesServicesEtCommissionsConsultativesFaite: boolean
   saisineDesCollectivitesLocalesFaites: boolean
   saisineAutoriteEnvironnementaleFaite: boolean
   avisAutoriteEnvironnementaleFaite: boolean
@@ -139,7 +119,7 @@ interface PxgContext extends CaminoCommonContext {
 }
 
 const peutRendreAvisDREAL = ({ context }: { context: PxgContext }): boolean => {
-  return context.saisineDesServicesFaite && context.saisineDesCollectivitesLocalesFaites && context.avisAutoriteEnvironnementaleFaite
+  return context.avisDesServicesEtCommissionsConsultativesFaite && context.saisineDesCollectivitesLocalesFaites && context.avisAutoriteEnvironnementaleFaite
 }
 
 const pxgOctMachine = createMachine({
@@ -149,7 +129,7 @@ const pxgOctMachine = createMachine({
   context: {
     demarcheStatut: DemarchesStatutsIds.EnConstruction,
     visibilite: 'confidentielle',
-    saisineDesServicesFaite: false,
+    avisDesServicesEtCommissionsConsultativesFaite: false,
     saisineDesCollectivitesLocalesFaites: false,
     saisineAutoriteEnvironnementaleFaite: false,
     avisAutoriteEnvironnementaleFaite: false,
@@ -262,15 +242,15 @@ const pxgOctMachine = createMachine({
             },
           },
         },
-        saisineDesServicesMachine: {
-          initial: 'saisineDesServicesAFaire',
+        avisDesServicesEtCommissionsConsultativesMachine: {
+          initial: 'avisDesServicesEtCommissionsConsultativesAFaire',
           states: {
-            saisineDesServicesAFaire: {
+            avisDesServicesEtCommissionsConsultativesAFaire: {
               on: {
-                FAIRE_SAISINES_DES_SERVICES: {
-                  target: 'avisDesServicesARendre',
+                RENDRE_AVIS_SERVICES_ET_COMMISSIONS_CONSULTATIVES: {
+                  target: 'avisDesServicesEtCommissionsConsultativesRendu',
                   actions: assign({
-                    saisineDesServicesFaite: true,
+                    avisDesServicesEtCommissionsConsultativesFaite: true,
                     demarcheStatut: ({ context }) => {
                       return context.saisineDesCollectivitesLocalesFaites && context.saisineAutoriteEnvironnementaleFaite ? DemarchesStatutsIds.EnInstruction : context.demarcheStatut
                     },
@@ -278,100 +258,8 @@ const pxgOctMachine = createMachine({
                 },
               },
             },
-            avisDesServicesARendre: {
-              type: 'parallel',
-              states: {
-                avisDgtmMNBSTMachine: {
-                  initial: 'avisDgtmMNBSTARendre',
-                  states: {
-                    avisDgtmMNBSTARendre: {
-                      on: { RENDRE_AVIS_DGTM_MNBST: 'avisDgtmMNBSTRendu' },
-                    },
-                    avisDgtmMNBSTRendu: { type: 'final' },
-                  },
-                },
-                avisDGTMAUCLMachine: {
-                  initial: 'avisDGTMAUCLARendre',
-                  states: {
-                    avisDGTMAUCLARendre: {
-                      on: { RENDRE_AVIS_DGTMAUCL: 'avisDGTMAUCLRendu' },
-                    },
-                    avisDGTMAUCLRendu: { type: 'final' },
-                  },
-                },
-                avisDirectionEntrepriseConcurrenceConsommationTravailEmploiMachine: {
-                  initial: 'avisDirectionEntrepriseConcurrenceConsommationTravailEmploiARendre',
-                  states: {
-                    avisDirectionEntrepriseConcurrenceConsommationTravailEmploiARendre: {
-                      on: {
-                        RENDRE_AVIS_DIRECTION_ENTREPRISE_CONCURRENCE_CONSOMMATION_TRAVAIL_EMPLOI: 'avisDirectionEntrepriseConcurrenceConsommationTravailEmploiRendu',
-                      },
-                    },
-                    avisDirectionEntrepriseConcurrenceConsommationTravailEmploiRendu: { type: 'final' },
-                  },
-                },
-                avisDirectionAlimentationAgricultureForetMachine: {
-                  initial: 'avisDirectionAlimentationAgricultureForetARendre',
-                  states: {
-                    avisDirectionAlimentationAgricultureForetARendre: {
-                      on: {
-                        RENDRE_AVIS_DIRECTION_ALIMENTATION_AGRICULTURE_FORET: 'avisDirectionAlimentationAgricultureForetRendu',
-                      },
-                    },
-                    avisDirectionAlimentationAgricultureForetRendu: {
-                      type: 'final',
-                    },
-                  },
-                },
-                avisDirectionRegionaleAffairesCulturellesMachine: {
-                  initial: 'avisDirectionRegionaleAffairesCulturellesARendre',
-                  states: {
-                    avisDirectionRegionaleAffairesCulturellesARendre: {
-                      on: {
-                        RENDRE_AVIS_DIRECTION_REGIONALE_AFFAIRES_CULTURELLES: 'avisDirectionRegionaleAffairesCulturellesRendu',
-                      },
-                    },
-                    avisDirectionRegionaleAffairesCulturellesRendu: {
-                      type: 'final',
-                    },
-                  },
-                },
-                avisAgenceRegionaleSanteMachine: {
-                  initial: 'avisAgenceRegionaleSanteARendre',
-                  states: {
-                    avisAgenceRegionaleSanteARendre: {
-                      on: {
-                        RENDRE_AVIS_AGENCE_REGIONALE_SANTE: 'avisAgenceRegionaleSanteRendu',
-                      },
-                    },
-                    avisAgenceRegionaleSanteRendu: { type: 'final' },
-                  },
-                },
-                avisDirectionRegionaleFinancesPubliquesMachine: {
-                  initial: 'avisDirectionRegionaleFinancesPubliquesARendre',
-                  states: {
-                    avisDirectionRegionaleFinancesPubliquesARendre: {
-                      on: {
-                        RENDRE_AVIS_DIRECTION_REGIONALE_FINANCES_PUBLIQUES: 'avisDirectionRegionaleFinancesPubliquesRendu',
-                      },
-                    },
-                    avisDirectionRegionaleFinancesPubliquesRendu: {
-                      type: 'final',
-                    },
-                  },
-                },
-                avisCaisseGeneraleDeSecuriteSocialeMachine: {
-                  initial: 'avisCaisseGeneraleDeSecuriteSocialeARendre',
-                  states: {
-                    avisCaisseGeneraleDeSecuriteSocialeARendre: {
-                      on: {
-                        RENDRE_AVIS_CAISSE_GENERALE_DE_SECURITE_SOCIALE: 'avisCaisseGeneraleDeSecuriteSocialeRendu',
-                      },
-                    },
-                    avisCaisseGeneraleDeSecuriteSocialeRendu: { type: 'final' },
-                  },
-                },
-              },
+            avisDesServicesEtCommissionsConsultativesRendu: {
+              type: 'final',
             },
           },
         },
@@ -385,7 +273,7 @@ const pxgOctMachine = createMachine({
                   actions: assign({
                     saisineDesCollectivitesLocalesFaites: true,
                     demarcheStatut: ({ context }) => {
-                      return context.saisineAutoriteEnvironnementaleFaite && context.saisineDesServicesFaite ? DemarchesStatutsIds.EnInstruction : context.demarcheStatut
+                      return context.saisineAutoriteEnvironnementaleFaite && context.avisDesServicesEtCommissionsConsultativesFaite ? DemarchesStatutsIds.EnInstruction : context.demarcheStatut
                     },
                   }),
                 },
@@ -433,7 +321,7 @@ const pxgOctMachine = createMachine({
                   actions: assign({
                     saisineAutoriteEnvironnementaleFaite: true,
                     demarcheStatut: ({ context, event: _event }) => {
-                      return context.saisineDesCollectivitesLocalesFaites && context.saisineDesServicesFaite ? DemarchesStatutsIds.EnInstruction : context.demarcheStatut
+                      return context.saisineDesCollectivitesLocalesFaites && context.avisDesServicesEtCommissionsConsultativesFaite ? DemarchesStatutsIds.EnInstruction : context.demarcheStatut
                     },
                   }),
                 },
@@ -483,7 +371,6 @@ const pxgOctMachine = createMachine({
     },
     passageCoderstOuDecisionDeLAdministrationARendre: {
       on: {
-        RENDRE_PASSAGE_CODERST: 'decisionDeLAdministrationARendre',
         RENDRE_DECISION_ADMINISTRATION_FAVORABLE: {
           target: 'notificationDuDemandeurEtPublicationDeDecisionAuRecueilDesActesAdministratifsAFaire',
           actions: assign({
diff --git a/packages/api/src/business/rules/__snapshots__/titre-activites-build.test.ts.snap b/packages/api/src/business/rules/__snapshots__/titre-activites-build.test.ts.snap
index e418227e4..967048bcb 100644
--- a/packages/api/src/business/rules/__snapshots__/titre-activites-build.test.ts.snap
+++ b/packages/api/src/business/rules/__snapshots__/titre-activites-build.test.ts.snap
@@ -14,6 +14,7 @@ exports[`construction des activités d'un titre > crée des activités 1`] = `
             "description": "<b>g (gramme)</b> contenu dans les minerais",
             "id": "auru",
             "nom": "or",
+            "optionnel": false,
             "type": "number",
             "uniteId": "mgr",
           },
@@ -21,6 +22,7 @@ exports[`construction des activités d'un titre > crée des activités 1`] = `
             "description": "<b>x 1000 t (millier de tonnes)</b> extrait par abattage net livré",
             "id": "naca",
             "nom": "sel (chlorure de sodium)",
+            "optionnel": false,
             "type": "number",
             "uniteId": "mtk",
           },
@@ -28,6 +30,7 @@ exports[`construction des activités d'un titre > crée des activités 1`] = `
             "description": "<b>x 1000 t (millier de tonnes)</b> extrait en dissolution par sondage et livré raffiné",
             "id": "nacb",
             "nom": "sel (chlorure de sodium)",
+            "optionnel": false,
             "type": "number",
             "uniteId": "mtk",
           },
@@ -35,6 +38,7 @@ exports[`construction des activités d'un titre > crée des activités 1`] = `
             "description": "<b>x 1000 t (millier de tonnes)</b> extrait en dissolution par sondage et livré en dissolution",
             "id": "nacc",
             "nom": "sel (chlorure de sodium contenu)",
+            "optionnel": false,
             "type": "number",
             "uniteId": "mtk",
           },
@@ -77,12 +81,14 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Masse d’or brut en sortie de mine extrait au cours du trimestre (exemple : masse sous la forme de concentré gravimétrique).",
             "id": "orBrut",
             "nom": "Or brut extrait (g)",
+            "optionnel": false,
             "type": "number",
           },
           {
             "description": "Masse en gramme de l’ensemble des produits contaminés envoyés en traitement au cours du trimestre.",
             "id": "mercure",
             "nom": "Mercure récupéré (g)",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -90,12 +96,14 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Volume total en litre de carburant détaxé consommé au cours du trimestre par les travaux réalisés sur le chantier.",
             "id": "carburantDetaxe",
             "nom": "Carburant détaxé (l)",
+            "optionnel": false,
             "type": "number",
           },
           {
             "description": "Volume total en litre de carburant conventionnel consommé au cours du trimestre par les travaux réalisés sur le chantier.",
             "id": "carburantConventionnel",
             "nom": "Carburant conventionnel (l)",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -103,6 +111,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Nombre moyen de pompes actives au cours du trimestre utilisées sur le chantier (pompe à gravier, pompe de relevage…).",
             "id": "pompes",
             "nom": "Pompes actives",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -110,12 +119,14 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Nombre moyen de pelles actives au cours du trimestre utilisées sur le chantier (aménagement, exploitation, réhabilitation).",
             "id": "pelles",
             "nom": "Pelles actives",
+            "optionnel": false,
             "type": "number",
           },
           {
             "description": "Nombre moyen de salariés sur le chantier au cours du trimestre.",
             "id": "effectifs",
             "nom": "Effectifs",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -123,6 +134,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Montant en euros des investissements consentis au cours du trimestre listés à l’<a href="https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000021850940&cidTexte=LEGITEXT000006069569" target="_blank" title="Page de l’article - site externe" rel="noopener noreferrer">article 318 C de l’annexe II du code général des impôts</a>. Afin de bénéficier des déductions fiscales afférentes, les justificatifs attestant de la réalisation effective des investissements sont susceptibles de vous êtres demandés par l’administration.",
             "id": "environnement",
             "nom": "Dépenses relatives à la protection de l’environnement (euros)",
+            "optionnel": false,
             "type": "number",
           },
         ],
@@ -135,6 +147,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "dateDebut": "2018-01-01",
             "id": "1",
             "nom": "Janvier",
+            "optionnel": false,
             "options": [
               {
                 "id": "nonDebutes",
@@ -164,6 +177,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "dateDebut": "2018-01-01",
             "id": "2",
             "nom": "Février",
+            "optionnel": false,
             "options": [
               {
                 "id": "nonDebutes",
@@ -193,6 +207,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "dateDebut": "2018-01-01",
             "id": "3",
             "nom": "Mars",
+            "optionnel": false,
             "options": [
               {
                 "id": "nonDebutes",
@@ -252,12 +267,14 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Masse d’or brut en sortie de mine extrait au cours du trimestre (exemple : masse sous la forme de concentré gravimétrique).",
             "id": "orBrut",
             "nom": "Or brut extrait (g)",
+            "optionnel": false,
             "type": "number",
           },
           {
             "description": "Masse en gramme de l’ensemble des produits contaminés envoyés en traitement au cours du trimestre.",
             "id": "mercure",
             "nom": "Mercure récupéré (g)",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -265,12 +282,14 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Volume total en litre de carburant détaxé consommé au cours du trimestre par les travaux réalisés sur le chantier.",
             "id": "carburantDetaxe",
             "nom": "Carburant détaxé (l)",
+            "optionnel": false,
             "type": "number",
           },
           {
             "description": "Volume total en litre de carburant conventionnel consommé au cours du trimestre par les travaux réalisés sur le chantier.",
             "id": "carburantConventionnel",
             "nom": "Carburant conventionnel (l)",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -278,6 +297,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Nombre moyen de pompes actives au cours du trimestre utilisées sur le chantier (pompe à gravier, pompe de relevage…).",
             "id": "pompes",
             "nom": "Pompes actives",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -285,12 +305,14 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Nombre moyen de pelles actives au cours du trimestre utilisées sur le chantier (aménagement, exploitation, réhabilitation).",
             "id": "pelles",
             "nom": "Pelles actives",
+            "optionnel": false,
             "type": "number",
           },
           {
             "description": "Nombre moyen de salariés sur le chantier au cours du trimestre.",
             "id": "effectifs",
             "nom": "Effectifs",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -298,6 +320,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Montant en euros des investissements consentis au cours du trimestre listés à l’<a href="https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000021850940&cidTexte=LEGITEXT000006069569" target="_blank" title="Page de l’article - site externe" rel="noopener noreferrer">article 318 C de l’annexe II du code général des impôts</a>. Afin de bénéficier des déductions fiscales afférentes, les justificatifs attestant de la réalisation effective des investissements sont susceptibles de vous êtres demandés par l’administration.",
             "id": "environnement",
             "nom": "Dépenses relatives à la protection de l’environnement (euros)",
+            "optionnel": false,
             "type": "number",
           },
         ],
@@ -310,6 +333,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "dateDebut": "2018-01-01",
             "id": "4",
             "nom": "Avril",
+            "optionnel": false,
             "options": [
               {
                 "id": "nonDebutes",
@@ -339,6 +363,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "dateDebut": "2018-01-01",
             "id": "5",
             "nom": "Mai",
+            "optionnel": false,
             "options": [
               {
                 "id": "nonDebutes",
@@ -368,6 +393,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "dateDebut": "2018-01-01",
             "id": "6",
             "nom": "Juin",
+            "optionnel": false,
             "options": [
               {
                 "id": "nonDebutes",
@@ -427,12 +453,14 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Masse d’or brut en sortie de mine extrait au cours du trimestre (exemple : masse sous la forme de concentré gravimétrique).",
             "id": "orBrut",
             "nom": "Or brut extrait (g)",
+            "optionnel": false,
             "type": "number",
           },
           {
             "description": "Masse en gramme de l’ensemble des produits contaminés envoyés en traitement au cours du trimestre.",
             "id": "mercure",
             "nom": "Mercure récupéré (g)",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -440,12 +468,14 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Volume total en litre de carburant détaxé consommé au cours du trimestre par les travaux réalisés sur le chantier.",
             "id": "carburantDetaxe",
             "nom": "Carburant détaxé (l)",
+            "optionnel": false,
             "type": "number",
           },
           {
             "description": "Volume total en litre de carburant conventionnel consommé au cours du trimestre par les travaux réalisés sur le chantier.",
             "id": "carburantConventionnel",
             "nom": "Carburant conventionnel (l)",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -453,6 +483,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Nombre moyen de pompes actives au cours du trimestre utilisées sur le chantier (pompe à gravier, pompe de relevage…).",
             "id": "pompes",
             "nom": "Pompes actives",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -460,12 +491,14 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Nombre moyen de pelles actives au cours du trimestre utilisées sur le chantier (aménagement, exploitation, réhabilitation).",
             "id": "pelles",
             "nom": "Pelles actives",
+            "optionnel": false,
             "type": "number",
           },
           {
             "description": "Nombre moyen de salariés sur le chantier au cours du trimestre.",
             "id": "effectifs",
             "nom": "Effectifs",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -473,6 +506,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Montant en euros des investissements consentis au cours du trimestre listés à l’<a href="https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000021850940&cidTexte=LEGITEXT000006069569" target="_blank" title="Page de l’article - site externe" rel="noopener noreferrer">article 318 C de l’annexe II du code général des impôts</a>. Afin de bénéficier des déductions fiscales afférentes, les justificatifs attestant de la réalisation effective des investissements sont susceptibles de vous êtres demandés par l’administration.",
             "id": "environnement",
             "nom": "Dépenses relatives à la protection de l’environnement (euros)",
+            "optionnel": false,
             "type": "number",
           },
         ],
@@ -485,6 +519,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "dateDebut": "2018-01-01",
             "id": "7",
             "nom": "Juillet",
+            "optionnel": false,
             "options": [
               {
                 "id": "nonDebutes",
@@ -514,6 +549,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "dateDebut": "2018-01-01",
             "id": "8",
             "nom": "Août",
+            "optionnel": false,
             "options": [
               {
                 "id": "nonDebutes",
@@ -543,6 +579,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "dateDebut": "2018-01-01",
             "id": "9",
             "nom": "Septembre",
+            "optionnel": false,
             "options": [
               {
                 "id": "nonDebutes",
@@ -602,12 +639,14 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Masse d’or brut en sortie de mine extrait au cours du trimestre (exemple : masse sous la forme de concentré gravimétrique).",
             "id": "orBrut",
             "nom": "Or brut extrait (g)",
+            "optionnel": false,
             "type": "number",
           },
           {
             "description": "Masse en gramme de l’ensemble des produits contaminés envoyés en traitement au cours du trimestre.",
             "id": "mercure",
             "nom": "Mercure récupéré (g)",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -615,12 +654,14 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Volume total en litre de carburant détaxé consommé au cours du trimestre par les travaux réalisés sur le chantier.",
             "id": "carburantDetaxe",
             "nom": "Carburant détaxé (l)",
+            "optionnel": false,
             "type": "number",
           },
           {
             "description": "Volume total en litre de carburant conventionnel consommé au cours du trimestre par les travaux réalisés sur le chantier.",
             "id": "carburantConventionnel",
             "nom": "Carburant conventionnel (l)",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -628,6 +669,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Nombre moyen de pompes actives au cours du trimestre utilisées sur le chantier (pompe à gravier, pompe de relevage…).",
             "id": "pompes",
             "nom": "Pompes actives",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -635,12 +677,14 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Nombre moyen de pelles actives au cours du trimestre utilisées sur le chantier (aménagement, exploitation, réhabilitation).",
             "id": "pelles",
             "nom": "Pelles actives",
+            "optionnel": false,
             "type": "number",
           },
           {
             "description": "Nombre moyen de salariés sur le chantier au cours du trimestre.",
             "id": "effectifs",
             "nom": "Effectifs",
+            "optionnel": false,
             "type": "number",
           },
           {
@@ -648,6 +692,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "description": "Montant en euros des investissements consentis au cours du trimestre listés à l’<a href="https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000021850940&cidTexte=LEGITEXT000006069569" target="_blank" title="Page de l’article - site externe" rel="noopener noreferrer">article 318 C de l’annexe II du code général des impôts</a>. Afin de bénéficier des déductions fiscales afférentes, les justificatifs attestant de la réalisation effective des investissements sont susceptibles de vous êtres demandés par l’administration.",
             "id": "environnement",
             "nom": "Dépenses relatives à la protection de l’environnement (euros)",
+            "optionnel": false,
             "type": "number",
           },
         ],
@@ -660,6 +705,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "dateDebut": "2018-01-01",
             "id": "10",
             "nom": "Octobre",
+            "optionnel": false,
             "options": [
               {
                 "id": "nonDebutes",
@@ -689,6 +735,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "dateDebut": "2018-01-01",
             "id": "11",
             "nom": "Novembre",
+            "optionnel": false,
             "options": [
               {
                 "id": "nonDebutes",
@@ -718,6 +765,7 @@ exports[`construction des activités d'un titre > crée des activités 2`] = `
             "dateDebut": "2018-01-01",
             "id": "12",
             "nom": "Décembre",
+            "optionnel": false,
             "options": [
               {
                 "id": "nonDebutes",
diff --git a/packages/api/src/business/rules/titre-activites-build.test.ts b/packages/api/src/business/rules/titre-activites-build.test.ts
index c4b0d4530..817b26187 100644
--- a/packages/api/src/business/rules/titre-activites-build.test.ts
+++ b/packages/api/src/business/rules/titre-activites-build.test.ts
@@ -7,6 +7,7 @@ import { toCaminoDate } from 'camino-common/src/date.js'
 import { newDemarcheId, newEtapeId, newTitreId } from '../../database/models/_format/id-create.js'
 import { ACTIVITES_TYPES_IDS } from 'camino-common/src/static/activitesTypes.js'
 import { titreIdValidator } from 'camino-common/src/validators/titres.js'
+import { ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
 
 const titreId = titreIdValidator.parse('titre-id')
 
@@ -67,7 +68,7 @@ describe("construction des activités d'un titre", () => {
             date: toCaminoDate('2018-01-01'),
             typeId: 'dpu',
             statutId: 'fai',
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             substances: ['auru', 'nacl'],
             surface: null,
             ordre: 1,
diff --git a/packages/api/src/business/rules/titre-activites-build.ts b/packages/api/src/business/rules/titre-activites-build.ts
index 26bd5dbc1..e80b70cd3 100644
--- a/packages/api/src/business/rules/titre-activites-build.ts
+++ b/packages/api/src/business/rules/titre-activites-build.ts
@@ -9,7 +9,7 @@ import { FrequenceId, Frequences, getNumberOfMonths } from 'camino-common/src/st
 import { SubstanceLegaleId } from 'camino-common/src/static/substancesLegales.js'
 import { CaminoDate, toCaminoDate } from 'camino-common/src/date.js'
 import { TitreTypeId } from 'camino-common/src/static/titresTypes.js'
-import { DeepReadonly } from 'camino-common/src/typescript-tools.js'
+import { DeepReadonly, isNotNullNorUndefinedNorEmpty, isNullOrUndefined } from 'camino-common/src/typescript-tools.js'
 import { ActiviteSection, ActiviteSectionElement, ActivitesTypes, ActivitesTypesId, isSubstancesFiscales } from 'camino-common/src/static/activitesTypes.js'
 import { TitreId } from 'camino-common/src/validators/titres.js'
 
@@ -45,12 +45,12 @@ const titreActiviteSectionsBuild = (
   return sections.reduce<DeepReadonly<ActiviteSection[]>>((newSections: DeepReadonly<ActiviteSection[]>, s) => {
     let elements: DeepReadonly<ActiviteSectionElement[]> = []
 
-    if (!isSubstancesFiscales(s) && s.elements) {
+    if (!isSubstancesFiscales(s) && isNotNullNorUndefinedNorEmpty(s.elements)) {
       elements = titreActiviteSectionElementsFormat(s.elements, periodeId, date)
     } else if (['gra', 'grx'].includes(activiteTypeId) && isSubstancesFiscales(s)) {
       const substances = titreEtapePropFind('substances', toCaminoDate(date), titreDemarches, titreTypeId) as SubstanceLegaleId[] | null
 
-      if (substances?.length) {
+      if (isNotNullNorUndefinedNorEmpty(substances)) {
         const substancesFiscales = substancesFiscalesFind(substances)
 
         elements = substancesFiscales.map(sf => {
@@ -61,6 +61,7 @@ const titreActiviteSectionsBuild = (
             type: 'number',
             description: `<b>${unite.symbole} (${unite.nom})</b> ${sf.description}`,
             uniteId: sf.uniteId,
+            optionnel: false,
           }
 
           return element
@@ -82,8 +83,8 @@ const titreActiviteSectionsBuild = (
   }, [])
 }
 
-const titreActiviteFind = (activiteTypeId: ActivitesTypesId, annee: number, periodeId: number, titreActivites?: ITitreActivite[] | null) =>
-  !!titreActivites?.length && titreActivites.find(a => a.typeId === activiteTypeId && a.annee === annee && a.periodeId === periodeId)
+const titreActiviteFind = (activiteTypeId: ActivitesTypesId, annee: number, periodeId: number, titreActivites?: ITitreActivite[] | null): boolean =>
+  titreActivites?.some(a => a.typeId === activiteTypeId && a.annee === annee && a.periodeId === periodeId) ?? false
 
 /**
  * Construit une activité (si elle n'existe pas déjà)
@@ -161,7 +162,7 @@ export const titreActivitesBuild = (
 ) => {
   // si le titre n'a pas de phases de démarches
   // aucune activité ne peut être créées
-  if (!titreDemarches?.some(d => d.demarcheDateDebut)) return []
+  if ((titreDemarches ?? []).every(d => isNullOrUndefined(d.demarcheDateDebut))) return []
 
   const activiteType = ActivitesTypes[activiteTypeId]
 
@@ -172,7 +173,7 @@ export const titreActivitesBuild = (
       periodes.reduce((acc: ITitreActivite[], _, i) => {
         const activiteSections = activiteType.sections
 
-        const titreActivite = titreActiviteBuild(activiteType.id, i + 1, activiteSections, annee, activiteType.frequenceId, aujourdhui, titreId, titreDemarches, titreTypeId, titreActivites)
+        const titreActivite = titreActiviteBuild(activiteType.id, i + 1, activiteSections, annee, activiteType.frequenceId, aujourdhui, titreId, titreDemarches ?? [], titreTypeId, titreActivites)
 
         if (titreActivite) {
           acc.push(titreActivite)
diff --git a/packages/api/src/business/rules/titre-demarche-annulation-date-fin-find.test.ts b/packages/api/src/business/rules/titre-demarche-annulation-date-fin-find.test.ts
index e63cd2e4d..545699c00 100644
--- a/packages/api/src/business/rules/titre-demarche-annulation-date-fin-find.test.ts
+++ b/packages/api/src/business/rules/titre-demarche-annulation-date-fin-find.test.ts
@@ -4,6 +4,7 @@ import { EtapeTypeId } from 'camino-common/src/static/etapesTypes.js'
 import { newDemarcheId, newEtapeId } from '../../database/models/_format/id-create.js'
 import { toCaminoDate } from 'camino-common/src/date.js'
 import { describe, expect, test } from 'vitest'
+import { ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
 describe("date de fin d'une démarche d'annulation", () => {
   test.each<EtapeTypeId>(['dex', 'dux', 'dim'])("retourne la date d'une démarche d'annulation si elle n'a pas de date de fin pour une %p", typeId => {
     const titreDemarcheAnnulationEtapes: ITitreEtape[] = [
@@ -12,7 +13,7 @@ describe("date de fin d'une démarche d'annulation", () => {
         titreDemarcheId: newDemarcheId('h-cx-courdemanges-1988-ret01'),
         typeId,
         statutId: 'acc',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         ordre: 1,
         date: toCaminoDate('2013-05-21'),
       },
@@ -27,7 +28,7 @@ describe("date de fin d'une démarche d'annulation", () => {
         titreDemarcheId: newDemarcheId('h-cx-courdemanges-1988-ret01'),
         typeId,
         statutId: 'acc',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         ordre: 1,
         date: toCaminoDate('2013-05-21'),
         dateFin: toCaminoDate('2013-05-25'),
@@ -60,7 +61,7 @@ describe("date de fin d'une démarche d'annulation", () => {
         titreDemarcheId: newDemarcheId('h-cx-courdemanges-1988-ret01'),
         typeId: 'aco',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         ordre: 1,
         date: toCaminoDate('2013-05-21'),
         dateFin: toCaminoDate('2013-05-25'),
diff --git a/packages/api/src/business/rules/titre-demarche-public-find.test.ts b/packages/api/src/business/rules/titre-demarche-public-find.test.ts
index 3934cdbee..d4c1549a2 100644
--- a/packages/api/src/business/rules/titre-demarche-public-find.test.ts
+++ b/packages/api/src/business/rules/titre-demarche-public-find.test.ts
@@ -6,6 +6,7 @@ import { newDemarcheId, newEtapeId, newTitreId } from '../../database/models/_fo
 import { toCaminoDate } from 'camino-common/src/date.js'
 import { describe, expect, test } from 'vitest'
 import { DemarcheTypeId } from 'camino-common/src/static/demarchesTypes.js'
+import { ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
 const etapesBuild = (etapesProps: Partial<ITitreEtape>[]) =>
   etapesProps.map(
     (etapeProps, i) =>
@@ -590,7 +591,7 @@ describe("publicité d'une démarche", () => {
           demarcheDateDebut: toCaminoDate('2020-01-01'),
           demarcheDateFin: toCaminoDate('2021-01-01'),
           id: newDemarcheId(),
-          etapes: etapesBuild([{ typeId: 'mdp', statutId: 'fai', date: toCaminoDate('2017-01-01'), isBrouillon: false }]),
+          etapes: etapesBuild([{ typeId: 'mdp', statutId: 'fai', date: toCaminoDate('2017-01-01'), isBrouillon: ETAPE_IS_NOT_BROUILLON }]),
           titreId: newTitreId('titreId'),
         },
         'arm'
@@ -604,8 +605,8 @@ describe("publicité d'une démarche", () => {
           demarcheDateFin: toCaminoDate('2021-01-01'),
           id: newDemarcheId(),
           etapes: etapesBuild([
-            { typeId: 'mfr', statutId: 'fai', date: toCaminoDate('2020-01-01'), isBrouillon: false },
-            { typeId: 'mdp', statutId: 'fai', date: toCaminoDate('2020-01-02'), isBrouillon: false },
+            { typeId: 'mfr', statutId: 'fai', date: toCaminoDate('2020-01-01'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
+            { typeId: 'mdp', statutId: 'fai', date: toCaminoDate('2020-01-02'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
           ]),
           titreId: newTitreId('titreId'),
         },
@@ -622,7 +623,7 @@ describe("publicité d'une démarche", () => {
           demarcheDateDebut: toCaminoDate('2020-01-01'),
           demarcheDateFin: toCaminoDate('2021-01-01'),
           id: newDemarcheId(),
-          etapes: etapesBuild([{ typeId: 'mcr', date: toCaminoDate('2017-01-01'), isBrouillon: false }]),
+          etapes: etapesBuild([{ typeId: 'mcr', date: toCaminoDate('2017-01-01'), isBrouillon: ETAPE_IS_NOT_BROUILLON }]),
           titreId: newTitreId('titreId'),
         },
         'arm'
@@ -637,9 +638,9 @@ describe("publicité d'une démarche", () => {
           demarcheDateFin: toCaminoDate('2021-01-01'),
           id: newDemarcheId(),
           etapes: etapesBuild([
-            { typeId: 'mfr', statutId: 'fai', date: toCaminoDate('2020-01-01'), isBrouillon: false },
-            { typeId: 'mdp', statutId: 'fai', date: toCaminoDate('2020-01-02'), isBrouillon: false },
-            { typeId: 'mcr', statutId: 'fav', date: toCaminoDate('2020-01-03'), isBrouillon: false },
+            { typeId: 'mfr', statutId: 'fai', date: toCaminoDate('2020-01-01'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
+            { typeId: 'mdp', statutId: 'fai', date: toCaminoDate('2020-01-02'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
+            { typeId: 'mcr', statutId: 'fav', date: toCaminoDate('2020-01-03'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
           ]),
           titreId: newTitreId('titreId'),
         },
@@ -657,8 +658,8 @@ describe("publicité d'une démarche", () => {
           demarcheDateFin: toCaminoDate('2021-01-01'),
           id: newDemarcheId(),
           etapes: etapesBuild([
-            { typeId: 'mcr', date: toCaminoDate('2017-01-01'), isBrouillon: false },
-            { typeId: 'eof', date: toCaminoDate('2017-01-01'), isBrouillon: false },
+            { typeId: 'mcr', date: toCaminoDate('2017-01-01'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
+            { typeId: 'asc', date: toCaminoDate('2017-01-01'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
           ]),
           titreId: newTitreId('titreId'),
         },
@@ -673,10 +674,10 @@ describe("publicité d'une démarche", () => {
           demarcheDateFin: toCaminoDate('2021-01-01'),
           id: newDemarcheId(),
           etapes: etapesBuild([
-            { typeId: 'mfr', statutId: 'fai', date: toCaminoDate('2020-01-01'), isBrouillon: false },
-            { typeId: 'mdp', statutId: 'fai', date: toCaminoDate('2020-01-02'), isBrouillon: false },
-            { typeId: 'mcr', statutId: 'fav', date: toCaminoDate('2020-01-03'), isBrouillon: false },
-            { typeId: 'eof', statutId: 'fai', date: toCaminoDate('2020-01-05'), isBrouillon: false },
+            { typeId: 'mfr', statutId: 'fai', date: toCaminoDate('2020-01-01'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
+            { typeId: 'mdp', statutId: 'fai', date: toCaminoDate('2020-01-02'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
+            { typeId: 'mcr', statutId: 'fav', date: toCaminoDate('2020-01-03'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
+            { typeId: 'asc', statutId: 'fai', date: toCaminoDate('2020-01-05'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
           ]),
           titreId: newTitreId('titreId'),
         },
@@ -693,7 +694,7 @@ describe("publicité d'une démarche", () => {
           demarcheDateDebut: toCaminoDate('2020-01-01'),
           demarcheDateFin: toCaminoDate('2021-01-01'),
           id: newDemarcheId(),
-          etapes: etapesBuild([{ typeId: 'css', date: toCaminoDate('2017-01-01'), isBrouillon: false }]),
+          etapes: etapesBuild([{ typeId: 'css', date: toCaminoDate('2017-01-01'), isBrouillon: ETAPE_IS_NOT_BROUILLON }]),
           titreId: newTitreId('titreId'),
         },
         'arm'
@@ -707,10 +708,10 @@ describe("publicité d'une démarche", () => {
           demarcheDateFin: toCaminoDate('2021-01-01'),
           id: newDemarcheId(),
           etapes: etapesBuild([
-            { typeId: 'mfr', statutId: 'fai', date: toCaminoDate('2020-01-01'), isBrouillon: false },
-            { typeId: 'mdp', statutId: 'fai', date: toCaminoDate('2020-01-02'), isBrouillon: false },
-            { typeId: 'mcr', statutId: 'fav', date: toCaminoDate('2020-01-03'), isBrouillon: false },
-            { typeId: 'css', statutId: 'fai', date: toCaminoDate('2020-01-05'), isBrouillon: false },
+            { typeId: 'mfr', statutId: 'fai', date: toCaminoDate('2020-01-01'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
+            { typeId: 'mdp', statutId: 'fai', date: toCaminoDate('2020-01-02'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
+            { typeId: 'mcr', statutId: 'fav', date: toCaminoDate('2020-01-03'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
+            { typeId: 'css', statutId: 'fai', date: toCaminoDate('2020-01-05'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
           ]),
           titreId: newTitreId('titreId'),
         },
@@ -728,7 +729,7 @@ describe("publicité d'une démarche", () => {
           demarcheDateDebut: toCaminoDate('2017-01-01'),
           demarcheDateFin: toCaminoDate('2021-01-01'),
           id: newDemarcheId(),
-          etapes: etapesBuild([{ typeId: 'des', date: toCaminoDate('2017-01-01'), isBrouillon: false }]),
+          etapes: etapesBuild([{ typeId: 'des', date: toCaminoDate('2017-01-01'), isBrouillon: ETAPE_IS_NOT_BROUILLON }]),
           titreId: newTitreId('titreId'),
         },
         'arm'
@@ -743,9 +744,9 @@ describe("publicité d'une démarche", () => {
           demarcheDateFin: toCaminoDate('2021-01-01'),
           id: newDemarcheId(),
           etapes: etapesBuild([
-            { typeId: 'mfr', statutId: 'fai', date: toCaminoDate('2020-01-01'), isBrouillon: false },
-            { typeId: 'mdp', statutId: 'fai', date: toCaminoDate('2020-01-02'), isBrouillon: false },
-            { typeId: 'des', statutId: 'fai', date: toCaminoDate('2020-01-05'), isBrouillon: false },
+            { typeId: 'mfr', statutId: 'fai', date: toCaminoDate('2020-01-01'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
+            { typeId: 'mdp', statutId: 'fai', date: toCaminoDate('2020-01-02'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
+            { typeId: 'des', statutId: 'fai', date: toCaminoDate('2020-01-05'), isBrouillon: ETAPE_IS_NOT_BROUILLON },
           ]),
           titreId: newTitreId('titreId'),
         },
@@ -764,7 +765,7 @@ describe("publicité d'une démarche", () => {
             demarcheDateDebut: toCaminoDate('2020-01-01'),
             demarcheDateFin: toCaminoDate('2021-01-01'),
             id: newDemarcheId(),
-            etapes: etapesBuild([{ typeId: etapeTypeId, isBrouillon: false }]),
+            etapes: etapesBuild([{ typeId: etapeTypeId, isBrouillon: ETAPE_IS_NOT_BROUILLON }]),
             titreId: newTitreId('titreId'),
           },
           'pcc'
@@ -781,7 +782,7 @@ describe("publicité d'une démarche", () => {
           demarcheDateDebut: toCaminoDate('2020-01-01'),
           demarcheDateFin: toCaminoDate('2021-01-01'),
           id: newDemarcheId(),
-          etapes: etapesBuild([{ typeId: 'ane', isBrouillon: false }]),
+          etapes: etapesBuild([{ typeId: 'ane', isBrouillon: ETAPE_IS_NOT_BROUILLON }]),
           titreId: newTitreId('WQaZgPfDcQw9tFliMgBIDH3Z'),
         },
         'pcc'
@@ -798,8 +799,8 @@ describe("publicité d'une démarche", () => {
           demarcheDateDebut: toCaminoDate('2020-01-01'),
           demarcheDateFin: null,
           etapes: etapesBuild([
-            { typeId: 'mfr', isBrouillon: false },
-            { typeId: 'mdp', isBrouillon: false },
+            { typeId: 'mfr', isBrouillon: ETAPE_IS_NOT_BROUILLON },
+            { typeId: 'mdp', isBrouillon: ETAPE_IS_NOT_BROUILLON },
           ]),
           titreId: newTitreId('titreId'),
         },
@@ -816,7 +817,7 @@ describe("publicité d'une démarche", () => {
           typeId: 'pr1',
           demarcheDateDebut: toCaminoDate('2020-01-01'),
           demarcheDateFin: null,
-          etapes: etapesBuild([{ typeId: 'mfr', isBrouillon: false }]),
+          etapes: etapesBuild([{ typeId: 'mfr', isBrouillon: ETAPE_IS_NOT_BROUILLON }]),
           titreId: newTitreId('titreId'),
         },
         'prm'
diff --git a/packages/api/src/business/rules/titre-demarche-statut-id-find.test.ts b/packages/api/src/business/rules/titre-demarche-statut-id-find.test.ts
index f9e0850d5..2c8aea822 100644
--- a/packages/api/src/business/rules/titre-demarche-statut-id-find.test.ts
+++ b/packages/api/src/business/rules/titre-demarche-statut-id-find.test.ts
@@ -7,6 +7,8 @@ import { toCaminoDate } from 'camino-common/src/date.js'
 import { describe, expect, test } from 'vitest'
 import { EtapeStatutId } from 'camino-common/src/static/etapesStatuts.js'
 import { TitreEtapeForMachine } from '../rules-demarches/machine-common.js'
+import { ETAPE_IS_BROUILLON } from 'camino-common/src/etape.js'
+import { EtapeTypeId } from 'camino-common/src/static/etapesTypes.js'
 const etapesBuild = (etapesProps: Partial<ITitreEtape>[]): TitreEtapeForMachine[] =>
   etapesProps.map(
     (etapeProps, i) =>
@@ -95,8 +97,7 @@ describe("statut d'une démarche", () => {
           { typeId: 'mcp', statutId: 'com', date: toCaminoDate('2020-01-23') },
           { typeId: 'vfd', statutId: 'fai', date: toCaminoDate('2020-02-05') },
           { typeId: 'mcr', statutId: 'fav', date: toCaminoDate('2020-02-06') },
-          { typeId: 'eof', statutId: 'fai', date: toCaminoDate('2020-02-07') },
-          { typeId: 'aof', statutId: 'fav', date: toCaminoDate('2020-02-08') },
+          { typeId: 'asc', statutId: 'fai', date: toCaminoDate('2020-02-07') },
           {
             typeId: 'rde',
             statutId: 'fav',
@@ -237,7 +238,7 @@ describe("statut d'une démarche", () => {
   })
 
   test("une démarche d'octroi dont l'étape la plus récente est mfr a le statut “en construction”", () => {
-    expect(titreDemarcheStatutIdFind('oct', etapesBuild([{ typeId: 'mfr', statutId: 'fai', isBrouillon: true }]), 'pxm', newDemarcheId())).toEqual('eco')
+    expect(titreDemarcheStatutIdFind('oct', etapesBuild([{ typeId: 'mfr', statutId: 'fai', isBrouillon: ETAPE_IS_BROUILLON }]), 'pxm', newDemarcheId())).toEqual('eco')
   })
 
   test("une démarche d'octroi dont l'étape la plus récente est mcr a le statut “en instruction”", () => {
@@ -259,8 +260,7 @@ describe("statut d'une démarche", () => {
           { typeId: 'mcp', statutId: 'com', date: toCaminoDate('2021-02-27') },
           { typeId: 'vfd', statutId: 'fai', date: toCaminoDate('2021-03-10') },
           { typeId: 'mcr', statutId: 'fav', date: toCaminoDate('2021-03-11') },
-          { typeId: 'eof', statutId: 'fai', date: toCaminoDate('2021-03-17') },
-          { typeId: 'aof', statutId: 'fav', date: toCaminoDate('2021-09-23') },
+          { typeId: 'asc', statutId: 'fai', date: toCaminoDate('2021-09-23') },
           { typeId: 'sca', statutId: 'fai', date: toCaminoDate('2021-09-24') },
           { typeId: 'aca', statutId: 'def', date: toCaminoDate('2021-09-25') },
         ]),
@@ -281,8 +281,7 @@ describe("statut d'une démarche", () => {
           { typeId: 'mcp', statutId: 'com', date: toCaminoDate('2021-02-27') },
           { typeId: 'vfd', statutId: 'fai', date: toCaminoDate('2021-03-10') },
           { typeId: 'mcr', statutId: 'fav', date: toCaminoDate('2021-03-11') },
-          { typeId: 'eof', statutId: 'fai', date: toCaminoDate('2021-03-17') },
-          { typeId: 'aof', statutId: 'fav', date: toCaminoDate('2021-09-23') },
+          { typeId: 'asc', statutId: 'fai', date: toCaminoDate('2021-09-23') },
           { typeId: 'sca', statutId: 'fai', date: toCaminoDate('2021-09-24') },
           { typeId: 'aca', statutId: 'fav', date: toCaminoDate('2021-09-25') },
         ]),
@@ -308,18 +307,14 @@ describe("statut d'une démarche", () => {
     expect(titreDemarcheStatutIdFind('ret', etapesBuild([{ typeId: 'spp' }]), 'pxm', newDemarcheId())).toEqual('ins')
   })
 
-  test("une démarche de retrait dont l'étape la plus récente est eof a le statut “en instruction”", () => {
-    expect(titreDemarcheStatutIdFind('ret', etapesBuild([{ typeId: 'ide' }, { typeId: 'eof' }]), 'pxm', newDemarcheId())).toEqual('ins')
+  test("une démarche de retrait dont l'étape la plus récente est asc a le statut “en instruction”", () => {
+    expect(titreDemarcheStatutIdFind('ret', etapesBuild([{ typeId: 'ide' }, { typeId: 'asc' }]), 'pxm', newDemarcheId())).toEqual('ins')
   })
 
   test("une démarche de retrait dont l'étape la plus récente est aco a le statut “terminé”", () => {
     expect(titreDemarcheStatutIdFind('ret', etapesBuild([{ typeId: 'aco' }]), 'pxm', newDemarcheId())).toEqual('ter')
   })
 
-  test("une démarche de retrait dont l'étape la plus récente est aof refusée a le statut “css”", () => {
-    expect(titreDemarcheStatutIdFind('ret', etapesBuild([{ typeId: 'aof', statutId: 'def' }]), 'pxm', newDemarcheId())).toEqual('cls')
-  })
-
   test("une démarche de retrait dont l'étape la plus récente de css a été faite a le statut “classé sans suite”", () => {
     expect(titreDemarcheStatutIdFind('ret', etapesBuild([{ typeId: 'css' }]), 'pxm', newDemarcheId())).toEqual('cls')
   })
@@ -357,7 +352,7 @@ describe("statut d'une démarche", () => {
     ).toEqual('ind')
   })
 
-  test.each<[Travaux, EtapeStatutId, DemarcheStatutId]>([
+  test.each<[EtapeTypeId, EtapeStatutId, DemarcheStatutId]>([
     [Travaux.DemandeAutorisationOuverture, 'fai', Demarches.Depose],
     [Travaux.DepotDemande, 'fai', Demarches.Depose],
     [Travaux.Recevabilite, 'def', Demarches.EnInstruction],
@@ -367,59 +362,46 @@ describe("statut d'une démarche", () => {
     [Travaux.SaisineAutoriteEnvironmentale, 'fai', Demarches.EnInstruction],
     [Travaux.MemoireReponseExploitant, 'fai', Demarches.EnInstruction],
     [Travaux.AvisReception, 'fai', Demarches.EnInstruction],
-    [Travaux.SaisineServiceEtat, 'fai', Demarches.EnInstruction],
+    [Travaux.AvisDesServicesEtCommissionsConsultatives, 'fai', Demarches.EnInstruction],
     [Travaux.AvisAutoriteEnvironmentale, 'fai', Demarches.EnInstruction],
     [Travaux.MemoireReponseExploitant, 'fai', Demarches.EnInstruction],
     [Travaux.AvisRapportDirecteurREAL, 'fai', Demarches.EnInstruction],
     [Travaux.TransPrescriptionsDemandeur, 'fai', Demarches.EnInstruction],
-    [Travaux.AvisCODERST, 'fai', Demarches.EnInstruction],
     [Travaux.AvisPrescriptionsDemandeur, 'fai', Demarches.EnInstruction],
     [Travaux.ArreteOuvertureTravauxMiniers, 'fai', Demarches.Accepte],
     [Travaux.PubliDecisionRecueilActesAdmin, 'fai', Demarches.Accepte],
     [Travaux.Abandon, 'fai', Demarches.Desiste],
-  ])("pour une démarche de travaux de type 'aom' sur un titre, dont la dernière étape est '$etapeTypeId' au statut $statutId, le résultat est $resultId", (etapeTypeId, statutId, resultId) => {
+  ])("pour une démarche de travaux de type 'aom' sur un titre, dont la dernière étape est '%s' au statut %s, le résultat est %s", (etapeTypeId, statutId, resultId) => {
     expect(titreDemarcheStatutIdFind('aom', etapesBuild([{ typeId: etapeTypeId, statutId }]), 'pxm', newDemarcheId())).toEqual(resultId)
   })
 
-  test.each<[Travaux, EtapeStatutId, DemarcheStatutId]>([
+  test.each<[EtapeTypeId, EtapeStatutId, DemarcheStatutId]>([
     [Travaux.DeclarationOuverture, 'fai', Demarches.Depose],
     [Travaux.DepotDemande, 'fai', Demarches.Depose],
     [Travaux.Recevabilite, 'def', Demarches.EnInstruction],
     [Travaux.Recevabilite, 'fav', Demarches.EnInstruction],
     [Travaux.DemandeComplements, 'fai', Demarches.EnInstruction],
     [Travaux.ReceptionComplements, 'fai', Demarches.EnInstruction],
-    [Travaux.SaisineServiceEtat, 'fai', Demarches.EnInstruction],
-    [Travaux.AvisServiceAdminLocal, 'fai', Demarches.EnInstruction],
-    [Travaux.AvisDDTM, 'fai', Demarches.EnInstruction],
-    [Travaux.AvisAutoriteMilitaire, 'fai', Demarches.EnInstruction],
-    [Travaux.AvisARS, 'fai', Demarches.EnInstruction],
-    [Travaux.AvisDRAC, 'fai', Demarches.EnInstruction],
+    [Travaux.AvisDesServicesEtCommissionsConsultatives, 'fai', Demarches.EnInstruction],
     [Travaux.AvisPrefetMaritime, 'fai', Demarches.EnInstruction],
-    [Travaux.AvisAutresInstances, 'fai', Demarches.EnInstruction],
     [Travaux.RapportDREAL, 'fai', Demarches.EnInstruction],
     [Travaux.TransPrescriptionsDemandeur, 'fai', Demarches.EnInstruction],
     [Travaux.AvisPrescriptionsDemandeur, 'fai', Demarches.EnInstruction],
     [Travaux.DonneActeDeclaration, 'fai', Demarches.Accepte],
     [Travaux.Abandon, 'fai', Demarches.Desiste],
-  ])("pour une démarche de travaux de type 'dot' sur un titre, dont la dernière étape est '$etapeTypeId' au statut $statutId, le résultat est $resultId", (etapeTypeId, statutId, resultId) => {
+  ])("pour une démarche de travaux de type 'dot' sur un titre, dont la dernière étape est '%s' au statut %s, le résultat est %s", (etapeTypeId, statutId, resultId) => {
     expect(titreDemarcheStatutIdFind('dot', etapesBuild([{ typeId: etapeTypeId, statutId }]), 'pxm', newDemarcheId())).toEqual(resultId)
   })
 
-  test.each<[Travaux, EtapeStatutId, DemarcheStatutId]>([
+  test.each<[EtapeTypeId, EtapeStatutId, DemarcheStatutId]>([
     [Travaux.DeclarationArret, 'fai', Demarches.Depose],
     [Travaux.DepotDemande, 'fai', Demarches.Depose],
     [Travaux.Recevabilite, 'def', Demarches.EnInstruction],
     [Travaux.Recevabilite, 'fav', Demarches.EnInstruction],
     [Travaux.AvisReception, 'fav', Demarches.EnInstruction],
-    [Travaux.SaisineServiceEtat, 'fai', Demarches.EnInstruction],
+    [Travaux.AvisDesServicesEtCommissionsConsultatives, 'fai', Demarches.EnInstruction],
     [Travaux.ArretePrefectoralSursis, 'fai', Demarches.EnInstruction],
-    [Travaux.AvisServiceAdminLocal, 'fai', Demarches.EnInstruction],
-    [Travaux.AvisDDTM, 'fai', Demarches.EnInstruction],
-    [Travaux.AvisAutoriteMilitaire, 'fai', Demarches.EnInstruction],
-    [Travaux.AvisARS, 'fai', Demarches.EnInstruction],
-    [Travaux.AvisDRAC, 'fai', Demarches.EnInstruction],
     [Travaux.AvisPrefetMaritime, 'fai', Demarches.EnInstruction],
-    [Travaux.AvisAutresInstances, 'fai', Demarches.EnInstruction],
     [Travaux.AvisPrescriptionsDemandeur, 'fai', Demarches.EnInstruction],
     [Travaux.RapportDREAL, 'fai', Demarches.EnInstruction],
     [Travaux.ArretePrefectDonneActe1, 'fai', Demarches.EnInstruction],
@@ -430,7 +412,7 @@ describe("statut d'une démarche", () => {
     [Travaux.PubliDecisionRecueilActesAdmin, 'fai', Demarches.FinPoliceMines],
     [Travaux.PorterAConnaissance, 'fai', Demarches.FinPoliceMines],
     [Travaux.Abandon, 'fai', Demarches.Desiste],
-  ])("pour une démarche de travaux de type 'dam' sur un titre, dont la dernière étape est '$etapeTypeId' au statut $statutId, le résultat est $resultId", (etapeTypeId, statutId, resultId) => {
+  ])("pour une démarche de travaux de type 'dam' sur un titre, dont la dernière étape est '%s' au statut %s, le résultat est %s", (etapeTypeId, statutId, resultId) => {
     expect(titreDemarcheStatutIdFind('dam', etapesBuild([{ typeId: etapeTypeId, statutId }]), 'pxm', newDemarcheId())).toEqual(resultId)
   })
 })
diff --git a/packages/api/src/business/rules/titre-demarche-statut-id-find.ts b/packages/api/src/business/rules/titre-demarche-statut-id-find.ts
index c7adc6505..d30697e49 100644
--- a/packages/api/src/business/rules/titre-demarche-statut-id-find.ts
+++ b/packages/api/src/business/rules/titre-demarche-statut-id-find.ts
@@ -38,7 +38,7 @@ const titreDemarchesDemandesTypes: DemarcheTypeId[] = ['oct', 'pro', 'pr1', 'pr2
 
 const titreDemarchesTravauxTypes = ['aom', 'dam', 'dot'] as const satisfies readonly TravauxIds[]
 
-const titreEtapesDecisivesUnilateralesTypes: EtapeTypeId[] = ['ide', 'spp', 'dup', 'dux', 'aof', 'aco', ...titreEtapesDecisivesCommunesTypes]
+const titreEtapesDecisivesUnilateralesTypes: EtapeTypeId[] = ['ide', 'spp', 'dup', 'dux', 'aco', ...titreEtapesDecisivesCommunesTypes]
 
 const titreDemarchesUnilateralesTypes: DemarcheTypeId[] = ['ret', 'prr', 'dec']
 
@@ -83,7 +83,7 @@ const titreDemarcheUnilateralStatutIdFind = (titreDemarcheEtapes: Pick<ITitreEta
   const titreEtapesDecisivesUnilaterale = titreDemarcheEtapes.filter(titreEtape => titreEtapesDecisivesUnilateralesTypes.includes(titreEtape.typeId))
 
   // si aucune étape décisive n'est présente dans la démarche
-  // le statut est indétrminé
+  // le statut est indéterminé
   if (!titreEtapesDecisivesUnilaterale.length) return DemarchesStatutsIds.Indetermine
 
   // l'étape la plus récente
@@ -112,12 +112,6 @@ const titreDemarcheUnilateralStatutIdFind = (titreDemarcheEtapes: Pick<ITitreEta
     return DemarchesStatutsIds.Termine
   }
 
-  // - le type de l’étape est l’avis de l’ONF défavorable
-  if (titreEtapeRecent.typeId === 'aof' && titreEtapeRecent.statutId === 'def') {
-    // - le statut de la démarche est "classement sans suite"
-    return DemarchesStatutsIds.ClasseSansSuite
-  }
-
   // - si il y a plusieurs étapes
   if (titreDemarcheEtapes.length > 1) {
     // - le statut de la démarche est "en instruction"
@@ -239,20 +233,13 @@ const titreDemarcheTravauxStatutIdFind = (titreDemarcheEtapes: Pick<ITitreEtape,
     [Travaux.SaisineAutoriteEnvironmentale]: DemarchesStatutsIds.EnInstruction,
     [Travaux.AvisAutoriteEnvironmentale]: DemarchesStatutsIds.EnInstruction,
     [Travaux.ArretePrefectoralSursis]: DemarchesStatutsIds.EnInstruction,
-    [Travaux.SaisineServiceEtat]: DemarchesStatutsIds.EnInstruction,
-    [Travaux.AvisServiceAdminLocal]: DemarchesStatutsIds.EnInstruction,
-    [Travaux.AvisDDTM]: DemarchesStatutsIds.EnInstruction,
-    [Travaux.AvisAutoriteMilitaire]: DemarchesStatutsIds.EnInstruction,
-    [Travaux.AvisARS]: DemarchesStatutsIds.EnInstruction,
-    [Travaux.AvisDRAC]: DemarchesStatutsIds.EnInstruction,
+    [Travaux.AvisDesServicesEtCommissionsConsultatives]: DemarchesStatutsIds.EnInstruction,
     [Travaux.AvisPrefetMaritime]: DemarchesStatutsIds.EnInstruction,
-    [Travaux.AvisAutresInstances]: DemarchesStatutsIds.EnInstruction,
     [Travaux.AvisRapportDirecteurREAL]: DemarchesStatutsIds.EnInstruction,
     [Travaux.TransPrescriptionsDemandeur]: DemarchesStatutsIds.EnInstruction,
     [Travaux.OuvertureEnquetePublique]: DemarchesStatutsIds.EnInstruction,
     [Travaux.MemoireReponseExploitant]: DemarchesStatutsIds.EnInstruction,
     [Travaux.ClotureEnquetePublique]: DemarchesStatutsIds.EnInstruction,
-    [Travaux.AvisCODERST]: DemarchesStatutsIds.EnInstruction,
     [Travaux.AvisPrescriptionsDemandeur]: DemarchesStatutsIds.EnInstruction,
     [Travaux.RapportDREAL]: DemarchesStatutsIds.EnInstruction,
     [Travaux.ArretePrescriptionComplementaire]: DemarchesStatutsIds.EnInstruction,
diff --git a/packages/api/src/business/rules/titre-etape-prop-find.test.ts b/packages/api/src/business/rules/titre-etape-prop-find.test.ts
index 7c792e170..2e4e644c9 100644
--- a/packages/api/src/business/rules/titre-etape-prop-find.test.ts
+++ b/packages/api/src/business/rules/titre-etape-prop-find.test.ts
@@ -3,6 +3,9 @@ import { ITitreDemarche } from '../../types.js'
 import { titreEtapePropFind } from './titre-etape-prop-find.js'
 import { vi, describe, expect, test } from 'vitest'
 import { toCaminoDate } from 'camino-common/src/date.js'
+import { ETAPE_IS_NOT_BROUILLON, etapeIdValidator } from 'camino-common/src/etape.js'
+import { titreIdValidator } from 'camino-common/src/validators/titres.js'
+import { demarcheIdValidator } from 'camino-common/src/demarche.js'
 console.error = vi.fn()
 
 describe("valeur d'une propriété pour une étape", () => {
@@ -17,20 +20,23 @@ describe("valeur d'une propriété pour une étape", () => {
   })
 
   test("retourne la propriété de l'étape antérieure qui contient la propriété voulue", () => {
+    const demarcheId = demarcheIdValidator.parse('demarche-01')
     expect(
       titreEtapePropFind(
         'titulaires',
         date,
         [
           {
-            id: 'demarche-01',
+            id: demarcheId,
+            titreId: titreIdValidator.parse('titreId'),
             typeId: 'oct',
             etapes: [
               {
-                id: 'demarche-01-etape-01',
-                typeId: 'aac',
-                statutId: 'acc',
-                isBrouillon: false,
+                id: etapeIdValidator.parse('demarche-01-etape-01'),
+                titreDemarcheId: demarcheId,
+                typeId: 'asc',
+                statutId: 'fai',
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1000-01-01'),
                 titulaireIds: [],
                 ordre: 1,
@@ -38,10 +44,11 @@ describe("valeur d'une propriété pour une étape", () => {
                 surface: null,
               },
               {
-                id: 'demarche-01-etape-02',
-                typeId: 'aac',
-                statutId: 'acc',
-                isBrouillon: false,
+                id: etapeIdValidator.parse('demarche-01-etape-02'),
+                titreDemarcheId: demarcheId,
+                typeId: 'asc',
+                statutId: 'fai',
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1000-01-01'),
                 titulaireIds: ['fr-xxxxxxxxx'],
                 ordre: 1,
@@ -63,39 +70,40 @@ describe("valeur d'une propriété pour une étape", () => {
         date,
         [
           {
-            id: 'demarche-01',
+            id: demarcheIdValidator.parse('demarche-01'),
+            titreId: titreIdValidator.parse('titreId'),
             statutId: 'acc',
-            type: { id: 'oct' },
+            typeId: 'oct',
             etapes: [
               {
-                id: 'demarche-01-etape-01',
-                typeId: 'aac',
-                statutId: 'acc',
-                isBrouillon: false,
+                id: etapeIdValidator.parse('demarche-01-etape-01'),
+                titreDemarcheId: demarcheIdValidator.parse('demarche-01'),
+                typeId: 'asc',
+                statutId: 'fai',
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 surface: 0,
                 ordre: 1,
                 communes: null,
-                date: '1000-01-01',
+                date: toCaminoDate('1000-01-01'),
               },
             ],
           },
           {
-            type: { id: 'oct' },
             typeId: 'oct',
             etapes: [
               {
-                id: 'demarche-02-etape-01',
-                date: '1000-01-01',
-                typeId: 'aac',
-                statutId: 'acc',
-                isBrouillon: false,
+                id: etapeIdValidator.parse('demarche-02-etape-01'),
+                date: toCaminoDate('1000-01-01'),
+                typeId: 'asc',
+                statutId: 'fai',
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 surface: 0,
                 ordre: 1,
                 communes: null,
               },
             ],
           },
-        ] as unknown as ITitreDemarche[],
+        ] as ITitreDemarche[],
         'pxm'
       )
     ).toEqual(0)
@@ -108,24 +116,25 @@ describe("valeur d'une propriété pour une étape", () => {
         date,
         [
           {
-            id: 'demarche-01',
+            id: demarcheIdValidator.parse('demarche-01'),
+            titreId: titreIdValidator.parse('titreId'),
             typeId: 'oct',
-            type: { id: 'oct' },
             etapes: [
               {
-                id: 'demarche-02-etape-01',
-                date: '1000-01-01',
-                statutId: 'acc',
-                isBrouillon: false,
+                id: etapeIdValidator.parse('demarche-02-etape-01'),
+                titreDemarcheId: demarcheIdValidator.parse('demarche-01'),
+                date: toCaminoDate('1000-01-01'),
+                statutId: 'fai',
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 titulaireIds: null,
-                typeId: 'aac',
+                typeId: 'asc',
                 surface: 0,
                 ordre: 1,
                 communes: null,
               },
             ],
           },
-        ] as unknown as ITitreDemarche[],
+        ] as ITitreDemarche[],
         'pxm'
       )
     ).toBeNull()
diff --git a/packages/api/src/business/rules/titre-phases-find.test.ts b/packages/api/src/business/rules/titre-phases-find.test.ts
index 74b8aedc1..514504fcf 100644
--- a/packages/api/src/business/rules/titre-phases-find.test.ts
+++ b/packages/api/src/business/rules/titre-phases-find.test.ts
@@ -10,8 +10,9 @@ import { DemarchesStatutsIds } from 'camino-common/src/static/demarchesStatuts'
 import { TitreTypeId } from 'camino-common/src/static/titresTypes'
 
 import { ETAPES_STATUTS } from 'camino-common/src/static/etapesStatuts.js'
-import { etapeSlugValidator } from 'camino-common/src/etape.js'
+import { ETAPE_IS_BROUILLON, ETAPE_IS_NOT_BROUILLON, etapeSlugValidator } from 'camino-common/src/etape.js'
 import { FeatureMultiPolygon } from 'camino-common/src/perimetre.js'
+import { km2Validator } from 'camino-common/src/number.js'
 const titresProd = require('./titre-phases-find.cas.json')
 
 export type TitrePhasesTest = [TitreTypeId, TitreDemarchePhaseFind[]]
@@ -48,7 +49,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dpu',
                 statutId: 'acc',
                 ordre: 2,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2200-01-01'),
                 duree: 2 * 12,
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1988-oct01'),
@@ -57,7 +58,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dex',
                 statutId: 'acc',
                 ordre: 1,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2200-01-01'),
                 duree: 2 * 12,
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1988-oct01'),
@@ -106,7 +107,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dex',
                 statutId: 'acc',
                 ordre: 1,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2200-01-01'),
                 duree: 2 * 12,
                 titreDemarcheId: newDemarcheId('h-ax-courdemanges-1988-oct01'),
@@ -138,7 +139,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'rpu',
                 statutId: 'acc',
                 ordre: 1,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2200-01-01'),
                 dateFin: toCaminoDate('2200-01-02'),
                 titreDemarcheId: newDemarcheId('m-pr-courdemanges-1988-oct01'),
@@ -170,7 +171,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dpu',
                 statutId: 'acc',
                 ordre: 2,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2200-01-01'),
                 dateDebut: toCaminoDate('2200-01-02'),
                 duree: 2 * 12,
@@ -180,7 +181,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dex',
                 statutId: 'acc',
                 ordre: 1,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2200-01-01'),
                 dateDebut: toCaminoDate('2200-01-02'),
                 duree: 2 * 12,
@@ -215,7 +216,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dpu',
                 statutId: 'acc',
                 ordre: 2,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2200-01-01'),
                 dateFin: toCaminoDate('2500-01-01'),
               },
@@ -224,7 +225,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dex',
                 statutId: 'acc',
                 ordre: 1,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2200-01-01'),
                 dateFin: toCaminoDate('2500-01-01'),
               },
@@ -242,7 +243,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dpu',
                 statutId: 'acc',
                 ordre: 2,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2300-01-02'),
                 dateFin: toCaminoDate('3000-01-01'),
               },
@@ -251,7 +252,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dex',
                 statutId: 'acc',
                 ordre: 1,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2300-01-02'),
                 dateFin: toCaminoDate('3000-01-01'),
               },
@@ -288,7 +289,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dpu',
                 statutId: 'acc',
                 ordre: 2,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2000-01-02'),
                 duree: 20 * 12,
               },
@@ -297,7 +298,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dex',
                 statutId: 'acc',
                 ordre: 1,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2000-01-01'),
                 duree: 20 * 12,
               },
@@ -315,7 +316,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dpu',
                 statutId: 'acc',
                 ordre: 2,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2019-01-03'),
               },
               {
@@ -323,7 +324,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dex',
                 statutId: 'acc',
                 ordre: 1,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2019-01-02'),
               },
             ],
@@ -355,7 +356,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dpu',
                 statutId: 'acc',
                 ordre: 2,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2000-01-02'),
                 duree: 20 * 12,
               },
@@ -364,7 +365,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dex',
                 statutId: 'acc',
                 ordre: 1,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2000-01-01'),
                 duree: 20 * 12,
               },
@@ -382,7 +383,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dpu',
                 statutId: 'acc',
                 ordre: 2,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2019-01-03'),
               },
               {
@@ -390,7 +391,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dex',
                 statutId: 'acc',
                 ordre: 1,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2019-01-02'),
                 geojson4326Perimetre: multiPolygonWith4Points,
               },
@@ -428,9 +429,19 @@ describe("phases d'une démarche", () => {
         typeId: 'mut',
         statutId: 'cls',
         etapes: [
-          { titreDemarcheId: demarcheId1, id: newEtapeId('3'), ordre: 1, isBrouillon: false, date: toCaminoDate('2016-12-28'), duree: 1920, surface: 5.51, typeId: 'mfr', statutId: 'fai' },
-          { titreDemarcheId: demarcheId1, id: newEtapeId('1'), ordre: 2, isBrouillon: false, date: toCaminoDate('2016-12-28'), typeId: 'mdp', statutId: 'fai' },
-          { titreDemarcheId: demarcheId1, id: newEtapeId('2'), ordre: 3, isBrouillon: false, date: toCaminoDate('2017-04-07'), typeId: 'css', statutId: 'fai' },
+          {
+            titreDemarcheId: demarcheId1,
+            id: newEtapeId('3'),
+            ordre: 1,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
+            date: toCaminoDate('2016-12-28'),
+            duree: 1920,
+            surface: km2Validator.parse(5.51),
+            typeId: 'mfr',
+            statutId: 'fai',
+          },
+          { titreDemarcheId: demarcheId1, id: newEtapeId('1'), ordre: 2, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2016-12-28'), typeId: 'mdp', statutId: 'fai' },
+          { titreDemarcheId: demarcheId1, id: newEtapeId('2'), ordre: 3, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2017-04-07'), typeId: 'css', statutId: 'fai' },
         ],
       },
       {
@@ -440,9 +451,19 @@ describe("phases d'une démarche", () => {
         typeId: 'pro',
         statutId: 'cls',
         etapes: [
-          { titreDemarcheId: demarcheId2, id: newEtapeId('4'), ordre: 1, isBrouillon: false, date: toCaminoDate('2016-12-28'), duree: 1920, surface: 5.51, typeId: 'mfr', statutId: 'fai' },
-          { titreDemarcheId: demarcheId2, id: newEtapeId('5'), ordre: 2, isBrouillon: false, date: toCaminoDate('2016-12-28'), typeId: 'mdp', statutId: 'fai' },
-          { titreDemarcheId: demarcheId2, id: newEtapeId('6'), ordre: 3, isBrouillon: false, date: toCaminoDate('2017-04-07'), typeId: 'css', statutId: 'fai' },
+          {
+            titreDemarcheId: demarcheId2,
+            id: newEtapeId('4'),
+            ordre: 1,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
+            date: toCaminoDate('2016-12-28'),
+            duree: 1920,
+            surface: km2Validator.parse(5.51),
+            typeId: 'mfr',
+            statutId: 'fai',
+          },
+          { titreDemarcheId: demarcheId2, id: newEtapeId('5'), ordre: 2, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2016-12-28'), typeId: 'mdp', statutId: 'fai' },
+          { titreDemarcheId: demarcheId2, id: newEtapeId('6'), ordre: 3, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2017-04-07'), typeId: 'css', statutId: 'fai' },
         ],
       },
       {
@@ -452,9 +473,9 @@ describe("phases d'une démarche", () => {
         typeId: 'dam',
         statutId: 'ins',
         etapes: [
-          { id: newEtapeId('7'), titreDemarcheId: demarcheId3, ordre: 3, isBrouillon: false, date: toCaminoDate('2014-12-23'), typeId: 'wpp', statutId: 'fai' },
-          { id: newEtapeId('8'), titreDemarcheId: demarcheId3, ordre: 1, isBrouillon: false, date: toCaminoDate('2013-08-01'), typeId: 'wfd', statutId: 'fai' },
-          { id: newEtapeId('9'), titreDemarcheId: demarcheId3, ordre: 2, isBrouillon: false, date: toCaminoDate('2014-08-25'), typeId: 'wre', statutId: 'fav' },
+          { id: newEtapeId('7'), titreDemarcheId: demarcheId3, ordre: 3, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2014-12-23'), typeId: 'wpp', statutId: 'fai' },
+          { id: newEtapeId('8'), titreDemarcheId: demarcheId3, ordre: 1, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2013-08-01'), typeId: 'wfd', statutId: 'fai' },
+          { id: newEtapeId('9'), titreDemarcheId: demarcheId3, ordre: 2, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2014-08-25'), typeId: 'wre', statutId: 'fav' },
         ],
       },
       {
@@ -464,8 +485,8 @@ describe("phases d'une démarche", () => {
         typeId: 'mut',
         statutId: 'acc',
         etapes: [
-          { id: newEtapeId('10'), titreDemarcheId: demarcheId4, ordre: 1, isBrouillon: false, date: toCaminoDate('2002-12-24'), typeId: 'dex', statutId: 'acc' },
-          { titreDemarcheId: demarcheId4, id: newEtapeId('11'), ordre: 2, isBrouillon: false, date: toCaminoDate('2003-01-08'), typeId: 'dpu', statutId: 'acc' },
+          { id: newEtapeId('10'), titreDemarcheId: demarcheId4, ordre: 1, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2002-12-24'), typeId: 'dex', statutId: 'acc' },
+          { titreDemarcheId: demarcheId4, id: newEtapeId('11'), ordre: 2, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2003-01-08'), typeId: 'dpu', statutId: 'acc' },
         ],
       },
       {
@@ -475,8 +496,8 @@ describe("phases d'une démarche", () => {
         typeId: 'mut',
         statutId: 'acc',
         etapes: [
-          { id: newEtapeId('12'), titreDemarcheId: demarcheId5, ordre: 1, isBrouillon: false, date: toCaminoDate('2000-09-26'), typeId: 'dex', statutId: 'acc' },
-          { id: newEtapeId('13'), titreDemarcheId: demarcheId5, ordre: 2, isBrouillon: false, date: toCaminoDate('2000-10-06'), typeId: 'dpu', statutId: 'acc' },
+          { id: newEtapeId('12'), titreDemarcheId: demarcheId5, ordre: 1, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2000-09-26'), typeId: 'dex', statutId: 'acc' },
+          { id: newEtapeId('13'), titreDemarcheId: demarcheId5, ordre: 2, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2000-10-06'), typeId: 'dpu', statutId: 'acc' },
         ],
       },
       {
@@ -486,8 +507,8 @@ describe("phases d'une démarche", () => {
         typeId: 'mut',
         statutId: 'acc',
         etapes: [
-          { id: newEtapeId('id'), titreDemarcheId: demarcheId6, ordre: 1, isBrouillon: false, date: toCaminoDate('1975-11-24'), typeId: 'dex', statutId: 'acc' },
-          { id: newEtapeId('15'), titreDemarcheId: demarcheId6, ordre: 2, isBrouillon: false, date: toCaminoDate('1975-11-27'), typeId: 'dpu', statutId: 'acc' },
+          { id: newEtapeId('id'), titreDemarcheId: demarcheId6, ordre: 1, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('1975-11-24'), typeId: 'dex', statutId: 'acc' },
+          { id: newEtapeId('15'), titreDemarcheId: demarcheId6, ordre: 2, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('1975-11-27'), typeId: 'dpu', statutId: 'acc' },
         ],
       },
       {
@@ -498,8 +519,8 @@ describe("phases d'une démarche", () => {
 
         statutId: 'acc',
         etapes: [
-          { id: newEtapeId('16'), titreDemarcheId: demarcheId7, ordre: 1, isBrouillon: false, date: toCaminoDate('1970-11-16'), typeId: 'dex', statutId: 'acc' },
-          { id: newEtapeId('17'), titreDemarcheId: demarcheId7, ordre: 2, isBrouillon: false, date: toCaminoDate('1970-11-19'), typeId: 'dpu', statutId: 'acc' },
+          { id: newEtapeId('16'), titreDemarcheId: demarcheId7, ordre: 1, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('1970-11-16'), typeId: 'dex', statutId: 'acc' },
+          { id: newEtapeId('17'), titreDemarcheId: demarcheId7, ordre: 2, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('1970-11-19'), typeId: 'dpu', statutId: 'acc' },
         ],
       },
       {
@@ -509,8 +530,8 @@ describe("phases d'une démarche", () => {
         typeId: 'mut',
         statutId: 'acc',
         etapes: [
-          { id: newEtapeId('18'), titreDemarcheId: demarcheId8, ordre: 2, isBrouillon: false, date: toCaminoDate('1949-08-31'), typeId: 'dpu', statutId: 'acc' },
-          { id: newEtapeId('19'), titreDemarcheId: demarcheId8, ordre: 1, isBrouillon: false, date: toCaminoDate('1949-08-23'), typeId: 'dex', statutId: 'acc' },
+          { id: newEtapeId('18'), titreDemarcheId: demarcheId8, ordre: 2, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('1949-08-31'), typeId: 'dpu', statutId: 'acc' },
+          { id: newEtapeId('19'), titreDemarcheId: demarcheId8, ordre: 1, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('1949-08-23'), typeId: 'dex', statutId: 'acc' },
         ],
       },
       {
@@ -520,8 +541,8 @@ describe("phases d'une démarche", () => {
         typeId: 'exp',
         statutId: 'acc',
         etapes: [
-          { id: newEtapeId('20'), titreDemarcheId: demarcheId9, ordre: 1, isBrouillon: false, date: toCaminoDate('1889-02-27'), typeId: 'dex', statutId: 'acc' },
-          { id: newEtapeId('21'), titreDemarcheId: demarcheId9, ordre: 2, isBrouillon: false, date: toCaminoDate('1889-02-27'), typeId: 'dpu', statutId: 'acc' },
+          { id: newEtapeId('20'), titreDemarcheId: demarcheId9, ordre: 1, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('1889-02-27'), typeId: 'dex', statutId: 'acc' },
+          { id: newEtapeId('21'), titreDemarcheId: demarcheId9, ordre: 2, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('1889-02-27'), typeId: 'dpu', statutId: 'acc' },
         ],
       },
       {
@@ -531,8 +552,8 @@ describe("phases d'une démarche", () => {
         typeId: 'exp',
         statutId: 'acc',
         etapes: [
-          { id: newEtapeId('22'), titreDemarcheId: demarcheId10, ordre: 2, isBrouillon: false, date: toCaminoDate('1879-11-14'), typeId: 'dpu', statutId: 'acc' },
-          { id: newEtapeId('23'), titreDemarcheId: demarcheId10, ordre: 1, isBrouillon: false, date: toCaminoDate('1879-07-26'), typeId: 'dex', statutId: 'acc' },
+          { id: newEtapeId('22'), titreDemarcheId: demarcheId10, ordre: 2, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('1879-11-14'), typeId: 'dpu', statutId: 'acc' },
+          { id: newEtapeId('23'), titreDemarcheId: demarcheId10, ordre: 1, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('1879-07-26'), typeId: 'dex', statutId: 'acc' },
         ],
       },
       {
@@ -542,8 +563,8 @@ describe("phases d'une démarche", () => {
         typeId: 'oct',
         statutId: 'acc',
         etapes: [
-          { id: newEtapeId('24'), titreDemarcheId: demarcheId11, ordre: 1, isBrouillon: false, date: toCaminoDate('1858-03-24'), typeId: 'dex', statutId: 'acc' },
-          { id: newEtapeId('25'), titreDemarcheId: demarcheId11, ordre: 2, isBrouillon: false, date: toCaminoDate('1858-03-24'), typeId: 'dpu', statutId: 'acc' },
+          { id: newEtapeId('24'), titreDemarcheId: demarcheId11, ordre: 1, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('1858-03-24'), typeId: 'dex', statutId: 'acc' },
+          { id: newEtapeId('25'), titreDemarcheId: demarcheId11, ordre: 2, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('1858-03-24'), typeId: 'dpu', statutId: 'acc' },
         ],
       },
     ]
@@ -569,9 +590,9 @@ describe("phases d'une démarche", () => {
         typeId: 'pro',
         statutId: 'cls',
         etapes: [
-          { titreDemarcheId: demarcheIdProlongation, id: newEtapeId('2'), ordre: 3, isBrouillon: false, date: toCaminoDate('2011-04-07'), typeId: 'css', statutId: 'fai' },
-          { titreDemarcheId: demarcheIdProlongation, id: newEtapeId('1'), ordre: 2, isBrouillon: false, date: toCaminoDate('2008-12-28'), typeId: 'mdp', statutId: 'fai' },
-          { titreDemarcheId: demarcheIdProlongation, id: newEtapeId('3'), ordre: 1, isBrouillon: false, date: toCaminoDate('2008-12-28'), duree: 60, typeId: 'mfr', statutId: 'fai' },
+          { titreDemarcheId: demarcheIdProlongation, id: newEtapeId('2'), ordre: 3, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2011-04-07'), typeId: 'css', statutId: 'fai' },
+          { titreDemarcheId: demarcheIdProlongation, id: newEtapeId('1'), ordre: 2, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2008-12-28'), typeId: 'mdp', statutId: 'fai' },
+          { titreDemarcheId: demarcheIdProlongation, id: newEtapeId('3'), ordre: 1, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2008-12-28'), duree: 60, typeId: 'mfr', statutId: 'fai' },
         ],
       },
       {
@@ -581,8 +602,8 @@ describe("phases d'une démarche", () => {
         typeId: 'oct',
         statutId: 'acc',
         etapes: [
-          { id: newEtapeId('24'), titreDemarcheId: demarcheIdOctroi, ordre: 1, isBrouillon: false, date: toCaminoDate('2000-03-24'), typeId: 'dex', statutId: 'acc', duree: 120 },
-          { id: newEtapeId('25'), titreDemarcheId: demarcheIdOctroi, ordre: 2, isBrouillon: false, date: toCaminoDate('2000-03-24'), typeId: 'dpu', statutId: 'acc' },
+          { id: newEtapeId('24'), titreDemarcheId: demarcheIdOctroi, ordre: 1, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2000-03-24'), typeId: 'dex', statutId: 'acc', duree: 120 },
+          { id: newEtapeId('25'), titreDemarcheId: demarcheIdOctroi, ordre: 2, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2000-03-24'), typeId: 'dpu', statutId: 'acc' },
         ],
       },
     ]
@@ -611,8 +632,8 @@ describe("phases d'une démarche", () => {
         typeId: 'oct',
         statutId: 'acc',
         etapes: [
-          { id: newEtapeId('24'), titreDemarcheId: demarcheIdOctroi, ordre: 1, isBrouillon: false, date: toCaminoDate('2000-03-24'), typeId: 'dex', statutId: 'acc', duree: 120 },
-          { id: newEtapeId('25'), titreDemarcheId: demarcheIdOctroi, ordre: 2, isBrouillon: false, date: toCaminoDate('2000-03-24'), typeId: 'dpu', statutId: 'rej' },
+          { id: newEtapeId('24'), titreDemarcheId: demarcheIdOctroi, ordre: 1, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2000-03-24'), typeId: 'dex', statutId: 'acc', duree: 120 },
+          { id: newEtapeId('25'), titreDemarcheId: demarcheIdOctroi, ordre: 2, isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2000-03-24'), typeId: 'dpu', statutId: 'rej' },
         ],
       },
     ]
@@ -636,7 +657,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dpu',
             statutId: 'acc',
             ordre: 2,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('1970-09-17'),
           },
           {
@@ -645,7 +666,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dex',
             statutId: 'acc',
             ordre: 1,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('1970-09-09'),
           },
         ],
@@ -664,7 +685,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dpu',
             statutId: 'acc',
             ordre: 2,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('1994-10-18'),
             dateFin: toCaminoDate('2044-10-18'),
             duree: 600,
@@ -675,7 +696,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dex',
             statutId: 'acc',
             ordre: 1,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('1994-10-13'),
             duree: 600,
           },
@@ -694,7 +715,7 @@ describe("phases d'une démarche", () => {
             typeId: 'mfr',
             statutId: 'fai',
             ordre: 1,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2019-10-22'),
           },
           {
@@ -703,7 +724,7 @@ describe("phases d'une démarche", () => {
             typeId: 'mdp',
             statutId: 'fai',
             ordre: 2,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2019-11-20'),
           },
           {
@@ -712,7 +733,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dex',
             statutId: 'acc',
             ordre: 5,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2022-05-09'),
           },
           {
@@ -721,7 +742,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dpu',
             statutId: 'acc',
             ordre: 6,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2022-05-09'),
           },
           {
@@ -730,7 +751,7 @@ describe("phases d'une démarche", () => {
             typeId: 'apd',
             statutId: 'fav',
             ordre: 3,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2020-05-11'),
           },
           {
@@ -739,7 +760,7 @@ describe("phases d'une démarche", () => {
             typeId: 'app',
             statutId: 'fav',
             ordre: 4,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2020-06-30'),
             slug: etapeSlugValidator.parse('m-cx-pontaubert-1970-ren01-app01'),
           },
@@ -776,7 +797,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dpu',
             statutId: 'acc',
             ordre: 2,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('1970-09-17'),
           },
           {
@@ -785,7 +806,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dex',
             statutId: 'acc',
             ordre: 1,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('1970-09-09'),
           },
         ],
@@ -803,7 +824,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dpu',
             statutId: 'acc',
             ordre: 2,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('1994-10-18'),
             dateFin: toCaminoDate('2044-10-18'),
             duree: 600,
@@ -814,7 +835,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dex',
             statutId: 'acc',
             ordre: 1,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('1994-10-13'),
             duree: 600,
           },
@@ -833,7 +854,7 @@ describe("phases d'une démarche", () => {
             typeId: 'mfr',
             statutId: 'fai',
             ordre: 1,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2019-10-22'),
           },
           {
@@ -842,7 +863,7 @@ describe("phases d'une démarche", () => {
             typeId: 'mdp',
             statutId: 'fai',
             ordre: 2,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2019-11-20'),
           },
           {
@@ -851,7 +872,7 @@ describe("phases d'une démarche", () => {
             typeId: 'apd',
             statutId: 'fav',
             ordre: 3,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2020-05-11'),
           },
           {
@@ -860,7 +881,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dim',
             statutId: 'acc',
             ordre: 5,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2022-05-09'),
           },
           {
@@ -869,7 +890,7 @@ describe("phases d'une démarche", () => {
             typeId: 'app',
             statutId: 'fav',
             ordre: 4,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2020-06-30'),
           },
         ],
@@ -906,7 +927,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dpu',
             statutId: 'acc',
             ordre: 2,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('1968-01-24'),
           },
           {
@@ -915,7 +936,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dex',
             statutId: 'acc',
             ordre: 1,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('1968-01-13'),
           },
         ],
@@ -933,7 +954,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dpu',
             statutId: 'acc',
             ordre: 2,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('1981-09-13'),
             dateFin: toCaminoDate('2031-09-13'),
           },
@@ -943,7 +964,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dex',
             statutId: 'acc',
             ordre: 1,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('1981-09-09'),
           },
         ],
@@ -979,7 +1000,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dpu',
             statutId: 'acc',
             ordre: 2,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2017-11-11'),
             duree: 60,
           },
@@ -989,7 +1010,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dex',
             statutId: 'acc',
             ordre: 1,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2017-11-06'),
           },
         ],
@@ -1007,7 +1028,7 @@ describe("phases d'une démarche", () => {
             typeId: 'mfr',
             statutId: 'fai',
             ordre: 2,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2022-07-08'),
             duree: 60,
           },
@@ -1044,7 +1065,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dpu',
             statutId: 'acc',
             ordre: 2,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2017-11-11'),
             duree: 60,
           },
@@ -1054,7 +1075,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dex',
             statutId: 'acc',
             ordre: 1,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2017-11-06'),
           },
         ],
@@ -1072,7 +1093,7 @@ describe("phases d'une démarche", () => {
             typeId: 'mfr',
             statutId: ETAPES_STATUTS.FAIT,
             ordre: 2,
-            isBrouillon: true,
+            isBrouillon: ETAPE_IS_BROUILLON,
             date: toCaminoDate('2022-07-08'),
             duree: 60,
           },
@@ -1105,7 +1126,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dpu',
             statutId: 'rej',
             ordre: 3,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2018-11-11'),
           },
           {
@@ -1114,7 +1135,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dpu',
             statutId: 'acc',
             ordre: 2,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2017-11-11'),
             duree: 60,
           },
@@ -1124,7 +1145,7 @@ describe("phases d'une démarche", () => {
             typeId: 'dex',
             statutId: 'acc',
             ordre: 1,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2017-11-06'),
           },
         ],
@@ -1161,7 +1182,7 @@ describe("phases d'une démarche", () => {
                 ordre: 2,
                 typeId: 'dpu',
                 duree: 36,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2010-11-05'),
                 statutId: 'acc',
                 geojson4326Perimetre: multiPolygonWith4Points,
@@ -1170,7 +1191,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId1,
                 ordre: 1,
                 typeId: 'dex',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2010-10-18'),
                 statutId: 'acc',
               },
@@ -1187,7 +1208,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId2,
                 ordre: 5,
                 typeId: 'apd',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2015-05-13'),
                 statutId: 'fav',
               },
@@ -1195,7 +1216,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId2,
                 ordre: 11,
                 typeId: 'dex',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2015-12-04'),
                 statutId: 'acc',
               },
@@ -1203,7 +1224,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId2,
                 ordre: 9,
                 typeId: 'acg',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2015-11-09'),
                 statutId: 'fav',
               },
@@ -1212,7 +1233,7 @@ describe("phases d'une démarche", () => {
                 ordre: 1,
                 typeId: 'mfr',
                 duree: 60,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2013-10-30'),
                 statutId: 'fai',
               },
@@ -1220,7 +1241,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId2,
                 ordre: 10,
                 typeId: 'acg',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2015-11-12'),
                 statutId: 'fav',
               },
@@ -1228,7 +1249,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId2,
                 ordre: 6,
                 typeId: 'app',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2015-06-04'),
                 statutId: 'fav',
               },
@@ -1236,7 +1257,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId2,
                 ordre: 7,
                 typeId: 'scg',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2015-10-08'),
                 statutId: 'fai',
               },
@@ -1245,7 +1266,7 @@ describe("phases d'une démarche", () => {
                 ordre: 12,
                 typeId: 'dpu',
                 dateFin: toCaminoDate('2018-11-05'),
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2015-12-17'),
                 statutId: 'acc',
               },
@@ -1253,7 +1274,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId2,
                 ordre: 3,
                 typeId: 'spp',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2013-11-19'),
                 statutId: 'fai',
               },
@@ -1261,7 +1282,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId2,
                 ordre: 2,
                 typeId: 'mdp',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2013-10-30'),
                 statutId: 'fai',
               },
@@ -1269,7 +1290,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId2,
                 ordre: 4,
                 typeId: 'apo',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2015-02-11'),
                 statutId: 'fav',
               },
@@ -1277,7 +1298,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId2,
                 ordre: 8,
                 typeId: 'rcg',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2015-10-08'),
                 statutId: 'fav',
               },
@@ -1294,7 +1315,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId3,
                 ordre: 2,
                 typeId: 'mdp',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2015-07-31'),
                 statutId: 'fai',
               },
@@ -1303,7 +1324,7 @@ describe("phases d'une démarche", () => {
                 ordre: 1,
                 typeId: 'mfr',
                 duree: 540,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2015-07-31'),
                 statutId: 'fai',
               },
@@ -1321,7 +1342,7 @@ describe("phases d'une démarche", () => {
                 ordre: 1,
                 typeId: 'mfr',
                 duree: 60,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2018-06-29'),
                 statutId: 'fai',
               },
@@ -1329,7 +1350,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId4,
                 ordre: 12,
                 typeId: 'apd',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2021-07-30'),
                 statutId: 'fav',
               },
@@ -1337,56 +1358,40 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId4,
                 ordre: 4,
                 typeId: 'mco',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2019-06-13'),
                 statutId: 'fai',
               },
               {
                 titreDemarcheId: demarcheId4,
                 ordre: 10,
-                typeId: 'aac',
-                isBrouillon: false,
+                typeId: 'asc',
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2020-02-04'),
-                statutId: 'fre',
+                statutId: 'fai',
               },
               {
                 titreDemarcheId: demarcheId4,
                 ordre: 14,
                 typeId: 'apd',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2021-12-16'),
                 statutId: 'fav',
               },
-              {
-                titreDemarcheId: demarcheId4,
-                ordre: 11,
-                typeId: 'apm',
-                isBrouillon: false,
-                date: toCaminoDate('2020-02-24'),
-                statutId: 'def',
-              },
               {
                 titreDemarcheId: demarcheId4,
                 ordre: 5,
                 typeId: 'rco',
                 duree: 60,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2019-08-30'),
                 statutId: 'fai',
               },
-              {
-                titreDemarcheId: demarcheId4,
-                ordre: 9,
-                typeId: 'apl',
-                isBrouillon: false,
-                date: toCaminoDate('2020-01-31'),
-                statutId: 'def',
-              },
               {
                 titreDemarcheId: demarcheId4,
                 ordre: 2,
                 typeId: 'mdp',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2018-07-04'),
                 statutId: 'fai',
               },
@@ -1394,7 +1399,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId4,
                 ordre: 15,
                 typeId: 'ppu',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2023-01-18'),
                 statutId: 'fai',
               },
@@ -1402,7 +1407,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId4,
                 ordre: 6,
                 typeId: 'mco',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2019-11-19'),
                 statutId: 'fai',
               },
@@ -1410,7 +1415,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId4,
                 ordre: 3,
                 typeId: 'spp',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2018-07-20'),
                 statutId: 'fai',
               },
@@ -1418,7 +1423,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId4,
                 ordre: 16,
                 typeId: 'ppc',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2023-02-08'),
                 statutId: 'ter',
               },
@@ -1426,7 +1431,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId4,
                 ordre: 8,
                 typeId: 'mcr',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2020-01-29'),
                 statutId: 'fav',
               },
@@ -1435,7 +1440,7 @@ describe("phases d'une démarche", () => {
                 ordre: 7,
                 typeId: 'rco',
                 duree: 60,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2019-12-26'),
                 statutId: 'fai',
               },
@@ -1443,7 +1448,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: demarcheId4,
                 ordre: 13,
                 typeId: 'apo',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2021-10-29'),
                 statutId: 'fav',
               },
@@ -1488,7 +1493,7 @@ describe("phases d'une démarche", () => {
                 dateFin: toCaminoDate('2014-11-11'),
                 duree: 60,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2009-11-11'),
                 statutId: 'acc',
                 geojson4326Perimetre: multiPolygonWith4Points,
@@ -1500,7 +1505,7 @@ describe("phases d'une démarche", () => {
                 dateFin: toCaminoDate('2014-11-11'),
                 duree: 60,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2009-10-28'),
                 statutId: 'acc',
                 geojson4326Perimetre: null,
@@ -1521,7 +1526,7 @@ describe("phases d'une démarche", () => {
                 dateFin: null,
                 duree: null,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2014-10-10'),
                 statutId: 'fai',
                 geojson4326Perimetre: null,
@@ -1533,7 +1538,7 @@ describe("phases d'une démarche", () => {
                 dateFin: null,
                 duree: 60,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2014-09-18'),
                 statutId: 'fai',
                 geojson4326Perimetre: null,
@@ -1545,7 +1550,7 @@ describe("phases d'une démarche", () => {
                 dateFin: null,
                 duree: null,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2016-03-24'),
                 statutId: 'rej',
                 geojson4326Perimetre: null,
@@ -1557,7 +1562,7 @@ describe("phases d'une démarche", () => {
                 dateFin: null,
                 duree: null,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2014-09-24'),
                 statutId: 'fai',
                 geojson4326Perimetre: null,
@@ -1597,7 +1602,7 @@ describe("phases d'une démarche", () => {
                 dateFin: toCaminoDate('2009-11-17'),
                 duree: 60,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2004-11-17'),
                 statutId: 'acc',
                 geojson4326Perimetre: multiPolygonWith4Points,
@@ -1609,7 +1614,7 @@ describe("phases d'une démarche", () => {
                 dateFin: toCaminoDate('2009-11-17'),
                 duree: 60,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2004-11-08'),
                 statutId: 'acc',
                 geojson4326Perimetre: null,
@@ -1630,7 +1635,7 @@ describe("phases d'une démarche", () => {
                 dateFin: null,
                 duree: 24,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2009-08-14'),
                 statutId: 'fai',
                 geojson4326Perimetre: null,
@@ -1642,7 +1647,7 @@ describe("phases d'une démarche", () => {
                 dateFin: null,
                 duree: null,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2011-12-05'),
                 statutId: 'fav',
                 geojson4326Perimetre: null,
@@ -1654,7 +1659,7 @@ describe("phases d'une démarche", () => {
                 dateFin: null,
                 duree: null,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2009-11-27'),
                 statutId: 'fai',
                 geojson4326Perimetre: null,
@@ -1666,7 +1671,7 @@ describe("phases d'une démarche", () => {
                 dateFin: null,
                 duree: null,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2009-08-17'),
                 statutId: 'fai',
                 geojson4326Perimetre: null,
@@ -1678,7 +1683,7 @@ describe("phases d'une démarche", () => {
                 dateFin: null,
                 duree: null,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2012-08-24'),
                 statutId: 'fai',
                 geojson4326Perimetre: null,
@@ -1690,7 +1695,7 @@ describe("phases d'une démarche", () => {
                 dateFin: null,
                 duree: null,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2011-10-06'),
                 statutId: 'fav',
                 geojson4326Perimetre: null,
@@ -1702,7 +1707,7 @@ describe("phases d'une démarche", () => {
                 dateFin: null,
                 duree: null,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2011-06-30'),
                 statutId: 'fav',
                 geojson4326Perimetre: null,
@@ -1742,7 +1747,7 @@ describe("phases d'une démarche", () => {
                 dateFin: toCaminoDate('2014-11-11'),
                 duree: 60,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2009-11-11'),
                 statutId: 'acc',
                 geojson4326Perimetre: multiPolygonWith4Points,
@@ -1754,7 +1759,7 @@ describe("phases d'une démarche", () => {
                 dateFin: toCaminoDate('2014-11-11'),
                 duree: 60,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2009-10-28'),
                 statutId: 'acc',
                 geojson4326Perimetre: null,
@@ -1775,7 +1780,7 @@ describe("phases d'une démarche", () => {
                 dateFin: null,
                 duree: null,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2016-03-24'),
                 statutId: 'rej',
                 geojson4326Perimetre: null,
@@ -1787,7 +1792,7 @@ describe("phases d'une démarche", () => {
                 dateFin: null,
                 duree: null,
                 dateDebut: null,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2014-09-24'),
                 statutId: 'fai',
                 geojson4326Perimetre: null,
@@ -1826,7 +1831,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dpu',
                 dateFin: toCaminoDate('2033-11-22'),
                 dateDebut: toCaminoDate('2003-11-22'),
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2003-11-22'),
                 statutId: 'acc',
                 geojson4326Perimetre: null,
@@ -1837,7 +1842,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dex',
                 dateFin: toCaminoDate('2033-11-22'),
                 dateDebut: toCaminoDate('2003-11-22'),
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2003-11-22'),
                 statutId: 'acc',
                 geojson4326Perimetre: null,
@@ -1846,7 +1851,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: newDemarcheId('demarcheIdOctroi'),
                 ordre: 1,
                 typeId: 'dex',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2003-04-26'),
                 statutId: 'rej',
                 geojson4326Perimetre: null,
@@ -1883,7 +1888,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dpu',
                 dateFin: toCaminoDate('2033-11-23'),
                 dateDebut: toCaminoDate('2003-11-23'),
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2003-11-23'),
                 statutId: 'acc',
                 geojson4326Perimetre: null,
@@ -1894,7 +1899,7 @@ describe("phases d'une démarche", () => {
                 typeId: 'dpu',
                 dateFin: toCaminoDate('2033-11-22'),
                 dateDebut: toCaminoDate('2003-11-22'),
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2003-11-22'),
                 statutId: 'rej',
                 geojson4326Perimetre: null,
@@ -1903,7 +1908,7 @@ describe("phases d'une démarche", () => {
                 titreDemarcheId: newDemarcheId('demarcheIdOctroi'),
                 ordre: 1,
                 typeId: 'dex',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('2003-04-26'),
                 statutId: 'acc',
                 geojson4326Perimetre: null,
diff --git a/packages/api/src/business/rules/titre-prop-etape-find.test.ts b/packages/api/src/business/rules/titre-prop-etape-find.test.ts
index ddfc6e33f..784ef087f 100644
--- a/packages/api/src/business/rules/titre-prop-etape-find.test.ts
+++ b/packages/api/src/business/rules/titre-prop-etape-find.test.ts
@@ -8,6 +8,8 @@ import { TitresStatutIds } from 'camino-common/src/static/titresStatuts.js'
 import { newEntrepriseId } from 'camino-common/src/entreprise.js'
 import { ETAPES_TYPES } from 'camino-common/src/static/etapesTypes.js'
 import { ETAPES_STATUTS } from 'camino-common/src/static/etapesStatuts.js'
+import { ETAPE_IS_NOT_BROUILLON, ETAPE_IS_BROUILLON } from 'camino-common/src/etape.js'
+import { km2Validator } from 'camino-common/src/number.js'
 const currentDate = toCaminoDate('2023-04-06')
 
 describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
@@ -28,7 +30,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 typeId: 'dpu',
                 statutId: 'acc',
                 ordre: 2,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1989-01-02'),
                 geojson4326Perimetre: { type: 'Feature', properties: {}, geometry: { type: 'MultiPolygon', coordinates: [[[[1, 2]]]] } },
               },
@@ -37,7 +39,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1989-oct01'),
                 typeId: 'dex',
                 statutId: 'acc',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1989-01-01'),
                 ordre: 1,
               },
@@ -54,7 +56,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1989-mut01'),
                 typeId: 'dpu',
                 statutId: 'acc',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1989-02-03'),
                 ordre: 2,
               },
@@ -62,7 +64,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 id: newEtapeId('h-cx-courdemanges-1989-mut01-dex01'),
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1989-mut01'),
                 typeId: 'dex',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1989-02-02'),
                 statutId: 'acc',
                 ordre: 1,
@@ -92,7 +94,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 typeId: 'dpu',
                 statutId: 'acc',
                 ordre: 2,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1989-01-02'),
                 geojson4326Perimetre: null,
               },
@@ -100,7 +102,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 id: newEtapeId('h-cx-courdemanges-1988-oct01-dex01'),
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1988-oct01'),
                 typeId: 'dex',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1989-01-01'),
                 statutId: 'acc',
                 ordre: 1,
@@ -128,7 +130,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 id: newEtapeId('h-cx-courdemanges-1986-oct01-dpu01'),
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1986-oct01'),
                 typeId: 'dpu',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1986-01-02'),
                 statutId: 'acc',
                 ordre: 2,
@@ -138,7 +140,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1986-oct01'),
                 typeId: 'dex',
                 statutId: 'acc',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1986-01-01'),
                 ordre: 1,
               },
@@ -156,7 +158,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 typeId: 'dpu',
                 statutId: 'acc',
                 ordre: 2,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1986-02-02'),
                 geojson4326Perimetre: { type: 'Feature', properties: {}, geometry: { type: 'MultiPolygon', coordinates: [[[[1, 2]]]] } },
               },
@@ -166,7 +168,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 typeId: 'dex',
                 statutId: 'acc',
                 ordre: 1,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1986-02-01'),
               },
             ],
@@ -194,7 +196,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 typeId: 'dpu',
                 statutId: 'acc',
                 ordre: 2,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1986-01-02'),
               },
               {
@@ -203,7 +205,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 typeId: 'dex',
                 statutId: 'acc',
                 ordre: 1,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1986-01-01'),
               },
             ],
@@ -221,7 +223,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 statutId: 'acc',
                 ordre: 2,
                 geojson4326Perimetre: { type: 'Feature', properties: {}, geometry: { type: 'MultiPolygon', coordinates: [[[[1, 2]]]] } },
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1986-02-02'),
               },
               {
@@ -230,7 +232,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 typeId: 'dex',
                 statutId: 'acc',
                 ordre: 1,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1986-02-01'),
               },
             ],
@@ -258,7 +260,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1985-mut01'),
                 typeId: 'dpu',
                 statutId: 'acc',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1985-01-01'),
                 ordre: 2,
                 geojson4326Perimetre: { type: 'Feature', properties: {}, geometry: { type: 'MultiPolygon', coordinates: [[[[1, 2]]]] } },
@@ -267,7 +269,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 id: newEtapeId('h-cx-courdemanges-1985-mut01-dex01'),
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1985-mut01'),
                 typeId: 'dex',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1985-01-01'),
                 statutId: 'acc',
                 ordre: 1,
@@ -285,7 +287,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 typeId: 'dpu',
                 statutId: 'acc',
                 ordre: 2,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1985-02-02'),
                 geojson4326Perimetre: { type: 'Feature', properties: {}, geometry: { type: 'MultiPolygon', coordinates: [[[[1, 2]]]] } },
               },
@@ -295,7 +297,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 typeId: 'dex',
                 statutId: 'acc',
                 ordre: 1,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1985-02-01'),
               },
             ],
@@ -323,14 +325,14 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 typeId: 'dpu',
                 statutId: 'rej',
                 ordre: 2,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1984-01-01'),
                 geojson4326Perimetre: { type: 'Feature', properties: {}, geometry: { type: 'MultiPolygon', coordinates: [[[[1, 2]]]] } },
               },
               {
                 id: newEtapeId('h-cx-courdemanges-1984-oct01-dex01'),
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1984-oct01'),
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1984-01-01'),
                 typeId: 'dex',
                 statutId: 'rej',
@@ -357,7 +359,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
             etapes: [
               {
                 id: newEtapeId('h-cx-courdemanges-1983-oct01-mfr01'),
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1983-01-01'),
                 titreDemarcheId: newDemarcheId(newDemarcheId('h-cx-courdemanges-1983-oct01')),
                 typeId: 'mfr',
@@ -389,7 +391,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1981-pro01'),
                 typeId: 'dpu',
                 statutId: 'acc',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1981-01-01'),
                 ordre: 1,
                 geojson4326Perimetre: { type: 'Feature', properties: {}, geometry: { type: 'MultiPolygon', coordinates: [[[[1, 2]]]] } },
@@ -405,7 +407,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 id: newEtapeId('h-cx-courdemanges-1981-oct01-dpu01'),
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1981-oct01'),
                 typeId: 'dpu',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1981-01-01'),
                 statutId: 'acc',
                 ordre: 1,
@@ -448,7 +450,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 id: newEtapeId('h-cx-courdemanges-1981-oct01-dpu01'),
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1981-oct01'),
                 typeId: 'dpu',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1981-01-01'),
                 statutId: 'acc',
                 ordre: 1,
@@ -477,7 +479,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1981-mut01'),
                 typeId: 'dpu',
                 statutId: 'acc',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1981-01-01'),
                 ordre: 1,
                 geojson4326Perimetre: { type: 'Feature', properties: {}, geometry: { type: 'MultiPolygon', coordinates: [[[[1, 2]]]] } },
@@ -493,7 +495,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 id: newEtapeId('h-cx-courdemanges-1981-oct01-dpu01'),
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1981-oct01'),
                 typeId: 'dpu',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1981-01-01'),
                 statutId: 'acc',
                 ordre: 1,
@@ -522,14 +524,14 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
               etapes: [
                 {
                   id: newEtapeId('h-cx-courdemanges-1981-pro01-dpu01'),
-                  isBrouillon: false,
+                  isBrouillon: ETAPE_IS_NOT_BROUILLON,
                   date: toCaminoDate('1981-01-01'),
                   titreDemarcheId: newDemarcheId('h-cx-courdemanges-1981-pro01'),
-                  typeId: 'aac',
-                  statutId: 'acc',
+                  typeId: 'asc',
+                  statutId: 'fai',
                   ordre: 1,
                   geojson4326Perimetre: { type: 'Feature', properties: {}, geometry: { type: 'MultiPolygon', coordinates: [[[[1, 2]]]] } },
-                  surface: 3.2,
+                  surface: km2Validator.parse(3.2),
                   substances: ['auru'],
                   communes: ['paris' as unknown as ICommune],
                 },
@@ -547,7 +549,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                   typeId: 'dpu',
                   statutId: 'acc',
                   ordre: 1,
-                  isBrouillon: false,
+                  isBrouillon: ETAPE_IS_NOT_BROUILLON,
                   date: toCaminoDate('1981-01-01'),
                   geojson4326Perimetre: {
                     type: 'Feature',
@@ -564,7 +566,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                       ],
                     },
                   },
-                  surface: 3,
+                  surface: km2Validator.parse(3),
                   substances: ['arge'],
                   communes: ['tours'] as unknown as ICommune[],
                 },
@@ -591,14 +593,14 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
             etapes: [
               {
                 id: newEtapeId('h-cx-courdemanges-1981-pro01-dpu01'),
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1981-01-01'),
                 titreDemarcheId: newDemarcheId(newDemarcheId('h-cx-courdemanges-1981-pro01')),
-                typeId: 'aac',
-                statutId: 'acc',
+                typeId: 'asc',
+                statutId: 'fai',
                 ordre: 1,
                 geojson4326Perimetre: { type: 'Feature', properties: {}, geometry: { type: 'MultiPolygon', coordinates: [[[[1, 2]]]] } },
-                surface: 3.2,
+                surface: km2Validator.parse(3.2),
                 substances: ['auru'],
                 titulaireIds: [newEntrepriseId('titulaire2')],
                 amodiataireIds: [newEntrepriseId('amodiataire2')],
@@ -616,7 +618,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 titreDemarcheId: newDemarcheId(newDemarcheId('h-cx-courdemanges-1981-oct01')),
                 typeId: 'dpu',
                 statutId: 'acc',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1981-01-01'),
                 ordre: 1,
                 geojson4326Perimetre: {
@@ -634,7 +636,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                     ],
                   },
                 },
-                surface: 3,
+                surface: km2Validator.parse(3),
                 substances: ['arge'],
                 titulaireIds: [newEntrepriseId('titulaire1')],
                 amodiataireIds: [newEntrepriseId('amodiataire1')],
@@ -664,7 +666,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 typeId: 'mfr',
                 statutId: 'fai',
                 ordre: 1,
-                isBrouillon: true,
+                isBrouillon: ETAPE_IS_BROUILLON,
                 date: toCaminoDate('1982-01-01'),
                 dateFin: toCaminoDate('2018-12-31'),
                 titulaireIds: [newEntrepriseId('fr-123456789')],
@@ -699,7 +701,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 typeId: 'dpu',
                 statutId: 'acc',
                 ordre: 1,
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1982-01-01'),
                 dateFin: toCaminoDate('2018-12-31'),
                 amodiataireIds: [newEntrepriseId('fr-123456789')],
@@ -731,7 +733,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 statutId: 'acc',
                 ordre: 1,
                 dateFin: toCaminoDate('4018-12-31'),
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1982-01-01'),
                 amodiataireIds: [newEntrepriseId('fr-123456789')],
               },
@@ -767,7 +769,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1981-amo01'),
                 typeId: 'dpu',
                 statutId: 'acc',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1981-01-01'),
                 ordre: 1,
                 amodiataireIds: [newEntrepriseId('fr-123456789')],
@@ -783,7 +785,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
                 id: newEtapeId('h-cx-courdemanges-1981-pro01-dpu01'),
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1981-pro01'),
                 typeId: 'dpu',
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1981-01-01'),
                 statutId: 'acc',
                 ordre: 1,
@@ -798,7 +800,7 @@ describe("id de l'étape d'une propriété valide (dé-normalise)", () => {
               {
                 id: newEtapeId('h-cx-courdemanges-1981-oct01-dpu01'),
                 titreDemarcheId: newDemarcheId('h-cx-courdemanges-1981-oct01'),
-                isBrouillon: false,
+                isBrouillon: ETAPE_IS_NOT_BROUILLON,
                 date: toCaminoDate('1981-01-01'),
                 typeId: 'dpu',
                 statutId: 'acc',
@@ -843,7 +845,7 @@ describe("id de l'étape qui a un contenu", () => {
               id: newEtapeId('etape-id'),
               titreDemarcheId: newDemarcheId('demarche-id'),
               typeId: 'dpu',
-              isBrouillon: false,
+              isBrouillon: ETAPE_IS_NOT_BROUILLON,
               date: toCaminoDate('2020-01-01'),
               statutId: 'acc',
               contenu: { arm: { mecanisee: true } },
@@ -872,7 +874,7 @@ describe("id de l'étape qui a un contenu", () => {
               id: newEtapeId('etape-id'),
               titreDemarcheId: newDemarcheId('demarche-id'),
               typeId: 'dpu',
-              isBrouillon: false,
+              isBrouillon: ETAPE_IS_NOT_BROUILLON,
               date: toCaminoDate('2020-01-03'),
               statutId: 'acc',
               contenu: { arm: { mecanisee: true } },
@@ -888,7 +890,7 @@ describe("id de l'étape qui a un contenu", () => {
               id: newEtapeId('etape-id-2'),
               titreDemarcheId: newDemarcheId('demarche-id'),
               typeId: 'dex',
-              isBrouillon: false,
+              isBrouillon: ETAPE_IS_NOT_BROUILLON,
               date: toCaminoDate('2020-01-01'),
               statutId: 'fai',
             },
@@ -912,7 +914,7 @@ describe("id de l'étape qui a un contenu", () => {
               id: newEtapeId('etape-id'),
               titreDemarcheId: newDemarcheId('demarche-id'),
               typeId: 'dpu',
-              isBrouillon: false,
+              isBrouillon: ETAPE_IS_NOT_BROUILLON,
               date: toCaminoDate('2020-01-01'),
               statutId: 'acc',
               contenu: { arm: { mecanisee: true } },
@@ -939,7 +941,7 @@ describe("id de l'étape qui a un contenu", () => {
               id: newEtapeId('etape-id'),
               titreDemarcheId: newDemarcheId('demarche-id'),
               typeId: 'mfr',
-              isBrouillon: true,
+              isBrouillon: ETAPE_IS_BROUILLON,
               date: toCaminoDate('2020-01-03'),
               statutId: 'fai',
               contenu: { arm: { mecanisee: true } },
@@ -965,7 +967,7 @@ describe("id de l'étape qui a un contenu", () => {
               id: newEtapeId('etape-id'),
               titreDemarcheId: newDemarcheId('demarche-id'),
               typeId: 'mfr',
-              isBrouillon: true,
+              isBrouillon: ETAPE_IS_BROUILLON,
               date: toCaminoDate('2020-01-03'),
               statutId: 'fai',
               contenu: { arm: { mecanisee: true } },
diff --git a/packages/api/src/business/utils/titre-etape-heritage-contenu-find.test.ts b/packages/api/src/business/utils/titre-etape-heritage-contenu-find.test.ts
index 7771056d7..607b19ba0 100644
--- a/packages/api/src/business/utils/titre-etape-heritage-contenu-find.test.ts
+++ b/packages/api/src/business/utils/titre-etape-heritage-contenu-find.test.ts
@@ -162,13 +162,13 @@ describe('retourne le contenu de l’étape en fonction de son héritage', () =>
       [prevTitreEtape.id]: [
         {
           id: 'section',
-          elements: [{ id: 'element', type: 'date' }],
+          elements: [{ id: 'element', type: 'date', optionnel: false }],
         },
       ],
       [titreEtape.id]: [
         {
           id: 'section',
-          elements: [{ id: 'element', type: 'date' }],
+          elements: [{ id: 'element', type: 'date', optionnel: false }],
         },
       ],
     }
@@ -199,8 +199,8 @@ describe('retourne le contenu de l’étape en fonction de son héritage', () =>
     titreEtape.heritageContenu!.section.element.actif = true
 
     const dictionary: Record<string, DeepReadonly<Section>[]> = {
-      [prevTitreEtape.id]: [{ id: 'section', elements: [{ id: 'element', type: 'text' }] }],
-      [titreEtape.id]: [{ id: 'section', elements: [{ id: 'element', type: 'text' }] }],
+      [prevTitreEtape.id]: [{ id: 'section', elements: [{ id: 'element', type: 'text', optionnel: false }] }],
+      [titreEtape.id]: [{ id: 'section', elements: [{ id: 'element', type: 'text', optionnel: false }] }],
     }
 
     expect(titreEtapeHeritageContenuFind([prevTitreEtape, titreEtape], titreEtape, dictionary)).toEqual({
@@ -231,8 +231,8 @@ describe('retourne le contenu de l’étape en fonction de son héritage', () =>
     titreEtape.heritageContenu!.section.element.etapeId = newEtapeId('prevEtapeId')
 
     const dictionary: Record<string, DeepReadonly<Section>[]> = {
-      [prevTitreEtape.id]: [{ id: 'section', elements: [{ id: 'element', type: 'text' }] }],
-      [titreEtape.id]: [{ id: 'section', elements: [{ id: 'element', type: 'text' }] }],
+      [prevTitreEtape.id]: [{ id: 'section', elements: [{ id: 'element', type: 'text', optionnel: false }] }],
+      [titreEtape.id]: [{ id: 'section', elements: [{ id: 'element', type: 'text', optionnel: false }] }],
     }
 
     expect(titreEtapeHeritageContenuFind([prevTitreEtape, titreEtape], titreEtape, dictionary)).toEqual({
@@ -263,8 +263,8 @@ describe('retourne le contenu de l’étape en fonction de son héritage', () =>
     titreEtape.heritageContenu!.section.element.etapeId = newEtapeId('prevEtapeId')
 
     const dictionary: Record<string, DeepReadonly<Section>[]> = {
-      [prevTitreEtape.id]: [{ id: 'section', elements: [{ id: 'element', type: 'text' }] }],
-      [titreEtape.id]: [{ id: 'section', elements: [{ id: 'element', type: 'text' }] }],
+      [prevTitreEtape.id]: [{ id: 'section', elements: [{ id: 'element', type: 'text', optionnel: false }] }],
+      [titreEtape.id]: [{ id: 'section', elements: [{ id: 'element', type: 'text', optionnel: false }] }],
     }
 
     expect(titreEtapeHeritageContenuFind([prevTitreEtape, titreEtape], titreEtape, dictionary)).toEqual({
diff --git a/packages/api/src/business/utils/titre-etape-heritage-props-find.ts b/packages/api/src/business/utils/titre-etape-heritage-props-find.ts
index 334940c21..693254822 100644
--- a/packages/api/src/business/utils/titre-etape-heritage-props-find.ts
+++ b/packages/api/src/business/utils/titre-etape-heritage-props-find.ts
@@ -3,9 +3,10 @@ import { objectClone } from '../../tools/index.js'
 import { SubstanceLegaleId } from 'camino-common/src/static/substancesLegales.js'
 import { CaminoDate } from 'camino-common/src/date.js'
 import { FeatureMultiPolygon, equalGeojson } from 'camino-common/src/perimetre.js'
-import { exhaustiveCheck, isNotNullNorUndefined } from 'camino-common/src/typescript-tools.js'
+import { exhaustiveCheck, isNotNullNorUndefined, isNullOrUndefined } from 'camino-common/src/typescript-tools.js'
 import { ETAPE_HERITAGE_PROPS, EtapeHeritageProps } from 'camino-common/src/heritage.js'
 import { EntrepriseId } from 'camino-common/src/entreprise'
+import { ZERO_KM2 } from 'camino-common/src/number.js'
 
 const propertyArrayCheck = (newValue: string[], prevValue: string[], propId: string) => {
   if (prevValue?.length !== newValue?.length) {
@@ -61,7 +62,7 @@ export const titreEtapeHeritagePropsFind = (titreEtape: ITitreEtape, prevTitreEt
   ETAPE_HERITAGE_PROPS.forEach(propId => {
     const heritage = newTitreEtape.heritageProps![propId]
 
-    if (!heritage) {
+    if (isNullOrUndefined(heritage)) {
       newTitreEtape = objectClone(newTitreEtape)
       hasChanged = true
       newTitreEtape.heritageProps![propId] = { actif: false, etapeId: null }
@@ -104,7 +105,7 @@ export const titreEtapeHeritagePropsFind = (titreEtape: ITitreEtape, prevTitreEt
                 geojsonOriginePerimetre: prevTitreEtape.geojsonOriginePerimetre,
                 geojsonOrigineForages: prevTitreEtape.geojsonOrigineForages,
                 geojson4326Forages: prevTitreEtape.geojson4326Forages,
-                surface: prevTitreEtape.surface ?? 0,
+                surface: prevTitreEtape.surface ?? ZERO_KM2,
               }
               newTitreEtape = { ...newTitreEtape, ...perimetre }
               break
diff --git a/packages/api/src/business/utils/titre-etapes-sort.test.ts b/packages/api/src/business/utils/titre-etapes-sort.test.ts
index 8e60181fc..1a0bd5c66 100644
--- a/packages/api/src/business/utils/titre-etapes-sort.test.ts
+++ b/packages/api/src/business/utils/titre-etapes-sort.test.ts
@@ -6,6 +6,7 @@ import { DEMARCHES_TYPES_IDS } from 'camino-common/src/static/demarchesTypes.js'
 import { TITRES_TYPES_IDS } from 'camino-common/src/static/titresTypes.js'
 import { ETAPES_TYPES } from 'camino-common/src/static/etapesTypes.js'
 import { TitreEtapeForMachine } from '../rules-demarches/machine-common.js'
+import { ETAPE_IS_BROUILLON, ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
 
 const titreEtapesSortedDescResult = [
   { typeId: 'dpu', ordre: 2, date: '1988-03-11' },
@@ -55,7 +56,7 @@ describe('trie les étapes', () => {
         ordre: 2,
         date: toCaminoDate('1988-03-06'),
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         communes: [],
         contenu: {},
         surface: null,
@@ -66,7 +67,7 @@ describe('trie les étapes', () => {
         ordre: 1,
         date: toCaminoDate('1988-03-06'),
         statutId: 'fav',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         communes: [],
         contenu: {},
         surface: null,
@@ -87,7 +88,7 @@ describe('trie les étapes', () => {
         ordre: 2,
         date: toCaminoDate('1988-03-06'),
         statutId: 'fav',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         communes: [],
         contenu: {},
         surface: null,
@@ -98,7 +99,7 @@ describe('trie les étapes', () => {
         ordre: 2,
         date: toCaminoDate('1988-03-06'),
         statutId: 'fav',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         communes: [],
         contenu: {},
         surface: null,
@@ -109,7 +110,7 @@ describe('trie les étapes', () => {
         ordre: 2,
         date: toCaminoDate('1988-03-06'),
         statutId: 'fav',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         communes: [],
         contenu: {},
         surface: null,
@@ -145,7 +146,7 @@ describe('trie les étapes', () => {
         ordre: 1,
         date: toCaminoDate('2020-01-01'),
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         communes: [],
         contenu: {},
         surface: null,
@@ -156,7 +157,7 @@ describe('trie les étapes', () => {
         ordre: 2,
         date: toCaminoDate('2020-01-01'),
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         communes: [],
         contenu: {},
         surface: null,
@@ -167,7 +168,7 @@ describe('trie les étapes', () => {
         ordre: 3,
         date: toCaminoDate('2020-01-01'),
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         surface: null,
         communes: [],
         contenu: {},
@@ -187,7 +188,7 @@ describe('trie les étapes', () => {
         typeId: 'mcr',
         date: toCaminoDate('2020-01-01'),
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         surface: null,
         ordre: 1,
         communes: [],
@@ -200,7 +201,7 @@ describe('trie les étapes', () => {
         id: newEtapeId('2'),
         date: toCaminoDate('2020-01-01'),
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         surface: null,
         ordre: 2,
         communes: [],
@@ -211,7 +212,7 @@ describe('trie les étapes', () => {
         typeId: 'vfd',
         date: toCaminoDate('2020-01-01'),
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         surface: null,
         ordre: 3,
         communes: [],
@@ -230,7 +231,7 @@ describe('trie les étapes', () => {
       typeId: 'mcd',
       date: toCaminoDate('2020-01-01'),
       statutId: 'fai',
-      isBrouillon: false,
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
       surface: null,
       ordre: 5,
       contenu: {},
@@ -244,7 +245,7 @@ describe('trie les étapes', () => {
         typeId: 'mfr',
         date: toCaminoDate('2020-01-01'),
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         surface: null,
         contenu: {},
         communes: [],
@@ -255,7 +256,7 @@ describe('trie les étapes', () => {
         typeId: 'mdp',
         date: toCaminoDate('2020-01-01'),
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         surface: null,
         contenu: {},
         communes: [],
@@ -266,7 +267,7 @@ describe('trie les étapes', () => {
         typeId: 'mcd',
         date: toCaminoDate('2020-01-01'),
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         surface: null,
         contenu: {},
         communes: [],
@@ -277,7 +278,7 @@ describe('trie les étapes', () => {
         typeId: 'rcd',
         date: toCaminoDate('2020-01-01'),
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         surface: null,
         contenu: {},
         communes: [],
@@ -288,4 +289,100 @@ describe('trie les étapes', () => {
     const result = titreEtapesSortAscByDate(etapes, newDemarcheId(), DEMARCHES_TYPES_IDS.Octroi, TITRES_TYPES_IDS.AUTORISATION_DE_RECHERCHE_METAUX)
     expect(result).toContain(secondMcd)
   })
+
+  test('tri les étapes via la machine, et remet les étapes en brouillon en fonction de leur date', () => {
+    const etapes: TitreEtapeForMachine[] = [
+      {
+        id: newEtapeId('mfr'),
+        ordre: 1,
+        typeId: 'mfr',
+        date: toCaminoDate('2020-01-01'),
+        statutId: 'fai',
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
+        surface: null,
+        contenu: {},
+        communes: [],
+      },
+      {
+        id: newEtapeId('mdp'),
+        ordre: 2,
+        typeId: 'mdp',
+        date: toCaminoDate('2020-01-02'),
+        statutId: 'fai',
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
+        surface: null,
+        contenu: {},
+        communes: [],
+      },
+      {
+        id: newEtapeId('pfd'),
+        ordre: 3,
+        typeId: 'pfd',
+        date: toCaminoDate('2020-01-03'),
+        statutId: 'fai',
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
+        surface: null,
+        contenu: {},
+        communes: [],
+      },
+      {
+        id: newEtapeId('mcp'),
+        ordre: 4,
+        typeId: 'mcp',
+        date: toCaminoDate('2020-01-04'),
+        statutId: 'fav',
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
+        surface: null,
+        contenu: {},
+        communes: [],
+      },
+      {
+        id: newEtapeId('vfd'),
+        ordre: 5,
+        typeId: 'vfd',
+        date: toCaminoDate('2020-01-05'),
+        statutId: 'fai',
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
+        surface: null,
+        contenu: {},
+        communes: [],
+      },
+      {
+        id: newEtapeId('asc'),
+        ordre: 0,
+        typeId: 'asc',
+        date: toCaminoDate('2020-01-07'),
+        statutId: 'fai',
+        isBrouillon: ETAPE_IS_BROUILLON,
+        surface: null,
+        contenu: {},
+        communes: [],
+      },
+      {
+        id: newEtapeId('mcr'),
+        ordre: 6,
+        typeId: 'pfd',
+        date: toCaminoDate('2020-01-06'),
+        statutId: 'fai',
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
+        surface: null,
+        contenu: {},
+        communes: [],
+      },
+    ]
+
+    const result = titreEtapesSortAscByDate(etapes, newDemarcheId(), DEMARCHES_TYPES_IDS.Octroi, TITRES_TYPES_IDS.AUTORISATION_DE_RECHERCHE_METAUX)
+    expect(result.map(({ id }) => id)).toMatchInlineSnapshot(`
+      [
+        "mfr",
+        "mdp",
+        "pfd",
+        "mcp",
+        "vfd",
+        "mcr",
+        "asc",
+      ]
+    `)
+    expect(result[result.length - 1].id).toBe('asc')
+  })
 })
diff --git a/packages/api/src/business/utils/titre-etapes-sort.ts b/packages/api/src/business/utils/titre-etapes-sort.ts
index efab1ddc2..8c51ece17 100644
--- a/packages/api/src/business/utils/titre-etapes-sort.ts
+++ b/packages/api/src/business/utils/titre-etapes-sort.ts
@@ -5,13 +5,14 @@ import { TitreTypeId } from 'camino-common/src/static/titresTypes.js'
 import { DemarcheTypeId } from 'camino-common/src/static/demarchesTypes.js'
 import { getEtapesTDE } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/index.js'
 import { DemarcheId } from 'camino-common/src/demarche.js'
+import { isNotNullNorUndefinedNorEmpty } from 'camino-common/src/typescript-tools.js'
+import { ETAPE_IS_BROUILLON } from 'camino-common/src/etape.js'
 
 // classe les étapes selon leur ordre inverse: 3, 2, 1.
 export const titreEtapesSortDescByOrdre = <T extends Pick<ITitreEtape, 'ordre'>>(titreEtapes: T[]): T[] => titreEtapes.slice().sort((a, b) => b.ordre! - a.ordre!)
 
 // classe les étapes selon leur ordre: 1, 2, 3, …
 export const titreEtapesSortAscByOrdre = <T extends Pick<ITitreEtape, 'ordre'>>(titreEtapes: T[]): T[] => titreEtapes.slice().sort((a, b) => a.ordre! - b.ordre!)
-
 // classe les étapes selon leur dates, ordre et etapesTypes.ordre le cas échéant
 export const titreEtapesSortAscByDate = <T extends TitreEtapeForMachine>(titreEtapes: T[], demarcheId: DemarcheId, demarcheTypeId: DemarcheTypeId, titreTypeId: TitreTypeId): T[] => {
   const demarcheDefinition = demarcheDefinitionFind(titreTypeId, demarcheTypeId, titreEtapes, demarcheId)
@@ -30,6 +31,18 @@ export const titreEtapesSortAscByDate = <T extends TitreEtapeForMachine>(titreEt
       }
     }
 
+    // On remet les brouillons à la bonne date, car la machine les a ignorés
+    const etapesInBrouillon = titreEtapes.filter(({ isBrouillon }) => isBrouillon)
+    if (isNotNullNorUndefinedNorEmpty(etapesInBrouillon)) {
+      return [...result, ...etapesInBrouillon].sort((a, b) => {
+        if (a.isBrouillon === ETAPE_IS_BROUILLON || b.isBrouillon === ETAPE_IS_BROUILLON) {
+          return a.date.localeCompare(b.date)
+        }
+
+        return 0
+      })
+    }
+
     return result
   } else {
     return titreEtapes.slice().sort((a, b) => {
diff --git a/packages/api/src/business/validations/titre-demarche-etat-validate.test.ts b/packages/api/src/business/validations/titre-demarche-etat-validate.test.ts
index b5dae1778..6c4074e9d 100644
--- a/packages/api/src/business/validations/titre-demarche-etat-validate.test.ts
+++ b/packages/api/src/business/validations/titre-demarche-etat-validate.test.ts
@@ -6,6 +6,7 @@ import { EtapesTypesEtapesStatuts } from 'camino-common/src/static/etapesTypesEt
 import { describe, test, expect, vi } from 'vitest'
 import { toCaminoDate } from 'camino-common/src/date.js'
 import { EtapeTypeId } from 'camino-common/src/static/etapesTypes.js'
+import { ETAPE_IS_BROUILLON, ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape.js'
 
 console.warn = vi.fn()
 describe('teste titreDemarcheUpdatedEtatValidate', () => {
@@ -16,7 +17,7 @@ describe('teste titreDemarcheUpdatedEtatValidate', () => {
         typeId: 'arm',
         demarches: [{ typeId: 'oct' }],
       } as ITitre,
-      { typeId: 'mfr', date: '2030-01-01', isBrouillon: true } as Pick<
+      { typeId: 'mfr', date: '2030-01-01', isBrouillon: ETAPE_IS_BROUILLON } as Pick<
         Required<ITitreEtape>,
         'id' | 'statutId' | 'typeId' | 'date' | 'ordre' | 'contenu' | 'titreDemarcheId' | 'communes' | 'isBrouillon'
       >,
@@ -34,10 +35,10 @@ describe('teste titreDemarcheUpdatedEtatValidate', () => {
         typeId: 'arm',
         demarches: [{ typeId: 'pro' }, { typeId: 'oct' }],
       } as ITitre,
-      { id: newEtapeId(), typeId: 'mdp', statutId: 'fai', isBrouillon: false, date: toCaminoDate('2022-05-04'), communes: null, contenu: null, ordre: 1, surface: null },
+      { id: newEtapeId(), typeId: 'mdp', statutId: 'fai', isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2022-05-04'), communes: null, contenu: null, surface: null },
       newDemarcheId(),
 
-      [{ id: newEtapeId('1'), typeId: 'mfr', statutId: 'fai', isBrouillon: false, date: toCaminoDate('2022-05-03'), communes: null, contenu: null, ordre: 1, surface: null }]
+      [{ id: newEtapeId('1'), typeId: 'mfr', statutId: 'fai', isBrouillon: ETAPE_IS_NOT_BROUILLON, date: toCaminoDate('2022-05-03'), communes: null, contenu: null, ordre: 1, surface: null }]
     )
 
     expect(valid).toHaveLength(0)
@@ -54,18 +55,17 @@ describe('teste titreDemarcheUpdatedEtatValidate', () => {
         id: newEtapeId('1'),
         typeId: 'mfr',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         date: toCaminoDate('2022-05-04'),
         communes: null,
         contenu: null,
-        ordre: 1,
         surface: null,
       },
       newDemarcheId(),
 
       [
-        { id: newEtapeId('1'), typeId: 'mfr', date: toCaminoDate('2022-05-03'), statutId: 'fai', isBrouillon: false, communes: null, contenu: null, ordre: 1, surface: null },
-        { id: newEtapeId('2'), typeId: 'mdp', date: toCaminoDate('2022-05-04'), statutId: 'fai', isBrouillon: false, communes: null, contenu: null, ordre: 2, surface: null },
+        { id: newEtapeId('1'), typeId: 'mfr', date: toCaminoDate('2022-05-03'), statutId: 'fai', isBrouillon: ETAPE_IS_NOT_BROUILLON, communes: null, contenu: null, ordre: 1, surface: null },
+        { id: newEtapeId('2'), typeId: 'mdp', date: toCaminoDate('2022-05-04'), statutId: 'fai', isBrouillon: ETAPE_IS_NOT_BROUILLON, communes: null, contenu: null, ordre: 2, surface: null },
       ]
     )
 
@@ -79,7 +79,10 @@ describe('teste titreDemarcheUpdatedEtatValidate', () => {
         typeId: 'arm',
         demarches: [{ typeId: 'oct' }],
       } as ITitre,
-      { id: '1', typeId: 'mfr', isBrouillon: true } as Pick<Required<ITitreEtape>, 'id' | 'statutId' | 'typeId' | 'date' | 'ordre' | 'contenu' | 'titreDemarcheId' | 'communes' | 'isBrouillon'>,
+      { id: '1', typeId: 'mfr', isBrouillon: ETAPE_IS_BROUILLON } as Pick<
+        Required<ITitreEtape>,
+        'id' | 'statutId' | 'typeId' | 'date' | 'ordre' | 'contenu' | 'titreDemarcheId' | 'communes' | 'isBrouillon'
+      >,
       newDemarcheId(),
 
       [{ id: '1', typeId: 'mfr', date: '2000-01-01' }] as Pick<Required<ITitreEtape>, 'id' | 'statutId' | 'typeId' | 'date' | 'ordre' | 'contenu' | 'titreDemarcheId' | 'communes' | 'isBrouillon'>[],
@@ -96,7 +99,10 @@ describe('teste titreDemarcheUpdatedEtatValidate', () => {
         typeId: 'arm',
         demarches: [{ typeId: 'oct' }],
       } as ITitre,
-      { id: '1', typeId: 'mfr', isBrouillon: true } as Pick<Required<ITitreEtape>, 'id' | 'statutId' | 'typeId' | 'date' | 'ordre' | 'contenu' | 'titreDemarcheId' | 'communes' | 'isBrouillon'>,
+      { id: '1', typeId: 'mfr', isBrouillon: ETAPE_IS_BROUILLON } as Pick<
+        Required<ITitreEtape>,
+        'id' | 'statutId' | 'typeId' | 'date' | 'ordre' | 'contenu' | 'titreDemarcheId' | 'communes' | 'isBrouillon'
+      >,
       newDemarcheId(),
 
       []
@@ -197,7 +203,7 @@ describe('teste titreDemarcheUpdatedEtatValidate', () => {
         typeId: 'axm',
         demarches: [{ typeId: 'oct' }],
       } as ITitre,
-      { typeId: 'mfr', statutId: 'fai', isBrouillon: true, date: '2030-01-01' } as Pick<
+      { typeId: 'mfr', statutId: 'fai', isBrouillon: ETAPE_IS_BROUILLON, date: '2030-01-01' } as Pick<
         Required<ITitreEtape>,
         'id' | 'statutId' | 'typeId' | 'date' | 'ordre' | 'contenu' | 'titreDemarcheId' | 'communes' | 'isBrouillon'
       >,
@@ -214,13 +220,13 @@ describe('teste titreDemarcheUpdatedEtatValidate', () => {
         typeId: 'axm',
         demarches: [{ typeId: 'oct' }],
       } as ITitre,
-      { typeId: 'mfr', statutId: 'fai', isBrouillon: true } as Pick<
+      { typeId: 'mfr', statutId: 'fai', isBrouillon: ETAPE_IS_BROUILLON } as Pick<
         Required<ITitreEtape>,
         'id' | 'statutId' | 'typeId' | 'date' | 'ordre' | 'contenu' | 'titreDemarcheId' | 'communes' | 'isBrouillon'
       >,
       newDemarcheId(),
 
-      [{ id: '1', typeId: 'dae', statutId: 'exe', isBrouillon: false }] as Pick<
+      [{ id: '1', typeId: 'dae', statutId: 'exe', isBrouillon: ETAPE_IS_NOT_BROUILLON }] as Pick<
         Required<ITitreEtape>,
         'id' | 'statutId' | 'typeId' | 'date' | 'ordre' | 'contenu' | 'titreDemarcheId' | 'communes' | 'isBrouillon'
       >[]
@@ -236,14 +242,14 @@ describe('teste titreDemarcheUpdatedEtatValidate', () => {
         typeId: 'axm',
         demarches: [{ typeId: 'oct' }],
       } as ITitre,
-      { id: '1', typeId: 'mfr', statutId: 'fai', isBrouillon: true } as Pick<
+      { id: '1', typeId: 'mfr', statutId: 'fai', isBrouillon: ETAPE_IS_BROUILLON } as Pick<
         Required<ITitreEtape>,
         'id' | 'statutId' | 'typeId' | 'date' | 'ordre' | 'contenu' | 'titreDemarcheId' | 'communes' | 'isBrouillon'
       >,
       newDemarcheId(),
 
       [
-        { id: '1', typeId: 'mfr', statutId: 'fai', isBrouillon: true },
+        { id: '1', typeId: 'mfr', statutId: 'fai', isBrouillon: ETAPE_IS_BROUILLON },
         { id: '2', typeId: 'dae' },
       ] as Pick<Required<ITitreEtape>, 'id' | 'statutId' | 'typeId' | 'date' | 'ordre' | 'contenu' | 'titreDemarcheId' | 'communes' | 'isBrouillon'>[]
     )
@@ -259,14 +265,14 @@ describe('teste titreDemarcheUpdatedEtatValidate', () => {
           typeId: 'axm',
           demarches: [{ typeId: 'oct' }],
         } as ITitre,
-        { id: '3', typeId: 'mfr', statutId: 'fai', isBrouillon: true } as Pick<
+        { id: '3', typeId: 'mfr', statutId: 'fai', isBrouillon: ETAPE_IS_BROUILLON } as Pick<
           Required<ITitreEtape>,
           'id' | 'statutId' | 'typeId' | 'date' | 'ordre' | 'contenu' | 'titreDemarcheId' | 'communes' | 'isBrouillon'
         >,
         newDemarcheId(),
 
         [
-          { id: '1', typeId: 'mfr', statutId: 'fai', isBrouillon: true },
+          { id: '1', typeId: 'mfr', statutId: 'fai', isBrouillon: ETAPE_IS_BROUILLON },
           { id: '2', typeId: 'dae' },
         ] as Pick<Required<ITitreEtape>, 'id' | 'statutId' | 'typeId' | 'date' | 'ordre' | 'contenu' | 'titreDemarcheId' | 'communes' | 'isBrouillon'>[]
       )
@@ -285,10 +291,9 @@ describe('teste titreDemarcheUpdatedEtatValidate', () => {
           typeId: 'aaa' as EtapeTypeId,
           date: toCaminoDate('2022-01-01'),
           statutId: 'fai',
-          isBrouillon: false,
+          isBrouillon: ETAPE_IS_NOT_BROUILLON,
           communes: null,
           contenu: null,
-          ordre: 1,
           surface: null,
         },
         newDemarcheId(),
@@ -298,7 +303,7 @@ describe('teste titreDemarcheUpdatedEtatValidate', () => {
             id: newEtapeId('1'),
             typeId: EtapesTypesEtapesStatuts.demande.FAIT.etapeTypeId,
             statutId: EtapesTypesEtapesStatuts.demande.FAIT.etapeStatutId,
-            isBrouillon: true,
+            isBrouillon: ETAPE_IS_BROUILLON,
             date: toCaminoDate('2021-01-01'),
             communes: null,
             contenu: null,
@@ -309,7 +314,7 @@ describe('teste titreDemarcheUpdatedEtatValidate', () => {
             id: newEtapeId('2'),
             typeId: EtapesTypesEtapesStatuts.decisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_.REQUIS.etapeTypeId,
             statutId: EtapesTypesEtapesStatuts.decisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_.REQUIS.etapeStatutId,
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2021-01-02'),
             communes: null,
             contenu: null,
diff --git a/packages/api/src/business/validations/titre-demarche-etat-validate.ts b/packages/api/src/business/validations/titre-demarche-etat-validate.ts
index 6d9756ea1..a4594a612 100644
--- a/packages/api/src/business/validations/titre-demarche-etat-validate.ts
+++ b/packages/api/src/business/validations/titre-demarche-etat-validate.ts
@@ -7,6 +7,7 @@ import { titreEtapeForMachineValidator, toMachineEtapes } from '../rules-demarch
 import { titreEtapeTypeAndStatusValidate } from './titre-etape-type-and-status-validate.js'
 import { DemarcheId } from 'camino-common/src/demarche.js'
 import { DemarcheTypeId } from 'camino-common/src/static/demarchesTypes.js'
+import { ETAPE_IS_BROUILLON } from 'camino-common/src/etape.js'
 
 const titreDemarcheEtapesBuild = <T extends Pick<Partial<ITitreEtape>, 'id'>>(titreEtape: DeepReadonly<T>, suppression: boolean, titreDemarcheEtapes?: DeepReadonly<T[]> | null): DeepReadonly<T[]> => {
   if (isNullOrUndefinedOrEmpty(titreDemarcheEtapes)) {
@@ -40,8 +41,8 @@ const titreDemarcheEtapesBuild = <T extends Pick<Partial<ITitreEtape>, 'id'>>(ti
 // est valide par rapport aux définitions des types d'étape
 export const titreDemarcheUpdatedEtatValidate = (
   demarcheTypeId: DemarcheTypeId,
-  titre: ITitre,
-  titreEtape: Pick<Partial<ITitreEtape>, 'id'> & Pick<ITitreEtape, 'statutId' | 'typeId' | 'date' | 'ordre' | 'contenu' | 'communes' | 'surface' | 'isBrouillon'>,
+  titre: Pick<ITitre, 'typeId' | 'demarches'>,
+  titreEtape: Pick<Partial<ITitreEtape>, 'id'> & Pick<ITitreEtape, 'statutId' | 'typeId' | 'date' | 'contenu' | 'surface' | 'communes' | 'isBrouillon'>,
   demarcheId: DemarcheId,
   titreDemarcheEtapes?: Pick<ITitreEtape, 'id' | 'statutId' | 'typeId' | 'date' | 'ordre' | 'contenu' | 'communes' | 'surface' | 'isBrouillon'>[] | null,
   suppression = false
@@ -68,7 +69,7 @@ export const titreDemarcheUpdatedEtatValidate = (
   }
 
   // si on essaye d’ajouter ou de modifier une demande non déposée
-  if (titreEtape.typeId === 'mfr' && titreEtape.isBrouillon && !suppression) {
+  if (titreEtape.typeId === 'mfr' && titreEtape.isBrouillon === ETAPE_IS_BROUILLON && !suppression) {
     const etapesDemande = titreDemarcheEtapes?.filter(te => te.typeId === 'mfr')
 
     // si c’est la création de la première demande, pas besoin de faire de vérification avec l’arbre
@@ -86,7 +87,7 @@ export const titreDemarcheUpdatedEtatValidate = (
 
   // vérifie que toutes les étapes existent dans l’arbre
   try {
-    const etapes = titreDemarcheEtapesNew.map(etape => titreEtapeForMachineValidator.omit({ id: true }).partial({ ordre: true }).parse(etape))
+    const etapes = titreDemarcheEtapesNew.map(etape => titreEtapeForMachineValidator.omit({ id: true, ordre: true }).parse(etape))
     const ok = demarcheDefinition.machine.isEtapesOk(demarcheDefinition.machine.orderMachine(toMachineEtapes(etapes)))
     if (!ok) {
       titreDemarchesErrors.push('la démarche n’est pas valide')
diff --git a/packages/api/src/business/validations/titre-etape-type-and-status-validate.test.ts b/packages/api/src/business/validations/titre-etape-type-and-status-validate.test.ts
index 21c20b4aa..5efd17091 100644
--- a/packages/api/src/business/validations/titre-etape-type-and-status-validate.test.ts
+++ b/packages/api/src/business/validations/titre-etape-type-and-status-validate.test.ts
@@ -10,7 +10,7 @@ describe("valide le type et le statut d'une étape en fonction du type de titre
   })
 
   test("le statut de l'étape ne correspond pas au type de titre et de démarche", () => {
-    expect(titreEtapeTypeAndStatusValidate('arm', 'oct', 'mdp', 'rej')).toEqual(['statut de l\'étape "rej" invalide pour une type d\'étape mdp pour une démarche de type octroi'])
+    expect(titreEtapeTypeAndStatusValidate('arm', 'oct', 'mdp', 'rej')).toEqual(['statut de l\'étape "rej" invalide pour une étape mdp pour une démarche de type octroi'])
   })
 
   test("le type de l'étape n'est pas compatible avec le type de titre et de démarche", () => {
diff --git a/packages/api/src/business/validations/titre-etape-type-and-status-validate.ts b/packages/api/src/business/validations/titre-etape-type-and-status-validate.ts
index 8a94c6072..c1c1a4a0c 100644
--- a/packages/api/src/business/validations/titre-etape-type-and-status-validate.ts
+++ b/packages/api/src/business/validations/titre-etape-type-and-status-validate.ts
@@ -20,7 +20,7 @@ export const titreEtapeTypeAndStatusValidate = (titreTypeId: TitreTypeId, demarc
   const titreEtapeStatut = etapesStatuts.find(etapeStatut => etapeStatut.id === etapeStatutId)
 
   if (!titreEtapeStatut) {
-    return [`statut de l'étape "${etapeStatutId}" invalide pour une type d'étape ${etapeTypeId} pour une démarche de type ${DemarchesTypes[demarcheTypeId].nom}`]
+    return [`statut de l'étape "${etapeStatutId}" invalide pour une étape ${etapeTypeId} pour une démarche de type ${DemarchesTypes[demarcheTypeId].nom}`]
   }
 
   return []
diff --git a/packages/api/src/business/validations/titre-etape-updation-validate.test.ts b/packages/api/src/business/validations/titre-etape-updation-validate.test.ts
index f90abfe1d..c42197bba 100644
--- a/packages/api/src/business/validations/titre-etape-updation-validate.test.ts
+++ b/packages/api/src/business/validations/titre-etape-updation-validate.test.ts
@@ -1,57 +1,224 @@
-import { ITitreEtape, ITitreDemarche, ITitre } from '../../types.js'
+import { ITitreDemarche, ITitre } from '../../types.js'
 
 import { titreEtapeUpdationValidate } from './titre-etape-updation-validate.js'
 import { userSuper } from '../../database/user-super.js'
 import { describe, test, expect } from 'vitest'
-
+import { FlattenEtape } from 'camino-common/src/etape-form.js'
+import { ETAPE_IS_BROUILLON, ETAPE_IS_NOT_BROUILLON, etapeIdValidator, etapeSlugValidator } from 'camino-common/src/etape.js'
+import { caminoDateValidator, toCaminoDate } from 'camino-common/src/date.js'
+import { demarcheIdValidator } from 'camino-common/src/demarche.js'
+import { entrepriseIdValidator } from 'camino-common/src/entreprise.js'
+import { titreIdValidator } from 'camino-common/src/validators/titres.js'
+import { km2Validator } from 'camino-common/src/number.js'
+const etapeBrouillonValide: FlattenEtape = {
+  id: etapeIdValidator.parse('etapeId'),
+  titulaires: {
+    value: [],
+    heritee: false,
+    etapeHeritee: null,
+  },
+  amodiataires: {
+    value: [],
+    heritee: false,
+    etapeHeritee: null,
+  },
+  dateDebut: {
+    value: null,
+    heritee: false,
+    etapeHeritee: null,
+  },
+  dateFin: {
+    value: null,
+    heritee: false,
+    etapeHeritee: null,
+  },
+  perimetre: {
+    value: null,
+    heritee: false,
+    etapeHeritee: null,
+  },
+  duree: {
+    value: null,
+    heritee: false,
+    etapeHeritee: null,
+  },
+  substances: {
+    value: ['auru'],
+    heritee: false,
+    etapeHeritee: null,
+  },
+  contenu: {},
+  date: caminoDateValidator.parse('2024-01-01'),
+  isBrouillon: ETAPE_IS_BROUILLON,
+  notes: '',
+  slug: etapeSlugValidator.parse('etapeSlug'),
+  statutId: 'fai',
+  titreDemarcheId: demarcheIdValidator.parse('demarcheId'),
+  typeId: 'mfr',
+}
+const etapeComplete: FlattenEtape = {
+  ...etapeBrouillonValide,
+  isBrouillon: ETAPE_IS_NOT_BROUILLON,
+  typeId: 'mod',
+  contenu: { arm: { mecanise: { value: true, heritee: true, etapeHeritee: { date: toCaminoDate('2022-01-01'), etapeTypeId: 'mfr', value: true } } } },
+}
+const demarcheId = demarcheIdValidator.parse('demarcheId')
+const titreDemarche: ITitreDemarche = {
+  id: demarcheId,
+  typeId: 'oct',
+  titreId: titreIdValidator.parse('titreId'),
+  etapes: [
+    {
+      date: toCaminoDate('2022-01-01'),
+      id: etapeIdValidator.parse('mfrid'),
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
+      statutId: 'fai',
+      typeId: 'mfr',
+      titreDemarcheId: demarcheId,
+      communes: [],
+      surface: km2Validator.parse(12),
+    },
+  ],
+}
+const titreARM: Pick<ITitre, 'typeId' | 'demarches'> = {
+  typeId: 'arm',
+  demarches: [titreDemarche],
+}
 describe('valide l’étape avant de l’enregistrer', () => {
   test("une ARM ou une AXM ne peuvent pas recevoir d'amodiataires", () => {
-    const titreDemarche = { typeId: 'oct' } as unknown as ITitreDemarche
-
     // ARM
-    let titreEtape = {
-      typeId: 'mfr',
-      amodiataireIds: [],
-    } as unknown as ITitreEtape
-
-    let titre = {
-      id: 'foo',
-      typeId: 'arm',
-    } as unknown as ITitre
-
-    let errors = titreEtapeUpdationValidate(titreEtape, titreDemarche, titre, [], [], [], userSuper, null, null)
-    expect(errors).not.toContain("une autorisation de recherche ne peut pas inclure d'amodiataires")
-    expect(errors).not.toContain("une autorisation d'exploitation ne peut pas inclure d'amodiataires")
-
-    titreEtape = {
+    const titreEtape: FlattenEtape = {
+      id: etapeIdValidator.parse('etapeId'),
+      titulaires: {
+        value: [],
+        heritee: false,
+        etapeHeritee: null,
+      },
+      amodiataires: {
+        value: [],
+        heritee: false,
+        etapeHeritee: null,
+      },
+      dateDebut: {
+        value: caminoDateValidator.parse('2024-01-01'),
+        heritee: false,
+        etapeHeritee: null,
+      },
+      dateFin: {
+        value: caminoDateValidator.parse('2030-01-01'),
+        heritee: false,
+        etapeHeritee: null,
+      },
+      perimetre: {
+        value: null,
+        heritee: false,
+        etapeHeritee: null,
+      },
+      duree: {
+        value: null,
+        heritee: false,
+        etapeHeritee: null,
+      },
+      substances: {
+        value: [],
+        heritee: false,
+        etapeHeritee: null,
+      },
+      contenu: {},
+      date: caminoDateValidator.parse('2024-01-01'),
+      isBrouillon: ETAPE_IS_NOT_BROUILLON,
+      notes: '',
+      slug: etapeSlugValidator.parse('etapeSlug'),
+      statutId: 'fai',
+      titreDemarcheId: demarcheIdValidator.parse('demarcheId'),
       typeId: 'mfr',
-      amodiataireIds: ['foo'],
-    } as unknown as ITitreEtape
-
-    errors = titreEtapeUpdationValidate(titreEtape, titreDemarche, titre, [], [], [], userSuper, null, null)
-    expect(errors).toContain("une autorisation de recherche ne peut pas inclure d'amodiataires")
+    }
 
+    let errors = titreEtapeUpdationValidate(titreEtape, titreDemarche, titreARM, [], [], [], [], [], userSuper, null, null)
+    expect(errors).toMatchInlineSnapshot(`
+      [
+        "impossible d’éditer la date de début",
+        "impossible d’éditer la date d’échéance",
+        "Les substances sont obligatoires",
+        "la durée est obligatoire",
+        "Les titulaires sont obligatoires",
+        "l’élément "Prospection mécanisée" de la section "Caractéristiques ARM" est obligatoire",
+        "Le périmètre est obligatoire",
+        "le document "Documents cartographiques" (car) est obligatoire",
+        "le document "Dossier de demande" (dom) est obligatoire",
+        "le document "Formulaire de demande" (for) est obligatoire",
+        "le document "Justificatif de paiement" (jpa) est obligatoire",
+        "Il y a des documents d'entreprise obligatoires, mais il n'y a pas de titulaire",
+      ]
+    `)
     // AXM
-    titreEtape = {
-      typeId: 'mfr',
-      amodiataireIds: [],
-    } as unknown as ITitreEtape
-
-    titre = {
-      id: 'foo',
+    const titreAxm: Pick<ITitre, 'typeId'> = {
       typeId: 'axm',
-    } as unknown as ITitre
+    }
 
-    errors = titreEtapeUpdationValidate(titreEtape, titreDemarche, titre, [], [], [], userSuper, null, null)
-    expect(errors).not.toContain("une autorisation d'exploitation ne peut pas inclure d'amodiataires")
-    expect(errors).not.toContain("une autorisation de recherche ne peut pas inclure d'amodiataires")
-
-    titreEtape = {
-      typeId: 'mfr',
-      amodiataireIds: ['foo'],
-    } as unknown as ITitreEtape
+    errors = titreEtapeUpdationValidate(titreEtape, titreDemarche, titreAxm, [], [], [], [], [], userSuper, null, null)
+    expect(errors).toMatchInlineSnapshot(`
+      [
+        "impossible d’éditer la date de début",
+        "impossible d’éditer la date d’échéance",
+        "Les substances sont obligatoires",
+        "la durée est obligatoire",
+        "Les titulaires sont obligatoires",
+        "Le périmètre est obligatoire",
+        "le document "Documents cartographiques" (car) est obligatoire",
+        "le document "Lettre de demande" (lem) est obligatoire",
+        "le document "Identification de matériel" (idm) est obligatoire",
+        "le document "Mesures prévues pour réhabiliter le site " (mes) est obligatoire",
+        "le document "Méthodes pour l'exécution des travaux" (met) est obligatoire",
+        "le document "Programme des travaux " (prg) est obligatoire",
+        "le document "Schéma de pénétration du massif forestier" (sch) est obligatoire",
+        "Il y a des documents d'entreprise obligatoires, mais il n'y a pas de titulaire",
+      ]
+    `)
+  })
+  test('valide brouillon', () => {
+    const errors = titreEtapeUpdationValidate(etapeBrouillonValide, { ...titreDemarche, etapes: [] }, titreARM, [], [], [], [], [], userSuper, null, null)
+    expect(errors).toStrictEqual([])
+  })
+  test('valide complète', () => {
+    const errors = titreEtapeUpdationValidate(etapeComplete, titreDemarche, titreARM, [{ etape_document_type_id: 'doe' }], [], [], [], [], userSuper, null, null)
+    expect(errors).toStrictEqual([])
+  })
 
-    errors = titreEtapeUpdationValidate(titreEtape, titreDemarche, titre, [], [], [], userSuper, null, null)
-    expect(errors).toContain("une autorisation d'exploitation ne peut pas inclure d'amodiataires")
+  test('valide complète avec héritage', () => {
+    const errors = titreEtapeUpdationValidate(
+      { ...etapeComplete, duree: { value: 12, heritee: true, etapeHeritee: { date: toCaminoDate('2022-01-01'), etapeTypeId: 'mfr', value: 12 } } },
+      titreDemarche,
+      titreARM,
+      [{ etape_document_type_id: 'doe' }],
+      [],
+      [],
+      [],
+      [],
+      userSuper,
+      null,
+      null
+    )
+    expect(errors).toStrictEqual([])
+  })
+  test('ne peut pas éditer les amodiataires sur une ARM', () => {
+    const errors = titreEtapeUpdationValidate(
+      { ...etapeComplete, amodiataires: { value: [entrepriseIdValidator.parse('entrepriseIdAmodiataire')], heritee: false, etapeHeritee: null } },
+      titreDemarche,
+      titreARM,
+      [{ etape_document_type_id: 'doe' }],
+      [],
+      [],
+      [],
+      [],
+      userSuper,
+      null,
+      null
+    )
+    expect(errors).toMatchInlineSnapshot(`
+      [
+        "une autorisation de recherche ne peut pas inclure d'amodiataires",
+      ]
+    `)
   })
 })
diff --git a/packages/api/src/business/validations/titre-etape-updation-validate.ts b/packages/api/src/business/validations/titre-etape-updation-validate.ts
index 1bf2d2557..08211ae0c 100644
--- a/packages/api/src/business/validations/titre-etape-updation-validate.ts
+++ b/packages/api/src/business/validations/titre-etape-updation-validate.ts
@@ -1,28 +1,28 @@
 import { ITitreEtape, ITitreDemarche, ITitre } from '../../types.js'
 
 import { titreDemarcheUpdatedEtatValidate } from './titre-demarche-etat-validate.js'
-import { heritageContenuValidate } from './utils/heritage-contenu-validate.js'
-import { propsNumbersCheck } from './utils/props-numbers-check.js'
 import { contenuNumbersCheck } from './utils/contenu-numbers-check.js'
-import { propsDatesCheck } from './utils/props-dates-check.js'
 import { contenuDatesCheck } from './utils/contenu-dates-check.js'
 import { canEditAmodiataires, canEditDates, canEditDuree, canEditTitulaires, isEtapeComplete } from 'camino-common/src/permissions/titres-etapes.js'
 import { User } from 'camino-common/src/roles.js'
 import { SDOMZoneId } from 'camino-common/src/static/sdom.js'
 import { getSections } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.js'
 import { EntrepriseDocument, EntrepriseId } from 'camino-common/src/entreprise.js'
-import { EtapeDocument, GetEtapeDocumentsByEtapeIdAslDocument, GetEtapeDocumentsByEtapeIdDaeDocument } from 'camino-common/src/etape.js'
-const numberProps = ['duree', 'surface'] as unknown as [keyof ITitreEtape]
-
-const dateProps = ['date', 'dateDebut', 'dateFin'] as unknown as [keyof ITitreEtape]
+import { ETAPE_IS_NOT_BROUILLON, EtapeAvis, EtapeDocument, GetEtapeDocumentsByEtapeIdAslDocument, GetEtapeDocumentsByEtapeIdDaeDocument } from 'camino-common/src/etape.js'
+import { CommuneId } from 'camino-common/src/static/communes.js'
+import { isNotNullNorUndefined, isNullOrUndefined } from 'camino-common/src/typescript-tools.js'
+import { FlattenEtape } from 'camino-common/src/etape-form.js'
+import { flattenContenuToSimpleContenu } from 'camino-common/src/sections.js'
 
 export const titreEtapeUpdationValidate = (
-  titreEtape: ITitreEtape,
+  etape: Pick<Partial<FlattenEtape>, 'id'> & Omit<FlattenEtape, 'id'>,
   titreDemarche: ITitreDemarche,
-  titre: ITitre,
+  titre: Pick<ITitre, 'typeId' | 'demarches'>,
   documents: Pick<EtapeDocument, 'etape_document_type_id'>[],
-  entrepriseDocuments: Pick<EntrepriseDocument, 'entreprise_document_type_id'>[],
+  etapeAvis: Pick<EtapeAvis, 'avis_type_id'>[],
+  entrepriseDocuments: Pick<EntrepriseDocument, 'entreprise_document_type_id' | 'entreprise_id'>[],
   sdomZones: SDOMZoneId[] | null | undefined,
+  communes: CommuneId[] | null | undefined,
   user: User,
   daeDocument: Omit<GetEtapeDocumentsByEtapeIdDaeDocument, 'id'> | null,
   aslDocument: Omit<GetEtapeDocumentsByEtapeIdAslDocument, 'id'> | null,
@@ -30,89 +30,58 @@ export const titreEtapeUpdationValidate = (
 ) => {
   const errors: string[] = []
 
-  const sections = getSections(titre.typeId, titreDemarche.typeId, titreEtape.typeId)
-
-  // le champ heritageContenu est cohérent avec les sections
-  const errorsHeritageContenu = heritageContenuValidate(sections, titreEtape.heritageContenu)
-
-  errors.push(...errorsHeritageContenu)
+  const sections = getSections(titre.typeId, titreDemarche.typeId, etape.typeId)
 
-  if (!(titreEtape.heritageProps?.duree?.actif ?? false) && !canEditDuree(titre.typeId, titreDemarche.typeId) && (titreEtape.duree ?? 0) !== (titreEtapeOld?.duree ?? 0)) {
+  if (!etape.duree.heritee && !canEditDuree(titre.typeId, titreDemarche.typeId) && (etape.duree.value ?? 0) !== (titreEtapeOld?.duree ?? 0)) {
     errors.push('impossible d’éditer la durée')
   }
 
-  if (!canEditDates(titre.typeId, titreDemarche.typeId, titreEtape.typeId, user)) {
-    if ((titreEtape.dateDebut ?? '') !== (titreEtapeOld?.dateDebut ?? '')) {
+  if (!canEditDates(titre.typeId, titreDemarche.typeId, etape.typeId, user)) {
+    if (!etape.dateDebut.heritee && (etape.dateDebut.value ?? '') !== (titreEtapeOld?.dateDebut ?? '')) {
       errors.push('impossible d’éditer la date de début')
     }
-    if ((titreEtape.dateFin ?? '') !== (titreEtapeOld?.dateFin ?? '')) {
+    if (!etape.dateFin.heritee && (etape.dateFin.value ?? '') !== (titreEtapeOld?.dateFin ?? '')) {
       errors.push('impossible d’éditer la date d’échéance')
     }
   }
 
-  if (!canEditTitulaires(titre.typeId, user) && entreprisesHaveChanged(titreEtape.titulaireIds ?? [], titreEtapeOld?.titulaireIds ?? [])) {
-    errors.push(`une autorisation ${titre.typeId === 'arm' ? 'de recherche' : "d'exploitation"} ne peut pas inclure de titulaires`)
+  if (!etape.titulaires.heritee && !canEditTitulaires(titre.typeId, user) && entreprisesHaveChanged(etape.titulaires.value ?? [], titreEtapeOld?.titulaireIds ?? [])) {
+    errors.push("impossible d'éditer les titulaires")
   }
 
-  if (!canEditAmodiataires(titre.typeId, user) && entreprisesHaveChanged(titreEtape.amodiataireIds ?? [], titreEtapeOld?.amodiataireIds ?? [])) {
+  if (!etape.amodiataires.heritee && !canEditAmodiataires(titre.typeId, user) && entreprisesHaveChanged(etape.amodiataires.value ?? [], titreEtapeOld?.amodiataireIds ?? [])) {
     errors.push(`une autorisation ${titre.typeId === 'arm' ? 'de recherche' : "d'exploitation"} ne peut pas inclure d'amodiataires`)
   }
 
   if (sections.length) {
-    // 1. les champs number ne peuvent avoir une durée négative
-    const errorsNumbers = propsNumbersCheck(numberProps, titreEtape)
-    if (errorsNumbers) {
-      errors.push(errorsNumbers)
-    }
-
-    if (titreEtape.contenu) {
-      const errorsContenu = contenuNumbersCheck(sections, titreEtape.contenu)
-      if (errorsContenu) {
+    if (isNotNullNorUndefined(etape.contenu)) {
+      const errorsContenu = contenuNumbersCheck(sections, etape.contenu)
+      if (isNotNullNorUndefined(errorsContenu)) {
         errors.push(errorsContenu)
       }
     }
 
-    // 2. les champs date ne peuvent avoir une date invalide
-    const errorsDates = propsDatesCheck<ITitreEtape>(dateProps, titreEtape)
-    if (errorsDates) {
-      errors.push(errorsDates)
-    }
-
-    // 3. les champs date des sections ne peuvent avoir une date invalide
-    if (titreEtape.contenu) {
-      const errorsContenu = contenuDatesCheck(sections, titreEtape.contenu)
-      if (errorsContenu) {
+    if (isNotNullNorUndefined(etape.contenu)) {
+      const errorsContenu = contenuDatesCheck(sections, etape.contenu)
+      if (isNotNullNorUndefined(errorsContenu)) {
         errors.push(errorsContenu)
       }
     }
 
     if (
-      titreEtape.typeId !== 'mfr' &&
-      titreEtape.heritageContenu &&
-      titreEtape.heritageContenu.arm &&
-      titreEtape.heritageContenu.arm.mecanise &&
-      !titreEtape.heritageContenu.arm.mecanise.actif &&
-      titreEtape.contenu &&
-      titreEtape.contenu.arm &&
-      titreEtape.contenu.arm.mecanise
+      etape.typeId !== 'mfr' &&
+      isNotNullNorUndefined(etape.contenu.arm?.mecanise) &&
+      etape.contenu.arm.mecanise.value === true &&
+      !etape.contenu.arm.mecanise.heritee &&
+      (isNullOrUndefined(etape.contenu.arm.mecanise.etapeHeritee?.value) || etape.contenu.arm.mecanise.etapeHeritee.value === false)
     ) {
       errors.push('une demande non mécanisée ne peut pas devenir mécanisée')
     }
   }
 
   // 4. si l’étape n’est pas en cours de construction
-  if (!titreEtape.isBrouillon) {
-    const etapeComplete = isEtapeComplete(
-      { ...titreEtape, contenu: titreEtape.contenu ?? {} },
-      titre.typeId,
-      titreDemarche.typeId,
-      documents,
-      entrepriseDocuments,
-      sdomZones,
-      daeDocument,
-      aslDocument,
-      user
-    )
+  if (etape.isBrouillon === ETAPE_IS_NOT_BROUILLON) {
+    const etapeComplete = isEtapeComplete(etape, titre.typeId, titreDemarche.typeId, documents, entrepriseDocuments, sdomZones, communes ?? [], daeDocument, aslDocument, etapeAvis, user)
     if (!etapeComplete.valid) {
       errors.push(...etapeComplete.errors)
     }
@@ -122,14 +91,30 @@ export const titreEtapeUpdationValidate = (
     return errors
   }
 
-  return titreEtapeUpdationBusinessValidate(titreEtape, titreDemarche, titre)
+  return titreEtapeUpdationBusinessValidate(etape, titreDemarche, titre, isNotNullNorUndefined(communes) ? communes.map(communeId => ({ id: communeId })) : communes)
 }
 
-const titreEtapeUpdationBusinessValidate = (titreEtape: ITitreEtape, titreDemarche: ITitreDemarche, titre: ITitre) => {
+const titreEtapeUpdationBusinessValidate = (
+  titreEtape: Pick<Partial<FlattenEtape>, 'id'> & Pick<FlattenEtape, 'statutId' | 'typeId' | 'date' | 'contenu' | 'perimetre' | 'isBrouillon'>,
+  titreDemarche: ITitreDemarche,
+  titre: Pick<ITitre, 'typeId' | 'demarches'>,
+  communes: ITitreEtape['communes']
+) => {
   const errors = []
   // 1. la date de l'étape est possible
   // en fonction de l'ordre des types d'étapes de la démarche
-  const demarcheUpdatedErrors = titreDemarcheUpdatedEtatValidate(titreDemarche.typeId, titre, titreEtape, titreDemarche.id, titreDemarche.etapes!)
+  const demarcheUpdatedErrors = titreDemarcheUpdatedEtatValidate(
+    titreDemarche.typeId,
+    titre,
+    {
+      ...titreEtape,
+      contenu: flattenContenuToSimpleContenu(titreEtape.contenu),
+      surface: titreEtape.perimetre.value?.surface ?? null,
+      communes,
+    },
+    titreDemarche.id,
+    titreDemarche.etapes!
+  )
   if (demarcheUpdatedErrors.length) {
     errors.push(...demarcheUpdatedErrors)
   }
diff --git a/packages/api/src/business/validations/utils/contenu-dates-check.test.ts b/packages/api/src/business/validations/utils/contenu-dates-check.test.ts
index 57e517406..5e977ac6b 100644
--- a/packages/api/src/business/validations/utils/contenu-dates-check.test.ts
+++ b/packages/api/src/business/validations/utils/contenu-dates-check.test.ts
@@ -2,13 +2,14 @@ import { contenuDatesCheck } from './contenu-dates-check.js'
 import { describe, test, expect } from 'vitest'
 import { Section } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.js'
 import { DeepReadonly } from 'camino-common/src/typescript-tools.js'
+import { CaminoDate } from 'camino-common/src/date.js'
 
 const sections: DeepReadonly<Section[]> = [
   {
     id: 'section',
     elements: [
-      { id: 'date', type: 'date' },
-      { id: 'mot', type: 'text' },
+      { id: 'date', type: 'date', optionnel: false },
+      { id: 'mot', type: 'text', optionnel: false },
     ],
   },
 ]
@@ -17,7 +18,7 @@ describe("vérifie la validité des propriétés dont le type est date d'une ét
   test("la sections n'a pas d'éléments", () => {
     expect(
       contenuDatesCheck([{ id: 'section-sans-elements', elements: [] }], {
-        section: { date: '2000-01-01', mot: 'coucou' },
+        section: { date: { value: '2000-01-01' as CaminoDate }, mot: { value: 'coucou' } },
       })
     ).toEqual(null)
   })
@@ -25,7 +26,7 @@ describe("vérifie la validité des propriétés dont le type est date d'une ét
   test('les propriétés de type date ne contiennent pas de valeur négative', () => {
     expect(
       contenuDatesCheck(sections, {
-        section: { date: '2000-01-01', mot: 'coucou' },
+        section: { date: { value: '2000-01-01' as CaminoDate }, mot: { value: 'coucou' } },
       })
     ).toEqual(null)
   })
@@ -33,8 +34,8 @@ describe("vérifie la validité des propriétés dont le type est date d'une ét
   test("les dates n'ont pas de coordonnées de référence", () => {
     expect(
       contenuDatesCheck(sections, {
-        section: { date: '2000-42-42', mot: 'coucou' },
+        section: { date: { value: '2000-42-42' as CaminoDate }, mot: { value: 'coucou' } },
       })
-    ).toBe('le champ "date" n\'est pas une date valide')
+    ).toContain('le champ "date" est invalide')
   })
 })
diff --git a/packages/api/src/business/validations/utils/contenu-dates-check.ts b/packages/api/src/business/validations/utils/contenu-dates-check.ts
index 83d295cdf..084c1b030 100644
--- a/packages/api/src/business/validations/utils/contenu-dates-check.ts
+++ b/packages/api/src/business/validations/utils/contenu-dates-check.ts
@@ -1,17 +1,17 @@
-import { dateValidate } from 'camino-common/src/date.js'
+import { caminoDateValidator } from 'camino-common/src/date.js'
 import { Section } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.js'
-import { DeepReadonly } from 'camino-common/src/typescript-tools.js'
-import { IContenu } from '../../../types.js'
+import { DeepReadonly, isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty } from 'camino-common/src/typescript-tools.js'
+import { FlattenedContenuElement } from 'camino-common/src/etape-form.js'
 
-export const contenuDatesCheck = (sections: DeepReadonly<Section[]>, contenu: IContenu) => {
+export const contenuDatesCheck = (sections: DeepReadonly<Section[]>, contenu: Record<string, Record<string, Pick<FlattenedContenuElement, 'value'>>>): string | null => {
   const errors = sections.reduce(
     (errors: string[], section) =>
-      section.elements && contenu[section.id]
+      isNotNullNorUndefinedNorEmpty(section.elements) && isNotNullNorUndefined(contenu[section.id])
         ? section.elements.reduce((errors, element) => {
-            if (element.type === 'date' && contenu[section.id][element.id]) {
-              const dateCheck = dateValidate(contenu[section.id][element.id] as string)
-              if (!dateCheck.valid) {
-                errors.push(`le champ "${element.id}" n'est pas une date valide`)
+            if (element.type === 'date' && isNotNullNorUndefined(contenu[section.id][element.id])) {
+              const { success, error } = caminoDateValidator.safeParse(contenu[section.id][element.id].value)
+              if (!success) {
+                errors.push(`le champ "${element.id}" est invalide`, error.message)
               }
             }
 
diff --git a/packages/api/src/business/validations/utils/contenu-numbers-check.test.ts b/packages/api/src/business/validations/utils/contenu-numbers-check.test.ts
index 146a520e1..0542f262a 100644
--- a/packages/api/src/business/validations/utils/contenu-numbers-check.test.ts
+++ b/packages/api/src/business/validations/utils/contenu-numbers-check.test.ts
@@ -3,20 +3,20 @@ import { describe, test, expect } from 'vitest'
 
 describe('vérifie la validité du contenu de type nombre', () => {
   test("la sections n'a pas d'éléments", () => {
-    expect(contenuNumbersCheck([{ id: 'section-sans-elements', elements: [] }], { section: { number: 123 } })).toEqual(null)
+    expect(contenuNumbersCheck([{ id: 'section-sans-elements', elements: [] }], { section: { number: { value: 123 } } })).toEqual(null)
   })
 
   test('un champ de section dont le type est un nombre et qui a une valeur positive est validée', () => {
-    expect(contenuNumbersCheck([{ id: 'section', elements: [{ id: 'number', type: 'number' }] }], { section: { number: 123 } })).toBeNull()
+    expect(contenuNumbersCheck([{ id: 'section', elements: [{ id: 'number', type: 'number', optionnel: false }] }], { section: { number: { value: 123 } } })).toBeNull()
   })
 
   test('un champ de section dont le type est un nombre et qui a une valeur négative retourne une erreur', () => {
     expect(
-      contenuNumbersCheck([{ id: 'section', elements: [{ id: 'number', type: 'number' }] }], {
+      contenuNumbersCheck([{ id: 'section', elements: [{ id: 'number', type: 'number', optionnel: false }] }], {
         section: {
-          number: -1,
+          number: { value: -1 },
         },
       })
-    ).toEqual('le champ "number" ne peut pas avoir une valeur négative')
+    ).toContain('le champ "number" est invalide')
   })
 })
diff --git a/packages/api/src/business/validations/utils/contenu-numbers-check.ts b/packages/api/src/business/validations/utils/contenu-numbers-check.ts
index a565b6fe9..2029bb4e3 100644
--- a/packages/api/src/business/validations/utils/contenu-numbers-check.ts
+++ b/packages/api/src/business/validations/utils/contenu-numbers-check.ts
@@ -1,17 +1,19 @@
 import { Section } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.js'
-import { DeepReadonly } from 'camino-common/src/typescript-tools.js'
-import { IContenu } from '../../../types.js'
+import { DeepReadonly, isNotNullNorUndefined, isNullOrUndefinedOrEmpty } from 'camino-common/src/typescript-tools.js'
+import { numberElementValueValidator } from 'camino-common/src/sections.js'
+import { FlattenedContenuElement } from 'camino-common/src/etape-form.js'
 
-export const contenuNumbersCheck = (sections: DeepReadonly<Section[]>, contenu: IContenu) => {
+export const contenuNumbersCheck = (sections: DeepReadonly<Section[]>, contenu: Record<string, Record<string, Pick<FlattenedContenuElement, 'value'>>>) => {
   const errors = sections.reduce((errors: string[], section) => {
-    if (!section.elements) return errors
+    if (isNullOrUndefinedOrEmpty(section.elements)) return errors
 
     return section.elements.reduce((errors, element) => {
-      if (element.type === 'number' && contenu[section.id] && contenu[section.id][element.id]) {
-        const value = contenu[section.id][element.id]
+      if (element.type === 'number' && isNotNullNorUndefined(contenu[section.id]?.[element.id])) {
+        const value = contenu[section.id][element.id].value
 
-        if (typeof value === 'number' && value < 0) {
-          errors.push(`le champ "${element.id}" ne peut pas avoir une valeur négative`)
+        const { success, error } = numberElementValueValidator.safeParse(value)
+        if (!success) {
+          errors.push(`le champ "${element.id}" est invalide: `, error.message)
         }
       }
 
diff --git a/packages/api/src/business/validations/utils/heritage-contenu-validate.test.ts b/packages/api/src/business/validations/utils/heritage-contenu-validate.test.ts
deleted file mode 100644
index 0ac1488be..000000000
--- a/packages/api/src/business/validations/utils/heritage-contenu-validate.test.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-/* eslint-disable @typescript-eslint/ban-ts-comment */
-
-import { describe, test, expect } from 'vitest'
-
-import { heritageContenuValidate } from './heritage-contenu-validate.js'
-
-describe('vérifie la structure json de heritageContenu', () => {
-  test('la structure est correcte', () => {
-    expect(heritageContenuValidate([], {})).toHaveLength(0)
-    expect(heritageContenuValidate(null, {})).toHaveLength(0)
-    expect(heritageContenuValidate([], null)).toHaveLength(0)
-    expect(heritageContenuValidate([{ id: 'section', elements: [{ id: 'element', type: 'text' }] }], { section: { element: { actif: true } } })).toHaveLength(0)
-    expect(heritageContenuValidate([{ id: 'section', elements: [{ id: 'element', type: 'text' }] }], { section: { element: { actif: false } } })).toHaveLength(0)
-  })
-
-  test('la structure n’est pas correcte car l’héritage est absent', () => {
-    expect(heritageContenuValidate([{ id: 'section', elements: [{ id: 'element', type: 'text' }] }], null)).toContain('la section "section" n’a pas d’héritage')
-  })
-
-  test('la structure n’est pas correcte car il y a une section manquante', () => {
-    expect(heritageContenuValidate([{ id: 'section', elements: [{ id: 'element', type: 'text' }] }], {})).toContain('la section "section" n’a pas d’héritage')
-  })
-
-  test('la structure n’est pas correcte car il y a une section en trop', () => {
-    expect(
-      heritageContenuValidate([], {
-        section: { element: { actif: true } },
-      })
-    ).toContain('la section "section" est inconnue')
-  })
-
-  test('la structure n’est pas correcte car il y a un element inconnu dans une section', () => {
-    expect(
-      heritageContenuValidate([{ id: 'section', elements: [{ id: 'element', type: 'text' }] }], {
-        section: { element: { actif: true }, toto: { actif: true } },
-      })
-    ).toContain('l’élement "toto" de la section "section" est inconnu')
-  })
-
-  test('la structure n’est pas correcte car il y a un element en trop dans une section', () => {
-    expect(
-      heritageContenuValidate(
-        [
-          {
-            id: 'section',
-            elements: [
-              { id: 'element', type: 'text' },
-              { id: 'toto', type: 'text' },
-            ],
-          },
-        ],
-        {
-          section: { element: { actif: true } },
-        }
-      )
-    ).toContain('l’élement "toto" de la section "section" n’a pas d’héritage')
-  })
-
-  test('la structure n’est pas correcte car il y a un champ en trop dans un élément', () => {
-    expect(
-      heritageContenuValidate([{ id: 'section', elements: [{ id: 'element', type: 'text' }] }], {
-        // @ts-ignore
-        section: { element: { actif: true, toto: 1 } },
-      })
-    ).toContain('le champ "toto" de l’élement "element" de la section "section" est inconnu')
-  })
-
-  test('la structure n’est pas correcte car le champ actif d’un élément n’est pas un booléen', () => {
-    expect(
-      heritageContenuValidate([{ id: 'section', elements: [{ id: 'element', type: 'text' }] }], {
-        // @ts-ignore
-        section: { element: { actif: 'toto' } },
-      })
-    ).toContain('le champ "actif" de l’élement "element" de la section "section" doit être un booléen')
-  })
-})
diff --git a/packages/api/src/business/validations/utils/heritage-contenu-validate.ts b/packages/api/src/business/validations/utils/heritage-contenu-validate.ts
deleted file mode 100644
index 9adba63a4..000000000
--- a/packages/api/src/business/validations/utils/heritage-contenu-validate.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import { Section } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.js'
-import { DeepReadonly } from 'camino-common/src/typescript-tools.js'
-import { IHeritageContenu } from '../../../types.js'
-
-export const heritageContenuValidate = (sections?: DeepReadonly<Section[]> | null, heritageContenu?: IHeritageContenu | null) => {
-  const errors = [] as string[]
-
-  if ((!heritageContenu || !Object.keys(heritageContenu).length) && !sections?.length) {
-    return errors
-  }
-
-  sections!.forEach(section => {
-    const heritageSection = heritageContenu ? heritageContenu[section.id] : null
-
-    if (!heritageSection) {
-      errors.push(`la section "${section.id}" n’a pas d’héritage`)
-    } else {
-      const elements = section.elements ? section.elements : []
-
-      elements.forEach(element => {
-        const heritageElement = heritageSection[element.id]
-
-        if (!heritageElement) {
-          errors.push(`l’élement "${element.id}" de la section "${section.id}" n’a pas d’héritage`)
-        } else {
-          Object.keys(heritageElement).forEach(attribute => {
-            if (attribute !== 'actif') {
-              errors.push(`le champ "${attribute}" de l’élement "${element.id}" de la section "${section.id}" est inconnu`)
-            } else if (typeof heritageElement.actif !== 'boolean') {
-              errors.push(`le champ "actif" de l’élement "${element.id}" de la section "${section.id}" doit être un booléen`)
-            }
-          })
-        }
-      })
-    }
-  })
-
-  if (heritageContenu) {
-    Object.keys(heritageContenu).forEach(sectionId => {
-      const section = sections!.find(s => s.id === sectionId)
-      if (!section) {
-        errors.push(`la section "${sectionId}" est inconnue`)
-      } else {
-        Object.keys(heritageContenu[sectionId]).forEach(elementId => {
-          if (!section.elements?.find(e => e.id === elementId)) {
-            errors.push(`l’élement "${elementId}" de la section "${sectionId}" est inconnu`)
-          }
-        })
-      }
-    })
-  }
-
-  return errors
-}
diff --git a/packages/api/src/business/validations/utils/props-dates-check.ts b/packages/api/src/business/validations/utils/props-dates-check.ts
deleted file mode 100644
index e62787db6..000000000
--- a/packages/api/src/business/validations/utils/props-dates-check.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { dateValidate } from 'camino-common/src/date.js'
-import { ITitreActivite, ITitreEtape } from '../../../types.js'
-
-/**
- * Vérifie que les champs `date` d'une étape ou activité sont valides
- *
- * @param propsNames - Noms des propriétés date de l'étape ou activité
- * @param element - Étape ou activité dont on vérifie les propriétés date
- * @returns un tableau d'erreurs si au moins une date est invalide
- *
- */
-
-export const propsDatesCheck = <T extends ITitreActivite | ITitreEtape>(propsNames: [keyof T], element: T) => {
-  const errors = propsNames.reduce((errors: string[], propId) => {
-    if (element[propId]) {
-      const dateCheck = dateValidate(element[propId] as unknown as string)
-      if (!dateCheck.valid) {
-        errors.push(`le champ "${String(propId)}" n'est pas une date valide`)
-      }
-    }
-
-    return errors
-  }, [])
-
-  if (errors.length) {
-    return errors.join(', ')
-  }
-
-  return null
-}
diff --git a/packages/api/src/business/validations/utils/props-numbers-check.ts b/packages/api/src/business/validations/utils/props-numbers-check.ts
deleted file mode 100644
index 3f8d141d6..000000000
--- a/packages/api/src/business/validations/utils/props-numbers-check.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-export const propsNumbersCheck = <T>(props: [keyof T], element: T) => {
-  const errors = props.reduce((errors: string[], prop) => {
-    if (element[prop] && (element[prop] as unknown as number) < 0) {
-      errors.push(`le champ "${String(prop)}" ne peut pas avoir une valeur négative`)
-    }
-
-    return errors
-  }, [])
-
-  if (errors.length) {
-    return errors.join(', ')
-  }
-
-  return null
-}
diff --git a/packages/api/src/database/models/_format/id-create.ts b/packages/api/src/database/models/_format/id-create.ts
index 34cc81ebd..f876e75b1 100644
--- a/packages/api/src/database/models/_format/id-create.ts
+++ b/packages/api/src/database/models/_format/id-create.ts
@@ -4,9 +4,10 @@ import { EntrepriseDocumentId, entrepriseDocumentIdValidator } from 'camino-comm
 import { ActiviteDocumentTypeId, DocumentTypeId } from 'camino-common/src/static/documentsTypes.js'
 import { randomBytes } from 'node:crypto'
 import { TitreId } from 'camino-common/src/validators/titres.js'
-import { EtapeDocumentId, EtapeId, etapeDocumentIdValidator } from 'camino-common/src/etape.js'
+import { EtapeAvisId, EtapeDocumentId, EtapeId, etapeAvisIdValidator, etapeDocumentIdValidator } from 'camino-common/src/etape.js'
 import { UtilisateurId } from 'camino-common/src/roles.js'
 import { ActiviteDocumentId, activiteDocumentIdValidator } from 'camino-common/src/activite.js'
+import { AvisTypeId } from 'camino-common/src/static/avisTypes'
 
 export const idGenerate = <T extends string = string>(length = 24): T => randomBytes(length / 2).toString('hex') as T
 
@@ -41,6 +42,11 @@ export const newEtapeDocumentId = (date: CaminoDate, documentTypeId: DocumentTyp
 
   return etapeDocumentIdValidator.parse(`${date}-${documentTypeId}-${hash}`)
 }
+export const newEtapeAvisId = (documentTypeId: AvisTypeId): EtapeAvisId => {
+  const hash = idGenerate(8)
+
+  return etapeAvisIdValidator.parse(`avis-${documentTypeId}-${hash}`)
+}
 
 export const newUtilisateurId = (value: string = idGenerate(6)): UtilisateurId => {
   return value as UtilisateurId
diff --git a/packages/api/src/database/models/titres-etapes.ts b/packages/api/src/database/models/titres-etapes.ts
index 98c5ca1fa..7a06728e0 100644
--- a/packages/api/src/database/models/titres-etapes.ts
+++ b/packages/api/src/database/models/titres-etapes.ts
@@ -126,6 +126,11 @@ class TitresEtapes extends Model {
   }
 
   public $formatDatabaseJson(json: Pojo) {
+    delete json.entrepriseDocumentIds
+    delete json.etapeDocuments
+    delete json.etapeAvis
+    delete json.daeDocument
+    delete json.aslDocument
     delete json.modification
     delete json.suppression
     json = super.$formatDatabaseJson(json)
diff --git a/packages/api/src/database/queries/permissions/titres-etapes.test.integration.ts b/packages/api/src/database/queries/permissions/titres-etapes.test.integration.ts
index 50e98257c..e2cfd3431 100644
--- a/packages/api/src/database/queries/permissions/titres-etapes.test.integration.ts
+++ b/packages/api/src/database/queries/permissions/titres-etapes.test.integration.ts
@@ -8,6 +8,7 @@ import { titresEtapesQueryModify } from './titres-etapes.js'
 import TitresDemarches from '../../models/titres-demarches.js'
 import { toCaminoDate } from 'camino-common/src/date.js'
 import { beforeAll, expect, afterAll, test, describe, vi } from 'vitest'
+import { ETAPE_IS_BROUILLON } from 'camino-common/src/etape.js'
 console.info = vi.fn()
 console.error = vi.fn()
 
@@ -49,7 +50,7 @@ describe('titresEtapesQueryModify', () => {
           date: toCaminoDate('2022-03-09'),
           typeId: 'mfr',
           statutId: 'fai',
-          isBrouillon: true,
+          isBrouillon: ETAPE_IS_BROUILLON,
           titreDemarcheId,
           archive: false,
         },
@@ -58,7 +59,7 @@ describe('titresEtapesQueryModify', () => {
           date: toCaminoDate('2022-03-09'),
           typeId: 'mfr',
           statutId: 'fai',
-          isBrouillon: true,
+          isBrouillon: ETAPE_IS_BROUILLON,
           titreDemarcheId,
           archive: true,
         },
diff --git a/packages/api/src/database/queries/titres-demarches.test.integration.ts b/packages/api/src/database/queries/titres-demarches.test.integration.ts
index f8e00d9d3..26b1a3f52 100644
--- a/packages/api/src/database/queries/titres-demarches.test.integration.ts
+++ b/packages/api/src/database/queries/titres-demarches.test.integration.ts
@@ -6,6 +6,7 @@ import TitresEtapes from '../models/titres-etapes.js'
 import { titreDemarcheArchive } from './titres-demarches.js'
 import { toCaminoDate } from 'camino-common/src/date.js'
 import { beforeAll, expect, afterAll, test, describe, vi } from 'vitest'
+import { ETAPE_IS_BROUILLON } from 'camino-common/src/etape.js'
 console.info = vi.fn()
 console.error = vi.fn()
 
@@ -37,7 +38,7 @@ describe('teste les requêtes sur les démarches', () => {
           titreDemarcheId: demarche.id,
           typeId: 'mfr',
           statutId: 'fai',
-          isBrouillon: true,
+          isBrouillon: ETAPE_IS_BROUILLON,
           date: toCaminoDate('2020-02-02'),
         })
         expect(etape.archive).toBeFalsy()
diff --git a/packages/api/src/database/queries/titres-etapes.queries.ts b/packages/api/src/database/queries/titres-etapes.queries.ts
index c1d7014e4..ade21c281 100644
--- a/packages/api/src/database/queries/titres-etapes.queries.ts
+++ b/packages/api/src/database/queries/titres-etapes.queries.ts
@@ -11,8 +11,30 @@ import {
   IDeleteEtapeDocumentsDbQuery,
   IUpdateEtapeDocumentFileDbQuery,
   IUpdateEtapeDocumentInfoDbQuery,
+  IInsertEtapeAvisDbQuery,
+  IGetAvisByEtapeIdQueryQuery,
+  IGetLargeobjectIdByEtapeAvisIdInternalQuery,
+  IUpdateEtapeAvisInfoDbQuery,
+  IUpdateEtapeAvisFileDbQuery,
+  IDeleteEtapeAvisDbQuery,
 } from './titres-etapes.queries.types.js'
-import { EtapeDocument, EtapeDocumentId, EtapeDocumentModification, etapeDocumentValidator, EtapeDocumentWithFileModification, EtapeId, TempEtapeDocument } from 'camino-common/src/etape.js'
+import {
+  ETAPE_IS_NOT_BROUILLON,
+  EtapeAvisId,
+  etapeAvisIdValidator,
+  EtapeAvisModification,
+  EtapeAvisWithFileModification,
+  EtapeBrouillon,
+  EtapeDocument,
+  EtapeDocumentId,
+  EtapeDocumentModification,
+  etapeDocumentValidator,
+  EtapeDocumentWithFileModification,
+  EtapeId,
+  etapeIdValidator,
+  TempEtapeAvis,
+  TempEtapeDocument,
+} from 'camino-common/src/etape.js'
 import { EntrepriseDocumentId, entrepriseDocumentValidator, EntrepriseId, EtapeEntrepriseDocument, etapeEntrepriseDocumentValidator } from 'camino-common/src/entreprise.js'
 import { Pool } from 'pg'
 import { User } from 'camino-common/src/roles.js'
@@ -23,12 +45,17 @@ import { canReadDocument } from '../../api/rest/permissions/documents.js'
 import { AdministrationId } from 'camino-common/src/static/administrations.js'
 import { EtapeTypeId } from 'camino-common/src/static/etapesTypes.js'
 import { TitreTypeId } from 'camino-common/src/static/titresTypes.js'
-import { isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty, SimplePromiseFn } from 'camino-common/src/typescript-tools.js'
+import { DeepReadonly, isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty, SimplePromiseFn } from 'camino-common/src/typescript-tools.js'
 import { CanReadDemarche } from '../../api/rest/permissions/demarches.js'
-import { newEtapeDocumentId } from '../models/_format/id-create.js'
-import { getCurrent } from 'camino-common/src/date.js'
-import { createLargeObject, LargeObjectId } from '../largeobjects.js'
+import { newEtapeAvisId, newEtapeDocumentId } from '../models/_format/id-create.js'
+import { caminoDateValidator, getCurrent } from 'camino-common/src/date.js'
+import { createLargeObject, LargeObjectId, largeObjectIdValidator } from '../largeobjects.js'
 import { canDeleteEtapeDocument } from 'camino-common/src/permissions/titres-etapes.js'
+import { avisStatutIdValidator, avisTypeIdValidator, avisVisibilityIdValidator } from 'camino-common/src/static/avisTypes.js'
+import { canReadAvis } from '../../api/rest/permissions/avis.js'
+import { getEtapeDataForEdition } from '../../api/rest/etapes.queries.js'
+import { etapeAvisStepIsComplete } from 'camino-common/src/permissions/etape-form.js'
+import { CommuneId } from 'camino-common/src/static/communes.js'
 
 export const insertTitreEtapeEntrepriseDocument = async (pool: Pool, params: { titre_etape_id: EtapeId; entreprise_document_id: EntrepriseDocumentId }) =>
   dbQueryAndValidate(insertTitreEtapeEntrepriseDocumentInternal, params, pool, z.void())
@@ -88,7 +115,7 @@ export const getEntrepriseDocumentLargeObjectIdsByEtapeId = async (params: { tit
   return result.filter(r => canSeeEntrepriseDocuments(user, r.entreprise_id))
 }
 
-export const updateEtapeDocuments = async (pool: Pool, _user: User, titre_etape_id: EtapeId, isBrouillon: boolean, etapeDocuments: EtapeDocumentModification[]) => {
+export const updateEtapeDocuments = async (pool: Pool, _user: User, titre_etape_id: EtapeId, isBrouillon: EtapeBrouillon, etapeDocuments: EtapeDocumentModification[]) => {
   const documentsInDb = await dbQueryAndValidate(getDocumentsByEtapeIdQuery, { titre_etape_id }, pool, getDocumentsByEtapeIdQueryValidator)
 
   const etapeDocumentToUpdate = etapeDocuments.filter((document): document is EtapeDocumentWithFileModification => 'id' in document)
@@ -159,6 +186,84 @@ insert into etapes_documents (id, etape_document_type_id, etape_id, description,
     values ($ id !, $ etape_document_type_id !, $ etape_id !, $ description, $ public_lecture !, $ entreprises_lecture !, $ largeobject_id !)
 `
 
+export const insertEtapeAvis = async (pool: Pool, titre_etape_id: EtapeId, etapeAvis: TempEtapeAvis[]) => {
+  for (const avis of etapeAvis) {
+    const id = newEtapeAvisId(avis.avis_type_id)
+    const largeobject_id = isNotNullNorUndefined(avis.temp_document_name) ? await createLargeObject(pool, avis.temp_document_name) : null
+    await insertEtapeAvisWithLargeObjectId(pool, titre_etape_id, avis, id, largeobject_id)
+  }
+}
+const updateEtapeAvisFileDb = sql<Redefine<IUpdateEtapeAvisFileDbQuery, { id: EtapeAvisId; largeobject_id: LargeObjectId }, void>>`
+update
+    etape_avis
+set
+    largeobject_id = $ largeobject_id !
+where
+    id = $ id !
+`
+const updateEtapeAvisInfoDb = sql<Redefine<IUpdateEtapeAvisInfoDbQuery, Omit<EtapeAvisWithFileModification, 'has_file' | 'temp_document_name'>, void>>`
+update
+    etape_avis
+set
+    avis_statut_id = $ avis_statut_id !,
+    avis_visibility_id = $ avis_visibility_id !,
+    date = $ date !,
+    avis_type_id = $ avis_type_id !,
+    description = $ description
+where
+    id = $ id !
+`
+const deleteEtapeAvisDb = sql<Redefine<IDeleteEtapeAvisDbQuery, { ids: EtapeAvisId[] }, void>>`
+delete from etape_avis
+where id in $$ ids !
+`
+
+export const updateEtapeAvis = async (
+  pool: Pool,
+  titre_etape_id: EtapeId,
+  isBrouillon: EtapeBrouillon,
+  etapeAvis: EtapeAvisModification[],
+  etapeTypeId: EtapeTypeId,
+  titreTypeId: TitreTypeId,
+  communeIds: DeepReadonly<CommuneId[]>
+) => {
+  if (isBrouillon === ETAPE_IS_NOT_BROUILLON && !etapeAvisStepIsComplete({ typeId: etapeTypeId }, etapeAvis, titreTypeId, communeIds).valid) {
+    throw new Error('Impossible de mettre à jour les avis, car ils ne sont pas complets')
+  }
+
+  const avisInDb = await dbQueryAndValidate(getAvisByEtapeIdQuery, { titre_etape_id }, pool, etapeAvisDbValidator)
+
+  const avisListToUpdate = etapeAvis.filter((avis): avis is EtapeAvisWithFileModification => 'id' in avis)
+
+  const etapeDocumentIdsToUpdate = avisListToUpdate.map(({ id }) => id)
+  const toDeleteAvis = avisInDb.filter(({ id }) => !etapeDocumentIdsToUpdate.includes(id))
+  const toInsertAvis = etapeAvis.filter((avis): avis is TempEtapeAvis => !('id' in avis))
+  if (isNotNullNorUndefinedNorEmpty(toDeleteAvis)) {
+    await dbQueryAndValidate(deleteEtapeAvisDb, { ids: toDeleteAvis.map(({ id }) => id) }, pool, z.void())
+  }
+  if (isNotNullNorUndefinedNorEmpty(avisListToUpdate)) {
+    for (const avisToUpdate of avisListToUpdate) {
+      if (isNotNullNorUndefined(avisToUpdate.temp_document_name)) {
+        const largeobject_id = await createLargeObject(pool, avisToUpdate.temp_document_name)
+        await dbQueryAndValidate(updateEtapeAvisFileDb, { id: avisToUpdate.id, largeobject_id }, pool, z.void())
+      }
+      await dbQueryAndValidate(updateEtapeAvisInfoDb, avisToUpdate, pool, z.void())
+    }
+  }
+  if (isNotNullNorUndefinedNorEmpty(toInsertAvis)) {
+    await insertEtapeAvis(pool, titre_etape_id, toInsertAvis)
+  }
+}
+
+// VISIBLE FOR TEST
+export const insertEtapeAvisWithLargeObjectId = async (pool: Pool, titre_etape_id: EtapeId, avis: TempEtapeAvis, id: EtapeAvisId, largeobject_id: LargeObjectId | null) => {
+  return dbQueryAndValidate(insertEtapeAvisDb, { ...avis, etape_id: titre_etape_id, id, largeobject_id }, pool, z.void())
+}
+const insertEtapeAvisDb = sql<Redefine<IInsertEtapeAvisDbQuery, { etape_id: EtapeId; id: EtapeAvisId; largeobject_id: LargeObjectId | null } & Omit<TempEtapeAvis, 'temp_document_name'>, void>>`
+insert into etape_avis (id, avis_type_id, etape_id, description, avis_statut_id, date, avis_visibility_id, largeobject_id)
+    values ($ id !, $ avis_type_id !, $ etape_id !, $ description !, $ avis_statut_id !, $ date !, $ avis_visibility_id !, $ largeobject_id !)
+`
+
 const etapeDocumentLargeObjectIdValidator = z.number().brand('EtapeDocumentLargeObjectId')
 
 const getDocumentsByEtapeIdQueryValidator = etapeDocumentValidator.extend({ largeobject_id: etapeDocumentLargeObjectIdValidator })
@@ -199,7 +304,96 @@ export const getEtapeDocumentLargeObjectIdsByEtapeId = async (
 
   return filteredDocuments
 }
+const etapeAvisDbValidator = z.object({
+  id: etapeAvisIdValidator,
+  description: z.string(),
+  avis_type_id: avisTypeIdValidator,
+  avis_statut_id: avisStatutIdValidator,
+  largeobject_id: largeObjectIdValidator.nullable(),
+  date: caminoDateValidator,
+  avis_visibility_id: avisVisibilityIdValidator,
+})
+type EtapeAvisDb = z.infer<typeof etapeAvisDbValidator>
+const getAvisByEtapeIdQuery = sql<Redefine<IGetAvisByEtapeIdQueryQuery, { titre_etape_id: EtapeId }, EtapeAvisDb>>`
+select
+    a.id,
+    a.description,
+    a.avis_type_id,
+    a.avis_statut_id,
+    a.largeobject_id,
+    a.date,
+    a.avis_visibility_id
+from
+    etape_avis a
+where
+    a.etape_id = $ titre_etape_id !
+`
+export const getEtapeAvisLargeObjectIdsByEtapeId = async (
+  titre_etape_id: EtapeId,
+  pool: Pool,
+  user: User,
+  titreTypeId: SimplePromiseFn<TitreTypeId>,
+  titresAdministrationsLocales: SimplePromiseFn<AdministrationId[]>,
+  entreprisesTitulairesOuAmodiataires: SimplePromiseFn<EntrepriseId[]>,
+  etapeTypeId: EtapeTypeId,
+  demarche: CanReadDemarche
+): Promise<EtapeAvisDb[]> => {
+  const result = await dbQueryAndValidate(getAvisByEtapeIdQuery, { titre_etape_id }, pool, etapeAvisDbValidator)
 
+  const filteredAvis: EtapeAvisDb[] = []
+
+  for (const avis of result) {
+    if (await canReadAvis(avis, user, titreTypeId, titresAdministrationsLocales, entreprisesTitulairesOuAmodiataires, etapeTypeId, demarche)) {
+      filteredAvis.push(avis)
+    }
+  }
+
+  return filteredAvis
+}
+const loidByEtapeAvisIdValidator = z.object({
+  largeobject_id: largeObjectIdValidator,
+  etape_id: etapeIdValidator,
+  avis_visibility_id: avisVisibilityIdValidator,
+})
+export const getLargeobjectIdByEtapeAvisId = async (pool: Pool, user: User, etapeAvisId: EtapeAvisId): Promise<LargeObjectId | null> => {
+  const result = await dbQueryAndValidate(
+    getLargeobjectIdByEtapeAvisIdInternal,
+    {
+      etapeAvisId,
+    },
+    pool,
+    loidByEtapeAvisIdValidator
+  )
+
+  if (result.length === 1) {
+    const etapeAvis = result[0]
+    const { etapeData, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires } = await getEtapeDataForEdition(pool, etapeAvis.etape_id)
+
+    if (
+      await canReadAvis(etapeAvis, user, titreTypeId, administrationsLocales, entreprisesTitulairesOuAmodiataires, etapeData.etape_type_id, {
+        demarche_type_id: etapeData.demarche_type_id,
+        entreprises_lecture: etapeData.demarche_entreprises_lecture,
+        public_lecture: etapeData.demarche_public_lecture,
+        titre_public_lecture: etapeData.titre_public_lecture,
+      })
+    ) {
+      return etapeAvis.largeobject_id
+    }
+  }
+
+  return null
+}
+const getLargeobjectIdByEtapeAvisIdInternal = sql<Redefine<IGetLargeobjectIdByEtapeAvisIdInternalQuery, { etapeAvisId: EtapeAvisId }, z.infer<typeof loidByEtapeAvisIdValidator>>>`
+select
+    d.largeobject_id,
+    d.etape_id,
+    d.avis_visibility_id
+from
+    etape_avis d
+where
+    d.id = $ etapeAvisId !
+LIMIT 1
+`
 export const getDocumentsByEtapeId = async (
   titre_etape_id: EtapeId,
   pool: Pool,
diff --git a/packages/api/src/database/queries/titres-etapes.queries.types.ts b/packages/api/src/database/queries/titres-etapes.queries.types.ts
index 449d4b4bc..3bed86c8e 100644
--- a/packages/api/src/database/queries/titres-etapes.queries.types.ts
+++ b/packages/api/src/database/queries/titres-etapes.queries.types.ts
@@ -134,6 +134,75 @@ export interface IInsertEtapeDocumentDbQuery {
   result: IInsertEtapeDocumentDbResult;
 }
 
+/** 'UpdateEtapeAvisFileDb' parameters type */
+export interface IUpdateEtapeAvisFileDbParams {
+  id: string;
+  largeobject_id: number;
+}
+
+/** 'UpdateEtapeAvisFileDb' return type */
+export type IUpdateEtapeAvisFileDbResult = void;
+
+/** 'UpdateEtapeAvisFileDb' query type */
+export interface IUpdateEtapeAvisFileDbQuery {
+  params: IUpdateEtapeAvisFileDbParams;
+  result: IUpdateEtapeAvisFileDbResult;
+}
+
+/** 'UpdateEtapeAvisInfoDb' parameters type */
+export interface IUpdateEtapeAvisInfoDbParams {
+  avis_statut_id: string;
+  avis_type_id: string;
+  avis_visibility_id: string;
+  date: string;
+  description?: string | null | void;
+  id: string;
+}
+
+/** 'UpdateEtapeAvisInfoDb' return type */
+export type IUpdateEtapeAvisInfoDbResult = void;
+
+/** 'UpdateEtapeAvisInfoDb' query type */
+export interface IUpdateEtapeAvisInfoDbQuery {
+  params: IUpdateEtapeAvisInfoDbParams;
+  result: IUpdateEtapeAvisInfoDbResult;
+}
+
+/** 'DeleteEtapeAvisDb' parameters type */
+export interface IDeleteEtapeAvisDbParams {
+  ids: readonly (string)[];
+}
+
+/** 'DeleteEtapeAvisDb' return type */
+export type IDeleteEtapeAvisDbResult = void;
+
+/** 'DeleteEtapeAvisDb' query type */
+export interface IDeleteEtapeAvisDbQuery {
+  params: IDeleteEtapeAvisDbParams;
+  result: IDeleteEtapeAvisDbResult;
+}
+
+/** 'InsertEtapeAvisDb' parameters type */
+export interface IInsertEtapeAvisDbParams {
+  avis_statut_id: string;
+  avis_type_id: string;
+  avis_visibility_id: string;
+  date: string;
+  description: string;
+  etape_id: string;
+  id: string;
+  largeobject_id: number;
+}
+
+/** 'InsertEtapeAvisDb' return type */
+export type IInsertEtapeAvisDbResult = void;
+
+/** 'InsertEtapeAvisDb' query type */
+export interface IInsertEtapeAvisDbQuery {
+  params: IInsertEtapeAvisDbParams;
+  result: IInsertEtapeAvisDbResult;
+}
+
 /** 'GetDocumentsByEtapeIdQuery' parameters type */
 export interface IGetDocumentsByEtapeIdQueryParams {
   titre_etape_id: string;
@@ -155,3 +224,43 @@ export interface IGetDocumentsByEtapeIdQueryQuery {
   result: IGetDocumentsByEtapeIdQueryResult;
 }
 
+/** 'GetAvisByEtapeIdQuery' parameters type */
+export interface IGetAvisByEtapeIdQueryParams {
+  titre_etape_id: string;
+}
+
+/** 'GetAvisByEtapeIdQuery' return type */
+export interface IGetAvisByEtapeIdQueryResult {
+  avis_statut_id: string;
+  avis_type_id: string;
+  avis_visibility_id: string;
+  date: string;
+  description: string;
+  id: string;
+  largeobject_id: number | null;
+}
+
+/** 'GetAvisByEtapeIdQuery' query type */
+export interface IGetAvisByEtapeIdQueryQuery {
+  params: IGetAvisByEtapeIdQueryParams;
+  result: IGetAvisByEtapeIdQueryResult;
+}
+
+/** 'GetLargeobjectIdByEtapeAvisIdInternal' parameters type */
+export interface IGetLargeobjectIdByEtapeAvisIdInternalParams {
+  etapeAvisId: string;
+}
+
+/** 'GetLargeobjectIdByEtapeAvisIdInternal' return type */
+export interface IGetLargeobjectIdByEtapeAvisIdInternalResult {
+  avis_visibility_id: string;
+  etape_id: string;
+  largeobject_id: number | null;
+}
+
+/** 'GetLargeobjectIdByEtapeAvisIdInternal' query type */
+export interface IGetLargeobjectIdByEtapeAvisIdInternalQuery {
+  params: IGetLargeobjectIdByEtapeAvisIdInternalParams;
+  result: IGetLargeobjectIdByEtapeAvisIdInternalResult;
+}
+
diff --git a/packages/api/src/database/queries/titres.test.integration.ts b/packages/api/src/database/queries/titres.test.integration.ts
index 011bbf67c..dd51579ec 100644
--- a/packages/api/src/database/queries/titres.test.integration.ts
+++ b/packages/api/src/database/queries/titres.test.integration.ts
@@ -6,6 +6,7 @@ import TitresEtapes from '../models/titres-etapes.js'
 import { titreArchive } from './titres.js'
 import { toCaminoDate } from 'camino-common/src/date.js'
 import { beforeAll, expect, afterAll, test, describe, vi } from 'vitest'
+import { ETAPE_IS_BROUILLON } from 'camino-common/src/etape.js'
 
 console.info = vi.fn()
 console.error = vi.fn()
@@ -39,7 +40,7 @@ describe('teste les requêtes sur les titres', () => {
             titreDemarcheId: demarche.id,
             typeId: 'mfr',
             statutId: 'fai',
-            isBrouillon: true,
+            isBrouillon: ETAPE_IS_BROUILLON,
             date: toCaminoDate('2020-02-02'),
           })
           expect(etape.archive).toBeFalsy()
diff --git a/packages/api/src/knex/migrations/20240610091608_add_avis-documents.ts b/packages/api/src/knex/migrations/20240610091608_add_avis-documents.ts
new file mode 100644
index 000000000..3e6645203
--- /dev/null
+++ b/packages/api/src/knex/migrations/20240610091608_add_avis-documents.ts
@@ -0,0 +1,237 @@
+/* eslint-disable no-restricted-syntax */
+/* eslint-disable sql/no-unsafe-query */
+import { DemarcheId } from 'camino-common/src/demarche.js'
+import { EtapeDocumentId, EtapeId } from 'camino-common/src/etape.js'
+import { AvisStatutId, AvisTypeId, AvisVisibilityId, AvisVisibilityIds } from 'camino-common/src/static/avisTypes.js'
+import { EtapeStatutId } from 'camino-common/src/static/etapesStatuts.js'
+import { EtapeTypeId } from 'camino-common/src/static/etapesTypes.js'
+import { DeepReadonly, isNotNullNorUndefinedNorEmpty, isNullOrUndefined } from 'camino-common/src/typescript-tools.js'
+import { Knex } from 'knex'
+import { LargeObjectId } from '../../database/largeobjects.js'
+import { newEtapeAvisId } from '../../database/models/_format/id-create.js'
+import { CaminoDate } from 'camino-common/src/date.js'
+import { Section, getSectionsWithValue } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.js'
+import { TitreTypeId } from 'camino-common/src/static/titresTypes.js'
+import { DemarcheTypeId } from 'camino-common/src/static/demarchesTypes.js'
+import { valeurFind } from 'camino-common/src/sections.js'
+import { Contenu } from 'camino-common/src/permissions/sections.js'
+
+const oldSections = {
+  eof: [
+    {
+      id: 'onf',
+      nom: 'Office National des Forêts',
+      elements: [
+        { id: 'motifs', nom: 'Motifs', type: 'textarea', optionnel: true, description: "Élément d'expertise" },
+        { id: 'expert', nom: 'Expert', type: 'text', optionnel: true, description: "Agent ONF qui a réalisé l'expertise" },
+        { id: 'agent', nom: 'Agent', type: 'text', optionnel: true, description: 'Chargé de mission foncier du Service Aménagement du Territoire' },
+        {
+          id: 'dateDebut',
+          nom: 'Date de début',
+          type: 'date',
+          optionnel: true,
+          description: 'Date de début de l’expertise',
+        },
+      ],
+    },
+  ],
+  aof: [
+    {
+      id: 'onf',
+      nom: 'Office National des Forêts',
+      elements: [
+        { id: 'motifs', nom: 'Motifs', type: 'textarea', optionnel: true, description: "Élément d'expertise" },
+        {
+          id: 'signataire',
+          nom: 'Signataire',
+          type: 'text',
+          optionnel: true,
+          description: 'Directeur ONF ou responsable du service Service Aménagement du Territoire qui apparaitra sur les documents externe pour signature',
+        },
+      ],
+    },
+  ],
+} as const
+
+const ETAPE_TYPE_ID_TO_AVIS_TYPE_ID: { [key in string]?: AvisTypeId } = {
+  ssr: 'lettreDeSaisineDesServices',
+  wss: 'lettreDeSaisineDesServices',
+  cps: 'confirmationAccordProprietaireDuSol',
+  aac: 'avisDirectionRegionaleDesAffairesCulturelles',
+  wac: 'avisDirectionRegionaleDesAffairesCulturelles',
+  aaf: 'avisDirectionAlimentationAgricultureForet',
+  acd: 'avisConseilDepartementalEnvironnementRisquesSanitairesTechnologiques',
+  wat: 'avisConseilDepartementalEnvironnementRisquesSanitairesTechnologiques',
+  abs: 'avisServiceMilieuxNaturelsBiodiversiteSitesPaysages',
+  aec: 'avisDirectionsRégionalesEconomieEmploiTravailSolidarités',
+  afp: 'avisDirectionRegionaleFinancesPubliques',
+  agn: 'avisGendarmerieNationale',
+  ami: 'avisParcNaturelMarin',
+  aim: 'avisIFREMER',
+  aof: 'avisOfficeNationalDesForets',
+  eof: 'expertiseOfficeNationalDesForets',
+  aop: 'avisInstitutNationalOrigineQualite',
+  api: 'avisEtatMajorOrpaillagePecheIllicite',
+  apl: 'avisServiceAdministratifLocal',
+  apm: 'avisAutoriteMilitaire',
+  wam: 'avisAutoriteMilitaire',
+  apn: 'avisParcNational',
+  wdt: 'avisDirectionDepartementaleTerritoiresMer',
+  wad: 'avisDirectionDepartementaleTerritoiresMer',
+  ars: 'avisAgenceRegionaleSante',
+  was: 'avisAgenceRegionaleSante',
+  ass: 'avisCaisseGeneraleSecuriteSociale',
+  wai: 'autreAvis',
+  ari: 'autreAvis',
+  wal: 'autreAvis',
+  pnr: 'autreAvis',
+  auc: 'autreAvis',
+} as const
+const getVisibilityId = (etapeDocument: Pick<DocumentFromDb, 'public_lecture' | 'entreprises_lecture'>): AvisVisibilityId => {
+  if (etapeDocument.public_lecture) {
+    return AvisVisibilityIds.Public
+  }
+
+  if (etapeDocument.entreprises_lecture) {
+    return AvisVisibilityIds.TitulairesEtAdministrations
+  }
+
+  return AvisVisibilityIds.Administrations
+}
+const etapeTypesToDelete = Object.keys(ETAPE_TYPE_ID_TO_AVIS_TYPE_ID)
+const ETAPE_STATUT_ID_TO_AVIS_STATUT_ID: { [key in EtapeStatutId]?: AvisStatutId } = {
+  fav: 'Favorable',
+  def: 'Défavorable',
+  fre: 'Favorable avec réserves',
+  fai: 'Favorable',
+  dre: 'Défavorable',
+} as const
+type EtapeFromDb = { id: EtapeId; date: CaminoDate; titre_demarche_id: DemarcheId; type_id: EtapeTypeId | 'eof' | 'aof'; statut_id: EtapeStatutId; contenu: Contenu }
+type DocumentFromDb = { id: EtapeDocumentId; largeobject_id: LargeObjectId; description: string; public_lecture: boolean; entreprises_lecture: boolean }
+export const up = async (knex: Knex) => {
+  await knex.raw(`DELETE FROM etapes_documents where etape_id in (select id FROM titres_etapes where archive is true and type_id in (${etapeTypesToDelete.map(_ => '?').join(',')}))`, [
+    ...etapeTypesToDelete,
+  ])
+  await knex.raw(`DELETE FROM titres_etapes where archive is true and type_id in (${etapeTypesToDelete.map(_ => '?').join(',')})`, [...etapeTypesToDelete])
+  await knex.raw(
+    'CREATE TABLE etape_avis (id character varying(255) NOT NULL, avis_type_id character varying(255) NOT NULL, avis_statut_id character varying(255) NOT NULL, avis_visibility_id character varying(255) NOT NULL, etape_id character varying(255) NOT NULL, description text NOT NULL, date character varying(10) NOT NULL, largeobject_id oid)'
+  )
+
+  const allEtapesDb: { rows: EtapeFromDb[] } = await knex.raw(
+    `SELECT * FROM titres_etapes
+     WHERE titres_etapes.type_id IN (${etapeTypesToDelete.map(_ => '?').join(',')})
+     ORDER BY titres_etapes.ordre ASC`,
+    [...etapeTypesToDelete]
+  )
+
+  const etapesByDemarcheId = allEtapesDb.rows.reduce<Record<DemarcheId, EtapeFromDb[]>>((acc, etape) => {
+    if (acc[etape.titre_demarche_id] === undefined) {
+      acc[etape.titre_demarche_id] = []
+    }
+    acc[etape.titre_demarche_id].push(etape)
+
+    return acc
+  }, {})
+
+  for (const etapes of Object.values(etapesByDemarcheId)) {
+    // @ts-ignore
+    const ssrEtape = etapes.find(({ type_id }) => type_id === 'ssr')
+    // @ts-ignore
+    const aofEtape = etapes.find(({ type_id }) => type_id === 'aof')
+
+    const etapePivotId = ssrEtape?.id ?? aofEtape?.id ?? etapes[0].id
+
+    for (let index = 0; index < etapes.length; index++) {
+      const etape = etapes[index]
+
+      // documents et avis vide
+      const documents: { rows: DocumentFromDb[] } = await knex.raw(`SELECT * from etapes_documents where etape_id= :id`, { id: etape.id })
+      const avisTypeId = ETAPE_TYPE_ID_TO_AVIS_TYPE_ID[etape.type_id]
+      const avisStatutId = ETAPE_STATUT_ID_TO_AVIS_STATUT_ID[etape.statut_id]
+      if (isNullOrUndefined(avisTypeId) || isNullOrUndefined(avisStatutId)) {
+        console.error('une étape type id ou statut non prise en compte', etape)
+      } else {
+        const titreTypeIdDemarcheTypeId: { rows: [{ titre_type_id: TitreTypeId; demarche_type_id: DemarcheTypeId }] } = await knex.raw(
+          `
+          SELECT t.type_id as titre_type_id, d.type_id as demarche_type_id from titres_demarches d join titres t on t.id = d.titre_id where d.id= :id`,
+          { id: etape.titre_demarche_id }
+        )
+        let sections: DeepReadonly<Section[]> = []
+        if (titreTypeIdDemarcheTypeId.rows[0].titre_type_id === 'arm' && titreTypeIdDemarcheTypeId.rows[0].demarche_type_id === 'oct' && (etape.type_id === 'eof' || etape.type_id === 'aof')) {
+          sections = oldSections[etape.type_id]
+        }
+        const descriptionSections: string[] = []
+
+        if (isNotNullNorUndefinedNorEmpty(sections)) {
+          const sectionsWithValue = getSectionsWithValue(sections, etape.contenu)
+          for (const section of sectionsWithValue) {
+            for (const element of section.elements) {
+              const value = valeurFind(element)
+              if (value !== '–') {
+                descriptionSections.push(`- ${element.nom} : ${valeurFind(element)}`)
+              }
+            }
+          }
+        }
+
+        for (let i = 0; i < documents.rows.length; i++) {
+          const document = documents.rows[i]
+
+          let description: string = document.description ?? ''
+          if (i === 0) {
+            if (isNotNullNorUndefinedNorEmpty(description)) {
+              description = `${description}
+${descriptionSections.join('\n')}`
+            } else {
+              description = descriptionSections.join('\n')
+            }
+          }
+          const row = {
+            id: document.id,
+            avis_type_id: avisTypeId,
+            etape_id: etapePivotId,
+
+            description,
+            avis_statut_id: avisStatutId,
+            date: etape.date,
+            largeobject_id: document.largeobject_id,
+            avis_visibility_id: getVisibilityId(document),
+          }
+          await knex.raw(
+            'INSERT INTO etape_avis(id, avis_type_id, etape_id, description, avis_statut_id, date, largeobject_id, avis_visibility_id) VALUES(:id, :avis_type_id, :etape_id, :description, :avis_statut_id, :date, :largeobject_id, :avis_visibility_id)',
+            { ...row, etape_id: etapePivotId }
+          )
+          await knex.raw('DELETE FROM etapes_documents WHERE id = :id', { id: row.id })
+        }
+        if (documents.rows.length === 0) {
+          const row = {
+            id: newEtapeAvisId(avisTypeId),
+            avis_type_id: avisTypeId,
+            etape_id: etapePivotId,
+            description: descriptionSections.join('\n'),
+            avis_statut_id: avisStatutId,
+            date: etape.date,
+            largeobject_id: null,
+            avis_visibility_id: 'Administrations',
+          }
+          await knex.raw(
+            'INSERT INTO etape_avis(id, avis_type_id, etape_id, description, avis_statut_id, date, largeobject_id, avis_visibility_id) VALUES(:id, :avis_type_id, :etape_id, :description, :avis_statut_id, :date, :largeobject_id, :avis_visibility_id)',
+            { ...row, etape_id: etapePivotId }
+          )
+        }
+      }
+
+      if (etapePivotId === etape.id) {
+        await knex.raw(`UPDATE titres_etapes SET type_id = 'asc', statut_id='fai' WHERE id = :id`, {
+          id: etape.id,
+        })
+      } else {
+        await knex.raw(`DELETE FROM titres_etapes WHERE id = :id`, {
+          id: etape.id,
+        })
+      }
+    }
+  }
+}
+
+export const down = () => ({})
diff --git a/packages/api/src/pg-database.ts b/packages/api/src/pg-database.ts
index 22f1b0a74..9c2f7fcbd 100644
--- a/packages/api/src/pg-database.ts
+++ b/packages/api/src/pg-database.ts
@@ -2,14 +2,13 @@ import { TaggedQuery } from '@pgtyped/runtime'
 import type { Pool } from 'pg'
 import { z } from 'zod'
 import type { ZodType, ZodTypeDef } from 'zod'
-
 export type Redefine<T, P, O> = T extends { params: infer A; result: infer B }
   ? { inputs: keyof A; outputs: keyof B } extends { inputs: keyof P; outputs: keyof O }
     ? { inputs: keyof P; outputs: keyof O } extends { inputs: keyof A; outputs: keyof B }
       ? { params: P; result: O }
-      : false
-    : false
-  : false
+      : { __camino_error: 'toutes les clés de redefine ne sont pas présentes dans pgtyped' }
+    : { __camino_error: 'toutes les clés de pgtyped ne sont pas présentes dans redefine' }
+  : { __camino_error: 'on a pas params et result' }
 
 export const dbQueryAndValidate = async <Params, Result, T extends ZodType<Result, ZodTypeDef, unknown>>(
   query: TaggedQuery<{ params: Params; result: Result }>,
diff --git a/packages/api/src/server/rest.ts b/packages/api/src/server/rest.ts
index 2c4cf2f5e..cf46627d8 100644
--- a/packages/api/src/server/rest.ts
+++ b/packages/api/src/server/rest.ts
@@ -8,7 +8,7 @@ import { join } from 'path'
 import { inspect } from 'node:util'
 
 import { activites, demarches, entreprises, titre, titres, travaux } from '../api/rest/index.js'
-import { NewDownload, etapeDocumentDownload, etapeTelecharger, streamLargeObjectInResponse } from '../api/rest/fichiers.js'
+import { NewDownload, avisDocumentDownload, etapeDocumentDownload, etapeTelecharger, streamLargeObjectInResponse } from '../api/rest/fichiers.js'
 import { getTitreLiaisons, postTitreLiaisons, removeTitre, titresAdministrations, titresONF, updateTitre, utilisateurTitreAbonner, getTitre, getUtilisateurTitreAbonner } from '../api/rest/titres.js'
 import {
   creerEntreprise,
@@ -40,12 +40,22 @@ import {
 import { CaminoConfig, caminoConfigValidator } from 'camino-common/src/static/config.js'
 import { CaminoRequest, CustomResponse } from '../api/rest/express-type.js'
 import { User } from 'camino-common/src/roles.js'
-import { deleteEtape, deposeEtape, getEtapeDocuments, getEtapeEntrepriseDocuments, getEtapesTypesEtapesStatusWithMainStep } from '../api/rest/etapes.js'
+import {
+  createEtape,
+  deleteEtape,
+  deposeEtape,
+  getEtape,
+  getEtapeAvis,
+  getEtapeDocuments,
+  getEtapeEntrepriseDocuments,
+  getEtapesTypesEtapesStatusWithMainStep,
+  updateEtape,
+} from '../api/rest/etapes.js'
 import { z } from 'zod'
 import { getCommunes } from '../api/rest/communes.js'
 import { SendFileOptions } from 'express-serve-static-core'
 import { activiteDocumentDownload, getActivite, updateActivite, deleteActivite } from '../api/rest/activites.js'
-import { isNotNullNorUndefined } from 'camino-common/src/typescript-tools.js'
+import { DeepReadonly, isNotNullNorUndefined } from 'camino-common/src/typescript-tools.js'
 import { getDemarcheByIdOrSlug } from '../api/rest/demarches.js'
 import { geojsonImport, geojsonImportPoints, convertGeojsonPointsToGeoSystemeId, getPerimetreInfos, geojsonImportForages } from '../api/rest/perimetre.js'
 import { getDataGouvStats } from '../api/rest/statistiques/datagouv.js'
@@ -74,7 +84,7 @@ type IRestResolver = (
   user: User
 ) => Promise<IRestResolverResult | null>
 
-type RestGetCall<Route extends GetRestRoutes> = (pool: Pool) => (req: CaminoRequest, res: CustomResponse<z.infer<(typeof CaminoRestRoutes)[Route]['get']['output']>>) => Promise<void>
+type RestGetCall<Route extends GetRestRoutes> = (pool: Pool) => (req: CaminoRequest, res: CustomResponse<DeepReadonly<z.infer<(typeof CaminoRestRoutes)[Route]['get']['output']>>>) => Promise<void>
 type RestPostCall<Route extends PostRestRoutes> = (pool: Pool) => (req: CaminoRequest, res: CustomResponse<z.infer<(typeof CaminoRestRoutes)[Route]['post']['output']>>) => Promise<void>
 type RestPutCall<Route extends PutRestRoutes> = (pool: Pool) => (req: CaminoRequest, res: CustomResponse<z.infer<(typeof CaminoRestRoutes)[Route]['put']['output']>>) => Promise<void>
 type RestDeleteCall = (pool: Pool) => (req: CaminoRequest, res: CustomResponse<void | Error>) => Promise<void>
@@ -102,6 +112,7 @@ const restRouteImplementations: Readonly<{ [key in CaminoRestRoute]: Transform<k
   '/download/fichiers/:documentId': { newDownload: etapeDocumentDownload },
   '/download/entrepriseDocuments/:documentId': { newDownload: entrepriseDocumentDownload },
   '/download/activiteDocuments/:documentId': { newDownload: activiteDocumentDownload },
+  '/download/avisDocument/:etapeAvisId': { newDownload: avisDocumentDownload },
   '/fichiers/:documentId': { newDownload: etapeDocumentDownload },
   '/titres/:id': { download: titre },
   '/titres': { download: titres },
@@ -145,10 +156,12 @@ const restRouteImplementations: Readonly<{ [key in CaminoRestRoute]: Transform<k
   '/rest/administrations/:administrationId/activiteTypeEmails/delete': { post: deleteAdministrationActiviteTypeEmails },
   '/rest/demarches/:demarcheId/geojson': { get: getPerimetreInfos },
   '/rest/etapes/:etapeId/geojson': { get: getPerimetreInfos },
-  '/rest/etapes/:etapeId': { delete: deleteEtape },
+  '/rest/etapes/:etapeIdOrSlug': { delete: deleteEtape, get: getEtape },
+  '/rest/etapes': { post: createEtape, put: updateEtape },
   '/rest/etapes/:etapeId/depot': { put: deposeEtape },
   '/rest/etapes/:etapeId/entrepriseDocuments': { get: getEtapeEntrepriseDocuments },
   '/rest/etapes/:etapeId/etapeDocuments': { get: getEtapeDocuments },
+  '/rest/etapes/:etapeId/etapeAvis': { get: getEtapeAvis },
   '/rest/activites/:activiteId': { get: getActivite, put: updateActivite, delete: deleteActivite },
   '/rest/communes': { get: getCommunes },
   '/rest/geojson/import/:geoSystemeId': { post: geojsonImport },
diff --git a/packages/api/src/tools/demarches/tests-creation.ts b/packages/api/src/tools/demarches/tests-creation.ts
index 899b7e82a..7912d5b85 100644
--- a/packages/api/src/tools/demarches/tests-creation.ts
+++ b/packages/api/src/tools/demarches/tests-creation.ts
@@ -55,9 +55,9 @@ const writeEtapesForTest = async () => {
               }) ?? []
           ).map(etape => titreEtapeForMachineValidator.parse(etape))
         )
-        // Pour anonymiser la date en gardant les délai en mois entre la saisine et l'apd,
-        // on trouve la date de saisine et on calcule un delta random pour tomber dans le même mois
-        const firstSaisineDate = etapes.find(etape => etape.etapeTypeId === ETAPES_TYPES.saisineDesServices)?.date ?? etapes[0].date
+        // Pour anonymiser la date en gardant les délai en mois entre les 'avis des services et commissions consultatives' et l'apd,
+        // on trouve la date et on calcule un delta random pour tomber dans le même mois
+        const firstSaisineDate = etapes.find(etape => etape.etapeTypeId === ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives)?.date ?? etapes[0].date
         const decalageJour = daysBetween(firstSaisineDate, setDayInMonth(firstSaisineDate, Math.floor(Math.random() * 28)))
         try {
           if (!demarcheDefinition.machine.isEtapesOk(etapes)) {
diff --git a/packages/api/src/tools/phases/tests-creation.ts b/packages/api/src/tools/phases/tests-creation.ts
index 7e1cff261..3cb8dacb2 100644
--- a/packages/api/src/tools/phases/tests-creation.ts
+++ b/packages/api/src/tools/phases/tests-creation.ts
@@ -14,6 +14,7 @@ import { newDemarcheId, newTitreId } from '../../database/models/_format/id-crea
 import { TitreDemarchePhaseFind, TitreEtapePhaseFind } from '../../business/rules/titre-phases-find.js'
 import { TitreId } from 'camino-common/src/validators/titres.js'
 import { isNotNullNorUndefined, isNullOrUndefined } from 'camino-common/src/typescript-tools.js'
+import { EtapeBrouillon } from 'camino-common/src/etape.js'
 
 const writePhasesForTest = async () => {
   const demarches: {
@@ -42,7 +43,7 @@ const writePhasesForTest = async () => {
       date: CaminoDate
       duree: number | null
       statut_id: EtapeStatutId
-      is_brouillon: boolean
+      is_brouillon: EtapeBrouillon
       geojson4326_perimetre: NonNullable<unknown> | null
     }[]
   } =
diff --git a/packages/api/src/types.ts b/packages/api/src/types.ts
index 75d65452c..7e58fd070 100644
--- a/packages/api/src/types.ts
+++ b/packages/api/src/types.ts
@@ -22,53 +22,47 @@ import { ActivitesTypesId } from 'camino-common/src/static/activitesTypes.js'
 import { CommuneId } from 'camino-common/src/static/communes.js'
 import { ForetId } from 'camino-common/src/static/forets.js'
 import { TitreId, TitreSlug } from 'camino-common/src/validators/titres.js'
-import { EtapeId, EtapeSlug } from 'camino-common/src/etape'
+import { EtapeBrouillon, EtapeId, EtapeSlug } from 'camino-common/src/etape'
 import { ActiviteId } from 'camino-common/src/activite.js'
 import { FeatureCollectionForages, FeatureCollectionPoints, FeatureMultiPolygon, GeojsonPoint, MultiPolygon } from 'camino-common/src/perimetre.js'
 import { EtapeHeritageProps } from 'camino-common/src/heritage'
 import { GeoSystemeId } from 'camino-common/src/static/geoSystemes'
 import { ElementWithValue } from 'camino-common/src/sections'
-
-enum TitreEtapesTravauxTypes {
-  DemandeAutorisationOuverture = 'wfa',
-  DeclarationOuverture = 'wfo',
-  DeclarationArret = 'wfd',
-  DepotDemande = 'wdd',
-  DemandeComplements = 'wdc',
-  ReceptionComplements = 'wrc',
-  Recevabilite = 'wre',
-  AvisReception = 'war',
-  SaisineAutoriteEnvironmentale = 'wse',
-  AvisAutoriteEnvironmentale = 'wae',
-  SaisineServiceEtat = 'wss',
-  AvisServiceAdminLocal = 'wal',
-  AvisDDTM = 'wad',
-  AvisAutoriteMilitaire = 'wam',
-  AvisARS = 'was',
-  AvisDRAC = 'wac',
-  AvisPrefetMaritime = 'wap',
-  AvisAutresInstances = 'wai',
-  ArretePrefectoralSursis = 'wps',
-  MemoireReponseExploitant = 'wmm',
-  OuvertureEnquetePublique = 'woe',
-  ClotureEnquetePublique = 'wce',
-  RapportDREAL = 'wrd',
-  AvisRapportDirecteurREAL = 'wrl',
-  TransPrescriptionsDemandeur = 'wtp',
-  AvisCODERST = 'wat',
-  AvisPrescriptionsDemandeur = 'wau',
-  PubliDecisionRecueilActesAdmin = 'wpa',
-  DonneActeDeclaration = 'wda',
-  ArretePrefectDonneActe1 = 'wpp',
-  ArretePrefectDonneActe2 = 'wpo',
-  ArretePrescriptionComplementaire = 'wpc',
-  ArreteOuvertureTravauxMiniers = 'wao',
-  MemoireFinTravaux = 'wmt',
-  Recolement = 'wrt',
-  Abandon = 'wab',
-  DecisionAdmin = 'wdm',
-  PorterAConnaissance = 'wpb',
-}
+import { KM2 } from 'camino-common/src/number'
+
+const TitreEtapesTravauxTypes = {
+  AvisDesServicesEtCommissionsConsultatives: 'asc',
+  DemandeAutorisationOuverture: 'wfa',
+  DeclarationOuverture: 'wfo',
+  DeclarationArret: 'wfd',
+  DepotDemande: 'wdd',
+  DemandeComplements: 'wdc',
+  ReceptionComplements: 'wrc',
+  Recevabilite: 'wre',
+  AvisReception: 'war',
+  SaisineAutoriteEnvironmentale: 'wse',
+  AvisAutoriteEnvironmentale: 'wae',
+  AvisPrefetMaritime: 'wap',
+  ArretePrefectoralSursis: 'wps',
+  MemoireReponseExploitant: 'wmm',
+  OuvertureEnquetePublique: 'woe',
+  ClotureEnquetePublique: 'wce',
+  RapportDREAL: 'wrd',
+  AvisRapportDirecteurREAL: 'wrl',
+  TransPrescriptionsDemandeur: 'wtp',
+  AvisPrescriptionsDemandeur: 'wau',
+  PubliDecisionRecueilActesAdmin: 'wpa',
+  DonneActeDeclaration: 'wda',
+  ArretePrefectDonneActe1: 'wpp',
+  ArretePrefectDonneActe2: 'wpo',
+  ArretePrescriptionComplementaire: 'wpc',
+  ArreteOuvertureTravauxMiniers: 'wao',
+  MemoireFinTravaux: 'wmt',
+  Recolement: 'wrt',
+  Abandon: 'wab',
+  DecisionAdmin: 'wdm',
+  PorterAConnaissance: 'wpb',
+} as const satisfies Record<string, EtapeTypeId>
 
 export interface IFields {
   [key: string]: IFields
@@ -239,14 +233,14 @@ export interface ITitreEtapePerimetre {
   geojsonOrigineGeoSystemeId: GeoSystemeId | null | undefined
   geojson4326Forages: FeatureCollectionForages | null | undefined
   geojsonOrigineForages: FeatureCollectionForages | null | undefined
-  surface: number | null | undefined
+  surface: KM2 | null | undefined
 }
 type ITitreEtape = {
   id: EtapeId
   slug?: EtapeSlug
   typeId: EtapeTypeId
   statutId: EtapeStatutId
-  isBrouillon: boolean
+  isBrouillon: EtapeBrouillon
   ordre?: number | null
   date: CaminoDate
   duree?: number | null
@@ -260,6 +254,7 @@ type ITitreEtape = {
   amodiataireIds?: EntrepriseId[] | null
   administrationsLocales?: AdministrationId[] | null
   entrepriseDocumentIds?: EntrepriseDocumentId[] | null
+  etapeDocuments?: unknown[]
   communes?: ICommune[] | null
   forets?: ForetId[] | null
   sdomZones?: SDOMZoneId[] | null
diff --git a/packages/api/tests/_utils/administrations-permissions.ts b/packages/api/tests/_utils/administrations-permissions.ts
index 1ee641f18..791402c00 100644
--- a/packages/api/tests/_utils/administrations-permissions.ts
+++ b/packages/api/tests/_utils/administrations-permissions.ts
@@ -1,7 +1,7 @@
 /* eslint-disable @typescript-eslint/strict-boolean-expressions */
 import { ITitre } from '../../src/types.js'
 
-import { graphQLCall, queryImport } from './index.js'
+import { graphQLCall, queryImport, restPostCall } from './index.js'
 
 import Titres from '../../src/database/models/titres.js'
 import options from '../../src/database/queries/_options.js'
@@ -18,12 +18,15 @@ import type { Pool } from 'pg'
 import { getSections } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.js'
 import { TitreId } from 'camino-common/src/validators/titres.js'
 import TitresDemarches from '../../src/database/models/titres-demarches.js'
-import { ETAPE_HERITAGE_PROPS } from 'camino-common/src/heritage.js'
 import { GEO_SYSTEME_IDS } from 'camino-common/src/static/geoSystemes.js'
 import { DocumentTypeId } from 'camino-common/src/static/documentsTypes.js'
 import { copyFileSync, mkdirSync } from 'node:fs'
-import { TempEtapeDocument } from 'camino-common/src/etape.js'
+import { ETAPE_IS_NOT_BROUILLON, TempEtapeDocument } from 'camino-common/src/etape.js'
 import { tempDocumentNameValidator } from 'camino-common/src/document.js'
+import { userSuper } from '../../src/database/user-super.js'
+import { defaultHeritageProps } from 'camino-common/src/etape-form.js'
+import { isNullOrUndefined } from 'camino-common/src/typescript-tools.js'
+import { HTTP_STATUS } from 'camino-common/src/http.js'
 
 const dir = `${process.cwd()}/files/tmp/`
 
@@ -157,6 +160,11 @@ export const creationCheck = async (pool: Pool, administrationId: string, creer:
     const slug = result.body.data.demarcheCreer.slug
 
     const demarche = await TitresDemarches.query().findOne({ slug })
+    expect(demarche).not.toBeUndefined()
+    expect(demarche).not.toBeNull()
+    if (isNullOrUndefined(demarche)) {
+      throw new Error('pour typescript')
+    }
 
     const etapeTypeId = 'mfr'
 
@@ -196,7 +204,7 @@ export const creationCheck = async (pool: Pool, administrationId: string, creer:
       return acc
     }, {} as any)
 
-    const documentTypesIds = getDocuments(titreTypeId, demarche?.typeId, etapeTypeId)
+    const documentTypesIds = getDocuments(titreTypeId, demarche.typeId, etapeTypeId)
       .filter(({ optionnel }) => !optionnel)
       .map(({ id }) => id)
     const etapeDocuments = []
@@ -204,75 +212,66 @@ export const creationCheck = async (pool: Pool, administrationId: string, creer:
     for (const documentTypeId of documentTypesIds) {
       etapeDocuments.push(testDocumentCreateTemp(documentTypeId))
     }
-    const res = await graphQLCall(
-      pool,
-      queryImport('titre-etape-creer'),
-      {
-        etape: {
-          typeId: etapeTypeId,
-          statutId: 'fai',
-          titreDemarcheId: demarche?.id,
-          date: '2022-01-01',
-          duree: 10,
-          heritageProps: ETAPE_HERITAGE_PROPS.reduce(
-            (acc, prop) => {
-              acc[prop] = { actif: false }
-
-              return acc
-            },
-            {} as {
-              [key: string]: { actif: boolean }
-            }
-          ),
-          heritageContenu,
-          contenu,
-          substances: ['auru'],
-          etapeDocuments,
-          geojson4326Perimetre: {
-            type: 'Feature',
-            properties: {},
-            geometry: {
-              type: 'MultiPolygon',
-              coordinates: [
-                [
-                  [
-                    [1, 2],
-                    [1, 2],
-                    [1, 2],
-                    [1, 2],
-                  ],
-                ],
+    const res = await restPostCall(pool, '/rest/etapes', {}, userSuper, {
+      typeId: etapeTypeId,
+      statutId: 'fai',
+      titreDemarcheId: demarche.id,
+      date: toCaminoDate('2022-01-01'),
+      etapeAvis: [],
+      duree: 10,
+      dateDebut: null,
+      dateFin: null,
+      geojson4326Points: null,
+      geojsonOriginePoints: null,
+      geojsonOrigineForages: null,
+      titulaireIds: [],
+      amodiataireIds: [],
+      notes: null,
+      entrepriseDocumentIds: [],
+      heritageProps: defaultHeritageProps,
+      heritageContenu,
+      contenu,
+      substances: ['auru'],
+      etapeDocuments,
+      geojson4326Perimetre: {
+        type: 'Feature',
+        properties: {},
+        geometry: {
+          type: 'MultiPolygon',
+          coordinates: [
+            [
+              [
+                [1, 2],
+                [1, 2],
+                [1, 2],
+                [1, 2],
               ],
-            },
-          },
-          geojsonOrigineGeoSystemeId: GEO_SYSTEME_IDS.WGS84,
-          geojsonOriginePerimetre: {
-            type: 'Feature',
-            properties: {},
-            geometry: {
-              type: 'MultiPolygon',
-              coordinates: [
-                [
-                  [
-                    [1, 2],
-                    [1, 2],
-                    [1, 2],
-                    [1, 2],
-                  ],
-                ],
+            ],
+          ],
+        },
+      },
+      geojsonOrigineGeoSystemeId: GEO_SYSTEME_IDS.WGS84,
+      geojsonOriginePerimetre: {
+        type: 'Feature',
+        properties: {},
+        geometry: {
+          type: 'MultiPolygon',
+          coordinates: [
+            [
+              [
+                [1, 2],
+                [1, 2],
+                [1, 2],
+                [1, 2],
               ],
-            },
-          },
+            ],
+          ],
         },
       },
-      {
-        role: 'super',
-      }
-    )
+    })
 
     if (creer) {
-      expect(res.body.errors).toBe(undefined)
-      expect(res.body.data).toMatchObject({ etapeCreer: {} })
+      expect(res.statusCode).toBe(HTTP_STATUS.HTTP_STATUS_OK)
     } else {
       expect(res.body.errors[0].message).toBe('droits insuffisants pour créer cette étape')
     }
@@ -326,7 +325,7 @@ const titreBuild = (
             ordre: 0,
             titreDemarcheId: newDemarcheId(`${titreId}-demarche-id`),
             statutId: 'enc',
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             date: toCaminoDate('2020-01-01'),
             administrationsLocales: administrationIdLocale ? [administrationIdLocale] : [],
           },
diff --git a/packages/api/tests/_utils/index.ts b/packages/api/tests/_utils/index.ts
index 3d3801a9f..122afda5d 100644
--- a/packages/api/tests/_utils/index.ts
+++ b/packages/api/tests/_utils/index.ts
@@ -15,7 +15,7 @@ import { CaminoRestRoutes, DeleteRestRoutes, getRestRoute, GetRestRoutes, PostRe
 import { z } from 'zod'
 import { newUtilisateurId } from '../../src/database/models/_format/id-create.js'
 import { idUserKeycloakRecognised } from '../keycloak.js'
-import { isNotNullNorUndefined } from 'camino-common/src/typescript-tools.js'
+import { DeepReadonly, isNotNullNorUndefined } from 'camino-common/src/typescript-tools.js'
 import { config } from '../../src/config/index.js'
 
 export const queryImport = (nom: string) =>
@@ -63,7 +63,7 @@ export const restPostCall = async <Route extends PostRestRoutes>(
   caminoRestRoute: Route,
   params: CaminoRestParams<Route>,
   user: TestUser | undefined,
-  body: z.infer<(typeof CaminoRestRoutes)[Route]['post']['input']>
+  body: DeepReadonly<z.infer<(typeof CaminoRestRoutes)[Route]['post']['input']>>
 ): Promise<request.Test> => {
   const req = request(app(pool))
     .post(getRestRoute(caminoRestRoute, params))
diff --git a/packages/api/tests/queries/titre-etape-creer.graphql b/packages/api/tests/queries/titre-etape-creer.graphql
deleted file mode 100644
index 227069ccf..000000000
--- a/packages/api/tests/queries/titre-etape-creer.graphql
+++ /dev/null
@@ -1,9 +0,0 @@
-mutation EtapeCreer($etape: InputEtapeCreation!) {
-  etapeCreer(etape: $etape) {
-    ...etape
-  }
-}
-
-fragment etape on Etape {
-  id
-}
diff --git a/packages/api/tests/queries/titre-etape-modifier.graphql b/packages/api/tests/queries/titre-etape-modifier.graphql
deleted file mode 100644
index 632c21ef4..000000000
--- a/packages/api/tests/queries/titre-etape-modifier.graphql
+++ /dev/null
@@ -1,9 +0,0 @@
-mutation EtapeModifier($etape: InputEtapeModification!) {
-  etapeModifier(etape: $etape) {
-    ...etape
-  }
-}
-
-fragment etape on Etape {
-  id
-}
diff --git a/packages/common/package.json b/packages/common/package.json
index 8cebcc174..92df90fa3 100644
--- a/packages/common/package.json
+++ b/packages/common/package.json
@@ -11,8 +11,8 @@
     "lint": "prettier --check src && eslint src"
   },
   "devDependencies": {
-    "@typescript-eslint/eslint-plugin": "^7.7.1",
-    "@typescript-eslint/parser": "^7.7.1",
+    "@typescript-eslint/eslint-plugin": "^7.12.0",
+    "@typescript-eslint/parser": "^7.12.0",
     "@vitest/coverage-v8": "^1.5.2",
     "prettier": "^3.2.5",
     "typescript": "^5.4.5",
diff --git a/packages/common/src/date.test.ts b/packages/common/src/date.test.ts
index 8c5432431..a5130a71d 100644
--- a/packages/common/src/date.test.ts
+++ b/packages/common/src/date.test.ts
@@ -13,12 +13,15 @@ import {
   dateFormat,
   isBefore,
   intervalleAnnees,
+  caminoDateValidator,
 } from './date.js'
 import { test, expect } from 'vitest'
 
 test('toCaminoDate', () => {
   expect(() => toCaminoDate('123123')).toThrowError()
   expect(() => toCaminoDate(new Date('plop'))).toThrowError()
+  expect(() => toCaminoDate('2000-42-42')).toThrowError()
+  expect(() => caminoDateValidator.parse('2000-42-42')).toThrowError()
 })
 
 test('dateFormat', () => {
diff --git a/packages/common/src/date.ts b/packages/common/src/date.ts
index 4523e3f3e..180aac8f9 100644
--- a/packages/common/src/date.ts
+++ b/packages/common/src/date.ts
@@ -15,19 +15,20 @@ export const daysBetween = (a: CaminoDate, b: CaminoDate) => {
 export const isBefore = (a: CaminoDate, b: CaminoDate): boolean => {
   return a < b
 }
-
 export const caminoDateValidator = z
   .string()
   .regex(/^\d{4}-\d{2}-\d{2}$/)
   .brand<'Date'>()
+  .refine(date => !isNaN(new Date(date).getTime()), { message: 'date invalide' })
 export type CaminoDate = z.infer<typeof caminoDateValidator>
 
 export type CaminoDateFormated = string & { __camino: 'DateFormated' }
 
+// TODO 2024-06-12 utiliser le validateur zod pour faire tout ça directement, avec une union string/date et un transform
 export const toCaminoDate = (date: Date | string): CaminoDate => {
   if (typeof date === 'string') {
     const parsedDate = caminoDateValidator.safeParse(date)
-    if (parsedDate.success && !isNaN(new Date(date).getTime())) {
+    if (parsedDate.success) {
       return parsedDate.data
     } else {
       throw new Error(`Invalid date string: ${date}`)
diff --git a/packages/common/src/demarche.test.ts b/packages/common/src/demarche.test.ts
index 6b66bd026..e22e77104 100644
--- a/packages/common/src/demarche.test.ts
+++ b/packages/common/src/demarche.test.ts
@@ -43,7 +43,7 @@ test('getDemarcheContenu arm', () => {
               id: 'arm',
               nom: 'Caractéristiques ARM',
               elements: [
-                { id: 'mecanise', nom: 'Prospection mécanisée', description: '', type: 'radio', value: true },
+                { id: 'mecanise', nom: 'Prospection mécanisée', description: '', type: 'radio', value: true, optionnel: false },
                 { id: 'franchissements', nom: "Franchissements de cours d'eau", description: "Nombre de franchissements de cours d'eau", optionnel: true, type: 'integer', value: 12 },
               ],
             },
diff --git a/packages/common/src/demarche.ts b/packages/common/src/demarche.ts
index e5e5e936e..702fa30fa 100644
--- a/packages/common/src/demarche.ts
+++ b/packages/common/src/demarche.ts
@@ -8,7 +8,7 @@ import { entrepriseIdValidator, etapeEntrepriseDocumentValidator } from './entre
 import { EtapeTypeId, etapeTypeIdFondamentaleValidator, etapeTypeIdNonFondamentaleValidator } from './static/etapesTypes.js'
 import { etapeStatutIdValidator } from './static/etapesStatuts.js'
 import { sectionWithValueValidator } from './sections.js'
-import { etapeDocumentValidator, etapeIdValidator, etapeSlugValidator } from './etape.js'
+import { etapeAvisValidator, etapeBrouillonValidator, etapeDocumentValidator, etapeIdValidator, etapeSlugValidator } from './etape.js'
 import { sdomZoneIdValidator } from './static/sdom.js'
 import { km2Validator, numberFormat } from './number.js'
 import { DeviseId, deviseIdValidator, DEVISES_IDS, Devises } from './static/devise.js'
@@ -32,7 +32,7 @@ export type DemarcheIdOrSlug = z.infer<typeof demarcheIdOrSlugValidator>
 
 const demarcheEtapeCommonValidator = z.object({
   etape_statut_id: etapeStatutIdValidator,
-  is_brouillon: z.boolean(),
+  is_brouillon: etapeBrouillonValidator,
   date: caminoDateValidator,
   id: etapeIdValidator,
   ordre: z.number(),
@@ -41,6 +41,7 @@ const demarcheEtapeCommonValidator = z.object({
   sections_with_values: z.array(sectionWithValueValidator),
   entreprises_documents: z.array(etapeEntrepriseDocumentValidator),
   etape_documents: z.array(etapeDocumentValidator),
+  avis_documents: z.array(etapeAvisValidator),
 })
 
 export type DemarcheEtapeCommon = z.infer<typeof demarcheEtapeCommonValidator>
diff --git a/packages/common/src/etape-form.ts b/packages/common/src/etape-form.ts
index 58a1968b1..3193c0b4c 100644
--- a/packages/common/src/etape-form.ts
+++ b/packages/common/src/etape-form.ts
@@ -1,32 +1,36 @@
 import { z } from 'zod'
-import { caminoDateValidator } from './date'
-import { demarcheIdValidator, demarcheSlugValidator } from './demarche'
-import { entrepriseDocumentIdValidator, entrepriseIdValidator } from './entreprise'
+import { caminoDateValidator } from './date.js'
+import { demarcheIdValidator, demarcheSlugValidator } from './demarche.js'
+import { entrepriseDocumentIdValidator, entrepriseIdValidator } from './entreprise.js'
 import {
   documentComplementaireAslEtapeDocumentModificationValidator,
   documentComplementaireDaeEtapeDocumentModificationValidator,
+  etapeAvisModificationValidator,
+  etapeBrouillonValidator,
   etapeDocumentModificationValidator,
   etapeIdValidator,
   etapeSlugValidator,
-} from './etape'
-import { km2Validator } from './number'
-import { featureCollectionForagesValidator, featureCollectionPointsValidator, featureMultiPolygonValidator } from './perimetre'
-import { demarcheTypeIdValidator } from './static/demarchesTypes'
-import { etapeStatutIdValidator } from './static/etapesStatuts'
-import { etapeTypeIdValidator } from './static/etapesTypes'
-import { geoSystemeIdValidator } from './static/geoSystemes'
-import { substanceLegaleIdValidator } from './static/substancesLegales'
-import { titreTypeIdValidator } from './static/titresTypes'
-import { titreIdValidator, titreSlugValidator } from './validators/titres'
-import { makeFlattenValidator, nullToDefault } from './zod-tools'
+} from './etape.js'
+import { km2Validator } from './number.js'
+import { featureCollectionForagesValidator, featureCollectionPointsValidator, featureMultiPolygonValidator } from './perimetre.js'
+import { demarcheTypeIdValidator } from './static/demarchesTypes.js'
+import { etapeStatutIdValidator } from './static/etapesStatuts.js'
+import { etapeTypeIdValidator } from './static/etapesTypes.js'
+import { geoSystemeIdValidator } from './static/geoSystemes.js'
+import { substanceLegaleIdValidator } from './static/substancesLegales.js'
+import { titreTypeIdValidator } from './static/titresTypes.js'
+import { titreIdValidator, titreSlugValidator } from './validators/titres.js'
+import { makeFlattenValidator, nullToDefault } from './zod-tools.js'
+import { numberElementValueValidator } from './sections.js'
 
 const contenuValidator = z
   .record(z.string(), z.record(z.string(), z.union([caminoDateValidator, z.string(), z.number(), z.boolean(), z.array(z.string())]).nullable()))
   .nullable()
   .transform(nullToDefault({}))
-const dureeValidator = z.number().nullable()
+export type EtapeContenu = z.infer<typeof contenuValidator>
+const dureeValidator = z.number().nonnegative().nullable()
 
-const defaultHeritageProps = {
+export const defaultHeritageProps = {
   dateDebut: { actif: false, etape: null },
   dateFin: { actif: false, etape: null },
   duree: { actif: false, etape: null },
@@ -34,7 +38,7 @@ const defaultHeritageProps = {
   substances: { actif: false, etape: null },
   titulaires: { actif: false, etape: null },
   amodiataires: { actif: false, etape: null },
-}
+} as const
 
 const heritagePropsValidator = z
   .object({
@@ -65,7 +69,7 @@ const heritagePropsValidator = z
   .nullable()
   .transform(nullToDefault(defaultHeritageProps))
 
-const heritageContenuValidator = z
+export const heritageContenuValidator = z
   .record(
     z.string(),
     z.record(z.string(), z.object({ actif: z.boolean(), etape: z.object({ typeId: etapeTypeIdValidator, date: caminoDateValidator, contenu: contenuValidator }).nullable().optional() }))
@@ -73,7 +77,9 @@ const heritageContenuValidator = z
   .nullable()
   .transform(nullToDefault({}))
 
-export const graphqlEtapeValidator = z.object({
+export type HeritageContenu = z.infer<typeof heritageContenuValidator>
+
+const graphqlEtapeValidator = z.object({
   id: etapeIdValidator,
   slug: etapeSlugValidator,
   titreDemarcheId: demarcheIdValidator,
@@ -110,7 +116,7 @@ export const graphqlEtapeValidator = z.object({
   notes: z.string().nullable(),
   heritageProps: heritagePropsValidator,
   heritageContenu: heritageContenuValidator,
-  isBrouillon: z.boolean(),
+  isBrouillon: etapeBrouillonValidator,
 })
 
 const perimetreObjectValidator = z.object({
@@ -124,6 +130,11 @@ const perimetreObjectValidator = z.object({
   surface: km2Validator.nullable(),
 })
 
+const flattenedContenuElementValidator = makeFlattenValidator(z.union([caminoDateValidator, z.string(), numberElementValueValidator, z.boolean(), z.array(z.string())]).nullable())
+export type FlattenedContenuElement = z.infer<typeof flattenedContenuElementValidator>
+const flattenedContenuValidator = z.record(z.string(), z.record(z.string(), flattenedContenuElementValidator))
+export type FlattenedContenu = z.infer<typeof flattenedContenuValidator>
+
 export const flattenEtapeValidator = graphqlEtapeValidator
   .omit({
     heritageProps: true,
@@ -153,10 +164,13 @@ export const flattenEtapeValidator = graphqlEtapeValidator
     substances: makeFlattenValidator(z.array(substanceLegaleIdValidator)),
     titulaires: makeFlattenValidator(z.array(entrepriseIdValidator)),
     amodiataires: makeFlattenValidator(z.array(entrepriseIdValidator)),
-    contenu: z.record(z.string(), z.record(z.string(), makeFlattenValidator(z.union([caminoDateValidator, z.string(), z.number(), z.boolean(), z.array(z.string())]).nullable()))),
+    contenu: flattenedContenuValidator,
   })
 
 export type FlattenEtape = z.infer<typeof flattenEtapeValidator>
+
+export type GraphqlEtape = z.infer<typeof graphqlEtapeValidator>
+
 const graphqlInputHeritagePropValidator = z.object({
   actif: z.boolean(),
 })
@@ -171,7 +185,7 @@ const graphqlInputHeritagePropsValidator = z.object({
   amodiataires: graphqlInputHeritagePropValidator,
 })
 
-export const graphqlEtapeCreationValidator = graphqlEtapeValidator
+export const restEtapeCreationValidator = graphqlEtapeValidator
   .pick({
     typeId: true,
     statutId: true,
@@ -197,13 +211,14 @@ export const graphqlEtapeCreationValidator = graphqlEtapeValidator
     heritageContenu: z.record(z.string(), z.record(z.string(), z.object({ actif: z.boolean() }))),
     etapeDocuments: z.array(etapeDocumentModificationValidator),
     entrepriseDocumentIds: z.array(entrepriseDocumentIdValidator),
+    etapeAvis: z.array(etapeAvisModificationValidator),
   })
 
-export type GraphqlEtapeCreation = z.infer<typeof graphqlEtapeCreationValidator>
+export type RestEtapeCreation = z.infer<typeof restEtapeCreationValidator>
 
-export const graphqlEtapeModificationValidator = graphqlEtapeCreationValidator.extend({
+export const restEtapeModificationValidator = restEtapeCreationValidator.extend({
   id: etapeIdValidator,
   daeDocument: documentComplementaireDaeEtapeDocumentModificationValidator.nullable(),
   aslDocument: documentComplementaireAslEtapeDocumentModificationValidator.nullable(),
 })
-export type GraphqlEtapeModification = z.infer<typeof graphqlEtapeModificationValidator>
+export type RestEtapeModification = z.infer<typeof restEtapeModificationValidator>
diff --git a/packages/common/src/etape.ts b/packages/common/src/etape.ts
index 347575c00..3e11ff5dc 100644
--- a/packages/common/src/etape.ts
+++ b/packages/common/src/etape.ts
@@ -1,20 +1,21 @@
 import { CaminoDate, caminoDateValidator } from './date.js'
-import { EntrepriseId } from './entreprise.js'
 import { EtapeHeritageProps, MappingHeritagePropsNameEtapePropsName } from './heritage.js'
-import { AdministrationId } from './static/administrations.js'
 import { DOCUMENTS_TYPES_IDS, documentTypeIdValidator } from './static/documentsTypes.js'
 import { EtapeStatutId, etapeStatutIdValidator } from './static/etapesStatuts.js'
 import { EtapeTypeId, etapeTypeIdValidator } from './static/etapesTypes.js'
-import { SubstanceLegaleId } from './static/substancesLegales.js'
 import { z } from 'zod'
-import { FeatureCollectionForages, FeatureCollectionPoints, FeatureMultiPolygon } from './perimetre.js'
-import { KM2 } from './number.js'
-import { GeoSystemeId } from './static/geoSystemes.js'
 import { tempDocumentNameValidator } from './document.js'
-import { ElementWithValue } from './sections.js'
 import { DemarcheTypeId } from './static/demarchesTypes.js'
 import { TitreTypeId } from './static/titresTypes.js'
 import { User, isEntrepriseOrBureauDEtude } from './roles.js'
+import { avisStatutIdValidator, avisTypeIdValidator, avisVisibilityIdValidator } from './static/avisTypes.js'
+import { GraphqlEtape } from './etape-form.js'
+
+export const etapeBrouillonValidator = z.boolean().brand('EtapeBrouillon')
+export type EtapeBrouillon = z.infer<typeof etapeBrouillonValidator>
+
+export const ETAPE_IS_BROUILLON = true as EtapeBrouillon
+export const ETAPE_IS_NOT_BROUILLON = false as EtapeBrouillon
 
 export const etapeIdValidator = z.string().brand<'EtapeId'>()
 export type EtapeId = z.infer<typeof etapeIdValidator>
@@ -27,41 +28,12 @@ export type EtapeIdOrSlug = z.infer<typeof etapeIdOrSlugValidator>
 
 type HeritageProp<T> = { actif: boolean; etape?: T | null }
 
-// TODO 2023-06-14 Utiliser seulement par l’ui, à bouger dedans
-type Etape = {
-  id: EtapeId | null
-  contenu: Record<string, Record<string, ElementWithValue['value']>>
-  date: CaminoDate | null
-  typeId: EtapeTypeId | null
-  statutId: EtapeStatutId | null
-  isBrouillon: boolean
-  substances: SubstanceLegaleId[]
-  titulaireIds: EntrepriseId[]
-  amodiataireIds: EntrepriseId[]
-  administrations?: AdministrationId[]
-  communes?: string[]
-
-  geojson4326Perimetre: FeatureMultiPolygon | null
-  geojson4326Points: FeatureCollectionPoints | null
-  geojsonOriginePerimetre: FeatureMultiPolygon | null
-  geojsonOriginePoints: FeatureCollectionPoints | null
-  geojsonOrigineGeoSystemeId: GeoSystemeId | null
-  geojson4326Forages: FeatureCollectionForages | null
-  geojsonOrigineForages: FeatureCollectionForages | null
-  surface: KM2 | null
-
-  notes: null | string
-  duree: number | null
-  dateDebut: CaminoDate | null
-  dateFin: CaminoDate | null
-}
-
 type EtapePropsFromHeritagePropName<key extends EtapeHeritageProps> = MappingHeritagePropsNameEtapePropsName[key][number]
 
-type EtapeWithHeritage = InternalEtapeWithHeritage<EtapeHeritageProps, Omit<Etape, 'typeId' | 'date' | 'statutId'> & { typeId: EtapeTypeId; date: CaminoDate; statutId: EtapeStatutId }>
+type EtapeWithHeritage = InternalEtapeWithHeritage<EtapeHeritageProps, Omit<GraphqlEtape, 'typeId' | 'date' | 'statutId'> & { typeId: EtapeTypeId; date: CaminoDate; statutId: EtapeStatutId }>
 
 type HeritageContenu = Record<string, Record<string, HeritageProp<Pick<EtapeWithHeritage, 'contenu' | 'typeId' | 'date'>>>>
-type InternalEtapeWithHeritage<HeritagePropsKeys extends EtapeHeritageProps, T extends Pick<Etape, 'date' | EtapePropsFromHeritagePropName<HeritagePropsKeys>> & { typeId: EtapeTypeId }> = T & {
+type InternalEtapeWithHeritage<HeritagePropsKeys extends EtapeHeritageProps, T extends Pick<GraphqlEtape, 'date' | EtapePropsFromHeritagePropName<HeritagePropsKeys>> & { typeId: EtapeTypeId }> = T & {
   heritageProps: {
     [key in HeritagePropsKeys]: HeritageProp<Pick<T, 'typeId' | 'date' | EtapePropsFromHeritagePropName<key>>>
   }
@@ -114,13 +86,39 @@ export const getEtapeDocumentsByEtapeIdValidator = z.object({
 
 export type GetEtapeDocumentsByEtapeId = z.infer<typeof getEtapeDocumentsByEtapeIdValidator>
 
+export const etapeAvisIdValidator = z.string().brand('EtapeAvis')
+export type EtapeAvisId = z.infer<typeof etapeAvisIdValidator>
+export const etapeAvisValidator = z.object({
+  id: etapeAvisIdValidator,
+  avis_type_id: avisTypeIdValidator,
+  date: caminoDateValidator,
+  avis_statut_id: avisStatutIdValidator,
+  has_file: z.boolean(),
+  description: z.string(),
+  avis_visibility_id: avisVisibilityIdValidator,
+})
+export type EtapeAvis = z.infer<typeof etapeAvisValidator>
+
+const etapeAvisWithFileModificationValidator = etapeAvisValidator.extend({ temp_document_name: tempDocumentNameValidator.optional() })
+export type EtapeAvisWithFileModification = z.infer<typeof etapeAvisWithFileModificationValidator>
+
+export const tempEtapeAvisValidator = etapeAvisWithFileModificationValidator.omit({ id: true, has_file: true })
+export type TempEtapeAvis = z.infer<typeof tempEtapeAvisValidator>
+
+export const getEtapeAvisByEtapeIdValidator = z.array(etapeAvisValidator)
+
+export type GetEtapeAvisByEtapeId = z.infer<typeof getEtapeAvisByEtapeIdValidator>
+
+export const etapeAvisModificationValidator = z.union([etapeAvisWithFileModificationValidator, tempEtapeAvisValidator])
+export type EtapeAvisModification = z.infer<typeof etapeAvisModificationValidator>
+
 export const needAslAndDae = (
   tde: {
     etapeTypeId: EtapeTypeId
     demarcheTypeId: DemarcheTypeId
     titreTypeId: TitreTypeId
   },
-  isBrouillon: boolean,
+  isBrouillon: EtapeBrouillon,
   user: User
 ): boolean => {
   return tde.etapeTypeId === 'mfr' && tde.demarcheTypeId === 'oct' && tde.titreTypeId === 'axm' && isEntrepriseOrBureauDEtude(user) && isBrouillon
diff --git a/packages/common/src/number.ts b/packages/common/src/number.ts
index 177988753..d10f20bb2 100644
--- a/packages/common/src/number.ts
+++ b/packages/common/src/number.ts
@@ -33,11 +33,11 @@ export const toDegresMinutes = (value: number): { degres: number; minutes: numbe
   }
 }
 
-export const km2Validator = z.number().brand('CAMINO_KM2')
+export const km2Validator = z.number().nonnegative().brand('CAMINO_KM2')
 export const m2Validator = z
   .number()
   .transform(value => parseInt(`${value}`))
   .brand('CAMINO_M2')
-
+export const ZERO_KM2 = km2Validator.parse(0)
 export type KM2 = z.infer<typeof km2Validator>
 export type M2 = z.infer<typeof m2Validator>
diff --git a/packages/common/src/perimetre.ts b/packages/common/src/perimetre.ts
index 26ee314ab..226ac0e24 100644
--- a/packages/common/src/perimetre.ts
+++ b/packages/common/src/perimetre.ts
@@ -134,7 +134,7 @@ export const geojsonInformationsValidator = z.object({
 
 export type GeojsonInformations = z.infer<typeof geojsonInformationsValidator>
 
-export const perimetreInformationsValidator = geojsonInformationsValidator.pick({ superposition_alertes: true, sdomZoneIds: true })
+export const perimetreInformationsValidator = geojsonInformationsValidator.pick({ superposition_alertes: true, sdomZoneIds: true }).extend({ communes: z.array(communeIdValidator) })
 export type PerimetreInformations = z.infer<typeof perimetreInformationsValidator>
 
 export const geojsonImportBodyValidator = z.object({
diff --git a/packages/common/src/permissions/documents.test.ts b/packages/common/src/permissions/documents.test.ts
deleted file mode 100644
index e2b98a3f8..000000000
--- a/packages/common/src/permissions/documents.test.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import { describe, test, expect } from 'vitest'
-import { isDocumentsComplete } from './documents.js'
-describe('teste isDocumentsComplete', () => {
-  test('tous les documents sont optionnels', () => {
-    const errors = isDocumentsComplete([], [{ id: 'arr', optionnel: true }])
-    expect(errors.valid).toBe(true)
-  })
-
-  test('il manque un document obligatoire', () => {
-    const errors = isDocumentsComplete([], [{ id: 'arr', optionnel: false }])
-    expect(errors.valid).toBe(false)
-    expect(errors).toMatchInlineSnapshot(`
-      {
-        "errors": [
-          "le document "arr" est obligatoire",
-        ],
-        "valid": false,
-      }
-    `)
-  })
-
-  test('il manque le fichier à un document obligatoire', () => {
-    const errors = isDocumentsComplete(
-      [
-        {
-          etape_document_type_id: 'aac',
-        },
-      ],
-      [{ id: 'arr', optionnel: false }]
-    )
-    expect(errors.valid).toBe(false)
-    expect(errors).toMatchInlineSnapshot(`
-      {
-        "errors": [
-          "le document "arr" est obligatoire",
-        ],
-        "valid": false,
-      }
-    `)
-  })
-
-  test('le document obligatoire est complet', () => {
-    const errors = isDocumentsComplete(
-      [
-        {
-          etape_document_type_id: 'arr',
-        },
-      ],
-      [{ id: 'arr', optionnel: false }]
-    )
-    expect(errors.valid).toBe(true)
-  })
-})
diff --git a/packages/common/src/permissions/documents.ts b/packages/common/src/permissions/documents.ts
deleted file mode 100644
index a815cc757..000000000
--- a/packages/common/src/permissions/documents.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { DocumentType } from 'camino-common/src/static/documentsTypes.js'
-import { EtapeDocument } from '../etape'
-
-export const isDocumentsComplete = (
-  documents: Pick<EtapeDocument, 'etape_document_type_id'>[],
-  documentsTypes?: Pick<DocumentType, 'id' | 'optionnel'>[]
-): { valid: true } | { valid: false; errors: string[] } => {
-  const errors = [] as string[]
-
-  if (documentsTypes) {
-    documentsTypes
-      .filter(dt => !dt.optionnel)
-      .forEach(dt => {
-        if (!documents?.find(d => d.etape_document_type_id === dt.id)) {
-          errors.push(`le document "${dt.id}" est obligatoire`)
-        }
-      })
-  } else if (documents?.length) {
-    errors.push(`impossible de lier un document`)
-  }
-
-  if (errors.length === 0) {
-    return { valid: true }
-  }
-
-  return { valid: false, errors }
-}
diff --git a/packages/common/src/permissions/etape-form.test.ts b/packages/common/src/permissions/etape-form.test.ts
index 24fb6624c..6ffad2d99 100644
--- a/packages/common/src/permissions/etape-form.test.ts
+++ b/packages/common/src/permissions/etape-form.test.ts
@@ -2,53 +2,141 @@ import { expect, test } from 'vitest'
 import {
   entrepriseDocumentsStepIsComplete,
   entrepriseDocumentsStepIsVisible,
+  etapeAvisStepIsVisible,
   etapeDocumentsStepIsComplete,
   etapeDocumentsStepIsVisible,
   fondamentaleStepIsComplete,
   fondamentaleStepIsVisible,
+  getAvisTypes,
   getDocumentsTypes,
   perimetreStepIsComplete,
   perimetreStepIsVisible,
   sectionsStepIsComplete,
   sectionsStepIsVisible,
 } from './etape-form'
-import { documentTypeIdComplementaireObligatoireASL, documentTypeIdComplementaireObligatoireDAE, etapeDocumentIdValidator } from '../etape'
+import { ETAPE_IS_BROUILLON, ETAPE_IS_NOT_BROUILLON, documentTypeIdComplementaireObligatoireASL, documentTypeIdComplementaireObligatoireDAE, etapeDocumentIdValidator } from '../etape'
 import { toCaminoDate } from '../date'
 import { testBlankUser } from '../tests-utils'
-import { entrepriseDocumentIdValidator, entrepriseIdValidator } from '../entreprise'
+import { entrepriseIdValidator } from '../entreprise'
+import { communeIdValidator } from '../static/communes'
 
 test('fondamentaleStepIsVisible', () => {
   expect(fondamentaleStepIsVisible('mfr')).toBe(true)
-  expect(fondamentaleStepIsVisible('aac')).toBe(false)
+  expect(fondamentaleStepIsVisible('acg')).toBe(false)
 })
 
 test('fondamentaleStepIsComplete', () => {
-  expect(fondamentaleStepIsComplete({ duree: { value: 0, heritee: false, etapeHeritee: null }, substances: { value: [], heritee: false, etapeHeritee: null }, typeId: 'aac' }, 'amo', 'prr')).toBe(true)
-
-  expect(fondamentaleStepIsComplete({ duree: { value: 0, heritee: false, etapeHeritee: null }, substances: { value: [], heritee: false, etapeHeritee: null }, typeId: 'dpu' }, 'amo', 'prr')).toBe(true)
-  expect(fondamentaleStepIsComplete({ duree: { value: 0, heritee: false, etapeHeritee: null }, substances: { value: [], heritee: false, etapeHeritee: null }, typeId: 'mfr' }, 'amo', 'prr')).toBe(
-    false
-  )
+  expect(
+    fondamentaleStepIsComplete(
+      {
+        duree: { value: 0, heritee: false, etapeHeritee: null },
+        substances: { value: [], heritee: false, etapeHeritee: null },
+        typeId: 'acg',
+        titulaires: { value: [], heritee: false, etapeHeritee: null },
+      },
+      'amo',
+      'prr'
+    ).valid
+  ).toBe(true)
 
   expect(
-    fondamentaleStepIsComplete({ duree: { value: 0, heritee: false, etapeHeritee: null }, substances: { value: ['auru'], heritee: false, etapeHeritee: null }, typeId: 'mfr' }, 'oct', 'prr')
+    fondamentaleStepIsComplete(
+      {
+        duree: { value: 0, heritee: false, etapeHeritee: null },
+        substances: { value: [], heritee: false, etapeHeritee: null },
+        typeId: 'dpu',
+        titulaires: { value: [], heritee: false, etapeHeritee: null },
+      },
+      'amo',
+      'prr'
+    ).valid
   ).toBe(true)
   expect(
-    fondamentaleStepIsComplete({ duree: { value: 2, heritee: false, etapeHeritee: null }, substances: { value: ['auru'], heritee: false, etapeHeritee: null }, typeId: 'mfr' }, 'oct', 'arm')
+    fondamentaleStepIsComplete(
+      {
+        duree: { value: 0, heritee: false, etapeHeritee: null },
+        substances: { value: [], heritee: false, etapeHeritee: null },
+        typeId: 'mfr',
+        titulaires: { value: [], heritee: false, etapeHeritee: null },
+      },
+      'amo',
+      'prr'
+    ).valid
+  ).toBe(false)
+
+  expect(
+    fondamentaleStepIsComplete(
+      {
+        duree: { value: 0, heritee: false, etapeHeritee: null },
+        substances: { value: ['auru'], heritee: false, etapeHeritee: null },
+        typeId: 'mfr',
+        titulaires: { value: [], heritee: false, etapeHeritee: null },
+      },
+      'oct',
+      'prr'
+    ).valid
   ).toBe(true)
   expect(
-    fondamentaleStepIsComplete({ duree: { value: 0, heritee: false, etapeHeritee: null }, substances: { value: ['auru'], heritee: false, etapeHeritee: null }, typeId: 'mfr' }, 'oct', 'arm')
+    fondamentaleStepIsComplete(
+      {
+        duree: { value: 2, heritee: false, etapeHeritee: null },
+        substances: { value: ['auru'], heritee: false, etapeHeritee: null },
+        typeId: 'mfr',
+        titulaires: { value: [], heritee: false, etapeHeritee: null },
+      },
+      'oct',
+      'arm'
+    ).valid
+  ).toBe(false)
+  expect(
+    fondamentaleStepIsComplete(
+      {
+        duree: { value: 0, heritee: false, etapeHeritee: null },
+        substances: { value: ['auru'], heritee: false, etapeHeritee: null },
+        typeId: 'mfr',
+        titulaires: { value: [], heritee: false, etapeHeritee: null },
+      },
+      'oct',
+      'arm'
+    ).valid
+  ).toBe(false)
+  expect(
+    fondamentaleStepIsComplete(
+      {
+        duree: { value: 2, heritee: false, etapeHeritee: null },
+        substances: { value: [], heritee: false, etapeHeritee: null },
+        typeId: 'mfr',
+        titulaires: { value: [], heritee: false, etapeHeritee: null },
+      },
+      'oct',
+      'arm'
+    ).valid
   ).toBe(false)
-  expect(fondamentaleStepIsComplete({ duree: { value: 2, heritee: false, etapeHeritee: null }, substances: { value: [], heritee: false, etapeHeritee: null }, typeId: 'mfr' }, 'oct', 'arm')).toBe(
-    false
-  )
 
   expect(
-    fondamentaleStepIsComplete({ duree: { value: 0, heritee: false, etapeHeritee: null }, substances: { value: ['auru'], heritee: false, etapeHeritee: null }, typeId: 'mfr' }, 'mut', 'arm')
+    fondamentaleStepIsComplete(
+      {
+        duree: { value: 0, heritee: false, etapeHeritee: null },
+        substances: { value: ['auru'], heritee: false, etapeHeritee: null },
+        typeId: 'mfr',
+        titulaires: { value: [], heritee: false, etapeHeritee: null },
+      },
+      'mut',
+      'arm'
+    ).valid
   ).toBe(true)
-  expect(fondamentaleStepIsComplete({ duree: { value: 0, heritee: false, etapeHeritee: null }, substances: { value: [], heritee: false, etapeHeritee: null }, typeId: 'mfr' }, 'mut', 'arm')).toBe(
-    false
-  )
+  expect(
+    fondamentaleStepIsComplete(
+      {
+        duree: { value: 0, heritee: false, etapeHeritee: null },
+        substances: { value: [], heritee: false, etapeHeritee: null },
+        typeId: 'mfr',
+        titulaires: { value: [], heritee: false, etapeHeritee: null },
+      },
+      'mut',
+      'arm'
+    ).valid
+  ).toBe(false)
 })
 
 test('sectionsStepIsVisible', () => {
@@ -57,13 +145,13 @@ test('sectionsStepIsVisible', () => {
 })
 
 test('sectionsStepIsComplete', () => {
-  expect(sectionsStepIsComplete({ typeId: 'mfr', contenu: {} }, 'oct', 'arm')).toBe(false)
-  expect(sectionsStepIsComplete({ typeId: 'mfr', contenu: { arm: { mecanise: { value: true, heritee: false, etapeHeritee: null } } } }, 'oct', 'arm')).toBe(true)
+  expect(sectionsStepIsComplete({ typeId: 'mfr', contenu: {} }, 'oct', 'arm').valid).toBe(false)
+  expect(sectionsStepIsComplete({ typeId: 'mfr', contenu: { arm: { mecanise: { value: true, heritee: false, etapeHeritee: null } } } }, 'oct', 'arm').valid).toBe(true)
 })
 
 test('perimetreStepIsVisible', () => {
   expect(perimetreStepIsVisible({ typeId: 'mfr' })).toBe(true)
-  expect(perimetreStepIsVisible({ typeId: 'aac' })).toBe(false)
+  expect(perimetreStepIsVisible({ typeId: 'acg' })).toBe(false)
 })
 
 test('perimetreStepIsComplete', () => {
@@ -84,7 +172,7 @@ test('perimetreStepIsComplete', () => {
         heritee: false,
         etapeHeritee: null,
       },
-    })
+    }).valid
   ).toBe(false)
   expect(
     perimetreStepIsComplete({
@@ -103,11 +191,11 @@ test('perimetreStepIsComplete', () => {
         heritee: false,
         etapeHeritee: null,
       },
-    })
+    }).valid
   ).toBe(true)
   expect(
     perimetreStepIsComplete({
-      typeId: 'aac',
+      typeId: 'acg',
       perimetre: {
         value: {
           geojson4326Perimetre: null,
@@ -122,7 +210,7 @@ test('perimetreStepIsComplete', () => {
         heritee: false,
         etapeHeritee: null,
       },
-    })
+    }).valid
   ).toBe(true)
   expect(
     perimetreStepIsComplete({
@@ -141,7 +229,7 @@ test('perimetreStepIsComplete', () => {
         heritee: false,
         etapeHeritee: null,
       },
-    })
+    }).valid
   ).toBe(true)
 })
 
@@ -217,32 +305,34 @@ const axmDocumentsComplete = [
 
 const entreprise1 = { id: entrepriseIdValidator.parse('id1'), nom: 'entrepriseNom' }
 test('etapeDocumentsStepIsComplete', () => {
-  expect(etapeDocumentsStepIsComplete({ typeId: 'asl', contenu: {}, isBrouillon: false }, 'oct', 'axm', [], [], null, null, null)).toBe(false)
+  expect(etapeDocumentsStepIsComplete({ typeId: 'asl', contenu: {}, isBrouillon: ETAPE_IS_NOT_BROUILLON }, 'oct', 'axm', [], [], null, null, null).valid).toBe(false)
   expect(
     etapeDocumentsStepIsComplete(
-      { typeId: 'asl', contenu: {}, isBrouillon: false },
+      { typeId: 'asl', contenu: {}, isBrouillon: ETAPE_IS_NOT_BROUILLON },
       'oct',
       'axm',
-      [{ id: etapeDocumentIdValidator.parse('idDoc1'), description: null, entreprises_lecture: true, public_lecture: true, etape_document_type_id: documentTypeIdComplementaireObligatoireASL }],
+      [{ etape_document_type_id: documentTypeIdComplementaireObligatoireASL }],
       [],
       null,
       null,
       null
-    )
+    ).valid
   ).toBe(true)
 
-  expect(etapeDocumentsStepIsComplete({ typeId: 'mfr', contenu: {}, isBrouillon: true }, 'oct', 'axm', axmDocumentsComplete, [], null, null, { ...testBlankUser, role: 'super' })).toBe(true)
   expect(
-    etapeDocumentsStepIsComplete({ typeId: 'mfr', contenu: {}, isBrouillon: true }, 'oct', 'axm', axmDocumentsComplete, [], null, null, {
+    etapeDocumentsStepIsComplete({ typeId: 'mfr', contenu: {}, isBrouillon: ETAPE_IS_BROUILLON }, 'oct', 'axm', axmDocumentsComplete, [], null, null, { ...testBlankUser, role: 'super' }).valid
+  ).toBe(true)
+  expect(
+    etapeDocumentsStepIsComplete({ typeId: 'mfr', contenu: {}, isBrouillon: ETAPE_IS_BROUILLON }, 'oct', 'axm', axmDocumentsComplete, [], null, null, {
       ...testBlankUser,
       role: 'entreprise',
       entreprises: [entreprise1],
-    })
+    }).valid
   ).toBe(false)
 
   expect(
     etapeDocumentsStepIsComplete(
-      { typeId: 'mfr', contenu: {}, isBrouillon: true },
+      { typeId: 'mfr', contenu: {}, isBrouillon: ETAPE_IS_BROUILLON },
       'oct',
       'axm',
       axmDocumentsComplete,
@@ -255,7 +345,6 @@ test('etapeDocumentsStepIsComplete', () => {
         etape_statut_id: 'exe',
         public_lecture: true,
         etape_document_type_id: documentTypeIdComplementaireObligatoireDAE,
-        id: etapeDocumentIdValidator.parse('daeId'),
       },
       {
         date: toCaminoDate('2023-02-02'),
@@ -264,10 +353,9 @@ test('etapeDocumentsStepIsComplete', () => {
         etape_statut_id: 'exe',
         public_lecture: true,
         etape_document_type_id: documentTypeIdComplementaireObligatoireASL,
-        id: etapeDocumentIdValidator.parse('aslId'),
       },
       { ...testBlankUser, role: 'entreprise', entreprises: [entreprise1] }
-    )
+    ).valid
   ).toBe(true)
 })
 
@@ -283,7 +371,7 @@ test('entrepriseDocumentsStepIsComplete', () => {
       'oct',
       'axm',
       []
-    )
+    ).valid
   ).toBe(true)
   expect(
     entrepriseDocumentsStepIsComplete(
@@ -291,8 +379,8 @@ test('entrepriseDocumentsStepIsComplete', () => {
       'oct',
       'axm',
       []
-    )
-  ).toBe(true)
+    ).valid
+  ).toBe(false)
 
   expect(
     entrepriseDocumentsStepIsComplete(
@@ -300,7 +388,7 @@ test('entrepriseDocumentsStepIsComplete', () => {
       'oct',
       'axm',
       []
-    )
+    ).valid
   ).toBe(false)
   expect(
     entrepriseDocumentsStepIsComplete(
@@ -308,7 +396,7 @@ test('entrepriseDocumentsStepIsComplete', () => {
       'oct',
       'axm',
       []
-    )
+    ).valid
   ).toBe(false)
 
   expect(
@@ -323,38 +411,32 @@ test('entrepriseDocumentsStepIsComplete', () => {
       'arm',
       [
         {
-          id: entrepriseDocumentIdValidator.parse('idatf'),
           documentTypeId: 'atf',
           entrepriseId: entreprise1.id,
         },
         {
-          id: entrepriseDocumentIdValidator.parse('idcur'),
           documentTypeId: 'cur',
           entrepriseId: entreprise1.id,
         },
 
         {
-          id: entrepriseDocumentIdValidator.parse('idjid'),
           documentTypeId: 'jid',
           entrepriseId: entreprise1.id,
         },
         {
-          id: entrepriseDocumentIdValidator.parse('idjct'),
           documentTypeId: 'jct',
           entrepriseId: entreprise1.id,
         },
         {
-          id: entrepriseDocumentIdValidator.parse('idkbi'),
           documentTypeId: 'kbi',
           entrepriseId: entreprise1.id,
         },
         {
-          id: entrepriseDocumentIdValidator.parse('idjcf'),
           documentTypeId: 'jcf',
           entrepriseId: entreprise1.id,
         },
       ]
-    )
+    ).valid
   ).toBe(true)
 })
 
@@ -863,3 +945,319 @@ test('getDocumentsTypes', () => {
     ]
   `)
 })
+
+test('getAvisType', () => {
+  expect(getAvisTypes('mfr', 'arm', [])).toMatchInlineSnapshot(`[]`)
+  expect(getAvisTypes('asc', 'arm', [])).toMatchInlineSnapshot(`
+    [
+      {
+        "id": "lettreDeSaisineDesServices",
+        "nom": "Lettre de saisine des services",
+        "optionnel": false,
+      },
+      {
+        "id": "avisDirectionRegionaleDesAffairesCulturelles",
+        "nom": "Avis de la Direction Régionale Des Affaires Culturelles (DRAC)",
+        "optionnel": true,
+      },
+      {
+        "id": "avisConseilDepartementalEnvironnementRisquesSanitairesTechnologiques",
+        "nom": "Avis du Conseil Départemental de l'Environnement et des Risques Sanitaires et Technologiques (CODERST)",
+        "optionnel": true,
+      },
+      {
+        "id": "avisDirectionsRégionalesEconomieEmploiTravailSolidarités",
+        "nom": "Avis de la Direction régionale de l’économie, de l’emploi, du travail et des solidarités",
+        "optionnel": true,
+      },
+      {
+        "id": "avisDirectionRegionaleFinancesPubliques",
+        "nom": "Avis de la Direction Regionale Des Finances Publiques",
+        "optionnel": true,
+      },
+      {
+        "id": "avisGendarmerieNationale",
+        "nom": "Avis de la Gendarmerie Nationale",
+        "optionnel": true,
+      },
+      {
+        "id": "avisIFREMER",
+        "nom": "Avis de l'IFREMER",
+        "optionnel": true,
+      },
+      {
+        "id": "avisInstitutNationalOrigineQualite",
+        "nom": "Avis de l'Institut National de l'origine et de la Qualité",
+        "optionnel": true,
+      },
+      {
+        "id": "avisServiceAdministratifLocal",
+        "nom": "Avis d'un Service Administratif Local",
+        "optionnel": true,
+      },
+      {
+        "id": "avisAutoriteMilitaire",
+        "nom": "Avis de l'Autorité militaire",
+        "optionnel": true,
+      },
+      {
+        "id": "avisParcNational",
+        "nom": "Avis du Parc National",
+        "optionnel": true,
+      },
+      {
+        "id": "avisDirectionDepartementaleTerritoiresMer",
+        "nom": "Avis de la Direction Départementale des Territoires et de la Mer (DDTM)",
+        "optionnel": true,
+      },
+      {
+        "id": "avisAgenceRegionaleSante",
+        "nom": "Avis de l'Agence Régionale de Santé (ARS)",
+        "optionnel": true,
+      },
+      {
+        "id": "avisCaisseGeneraleSecuriteSociale",
+        "nom": "Avis de la Caisse Générale de Sécurité Sociale",
+        "optionnel": true,
+      },
+      {
+        "id": "autreAvis",
+        "nom": "Autre avis",
+        "optionnel": true,
+      },
+      {
+        "id": "avisOfficeNationalDesForets",
+        "nom": "Avis de l'Office National des Forêts",
+        "optionnel": false,
+      },
+      {
+        "id": "expertiseOfficeNationalDesForets",
+        "nom": "Expertise de l'Office National des Forêts",
+        "optionnel": true,
+      },
+      {
+        "id": "avisParcNaturelMarin",
+        "nom": "Avis du Parc Naturel Marin",
+        "optionnel": true,
+      },
+    ]
+  `)
+  expect(getAvisTypes('asc', 'arm', [communeIdValidator.parse('97302')])).toMatchInlineSnapshot(`
+    [
+      {
+        "id": "lettreDeSaisineDesServices",
+        "nom": "Lettre de saisine des services",
+        "optionnel": false,
+      },
+      {
+        "id": "avisDirectionRegionaleDesAffairesCulturelles",
+        "nom": "Avis de la Direction Régionale Des Affaires Culturelles (DRAC)",
+        "optionnel": true,
+      },
+      {
+        "id": "avisConseilDepartementalEnvironnementRisquesSanitairesTechnologiques",
+        "nom": "Avis du Conseil Départemental de l'Environnement et des Risques Sanitaires et Technologiques (CODERST)",
+        "optionnel": true,
+      },
+      {
+        "id": "avisDirectionsRégionalesEconomieEmploiTravailSolidarités",
+        "nom": "Avis de la Direction régionale de l’économie, de l’emploi, du travail et des solidarités",
+        "optionnel": true,
+      },
+      {
+        "id": "avisDirectionRegionaleFinancesPubliques",
+        "nom": "Avis de la Direction Regionale Des Finances Publiques",
+        "optionnel": true,
+      },
+      {
+        "id": "avisGendarmerieNationale",
+        "nom": "Avis de la Gendarmerie Nationale",
+        "optionnel": true,
+      },
+      {
+        "id": "avisIFREMER",
+        "nom": "Avis de l'IFREMER",
+        "optionnel": true,
+      },
+      {
+        "id": "avisInstitutNationalOrigineQualite",
+        "nom": "Avis de l'Institut National de l'origine et de la Qualité",
+        "optionnel": true,
+      },
+      {
+        "id": "avisServiceAdministratifLocal",
+        "nom": "Avis d'un Service Administratif Local",
+        "optionnel": true,
+      },
+      {
+        "id": "avisAutoriteMilitaire",
+        "nom": "Avis de l'Autorité militaire",
+        "optionnel": true,
+      },
+      {
+        "id": "avisParcNational",
+        "nom": "Avis du Parc National",
+        "optionnel": true,
+      },
+      {
+        "id": "avisDirectionDepartementaleTerritoiresMer",
+        "nom": "Avis de la Direction Départementale des Territoires et de la Mer (DDTM)",
+        "optionnel": true,
+      },
+      {
+        "id": "avisAgenceRegionaleSante",
+        "nom": "Avis de l'Agence Régionale de Santé (ARS)",
+        "optionnel": true,
+      },
+      {
+        "id": "avisCaisseGeneraleSecuriteSociale",
+        "nom": "Avis de la Caisse Générale de Sécurité Sociale",
+        "optionnel": true,
+      },
+      {
+        "id": "autreAvis",
+        "nom": "Autre avis",
+        "optionnel": true,
+      },
+      {
+        "id": "avisOfficeNationalDesForets",
+        "nom": "Avis de l'Office National des Forêts",
+        "optionnel": false,
+      },
+      {
+        "id": "expertiseOfficeNationalDesForets",
+        "nom": "Expertise de l'Office National des Forêts",
+        "optionnel": true,
+      },
+      {
+        "id": "avisParcNaturelMarin",
+        "nom": "Avis du Parc Naturel Marin",
+        "optionnel": true,
+      },
+      {
+        "id": "avisDirectionAlimentationAgricultureForet",
+        "nom": "Avis de la Direction de l'Alimentation de l'Agriculture et de la Forêt (DRAF)",
+        "optionnel": true,
+      },
+      {
+        "id": "avisEtatMajorOrpaillagePecheIllicite",
+        "nom": "Avis de l'État-major Orpaillage et Pêche Illicite (EMOPI)",
+        "optionnel": true,
+      },
+    ]
+  `)
+  expect(getAvisTypes('asc', 'axm', [communeIdValidator.parse('97302')])).toMatchInlineSnapshot(`
+    [
+      {
+        "id": "lettreDeSaisineDesServices",
+        "nom": "Lettre de saisine des services",
+        "optionnel": false,
+      },
+      {
+        "id": "avisDirectionRegionaleDesAffairesCulturelles",
+        "nom": "Avis de la Direction Régionale Des Affaires Culturelles (DRAC)",
+        "optionnel": true,
+      },
+      {
+        "id": "avisConseilDepartementalEnvironnementRisquesSanitairesTechnologiques",
+        "nom": "Avis du Conseil Départemental de l'Environnement et des Risques Sanitaires et Technologiques (CODERST)",
+        "optionnel": true,
+      },
+      {
+        "id": "avisDirectionsRégionalesEconomieEmploiTravailSolidarités",
+        "nom": "Avis de la Direction régionale de l’économie, de l’emploi, du travail et des solidarités",
+        "optionnel": true,
+      },
+      {
+        "id": "avisDirectionRegionaleFinancesPubliques",
+        "nom": "Avis de la Direction Regionale Des Finances Publiques",
+        "optionnel": true,
+      },
+      {
+        "id": "avisGendarmerieNationale",
+        "nom": "Avis de la Gendarmerie Nationale",
+        "optionnel": true,
+      },
+      {
+        "id": "avisIFREMER",
+        "nom": "Avis de l'IFREMER",
+        "optionnel": true,
+      },
+      {
+        "id": "avisInstitutNationalOrigineQualite",
+        "nom": "Avis de l'Institut National de l'origine et de la Qualité",
+        "optionnel": true,
+      },
+      {
+        "id": "avisServiceAdministratifLocal",
+        "nom": "Avis d'un Service Administratif Local",
+        "optionnel": true,
+      },
+      {
+        "id": "avisAutoriteMilitaire",
+        "nom": "Avis de l'Autorité militaire",
+        "optionnel": true,
+      },
+      {
+        "id": "avisParcNational",
+        "nom": "Avis du Parc National",
+        "optionnel": true,
+      },
+      {
+        "id": "avisDirectionDepartementaleTerritoiresMer",
+        "nom": "Avis de la Direction Départementale des Territoires et de la Mer (DDTM)",
+        "optionnel": true,
+      },
+      {
+        "id": "avisAgenceRegionaleSante",
+        "nom": "Avis de l'Agence Régionale de Santé (ARS)",
+        "optionnel": true,
+      },
+      {
+        "id": "avisCaisseGeneraleSecuriteSociale",
+        "nom": "Avis de la Caisse Générale de Sécurité Sociale",
+        "optionnel": true,
+      },
+      {
+        "id": "autreAvis",
+        "nom": "Autre avis",
+        "optionnel": true,
+      },
+      {
+        "id": "avisOfficeNationalDesForets",
+        "nom": "Avis de l'Office National des Forêts",
+        "optionnel": false,
+      },
+      {
+        "id": "expertiseOfficeNationalDesForets",
+        "nom": "Expertise de l'Office National des Forêts",
+        "optionnel": true,
+      },
+      {
+        "id": "avisParcNaturelMarin",
+        "nom": "Avis du Parc Naturel Marin",
+        "optionnel": true,
+      },
+      {
+        "id": "avisDirectionAlimentationAgricultureForet",
+        "nom": "Avis de la Direction de l'Alimentation de l'Agriculture et de la Forêt (DRAF)",
+        "optionnel": true,
+      },
+      {
+        "id": "avisEtatMajorOrpaillagePecheIllicite",
+        "nom": "Avis de l'État-major Orpaillage et Pêche Illicite (EMOPI)",
+        "optionnel": true,
+      },
+      {
+        "id": "confirmationAccordProprietaireDuSol",
+        "nom": "Confirmation de l'accord du propriétaire du sol",
+        "optionnel": true,
+      },
+    ]
+  `)
+})
+
+test('etapeAvisStepIsVisible', () => {
+  expect(etapeAvisStepIsVisible({ typeId: 'mfr' }, 'arm', [])).toBe(false)
+  expect(etapeAvisStepIsVisible({ typeId: 'asc' }, 'arm', [])).toBe(true)
+})
diff --git a/packages/common/src/permissions/etape-form.ts b/packages/common/src/permissions/etape-form.ts
index 7f3e394a3..e46aee14e 100644
--- a/packages/common/src/permissions/etape-form.ts
+++ b/packages/common/src/permissions/etape-form.ts
@@ -1,59 +1,138 @@
 import { EntrepriseDocumentId, EntrepriseId } from '../entreprise.js'
 import { FlattenEtape } from '../etape-form.js'
-import { DocumentComplementaireAslEtapeDocumentModification, DocumentComplementaireDaeEtapeDocumentModification, EtapeDocument, TempEtapeDocument, needAslAndDae } from '../etape.js'
-import { User } from '../roles.js'
+import {
+  DocumentComplementaireAslEtapeDocumentModification,
+  DocumentComplementaireDaeEtapeDocumentModification,
+  EtapeAvis,
+  EtapeDocument,
+  TempEtapeAvis,
+  TempEtapeDocument,
+  needAslAndDae,
+} from '../etape.js'
+import { User, isAdministrationAdmin, isAdministrationEditeur, isSuper } from '../roles.js'
+import { AvisTypeId, AvisTypes } from '../static/avisTypes.js'
+import { CommuneId } from '../static/communes'
 import { DemarcheTypeId } from '../static/demarchesTypes.js'
-import { EntrepriseDocumentTypeId } from '../static/documentsTypes.js'
+import { DEPARTEMENT_IDS, toDepartementId } from '../static/departement.js'
+import { DocumentsTypes, EntrepriseDocumentTypeId } from '../static/documentsTypes.js'
 import { ETAPES_TYPES, EtapeTypeId, EtapesTypes } from '../static/etapesTypes.js'
 import { SDOMZoneId } from '../static/sdom.js'
-import { TitreTypeId } from '../static/titresTypes.js'
+import { TitreTypeId, TitresTypes } from '../static/titresTypes.js'
+import { TITRES_TYPES_TYPES_IDS } from '../static/titresTypesTypes.js'
 import { getDocuments } from '../static/titresTypes_demarchesTypes_etapesTypes/documents.js'
 import { getEntrepriseDocuments } from '../static/titresTypes_demarchesTypes_etapesTypes/entrepriseDocuments.js'
 import { documentTypeIdsBySdomZonesGet } from '../static/titresTypes_demarchesTypes_etapesTypes/sdom.js'
 import { getSections, getSectionsWithValue } from '../static/titresTypes_demarchesTypes_etapesTypes/sections.js'
-import { isNotNullNorUndefinedNorEmpty, isNotNullNorUndefined, DeepReadonly, onlyUnique } from '../typescript-tools.js'
+import { isNotNullNorUndefinedNorEmpty, DeepReadonly, onlyUnique, NonEmptyArray, isNonEmptyArray, isNullOrUndefinedOrEmpty, isNullOrUndefined, Nullable } from '../typescript-tools.js'
 import { sectionsWithValueCompleteValidate } from './sections.js'
-import { dureeOptionalCheck } from './titres-etapes.js'
+import { isDureeOptional } from './titres-etapes.js'
+
+type ValidReturn = { valid: true } | { valid: false; errors: NonEmptyArray<string> }
+
+export const dateTypeStepIsVisible = (user: User): boolean => {
+  return isSuper(user) || isAdministrationAdmin(user) || isAdministrationEditeur(user)
+}
+export const dateTypeStepIsComplete = (etape: DeepReadonly<Nullable<Pick<FlattenEtape, 'typeId' | 'date' | 'statutId'>>>, user: User): ValidReturn => {
+  if (!dateTypeStepIsVisible(user)) {
+    return { valid: true }
+  }
+
+  const errors: string[] = []
+  if (isNullOrUndefined(etape.date)) {
+    errors.push("La date de l'étape est obligatoire")
+  }
+
+  if (isNullOrUndefined(etape.typeId)) {
+    errors.push("Le type de l'étape est obligatoire")
+  }
+
+  if (isNullOrUndefined(etape.statutId)) {
+    errors.push("Le statut de l'étape est obligatoire")
+  }
+
+  if (isNonEmptyArray(errors)) {
+    return { valid: false, errors }
+  }
+
+  return { valid: true }
+}
 
 export const fondamentaleStepIsVisible = (etapeTypeId: EtapeTypeId): boolean => {
   return EtapesTypes[etapeTypeId].fondamentale
 }
 
-export const fondamentaleStepIsComplete = (flattened: DeepReadonly<Pick<FlattenEtape, 'typeId' | 'duree' | 'substances'>>, demarcheTypeId: DemarcheTypeId, titreTypeId: TitreTypeId): boolean => {
+const isTitulairesRequired = (etapeTypeId: EtapeTypeId, demarcheTypeId: DemarcheTypeId, titreTypeId: TitreTypeId): boolean =>
+  getEntrepriseDocuments(titreTypeId, demarcheTypeId, etapeTypeId).some(({ optionnel }) => !optionnel)
+export const fondamentaleStepIsComplete = (
+  flattened: DeepReadonly<Pick<FlattenEtape, 'typeId' | 'duree' | 'substances' | 'titulaires'>>,
+  demarcheTypeId: DemarcheTypeId,
+  titreTypeId: TitreTypeId
+): ValidReturn => {
   if (!fondamentaleStepIsVisible(flattened.typeId)) {
-    return true
+    return { valid: true }
   }
+  const errors: string[] = []
 
-  return (
-    flattened.typeId !== ETAPES_TYPES.demande ||
-    (isNotNullNorUndefinedNorEmpty(flattened.substances.value) &&
-      (dureeOptionalCheck(flattened.typeId, demarcheTypeId, titreTypeId) || (isNotNullNorUndefined(flattened.duree.value) && flattened.duree.value > 0)))
-  )
+  if (flattened.typeId !== ETAPES_TYPES.demande) {
+    return { valid: true }
+  }
+
+  if (isNullOrUndefinedOrEmpty(flattened.substances.value)) {
+    errors.push('Les substances sont obligatoires')
+  }
+
+  if (!isDureeOptional(flattened.typeId, demarcheTypeId, titreTypeId) && (isNullOrUndefined(flattened.duree.value) || flattened.duree.value === 0)) {
+    errors.push('la durée est obligatoire')
+  }
+
+  if (isTitulairesRequired(flattened.typeId, demarcheTypeId, titreTypeId) && isNullOrUndefinedOrEmpty(flattened.titulaires.value)) {
+    errors.push('Les titulaires sont obligatoires')
+  }
+
+  if (isNonEmptyArray(errors)) {
+    return { valid: false, errors }
+  }
+
+  return { valid: true }
 }
 
 export const sectionsStepIsVisible = (etape: Pick<FlattenEtape, 'typeId'>, demarcheTypeId: DemarcheTypeId, titreTypeId: TitreTypeId): boolean => {
   return getSections(titreTypeId, demarcheTypeId, etape.typeId).length > 0
 }
-export const sectionsStepIsComplete = (etape: DeepReadonly<Pick<FlattenEtape, 'typeId' | 'contenu'>>, demarcheTypeId: DemarcheTypeId, titreTypeId: TitreTypeId): boolean => {
+export const sectionsStepIsComplete = (etape: DeepReadonly<Pick<FlattenEtape, 'typeId' | 'contenu'>>, demarcheTypeId: DemarcheTypeId, titreTypeId: TitreTypeId): ValidReturn => {
   if (!sectionsStepIsVisible(etape, demarcheTypeId, titreTypeId)) {
-    return true
+    return { valid: true }
   }
 
   const sections = getSections(titreTypeId, demarcheTypeId, etape.typeId)
   const sectionsWithValue = getSectionsWithValue(sections, etape.contenu)
+  const errors: string[] = sectionsWithValueCompleteValidate(sectionsWithValue)
 
-  return sectionsWithValueCompleteValidate(sectionsWithValue).length === 0
+  if (isNonEmptyArray(errors)) {
+    return { valid: false, errors }
+  }
+
+  return { valid: true }
 }
 
 export const perimetreStepIsVisible = (etape: Pick<FlattenEtape, 'typeId'>): boolean => {
   return EtapesTypes[etape.typeId].fondamentale
 }
-export const perimetreStepIsComplete = (etape: DeepReadonly<Pick<FlattenEtape, 'typeId' | 'perimetre'>>): boolean => {
+export const perimetreStepIsComplete = (etape: DeepReadonly<Pick<FlattenEtape, 'typeId' | 'perimetre'>>): ValidReturn => {
   if (!perimetreStepIsVisible(etape)) {
-    return true
+    return { valid: true }
+  }
+
+  const errors: string[] = []
+  if (etape.typeId === 'mfr' && isNullOrUndefined(etape.perimetre.value?.geojson4326Perimetre)) {
+    errors.push('Le périmètre est obligatoire')
   }
 
-  return etape.typeId !== 'mfr' || isNotNullNorUndefined(etape.perimetre.value?.geojson4326Perimetre)
+  if (isNonEmptyArray(errors)) {
+    return { valid: false, errors }
+  }
+
+  return { valid: true }
 }
 
 export const getDocumentsTypes = (
@@ -86,6 +165,51 @@ export const getDocumentsTypes = (
   return dts
 }
 
+export const getAvisTypes = (etapeTypeId: EtapeTypeId, titreTypeId: TitreTypeId, communeIds: DeepReadonly<CommuneId[]>): { id: AvisTypeId; optionnel: boolean }[] => {
+  const avis = []
+  if (etapeTypeId === ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives) {
+    avis.push(
+      ...[
+        { ...AvisTypes.lettreDeSaisineDesServices, optionnel: false },
+        { ...AvisTypes.avisDirectionRegionaleDesAffairesCulturelles, optionnel: true },
+        { ...AvisTypes.avisConseilDepartementalEnvironnementRisquesSanitairesTechnologiques, optionnel: true },
+        { ...AvisTypes.avisDirectionsRégionalesEconomieEmploiTravailSolidarités, optionnel: true },
+        { ...AvisTypes.avisDirectionRegionaleFinancesPubliques, optionnel: true },
+        { ...AvisTypes.avisGendarmerieNationale, optionnel: true },
+        { ...AvisTypes.avisIFREMER, optionnel: true },
+        { ...AvisTypes.avisInstitutNationalOrigineQualite, optionnel: true },
+        { ...AvisTypes.avisServiceAdministratifLocal, optionnel: true },
+        { ...AvisTypes.avisAutoriteMilitaire, optionnel: true },
+        { ...AvisTypes.avisParcNational, optionnel: true },
+        { ...AvisTypes.avisDirectionDepartementaleTerritoiresMer, optionnel: true },
+        { ...AvisTypes.avisAgenceRegionaleSante, optionnel: true },
+        { ...AvisTypes.avisCaisseGeneraleSecuriteSociale, optionnel: true },
+        { ...AvisTypes.autreAvis, optionnel: true },
+        { ...AvisTypes.avisOfficeNationalDesForets, optionnel: false },
+        { ...AvisTypes.expertiseOfficeNationalDesForets, optionnel: true },
+        // TODO 2024-05-14: rendre obligatoire pour les PNMs quand ces derniers seront implémentés
+        { ...AvisTypes.avisParcNaturelMarin, optionnel: true },
+      ]
+    )
+
+    if (communeIds.some(id => toDepartementId(id) === DEPARTEMENT_IDS.Guyane)) {
+      avis.push(
+        ...[
+          { ...AvisTypes.avisDirectionAlimentationAgricultureForet, optionnel: true },
+          { ...AvisTypes.avisEtatMajorOrpaillagePecheIllicite, optionnel: true },
+        ]
+      )
+    }
+
+    // TODO 2024-06-18 Normalement c'est obligatoire si avis propriétaire du sol est favorable avec réserve,  optionnel pour le moment
+    if (TitresTypes[titreTypeId].typeId === TITRES_TYPES_TYPES_IDS.AUTORISATION_D_EXPLOITATION) {
+      avis.push({ ...AvisTypes.confirmationAccordProprietaireDuSol, optionnel: true })
+    }
+  }
+
+  return avis
+}
+
 export const etapeDocumentsStepIsVisible = (etape: Pick<FlattenEtape, 'typeId'>, demarcheTypeId: DemarcheTypeId, titreTypeId: TitreTypeId): boolean => {
   return getDocuments(titreTypeId, demarcheTypeId, etape.typeId).length > 0
 }
@@ -93,27 +217,61 @@ export const etapeDocumentsStepIsComplete = (
   etape: DeepReadonly<Pick<FlattenEtape, 'typeId' | 'contenu' | 'isBrouillon'>>,
   demarcheTypeId: DemarcheTypeId,
   titreTypeId: TitreTypeId,
-  etapeDocuments: DeepReadonly<(EtapeDocument | TempEtapeDocument)[]>,
+  etapeDocuments: DeepReadonly<Pick<EtapeDocument | TempEtapeDocument, 'etape_document_type_id'>[]>,
   sdomZoneIds: DeepReadonly<SDOMZoneId[]>,
-  daeDocument: DeepReadonly<DocumentComplementaireDaeEtapeDocumentModification> | null,
-  aslDocument: DeepReadonly<DocumentComplementaireAslEtapeDocumentModification> | null,
+  daeDocument: DeepReadonly<Omit<DocumentComplementaireDaeEtapeDocumentModification, 'id'>> | null,
+  aslDocument: DeepReadonly<Omit<DocumentComplementaireAslEtapeDocumentModification, 'id'>> | null,
   user: User
-): boolean => {
+): ValidReturn => {
   if (!etapeDocumentsStepIsVisible(etape, demarcheTypeId, titreTypeId)) {
-    return true
+    return { valid: true }
   }
 
+  const errors: string[] = []
   const documentTypes = getDocumentsTypes({ typeId: etape.typeId }, demarcheTypeId, titreTypeId, sdomZoneIds, etape.contenu?.arm?.mecanise?.value === true)
 
-  if (documentTypes.every(({ optionnel, id }) => optionnel || etapeDocuments.some(({ etape_document_type_id }) => etape_document_type_id === id))) {
-    if (needAslAndDae({ etapeTypeId: etape.typeId, demarcheTypeId, titreTypeId }, etape.isBrouillon, user)) {
-      return isNotNullNorUndefined(daeDocument) && isNotNullNorUndefined(aslDocument)
+  errors.push(
+    ...documentTypes
+      .filter(({ optionnel, id }) => !optionnel && etapeDocuments.every(({ etape_document_type_id }) => etape_document_type_id !== id))
+      .map(({ id }) => `le document "${DocumentsTypes[id].nom}" (${id}) est obligatoire`)
+  )
+
+  if (needAslAndDae({ etapeTypeId: etape.typeId, demarcheTypeId, titreTypeId }, etape.isBrouillon, user)) {
+    if (isNullOrUndefined(daeDocument)) {
+      errors.push('L’arrêté préfectoral de la mission autorité environnementale est obligatoire')
     }
+    if (isNullOrUndefined(aslDocument)) {
+      errors.push('La lettre de décision du propriétaire du sol est obligatoire')
+    }
+  }
 
-    return true
+  if (isNonEmptyArray(errors)) {
+    return { valid: false, errors }
   }
 
-  return false
+  return { valid: true }
+}
+
+export const etapeAvisStepIsVisible = (etape: Pick<FlattenEtape, 'typeId'>, titreTypeId: TitreTypeId, communeIds: DeepReadonly<CommuneId[]>): boolean => {
+  return getAvisTypes(etape.typeId, titreTypeId, communeIds).length > 0
+}
+
+export const etapeAvisStepIsComplete = (
+  etape: DeepReadonly<Pick<FlattenEtape, 'typeId'>>,
+  etapeAvis: DeepReadonly<Pick<EtapeAvis | TempEtapeAvis, 'avis_type_id'>[]>,
+  titreTypeId: TitreTypeId,
+  communeIds: DeepReadonly<CommuneId[]>
+): ValidReturn => {
+  if (!etapeAvisStepIsVisible(etape, titreTypeId, communeIds)) {
+    return { valid: true }
+  }
+
+  const avisTypes = getAvisTypes(etape.typeId, titreTypeId, communeIds)
+  if (avisTypes.some(avisType => !avisType.optionnel && etapeAvis.every(avis => avis.avis_type_id !== avisType.id))) {
+    return { valid: false, errors: ['Il manque des avis obligatoires'] }
+  }
+
+  return { valid: true }
 }
 
 export const entrepriseDocumentsStepIsVisible = (etape: Pick<FlattenEtape, 'typeId'>, demarcheTypeId: DemarcheTypeId, titreTypeId: TitreTypeId): boolean => {
@@ -123,19 +281,27 @@ export const entrepriseDocumentsStepIsComplete = (
   etape: DeepReadonly<Pick<FlattenEtape, 'typeId' | 'contenu' | 'titulaires' | 'amodiataires'>>,
   demarcheTypeId: DemarcheTypeId,
   titreTypeId: TitreTypeId,
-  entreprisesDocuments: DeepReadonly<SelectedEntrepriseDocument[]>
-): boolean => {
+  entreprisesDocuments: DeepReadonly<Pick<SelectedEntrepriseDocument, 'documentTypeId' | 'entrepriseId'>[]>
+): ValidReturn => {
   if (!entrepriseDocumentsStepIsVisible(etape, demarcheTypeId, titreTypeId)) {
-    return true
+    return { valid: true }
   }
 
   const documentTypes = getEntrepriseDocuments(titreTypeId, demarcheTypeId, etape.typeId)
 
   const entrepriseIds = [...etape.titulaires.value, ...etape.amodiataires.value].filter(onlyUnique)
 
-  return entrepriseIds.every(eId =>
-    documentTypes.every(({ optionnel, id }) => optionnel || entreprisesDocuments.some(({ documentTypeId, entrepriseId }) => documentTypeId === id && entrepriseId === eId))
-  )
+  if (isNullOrUndefinedOrEmpty(entrepriseIds) && isTitulairesRequired(etape.typeId, demarcheTypeId, titreTypeId)) {
+    return { valid: false, errors: ["Il y a des documents d'entreprise obligatoires, mais il n'y a pas de titulaire"] }
+  }
+
+  if (
+    entrepriseIds.some(eId => documentTypes.some(({ optionnel, id }) => !optionnel && entreprisesDocuments.every(({ documentTypeId, entrepriseId }) => documentTypeId !== id || entrepriseId !== eId)))
+  ) {
+    return { valid: false, errors: ["Il manque des documents d'entreprise obligatoires"] }
+  }
+
+  return { valid: true }
 }
 
 export type SelectedEntrepriseDocument = {
diff --git a/packages/common/src/permissions/sections.test.ts b/packages/common/src/permissions/sections.test.ts
index c1bef241d..e48da9e99 100644
--- a/packages/common/src/permissions/sections.test.ts
+++ b/packages/common/src/permissions/sections.test.ts
@@ -9,8 +9,6 @@ describe('sectionElementWithValueCompleteValidate', () => {
     [null, false, false],
     ['un texte', false, true],
     [null, true, true],
-    [null, undefined, false],
-    ['un text', undefined, true],
   ])('Pour élément text', (value, optionnel, expectedComplete) => {
     expect(sectionElementWithValueCompleteValidate({ type: 'text', value, optionnel })).toEqual(expectedComplete)
   })
@@ -20,8 +18,6 @@ describe('sectionElementWithValueCompleteValidate', () => {
     [null, false, false],
     [10, false, true],
     [null, true, true],
-    [null, undefined, false],
-    [10, undefined, true],
   ])('Pour élément number ou integer', (value, optionnel, expectedComplete) => {
     expect(sectionElementWithValueCompleteValidate({ type: 'number', value, optionnel })).toEqual(expectedComplete)
     expect(sectionElementWithValueCompleteValidate({ type: 'integer', value, optionnel })).toEqual(expectedComplete)
@@ -32,8 +28,6 @@ describe('sectionElementWithValueCompleteValidate', () => {
     [null, false, false],
     [true, false, true],
     [null, true, true],
-    [null, undefined, false],
-    [true, undefined, true],
   ])('Pour élément radio', (value, optionnel, expectedComplete) => {
     expect(sectionElementWithValueCompleteValidate({ type: 'radio', value, optionnel })).toEqual(expectedComplete)
   })
@@ -43,8 +37,6 @@ describe('sectionElementWithValueCompleteValidate', () => {
     [null, false, true],
     [true, false, true],
     [null, true, true],
-    [null, undefined, true],
-    [true, undefined, true],
   ])('Pour élément checkbox', (value, optionnel, expectedComplete) => {
     expect(sectionElementWithValueCompleteValidate({ type: 'checkbox', value, optionnel })).toEqual(expectedComplete)
   })
@@ -52,10 +44,8 @@ describe('sectionElementWithValueCompleteValidate', () => {
   test.each<[string[], ElementWithValue['optionnel'], boolean]>([
     [[], false, true],
     [[], true, true],
-    [[], undefined, true],
     [['item'], false, true],
     [['item'], true, true],
-    [['item'], undefined, true],
   ])('Pour élément checkboxes', (value, optionnel, expectedComplete) => {
     expect(sectionElementWithValueCompleteValidate({ type: 'checkboxes', value, optionnel })).toEqual(expectedComplete)
   })
@@ -65,8 +55,6 @@ describe('sectionElementWithValueCompleteValidate', () => {
     [null, false, false],
     ['id1', false, true],
     [null, true, true],
-    [null, undefined, false],
-    ['id1', undefined, true],
   ])('Pour élément select', (value, optionnel, expectedComplete) => {
     expect(sectionElementWithValueCompleteValidate({ type: 'select', value, optionnel })).toEqual(expectedComplete)
   })
@@ -75,8 +63,6 @@ describe('sectionElementWithValueCompleteValidate', () => {
     [getCurrent(), false, true],
     [null, false, false],
     [null, true, true],
-    [null, undefined, false],
-    [getCurrent(), undefined, true],
   ])('Pour élément date', (value, optionnel, expectedComplete) => {
     expect(sectionElementWithValueCompleteValidate({ type: 'date', value, optionnel })).toEqual(expectedComplete)
   })
diff --git a/packages/common/src/permissions/sections.ts b/packages/common/src/permissions/sections.ts
index dedd3da37..d3a4d8c24 100644
--- a/packages/common/src/permissions/sections.ts
+++ b/packages/common/src/permissions/sections.ts
@@ -1,26 +1,9 @@
-import { Section } from '../static/titresTypes_demarchesTypes_etapesTypes/sections.js'
 import { ElementWithValue } from '../sections.js'
 import { DeepReadonly, isNullOrUndefined } from '../typescript-tools.js'
 
 // @deprecated ==> type better
 export type Contenu = { [key in string]?: { [secondKey in string]?: unknown } } | null
 
-// @deprecated => sectionsWithValueCompleteValidate
-export const contenuCompleteValidate = (sections: DeepReadonly<Section[]>, contenu: Contenu): string[] => {
-  const errors: string[] = []
-  sections.forEach(s =>
-    s.elements?.forEach(e => {
-      if (isNullOrUndefined(e.optionnel) && !['radio', 'checkbox'].includes(e.type)) {
-        if (!contenu || !contenu[s.id] || contenu[s.id]?.[e.id] === undefined || contenu[s.id]?.[e.id] === null || contenu[s.id]?.[e.id] === '') {
-          errors.push(`l’élément "${e.nom}" de la section "${s.nom}" est obligatoire`)
-        }
-      }
-    })
-  )
-
-  return errors
-}
-
 export const sectionsWithValueCompleteValidate = (sections_with_value: DeepReadonly<{ nom?: string; elements: Pick<ElementWithValue, 'nom' | 'optionnel' | 'value' | 'type'>[] }[]>): string[] => {
   const errors: string[] = []
   sections_with_value.forEach(s =>
diff --git a/packages/common/src/permissions/titres-etapes.test.ts b/packages/common/src/permissions/titres-etapes.test.ts
index 62db5895d..2e5e1031b 100644
--- a/packages/common/src/permissions/titres-etapes.test.ts
+++ b/packages/common/src/permissions/titres-etapes.test.ts
@@ -1,7 +1,21 @@
 import { TitreTypeId } from '../static/titresTypes.js'
 import { EtapeTypeId } from '../static/etapesTypes.js'
 import { DemarcheTypeId } from '../static/demarchesTypes.js'
-import { canCreateEtape, canEditEtape, canEditAmodiataires, canEditDates, canEditDuree, canEditTitulaires, dureeOptionalCheck, isEtapeComplete, canDeleteEtape } from './titres-etapes.js'
+
+import {
+  canCreateEtape,
+  canEditEtape,
+  canEditAmodiataires,
+  canEditDates,
+  canEditDuree,
+  canEditTitulaires,
+  isDureeOptional,
+  isEtapeComplete,
+  IsEtapeCompleteDocuments,
+  IsEtapeCompleteEntrepriseDocuments,
+  IsEtapeCompleteEtape,
+  canDeleteEtape,
+} from './titres-etapes.js'
 import { AdministrationId, ADMINISTRATION_IDS } from '../static/administrations.js'
 import { test, expect } from 'vitest'
 import { TestUser, testBlankUser } from '../tests-utils.js'
@@ -9,8 +23,11 @@ import { TitreStatutId } from '../static/titresStatuts.js'
 import { EntrepriseId, entrepriseIdValidator, newEntrepriseId } from '../entreprise.js'
 import { SubstanceLegaleId } from '../static/substancesLegales.js'
 import { FeatureMultiPolygon } from '../perimetre.js'
-import { toCaminoDate } from '../date.js'
+import { caminoDateValidator, toCaminoDate } from '../date.js'
+import { ETAPE_IS_BROUILLON, ETAPE_IS_NOT_BROUILLON } from '../etape.js'
 import { EntrepriseUserNotNull } from '../roles.js'
+import { communeIdValidator } from '../static/communes.js'
+import { SDOMZoneIds } from '../static/sdom.js'
 
 test.each<{ etapeTypeId: EtapeTypeId; demarcheTypeId: DemarcheTypeId; titreTypeId: TitreTypeId; optional: boolean }>([
   { etapeTypeId: 'mfr', demarcheTypeId: 'oct', titreTypeId: 'arm', optional: false },
@@ -18,8 +35,8 @@ test.each<{ etapeTypeId: EtapeTypeId; demarcheTypeId: DemarcheTypeId; titreTypeI
   { etapeTypeId: 'dex', demarcheTypeId: 'oct', titreTypeId: 'axm', optional: true },
   { etapeTypeId: 'mfr', demarcheTypeId: 'oct', titreTypeId: 'prm', optional: true },
   { etapeTypeId: 'mfr', demarcheTypeId: 'dep', titreTypeId: 'arm', optional: true },
-])('dureeOptionalCheck $etapeTypeId | $demarcheTypeId | $titreTypeId | $optional', ({ etapeTypeId, demarcheTypeId, titreTypeId, optional }) => {
-  expect(dureeOptionalCheck(etapeTypeId, demarcheTypeId, titreTypeId)).toEqual(optional)
+])('isDureeOptional $etapeTypeId | $demarcheTypeId | $titreTypeId | $optional', ({ etapeTypeId, demarcheTypeId, titreTypeId, optional }) => {
+  expect(isDureeOptional(etapeTypeId, demarcheTypeId, titreTypeId)).toEqual(optional)
 })
 
 test.each<{ titreTypeId: TitreTypeId; demarcheTypeId: DemarcheTypeId; canEdit: boolean }>([
@@ -91,7 +108,7 @@ test.each<{
   {
     user: { role: 'super' },
     etapeTypeId: 'mfr',
-    isBrouillon: false,
+    isBrouillon: ETAPE_IS_NOT_BROUILLON,
     titreTitulaires: [],
     titresAdministrationsLocales: [],
     demarcheTypeId: 'ren',
@@ -101,7 +118,7 @@ test.each<{
   {
     user: { role: 'defaut' },
     etapeTypeId: 'mfr',
-    isBrouillon: false,
+    isBrouillon: ETAPE_IS_NOT_BROUILLON,
     titreTitulaires: [],
     titresAdministrationsLocales: [],
     demarcheTypeId: 'ren',
@@ -111,7 +128,7 @@ test.each<{
   {
     user: { role: 'editeur', administrationId: 'ope-brgm-01' },
     etapeTypeId: 'mfr',
-    isBrouillon: false,
+    isBrouillon: ETAPE_IS_NOT_BROUILLON,
     titreTitulaires: [],
     titresAdministrationsLocales: [],
     demarcheTypeId: 'ren',
@@ -121,7 +138,7 @@ test.each<{
   {
     user: { role: 'lecteur', administrationId: 'ope-brgm-01' },
     etapeTypeId: 'mfr',
-    isBrouillon: false,
+    isBrouillon: ETAPE_IS_NOT_BROUILLON,
     titreTitulaires: [],
     titresAdministrationsLocales: [],
     demarcheTypeId: 'ren',
@@ -131,7 +148,7 @@ test.each<{
   {
     user: { role: 'entreprise', entreprises: [{ id: newEntrepriseId('1'), nom: 'nom' }] },
     etapeTypeId: 'mfr',
-    isBrouillon: false,
+    isBrouillon: ETAPE_IS_NOT_BROUILLON,
     titreTitulaires: [newEntrepriseId('1')],
     titresAdministrationsLocales: [],
     demarcheTypeId: 'ren',
@@ -141,7 +158,7 @@ test.each<{
   {
     user: { role: 'entreprise', entreprises: [{ id: newEntrepriseId('1'), nom: 'nom' }] },
     etapeTypeId: 'mfr',
-    isBrouillon: true,
+    isBrouillon: ETAPE_IS_BROUILLON,
     titreTitulaires: [newEntrepriseId('1')],
     titresAdministrationsLocales: [],
     demarcheTypeId: 'oct',
@@ -151,7 +168,7 @@ test.each<{
   {
     user: { role: 'admin', administrationId: 'ope-brgm-01' },
     etapeTypeId: 'mfr',
-    isBrouillon: true,
+    isBrouillon: ETAPE_IS_BROUILLON,
     titreTitulaires: [],
     titresAdministrationsLocales: ['ope-brgm-01'],
     demarcheTypeId: 'oct',
@@ -161,7 +178,7 @@ test.each<{
   {
     user: { role: 'editeur', administrationId: 'ope-brgm-01' },
     etapeTypeId: 'mfr',
-    isBrouillon: true,
+    isBrouillon: ETAPE_IS_BROUILLON,
     titreTitulaires: [],
     titresAdministrationsLocales: ['ope-brgm-01'],
     demarcheTypeId: 'oct',
@@ -171,7 +188,7 @@ test.each<{
   {
     user: { role: 'lecteur', administrationId: 'ope-brgm-01' },
     etapeTypeId: 'mfr',
-    isBrouillon: true,
+    isBrouillon: ETAPE_IS_BROUILLON,
     titreTitulaires: [],
     titresAdministrationsLocales: ['ope-brgm-01'],
     demarcheTypeId: 'oct',
@@ -181,7 +198,7 @@ test.each<{
   {
     user: { role: 'admin', administrationId: ADMINISTRATION_IDS['DGTM - GUYANE'] },
     etapeTypeId: 'mfr',
-    isBrouillon: false,
+    isBrouillon: ETAPE_IS_NOT_BROUILLON,
     titreTitulaires: [],
     titresAdministrationsLocales: ['ope-brgm-01'],
     demarcheTypeId: 'oct',
@@ -191,7 +208,7 @@ test.each<{
   {
     user: { role: 'admin', administrationId: ADMINISTRATION_IDS['GENDARMERIE NATIONALE - GUYANE'] },
     etapeTypeId: 'aca',
-    isBrouillon: false,
+    isBrouillon: ETAPE_IS_NOT_BROUILLON,
     titreTitulaires: [],
     titresAdministrationsLocales: ['ope-brgm-01'],
     demarcheTypeId: 'oct',
@@ -245,25 +262,45 @@ const multiPolygonWith4Points: FeatureMultiPolygon = {
     ],
   },
 }
-const etapeComplete: Parameters<typeof isEtapeComplete>[0] = {
+
+const titulaireId = entrepriseIdValidator.parse('titulaireId')
+const etapeComplete: IsEtapeCompleteEtape = {
+  contenu: {},
+  date: caminoDateValidator.parse('2023-02-01'),
   typeId: 'mfr',
-  substances: ['auru'],
-  geojson4326Perimetre: multiPolygonWith4Points,
-  duree: 4,
-  isBrouillon: false,
+  statutId: 'fai',
+  substances: { value: ['auru'], heritee: false, etapeHeritee: null },
+  titulaires: { value: [titulaireId], heritee: false, etapeHeritee: null },
+  amodiataires: { value: [], heritee: false, etapeHeritee: null },
+  perimetre: {
+    value: {
+      geojson4326Perimetre: multiPolygonWith4Points,
+      geojson4326Points: null,
+      geojsonOriginePerimetre: null,
+      geojsonOriginePoints: null,
+      geojsonOrigineGeoSystemeId: null,
+      geojson4326Forages: null,
+      geojsonOrigineForages: null,
+      surface: null,
+    },
+    heritee: false,
+    etapeHeritee: null,
+  },
+  duree: { value: 4, heritee: false, etapeHeritee: null },
+  isBrouillon: ETAPE_IS_NOT_BROUILLON,
 }
 
-const armDocuments: Parameters<typeof isEtapeComplete>[3] = [{ etape_document_type_id: 'car' }, { etape_document_type_id: 'dom' }, { etape_document_type_id: 'for' }, { etape_document_type_id: 'jpa' }]
-const armEntrepriseDocuments: Parameters<typeof isEtapeComplete>[4] = [
-  { entreprise_document_type_id: 'cur' },
-  { entreprise_document_type_id: 'jid' },
-  { entreprise_document_type_id: 'jct' },
-  { entreprise_document_type_id: 'kbi' },
-  { entreprise_document_type_id: 'jcf' },
-  { entreprise_document_type_id: 'atf' },
+const armDocuments: IsEtapeCompleteDocuments = [{ etape_document_type_id: 'car' }, { etape_document_type_id: 'dom' }, { etape_document_type_id: 'for' }, { etape_document_type_id: 'jpa' }]
+const armEntrepriseDocuments: IsEtapeCompleteEntrepriseDocuments = [
+  { entreprise_document_type_id: 'cur', entreprise_id: titulaireId },
+  { entreprise_document_type_id: 'jid', entreprise_id: titulaireId },
+  { entreprise_document_type_id: 'jct', entreprise_id: titulaireId },
+  { entreprise_document_type_id: 'kbi', entreprise_id: titulaireId },
+  { entreprise_document_type_id: 'jcf', entreprise_id: titulaireId },
+  { entreprise_document_type_id: 'atf', entreprise_id: titulaireId },
 ]
 
-const axmDocuments: Parameters<typeof isEtapeComplete>[3] = [
+const axmDocuments: IsEtapeCompleteDocuments = [
   { etape_document_type_id: 'car' },
   { etape_document_type_id: 'lem' },
   { etape_document_type_id: 'idm' },
@@ -273,133 +310,208 @@ const axmDocuments: Parameters<typeof isEtapeComplete>[3] = [
   { etape_document_type_id: 'prg' },
 ]
 
-const axmEntrepriseDocuments: Parameters<typeof isEtapeComplete>[4] = [
-  { entreprise_document_type_id: 'lis' },
-  { entreprise_document_type_id: 'jac' },
-  { entreprise_document_type_id: 'bil' },
-  { entreprise_document_type_id: 'ref' },
-  { entreprise_document_type_id: 'deb' },
-  { entreprise_document_type_id: 'atf' },
-  { entreprise_document_type_id: 'jid' },
-  { entreprise_document_type_id: 'jct' },
+const axmEntrepriseDocuments: IsEtapeCompleteEntrepriseDocuments = [
+  { entreprise_document_type_id: 'lis', entreprise_id: titulaireId },
+  { entreprise_document_type_id: 'jac', entreprise_id: titulaireId },
+  { entreprise_document_type_id: 'bil', entreprise_id: titulaireId },
+  { entreprise_document_type_id: 'ref', entreprise_id: titulaireId },
+  { entreprise_document_type_id: 'deb', entreprise_id: titulaireId },
+  { entreprise_document_type_id: 'atf', entreprise_id: titulaireId },
+  { entreprise_document_type_id: 'jid', entreprise_id: titulaireId },
+  { entreprise_document_type_id: 'jct', entreprise_id: titulaireId },
 ]
 
+test('teste la complétude d’une demande d’AXM faite par un utilisateur entreprises en Guyane en Zone1 du SDOM', () => {
+  expect(
+    isEtapeComplete(
+      { ...etapeComplete, isBrouillon: ETAPE_IS_BROUILLON },
+      'axm',
+      'oct',
+      axmDocuments,
+      axmEntrepriseDocuments,
+      [SDOMZoneIds.Zone1],
+      [communeIdValidator.parse('97302')],
+      { arrete_prefectoral: '', date: toCaminoDate('2024-01-01'), description: null, entreprises_lecture: true, etape_document_type_id: 'arp', etape_statut_id: 'fai', public_lecture: true },
+      { date: toCaminoDate('2024-04-22'), description: null, entreprises_lecture: true, etape_document_type_id: 'let', etape_statut_id: 'fai', public_lecture: true },
+      [],
+      { ...testBlankUser, role: 'entreprise', entreprises: [{ id: entrepriseIdValidator.parse('id1'), nom: 'nomEntreprise' }] }
+    )
+  ).toMatchInlineSnapshot(`
+    {
+      "errors": [
+        "le document "Notice d’impact" (nip) est obligatoire",
+      ],
+      "valid": false,
+    }
+  `)
+})
+
 test('teste la complétude d’une demande d’AXM faite par un utilisateur entreprises', () => {
   expect(
     isEtapeComplete(
-      { ...etapeComplete, isBrouillon: true },
+      { ...etapeComplete, isBrouillon: ETAPE_IS_BROUILLON },
       'axm',
       'oct',
       axmDocuments,
       axmEntrepriseDocuments,
       [],
+      [],
       { arrete_prefectoral: '', date: toCaminoDate('2024-01-01'), description: null, entreprises_lecture: true, etape_document_type_id: 'arp', etape_statut_id: 'fai', public_lecture: true },
       { date: toCaminoDate('2024-04-22'), description: null, entreprises_lecture: true, etape_document_type_id: 'let', etape_statut_id: 'fai', public_lecture: true },
+      [],
       { ...testBlankUser, role: 'entreprise', entreprises: [{ id: entrepriseIdValidator.parse('id1'), nom: 'nomEntreprise' }] }
     )
   ).toStrictEqual({ valid: true })
 })
 
 test('teste la complétude d’une demande d’ARM', () => {
-  expect(isEtapeComplete(etapeComplete, 'arm', 'oct', armDocuments, armEntrepriseDocuments, [], null, null, { ...testBlankUser, role: 'super' })).toStrictEqual({ valid: true })
+  expect(
+    isEtapeComplete(
+      { ...etapeComplete, contenu: { arm: { mecanise: { value: false, etapeHeritee: null, heritee: false } } } },
+      'arm',
+      'oct',
+      armDocuments,
+      armEntrepriseDocuments,
+      [],
+      [],
+      null,
+      null,
+      [],
+      { ...testBlankUser, role: 'super' }
+    )
+  ).toStrictEqual({ valid: true })
 })
 
-test.each<[SubstanceLegaleId[], EtapeTypeId, TitreTypeId, Parameters<typeof isEtapeComplete>[3], Parameters<typeof isEtapeComplete>[4], boolean]>([
-  [[], 'mfr', 'arm', armDocuments, armEntrepriseDocuments, true],
-  [[], 'mfr', 'axm', armDocuments, armEntrepriseDocuments, true],
-  [[], 'rde', 'arm', armDocuments, [], false],
-  [[], 'mfr', 'prm', armDocuments, armEntrepriseDocuments, false],
-  [['auru'], 'mfr', 'arm', armDocuments, armEntrepriseDocuments, false],
-  [['auru'], 'mfr', 'axm', axmDocuments, axmEntrepriseDocuments, false],
-  [[], 'mfr', 'axm', axmDocuments, axmEntrepriseDocuments, true],
-])('teste la complétude des substances', (substances, etapeType, titreType, testDocuments, entrepriseDocuments, error) => {
-  const titreEtape = {
+test.each<[SubstanceLegaleId[], EtapeTypeId, TitreTypeId, IsEtapeCompleteDocuments, IsEtapeCompleteEntrepriseDocuments]>([
+  [[], 'rde', 'arm', armDocuments, []],
+  [['auru'], 'mfr', 'arm', armDocuments, armEntrepriseDocuments],
+  [['auru'], 'mfr', 'axm', axmDocuments, axmEntrepriseDocuments],
+])('teste la complétude des substances complètes %#', (substances, etapeType, titreType, testDocuments, entrepriseDocuments) => {
+  const titreEtape: IsEtapeCompleteEtape = {
     ...etapeComplete,
-    substances,
+    substances: { value: substances, heritee: false, etapeHeritee: null },
+    contenu: { arm: { mecanise: { value: false, etapeHeritee: null, heritee: false } } },
     typeId: etapeType,
   }
 
-  const result = isEtapeComplete(titreEtape, titreType, 'oct', testDocuments, entrepriseDocuments, [], null, null, { ...testBlankUser, role: 'super' })
+  const result = isEtapeComplete(titreEtape, titreType, 'oct', testDocuments, entrepriseDocuments, [], [], null, null, [], { ...testBlankUser, role: 'super' })
 
-  const errorLabel = 'au moins une substance doit être renseignée'
+  expect(result.valid, JSON.stringify(result)).toBe(true)
+})
 
-  if (error) {
-    if (!result.valid) {
-      expect(result.errors).toContain(errorLabel)
-    } else {
-      throw new Error('')
-    }
+test.each<[SubstanceLegaleId[], EtapeTypeId, TitreTypeId, IsEtapeCompleteDocuments, IsEtapeCompleteEntrepriseDocuments]>([
+  [[], 'mfr', 'arm', armDocuments, armEntrepriseDocuments],
+  [[], 'mfr', 'axm', armDocuments, armEntrepriseDocuments],
+  [[], 'mfr', 'prm', armDocuments, armEntrepriseDocuments],
+  [[], 'mfr', 'axm', axmDocuments, axmEntrepriseDocuments],
+])('teste la complétude des substances incomplètes %#', (substances, etapeType, titreType, testDocuments, entrepriseDocuments) => {
+  const titreEtape: IsEtapeCompleteEtape = {
+    ...etapeComplete,
+    substances: { value: substances, heritee: false, etapeHeritee: null },
+    typeId: etapeType,
+  }
+
+  const result = isEtapeComplete(titreEtape, titreType, 'oct', testDocuments, entrepriseDocuments, [], [], null, null, [], { ...testBlankUser, role: 'super' })
+
+  const errorLabel = 'Les substances sont obligatoires'
+  expect(result.valid).toBe(false)
+  if (!result.valid) {
+    expect(result.errors, JSON.stringify(result)).toContain(errorLabel)
   } else {
-    expect(result).toStrictEqual({ valid: true })
+    throw new Error('')
   }
 })
 
-test.each<[FeatureMultiPolygon | null, EtapeTypeId, TitreTypeId, Parameters<typeof isEtapeComplete>[3], Parameters<typeof isEtapeComplete>[4], boolean]>([
-  [null, 'mfr', 'arm', armDocuments, armEntrepriseDocuments, true],
-  [null, 'mfr', 'axm', axmDocuments, axmEntrepriseDocuments, true],
-  [null, 'rde', 'arm', armDocuments, [], false],
-  [null, 'mfr', 'prm', [], [], false],
-  [multiPolygonWith4Points, 'mfr', 'arm', armDocuments, armEntrepriseDocuments, false],
-  [multiPolygonWith4Points, 'mfr', 'axm', axmDocuments, axmEntrepriseDocuments, false],
-])('teste la complétude du périmètre', (geojson4326Perimetre, etapeType, titreType, documents, entrepriseDocuments, error) => {
-  const titreEtape: Parameters<typeof isEtapeComplete>[0] = {
+test.each<[FeatureMultiPolygon | null, EtapeTypeId, TitreTypeId, IsEtapeCompleteDocuments, IsEtapeCompleteEntrepriseDocuments]>([
+  [null, 'mfr', 'arm', armDocuments, armEntrepriseDocuments],
+  [null, 'mfr', 'axm', axmDocuments, axmEntrepriseDocuments],
+  [null, 'mfr', 'prm', [], []],
+])('teste la complétude du périmètre incomplet %#', (geojson4326Perimetre, etapeType, titreType, documents, entrepriseDocuments) => {
+  const titreEtape: IsEtapeCompleteEtape = {
     ...etapeComplete,
-    geojson4326Perimetre,
+    perimetre: {
+      value: {
+        geojson4326Points: null,
+        geojsonOriginePerimetre: null,
+        geojsonOriginePoints: null,
+        geojsonOrigineGeoSystemeId: null,
+        geojson4326Forages: null,
+        geojsonOrigineForages: null,
+        surface: null,
+        geojson4326Perimetre,
+      },
+      heritee: false,
+      etapeHeritee: null,
+    },
     typeId: etapeType,
   }
 
-  const result = isEtapeComplete(titreEtape, titreType, 'oct', documents, entrepriseDocuments, [], null, null, { ...testBlankUser, role: 'super' })
+  const result = isEtapeComplete(titreEtape, titreType, 'oct', documents, entrepriseDocuments, [], [], null, null, [], { ...testBlankUser, role: 'super' })
 
-  const errorLabel = 'le périmètre doit être renseigné'
-  if (error) {
-    if (!result.valid) {
-      expect(result.errors).toContain(errorLabel)
-    } else {
-      throw new Error('')
-    }
+  const errorLabel = 'Le périmètre est obligatoire'
+  expect(result.valid).toBe(false)
+  if (!result.valid) {
+    expect(result.errors, JSON.stringify(result)).toContain(errorLabel)
   } else {
-    expect(result).toStrictEqual({ valid: true })
+    throw new Error('')
   }
 })
+test.each<[FeatureMultiPolygon | null, EtapeTypeId, TitreTypeId, IsEtapeCompleteDocuments, IsEtapeCompleteEntrepriseDocuments]>([
+  [null, 'rde', 'arm', armDocuments, []],
+  [multiPolygonWith4Points, 'mfr', 'arm', armDocuments, armEntrepriseDocuments],
+  [multiPolygonWith4Points, 'mfr', 'axm', axmDocuments, axmEntrepriseDocuments],
+])('teste la complétude du périmètre complet %#', (geojson4326Perimetre, etapeType, titreType, documents, entrepriseDocuments) => {
+  const titreEtape: IsEtapeCompleteEtape = {
+    ...etapeComplete,
+    contenu: titreType === 'arm' ? { arm: { mecanise: { value: false, heritee: false, etapeHeritee: null } } } : {},
+    perimetre: {
+      value: {
+        geojson4326Points: null,
+        geojsonOriginePerimetre: null,
+        geojsonOriginePoints: null,
+        geojsonOrigineGeoSystemeId: null,
+        geojson4326Forages: null,
+        geojsonOrigineForages: null,
+        surface: null,
+        geojson4326Perimetre,
+      },
+      heritee: false,
+      etapeHeritee: null,
+    },
+    typeId: etapeType,
+  }
 
-test('[DEPRECATED] une demande d’ARM mécanisée a des documents obligatoires supplémentaires', () => {
-  const errors = isEtapeComplete({ ...etapeComplete, contenu: { arm: { mecanise: true } } }, 'arm', 'oct', armDocuments, armEntrepriseDocuments, [], null, null, { ...testBlankUser, role: 'super' })
-  expect(errors).toMatchInlineSnapshot(`
-    {
-      "errors": [
-        "le document "dep" est obligatoire",
-        "le document "doe" est obligatoire",
-      ],
-      "valid": false,
-    }
-  `)
+  const result = isEtapeComplete(titreEtape, titreType, 'oct', documents, entrepriseDocuments, [], [], null, null, [], { ...testBlankUser, role: 'super' })
+
+  expect(result).toStrictEqual({ valid: true })
 })
 
 test('une demande d’ARM mécanisée a des documents obligatoires supplémentaires', () => {
   const errors = isEtapeComplete(
-    { ...etapeComplete, sectionsWithValue: [{ id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: true }] }] },
+    { ...etapeComplete, contenu: { arm: { mecanise: { value: true, heritee: false, etapeHeritee: null } } } },
     'arm',
     'oct',
     armDocuments,
     armEntrepriseDocuments,
     [],
+    [],
     null,
     null,
+    [],
     { ...testBlankUser, role: 'super' }
   )
   expect(errors).toMatchInlineSnapshot(`
     {
       "errors": [
-        "le document "dep" est obligatoire",
-        "le document "doe" est obligatoire",
+        "le document "Décision cas par cas" (dep) est obligatoire",
+        "le document "Dossier "Loi sur l'eau"" (doe) est obligatoire",
       ],
       "valid": false,
     }
   `)
 })
 
-test.each<[number | undefined | null, EtapeTypeId, TitreTypeId, Parameters<typeof isEtapeComplete>[3], Parameters<typeof isEtapeComplete>[4], boolean]>([
-  [undefined, 'mfr', 'arm', armDocuments, armEntrepriseDocuments, true],
+test.each<[number | null, EtapeTypeId, TitreTypeId, IsEtapeCompleteDocuments, IsEtapeCompleteEntrepriseDocuments, boolean]>([
   [null, 'mfr', 'axm', axmDocuments, axmEntrepriseDocuments, true],
   [0, 'mfr', 'axm', axmDocuments, axmEntrepriseDocuments, true],
   [0, 'mfr', 'arm', armDocuments, armEntrepriseDocuments, true],
@@ -407,16 +519,17 @@ test.each<[number | undefined | null, EtapeTypeId, TitreTypeId, Parameters<typeo
   [0, 'rde', 'arm', [], [], false],
   [3, 'mfr', 'arm', armDocuments, armEntrepriseDocuments, false],
   [3, 'mfr', 'axm', axmDocuments, axmEntrepriseDocuments, false],
-])('teste la complétude de la durée %i pour une étapeType %s, un titreType %s', (duree, etapeType, titreType, documents, entreprisedocuments, error) => {
-  const titreEtape = {
+])('%# teste la complétude de la durée %s pour une étapeType %s, un titreType %s', (duree, etapeType, titreType, documents, entreprisedocuments, error) => {
+  const titreEtape: IsEtapeCompleteEtape = {
     ...etapeComplete,
-    duree,
+    duree: { value: duree, heritee: false, etapeHeritee: null },
+    contenu: { arm: { mecanise: { value: false, heritee: false, etapeHeritee: null } } },
     typeId: etapeType,
   }
 
-  const result = isEtapeComplete(titreEtape, titreType, 'oct', documents, entreprisedocuments, [], null, null, { ...testBlankUser, role: 'super' })
+  const result = isEtapeComplete(titreEtape, titreType, 'oct', documents, entreprisedocuments, [], [], null, null, [], { ...testBlankUser, role: 'super' })
 
-  const errorLabel = 'la durée doit être renseignée'
+  const errorLabel = 'la durée est obligatoire'
   if (error) {
     if (!result.valid) {
       expect(result.errors).toContain(errorLabel)
diff --git a/packages/common/src/permissions/titres-etapes.ts b/packages/common/src/permissions/titres-etapes.ts
index 09ea106ed..99109855f 100644
--- a/packages/common/src/permissions/titres-etapes.ts
+++ b/packages/common/src/permissions/titres-etapes.ts
@@ -10,20 +10,32 @@ import { canAdministrationEtapeTypeId } from '../static/administrationsTitresTyp
 
 import { TitreStatutId } from '../static/titresStatuts.js'
 import { EntrepriseDocument, EntrepriseId } from '../entreprise.js'
-import { getSections } from '../static/titresTypes_demarchesTypes_etapesTypes/sections.js'
-import { getEntrepriseDocuments } from '../static/titresTypes_demarchesTypes_etapesTypes/entrepriseDocuments.js'
 import { SDOMZoneId } from '../static/sdom.js'
-import { NonEmptyArray, isNonEmptyArray, isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty, isNullOrUndefined } from '../typescript-tools.js'
-import { DocumentType, EntrepriseDocumentTypeId } from '../static/documentsTypes.js'
-import { SubstanceLegaleId } from '../static/substancesLegales.js'
-import { isDocumentsComplete } from './documents.js'
-import { contenuCompleteValidate, sectionsWithValueCompleteValidate } from './sections.js'
-import { ElementWithValue, SectionWithValue } from '../sections.js'
-import { FeatureMultiPolygon } from '../perimetre.js'
-import { EtapeDocument, GetEtapeDocumentsByEtapeId, GetEtapeDocumentsByEtapeIdAslDocument, GetEtapeDocumentsByEtapeIdDaeDocument, needAslAndDae } from '../etape.js'
-import { getDocumentsTypes } from './etape-form.js'
-
-export const dureeOptionalCheck = (etapeTypeId: EtapeTypeId, demarcheTypeId: DemarcheTypeId, titreTypeId: TitreTypeId): boolean => {
+import { DeepReadonly, NonEmptyArray, isNonEmptyArray } from '../typescript-tools.js'
+import {
+  ETAPE_IS_BROUILLON,
+  EtapeAvis,
+  EtapeBrouillon,
+  EtapeDocument,
+  GetEtapeDocumentsByEtapeId,
+  GetEtapeDocumentsByEtapeIdAslDocument,
+  GetEtapeDocumentsByEtapeIdDaeDocument,
+  TempEtapeAvis,
+  TempEtapeDocument,
+} from '../etape.js'
+import {
+  dateTypeStepIsComplete,
+  entrepriseDocumentsStepIsComplete,
+  etapeAvisStepIsComplete,
+  etapeDocumentsStepIsComplete,
+  fondamentaleStepIsComplete,
+  perimetreStepIsComplete,
+  sectionsStepIsComplete,
+} from './etape-form.js'
+import { CommuneId } from '../static/communes.js'
+import { FlattenEtape } from '../etape-form.js'
+
+export const isDureeOptional = (etapeTypeId: EtapeTypeId, demarcheTypeId: DemarcheTypeId, titreTypeId: TitreTypeId): boolean => {
   if (titreTypeId !== 'axm' && titreTypeId !== 'arm') {
     return true
   }
@@ -154,115 +166,86 @@ const canCreateOrEditEtape = (
   return false
 }
 
-type IsEtapeCompleteEtape = {
-  typeId: EtapeTypeId
-  isBrouillon: boolean
-  /**
-   @deprecated use sectionsWithValue/
-  */
-  contenu?: Record<string, Record<string, ElementWithValue['value']>>
-  sectionsWithValue?: SectionWithValue[]
-  geojson4326Perimetre?: null | FeatureMultiPolygon
-  substances?: null | SubstanceLegaleId[]
-  duree?: number | null
-}
+export type IsEtapeCompleteEtape = DeepReadonly<Pick<FlattenEtape, 'typeId' | 'date' | 'statutId' | 'duree' | 'contenu' | 'substances' | 'perimetre' | 'isBrouillon' | 'titulaires' | 'amodiataires'>>
+export type IsEtapeCompleteDocuments = DeepReadonly<Pick<EtapeDocument | TempEtapeDocument, 'etape_document_type_id'>[]>
+export type IsEtapeCompleteEntrepriseDocuments = DeepReadonly<Pick<EntrepriseDocument, 'entreprise_document_type_id' | 'entreprise_id'>[]>
+type IsEtapeCompleteSdomZones = DeepReadonly<SDOMZoneId[]> | null | undefined
+type IsEtapeCompleteCommunes = DeepReadonly<CommuneId[]>
+type IsEtapeCompleteDaeDocument = DeepReadonly<Omit<GetEtapeDocumentsByEtapeIdDaeDocument, 'id'> | null>
+type IsEtapeCompleteAslDocument = DeepReadonly<Omit<GetEtapeDocumentsByEtapeIdAslDocument, 'id'> | null>
+type IsEtapeCompleteEtapeAvis = DeepReadonly<Pick<EtapeAvis, 'avis_type_id'>[]>
 
-// TODO 2024-04-17 utiliser toutes les stepIsComplete
 export const isEtapeComplete = (
-  titreEtape: IsEtapeCompleteEtape,
+  etape: IsEtapeCompleteEtape,
   titreTypeId: TitreTypeId,
   demarcheTypeId: DemarcheTypeId,
-  documents: Pick<EtapeDocument, 'etape_document_type_id'>[],
-  entrepriseDocuments: Pick<EntrepriseDocument, 'entreprise_document_type_id'>[],
-  sdomZones: SDOMZoneId[] | null | undefined,
-  daeDocument: Omit<GetEtapeDocumentsByEtapeIdDaeDocument, 'id'> | null,
-  aslDocument: Omit<GetEtapeDocumentsByEtapeIdAslDocument, 'id'> | null,
+  documents: IsEtapeCompleteDocuments,
+  entrepriseDocuments: IsEtapeCompleteEntrepriseDocuments,
+  sdomZones: IsEtapeCompleteSdomZones,
+  communes: IsEtapeCompleteCommunes,
+  daeDocument: IsEtapeCompleteDaeDocument,
+  aslDocument: IsEtapeCompleteAslDocument,
+  etapeAvis: IsEtapeCompleteEtapeAvis,
   user: User
 ): { valid: true } | { valid: false; errors: NonEmptyArray<string> } => {
-  const errors: string[] = []
-  const sections = getSections(titreTypeId, demarcheTypeId, titreEtape.typeId)
-  // les éléments non optionnel des sections sont renseignés
-  const hasAtLeasOneSectionMandatory: boolean = sections.some(section => {
-    return section.elements.some(element => (element.optionnel ?? true) === false)
-  })
-  if (hasAtLeasOneSectionMandatory) {
-    if (isNotNullNorUndefined(titreEtape.contenu)) {
-      errors.push(...contenuCompleteValidate(sections, titreEtape.contenu))
-    } else if (isNotNullNorUndefinedNorEmpty(titreEtape.sectionsWithValue)) {
-      errors.push(...sectionsWithValueCompleteValidate(titreEtape.sectionsWithValue))
-    } else {
-      errors.push('les contenus ne sont pas présents dans l’étape alors que les sections ont des éléments obligatoires')
+  const isCompleteChecks = [
+    dateTypeStepIsComplete(etape, user),
+    fondamentaleStepIsComplete(etape, demarcheTypeId, titreTypeId),
+    sectionsStepIsComplete(etape, demarcheTypeId, titreTypeId),
+    perimetreStepIsComplete(etape),
+    etapeDocumentsStepIsComplete(etape, demarcheTypeId, titreTypeId, documents, sdomZones ?? [], daeDocument, aslDocument, user),
+    entrepriseDocumentsStepIsComplete(
+      etape,
+      demarcheTypeId,
+      titreTypeId,
+      entrepriseDocuments.map(ed => ({ documentTypeId: ed.entreprise_document_type_id, entrepriseId: ed.entreprise_id }))
+    ),
+    etapeAvisStepIsComplete(etape, etapeAvis, titreTypeId, communes),
+  ]
+  const errors: string[] = isCompleteChecks.reduce<string[]>((acc, c) => {
+    if (!c.valid) {
+      acc.push(...c.errors)
     }
-  }
 
-  if (needAslAndDae({ etapeTypeId: titreEtape.typeId, demarcheTypeId, titreTypeId }, titreEtape.isBrouillon, user)) {
-    if (isNullOrUndefined(daeDocument)) {
-      errors.push('L’arrêté préfectoral de la mission autorité environnementale est obligatoire')
-    }
-    if (isNullOrUndefined(aslDocument)) {
-      errors.push('La lettre de décision du propriétaire du sol est obligatoire')
-    }
-  }
+    return acc
+  }, [])
 
-  let contenu = titreEtape.contenu
-  if (isNullOrUndefined(contenu) && isNotNullNorUndefinedNorEmpty(titreEtape.sectionsWithValue)) {
-    contenu = titreEtape.sectionsWithValue.reduce(
-      (accSection, section) => ({ ...accSection, [section.id]: section.elements.reduce((accElement, element) => ({ ...accElement, [element.id]: element.value }), {}) }),
-      {}
-    )
-  }
-  const dts: DocumentType[] = getDocumentsTypes({ ...titreEtape }, demarcheTypeId, titreTypeId, sdomZones ?? [], contenu?.arm?.mecanise === true)
-
-  const documentsErrors = isDocumentsComplete(documents ?? [], dts)
-  if (!documentsErrors.valid) {
-    errors.push(...documentsErrors.errors)
+  if (isNonEmptyArray(errors)) {
+    return { valid: false, errors }
   }
 
-  // les documents d'entreprise obligatoires sont tous présents
-  const entrepriseDocumentsTypes = getEntrepriseDocuments(titreTypeId, demarcheTypeId, titreEtape.typeId)
-
-  const entrepriseDocumentsTypesIds: EntrepriseDocumentTypeId[] = []
-  if (entrepriseDocuments.length) {
-    for (const entrepriseDocumentType of entrepriseDocuments) {
-      if (!entrepriseDocumentsTypes.map(({ id }) => id).includes(entrepriseDocumentType.entreprise_document_type_id)) {
-        errors.push(`impossible de lier un document d'entreprise de type ${entrepriseDocumentType.entreprise_document_type_id}`)
-      }
-      entrepriseDocumentsTypesIds.push(entrepriseDocumentType.entreprise_document_type_id)
-    }
-  }
-  entrepriseDocumentsTypes
-    .filter(({ optionnel }) => !optionnel)
-    .forEach(jt => {
-      if (!entrepriseDocumentsTypesIds.includes(jt.id)) {
-        errors.push(`le document d'entreprise « ${jt.nom} » obligatoire est manquant`)
-      }
-    })
+  return { valid: true }
+}
 
-  // Si c’est une demande d’AEX ou d’ARM, certaines informations sont obligatoires
-  if (titreEtape.typeId === 'mfr' && ['arm', 'axm'].includes(titreTypeId)) {
-    // le périmètre doit être défini
-    if (isNullOrUndefined(titreEtape.geojson4326Perimetre)) {
-      errors.push('le périmètre doit être renseigné')
-    }
+type IsEtapeDeposableEtapeAvis = DeepReadonly<Pick<EtapeAvis | TempEtapeAvis, 'avis_type_id'>[]>
+export const isEtapeDeposable = (
+  user: User,
+  titreTypeId: TitreTypeId,
+  demarcheTypeId: DemarcheTypeId,
+  titreEtape: DeepReadonly<Pick<FlattenEtape, 'typeId' | 'date' | 'statutId' | 'duree' | 'contenu' | 'substances' | 'perimetre' | 'isBrouillon' | 'titulaires' | 'amodiataires'>>,
+  etapeDocuments: IsEtapeCompleteDocuments,
+  entrepriseDocuments: IsEtapeCompleteEntrepriseDocuments,
+  sdomZones: IsEtapeCompleteSdomZones,
+  communes: IsEtapeCompleteCommunes,
+  daeDocument: IsEtapeCompleteDaeDocument,
+  aslDocument: IsEtapeCompleteAslDocument,
+  etapeAvis: IsEtapeDeposableEtapeAvis
+): boolean => {
+  if (titreEtape.isBrouillon === ETAPE_IS_BROUILLON) {
+    const complete = isEtapeComplete(titreEtape, titreTypeId, demarcheTypeId, etapeDocuments, entrepriseDocuments, sdomZones, communes, daeDocument, aslDocument, etapeAvis, user)
+    if (!complete.valid) {
+      console.warn(complete.errors)
 
-    // il doit exister au moins une substance
-    if (!titreEtape.substances || !titreEtape.substances.length || !titreEtape.substances.some(substanceId => !!substanceId)) {
-      errors.push('au moins une substance doit être renseignée')
+      return false
     }
-  }
-
-  if ((isNullOrUndefined(titreEtape.duree) || titreEtape.duree === 0) && !dureeOptionalCheck(titreEtape.typeId, demarcheTypeId, titreTypeId)) {
-    errors.push('la durée doit être renseignée')
-  }
 
-  if (isNonEmptyArray(errors)) {
-    return { valid: false, errors }
+    return true
   }
 
-  return { valid: true }
+  return false
 }
 
-export const isEtapeDeposable = (
+export const canDeposeEtape = (
   user: User,
   titre: {
     typeId: TitreTypeId
@@ -271,38 +254,28 @@ export const isEtapeDeposable = (
     administrationsLocales: AdministrationId[]
   },
   demarcheTypeId: DemarcheTypeId,
-  titreEtape: IsEtapeCompleteEtape,
+  titreEtape: DeepReadonly<Pick<FlattenEtape, 'typeId' | 'date' | 'statutId' | 'duree' | 'contenu' | 'substances' | 'perimetre' | 'isBrouillon' | 'titulaires' | 'amodiataires'>>,
   etapeDocuments: Pick<EtapeDocument, 'etape_document_type_id'>[],
-  entrepriseDocuments: Pick<EntrepriseDocument, 'entreprise_document_type_id'>[],
+  entrepriseDocuments: Pick<EntrepriseDocument, 'entreprise_document_type_id' | 'entreprise_id'>[],
   sdomZones: SDOMZoneId[] | null | undefined,
+  communes: CommuneId[],
   daeDocument: GetEtapeDocumentsByEtapeId['dae'],
-  aslDocument: GetEtapeDocumentsByEtapeId['asl']
+  aslDocument: GetEtapeDocumentsByEtapeId['asl'],
+  etapeAvis: IsEtapeDeposableEtapeAvis
 ): boolean => {
-  if (titreEtape.typeId === ETAPES_TYPES.demande && titreEtape.isBrouillon) {
-    if (
-      canCreateOrEditEtape(
-        user,
-        titreEtape.typeId,
-        titreEtape.isBrouillon,
-        titre.titulaires,
-        titre.administrationsLocales,
-        demarcheTypeId,
-        { typeId: titre.typeId, titreStatutId: titre.titreStatutId },
-        'modification'
-      )
-    ) {
-      const complete = isEtapeComplete(titreEtape, titre.typeId, demarcheTypeId, etapeDocuments, entrepriseDocuments, sdomZones, daeDocument, aslDocument, user)
-      if (!complete.valid) {
-        console.warn(complete.errors)
-
-        return false
-      }
-
-      return true
-    }
-  }
-
-  return false
+  return (
+    isEtapeDeposable(user, titre.typeId, demarcheTypeId, titreEtape, etapeDocuments, entrepriseDocuments, sdomZones, communes, daeDocument, aslDocument, etapeAvis) &&
+    canCreateOrEditEtape(
+      user,
+      titreEtape.typeId,
+      titreEtape.isBrouillon,
+      titre.titulaires,
+      titre.administrationsLocales,
+      demarcheTypeId,
+      { typeId: titre.typeId, titreStatutId: titre.titreStatutId },
+      'modification'
+    )
+  )
 }
 
-export const canDeleteEtapeDocument = (isBrouillon: boolean): boolean => isBrouillon
+export const canDeleteEtapeDocument = (isBrouillon: EtapeBrouillon): boolean => isBrouillon
diff --git a/packages/common/src/rest.ts b/packages/common/src/rest.ts
index d0e4b04c7..a9b812cdf 100644
--- a/packages/common/src/rest.ts
+++ b/packages/common/src/rest.ts
@@ -25,7 +25,15 @@ import {
 } from './titres.js'
 import { adminUserNotNullValidator, userValidator } from './roles.js'
 import { caminoAnneeValidator, caminoDateValidator } from './date.js'
-import { etapeDocumentIdValidator, etapeIdOrSlugValidator, etapeIdValidator, etapeTypeEtapeStatutWithMainStepValidator, getEtapeDocumentsByEtapeIdValidator } from './etape.js'
+import {
+  etapeDocumentIdValidator,
+  etapeIdOrSlugValidator,
+  etapeIdValidator,
+  etapeTypeEtapeStatutWithMainStepValidator,
+  getEtapeDocumentsByEtapeIdValidator,
+  getEtapeAvisByEtapeIdValidator,
+  etapeAvisIdValidator,
+} from './etape.js'
 import {
   statistiquesDGTMValidator,
   statistiquesDataGouvValidator,
@@ -52,6 +60,7 @@ import {
 import { titreIdOrSlugValidator, titreIdValidator } from './validators/titres.js'
 import { administrationIdValidator } from './static/administrations.js'
 import { administrationActiviteTypeEmailValidator } from './administrations.js'
+import { flattenEtapeValidator, restEtapeCreationValidator, restEtapeModificationValidator } from './etape-form.js'
 
 type CaminoRoute<T extends string> = (keyof ZodParseUrlParams<T> extends never ? {} : { params: ZodParseUrlParams<T> }) & {
   get?: { output: ZodType }
@@ -95,9 +104,11 @@ const IDS = [
   '/rest/demarches/:demarcheId/geojson',
   '/rest/etapes/:etapeId/geojson',
   '/rest/etapes/:etapeId/etapeDocuments',
+  '/rest/etapes/:etapeId/etapeAvis',
   '/rest/etapes/:etapeId/entrepriseDocuments',
-  '/rest/etapes/:etapeId',
+  '/rest/etapes/:etapeIdOrSlug',
   '/rest/etapes/:etapeId/depot',
+  '/rest/etapes',
   '/rest/activites/:activiteId',
   '/rest/geojson/import/:geoSystemeId',
   '/rest/geojson_points/:geoSystemeId',
@@ -109,6 +120,7 @@ const IDS = [
   // NE PAS TOUCHER CES ROUTES, UTILISÉES PAR D'AUTRES
   '/download/fichiers/:documentId',
   '/download/entrepriseDocuments/:documentId',
+  '/download/avisDocument/:etapeAvisId',
   '/download/activiteDocuments/:documentId',
   '/fichiers/:documentId',
   '/titres/:id',
@@ -177,9 +189,11 @@ export const CaminoRestRoutes = {
   '/rest/demarches/:demarcheId/geojson': { params: { demarcheId: demarcheIdOrSlugValidator }, get: { output: perimetreInformationsValidator } },
   '/rest/etapes/:etapeId/geojson': { params: { etapeId: etapeIdOrSlugValidator }, get: { output: perimetreInformationsValidator } },
   '/rest/etapes/:etapeId/etapeDocuments': { params: { etapeId: etapeIdValidator }, get: { output: getEtapeDocumentsByEtapeIdValidator } },
+  '/rest/etapes/:etapeId/etapeAvis': { params: { etapeId: etapeIdValidator }, get: { output: getEtapeAvisByEtapeIdValidator } },
   '/rest/etapes/:etapeId/entrepriseDocuments': { params: { etapeId: etapeIdValidator }, get: { output: z.array(etapeEntrepriseDocumentValidator) } },
-  '/rest/etapes/:etapeId': { params: { etapeId: etapeIdValidator }, delete: true },
+  '/rest/etapes/:etapeIdOrSlug': { params: { etapeIdOrSlug: etapeIdOrSlugValidator }, delete: true, get: { output: flattenEtapeValidator } },
   '/rest/etapes/:etapeId/depot': { params: { etapeId: etapeIdValidator }, put: { input: z.void(), output: z.void() } },
+  '/rest/etapes': { post: { input: restEtapeCreationValidator, output: etapeIdValidator }, put: { input: restEtapeModificationValidator, output: etapeIdValidator } },
   '/rest/activites/:activiteId': { params: { activiteId: activiteIdOrSlugValidator }, get: { output: activiteValidator }, put: { input: activiteEditionValidator, output: z.void() }, delete: true },
   '/rest/communes': { get: { output: z.array(communeValidator) } },
   '/rest/geojson_points/:geoSystemeId': { params: { geoSystemeId: geoSystemeIdValidator }, post: { input: featureCollectionPointsValidator, output: featureCollectionPointsValidator } },
@@ -198,6 +212,7 @@ export const CaminoRestRoutes = {
   '/deconnecter': { get: { output: z.string() } },
   '/changerMotDePasse': { get: { output: z.string() } },
   '/download/fichiers/:documentId': { params: { documentId: etapeDocumentIdValidator }, newDownload: true },
+  '/download/avisDocument/:etapeAvisId': { params: { etapeAvisId: etapeAvisIdValidator }, newDownload: true },
   '/download/entrepriseDocuments/:documentId': { params: { documentId: entrepriseDocumentIdValidator }, newDownload: true },
   '/download/activiteDocuments/:documentId': { params: { documentId: activiteDocumentIdValidator }, newDownload: true },
   '/fichiers/:documentId': { params: { documentId: etapeDocumentIdValidator }, newDownload: true },
diff --git a/packages/common/src/sections.test.ts b/packages/common/src/sections.test.ts
new file mode 100644
index 000000000..cc143bd92
--- /dev/null
+++ b/packages/common/src/sections.test.ts
@@ -0,0 +1,62 @@
+import { test, expect } from 'vitest'
+import { simpleContenuToFlattenedContenu } from './sections'
+import { caminoDateValidator } from './date'
+
+test('simpleContenuToFlattenedContenu', () => {
+  expect(
+    simpleContenuToFlattenedContenu(
+      'arm',
+      'oct',
+      'mfr',
+      { arm: { mecanise: true } },
+      { arm: { mecanise: { actif: true, etape: { date: caminoDateValidator.parse('2023-02-02'), typeId: 'mfr', contenu: { arm: { mecanise: false } } } } } }
+    )
+  ).toMatchInlineSnapshot(`
+      {
+        "arm": {
+          "franchissements": {
+            "etapeHeritee": null,
+            "heritee": false,
+            "value": null,
+          },
+          "mecanise": {
+            "etapeHeritee": {
+              "date": "2023-02-02",
+              "etapeTypeId": "mfr",
+              "value": false,
+            },
+            "heritee": true,
+            "value": false,
+          },
+        },
+      }
+    `)
+  expect(
+    simpleContenuToFlattenedContenu(
+      'arm',
+      'oct',
+      'mfr',
+      { arm: { mecanise: true } },
+      { arm: { mecanise: { actif: false, etape: { date: caminoDateValidator.parse('2023-02-02'), typeId: 'mfr', contenu: { arm: { mecanise: false } } } } } }
+    )
+  ).toMatchInlineSnapshot(`
+      {
+        "arm": {
+          "franchissements": {
+            "etapeHeritee": null,
+            "heritee": false,
+            "value": null,
+          },
+          "mecanise": {
+            "etapeHeritee": {
+              "date": "2023-02-02",
+              "etapeTypeId": "mfr",
+              "value": false,
+            },
+            "heritee": false,
+            "value": true,
+          },
+        },
+      }
+    `)
+})
diff --git a/packages/common/src/sections.ts b/packages/common/src/sections.ts
index d6e0c96bf..897a9294f 100644
--- a/packages/common/src/sections.ts
+++ b/packages/common/src/sections.ts
@@ -4,6 +4,7 @@ import {
   checkboxElementValidator,
   checkboxesElementValidator,
   dateElementValidator,
+  getSections,
   numberElementValidator,
   radioElementValidator,
   selectElementWithOptionsValidator,
@@ -12,6 +13,10 @@ import {
 } from './static/titresTypes_demarchesTypes_etapesTypes/sections.js'
 import { z } from 'zod'
 import { DeepReadonly, isNotNullNorUndefined } from './typescript-tools.js'
+import { TitreTypeId } from './static/titresTypes.js'
+import { DemarcheTypeId } from './static/demarchesTypes.js'
+import { EtapeTypeId } from './static/etapesTypes.js'
+import { EtapeContenu, FlattenEtape, FlattenedContenu, RestEtapeCreation, HeritageContenu } from './etape-form.js'
 
 const dateElementWithValueValidator = dateElementValidator.extend({ value: caminoDateValidator.nullable() })
 
@@ -19,7 +24,8 @@ const textElementWithValueValidator = textElementValidator.extend({ value: z.str
 
 const urlElementWithValueValidator = urlElementValidator.extend({ value: z.string().nullable() })
 
-const numberElementWithValueValidator = numberElementValidator.extend({ value: z.number().nullable() })
+export const numberElementValueValidator = z.number().nonnegative().nullable()
+const numberElementWithValueValidator = numberElementValidator.extend({ value: numberElementValueValidator })
 type NumberElementWithValue = z.infer<typeof numberElementWithValueValidator>
 
 const radioElementWithValueValidator = radioElementValidator.extend({ value: z.boolean().nullable() })
@@ -92,3 +98,50 @@ export const valeurFind = (element: ElementWithValue): string | '–' => {
 
   return element.value
 }
+
+export const simpleContenuToFlattenedContenu = (
+  titreTypeId: TitreTypeId,
+  demarcheTypeId: DemarcheTypeId,
+  etapeTypeId: EtapeTypeId,
+  contenu: EtapeContenu,
+  heritageContenu: HeritageContenu
+): FlattenedContenu => {
+  const sections = getSections(titreTypeId, demarcheTypeId, etapeTypeId)
+
+  return sections.reduce<FlattenedContenu>((accSection, section) => {
+    accSection[section.id] = section.elements.reduce<FlattenedContenu[string]>((accElement, element) => {
+      const elementHeritage = heritageContenu[section.id]?.[element.id] ?? { actif: false, etape: null }
+      const value = elementHeritage.actif ? elementHeritage.etape?.contenu[section.id]?.[element.id] ?? null : contenu?.[section.id]?.[element.id] ?? null
+      accElement[element.id] = {
+        value,
+        heritee: elementHeritage.actif,
+        etapeHeritee: isNotNullNorUndefined(elementHeritage.etape)
+          ? {
+              etapeTypeId: elementHeritage.etape.typeId,
+              date: elementHeritage.etape.date,
+              value: elementHeritage.etape.contenu[section.id]?.[element.id] ?? null,
+            }
+          : null,
+      }
+
+      return accElement
+    }, {})
+
+    return accSection
+  }, {})
+}
+
+export const flattenContenuToSimpleContenu = (flattenContenu: FlattenEtape['contenu']): RestEtapeCreation['contenu'] => {
+  return Object.keys(flattenContenu).reduce<RestEtapeCreation['contenu']>((sectionsAcc, section) => {
+    sectionsAcc = {
+      ...sectionsAcc,
+      [section]: Object.keys(flattenContenu[section]).reduce<RestEtapeCreation['contenu'][string]>((elementsAcc, element) => {
+        elementsAcc = { ...elementsAcc, [element]: flattenContenu[section][element].value }
+
+        return elementsAcc
+      }, {}),
+    }
+
+    return sectionsAcc
+  }, {})
+}
diff --git a/packages/common/src/static/activitesTypes.ts b/packages/common/src/static/activitesTypes.ts
index 1e5157f8b..e1ed7fe23 100644
--- a/packages/common/src/static/activitesTypes.ts
+++ b/packages/common/src/static/activitesTypes.ts
@@ -81,6 +81,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2018-01-01'),
             description: 'Masse d’or brut en sortie de mine extrait au cours du trimestre (exemple : masse sous la forme de concentré gravimétrique).',
+            optionnel: false,
           },
           {
             id: 'orExtrait',
@@ -88,6 +89,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateFin: toCaminoDate('2018-01-01'),
             description: "Masse d'or brut en sortie de mine, ou nette obtenue  après traitement métallurgique, extrait au cours du trimestre.",
+            optionnel: false,
           },
           {
             id: 'volumeMinerai',
@@ -95,12 +97,14 @@ export const ActivitesTypes: {
             type: 'number',
             dateFin: toCaminoDate('2018-01-01'),
             description: 'Volume en mètre cube de minerai extrait au cours du trimestre.',
+            optionnel: false,
           },
           {
             id: 'mercure',
             nom: 'Mercure récupéré (g)',
             type: 'number',
             description: 'Masse en gramme de l’ensemble des produits contaminés envoyés en traitement au cours du trimestre.',
+            optionnel: false,
           },
           {
             id: 'carburantDetaxe',
@@ -108,12 +112,14 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2018-01-01'),
             description: 'Volume total en litre de carburant détaxé consommé au cours du trimestre par les travaux réalisés sur le chantier.',
+            optionnel: false,
           },
           {
             id: 'carburantConventionnel',
             nom: 'Carburant conventionnel (l)',
             type: 'number',
             description: 'Volume total en litre de carburant conventionnel consommé au cours du trimestre par les travaux réalisés sur le chantier.',
+            optionnel: false,
           },
           {
             id: 'pompes',
@@ -121,6 +127,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2018-01-01'),
             description: 'Nombre moyen de pompes actives au cours du trimestre utilisées sur le chantier (pompe à gravier, pompe de relevage…).',
+            optionnel: false,
           },
           {
             id: 'pelles',
@@ -128,12 +135,14 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2018-01-01'),
             description: 'Nombre moyen de pelles actives au cours du trimestre utilisées sur le chantier (aménagement, exploitation, réhabilitation).',
+            optionnel: false,
           },
           {
             id: 'effectifs',
             nom: 'Effectifs',
             type: 'number',
             description: 'Nombre moyen de salariés sur le chantier au cours du trimestre.',
+            optionnel: false,
           },
           {
             id: 'depensesTotales',
@@ -141,6 +150,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateFin: toCaminoDate('2018-01-01'),
             description: "Montant en euros des dépenses sur l'exploitation.",
+            optionnel: false,
           },
           {
             id: 'environnement',
@@ -149,6 +159,7 @@ export const ActivitesTypes: {
             dateDebut: toCaminoDate('2018-01-01'),
             description:
               'Montant en euros des investissements consentis au cours du trimestre listés à l’<a href="https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000021850940&cidTexte=LEGITEXT000006069569" target="_blank" title="Page de l’article - site externe" rel="noopener noreferrer">article 318 C de l’annexe II du code général des impôts</a>. Afin de bénéficier des déductions fiscales afférentes, les justificatifs attestant de la réalisation effective des investissements sont susceptibles de vous êtres demandés par l’administration.',
+            optionnel: false,
           },
         ],
       },
@@ -184,6 +195,7 @@ export const ActivitesTypes: {
             ],
             dateDebut: toCaminoDate('2018-01-01'),
             periodeId: 1,
+            optionnel: false,
           },
           {
             id: '2',
@@ -213,6 +225,7 @@ export const ActivitesTypes: {
             ],
             dateDebut: toCaminoDate('2018-01-01'),
             periodeId: 1,
+            optionnel: false,
           },
           {
             id: '3',
@@ -242,6 +255,7 @@ export const ActivitesTypes: {
             ],
             dateDebut: toCaminoDate('2018-01-01'),
             periodeId: 1,
+            optionnel: false,
           },
           {
             id: '4',
@@ -271,6 +285,7 @@ export const ActivitesTypes: {
             ],
             dateDebut: toCaminoDate('2018-01-01'),
             periodeId: 2,
+            optionnel: false,
           },
           {
             id: '5',
@@ -300,6 +315,7 @@ export const ActivitesTypes: {
             ],
             dateDebut: toCaminoDate('2018-01-01'),
             periodeId: 2,
+            optionnel: false,
           },
           {
             id: '6',
@@ -329,6 +345,7 @@ export const ActivitesTypes: {
             ],
             dateDebut: toCaminoDate('2018-01-01'),
             periodeId: 2,
+            optionnel: false,
           },
           {
             id: '7',
@@ -358,6 +375,7 @@ export const ActivitesTypes: {
             ],
             dateDebut: toCaminoDate('2018-01-01'),
             periodeId: 3,
+            optionnel: false,
           },
           {
             id: '8',
@@ -387,6 +405,7 @@ export const ActivitesTypes: {
             ],
             dateDebut: toCaminoDate('2018-01-01'),
             periodeId: 3,
+            optionnel: false,
           },
           {
             id: '9',
@@ -416,6 +435,7 @@ export const ActivitesTypes: {
             ],
             dateDebut: toCaminoDate('2018-01-01'),
             periodeId: 3,
+            optionnel: false,
           },
           {
             id: '10',
@@ -445,6 +465,7 @@ export const ActivitesTypes: {
             ],
             dateDebut: toCaminoDate('2018-01-01'),
             periodeId: 4,
+            optionnel: false,
           },
           {
             id: '11',
@@ -474,6 +495,7 @@ export const ActivitesTypes: {
             ],
             dateDebut: toCaminoDate('2018-01-01'),
             periodeId: 4,
+            optionnel: false,
           },
           {
             id: '12',
@@ -503,6 +525,7 @@ export const ActivitesTypes: {
             ],
             dateDebut: toCaminoDate('2018-01-01'),
             periodeId: 4,
+            optionnel: false,
           },
         ],
       },
@@ -674,6 +697,7 @@ export const ActivitesTypes: {
               },
             ],
             dateDebut: toCaminoDate('2019-01-01'),
+            optionnel: false,
           },
           {
             id: 'surfaceLevesSpectrometrie',
@@ -706,6 +730,7 @@ export const ActivitesTypes: {
               },
             ],
             dateDebut: toCaminoDate('2019-01-01'),
+            optionnel: false,
           },
           {
             id: 'surfaceLevesPolarisationProvoquee',
@@ -738,6 +763,7 @@ export const ActivitesTypes: {
               },
             ],
             dateDebut: toCaminoDate('2019-01-01'),
+            optionnel: false,
           },
           {
             id: 'surfaceLevesSismiques',
@@ -770,6 +796,7 @@ export const ActivitesTypes: {
               },
             ],
             dateDebut: toCaminoDate('2019-01-01'),
+            optionnel: false,
           },
           {
             id: 'surfaceLevesConductivite',
@@ -802,6 +829,7 @@ export const ActivitesTypes: {
               },
             ],
             dateDebut: toCaminoDate('2019-01-01'),
+            optionnel: false,
           },
           {
             id: 'surfaceLevesAutre',
@@ -834,6 +862,7 @@ export const ActivitesTypes: {
               },
             ],
             dateDebut: toCaminoDate('2019-01-01'),
+            optionnel: false,
           },
           {
             id: 'complementLevesGeochimie',
@@ -1043,6 +1072,7 @@ export const ActivitesTypes: {
                 nom: 'autres',
               },
             ],
+            optionnel: false,
           },
           {
             id: 'complementAnalyses',
@@ -1090,6 +1120,7 @@ export const ActivitesTypes: {
             ],
             dateDebut: toCaminoDate('2019-01-01'),
             description: 'Nature des études effectuées',
+            optionnel: false,
           },
           {
             id: 'complementEtudes',
@@ -1120,6 +1151,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros de l'ensemble des dépenses effectuées au cours de l'année",
+            optionnel: false,
           },
         ],
       },
@@ -1133,6 +1165,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses de levés topographiques au cours de l'année",
+            optionnel: false,
           },
         ],
       },
@@ -1146,6 +1179,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses de cartographie géologique au cours de l'année",
+            optionnel: false,
           },
         ],
       },
@@ -1159,6 +1193,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses de levés géochimiques au cours de l'année",
+            optionnel: false,
           },
         ],
       },
@@ -1172,6 +1207,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses de levés géophysique au cours de l'année",
+            optionnel: false,
           },
         ],
       },
@@ -1185,6 +1221,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses de tranchées et puits au cours de l'année",
+            optionnel: false,
           },
         ],
       },
@@ -1198,6 +1235,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses de sondages tarières au cours de l'année",
+            optionnel: false,
           },
           {
             id: 'depensesLevesSondagesDestructifs',
@@ -1205,6 +1243,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses de sondages destructifs au cours de l'année",
+            optionnel: false,
           },
           {
             id: 'depensesLevesSondagesCarottés',
@@ -1212,6 +1251,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses de sondages carottés au cours de l'année",
+            optionnel: false,
           },
         ],
       },
@@ -1225,6 +1265,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses d'analyses multi-éléments au cours de l'année",
+            optionnel: false,
           },
           {
             id: 'depensesTraitementMineralurgiques',
@@ -1232,6 +1273,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses de traitements minéralurgiques au cours de l'année",
+            optionnel: false,
           },
         ],
       },
@@ -1245,6 +1287,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses d'études environnementales au cours de l'année",
+            optionnel: false,
           },
           {
             id: 'depensesEtudeEconomiquePreliminaire',
@@ -1252,6 +1295,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses d'étude économique préliminaire au cours de l'année",
+            optionnel: false,
           },
           {
             id: 'depensesEtudeEconomiquePreFaisabilite',
@@ -1259,6 +1303,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses d'étude économique pré-faisabilité au cours de l'année",
+            optionnel: false,
           },
           {
             id: 'depensesEtudeEconomiqueFaisabilité',
@@ -1266,6 +1311,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses d'étude économique faisabilité au cours de l'année",
+            optionnel: false,
           },
           {
             id: 'depensesEtudeSociale',
@@ -1273,6 +1319,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses d'étude environnementales au cours de l'année",
+            optionnel: false,
           },
           {
             id: 'depensesEtudessautres',
@@ -1280,6 +1327,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses d'études autres au cours de l'année",
+            optionnel: false,
           },
         ],
       },
@@ -1294,6 +1342,7 @@ export const ActivitesTypes: {
             dateDebut: toCaminoDate('2019-01-01'),
             description:
               'Montant en euros des investissements consentis au cours de l\'année listés à l’<a href="https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000021850940&cidTexte=LEGITEXT000006069569" target="_blank" title="Page de l’article - site externe" rel="noopener noreferrer">article 318 C de l’annexe II du code général des impôts</a>. Afin de bénéficier des déductions fiscales afférentes, les justificatifs attestant de la réalisation effective des investissements sont susceptibles de vous être demandés par l’administration.',
+            optionnel: false,
           },
         ],
       },
@@ -1307,6 +1356,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des dépenses de communication et frais d'organisation de réunions publiques au cours de l'année",
+            optionnel: false,
           },
         ],
       },
@@ -1320,6 +1370,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Montant en euros des autres dépenses au cours de l'année",
+            optionnel: false,
           },
           {
             id: 'texte',
@@ -1349,12 +1400,14 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Volume total en litre de carburant détaxé consommé au cours de l'année par les travaux réalisés sur le chantier.",
+            optionnel: false,
           },
           {
             id: 'carburantConventionnel',
             nom: 'Carburant conventionnel (l)',
             type: 'number',
             description: "Volume total en litre de carburant conventionnel consommé au cours de l'année par les travaux réalisés sur le chantier.",
+            optionnel: false,
           },
           {
             id: 'pompes',
@@ -1362,6 +1415,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "<b>Dans le cas d'un chantier alluvionnaire</b>, nombre d'heure de fonctionnement de pompes au cours de l'année sur le chantier (pompe à gravier, pompe de relevage…).",
+            optionnel: false,
           },
           {
             id: 'pelles',
@@ -1370,18 +1424,21 @@ export const ActivitesTypes: {
             dateDebut: toCaminoDate('2019-01-01'),
             description:
               "<b>Dans le cas d'un chantier alluvionnaire</b>, nombre d'heure de fonctionnement de pelles mécaniques au cours de l'année sur le chantier (aménagement, exploitation, réhabilitation).",
+            optionnel: false,
           },
           {
             id: 'mercure',
             nom: 'Mercure récupéré (g)',
             type: 'number',
             description: "<b>En Guyane</b>, masse en gramme de l’ensemble des produits contaminés au mercure envoyés en traitement au cours de l'année.",
+            optionnel: false,
           },
           {
             id: 'surfaceDeforestee',
             nom: 'Surface déforestée (km²)',
             type: 'number',
             description: "Surface déforestée en kilomètre carré au cours de l'année.",
+            optionnel: false,
           },
         ],
       },
@@ -1418,6 +1475,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Nombre total de salariés de l'entreprise affectés aux activités sur le titre minier.",
+            optionnel: false,
           },
           {
             id: 'etpDirectsTotal',
@@ -1425,6 +1483,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Nombre total d'équivalents temps plein salariés de l'entreprise affectés aux activités sur le titre minier.",
+            optionnel: false,
           },
           {
             id: 'emploisDirectsResidents',
@@ -1432,6 +1491,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Nombre de salariés de l'entreprise, <b>français ou étrangers, résidant fiscalement dans le département</b>, affectés aux activités sur le titre minier.",
+            optionnel: false,
           },
           {
             id: 'etpDirectsResidents',
@@ -1440,6 +1500,7 @@ export const ActivitesTypes: {
             dateDebut: toCaminoDate('2019-01-01'),
             description:
               "Nombre d'équivalents temps plein salariés de l'entreprise, occupés par des <b>français ou étrangers, résidant fiscalement dans le département</b>, affectés aux activités sur le titre minier.",
+            optionnel: false,
           },
           {
             id: 'emploisDirectsFr',
@@ -1447,6 +1508,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Nombre d'employés de <b>nationalité française</b> salariés de l'entreprise affectés aux activités sur le titre minier.",
+            optionnel: false,
           },
           {
             id: 'etpDirectsFr',
@@ -1454,6 +1516,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Nombre d'équivalents temps plein salariés de l'entreprise occupés par des personnes de <b>nationalité française</b> affectés aux activités sur le titre minier.",
+            optionnel: false,
           },
         ],
       },
@@ -1467,6 +1530,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Nombre total d'emplois salariés des sous-traitants et prestataires affectés aux activités sur le titre minier.",
+            optionnel: false,
           },
           {
             id: 'etpIndirectsTotal',
@@ -1474,6 +1538,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Nombre total d'équivalents temps plein salariés des sous-traitants et prestataires, affectés aux activités sur le titre minier.",
+            optionnel: false,
           },
           {
             id: 'emploisIndirectsResidents',
@@ -1481,6 +1546,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: 'Nombre de salariés des sous-traitants et prestataires, <b>résidant fiscalement dans le département</b>, affectés aux activités sur le titre minier.',
+            optionnel: false,
           },
           {
             id: 'etpIndirectsResidents',
@@ -1488,6 +1554,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Nombre d'équivalents temps plein des sous-traitants et prestataires, <b>résidant fiscalement dans le département</b>, affectés aux activités sur le titre minier.",
+            optionnel: false,
           },
           {
             id: 'emploisIndirectsFr',
@@ -1495,6 +1562,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Nombre d'employés de <b>nationalité française</b> salariés des sous-traitants et prestataires de l'entreprise, affectés aux activités sur le titre minier.",
+            optionnel: false,
           },
           {
             id: 'etpIndirectsFr',
@@ -1503,6 +1571,7 @@ export const ActivitesTypes: {
             dateDebut: toCaminoDate('2019-01-01'),
             description:
               "Nombre d'équivalents temps plein occupés par des personnes de <b>nationalité française</b> salariées des sous-traitants et prestataires de l'entreprise, affectées aux activités sur le titre minier.",
+            optionnel: false,
           },
         ],
       },
@@ -1516,6 +1585,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Nombre de réunions publiques consacrées aux projets sur le titre minier organisées au cours de l'année",
+            optionnel: false,
           },
           {
             id: 'priseContact',
@@ -1523,6 +1593,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Nombre de rendez-vous avec les parties prenantes concernées par le titre minier organisés au cours de l'année",
+            optionnel: false,
           },
           {
             id: 'communicationLocale',
@@ -1530,6 +1601,7 @@ export const ActivitesTypes: {
             type: 'number',
             dateDebut: toCaminoDate('2019-01-01'),
             description: "Nombre d'actions de communication menées par le titulaire du titre à destination du public (hors publication et communication à destination des marchés) au cours de l'année",
+            optionnel: false,
           },
         ],
       },
@@ -1564,6 +1636,7 @@ export const ActivitesTypes: {
             nom: 'Volume de granulats marins extrait (m3)',
             type: 'number',
             description: "Volume de granulats marins extrait, en mètre cube, au cours de l'année.",
+            optionnel: false,
           },
         ],
       },
diff --git a/packages/common/src/static/administrationsTitresTypesEtapesTypes.ts b/packages/common/src/static/administrationsTitresTypesEtapesTypes.ts
index cede2c184..0ed9d80ed 100644
--- a/packages/common/src/static/administrationsTitresTypesEtapesTypes.ts
+++ b/packages/common/src/static/administrationsTitresTypesEtapesTypes.ts
@@ -41,14 +41,13 @@ const AdministrationsTitresTypesEtapesTypes: {
     [TITRES_TYPES_IDS.AUTORISATION_DE_RECHERCHE_METAUX]: {
       [ETAPES_TYPES.avisDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avenantALautorisationDeRechercheMiniere]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
+      [ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.classementSansSuite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.desistementDuDemandeur]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.expertiseDREALOuDGTMServiceEau]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.expertiseDGTMServicePreventionDesRisquesEtIndustriesExtractives_DATE_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.expertiseDeLOfficeNationalDesForets]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.expertiseDREALOuDGTMServiceBiodiversite]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDeComplements_RecepisseDeDeclarationLoiSurLeau_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDeComplements_DecisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
@@ -60,9 +59,7 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.enregistrementDeLaDemande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.priseEnChargeParLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.demandeDinformations_AvisDeLOfficeNationalDesForets_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDinformations]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.demandeDinformations_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur_AjournementDeLaCARM_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur_AvisFavorableDeLaCARM_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur_ClassementSansSuite_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
@@ -80,7 +77,6 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.recepisseDeDeclarationLoiSurLeau]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDinformation]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDinformation_RecevabiliteDeLaDemande_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.receptionDinformation_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.signatureDeLautorisationDeRechercheMiniere]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.validationDuPaiementDesFraisDeDossierComplementaires]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
@@ -91,12 +87,11 @@ const AdministrationsTitresTypesEtapesTypes: {
     [TITRES_TYPES_IDS.AUTORISATION_DE_RECHERCHE_METAUX]: {
       [ETAPES_TYPES.avisDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avenantALautorisationDeRechercheMiniere]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
+      [ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.classementSansSuite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.decisionDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.desistementDuDemandeur]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.expertiseDeLOfficeNationalDesForets]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDeComplements_RecepisseDeDeclarationLoiSurLeau_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDeComplements_DecisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDeComplements_CompletudeDeLaDemande_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -108,10 +103,8 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.enregistrementDeLaDemande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.priseEnChargeParLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.demandeDinformations_AvisDeLOfficeNationalDesForets_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDinformations]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDinformations_RecevabiliteDeLaDemande_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.demandeDinformations_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur_AjournementDeLaCARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur_AvisFavorableDeLaCARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur_ClassementSansSuite_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -128,10 +121,8 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.receptionDeComplements]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDeComplements_SaisineDeLaCARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.recepisseDeDeclarationLoiSurLeau]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.receptionDinformation_AvisDeLOfficeNationalDesForets_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDinformation]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDinformation_RecevabiliteDeLaDemande_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.receptionDinformation_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.signatureDeLautorisationDeRechercheMiniere]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.validationDuPaiementDesFraisDeDossierComplementaires]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -142,11 +133,10 @@ const AdministrationsTitresTypesEtapesTypes: {
     [TITRES_TYPES_IDS.AUTORISATION_DE_RECHERCHE_METAUX]: {
       [ETAPES_TYPES.avisDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avenantALautorisationDeRechercheMiniere]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
+      [ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.classementSansSuite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.desistementDuDemandeur]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.expertiseDeLOfficeNationalDesForets]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.completudeDeLaDemande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.recevabiliteDeLaDemande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.depotDeLaDemande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -266,7 +256,6 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.abrogationDeLaDecision]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDuConseilGeneralDeLeconomie_CGE_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDuJugeAdministratif]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.publicationDeLavisDeDecisionImplicite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.classementSansSuite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -322,7 +311,6 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.abrogationDeLaDecision]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDuConseilGeneralDeLeconomie_CGE_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDuJugeAdministratif]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.publicationDeLavisDeDecisionImplicite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.classementSansSuite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -378,7 +366,6 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.abrogationDeLaDecision]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDuConseilGeneralDeLeconomie_CGE_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDuJugeAdministratif]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.publicationDeLavisDeDecisionImplicite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.classementSansSuite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -434,7 +421,6 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.abrogationDeLaDecision]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDuConseilGeneralDeLeconomie_CGE_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDuJugeAdministratif]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.publicationDeLavisDeDecisionImplicite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.classementSansSuite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -463,14 +449,13 @@ const AdministrationsTitresTypesEtapesTypes: {
     [TITRES_TYPES_IDS.AUTORISATION_DE_RECHERCHE_METAUX]: {
       [ETAPES_TYPES.avisDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avenantALautorisationDeRechercheMiniere]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
+      [ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.classementSansSuite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.desistementDuDemandeur]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.expertiseDREALOuDGTMServiceEau]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.expertiseDGTMServicePreventionDesRisquesEtIndustriesExtractives_DATE_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.expertiseDeLOfficeNationalDesForets]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDeComplements_RecepisseDeDeclarationLoiSurLeau_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDeComplements_DecisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDeComplements_CompletudeDeLaDemande_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
@@ -482,10 +467,8 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.enregistrementDeLaDemande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.priseEnChargeParLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.demandeDinformations_AvisDeLOfficeNationalDesForets_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDinformations]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDinformations_RecevabiliteDeLaDemande_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.demandeDinformations_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur_AjournementDeLaCARM_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur_AvisFavorableDeLaCARM_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur_ClassementSansSuite_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
@@ -502,40 +485,26 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.receptionDeComplements]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDeComplements_SaisineDeLaCARM_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.recepisseDeDeclarationLoiSurLeau]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.receptionDinformation_AvisDeLOfficeNationalDesForets_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDinformation]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDinformation_RecevabiliteDeLaDemande_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.receptionDinformation_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.signatureDeLautorisationDeRechercheMiniere]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.validationDuPaiementDesFraisDeDossierComplementaires]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.validationDuPaiementDesFraisDeDossier]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
     },
     [TITRES_TYPES_IDS.AUTORISATION_D_EXPLOITATION_METAUX]: {
-      [ETAPES_TYPES.avisDeDirectionRegionaleDesAffairesCulturelles]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLaDirectionDalimentationDeLagricultureEtDeLaForet]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
+      [ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.abrogationDeLaDecision]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDGTMServiceMilieuxNaturelsBiodiversiteSitesEtPaysages_MNBST_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLaDirectionDesEntreprisesDeLaConcurrenceDeLaConsommationDuTravailEtDeLemploi]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLaDirectionRegionaleDesFinancesPubliques]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLaGendarmerieNationale]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDunMaire]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDuJugeAdministratif]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLetatMajorOrpaillageEtPecheIllicite_EMOPI_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLagenceRegionaleDeSante]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDuProprietaireDuSol]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLaCaisseGeneraleDeSecuriteSociale]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDGTMServiceAmenagementUrbanismeConstructionLogement_AUCL_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.confirmationDeLaccordDuProprietaireDuSol]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.classementSansSuite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.desistementDuDemandeur]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDeLadministration]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionImplicite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.expertiseDeLOfficeNationalDesForets]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.informationsHistoriquesIncompletes]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDeComplements_RecevabiliteDeLaDemande_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDeComplements]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
@@ -545,7 +514,6 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.demande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDinformations_AvisDuDREALDEALOuDGTM_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDinformations]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.demandeDinformations_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.modificationDeLaDemande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.modificationDeLaDemande_DecisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -556,29 +524,22 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.receptionDeComplements]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDinformation_AvisDuDREALDEALOuDGTM_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDinformation]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.receptionDinformation_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.publicationDeDecisionAuRecueilDesActesAdministratifs]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDeLautoriteSignataire]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDesCollectivitesLocales]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.saisineDesServices]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
     },
     [TITRES_TYPES_IDS.CONCESSION_METAUX]: {
       [ETAPES_TYPES.abrogationDeLaDecision]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDuConseilGeneralDeLeconomie_CGE_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDuneCollectiviteLocale]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDunPresidentDEPCI]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLIfremer]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
+      [ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDunMaire]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDuParcNaturelMarin]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDuJugeAdministratif]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDeMiseEnConcurrenceAuJORF]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDuConseilDEtat]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDunServiceAdministratifLocal]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLautoriteMilitaire]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDuParcNational]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDuPrefet]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.classementSansSuite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -601,7 +562,6 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.notificationDesCollectivitesLocales]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.noteInterneSignalee]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuPrefet]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDuParcNaturelRegional]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.publicationDansUnJournalLocalOuNational]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.rapportDuConseilGeneralDeLeconomie_CGE_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDeComplements]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
@@ -614,7 +574,6 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.saisineDuConseilDEtat]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDuPrefet]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.saisineDesServices]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
     },
     [TITRES_TYPES_IDS.PERMIS_EXCLUSIF_DE_RECHERCHES_METAUX]: {
       [ETAPES_TYPES.abrogationDeLaDecision]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -624,12 +583,8 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.avisDunMaire]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDuJugeAdministratif]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDeMiseEnConcurrenceAuJORF]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
+      [ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDunServiceAdministratifLocal]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLautoriteMilitaire]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDuParcNational]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDuPrefet]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.classementSansSuite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -650,7 +605,6 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.notificationDesCollectivitesLocales]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.noteInterneSignalee]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuPrefet]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDuParcNaturelRegional]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.clotureDeLaParticipationDuPublic]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.ouvertureDeLaParticipationDuPublic]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.publicationDansUnJournalLocalOuNational]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -663,7 +617,6 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.saisineDesCollectivitesLocales]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDuPrefet]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.saisineDesServices]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
     },
     [TITRES_TYPES_IDS.PERMIS_D_EXPLOITATION_METAUX]: {
       [ETAPES_TYPES.abrogationDeLaDecision]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -672,11 +625,8 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.avisDunMaire]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDuJugeAdministratif]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDeMiseEnConcurrenceAuJORF]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
+      [ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDunServiceAdministratifLocal]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLautoriteMilitaire]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDuParcNational]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDuPrefet]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.publicationDeLavisDeDecisionImplicite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -699,7 +649,6 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.notificationDesCollectivitesLocales]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.noteInterneSignalee]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuPrefet]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDuParcNaturelRegional]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.publicationDansUnJournalLocalOuNational]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.rapportDuConseilGeneralDeLeconomie_CGE_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDeComplements]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
@@ -710,7 +659,6 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.saisineDesCollectivitesLocales]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDuPrefet]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.saisineDesServices]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
     },
   },
   [ADMINISTRATION_IDS['OFFICE NATIONAL DES FORÊTS']]: {
@@ -722,43 +670,27 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.completudeDeLaDemande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.recevabiliteDeLaDemande]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.enregistrementDeLaDemande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.demandeDinformations_AvisDeLOfficeNationalDesForets_]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.demandeDinformations]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.demandeDinformations_RecevabiliteDeLaDemande_]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
-      [ETAPES_TYPES.demandeDinformations_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.modificationDeLaDemande]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.noteInterneSignalee]: { lectureInterdit: true, creationInterdit: false, modificationInterdit: false },
-      [ETAPES_TYPES.receptionDinformation_AvisDeLOfficeNationalDesForets_]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.receptionDinformation]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.receptionDinformation_RecevabiliteDeLaDemande_]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
-      [ETAPES_TYPES.receptionDinformation_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.saisineDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
     },
     [TITRES_TYPES_IDS.AUTORISATION_D_EXPLOITATION_METAUX]: {
-      [ETAPES_TYPES.avisDeDirectionRegionaleDesAffairesCulturelles]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLaDirectionDalimentationDeLagricultureEtDeLaForet]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
+      [ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.abrogationDeLaDecision]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDGTMServiceMilieuxNaturelsBiodiversiteSitesEtPaysages_MNBST_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLaDirectionDesEntreprisesDeLaConcurrenceDeLaConsommationDuTravailEtDeLemploi]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLaDirectionRegionaleDesFinancesPubliques]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLaGendarmerieNationale]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDunMaire]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDuJugeAdministratif]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLetatMajorOrpaillageEtPecheIllicite_EMOPI_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLagenceRegionaleDeSante]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDuProprietaireDuSol]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
-      [ETAPES_TYPES.avisDeLaCaisseGeneraleDeSecuriteSociale]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDGTMServiceAmenagementUrbanismeConstructionLogement_AUCL_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.confirmationDeLaccordDuProprietaireDuSol]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.classementSansSuite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.desistementDuDemandeur]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDeLadministration]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionImplicite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.expertiseDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.informationsHistoriquesIncompletes]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDeComplements_RecevabiliteDeLaDemande_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDeComplements]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
@@ -768,7 +700,6 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.demande]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.demandeDinformations_AvisDuDREALDEALOuDGTM_]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.demandeDinformations]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
-      [ETAPES_TYPES.demandeDinformations_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.notificationAuDemandeur]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.modificationDeLaDemande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.modificationDeLaDemande_DecisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -779,33 +710,30 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.receptionDeComplements]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDinformation_AvisDuDREALDEALOuDGTM_]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.receptionDinformation]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
-      [ETAPES_TYPES.receptionDinformation_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.publicationDeDecisionAuRecueilDesActesAdministratifs]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDeLautoriteSignataire]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDesCollectivitesLocales]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.saisineDesServices]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
     },
-    [TITRES_TYPES_IDS.PERMIS_EXCLUSIF_DE_RECHERCHES_METAUX]: { [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false } },
+    [TITRES_TYPES_IDS.PERMIS_EXCLUSIF_DE_RECHERCHES_METAUX]: {
+      [ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
+    },
   },
   [ADMINISTRATION_IDS['PÔLE TECHNIQUE MINIER DE GUYANE']]: {
     [TITRES_TYPES_IDS.AUTORISATION_DE_RECHERCHE_METAUX]: {
       [ETAPES_TYPES.avisDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avenantALautorisationDeRechercheMiniere]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.classementSansSuite]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.decisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.decisionDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.expertiseDREALOuDGTMServiceEau]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.expertiseDGTMServicePreventionDesRisquesEtIndustriesExtractives_DATE_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.expertiseDeLOfficeNationalDesForets]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
+      [ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.completudeDeLaDemande]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.recevabiliteDeLaDemande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.priseEnChargeParLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.demandeDinformations_AvisDeLOfficeNationalDesForets_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDinformations]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDinformations_RecevabiliteDeLaDemande_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.demandeDinformations_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur_AjournementDeLaCARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur_AvisFavorableDeLaCARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur_ClassementSansSuite_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -816,10 +744,8 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.modificationDeLaDemande]: { lectureInterdit: false, creationInterdit: false, modificationInterdit: false },
       [ETAPES_TYPES.paiementDesFraisDeDossierComplementaires]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.recepisseDeDeclarationLoiSurLeau]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.receptionDinformation_AvisDeLOfficeNationalDesForets_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDinformation]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDinformation_RecevabiliteDeLaDemande_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.receptionDinformation_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.signatureDeLautorisationDeRechercheMiniere]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.validationDuPaiementDesFraisDeDossierComplementaires]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -830,12 +756,11 @@ const AdministrationsTitresTypesEtapesTypes: {
     [TITRES_TYPES_IDS.AUTORISATION_DE_RECHERCHE_METAUX]: {
       [ETAPES_TYPES.avisDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.avenantALautorisationDeRechercheMiniere]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
+      [ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.classementSansSuite]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.decisionDeLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.desistementDuDemandeur]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.expertiseDeLOfficeNationalDesForets]: { lectureInterdit: true, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDeComplements_RecepisseDeDeclarationLoiSurLeau_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDeComplements_DecisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDeComplements_CompletudeDeLaDemande_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -847,10 +772,8 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.enregistrementDeLaDemande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.priseEnChargeParLOfficeNationalDesForets]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demande]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.demandeDinformations_AvisDeLOfficeNationalDesForets_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDinformations]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.demandeDinformations_RecevabiliteDeLaDemande_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.demandeDinformations_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur_AjournementDeLaCARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur_AvisFavorableDeLaCARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.notificationAuDemandeur_ClassementSansSuite_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
@@ -867,10 +790,8 @@ const AdministrationsTitresTypesEtapesTypes: {
       [ETAPES_TYPES.receptionDeComplements]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDeComplements_SaisineDeLaCARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.recepisseDeDeclarationLoiSurLeau]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.receptionDinformation_AvisDeLOfficeNationalDesForets_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDinformation]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.receptionDinformation_RecevabiliteDeLaDemande_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
-      [ETAPES_TYPES.receptionDinformation_ExpertiseDeLOfficeNationalDesForets_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.saisineDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.signatureDeLautorisationDeRechercheMiniere]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
       [ETAPES_TYPES.validationDuPaiementDesFraisDeDossierComplementaires]: { lectureInterdit: false, creationInterdit: true, modificationInterdit: true },
diff --git a/packages/common/src/static/avisTypes.ts b/packages/common/src/static/avisTypes.ts
new file mode 100644
index 000000000..200bb7c17
--- /dev/null
+++ b/packages/common/src/static/avisTypes.ts
@@ -0,0 +1,67 @@
+import { z } from 'zod'
+
+interface Definition<T> {
+  id: T
+  nom: string
+}
+// prettier-ignore
+const AVIS_TYPES_IDS = ['lettreDeSaisineDesServices', 'confirmationAccordProprietaireDuSol', 'avisDirectionRegionaleDesAffairesCulturelles', 'avisDirectionAlimentationAgricultureForet', 'avisConseilDepartementalEnvironnementRisquesSanitairesTechnologiques', 'avisDirectionsRégionalesEconomieEmploiTravailSolidarités', 'avisDirectionRegionaleFinancesPubliques', 'avisGendarmerieNationale', 'avisParcNaturelMarin', 'avisIFREMER', 'avisInstitutNationalOrigineQualite', 'avisEtatMajorOrpaillagePecheIllicite', 'avisServiceAdministratifLocal', 'avisAutoriteMilitaire', 'avisParcNational', 'avisDirectionDepartementaleTerritoiresMer', 'avisAgenceRegionaleSante', 'avisCaisseGeneraleSecuriteSociale', 'autreAvis', 'avisServiceMilieuxNaturelsBiodiversiteSitesPaysages', 'avisOfficeNationalDesForets', 'expertiseOfficeNationalDesForets'] as const
+
+export const avisTypeIdValidator = z.enum(AVIS_TYPES_IDS)
+export type AvisTypeId = z.infer<typeof avisTypeIdValidator>
+
+export const AvisTypes: { [key in AvisTypeId]: Definition<key> } = {
+  lettreDeSaisineDesServices: { id: 'lettreDeSaisineDesServices', nom: 'Lettre de saisine des services' },
+  confirmationAccordProprietaireDuSol: { id: 'confirmationAccordProprietaireDuSol', nom: "Confirmation de l'accord du propriétaire du sol" },
+  avisDirectionRegionaleDesAffairesCulturelles: { id: 'avisDirectionRegionaleDesAffairesCulturelles', nom: 'Avis de la Direction Régionale Des Affaires Culturelles (DRAC)' },
+  avisDirectionAlimentationAgricultureForet: { id: 'avisDirectionAlimentationAgricultureForet', nom: "Avis de la Direction de l'Alimentation de l'Agriculture et de la Forêt (DRAF)" },
+  avisConseilDepartementalEnvironnementRisquesSanitairesTechnologiques: {
+    id: 'avisConseilDepartementalEnvironnementRisquesSanitairesTechnologiques',
+    nom: "Avis du Conseil Départemental de l'Environnement et des Risques Sanitaires et Technologiques (CODERST)",
+  },
+  avisServiceMilieuxNaturelsBiodiversiteSitesPaysages: {
+    id: 'avisServiceMilieuxNaturelsBiodiversiteSitesPaysages',
+    nom: 'Avis du Service Milieux Naturels Biodiversité Sites Et Paysages (MNBST) de la DGTM',
+  },
+  avisDirectionsRégionalesEconomieEmploiTravailSolidarités: {
+    id: 'avisDirectionsRégionalesEconomieEmploiTravailSolidarités',
+    nom: 'Avis de la Direction régionale de l’économie, de l’emploi, du travail et des solidarités',
+  },
+  avisDirectionRegionaleFinancesPubliques: { id: 'avisDirectionRegionaleFinancesPubliques', nom: 'Avis de la Direction Regionale Des Finances Publiques' },
+  avisGendarmerieNationale: { id: 'avisGendarmerieNationale', nom: 'Avis de la Gendarmerie Nationale' },
+  avisParcNaturelMarin: { id: 'avisParcNaturelMarin', nom: 'Avis du Parc Naturel Marin' },
+  avisIFREMER: { id: 'avisIFREMER', nom: "Avis de l'IFREMER" },
+  avisOfficeNationalDesForets: { id: 'avisOfficeNationalDesForets', nom: "Avis de l'Office National des Forêts" },
+  expertiseOfficeNationalDesForets: { id: 'expertiseOfficeNationalDesForets', nom: "Expertise de l'Office National des Forêts" },
+  avisInstitutNationalOrigineQualite: { id: 'avisInstitutNationalOrigineQualite', nom: "Avis de l'Institut National de l'origine et de la Qualité" },
+  avisEtatMajorOrpaillagePecheIllicite: { id: 'avisEtatMajorOrpaillagePecheIllicite', nom: "Avis de l'État-major Orpaillage et Pêche Illicite (EMOPI)" },
+  avisServiceAdministratifLocal: { id: 'avisServiceAdministratifLocal', nom: "Avis d'un Service Administratif Local" },
+  avisAutoriteMilitaire: { id: 'avisAutoriteMilitaire', nom: "Avis de l'Autorité militaire" },
+  avisParcNational: { id: 'avisParcNational', nom: 'Avis du Parc National' },
+  avisDirectionDepartementaleTerritoiresMer: { id: 'avisDirectionDepartementaleTerritoiresMer', nom: 'Avis de la Direction Départementale des Territoires et de la Mer (DDTM)' },
+  avisAgenceRegionaleSante: { id: 'avisAgenceRegionaleSante', nom: "Avis de l'Agence Régionale de Santé (ARS)" },
+  avisCaisseGeneraleSecuriteSociale: { id: 'avisCaisseGeneraleSecuriteSociale', nom: 'Avis de la Caisse Générale de Sécurité Sociale' },
+  autreAvis: { id: 'autreAvis', nom: 'Autre avis' },
+}
+
+// prettier-ignore
+export const AvisStatutIds = [
+  "Favorable",
+  "Défavorable",
+  "Favorable avec réserves",
+  "Non renseigné",
+] as const
+
+export const avisStatutIdValidator = z.enum(AvisStatutIds)
+export type AvisStatutId = z.infer<typeof avisStatutIdValidator>
+
+export const AVIS_VISIBILITY_IDS = ['Public', 'TitulairesEtAdministrations', 'Administrations'] as const
+
+export const avisVisibilityIdValidator = z.enum(AVIS_VISIBILITY_IDS)
+export type AvisVisibilityId = z.infer<typeof avisVisibilityIdValidator>
+
+export const AvisVisibilityIds = {
+  Public: 'Public',
+  TitulairesEtAdministrations: 'TitulairesEtAdministrations',
+  Administrations: 'Administrations',
+} as const satisfies Record<(typeof AVIS_VISIBILITY_IDS)[number], AvisVisibilityId>
diff --git a/packages/common/src/static/etapesTypes.ts b/packages/common/src/static/etapesTypes.ts
index 92ba40377..51f85f9e7 100644
--- a/packages/common/src/static/etapesTypes.ts
+++ b/packages/common/src/static/etapesTypes.ts
@@ -1,61 +1,42 @@
 import { z } from 'zod'
 import { CaminoDate, toCaminoDate } from '../date.js'
 import { Definition } from '../definition.js'
+import { EtapeBrouillon } from '../etape.js'
 
 // prettier-ignore
-const IDS = ['abd', 'aca','aco','and','ane','anf','def','dex','dim', 'dpu', 'dup', 'dux','ihi', 'mfr','mod','mom','rca','rcb','rcd','rcm','rco','rcs','ria','rie','rif','rim','rio','rpu','sco', 'aac','aaf','abs','acd','acg','acl','aec','aep','afp','agn','aim','ama','ami','aof','aop','apd','ape','api','apl','apm','apn','apo','app','apu','apw','ari','ars','asl','ass','auc','cac','ccs','cim','cod','cps','css','dae','dec','des','ede','edm','eof','epc','epu','esb','ide','mca','mcb','mcd','mcm','mco','mcp','mcr','mcs','mdp','mec','men','meo','mia','mie','mif','mim','mio','mna','mnb','mnc','mnd','mni','mno','mns','mnv','ncl','nis','npp','pfc','pfd','pnr','ppc','ppu','pqr','rcg','rde','rpe','sas','sca','scg','scl','spe','spo','spp','ssr','vfc','vfd','wab','wac','wad','wae','wai','wal','wam','wao','wap','war','was','wat','wau','wce','wco','wda','wdc','wdd','wde','wdm','wdt','wfa','wfd','wfo','wfr','wmm','wmr','wmt','woe','wpa','wpb','wpc','wpo','wpp','wps','wrc','wrd','wre','wrl','wrt','wse','wss','wtp'] as const
+const IDS = ['abd', 'aca','aco','and','ane','anf','def','dex','dim', 'dpu', 'dup', 'dux','ihi', 'mfr','mod','mom','rca','rcb','rcd','rcm','rco','rcs','rie','rif','rim','rpu','sco','acg','acl','aep','ama','apd','ape','apo','app','apu','apw','asl','cac','ccs','cim','cod','css','dae','dec','des','ede','edm','epc','epu','esb','ide','mca','mcb','mcd','mcm','mco','mcp','mcr','mcs','mdp','mec','men','meo','mie','mif','mim','mna','mnb','mnc','mnd','mni','mno','mns','mnv','ncl','nis','npp','pfc','pfd','ppc','ppu','pqr','rcg','rde','rpe','sas','sca','scg','scl','spe','spo','spp','vfc','vfd','wab','wae','wao','wap','war','wau','wce','wco','wda','wdc','wdd','wde','wdm','wfa','wfd','wfo','wfr','wmm','wmr','wmt','woe','wpa','wpb','wpc','wpo','wpp','wps','wrc','wrd','wre','wrl','wrt','wse','wtp', 'asc'] as const
 
 // prettier-ignore
-const FONDAMENTALES_IDS = ['abd', 'aca','aco','and','ane','anf','def','dex','dim', 'dpu', 'dup', 'dux','ihi', 'mfr','mod','mom','rca','rcb','rcd','rcm','rco','rcs','ria','rie','rif','rim','rio','rpu','sco'] as const satisfies Readonly<EtapeTypeIdFondamentaleArray>
+const FONDAMENTALES_IDS = ['abd', 'aca','aco','and','ane','anf','def','dex','dim', 'dpu', 'dup', 'dux','ihi', 'mfr','mod','mom','rca','rcb','rcd','rcm','rco','rcs','rie','rif','rim','rpu','sco'] as const satisfies Readonly<EtapeTypeIdFondamentaleArray>
 
 // prettier-ignore
-const NON_FONDAMENTALES_IDS = ['aac','aaf','abs','acd','acg','acl','aec','aep','afp','agn','aim','ama','ami','aof','aop','apd','ape','api','apl','apm','apn','apo','app','apu','apw','ari','ars','asl','ass','auc','cac','ccs','cim','cod','cps','css','dae','dec','des','ede','edm','eof','epc','epu','esb','ide','mca','mcb','mcd','mcm','mco','mcp','mcr','mcs','mdp','mec','men','meo','mia','mie','mif','mim','mio','mna','mnb','mnc','mnd','mni','mno','mns','mnv','ncl','nis','npp','pfc','pfd','pnr','ppc','ppu','pqr','rcg','rde','rpe','sas','sca','scg','scl','spe','spo','spp','ssr','vfc','vfd','wab','wac','wad','wae','wai','wal','wam','wao','wap','war','was','wat','wau','wce','wco','wda','wdc','wdd','wde','wdm','wdt','wfa','wfd','wfo','wfr','wmm','wmr','wmt','woe','wpa','wpb','wpc','wpo','wpp','wps','wrc','wrd','wre','wrl','wrt','wse','wss','wtp'] as const satisfies Readonly<EtapeTypeIdNonFondamentale[]>
+const NON_FONDAMENTALES_IDS = ['acg','acl','aep','ama','apd','ape','apo','app','apu','apw','asl','cac','ccs','cim','cod','css','dae','dec','des','ede','edm','epc','epu','esb','ide','mca','mcb','mcd','mcm','mco','mcp','mcr','mcs','mdp','mec','men','meo','mie','mif','mim','mna','mnb','mnc','mnd','mni','mno','mns','mnv','ncl','nis','npp','pfc','pfd','ppc','ppu','pqr','rcg','rde','rpe','sas','sca','scg','scl','spe','spo','spp','vfc','vfd','wab','wae','wao','wap','war','wau','wce','wco','wda','wdc','wdd','wde','wdm','wfa','wfd','wfo','wfr','wmm','wmr','wmt','woe','wpa','wpb','wpc','wpo','wpp','wps','wrc','wrd','wre','wrl','wrt','wse','wtp', 'asc'] as const satisfies Readonly<EtapeTypeIdNonFondamentale[]>
 
 // Ceci est un test :)
 ;[...FONDAMENTALES_IDS, ...NON_FONDAMENTALES_IDS] as const satisfies typeof IDS
 
 export const ETAPES_TYPES = {
-  avisDeDirectionRegionaleDesAffairesCulturelles: 'aac',
-  avisDeLaDirectionDalimentationDeLagricultureEtDeLaForet: 'aaf',
   abrogationDeLaDecision: 'abd',
-  avisDGTMServiceMilieuxNaturelsBiodiversiteSitesEtPaysages_MNBST_: 'abs',
   avisDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_: 'aca',
-  avisDuConseilDepartementalDeLenvironnementEtDesRisquesSanitairesEtTechnologiques_Coderst_: 'acd',
   avisDuConseilGeneralDeLeconomie_CGE_: 'acg',
   avisDuneCollectiviteLocale: 'acl',
   avenantALautorisationDeRechercheMiniere: 'aco',
-  avisDeLaDirectionDesEntreprisesDeLaConcurrenceDeLaConsommationDuTravailEtDeLemploi: 'aec',
   avisDunPresidentDEPCI: 'aep',
-  avisDeLaDirectionRegionaleDesFinancesPubliques: 'afp',
-  avisDeLaGendarmerieNationale: 'agn',
-  avisDeLIfremer: 'aim',
   avisDunMaire: 'ama',
-  avisDuParcNaturelMarin: 'ami',
   decisionDuJugeAdministratif: 'and',
   avisDeMiseEnConcurrenceAuJOUE: 'ane',
   avisDeMiseEnConcurrenceAuJORF: 'anf',
-  avisDeLOfficeNationalDesForets: 'aof',
-  avisDeLInstitutNationalDeLorigineEtDeLaQualite: 'aop',
   avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement: 'apd',
   avisDuConseilDEtat: 'ape',
-  avisDeLetatMajorOrpaillageEtPecheIllicite_EMOPI_: 'api',
-  avisDunServiceAdministratifLocal: 'apl',
-  avisDeLautoriteMilitaire: 'apm',
-  avisDuParcNational: 'apn',
   avisDeLaCommissionDepartementaleDesMines_CDM_: 'apo',
   avisDuPrefet: 'app',
   publicationDeLavisDeDecisionImplicite: 'apu',
   avisDuPrefetMaritime: 'apw',
-  avisDeLaReunionInterservice: 'ari',
-  avisDeLagenceRegionaleDeSante: 'ars',
   decisionDuProprietaireDuSol: 'asl',
-  avisDeLaCaisseGeneraleDeSecuriteSociale: 'ass',
-  avisDGTMServiceAmenagementUrbanismeConstructionLogement_AUCL_: 'auc',
   consultationDesAdministrationsCentrales: 'cac',
   consultationCLEDuSAGE: 'ccs',
   concertationInterministerielle: 'cim',
   saisineDuConseilDepartementalDeLenvironnementEtDesRisquesSanitairesEtTechnologiques_Coderst_: 'cod',
-  confirmationDeLaccordDuProprietaireDuSol: 'cps',
   classementSansSuite: 'css',
   decisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_: 'dae',
   declaration: 'dec',
@@ -68,7 +49,6 @@ export const ETAPES_TYPES = {
   decisionAdministrative: 'dux',
   expertiseDREALOuDGTMServiceEau: 'ede',
   expertiseDGTMServicePreventionDesRisquesEtIndustriesExtractives_DATE_: 'edm',
-  expertiseDeLOfficeNationalDesForets: 'eof',
   clotureDeLenquetePublique: 'epc',
   ouvertureDeLenquetePublique: 'epu',
   expertiseDREALOuDGTMServiceBiodiversite: 'esb',
@@ -87,11 +67,9 @@ export const ETAPES_TYPES = {
   enregistrementDeLaDemande: 'men',
   priseEnChargeParLOfficeNationalDesForets: 'meo',
   demande: 'mfr',
-  demandeDinformations_AvisDeLOfficeNationalDesForets_: 'mia',
   demandeDinformations_AvisDuDREALDEALOuDGTM_: 'mie',
   demandeDinformations: 'mif',
   demandeDinformations_RecevabiliteDeLaDemande_: 'mim',
-  demandeDinformations_ExpertiseDeLOfficeNationalDesForets_: 'mio',
   notificationAuDemandeur_AjournementDeLaCARM_: 'mna',
   notificationAuDemandeur_AvisFavorableDeLaCARM_: 'mnb',
   notificationAuDemandeur_ClassementSansSuite_: 'mnc',
@@ -107,7 +85,6 @@ export const ETAPES_TYPES = {
   notificationAuPrefet: 'npp',
   paiementDesFraisDeDossierComplementaires: 'pfc',
   paiementDesFraisDeDossier: 'pfd',
-  avisDuParcNaturelRegional: 'pnr',
   clotureDeLaParticipationDuPublic: 'ppc',
   ouvertureDeLaParticipationDuPublic: 'ppu',
   publicationDansUnJournalLocalOuNational: 'pqr',
@@ -119,11 +96,9 @@ export const ETAPES_TYPES = {
   receptionDeComplements: 'rco',
   receptionDeComplements_SaisineDeLaCARM_: 'rcs',
   recepisseDeDeclarationLoiSurLeau: 'rde',
-  receptionDinformation_AvisDeLOfficeNationalDesForets_: 'ria',
   receptionDinformation_AvisDuDREALDEALOuDGTM_: 'rie',
   receptionDinformation: 'rif',
   receptionDinformation_RecevabiliteDeLaDemande_: 'rim',
-  receptionDinformation_ExpertiseDeLOfficeNationalDesForets_: 'rio',
   rapportDuConseilDEtat: 'rpe',
   publicationDeDecisionAuRecueilDesActesAdministratifs: 'rpu',
   saisineDeLautoriteSignataire: 'sas',
@@ -134,21 +109,13 @@ export const ETAPES_TYPES = {
   saisineDuConseilDEtat: 'spe',
   saisineDeLaCommissionDepartementaleDesMines_CDM_: 'spo',
   saisineDuPrefet: 'spp',
-  saisineDesServices: 'ssr',
   validationDuPaiementDesFraisDeDossierComplementaires: 'vfc',
   validationDuPaiementDesFraisDeDossier: 'vfd',
   abandonDeLaDemande: 'wab',
-  avisDeDirectionRegionaleDesAffairesCulturellesDRAC: 'wac',
-  avisDeLaDirectionDepartementaleDesTerritoiresEtDeLaMerDDT_M_: 'wad',
   avisDeLautoriteEnvironnementale: 'wae',
-  avisDesAutresInstances: 'wai',
-  avisDunServiceAdministratifLocal_wal: 'wal',
-  avisDeLautoriteMilitaire_wam: 'wam',
   arreteDouvertureDesTravauxMiniers: 'wao',
   avisDuPrefetMaritime_wap: 'wap',
   avisDeReception: 'war',
-  avisDeLagenceRegionaleDeSanteARS: 'was',
-  avisDuConseilDepartementalDeLenvironnementEtDesRisquesSanitairesEtTechnologiques_Coderst__wat: 'wat',
   avisDuDemandeurSurLesPrescriptionsProposees: 'wau',
   clotureDeLenquetePublique_wce: 'wce',
   receptionDeComplements_wco: 'wco',
@@ -157,7 +124,6 @@ export const ETAPES_TYPES = {
   depotDeLaDemande_wdd: 'wdd',
   demandeDeComplements_DADT_: 'wde',
   decisionDeLadministration_wdm: 'wdm',
-  avisDeLaDDT_M_: 'wdt',
   demandeDautorisationDouvertureDeTravauxMiniers_AOTM_: 'wfa',
   declarationDarretDefinitifDeTravaux_DADT_: 'wfd',
   declarationDouvertureDeTravauxMiniers_DOTM_: 'wfo',
@@ -178,8 +144,8 @@ export const ETAPES_TYPES = {
   avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement_wrl: 'wrl',
   recolement: 'wrt',
   saisineDeLautoriteEnvironnementale: 'wse',
-  saisineDesServicesDeLEtat: 'wss',
   transmissionDuProjetDePrescriptionsAuDemandeur: 'wtp',
+  avisDesServicesEtCommissionsConsultatives: 'asc',
 } as const satisfies Record<string, EtapeTypeId>
 
 export const etapeTypeIdValidator = z.enum(IDS)
@@ -326,16 +292,6 @@ export const EtapesTypes = {
     public_lecture: false,
     entreprises_lecture: true,
   },
-  mia: {
-    id: 'mia',
-    nom: "demande d'informations (avis de l'Office national des forêts)",
-    description: 'après une aof',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: true,
-  },
   rim: {
     id: 'rim',
     nom: "réception d'information (recevabilité de la demande)",
@@ -346,16 +302,6 @@ export const EtapesTypes = {
     public_lecture: false,
     entreprises_lecture: true,
   },
-  mio: {
-    id: 'mio',
-    nom: "demande d'informations (expertise de l'Office national des forêts)",
-    description: 'après une eof',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: true,
-  },
   dec: {
     id: 'dec',
     nom: 'déclaration',
@@ -416,16 +362,6 @@ export const EtapesTypes = {
     public_lecture: true,
     entreprises_lecture: true,
   },
-  auc: {
-    id: 'auc',
-    nom: 'avis DGTM service aménagement, urbanisme, construction, logement (AUCL)',
-    description: 'Avis de l’AUCL sur la notice d’impact pour les titres miniers et les autorisations d’exploitation. ',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
   scg: {
     id: 'scg',
     nom: "saisine du conseil général de l'économie (CGE)",
@@ -437,26 +373,6 @@ export const EtapesTypes = {
     public_lecture: false,
     entreprises_lecture: false,
   },
-  aac: {
-    id: 'aac',
-    nom: 'avis de direction régionale des affaires culturelles',
-    description: 'Avis sur la situation archéologique du site en question.',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
-  afp: {
-    id: 'afp',
-    nom: 'avis de la direction régionale des finances publiques',
-    description: 'Avis délivré sur la régularité fiscale de l’entreprise.',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
   aep: {
     id: 'aep',
     nom: "avis d'un président d'EPCI",
@@ -477,26 +393,6 @@ export const EtapesTypes = {
     public_lecture: false,
     entreprises_lecture: true,
   },
-  ria: {
-    id: 'ria',
-    nom: "réception d'information (avis de l'Office national des forêts)",
-    description: 'après une aof',
-    fondamentale: true,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: true,
-  },
-  aim: {
-    id: 'aim',
-    nom: "avis de l'Ifremer",
-    description: 'Avis de l’institut français de recherche pour l’exploitation en mer (IFREMER) dans le cadre d’autorisation en mer.',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
   epc: {
     id: 'epc',
     nom: "clôture de l'enquête publique",
@@ -507,16 +403,6 @@ export const EtapesTypes = {
     public_lecture: true,
     entreprises_lecture: true,
   },
-  aop: {
-    id: 'aop',
-    nom: "avis de l'Institut national de l'origine et de la qualité",
-    description: '',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
   sas: {
     id: 'sas',
     nom: "saisine de l'autorité signataire",
@@ -537,46 +423,6 @@ export const EtapesTypes = {
     public_lecture: true,
     entreprises_lecture: true,
   },
-  ari: {
-    id: 'ari',
-    nom: 'avis de la réunion interservice',
-    description: '',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
-  ars: {
-    id: 'ars',
-    nom: "avis de l'agence régionale de santé",
-    description: "Avis concernant leur respect de la réglementation sanitaire dans le cadre de l'instruction d'un titre minier ou d'une demande relative à la police des mines.",
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
-  aaf: {
-    id: 'aaf',
-    nom: "avis de la direction d'alimentation de l'agriculture et de la forêt",
-    description: 'Avis pour un titre minier.',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
-  rio: {
-    id: 'rio',
-    nom: "réception d'information (expertise de l'Office national des forêts)",
-    description: 'après une eof',
-    fondamentale: true,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: true,
-  },
   wda: {
     id: 'wda',
     nom: 'Donné acte de la déclaration (DOTM)',
@@ -638,16 +484,6 @@ export const EtapesTypes = {
     public_lecture: true,
     entreprises_lecture: true,
   },
-  agn: {
-    id: 'agn',
-    nom: 'avis de la gendarmerie nationale',
-    description: "Avis sur l'instruction d'un titre minier  ou d'une demande relative à la police des mines ",
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
   apo: {
     id: 'apo',
     nom: 'avis de la commission départementale des mines (CDM)',
@@ -678,36 +514,6 @@ export const EtapesTypes = {
     public_lecture: false,
     entreprises_lecture: false,
   },
-  aof: {
-    id: 'aof',
-    nom: "avis de l'Office national des forêts",
-    description: 'Avis délivré par l’ONF dans le cadre de l’instruction d’un titre minier.\n',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
-  cps: {
-    id: 'cps',
-    nom: "confirmation de l'accord du propriétaire du sol",
-    description: '',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: true,
-  },
-  apm: {
-    id: 'apm',
-    nom: "avis de l'autorité militaire",
-    description: "Avis de l’autorité militaire, délivré dans le cadre de l’instruction d’un titre minier ou d'une demande relative à la police des mines.",
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
   sca: {
     id: 'sca',
     nom: 'saisine de la commission des autorisations de recherches minières (CARM)',
@@ -718,26 +524,6 @@ export const EtapesTypes = {
     public_lecture: true,
     entreprises_lecture: true,
   },
-  apl: {
-    id: 'apl',
-    nom: "avis d'un service administratif local",
-    description: '',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
-  apn: {
-    id: 'apn',
-    nom: 'avis du parc national',
-    description: "Avis du parc national dans le cadre de l’instruction d’un titre ou d'une demande relative à la police des mines.",
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
   meo: {
     id: 'meo',
     nom: "prise en charge par l'Office national des forêts",
@@ -768,16 +554,6 @@ export const EtapesTypes = {
     public_lecture: false,
     entreprises_lecture: true,
   },
-  pnr: {
-    id: 'pnr',
-    nom: 'avis du parc naturel régional',
-    description: "Avis du parc naturel régional dans le cadre de l’instruction d’un titre ou d'une demande relative à la police des mines.",
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
   apw: {
     id: 'apw',
     nom: 'avis du préfet maritime',
@@ -949,16 +725,6 @@ export const EtapesTypes = {
     public_lecture: true,
     entreprises_lecture: true,
   },
-  acd: {
-    id: 'acd',
-    nom: "avis du conseil départemental de l'environnement et des risques sanitaires et technologiques (Coderst)",
-    description: '',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: true,
-    entreprises_lecture: true,
-  },
   wdm: {
     id: 'wdm',
     nom: "décision de l'administration",
@@ -989,17 +755,6 @@ export const EtapesTypes = {
     public_lecture: false,
     entreprises_lecture: false,
   },
-  ssr: {
-    id: 'ssr',
-    nom: 'saisine des services',
-    description:
-      'Demande de consultation dans le cadre d’un titre minier des chefs de service civils et de l’autorité militaire. Les intéressés ont un mois pour répondre. Au-delà de ce délai,  le silence vaut accord.\n',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
   abd: {
     id: 'abd',
     nom: 'abrogation de la décision',
@@ -1148,56 +903,6 @@ export const EtapesTypes = {
     public_lecture: false,
     entreprises_lecture: false,
   },
-  ami: {
-    id: 'ami',
-    nom: 'avis du parc naturel marin',
-    description: 'Avis du parc naturel marin dans le cadre d’autorisation en mer.',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
-  abs: {
-    id: 'abs',
-    nom: 'avis DGTM service milieux naturels, biodiversité, sites et paysages (MNBST)',
-    description: "Avis du MNBST sur la notice d’impact pour les titres miniers et les autorisations d'exploitation.",
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
-  ass: {
-    id: 'ass',
-    nom: 'avis de la caisse générale de sécurité sociale',
-    description: "Avis émis par le service de la sécurité sociale sur la situation sociale de l'entreprise.",
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
-  aec: {
-    id: 'aec',
-    nom: "avis de la direction des entreprises, de la concurrence, de la consommation, du travail et de l'emploi",
-    description: 'Avis facultatif sur la situation économique de l’entreprise.',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
-  api: {
-    id: 'api',
-    nom: "avis de l'état major orpaillage et pêche illicite (EMOPI)",
-    description: 'Avis pour tous les titres miniers en Guyane.',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
   cim: {
     id: 'cim',
     nom: 'concertation interministérielle',
@@ -1433,16 +1138,6 @@ export const EtapesTypes = {
     public_lecture: false,
     entreprises_lecture: true,
   },
-  eof: {
-    id: 'eof',
-    nom: "expertise de l'Office national des forêts",
-    description: 'Expertise effectuée par l’ONF dans le cadre d’une demande d’autorisation de recherches minières (ARM).',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
   acg: {
     id: 'acg',
     nom: "avis du conseil général de l'économie (CGE)",
@@ -1537,16 +1232,6 @@ export const EtapesTypes = {
     public_lecture: false,
     entreprises_lecture: false,
   },
-  wdt: {
-    id: 'wdt',
-    nom: 'avis de la DDT(M)',
-    description: 'avis de la Direction Départementale des Territoires et de la Mer',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
   wfa: {
     id: 'wfa',
     nom: "Demande d'autorisation d'ouverture de travaux miniers (AOTM)",
@@ -1647,66 +1332,6 @@ export const EtapesTypes = {
     public_lecture: false,
     entreprises_lecture: false,
   },
-  wss: {
-    id: 'wss',
-    nom: "saisine des services de l'Etat",
-    description: '',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
-  wal: {
-    id: 'wal',
-    nom: "avis d'un service administratif local",
-    description: '',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
-  wad: {
-    id: 'wad',
-    nom: 'avis de la direction départementale des territoires et de la mer - DDT(M)',
-    description: '',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
-  wam: {
-    id: 'wam',
-    nom: "avis de l'autorité militaire",
-    description: '',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
-  was: {
-    id: 'was',
-    nom: "avis de l'agence régionale de santé - ARS",
-    description: '',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
-  wac: {
-    id: 'wac',
-    nom: 'avis de direction régionale des affaires culturelles - DRAC',
-    description: '',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
   wap: {
     id: 'wap',
     nom: 'avis du préfet maritime',
@@ -1717,16 +1342,6 @@ export const EtapesTypes = {
     public_lecture: false,
     entreprises_lecture: false,
   },
-  wai: {
-    id: 'wai',
-    nom: 'avis des autres instances',
-    description: '',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
   wps: {
     id: 'wps',
     nom: 'Arrêté préfectoral de sursis à statuer',
@@ -1787,16 +1402,6 @@ export const EtapesTypes = {
     public_lecture: false,
     entreprises_lecture: false,
   },
-  wat: {
-    id: 'wat',
-    nom: "avis du conseil départemental de l'environnement et des risques sanitaires et technologiques (Coderst)",
-    description: '',
-    fondamentale: false,
-    unique: false,
-    date_fin: null,
-    public_lecture: false,
-    entreprises_lecture: false,
-  },
   wau: {
     id: 'wau',
     nom: 'Avis du demandeur sur les prescriptions proposées',
@@ -1867,6 +1472,16 @@ export const EtapesTypes = {
     public_lecture: true,
     entreprises_lecture: true,
   },
+  asc: {
+    id: 'asc',
+    nom: 'Avis des services et commissions consultatives',
+    description: '',
+    fondamentale: false,
+    unique: false,
+    date_fin: null,
+    public_lecture: false,
+    entreprises_lecture: false,
+  },
 } as const satisfies { [key in EtapeTypeId]: EtapeType<key> }
 
 type IsFondamentale<T> = T extends EtapeTypeId ? ((typeof EtapesTypes)[T] extends { fondamentale: true } ? T : never) : never
@@ -1899,7 +1514,7 @@ const ETAPES_DECISIONS_IDS = [
   ETAPES_TYPES.avenantALautorisationDeRechercheMiniere,
 ] as const satisfies Readonly<EtapeTypeId[]>
 
-const ETAPES_BROUILLONS_IDS = [ETAPES_TYPES.demande] as const satisfies Readonly<EtapeTypeId[]>
+const ETAPES_BROUILLONS_IDS = [ETAPES_TYPES.demande, ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives] as const satisfies Readonly<EtapeTypeId[]>
 
-export const isEtapeDecision = (etapeTypeId: EtapeTypeId): boolean => ETAPES_DECISIONS_IDS.includes(etapeTypeId)
-export const canBeBrouillon = (etapeTypeId: EtapeTypeId): boolean => ETAPES_BROUILLONS_IDS.includes(etapeTypeId)
+export const isEtapeDecision = (etapeTypeId: EtapeTypeId): EtapeBrouillon => ETAPES_DECISIONS_IDS.includes(etapeTypeId) as EtapeBrouillon
+export const canBeBrouillon = (etapeTypeId: EtapeTypeId): EtapeBrouillon => ETAPES_BROUILLONS_IDS.includes(etapeTypeId) as EtapeBrouillon
diff --git a/packages/common/src/static/etapesTypesEtapesStatuts.ts b/packages/common/src/static/etapesTypesEtapesStatuts.ts
index f3bf4a5ca..6e0a17f33 100644
--- a/packages/common/src/static/etapesTypesEtapesStatuts.ts
+++ b/packages/common/src/static/etapesTypesEtapesStatuts.ts
@@ -7,36 +7,18 @@ export interface EtapeTypeEtapeStatut<T extends EtapeTypeId, R extends EtapeStat
 }
 
 export const EtapesTypesEtapesStatuts = {
-  avisDeDirectionRegionaleDesAffairesCulturelles: {
-    FAVORABLE: { etapeTypeId: 'aac', etapeStatutId: 'fav' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'aac', etapeStatutId: 'fre' },
-    DEFAVORABLE: { etapeTypeId: 'aac', etapeStatutId: 'def' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'aac', etapeStatutId: 'dre' },
-  },
-  avisDeLaDirectionDalimentationDeLagricultureEtDeLaForet: {
-    FAVORABLE: { etapeTypeId: 'aaf', etapeStatutId: 'fav' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'aaf', etapeStatutId: 'fre' },
-    DEFAVORABLE: { etapeTypeId: 'aaf', etapeStatutId: 'def' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'aaf', etapeStatutId: 'dre' },
+  avisDesServicesEtCommissionsConsultatives: {
+    FAIT: { etapeTypeId: 'asc', etapeStatutId: 'fai' },
   },
+
   abrogationDeLaDecision: { FAIT: { etapeTypeId: 'abd', etapeStatutId: 'fai' } },
-  avisDGTMServiceMilieuxNaturelsBiodiversiteSitesEtPaysages_MNBST_: {
-    FAVORABLE: { etapeTypeId: 'abs', etapeStatutId: 'fav' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'abs', etapeStatutId: 'fre' },
-    DEFAVORABLE: { etapeTypeId: 'abs', etapeStatutId: 'def' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'abs', etapeStatutId: 'dre' },
-  },
+
   avisDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_: {
     FAVORABLE: { etapeTypeId: 'aca', etapeStatutId: 'fav' },
     DEFAVORABLE: { etapeTypeId: 'aca', etapeStatutId: 'def' },
     AJOURNE: { etapeTypeId: 'aca', etapeStatutId: 'ajo' },
   },
-  avisDuConseilDepartementalDeLenvironnementEtDesRisquesSanitairesEtTechnologiques_Coderst_: {
-    FAVORABLE: { etapeTypeId: 'acd', etapeStatutId: 'fav' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'acd', etapeStatutId: 'fre' },
-    DEFAVORABLE: { etapeTypeId: 'acd', etapeStatutId: 'def' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'acd', etapeStatutId: 'dre' },
-  },
+
   avisDuConseilGeneralDeLeconomie_CGE_: {
     FAVORABLE: { etapeTypeId: 'acg', etapeStatutId: 'fav' },
     DEFAVORABLE: { etapeTypeId: 'acg', etapeStatutId: 'def' },
@@ -48,48 +30,21 @@ export const EtapesTypesEtapesStatuts = {
     DEFAVORABLE: { etapeTypeId: 'acl', etapeStatutId: 'def' },
   },
   avenantALautorisationDeRechercheMiniere: { FAIT: { etapeTypeId: 'aco', etapeStatutId: 'fai' } },
-  avisDeLaDirectionDesEntreprisesDeLaConcurrenceDeLaConsommationDuTravailEtDeLemploi: {
-    FAVORABLE: { etapeTypeId: 'aec', etapeStatutId: 'fav' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'aec', etapeStatutId: 'fre' },
-    DEFAVORABLE: { etapeTypeId: 'aec', etapeStatutId: 'def' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'aec', etapeStatutId: 'dre' },
-  },
+
   avisDunPresidentDEPCI: {
     FAVORABLE: { etapeTypeId: 'aep', etapeStatutId: 'fav' },
     DEFAVORABLE: { etapeTypeId: 'aep', etapeStatutId: 'def' },
     FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'aep', etapeStatutId: 'fre' },
     DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'aep', etapeStatutId: 'dre' },
   },
-  avisDeLaDirectionRegionaleDesFinancesPubliques: {
-    FAVORABLE: { etapeTypeId: 'afp', etapeStatutId: 'fav' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'afp', etapeStatutId: 'fre' },
-    DEFAVORABLE: { etapeTypeId: 'afp', etapeStatutId: 'def' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'afp', etapeStatutId: 'dre' },
-  },
-  avisDeLaGendarmerieNationale: {
-    FAVORABLE: { etapeTypeId: 'agn', etapeStatutId: 'fav' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'agn', etapeStatutId: 'fre' },
-    DEFAVORABLE: { etapeTypeId: 'agn', etapeStatutId: 'def' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'agn', etapeStatutId: 'dre' },
-  },
-  avisDeLIfremer: {
-    FAVORABLE: { etapeTypeId: 'aim', etapeStatutId: 'fav' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'aim', etapeStatutId: 'fre' },
-    DEFAVORABLE: { etapeTypeId: 'aim', etapeStatutId: 'def' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'aim', etapeStatutId: 'dre' },
-  },
+
   avisDunMaire: {
     FAVORABLE: { etapeTypeId: 'ama', etapeStatutId: 'fav' },
     DEFAVORABLE: { etapeTypeId: 'ama', etapeStatutId: 'def' },
     FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'ama', etapeStatutId: 'fre' },
     DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'ama', etapeStatutId: 'dre' },
   },
-  avisDuParcNaturelMarin: {
-    FAVORABLE: { etapeTypeId: 'ami', etapeStatutId: 'fav' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'ami', etapeStatutId: 'fre' },
-    DEFAVORABLE: { etapeTypeId: 'ami', etapeStatutId: 'def' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'ami', etapeStatutId: 'dre' },
-  },
+
   decisionDuJugeAdministratif: {
     FAIT: { etapeTypeId: 'and', etapeStatutId: 'fai' },
     ACCEPTE: { etapeTypeId: 'and', etapeStatutId: 'acc' },
@@ -107,16 +62,7 @@ export const EtapesTypesEtapesStatuts = {
     TERMINE: { etapeTypeId: 'anf', etapeStatutId: 'ter' },
     FAIT: { etapeTypeId: 'anf', etapeStatutId: 'fai' },
   },
-  avisDeLOfficeNationalDesForets: {
-    FAVORABLE: { etapeTypeId: 'aof', etapeStatutId: 'fav' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'aof', etapeStatutId: 'fre' },
-    DEFAVORABLE: { etapeTypeId: 'aof', etapeStatutId: 'def' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'aof', etapeStatutId: 'dre' },
-  },
-  avisDeLInstitutNationalDeLorigineEtDeLaQualite: {
-    FAVORABLE: { etapeTypeId: 'aop', etapeStatutId: 'fav' },
-    DEFAVORABLE: { etapeTypeId: 'aop', etapeStatutId: 'def' },
-  },
+
   avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement: {
     FAVORABLE: { etapeTypeId: 'apd', etapeStatutId: 'fav' },
     DEFAVORABLE: { etapeTypeId: 'apd', etapeStatutId: 'def' },
@@ -129,28 +75,7 @@ export const EtapesTypesEtapesStatuts = {
     FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'ape', etapeStatutId: 'fre' },
     DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'ape', etapeStatutId: 'dre' },
   },
-  avisDeLetatMajorOrpaillageEtPecheIllicite_EMOPI_: {
-    FAVORABLE: { etapeTypeId: 'api', etapeStatutId: 'fav' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'api', etapeStatutId: 'fre' },
-    DEFAVORABLE: { etapeTypeId: 'api', etapeStatutId: 'def' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'api', etapeStatutId: 'dre' },
-  },
-  avisDunServiceAdministratifLocal: {
-    FAVORABLE: { etapeTypeId: 'apl', etapeStatutId: 'fav' },
-    DEFAVORABLE: { etapeTypeId: 'apl', etapeStatutId: 'def' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'apl', etapeStatutId: 'fre' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'apl', etapeStatutId: 'dre' },
-  },
-  avisDeLautoriteMilitaire: {
-    FAVORABLE: { etapeTypeId: 'apm', etapeStatutId: 'fav' },
-    DEFAVORABLE: { etapeTypeId: 'apm', etapeStatutId: 'def' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'apm', etapeStatutId: 'fre' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'apm', etapeStatutId: 'dre' },
-  },
-  avisDuParcNational: {
-    FAVORABLE: { etapeTypeId: 'apn', etapeStatutId: 'fav' },
-    DEFAVORABLE: { etapeTypeId: 'apn', etapeStatutId: 'def' },
-  },
+
   avisDeLaCommissionDepartementaleDesMines_CDM_: {
     AJOURNE: { etapeTypeId: 'apo', etapeStatutId: 'ajo' },
     FAVORABLE: { etapeTypeId: 'apo', etapeStatutId: 'fav' },
@@ -175,40 +100,17 @@ export const EtapesTypesEtapesStatuts = {
     FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'apw', etapeStatutId: 'fre' },
     DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'apw', etapeStatutId: 'dre' },
   },
-  avisDeLaReunionInterservice: {
-    FAVORABLE: { etapeTypeId: 'ari', etapeStatutId: 'fav' },
-    DEFAVORABLE: { etapeTypeId: 'ari', etapeStatutId: 'def' },
-  },
-  avisDeLagenceRegionaleDeSante: {
-    FAVORABLE: { etapeTypeId: 'ars', etapeStatutId: 'fav' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'ars', etapeStatutId: 'fre' },
-    DEFAVORABLE: { etapeTypeId: 'ars', etapeStatutId: 'def' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'ars', etapeStatutId: 'dre' },
-  },
+
   decisionDuProprietaireDuSol: {
     FAVORABLE: { etapeTypeId: 'asl', etapeStatutId: 'fav' },
     FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'asl', etapeStatutId: 'fre' },
     DEFAVORABLE: { etapeTypeId: 'asl', etapeStatutId: 'def' },
   },
-  avisDeLaCaisseGeneraleDeSecuriteSociale: {
-    FAVORABLE: { etapeTypeId: 'ass', etapeStatutId: 'fav' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'ass', etapeStatutId: 'fre' },
-    DEFAVORABLE: { etapeTypeId: 'ass', etapeStatutId: 'def' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'ass', etapeStatutId: 'dre' },
-  },
-  avisDGTMServiceAmenagementUrbanismeConstructionLogement_AUCL_: {
-    FAVORABLE: { etapeTypeId: 'auc', etapeStatutId: 'fav' },
-    FAVORABLE_AVEC_RESERVE: { etapeTypeId: 'auc', etapeStatutId: 'fre' },
-    DEFAVORABLE: { etapeTypeId: 'auc', etapeStatutId: 'def' },
-    DEFAVORABLE_AVEC_RESERVES: { etapeTypeId: 'auc', etapeStatutId: 'dre' },
-  },
+
   consultationDesAdministrationsCentrales: { FAIT: { etapeTypeId: 'cac', etapeStatutId: 'fai' } },
   concertationInterministerielle: { FAIT: { etapeTypeId: 'cim', etapeStatutId: 'fai' } },
   saisineDuConseilDepartementalDeLenvironnementEtDesRisquesSanitairesEtTechnologiques_Coderst_: { FAIT: { etapeTypeId: 'cod', etapeStatutId: 'fai' } },
-  confirmationDeLaccordDuProprietaireDuSol: {
-    FAVORABLE: { etapeTypeId: 'cps', etapeStatutId: 'fav' },
-    DEFAVORABLE: { etapeTypeId: 'cps', etapeStatutId: 'def' },
-  },
+
   classementSansSuite: { FAIT: { etapeTypeId: 'css', etapeStatutId: 'fai' } },
   decisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_: {
     EXEMPTE: { etapeTypeId: 'dae', etapeStatutId: 'exe' },
@@ -242,7 +144,6 @@ export const EtapesTypesEtapesStatuts = {
     FAVORABLE: { etapeTypeId: 'edm', etapeStatutId: 'fav' },
     DEFAVORABLE: { etapeTypeId: 'edm', etapeStatutId: 'def' },
   },
-  expertiseDeLOfficeNationalDesForets: { FAIT: { etapeTypeId: 'eof', etapeStatutId: 'fai' } },
   clotureDeLenquetePublique: { TERMINE: { etapeTypeId: 'epc', etapeStatutId: 'ter' } },
   ouvertureDeLenquetePublique: {
     PROGRAMME: { etapeTypeId: 'epu', etapeStatutId: 'pro' },
@@ -272,11 +173,9 @@ export const EtapesTypesEtapesStatuts = {
   demande: {
     FAIT: { etapeTypeId: 'mfr', etapeStatutId: 'fai' },
   },
-  demandeDinformations_AvisDeLOfficeNationalDesForets_: { FAIT: { etapeTypeId: 'mia', etapeStatutId: 'fai' } },
   demandeDinformations_AvisDuDREALDEALOuDGTM_: { FAIT: { etapeTypeId: 'mie', etapeStatutId: 'fai' } },
   demandeDinformations: { FAIT: { etapeTypeId: 'mif', etapeStatutId: 'fai' } },
   demandeDinformations_RecevabiliteDeLaDemande_: { FAIT: { etapeTypeId: 'mim', etapeStatutId: 'fai' } },
-  demandeDinformations_ExpertiseDeLOfficeNationalDesForets_: { FAIT: { etapeTypeId: 'mio', etapeStatutId: 'fai' } },
   notificationAuDemandeur_AjournementDeLaCARM_: { FAIT: { etapeTypeId: 'mna', etapeStatutId: 'fai' } },
   notificationAuDemandeur_AvisFavorableDeLaCARM_: { FAIT: { etapeTypeId: 'mnb', etapeStatutId: 'fai' } },
   notificationAuDemandeur_ClassementSansSuite_: { FAIT: { etapeTypeId: 'mnc', etapeStatutId: 'fai' } },
@@ -292,10 +191,6 @@ export const EtapesTypesEtapesStatuts = {
   notificationAuPrefet: { FAIT: { etapeTypeId: 'npp', etapeStatutId: 'fai' } },
   paiementDesFraisDeDossierComplementaires: { FAIT: { etapeTypeId: 'pfc', etapeStatutId: 'fai' } },
   paiementDesFraisDeDossier: { FAIT: { etapeTypeId: 'pfd', etapeStatutId: 'fai' } },
-  avisDuParcNaturelRegional: {
-    FAVORABLE: { etapeTypeId: 'pnr', etapeStatutId: 'fav' },
-    DEFAVORABLE: { etapeTypeId: 'pnr', etapeStatutId: 'def' },
-  },
   clotureDeLaParticipationDuPublic: { TERMINE: { etapeTypeId: 'ppc', etapeStatutId: 'ter' } },
   ouvertureDeLaParticipationDuPublic: {
     PROGRAMME: { etapeTypeId: 'ppu', etapeStatutId: 'pro' },
@@ -316,11 +211,9 @@ export const EtapesTypesEtapesStatuts = {
     FAVORABLE: { etapeTypeId: 'rde', etapeStatutId: 'fav' },
     DEFAVORABLE: { etapeTypeId: 'rde', etapeStatutId: 'def' },
   },
-  receptionDinformation_AvisDeLOfficeNationalDesForets_: { FAIT: { etapeTypeId: 'ria', etapeStatutId: 'fai' } },
   receptionDinformation_AvisDuDREALDEALOuDGTM_: { FAIT: { etapeTypeId: 'rie', etapeStatutId: 'fai' } },
   receptionDinformation: { FAIT: { etapeTypeId: 'rif', etapeStatutId: 'fai' } },
   receptionDinformation_RecevabiliteDeLaDemande_: { FAIT: { etapeTypeId: 'rim', etapeStatutId: 'fai' } },
-  receptionDinformation_ExpertiseDeLOfficeNationalDesForets_: { FAIT: { etapeTypeId: 'rio', etapeStatutId: 'fai' } },
   rapportDuConseilDEtat: {
     FAVORABLE: { etapeTypeId: 'rpe', etapeStatutId: 'fav' },
     DEFAVORABLE: { etapeTypeId: 'rpe', etapeStatutId: 'def' },
@@ -334,48 +227,19 @@ export const EtapesTypesEtapesStatuts = {
   saisineDuConseilDEtat: { FAIT: { etapeTypeId: 'spe', etapeStatutId: 'fai' } },
   saisineDeLaCommissionDepartementaleDesMines_CDM_: { FAIT: { etapeTypeId: 'spo', etapeStatutId: 'fai' } },
   saisineDuPrefet: { FAIT: { etapeTypeId: 'spp', etapeStatutId: 'fai' } },
-  saisineDesServices: { FAIT: { etapeTypeId: 'ssr', etapeStatutId: 'fai' } },
   validationDuPaiementDesFraisDeDossierComplementaires: { FAIT: { etapeTypeId: 'vfc', etapeStatutId: 'fai' } },
   validationDuPaiementDesFraisDeDossier: { FAIT: { etapeTypeId: 'vfd', etapeStatutId: 'fai' } },
   abandonDeLaDemande: { FAIT: { etapeTypeId: 'wab', etapeStatutId: 'fai' } },
-  avisDeDirectionRegionaleDesAffairesCulturellesDRAC: {
-    FAVORABLE: { etapeTypeId: 'wac', etapeStatutId: 'fav' },
-    DEFAVORABLE: { etapeTypeId: 'wac', etapeStatutId: 'def' },
-  },
-  avisDeLaDirectionDepartementaleDesTerritoiresEtDeLaMerDDT_M_: {
-    FAVORABLE: { etapeTypeId: 'wad', etapeStatutId: 'fav' },
-    DEFAVORABLE: { etapeTypeId: 'wad', etapeStatutId: 'def' },
-  },
   avisDeLautoriteEnvironnementale: {
     FAVORABLE: { etapeTypeId: 'wae', etapeStatutId: 'fav' },
     DEFAVORABLE: { etapeTypeId: 'wae', etapeStatutId: 'def' },
   },
-  avisDesAutresInstances: {
-    FAVORABLE: { etapeTypeId: 'wai', etapeStatutId: 'fav' },
-    DEFAVORABLE: { etapeTypeId: 'wai', etapeStatutId: 'def' },
-  },
-  avisDunServiceAdministratifLocal_wal: {
-    FAVORABLE: { etapeTypeId: 'wal', etapeStatutId: 'fav' },
-    DEFAVORABLE: { etapeTypeId: 'wal', etapeStatutId: 'def' },
-  },
-  avisDeLautoriteMilitaire_wam: {
-    FAVORABLE: { etapeTypeId: 'wam', etapeStatutId: 'fav' },
-    DEFAVORABLE: { etapeTypeId: 'wam', etapeStatutId: 'def' },
-  },
   arreteDouvertureDesTravauxMiniers: { FAIT: { etapeTypeId: 'wao', etapeStatutId: 'fai' } },
   avisDuPrefetMaritime_wap: {
     FAVORABLE: { etapeTypeId: 'wap', etapeStatutId: 'fav' },
     DEFAVORABLE: { etapeTypeId: 'wap', etapeStatutId: 'def' },
   },
   avisDeReception: { FAIT: { etapeTypeId: 'war', etapeStatutId: 'fai' } },
-  avisDeLagenceRegionaleDeSanteARS: {
-    FAVORABLE: { etapeTypeId: 'was', etapeStatutId: 'fav' },
-    DEFAVORABLE: { etapeTypeId: 'was', etapeStatutId: 'def' },
-  },
-  avisDuConseilDepartementalDeLenvironnementEtDesRisquesSanitairesEtTechnologiques_Coderst__wat: {
-    FAVORABLE: { etapeTypeId: 'wat', etapeStatutId: 'fav' },
-    DEFAVORABLE: { etapeTypeId: 'wat', etapeStatutId: 'def' },
-  },
   avisDuDemandeurSurLesPrescriptionsProposees: {
     FAVORABLE: { etapeTypeId: 'wau', etapeStatutId: 'fav' },
     DEFAVORABLE: { etapeTypeId: 'wau', etapeStatutId: 'def' },
@@ -424,10 +288,8 @@ export const EtapesTypesEtapesStatuts = {
     DEFAVORABLE: { etapeTypeId: 'wrt', etapeStatutId: 'def' },
   },
   saisineDeLautoriteEnvironnementale: { FAIT: { etapeTypeId: 'wse', etapeStatutId: 'fai' } },
-  saisineDesServicesDeLEtat: { FAIT: { etapeTypeId: 'wss', etapeStatutId: 'fai' } },
   transmissionDuProjetDePrescriptionsAuDemandeur: { FAIT: { etapeTypeId: 'wtp', etapeStatutId: 'fai' } },
   receptionDeComplements_wco: { FAIT: { etapeTypeId: 'wco', etapeStatutId: 'fai' } },
-  avisDeLaDDT_M_: { FAIT: { etapeTypeId: 'wdt', etapeStatutId: 'fai' } },
   consultationCLEDuSAGE: {
     FAVORABLE: { etapeTypeId: 'ccs', etapeStatutId: 'fav' },
     DEFAVORABLE: { etapeTypeId: 'ccs', etapeStatutId: 'def' },
diff --git a/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/documents.ts b/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/documents.ts
index 4da6add9b..de5d4fa28 100644
--- a/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/documents.ts
+++ b/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/documents.ts
@@ -7,11 +7,6 @@ import { TDEType } from './index.js'
 
 const EtapesTypesDocumentsTypes = {
   [ETAPES_TYPES.avisDunPresidentDEPCI]: [DOCUMENTS_TYPES_IDS.avis],
-  [ETAPES_TYPES.avisDuParcNaturelMarin]: [DOCUMENTS_TYPES_IDS.avis],
-  [ETAPES_TYPES.avisDGTMServiceMilieuxNaturelsBiodiversiteSitesEtPaysages_MNBST_]: [DOCUMENTS_TYPES_IDS.avisDesServicesCivilsEtMilitaires],
-  [ETAPES_TYPES.avisDeLaDirectionDesEntreprisesDeLaConcurrenceDeLaConsommationDuTravailEtDeLemploi]: [DOCUMENTS_TYPES_IDS.avisDesServicesCivilsEtMilitaires],
-  [ETAPES_TYPES.avisDeDirectionRegionaleDesAffairesCulturelles]: [DOCUMENTS_TYPES_IDS.avisDesServicesCivilsEtMilitaires, DOCUMENTS_TYPES_IDS.avis],
-  [ETAPES_TYPES.avisDeLaDirectionDalimentationDeLagricultureEtDeLaForet]: [DOCUMENTS_TYPES_IDS.avisDesServicesCivilsEtMilitaires],
   [ETAPES_TYPES.abrogationDeLaDecision]: [DOCUMENTS_TYPES_IDS.arrete],
   [ETAPES_TYPES.avisDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_]: [DOCUMENTS_TYPES_IDS.avis, DOCUMENTS_TYPES_IDS.ficheDePresentation, DOCUMENTS_TYPES_IDS.lettre],
   [ETAPES_TYPES.avisDuConseilGeneralDeLeconomie_CGE_]: [
@@ -28,36 +23,20 @@ const EtapesTypesDocumentsTypes = {
     DOCUMENTS_TYPES_IDS.decision,
     DOCUMENTS_TYPES_IDS.notificationDeDecision,
   ],
-  [ETAPES_TYPES.avisDeLaDirectionRegionaleDesFinancesPubliques]: [DOCUMENTS_TYPES_IDS.avisDesServicesCivilsEtMilitaires, DOCUMENTS_TYPES_IDS.avis],
-  [ETAPES_TYPES.avisDeLaGendarmerieNationale]: [DOCUMENTS_TYPES_IDS.avisDesServicesCivilsEtMilitaires],
-  [ETAPES_TYPES.avisDeLIfremer]: [DOCUMENTS_TYPES_IDS.avis],
   [ETAPES_TYPES.avisDunMaire]: [DOCUMENTS_TYPES_IDS.avis],
   [ETAPES_TYPES.decisionDuJugeAdministratif]: [DOCUMENTS_TYPES_IDS.decision],
   [ETAPES_TYPES.avisDeMiseEnConcurrenceAuJORF]: [DOCUMENTS_TYPES_IDS.avisDeMiseEnConcurrence, DOCUMENTS_TYPES_IDS.avis],
-  [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: [
-    DOCUMENTS_TYPES_IDS.avisDesServicesCivilsEtMilitaires,
-    DOCUMENTS_TYPES_IDS.avis,
-    DOCUMENTS_TYPES_IDS.contrat,
-    DOCUMENTS_TYPES_IDS.lettre,
-    DOCUMENTS_TYPES_IDS.motif,
-  ],
   [ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement]: [
     DOCUMENTS_TYPES_IDS.avisDuDirecteurRegionalChargeDesMines,
     DOCUMENTS_TYPES_IDS.rapportDeLAdministrationCentraleChargeDesMines,
     DOCUMENTS_TYPES_IDS.rapportDeLaDirectionRegionaleChargeeDesMines,
   ],
   [ETAPES_TYPES.avisDuConseilDEtat]: [DOCUMENTS_TYPES_IDS.avis],
-  [ETAPES_TYPES.avisDeLetatMajorOrpaillageEtPecheIllicite_EMOPI_]: [DOCUMENTS_TYPES_IDS.avisDesServicesCivilsEtMilitaires],
-  [ETAPES_TYPES.avisDunServiceAdministratifLocal]: [DOCUMENTS_TYPES_IDS.avisDesServicesCivilsEtMilitaires, DOCUMENTS_TYPES_IDS.avis, DOCUMENTS_TYPES_IDS.lettre],
-  [ETAPES_TYPES.avisDeLautoriteMilitaire]: [DOCUMENTS_TYPES_IDS.avisDesServicesCivilsEtMilitaires, DOCUMENTS_TYPES_IDS.avis],
   [ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_]: [DOCUMENTS_TYPES_IDS.avisDeLaCommissionDepartementaleDesMines, DOCUMENTS_TYPES_IDS.rapportDeLaDirectionRegionaleChargeeDesMines],
   [ETAPES_TYPES.avisDuPrefet]: [DOCUMENTS_TYPES_IDS.avisDuPrefet, DOCUMENTS_TYPES_IDS.lettre, DOCUMENTS_TYPES_IDS.rapportDeLaDirectionRegionaleChargeeDesMines],
   [ETAPES_TYPES.publicationDeLavisDeDecisionImplicite]: [DOCUMENTS_TYPES_IDS.avis, DOCUMENTS_TYPES_IDS.notes],
   [ETAPES_TYPES.avisDuPrefetMaritime]: [DOCUMENTS_TYPES_IDS.avis],
-  [ETAPES_TYPES.avisDeLagenceRegionaleDeSante]: [DOCUMENTS_TYPES_IDS.avisDesServicesCivilsEtMilitaires, DOCUMENTS_TYPES_IDS.avis],
   [ETAPES_TYPES.decisionDuProprietaireDuSol]: [DOCUMENTS_TYPES_IDS.decision, DOCUMENTS_TYPES_IDS.lettre],
-  [ETAPES_TYPES.avisDeLaCaisseGeneraleDeSecuriteSociale]: [DOCUMENTS_TYPES_IDS.avisDesServicesCivilsEtMilitaires],
-  [ETAPES_TYPES.avisDGTMServiceAmenagementUrbanismeConstructionLogement_AUCL_]: [DOCUMENTS_TYPES_IDS.avisDesServicesCivilsEtMilitaires],
   [ETAPES_TYPES.consultationDesAdministrationsCentrales]: [DOCUMENTS_TYPES_IDS.avis, DOCUMENTS_TYPES_IDS.lettreDeSaisineDesServicesDeLAdministrationCentrale],
   [ETAPES_TYPES.classementSansSuite]: [DOCUMENTS_TYPES_IDS.arrete, DOCUMENTS_TYPES_IDS.lettre, DOCUMENTS_TYPES_IDS.notes, DOCUMENTS_TYPES_IDS.rapportDeLaDirectionRegionaleChargeeDesMines],
   [ETAPES_TYPES.decisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet_]: [
@@ -102,7 +81,6 @@ const EtapesTypesDocumentsTypes = {
   [ETAPES_TYPES.publicationDeDecisionAdministrativeAuJORF]: [DOCUMENTS_TYPES_IDS.arrete, DOCUMENTS_TYPES_IDS.publicationAuJorf],
   [ETAPES_TYPES.decisionAdministrative]: [DOCUMENTS_TYPES_IDS.arrete],
   [ETAPES_TYPES.expertiseDGTMServicePreventionDesRisquesEtIndustriesExtractives_DATE_]: [DOCUMENTS_TYPES_IDS.avis, DOCUMENTS_TYPES_IDS.rapportDeLaDirectionRegionaleChargeeDesMines],
-  [ETAPES_TYPES.expertiseDeLOfficeNationalDesForets]: [DOCUMENTS_TYPES_IDS.lettre, DOCUMENTS_TYPES_IDS.motif, DOCUMENTS_TYPES_IDS.notes],
   [ETAPES_TYPES.clotureDeLenquetePublique]: [DOCUMENTS_TYPES_IDS.notes, DOCUMENTS_TYPES_IDS.rapportDuCommissaireEnqueteur],
   [ETAPES_TYPES.ouvertureDeLenquetePublique]: [
     DOCUMENTS_TYPES_IDS.avisDEnquetePublique,
@@ -172,7 +150,6 @@ const EtapesTypesDocumentsTypes = {
   [ETAPES_TYPES.noteInterneSignalee]: [DOCUMENTS_TYPES_IDS.arreteMinisteriel],
   [ETAPES_TYPES.paiementDesFraisDeDossierComplementaires]: [DOCUMENTS_TYPES_IDS.facture],
   [ETAPES_TYPES.paiementDesFraisDeDossier]: [DOCUMENTS_TYPES_IDS.facture, DOCUMENTS_TYPES_IDS.justificatifDePaiement, DOCUMENTS_TYPES_IDS.notes],
-  [ETAPES_TYPES.avisDuParcNaturelRegional]: [DOCUMENTS_TYPES_IDS.avis],
   [ETAPES_TYPES.clotureDeLaParticipationDuPublic]: [DOCUMENTS_TYPES_IDS.notes, DOCUMENTS_TYPES_IDS.rapportDuCommissaireEnqueteur],
   [ETAPES_TYPES.ouvertureDeLaParticipationDuPublic]: [
     DOCUMENTS_TYPES_IDS.complementsAuDossierDeDemande,
@@ -225,21 +202,13 @@ const EtapesTypesDocumentsTypes = {
   [ETAPES_TYPES.signatureDeLautorisationDeRechercheMiniere]: [DOCUMENTS_TYPES_IDS.contrat, DOCUMENTS_TYPES_IDS.convention, DOCUMENTS_TYPES_IDS.lettre],
   [ETAPES_TYPES.saisineDuConseilDEtat]: [DOCUMENTS_TYPES_IDS.lettreDeSaisineDuConseilDEtat],
   [ETAPES_TYPES.saisineDuPrefet]: [DOCUMENTS_TYPES_IDS.lettre, DOCUMENTS_TYPES_IDS.lettreDeSaisineDuPrefet],
-  [ETAPES_TYPES.saisineDesServices]: [DOCUMENTS_TYPES_IDS.avisDesServicesCivilsEtMilitaires, DOCUMENTS_TYPES_IDS.lettreDeSaisineDesServicesCivilsEtMilitaires, DOCUMENTS_TYPES_IDS.lettre],
   [ETAPES_TYPES.validationDuPaiementDesFraisDeDossierComplementaires]: [DOCUMENTS_TYPES_IDS.facture],
   [ETAPES_TYPES.validationDuPaiementDesFraisDeDossier]: [DOCUMENTS_TYPES_IDS.facture, DOCUMENTS_TYPES_IDS.justificatifDePaiement],
   [ETAPES_TYPES.abandonDeLaDemande]: [DOCUMENTS_TYPES_IDS.courrier],
-  [ETAPES_TYPES.avisDeDirectionRegionaleDesAffairesCulturellesDRAC]: [DOCUMENTS_TYPES_IDS.avis],
-  [ETAPES_TYPES.avisDeLaDirectionDepartementaleDesTerritoiresEtDeLaMerDDT_M_]: [DOCUMENTS_TYPES_IDS.avis],
   [ETAPES_TYPES.avisDeLautoriteEnvironnementale]: [DOCUMENTS_TYPES_IDS.avis],
-  [ETAPES_TYPES.avisDesAutresInstances]: [DOCUMENTS_TYPES_IDS.avis],
-  [ETAPES_TYPES.avisDunServiceAdministratifLocal_wal]: [DOCUMENTS_TYPES_IDS.avis, DOCUMENTS_TYPES_IDS.courrier],
-  [ETAPES_TYPES.avisDeLautoriteMilitaire_wam]: [DOCUMENTS_TYPES_IDS.avis],
   [ETAPES_TYPES.arreteDouvertureDesTravauxMiniers]: [DOCUMENTS_TYPES_IDS.arretePrefectoral],
   [ETAPES_TYPES.avisDuPrefetMaritime_wap]: [DOCUMENTS_TYPES_IDS.avis],
   [ETAPES_TYPES.avisDeReception]: [DOCUMENTS_TYPES_IDS.courrierDeNotificationDeLaRecevabilite, DOCUMENTS_TYPES_IDS.lettreDeSaisineDuPrefet],
-  [ETAPES_TYPES.avisDeLagenceRegionaleDeSanteARS]: [DOCUMENTS_TYPES_IDS.avis],
-  [ETAPES_TYPES.avisDuConseilDepartementalDeLenvironnementEtDesRisquesSanitairesEtTechnologiques_Coderst__wat]: [DOCUMENTS_TYPES_IDS.avis],
   [ETAPES_TYPES.avisDuDemandeurSurLesPrescriptionsProposees]: [DOCUMENTS_TYPES_IDS.avis, DOCUMENTS_TYPES_IDS.courrier],
   [ETAPES_TYPES.clotureDeLenquetePublique_wce]: [DOCUMENTS_TYPES_IDS.rapportDuCommissaireEnqueteur],
   [ETAPES_TYPES.donneActeDeLaDeclaration_DOTM_]: [DOCUMENTS_TYPES_IDS.projetDePrescriptions],
@@ -275,7 +244,6 @@ const EtapesTypesDocumentsTypes = {
   [ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement_wrl]: [DOCUMENTS_TYPES_IDS.rapport],
   [ETAPES_TYPES.recolement]: [DOCUMENTS_TYPES_IDS.pvDeRecolement],
   [ETAPES_TYPES.saisineDeLautoriteEnvironnementale]: [DOCUMENTS_TYPES_IDS.courrierDeSaisineDuPrefet, DOCUMENTS_TYPES_IDS.lettreDeSaisineDuPrefet],
-  [ETAPES_TYPES.saisineDesServicesDeLEtat]: [DOCUMENTS_TYPES_IDS.courrierDeSaisineDuPrefet],
   [ETAPES_TYPES.transmissionDuProjetDePrescriptionsAuDemandeur]: [DOCUMENTS_TYPES_IDS.arretePrefectoral],
 } as const
 
diff --git a/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/index.test.ts b/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/index.test.ts
index 1d2af4b0a..7523dc941 100644
--- a/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/index.test.ts
+++ b/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/index.test.ts
@@ -31,14 +31,9 @@ test('getEtapesTDE', () => {
       "mnc",
       "ede",
       "rde",
-      "mio",
-      "rio",
-      "eof",
+      "asc",
       "mcs",
       "rcs",
-      "mia",
-      "ria",
-      "aof",
       "sca",
       "aca",
       "mna",
diff --git a/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/index.ts b/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/index.ts
index 965d568c8..13a8da19f 100644
--- a/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/index.ts
+++ b/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/index.ts
@@ -13,20 +13,13 @@ const travaux = {
     ETAPES_TYPES.avisDeReception,
     ETAPES_TYPES.saisineDeLautoriteEnvironnementale,
     ETAPES_TYPES.avisDeLautoriteEnvironnementale,
-    ETAPES_TYPES.saisineDesServicesDeLEtat,
-    ETAPES_TYPES.avisDunServiceAdministratifLocal_wal,
-    ETAPES_TYPES.avisDeLaDirectionDepartementaleDesTerritoiresEtDeLaMerDDT_M_,
-    ETAPES_TYPES.avisDeLautoriteMilitaire_wam,
-    ETAPES_TYPES.avisDeLagenceRegionaleDeSanteARS,
-    ETAPES_TYPES.avisDeDirectionRegionaleDesAffairesCulturellesDRAC,
+    ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
     ETAPES_TYPES.avisDuPrefetMaritime_wap,
-    ETAPES_TYPES.avisDesAutresInstances,
     ETAPES_TYPES.memoireEnReponseDeLexploitant_ParRapportALavisDeLAE_,
     ETAPES_TYPES.ouvertureDeLenquetePublique_woe,
     ETAPES_TYPES.clotureDeLenquetePublique_wce,
     ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement_wrl,
     ETAPES_TYPES.transmissionDuProjetDePrescriptionsAuDemandeur,
-    ETAPES_TYPES.avisDuConseilDepartementalDeLenvironnementEtDesRisquesSanitairesEtTechnologiques_Coderst__wat,
     ETAPES_TYPES.avisDuDemandeurSurLesPrescriptionsProposees,
     ETAPES_TYPES.publicationDeDecisionAuRecueilDesActesAdministratifs_wpa,
     ETAPES_TYPES.abandonDeLaDemande,
@@ -40,14 +33,8 @@ const travaux = {
     ETAPES_TYPES.receptionDeComplements_wrc,
     ETAPES_TYPES.recevabilite,
     ETAPES_TYPES.avisDeReception,
-    ETAPES_TYPES.saisineDesServicesDeLEtat,
-    ETAPES_TYPES.avisDunServiceAdministratifLocal_wal,
-    ETAPES_TYPES.avisDeLaDirectionDepartementaleDesTerritoiresEtDeLaMerDDT_M_,
-    ETAPES_TYPES.avisDeLautoriteMilitaire_wam,
-    ETAPES_TYPES.avisDeLagenceRegionaleDeSanteARS,
-    ETAPES_TYPES.avisDeDirectionRegionaleDesAffairesCulturellesDRAC,
+    ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
     ETAPES_TYPES.avisDuPrefetMaritime_wap,
-    ETAPES_TYPES.avisDesAutresInstances,
     ETAPES_TYPES.rapportDeLaDreal,
     ETAPES_TYPES.transmissionDuProjetDePrescriptionsAuDemandeur,
     ETAPES_TYPES.avisDuDemandeurSurLesPrescriptionsProposees,
@@ -61,14 +48,8 @@ const travaux = {
     ETAPES_TYPES.receptionDeComplements_wrc,
     ETAPES_TYPES.recevabilite,
     ETAPES_TYPES.avisDeReception,
-    ETAPES_TYPES.saisineDesServicesDeLEtat,
-    ETAPES_TYPES.avisDunServiceAdministratifLocal_wal,
-    ETAPES_TYPES.avisDeLaDirectionDepartementaleDesTerritoiresEtDeLaMerDDT_M_,
-    ETAPES_TYPES.avisDeLautoriteMilitaire_wam,
-    ETAPES_TYPES.avisDeLagenceRegionaleDeSanteARS,
-    ETAPES_TYPES.avisDeDirectionRegionaleDesAffairesCulturellesDRAC,
+    ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
     ETAPES_TYPES.avisDuPrefetMaritime_wap,
-    ETAPES_TYPES.avisDesAutresInstances,
     ETAPES_TYPES.arretePrefectoralDeSursisAStatuer,
     ETAPES_TYPES.transmissionDuProjetDePrescriptionsAuDemandeur,
     ETAPES_TYPES.avisDuDemandeurSurLesPrescriptionsProposees,
@@ -85,7 +66,7 @@ const travaux = {
 
 const permisExclusifDeRecherchesMetauxEtGranulatsMarinsProlongationsEtapes = [
   ETAPES_TYPES.demande,
-  ETAPES_TYPES.saisineDesServices,
+  ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
   ETAPES_TYPES.depotDeLaDemande,
   ETAPES_TYPES.saisineDuPrefet,
   ETAPES_TYPES.desistementDuDemandeur,
@@ -103,10 +84,6 @@ const permisExclusifDeRecherchesMetauxEtGranulatsMarinsProlongationsEtapes = [
   ETAPES_TYPES.avisDuConseilGeneralDeLeconomie_CGE_,
   ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
   ETAPES_TYPES.avisDuPrefet,
-  ETAPES_TYPES.avisDeLagenceRegionaleDeSante,
-  ETAPES_TYPES.avisDeDirectionRegionaleDesAffairesCulturelles,
-  ETAPES_TYPES.avisDeLautoriteMilitaire,
-  ETAPES_TYPES.avisDunServiceAdministratifLocal,
   ETAPES_TYPES.decisionImplicite,
   ETAPES_TYPES.saisineDeLautoriteSignataire,
   ETAPES_TYPES.decisionDeLadministration,
@@ -135,13 +112,8 @@ const permisExploitationMetauxEtGranulatsMarinsProlongationsEtapes = [
   ETAPES_TYPES.recevabiliteDeLaDemande,
   ETAPES_TYPES.publicationDeLavisDeDecisionImplicite,
   ETAPES_TYPES.decisionImplicite,
-  ETAPES_TYPES.saisineDesServices,
+  ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
   ETAPES_TYPES.saisineDesCollectivitesLocales,
-  ETAPES_TYPES.avisDunServiceAdministratifLocal,
-  ETAPES_TYPES.avisDeLautoriteMilitaire,
-  ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-  ETAPES_TYPES.avisDuParcNational,
-  ETAPES_TYPES.avisDuParcNaturelRegional,
   ETAPES_TYPES.avisDunMaire,
   ETAPES_TYPES.avisDuneCollectiviteLocale,
   ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement,
@@ -178,7 +150,7 @@ const permisExclusifRechercheGeothermieOctroiEtProlongationsEtapes = [
   ETAPES_TYPES.modificationDeLaDemande,
   ETAPES_TYPES.saisineDuPrefet,
   ETAPES_TYPES.saisineDesCollectivitesLocales,
-  ETAPES_TYPES.saisineDesServices,
+  ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
   ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_,
   ETAPES_TYPES.saisineDeLautoriteSignataire,
   ETAPES_TYPES.ouvertureDeLaParticipationDuPublic,
@@ -186,12 +158,6 @@ const permisExclusifRechercheGeothermieOctroiEtProlongationsEtapes = [
   ETAPES_TYPES.avisDunMaire,
   ETAPES_TYPES.avisDunPresidentDEPCI,
   ETAPES_TYPES.avisDuneCollectiviteLocale,
-  ETAPES_TYPES.avisDunServiceAdministratifLocal,
-  ETAPES_TYPES.avisDeLautoriteMilitaire,
-  ETAPES_TYPES.avisDuParcNaturelRegional,
-  ETAPES_TYPES.avisDuParcNational,
-  ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-  ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
   ETAPES_TYPES.decisionImplicite,
   ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
   ETAPES_TYPES.avisDuPrefet,
@@ -496,12 +462,7 @@ const TDE = {
       ETAPES_TYPES.demandeDeComplements_RecevabiliteDeLaDemande_,
       ETAPES_TYPES.receptionDeComplements_RecevabiliteDeLaDemande_,
       ETAPES_TYPES.recevabiliteDeLaDemande,
-      ETAPES_TYPES.demandeDinformations_ExpertiseDeLOfficeNationalDesForets_,
-      ETAPES_TYPES.receptionDinformation_ExpertiseDeLOfficeNationalDesForets_,
-      ETAPES_TYPES.expertiseDeLOfficeNationalDesForets,
-      ETAPES_TYPES.demandeDinformations_AvisDeLOfficeNationalDesForets_,
-      ETAPES_TYPES.receptionDinformation_AvisDeLOfficeNationalDesForets_,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.classementSansSuite,
       ETAPES_TYPES.decisionDeLOfficeNationalDesForets,
       ETAPES_TYPES.avenantALautorisationDeRechercheMiniere,
@@ -517,12 +478,7 @@ const TDE = {
       ETAPES_TYPES.demandeDeComplements_RecevabiliteDeLaDemande_,
       ETAPES_TYPES.receptionDeComplements_RecevabiliteDeLaDemande_,
       ETAPES_TYPES.recevabiliteDeLaDemande,
-      ETAPES_TYPES.demandeDinformations_ExpertiseDeLOfficeNationalDesForets_,
-      ETAPES_TYPES.receptionDinformation_ExpertiseDeLOfficeNationalDesForets_,
-      ETAPES_TYPES.expertiseDeLOfficeNationalDesForets,
-      ETAPES_TYPES.demandeDinformations_AvisDeLOfficeNationalDesForets_,
-      ETAPES_TYPES.receptionDinformation_AvisDeLOfficeNationalDesForets_,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.classementSansSuite,
       ETAPES_TYPES.avenantALautorisationDeRechercheMiniere,
       ETAPES_TYPES.notificationAuDemandeur_AvisDefavorable_,
@@ -531,12 +487,9 @@ const TDE = {
     ],
     [DEMARCHES_TYPES_IDS.Retrait]: [
       ETAPES_TYPES.initiationDeLaDemarcheDeRetrait,
-      ETAPES_TYPES.demandeDinformations_ExpertiseDeLOfficeNationalDesForets_,
       ETAPES_TYPES.notificationAuDemandeur_InitiationDeLaDemarcheDeRetrait_,
       ETAPES_TYPES.receptionDinformation,
-      ETAPES_TYPES.receptionDinformation_ExpertiseDeLOfficeNationalDesForets_,
-      ETAPES_TYPES.expertiseDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.avenantALautorisationDeRechercheMiniere,
       ETAPES_TYPES.notificationAuDemandeur_SignatureDeLavenantALautorisationDeRechercheMiniere_,
       ETAPES_TYPES.classementSansSuite,
@@ -569,14 +522,9 @@ const TDE = {
       ETAPES_TYPES.notificationAuDemandeur_ClassementSansSuite_,
       ETAPES_TYPES.expertiseDREALOuDGTMServiceEau,
       ETAPES_TYPES.recepisseDeDeclarationLoiSurLeau,
-      ETAPES_TYPES.demandeDinformations_ExpertiseDeLOfficeNationalDesForets_,
-      ETAPES_TYPES.receptionDinformation_ExpertiseDeLOfficeNationalDesForets_,
-      ETAPES_TYPES.expertiseDeLOfficeNationalDesForets,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.demandeDeComplements_SaisineDeLaCARM_,
       ETAPES_TYPES.receptionDeComplements_SaisineDeLaCARM_,
-      ETAPES_TYPES.demandeDinformations_AvisDeLOfficeNationalDesForets_,
-      ETAPES_TYPES.receptionDinformation_AvisDeLOfficeNationalDesForets_,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
       ETAPES_TYPES.saisineDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_,
       ETAPES_TYPES.avisDeLaCommissionDesAutorisationsDeRecherchesMinieres_CARM_,
       ETAPES_TYPES.notificationAuDemandeur_AjournementDeLaCARM_,
@@ -623,19 +571,7 @@ const TDE = {
       ETAPES_TYPES.receptionDinformation_AvisDuDREALDEALOuDGTM_,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
       ETAPES_TYPES.avisDunMaire,
-      ETAPES_TYPES.saisineDesServices,
-      ETAPES_TYPES.confirmationDeLaccordDuProprietaireDuSol,
-      ETAPES_TYPES.avisDGTMServiceMilieuxNaturelsBiodiversiteSitesEtPaysages_MNBST_,
-      ETAPES_TYPES.avisDGTMServiceAmenagementUrbanismeConstructionLogement_AUCL_,
-      ETAPES_TYPES.avisDeLaDirectionDesEntreprisesDeLaConcurrenceDeLaConsommationDuTravailEtDeLemploi,
-      ETAPES_TYPES.avisDeLaDirectionDalimentationDeLagricultureEtDeLaForet,
-      ETAPES_TYPES.avisDeDirectionRegionaleDesAffairesCulturelles,
-      ETAPES_TYPES.avisDeLagenceRegionaleDeSante,
-      ETAPES_TYPES.avisDeLaDirectionRegionaleDesFinancesPubliques,
-      ETAPES_TYPES.avisDeLaCaisseGeneraleDeSecuriteSociale,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLaGendarmerieNationale,
-      ETAPES_TYPES.avisDeLetatMajorOrpaillageEtPecheIllicite_EMOPI_,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement,
       ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
@@ -740,18 +676,11 @@ const TDE = {
       ETAPES_TYPES.avisDeDemandeConcurrente,
       ETAPES_TYPES.ouvertureDeLenquetePublique,
       ETAPES_TYPES.clotureDeLenquetePublique,
-      ETAPES_TYPES.saisineDesServices,
-      ETAPES_TYPES.expertiseDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
       ETAPES_TYPES.avisDunMaire,
       ETAPES_TYPES.avisDunPresidentDEPCI,
       ETAPES_TYPES.avisDuneCollectiviteLocale,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDuParcNaturelRegional,
       ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement,
@@ -855,18 +784,11 @@ const TDE = {
       ETAPES_TYPES.avisDeDemandeConcurrente,
       ETAPES_TYPES.ouvertureDeLenquetePublique,
       ETAPES_TYPES.clotureDeLenquetePublique,
-      ETAPES_TYPES.saisineDesServices,
-      ETAPES_TYPES.expertiseDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
       ETAPES_TYPES.avisDunMaire,
       ETAPES_TYPES.avisDunPresidentDEPCI,
       ETAPES_TYPES.avisDuneCollectiviteLocale,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDuParcNaturelRegional,
       ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement,
@@ -979,18 +901,11 @@ const TDE = {
       ETAPES_TYPES.avisDeDemandeConcurrente,
       ETAPES_TYPES.ouvertureDeLenquetePublique,
       ETAPES_TYPES.clotureDeLenquetePublique,
-      ETAPES_TYPES.saisineDesServices,
-      ETAPES_TYPES.expertiseDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
       ETAPES_TYPES.avisDunMaire,
       ETAPES_TYPES.avisDunPresidentDEPCI,
       ETAPES_TYPES.avisDuneCollectiviteLocale,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDuParcNaturelRegional,
       ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement,
@@ -1072,9 +987,7 @@ const TDE = {
       ETAPES_TYPES.ouvertureDeLenquetePublique,
       ETAPES_TYPES.clotureDeLaParticipationDuPublic,
       ETAPES_TYPES.clotureDeLenquetePublique,
-      ETAPES_TYPES.saisineDesServices,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
-      ETAPES_TYPES.avisDuParcNaturelRegional,
       ETAPES_TYPES.avisDuPrefetMaritime,
       ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
@@ -1094,13 +1007,7 @@ const TDE = {
       ETAPES_TYPES.classementSansSuite,
       ETAPES_TYPES.noteInterneSignalee,
       ETAPES_TYPES.informationsHistoriquesIncompletes,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDuParcNaturelMarin,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLIfremer,
-      ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.avisDunMaire,
       ETAPES_TYPES.avisDunPresidentDEPCI,
       ETAPES_TYPES.avisDuneCollectiviteLocale,
@@ -1122,18 +1029,12 @@ const TDE = {
       ETAPES_TYPES.demandeDinformations,
       ETAPES_TYPES.receptionDinformation,
       ETAPES_TYPES.publicationDeLavisDeDecisionImplicite,
-      ETAPES_TYPES.saisineDesServices,
-      ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
       ETAPES_TYPES.avisDunMaire,
       ETAPES_TYPES.avisDunPresidentDEPCI,
       ETAPES_TYPES.avisDuneCollectiviteLocale,
       ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDuParcNaturelRegional,
       ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDuPrefet,
@@ -1250,18 +1151,11 @@ const TDE = {
       ETAPES_TYPES.avisDeDemandeConcurrente,
       ETAPES_TYPES.ouvertureDeLenquetePublique,
       ETAPES_TYPES.clotureDeLenquetePublique,
-      ETAPES_TYPES.saisineDesServices,
-      ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
       ETAPES_TYPES.avisDunMaire,
       ETAPES_TYPES.avisDunPresidentDEPCI,
       ETAPES_TYPES.avisDuneCollectiviteLocale,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDuParcNaturelRegional,
-      ETAPES_TYPES.avisDeLIfremer,
-      ETAPES_TYPES.avisDuParcNaturelMarin,
       ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement,
@@ -1293,7 +1187,7 @@ const TDE = {
       ETAPES_TYPES.recevabiliteDeLaDemande,
       ETAPES_TYPES.demandeDeComplements,
       ETAPES_TYPES.receptionDeComplements,
-      ETAPES_TYPES.saisineDesServices,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.demandeDinformations,
       ETAPES_TYPES.receptionDinformation,
       ETAPES_TYPES.saisineDuConseilGeneralDeLeconomie_CGE_,
@@ -1350,18 +1244,11 @@ const TDE = {
       ETAPES_TYPES.avisDeDemandeConcurrente,
       ETAPES_TYPES.ouvertureDeLenquetePublique,
       ETAPES_TYPES.clotureDeLenquetePublique,
-      ETAPES_TYPES.saisineDesServices,
-      ETAPES_TYPES.expertiseDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
       ETAPES_TYPES.avisDunMaire,
       ETAPES_TYPES.avisDunPresidentDEPCI,
       ETAPES_TYPES.avisDuneCollectiviteLocale,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDuParcNaturelRegional,
       ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement,
@@ -1457,18 +1344,11 @@ const TDE = {
       ETAPES_TYPES.avisDeDemandeConcurrente,
       ETAPES_TYPES.ouvertureDeLenquetePublique,
       ETAPES_TYPES.clotureDeLenquetePublique,
-      ETAPES_TYPES.saisineDesServices,
-      ETAPES_TYPES.expertiseDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
       ETAPES_TYPES.avisDunMaire,
       ETAPES_TYPES.avisDunPresidentDEPCI,
       ETAPES_TYPES.avisDuneCollectiviteLocale,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDuParcNaturelRegional,
       ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement,
@@ -1567,14 +1447,8 @@ const TDE = {
       ETAPES_TYPES.decisionImplicite,
       ETAPES_TYPES.ouvertureDeLenquetePublique,
       ETAPES_TYPES.clotureDeLenquetePublique,
-      ETAPES_TYPES.saisineDesServices,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
-      ETAPES_TYPES.avisDeLIfremer,
-      ETAPES_TYPES.avisDuParcNaturelMarin,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
       ETAPES_TYPES.avisDunMaire,
       ETAPES_TYPES.avisDunPresidentDEPCI,
       ETAPES_TYPES.avisDuneCollectiviteLocale,
@@ -1621,14 +1495,8 @@ const TDE = {
       ETAPES_TYPES.clotureDeLaParticipationDuPublic,
       ETAPES_TYPES.clotureDeLenquetePublique,
       ETAPES_TYPES.ouvertureDeLenquetePublique,
-      ETAPES_TYPES.saisineDesServices,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
-      ETAPES_TYPES.avisDeLIfremer,
-      ETAPES_TYPES.avisDuParcNaturelMarin,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
       ETAPES_TYPES.avisDunMaire,
       ETAPES_TYPES.avisDunPresidentDEPCI,
       ETAPES_TYPES.avisDuneCollectiviteLocale,
@@ -1842,18 +1710,12 @@ const TDE = {
       ETAPES_TYPES.avisDeDemandeConcurrente,
       ETAPES_TYPES.ouvertureDeLaParticipationDuPublic,
       ETAPES_TYPES.clotureDeLaParticipationDuPublic,
-      ETAPES_TYPES.saisineDesServices,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
       ETAPES_TYPES.avisDunMaire,
       ETAPES_TYPES.avisDunPresidentDEPCI,
       ETAPES_TYPES.avisDuneCollectiviteLocale,
       ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDuParcNaturelRegional,
       ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDuPrefet,
@@ -2307,21 +2169,12 @@ const TDE = {
       ETAPES_TYPES.expertiseDGTMServicePreventionDesRisquesEtIndustriesExtractives_DATE_,
       ETAPES_TYPES.ouvertureDeLaParticipationDuPublic,
       ETAPES_TYPES.clotureDeLaParticipationDuPublic,
-      ETAPES_TYPES.saisineDesServices,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
-      ETAPES_TYPES.avisDeLaDirectionRegionaleDesFinancesPubliques,
-      ETAPES_TYPES.avisDeLagenceRegionaleDeSante,
-      ETAPES_TYPES.avisDeDirectionRegionaleDesAffairesCulturelles,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
       ETAPES_TYPES.avisDunMaire,
       ETAPES_TYPES.avisDunPresidentDEPCI,
       ETAPES_TYPES.avisDuneCollectiviteLocale,
       ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDuParcNaturelRegional,
       ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDuPrefet,
@@ -2405,15 +2258,9 @@ const TDE = {
       ETAPES_TYPES.avisDeDemandeConcurrente,
       ETAPES_TYPES.ouvertureDeLaParticipationDuPublic,
       ETAPES_TYPES.clotureDeLaParticipationDuPublic,
-      ETAPES_TYPES.saisineDesServices,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
       ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDuParcNaturelRegional,
       ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDuPrefet,
@@ -2565,18 +2412,12 @@ const TDE = {
       ETAPES_TYPES.avisDeDemandeConcurrente,
       ETAPES_TYPES.ouvertureDeLaParticipationDuPublic,
       ETAPES_TYPES.clotureDeLaParticipationDuPublic,
-      ETAPES_TYPES.saisineDesServices,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
       ETAPES_TYPES.avisDunMaire,
       ETAPES_TYPES.avisDunPresidentDEPCI,
       ETAPES_TYPES.avisDuneCollectiviteLocale,
       ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDuParcNaturelRegional,
       ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDuPrefet,
@@ -2683,18 +2524,12 @@ const TDE = {
       ETAPES_TYPES.avisDeDemandeConcurrente,
       ETAPES_TYPES.ouvertureDeLaParticipationDuPublic,
       ETAPES_TYPES.clotureDeLaParticipationDuPublic,
-      ETAPES_TYPES.saisineDesServices,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDeLInstitutNationalDeLorigineEtDeLaQualite,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
       ETAPES_TYPES.avisDunMaire,
       ETAPES_TYPES.avisDunPresidentDEPCI,
       ETAPES_TYPES.avisDuneCollectiviteLocale,
       ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDuParcNaturelRegional,
       ETAPES_TYPES.saisineDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDeLaCommissionDepartementaleDesMines_CDM_,
       ETAPES_TYPES.avisDuPrefet,
@@ -3107,13 +2942,8 @@ const TDE = {
       ETAPES_TYPES.avisDeDemandeConcurrente,
       ETAPES_TYPES.ouvertureDeLenquetePublique,
       ETAPES_TYPES.clotureDeLenquetePublique,
-      ETAPES_TYPES.saisineDesServices,
+      ETAPES_TYPES.avisDesServicesEtCommissionsConsultatives,
       ETAPES_TYPES.saisineDesCollectivitesLocales,
-      ETAPES_TYPES.avisDunServiceAdministratifLocal,
-      ETAPES_TYPES.avisDeLautoriteMilitaire,
-      ETAPES_TYPES.avisDeLOfficeNationalDesForets,
-      ETAPES_TYPES.avisDuParcNational,
-      ETAPES_TYPES.avisDuParcNaturelRegional,
       ETAPES_TYPES.avisDunMaire,
       ETAPES_TYPES.avisDuneCollectiviteLocale,
       ETAPES_TYPES.avisEtRapportDuDirecteurRegionalChargeDeLenvironnementDeLamenagementEtDuLogement,
diff --git a/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.test.ts b/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.test.ts
index 2a939232d..5fb56f74a 100644
--- a/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.test.ts
+++ b/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.test.ts
@@ -9,7 +9,7 @@ test('getSections erreurs', () => {
 })
 
 test('getSections pas de surcharge mais pas de sections', () => {
-  expect(getSections('apm', 'amo', 'abs')).toMatchInlineSnapshot('[]')
+  expect(getSections('apm', 'amo', 'asc')).toMatchInlineSnapshot('[]')
 })
 
 test('getSections surcharge', () => {
@@ -152,7 +152,7 @@ describe('getSectionsWithValue', () => {
           {
             id: 'section',
             elements: [
-              { id: 'element1', type: 'checkboxes', options: [{ id: 'option1', nom: 'nomOption1' }] },
+              { id: 'element1', type: 'checkboxes', options: [{ id: 'option1', nom: 'nomOption1' }], optionnel: false },
               {
                 id: 'element2',
                 type: 'checkboxes',
@@ -160,8 +160,9 @@ describe('getSectionsWithValue', () => {
                   { id: '1', nom: 'one' },
                   { id: '2', nom: 'two' },
                 ],
+                optionnel: false,
               },
-              { id: 'element3', type: 'checkboxes', options: [{ id: '1', nom: 'one' }] },
+              { id: 'element3', type: 'checkboxes', options: [{ id: '1', nom: 'one' }], optionnel: false },
             ],
           },
         ],
@@ -173,6 +174,7 @@ describe('getSectionsWithValue', () => {
           "elements": [
             {
               "id": "element1",
+              "optionnel": false,
               "options": [
                 {
                   "id": "option1",
@@ -184,6 +186,7 @@ describe('getSectionsWithValue', () => {
             },
             {
               "id": "element2",
+              "optionnel": false,
               "options": [
                 {
                   "id": "1",
@@ -201,6 +204,7 @@ describe('getSectionsWithValue', () => {
             },
             {
               "id": "element3",
+              "optionnel": false,
               "options": [
                 {
                   "id": "1",
@@ -218,37 +222,52 @@ describe('getSectionsWithValue', () => {
   })
 
   test('les substances fiscales sont converties dans leur unité d’affichage', () => {
-    expect(
-      getSectionsWithValue(
-        [
-          {
-            id: 'substancesFiscales',
-            elements: [
-              { id: 'auru', type: 'number', uniteId: 'mgr' },
-              { id: 'arge', type: 'integer' },
-              { id: 'arse', type: 'integer' },
-            ],
-          },
-        ],
-        { substancesFiscales: { auru: 12.3, arge: null } }
-      )
-    ).toMatchInlineSnapshot(`
+    const withHeritage = getSectionsWithValue(
+      [
+        {
+          id: 'substancesFiscales',
+          elements: [
+            { id: 'auru', type: 'number', uniteId: 'mgr', optionnel: false },
+            { id: 'arge', type: 'integer', optionnel: false },
+            { id: 'arse', type: 'integer', optionnel: false },
+          ],
+        },
+      ],
+      { substancesFiscales: { auru: { value: 12.3 }, arge: { value: null } } }
+    )
+    const withoutHeritage = getSectionsWithValue(
+      [
+        {
+          id: 'substancesFiscales',
+          elements: [
+            { id: 'auru', type: 'number', uniteId: 'mgr', optionnel: false },
+            { id: 'arge', type: 'integer', optionnel: false },
+            { id: 'arse', type: 'integer', optionnel: false },
+          ],
+        },
+      ],
+      { substancesFiscales: { auru: 12.3, arge: null } }
+    )
+    expect(withoutHeritage).toMatchInlineSnapshot(`
       [
         {
           "elements": [
             {
               "id": "auru",
+              "optionnel": false,
               "type": "number",
               "uniteId": "mgr",
               "value": 12300,
             },
             {
               "id": "arge",
+              "optionnel": false,
               "type": "integer",
               "value": null,
             },
             {
               "id": "arse",
+              "optionnel": false,
               "type": "integer",
               "value": null,
             },
@@ -257,6 +276,7 @@ describe('getSectionsWithValue', () => {
         },
       ]
     `)
+    expect(withHeritage).toStrictEqual(withoutHeritage)
   })
 
   test('les options des liste déroulantes sont calculées si elles sont basées sur des métas', () => {
@@ -266,8 +286,8 @@ describe('getSectionsWithValue', () => {
           {
             id: 'section',
             elements: [
-              { id: 'unites', type: 'select', valeursMetasNom: 'unites' },
-              { id: 'devises', type: 'select', valeursMetasNom: 'devises' },
+              { id: 'unites', type: 'select', valeursMetasNom: 'unites', optionnel: false },
+              { id: 'devises', type: 'select', valeursMetasNom: 'devises', optionnel: false },
             ],
           },
         ],
@@ -279,6 +299,7 @@ describe('getSectionsWithValue', () => {
           "elements": [
             {
               "id": "unites",
+              "optionnel": false,
               "options": [
                 {
                   "id": "deg",
@@ -405,6 +426,7 @@ describe('getSectionsWithValue', () => {
             },
             {
               "id": "devises",
+              "optionnel": false,
               "options": [
                 {
                   "id": "EUR",
diff --git a/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.ts b/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.ts
index 8c50530f5..3741059c8 100644
--- a/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.ts
+++ b/packages/common/src/static/titresTypes_demarchesTypes_etapesTypes/sections.ts
@@ -1,4 +1,4 @@
-import { caminoDateValidator, toCaminoDate } from '../../date.js'
+import { caminoDateValidator } from '../../date.js'
 import { DEMARCHES_TYPES_IDS, DemarcheTypeId } from '../demarchesTypes.js'
 import { TITRES_TYPES_IDS, TitreTypeId } from '../titresTypes.js'
 import { ETAPES_TYPES, EtapeTypeId } from '../etapesTypes.js'
@@ -266,7 +266,7 @@ const caracteristiquesARM: Section[] = [
     id: 'arm',
     nom: 'Caractéristiques ARM',
     elements: [
-      { id: 'mecanise', nom: 'Prospection mécanisée', type: 'radio', description: '' },
+      { id: 'mecanise', nom: 'Prospection mécanisée', type: 'radio', description: '', optionnel: false },
       { id: 'franchissements', nom: "Franchissements de cours d'eau", type: 'integer', optionnel: true, description: "Nombre de franchissements de cours d'eau" },
     ],
   },
@@ -276,7 +276,7 @@ const TDESections = {
   [TITRES_TYPES_IDS.AUTORISATION_DE_RECHERCHE_METAUX]: {
     [DEMARCHES_TYPES_IDS.Octroi]: {
       [ETAPES_TYPES.receptionDeComplements_DecisionDeLaMissionAutoriteEnvironnementale_ExamenAuCasParCasDuProjet__]: [
-        { id: 'arm', nom: 'Caractéristiques ARM', elements: [{ id: 'mecanise', nom: 'Prospection mécanisée', type: 'radio', description: '' }] },
+        { id: 'arm', nom: 'Caractéristiques ARM', elements: [{ id: 'mecanise', nom: 'Prospection mécanisée', type: 'radio', description: '', optionnel: false }] },
       ],
       [ETAPES_TYPES.recepisseDeDeclarationLoiSurLeau]: [
         {
@@ -311,6 +311,7 @@ const TDESections = {
               type: 'checkbox',
               description:
                 "L'entreprise porteuse de la demande est identifiées (extrait Kbis de moins d’un an, déclaration INSEE du statut d’Auto Entrepreneur, justificatif de création de société en cours, (présence code SIRET et APE).",
+              optionnel: false,
             },
             {
               id: 'representantLegal',
@@ -318,6 +319,7 @@ const TDESections = {
               type: 'checkbox',
               description:
                 "Le réprésentant légal de l'entité porteuse de la demande est identifié (Identité, coordonnées, justificatif d'identité - CNI / passeport / carte de résident en cours de validité).",
+              optionnel: false,
             },
             { id: 'motifsIdentification', nom: 'Motifs identification demandeur', type: 'textarea', optionnel: true, description: '' },
           ],
@@ -326,14 +328,15 @@ const TDESections = {
           id: 'armCaracteristiques',
           nom: "Caractéristiques de l'autorisation de recherche",
           elements: [
-            { id: 'nomSecteur', nom: 'Nom de secteur', type: 'checkbox', description: "Le nom de secteur est cohérent avec l'appellation courante de l'ARM." },
-            { id: 'duree', nom: 'Durée', type: 'checkbox', description: "L'autorisation est demandée pour une durée maximum de 4 mois à compter de la date de l'autorisation." },
+            { id: 'nomSecteur', nom: 'Nom de secteur', type: 'checkbox', description: "Le nom de secteur est cohérent avec l'appellation courante de l'ARM.", optionnel: false },
+            { id: 'duree', nom: 'Durée', type: 'checkbox', description: "L'autorisation est demandée pour une durée maximum de 4 mois à compter de la date de l'autorisation.", optionnel: false },
             {
               id: 'descriptionProjet',
               nom: 'Description du projet de recherches minières ',
               type: 'checkbox',
               description:
                 'Le projet de recherches minières est décrit : le programme de prospection, les méthodes de travail projetées, les moyens techniques mobilisés, les moyens humains employés.',
+              optionnel: false,
             },
             {
               id: 'surfaceDemandee',
@@ -341,12 +344,14 @@ const TDESections = {
               type: 'checkbox',
               description:
                 "Les surfaces demandées n'excéde pas 3 km², sous la forme de 1 à 3 carrés ou rectangles d'une superficie de 1 km² chacun, tous situés sur le même bassin versant. Les carrés mesurent 1 km de côté et les rectangles 0,5 km de largeur et 2 km de longueur. L'espacement de leurs centres n'est pas supérieur à 4 km.",
+              optionnel: false,
             },
             {
               id: 'surfaceMaximumDetenue',
               nom: 'Surfaces maximum détenues',
               type: 'checkbox',
               description: "L'opérateur ne détient pas d'autorisation de recherches sur une surface supérieure à 3 km².",
+              optionnel: false,
             },
             {
               id: 'localisationPerimetres',
@@ -354,12 +359,14 @@ const TDESections = {
               type: 'checkbox',
               description:
                 'Les périmètres est transmis dans un fichier numérique réutilisable (au format ".geojson"). Le système de coordonnées légal en vigueur est le RGFG95 (ESPG: 2972) avec une précision métrique.',
+              optionnel: false,
             },
             {
               id: 'cheminements',
               nom: 'Cheminements prévisionnels à emprunter',
               type: 'checkbox',
               description: "Ces tracés sont élaborés uniquement à partir du réseau carrossable, jusqu'à et à l'intérieur de l'ARM.",
+              optionnel: false,
             },
             {
               id: 'localisationCheminements',
@@ -367,13 +374,15 @@ const TDESections = {
               type: 'checkbox',
               description:
                 'L\'ensemble de ces tracés est transmis dans un fichier numérique réutilisable (au format ".geojson"). Le système de coordonnées légal en vigueur est le RGFG95 (ESPG: 2972) avec une précision métrique.',
+              optionnel: false,
             },
-            { id: 'carte500000', nom: 'Carte synthétique 1/500 000', type: 'checkbox', description: 'Le document cartographique inclut les périmètres demandés' },
+            { id: 'carte500000', nom: 'Carte synthétique 1/500 000', type: 'checkbox', description: 'Le document cartographique inclut les périmètres demandés', optionnel: false },
             {
               id: 'carte50000',
               nom: 'Carte synthétique 1/50 000',
               type: 'checkbox',
               description: 'Le document cartographique inclut les périmètres demandés, le tracé des cheminements prévisionnels à emprunter, la position des points de franchissement.',
+              optionnel: false,
             },
             { id: 'motifsDemande', nom: 'Motifs caractéristiques de la demande', type: 'textarea', optionnel: true, description: '' },
           ],
@@ -382,23 +391,31 @@ const TDESections = {
           id: 'armMecanisee',
           nom: 'Informations sur la prospection mécanisée',
           elements: [
-            { id: 'recepisseLSE', nom: "Dossier loi sur l'eau", type: 'checkbox', description: "Le dossier de déclaration loi sur l'eau est présent." },
+            { id: 'recepisseLSE', nom: "Dossier loi sur l'eau", type: 'checkbox', description: "Le dossier de déclaration loi sur l'eau est présent.", optionnel: false },
             {
               id: 'recepisseCasParCas',
               nom: "Décision d'examen au cas par cas",
               type: 'checkbox',
               description: "L'étape de décision dans le cadre de l'examen au cas par cas est présente et favorable.",
+              optionnel: false,
             },
-            { id: 'franchissementsCoursDeau', nom: "Franchissements de cours d'eau", type: 'checkbox', description: "Les franchissements de cours d'eau sont indiqués." },
+            { id: 'franchissementsCoursDeau', nom: "Franchissements de cours d'eau", type: 'checkbox', description: "Les franchissements de cours d'eau sont indiqués.", optionnel: false },
             {
               id: 'localisationPointsFranchissementsCoursDeau',
               nom: "Localisation des points de franchissement de cours d'eau",
               type: 'checkbox',
               description:
                 'L\'ensemble de ces point est transmis dans un fichier numérique réutilisable (au format ".geojson"). Le système de coordonnées légal en vigueur est le RGFG95 (ESPG: 2972) avec une précision métrique.',
+              optionnel: false,
+            },
+            { id: 'descriptionMateriel', nom: 'Description du matériel', type: 'checkbox', description: 'Le matériel utilisé et son origine (acquisition, location) sont décrits.', optionnel: false },
+            {
+              id: 'tonnageMaximum',
+              nom: 'Tonnage maximum autorisé',
+              type: 'checkbox',
+              description: 'Le tonnage maximum des pelles mécaniques autorisées fixé à 21 tonnes est respecté.',
+              optionnel: false,
             },
-            { id: 'descriptionMateriel', nom: 'Description du matériel', type: 'checkbox', description: 'Le matériel utilisé et son origine (acquisition, location) sont décrits.' },
-            { id: 'tonnageMaximum', nom: 'Tonnage maximum autorisé', type: 'checkbox', description: 'Le tonnage maximum des pelles mécaniques autorisées fixé à 21 tonnes est respecté.' },
             { id: 'motifsMateriel', nom: 'Motifs caractéristiques matériel', type: 'textarea', optionnel: true, description: '' },
           ],
         },
@@ -412,12 +429,14 @@ const TDESections = {
               type: 'checkbox',
               description:
                 "La justification des capacités techniques s'appuie sur la présentation de l'activité professionnelle actuelle et les références professionnelles en matière minière du demandeur (curriculum vitae, ou à défaut, les formations suivies). S'il s'agit d'une personne morale les références professionnelles des cadres chargés du suivi et de la conduite des travaux sont présentées.",
+              optionnel: false,
             },
             {
               id: 'responsableTravaux',
               nom: 'Responsable des travaux',
               type: 'checkbox',
               description: "Le responsable des travaux est identifié (Identité, coordonnées, justificatif d'identité - CNI / passeport / carte de résident en cours de validité).",
+              optionnel: false,
             },
             { id: 'motifsCapaciteTechniques', nom: 'Motifs capacité techniques', type: 'textarea', optionnel: true, description: '' },
           ],
@@ -431,6 +450,7 @@ const TDESections = {
               nom: 'Plan de financement',
               type: 'checkbox',
               description: 'Le plan inclut le montant de la dépense totale envisagée en euros pour conduire la prospection et le plan prévisionnel de financement associé.',
+              optionnel: false,
             },
             {
               id: 'justificationCapacitesFinancieres',
@@ -438,6 +458,7 @@ const TDESections = {
               type: 'checkbox',
               description:
                 "La démonstration des capacités financières à exercer une activité d'exploration comporte la justification des ressources financières disponibles correspondant au plan de financement.",
+              optionnel: false,
             },
             {
               id: 'justificatifSituationFiscale',
@@ -445,6 +466,7 @@ const TDESections = {
               type: 'checkbox',
               description:
                 "La justification de situation fiscale régulière est présentée (attestation ou justificatif des services fiscaux, déclaration unique DGFIP, moratoire accordé par la même autorité) excepté pour les sociétés créées dans l'année.",
+              optionnel: false,
             },
             { id: 'motifsCapaciteFinancieres', nom: 'Motifs capacités financières', type: 'textarea', optionnel: true, description: '' },
           ],
@@ -466,44 +488,8 @@ const TDESections = {
       [ETAPES_TYPES.receptionDeComplements_RecevabiliteDeLaDemande_]: caracteristiquesARM,
       [ETAPES_TYPES.receptionDeComplements_CompletudeDeLaDemande_]: caracteristiquesARM,
       [ETAPES_TYPES.receptionDinformation_RecevabiliteDeLaDemande_]: caracteristiquesARM,
-      [ETAPES_TYPES.expertiseDeLOfficeNationalDesForets]: [
-        {
-          id: 'onf',
-          nom: 'Office National des Forêts',
-          elements: [
-            { id: 'motifs', nom: 'Motifs', type: 'textarea', optionnel: true, description: "Élément d'expertise" },
-            { id: 'expert', nom: 'Expert', type: 'text', optionnel: true, description: "Agent ONF qui a réalisé l'expertise" },
-            { id: 'agent', nom: 'Agent', type: 'text', optionnel: true, description: 'Chargé de mission foncier du Service Aménagement du Territoire' },
-            {
-              id: 'dateDebut',
-              nom: 'Date de début',
-              type: 'date',
-              dateFin: toCaminoDate('2018-02-07'),
-              dateDebut: toCaminoDate('2003-07-24'),
-              optionnel: true,
-              description: 'Date de début de l’expertise',
-            },
-          ],
-        },
-      ],
-      [ETAPES_TYPES.avisDeLOfficeNationalDesForets]: [
-        {
-          id: 'onf',
-          nom: 'Office National des Forêts',
-          elements: [
-            { id: 'motifs', nom: 'Motifs', type: 'textarea', optionnel: true, description: "Élément d'expertise" },
-            {
-              id: 'signataire',
-              nom: 'Signataire',
-              type: 'text',
-              optionnel: true,
-              description: 'Directeur ONF ou responsable du service Service Aménagement du Territoire qui apparaitra sur les documents externe pour signature',
-            },
-          ],
-        },
-      ],
       [ETAPES_TYPES.signatureDeLautorisationDeRechercheMiniere]: [
-        { id: 'arm', nom: 'Caractéristiques ARM', elements: [{ id: 'mecanise', nom: 'Prospection mécanisée', type: 'radio' }] },
+        { id: 'arm', nom: 'Caractéristiques ARM', elements: [{ id: 'mecanise', nom: 'Prospection mécanisée', type: 'radio', optionnel: false }] },
         {
           id: 'suivi',
           nom: 'Suivi de la démarche',
@@ -940,19 +926,20 @@ const basicElementValidator = z.object({
   description: z.string().optional(),
   dateDebut: caminoDateValidator.optional(),
   dateFin: caminoDateValidator.optional(),
-  optionnel: z.boolean().optional(),
+  // TODO 2024-06-20: virer le optional quand on a viré la colonne sections dans la table activités
+  optionnel: z.boolean().optional().default(false),
 })
 
 export const dateElementValidator = basicElementValidator.extend({ type: z.literal('date') })
 export const textElementValidator = basicElementValidator.extend({ type: z.enum(['text', 'textarea']) })
 export const urlElementValidator = basicElementValidator.extend({ type: z.literal('url') })
 export const numberElementValidator = basicElementValidator.extend({ type: z.enum(['number', 'integer']), uniteId: uniteIdValidator.optional() })
-export const radioElementValidator = basicElementValidator.extend({ type: z.literal('radio'), optionnel: z.literal(false).optional() })
-export const checkboxElementValidator = basicElementValidator.extend({ type: z.literal('checkbox'), optionnel: z.literal(false).optional() })
+export const radioElementValidator = basicElementValidator.extend({ type: z.literal('radio') })
+export const checkboxElementValidator = basicElementValidator.extend({ type: z.literal('checkbox'), optionnel: z.literal(false).optional().default(false) })
 export const checkboxesElementValidator = basicElementValidator.extend({
   type: z.literal('checkboxes'),
   options: z.array(z.object({ id: z.string(), nom: z.string() })),
-  optionnel: z.boolean().optional(),
+  optionnel: z.literal(false).optional().default(false),
 })
 
 const isSelectElementWithMetas = (element: DeepReadonly<SelectElement>): element is SelectElementWithMetas => 'valeursMetasNom' in element
diff --git a/packages/common/src/titres.test.ts b/packages/common/src/titres.test.ts
index 349e60576..b62f24549 100644
--- a/packages/common/src/titres.test.ts
+++ b/packages/common/src/titres.test.ts
@@ -2,12 +2,13 @@ import { describe, expect, test } from 'vitest'
 import { TitrePropTitreEtapeFindDemarcheEtape, getMostRecentValuePropFromEtapeFondamentaleValide } from './titres'
 import { toCaminoDate } from './date'
 import { entrepriseIdValidator } from './entreprise'
+import { ETAPE_IS_BROUILLON, ETAPE_IS_NOT_BROUILLON } from './etape'
 describe('getMostRecentValuePropFromEtapeFondamentaleValide', () => {
   test("retourne le titulaire de la demande même si elle est en brouillon, si elle est l'unique étape", () => {
     const asl: TitrePropTitreEtapeFindDemarcheEtape = {
       etape_type_id: 'asl',
       etape_statut_id: 'fai',
-      is_brouillon: false,
+      is_brouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 1,
     }
     const mfr: TitrePropTitreEtapeFindDemarcheEtape = {
@@ -22,7 +23,7 @@ describe('getMostRecentValuePropFromEtapeFondamentaleValide', () => {
         perimetre: null,
       },
       etape_statut_id: 'fai',
-      is_brouillon: true,
+      is_brouillon: ETAPE_IS_BROUILLON,
       ordre: 1,
     }
 
@@ -48,7 +49,7 @@ describe('getMostRecentValuePropFromEtapeFondamentaleValide', () => {
         perimetre: null,
       },
       etape_statut_id: 'acc',
-      is_brouillon: false,
+      is_brouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 2,
     }
 
@@ -64,7 +65,7 @@ describe('getMostRecentValuePropFromEtapeFondamentaleValide', () => {
         perimetre: null,
       },
       etape_statut_id: 'acc',
-      is_brouillon: false,
+      is_brouillon: ETAPE_IS_NOT_BROUILLON,
       ordre: 1,
     }
 
diff --git a/packages/common/src/titres.ts b/packages/common/src/titres.ts
index bd99ae6bf..8ebca5643 100644
--- a/packages/common/src/titres.ts
+++ b/packages/common/src/titres.ts
@@ -12,6 +12,7 @@ import { TitreId, titreIdValidator, titreSlugValidator } from './validators/titr
 import { isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty } from './typescript-tools.js'
 import { EntrepriseId, entrepriseIdValidator } from './entreprise.js'
 import { isFondamentalesStatutOk } from './static/etapesStatuts.js'
+import { ETAPE_IS_NOT_BROUILLON } from './etape.js'
 
 const commonTitreValidator = z.object({
   id: titreIdValidator,
@@ -123,7 +124,7 @@ export type TitrePropTitreEtapeFindDemarche<F extends Pick<DemarcheEtape, 'etape
 }
 
 export const getMostRecentValuePropFromEtapeFondamentaleValide = <
-  P extends 'titulaireIds' | 'amodiataireIds' | 'perimetre' | 'substances',
+  P extends 'titulaireIds' | 'amodiataireIds' | 'perimetre' | 'substances' | 'duree',
   F extends Pick<DemarcheEtapeFondamentale, 'etape_statut_id' | 'etape_type_id' | 'ordre' | 'fondamentale' | 'is_brouillon'>,
   NF extends Pick<DemarcheEtapeNonFondamentale, 'etape_statut_id' | 'etape_type_id' | 'ordre' | 'is_brouillon'>,
 >(
@@ -135,7 +136,7 @@ export const getMostRecentValuePropFromEtapeFondamentaleValide = <
   for (const titreDemarche of titreDemarchesDesc) {
     const titreEtapeDesc = [...titreDemarche.etapes].sort((a, b) => b.ordre - a.ordre).filter((etape): etape is F => 'fondamentale' in etape)
     for (const titreEtape of titreEtapeDesc) {
-      if (isFondamentalesStatutOk(titreEtape.etape_statut_id) && (!titreEtape.is_brouillon || titreEtapeDesc.length === 1)) {
+      if (isFondamentalesStatutOk(titreEtape.etape_statut_id) && (titreEtape.is_brouillon === ETAPE_IS_NOT_BROUILLON || titreEtapeDesc.length === 1)) {
         const value = titreEtape.fondamentale[propId]
         if ((Array.isArray(value) && isNotNullNorUndefinedNorEmpty(value)) || (!Array.isArray(value) && isNotNullNorUndefined(value))) {
           return value
diff --git a/packages/common/src/typescript-tools.ts b/packages/common/src/typescript-tools.ts
index 4e715dca8..dc8d27a1b 100644
--- a/packages/common/src/typescript-tools.ts
+++ b/packages/common/src/typescript-tools.ts
@@ -23,6 +23,7 @@ export function isNotNullNorUndefinedNorEmpty(value: string | DeepReadonly<any[]
 }
 
 export function isNullOrUndefinedOrEmpty<U>(value: DeepReadonly<U[]> | null | undefined): value is null | undefined
+export function isNullOrUndefinedOrEmpty<U>(value: U[] | null | undefined): value is null | undefined
 export function isNullOrUndefinedOrEmpty(value: string | null | undefined): value is null | undefined
 export function isNullOrUndefinedOrEmpty(value: string | DeepReadonly<any[]> | null | undefined) {
   if (value === null || value === undefined) {
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 0a7c0dd64..71b03ed91 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -37,8 +37,8 @@
     "@types/geojson": "^7946.0.14",
     "@types/leaflet": "^1.9.12",
     "@types/leaflet.markercluster": "^1.5.4",
-    "@typescript-eslint/eslint-plugin": "^7.7.1",
-    "@typescript-eslint/parser": "^7.7.1",
+    "@typescript-eslint/eslint-plugin": "^7.12.0",
+    "@typescript-eslint/parser": "^7.12.0",
     "@uppy/core": "^3.10.1",
     "@uppy/tus": "^3.5.4",
     "@vitejs/plugin-vue-jsx": "^3.1.0",
@@ -104,8 +104,13 @@
       "P": "readonly",
       "dsfr": "readonly"
     },
-    "extends": ["standard", "prettier"],
-    "ignorePatterns": ["!.storybook"],
+    "extends": [
+      "standard",
+      "prettier"
+    ],
+    "ignorePatterns": [
+      "!.storybook"
+    ],
     "rules": {
       "camelcase": 0,
       "no-unused-vars": 0,
@@ -117,8 +122,14 @@
         "parserOptions": {
           "project": true
         },
-        "files": ["*.tsx", "*.ts", "*.js"],
-        "extends": ["plugin:@typescript-eslint/recommended"],
+        "files": [
+          "*.tsx",
+          "*.ts",
+          "*.js"
+        ],
+        "extends": [
+          "plugin:@typescript-eslint/recommended"
+        ],
         "rules": {
           "camelcase": 0,
           "newline-before-return": 0,
@@ -149,17 +160,23 @@
               "paths": [
                 {
                   "name": "vue",
-                  "importNames": ["capitalize"],
+                  "importNames": [
+                    "capitalize"
+                  ],
                   "message": "Please use capitalize from camino-common/src/strings"
                 },
                 {
                   "name": "vue-router",
-                  "importNames": ["Router"],
+                  "importNames": [
+                    "Router"
+                  ],
                   "message": "Please use CaminoRouter"
                 },
                 {
                   "name": "vue-router",
-                  "importNames": ["RouteLocationNormalized"],
+                  "importNames": [
+                    "RouteLocationNormalized"
+                  ],
                   "message": "Please use CaminoRouteLocation"
                 }
               ]
@@ -189,7 +206,9 @@
       }
     }
   },
-  "browserslist": ["supports es6-module"],
+  "browserslist": [
+    "supports es6-module"
+  ],
   "dependencies": {
     "zod": "^3.23.4"
   }
diff --git a/packages/ui/src/components/_common/document-type-typeahead.stories.tsx b/packages/ui/src/components/_common/document-type-typeahead.stories.tsx
deleted file mode 100644
index 468d5b84b..000000000
--- a/packages/ui/src/components/_common/document-type-typeahead.stories.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Meta, StoryFn } from '@storybook/vue3'
-import { action } from '@storybook/addon-actions'
-import { DocumentTypeTypeahead } from './document-type-typeahead'
-
-const meta: Meta = {
-  title: 'Components/Common/DocumentTypeTypeahead',
-  // @ts-ignore @storybook/vue3 n'aime pas les composants tsx
-  component: DocumentTypeTypeahead,
-}
-export default meta
-
-const documentTypeIdSelected = action('documentTypeIdSelected')
-
-export const Default: StoryFn = () => <DocumentTypeTypeahead documentTypeIds={['car', 'doe']} documentTypeIdSelected={documentTypeIdSelected} alwaysOpen={true} />
-export const WithDocumentTypeAlreadySelected: StoryFn = () => <DocumentTypeTypeahead documentTypeIds={['car', 'doe']} initialValue="car" documentTypeIdSelected={documentTypeIdSelected} />
diff --git a/packages/ui/src/components/_common/document-type-typeahead.stories_snapshots_Default.html b/packages/ui/src/components/_common/document-type-typeahead.stories_snapshots_Default.html
deleted file mode 100644
index ae4fe651d..000000000
--- a/packages/ui/src/components/_common/document-type-typeahead.stories_snapshots_Default.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div id="typeahead_271_wrapper" class="_typeahead_8eddf1">
-  <div class="flex"><input id="typeahead_271" type="text" name="typeahead_271" class="fr-input" placeholder="" autocomplete="off"></div>
-  <div class="_typeahead-list_8eddf1">
-    <div class="_typeahead-list-item_8eddf1 _typeahead-list-item-active_8eddf1"><span>Documents cartographiques</span></div>
-    <div class="_typeahead-list-item_8eddf1 "><span>Dossier "Loi sur l'eau"</span></div>
-  </div>
-</div>
\ No newline at end of file
diff --git a/packages/ui/src/components/_common/document-type-typeahead.tsx b/packages/ui/src/components/_common/document-type-typeahead.tsx
deleted file mode 100644
index 62a999b63..000000000
--- a/packages/ui/src/components/_common/document-type-typeahead.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import { Ref, computed, defineComponent, ref } from 'vue'
-import { TypeAheadSingle } from '../_ui/typeahead-single'
-import { DeepReadonly, isNotNullNorUndefined } from 'camino-common/src/typescript-tools'
-import { DocumentTypeId, DocumentsTypes } from 'camino-common/src/static/documentsTypes'
-
-type Props = {
-  alwaysOpen?: boolean
-  documentTypeIds: DeepReadonly<DocumentTypeId[]>
-  initialValue?: DocumentTypeId
-  documentTypeIdSelected: (documentTypeId: DocumentTypeId | null) => void
-}
-
-type DocumentLabel = { id: DocumentTypeId; nom: string }
-
-export const DocumentTypeTypeahead = defineComponent<Props>(props => {
-  const documentTypeSelected = ref<DocumentLabel | null>(props.initialValue ? DocumentsTypes[props.initialValue] : null) as Ref<DocumentLabel | null>
-  const documentTypeUpdate = async (documentType: DocumentLabel | undefined) => {
-    documentTypeSelected.value = documentType ?? null
-    props.documentTypeIdSelected(isNotNullNorUndefined(documentType) ? documentType.id : null)
-  }
-
-  const sortedByUs = computed<DeepReadonly<DocumentLabel[]>>(() => [...props.documentTypeIds].map(dtId => DocumentsTypes[dtId]).sort((a, b) => a.nom.localeCompare(b.nom)))
-
-  const documentTypeFiltered = ref<DeepReadonly<DocumentLabel[]>>(sortedByUs.value) as Ref<DeepReadonly<DocumentLabel[]>>
-  const documentTypeOnInput = (search: string) => {
-    const formatedSearch = search.trim().toLowerCase()
-
-    if (formatedSearch.length === 0) {
-      documentTypeFiltered.value = sortedByUs.value
-    } else {
-      documentTypeFiltered.value = sortedByUs.value.filter(documentType => documentType.nom.toLowerCase().includes(formatedSearch.toLowerCase()))
-    }
-  }
-
-  return () => (
-    <TypeAheadSingle
-      overrideItem={documentTypeSelected.value}
-      props={{
-        alwaysOpen: props.alwaysOpen,
-        items: documentTypeFiltered.value,
-        itemChipLabel: item => item.nom,
-        itemKey: 'id',
-        placeholder: '',
-        minInputLength: 0,
-        onSelectItem: documentTypeUpdate,
-        onInput: documentTypeOnInput,
-      }}
-    />
-  )
-})
-
-// @ts-ignore waiting for https://github.com/vuejs/core/issues/7833
-DocumentTypeTypeahead.props = ['documentTypeIdSelected', 'documentTypeIds', 'alwaysOpen', 'initialValue']
diff --git a/packages/ui/src/components/_common/etape-statut.stories.tsx b/packages/ui/src/components/_common/etape-statut.stories.tsx
index 935a45846..a5af65567 100644
--- a/packages/ui/src/components/_common/etape-statut.stories.tsx
+++ b/packages/ui/src/components/_common/etape-statut.stories.tsx
@@ -1,6 +1,7 @@
 import { Meta, StoryFn } from '@storybook/vue3'
-import { EtapeStatut } from './etape-statut'
+import { AvisStatut, EtapeStatut } from './etape-statut'
 import { EtapesStatuts } from 'camino-common/src/static/etapesStatuts'
+import { AvisStatutIds } from 'camino-common/src/static/avisTypes'
 
 const meta: Meta = {
   title: 'Components/Common/EtapeStatut',
@@ -24,5 +25,19 @@ export const All: StoryFn = () => (
         </tr>
       ))}
     </table>
+    <table>
+      <tr>
+        <th>Statut des avis</th>
+        <th>Rendu</th>
+      </tr>
+      {AvisStatutIds.map(statutId => (
+        <tr>
+          <td>{statutId}</td>
+          <td>
+            <AvisStatut avisStatutId={statutId} />
+          </td>
+        </tr>
+      ))}
+    </table>
   </div>
 )
diff --git a/packages/ui/src/components/_common/etape-statut.stories_snapshots_All.html b/packages/ui/src/components/_common/etape-statut.stories_snapshots_All.html
index 0e0e4c753..639491f2d 100644
--- a/packages/ui/src/components/_common/etape-statut.stories_snapshots_All.html
+++ b/packages/ui/src/components/_common/etape-statut.stories_snapshots_All.html
@@ -107,4 +107,34 @@
       </td>
     </tr>
   </table>
+  <table>
+    <tr>
+      <th>Statut des avis</th>
+      <th>Rendu</th>
+    </tr>
+    <tr>
+      <td>Favorable</td>
+      <td>
+        <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--green-bourgeon" title="Favorable" aria-label="Favorable">Favorable</p>
+      </td>
+    </tr>
+    <tr>
+      <td>Défavorable</td>
+      <td>
+        <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--purple-glycine" title="Défavorable" aria-label="Défavorable">Défavorable</p>
+      </td>
+    </tr>
+    <tr>
+      <td>Favorable avec réserves</td>
+      <td>
+        <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--green-bourgeon" title="Favorable avec réserves" aria-label="Favorable avec réserves">Favorable avec réserves</p>
+      </td>
+    </tr>
+    <tr>
+      <td>Non renseigné</td>
+      <td>
+        <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--beige-gris-galet" title="Non renseigné" aria-label="Non renseigné">Non renseigné</p>
+      </td>
+    </tr>
+  </table>
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/_common/etape-statut.tsx b/packages/ui/src/components/_common/etape-statut.tsx
index 02913c521..4b42f62c9 100644
--- a/packages/ui/src/components/_common/etape-statut.tsx
+++ b/packages/ui/src/components/_common/etape-statut.tsx
@@ -2,6 +2,7 @@ import { FunctionalComponent, HTMLAttributes } from 'vue'
 import { Badge } from '../_ui/badge'
 import { CouleurIllustrative } from 'camino-common/src/static/couleurs'
 import { EtapeStatutId, EtapesStatuts, ETAPES_STATUTS } from 'camino-common/src/static/etapesStatuts'
+import { AvisStatutId } from 'camino-common/src/static/avisTypes'
 
 type Props = {
   etapeStatutId: EtapeStatutId
@@ -32,3 +33,15 @@ export const EtapeStatut: FunctionalComponent<Props> = (props: Props) => {
 
   return <Badge ariaLabel={EtapesStatuts[props.etapeStatutId].nom} badgeColor={couleur} />
 }
+
+const avisStatutToEtapeStatut = {
+  Favorable: ETAPES_STATUTS.FAVORABLE,
+  Défavorable: ETAPES_STATUTS.DEFAVORABLE,
+  'Favorable avec réserves': ETAPES_STATUTS.FAVORABLE_AVEC_RESERVE,
+  'Non renseigné': ETAPES_STATUTS.NON_APPLICABLE,
+} as const satisfies Record<AvisStatutId, EtapeStatutId>
+
+export const AvisStatut: FunctionalComponent<{ avisStatutId: AvisStatutId }> = props => {
+  const couleur = couleurParStatut[avisStatutToEtapeStatut[props.avisStatutId]]
+  return <Badge ariaLabel={props.avisStatutId} badgeColor={couleur} />
+}
diff --git a/packages/ui/src/components/_common/new-section-element.stories.tsx b/packages/ui/src/components/_common/new-section-element.stories.tsx
index 03f6a5042..64e6cf074 100644
--- a/packages/ui/src/components/_common/new-section-element.stories.tsx
+++ b/packages/ui/src/components/_common/new-section-element.stories.tsx
@@ -16,6 +16,7 @@ export const Text: StoryFn = () => (
       nom: "nom de l'élément",
       description: 'description',
       value: 'Valeur',
+      optionnel: false,
     }}
   />
 )
@@ -28,6 +29,7 @@ export const GranulatsMarins: StoryFn = () => (
       nom: 'Granulats Marins',
       description: 'description',
       value: 200,
+      optionnel: false,
     }}
   />
 )
@@ -40,6 +42,7 @@ export const JORF: StoryFn = () => (
       nom: 'JORF',
       description: 'description',
       value: 'JORFTEXT000000592092',
+      optionnel: false,
     }}
   />
 )
@@ -52,6 +55,7 @@ export const Url: StoryFn = () => (
       nom: "nom de l'élément",
       description: 'description',
       value: 'https://google.fr',
+      optionnel: false,
     }}
   />
 )
@@ -64,6 +68,7 @@ export const Date: StoryFn = () => (
       nom: 'Une date',
       description: 'description',
       value: toCaminoDate('2022-01-01'),
+      optionnel: false,
     }}
   />
 )
@@ -81,6 +86,7 @@ export const Checkboxes: StoryFn = () => (
         { id: 'option3', nom: 'Option 3' },
         { id: 'option4', nom: 'Option 4' },
       ],
+      optionnel: false,
     }}
   />
 )
@@ -98,6 +104,7 @@ export const Select: StoryFn = () => (
         { id: 'option3', nom: 'Option 3' },
         { id: 'option4', nom: 'Option 4' },
       ],
+      optionnel: false,
     }}
   />
 )
@@ -109,6 +116,7 @@ export const Number: StoryFn = () => (
       type: 'number',
       nom: 'Un nombre',
       value: 2,
+      optionnel: false,
     }}
   />
 )
@@ -121,6 +129,7 @@ export const Radio: StoryFn = () => (
         type: 'radio',
         nom: 'Un radio bouton',
         value: true,
+        optionnel: false,
       }}
     />
     <SectionElement
@@ -129,6 +138,7 @@ export const Radio: StoryFn = () => (
         type: 'radio',
         nom: 'Un autre radio bouton',
         value: false,
+        optionnel: false,
       }}
     />
   </div>
diff --git a/packages/ui/src/components/_common/new-section.stories.tsx b/packages/ui/src/components/_common/new-section.stories.tsx
index 5697573e4..108573f75 100644
--- a/packages/ui/src/components/_common/new-section.stories.tsx
+++ b/packages/ui/src/components/_common/new-section.stories.tsx
@@ -16,13 +16,14 @@ export const Default: StoryFn = () => (
       nom: 'Caractéristiques ARM',
       id: 'arm',
       elements: [
-        { id: 'mecanisation', type: 'radio', nom: 'Mécanisation', value: true },
+        { id: 'mecanisation', type: 'radio', nom: 'Mécanisation', value: true, optionnel: false },
         {
           id: 'franchissements',
           nom: "Franchissements de cours d'eau",
           type: 'integer',
           value: 3,
           description: "Nombre de franchissements de cours d'eau",
+          optionnel: false,
         },
       ],
     }}
@@ -42,6 +43,7 @@ export const WithoutContent: StoryFn = () => (
           type: 'radio',
           nom: 'Mécanisation',
           value: null,
+          optionnel: false,
         },
         {
           id: 'franchissements',
@@ -49,6 +51,7 @@ export const WithoutContent: StoryFn = () => (
           type: 'integer',
           description: "Nombre de franchissements de cours d'eau",
           value: null,
+          optionnel: false,
         },
       ],
     }}
diff --git a/packages/ui/src/components/_common/new-sections-edit.stories.tsx b/packages/ui/src/components/_common/new-sections-edit.stories.tsx
index bcb2762ad..8bbde1c43 100644
--- a/packages/ui/src/components/_common/new-sections-edit.stories.tsx
+++ b/packages/ui/src/components/_common/new-sections-edit.stories.tsx
@@ -33,6 +33,7 @@ export const Default: StoryFn = () => (
             dateDebut: toCaminoDate('2018-01-01'),
             type: 'number',
             value: null,
+            optionnel: false,
           },
           {
             id: 'mercure',
@@ -40,6 +41,7 @@ export const Default: StoryFn = () => (
             description: 'Masse en gramme de l’ensemble des produits contaminés envoyés en traitement au cours du trimestre.',
             type: 'number',
             value: null,
+            optionnel: false,
           },
           {
             id: 'carburantDetaxe',
@@ -48,6 +50,7 @@ export const Default: StoryFn = () => (
             dateDebut: toCaminoDate('2018-01-01'),
             type: 'number',
             value: null,
+            optionnel: false,
           },
           {
             id: 'carburantConventionnel',
@@ -55,6 +58,7 @@ export const Default: StoryFn = () => (
             description: 'Volume total en litre de carburant conventionnel consommé au cours du trimestre par les travaux réalisés sur le chantier.',
             type: 'number',
             value: null,
+            optionnel: false,
           },
           {
             id: 'pompes',
@@ -62,6 +66,7 @@ export const Default: StoryFn = () => (
             description: 'Des pompes étaient-elles présentes sur le chantier',
             type: 'radio',
             value: null,
+            optionnel: false,
           },
           {
             id: 'pelles',
@@ -70,8 +75,9 @@ export const Default: StoryFn = () => (
             dateDebut: toCaminoDate('2018-01-01'),
             type: 'number',
             value: null,
+            optionnel: false,
           },
-          { id: 'effectifs', nom: 'Effectifs', description: 'Nombre moyen de salariés sur le chantier au cours du trimestre.', type: 'number', value: null },
+          { id: 'effectifs', nom: 'Effectifs', description: 'Nombre moyen de salariés sur le chantier au cours du trimestre.', type: 'number', optionnel: false, value: null },
           {
             id: 'environnement',
             nom: 'Dépenses relatives à la protection de l’environnement (euros)',
@@ -151,6 +157,7 @@ export const TousLesElementsVidesOptionnels: StoryFn = () => (
             description: 'Description pour radio',
             type: 'radio',
             value: null,
+            optionnel: false,
           },
           {
             id: 'checkbox',
@@ -158,6 +165,7 @@ export const TousLesElementsVidesOptionnels: StoryFn = () => (
             description: 'Description pour checkbox',
             type: 'checkbox',
             value: null,
+            optionnel: false,
           },
           {
             id: 'checkboxes',
@@ -169,6 +177,7 @@ export const TousLesElementsVidesOptionnels: StoryFn = () => (
               { id: '2', nom: 'checkbox2' },
             ],
             value: [],
+            optionnel: false,
           },
           {
             id: 'select',
@@ -200,6 +209,7 @@ export const TousLesElementsRequis: StoryFn = () => (
             description: 'Description pour integer',
             type: 'integer',
             value: null,
+            optionnel: false,
           },
           {
             id: 'number',
@@ -207,6 +217,7 @@ export const TousLesElementsRequis: StoryFn = () => (
             description: 'Description pour number',
             type: 'number',
             value: null,
+            optionnel: false,
           },
           {
             id: 'date',
@@ -214,6 +225,7 @@ export const TousLesElementsRequis: StoryFn = () => (
             description: 'Description pour date',
             type: 'date',
             value: null,
+            optionnel: false,
           },
           {
             id: 'textarea',
@@ -221,6 +233,7 @@ export const TousLesElementsRequis: StoryFn = () => (
             description: 'Description pour textarea',
             type: 'textarea',
             value: null,
+            optionnel: false,
           },
           {
             id: 'text',
@@ -228,6 +241,7 @@ export const TousLesElementsRequis: StoryFn = () => (
             description: 'Description pour text',
             type: 'text',
             value: null,
+            optionnel: false,
           },
           {
             id: 'url',
@@ -235,6 +249,7 @@ export const TousLesElementsRequis: StoryFn = () => (
             description: 'Description pour url',
             type: 'url',
             value: null,
+            optionnel: false,
           },
           {
             id: 'radio',
@@ -242,6 +257,7 @@ export const TousLesElementsRequis: StoryFn = () => (
             description: 'Description pour radio',
             type: 'radio',
             value: null,
+            optionnel: false,
           },
           {
             id: 'checkbox',
@@ -249,6 +265,7 @@ export const TousLesElementsRequis: StoryFn = () => (
             description: 'Description pour checkbox',
             type: 'checkbox',
             value: null,
+            optionnel: false,
           },
           {
             id: 'checkboxes',
@@ -260,6 +277,7 @@ export const TousLesElementsRequis: StoryFn = () => (
               { id: '2', nom: 'checkbox2' },
             ],
             value: [],
+            optionnel: false,
           },
           {
             id: 'select',
@@ -291,6 +309,7 @@ export const TousLesElementsRemplis: StoryFn = () => (
             description: 'Description pour integer',
             type: 'integer',
             value: 12,
+            optionnel: false,
           },
           {
             id: 'number',
@@ -298,6 +317,7 @@ export const TousLesElementsRemplis: StoryFn = () => (
             description: 'Description pour number',
             type: 'number',
             value: 8.2,
+            optionnel: false,
           },
           {
             id: 'date',
@@ -305,6 +325,7 @@ export const TousLesElementsRemplis: StoryFn = () => (
             description: 'Description pour date',
             type: 'date',
             value: toCaminoDate('2023-09-01'),
+            optionnel: false,
           },
           {
             id: 'textarea',
@@ -312,6 +333,7 @@ export const TousLesElementsRemplis: StoryFn = () => (
             description: 'Description pour textarea',
             type: 'textarea',
             value: 'ceci est un textarea',
+            optionnel: false,
           },
           {
             id: 'text',
@@ -319,6 +341,7 @@ export const TousLesElementsRemplis: StoryFn = () => (
             description: 'Description pour text',
             type: 'text',
             value: 'ceci est un text',
+            optionnel: false,
           },
           {
             id: 'url',
@@ -326,6 +349,7 @@ export const TousLesElementsRemplis: StoryFn = () => (
             description: 'Description pour url',
             type: 'url',
             value: 'https://google.fr',
+            optionnel: false,
           },
           {
             id: 'radio',
@@ -333,6 +357,7 @@ export const TousLesElementsRemplis: StoryFn = () => (
             description: 'Description pour radio',
             type: 'radio',
             value: true,
+            optionnel: false,
           },
           {
             id: 'checkbox',
@@ -340,6 +365,7 @@ export const TousLesElementsRemplis: StoryFn = () => (
             description: 'Description pour checkbox',
             type: 'checkbox',
             value: true,
+            optionnel: false,
           },
           {
             id: 'checkboxes',
@@ -352,6 +378,7 @@ export const TousLesElementsRemplis: StoryFn = () => (
               { id: '3', nom: 'checkbox3' },
             ],
             value: ['1', '2'],
+            optionnel: false,
           },
           {
             id: 'select',
@@ -360,6 +387,7 @@ export const TousLesElementsRemplis: StoryFn = () => (
             type: 'select',
             options: UNITES as NonEmptyArray<Unite>,
             value: 'deg',
+            optionnel: false,
           },
         ],
       },
@@ -381,6 +409,7 @@ export const VolumeGranulatsExtrait: StoryFn = () => (
             type: 'number',
             description: "Volume de granulats marins extrait, en mètre cube, au cours de l'année.",
             value: 12,
+            optionnel: false,
           },
         ],
       },
@@ -403,6 +432,7 @@ export const Date: StoryFn = () => (
             type: 'date',
             description: 'Et quelle belle date',
             value: null,
+            optionnel: false,
           },
         ],
       },
@@ -430,6 +460,7 @@ export const Checkboxes: StoryFn = () => (
               { id: '3', nom: 'plop 3' },
             ],
             value: [],
+            optionnel: false,
           },
         ],
       },
@@ -468,6 +499,7 @@ export const ToutesLesActivites: StoryFn = () => (
                             type: 'number',
                             description: `<b>${unite.symbole} (${unite.nom})</b> ${sf.description}`,
                             uniteId: sf.uniteId,
+                            optionnel: false,
                           }
 
                           return element
diff --git a/packages/ui/src/components/_ui/typeahead-single.tsx b/packages/ui/src/components/_ui/typeahead-single.tsx
index cd87ee323..745e341bc 100644
--- a/packages/ui/src/components/_ui/typeahead-single.tsx
+++ b/packages/ui/src/components/_ui/typeahead-single.tsx
@@ -5,31 +5,31 @@ import { DeepReadonly, isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty } fr
 import type { JSX } from 'vue/jsx-runtime'
 type TypeAheadRecord = Record<string | symbol | number, any>
 
-type Props<T extends TypeAheadRecord, K extends keyof DeepReadonly<T>> = {
+type Props<T extends DeepReadonly<TypeAheadRecord>, K extends keyof DeepReadonly<T>> = {
   overrideItem: (Pick<T, K> & Partial<Omit<T, K>>) | null
   disabled?: boolean
   props: {
     id?: string
-    itemKey: K
+    itemKey: NoInfer<K>
     placeholder: string
-    items: DeepReadonly<T[]>
+    items: T[]
     minInputLength: number
     alwaysOpen?: boolean
-    itemChipLabel: (key: DeepReadonly<T>) => string
-    displayItemInList?: (item: DeepReadonly<T>) => JSX.Element
-    onSelectItem: (item: DeepReadonly<T> | undefined) => void
+    itemChipLabel: (key: NoInfer<T>) => string
+    displayItemInList?: (item: NoInfer<T>) => JSX.Element
+    onSelectItem: (item: NoInfer<T> | undefined) => void
     onInput?: (item: string) => void
   }
 }
 
-export const TypeAheadSingle = defineComponent(<T extends TypeAheadRecord, K extends keyof DeepReadonly<T>>(props: Props<T, K>) => {
+export const TypeAheadSingle = defineComponent(<T extends DeepReadonly<TypeAheadRecord>, K extends keyof DeepReadonly<T>>(props: Props<T, K>) => {
   const id = props.props.id ?? `typeahead_${(random() * 1000).toFixed()}`
   const wrapperId = computed(() => `${id}_wrapper`)
-  const getItem = (item: (Pick<T, K> & Partial<Omit<T, K>>) | null): DeepReadonly<T> | null =>
+  const getItem = (item: (Pick<T, K> & Partial<Omit<T, K>>) | null): T | null =>
     props.props.items.find(i => {
       return i[props.props.itemKey] === item?.[props.props.itemKey]
     }) ?? null
-  const selectedItem = ref<DeepReadonly<T> | null>(getItem(props.overrideItem)) as Ref<DeepReadonly<T> | null>
+  const selectedItem = ref<T | null>(getItem(props.overrideItem)) as Ref<T | null>
 
   const initItem = getItem(props.overrideItem)
   const input = ref<string>(initItem !== null ? props.props.itemChipLabel(initItem) : '')
@@ -104,7 +104,7 @@ export const TypeAheadSingle = defineComponent(<T extends TypeAheadRecord, K ext
   const currentSelection = computed(() => {
     return isListVisible.value && currentSelectionIndex.value < notSelectedItems.value.length ? notSelectedItems.value[currentSelectionIndex.value] : undefined
   })
-  const selectItem = (item: DeepReadonly<T>) => {
+  const selectItem = (item: T) => {
     input.value = props.props.itemChipLabel(item)
 
     currentSelectionIndex.value = 0
diff --git a/packages/ui/src/components/_ui/typeahead-smart-single.tsx b/packages/ui/src/components/_ui/typeahead-smart-single.tsx
new file mode 100644
index 000000000..fdf321eec
--- /dev/null
+++ b/packages/ui/src/components/_ui/typeahead-smart-single.tsx
@@ -0,0 +1,52 @@
+import { Ref, computed, defineComponent, ref } from 'vue'
+import { TypeAheadSingle } from './typeahead-single'
+import { DeepReadonly, isNotNullNorUndefined } from 'camino-common/src/typescript-tools'
+
+type Props<T extends string> = {
+  alwaysOpen?: boolean
+  possibleValues: DeepReadonly<TypeaheadValue<T>>[]
+  initialValue?: DeepReadonly<NoInfer<T>>
+  valueIdSelected: (valueId: DeepReadonly<NoInfer<T>> | null) => void
+}
+
+type TypeaheadValue<T> = { id: T; nom: string }
+
+export const TypeaheadSmartSingle = defineComponent(<T extends string>(props: Props<T>) => {
+  const valueTypeSelected = ref<DeepReadonly<TypeaheadValue<T>> | null>(props.possibleValues.find(({ id }) => props.initialValue === id) ?? null) as Ref<DeepReadonly<TypeaheadValue<T>> | null>
+  const onValueUpdate = async (value: DeepReadonly<TypeaheadValue<T>> | undefined) => {
+    valueTypeSelected.value = value ?? null
+    props.valueIdSelected(isNotNullNorUndefined(value) ? value.id : null)
+  }
+
+  const sortedByUs = computed<DeepReadonly<TypeaheadValue<T>>[]>(() => [...props.possibleValues].sort((a, b) => a.nom.localeCompare(b.nom)))
+
+  const valuesFiltered = ref<DeepReadonly<TypeaheadValue<T>>[]>(sortedByUs.value) as Ref<DeepReadonly<TypeaheadValue<T>>[]>
+  const onInput = (search: string) => {
+    const formatedSearch = search.trim().toLowerCase()
+
+    if (formatedSearch.length === 0) {
+      valuesFiltered.value = sortedByUs.value
+    } else {
+      valuesFiltered.value = sortedByUs.value.filter(value => value.nom.toLowerCase().includes(formatedSearch.toLowerCase()))
+    }
+  }
+
+  return () => (
+    <TypeAheadSingle
+      overrideItem={valueTypeSelected.value}
+      props={{
+        alwaysOpen: props.alwaysOpen,
+        items: valuesFiltered.value,
+        itemChipLabel: item => item.nom,
+        itemKey: 'id',
+        placeholder: '',
+        minInputLength: 0,
+        onSelectItem: onValueUpdate,
+        onInput,
+      }}
+    />
+  )
+})
+
+// @ts-ignore waiting for https://github.com/vuejs/core/issues/7833
+TypeaheadSmartSingle.props = ['valueIdSelected', 'possibleValues', 'alwaysOpen', 'initialValue']
diff --git a/packages/ui/src/components/_ui/typeahead.stories.tsx b/packages/ui/src/components/_ui/typeahead.stories.tsx
index 05e702d26..24c59e9d0 100644
--- a/packages/ui/src/components/_ui/typeahead.stories.tsx
+++ b/packages/ui/src/components/_ui/typeahead.stories.tsx
@@ -2,6 +2,7 @@ import { Meta, StoryFn } from '@storybook/vue3'
 import { action } from '@storybook/addon-actions'
 import { TypeAheadSingle } from './typeahead-single'
 import { TypeAheadMultiple } from './typeahead-multiple'
+import { TypeaheadSmartSingle } from './typeahead-smart-single'
 
 const meta: Meta = {
   title: 'Components/UI/TypeAhead',
@@ -71,6 +72,27 @@ export const SingleWithInitialItem: StoryFn = () => (
   />
 )
 
+export const SmartSingle: StoryFn = () => (
+  <TypeaheadSmartSingle
+    possibleValues={[
+      { id: 'id1', nom: 'Nom' },
+      { id: 'id2', nom: 'Autre nom' },
+    ]}
+    valueIdSelected={selectItems}
+  />
+)
+
+export const SmartSingleWithInitialValue: StoryFn = () => (
+  <TypeaheadSmartSingle
+    possibleValues={[
+      { id: 'car', nom: 'Document car' },
+      { id: 'doe', nom: 'documentDoe' },
+    ]}
+    initialValue="car"
+    valueIdSelected={selectItems}
+  />
+)
+
 export const Multiple: StoryFn = () => (
   <TypeAheadMultiple
     props={{
diff --git a/packages/ui/src/components/_common/document-type-typeahead.stories_snapshots_WithDocumentTypeAlreadySelected.html b/packages/ui/src/components/_ui/typeahead.stories_snapshots_SmartSingle.html
similarity index 100%
rename from packages/ui/src/components/_common/document-type-typeahead.stories_snapshots_WithDocumentTypeAlreadySelected.html
rename to packages/ui/src/components/_ui/typeahead.stories_snapshots_SmartSingle.html
diff --git a/packages/ui/src/components/_ui/typeahead.stories_snapshots_SmartSingleWithInitialValue.html b/packages/ui/src/components/_ui/typeahead.stories_snapshots_SmartSingleWithInitialValue.html
new file mode 100644
index 000000000..d5cf5f1d2
--- /dev/null
+++ b/packages/ui/src/components/_ui/typeahead.stories_snapshots_SmartSingleWithInitialValue.html
@@ -0,0 +1,4 @@
+<div id="typeahead_271_wrapper" class="_typeahead_8eddf1">
+  <div class="flex"><input id="typeahead_271" type="text" name="typeahead_271" class="fr-input" placeholder="" autocomplete="off"></div>
+  <!---->
+</div>
\ No newline at end of file
diff --git a/packages/ui/src/components/activite-edition.stories.tsx b/packages/ui/src/components/activite-edition.stories.tsx
index 144ec854b..c43a118df 100644
--- a/packages/ui/src/components/activite-edition.stories.tsx
+++ b/packages/ui/src/components/activite-edition.stories.tsx
@@ -40,6 +40,7 @@ const activite: Activite = {
           dateDebut: toCaminoDate('2018-01-01'),
           type: 'number',
           value: null,
+          optionnel: false,
         },
         {
           id: 'mercure',
@@ -47,6 +48,7 @@ const activite: Activite = {
           description: 'Masse en gramme de l’ensemble des produits contaminés envoyés en traitement au cours du trimestre.',
           type: 'number',
           value: null,
+          optionnel: false,
         },
         {
           id: 'carburantDetaxe',
@@ -55,6 +57,7 @@ const activite: Activite = {
           dateDebut: toCaminoDate('2018-01-01'),
           type: 'number',
           value: null,
+          optionnel: false,
         },
         {
           id: 'carburantConventionnel',
@@ -62,6 +65,7 @@ const activite: Activite = {
           description: 'Volume total en litre de carburant conventionnel consommé au cours du trimestre par les travaux réalisés sur le chantier.',
           type: 'number',
           value: null,
+          optionnel: false,
         },
         {
           id: 'pompes',
@@ -69,6 +73,7 @@ const activite: Activite = {
           description: 'Des pompes étaient-elles présentes sur le chantier',
           type: 'radio',
           value: null,
+          optionnel: false,
         },
         {
           id: 'pelles',
@@ -77,8 +82,9 @@ const activite: Activite = {
           dateDebut: toCaminoDate('2018-01-01'),
           type: 'number',
           value: 4,
+          optionnel: false,
         },
-        { id: 'effectifs', nom: 'Effectifs', description: 'Nombre moyen de salariés sur le chantier au cours du trimestre.', type: 'number', value: null },
+        { id: 'effectifs', nom: 'Effectifs', description: 'Nombre moyen de salariés sur le chantier au cours du trimestre.', type: 'number', optionnel: false, value: null },
         {
           id: 'environnement',
           nom: 'Dépenses relatives à la protection de l’environnement (euros)',
@@ -87,6 +93,7 @@ const activite: Activite = {
           dateDebut: toCaminoDate('2018-01-01'),
           type: 'number',
           value: null,
+          optionnel: false,
         },
       ],
     },
@@ -107,6 +114,7 @@ const activite: Activite = {
             { id: 'arretDefinitif', nom: 'arrêt définitif (après réhabilitation)' },
           ],
           value: [],
+          optionnel: false,
         },
         {
           id: '5',
@@ -121,6 +129,7 @@ const activite: Activite = {
             { id: 'arretDefinitif', nom: 'arrêt définitif (après réhabilitation)' },
           ],
           value: [],
+          optionnel: false,
         },
         {
           id: '6',
@@ -135,6 +144,7 @@ const activite: Activite = {
             { id: 'arretDefinitif', nom: 'arrêt définitif (après réhabilitation)' },
           ],
           value: [],
+          optionnel: false,
         },
       ],
     },
@@ -219,6 +229,7 @@ export const FullDeposable: StoryFn = () => (
                   dateDebut: toCaminoDate('2018-01-01'),
                   type: 'number',
                   value: 0,
+                  optionnel: false,
                 },
                 {
                   id: 'mercure',
@@ -226,6 +237,7 @@ export const FullDeposable: StoryFn = () => (
                   description: 'Masse en gramme de l’ensemble des produits contaminés envoyés en traitement au cours du trimestre.',
                   type: 'number',
                   value: 120,
+                  optionnel: false,
                 },
                 {
                   id: 'carburantDetaxe',
@@ -234,6 +246,7 @@ export const FullDeposable: StoryFn = () => (
                   dateDebut: toCaminoDate('2018-01-01'),
                   type: 'number',
                   value: 8000,
+                  optionnel: false,
                 },
               ],
             },
diff --git a/packages/ui/src/components/activite.stories.tsx b/packages/ui/src/components/activite.stories.tsx
index ff3cb8d74..fd7cab091 100644
--- a/packages/ui/src/components/activite.stories.tsx
+++ b/packages/ui/src/components/activite.stories.tsx
@@ -27,7 +27,7 @@ const activite: Activite = {
   deposable: false,
   annee: toCaminoAnnee(2022),
   periode_id: 1,
-  sections_with_value: [{ id: 'Id', nom: 'Nom de section', elements: [{ type: 'radio', id: 'radio', value: true, nom: 'Un radio button' }] }],
+  sections_with_value: [{ id: 'Id', nom: 'Nom de section', elements: [{ type: 'radio', id: 'radio', value: true, nom: 'Un radio button', optionnel: false }] }],
   activite_documents: [{ activite_document_type_id: 'ree', description: 'description', id: activiteDocumentIdValidator.parse('id1') }],
   titre: {
     nom: 'Nom du titre',
diff --git a/packages/ui/src/components/administration/permissions.stories_snapshots_Default.html b/packages/ui/src/components/administration/permissions.stories_snapshots_Default.html
index db32b4263..aa06f23d9 100644
--- a/packages/ui/src/components/administration/permissions.stories_snapshots_Default.html
+++ b/packages/ui/src/components/administration/permissions.stories_snapshots_Default.html
@@ -572,23 +572,7 @@
                 <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
               </td>
               <td class=""><span class="">Permis exclusif de recherches</span></td>
-              <td class=""><span class="">Avis de l'Office national des forêts</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-            </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Saisine des services</span></td>
+              <td class=""><span class="">Avis des services et commissions consultatives</span></td>
               <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
                   <use href="#icon-checkbox-blank"></use>
                 </svg></td>
@@ -663,22 +647,6 @@
                   <use href="#icon-checkbox"></use>
                 </svg></td>
             </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Réception d'information (expertise de l'Office national des forêts)</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-            </tr>
             <tr>
               <td class="">
                 <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
@@ -839,22 +807,6 @@
                   <use href="#icon-checkbox"></use>
                 </svg></td>
             </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Demande d'informations (expertise de l'Office national des forêts)</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-            </tr>
             <tr>
               <td class="">
                 <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
@@ -999,22 +951,6 @@
                   <use href="#icon-checkbox"></use>
                 </svg></td>
             </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Expertise de l'Office national des forêts</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-            </tr>
             <tr>
               <td class="">
                 <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
@@ -1095,54 +1031,6 @@
                   <use href="#icon-checkbox"></use>
                 </svg></td>
             </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Confirmation de l'accord du propriétaire du sol</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-            </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Avis DGTM service aménagement, urbanisme, construction, logement (AUCL)</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-            </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Avis de la caisse générale de sécurité sociale</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-            </tr>
             <tr>
               <td class="">
                 <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
@@ -1159,22 +1047,6 @@
                   <use href="#icon-checkbox-blank"></use>
                 </svg></td>
             </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Avis de l'agence régionale de santé</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-            </tr>
             <tr>
               <td class="">
                 <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
@@ -1191,22 +1063,6 @@
                   <use href="#icon-checkbox"></use>
                 </svg></td>
             </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Avis de l'état major orpaillage et pêche illicite (EMOPI)</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-            </tr>
             <tr>
               <td class="">
                 <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
@@ -1223,22 +1079,6 @@
                   <use href="#icon-checkbox"></use>
                 </svg></td>
             </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Avis de l'Office national des forêts</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-            </tr>
             <tr>
               <td class="">
                 <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
@@ -1271,70 +1111,6 @@
                   <use href="#icon-checkbox"></use>
                 </svg></td>
             </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Avis de la gendarmerie nationale</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-            </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Avis de la direction régionale des finances publiques</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-            </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Avis de la direction des entreprises, de la concurrence, de la consommation, du travail et de l'emploi</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-            </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Avis DGTM service milieux naturels, biodiversité, sites et paysages (MNBST)</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-            </tr>
             <tr>
               <td class="">
                 <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
@@ -1356,25 +1132,9 @@
                 <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
               </td>
               <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Avis de la direction d'alimentation de l'agriculture et de la forêt</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
+              <td class=""><span class="">Avis des services et commissions consultatives</span></td>
               <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
-                </svg></td>
-            </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation d'exploitation</span></td>
-              <td class=""><span class="">Avis de direction régionale des affaires culturelles</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox"></use>
+                  <use href="#icon-checkbox-blank"></use>
                 </svg></td>
               <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
                   <use href="#icon-checkbox"></use>
@@ -1399,22 +1159,6 @@
                   <use href="#icon-checkbox-blank"></use>
                 </svg></td>
             </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation de recherches</span></td>
-              <td class=""><span class="">Réception d'information (expertise de l'Office national des forêts)</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-            </tr>
             <tr>
               <td class="">
                 <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
@@ -1447,22 +1191,6 @@
                   <use href="#icon-checkbox-blank"></use>
                 </svg></td>
             </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation de recherches</span></td>
-              <td class=""><span class="">Réception d'information (avis de l'Office national des forêts)</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-            </tr>
             <tr>
               <td class="">
                 <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
@@ -1495,22 +1223,6 @@
                   <use href="#icon-checkbox-blank"></use>
                 </svg></td>
             </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation de recherches</span></td>
-              <td class=""><span class="">Demande d'informations (expertise de l'Office national des forêts)</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-            </tr>
             <tr>
               <td class="">
                 <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
@@ -1543,22 +1255,6 @@
                   <use href="#icon-checkbox-blank"></use>
                 </svg></td>
             </tr>
-            <tr>
-              <td class="">
-                <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
-              </td>
-              <td class=""><span class="">Autorisation de recherches</span></td>
-              <td class=""><span class="">Demande d'informations (avis de l'Office national des forêts)</span></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-              <td class=""><svg style="display: block;" xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#666" class="">
-                  <use href="#icon-checkbox-blank"></use>
-                </svg></td>
-            </tr>
             <tr>
               <td class="">
                 <p class="fr-tag fr-tag--md mono" title="Domaine minéraux et métaux" aria-label="Domaine minéraux et métaux" style="min-width: 2rem; color: black;">M</p>
diff --git a/packages/ui/src/components/demarche/demarche-etape.stories.tsx b/packages/ui/src/components/demarche/demarche-etape.stories.tsx
index 3d6dbd1bc..ab8637fdc 100644
--- a/packages/ui/src/components/demarche/demarche-etape.stories.tsx
+++ b/packages/ui/src/components/demarche/demarche-etape.stories.tsx
@@ -6,11 +6,11 @@ import { Entreprise, EtapeEntrepriseDocument, entrepriseDocumentIdValidator, ent
 import { titreSlugValidator } from 'camino-common/src/validators/titres'
 import { action } from '@storybook/addon-actions'
 import { testBlankUser } from 'camino-common/src/tests-utils'
-import { EtapeDocument, etapeDocumentIdValidator, etapeIdValidator, etapeSlugValidator } from 'camino-common/src/etape'
+import { ETAPE_IS_BROUILLON, ETAPE_IS_NOT_BROUILLON, EtapeDocument, etapeDocumentIdValidator, etapeIdValidator, etapeSlugValidator } from 'camino-common/src/etape'
 import { DOCUMENTS_TYPES_IDS } from 'camino-common/src/static/documentsTypes'
 import { ApiClient } from '@/api/api-client'
 import { FeatureMultiPolygon } from 'camino-common/src/perimetre'
-import { km2Validator } from 'camino-common/src/number'
+import { ZERO_KM2, km2Validator } from 'camino-common/src/number'
 import { CaminoRouter } from '@/typings/vue-router'
 
 const meta: Meta = {
@@ -185,6 +185,7 @@ export const NoSnapshotDemande: StoryFn = () => (
       titulaireIds: [entrepriseIdValidator.parse('titulaire1'), entrepriseIdValidator.parse('titulaire2')],
       administrationsLocales: [],
       sdom_zones: [],
+      communes: [],
       etapes: [],
     }}
     user={{ ...testBlankUser, role: 'super' }}
@@ -197,7 +198,7 @@ export const NoSnapshotDemande: StoryFn = () => (
       slug: etapeSlugValidator.parse('etape-slug'),
       etape_type_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeTypeId,
       etape_statut_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeStatutId,
-      is_brouillon: false,
+      is_brouillon: ETAPE_IS_NOT_BROUILLON,
       date,
 
       fondamentale: {
@@ -292,9 +293,10 @@ export const NoSnapshotDemande: StoryFn = () => (
           secteurs_maritimes: [],
         },
       },
-      sections_with_values: [{ id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: true, nom: 'Mécanisation' }], nom: 'Arm' }],
+      sections_with_values: [{ id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: true, nom: 'Mécanisation', optionnel: false }], nom: 'Arm' }],
       etape_documents: [],
       entreprises_documents: [],
+      avis_documents: [],
     }}
   />
 )
@@ -307,6 +309,7 @@ export const DemandeMultipleEntreprisesDocuments: StoryFn = () => (
       titulaireIds: [entrepriseIdValidator.parse('titulaire1'), entrepriseIdValidator.parse('titulaire2')],
       administrationsLocales: [],
       sdom_zones: [],
+      communes: [],
       etapes: [],
     }}
     user={{ ...testBlankUser, role: 'super' }}
@@ -318,7 +321,7 @@ export const DemandeMultipleEntreprisesDocuments: StoryFn = () => (
       slug: etapeSlugValidator.parse('etape-slug'),
       etape_type_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeTypeId,
       etape_statut_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeStatutId,
-      is_brouillon: false,
+      is_brouillon: ETAPE_IS_NOT_BROUILLON,
       date,
       notes: 'Super note',
       fondamentale: {
@@ -331,7 +334,7 @@ export const DemandeMultipleEntreprisesDocuments: StoryFn = () => (
         perimetre: null,
       },
       sections_with_values: [
-        { id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: true, nom: 'Mécanisation' }], nom: 'Arm' },
+        { id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: true, nom: 'Mécanisation', optionnel: false }], nom: 'Arm' },
         {
           id: 'odlep',
           elements: [
@@ -364,6 +367,7 @@ export const DemandeMultipleEntreprisesDocuments: StoryFn = () => (
           description: 'Une description',
         },
       ],
+      avis_documents: [],
     }}
   />
 )
@@ -371,7 +375,7 @@ export const DemandeMultipleEntreprisesDocuments: StoryFn = () => (
 export const DemandeNoMap: StoryFn = () => (
   <DemarcheEtape
     titre={{ titreStatutId: 'val', typeId: 'arm', nom: 'nom du titre', slug: titreSlug }}
-    demarche={{ demarche_type_id: 'oct', titulaireIds: [entrepriseIdValidator.parse('titulaire1')], administrationsLocales: [], sdom_zones: [], etapes: [] }}
+    demarche={{ demarche_type_id: 'oct', titulaireIds: [entrepriseIdValidator.parse('titulaire1')], administrationsLocales: [], sdom_zones: [], etapes: [], communes: [] }}
     user={{ ...testBlankUser, role: 'super' }}
     router={routerPushMock}
     apiClient={apiClient}
@@ -382,7 +386,7 @@ export const DemandeNoMap: StoryFn = () => (
       slug: etapeSlugValidator.parse('etape-slug'),
       etape_type_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeTypeId,
       etape_statut_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeStatutId,
-      is_brouillon: false,
+      is_brouillon: ETAPE_IS_NOT_BROUILLON,
       date,
       fondamentale: {
         date_debut: toCaminoDate('2023-10-25'),
@@ -394,7 +398,7 @@ export const DemandeNoMap: StoryFn = () => (
         perimetre: null,
       },
       sections_with_values: [
-        { id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: true, nom: 'Mécanisation' }], nom: 'Arm' },
+        { id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: true, nom: 'Mécanisation', optionnel: false }], nom: 'Arm' },
         {
           id: 'odlep',
           elements: [
@@ -411,6 +415,7 @@ export const DemandeNoMap: StoryFn = () => (
       ],
       etape_documents: documents,
       entreprises_documents: entrepriseDocuments,
+      avis_documents: [],
     }}
   />
 )
@@ -418,7 +423,7 @@ export const DemandeNoMap: StoryFn = () => (
 export const DemandeNonDeposable: StoryFn = () => (
   <DemarcheEtape
     titre={{ titreStatutId: 'val', typeId: 'arm', nom: 'nom du titre', slug: titreSlug }}
-    demarche={{ demarche_type_id: 'oct', titulaireIds: [], administrationsLocales: [], sdom_zones: [], etapes: [] }}
+    demarche={{ demarche_type_id: 'oct', titulaireIds: [], administrationsLocales: [], sdom_zones: [], etapes: [], communes: [] }}
     user={{ ...testBlankUser, role: 'super' }}
     router={routerPushMock}
     apiClient={apiClient}
@@ -429,7 +434,7 @@ export const DemandeNonDeposable: StoryFn = () => (
       notes: null,
       etape_type_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeTypeId,
       etape_statut_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeStatutId,
-      is_brouillon: true,
+      is_brouillon: ETAPE_IS_BROUILLON,
       date,
 
       fondamentale: {
@@ -441,9 +446,10 @@ export const DemandeNonDeposable: StoryFn = () => (
         amodiataireIds: [entrepriseIdValidator.parse('amodiataire1')],
         perimetre: null,
       },
-      sections_with_values: [{ id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: true, nom: 'Mécanisation' }], nom: 'Arm' }],
+      sections_with_values: [{ id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: true, nom: 'Mécanisation', optionnel: false }], nom: 'Arm' }],
       etape_documents: [],
       entreprises_documents: [],
+      avis_documents: [],
     }}
   />
 )
@@ -451,7 +457,7 @@ export const DemandeNonDeposable: StoryFn = () => (
 export const DemandeNonSupprimable: StoryFn = () => (
   <DemarcheEtape
     titre={{ titreStatutId: 'val', typeId: 'arm', nom: 'nom du titre', slug: titreSlug }}
-    demarche={{ demarche_type_id: 'oct', titulaireIds: [entrepriseIdValidator.parse('titulaire1')], administrationsLocales: [], sdom_zones: [], etapes: [] }}
+    demarche={{ demarche_type_id: 'oct', titulaireIds: [entrepriseIdValidator.parse('titulaire1')], administrationsLocales: [], sdom_zones: [], communes: [], etapes: [] }}
     user={{
       ...testBlankUser,
       role: 'entreprise',
@@ -471,7 +477,7 @@ export const DemandeNonSupprimable: StoryFn = () => (
       notes: null,
       etape_type_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeTypeId,
       etape_statut_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeStatutId,
-      is_brouillon: true,
+      is_brouillon: ETAPE_IS_BROUILLON,
       date,
       fondamentale: {
         date_debut: toCaminoDate('2023-10-25'),
@@ -482,9 +488,10 @@ export const DemandeNonSupprimable: StoryFn = () => (
         amodiataireIds: [entrepriseIdValidator.parse('amodiataire1')],
         perimetre: null,
       },
-      sections_with_values: [{ id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: true, nom: 'Mécanisation' }], nom: 'Arm' }],
+      sections_with_values: [{ id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: true, nom: 'Mécanisation', optionnel: false }], nom: 'Arm' }],
       etape_documents: [],
       entreprises_documents: [],
+      avis_documents: [],
     }}
   />
 )
@@ -528,7 +535,7 @@ const demandeArmMecaniseNonDeposable: FeatureMultiPolygon = {
 export const DemandeArmMecaniseNonDeposable: StoryFn = () => (
   <DemarcheEtape
     titre={{ titreStatutId: 'val', typeId: 'arm', nom: 'nom du titre', slug: titreSlug }}
-    demarche={{ demarche_type_id: 'oct', titulaireIds: [entrepriseIdValidator.parse('titulaire1')], administrationsLocales: [], sdom_zones: [], etapes: [] }}
+    demarche={{ demarche_type_id: 'oct', titulaireIds: [entrepriseIdValidator.parse('titulaire1')], administrationsLocales: [], sdom_zones: [], etapes: [], communes: [] }}
     user={{ ...testBlankUser, role: 'super' }}
     router={routerPushMock}
     apiClient={apiClient}
@@ -540,7 +547,7 @@ export const DemandeArmMecaniseNonDeposable: StoryFn = () => (
       notes: null,
       etape_type_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeTypeId,
       etape_statut_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeStatutId,
-      is_brouillon: true,
+      is_brouillon: ETAPE_IS_BROUILLON,
       date,
 
       fondamentale: {
@@ -565,9 +572,10 @@ export const DemandeArmMecaniseNonDeposable: StoryFn = () => (
           secteurs_maritimes: [],
         },
       },
-      sections_with_values: [{ id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: true, nom: 'Mécanisation' }], nom: 'Arm' }],
+      sections_with_values: [{ id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: true, nom: 'Mécanisation', optionnel: false }], nom: 'Arm' }],
       etape_documents: documentsDemande,
       entreprises_documents: entrepriseDocumentsDemande,
+      avis_documents: [],
     }}
   />
 )
@@ -611,7 +619,7 @@ const demandeArmMecaniseDeposable: FeatureMultiPolygon = {
 export const DemandeArmMecaniseDeposable: StoryFn = () => (
   <DemarcheEtape
     titre={{ titreStatutId: 'val', typeId: 'arm', nom: 'nom du titre', slug: titreSlug }}
-    demarche={{ demarche_type_id: 'oct', titulaireIds: [entrepriseIdValidator.parse('titulaire1')], administrationsLocales: [], sdom_zones: [], etapes: [] }}
+    demarche={{ demarche_type_id: 'oct', titulaireIds: [entrepriseIdValidator.parse('titulaire1')], administrationsLocales: [], sdom_zones: [], etapes: [], communes: [] }}
     user={{ ...testBlankUser, role: 'super' }}
     router={routerPushMock}
     apiClient={apiClient}
@@ -623,7 +631,7 @@ export const DemandeArmMecaniseDeposable: StoryFn = () => (
       notes: null,
       etape_type_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeTypeId,
       etape_statut_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeStatutId,
-      is_brouillon: true,
+      is_brouillon: ETAPE_IS_BROUILLON,
       date,
 
       fondamentale: {
@@ -648,13 +656,14 @@ export const DemandeArmMecaniseDeposable: StoryFn = () => (
           secteurs_maritimes: [],
         },
       },
-      sections_with_values: [{ id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: true, nom: 'Mécanisation' }], nom: 'Arm' }],
+      sections_with_values: [{ id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: true, nom: 'Mécanisation', optionnel: false }], nom: 'Arm' }],
       etape_documents: [
         ...documentsDemande,
         { id: etapeDocumentIdValidator.parse('idDoe'), etape_document_type_id: 'doe', public_lecture: true, entreprises_lecture: true, description: null },
         { id: etapeDocumentIdValidator.parse('idDep'), etape_document_type_id: 'dep', public_lecture: true, entreprises_lecture: true, description: null },
       ],
       entreprises_documents: entrepriseDocumentsDemande,
+      avis_documents: [],
     }}
   />
 )
@@ -698,7 +707,7 @@ const demandeArmNonMecaniseDeposable: FeatureMultiPolygon = {
 export const DemandeArmNonMecaniseDeposable: StoryFn = () => (
   <DemarcheEtape
     titre={{ titreStatutId: 'val', typeId: 'arm', nom: 'nom du titre', slug: titreSlug }}
-    demarche={{ demarche_type_id: 'oct', titulaireIds: [entrepriseIdValidator.parse('titulaire1')], administrationsLocales: [], sdom_zones: [], etapes: [] }}
+    demarche={{ demarche_type_id: 'oct', titulaireIds: [entrepriseIdValidator.parse('titulaire1')], administrationsLocales: [], sdom_zones: [], etapes: [], communes: [] }}
     user={{ ...testBlankUser, role: 'super' }}
     router={routerPushMock}
     apiClient={apiClient}
@@ -710,7 +719,7 @@ export const DemandeArmNonMecaniseDeposable: StoryFn = () => (
       notes: null,
       etape_type_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeTypeId,
       etape_statut_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeStatutId,
-      is_brouillon: true,
+      is_brouillon: ETAPE_IS_BROUILLON,
       date,
 
       fondamentale: {
@@ -735,9 +744,10 @@ export const DemandeArmNonMecaniseDeposable: StoryFn = () => (
           secteurs_maritimes: [],
         },
       },
-      sections_with_values: [{ id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: false, nom: 'Mécanisation' }], nom: 'Arm' }],
+      sections_with_values: [{ id: 'arm', elements: [{ id: 'mecanise', type: 'radio', value: false, nom: 'Mécanisation', optionnel: false }], nom: 'Arm' }],
       etape_documents: documentsDemande,
       entreprises_documents: entrepriseDocumentsDemande,
+      avis_documents: [],
     }}
   />
 )
@@ -745,7 +755,7 @@ export const DemandeArmNonMecaniseDeposable: StoryFn = () => (
 export const Depot: StoryFn = () => (
   <DemarcheEtape
     titre={{ titreStatutId: 'val', typeId: 'arm', nom: 'nom du titre', slug: titreSlug }}
-    demarche={{ demarche_type_id: 'oct', titulaireIds: [entrepriseIdValidator.parse('titulaire1')], administrationsLocales: [], sdom_zones: [], etapes: [] }}
+    demarche={{ demarche_type_id: 'oct', titulaireIds: [entrepriseIdValidator.parse('titulaire1')], administrationsLocales: [], sdom_zones: [], etapes: [], communes: [] }}
     router={routerPushMock}
     user={{ ...testBlankUser, role: 'super' }}
     etape={{
@@ -754,11 +764,12 @@ export const Depot: StoryFn = () => (
       notes: null,
       etape_type_id: EtapesTypesEtapesStatuts.depotDeLaDemande.FAIT.etapeTypeId,
       etape_statut_id: EtapesTypesEtapesStatuts.depotDeLaDemande.FAIT.etapeStatutId,
-      is_brouillon: false,
+      is_brouillon: ETAPE_IS_NOT_BROUILLON,
       date,
       sections_with_values: [],
       etape_documents: documents,
       entreprises_documents: entrepriseDocuments,
+      avis_documents: [],
     }}
     apiClient={apiClient}
     entreprises={entreprises}
@@ -768,21 +779,22 @@ export const Depot: StoryFn = () => (
 export const AvisDefavorable: StoryFn = () => (
   <DemarcheEtape
     titre={{ titreStatutId: 'val', typeId: 'arm', nom: 'nom du titre', slug: titreSlug }}
-    demarche={{ demarche_type_id: 'oct', titulaireIds: [], administrationsLocales: [], sdom_zones: [], etapes: [] }}
+    demarche={{ demarche_type_id: 'oct', titulaireIds: [], administrationsLocales: [], sdom_zones: [], etapes: [], communes: [] }}
     user={{ ...testBlankUser, role: 'super' }}
     router={routerPushMock}
     etape={{
       id: etapeIdValidator.parse('etapeId'),
       slug: etapeSlugValidator.parse('etape-slug'),
       notes: null,
-      etape_type_id: EtapesTypesEtapesStatuts.avisDGTMServiceAmenagementUrbanismeConstructionLogement_AUCL_.DEFAVORABLE.etapeTypeId,
-      etape_statut_id: EtapesTypesEtapesStatuts.avisDGTMServiceAmenagementUrbanismeConstructionLogement_AUCL_.DEFAVORABLE.etapeStatutId,
-      is_brouillon: false,
+      etape_type_id: EtapesTypesEtapesStatuts.avisDuConseilGeneralDeLeconomie_CGE_.DEFAVORABLE.etapeTypeId,
+      etape_statut_id: EtapesTypesEtapesStatuts.avisDuConseilGeneralDeLeconomie_CGE_.DEFAVORABLE.etapeStatutId,
+      is_brouillon: ETAPE_IS_NOT_BROUILLON,
       date,
       sections_with_values: [],
 
       etape_documents: [],
       entreprises_documents: [],
+      avis_documents: [],
     }}
     apiClient={apiClient}
     entreprises={entreprises}
@@ -810,7 +822,7 @@ const demandeAvecSeulementPerimetre: FeatureMultiPolygon = {
 export const DemandeAvecSeulementPerimetre: StoryFn = () => (
   <DemarcheEtape
     titre={{ titreStatutId: 'val', typeId: 'arm', nom: 'nom du titre', slug: titreSlug }}
-    demarche={{ demarche_type_id: 'oct', titulaireIds: [], administrationsLocales: [], sdom_zones: [], etapes: [] }}
+    demarche={{ demarche_type_id: 'oct', titulaireIds: [], administrationsLocales: [], sdom_zones: [], etapes: [], communes: [] }}
     user={{ ...testBlankUser, role: 'super' }}
     router={routerPushMock}
     apiClient={apiClient}
@@ -822,7 +834,7 @@ export const DemandeAvecSeulementPerimetre: StoryFn = () => (
       notes: null,
       etape_type_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeTypeId,
       etape_statut_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeStatutId,
-      is_brouillon: true,
+      is_brouillon: ETAPE_IS_BROUILLON,
       date,
 
       fondamentale: {
@@ -840,7 +852,7 @@ export const DemandeAvecSeulementPerimetre: StoryFn = () => (
           geojson_origine_points: null,
           geojson4326_forages: null,
           geojson_origine_forages: null,
-          surface: km2Validator.parse(0),
+          surface: ZERO_KM2,
           communes: [],
           sdom_zones: [],
           forets: [],
@@ -850,6 +862,7 @@ export const DemandeAvecSeulementPerimetre: StoryFn = () => (
       sections_with_values: [],
       etape_documents: [],
       entreprises_documents: [],
+      avis_documents: [],
     }}
   />
 )
@@ -875,7 +888,7 @@ const demandeAvecGrosseNote: FeatureMultiPolygon = {
 export const DemandeAvecGrosseNote: StoryFn = () => (
   <DemarcheEtape
     titre={{ titreStatutId: 'val', typeId: 'arm', nom: 'nom du titre', slug: titreSlug }}
-    demarche={{ demarche_type_id: 'oct', titulaireIds: [], administrationsLocales: [], sdom_zones: [], etapes: [] }}
+    demarche={{ demarche_type_id: 'oct', titulaireIds: [], administrationsLocales: [], sdom_zones: [], etapes: [], communes: [] }}
     user={{ ...testBlankUser, role: 'super' }}
     router={routerPushMock}
     apiClient={apiClient}
@@ -887,7 +900,7 @@ export const DemandeAvecGrosseNote: StoryFn = () => (
       notes: 'Ceci est une énorme note sur plusieurs lignes.\n Une seconde ligne.\n Incertitudes: \n * date \n * substances \n * titulaireIds',
       etape_type_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeTypeId,
       etape_statut_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeStatutId,
-      is_brouillon: true,
+      is_brouillon: ETAPE_IS_BROUILLON,
       date,
 
       fondamentale: {
@@ -905,7 +918,7 @@ export const DemandeAvecGrosseNote: StoryFn = () => (
           geojson_origine_points: null,
           geojson4326_forages: null,
           geojson_origine_forages: null,
-          surface: km2Validator.parse(0),
+          surface: ZERO_KM2,
           communes: [],
           sdom_zones: [],
           forets: [],
@@ -915,6 +928,7 @@ export const DemandeAvecGrosseNote: StoryFn = () => (
       sections_with_values: [],
       etape_documents: [],
       entreprises_documents: [],
+      avis_documents: [],
     }}
   />
 )
@@ -933,9 +947,10 @@ export const AxmDeposableAvecDaeEtAsl: StoryFn = () => (
           id: etapeIdValidator.parse('idDae'),
           entreprises_documents: [],
           etape_documents: [],
+          avis_documents: [],
           etape_statut_id: 'exe',
           etape_type_id: 'dae',
-          is_brouillon: false,
+          is_brouillon: ETAPE_IS_NOT_BROUILLON,
           notes: null,
           sections_with_values: [],
           ordre: 1,
@@ -946,15 +961,17 @@ export const AxmDeposableAvecDaeEtAsl: StoryFn = () => (
           id: etapeIdValidator.parse('idAsl'),
           entreprises_documents: [],
           etape_documents: [],
+          avis_documents: [],
           etape_statut_id: 'exe',
           etape_type_id: 'asl',
-          is_brouillon: false,
+          is_brouillon: ETAPE_IS_NOT_BROUILLON,
           notes: null,
           sections_with_values: [],
           ordre: 2,
           slug: etapeSlugValidator.parse('slug-asl'),
         },
       ],
+      communes: [],
     }}
     user={{ ...testBlankUser, role: 'entreprise', entreprises: [{ id: entrepriseIdValidator.parse('titulaire1'), nom: 'nom entreprise' }] }}
     router={routerPushMock}
@@ -967,7 +984,7 @@ export const AxmDeposableAvecDaeEtAsl: StoryFn = () => (
       notes: '',
       etape_type_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeTypeId,
       etape_statut_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeStatutId,
-      is_brouillon: true,
+      is_brouillon: ETAPE_IS_BROUILLON,
       date,
 
       fondamentale: {
@@ -985,7 +1002,7 @@ export const AxmDeposableAvecDaeEtAsl: StoryFn = () => (
           geojson_origine_points: null,
           geojson4326_forages: null,
           geojson_origine_forages: null,
-          surface: km2Validator.parse(0),
+          surface: ZERO_KM2,
           communes: [],
           sdom_zones: [],
           forets: [],
@@ -1041,6 +1058,7 @@ export const AxmDeposableAvecDaeEtAsl: StoryFn = () => (
           id: entrepriseDocumentIdValidator.parse('iddeb'),
         },
       ],
+      avis_documents: [],
     }}
   />
 )
@@ -1048,7 +1066,7 @@ export const AxmDeposableAvecDaeEtAsl: StoryFn = () => (
 export const DemandeAvecForage: StoryFn = () => (
   <DemarcheEtape
     titre={{ titreStatutId: 'val', typeId: 'pxg', nom: 'nom du titre', slug: titreSlug }}
-    demarche={{ demarche_type_id: 'oct', titulaireIds: [], administrationsLocales: [], sdom_zones: [], etapes: [] }}
+    demarche={{ demarche_type_id: 'oct', titulaireIds: [], administrationsLocales: [], sdom_zones: [], etapes: [], communes: [] }}
     user={{ ...testBlankUser, role: 'super' }}
     router={routerPushMock}
     entreprises={entreprises}
@@ -1060,7 +1078,7 @@ export const DemandeAvecForage: StoryFn = () => (
       notes: '',
       etape_type_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeTypeId,
       etape_statut_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeStatutId,
-      is_brouillon: true,
+      is_brouillon: ETAPE_IS_BROUILLON,
       date,
 
       fondamentale: {
@@ -1078,7 +1096,7 @@ export const DemandeAvecForage: StoryFn = () => (
           geojson_origine_points: null,
           geojson4326_forages: null,
           geojson_origine_forages: null,
-          surface: km2Validator.parse(0),
+          surface: ZERO_KM2,
           communes: [],
           sdom_zones: [],
           forets: [],
@@ -1091,13 +1109,14 @@ export const DemandeAvecForage: StoryFn = () => (
           id: 'pxg',
           nom: "Propriétés du permis d'exploitation",
           elements: [
-            { id: 'debit', nom: 'Débit volumique maximal de pompage', type: 'number', value: 3, uniteId: 'm3h' },
-            { id: 'volume', nom: 'Volume maximum de pompage', type: 'number', value: 8, uniteId: 'm3x' },
+            { id: 'debit', nom: 'Débit volumique maximal de pompage', type: 'number', value: 3, uniteId: 'm3h', optionnel: false },
+            { id: 'volume', nom: 'Volume maximum de pompage', type: 'number', value: 8, uniteId: 'm3x', optionnel: false },
           ],
         },
       ],
       etape_documents: [],
       entreprises_documents: [],
+      avis_documents: [],
     }}
   />
 )
diff --git a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_AvisDefavorable.html b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_AvisDefavorable.html
index 3ab3e530b..1eb55ff4b 100644
--- a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_AvisDefavorable.html
+++ b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_AvisDefavorable.html
@@ -2,7 +2,7 @@
   <div class="_sticky_964a6e fr-pt-1w">
     <div style="display: flex; justify-content: space-between; align-items: center;">
       <div style="display: flex;">
-        <div class="fr-text--lg fr-mb-0" style="font-weight: 500;">Avis DGTM service aménagement, urbanisme, construction, logement (AUCL)</div>
+        <div class="fr-text--lg fr-mb-0" style="font-weight: 500;">Avis du conseil général de l'économie (CGE)</div>
         <!---->
       </div>
       <div style="display: flex;">
@@ -20,4 +20,5 @@
   <!---->
   <!---->
   <!---->
+  <!---->
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_AxmDeposableAvecDaeEtAsl.html b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_AxmDeposableAvecDaeEtAsl.html
index ed83872f3..efb55b882 100644
--- a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_AxmDeposableAvecDaeEtAsl.html
+++ b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_AxmDeposableAvecDaeEtAsl.html
@@ -5,7 +5,7 @@
         <div class="fr-text--lg fr-mb-0" style="font-weight: 500;">Demande</div>
         <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-ml-1w fr-badge--new fr-badge--no-icon fr-ml-1w" title="Brouillon de l'étape demande" aria-label="Brouillon de l'étape demande">Brouillon</p>
       </div>
-      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" title="Déposer la demande" aria-label="Déposer la demande" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a>
+      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" disabled="" title="Déposer l'étape" aria-label="Déposer l'étape" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a>
         <!---->
         <div style="display: flex;">
           <!----><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-file-download-line" title="Télécharger l’ensemble des documents de l'étape &quot;demande&quot; dans un fichier .zip" aria-label="Télécharger l’ensemble des documents de l'étape &quot;demande&quot; dans un fichier .zip" type="button">
@@ -288,4 +288,5 @@
   </div>
   <!---->
   <!---->
+  <!---->
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeArmMecaniseDeposable.html b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeArmMecaniseDeposable.html
index 67ea0a619..3d3a1964b 100644
--- a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeArmMecaniseDeposable.html
+++ b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeArmMecaniseDeposable.html
@@ -5,7 +5,7 @@
         <div class="fr-text--lg fr-mb-0" style="font-weight: 500;">Demande</div>
         <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-ml-1w fr-badge--new fr-badge--no-icon fr-ml-1w" title="Brouillon de l'étape demande" aria-label="Brouillon de l'étape demande">Brouillon</p>
       </div>
-      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" title="Déposer la demande" aria-label="Déposer la demande" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-delete-bin-line fr-mr-1v" title="Supprimer l’étape" aria-label="Supprimer l’étape" type="button">
+      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" disabled="" title="Déposer l'étape" aria-label="Déposer l'étape" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-delete-bin-line fr-mr-1v" title="Supprimer l’étape" aria-label="Supprimer l’étape" type="button">
           <!---->
         </button>
         <div style="display: flex;">
@@ -309,4 +309,5 @@
   </div>
   <!---->
   <!---->
+  <!---->
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeArmMecaniseNonDeposable.html b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeArmMecaniseNonDeposable.html
index 8ceb73926..67aa76833 100644
--- a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeArmMecaniseNonDeposable.html
+++ b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeArmMecaniseNonDeposable.html
@@ -5,7 +5,7 @@
         <div class="fr-text--lg fr-mb-0" style="font-weight: 500;">Demande</div>
         <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-ml-1w fr-badge--new fr-badge--no-icon fr-ml-1w" title="Brouillon de l'étape demande" aria-label="Brouillon de l'étape demande">Brouillon</p>
       </div>
-      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" disabled="" title="Déposer la demande" aria-label="Déposer la demande" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-delete-bin-line fr-mr-1v" title="Supprimer l’étape" aria-label="Supprimer l’étape" type="button">
+      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" disabled="" title="Déposer l'étape" aria-label="Déposer l'étape" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-delete-bin-line fr-mr-1v" title="Supprimer l’étape" aria-label="Supprimer l’étape" type="button">
           <!---->
         </button>
         <div style="display: flex;">
@@ -295,4 +295,5 @@
   </div>
   <!---->
   <!---->
+  <!---->
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeArmNonMecaniseDeposable.html b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeArmNonMecaniseDeposable.html
index 84d1b520f..2bd06492e 100644
--- a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeArmNonMecaniseDeposable.html
+++ b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeArmNonMecaniseDeposable.html
@@ -5,7 +5,7 @@
         <div class="fr-text--lg fr-mb-0" style="font-weight: 500;">Demande</div>
         <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-ml-1w fr-badge--new fr-badge--no-icon fr-ml-1w" title="Brouillon de l'étape demande" aria-label="Brouillon de l'étape demande">Brouillon</p>
       </div>
-      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" title="Déposer la demande" aria-label="Déposer la demande" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-delete-bin-line fr-mr-1v" title="Supprimer l’étape" aria-label="Supprimer l’étape" type="button">
+      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" disabled="" title="Déposer l'étape" aria-label="Déposer l'étape" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-delete-bin-line fr-mr-1v" title="Supprimer l’étape" aria-label="Supprimer l’étape" type="button">
           <!---->
         </button>
         <div style="display: flex;">
@@ -295,4 +295,5 @@
   </div>
   <!---->
   <!---->
+  <!---->
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeAvecForage.html b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeAvecForage.html
index b1d591b15..e49a20305 100644
--- a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeAvecForage.html
+++ b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeAvecForage.html
@@ -5,7 +5,7 @@
         <div class="fr-text--lg fr-mb-0" style="font-weight: 500;">Demande</div>
         <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-ml-1w fr-badge--new fr-badge--no-icon fr-ml-1w" title="Brouillon de l'étape demande" aria-label="Brouillon de l'étape demande">Brouillon</p>
       </div>
-      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" title="Déposer la demande" aria-label="Déposer la demande" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-delete-bin-line fr-mr-1v" title="Supprimer l’étape" aria-label="Supprimer l’étape" type="button">
+      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" disabled="" title="Déposer l'étape" aria-label="Déposer l'étape" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-delete-bin-line fr-mr-1v" title="Supprimer l’étape" aria-label="Supprimer l’étape" type="button">
           <!---->
         </button>
         <!---->
@@ -134,4 +134,5 @@
   <!---->
   <!---->
   <!---->
+  <!---->
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeAvecGrosseNote.html b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeAvecGrosseNote.html
index b9c5b39c4..d482596ec 100644
--- a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeAvecGrosseNote.html
+++ b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeAvecGrosseNote.html
@@ -5,7 +5,7 @@
         <div class="fr-text--lg fr-mb-0" style="font-weight: 500;">Demande</div>
         <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-ml-1w fr-badge--new fr-badge--no-icon fr-ml-1w" title="Brouillon de l'étape demande" aria-label="Brouillon de l'étape demande">Brouillon</p>
       </div>
-      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" disabled="" title="Déposer la demande" aria-label="Déposer la demande" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-delete-bin-line fr-mr-1v" title="Supprimer l’étape" aria-label="Supprimer l’étape" type="button">
+      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" disabled="" title="Déposer l'étape" aria-label="Déposer l'étape" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-delete-bin-line fr-mr-1v" title="Supprimer l’étape" aria-label="Supprimer l’étape" type="button">
           <!---->
         </button>
         <!---->
@@ -127,4 +127,5 @@
   <!---->
   <!---->
   <!---->
+  <!---->
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeAvecSeulementPerimetre.html b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeAvecSeulementPerimetre.html
index 10e0d6efa..0cf64ef59 100644
--- a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeAvecSeulementPerimetre.html
+++ b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeAvecSeulementPerimetre.html
@@ -5,7 +5,7 @@
         <div class="fr-text--lg fr-mb-0" style="font-weight: 500;">Demande</div>
         <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-ml-1w fr-badge--new fr-badge--no-icon fr-ml-1w" title="Brouillon de l'étape demande" aria-label="Brouillon de l'étape demande">Brouillon</p>
       </div>
-      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" disabled="" title="Déposer la demande" aria-label="Déposer la demande" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-delete-bin-line fr-mr-1v" title="Supprimer l’étape" aria-label="Supprimer l’étape" type="button">
+      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" disabled="" title="Déposer l'étape" aria-label="Déposer l'étape" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-delete-bin-line fr-mr-1v" title="Supprimer l’étape" aria-label="Supprimer l’étape" type="button">
           <!---->
         </button>
         <!---->
@@ -106,4 +106,5 @@
   <!---->
   <!---->
   <!---->
+  <!---->
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeMultipleEntreprisesDocuments.html b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeMultipleEntreprisesDocuments.html
index be4652b4e..da3eaaeda 100644
--- a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeMultipleEntreprisesDocuments.html
+++ b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeMultipleEntreprisesDocuments.html
@@ -134,4 +134,5 @@
   </div>
   <!---->
   <!---->
+  <!---->
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeNoMap.html b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeNoMap.html
index 9cda4698c..635b0a8e1 100644
--- a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeNoMap.html
+++ b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeNoMap.html
@@ -119,4 +119,5 @@
   </div>
   <!---->
   <!---->
+  <!---->
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeNonDeposable.html b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeNonDeposable.html
index 7ea4b78fc..823c04196 100644
--- a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeNonDeposable.html
+++ b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeNonDeposable.html
@@ -5,7 +5,7 @@
         <div class="fr-text--lg fr-mb-0" style="font-weight: 500;">Demande</div>
         <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-ml-1w fr-badge--new fr-badge--no-icon fr-ml-1w" title="Brouillon de l'étape demande" aria-label="Brouillon de l'étape demande">Brouillon</p>
       </div>
-      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" disabled="" title="Déposer la demande" aria-label="Déposer la demande" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-delete-bin-line fr-mr-1v" title="Supprimer l’étape" aria-label="Supprimer l’étape" type="button">
+      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" disabled="" title="Déposer l'étape" aria-label="Déposer l'étape" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-delete-bin-line fr-mr-1v" title="Supprimer l’étape" aria-label="Supprimer l’étape" type="button">
           <!---->
         </button>
         <!---->
@@ -64,4 +64,5 @@
   <!---->
   <!---->
   <!---->
+  <!---->
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeNonSupprimable.html b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeNonSupprimable.html
index 26333c9bf..0a4c7ae6a 100644
--- a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeNonSupprimable.html
+++ b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_DemandeNonSupprimable.html
@@ -5,7 +5,7 @@
         <div class="fr-text--lg fr-mb-0" style="font-weight: 500;">Demande</div>
         <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-ml-1w fr-badge--new fr-badge--no-icon fr-ml-1w" title="Brouillon de l'étape demande" aria-label="Brouillon de l'étape demande">Brouillon</p>
       </div>
-      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" disabled="" title="Déposer la demande" aria-label="Déposer la demande" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a>
+      <div style="display: flex;"><button class="fr-btn fr-btn--primary fr-btn--md fr-mr-1v" disabled="" title="Déposer l'étape" aria-label="Déposer l'étape" type="button">Déposer</button><a href="/mocked-href" title="Modifier l’étape" class="fr-mr-1v fr-btn fr-btn--secondary fr-icon-pencil-line" aria-label="Modifier l’étape">Modifier l’étape</a>
         <!---->
         <!---->
       </div>
@@ -63,4 +63,5 @@
   <!---->
   <!---->
   <!---->
+  <!---->
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_Depot.html b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_Depot.html
index 472fc71ec..82b51ce22 100644
--- a/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_Depot.html
+++ b/packages/ui/src/components/demarche/demarche-etape.stories_snapshots_Depot.html
@@ -70,4 +70,5 @@
   </div>
   <!---->
   <!---->
+  <!---->
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/demarche/demarche-etape.tsx b/packages/ui/src/components/demarche/demarche-etape.tsx
index 9605fa7be..d46c5cdda 100644
--- a/packages/ui/src/components/demarche/demarche-etape.tsx
+++ b/packages/ui/src/components/demarche/demarche-etape.tsx
@@ -21,7 +21,7 @@ import { User } from 'camino-common/src/roles'
 import styles from './demarche-etape.module.css'
 import { DsfrButton, DsfrButtonIcon, DsfrLink } from '../_ui/dsfr-button'
 import { PureDownloads } from '../_common/downloads'
-import { canDeleteEtape, canEditEtape, isEtapeDeposable } from 'camino-common/src/permissions/titres-etapes'
+import { canDeleteEtape, canDeposeEtape, canEditEtape } from 'camino-common/src/permissions/titres-etapes'
 import { AdministrationId } from 'camino-common/src/static/administrations'
 import { DemarcheTypeId } from 'camino-common/src/static/demarchesTypes'
 import { TitreStatutId } from 'camino-common/src/static/titresStatuts'
@@ -30,12 +30,16 @@ import { RemoveEtapePopup } from './remove-etape-popup'
 import { SDOMZoneId } from 'camino-common/src/static/sdom'
 import { DeposeEtapePopup } from './depose-etape-popup'
 import { ApiClient } from '@/api/api-client'
-import { TitreGetDemarche } from 'camino-common/src/titres'
+import { TitreGetDemarche, getMostRecentValuePropFromEtapeFondamentaleValide } from 'camino-common/src/titres'
 import { GetEtapeDocumentsByEtapeId, documentTypeIdComplementaireObligatoireASL, documentTypeIdComplementaireObligatoireDAE, etapeDocumentIdValidator, needAslAndDae } from 'camino-common/src/etape'
 import { Unites } from 'camino-common/src/static/unites'
 import { EntrepriseId, Entreprise } from 'camino-common/src/entreprise'
 import { Badge } from '../_ui/badge'
 import { CaminoRouter } from '@/typings/vue-router'
+import { CommuneId } from 'camino-common/src/static/communes'
+import { EtapeAvisTable } from '../etape/etape-avis'
+import { FlattenEtape } from 'camino-common/src/etape-form'
+import { getSections } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections'
 // Il ne faut pas utiliser de literal dans le 'in' il n'y aura jamais d'erreur typescript
 const fondamentalePropsName = 'fondamentale'
 
@@ -46,6 +50,7 @@ type Props = {
     administrationsLocales: AdministrationId[]
     demarche_type_id: DemarcheTypeId
     sdom_zones: SDOMZoneId[]
+    communes: CommuneId[]
     etapes: TitreGetDemarche['etapes']
   }
   titre: {
@@ -161,28 +166,75 @@ export const DemarcheEtape = defineComponent<Props>(props => {
     return null
   })
 
-  const isDeposable = computed<boolean>(() =>
-    fondamentalePropsName in props.etape
-      ? isEtapeDeposable(
-          props.user,
-          { typeId: props.titre.typeId, titreStatutId: props.titre.titreStatutId, titulaires: props.demarche.titulaireIds, administrationsLocales: props.demarche.administrationsLocales },
-          props.demarche.demarche_type_id,
-          {
-            typeId: props.etape.etape_type_id,
-            isBrouillon: props.etape.is_brouillon,
-            sectionsWithValue: props.etape.sections_with_values,
-            substances: props.etape.fondamentale.substances,
-            duree: props.etape.fondamentale.duree,
-            geojson4326Perimetre: props.etape.fondamentale.perimetre?.geojson4326_perimetre ?? null,
+  const isDeposable = computed<boolean>(() => {
+    const titulaireIds = getMostRecentValuePropFromEtapeFondamentaleValide('titulaireIds', [{ ...props.demarche, ordre: 0 }])
+    const amodiataireIds = getMostRecentValuePropFromEtapeFondamentaleValide('amodiataireIds', [{ ...props.demarche, ordre: 0 }])
+    const perimetre = getMostRecentValuePropFromEtapeFondamentaleValide('perimetre', [{ ...props.demarche, ordre: 0 }])
+    const substances = getMostRecentValuePropFromEtapeFondamentaleValide('substances', [{ ...props.demarche, ordre: 0 }])
+    const duree = getMostRecentValuePropFromEtapeFondamentaleValide('duree', [{ ...props.demarche, ordre: 0 }])
+
+    const sections = getSections(props.titre.typeId, props.demarche.demarche_type_id, props.etape.etape_type_id)
+    const sortedEtapes = [...props.demarche.etapes].sort((a, b) => b.ordre - a.ordre)
+    const contenu: FlattenEtape['contenu'] = {}
+
+    sections.forEach(section => {
+      contenu[section.id] = {}
+      section.elements.forEach(element => {
+        let elementValue = null
+        for (const etape of sortedEtapes) {
+          const sectionWithValue = etape.sections_with_values.find(s => s.id === section.id)
+          const elementWithValue = sectionWithValue?.elements.find(e => e.id === element.id)
+
+          if (isNotNullNorUndefined(elementWithValue)) {
+            elementValue = elementWithValue.value
+            break
+          }
+        }
+
+        contenu[section.id][element.id] = { value: elementValue, heritee: false, etapeHeritee: null }
+      })
+    })
+    return canDeposeEtape(
+      props.user,
+      { typeId: props.titre.typeId, titreStatutId: props.titre.titreStatutId, titulaires: props.demarche.titulaireIds, administrationsLocales: props.demarche.administrationsLocales },
+      props.demarche.demarche_type_id,
+      {
+        amodiataires: { value: amodiataireIds ?? [], heritee: false, etapeHeritee: null },
+        titulaires: { value: titulaireIds ?? [], heritee: false, etapeHeritee: null },
+        contenu,
+        date: props.etape.date,
+        typeId: props.etape.etape_type_id,
+        duree: { value: duree, heritee: false, etapeHeritee: null },
+        perimetre: {
+          value: {
+            geojson4326Forages: perimetre?.geojson4326_forages ?? null,
+            geojson4326Perimetre: perimetre?.geojson4326_perimetre ?? null,
+            geojson4326Points: perimetre?.geojson4326_points ?? null,
+            geojsonOrigineForages: perimetre?.geojson_origine_forages ?? null,
+            geojsonOrigineGeoSystemeId: perimetre?.geojson_origine_geo_systeme_id ?? null,
+            geojsonOriginePoints: perimetre?.geojson_origine_points ?? null,
+            geojsonOriginePerimetre: perimetre?.geojson_origine_perimetre ?? null,
+            surface: perimetre?.surface ?? null,
           },
-          props.etape.etape_documents,
-          props.etape.entreprises_documents,
-          props.demarche.sdom_zones,
-          daeDocument.value,
-          aslDocument.value
-        )
-      : false
-  )
+          heritee: false,
+          etapeHeritee: null,
+        },
+        substances: { value: substances ?? [], heritee: false, etapeHeritee: null },
+
+        isBrouillon: props.etape.is_brouillon,
+        statutId: props.etape.etape_statut_id,
+      },
+      props.etape.etape_documents,
+      props.etape.entreprises_documents,
+      props.demarche.sdom_zones,
+      props.demarche.communes,
+      daeDocument.value,
+      aslDocument.value,
+      props.etape.avis_documents
+    )
+  })
+
+  const isBrouillon = computed<boolean>(() => props.etape.is_brouillon)
 
   return () => (
     <div class="fr-pb-2w fr-pl-2w fr-pr-2w fr-tile--shadow" style={{ border: '1px solid var(--grey-900-175)' }}>
@@ -192,16 +244,13 @@ export const DemarcheEtape = defineComponent<Props>(props => {
             <div class="fr-text--lg fr-mb-0" style={{ color: 'var(--text-title-blue-france)', fontWeight: '500' }}>
               {capitalize(EtapesTypes[props.etape.etape_type_id].nom)}
             </div>
-            {props.etape.is_brouillon ? <Badge class="fr-ml-1w" systemLevel="new" ariaLabel={`Brouillon de l'étape ${EtapesTypes[props.etape.etape_type_id].nom}`} label="Brouillon" /> : null}
+            {isBrouillon.value ? <Badge class="fr-ml-1w" systemLevel="new" ariaLabel={`Brouillon de l'étape ${EtapesTypes[props.etape.etape_type_id].nom}`} label="Brouillon" /> : null}
           </div>
 
           <div style={{ display: 'flex' }}>
             {canEditOrDeleteEtape.value ? (
               <>
-                {/* TODO 2024-05-16: retirer la condition 'est une demande' pour ne conserver que 'est un brouillon' */}
-                {props.etape.etape_type_id === ETAPES_TYPES.demande && props.etape.is_brouillon ? (
-                  <DsfrButton class="fr-mr-1v" buttonType="primary" label="Déposer" title="Déposer la demande" onClick={deposePopupOpen} disabled={!isDeposable.value} />
-                ) : null}
+                {isBrouillon.value ? <DsfrButton class="fr-mr-1v" buttonType="primary" label="Déposer" title="Déposer l'étape" onClick={deposePopupOpen} disabled={!isDeposable.value} /> : null}
                 <DsfrLink
                   icon={'fr-icon-pencil-line'}
                   disabled={false}
@@ -321,6 +370,7 @@ export const DemarcheEtape = defineComponent<Props>(props => {
 
       <EtapeDocuments etapeDocuments={props.etape.etape_documents} entrepriseDocuments={props.etape.entreprises_documents} user={props.user} entreprises={props.entreprises} />
 
+      <EtapeAvisTable etapeAvis={props.etape.avis_documents} user={props.user} />
       {removePopupVisible.value ? (
         <RemoveEtapePopup
           close={closeRemovePopup}
diff --git a/packages/ui/src/components/etape-edition.stories.tsx b/packages/ui/src/components/etape-edition.stories.tsx
index 1153e3f05..e88a85b24 100644
--- a/packages/ui/src/components/etape-edition.stories.tsx
+++ b/packages/ui/src/components/etape-edition.stories.tsx
@@ -3,15 +3,13 @@ import { action } from '@storybook/addon-actions'
 import { Props, PureEtapeEdition } from './etape-edition'
 import { EntrepriseDocumentId, EntrepriseId, EtapeEntrepriseDocument, entrepriseDocumentIdValidator, entrepriseIdValidator, toEntrepriseDocumentId } from 'camino-common/src/entreprise'
 import { DemarcheId, demarcheIdOrSlugValidator, demarcheIdValidator, demarcheSlugValidator } from 'camino-common/src/demarche'
-import { EtapeId, etapeDocumentIdValidator, etapeIdOrSlugValidator, etapeIdValidator, etapeSlugValidator } from 'camino-common/src/etape'
+import { ETAPE_IS_BROUILLON, ETAPE_IS_NOT_BROUILLON, EtapeId, etapeDocumentIdValidator, etapeIdOrSlugValidator, etapeIdValidator, etapeSlugValidator } from 'camino-common/src/etape'
 import { titreIdValidator, titreSlugValidator } from 'camino-common/src/validators/titres'
 import { FeatureMultiPolygon, PerimetreInformations } from 'camino-common/src/perimetre'
 import { CaminoDate, caminoDateValidator, toCaminoDate } from 'camino-common/src/date'
 import { testBlankUser } from 'camino-common/src/tests-utils'
 import { UiEntrepriseDocumentInput } from './entreprise/entreprise-api-client'
 import { demarcheTypeIdValidator } from 'camino-common/src/static/demarchesTypes'
-import { DeepReadonly } from 'vue'
-import { CoreEtapeCreationOrModification } from './etape/etape-api-client'
 import { FlattenEtape } from 'camino-common/src/etape-form'
 import { tempDocumentNameValidator, TempDocumentName } from 'camino-common/src/document'
 
@@ -38,7 +36,7 @@ const creerEntrepriseDocumentAction = action('creerEntrepriseDocument')
 const goToDemarcheAction = action('goToDemarche')
 const etapeCreerAction = action('etapeCreer')
 const etapeModifierAction = action('etapeModifier')
-
+const getEtapeAvisByEtapeIdAction = action('getEtapeAvisByEtapeId')
 const entreprises = [
   { id: entrepriseIdValidator.parse('fr-899600233'), nom: '10 A', legal_siren: '899600233' },
   { id: entrepriseIdValidator.parse('fr-529770646'), nom: '2GRE', legal_siren: '529770646' },
@@ -55,6 +53,7 @@ const entreprises = [
 const perimetreInformations: PerimetreInformations = {
   sdomZoneIds: ['1'],
   superposition_alertes: [{ nom: 'Titre Tutu', slug: titreSlugValidator.parse('slug-tutu'), titre_statut_id: 'mod' }],
+  communes: [],
 }
 
 const perimetre: FeatureMultiPolygon = {
@@ -77,6 +76,10 @@ const perimetre: FeatureMultiPolygon = {
 }
 
 const apiClient: Props['apiClient'] = {
+  getEtapeAvisByEtapeId(etapeId) {
+    getEtapeAvisByEtapeIdAction(etapeId)
+    return Promise.resolve([])
+  },
   deposeEtape(etapeId) {
     deposeEtapeAction(etapeId)
 
@@ -172,36 +175,35 @@ const apiClient: Props['apiClient'] = {
   getEtapeHeritagePotentiel(etape, titreDemarcheId) {
     getEtapeHeritagePotentielAction(etape, titreDemarcheId)
     return Promise.resolve({
-      ...etape,
-      duree: {
-        value: etape.duree.value,
-        heritee: false,
-        etapeHeritee: {
-          date: toCaminoDate('2022-01-01'),
-          etapeTypeId: 'mfr',
-          value: 12,
+      heritageProps: {
+        duree: {
+          actif: false,
+          etape: {
+            date: toCaminoDate('2022-01-01'),
+            typeId: 'mfr',
+            duree: 12,
+          },
         },
-      },
-      substances: {
-        value: ['arge'],
-        heritee: true,
-        etapeHeritee: {
-          date: toCaminoDate('2022-01-01'),
-          etapeTypeId: 'mfr',
+        substances: {
           value: ['arge'],
+          actif: true,
+          etape: {
+            date: toCaminoDate('2022-01-01'),
+            typeId: 'mfr',
+            substances: ['arge'],
+          },
         },
-      },
-      dateDebut: { value: etape.dateDebut.value, heritee: false, etapeHeritee: null },
-      titulaires: { value: etape.titulaires.value, heritee: false, etapeHeritee: null },
-      amodiataires: { value: etape.amodiataires.value, heritee: false, etapeHeritee: null },
-      perimetre: { value: etape.perimetre.value, heritee: false, etapeHeritee: null },
-      dateFin: {
-        value: etape.dateFin.value,
-        heritee: false,
-        etapeHeritee: {
-          date: toCaminoDate('2022-01-01'),
-          etapeTypeId: 'mfr',
-          value: toCaminoDate('2022-01-01'),
+        dateDebut: { actif: false, etape: null },
+        titulaires: { actif: false, etape: null },
+        amodiataires: { actif: false, etape: null },
+        perimetre: { actif: false, etape: null },
+        dateFin: {
+          actif: false,
+          etape: {
+            date: toCaminoDate('2022-01-01'),
+            typeId: 'mfr',
+            dateFin: toCaminoDate('2022-01-01'),
+          },
         },
       },
       heritageContenu: { arm: { mecanise: { actif: false }, franchissements: { actif: false } } },
@@ -256,7 +258,7 @@ const apiClient: Props['apiClient'] = {
         slug: etapeSlugValidator.parse('etape-slug'),
         typeId: 'mfr',
         statutId: 'fai',
-        isBrouillon: false,
+        isBrouillon: ETAPE_IS_NOT_BROUILLON,
         titreDemarcheId: demarcheId,
         date: caminoDateValidator.parse('2023-02-01'),
         dateDebut: { value: null, heritee: false, etapeHeritee: null },
@@ -360,7 +362,7 @@ export const AffichageAide: StoryFn = () => (
             slug: etapeSlugValidator.parse('etape-slug'),
             typeId: 'mfr',
             statutId: 'fai',
-            isBrouillon: true,
+            isBrouillon: ETAPE_IS_BROUILLON,
             titreDemarcheId: demarcheId,
             date: caminoDateValidator.parse('2023-02-01'),
             dateDebut: { value: null, heritee: false, etapeHeritee: null },
@@ -417,17 +419,17 @@ export const DemandeArmComplete: StoryFn = () => (
         getEtapeHeritagePotentielAction(etape, titreDemarcheId)
 
         return Promise.resolve({
-          ...etape,
-          dateDebut: { value: etape.dateDebut.value, heritee: false, etapeHeritee: null },
-          dateFin: { value: etape.dateFin.value, heritee: false, etapeHeritee: null },
-          duree: { value: etape.duree.value, heritee: false, etapeHeritee: null },
-          substances: { value: etape.substances.value, heritee: false, etapeHeritee: null },
-          titulaires: { value: etape.titulaires.value, heritee: false, etapeHeritee: null },
-          amodiataires: { value: etape.amodiataires.value, heritee: false, etapeHeritee: null },
-          perimetre: {
-            value: etape.perimetre.value,
-            heritee: false,
-            etapeHeritee: null,
+          heritageProps: {
+            dateDebut: { actif: false, etape: null },
+            dateFin: { actif: false, etape: null },
+            duree: { actif: false, etape: null },
+            substances: { actif: false, etape: null },
+            titulaires: { actif: false, etape: null },
+            amodiataires: { actif: false, etape: null },
+            perimetre: {
+              actif: false,
+              etape: null,
+            },
           },
           heritageContenu: { arm: { mecanise: { actif: false }, franchissements: { actif: false } } },
         })
@@ -550,7 +552,7 @@ export const DemandeArmComplete: StoryFn = () => (
             slug: etapeSlugValidator.parse('etape-slug'),
             typeId: 'mfr',
             statutId: 'fai',
-            isBrouillon: true,
+            isBrouillon: ETAPE_IS_BROUILLON,
             titreDemarcheId: demarcheId,
             date: caminoDateValidator.parse('2023-02-01'),
             dateDebut: { value: null, heritee: false, etapeHeritee: null },
@@ -678,7 +680,7 @@ export const ModificationDemandeHeritee: StoryFn = () => (
     entreprises={entreprises}
     apiClient={{
       ...apiClient,
-      getEtapeHeritagePotentiel(etape: DeepReadonly<CoreEtapeCreationOrModification>, titreDemarcheId: DemarcheId) {
+      getEtapeHeritagePotentiel(etape, titreDemarcheId) {
         getEtapeHeritagePotentielAction(etape, titreDemarcheId)
 
         return Promise.reject(new Error("Cet appel ne doit être fait que lors de la création de l'étape ou pour la modification de la date"))
@@ -692,7 +694,7 @@ export const ModificationDemandeHeritee: StoryFn = () => (
             slug: etapeSlugValidator.parse('etape-slug'),
             typeId: 'mod',
             statutId: 'fai',
-            isBrouillon: false,
+            isBrouillon: ETAPE_IS_NOT_BROUILLON,
             titreDemarcheId: demarcheIdValidator.parse('demarche-id'),
             date: caminoDateValidator.parse('2023-02-01'),
             contenu: {
@@ -771,54 +773,39 @@ export const AxmEnZoneDuSdom: StoryFn = () => (
     entreprises={entreprises}
     apiClient={{
       ...apiClient,
-      getEtapeHeritagePotentiel(etape: DeepReadonly<CoreEtapeCreationOrModification>, titreDemarcheId: DemarcheId) {
+      getEtapeHeritagePotentiel(etape, titreDemarcheId) {
         getEtapeHeritagePotentielAction(etape, titreDemarcheId)
 
         return Promise.resolve({
-          ...etape,
-          dateDebut: {
-            value: null,
-            heritee: false,
-            etapeHeritee: null,
-          },
-          dateFin: {
-            value: null,
-            heritee: false,
-            etapeHeritee: null,
-          },
-          duree: {
-            value: 6,
-            heritee: false,
-            etapeHeritee: null,
-          },
-          substances: {
-            value: [],
-            heritee: false,
-            etapeHeritee: null,
-          },
-          titulaires: {
-            value: [],
-            heritee: false,
-            etapeHeritee: null,
-          },
-          amodiataires: {
-            value: [],
-            heritee: false,
-            etapeHeritee: null,
-          },
-          perimetre: {
-            value: {
-              geojson4326Forages: null,
-              geojson4326Perimetre: null,
-              geojson4326Points: null,
-              geojsonOrigineForages: null,
-              geojsonOrigineGeoSystemeId: null,
-              geojsonOriginePerimetre: null,
-              geojsonOriginePoints: null,
-              surface: null,
+          heritageProps: {
+            dateDebut: {
+              actif: false,
+              etape: null,
+            },
+            dateFin: {
+              actif: false,
+              etape: null,
+            },
+            duree: {
+              actif: false,
+              etape: null,
+            },
+            substances: {
+              actif: false,
+              etape: null,
+            },
+            titulaires: {
+              actif: false,
+              etape: null,
+            },
+            amodiataires: {
+              actif: false,
+              etape: null,
+            },
+            perimetre: {
+              actif: false,
+              etape: null,
             },
-            heritee: false,
-            etapeHeritee: null,
           },
           heritageContenu: {},
         })
@@ -832,7 +819,7 @@ export const AxmEnZoneDuSdom: StoryFn = () => (
             slug: etapeSlugValidator.parse('etape-slug'),
             typeId: 'mfr',
             statutId: 'fai',
-            isBrouillon: true,
+            isBrouillon: ETAPE_IS_BROUILLON,
             titreDemarcheId: demarcheIdValidator.parse('demarche-id'),
             date: caminoDateValidator.parse('2023-02-01'),
             dateDebut: {
diff --git a/packages/ui/src/components/etape-edition.stories_snapshots_AffichageAide.html b/packages/ui/src/components/etape-edition.stories_snapshots_AffichageAide.html
index a0ef03da1..759274b4c 100644
--- a/packages/ui/src/components/etape-edition.stories_snapshots_AffichageAide.html
+++ b/packages/ui/src/components/etape-edition.stories_snapshots_AffichageAide.html
@@ -190,10 +190,10 @@
           <!---->
         </div>
       </div>
+      <!---->
       <div>
         <div>
-          <h2 class="fr-pt-6w">Documents d’entreprise
-            <!---->
+          <h2 class="fr-pt-6w">Documents d’entreprise<p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--sm fr-ml-2w fr-badge--error fr-badge--no-icon fr-ml-2w" title="Incomplet" aria-label="Incomplet">Incomplet</p>
           </h2>
           <!---->
         </div>
diff --git a/packages/ui/src/components/etape-edition.stories_snapshots_AxmEnZoneDuSdom.html b/packages/ui/src/components/etape-edition.stories_snapshots_AxmEnZoneDuSdom.html
index 9333bd3d9..3500f1852 100644
--- a/packages/ui/src/components/etape-edition.stories_snapshots_AxmEnZoneDuSdom.html
+++ b/packages/ui/src/components/etape-edition.stories_snapshots_AxmEnZoneDuSdom.html
@@ -207,10 +207,10 @@
           <!---->
         </div>
       </div>
+      <!---->
       <div>
         <div>
-          <h2 class="fr-pt-6w">Documents d’entreprise
-            <!---->
+          <h2 class="fr-pt-6w">Documents d’entreprise<p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--sm fr-ml-2w fr-badge--error fr-badge--no-icon fr-ml-2w" title="Incomplet" aria-label="Incomplet">Incomplet</p>
           </h2>
           <!---->
         </div>
diff --git a/packages/ui/src/components/etape-edition.stories_snapshots_DemandeArmComplete.html b/packages/ui/src/components/etape-edition.stories_snapshots_DemandeArmComplete.html
index 393910a10..25c65e6b4 100644
--- a/packages/ui/src/components/etape-edition.stories_snapshots_DemandeArmComplete.html
+++ b/packages/ui/src/components/etape-edition.stories_snapshots_DemandeArmComplete.html
@@ -367,6 +367,7 @@
           <!---->
         </div>
       </div>
+      <!---->
       <div>
         <div>
           <h2 class="fr-pt-6w">Documents d’entreprise
diff --git a/packages/ui/src/components/etape-edition.stories_snapshots_Modification.html b/packages/ui/src/components/etape-edition.stories_snapshots_Modification.html
index 2cf57d12a..cfcf5d61c 100644
--- a/packages/ui/src/components/etape-edition.stories_snapshots_Modification.html
+++ b/packages/ui/src/components/etape-edition.stories_snapshots_Modification.html
@@ -190,10 +190,10 @@
           <!---->
         </div>
       </div>
+      <!---->
       <div>
         <div>
-          <h2 class="fr-pt-6w">Documents d’entreprise
-            <!---->
+          <h2 class="fr-pt-6w">Documents d’entreprise<p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--sm fr-ml-2w fr-badge--error fr-badge--no-icon fr-ml-2w" title="Incomplet" aria-label="Incomplet">Incomplet</p>
           </h2>
           <!---->
         </div>
diff --git a/packages/ui/src/components/etape-edition.stories_snapshots_ModificationDemandeHeritee.html b/packages/ui/src/components/etape-edition.stories_snapshots_ModificationDemandeHeritee.html
index 15920db64..bcff8243d 100644
--- a/packages/ui/src/components/etape-edition.stories_snapshots_ModificationDemandeHeritee.html
+++ b/packages/ui/src/components/etape-edition.stories_snapshots_ModificationDemandeHeritee.html
@@ -326,6 +326,7 @@
           <!---->
         </div>
       </div>
+      <!---->
       <div>
         <div>
           <h2 class="fr-pt-6w">Documents d’entreprise
diff --git a/packages/ui/src/components/etape-edition.tsx b/packages/ui/src/components/etape-edition.tsx
index f7fd0701d..533c98313 100644
--- a/packages/ui/src/components/etape-edition.tsx
+++ b/packages/ui/src/components/etape-edition.tsx
@@ -4,7 +4,7 @@ import { ApiClient, apiClient } from '../api/api-client'
 import { DemarcheId, DemarcheIdOrSlug, demarcheIdOrSlugValidator } from 'camino-common/src/demarche'
 import { isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty } from 'camino-common/src/typescript-tools'
 import { Alert } from './_ui/alert'
-import { EtapeIdOrSlug, etapeIdOrSlugValidator } from 'camino-common/src/etape'
+import { ETAPE_IS_NOT_BROUILLON, EtapeIdOrSlug, etapeIdOrSlugValidator } from 'camino-common/src/etape'
 import { entreprisesKey, userKey } from '../moi'
 import { User, isAdministrationAdmin, isAdministrationEditeur, isSuper } from 'camino-common/src/roles'
 import { Entreprise } from 'camino-common/src/entreprise'
@@ -76,6 +76,7 @@ export type Props = {
     | 'etapeCreer'
     | 'etapeModifier'
     | 'deposeEtape'
+    | 'getEtapeAvisByEtapeId'
   >
 }
 
@@ -107,7 +108,7 @@ export const PureEtapeEdition = defineComponent<Props>(props => {
               date: null,
               typeId: null,
               statutId: null,
-              isBrouillon: false,
+              isBrouillon: ETAPE_IS_NOT_BROUILLON,
               notes: null,
               substances: { value: [], heritee: true, etapeHeritee: null },
               titulaires: { value: [], heritee: true, etapeHeritee: null },
diff --git a/packages/ui/src/components/etape/add-etape-avis-popup.stories.tsx b/packages/ui/src/components/etape/add-etape-avis-popup.stories.tsx
new file mode 100644
index 000000000..5972a9c4b
--- /dev/null
+++ b/packages/ui/src/components/etape/add-etape-avis-popup.stories.tsx
@@ -0,0 +1,68 @@
+import { Meta, StoryFn } from '@storybook/vue3'
+import { action } from '@storybook/addon-actions'
+import { tempDocumentNameValidator } from 'camino-common/src/document'
+import { ApiClient } from '@/api/api-client'
+import { AddEtapeAvisPopup } from './add-etape-avis-popup'
+import { toCaminoDate } from 'camino-common/src/date'
+import { etapeAvisIdValidator } from 'camino-common/src/etape'
+import { AvisTypeId, AvisTypes, AvisVisibilityIds, avisTypeIdValidator } from 'camino-common/src/static/avisTypes'
+import { NonEmptyArray, getKeys } from 'camino-common/src/typescript-tools'
+import { testBlankUser } from 'camino-common/src/tests-utils'
+
+const meta: Meta = {
+  title: 'Components/Etape/AddAvisPopup',
+  // @ts-ignore
+  component: AddEtapeAvisPopup,
+}
+export default meta
+
+const close = action('close')
+const uploadTempDocumentAction = action('uploadTempDocument')
+
+const apiClient: Pick<ApiClient, 'uploadTempDocument'> = {
+  uploadTempDocument: (...params) => {
+    uploadTempDocumentAction(params)
+
+    return Promise.resolve(tempDocumentNameValidator.parse(new Date().toISOString()))
+  },
+}
+const avisTypeIds: NonEmptyArray<AvisTypeId> = getKeys(AvisTypes, (value): value is AvisTypeId => {
+  return avisTypeIdValidator.safeParse(value).success
+}) as NonEmptyArray<AvisTypeId>
+export const SansDocumentInitial: StoryFn = () => <AddEtapeAvisPopup close={close} user={{ ...testBlankUser, role: 'super' }} apiClient={apiClient} initialAvis={null} avisTypeIds={avisTypeIds} />
+
+export const DocumentInitialTemporaire: StoryFn = () => (
+  <AddEtapeAvisPopup
+    close={close}
+    initialAvis={{
+      description: 'description',
+      avis_type_id: 'lettreDeSaisineDesServices',
+      temp_document_name: tempDocumentNameValidator.parse('value'),
+      date: toCaminoDate('2023-01-02'),
+      avis_statut_id: 'Favorable',
+      has_file: false,
+      avis_visibility_id: AvisVisibilityIds.Administrations,
+    }}
+    apiClient={apiClient}
+    avisTypeIds={avisTypeIds}
+    user={{ ...testBlankUser, role: 'super' }}
+  />
+)
+
+export const DocumentInitialDejaSauvegarde: StoryFn = () => (
+  <AddEtapeAvisPopup
+    close={close}
+    initialAvis={{
+      description: 'description',
+      avis_type_id: 'lettreDeSaisineDesServices',
+      id: etapeAvisIdValidator.parse('documentId'),
+      date: toCaminoDate('2023-01-02'),
+      avis_statut_id: 'Favorable',
+      has_file: false,
+      avis_visibility_id: AvisVisibilityIds.TitulairesEtAdministrations,
+    }}
+    apiClient={apiClient}
+    avisTypeIds={avisTypeIds}
+    user={{ ...testBlankUser, role: 'super' }}
+  />
+)
diff --git a/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialDejaSauvegarde.html b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialDejaSauvegarde.html
new file mode 100644
index 000000000..0bb625db1
--- /dev/null
+++ b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialDejaSauvegarde.html
@@ -0,0 +1,93 @@
+<!--teleport start-->
+<div>
+  <dialog id="monId" class="fr-modal fr-modal--opened" open="" aria-modal="true" role="dialog" aria-labelledby="monId-title" style="z-index: 1000001;">
+    <div class="fr-container fr-container--fluid fr-container-md">
+      <div class="fr-grid-row fr-grid-row--center">
+        <div class="fr-col-12 fr-col-md-8 fr-col-lg-6">
+          <div class="fr-modal__body">
+            <div class="fr-modal__header"><button class="fr-btn--close fr-btn" aria-controls="monId" title="Fermer">Fermer</button></div>
+            <div class="fr-modal__content">
+              <h1 id="monId-title" class="fr-modal__title"><span class="fr-icon-arrow-right-line fr-icon--lg" aria-hidden="true"></span>Ajout d'un document</h1>
+              <div class="fr-container">
+                <form>
+                  <fieldset class="fr-fieldset" id="text">
+                    <div class="fr-fieldset__element">
+                      <div class="fr-select-group"><label class="fr-label" for="type">Type d'avis</label>
+                        <div id="typeahead_271_wrapper" class="_typeahead_8eddf1">
+                          <div class="flex"><input id="typeahead_271" type="text" name="typeahead_271" class="fr-input" placeholder="" autocomplete="off"></div>
+                          <!---->
+                        </div>
+                      </div>
+                    </div>
+                  </fieldset>
+                  <fieldset class="fr-fieldset" id="text">
+                    <div class="fr-fieldset__element">
+                      <div class="fr-upload-group"><label class="fr-label" for="file-upload">Ajouter un fichier<span class="fr-hint-text">Taille maximale : 100 Mo. Format<!----> supporté<!----> : pdf.</span></label><input class="fr-upload" type="file" id="file-upload" name="file-upload" accept=".pdf"></div>
+                    </div>
+                    <div class="fr-fieldset__element">
+                      <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_670">Date *
+                          <!---->
+                        </label><input class="fr-input" name="input_670" id="input_670" required="" type="date">
+                        <!---->
+                      </div>
+                    </div>
+                    <div class="fr-fieldset__element">
+                      <div class="fr-select-group"><label class="fr-label" for="select_74">Statut *
+                          <!---->
+                        </label><select class="fr-select" id="select_74" aria-label="Statut" name="select_74">
+                          <option value="Favorable">Favorable</option>
+                          <option value="Défavorable">Défavorable</option>
+                          <option value="Favorable avec réserves">Favorable avec réserves</option>
+                          <option value="Non renseigné">Non renseigné</option>
+                          <option disabled="" hidden="" value="">Selectionnez une option</option>
+                        </select></div>
+                    </div>
+                    <div class="fr-fieldset__element">
+                      <fieldset class="fr-fieldset" id="radio_878" aria-labelledby="radio_878-legend" style="flex-direction: column; align-items: flex-start;">
+                        <legend class="fr-fieldset__legend--regular fr-fieldset__legend" id="radio_878-legend">Visibilité *
+                          <!---->
+                        </legend>
+                        <div class="fr-fieldset__element">
+                          <div class="fr-radio-group"><input type="radio" id="radio_878-0" name="radio_878"><label class="fr-label" for="radio_878-0">Public
+                              <!---->
+                            </label></div>
+                        </div>
+                        <div class="fr-fieldset__element">
+                          <div class="fr-radio-group"><input type="radio" id="radio_878-1" name="radio_878"><label class="fr-label" for="radio_878-1">Visible par les administrations et les entreprises titulaires
+                              <!---->
+                            </label></div>
+                        </div>
+                        <div class="fr-fieldset__element">
+                          <div class="fr-radio-group"><input type="radio" id="radio_878-2" name="radio_878"><label class="fr-label" for="radio_878-2">Visible par les administrations
+                              <!---->
+                            </label></div>
+                        </div>
+                      </fieldset>
+                    </div>
+                    <div class="fr-fieldset__element">
+                      <div class="fr-input-group"><label class="fr-label" for="textarea_967">Description
+                          <!---->
+                          <!---->
+                        </label><textarea class="fr-input" name="textarea_967" id="textarea_967"></textarea></div>
+                    </div>
+                  </fieldset>
+                </form>
+                <!---->
+              </div>
+            </div>
+            <div class="fr-modal__footer">
+              <div style="display: flex; width: 100%; justify-content: end; align-items: center; gap: 1rem;">
+                <!---->
+                <ul class="fr-btns-group fr-btns-group--right fr-btns-group--inline-reverse fr-btns-group--inline-lg fr-btns-group--icon-left" style="width: auto;">
+                  <li><button class="fr-btn fr-icon-check-line fr-btn--icon-left disabled" disabled="">Enregistrer</button></li>
+                  <li><button class="fr-btn fr-icon-arrow-go-back-fill fr-btn--icon-left fr-btn--secondary" aria-controls="monId">Annuler</button></li>
+                </ul>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </dialog>
+</div>
+<!--teleport end-->
\ No newline at end of file
diff --git a/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialTemporaire.html b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialTemporaire.html
new file mode 100644
index 000000000..0bb625db1
--- /dev/null
+++ b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialTemporaire.html
@@ -0,0 +1,93 @@
+<!--teleport start-->
+<div>
+  <dialog id="monId" class="fr-modal fr-modal--opened" open="" aria-modal="true" role="dialog" aria-labelledby="monId-title" style="z-index: 1000001;">
+    <div class="fr-container fr-container--fluid fr-container-md">
+      <div class="fr-grid-row fr-grid-row--center">
+        <div class="fr-col-12 fr-col-md-8 fr-col-lg-6">
+          <div class="fr-modal__body">
+            <div class="fr-modal__header"><button class="fr-btn--close fr-btn" aria-controls="monId" title="Fermer">Fermer</button></div>
+            <div class="fr-modal__content">
+              <h1 id="monId-title" class="fr-modal__title"><span class="fr-icon-arrow-right-line fr-icon--lg" aria-hidden="true"></span>Ajout d'un document</h1>
+              <div class="fr-container">
+                <form>
+                  <fieldset class="fr-fieldset" id="text">
+                    <div class="fr-fieldset__element">
+                      <div class="fr-select-group"><label class="fr-label" for="type">Type d'avis</label>
+                        <div id="typeahead_271_wrapper" class="_typeahead_8eddf1">
+                          <div class="flex"><input id="typeahead_271" type="text" name="typeahead_271" class="fr-input" placeholder="" autocomplete="off"></div>
+                          <!---->
+                        </div>
+                      </div>
+                    </div>
+                  </fieldset>
+                  <fieldset class="fr-fieldset" id="text">
+                    <div class="fr-fieldset__element">
+                      <div class="fr-upload-group"><label class="fr-label" for="file-upload">Ajouter un fichier<span class="fr-hint-text">Taille maximale : 100 Mo. Format<!----> supporté<!----> : pdf.</span></label><input class="fr-upload" type="file" id="file-upload" name="file-upload" accept=".pdf"></div>
+                    </div>
+                    <div class="fr-fieldset__element">
+                      <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_670">Date *
+                          <!---->
+                        </label><input class="fr-input" name="input_670" id="input_670" required="" type="date">
+                        <!---->
+                      </div>
+                    </div>
+                    <div class="fr-fieldset__element">
+                      <div class="fr-select-group"><label class="fr-label" for="select_74">Statut *
+                          <!---->
+                        </label><select class="fr-select" id="select_74" aria-label="Statut" name="select_74">
+                          <option value="Favorable">Favorable</option>
+                          <option value="Défavorable">Défavorable</option>
+                          <option value="Favorable avec réserves">Favorable avec réserves</option>
+                          <option value="Non renseigné">Non renseigné</option>
+                          <option disabled="" hidden="" value="">Selectionnez une option</option>
+                        </select></div>
+                    </div>
+                    <div class="fr-fieldset__element">
+                      <fieldset class="fr-fieldset" id="radio_878" aria-labelledby="radio_878-legend" style="flex-direction: column; align-items: flex-start;">
+                        <legend class="fr-fieldset__legend--regular fr-fieldset__legend" id="radio_878-legend">Visibilité *
+                          <!---->
+                        </legend>
+                        <div class="fr-fieldset__element">
+                          <div class="fr-radio-group"><input type="radio" id="radio_878-0" name="radio_878"><label class="fr-label" for="radio_878-0">Public
+                              <!---->
+                            </label></div>
+                        </div>
+                        <div class="fr-fieldset__element">
+                          <div class="fr-radio-group"><input type="radio" id="radio_878-1" name="radio_878"><label class="fr-label" for="radio_878-1">Visible par les administrations et les entreprises titulaires
+                              <!---->
+                            </label></div>
+                        </div>
+                        <div class="fr-fieldset__element">
+                          <div class="fr-radio-group"><input type="radio" id="radio_878-2" name="radio_878"><label class="fr-label" for="radio_878-2">Visible par les administrations
+                              <!---->
+                            </label></div>
+                        </div>
+                      </fieldset>
+                    </div>
+                    <div class="fr-fieldset__element">
+                      <div class="fr-input-group"><label class="fr-label" for="textarea_967">Description
+                          <!---->
+                          <!---->
+                        </label><textarea class="fr-input" name="textarea_967" id="textarea_967"></textarea></div>
+                    </div>
+                  </fieldset>
+                </form>
+                <!---->
+              </div>
+            </div>
+            <div class="fr-modal__footer">
+              <div style="display: flex; width: 100%; justify-content: end; align-items: center; gap: 1rem;">
+                <!---->
+                <ul class="fr-btns-group fr-btns-group--right fr-btns-group--inline-reverse fr-btns-group--inline-lg fr-btns-group--icon-left" style="width: auto;">
+                  <li><button class="fr-btn fr-icon-check-line fr-btn--icon-left disabled" disabled="">Enregistrer</button></li>
+                  <li><button class="fr-btn fr-icon-arrow-go-back-fill fr-btn--icon-left fr-btn--secondary" aria-controls="monId">Annuler</button></li>
+                </ul>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </dialog>
+</div>
+<!--teleport end-->
\ No newline at end of file
diff --git a/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_SansDocumentInitial.html b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_SansDocumentInitial.html
new file mode 100644
index 000000000..0bb625db1
--- /dev/null
+++ b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_SansDocumentInitial.html
@@ -0,0 +1,93 @@
+<!--teleport start-->
+<div>
+  <dialog id="monId" class="fr-modal fr-modal--opened" open="" aria-modal="true" role="dialog" aria-labelledby="monId-title" style="z-index: 1000001;">
+    <div class="fr-container fr-container--fluid fr-container-md">
+      <div class="fr-grid-row fr-grid-row--center">
+        <div class="fr-col-12 fr-col-md-8 fr-col-lg-6">
+          <div class="fr-modal__body">
+            <div class="fr-modal__header"><button class="fr-btn--close fr-btn" aria-controls="monId" title="Fermer">Fermer</button></div>
+            <div class="fr-modal__content">
+              <h1 id="monId-title" class="fr-modal__title"><span class="fr-icon-arrow-right-line fr-icon--lg" aria-hidden="true"></span>Ajout d'un document</h1>
+              <div class="fr-container">
+                <form>
+                  <fieldset class="fr-fieldset" id="text">
+                    <div class="fr-fieldset__element">
+                      <div class="fr-select-group"><label class="fr-label" for="type">Type d'avis</label>
+                        <div id="typeahead_271_wrapper" class="_typeahead_8eddf1">
+                          <div class="flex"><input id="typeahead_271" type="text" name="typeahead_271" class="fr-input" placeholder="" autocomplete="off"></div>
+                          <!---->
+                        </div>
+                      </div>
+                    </div>
+                  </fieldset>
+                  <fieldset class="fr-fieldset" id="text">
+                    <div class="fr-fieldset__element">
+                      <div class="fr-upload-group"><label class="fr-label" for="file-upload">Ajouter un fichier<span class="fr-hint-text">Taille maximale : 100 Mo. Format<!----> supporté<!----> : pdf.</span></label><input class="fr-upload" type="file" id="file-upload" name="file-upload" accept=".pdf"></div>
+                    </div>
+                    <div class="fr-fieldset__element">
+                      <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_670">Date *
+                          <!---->
+                        </label><input class="fr-input" name="input_670" id="input_670" required="" type="date">
+                        <!---->
+                      </div>
+                    </div>
+                    <div class="fr-fieldset__element">
+                      <div class="fr-select-group"><label class="fr-label" for="select_74">Statut *
+                          <!---->
+                        </label><select class="fr-select" id="select_74" aria-label="Statut" name="select_74">
+                          <option value="Favorable">Favorable</option>
+                          <option value="Défavorable">Défavorable</option>
+                          <option value="Favorable avec réserves">Favorable avec réserves</option>
+                          <option value="Non renseigné">Non renseigné</option>
+                          <option disabled="" hidden="" value="">Selectionnez une option</option>
+                        </select></div>
+                    </div>
+                    <div class="fr-fieldset__element">
+                      <fieldset class="fr-fieldset" id="radio_878" aria-labelledby="radio_878-legend" style="flex-direction: column; align-items: flex-start;">
+                        <legend class="fr-fieldset__legend--regular fr-fieldset__legend" id="radio_878-legend">Visibilité *
+                          <!---->
+                        </legend>
+                        <div class="fr-fieldset__element">
+                          <div class="fr-radio-group"><input type="radio" id="radio_878-0" name="radio_878"><label class="fr-label" for="radio_878-0">Public
+                              <!---->
+                            </label></div>
+                        </div>
+                        <div class="fr-fieldset__element">
+                          <div class="fr-radio-group"><input type="radio" id="radio_878-1" name="radio_878"><label class="fr-label" for="radio_878-1">Visible par les administrations et les entreprises titulaires
+                              <!---->
+                            </label></div>
+                        </div>
+                        <div class="fr-fieldset__element">
+                          <div class="fr-radio-group"><input type="radio" id="radio_878-2" name="radio_878"><label class="fr-label" for="radio_878-2">Visible par les administrations
+                              <!---->
+                            </label></div>
+                        </div>
+                      </fieldset>
+                    </div>
+                    <div class="fr-fieldset__element">
+                      <div class="fr-input-group"><label class="fr-label" for="textarea_967">Description
+                          <!---->
+                          <!---->
+                        </label><textarea class="fr-input" name="textarea_967" id="textarea_967"></textarea></div>
+                    </div>
+                  </fieldset>
+                </form>
+                <!---->
+              </div>
+            </div>
+            <div class="fr-modal__footer">
+              <div style="display: flex; width: 100%; justify-content: end; align-items: center; gap: 1rem;">
+                <!---->
+                <ul class="fr-btns-group fr-btns-group--right fr-btns-group--inline-reverse fr-btns-group--inline-lg fr-btns-group--icon-left" style="width: auto;">
+                  <li><button class="fr-btn fr-icon-check-line fr-btn--icon-left disabled" disabled="">Enregistrer</button></li>
+                  <li><button class="fr-btn fr-icon-arrow-go-back-fill fr-btn--icon-left fr-btn--secondary" aria-controls="monId">Annuler</button></li>
+                </ul>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </dialog>
+</div>
+<!--teleport end-->
\ No newline at end of file
diff --git a/packages/ui/src/components/etape/add-etape-avis-popup.tsx b/packages/ui/src/components/etape/add-etape-avis-popup.tsx
new file mode 100644
index 000000000..5d7e0e144
--- /dev/null
+++ b/packages/ui/src/components/etape/add-etape-avis-popup.tsx
@@ -0,0 +1,141 @@
+import { computed, defineComponent, ref } from 'vue'
+import { FunctionalPopup } from '../_ui/functional-popup'
+import { AVIS_VISIBILITY_IDS, AvisStatutIds, AvisTypeId, AvisTypes, AvisVisibilityId, AvisVisibilityIds } from 'camino-common/src/static/avisTypes'
+import { InputFile } from '../_ui/dsfr-input-file'
+import { ApiClient } from '@/api/api-client'
+import { TempDocumentName } from 'camino-common/src/document'
+import { NonEmptyArray, Nullable, isNotNullNorUndefined, map } from 'camino-common/src/typescript-tools'
+import { DsfrInput } from '../_ui/dsfr-input'
+import { EtapeAvisModification, TempEtapeAvis, etapeAvisModificationValidator, tempEtapeAvisValidator } from 'camino-common/src/etape'
+import { useState } from '../../utils/vue-tsx-utils'
+import { DsfrSelect } from '../_ui/dsfr-select'
+import { TypeaheadSmartSingle } from '../_ui/typeahead-smart-single'
+import { DsfrInputRadio } from '../_ui/dsfr-input-radio'
+import { User, isEntrepriseOrBureauDEtude } from 'camino-common/src/roles'
+import { getAvisVisibilityLabel } from './etape-avis'
+import { DsfrTextarea } from '../_ui/dsfr-textarea'
+
+interface Props {
+  close: (document: EtapeAvisModification | null) => void
+  avisTypeIds: NonEmptyArray<AvisTypeId>
+  initialAvis: EtapeAvisModification | null
+  apiClient: Pick<ApiClient, 'uploadTempDocument'>
+  user: User
+}
+
+export const AddEtapeAvisPopup = defineComponent<Props>(props => {
+  const etapeAvisTypeId = ref<AvisTypeId | null>(props.avisTypeIds.length === 1 ? props.avisTypeIds[0] : null)
+  const etapeAvisFile = ref<File | null>(null)
+  const avisDescription = ref<string>(props.initialAvis?.description ?? '')
+  const [avisDate, setAvisDate] = useState(props.initialAvis?.date ?? null)
+  const [avisStatutId, setAvisStatutId] = useState(props.initialAvis?.avis_statut_id ?? null)
+  const [avisVisibilityId, setAvisVisibilityId] = useState(props.initialAvis?.avis_visibility_id ?? null)
+
+  const tempAvisName = ref<TempDocumentName | undefined>(isNotNullNorUndefined(props.initialAvis) && 'temp_document_name' in props.initialAvis ? props.initialAvis.temp_document_name : undefined)
+
+  const visibilityChoices = computed<{ itemId: AvisVisibilityId; legend: { main: string } }[]>(() => {
+    return AVIS_VISIBILITY_IDS.filter(visibility => {
+      if (isEntrepriseOrBureauDEtude(props.user) && visibility === AvisVisibilityIds.Administrations) {
+        return false
+      }
+
+      return true
+    }).map(visibility => ({ itemId: visibility, legend: { main: getAvisVisibilityLabel(visibility) } }))
+  })
+  const descriptionChange = (value: string) => {
+    avisDescription.value = value
+  }
+
+  const updateAvisTypeId = (avisTypeId: AvisTypeId | null) => {
+    etapeAvisTypeId.value = avisTypeId
+  }
+
+  const visibilityChange = (value: AvisVisibilityId) => {
+    setAvisVisibilityId(value)
+  }
+  const content = () => (
+    <form>
+      {props.avisTypeIds.length === 1 ? null : (
+        <fieldset class="fr-fieldset" id="text">
+          <div class="fr-fieldset__element">
+            <div class="fr-select-group">
+              <label class="fr-label" for="type">
+                Type d'avis
+              </label>
+              <TypeaheadSmartSingle initialValue={props.initialAvis?.avis_type_id} possibleValues={props.avisTypeIds.map(id => AvisTypes[id])} valueIdSelected={updateAvisTypeId} />
+            </div>
+          </div>
+        </fieldset>
+      )}
+
+      <fieldset class="fr-fieldset" id="text">
+        <div class="fr-fieldset__element">
+          <InputFile
+            accept={['pdf']}
+            uploadFile={file => {
+              etapeAvisFile.value = file
+            }}
+          />
+        </div>
+
+        <div class="fr-fieldset__element">
+          <DsfrInput legend={{ main: 'Date' }} required={true} type={{ type: 'date' }} initialValue={avisDate.value} valueChanged={setAvisDate} />
+        </div>
+
+        <div class="fr-fieldset__element">
+          <DsfrSelect legend={{ main: 'Statut' }} required={true} items={map(AvisStatutIds, avis => ({ id: avis, label: avis }))} initialValue={avisStatutId.value} valueChanged={setAvisStatutId} />
+        </div>
+
+        <div class="fr-fieldset__element">
+          <DsfrInputRadio legend={{ main: 'Visibilité' }} required={true} elements={visibilityChoices.value} initialValue={avisVisibilityId.value} valueChanged={visibilityChange} />
+        </div>
+        <div class="fr-fieldset__element">
+          <DsfrTextarea legend={{ main: 'Description' }} initialValue={avisDescription.value} valueChanged={descriptionChange} />
+        </div>
+      </fieldset>
+    </form>
+  )
+
+  const tempAvis = computed<Nullable<Omit<TempEtapeAvis, 'temp_document_name'>>>(() => ({
+    avis_type_id: etapeAvisTypeId.value,
+    description: avisDescription.value,
+    date: avisDate.value,
+    avis_statut_id: avisStatutId.value,
+    avis_visibility_id: avisVisibilityId.value,
+    has_file: false,
+  }))
+
+  const canSave = computed<boolean>(() => {
+    return tempEtapeAvisValidator.omit({ temp_document_name: true }).safeParse(tempAvis.value).success
+  })
+
+  return () => (
+    <FunctionalPopup
+      title={props.avisTypeIds.length === 1 ? `${isNotNullNorUndefined(props.initialAvis) ? 'Éditer' : 'Ajouter'} ${AvisTypes[props.avisTypeIds[0]].nom}` : "Ajout d'un document"}
+      content={content}
+      close={() => {
+        props.close(null)
+      }}
+      validate={{
+        action: async () => {
+          if (etapeAvisFile.value !== null) {
+            tempAvisName.value = await props.apiClient.uploadTempDocument(etapeAvisFile.value)
+          }
+          const value = { ...props.initialAvis, ...tempAvis.value, temp_document_name: tempAvisName.value }
+
+          const parsed = etapeAvisModificationValidator.safeParse(value)
+
+          if (parsed.success) {
+            props.close(parsed.data)
+          } else {
+            console.error(parsed.error)
+          }
+        },
+      }}
+      canValidate={canSave.value}
+    />
+  )
+})
+
+// @ts-ignore waiting for https://github.com/vuejs/core/issues/7833
+AddEtapeAvisPopup.props = ['close', 'apiClient', 'avisTypeIds', 'initialAvis', 'user']
diff --git a/packages/ui/src/components/etape/add-etape-document-popup.tsx b/packages/ui/src/components/etape/add-etape-document-popup.tsx
index b4de69433..1f72152fa 100644
--- a/packages/ui/src/components/etape/add-etape-document-popup.tsx
+++ b/packages/ui/src/components/etape/add-etape-document-popup.tsx
@@ -10,7 +10,7 @@ import { EtapeDocumentModification, TempEtapeDocument, etapeDocumentModification
 import { DsfrInputRadio } from '../_ui/dsfr-input-radio'
 import { VisibilityLabel } from './etape-documents'
 import { isEntrepriseOrBureauDEtude, User } from 'camino-common/src/roles'
-import { DocumentTypeTypeahead } from '../_common/document-type-typeahead'
+import { TypeaheadSmartSingle } from '../_ui/typeahead-smart-single'
 
 interface Props {
   close: (document: EtapeDocumentModification | null) => void
@@ -58,6 +58,7 @@ export const AddEtapeDocumentPopup = defineComponent<Props>(props => {
   const updateDocumentTypeId = (documentTypeId: DocumentTypeId | null) => {
     etapeDocumentTypeId.value = documentTypeId
   }
+
   const content = () => (
     <form>
       {props.documentTypeIds.length === 1 ? null : (
@@ -67,7 +68,7 @@ export const AddEtapeDocumentPopup = defineComponent<Props>(props => {
               <label class="fr-label" for="type">
                 Type de document
               </label>
-              <DocumentTypeTypeahead documentTypeIds={props.documentTypeIds} documentTypeIdSelected={updateDocumentTypeId} />
+              <TypeaheadSmartSingle possibleValues={props.documentTypeIds.map(id => DocumentsTypes[id])} valueIdSelected={updateDocumentTypeId} />
             </div>
           </div>
         </fieldset>
diff --git a/packages/ui/src/components/etape/autocomplete-entreprise-single.tsx b/packages/ui/src/components/etape/autocomplete-entreprise-single.tsx
index 70a5f5eb8..daa41c9b8 100644
--- a/packages/ui/src/components/etape/autocomplete-entreprise-single.tsx
+++ b/packages/ui/src/components/etape/autocomplete-entreprise-single.tsx
@@ -6,7 +6,7 @@ import { TypeAheadSingle } from '../_ui/typeahead-single'
 
 interface Props {
   initialValue?: DeepReadonly<EntrepriseId | null>
-  items: DeepReadonly<Entreprise[]>
+  items: DeepReadonly<Entreprise>[]
   onUpdate: (entreprise: DeepReadonly<EntrepriseId | null>) => void
   id?: string
 }
@@ -35,7 +35,7 @@ export const AutocompleteEntrepriseSingle = defineComponent<Props>(props => {
     setCurrentEntrepriseId(entreprise?.id ?? null)
   }
 
-  const filteredItems = computed<Readonly<Entreprise[]>>(() => {
+  const filteredItems = computed<DeepReadonly<Entreprise>[]>(() => {
     if (currentSearch.value.length === 0) {
       return props.items
     }
diff --git a/packages/ui/src/components/etape/date-type-edit.tsx b/packages/ui/src/components/etape/date-type-edit.tsx
index 7b2ac0d84..8daa8ea3d 100644
--- a/packages/ui/src/components/etape/date-type-edit.tsx
+++ b/packages/ui/src/components/etape/date-type-edit.tsx
@@ -9,7 +9,6 @@ import { DemarcheId } from 'camino-common/src/demarche'
 import { ApiClient } from '../../api/api-client'
 import { EtapeStatutId } from 'camino-common/src/static/etapesStatuts'
 import { DsfrInput } from '../_ui/dsfr-input'
-import { User, isAdministrationAdmin, isAdministrationEditeur, isSuper } from 'camino-common/src/roles'
 
 export type EtapeDateTypeEdit = DeepReadonly<{
   statutId: EtapeStatutId | null
@@ -25,17 +24,6 @@ export interface Props {
   completeUpdate: (etape: Props['etape']) => void
 }
 
-export const dateTypeStepIsVisible = (user: User): boolean => {
-  return isSuper(user) || isAdministrationAdmin(user) || isAdministrationEditeur(user)
-}
-export const dateTypeStepIsComplete = (etape: EtapeDateTypeEdit, user: User): boolean => {
-  if (!dateTypeStepIsVisible(user)) {
-    return true
-  }
-
-  return isNotNullNorUndefined(etape.date) && isNotNullNorUndefined(etape.typeId) && isNotNullNorUndefined(etape.statutId)
-}
-
 export const DateTypeEdit = defineComponent<Props>(props => {
   const [date, setDate] = useState(props.etape.date)
   const [typeStatut, setTypeStatut] = useState({ etapeTypeId: props.etape.typeId, etapeStatutId: props.etape.statutId })
diff --git a/packages/ui/src/components/etape/etape-api-client.ts b/packages/ui/src/components/etape/etape-api-client.ts
index 7b9b0b9e4..0e0340a9e 100644
--- a/packages/ui/src/components/etape/etape-api-client.ts
+++ b/packages/ui/src/components/etape/etape-api-client.ts
@@ -1,28 +1,17 @@
 import { apiGraphQLFetch } from '@/api/_client'
-import { deleteWithJson, getWithJson, putWithJson } from '@/api/client-rest'
+import { deleteWithJson, getWithJson, postWithJson, putWithJson } from '@/api/client-rest'
 import { CaminoDate, caminoDateValidator } from 'camino-common/src/date'
 import { DemarcheId } from 'camino-common/src/demarche'
 import { entrepriseIdValidator } from 'camino-common/src/entreprise'
-import { EtapeId, EtapeIdOrSlug, EtapeTypeEtapeStatutWithMainStep, GetEtapeDocumentsByEtapeId } from 'camino-common/src/etape'
-import {
-  FlattenEtape,
-  GraphqlEtapeCreation,
-  GraphqlEtapeModification,
-  flattenEtapeValidator,
-  graphqlEtapeCreationValidator,
-  graphqlEtapeModificationValidator,
-  graphqlEtapeValidator,
-} from 'camino-common/src/etape-form'
+import { EtapeId, EtapeIdOrSlug, EtapeTypeEtapeStatutWithMainStep, GetEtapeAvisByEtapeId, GetEtapeDocumentsByEtapeId } from 'camino-common/src/etape'
+import { FlattenEtape, RestEtapeCreation, RestEtapeModification, restEtapeCreationValidator, restEtapeModificationValidator } from 'camino-common/src/etape-form'
 import { km2Validator } from 'camino-common/src/number'
 import { featureCollectionForagesValidator, featureCollectionPointsValidator, featureMultiPolygonValidator } from 'camino-common/src/perimetre'
-import { DemarcheTypeId } from 'camino-common/src/static/demarchesTypes'
 import { etapeTypeIdValidator } from 'camino-common/src/static/etapesTypes'
 import { geoSystemeIdValidator } from 'camino-common/src/static/geoSystemes'
 import { substanceLegaleIdValidator } from 'camino-common/src/static/substancesLegales'
-import { TitreTypeId } from 'camino-common/src/static/titresTypes'
-import { getSections } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections'
 import { GetDemarcheByIdOrSlugValidator } from 'camino-common/src/titres'
-import { DeepReadonly, Nullable, isNotNullNorUndefined } from 'camino-common/src/typescript-tools'
+import { DeepReadonly, Nullable } from 'camino-common/src/typescript-tools'
 import { nullToDefault } from 'camino-common/src/zod-tools'
 import gql from 'graphql-tag'
 import { DistributiveOmit } from 'maplibre-gl'
@@ -86,6 +75,7 @@ const heritageValidator = z.object({
   heritageProps: heritagePropsValidator,
   heritageContenu: heritageContenuValidator,
 })
+export type GetEtapeHeritagePotentiel = z.infer<typeof heritageValidator>
 
 export type CoreEtapeCreationOrModification = Pick<Nullable<FlattenEtape>, 'id' | 'slug'> & DistributiveOmit<FlattenEtape, 'id' | 'slug'>
 export interface EtapeApiClient {
@@ -93,285 +83,32 @@ export interface EtapeApiClient {
   deleteEtape: (titreEtapeId: EtapeId) => Promise<void>
   deposeEtape: (titreEtapeId: EtapeId) => Promise<void>
   getEtapeDocumentsByEtapeId: (etapeId: EtapeId) => Promise<GetEtapeDocumentsByEtapeId>
-  getEtapeHeritagePotentiel: (
-    etape: DeepReadonly<CoreEtapeCreationOrModification>,
-    titreDemarcheId: DemarcheId,
-    titreTypeId: TitreTypeId,
-    demarcheTypeId: DemarcheTypeId
-  ) => Promise<DeepReadonly<CoreEtapeCreationOrModification>>
+  getEtapeHeritagePotentiel: (etape: DeepReadonly<Pick<CoreEtapeCreationOrModification, 'id' | 'date' | 'typeId'>>, titreDemarcheId: DemarcheId) => Promise<DeepReadonly<GetEtapeHeritagePotentiel>>
+  getEtapeAvisByEtapeId: (etapeId: EtapeId) => Promise<GetEtapeAvisByEtapeId>
   getEtape: (etapeIdOrSlug: EtapeIdOrSlug) => Promise<DeepReadonly<{ etape: FlattenEtape; demarche: GetDemarcheByIdOrSlugValidator }>>
-  etapeCreer: (etape: DeepReadonly<GraphqlEtapeCreation>) => Promise<EtapeId>
-  etapeModifier: (etape: DeepReadonly<GraphqlEtapeModification>) => Promise<EtapeId>
+  etapeCreer: (etape: DeepReadonly<RestEtapeCreation>) => Promise<EtapeId>
+  etapeModifier: (etape: DeepReadonly<RestEtapeModification>) => Promise<EtapeId>
 }
 
 export const etapeApiClient: EtapeApiClient = {
   getEtapesTypesEtapesStatuts: async (demarcheId, etapeId, date) => getWithJson('/rest/etapesTypes/:demarcheId/:date', { demarcheId, date }, etapeId ? { etapeId } : {}),
 
-  deleteEtape: async etapeId => {
-    await deleteWithJson('/rest/etapes/:etapeId', { etapeId })
+  deleteEtape: async etapeIdOrSlug => {
+    await deleteWithJson('/rest/etapes/:etapeIdOrSlug', { etapeIdOrSlug })
   },
   deposeEtape: async etapeId => {
     await putWithJson('/rest/etapes/:etapeId/depot', { etapeId }, undefined)
   },
 
   getEtapeDocumentsByEtapeId: async etapeId => getWithJson('/rest/etapes/:etapeId/etapeDocuments', { etapeId }),
+  getEtapeAvisByEtapeId: async etapeId => getWithJson('/rest/etapes/:etapeId/etapeAvis', { etapeId }),
 
   getEtape: async etapeIdOrSlug => {
-    const data = await apiGraphQLFetch(gql`
-      query Etape($id: ID!) {
-        etape(id: $id) {
-          id
-          slug
-          titreDemarcheId
-          demarche {
-            description
-            slug
-            typeId
-            titre {
-              id
-              slug
-              nom
-              typeId
-            }
-          }
-          date
-          dateDebut
-          dateFin
-          duree
-          surface
-          typeId
-          statutId
-          isBrouillon
-          titulaireIds
-          amodiataireIds
-          geojson4326Perimetre
-          geojson4326Points
-          geojsonOriginePoints
-          geojsonOriginePerimetre
-          geojsonOrigineGeoSystemeId
-          geojson4326Forages
-          geojsonOrigineForages
-          substances
-          contenu
-          notes
-
-          heritageProps {
-            dateDebut {
-              etape {
-                date
-                typeId
-                dateDebut
-              }
-              actif
-            }
-            dateFin {
-              etape {
-                date
-                typeId
-                dateFin
-              }
-              actif
-            }
-            duree {
-              etape {
-                date
-                typeId
-                duree
-              }
-              actif
-            }
-            perimetre {
-              etape {
-                date
-                typeId
-                geojson4326Perimetre
-                geojson4326Points
-                geojsonOriginePoints
-                geojsonOriginePerimetre
-                geojsonOrigineGeoSystemeId
-                geojson4326Forages
-                geojsonOrigineForages
-                surface
-              }
-              actif
-            }
-            substances {
-              etape {
-                date
-                typeId
-                substances
-              }
-              actif
-            }
-            titulaires {
-              etape {
-                date
-                typeId
-                titulaireIds
-              }
-              actif
-            }
-            amodiataires {
-              etape {
-                date
-                typeId
-                amodiataireIds
-              }
-              actif
-            }
-          }
-
-          heritageContenu
-        }
-      }
-    `)({ id: etapeIdOrSlug })
-    // TODO 2024-06-02 ce code est à remonter dans l'api
-    const result = graphqlEtapeValidator.safeParse(data)
-    if (result.success) {
-      const graphqlEtape = result.data
-
-      const sections = getSections(graphqlEtape.demarche.titre.typeId, graphqlEtape.demarche.typeId, graphqlEtape.typeId)
-
-      const flattenEtape: FlattenEtape = {
-        ...graphqlEtape,
-        duree: {
-          value: graphqlEtape.heritageProps.duree.actif ? graphqlEtape.heritageProps.duree.etape?.duree ?? null : graphqlEtape.duree,
-          heritee: graphqlEtape.heritageProps.duree.actif,
-          etapeHeritee: isNotNullNorUndefined(graphqlEtape.heritageProps.duree.etape)
-            ? {
-                etapeTypeId: graphqlEtape.heritageProps.duree.etape.typeId,
-                date: graphqlEtape.heritageProps.duree.etape.date,
-                value: graphqlEtape.heritageProps.duree.etape.duree,
-              }
-            : null,
-        },
-        perimetre: {
-          value: graphqlEtape.heritageProps.perimetre.actif
-            ? isNotNullNorUndefined(graphqlEtape.heritageProps.perimetre.etape)
-              ? { ...graphqlEtape.heritageProps.perimetre.etape }
-              : null
-            : { ...graphqlEtape },
-
-          heritee: graphqlEtape.heritageProps.perimetre.actif,
-          etapeHeritee: isNotNullNorUndefined(graphqlEtape.heritageProps.perimetre.etape)
-            ? {
-                etapeTypeId: graphqlEtape.heritageProps.perimetre.etape.typeId,
-                date: graphqlEtape.heritageProps.perimetre.etape.date,
-                value: { ...graphqlEtape.heritageProps.perimetre.etape },
-              }
-            : null,
-        },
-        dateDebut: {
-          value: graphqlEtape.heritageProps.dateDebut.actif ? graphqlEtape.heritageProps.dateDebut.etape?.dateDebut ?? null : graphqlEtape.dateDebut,
-          heritee: graphqlEtape.heritageProps.dateDebut.actif,
-          etapeHeritee: isNotNullNorUndefined(graphqlEtape.heritageProps.dateDebut.etape)
-            ? {
-                etapeTypeId: graphqlEtape.heritageProps.dateDebut.etape.typeId,
-                date: graphqlEtape.heritageProps.dateDebut.etape.date,
-                value: graphqlEtape.heritageProps.dateDebut.etape.dateDebut,
-              }
-            : null,
-        },
-        dateFin: {
-          value: graphqlEtape.heritageProps.dateFin.actif ? graphqlEtape.heritageProps.dateFin.etape?.dateFin ?? null : graphqlEtape.dateFin,
-          heritee: graphqlEtape.heritageProps.dateFin.actif,
-          etapeHeritee: isNotNullNorUndefined(graphqlEtape.heritageProps.dateFin.etape)
-            ? {
-                etapeTypeId: graphqlEtape.heritageProps.dateFin.etape.typeId,
-                date: graphqlEtape.heritageProps.dateFin.etape.date,
-                value: graphqlEtape.heritageProps.dateFin.etape.dateFin,
-              }
-            : null,
-        },
-        substances: {
-          value: graphqlEtape.heritageProps.substances.actif
-            ? isNotNullNorUndefined(graphqlEtape.heritageProps.substances.etape)
-              ? graphqlEtape.heritageProps.substances.etape.substances
-              : []
-            : graphqlEtape.substances,
-
-          heritee: graphqlEtape.heritageProps.substances.actif,
-          etapeHeritee: isNotNullNorUndefined(graphqlEtape.heritageProps.substances.etape)
-            ? {
-                etapeTypeId: graphqlEtape.heritageProps.substances.etape.typeId,
-                date: graphqlEtape.heritageProps.substances.etape.date,
-                value: graphqlEtape.heritageProps.substances.etape.substances,
-              }
-            : null,
-        },
-        amodiataires: {
-          value: graphqlEtape.heritageProps.amodiataires.actif
-            ? isNotNullNorUndefined(graphqlEtape.heritageProps.amodiataires.etape)
-              ? graphqlEtape.heritageProps.amodiataires.etape.amodiataireIds
-              : []
-            : graphqlEtape.amodiataireIds,
-
-          heritee: graphqlEtape.heritageProps.amodiataires.actif,
-          etapeHeritee: isNotNullNorUndefined(graphqlEtape.heritageProps.amodiataires.etape)
-            ? {
-                etapeTypeId: graphqlEtape.heritageProps.amodiataires.etape.typeId,
-                date: graphqlEtape.heritageProps.amodiataires.etape.date,
-                value: graphqlEtape.heritageProps.amodiataires.etape.amodiataireIds,
-              }
-            : null,
-        },
-        titulaires: {
-          value: graphqlEtape.heritageProps.titulaires.actif
-            ? isNotNullNorUndefined(graphqlEtape.heritageProps.titulaires.etape)
-              ? graphqlEtape.heritageProps.titulaires.etape.titulaireIds
-              : []
-            : graphqlEtape.titulaireIds,
-
-          heritee: graphqlEtape.heritageProps.titulaires.actif,
-          etapeHeritee: isNotNullNorUndefined(graphqlEtape.heritageProps.titulaires.etape)
-            ? {
-                etapeTypeId: graphqlEtape.heritageProps.titulaires.etape.typeId,
-                date: graphqlEtape.heritageProps.titulaires.etape.date,
-                value: graphqlEtape.heritageProps.titulaires.etape.titulaireIds,
-              }
-            : null,
-        },
-
-        contenu: sections.reduce<FlattenEtape['contenu']>((accSection, section) => {
-          accSection[section.id] = section.elements.reduce<FlattenEtape['contenu'][string]>((accElement, element) => {
-            const elementHeritage = graphqlEtape.heritageContenu[section.id]?.[element.id] ?? { actif: false, etape: null }
-            accElement[element.id] = {
-              value: elementHeritage.actif ? elementHeritage.etape?.contenu[section.id]?.[element.id] ?? null : graphqlEtape.contenu[section.id]?.[element.id] ?? null,
-              heritee: elementHeritage.actif,
-              etapeHeritee: isNotNullNorUndefined(elementHeritage.etape)
-                ? {
-                    etapeTypeId: elementHeritage.etape.typeId,
-                    date: elementHeritage.etape.date,
-                    value: elementHeritage.etape.contenu[section.id]?.[element.id] ?? null,
-                  }
-                : null,
-            }
-
-            return accElement
-          }, {})
-
-          return accSection
-        }, {}),
-      }
-
-      const demarche: GetDemarcheByIdOrSlugValidator = {
-        demarche_description: graphqlEtape.demarche.description,
-        demarche_id: graphqlEtape.titreDemarcheId,
-        demarche_slug: graphqlEtape.demarche.slug,
-        demarche_type_id: graphqlEtape.demarche.typeId,
-        titre_id: graphqlEtape.demarche.titre.id,
-        titre_nom: graphqlEtape.demarche.titre.nom,
-        titre_slug: graphqlEtape.demarche.titre.slug,
-        titre_type_id: graphqlEtape.demarche.titre.typeId,
-      }
-
-      // On flatten ici pour enlever les champs supplémentaires qu'il y'a par exemple dans perimetre
-      return { etape: flattenEtapeValidator.parse(flattenEtape), demarche }
-    }
-    console.warn(result.error.message)
-    throw result.error
+    const etape = await getWithJson('/rest/etapes/:etapeIdOrSlug', { etapeIdOrSlug })
+    const demarche = await getWithJson('/rest/demarches/:demarcheIdOrSlug', { demarcheIdOrSlug: etape.titreDemarcheId })
+    return { etape, demarche }
   },
-  getEtapeHeritagePotentiel: async (etape, titreDemarcheId, titreTypeId, demarcheTypeId) => {
+  getEtapeHeritagePotentiel: async (etape, titreDemarcheId) => {
     const data = await apiGraphQLFetch(gql`
       query EtapeHeritage($titreDemarcheId: ID!, $date: String!, $typeId: ID!, $etapeId: ID) {
         etapeHeritage(titreDemarcheId: $titreDemarcheId, date: $date, typeId: $typeId, etapeId: $etapeId) {
@@ -453,144 +190,16 @@ export const etapeApiClient: EtapeApiClient = {
 
     // TODO 2024-06-02 on a du code métier dans notre api, on fusionne étape avec l'héritage
     const heritageData: DeepReadonly<z.infer<typeof heritageValidator>> = heritageValidator.parse(data)
-    const sections = getSections(titreTypeId, demarcheTypeId, etape.typeId)
-    const flattenEtape: DeepReadonly<CoreEtapeCreationOrModification> = {
-      ...etape,
-      contenu: sections.reduce<DeepReadonly<FlattenEtape['contenu']>>((accSection, section) => {
-        const newSection = section.elements.reduce<DeepReadonly<FlattenEtape['contenu'][string]>>((accElement, element) => {
-          const elementHeritage = heritageData.heritageContenu[section.id]?.[element.id] ?? { actif: false, etape: null }
-          const currentHeritage: DeepReadonly<FlattenEtape['contenu'][string][string]> = etape.contenu[section.id]?.[element.id] ?? { value: null, heritee: true, etapeHeritee: null }
-          return {
-            ...accElement,
-            [element.id]: {
-              value: currentHeritage.heritee ? elementHeritage.etape?.contenu?.[section.id]?.[element.id] ?? null : currentHeritage.value,
-              heritee: currentHeritage.heritee && isNotNullNorUndefined(elementHeritage.etape),
-              etapeHeritee: isNotNullNorUndefined(elementHeritage.etape)
-                ? {
-                    etapeTypeId: elementHeritage.etape.typeId,
-                    date: elementHeritage.etape.date,
-                    value: elementHeritage.etape.contenu[section.id]?.[element.id] ?? null,
-                  }
-                : null,
-            },
-          }
-        }, {})
-
-        return {
-          ...accSection,
-          [section.id]: newSection,
-        }
-      }, {}),
-      duree: {
-        value: etape.duree.heritee ? heritageData.heritageProps.duree.etape?.duree ?? null : etape.duree.value,
-        heritee: etape.duree.heritee && isNotNullNorUndefined(heritageData.heritageProps.duree.etape),
-        etapeHeritee: isNotNullNorUndefined(heritageData.heritageProps.duree.etape)
-          ? {
-              etapeTypeId: heritageData.heritageProps.duree.etape.typeId,
-              date: heritageData.heritageProps.duree.etape.date,
-              value: heritageData.heritageProps.duree.etape.duree,
-            }
-          : null,
-      },
-      perimetre: {
-        value: etape.perimetre.heritee ? (isNotNullNorUndefined(heritageData.heritageProps.perimetre.etape) ? { ...heritageData.heritageProps.perimetre.etape } : null) : etape.perimetre.value,
-
-        heritee: etape.perimetre.heritee && isNotNullNorUndefined(heritageData.heritageProps.perimetre.etape),
-        etapeHeritee: isNotNullNorUndefined(heritageData.heritageProps.perimetre.etape)
-          ? {
-              etapeTypeId: heritageData.heritageProps.perimetre.etape.typeId,
-              date: heritageData.heritageProps.perimetre.etape.date,
-              value: { ...heritageData.heritageProps.perimetre.etape },
-            }
-          : null,
-      },
-      dateDebut: {
-        value: etape.dateDebut.heritee ? heritageData.heritageProps.dateDebut.etape?.dateDebut ?? null : etape.dateDebut.value,
-        heritee: etape.dateDebut.heritee && isNotNullNorUndefined(heritageData.heritageProps.dateDebut.etape),
-        etapeHeritee: isNotNullNorUndefined(heritageData.heritageProps.dateDebut.etape)
-          ? {
-              etapeTypeId: heritageData.heritageProps.dateDebut.etape.typeId,
-              date: heritageData.heritageProps.dateDebut.etape.date,
-              value: heritageData.heritageProps.dateDebut.etape.dateDebut,
-            }
-          : null,
-      },
-      dateFin: {
-        value: etape.dateFin.heritee ? heritageData.heritageProps.dateFin.etape?.dateFin ?? null : etape.dateFin.value,
-        heritee: etape.dateFin.heritee && isNotNullNorUndefined(heritageData.heritageProps.dateFin.etape),
-        etapeHeritee: isNotNullNorUndefined(heritageData.heritageProps.dateFin.etape)
-          ? {
-              etapeTypeId: heritageData.heritageProps.dateFin.etape.typeId,
-              date: heritageData.heritageProps.dateFin.etape.date,
-              value: heritageData.heritageProps.dateFin.etape.dateFin,
-            }
-          : null,
-      },
-      substances: {
-        value: etape.substances.heritee ? (isNotNullNorUndefined(heritageData.heritageProps.substances.etape) ? heritageData.heritageProps.substances.etape.substances : []) : etape.substances.value,
-
-        heritee: etape.substances.heritee && isNotNullNorUndefined(heritageData.heritageProps.substances.etape),
-        etapeHeritee: isNotNullNorUndefined(heritageData.heritageProps.substances.etape)
-          ? {
-              etapeTypeId: heritageData.heritageProps.substances.etape.typeId,
-              date: heritageData.heritageProps.substances.etape.date,
-              value: heritageData.heritageProps.substances.etape.substances,
-            }
-          : null,
-      },
-      amodiataires: {
-        value: etape.amodiataires.heritee
-          ? isNotNullNorUndefined(heritageData.heritageProps.amodiataires.etape)
-            ? heritageData.heritageProps.amodiataires.etape.amodiataireIds
-            : []
-          : etape.amodiataires.value,
-
-        heritee: etape.amodiataires.heritee && isNotNullNorUndefined(heritageData.heritageProps.amodiataires.etape),
-        etapeHeritee: isNotNullNorUndefined(heritageData.heritageProps.amodiataires.etape)
-          ? {
-              etapeTypeId: heritageData.heritageProps.amodiataires.etape.typeId,
-              date: heritageData.heritageProps.amodiataires.etape.date,
-              value: heritageData.heritageProps.amodiataires.etape.amodiataireIds,
-            }
-          : null,
-      },
-      titulaires: {
-        value: etape.titulaires.heritee ? (isNotNullNorUndefined(heritageData.heritageProps.titulaires.etape) ? heritageData.heritageProps.titulaires.etape.titulaireIds : []) : etape.titulaires.value,
-
-        heritee: etape.titulaires.heritee && isNotNullNorUndefined(heritageData.heritageProps.titulaires.etape),
-        etapeHeritee: isNotNullNorUndefined(heritageData.heritageProps.titulaires.etape)
-          ? {
-              etapeTypeId: heritageData.heritageProps.titulaires.etape.typeId,
-              date: heritageData.heritageProps.titulaires.etape.date,
-              value: heritageData.heritageProps.titulaires.etape.titulaireIds,
-            }
-          : null,
-      },
-    }
-    return flattenEtape
+    return heritageData
   },
 
   etapeCreer: async etape => {
-    const result = await apiGraphQLFetch(gql`
-      mutation EtapeCreer($etape: InputEtapeCreation!) {
-        etapeCreer(etape: $etape) {
-          id
-        }
-      }
-    `)({ etape: graphqlEtapeCreationValidator.parse(etape) })
-
-    return result.id
+    return postWithJson('/rest/etapes', {}, restEtapeCreationValidator.parse(etape))
   },
 
   etapeModifier: async etape => {
-    const result = await apiGraphQLFetch(gql`
-      mutation EtapeModifier($etape: InputEtapeModification!) {
-        etapeModifier(etape: $etape) {
-          id
-        }
-      }
-    `)({ etape: graphqlEtapeModificationValidator.parse(etape) })
+    await putWithJson('/rest/etapes', {}, restEtapeModificationValidator.parse(etape))
 
-    return result.id
+    return etape.id
   },
 }
diff --git a/packages/ui/src/components/etape/etape-avis-edit.stories.tsx b/packages/ui/src/components/etape/etape-avis-edit.stories.tsx
new file mode 100644
index 000000000..18992f457
--- /dev/null
+++ b/packages/ui/src/components/etape/etape-avis-edit.stories.tsx
@@ -0,0 +1,104 @@
+import { Meta, StoryFn } from '@storybook/vue3'
+import { EtapeAvisEdit } from './etape-avis-edit'
+import { EtapeAvis, etapeAvisIdValidator, etapeIdValidator } from 'camino-common/src/etape'
+import { ApiClient } from '../../api/api-client'
+import { action } from '@storybook/addon-actions'
+import { tempDocumentNameValidator } from 'camino-common/src/document'
+import { caminoDateValidator } from 'camino-common/src/date'
+import { AvisVisibilityIds } from 'camino-common/src/static/avisTypes'
+import { testBlankUser } from 'camino-common/src/tests-utils'
+import { communeIdValidator } from 'camino-common/src/static/communes'
+
+const meta: Meta = {
+  title: 'Components/Etape/EtapeAvisEdit',
+  // @ts-ignore
+  component: EtapeAvisEdit,
+  decorators: [() => ({ template: '<div class="dsfr"><story/></div>' })],
+}
+export default meta
+
+const avis: EtapeAvis[] = [
+  {
+    id: etapeAvisIdValidator.parse('id'),
+    avis_type_id: 'confirmationAccordProprietaireDuSol',
+    description: 'Une description',
+    date: caminoDateValidator.parse('2023-02-01'),
+    avis_statut_id: 'Favorable',
+    has_file: false,
+    avis_visibility_id: AvisVisibilityIds.Administrations,
+  },
+  {
+    id: etapeAvisIdValidator.parse('id-car'),
+    avis_type_id: 'lettreDeSaisineDesServices',
+    description: 'Une description',
+    date: caminoDateValidator.parse('2023-02-01'),
+    avis_statut_id: 'Non renseigné',
+    has_file: false,
+    avis_visibility_id: AvisVisibilityIds.Public,
+  },
+]
+
+const uploadTempDocumentAction = action('uploadTempDocument')
+const getEtapeAvisByEtapeIdAction = action('getEtapeAvisByEtapeId')
+
+const apiClient: Pick<ApiClient, 'uploadTempDocument' | 'getEtapeAvisByEtapeId'> = {
+  getEtapeAvisByEtapeId: etapeId => {
+    getEtapeAvisByEtapeIdAction(etapeId)
+
+    return Promise.resolve(avis)
+  },
+  uploadTempDocument: document => {
+    uploadTempDocumentAction(document)
+
+    return Promise.resolve(tempDocumentNameValidator.parse(new Date().toISOString()))
+  },
+}
+
+const completeUpdateAction = action('completeUpdate')
+
+export const Empty: StoryFn = () => (
+  <EtapeAvisEdit
+    apiClient={{ ...apiClient, getEtapeAvisByEtapeId: () => Promise.resolve([]) }}
+    etapeId={etapeIdValidator.parse('etapeId')}
+    communeIds={[]}
+    tde={{ titreTypeId: 'arm', demarcheTypeId: 'oct', etapeTypeId: 'mfr' }}
+    onChange={completeUpdateAction}
+    user={{ ...testBlankUser, role: 'super' }}
+  />
+)
+export const Rempli: StoryFn = () => (
+  <EtapeAvisEdit
+    apiClient={apiClient}
+    etapeId={etapeIdValidator.parse('etapeId')}
+    communeIds={[]}
+    tde={{ titreTypeId: 'axm', demarcheTypeId: 'oct', etapeTypeId: 'asc' }}
+    onChange={completeUpdateAction}
+    user={{ ...testBlankUser, role: 'super' }}
+  />
+)
+export const AvisEnGuyane: StoryFn = () => (
+  <EtapeAvisEdit
+    apiClient={{
+      ...apiClient,
+      getEtapeAvisByEtapeId: async () => {
+        return Promise.resolve([
+          ...avis,
+          {
+            id: etapeAvisIdValidator.parse('id-guyane'),
+            avis_type_id: 'avisDirectionAlimentationAgricultureForet',
+            description: 'Visible que en Guyane',
+            date: caminoDateValidator.parse('2023-02-01'),
+            avis_statut_id: 'Non renseigné',
+            has_file: false,
+            avis_visibility_id: AvisVisibilityIds.Public,
+          },
+        ])
+      },
+    }}
+    etapeId={etapeIdValidator.parse('etapeId')}
+    communeIds={[communeIdValidator.parse('97302')]}
+    tde={{ titreTypeId: 'axm', demarcheTypeId: 'oct', etapeTypeId: 'asc' }}
+    onChange={completeUpdateAction}
+    user={{ ...testBlankUser, role: 'super' }}
+  />
+)
diff --git a/packages/ui/src/components/etape/etape-avis-edit.stories_snapshots_AvisEnGuyane.html b/packages/ui/src/components/etape/etape-avis-edit.stories_snapshots_AvisEnGuyane.html
new file mode 100644
index 000000000..7b256e254
--- /dev/null
+++ b/packages/ui/src/components/etape/etape-avis-edit.stories_snapshots_AvisEnGuyane.html
@@ -0,0 +1,97 @@
+<div class="dsfr">
+  <div class="fr-table fr-mb-0">
+    <table style="display: table;">
+      <caption>Avis obligatoires</caption>
+      <thead>
+        <tr>
+          <th scope="col">Nom</th>
+          <th scope="col">Date</th>
+          <th scope="col">Description</th>
+          <th scope="col">Statut</th>
+          <th scope="col">Visibilité</th>
+          <th scope="col" style="display: flex; justify-content: end;">Action</th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td>Lettre de saisine des services</td>
+          <td>01-02-2023</td>
+          <td style="white-space: pre-line;">Une description</td>
+          <td>
+            <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--beige-gris-galet" title="Non renseigné" aria-label="Non renseigné">Non renseigné</p>
+          </td>
+          <td>Public</td>
+          <td>
+            <div style="display: flex; justify-content: end; align-items: center;"><button class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-edit-line" title="Modifier l’avis de Lettre de saisine des services" aria-label="Modifier l’avis de Lettre de saisine des services" type="button">
+                <!---->
+              </button><button class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-delete-bin-line fr-ml-1w" title="Supprimer l’avis de Lettre de saisine des services" aria-label="Supprimer l’avis de Lettre de saisine des services" type="button">
+                <!---->
+              </button></div>
+          </td>
+        </tr>
+        <tr>
+          <td class="fr-label--disabled">Avis de l'Office National des Forêts</td>
+          <td>-</td>
+          <td>-</td>
+          <td>-</td>
+          <td>-</td>
+          <td style="display: flex; justify-content: end;"><button class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-add-line" title="Ajouter un document Avis de l'Office National des Forêts" aria-label="Ajouter un document Avis de l'Office National des Forêts" type="button">
+              <!---->
+            </button></td>
+        </tr>
+      </tbody>
+    </table>
+  </div>
+  <div style="display: flex; flex-direction: column;" class="fr-mt-3w">
+    <div class="fr-table fr-mb-0">
+      <table style="display: table;">
+        <caption>Avis complémentaires</caption>
+        <thead>
+          <tr>
+            <th scope="col">Nom</th>
+            <th scope="col">Date</th>
+            <th scope="col">Description</th>
+            <th scope="col">Statut</th>
+            <th scope="col">Visibilité</th>
+            <th scope="col" style="display: flex; justify-content: end;">Action</th>
+          </tr>
+        </thead>
+        <tbody>
+          <tr>
+            <td>Confirmation de l'accord du propriétaire du sol</td>
+            <td>01-02-2023</td>
+            <td style="white-space: pre-line;">Une description</td>
+            <td>
+              <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--green-bourgeon" title="Favorable" aria-label="Favorable">Favorable</p>
+            </td>
+            <td>Visible par les administrations</td>
+            <td>
+              <div style="display: flex; justify-content: end; align-items: center;"><button class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-edit-line" title="Modifier l’avis de Confirmation de l'accord du propriétaire du sol" aria-label="Modifier l’avis de Confirmation de l'accord du propriétaire du sol" type="button">
+                  <!---->
+                </button><button class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-delete-bin-line fr-ml-1w" title="Supprimer l’avis de Confirmation de l'accord du propriétaire du sol" aria-label="Supprimer l’avis de Confirmation de l'accord du propriétaire du sol" type="button">
+                  <!---->
+                </button></div>
+            </td>
+          </tr>
+          <tr>
+            <td>Avis de la Direction de l'Alimentation de l'Agriculture et de la Forêt (DRAF)</td>
+            <td>01-02-2023</td>
+            <td style="white-space: pre-line;">Visible que en Guyane</td>
+            <td>
+              <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--beige-gris-galet" title="Non renseigné" aria-label="Non renseigné">Non renseigné</p>
+            </td>
+            <td>Public</td>
+            <td>
+              <div style="display: flex; justify-content: end; align-items: center;"><button class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-edit-line" title="Modifier l’avis de Avis de la Direction de l'Alimentation de l'Agriculture et de la Forêt (DRAF)" aria-label="Modifier l’avis de Avis de la Direction de l'Alimentation de l'Agriculture et de la Forêt (DRAF)" type="button">
+                  <!---->
+                </button><button class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-delete-bin-line fr-ml-1w" title="Supprimer l’avis de Avis de la Direction de l'Alimentation de l'Agriculture et de la Forêt (DRAF)" aria-label="Supprimer l’avis de Avis de la Direction de l'Alimentation de l'Agriculture et de la Forêt (DRAF)" type="button">
+                  <!---->
+                </button></div>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-add-line fr-btn--icon-right fr-mt-1w" title="Ajouter un avis complémentaire" aria-label="Ajouter un avis complémentaire" type="button" style="align-self: end;">Ajouter</button>
+  </div>
+  <!---->
+</div>
\ No newline at end of file
diff --git a/packages/ui/src/components/etape/etape-avis-edit.stories_snapshots_Empty.html b/packages/ui/src/components/etape/etape-avis-edit.stories_snapshots_Empty.html
new file mode 100644
index 000000000..846d5d23a
--- /dev/null
+++ b/packages/ui/src/components/etape/etape-avis-edit.stories_snapshots_Empty.html
@@ -0,0 +1,4 @@
+<div class="dsfr">
+  <!---->
+  <!---->
+</div>
\ No newline at end of file
diff --git a/packages/ui/src/components/etape/etape-avis-edit.stories_snapshots_Rempli.html b/packages/ui/src/components/etape/etape-avis-edit.stories_snapshots_Rempli.html
new file mode 100644
index 000000000..0064ba169
--- /dev/null
+++ b/packages/ui/src/components/etape/etape-avis-edit.stories_snapshots_Rempli.html
@@ -0,0 +1,81 @@
+<div class="dsfr">
+  <div class="fr-table fr-mb-0">
+    <table style="display: table;">
+      <caption>Avis obligatoires</caption>
+      <thead>
+        <tr>
+          <th scope="col">Nom</th>
+          <th scope="col">Date</th>
+          <th scope="col">Description</th>
+          <th scope="col">Statut</th>
+          <th scope="col">Visibilité</th>
+          <th scope="col" style="display: flex; justify-content: end;">Action</th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td>Lettre de saisine des services</td>
+          <td>01-02-2023</td>
+          <td style="white-space: pre-line;">Une description</td>
+          <td>
+            <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--beige-gris-galet" title="Non renseigné" aria-label="Non renseigné">Non renseigné</p>
+          </td>
+          <td>Public</td>
+          <td>
+            <div style="display: flex; justify-content: end; align-items: center;"><button class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-edit-line" title="Modifier l’avis de Lettre de saisine des services" aria-label="Modifier l’avis de Lettre de saisine des services" type="button">
+                <!---->
+              </button><button class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-delete-bin-line fr-ml-1w" title="Supprimer l’avis de Lettre de saisine des services" aria-label="Supprimer l’avis de Lettre de saisine des services" type="button">
+                <!---->
+              </button></div>
+          </td>
+        </tr>
+        <tr>
+          <td class="fr-label--disabled">Avis de l'Office National des Forêts</td>
+          <td>-</td>
+          <td>-</td>
+          <td>-</td>
+          <td>-</td>
+          <td style="display: flex; justify-content: end;"><button class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-add-line" title="Ajouter un document Avis de l'Office National des Forêts" aria-label="Ajouter un document Avis de l'Office National des Forêts" type="button">
+              <!---->
+            </button></td>
+        </tr>
+      </tbody>
+    </table>
+  </div>
+  <div style="display: flex; flex-direction: column;" class="fr-mt-3w">
+    <div class="fr-table fr-mb-0">
+      <table style="display: table;">
+        <caption>Avis complémentaires</caption>
+        <thead>
+          <tr>
+            <th scope="col">Nom</th>
+            <th scope="col">Date</th>
+            <th scope="col">Description</th>
+            <th scope="col">Statut</th>
+            <th scope="col">Visibilité</th>
+            <th scope="col" style="display: flex; justify-content: end;">Action</th>
+          </tr>
+        </thead>
+        <tbody>
+          <tr>
+            <td>Confirmation de l'accord du propriétaire du sol</td>
+            <td>01-02-2023</td>
+            <td style="white-space: pre-line;">Une description</td>
+            <td>
+              <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--green-bourgeon" title="Favorable" aria-label="Favorable">Favorable</p>
+            </td>
+            <td>Visible par les administrations</td>
+            <td>
+              <div style="display: flex; justify-content: end; align-items: center;"><button class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-edit-line" title="Modifier l’avis de Confirmation de l'accord du propriétaire du sol" aria-label="Modifier l’avis de Confirmation de l'accord du propriétaire du sol" type="button">
+                  <!---->
+                </button><button class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-delete-bin-line fr-ml-1w" title="Supprimer l’avis de Confirmation de l'accord du propriétaire du sol" aria-label="Supprimer l’avis de Confirmation de l'accord du propriétaire du sol" type="button">
+                  <!---->
+                </button></div>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div><button class="fr-btn fr-btn--secondary fr-btn--md fr-icon-add-line fr-btn--icon-right fr-mt-1w" title="Ajouter un avis complémentaire" aria-label="Ajouter un avis complémentaire" type="button" style="align-self: end;">Ajouter</button>
+  </div>
+  <!---->
+</div>
\ No newline at end of file
diff --git a/packages/ui/src/components/etape/etape-avis-edit.tsx b/packages/ui/src/components/etape/etape-avis-edit.tsx
new file mode 100644
index 000000000..d68a44ff1
--- /dev/null
+++ b/packages/ui/src/components/etape/etape-avis-edit.tsx
@@ -0,0 +1,251 @@
+import { EtapeAvis, EtapeAvisModification, EtapeId, TempEtapeAvis } from 'camino-common/src/etape'
+import { DemarcheTypeId } from 'camino-common/src/static/demarchesTypes'
+import { EtapeTypeId } from 'camino-common/src/static/etapesTypes'
+import { TitreTypeId } from 'camino-common/src/static/titresTypes'
+import { ApiClient } from '../../api/api-client'
+import { DeepReadonly, FunctionalComponent, computed, defineComponent, onMounted, ref, watch } from 'vue'
+import { isNonEmptyArray, isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty, isNullOrUndefined, NonEmptyArray } from 'camino-common/src/typescript-tools'
+import { LoadingElement } from '../_ui/functional-loader'
+import { AsyncData } from '../../api/client-rest'
+import { DsfrButtonIcon } from '../_ui/dsfr-button'
+import { AddEtapeAvisPopup } from './add-etape-avis-popup'
+import { getAvisTypes } from 'camino-common/src/permissions/etape-form'
+import { dateFormat } from 'camino-common/src/date'
+import { AvisStatut } from '../_common/etape-statut'
+import { AvisTypeId, AvisTypes } from 'camino-common/src/static/avisTypes'
+import { CommuneId } from 'camino-common/src/static/communes'
+import { getAvisVisibilityLabel } from './etape-avis'
+import { User } from 'camino-common/src/roles'
+
+interface Props {
+  tde: {
+    titreTypeId: TitreTypeId
+    demarcheTypeId: DemarcheTypeId
+    etapeTypeId: EtapeTypeId
+  }
+  onChange: (etapeAvis: (EtapeAvis | TempEtapeAvis)[]) => void
+  etapeId: EtapeId | null
+  communeIds: DeepReadonly<CommuneId[]>
+  apiClient: Pick<ApiClient, 'uploadTempDocument' | 'getEtapeAvisByEtapeId'>
+  user: User
+}
+
+type WithIndex = { index: number }
+
+type EtapeAvisModificationWithIndex = EtapeAvisModification & WithIndex
+export const EtapeAvisEdit = defineComponent<Props>(props => {
+  const etapeAvis = ref<AsyncData<EtapeAvis[]>>({ status: 'LOADING' })
+
+  onMounted(async () => {
+    if (isNotNullNorUndefined(props.etapeId)) {
+      etapeAvis.value = { status: 'LOADING' }
+      try {
+        const result = await props.apiClient.getEtapeAvisByEtapeId(props.etapeId)
+
+        etapeAvis.value = { status: 'LOADED', value: result }
+      } catch (e: any) {
+        console.error('error', e)
+        etapeAvis.value = {
+          status: 'ERROR',
+          message: e.message ?? "Une erreur s'est produite",
+        }
+      }
+    } else {
+      etapeAvis.value = { status: 'LOADED', value: [] }
+    }
+    if (etapeAvis.value.status === 'LOADED') {
+      props.onChange(etapeAvis.value.value)
+    }
+  })
+
+  return () => <LoadingElement data={etapeAvis.value} renderItem={avis => <EtapeAvisLoaded avis={avis} {...props} />} />
+})
+
+type EtapeAvisLoadedProps = { avis: EtapeAvis[] } & Props
+const EtapeAvisLoaded = defineComponent<EtapeAvisLoadedProps>(props => {
+  const etapeAvis = ref<EtapeAvisModificationWithIndex[]>(props.avis.map((avis, index) => ({ ...avis, index })))
+
+  watch(
+    () => etapeAvis.value,
+    () => {
+      props.onChange(etapeAvis.value)
+    },
+    { deep: true }
+  )
+
+  const addOrEditPopupOpen = ref<{ open: true; avisTypeIds: NonEmptyArray<AvisTypeId>; etapeAvis?: (EtapeAvis | TempEtapeAvis) & WithIndex } | { open: false }>({ open: false })
+
+  const avisTypes = computed(() => {
+    return getAvisTypes(props.tde.etapeTypeId, props.tde.titreTypeId, props.communeIds)
+  })
+
+  const completeRequiredAvis = computed<PropsTable['avis']>(() => {
+    const avis: PropsTable['avis'] = etapeAvis.value.filter(({ avis_type_id }) => avisTypes.value.some(dt => dt.id === avis_type_id && !dt.optionnel))
+
+    return avis
+  })
+  const emptyRequiredAvis = computed<AvisTypeId[]>(() => {
+    const avis = avisTypes.value.filter(({ optionnel, id }) => !optionnel && !completeRequiredAvis.value.some(({ avis_type_id }) => avis_type_id === id)).map(({ id }) => id)
+
+    return avis
+  })
+  const additionnalAvisTypeIds = computed<AvisTypeId[]>(() => {
+    return avisTypes.value.filter(dt => dt.optionnel).map(({ id }) => id)
+  })
+
+  const additionnalAvis = computed<PropsTable['avis']>(() => {
+    return etapeAvis.value.filter(({ avis_type_id }) => avisTypes.value.some(dt => dt.id === avis_type_id && dt.optionnel))
+  })
+  const openAddPopupAdditionnalAvis = () => {
+    if (isNonEmptyArray(additionnalAvisTypeIds.value)) {
+      addOrEditPopupOpen.value = { open: true, avisTypeIds: additionnalAvisTypeIds.value }
+    }
+  }
+  const closeAddPopup = (newAvis: EtapeAvisModification | null) => {
+    if (newAvis !== null && addOrEditPopupOpen.value.open) {
+      const index = addOrEditPopupOpen.value.etapeAvis?.index
+      if (isNullOrUndefined(index)) {
+        etapeAvis.value.push({ ...newAvis, index: etapeAvis.value.length })
+      } else {
+        etapeAvis.value[index] = { ...newAvis, index }
+      }
+    }
+
+    addOrEditPopupOpen.value = { open: false }
+  }
+
+  const addAvis = (avisTypeId: AvisTypeId) => {
+    addOrEditPopupOpen.value = { open: true, avisTypeIds: [avisTypeId] }
+  }
+  const editAvis = (avisIndex: number) => {
+    const avis = etapeAvis.value[avisIndex]
+    addOrEditPopupOpen.value = { open: true, avisTypeIds: [avis.avis_type_id], etapeAvis: avis }
+  }
+  const removeAvis = (avisIndex: number) => {
+    etapeAvis.value.splice(avisIndex, 1)
+    etapeAvis.value.forEach((a, index) => {
+      a.index = index
+    })
+  }
+
+  const getNom = (avisTypeId: AvisTypeId) => {
+    return AvisTypes[avisTypeId].nom
+  }
+
+  return () => (
+    <>
+      {isNotNullNorUndefinedNorEmpty(emptyRequiredAvis.value) || isNotNullNorUndefinedNorEmpty(completeRequiredAvis.value) ? (
+        <EtapeAvisTable getNom={getNom} add={addAvis} edit={editAvis} delete={removeAvis} caption="Avis obligatoires" emptyRequiredAvis={emptyRequiredAvis.value} avis={completeRequiredAvis.value} />
+      ) : null}
+
+      {isNonEmptyArray(additionnalAvisTypeIds.value) ? (
+        <>
+          <div style={{ display: 'flex', flexDirection: 'column' }} class="fr-mt-3w">
+            <EtapeAvisTable getNom={getNom} add={addAvis} edit={editAvis} delete={removeAvis} caption="Avis complémentaires" emptyRequiredAvis={[]} avis={additionnalAvis.value} />
+            <DsfrButtonIcon
+              style={{ alignSelf: 'end' }}
+              class="fr-mt-1w"
+              icon="fr-icon-add-line"
+              buttonType="secondary"
+              title="Ajouter un avis complémentaire"
+              label="Ajouter"
+              onClick={openAddPopupAdditionnalAvis}
+            />
+          </div>
+          {addOrEditPopupOpen.value.open ? (
+            <AddEtapeAvisPopup
+              avisTypeIds={addOrEditPopupOpen.value.avisTypeIds}
+              user={props.user}
+              apiClient={props.apiClient}
+              close={closeAddPopup}
+              initialAvis={addOrEditPopupOpen.value.etapeAvis || null}
+            />
+          ) : null}
+        </>
+      ) : null}
+    </>
+  )
+})
+
+type PropsTable = {
+  caption: string
+  avis: ((EtapeAvis | TempEtapeAvis) & { index: number })[]
+  emptyRequiredAvis: AvisTypeId[]
+  getNom: (avisTypeId: AvisTypeId) => string
+  add: (avisTypeId: AvisTypeId) => void
+  edit: (avisIndex: number) => void
+  delete: (avisIndex: number) => void
+}
+const EtapeAvisTable: FunctionalComponent<PropsTable> = (props: PropsTable) => {
+  const deleteAvis = (index: number) => () => {
+    props.delete(index)
+  }
+  const editAvis = (index: number) => () => {
+    props.edit(index)
+  }
+
+  const orderedAvis = [...props.avis].sort((a, b) => b.date.localeCompare(a.date))
+
+  return (
+    <div class="fr-table fr-mb-0">
+      <table style={{ display: 'table' }}>
+        <caption>{props.caption}</caption>
+        <thead>
+          <tr>
+            <th scope="col">Nom</th>
+            <th scope="col">Date</th>
+            <th scope="col">Description</th>
+            <th scope="col">Statut</th>
+            <th scope="col">Visibilité</th>
+            <th scope="col" style={{ display: 'flex', justifyContent: 'end' }}>
+              Action
+            </th>
+          </tr>
+        </thead>
+        <tbody>
+          {orderedAvis.map(avis => (
+            <tr>
+              <td>{props.getNom(avis.avis_type_id)}</td>
+              <td>{dateFormat(avis.date)}</td>
+              <td style={{ whiteSpace: 'pre-line' }}>{avis.description}</td>
+              <td>
+                <AvisStatut avisStatutId={avis.avis_statut_id} />
+              </td>
+              <td>{getAvisVisibilityLabel(avis.avis_visibility_id)}</td>
+              <td>
+                <div style={{ display: 'flex', justifyContent: 'end', alignItems: 'center' }}>
+                  <DsfrButtonIcon icon="fr-icon-edit-line" title={`Modifier l’avis de ${props.getNom(avis.avis_type_id)}`} onClick={editAvis(avis.index)} buttonType="secondary" buttonSize="sm" />
+                  <DsfrButtonIcon
+                    icon="fr-icon-delete-bin-line"
+                    class="fr-ml-1w"
+                    title={`Supprimer l’avis de ${props.getNom(avis.avis_type_id)}`}
+                    onClick={deleteAvis(avis.index)}
+                    buttonType="secondary"
+                    buttonSize="sm"
+                  />
+                </div>
+              </td>
+            </tr>
+          ))}
+          {props.emptyRequiredAvis.map(avisTypeId => (
+            <tr>
+              <td class="fr-label--disabled">{props.getNom(avisTypeId)}</td>
+              <td>-</td>
+              <td>-</td>
+              <td>-</td>
+              <td>-</td>
+              <td style={{ display: 'flex', justifyContent: 'end' }}>
+                <DsfrButtonIcon icon="fr-icon-add-line" title={`Ajouter un document ${props.getNom(avisTypeId)}`} onClick={() => props.add(avisTypeId)} buttonType="secondary" buttonSize="sm" />
+              </td>
+            </tr>
+          ))}
+        </tbody>
+      </table>
+    </div>
+  )
+}
+
+// @ts-ignore waiting for https://github.com/vuejs/core/issues/7833
+EtapeAvisEdit.props = ['tde', 'onChange', 'etapeId', 'apiClient', 'communeIds', 'user']
+// @ts-ignore waiting for https://github.com/vuejs/core/issues/7833
+EtapeAvisLoaded.props = ['tde', 'onChange', 'etapeId', 'apiClient', 'avis', 'communeIds', 'user']
diff --git a/packages/ui/src/components/etape/etape-avis.stories.tsx b/packages/ui/src/components/etape/etape-avis.stories.tsx
new file mode 100644
index 000000000..b1b4726ed
--- /dev/null
+++ b/packages/ui/src/components/etape/etape-avis.stories.tsx
@@ -0,0 +1,55 @@
+import { Meta, StoryFn } from '@storybook/vue3'
+import { entrepriseIdValidator } from 'camino-common/src/entreprise'
+import { testBlankUser } from 'camino-common/src/tests-utils'
+import { caminoDateValidator } from 'camino-common/src/date'
+import { EtapeAvisTable } from './etape-avis'
+import { EtapeAvis, etapeAvisIdValidator } from 'camino-common/src/etape'
+import { AvisVisibilityIds } from 'camino-common/src/static/avisTypes'
+
+const meta: Meta = {
+  title: 'Components/Etape/EtapeAvis',
+  component: EtapeAvisTable,
+}
+export default meta
+
+const avis: EtapeAvis[] = [
+  {
+    id: etapeAvisIdValidator.parse('id'),
+    avis_type_id: 'avisConseilDepartementalEnvironnementRisquesSanitairesTechnologiques',
+    avis_statut_id: 'Favorable',
+    avis_visibility_id: AvisVisibilityIds.TitulairesEtAdministrations,
+    date: caminoDateValidator.parse('2023-01-01'),
+    has_file: true,
+    description: 'Une description',
+  },
+  {
+    id: etapeAvisIdValidator.parse('id2'),
+    avis_type_id: 'avisIFREMER',
+    avis_statut_id: 'Défavorable',
+    avis_visibility_id: AvisVisibilityIds.Administrations,
+    date: caminoDateValidator.parse('2023-01-01'),
+    has_file: false,
+    description: 'Une description',
+  },
+  {
+    id: etapeAvisIdValidator.parse('id2'),
+    avis_type_id: 'avisParcNational',
+    avis_statut_id: 'Favorable avec réserves',
+    avis_visibility_id: AvisVisibilityIds.Public,
+    date: caminoDateValidator.parse('2023-01-01'),
+    has_file: false,
+    description: '',
+  },
+]
+
+export const Empty: StoryFn = () => (
+  <div>
+    <EtapeAvisTable etapeAvis={[]} user={null} />
+  </div>
+)
+export const NotConnected: StoryFn = () => <EtapeAvisTable etapeAvis={avis} user={null} />
+export const UserSuper: StoryFn = () => <EtapeAvisTable etapeAvis={avis} user={{ ...testBlankUser, role: 'super' }} />
+export const UserAdministration: StoryFn = () => <EtapeAvisTable etapeAvis={avis} user={{ ...testBlankUser, role: 'admin', administrationId: 'aut-mrae-guyane-01' }} />
+export const UserEntreprise: StoryFn = () => (
+  <EtapeAvisTable etapeAvis={avis} user={{ ...testBlankUser, role: 'entreprise', entreprises: [{ id: entrepriseIdValidator.parse('entrepriseId'), nom: 'nom' }] }} />
+)
diff --git a/packages/ui/src/components/etape/etape-avis.stories_snapshots_Empty.html b/packages/ui/src/components/etape/etape-avis.stories_snapshots_Empty.html
new file mode 100644
index 000000000..03e443957
--- /dev/null
+++ b/packages/ui/src/components/etape/etape-avis.stories_snapshots_Empty.html
@@ -0,0 +1,3 @@
+<div>
+  <!---->
+</div>
\ No newline at end of file
diff --git a/packages/ui/src/components/etape/etape-avis.stories_snapshots_NotConnected.html b/packages/ui/src/components/etape/etape-avis.stories_snapshots_NotConnected.html
new file mode 100644
index 000000000..73deca555
--- /dev/null
+++ b/packages/ui/src/components/etape/etape-avis.stories_snapshots_NotConnected.html
@@ -0,0 +1,45 @@
+<div style="overflow-x: auto;">
+  <div class=" fr-table fr-m-0">
+    <table style="display: table;" class="fr-table--no-caption fr-m-0">
+      <caption>Avis</caption>
+      <thead>
+        <tr>
+          <th scope="col">Nom</th>
+          <th scope="col">Date</th>
+          <th scope="col">Description</th>
+          <th scope="col">Statut</th>
+          <!---->
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td><a href="/apiUrl/download/avisDocument/id" title="Télécharger l'avis Avis du Conseil Départemental de l'Environnement et des Risques Sanitaires et Technologiques (CODERST) - nouvelle fenêtre" target="_blank">Avis du Conseil Départemental de l'Environnement et des Risques Sanitaires et Technologiques (CODERST)</a></td>
+          <td>01-01-2023</td>
+          <td style="white-space: pre-line;">Une description</td>
+          <td>
+            <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--green-bourgeon" title="Favorable" aria-label="Favorable">Favorable</p>
+          </td>
+          <!---->
+        </tr>
+        <tr>
+          <td>Avis de l'IFREMER</td>
+          <td>01-01-2023</td>
+          <td style="white-space: pre-line;">Une description</td>
+          <td>
+            <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--purple-glycine" title="Défavorable" aria-label="Défavorable">Défavorable</p>
+          </td>
+          <!---->
+        </tr>
+        <tr>
+          <td>Avis du Parc National</td>
+          <td>01-01-2023</td>
+          <td style="white-space: pre-line;"></td>
+          <td>
+            <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--green-bourgeon" title="Favorable avec réserves" aria-label="Favorable avec réserves">Favorable avec réserves</p>
+          </td>
+          <!---->
+        </tr>
+      </tbody>
+    </table>
+  </div>
+</div>
\ No newline at end of file
diff --git a/packages/ui/src/components/etape/etape-avis.stories_snapshots_UserAdministration.html b/packages/ui/src/components/etape/etape-avis.stories_snapshots_UserAdministration.html
new file mode 100644
index 000000000..5b93ec8ae
--- /dev/null
+++ b/packages/ui/src/components/etape/etape-avis.stories_snapshots_UserAdministration.html
@@ -0,0 +1,45 @@
+<div style="overflow-x: auto;">
+  <div class=" fr-table fr-m-0">
+    <table style="display: table;" class="fr-table--no-caption fr-m-0">
+      <caption>Avis</caption>
+      <thead>
+        <tr>
+          <th scope="col">Nom</th>
+          <th scope="col">Date</th>
+          <th scope="col">Description</th>
+          <th scope="col">Statut</th>
+          <th scope="col">Visibilité</th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td><a href="/apiUrl/download/avisDocument/id" title="Télécharger l'avis Avis du Conseil Départemental de l'Environnement et des Risques Sanitaires et Technologiques (CODERST) - nouvelle fenêtre" target="_blank">Avis du Conseil Départemental de l'Environnement et des Risques Sanitaires et Technologiques (CODERST)</a></td>
+          <td>01-01-2023</td>
+          <td style="white-space: pre-line;">Une description</td>
+          <td>
+            <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--green-bourgeon" title="Favorable" aria-label="Favorable">Favorable</p>
+          </td>
+          <td>Visible par les administrations et les entreprises titulaires</td>
+        </tr>
+        <tr>
+          <td>Avis de l'IFREMER</td>
+          <td>01-01-2023</td>
+          <td style="white-space: pre-line;">Une description</td>
+          <td>
+            <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--purple-glycine" title="Défavorable" aria-label="Défavorable">Défavorable</p>
+          </td>
+          <td>Visible par les administrations</td>
+        </tr>
+        <tr>
+          <td>Avis du Parc National</td>
+          <td>01-01-2023</td>
+          <td style="white-space: pre-line;"></td>
+          <td>
+            <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--green-bourgeon" title="Favorable avec réserves" aria-label="Favorable avec réserves">Favorable avec réserves</p>
+          </td>
+          <td>Public</td>
+        </tr>
+      </tbody>
+    </table>
+  </div>
+</div>
\ No newline at end of file
diff --git a/packages/ui/src/components/etape/etape-avis.stories_snapshots_UserEntreprise.html b/packages/ui/src/components/etape/etape-avis.stories_snapshots_UserEntreprise.html
new file mode 100644
index 000000000..73deca555
--- /dev/null
+++ b/packages/ui/src/components/etape/etape-avis.stories_snapshots_UserEntreprise.html
@@ -0,0 +1,45 @@
+<div style="overflow-x: auto;">
+  <div class=" fr-table fr-m-0">
+    <table style="display: table;" class="fr-table--no-caption fr-m-0">
+      <caption>Avis</caption>
+      <thead>
+        <tr>
+          <th scope="col">Nom</th>
+          <th scope="col">Date</th>
+          <th scope="col">Description</th>
+          <th scope="col">Statut</th>
+          <!---->
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td><a href="/apiUrl/download/avisDocument/id" title="Télécharger l'avis Avis du Conseil Départemental de l'Environnement et des Risques Sanitaires et Technologiques (CODERST) - nouvelle fenêtre" target="_blank">Avis du Conseil Départemental de l'Environnement et des Risques Sanitaires et Technologiques (CODERST)</a></td>
+          <td>01-01-2023</td>
+          <td style="white-space: pre-line;">Une description</td>
+          <td>
+            <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--green-bourgeon" title="Favorable" aria-label="Favorable">Favorable</p>
+          </td>
+          <!---->
+        </tr>
+        <tr>
+          <td>Avis de l'IFREMER</td>
+          <td>01-01-2023</td>
+          <td style="white-space: pre-line;">Une description</td>
+          <td>
+            <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--purple-glycine" title="Défavorable" aria-label="Défavorable">Défavorable</p>
+          </td>
+          <!---->
+        </tr>
+        <tr>
+          <td>Avis du Parc National</td>
+          <td>01-01-2023</td>
+          <td style="white-space: pre-line;"></td>
+          <td>
+            <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--green-bourgeon" title="Favorable avec réserves" aria-label="Favorable avec réserves">Favorable avec réserves</p>
+          </td>
+          <!---->
+        </tr>
+      </tbody>
+    </table>
+  </div>
+</div>
\ No newline at end of file
diff --git a/packages/ui/src/components/etape/etape-avis.stories_snapshots_UserSuper.html b/packages/ui/src/components/etape/etape-avis.stories_snapshots_UserSuper.html
new file mode 100644
index 000000000..5b93ec8ae
--- /dev/null
+++ b/packages/ui/src/components/etape/etape-avis.stories_snapshots_UserSuper.html
@@ -0,0 +1,45 @@
+<div style="overflow-x: auto;">
+  <div class=" fr-table fr-m-0">
+    <table style="display: table;" class="fr-table--no-caption fr-m-0">
+      <caption>Avis</caption>
+      <thead>
+        <tr>
+          <th scope="col">Nom</th>
+          <th scope="col">Date</th>
+          <th scope="col">Description</th>
+          <th scope="col">Statut</th>
+          <th scope="col">Visibilité</th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td><a href="/apiUrl/download/avisDocument/id" title="Télécharger l'avis Avis du Conseil Départemental de l'Environnement et des Risques Sanitaires et Technologiques (CODERST) - nouvelle fenêtre" target="_blank">Avis du Conseil Départemental de l'Environnement et des Risques Sanitaires et Technologiques (CODERST)</a></td>
+          <td>01-01-2023</td>
+          <td style="white-space: pre-line;">Une description</td>
+          <td>
+            <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--green-bourgeon" title="Favorable" aria-label="Favorable">Favorable</p>
+          </td>
+          <td>Visible par les administrations et les entreprises titulaires</td>
+        </tr>
+        <tr>
+          <td>Avis de l'IFREMER</td>
+          <td>01-01-2023</td>
+          <td style="white-space: pre-line;">Une description</td>
+          <td>
+            <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--purple-glycine" title="Défavorable" aria-label="Défavorable">Défavorable</p>
+          </td>
+          <td>Visible par les administrations</td>
+        </tr>
+        <tr>
+          <td>Avis du Parc National</td>
+          <td>01-01-2023</td>
+          <td style="white-space: pre-line;"></td>
+          <td>
+            <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--green-bourgeon" title="Favorable avec réserves" aria-label="Favorable avec réserves">Favorable avec réserves</p>
+          </td>
+          <td>Public</td>
+        </tr>
+      </tbody>
+    </table>
+  </div>
+</div>
\ No newline at end of file
diff --git a/packages/ui/src/components/etape/etape-avis.tsx b/packages/ui/src/components/etape/etape-avis.tsx
new file mode 100644
index 000000000..f8fb00480
--- /dev/null
+++ b/packages/ui/src/components/etape/etape-avis.tsx
@@ -0,0 +1,77 @@
+import { FunctionalComponent } from 'vue'
+import { EtapeAvisId, EtapeAvis } from 'camino-common/src/etape'
+import { User, isAdministration, isSuper } from 'camino-common/src/roles'
+import { getDownloadRestRoute } from '../../api/client-rest'
+import { isNullOrUndefinedOrEmpty } from 'camino-common/src/typescript-tools'
+import { AvisTypeId, AvisTypes, AvisVisibilityId } from 'camino-common/src/static/avisTypes'
+import { AvisStatut } from '../_common/etape-statut'
+import { dateFormat } from 'camino-common/src/date'
+import { VisibilityLabel } from './etape-documents'
+
+interface Props {
+  etapeAvis: EtapeAvis[]
+  user: User
+}
+
+export const getAvisVisibilityLabel = (avisVisibility: AvisVisibilityId): string => {
+  const value = {
+    Public: VisibilityLabel.public,
+    Administrations: VisibilityLabel.administrations,
+    TitulairesEtAdministrations: VisibilityLabel.entreprises,
+  } as const satisfies { [key in AvisVisibilityId]: string }
+
+  return value[avisVisibility]
+}
+
+export const EtapeAvisTable: FunctionalComponent<Props> = props => {
+  if (isNullOrUndefinedOrEmpty(props.etapeAvis)) {
+    return null
+  }
+
+  const orderedAvis = [...props.etapeAvis].sort((a, b) => b.date.localeCompare(a.date))
+
+  return (
+    <div style={{ overflowX: 'auto' }}>
+      <div class=" fr-table fr-m-0">
+        <table style={{ display: 'table' }} class="fr-table--no-caption fr-m-0">
+          <caption>Avis</caption>
+          <thead>
+            <tr>
+              <th scope="col">Nom</th>
+              <th scope="col">Date</th>
+              <th scope="col">Description</th>
+              <th scope="col">Statut</th>
+              {isSuper(props.user) || isAdministration(props.user) ? <th scope="col">Visibilité</th> : null}
+            </tr>
+          </thead>
+          <tbody>
+            {orderedAvis.map(item => (
+              <tr>
+                <td>{item.has_file ? <EtapeAvisLink avisId={item.id} avisTypeId={item.avis_type_id} /> : AvisTypes[item.avis_type_id].nom}</td>
+                <td>{dateFormat(item.date)}</td>
+                <td style={{ whiteSpace: 'pre-line' }}>{item.description}</td>
+                <td>
+                  <AvisStatut avisStatutId={item.avis_statut_id} />
+                </td>
+                {isSuper(props.user) || isAdministration(props.user) ? <td>{getAvisVisibilityLabel(item.avis_visibility_id)}</td> : null}
+              </tr>
+            ))}
+          </tbody>
+        </table>
+      </div>
+    </div>
+  )
+}
+
+type EtapeAvisLinkProps = { avisId: EtapeAvisId; avisTypeId: AvisTypeId }
+const EtapeAvisLink: FunctionalComponent<EtapeAvisLinkProps> = props => {
+  return (
+    <a
+      href={getDownloadRestRoute('/download/avisDocument/:etapeAvisId', { etapeAvisId: props.avisId })}
+      title={`Télécharger l'avis ${AvisTypes[props.avisTypeId].nom} - nouvelle fenêtre`}
+      target="_blank"
+    >
+      {AvisTypes[props.avisTypeId].nom}
+    </a>
+  )
+}
diff --git a/packages/ui/src/components/etape/etape-documents-edit.stories.tsx b/packages/ui/src/components/etape/etape-documents-edit.stories.tsx
index fd43dadfd..4fb3dbde5 100644
--- a/packages/ui/src/components/etape/etape-documents-edit.stories.tsx
+++ b/packages/ui/src/components/etape/etape-documents-edit.stories.tsx
@@ -1,6 +1,6 @@
 import { Meta, StoryFn, StoryObj } from '@storybook/vue3'
 import { EtapeDocumentsEdit } from './etape-documents-edit'
-import { EtapeDocument, GetEtapeDocumentsByEtapeId, etapeDocumentIdValidator, etapeIdValidator } from 'camino-common/src/etape'
+import { ETAPE_IS_BROUILLON, ETAPE_IS_NOT_BROUILLON, EtapeDocument, GetEtapeDocumentsByEtapeId, etapeDocumentIdValidator, etapeIdValidator } from 'camino-common/src/etape'
 import { ApiClient } from '../../api/api-client'
 import { action } from '@storybook/addon-actions'
 import { tempDocumentNameValidator } from 'camino-common/src/document'
@@ -65,7 +65,7 @@ export const Empty: StoryFn = () => (
     etapeId={etapeIdValidator.parse('etapeId')}
     sdomZoneIds={[]}
     tde={{ titreTypeId: 'arm', demarcheTypeId: 'oct', etapeTypeId: 'mfr' }}
-    isBrouillon={false}
+    isBrouillon={ETAPE_IS_NOT_BROUILLON}
     completeUpdate={completeUpdateAction}
     user={{ ...testBlankUser, role: 'super' }}
   />
@@ -77,7 +77,7 @@ export const Rempli: StoryFn = () => (
     etapeId={etapeIdValidator.parse('etapeId')}
     sdomZoneIds={[]}
     tde={{ titreTypeId: 'arm', demarcheTypeId: 'oct', etapeTypeId: 'mfr' }}
-    isBrouillon={false}
+    isBrouillon={ETAPE_IS_NOT_BROUILLON}
     completeUpdate={completeUpdateAction}
     user={{ ...testBlankUser, role: 'super' }}
   />
@@ -134,7 +134,7 @@ export const Complet: StoryFn = () => (
     etapeId={etapeIdValidator.parse('etapeId')}
     sdomZoneIds={[]}
     tde={{ titreTypeId: 'arm', demarcheTypeId: 'oct', etapeTypeId: 'mfr' }}
-    isBrouillon={false}
+    isBrouillon={ETAPE_IS_NOT_BROUILLON}
     completeUpdate={completeUpdateAction}
     user={{ ...testBlankUser, role: 'super' }}
   />
@@ -147,7 +147,7 @@ export const ArmMecanise: StoryFn = () => (
     etapeId={etapeIdValidator.parse('etapeId')}
     sdomZoneIds={[]}
     tde={{ titreTypeId: 'arm', demarcheTypeId: 'oct', etapeTypeId: 'mfr' }}
-    isBrouillon={false}
+    isBrouillon={ETAPE_IS_NOT_BROUILLON}
     completeUpdate={completeUpdateAction}
     user={{ ...testBlankUser, role: 'super' }}
   />
@@ -166,7 +166,7 @@ export const ArmMecaniseDynamicNoSnapshot: StoryObj<{ mecanise: boolean }> = {
           etapeId={etapeIdValidator.parse('etapeId')}
           sdomZoneIds={[]}
           tde={{ titreTypeId: 'arm', demarcheTypeId: 'oct', etapeTypeId: 'mfr' }}
-          isBrouillon={false}
+          isBrouillon={ETAPE_IS_NOT_BROUILLON}
           completeUpdate={completeUpdateAction}
           user={{ ...testBlankUser, role: 'super' }}
         />
@@ -185,7 +185,7 @@ export const EnConstruction: StoryFn = () => (
     etapeId={etapeIdValidator.parse('etapeId')}
     sdomZoneIds={[]}
     tde={{ titreTypeId: 'arm', demarcheTypeId: 'oct', etapeTypeId: 'mfr' }}
-    isBrouillon={true}
+    isBrouillon={ETAPE_IS_BROUILLON}
     completeUpdate={completeUpdateAction}
     user={{ ...testBlankUser, role: 'super' }}
   />
@@ -197,7 +197,7 @@ export const OctroiAxmUtilisateurSuper: StoryFn = () => (
     etapeId={etapeIdValidator.parse('etapeId')}
     sdomZoneIds={[]}
     tde={{ titreTypeId: 'axm', demarcheTypeId: 'oct', etapeTypeId: 'mfr' }}
-    isBrouillon={true}
+    isBrouillon={ETAPE_IS_BROUILLON}
     completeUpdate={completeUpdateAction}
     user={{ ...testBlankUser, role: 'super' }}
   />
@@ -210,7 +210,7 @@ export const OctroiAxmUtilisateurEntreprise: StoryFn = () => (
     etapeId={etapeIdValidator.parse('etapeId')}
     sdomZoneIds={[]}
     tde={{ titreTypeId: 'axm', demarcheTypeId: 'oct', etapeTypeId: 'mfr' }}
-    isBrouillon={true}
+    isBrouillon={ETAPE_IS_BROUILLON}
     completeUpdate={completeUpdateAction}
     user={{ ...testBlankUser, role: 'entreprise', entreprises: [{ id: entrepriseIdValidator.parse('idEntreprise1'), nom: 'entreprise 1' }] }}
   />
@@ -287,7 +287,7 @@ export const OctroiAxmUtilisateurEntrepriseComplet: StoryFn = () => (
     etapeId={etapeIdValidator.parse('etapeId')}
     sdomZoneIds={[]}
     tde={{ titreTypeId: 'axm', demarcheTypeId: 'oct', etapeTypeId: 'mfr' }}
-    isBrouillon={true}
+    isBrouillon={ETAPE_IS_BROUILLON}
     completeUpdate={completeUpdateAction}
     user={{ ...testBlankUser, role: 'entreprise', entreprises: [{ id: entrepriseIdValidator.parse('idEntreprise1'), nom: 'entreprise 1' }] }}
   />
@@ -300,7 +300,7 @@ export const SdomZone: StoryFn = () => (
     etapeId={etapeIdValidator.parse('etapeId')}
     sdomZoneIds={['1', '2']}
     tde={{ titreTypeId: 'axm', demarcheTypeId: 'oct', etapeTypeId: 'mfr' }}
-    isBrouillon={false}
+    isBrouillon={ETAPE_IS_NOT_BROUILLON}
     completeUpdate={completeUpdateAction}
     user={{ ...testBlankUser, role: 'super' }}
   />
@@ -313,7 +313,7 @@ export const PasDeDocumentsObligatoires: StoryFn = () => (
     etapeId={etapeIdValidator.parse('etapeId')}
     sdomZoneIds={['1', '2']}
     tde={{ titreTypeId: 'prm', demarcheTypeId: 'pro', etapeTypeId: 'mfr' }}
-    isBrouillon={false}
+    isBrouillon={ETAPE_IS_NOT_BROUILLON}
     completeUpdate={completeUpdateAction}
     user={{ ...testBlankUser, role: 'super' }}
   />
@@ -326,7 +326,7 @@ export const Loading: StoryFn = () => (
     etapeId={etapeIdValidator.parse('etapeId')}
     sdomZoneIds={[]}
     tde={{ titreTypeId: 'arm', demarcheTypeId: 'oct', etapeTypeId: 'mfr' }}
-    isBrouillon={false}
+    isBrouillon={ETAPE_IS_NOT_BROUILLON}
     completeUpdate={completeUpdateAction}
     user={{ ...testBlankUser, role: 'super' }}
   />
@@ -338,7 +338,7 @@ export const WithError: StoryFn = () => (
     etapeId={etapeIdValidator.parse('etapeId')}
     sdomZoneIds={[]}
     tde={{ titreTypeId: 'arm', demarcheTypeId: 'oct', etapeTypeId: 'mfr' }}
-    isBrouillon={false}
+    isBrouillon={ETAPE_IS_NOT_BROUILLON}
     completeUpdate={completeUpdateAction}
     user={{ ...testBlankUser, role: 'super' }}
   />
diff --git a/packages/ui/src/components/etape/etape-documents-edit.tsx b/packages/ui/src/components/etape/etape-documents-edit.tsx
index 8c4c40188..8c1e8920d 100644
--- a/packages/ui/src/components/etape/etape-documents-edit.tsx
+++ b/packages/ui/src/components/etape/etape-documents-edit.tsx
@@ -1,6 +1,7 @@
 import {
   DocumentComplementaireAslEtapeDocumentModification,
   DocumentComplementaireDaeEtapeDocumentModification,
+  EtapeBrouillon,
   EtapeDocument,
   EtapeDocumentModification,
   EtapeId,
@@ -37,7 +38,7 @@ interface Props {
     demarcheTypeId: DemarcheTypeId
     etapeTypeId: EtapeTypeId
   }
-  isBrouillon: boolean
+  isBrouillon: EtapeBrouillon
   sdomZoneIds: DeepReadonly<SDOMZoneId[]>
   completeUpdate: (
     etapeDocuments: (EtapeDocument | TempEtapeDocument)[],
@@ -219,6 +220,10 @@ const EtapeDocumentsLoaded = defineComponent<EtapeDocumentsLoadedProps>(props =>
   }
   const removeDocument = (documentIndex: number) => {
     etapeDocuments.value.splice(documentIndex, 1)
+    // On recalcule les index
+    etapeDocuments.value.forEach((a, index) => {
+      a.index = index
+    })
   }
 
   const getNom = (documentTypeId: DocumentTypeId) => {
@@ -291,7 +296,7 @@ const EtapeDocumentsLoaded = defineComponent<EtapeDocumentsLoadedProps>(props =>
 type PropsTable = {
   caption: string
   documents: ((EtapeDocument | TempEtapeDocument) & { index: number | 'asl' | 'dae' })[]
-  isBrouillon: boolean
+  isBrouillon: EtapeBrouillon
   emptyRequiredDocuments: DocumentTypeId[]
   getNom: (documentTypeId: DocumentTypeId) => string
   add: (documentTypeId: DocumentTypeId) => void
diff --git a/packages/ui/src/components/etape/etape-edit-form.stories.tsx b/packages/ui/src/components/etape/etape-edit-form.stories.tsx
index e566b62d8..4979018b3 100644
--- a/packages/ui/src/components/etape/etape-edit-form.stories.tsx
+++ b/packages/ui/src/components/etape/etape-edit-form.stories.tsx
@@ -1,6 +1,6 @@
 import { EtapeEditForm, Props } from './etape-edit-form'
 import { Meta, StoryFn } from '@storybook/vue3'
-import { EtapeId, etapeIdValidator, etapeSlugValidator } from 'camino-common/src/etape'
+import { ETAPE_IS_NOT_BROUILLON, EtapeId, etapeIdValidator, etapeSlugValidator } from 'camino-common/src/etape'
 import { Entreprise, EntrepriseDocumentId, EntrepriseId, EtapeEntrepriseDocument, entrepriseDocumentIdValidator, entrepriseIdValidator, newEntrepriseId } from 'camino-common/src/entreprise'
 import { CaminoDate, toCaminoDate } from 'camino-common/src/date'
 import { testBlankUser } from 'camino-common/src/tests-utils'
@@ -45,7 +45,7 @@ const etape: Props['etape'] = {
   slug: etapeSlugValidator.parse('slug'),
   titreDemarcheId: demarcheIdValidator.parse('demarcheId'),
   statutId: 'fai',
-  isBrouillon: false,
+  isBrouillon: ETAPE_IS_NOT_BROUILLON,
   typeId: 'mfr',
   contenu: { arm: { mecanise: { value: null, heritee: false, etapeHeritee: null }, franchissements: { value: null, heritee: false, etapeHeritee: null } } },
   date: toCaminoDate('2022-02-02'),
@@ -116,8 +116,13 @@ const getGeojsonByGeoSystemeIdAction = action('getGeojsonByGeoSystemeId')
 const getEtapeDocumentsByEtapeIdAction = action('getEtapeDocumentsByEtapeId')
 const getEtapeEntrepriseDocumentsAction = action('getEtapeEntrepriseDocuments')
 const creerEntrepriseDocumentAction = action('creerEntrepriseDocument')
+const getEtapeAvisByEtapeIdAction = action('getEtapeAvisByEtapeId')
 
 const etapeEditFormApiClient: Props['apiClient'] = {
+  getEtapeAvisByEtapeId(etapeId) {
+    getEtapeAvisByEtapeIdAction(etapeId)
+    return Promise.resolve([])
+  },
   deposeEtape(etapeId) {
     deposeEtapeAction(etapeId)
 
@@ -147,44 +152,37 @@ const etapeEditFormApiClient: Props['apiClient'] = {
   getEtapeHeritagePotentiel(etape, titreDemarcheId) {
     getEtapeHeritagePotentielAction(etape, titreDemarcheId)
     return Promise.resolve({
-      ...etape,
-      duree: {
-        value: etape.duree.value,
-        heritee: false,
-        etapeHeritee: {
-          date: toCaminoDate('2022-01-01'),
-          etapeTypeId: 'mfr',
-          value: 12,
+      heritageProps: {
+        duree: {
+          actif: false,
+          etape: { date: toCaminoDate('2022-01-01'), typeId: 'mfr', duree: 12 },
         },
-      },
-      substances: {
-        value: ['arge'],
-        heritee: true,
-        etapeHeritee: {
-          date: toCaminoDate('2022-01-01'),
-          etapeTypeId: 'mfr',
-          value: ['arge'],
+        substances: {
+          actif: true,
+          etape: {
+            date: toCaminoDate('2022-01-01'),
+            typeId: 'mfr',
+            substances: ['arge'],
+          },
         },
-      },
-      dateDebut: { value: etape.dateDebut.value, heritee: false, etapeHeritee: null },
-      titulaires: { value: etape.titulaires.value, heritee: false, etapeHeritee: null },
-      amodiataires: {
-        value: [entreprises[0].id, entreprises[1].id, entreprises[2].id],
-        heritee: true,
-        etapeHeritee: {
-          date: toCaminoDate('2022-01-01'),
-          etapeTypeId: 'mfr',
-          value: [entreprises[0].id, entreprises[1].id, entreprises[2].id],
+        dateDebut: { actif: false, etape: null },
+        titulaires: { actif: false, etape: null },
+        amodiataires: {
+          actif: true,
+          etape: {
+            date: toCaminoDate('2022-01-01'),
+            typeId: 'mfr',
+            amodiataireIds: [entreprises[0].id, entreprises[1].id, entreprises[2].id],
+          },
         },
-      },
-      perimetre: { value: etape.perimetre.value, heritee: false, etapeHeritee: null },
-      dateFin: {
-        value: etape.dateFin.value,
-        heritee: false,
-        etapeHeritee: {
-          date: toCaminoDate('2022-01-01'),
-          etapeTypeId: 'mfr',
-          value: toCaminoDate('2022-01-01'),
+        perimetre: { actif: false, etape: null },
+        dateFin: {
+          actif: false,
+          etape: {
+            date: toCaminoDate('2022-01-01'),
+            typeId: 'mfr',
+            dateFin: toCaminoDate('2022-01-01'),
+          },
         },
       },
       heritageContenu: { arm: { mecanise: { actif: false }, franchissements: { actif: false } } },
@@ -235,7 +233,7 @@ const etapeEditFormApiClient: Props['apiClient'] = {
 export const Default: StoryFn = () => (
   <EtapeEditForm
     initTab="points"
-    perimetre={{ sdomZoneIds: [], superposition_alertes: [] }}
+    perimetre={{ sdomZoneIds: [], superposition_alertes: [], communes: [] }}
     apiClient={etapeEditFormApiClient}
     demarcheId={demarcheIdValidator.parse('demarcheId')}
     demarcheTypeId="oct"
@@ -263,7 +261,7 @@ export const EtapeModification: StoryFn = () => (
     demarcheTypeId="oct"
     titreSlug={titreSlugValidator.parse('titre-slug')}
     titreTypeId="cxw"
-    perimetre={{ sdomZoneIds: [], superposition_alertes: [] }}
+    perimetre={{ sdomZoneIds: [], superposition_alertes: [], communes: [] }}
     etape={{
       ...etape,
       contenu: { cxx: { volume: { value: null, heritee: false, etapeHeritee: null }, volumeUniteId: { value: null, heritee: false, etapeHeritee: null } } },
diff --git a/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_Default.html b/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_Default.html
index 0ac222d77..582eb278a 100644
--- a/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_Default.html
+++ b/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_Default.html
@@ -237,6 +237,7 @@
         <!---->
       </div>
     </div>
+    <!---->
     <div>
       <div>
         <h2 class="fr-pt-6w">Documents d’entreprise<p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--sm fr-ml-2w fr-badge--error fr-badge--no-icon fr-ml-2w" title="Incomplet" aria-label="Incomplet">Incomplet</p>
diff --git a/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeModification.html b/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeModification.html
index 28a004961..a399f5c89 100644
--- a/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeModification.html
+++ b/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeModification.html
@@ -318,6 +318,7 @@
         <!---->
       </div>
     </div>
+    <!---->
     <div>
       <div>
         <h2 class="fr-pt-6w">Documents d’entreprise
diff --git a/packages/ui/src/components/etape/etape-edit-form.tsx b/packages/ui/src/components/etape/etape-edit-form.tsx
index ea73ac480..53eb4b823 100644
--- a/packages/ui/src/components/etape/etape-edit-form.tsx
+++ b/packages/ui/src/components/etape/etape-edit-form.tsx
@@ -6,7 +6,16 @@ import { EntrepriseDocumentsEdit } from './entreprises-documents-edit'
 import { EtapeDocumentsEdit } from './etape-documents-edit'
 import { ApiClient } from '../../api/api-client'
 import { User } from 'camino-common/src/roles'
-import { DocumentComplementaireAslEtapeDocumentModification, DocumentComplementaireDaeEtapeDocumentModification, EtapeDocument, EtapeId, TempEtapeDocument } from 'camino-common/src/etape'
+import {
+  DocumentComplementaireAslEtapeDocumentModification,
+  DocumentComplementaireDaeEtapeDocumentModification,
+  ETAPE_IS_NOT_BROUILLON,
+  EtapeAvis,
+  EtapeDocument,
+  EtapeId,
+  TempEtapeAvis,
+  TempEtapeDocument,
+} from 'camino-common/src/etape'
 import { DemarcheTypeId } from 'camino-common/src/static/demarchesTypes'
 import { TitreTypeId } from 'camino-common/src/static/titresTypes'
 import { TitreSlug } from 'camino-common/src/validators/titres'
@@ -15,7 +24,7 @@ import { Nullable, isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty } from '
 import { Entreprise } from 'camino-common/src/entreprise'
 import { DemarcheId } from 'camino-common/src/demarche'
 import { useState } from '@/utils/vue-tsx-utils'
-import { DateTypeEdit, EtapeDateTypeEdit, dateTypeStepIsComplete, dateTypeStepIsVisible } from './date-type-edit'
+import { DateTypeEdit, EtapeDateTypeEdit } from './date-type-edit'
 import { FeatureCollectionForages, FeatureCollectionPoints, GeojsonInformations, PerimetreInformations } from 'camino-common/src/perimetre'
 import { SectionsEdit, SectionsEditEtape } from './sections-edit'
 import { DsfrTextarea } from '../_ui/dsfr-textarea'
@@ -31,17 +40,24 @@ import {
   perimetreStepIsVisible,
   sectionsStepIsComplete,
   sectionsStepIsVisible,
+  etapeAvisStepIsVisible,
+  etapeAvisStepIsComplete,
+  dateTypeStepIsComplete,
+  dateTypeStepIsVisible,
 } from 'camino-common/src/permissions/etape-form'
 import { EtapeAlerte, PureFormSaveBtn } from './pure-form-save-btn'
 import { TitresStatuts } from 'camino-common/src/static/titresStatuts'
 import { DeposeEtapePopup } from '../demarche/depose-etape-popup'
+import { EtapeAvisEdit } from './etape-avis-edit'
 import { EtapeTypeId, canBeBrouillon } from 'camino-common/src/static/etapesTypes'
-import { CoreEtapeCreationOrModification } from './etape-api-client'
-import { FlattenEtape, GraphqlEtapeCreation } from 'camino-common/src/etape-form'
+import { CoreEtapeCreationOrModification, GetEtapeHeritagePotentiel } from './etape-api-client'
+import { FlattenEtape, RestEtapeCreation } from 'camino-common/src/etape-form'
 import { AsyncData } from '@/api/client-rest'
 import { CaminoDate } from 'camino-common/src/date'
 import { EtapeStatutId } from 'camino-common/src/static/etapesStatuts'
 import { LoadingElement } from '../_ui/functional-loader'
+import { isEtapeDeposable } from 'camino-common/src/permissions/titres-etapes'
+import { getSections } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections'
 
 export type Props = {
   etape: DeepReadonly<Pick<Nullable<FlattenEtape>, 'id' | 'date' | 'typeId' | 'statutId' | 'slug'> & Omit<FlattenEtape, 'date' | 'typeId' | 'statutId' | 'id' | 'slug'>>
@@ -70,6 +86,7 @@ export type Props = {
     | 'etapeCreer'
     | 'etapeModifier'
     | 'deposeEtape'
+    | 'getEtapeAvisByEtapeId'
   >
 }
 
@@ -78,17 +95,141 @@ type EtapeEditFormDocuments = DeepReadonly<{
   entrepriseDocuments: SelectedEntrepriseDocument[]
   daeDocument: DocumentComplementaireDaeEtapeDocumentModification | null
   aslDocument: DocumentComplementaireAslEtapeDocumentModification | null
+  etapeAvis: (EtapeAvis | TempEtapeAvis)[]
 }>
 
+const mergeFlattenEtapeWithNewHeritage = (
+  etape: DeepReadonly<CoreEtapeCreationOrModification>,
+  titreTypeId: TitreTypeId,
+  demarcheTypeId: DemarcheTypeId,
+  heritageData: DeepReadonly<GetEtapeHeritagePotentiel>
+): DeepReadonly<CoreEtapeCreationOrModification> => {
+  const sections = getSections(titreTypeId, demarcheTypeId, etape.typeId)
+  const flattenEtape: DeepReadonly<CoreEtapeCreationOrModification> = {
+    ...etape,
+    contenu: sections.reduce<DeepReadonly<FlattenEtape['contenu']>>((accSection, section) => {
+      const newSection = section.elements.reduce<DeepReadonly<FlattenEtape['contenu'][string]>>((accElement, element) => {
+        const elementHeritage = heritageData.heritageContenu[section.id]?.[element.id] ?? { actif: false, etape: null }
+        const currentHeritage: DeepReadonly<FlattenEtape['contenu'][string][string]> = etape.contenu[section.id]?.[element.id] ?? { value: null, heritee: true, etapeHeritee: null }
+        return {
+          ...accElement,
+          [element.id]: {
+            value: currentHeritage.heritee ? elementHeritage.etape?.contenu?.[section.id]?.[element.id] ?? null : currentHeritage.value,
+            heritee: currentHeritage.heritee && isNotNullNorUndefined(elementHeritage.etape),
+            etapeHeritee: isNotNullNorUndefined(elementHeritage.etape)
+              ? {
+                  etapeTypeId: elementHeritage.etape.typeId,
+                  date: elementHeritage.etape.date,
+                  value: elementHeritage.etape.contenu[section.id]?.[element.id] ?? null,
+                }
+              : null,
+          },
+        }
+      }, {})
+
+      return {
+        ...accSection,
+        [section.id]: newSection,
+      }
+    }, {}),
+    duree: {
+      value: etape.duree.heritee ? heritageData.heritageProps.duree.etape?.duree ?? null : etape.duree.value,
+      heritee: etape.duree.heritee && isNotNullNorUndefined(heritageData.heritageProps.duree.etape),
+      etapeHeritee: isNotNullNorUndefined(heritageData.heritageProps.duree.etape)
+        ? {
+            etapeTypeId: heritageData.heritageProps.duree.etape.typeId,
+            date: heritageData.heritageProps.duree.etape.date,
+            value: heritageData.heritageProps.duree.etape.duree,
+          }
+        : null,
+    },
+    perimetre: {
+      value: etape.perimetre.heritee ? (isNotNullNorUndefined(heritageData.heritageProps.perimetre.etape) ? { ...heritageData.heritageProps.perimetre.etape } : null) : etape.perimetre.value,
+
+      heritee: etape.perimetre.heritee && isNotNullNorUndefined(heritageData.heritageProps.perimetre.etape),
+      etapeHeritee: isNotNullNorUndefined(heritageData.heritageProps.perimetre.etape)
+        ? {
+            etapeTypeId: heritageData.heritageProps.perimetre.etape.typeId,
+            date: heritageData.heritageProps.perimetre.etape.date,
+            value: { ...heritageData.heritageProps.perimetre.etape },
+          }
+        : null,
+    },
+    dateDebut: {
+      value: etape.dateDebut.heritee ? heritageData.heritageProps.dateDebut.etape?.dateDebut ?? null : etape.dateDebut.value,
+      heritee: etape.dateDebut.heritee && isNotNullNorUndefined(heritageData.heritageProps.dateDebut.etape),
+      etapeHeritee: isNotNullNorUndefined(heritageData.heritageProps.dateDebut.etape)
+        ? {
+            etapeTypeId: heritageData.heritageProps.dateDebut.etape.typeId,
+            date: heritageData.heritageProps.dateDebut.etape.date,
+            value: heritageData.heritageProps.dateDebut.etape.dateDebut,
+          }
+        : null,
+    },
+    dateFin: {
+      value: etape.dateFin.heritee ? heritageData.heritageProps.dateFin.etape?.dateFin ?? null : etape.dateFin.value,
+      heritee: etape.dateFin.heritee && isNotNullNorUndefined(heritageData.heritageProps.dateFin.etape),
+      etapeHeritee: isNotNullNorUndefined(heritageData.heritageProps.dateFin.etape)
+        ? {
+            etapeTypeId: heritageData.heritageProps.dateFin.etape.typeId,
+            date: heritageData.heritageProps.dateFin.etape.date,
+            value: heritageData.heritageProps.dateFin.etape.dateFin,
+          }
+        : null,
+    },
+    substances: {
+      value: etape.substances.heritee ? (isNotNullNorUndefined(heritageData.heritageProps.substances.etape) ? heritageData.heritageProps.substances.etape.substances : []) : etape.substances.value,
+
+      heritee: etape.substances.heritee && isNotNullNorUndefined(heritageData.heritageProps.substances.etape),
+      etapeHeritee: isNotNullNorUndefined(heritageData.heritageProps.substances.etape)
+        ? {
+            etapeTypeId: heritageData.heritageProps.substances.etape.typeId,
+            date: heritageData.heritageProps.substances.etape.date,
+            value: heritageData.heritageProps.substances.etape.substances,
+          }
+        : null,
+    },
+    amodiataires: {
+      value: etape.amodiataires.heritee
+        ? isNotNullNorUndefined(heritageData.heritageProps.amodiataires.etape)
+          ? heritageData.heritageProps.amodiataires.etape.amodiataireIds
+          : []
+        : etape.amodiataires.value,
+
+      heritee: etape.amodiataires.heritee && isNotNullNorUndefined(heritageData.heritageProps.amodiataires.etape),
+      etapeHeritee: isNotNullNorUndefined(heritageData.heritageProps.amodiataires.etape)
+        ? {
+            etapeTypeId: heritageData.heritageProps.amodiataires.etape.typeId,
+            date: heritageData.heritageProps.amodiataires.etape.date,
+            value: heritageData.heritageProps.amodiataires.etape.amodiataireIds,
+          }
+        : null,
+    },
+    titulaires: {
+      value: etape.titulaires.heritee ? (isNotNullNorUndefined(heritageData.heritageProps.titulaires.etape) ? heritageData.heritageProps.titulaires.etape.titulaireIds : []) : etape.titulaires.value,
+
+      heritee: etape.titulaires.heritee && isNotNullNorUndefined(heritageData.heritageProps.titulaires.etape),
+      etapeHeritee: isNotNullNorUndefined(heritageData.heritageProps.titulaires.etape)
+        ? {
+            etapeTypeId: heritageData.heritageProps.titulaires.etape.typeId,
+            date: heritageData.heritageProps.titulaires.etape.date,
+            value: heritageData.heritageProps.titulaires.etape.titulaireIds,
+          }
+        : null,
+    },
+  }
+  return flattenEtape
+}
 export const EtapeEditForm = defineComponent<Props>(props => {
   const [etape, setEtape] = useState<AsyncData<CoreEtapeCreationOrModification | null>>({ status: 'LOADED', value: null })
-  const [perimetreInfos, setPerimetreInfos] = useState<DeepReadonly<PerimetreInformations>>(props.perimetre)
+  const [perimetreInfos, setPerimetreInfos] = useState<DeepReadonly<Omit<PerimetreInformations, 'communes'>>>(props.perimetre)
 
   const [documents, setDocuments] = useState<EtapeEditFormDocuments>({
     etapeDocuments: [],
     entrepriseDocuments: [],
     daeDocument: null,
     aslDocument: null,
+    etapeAvis: [],
   })
   onMounted(async () => {
     if (isNotNullNorUndefined(props.etape.date) && isNotNullNorUndefined(props.etape.typeId) && isNotNullNorUndefined(props.etape.statutId)) {
@@ -100,19 +241,15 @@ export const EtapeEditForm = defineComponent<Props>(props => {
     const currentEtape = etape.value.status === 'LOADED' && isNotNullNorUndefined(etape.value.value) ? etape.value.value : props.etape
     setEtape({ status: 'LOADING' })
     try {
-      const value = await props.apiClient.getEtapeHeritagePotentiel(
-        {
-          ...currentEtape,
-          date,
-          typeId,
-          statutId,
-          isBrouillon: isNotNullNorUndefined(currentEtape.id) ? currentEtape.isBrouillon : canBeBrouillon(typeId),
-        },
-        props.demarcheId,
-        props.titreTypeId,
-        props.demarcheTypeId
-      )
-      setEtape({ status: 'LOADED', value })
+      const etape = {
+        ...currentEtape,
+        date,
+        typeId,
+        statutId,
+        isBrouillon: isNotNullNorUndefined(currentEtape.id) ? currentEtape.isBrouillon : canBeBrouillon(typeId),
+      }
+      const value = await props.apiClient.getEtapeHeritagePotentiel(etape, props.demarcheId)
+      setEtape({ status: 'LOADED', value: mergeFlattenEtapeWithNewHeritage(etape, props.titreTypeId, props.demarcheTypeId, value) })
     } catch (e: any) {
       console.error('error', e)
       setEtape({
@@ -159,29 +296,45 @@ export const EtapeEditForm = defineComponent<Props>(props => {
 
   const canSave = computed<boolean>(() => {
     if (etape.value.status === 'LOADED' && isNotNullNorUndefined(etape.value.value)) {
-      return (dateTypeStepIsComplete(etape.value.value, props.user) && etape.value.value.isBrouillon) || canDepose.value
+      if (etape.value.value.isBrouillon === ETAPE_IS_NOT_BROUILLON) {
+        return (
+          dateTypeStepIsComplete(etape.value.value, props.user).valid &&
+          fondamentaleStepIsComplete(etape.value.value, props.demarcheTypeId, props.titreTypeId).valid &&
+          sectionsStepIsComplete(etape.value.value, props.demarcheTypeId, props.titreTypeId).valid &&
+          perimetreStepIsComplete(etape.value.value).valid &&
+          etapeDocumentsStepIsComplete(
+            etape.value.value,
+            props.demarcheTypeId,
+            props.titreTypeId,
+            documents.value.etapeDocuments,
+            props.perimetre.sdomZoneIds,
+            documents.value.daeDocument,
+            documents.value.aslDocument,
+            props.user
+          ).valid &&
+          entrepriseDocumentsStepIsComplete(etape.value.value, props.demarcheTypeId, props.titreTypeId, documents.value.entrepriseDocuments).valid &&
+          etapeAvisStepIsComplete(etape.value.value, documents.value.etapeAvis, props.titreTypeId, props.perimetre.communes).valid
+        )
+      }
+      return dateTypeStepIsComplete(etape.value.value, props.user).valid && etape.value.value.isBrouillon
     }
     return false
   })
 
   const canDepose = computed<boolean>(() => {
     if (etape.value.status === 'LOADED' && isNotNullNorUndefined(etape.value.value)) {
-      return (
-        dateTypeStepIsComplete(etape.value.value, props.user) &&
-        fondamentaleStepIsComplete(etape.value.value, props.demarcheTypeId, props.titreTypeId) &&
-        sectionsStepIsComplete(etape.value.value, props.demarcheTypeId, props.titreTypeId) &&
-        perimetreStepIsComplete(etape.value.value) &&
-        etapeDocumentsStepIsComplete(
-          etape.value.value,
-          props.demarcheTypeId,
-          props.titreTypeId,
-          documents.value.etapeDocuments,
-          props.perimetre.sdomZoneIds,
-          documents.value.daeDocument,
-          documents.value.aslDocument,
-          props.user
-        ) &&
-        entrepriseDocumentsStepIsComplete(etape.value.value, props.demarcheTypeId, props.titreTypeId, documents.value.entrepriseDocuments)
+      return isEtapeDeposable(
+        props.user,
+        props.titreTypeId,
+        props.demarcheTypeId,
+        etape.value.value,
+        documents.value.etapeDocuments,
+        documents.value.entrepriseDocuments.map(({ documentTypeId, entrepriseId }) => ({ entreprise_document_type_id: documentTypeId, entreprise_id: entrepriseId })),
+        props.perimetre.sdomZoneIds,
+        props.perimetre.communes,
+        documents.value.daeDocument,
+        documents.value.aslDocument,
+        documents.value.etapeAvis
       )
     }
 
@@ -214,10 +367,10 @@ export const EtapeEditForm = defineComponent<Props>(props => {
           titulaires: { actif: etapeValue.titulaires.heritee },
           amodiataires: { actif: etapeValue.amodiataires.heritee },
         },
-        contenu: Object.keys(etapeValue.contenu).reduce<DeepReadonly<GraphqlEtapeCreation['contenu']>>((sectionsAcc, section) => {
+        contenu: Object.keys(etapeValue.contenu).reduce<DeepReadonly<RestEtapeCreation['contenu']>>((sectionsAcc, section) => {
           sectionsAcc = {
             ...sectionsAcc,
-            [section]: Object.keys(etapeValue.contenu[section]).reduce<DeepReadonly<GraphqlEtapeCreation['contenu'][string]>>((elementsAcc, element) => {
+            [section]: Object.keys(etapeValue.contenu[section]).reduce<DeepReadonly<RestEtapeCreation['contenu'][string]>>((elementsAcc, element) => {
               elementsAcc = { ...elementsAcc, [element]: etapeValue.contenu[section][element].value }
 
               return elementsAcc
@@ -226,10 +379,10 @@ export const EtapeEditForm = defineComponent<Props>(props => {
 
           return sectionsAcc
         }, {}),
-        heritageContenu: Object.keys(etapeValue.contenu).reduce<DeepReadonly<GraphqlEtapeCreation['heritageContenu']>>((sectionsAcc, section) => {
+        heritageContenu: Object.keys(etapeValue.contenu).reduce<DeepReadonly<RestEtapeCreation['heritageContenu']>>((sectionsAcc, section) => {
           return {
             ...sectionsAcc,
-            [section]: Object.keys(etapeValue.contenu[section]).reduce<DeepReadonly<GraphqlEtapeCreation['heritageContenu'][string]>>((elementsAcc, element) => {
+            [section]: Object.keys(etapeValue.contenu[section]).reduce<DeepReadonly<RestEtapeCreation['heritageContenu'][string]>>((elementsAcc, element) => {
               return { ...elementsAcc, [element]: { actif: etapeValue.contenu[section][element].heritee } }
             }, {}),
           }
@@ -285,17 +438,18 @@ export const EtapeEditForm = defineComponent<Props>(props => {
       {dateTypeStepIsVisible(props.user) ? (
         <Bloc
           step={{ name: 'Informations principales', help: null }}
-          complete={dateTypeStepIsComplete(
-            etape.value.status === 'LOADED' && etape.value.value !== null
-              ? etape.value.value
-              : {
-                  date: null,
-                  id: null,
-                  statutId: null,
-                  typeId: null,
-                },
-            props.user
-          )}
+          complete={
+            dateTypeStepIsComplete(
+              etape.value.status === 'LOADED' && etape.value.value !== null
+                ? etape.value.value
+                : {
+                    date: null,
+                    statutId: null,
+                    typeId: null,
+                  },
+              props.user
+            ).valid
+          }
         >
           <DateTypeEdit etape={props.etape} apiClient={props.apiClient} completeUpdate={dateTypeCompleteUpdate} demarcheId={props.demarcheId} />
         </Bloc>
@@ -313,7 +467,7 @@ export const EtapeEditForm = defineComponent<Props>(props => {
                   alertes={alertes.value}
                   canSave={canSave.value}
                   canDepose={canDepose.value}
-                  showDepose={etapeLoaded.typeId === 'mfr' && etapeLoaded.isBrouillon}
+                  showDepose={etapeLoaded.isBrouillon}
                   save={saveAndReroute}
                   depose={depose}
                 />
@@ -344,7 +498,7 @@ const EtapeEditFormInternal = defineComponent<
     etape: DeepReadonly<CoreEtapeCreationOrModification>
     documents: EtapeEditFormDocuments
     setEtape: (etape: DeepReadonly<CoreEtapeCreationOrModification>, documents: EtapeEditFormDocuments) => void
-    alertesUpdate: (alertes: PerimetreInformations) => void
+    alertesUpdate: (alertes: Omit<PerimetreInformations, 'communes'>) => void
   } & Omit<Props, 'etape'>
 >(props => {
   const documentsCompleteUpdate = (
@@ -360,6 +514,13 @@ const EtapeEditFormInternal = defineComponent<
     })
   }
 
+  const avisCompleteUpdate = (etapeAvis: (EtapeAvis | TempEtapeAvis)[]) => {
+    props.setEtape(props.etape, {
+      ...props.documents,
+      etapeAvis,
+    })
+  }
+
   const entrepriseDocumentsCompleteUpdate = (entrepriseDocuments: DeepReadonly<SelectedEntrepriseDocument[]>) => {
     props.setEtape(props.etape, { ...props.documents, entrepriseDocuments })
   }
@@ -431,7 +592,7 @@ const EtapeEditFormInternal = defineComponent<
   return () => (
     <div>
       {fondamentaleStepIsVisible(props.etape.typeId) ? (
-        <Bloc step={{ name: 'Propriétés', help: null }} complete={fondamentaleStepIsComplete(props.etape, props.demarcheTypeId, props.titreTypeId)}>
+        <Bloc step={{ name: 'Propriétés', help: null }} complete={fondamentaleStepIsComplete(props.etape, props.demarcheTypeId, props.titreTypeId).valid}>
           <FondamentalesEdit
             etape={props.etape}
             demarcheTypeId={props.demarcheTypeId}
@@ -449,14 +610,14 @@ const EtapeEditFormInternal = defineComponent<
             name: 'Propriétés spécifiques',
             help: isHelpVisible.value ? 'Ce bloc permet de savoir si la prospection est mécanisée ou non et s’il y a des franchissements de cours d’eau (si oui, combien ?)' : null,
           }}
-          complete={sectionsStepIsComplete(props.etape, props.demarcheTypeId, props.titreTypeId)}
+          complete={sectionsStepIsComplete(props.etape, props.demarcheTypeId, props.titreTypeId).valid}
         >
           <SectionsEdit etape={props.etape} titreTypeId={props.titreTypeId} demarcheTypeId={props.demarcheTypeId} completeUpdate={sectionCompleteUpdate} />
         </Bloc>
       ) : null}
 
       {perimetreStepIsVisible(props.etape) ? (
-        <Bloc step={{ name: 'Périmètre', help: null }} complete={perimetreStepIsComplete(props.etape)}>
+        <Bloc step={{ name: 'Périmètre', help: null }} complete={perimetreStepIsComplete(props.etape).valid}>
           <PerimetreEdit
             etape={props.etape}
             titreTypeId={props.titreTypeId}
@@ -474,16 +635,18 @@ const EtapeEditFormInternal = defineComponent<
       {etapeDocumentsStepIsVisible(props.etape, props.demarcheTypeId, props.titreTypeId) ? (
         <Bloc
           step={{ name: 'Liste des documents', help: null }}
-          complete={etapeDocumentsStepIsComplete(
-            props.etape,
-            props.demarcheTypeId,
-            props.titreTypeId,
-            props.documents.etapeDocuments,
-            props.perimetre.sdomZoneIds,
-            props.documents.daeDocument,
-            props.documents.aslDocument,
-            props.user
-          )}
+          complete={
+            etapeDocumentsStepIsComplete(
+              props.etape,
+              props.demarcheTypeId,
+              props.titreTypeId,
+              props.documents.etapeDocuments,
+              props.perimetre.sdomZoneIds,
+              props.documents.daeDocument,
+              props.documents.aslDocument,
+              props.user
+            ).valid
+          }
         >
           <EtapeDocumentsEdit
             apiClient={props.apiClient}
@@ -498,6 +661,19 @@ const EtapeEditFormInternal = defineComponent<
         </Bloc>
       ) : null}
 
+      {etapeAvisStepIsVisible(props.etape, props.titreTypeId, props.perimetre.communes) ? (
+        <Bloc step={{ name: 'Liste des avis', help: null }} complete={etapeAvisStepIsComplete(props.etape, props.documents.etapeAvis, props.titreTypeId, props.perimetre.communes).valid}>
+          <EtapeAvisEdit
+            apiClient={props.apiClient}
+            tde={{ titreTypeId: props.titreTypeId, demarcheTypeId: props.demarcheTypeId, etapeTypeId: props.etape.typeId }}
+            etapeId={props.etape.id}
+            communeIds={props.perimetre.communes}
+            onChange={avisCompleteUpdate}
+            user={props.user}
+          />
+        </Bloc>
+      ) : null}
+
       {entrepriseDocumentsStepIsVisible(props.etape, props.demarcheTypeId, props.titreTypeId) ? (
         <Bloc
           step={{
@@ -507,7 +683,7 @@ const EtapeEditFormInternal = defineComponent<
                 ? "Les documents d’entreprise sont des documents propres à l'entreprise, et pourront être réutilisés pour la création d'un autre dossier et mis à jour si nécessaire. Ces documents d’entreprise sont consultables dans la fiche entreprise de votre société. Cette section permet de protéger et de centraliser les informations d'ordre privé relatives à la société et à son personnel."
                 : null,
           }}
-          complete={entrepriseDocumentsStepIsComplete(props.etape, props.demarcheTypeId, props.titreTypeId, props.documents.entrepriseDocuments)}
+          complete={entrepriseDocumentsStepIsComplete(props.etape, props.demarcheTypeId, props.titreTypeId, props.documents.entrepriseDocuments).valid}
         >
           <EntrepriseDocumentsEdit
             entreprises={titulairesAndAmodiataires.value}
diff --git a/packages/ui/src/components/etape/fondamentales-edit.stories.tsx b/packages/ui/src/components/etape/fondamentales-edit.stories.tsx
index 583159dd4..2962175e8 100644
--- a/packages/ui/src/components/etape/fondamentales-edit.stories.tsx
+++ b/packages/ui/src/components/etape/fondamentales-edit.stories.tsx
@@ -1,6 +1,6 @@
 import { FondamentalesEdit } from './fondamentales-edit'
 import { Meta, StoryFn } from '@storybook/vue3'
-import { etapeIdValidator, etapeSlugValidator } from 'camino-common/src/etape'
+import { ETAPE_IS_BROUILLON, etapeIdValidator, etapeSlugValidator } from 'camino-common/src/etape'
 import { newEntrepriseId } from 'camino-common/src/entreprise'
 import { toCaminoDate } from 'camino-common/src/date'
 import { testBlankUser } from 'camino-common/src/tests-utils'
@@ -20,7 +20,7 @@ const etape: FlattenEtape = {
   slug: etapeSlugValidator.parse('slug'),
   titreDemarcheId: demarcheIdValidator.parse('demarcheId'),
   statutId: 'fai',
-  isBrouillon: true,
+  isBrouillon: ETAPE_IS_BROUILLON,
   typeId: 'mfr',
   contenu: {},
   date: toCaminoDate('2022-02-02'),
diff --git a/packages/ui/src/components/etape/fondamentales-edit.tsx b/packages/ui/src/components/etape/fondamentales-edit.tsx
index ac9be1502..38c0a4167 100644
--- a/packages/ui/src/components/etape/fondamentales-edit.tsx
+++ b/packages/ui/src/components/etape/fondamentales-edit.tsx
@@ -4,7 +4,7 @@ import { HeritageEdit } from './heritage-edit'
 import { AutocompleteEntreprises } from './autocomplete-entreprises'
 import { CaminoDate } from 'camino-common/src/date'
 import { SubstancesEdit } from './substances-edit'
-import { dureeOptionalCheck as titreEtapesDureeOptionalCheck, canEditAmodiataires, canEditTitulaires, canEditDuree, canEditDates } from 'camino-common/src/permissions/titres-etapes'
+import { isDureeOptional as titreEtapesDureeOptionalCheck, canEditAmodiataires, canEditTitulaires, canEditDuree, canEditDates } from 'camino-common/src/permissions/titres-etapes'
 
 import { DomaineId } from 'camino-common/src/static/domaines'
 import { DemarcheTypeId } from 'camino-common/src/static/demarchesTypes'
diff --git a/packages/ui/src/components/etape/sections-edit.tsx b/packages/ui/src/components/etape/sections-edit.tsx
index 2c9cc4d95..9f1767b83 100644
--- a/packages/ui/src/components/etape/sections-edit.tsx
+++ b/packages/ui/src/components/etape/sections-edit.tsx
@@ -7,7 +7,6 @@ import { useState } from '../../utils/vue-tsx-utils'
 import { SectionWithValue } from 'camino-common/src/sections'
 import { SectionElementWithValueEdit } from './section-element-with-value-edit'
 import { FlattenEtape } from 'camino-common/src/etape-form'
-import { Contenu } from 'camino-common/src/permissions/sections'
 
 export type SectionsEditEtape = DeepReadonly<Pick<FlattenEtape, 'typeId' | 'contenu'>>
 type Props = {
@@ -34,19 +33,7 @@ export const SectionsEdit = defineComponent<Props>(props => {
   })
   const sectionsWithValue = computed<DeepReadonly<SectionWithValue[]>>(() => {
     if (isNotNullNorUndefined(editedEtape.value.contenu)) {
-      const contenu = Object.keys(editedEtape.value.contenu).reduce<DeepReadonly<Contenu>>((accSections, section) => {
-        const elements = Object.keys(editedEtape.value.contenu[section]).reduce<DeepReadonly<{ [secondKey in string]?: unknown }>>((accElements, element) => {
-          const contenuValue = editedEtape.value.contenu[section][element].value
-          if (isNotNullNorUndefined(contenuValue)) {
-            return { ...accElements, [element]: contenuValue }
-          }
-          return accElements
-        }, {})
-
-        return { ...accSections, [section]: elements }
-      }, {})
-
-      return getSectionsWithValue(sections.value, contenu)
+      return getSectionsWithValue(sections.value, editedEtape.value.contenu)
     }
     return []
   })
diff --git a/packages/ui/src/components/titre.stories.tsx b/packages/ui/src/components/titre.stories.tsx
index 940489514..f49f36889 100644
--- a/packages/ui/src/components/titre.stories.tsx
+++ b/packages/ui/src/components/titre.stories.tsx
@@ -9,13 +9,14 @@ import { TitresStatutIds } from 'camino-common/src/static/titresStatuts'
 import { TITRES_TYPES_IDS } from 'camino-common/src/static/titresTypes'
 import { LinkableTitre } from './titre/titres-link-form-api-client'
 import { demarcheIdValidator, demarcheSlugValidator } from 'camino-common/src/demarche'
-import { etapeIdValidator, etapeSlugValidator } from 'camino-common/src/etape'
+import { ETAPE_IS_NOT_BROUILLON, etapeIdValidator, etapeSlugValidator } from 'camino-common/src/etape'
 import { EtapesTypesEtapesStatuts } from 'camino-common/src/static/etapesTypesEtapesStatuts'
 import { Entreprise, entrepriseIdValidator } from 'camino-common/src/entreprise'
 import { titreIdValidator, titreSlugValidator, TitreIdOrSlug } from 'camino-common/src/validators/titres'
-import { km2Validator } from 'camino-common/src/number'
+import { ZERO_KM2 } from 'camino-common/src/number'
 import { CaminoRouter } from '@/typings/vue-router'
 
+// FIXME ajoute test avec des avis
 const meta: Meta = {
   title: 'Components/Titre',
   // @ts-ignore @storybook/vue3 n'aime pas les composants tsx
@@ -159,7 +160,7 @@ const titre = {
           slug: etapeSlugValidator.parse('etape-slug'),
           etape_type_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeTypeId,
           etape_statut_id: EtapesTypesEtapesStatuts.demande.FAIT.etapeStatutId,
-          is_brouillon: false,
+          is_brouillon: ETAPE_IS_NOT_BROUILLON,
           date,
           ordre: 1,
           fondamentale: {
@@ -211,7 +212,7 @@ const titre = {
               geojson_origine_geo_systeme_id: '4326',
               geojson4326_forages: null,
               geojson_origine_forages: null,
-              surface: km2Validator.parse(0),
+              surface: ZERO_KM2,
               communes: [],
               sdom_zones: [],
               forets: [],
@@ -221,6 +222,7 @@ const titre = {
           sections_with_values: [],
           etape_documents: [],
           entreprises_documents: [],
+          avis_documents: [],
         },
       ],
     },
@@ -381,7 +383,7 @@ const chantePieApiClient: PropsApiClient = {
     getTitreAction(titreIdOrSlug)
 
     // prettier-ignore
-    const chantepieData = titreGetValidator.parse({"id":"Ju80kBYMoDstD5J6H8wqWRdo","nom":"Chantepie","slug":"m-cx-chantepie-1988","titre_type_id":"cxm","titre_statut_id":"val","titre_doublon":null,"references":[{"nom":"2013-0224-MI","referenceTypeId":"deb"}],"titre_last_modified_date":"2023-10-12","demarches":[{"id":"PpD4be1fwbWJ7TZCdwvZj0vQ","slug":"m-cx-chantepie-1988-oct01","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":600,"substances":["auru","arge","cuiv","ferx","plom","souf","zinc","scoc"],"titulaireIds":["fr-632022711"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-0.105658320330431,48.1489209342693],[-0.115003633563279,48.1398379979624],[-0.0996023094257926,48.1209828190687],[-0.0852402595925762,48.1212930049111],[-0.0616864580218711,48.1486971325525],[-0.105658320330431,48.1489209342693]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.105658320330431,48.1489209342693]},"properties":{"nom":"A","description":"Intersection de l'axe de la route départementale n° 103, joignant Rouez et Crissé et de la droite joignant l'intersection de l'axe de la rivière La Vègre avec la limite des communes de Sillé-le-Guillaume et de Rouez, d'une part, au sommet B défini ci-après"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.0616864580218711,48.1486971325525]},"properties":{"nom":"B","description":"Intersection de l'axe de la route départementale n° 304 allant de Sillé-le-Guillaume à Conlie et de l'axe de la route départementale n° 167 allant à Rouez"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.0852402595925762,48.1212930049111]},"properties":{"nom":"C","description":"Intersection de la droite joignant l'axe du clocher de Sillé-le-Guillaume et l'axe du clocher de Tennie, et de la droite joignant l'axe du clocher de Parennes et l'axe du clocher de Conlie"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.0996023094257926,48.1209828190687]},"properties":{"nom":"D","description":"Intersection de la droite joignant l'axe du clocher de Parennes et l'axe du clocher de Conlie et de la droite joignant l'axe du clocher de Rouez et l'axe du clocher de Bernay"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.115003633563279,48.1398379979624]},"properties":{"nom":"E","description":"Axe du clocher de Rouez"}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[418280,1052710],[421550,1052580],[419700,1049590],[418630,1049590],[417552,1051723],[418280,1052710]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[418280,1052710]},"properties":{"nom":"A","description":"Intersection de l’axe de la route départementale n° 103, joignant Rouez et Crissé et de la droite joignant l’intersection de l’axe de la rivière La Vègre avec la limite des communes de Sillé-le-Guillaume et de Rouez, d’une part, au sommet B défini ci-après"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[421550,1052580]},"properties":{"nom":"B","description":"Intersection de l’axe de la route départementale n° 304 allant de Sillé-le-Guillaume à Conlie et de l’axe de la route départementale n° 167 allant à Rouez"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[419700,1049590]},"properties":{"nom":"C","description":"Intersection de la droite joignant l’axe du clocher de Sillé-le-Guillaume et l’axe du clocher de Tennie, et de la droite joignant l’axe du clocher de Parennes et l’axe du clocher de Conlie"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[418630,1049590]},"properties":{"nom":"D","description":"Intersection de la droite joignant l’axe du clocher de Parennes et l’axe du clocher de Conlie et de la droite joignant l’axe du clocher de Rouez et l’axe du clocher de Bernay"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[417552,1051723]},"properties":{"nom":"E","description":"Axe du clocher de Rouez"}}]},"geojson_origine_geo_systeme_id":"27571","geojson4326_forages":null,"geojson_origine_forages":null,"surface":8,"communes":[{"id":"72256","nom":"Rouez"},{"id":"72351","nom":"Tennie"}],"secteurs_maritimes":[],"sdom_zones":[],"forets":[]}},"etape_statut_id":"acc","is_brouillon":false,"date":"1988-09-01","id":"OxqtxQwW0B3AUIHFR7k32Ycl","ordre":2,"notes":null,"slug":"m-cx-chantepie-1988-oct01-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000000681488"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"INDE8800659D"}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":600,"substances":["auru","arge","cuiv","ferx","plom","souf","zinc","scoc"],"titulaireIds":["fr-632022711"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-0.105658320330431,48.1489209342693],[-0.115003633563279,48.1398379979624],[-0.0996023094257926,48.1209828190687],[-0.0852402595925762,48.1212930049111],[-0.0616864580218711,48.1486971325525],[-0.105658320330431,48.1489209342693]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.105658320330431,48.1489209342693]},"properties":{"nom":"A","description":"Intersection de l'axe de la route départementale n° 103, joignant Rouez et Crissé et de la droite joignant l'intersection de l'axe de la rivière La Vègre avec la limite des communes de Sillé-le-Guillaume et de Rouez, d'une part, au sommet B défini ci-après"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.0616864580218711,48.1486971325525]},"properties":{"nom":"B","description":"Intersection de l'axe de la route départementale n° 304 allant de Sillé-le-Guillaume à Conlie et de l'axe de la route départementale n° 167 allant à Rouez"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.0852402595925762,48.1212930049111]},"properties":{"nom":"C","description":"Intersection de la droite joignant l'axe du clocher de Sillé-le-Guillaume et l'axe du clocher de Tennie, et de la droite joignant l'axe du clocher de Parennes et l'axe du clocher de Conlie"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.0996023094257926,48.1209828190687]},"properties":{"nom":"D","description":"Intersection de la droite joignant l'axe du clocher de Parennes et l'axe du clocher de Conlie et de la droite joignant l'axe du clocher de Rouez et l'axe du clocher de Bernay"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.115003633563279,48.1398379979624]},"properties":{"nom":"E","description":"Axe du clocher de Rouez"}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[418280,1052710],[421550,1052580],[419700,1049590],[418630,1049590],[417552,1051723],[418280,1052710]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[418280,1052710]},"properties":{"nom":"A","description":"Intersection de l’axe de la route départementale n° 103, joignant Rouez et Crissé et de la droite joignant l’intersection de l’axe de la rivière La Vègre avec la limite des communes de Sillé-le-Guillaume et de Rouez, d’une part, au sommet B défini ci-après"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[421550,1052580]},"properties":{"nom":"B","description":"Intersection de l’axe de la route départementale n° 304 allant de Sillé-le-Guillaume à Conlie et de l’axe de la route départementale n° 167 allant à Rouez"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[419700,1049590]},"properties":{"nom":"C","description":"Intersection de la droite joignant l’axe du clocher de Sillé-le-Guillaume et l’axe du clocher de Tennie, et de la droite joignant l’axe du clocher de Parennes et l’axe du clocher de Conlie"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[418630,1049590]},"properties":{"nom":"D","description":"Intersection de la droite joignant l’axe du clocher de Parennes et l’axe du clocher de Conlie et de la droite joignant l’axe du clocher de Rouez et l’axe du clocher de Bernay"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[417552,1051723]},"properties":{"nom":"E","description":"Axe du clocher de Rouez"}}]},"geojson_origine_geo_systeme_id":"27571","geojson4326_forages":null,"geojson_origine_forages":null,"surface":8,"communes":[{"id":"72256","nom":"Rouez"},{"id":"72351","nom":"Tennie"}],"secteurs_maritimes":[],"sdom_zones":[],"forets":[]}},"etape_statut_id":"acc","is_brouillon":false,"date":"1988-08-24","id":"XkNmBmjc6YYY6OEncdCAldnU","ordre":1,"notes":null,"slug":"m-cx-chantepie-1988-oct01-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"oct","demarche_statut_id":"acc","demarche_date_debut":"1988-09-01","demarche_date_fin":"2038-09-01","ordre":1},{"id":"mkPvJYXFO2InPppXamCRo2Cv","slug":"m-cx-chantepie-1988-mut01","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":["fr-409160132"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2000-06-06","id":"lc3diJKRphb029ufvF73FlSn","ordre":2,"notes":null,"slug":"m-cx-chantepie-1988-mut01-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000000765254"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"ECOI0000251A"}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":["fr-409160132"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2000-05-25","id":"2n1RaQcCxZMVta2Qfv1pUIRS","ordre":1,"notes":null,"slug":"m-cx-chantepie-1988-mut01-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"mut","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":2}],"nb_activites_to_do":null})
+    const chantepieData = titreGetValidator.parse({"id":"Ju80kBYMoDstD5J6H8wqWRdo","nom":"Chantepie","slug":"m-cx-chantepie-1988","titre_type_id":"cxm","titre_statut_id":"val","titre_doublon":null,"references":[{"nom":"2013-0224-MI","referenceTypeId":"deb"}],"titre_last_modified_date":"2023-10-12","demarches":[{"id":"PpD4be1fwbWJ7TZCdwvZj0vQ","slug":"m-cx-chantepie-1988-oct01","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":600,"substances":["auru","arge","cuiv","ferx","plom","souf","zinc","scoc"],"titulaireIds":["fr-632022711"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-0.105658320330431,48.1489209342693],[-0.115003633563279,48.1398379979624],[-0.0996023094257926,48.1209828190687],[-0.0852402595925762,48.1212930049111],[-0.0616864580218711,48.1486971325525],[-0.105658320330431,48.1489209342693]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.105658320330431,48.1489209342693]},"properties":{"nom":"A","description":"Intersection de l'axe de la route départementale n° 103, joignant Rouez et Crissé et de la droite joignant l'intersection de l'axe de la rivière La Vègre avec la limite des communes de Sillé-le-Guillaume et de Rouez, d'une part, au sommet B défini ci-après"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.0616864580218711,48.1486971325525]},"properties":{"nom":"B","description":"Intersection de l'axe de la route départementale n° 304 allant de Sillé-le-Guillaume à Conlie et de l'axe de la route départementale n° 167 allant à Rouez"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.0852402595925762,48.1212930049111]},"properties":{"nom":"C","description":"Intersection de la droite joignant l'axe du clocher de Sillé-le-Guillaume et l'axe du clocher de Tennie, et de la droite joignant l'axe du clocher de Parennes et l'axe du clocher de Conlie"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.0996023094257926,48.1209828190687]},"properties":{"nom":"D","description":"Intersection de la droite joignant l'axe du clocher de Parennes et l'axe du clocher de Conlie et de la droite joignant l'axe du clocher de Rouez et l'axe du clocher de Bernay"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.115003633563279,48.1398379979624]},"properties":{"nom":"E","description":"Axe du clocher de Rouez"}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[418280,1052710],[421550,1052580],[419700,1049590],[418630,1049590],[417552,1051723],[418280,1052710]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[418280,1052710]},"properties":{"nom":"A","description":"Intersection de l’axe de la route départementale n° 103, joignant Rouez et Crissé et de la droite joignant l’intersection de l’axe de la rivière La Vègre avec la limite des communes de Sillé-le-Guillaume et de Rouez, d’une part, au sommet B défini ci-après"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[421550,1052580]},"properties":{"nom":"B","description":"Intersection de l’axe de la route départementale n° 304 allant de Sillé-le-Guillaume à Conlie et de l’axe de la route départementale n° 167 allant à Rouez"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[419700,1049590]},"properties":{"nom":"C","description":"Intersection de la droite joignant l’axe du clocher de Sillé-le-Guillaume et l’axe du clocher de Tennie, et de la droite joignant l’axe du clocher de Parennes et l’axe du clocher de Conlie"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[418630,1049590]},"properties":{"nom":"D","description":"Intersection de la droite joignant l’axe du clocher de Parennes et l’axe du clocher de Conlie et de la droite joignant l’axe du clocher de Rouez et l’axe du clocher de Bernay"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[417552,1051723]},"properties":{"nom":"E","description":"Axe du clocher de Rouez"}}]},"geojson_origine_geo_systeme_id":"27571","geojson4326_forages":null,"geojson_origine_forages":null,"surface":8,"communes":[{"id":"72256","nom":"Rouez"},{"id":"72351","nom":"Tennie"}],"secteurs_maritimes":[],"sdom_zones":[],"forets":[]}},"etape_statut_id":"acc","is_brouillon":false,"date":"1988-09-01","id":"OxqtxQwW0B3AUIHFR7k32Ycl","ordre":2,"notes":null,"slug":"m-cx-chantepie-1988-oct01-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000000681488"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"INDE8800659D"}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":600,"substances":["auru","arge","cuiv","ferx","plom","souf","zinc","scoc"],"titulaireIds":["fr-632022711"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-0.105658320330431,48.1489209342693],[-0.115003633563279,48.1398379979624],[-0.0996023094257926,48.1209828190687],[-0.0852402595925762,48.1212930049111],[-0.0616864580218711,48.1486971325525],[-0.105658320330431,48.1489209342693]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.105658320330431,48.1489209342693]},"properties":{"nom":"A","description":"Intersection de l'axe de la route départementale n° 103, joignant Rouez et Crissé et de la droite joignant l'intersection de l'axe de la rivière La Vègre avec la limite des communes de Sillé-le-Guillaume et de Rouez, d'une part, au sommet B défini ci-après"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.0616864580218711,48.1486971325525]},"properties":{"nom":"B","description":"Intersection de l'axe de la route départementale n° 304 allant de Sillé-le-Guillaume à Conlie et de l'axe de la route départementale n° 167 allant à Rouez"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.0852402595925762,48.1212930049111]},"properties":{"nom":"C","description":"Intersection de la droite joignant l'axe du clocher de Sillé-le-Guillaume et l'axe du clocher de Tennie, et de la droite joignant l'axe du clocher de Parennes et l'axe du clocher de Conlie"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.0996023094257926,48.1209828190687]},"properties":{"nom":"D","description":"Intersection de la droite joignant l'axe du clocher de Parennes et l'axe du clocher de Conlie et de la droite joignant l'axe du clocher de Rouez et l'axe du clocher de Bernay"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-0.115003633563279,48.1398379979624]},"properties":{"nom":"E","description":"Axe du clocher de Rouez"}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[418280,1052710],[421550,1052580],[419700,1049590],[418630,1049590],[417552,1051723],[418280,1052710]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[418280,1052710]},"properties":{"nom":"A","description":"Intersection de l’axe de la route départementale n° 103, joignant Rouez et Crissé et de la droite joignant l’intersection de l’axe de la rivière La Vègre avec la limite des communes de Sillé-le-Guillaume et de Rouez, d’une part, au sommet B défini ci-après"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[421550,1052580]},"properties":{"nom":"B","description":"Intersection de l’axe de la route départementale n° 304 allant de Sillé-le-Guillaume à Conlie et de l’axe de la route départementale n° 167 allant à Rouez"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[419700,1049590]},"properties":{"nom":"C","description":"Intersection de la droite joignant l’axe du clocher de Sillé-le-Guillaume et l’axe du clocher de Tennie, et de la droite joignant l’axe du clocher de Parennes et l’axe du clocher de Conlie"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[418630,1049590]},"properties":{"nom":"D","description":"Intersection de la droite joignant l’axe du clocher de Parennes et l’axe du clocher de Conlie et de la droite joignant l’axe du clocher de Rouez et l’axe du clocher de Bernay"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[417552,1051723]},"properties":{"nom":"E","description":"Axe du clocher de Rouez"}}]},"geojson_origine_geo_systeme_id":"27571","geojson4326_forages":null,"geojson_origine_forages":null,"surface":8,"communes":[{"id":"72256","nom":"Rouez"},{"id":"72351","nom":"Tennie"}],"secteurs_maritimes":[],"sdom_zones":[],"forets":[]}},"etape_statut_id":"acc","is_brouillon":false,"date":"1988-08-24","id":"XkNmBmjc6YYY6OEncdCAldnU","ordre":1,"notes":null,"slug":"m-cx-chantepie-1988-oct01-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"oct","demarche_statut_id":"acc","demarche_date_debut":"1988-09-01","demarche_date_fin":"2038-09-01","ordre":1},{"id":"mkPvJYXFO2InPppXamCRo2Cv","slug":"m-cx-chantepie-1988-mut01","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":["fr-409160132"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2000-06-06","id":"lc3diJKRphb029ufvF73FlSn","ordre":2,"notes":null,"slug":"m-cx-chantepie-1988-mut01-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000000765254"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"ECOI0000251A"}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":["fr-409160132"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2000-05-25","id":"2n1RaQcCxZMVta2Qfv1pUIRS","ordre":1,"notes":null,"slug":"m-cx-chantepie-1988-mut01-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"mut","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":2}],"nb_activites_to_do":null})
     chantepieData.nom = 'Chantepie avec un titre assez long'
     chantepieData.nb_activites_to_do = 2
 
@@ -434,7 +436,7 @@ const criqueAdolpheApiClient: PropsApiClient = {
     getTitreAction(titreIdOrSlug)
 
     // prettier-ignore
-    const criqueAdolpheData = titreGetValidator.parse({"id":"tbFvGIDboAzxTb54GQyghTyc","nom":"Crique Adolphe","slug":"m-ar-crique-adolphe-2023","titre_type_id":"arm","titre_statut_id":"ech","titre_doublon":null,"references":[{"nom":"2022-032","referenceTypeId":"ptm"},{"nom":"AR 2022-027","referenceTypeId":"onf"}],"titre_last_modified_date":"2023-10-20","demarches":[{"id":"yAvBOMdHDsyES7phbS5hRKLA","slug":"m-ar-crique-adolphe-2023-oct01","description":null,"etapes":[{"etape_type_id":"sco","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"fai","is_brouillon":false,"date":"2023-09-19","id":"5649942721fd9f3478381ae9","ordre":16,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-sco01","sections_with_values":[{"id":"suivi","nom":"Suivi de la démarche","elements":[{"id":"signataire","nom":"Signataire ONF","description":"Prénom et nom du représentant légal du titulaire de l'ONF","optionnel":true,"type":"text","value":null},{"id":"titulaire","nom":"Signataire titulaire","description":"Prénom et nom du représentant légal du titulaire de l'autorisation","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"aca","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"fav","is_brouillon":false,"date":"2023-01-11","id":"oXXG5ToIYbw8MvdYPX7sMMAP","ordre":12,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-aca01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"sca","etape_statut_id":"fai","is_brouillon":false,"date":"2023-01-11","id":"WLXKWB9Fv17gm2gTJYIXnTyX","ordre":11,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-sca01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"rde","etape_statut_id":"fav","is_brouillon":false,"date":"2022-12-29","id":"y0SCXGJ1OBYSthcWyojyOLZX","ordre":9,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-rde01","sections_with_values":[{"id":"deal","nom":"DEAL","elements":[{"id":"numero-dossier-deal-eau","nom":"Numéro de dossier","description":"Numéro de dossier DEAL Service eau","optionnel":true,"type":"text","value":""},{"id":"numero-recepisse","nom":"Numéro de récépissé","description":"Numéro de récépissé émis par la DEAL Service eau","optionnel":true,"type":"text","value":"R03-2022-12-29-00005"}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"mcr","etape_statut_id":"fav","is_brouillon":false,"date":"2022-12-05","id":"0vdB4jaJbpIpyUnIZkKPsmCm","ordre":7,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-mcr01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"mdp","etape_statut_id":"fai","is_brouillon":false,"date":"2022-11-08","id":"pF4UG6UrCOJmKjtgmtpwthTQ","ordre":4,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-mdp01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"mfr","fondamentale":{"date_debut":null,"date_fin":null,"duree":4,"substances":["auru"],"titulaireIds":["fr-794312231"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.58181013905019,3.8309654861273],[-53.58178306390299,3.8219278216269807],[-53.572785590706495,3.82195493825841],[-53.57281257175149,3.8309926670647294],[-53.58181013905019,3.8309654861273]]],[[[-53.60031408473134,3.8224780986447566],[-53.59891645305842,3.8181831495446303],[-53.58181205656814,3.82379854768971],[-53.58320964990986,3.828093576227541],[-53.60031408473134,3.8224780986447566]]],[[[-53.583861926103765,3.8502114455117433],[-53.592379712320195,3.834289122043602],[-53.588417035915334,3.8321501920354253],[-53.57989914401643,3.8480725119510217],[-53.583861926103765,3.8502114455117433]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.58181013905019,3.8309654861273]},"properties":{"nom":"S1","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.57281257175149,3.8309926670647294]},"properties":{"nom":"S2","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.572785590706495,3.82195493825841]},"properties":{"nom":"S3","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.58178306390299,3.8219278216269807]},"properties":{"nom":"S4","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.60031408473134,3.8224780986447566]},"properties":{"nom":"S5","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.58320964990986,3.828093576227541]},"properties":{"nom":"S6","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.58181205656814,3.82379854768971]},"properties":{"nom":"S7","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.59891645305842,3.8181831495446303]},"properties":{"nom":"S8","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.583861926103765,3.8502114455117433]},"properties":{"nom":"S9","description":"ARM3.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.57989914401643,3.8480725119510217]},"properties":{"nom":"S10","description":"ARM3.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.588417035915334,3.8321501920354253]},"properties":{"nom":"S11","description":"ARM3.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.592379712320195,3.834289122043602]},"properties":{"nom":"S12","description":"ARM3.3"}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[213250,423875],[214250,423875],[214250,422875],[213250,422875],[213250,423875]]],[[[211190.6,422942.1],[213093.5,423557.7],[213247.4,423082],[211344.5,422466.4],[211190.6,422942.1]]],[[[213028.4,426005.2],[213468.1,425767.2],[212516.1,424008.3],[212076.4,424246.3],[213028.4,426005.2]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[213250,423875]},"properties":{"nom":"S1","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[214250,423875]},"properties":{"nom":"S2","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[214250,422875]},"properties":{"nom":"S3","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[213250,422875]},"properties":{"nom":"S4","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[211190.6,422942.1]},"properties":{"nom":"S5","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[213093.5,423557.7]},"properties":{"nom":"S6","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[213247.4,423082]},"properties":{"nom":"S7","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[211344.5,422466.4]},"properties":{"nom":"S8","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[213028.4,426005.2]},"properties":{"nom":"S9","description":"ARM3.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[213468.1,425767.2]},"properties":{"nom":"S10","description":"ARM3.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[212516.1,424008.3]},"properties":{"nom":"S11","description":"ARM3.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[212076.4,424246.3]},"properties":{"nom":"S12","description":"ARM3.3"}}]},"geojson_origine_geo_systeme_id":"2972","geojson4326_forages":null,"geojson_origine_forages":null,"surface":3,"communes":[{"id":"97353","nom":"Maripasoula"}],"secteurs_maritimes":[],"sdom_zones":[],"forets":[]}},"etape_statut_id":"fai","is_brouillon":false,"date":"2022-11-08","id":"pwqOEAsAmaWi0o24QiVeVZ40","ordre":3,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-mfr01","sections_with_values":[{"id":"arm","nom":"Caractéristiques ARM","elements":[{"id":"mecanise","nom":"Prospection mécanisée","description":"","type":"radio","value":true},{"id":"franchissements","nom":"Franchissements de cours d'eau","description":"Nombre de franchissements de cours d'eau","optionnel":true,"type":"integer","value":12}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"dae","etape_statut_id":"exe","is_brouillon":false,"date":"2022-09-26","id":"KA7tyvIdlqQmmVOuVjEl0Hdt","ordre":1,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-dae01","sections_with_values":[{"id":"mea","nom":"Mission autorité environnementale","elements":[{"id":"arrete","nom":"Arrêté préfectoral","description":"Numéro de l'arrêté préfectoral portant décision dans le cadre de l’examen au cas par cas du projet d’autorisation de recherche minière","optionnel":true,"type":"text","value":"R03-2022-09-26-00002"}]}],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"oct","demarche_statut_id":"acc","demarche_date_debut":"2023-09-19","demarche_date_fin":"2024-01-19","ordre":1}],"nb_activites_to_do":null})
+    const criqueAdolpheData = titreGetValidator.parse({"id":"tbFvGIDboAzxTb54GQyghTyc","nom":"Crique Adolphe","slug":"m-ar-crique-adolphe-2023","titre_type_id":"arm","titre_statut_id":"ech","titre_doublon":null,"references":[{"nom":"2022-032","referenceTypeId":"ptm"},{"nom":"AR 2022-027","referenceTypeId":"onf"}],"titre_last_modified_date":"2023-10-20","demarches":[{"id":"yAvBOMdHDsyES7phbS5hRKLA","slug":"m-ar-crique-adolphe-2023-oct01","description":null,"etapes":[{"etape_type_id":"sco","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"fai","is_brouillon":false,"date":"2023-09-19","id":"5649942721fd9f3478381ae9","ordre":16,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-sco01","sections_with_values":[{"id":"suivi","nom":"Suivi de la démarche","elements":[{"id":"signataire","nom":"Signataire ONF","description":"Prénom et nom du représentant légal du titulaire de l'ONF","optionnel":true,"type":"text","value":null},{"id":"titulaire","nom":"Signataire titulaire","description":"Prénom et nom du représentant légal du titulaire de l'autorisation","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"sca","etape_statut_id":"fai","is_brouillon":false,"date":"2023-01-11","id":"WLXKWB9Fv17gm2gTJYIXnTyX","ordre":11,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-sca01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"aca","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"fav","is_brouillon":false,"date":"2023-01-11","id":"oXXG5ToIYbw8MvdYPX7sMMAP","ordre":12,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-aca01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"rde","etape_statut_id":"fav","is_brouillon":false,"date":"2022-12-29","id":"y0SCXGJ1OBYSthcWyojyOLZX","ordre":9,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-rde01","sections_with_values":[{"id":"deal","nom":"DEAL","elements":[{"id":"numero-dossier-deal-eau","nom":"Numéro de dossier","description":"Numéro de dossier DEAL Service eau","optionnel":true,"type":"text","value":""},{"id":"numero-recepisse","nom":"Numéro de récépissé","description":"Numéro de récépissé émis par la DEAL Service eau","optionnel":true,"type":"text","value":"R03-2022-12-29-00005"}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"mcr","etape_statut_id":"fav","is_brouillon":false,"date":"2022-12-05","id":"0vdB4jaJbpIpyUnIZkKPsmCm","ordre":7,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-mcr01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"mfr","fondamentale":{"date_debut":null,"date_fin":null,"duree":4,"substances":["auru"],"titulaireIds":["fr-794312231"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.58181013905019,3.8309654861273],[-53.58178306390299,3.8219278216269807],[-53.572785590706495,3.82195493825841],[-53.57281257175149,3.8309926670647294],[-53.58181013905019,3.8309654861273]]],[[[-53.60031408473134,3.8224780986447566],[-53.59891645305842,3.8181831495446303],[-53.58181205656814,3.82379854768971],[-53.58320964990986,3.828093576227541],[-53.60031408473134,3.8224780986447566]]],[[[-53.583861926103765,3.8502114455117433],[-53.592379712320195,3.834289122043602],[-53.588417035915334,3.8321501920354253],[-53.57989914401643,3.8480725119510217],[-53.583861926103765,3.8502114455117433]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.58181013905019,3.8309654861273]},"properties":{"nom":"S1","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.57281257175149,3.8309926670647294]},"properties":{"nom":"S2","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.572785590706495,3.82195493825841]},"properties":{"nom":"S3","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.58178306390299,3.8219278216269807]},"properties":{"nom":"S4","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.60031408473134,3.8224780986447566]},"properties":{"nom":"S5","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.58320964990986,3.828093576227541]},"properties":{"nom":"S6","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.58181205656814,3.82379854768971]},"properties":{"nom":"S7","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.59891645305842,3.8181831495446303]},"properties":{"nom":"S8","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.583861926103765,3.8502114455117433]},"properties":{"nom":"S9","description":"ARM3.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.57989914401643,3.8480725119510217]},"properties":{"nom":"S10","description":"ARM3.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.588417035915334,3.8321501920354253]},"properties":{"nom":"S11","description":"ARM3.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.592379712320195,3.834289122043602]},"properties":{"nom":"S12","description":"ARM3.3"}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[213250,423875],[214250,423875],[214250,422875],[213250,422875],[213250,423875]]],[[[211190.6,422942.1],[213093.5,423557.7],[213247.4,423082],[211344.5,422466.4],[211190.6,422942.1]]],[[[213028.4,426005.2],[213468.1,425767.2],[212516.1,424008.3],[212076.4,424246.3],[213028.4,426005.2]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[213250,423875]},"properties":{"nom":"S1","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[214250,423875]},"properties":{"nom":"S2","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[214250,422875]},"properties":{"nom":"S3","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[213250,422875]},"properties":{"nom":"S4","description":"ARM1.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[211190.6,422942.1]},"properties":{"nom":"S5","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[213093.5,423557.7]},"properties":{"nom":"S6","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[213247.4,423082]},"properties":{"nom":"S7","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[211344.5,422466.4]},"properties":{"nom":"S8","description":"ARM2.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[213028.4,426005.2]},"properties":{"nom":"S9","description":"ARM3.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[213468.1,425767.2]},"properties":{"nom":"S10","description":"ARM3.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[212516.1,424008.3]},"properties":{"nom":"S11","description":"ARM3.3"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[212076.4,424246.3]},"properties":{"nom":"S12","description":"ARM3.3"}}]},"geojson_origine_geo_systeme_id":"2972","geojson4326_forages":null,"geojson_origine_forages":null,"surface":3,"communes":[{"id":"97353","nom":"Maripasoula"}],"secteurs_maritimes":[],"sdom_zones":[],"forets":[]}},"etape_statut_id":"fai","is_brouillon":false,"date":"2022-11-08","id":"pwqOEAsAmaWi0o24QiVeVZ40","ordre":3,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-mfr01","sections_with_values":[{"id":"arm","nom":"Caractéristiques ARM","elements":[{"id":"mecanise","nom":"Prospection mécanisée","description":"","type":"radio","value":true},{"id":"franchissements","nom":"Franchissements de cours d'eau","description":"Nombre de franchissements de cours d'eau","optionnel":true,"type":"integer","value":12}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"mdp","etape_statut_id":"fai","is_brouillon":false,"date":"2022-11-08","id":"pF4UG6UrCOJmKjtgmtpwthTQ","ordre":4,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-mdp01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"dae","etape_statut_id":"exe","is_brouillon":false,"date":"2022-09-26","id":"KA7tyvIdlqQmmVOuVjEl0Hdt","ordre":1,"notes":null,"slug":"m-ar-crique-adolphe-2023-oct01-dae01","sections_with_values":[{"id":"mea","nom":"Mission autorité environnementale","elements":[{"id":"arrete","nom":"Arrêté préfectoral","description":"Numéro de l'arrêté préfectoral portant décision dans le cadre de l’examen au cas par cas du projet d’autorisation de recherche minière","optionnel":true,"type":"text","value":"R03-2022-09-26-00002"}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"oct","demarche_statut_id":"acc","demarche_date_debut":"2023-09-19","demarche_date_fin":"2024-01-19","ordre":1}],"nb_activites_to_do":null})
     criqueAdolpheData.nb_activites_to_do = 0
 
     return Promise.resolve(criqueAdolpheData)
@@ -460,7 +462,7 @@ const abattisKoticaApiClient: PropsApiClient = {
     getTitreAction(titreIdOrSlug)
 
     // prettier-ignore
-    const abattisData = titreGetValidator.parse({"id":"ooyCY2eGMXLunjmwPbBYyQcf","nom":"Abattis Kotika","slug":"m-ar-abattis-kotika-2006","titre_type_id":"arm","titre_statut_id":"ech","titre_doublon":null,"references":[{"nom":"AR2006060","referenceTypeId":"onf"},{"nom":"2006-061","referenceTypeId":"ptm"}],"titre_last_modified_date":null,"demarches":[{"id":"SjKhYLXdqcla1BaN3nmgQhPs","slug":"m-ar-abattis-kotika-2006-oct01","description":null,"etapes":[{"etape_type_id":"def","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2006-11-28","id":"Pw734o5mdB2K2AWaOKQ85Ydz","ordre":5,"notes":null,"slug":"m-ar-abattis-kotika-2006-oct01-def01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"sco","fondamentale":{"date_debut":null,"date_fin":"2007-03-27","duree":4,"substances":["auru"],"titulaireIds":["fr-480857036"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-54.256565011133,3.95310428827045],[-54.2571944444789,3.94846823388004],[-54.2392714613677,3.9464520807474],[-54.2387665564076,3.95076254570704],[-54.256565011133,3.95310428827045]]],[[[-54.251541223062,3.94479622927321],[-54.251001625524,3.94017377611083],[-54.2330489949186,3.94209562569541],[-54.2335613570663,3.94667311503072],[-54.251541223062,3.94479622927321]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.256565011133,3.95310428827045]},"properties":{"nom":"1","description":"a"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.2387665564076,3.95076254570704]},"properties":{"nom":"2","description":"b"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.2392714613677,3.9464520807474]},"properties":{"nom":"3","description":"c"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.2571944444789,3.94846823388004]},"properties":{"nom":"4","description":"d"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.251541223062,3.94479622927321]},"properties":{"nom":"1","description":"e"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.2335613570663,3.94667311503072]},"properties":{"nom":"2","description":"f"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.2330489949186,3.94209562569541]},"properties":{"nom":"3","description":"g"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.251001625524,3.94017377611083]},"properties":{"nom":"4","description":"h"}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[138288,437653],[140266,437386],[140208,436909],[138216,437140],[138288,437653]]],[[[138843,436731],[140843,436931],[140898,436424],[138901,436219],[138843,436731]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[138288,437653]},"properties":{"nom":"1","description":"a"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[140266,437386]},"properties":{"nom":"2","description":"b"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[140208,436909]},"properties":{"nom":"3","description":"c"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[138216,437140]},"properties":{"nom":"4","description":"d"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[138843,436731]},"properties":{"nom":"1","description":"e"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[140843,436931]},"properties":{"nom":"2","description":"f"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[140898,436424]},"properties":{"nom":"3","description":"g"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[138901,436219]},"properties":{"nom":"4","description":"h"}}]},"geojson_origine_geo_systeme_id":"2972","geojson4326_forages":null,"geojson_origine_forages":null,"surface":2,"communes":[{"id":"97362","nom":"Papaichton"}],"secteurs_maritimes":[],"sdom_zones":["0_potentielle","2"],"forets":[]}},"etape_statut_id":"fai","is_brouillon":false,"date":"2006-11-28","id":"1iF8kbcg0oGaEMAJxgUZYk8W","ordre":6,"notes":null,"slug":"m-ar-abattis-kotika-2006-oct01-sco01","sections_with_values":[{"id":"arm","nom":"Caractéristiques ARM","elements":[{"id":"mecanise","nom":"Prospection mécanisée","type":"radio","value":null}]},{"id":"suivi","nom":"Suivi de la démarche","elements":[{"id":"signataire","nom":"Signataire ONF","description":"Prénom et nom du représentant légal du titulaire de l'ONF","optionnel":true,"type":"text","value":"Michel Borderes"},{"id":"titulaire","nom":"Signataire titulaire","description":"Prénom et nom du représentant légal du titulaire de l'autorisation","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"men","etape_statut_id":"fai","is_brouillon":false,"date":"2006-10-16","id":"TMWQQo20x3j7BJ8Sboaq1B20","ordre":2,"notes":null,"slug":"m-ar-abattis-kotika-2006-oct01-men01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"oct","demarche_statut_id":"acc","demarche_date_debut":"2006-11-28","demarche_date_fin":"2007-03-27","ordre":1}],"nb_activites_to_do":null})
+    const abattisData = titreGetValidator.parse({"id":"ooyCY2eGMXLunjmwPbBYyQcf","nom":"Abattis Kotika","slug":"m-ar-abattis-kotika-2006","titre_type_id":"arm","titre_statut_id":"ech","titre_doublon":null,"references":[{"nom":"AR2006060","referenceTypeId":"onf"},{"nom":"2006-061","referenceTypeId":"ptm"}],"titre_last_modified_date":null,"demarches":[{"id":"SjKhYLXdqcla1BaN3nmgQhPs","slug":"m-ar-abattis-kotika-2006-oct01","description":null,"etapes":[{"etape_type_id":"def","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2006-11-28","id":"Pw734o5mdB2K2AWaOKQ85Ydz","ordre":5,"notes":null,"slug":"m-ar-abattis-kotika-2006-oct01-def01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"sco","fondamentale":{"date_debut":null,"date_fin":"2007-03-27","duree":4,"substances":["auru"],"titulaireIds":["fr-480857036"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-54.256565011133,3.95310428827045],[-54.2571944444789,3.94846823388004],[-54.2392714613677,3.9464520807474],[-54.2387665564076,3.95076254570704],[-54.256565011133,3.95310428827045]]],[[[-54.251541223062,3.94479622927321],[-54.251001625524,3.94017377611083],[-54.2330489949186,3.94209562569541],[-54.2335613570663,3.94667311503072],[-54.251541223062,3.94479622927321]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.256565011133,3.95310428827045]},"properties":{"nom":"1","description":"a"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.2387665564076,3.95076254570704]},"properties":{"nom":"2","description":"b"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.2392714613677,3.9464520807474]},"properties":{"nom":"3","description":"c"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.2571944444789,3.94846823388004]},"properties":{"nom":"4","description":"d"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.251541223062,3.94479622927321]},"properties":{"nom":"1","description":"e"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.2335613570663,3.94667311503072]},"properties":{"nom":"2","description":"f"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.2330489949186,3.94209562569541]},"properties":{"nom":"3","description":"g"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-54.251001625524,3.94017377611083]},"properties":{"nom":"4","description":"h"}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[138288,437653],[140266,437386],[140208,436909],[138216,437140],[138288,437653]]],[[[138843,436731],[140843,436931],[140898,436424],[138901,436219],[138843,436731]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[138288,437653]},"properties":{"nom":"1","description":"a"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[140266,437386]},"properties":{"nom":"2","description":"b"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[140208,436909]},"properties":{"nom":"3","description":"c"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[138216,437140]},"properties":{"nom":"4","description":"d"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[138843,436731]},"properties":{"nom":"1","description":"e"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[140843,436931]},"properties":{"nom":"2","description":"f"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[140898,436424]},"properties":{"nom":"3","description":"g"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[138901,436219]},"properties":{"nom":"4","description":"h"}}]},"geojson_origine_geo_systeme_id":"2972","geojson4326_forages":null,"geojson_origine_forages":null,"surface":2,"communes":[{"id":"97362","nom":"Papaichton"}],"secteurs_maritimes":[],"sdom_zones":["0_potentielle","2"],"forets":[]}},"etape_statut_id":"fai","is_brouillon":false,"date":"2006-11-28","id":"1iF8kbcg0oGaEMAJxgUZYk8W","ordre":6,"notes":null,"slug":"m-ar-abattis-kotika-2006-oct01-sco01","sections_with_values":[{"id":"arm","nom":"Caractéristiques ARM","elements":[{"id":"mecanise","nom":"Prospection mécanisée","type":"radio","value":null}]},{"id":"suivi","nom":"Suivi de la démarche","elements":[{"id":"signataire","nom":"Signataire ONF","description":"Prénom et nom du représentant légal du titulaire de l'ONF","optionnel":true,"type":"text","value":"Michel Borderes"},{"id":"titulaire","nom":"Signataire titulaire","description":"Prénom et nom du représentant légal du titulaire de l'autorisation","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"men","etape_statut_id":"fai","is_brouillon":false,"date":"2006-10-16","id":"TMWQQo20x3j7BJ8Sboaq1B20","ordre":2,"notes":null,"slug":"m-ar-abattis-kotika-2006-oct01-men01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"oct","demarche_statut_id":"acc","demarche_date_debut":"2006-11-28","demarche_date_fin":"2007-03-27","ordre":1}],"nb_activites_to_do":null})
     abattisData.nb_activites_to_do = 0
 
     return Promise.resolve(abattisData)
@@ -486,15 +488,15 @@ const bonEspoirApiClient: PropsApiClient = {
     getTitreAction(titreIdOrSlug)
 
     // prettier-ignore
-    const bonEspoirData = titreGetValidator.parse({"id":"sJorD6pQomXTN7oRpyGwLijB","nom":"Bon Espoir","slug":"m-pr-bon-espoir-2001","titre_type_id":"prm","titre_statut_id":"ech","titre_doublon":null,"references":[{"nom":"21/2001","referenceTypeId":"dea"},{"nom":"2013-0033-MI","referenceTypeId":"deb"}],"titre_last_modified_date":"2023-11-30","demarches":[{"id":"ry8fHgRWiKEOE1x1ZANmajh8","slug":"m-pr-bon-espoir-2001-oct01","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":"2001-11-01","date_fin":null,"duree":60,"substances":["auru","scoc"],"titulaireIds":null,"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.9579321010744,5.07776938770113],[-53.9575232150351,4.98735333700249],[-53.8673626701318,4.98775355007457],[-53.8672265271601,4.95631734759459],[-53.7770631139658,4.95670276466037],[-53.7769878916108,4.93868722476635],[-53.5698730075868,4.93952315477954],[-53.5702069576163,5.02537608911083],[-53.759383911755,5.02460196044417],[-53.7596128864516,5.07864912381548],[-53.9579321010744,5.07776938770113]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9579321010744,5.07776938770113]},"properties":{"nom":"1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7596128864516,5.07864912381548]},"properties":{"nom":"2","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.759383911755,5.02460196044417]},"properties":{"nom":"3","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.5702069576163,5.02537608911083]},"properties":{"nom":"4","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.5698730075868,4.93952315477954]},"properties":{"nom":"5","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7769878916108,4.93868722476635]},"properties":{"nom":"6","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7770631139658,4.95670276466037]},"properties":{"nom":"7","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8672265271601,4.95631734759459]},"properties":{"nom":"8","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8673626701318,4.98775355007457]},"properties":{"nom":"9","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9575232150351,4.98735333700249]},"properties":{"nom":"10","description":null}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.957932101,5.077769388],[-53.957523215,4.987353337],[-53.86736267,4.98775355],[-53.867226527,4.956317348],[-53.777063114,4.956702765],[-53.776987892,4.938687225],[-53.569873008,4.939523155],[-53.570206958,5.025376089],[-53.759383912,5.02460196],[-53.759612886,5.078649124],[-53.957932101,5.077769388]]]]}},"geojson_origine_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9579321010744,5.07776938770113]},"properties":{"nom":"1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7596128864516,5.07864912381548]},"properties":{"nom":"2","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.759383911755,5.02460196044417]},"properties":{"nom":"3","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.5702069576163,5.02537608911083]},"properties":{"nom":"4","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.5698730075868,4.93952315477954]},"properties":{"nom":"5","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7769878916108,4.93868722476635]},"properties":{"nom":"6","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7770631139658,4.95670276466037]},"properties":{"nom":"7","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8672265271601,4.95631734759459]},"properties":{"nom":"8","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8673626701318,4.98775355007457]},"properties":{"nom":"9","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9575232150351,4.98735333700249]},"properties":{"nom":"10","description":null}}]},"geojson_origine_geo_systeme_id":"4326","geojson4326_forages":null,"geojson_origine_forages":null,"surface":465.5,"communes":[{"id":"97306","nom":"Mana"},{"id":"97311","nom":"Saint-Laurent-du-Maroni"}],"secteurs_maritimes":[],"sdom_zones":["0","2"],"forets":["LDD","MDF","PAUL"]}},"etape_statut_id":"acc","is_brouillon":false,"date":"2001-10-26","id":"CRVhvEIQAc319vUd8BfZoH5W","ordre":2,"notes":null,"slug":"m-pr-bon-espoir-2001-oct01-dpu01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":3201430},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":"EUR"}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000000774145"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"ECOI0100462D"}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2001-10-24","id":"Ce4K8goEZzjqXRJLL051jcpD","ordre":1,"notes":"Décret du 24 octobre 2001 accordant un permis de recherches A en Guyane","slug":"m-pr-bon-espoir-2001-oct01-dex01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"oct","demarche_statut_id":"acc","demarche_date_debut":"2001-11-01","demarche_date_fin":"2006-11-01","ordre":1},{"id":"PnFewl8P4Zt5Vm49zXqyn7Ml","slug":"m-pr-bon-espoir-2001-pr101","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["auru"],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2010-03-02","id":"qtn2a3DNPx258VZgSjqXGKf6","ordre":4,"notes":null,"slug":"m-pr-bon-espoir-2001-pr101-dpu02","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":560000},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":"EUR"}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000021889053"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"DEVO1003938A"}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2010-02-17","id":"tjOMgkb83wksMc6DFuqrecbu","ordre":3,"notes":null,"slug":"m-pr-bon-espoir-2001-pr101-dex02","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"2010-02-17-arr-a26ea089","description":"Arrêté du 17 février 2010 modifiant l'arrêté du 6 mai 2009 prolongeant la validité du permis exclusif de recherches de mines d'or dit « Permis de Bon Espoir » et réduisant sa surface (Guyane)","etape_document_type_id":"arr","public_lecture":true,"entreprises_lecture":true}]},{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":"2011-10-31","duree":null,"substances":["auru"],"titulaireIds":null,"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.9577777777778,5.07666666666667],[-53.9575,5.0325],[-53.8944444444444,5.00055555555556],[-53.8208333333333,4.97972222222222],[-53.7138888888889,4.96388888888889],[-53.7322222222222,5.02361111111111],[-53.8763888888889,5.02277777777778],[-53.9577777777778,5.07666666666667]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9577777777778,5.07666666666667]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8763888888889,5.02277777777778]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7322222222222,5.02361111111111]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7138888888889,4.96388888888889]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8208333333333,4.97972222222222]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8944444444444,5.00055555555556]},"properties":{"nom":"F","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9575,5.0325]},"properties":{"nom":"G","description":null}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.957777778,5.076666667],[-53.9575,5.0325],[-53.894444444,5.000555556],[-53.820833333,4.979722222],[-53.713888889,4.963888889],[-53.732222222,5.023611111],[-53.876388889,5.022777778],[-53.957777778,5.076666667]]]]}},"geojson_origine_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9577777777778,5.07666666666667]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8763888888889,5.02277777777778]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7322222222222,5.02361111111111]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7138888888889,4.96388888888889]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8208333333333,4.97972222222222]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8944444444444,5.00055555555556]},"properties":{"nom":"F","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9575,5.0325]},"properties":{"nom":"G","description":null}}]},"geojson_origine_geo_systeme_id":"4326","geojson4326_forages":null,"geojson_origine_forages":null,"surface":122.275,"communes":[{"id":"97306","nom":"Mana"},{"id":"97311","nom":"Saint-Laurent-du-Maroni"}],"secteurs_maritimes":[],"sdom_zones":["0","2"],"forets":["LDD","PAUL"]}},"etape_statut_id":"acc","is_brouillon":false,"date":"2009-05-16","id":"07cbyPCYcOtKYkw4kOqg2Sed","ordre":2,"notes":null,"slug":"m-pr-bon-espoir-2001-pr101-dpu01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":837000},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":"EUR"}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000020616467"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"DEVO0909004A"}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2009-05-06","id":"orsPMmIfX4kSgVus0HTrBxAo","ordre":1,"notes":null,"slug":"m-pr-bon-espoir-2001-pr101-dex01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"2009-05-06-arr-54f88e41","description":"Arrêté du 6 mai 2009 prolongeant la validité du permis exclusif de recherches de mines d'or dit « Permis Bon Espoir » et réduisant sa superficie (Guyane)","etape_document_type_id":"arr","public_lecture":true,"entreprises_lecture":true}]}],"demarche_type_id":"pr1","demarche_statut_id":"acc","demarche_date_debut":"2006-11-01","demarche_date_fin":"2011-10-31","ordre":2},{"id":"EMFAv33wlGqMcjd6DwKzQBvr","slug":"m-pr-bon-espoir-2001-pr201","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":"2016-10-31","duree":60,"substances":["auru","scoc"],"titulaireIds":["fr-401802863"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2015-08-15","id":"Qp5DRYEN3Nc9n4CIwEYW7evs","ordre":9,"notes":null,"slug":"m-pr-bon-espoir-2001-pr201-dpu01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":1250000},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":"EUR"}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000031053068"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"EINL1518062A"}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":60,"substances":["auru","scoc"],"titulaireIds":["fr-401802863"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2015-08-03","id":"ABvgimvovFWeEhoMOrKi4wAy","ordre":8,"notes":null,"slug":"m-pr-bon-espoir-2001-pr201-dex01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"2015-08-03-arm-8bf71a65","description":"Arrêté du 3 août 2015 prolongeant la durée de validité du permis exclusif de recherches de mines d'or et de substances connexes dit « Permis de Bon Espoir » attribué à la société Armina Ressources Minières dans le département de Guyane","etape_document_type_id":"arm","public_lecture":true,"entreprises_lecture":true}]},{"etape_type_id":"mdp","etape_statut_id":"fai","is_brouillon":false,"date":"2011-06-30","id":"nLXaR7H78V43GB47ypDoqvKz","ordre":2,"notes":null,"slug":"m-pr-bon-espoir-2001-pr201-mdp01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"mfr","fondamentale":{"date_debut":null,"date_fin":null,"duree":60,"substances":["auru","arge","cuiv"],"titulaireIds":["fr-401802863"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"fai","is_brouillon":false,"date":"2011-06-29","id":"iV47juaOeL4EAUsOqiWN6gOO","ordre":1,"notes":null,"slug":"m-pr-bon-espoir-2001-pr201-mfr01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]}],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"pr2","demarche_statut_id":"acc","demarche_date_debut":"2011-10-31","demarche_date_fin":"2016-10-31","ordre":3}],"nb_activites_to_do":null})
+    const bonEspoirData = titreGetValidator.parse({"id":"sJorD6pQomXTN7oRpyGwLijB","nom":"Bon Espoir","slug":"m-pr-bon-espoir-2001","titre_type_id":"prm","titre_statut_id":"ech","titre_doublon":null,"references":[{"nom":"21/2001","referenceTypeId":"dea"},{"nom":"2013-0033-MI","referenceTypeId":"deb"}],"titre_last_modified_date":"2023-11-30","demarches":[{"id":"ry8fHgRWiKEOE1x1ZANmajh8","slug":"m-pr-bon-espoir-2001-oct01","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":"2001-11-01","date_fin":null,"duree":60,"substances":["auru","scoc"],"titulaireIds":null,"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.9579321010744,5.07776938770113],[-53.9575232150351,4.98735333700249],[-53.8673626701318,4.98775355007457],[-53.8672265271601,4.95631734759459],[-53.7770631139658,4.95670276466037],[-53.7769878916108,4.93868722476635],[-53.5698730075868,4.93952315477954],[-53.5702069576163,5.02537608911083],[-53.759383911755,5.02460196044417],[-53.7596128864516,5.07864912381548],[-53.9579321010744,5.07776938770113]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9579321010744,5.07776938770113]},"properties":{"nom":"1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7596128864516,5.07864912381548]},"properties":{"nom":"2","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.759383911755,5.02460196044417]},"properties":{"nom":"3","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.5702069576163,5.02537608911083]},"properties":{"nom":"4","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.5698730075868,4.93952315477954]},"properties":{"nom":"5","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7769878916108,4.93868722476635]},"properties":{"nom":"6","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7770631139658,4.95670276466037]},"properties":{"nom":"7","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8672265271601,4.95631734759459]},"properties":{"nom":"8","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8673626701318,4.98775355007457]},"properties":{"nom":"9","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9575232150351,4.98735333700249]},"properties":{"nom":"10","description":null}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.957932101,5.077769388],[-53.957523215,4.987353337],[-53.86736267,4.98775355],[-53.867226527,4.956317348],[-53.777063114,4.956702765],[-53.776987892,4.938687225],[-53.569873008,4.939523155],[-53.570206958,5.025376089],[-53.759383912,5.02460196],[-53.759612886,5.078649124],[-53.957932101,5.077769388]]]]}},"geojson_origine_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9579321010744,5.07776938770113]},"properties":{"nom":"1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7596128864516,5.07864912381548]},"properties":{"nom":"2","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.759383911755,5.02460196044417]},"properties":{"nom":"3","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.5702069576163,5.02537608911083]},"properties":{"nom":"4","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.5698730075868,4.93952315477954]},"properties":{"nom":"5","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7769878916108,4.93868722476635]},"properties":{"nom":"6","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7770631139658,4.95670276466037]},"properties":{"nom":"7","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8672265271601,4.95631734759459]},"properties":{"nom":"8","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8673626701318,4.98775355007457]},"properties":{"nom":"9","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9575232150351,4.98735333700249]},"properties":{"nom":"10","description":null}}]},"geojson_origine_geo_systeme_id":"4326","geojson4326_forages":null,"geojson_origine_forages":null,"surface":465.5,"communes":[{"id":"97311","nom":"Saint-Laurent-du-Maroni"},{"id":"97306","nom":"Mana"}],"secteurs_maritimes":[],"sdom_zones":["0","2"],"forets":["LDD","MDF","PAUL"]}},"etape_statut_id":"acc","is_brouillon":false,"date":"2001-10-26","id":"CRVhvEIQAc319vUd8BfZoH5W","ordre":2,"notes":null,"slug":"m-pr-bon-espoir-2001-oct01-dpu01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":3201430},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":"EUR"}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000000774145"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"ECOI0100462D"}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2001-10-24","id":"Ce4K8goEZzjqXRJLL051jcpD","ordre":1,"notes":"Décret du 24 octobre 2001 accordant un permis de recherches A en Guyane","slug":"m-pr-bon-espoir-2001-oct01-dex01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"oct","demarche_statut_id":"acc","demarche_date_debut":"2001-11-01","demarche_date_fin":"2006-11-01","ordre":1},{"id":"PnFewl8P4Zt5Vm49zXqyn7Ml","slug":"m-pr-bon-espoir-2001-pr101","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["auru"],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2010-03-02","id":"qtn2a3DNPx258VZgSjqXGKf6","ordre":4,"notes":null,"slug":"m-pr-bon-espoir-2001-pr101-dpu02","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":560000},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":"EUR"}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000021889053"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"DEVO1003938A"}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2010-02-17","id":"tjOMgkb83wksMc6DFuqrecbu","ordre":3,"notes":null,"slug":"m-pr-bon-espoir-2001-pr101-dex02","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"2010-02-17-arr-a26ea089","description":"Arrêté du 17 février 2010 modifiant l'arrêté du 6 mai 2009 prolongeant la validité du permis exclusif de recherches de mines d'or dit « Permis de Bon Espoir » et réduisant sa surface (Guyane)","etape_document_type_id":"arr","public_lecture":true,"entreprises_lecture":true}],"avis_documents":[]},{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":"2011-10-31","duree":null,"substances":["auru"],"titulaireIds":null,"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.9577777777778,5.07666666666667],[-53.9575,5.0325],[-53.8944444444444,5.00055555555556],[-53.8208333333333,4.97972222222222],[-53.7138888888889,4.96388888888889],[-53.7322222222222,5.02361111111111],[-53.8763888888889,5.02277777777778],[-53.9577777777778,5.07666666666667]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9577777777778,5.07666666666667]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8763888888889,5.02277777777778]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7322222222222,5.02361111111111]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7138888888889,4.96388888888889]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8208333333333,4.97972222222222]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8944444444444,5.00055555555556]},"properties":{"nom":"F","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9575,5.0325]},"properties":{"nom":"G","description":null}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.957777778,5.076666667],[-53.9575,5.0325],[-53.894444444,5.000555556],[-53.820833333,4.979722222],[-53.713888889,4.963888889],[-53.732222222,5.023611111],[-53.876388889,5.022777778],[-53.957777778,5.076666667]]]]}},"geojson_origine_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9577777777778,5.07666666666667]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8763888888889,5.02277777777778]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7322222222222,5.02361111111111]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.7138888888889,4.96388888888889]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8208333333333,4.97972222222222]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.8944444444444,5.00055555555556]},"properties":{"nom":"F","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.9575,5.0325]},"properties":{"nom":"G","description":null}}]},"geojson_origine_geo_systeme_id":"4326","geojson4326_forages":null,"geojson_origine_forages":null,"surface":122.275,"communes":[{"id":"97311","nom":"Saint-Laurent-du-Maroni"},{"id":"97306","nom":"Mana"}],"secteurs_maritimes":[],"sdom_zones":["0","2"],"forets":["LDD","PAUL"]}},"etape_statut_id":"acc","is_brouillon":false,"date":"2009-05-16","id":"07cbyPCYcOtKYkw4kOqg2Sed","ordre":2,"notes":null,"slug":"m-pr-bon-espoir-2001-pr101-dpu01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":837000},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":"EUR"}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000020616467"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"DEVO0909004A"}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2009-05-06","id":"orsPMmIfX4kSgVus0HTrBxAo","ordre":1,"notes":null,"slug":"m-pr-bon-espoir-2001-pr101-dex01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"2009-05-06-arr-54f88e41","description":"Arrêté du 6 mai 2009 prolongeant la validité du permis exclusif de recherches de mines d'or dit « Permis Bon Espoir » et réduisant sa superficie (Guyane)","etape_document_type_id":"arr","public_lecture":true,"entreprises_lecture":true}],"avis_documents":[]}],"demarche_type_id":"pr1","demarche_statut_id":"acc","demarche_date_debut":"2006-11-01","demarche_date_fin":"2011-10-31","ordre":2},{"id":"EMFAv33wlGqMcjd6DwKzQBvr","slug":"m-pr-bon-espoir-2001-pr201","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":"2016-10-31","duree":60,"substances":["auru","scoc"],"titulaireIds":["fr-401802863"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2015-08-15","id":"Qp5DRYEN3Nc9n4CIwEYW7evs","ordre":9,"notes":null,"slug":"m-pr-bon-espoir-2001-pr201-dpu01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":1250000},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":"EUR"}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000031053068"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"EINL1518062A"}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":60,"substances":["auru","scoc"],"titulaireIds":["fr-401802863"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2015-08-03","id":"ABvgimvovFWeEhoMOrKi4wAy","ordre":8,"notes":null,"slug":"m-pr-bon-espoir-2001-pr201-dex01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"2015-08-03-arm-8bf71a65","description":"Arrêté du 3 août 2015 prolongeant la durée de validité du permis exclusif de recherches de mines d'or et de substances connexes dit « Permis de Bon Espoir » attribué à la société Armina Ressources Minières dans le département de Guyane","etape_document_type_id":"arm","public_lecture":true,"entreprises_lecture":true}],"avis_documents":[]},{"etape_type_id":"mdp","etape_statut_id":"fai","is_brouillon":false,"date":"2011-06-30","id":"nLXaR7H78V43GB47ypDoqvKz","ordre":2,"notes":null,"slug":"m-pr-bon-espoir-2001-pr201-mdp01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"mfr","fondamentale":{"date_debut":null,"date_fin":null,"duree":60,"substances":["auru","arge","cuiv"],"titulaireIds":["fr-401802863"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"fai","is_brouillon":false,"date":"2011-06-29","id":"iV47juaOeL4EAUsOqiWN6gOO","ordre":1,"notes":null,"slug":"m-pr-bon-espoir-2001-pr201-mfr01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"pr2","demarche_statut_id":"acc","demarche_date_debut":"2011-10-31","demarche_date_fin":"2016-10-31","ordre":3}],"nb_activites_to_do":null})
     bonEspoirData.nb_activites_to_do = 0
     // prettier-ignore
-    bonEspoirData.demarches.push(demarcheGetValidator.parse({ "id": "idtravaux", "ordre": 4, "slug": "m-pr-bon-espoir-2001-dam01", "description": null, "etapes": [{"etape_type_id": "wpo", "is_brouillon":false, "ordre": 4,notes: null, "etape_statut_id": "acc","date": "2012-07-23",	"id": "idEtapeTravaux1","slug": "m-pr-bon-espoir-2001-dam01-wpo01","sections_with_values": [],"entreprises_documents": [],"etape_documents": [{"id": "2012-07-23-apd-607c3aa8","description": "N°2012-SPR-DRMSS-1","etape_document_type_id": "apd","public_lecture": false,"entreprises_lecture": false	}]},	{"etape_type_id": "wpp",is_brouillon: false, "ordre": 3,notes: null,"etape_statut_id": "fai","date": "2011-05-04","id": "idEtapeTravaux2","slug": "m-pr-bon-espoir-2001-dam01-wpp01","sections_with_values": [],"entreprises_documents": [],"etape_documents": [{"id": "id_Document","description": "","etape_document_type_id": "apu","public_lecture": false,"entreprises_lecture": false	}]},	{"etape_type_id": "wfd",is_brouillon: false, "ordre": 2,notes: null, "etape_statut_id": "fai","date": "2010-10-01","id": "idEtapeTravaux3","slug": "m-pr-bon-espoir-2001-dam01-wfd01","sections_with_values": [],"entreprises_documents": [],"etape_documents": []},	{"etape_type_id": "wre",is_brouillon: false,"ordre": 1,notes: null,"etape_statut_id": "fav","date": "2010-10-01","id": "idEtapeTravaux4","slug": "m-pr-bon-espoir-2001-dam01-wre01","sections_with_values": [],"entreprises_documents": [],"etape_documents": []}],"demarche_type_id": "dam","demarche_statut_id": "fpm","demarche_date_debut": null,"demarche_date_fin": null
+    bonEspoirData.demarches.push(demarcheGetValidator.parse({ "id": "idtravaux", "ordre": 4, "slug": "m-pr-bon-espoir-2001-dam01", "description": null, "etapes": [{"etape_type_id": "wpo", "is_brouillon":false, "ordre": 4,notes: null, "etape_statut_id": "acc","date": "2012-07-23",	"id": "idEtapeTravaux1","slug": "m-pr-bon-espoir-2001-dam01-wpo01","sections_with_values": [],"entreprises_documents": [],"avis_documents":[],"etape_documents": [{"id": "2012-07-23-apd-607c3aa8","description": "N°2012-SPR-DRMSS-1","etape_document_type_id": "apd","public_lecture": false,"entreprises_lecture": false	}]},	{"etape_type_id": "wpp",is_brouillon: ETAPE_IS_NOT_BROUILLON, "ordre": 3,notes: null,"etape_statut_id": "fai","date": "2011-05-04","id": "idEtapeTravaux2","slug": "m-pr-bon-espoir-2001-dam01-wpp01","sections_with_values": [],"entreprises_documents": [],"avis_documents":[],"etape_documents": [{"id": "id_Document","description": "","etape_document_type_id": "apu","public_lecture": false,"entreprises_lecture": false	}]},	{"etape_type_id": "wfd",is_brouillon: ETAPE_IS_NOT_BROUILLON, "ordre": 2,notes: null, "etape_statut_id": "fai","date": "2010-10-01","id": "idEtapeTravaux3","slug": "m-pr-bon-espoir-2001-dam01-wfd01","sections_with_values": [],"entreprises_documents": [],"etape_documents": [],"avis_documents":[]},	{"etape_type_id": "wre",is_brouillon: ETAPE_IS_NOT_BROUILLON,"ordre": 1,notes: null,"etape_statut_id": "fav","date": "2010-10-01","id": "idEtapeTravaux4","slug": "m-pr-bon-espoir-2001-dam01-wre01","sections_with_values": [],"entreprises_documents": [],"etape_documents": [],"avis_documents":[]}],"demarche_type_id": "dam","demarche_statut_id": "fpm","demarche_date_debut": null,"demarche_date_fin": null
 
 
   }))
     // prettier-ignore
-    bonEspoirData.demarches.push(demarcheGetValidator.parse({"id":"KxHulLhT5XtziPhZDWpFuyA9", "ordre": 5, "slug":"m-pr-bon-espoir-2001-vct01","description":null,"etapes":[{"etape_type_id":"mcr",is_brouillon: false,"etape_statut_id":"fav","date":"2017-08-07","id":"OOKaEetpmAhDX17hcLEFWTZ1","ordre":4,notes: null,"slug":"m-pr-bon-espoir-2001-vct01-mcr01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"mdp",is_brouillon: false,"etape_statut_id":"fai","date":"2016-11-07","id":"fNt0G9CmdMc6iIG9x239wZ5E","ordre":2,notes: null,"slug":"m-pr-bon-espoir-2001-vct01-mdp01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"mfr",is_brouillon: false,"fondamentale":{"date_debut":null,"date_fin":null,"duree":180,"substances":["auru","scoc"],"titulaireIds":["fr-401802863"],"amodiataireIds":null,"perimetre":{"geojson4326_points": null,"geojson4326_forages":null,"geojson_origine_forages":null,"geojson_origine_points": null, "geojson4326_perimetre":{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-53.95781742722346,5.076877972864504],[-53.95761604147164,5.032517695391918],[-53.894654620091046,5.000735152488521],[-53.82094960753945,4.97999409410299],[-53.71414492282594,4.963998224562106],[-53.73241245985785,5.023653513799631],[-53.87657715038456,5.023033474690702],[-53.95781742722346,5.076877972864504]]]]},"properties":null}, "geojson_origine_perimetre":{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-53.95781742722346,5.076877972864504],[-53.95761604147164,5.032517695391918],[-53.894654620091046,5.000735152488521],[-53.82094960753945,4.97999409410299],[-53.71414492282594,4.963998224562106],[-53.73241245985785,5.023653513799631],[-53.87657715038456,5.023033474690702],[-53.95781742722346,5.076877972864504]]]]},"properties":null},"geojson_origine_geo_systeme_id":"4326","surface":122.275,"communes":[{"id":"97311","nom":"Saint-Laurent-du-Maroni"},{"id":"97306","nom":"Mana"}],"secteurs_maritimes":[],"sdom_zones":["0","2"],"forets":["LDD","PAUL"]}},"etape_statut_id":"fai","date":"2016-10-28","id":"VqBn5DzAtcMQWFY0CIiO6X1A","ordre":1,notes: null,"slug":"m-pr-bon-espoir-2001-vct01-mfr01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]}],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"vct","demarche_statut_id":"ins","demarche_date_debut":"2016-10-31","demarche_date_fin":null}))
+    bonEspoirData.demarches.push(demarcheGetValidator.parse({"id":"KxHulLhT5XtziPhZDWpFuyA9", "ordre": 5, "slug":"m-pr-bon-espoir-2001-vct01","description":null,"etapes":[{"etape_type_id":"mcr",is_brouillon: ETAPE_IS_NOT_BROUILLON,"etape_statut_id":"fav","date":"2017-08-07","id":"OOKaEetpmAhDX17hcLEFWTZ1","ordre":4,notes: null,"slug":"m-pr-bon-espoir-2001-vct01-mcr01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"mdp",is_brouillon: ETAPE_IS_NOT_BROUILLON,"etape_statut_id":"fai","date":"2016-11-07","id":"fNt0G9CmdMc6iIG9x239wZ5E","ordre":2,notes: null,"slug":"m-pr-bon-espoir-2001-vct01-mdp01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"mfr",is_brouillon: ETAPE_IS_NOT_BROUILLON,"fondamentale":{"date_debut":null,"date_fin":null,"duree":180,"substances":["auru","scoc"],"titulaireIds":["fr-401802863"],"amodiataireIds":null,"perimetre":{"geojson4326_points": null,"geojson4326_forages":null,"geojson_origine_forages":null,"geojson_origine_points": null, "geojson4326_perimetre":{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-53.95781742722346,5.076877972864504],[-53.95761604147164,5.032517695391918],[-53.894654620091046,5.000735152488521],[-53.82094960753945,4.97999409410299],[-53.71414492282594,4.963998224562106],[-53.73241245985785,5.023653513799631],[-53.87657715038456,5.023033474690702],[-53.95781742722346,5.076877972864504]]]]},"properties":null}, "geojson_origine_perimetre":{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-53.95781742722346,5.076877972864504],[-53.95761604147164,5.032517695391918],[-53.894654620091046,5.000735152488521],[-53.82094960753945,4.97999409410299],[-53.71414492282594,4.963998224562106],[-53.73241245985785,5.023653513799631],[-53.87657715038456,5.023033474690702],[-53.95781742722346,5.076877972864504]]]]},"properties":null},"geojson_origine_geo_systeme_id":"4326","surface":122.275,"communes":[{"id":"97311","nom":"Saint-Laurent-du-Maroni"},{"id":"97306","nom":"Mana"}],"secteurs_maritimes":[],"sdom_zones":["0","2"],"forets":["LDD","PAUL"]}},"etape_statut_id":"fai","date":"2016-10-28","id":"VqBn5DzAtcMQWFY0CIiO6X1A","ordre":1,notes: null,"slug":"m-pr-bon-espoir-2001-vct01-mfr01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]}],"entreprises_documents":[],"etape_documents":[], "avis_documents":[]}],"demarche_type_id":"vct","demarche_statut_id":"ins","demarche_date_debut":"2016-10-31","demarche_date_fin":null}))
 
     return Promise.resolve(bonEspoirData)
   },
@@ -545,7 +547,7 @@ const basseManaApiClient: PropsApiClient = {
     getTitreAction(titreIdOrSlug)
 
     // prettier-ignore
-    const basseManaData = titreGetValidator.parse({"id":"ORKjSbwrb87xE53MsYClV8OF","nom":"Basse Mana","slug":"m-pr-basse-mana-2018","titre_type_id":"prm","titre_statut_id":"sup","titre_doublon":null,"references":[{"nom":"22/2018","referenceTypeId":"dea"},{"nom":"2016-0010-MI","referenceTypeId":"deb"}],"titre_last_modified_date":"2023-12-19","demarches":[{"id":"GnIerujOWqlS3U06Xcbc1Dr0","slug":"m-pr-basse-mana-2018-oct01","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":36,"substances":["tant","niob","lith","bery","etai","wolf","tita","auru"],"titulaireIds":["fr-790856850"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.699125239725,5.29137675727333],[-53.735659753333,5.24333287037071],[-53.6847736578144,5.232646225266],[-53.664223513371,5.23752353831223],[-53.6554344678131,5.25034817283726],[-53.6402449164671,5.25044876137938],[-53.6331053301638,5.26979119871868],[-53.6650166925488,5.27353207619541],[-53.699125239725,5.29137675727333]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.699125239725,5.29137675727333]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6650166925488,5.27353207619541]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6331053301638,5.26979119871868]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6402449164671,5.25044876137938]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6554344678131,5.25034817283726]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.664223513371,5.23752353831223]},"properties":{"nom":"F","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6847736578144,5.232646225266]},"properties":{"nom":"G","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.735659753333,5.24333287037071]},"properties":{"nom":"H","description":null}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[200814,585525],[204589,583534],[208127,583105],[207326,580968],[205641,580964],[204660,579549],[202378,579019],[196738,580226],[200814,585525]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[200814,585525]},"properties":{"nom":"A"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204589,583534]},"properties":{"nom":"B"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[208127,583105]},"properties":{"nom":"C"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[207326,580968]},"properties":{"nom":"D"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[205641,580964]},"properties":{"nom":"E"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204660,579549]},"properties":{"nom":"F"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[202378,579019]},"properties":{"nom":"G"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[196738,580226]},"properties":{"nom":"H"}}]},"geojson_origine_geo_systeme_id":"2972","geojson4326_forages":null,"geojson_origine_forages":null,"surface":48,"communes":[{"id":"97306","nom":"Mana"}],"secteurs_maritimes":[],"sdom_zones":["2"],"forets":["BSM"]}},"etape_statut_id":"acc","is_brouillon":false,"date":"2018-09-11","id":"ooH6ZbECJPcDPFsE0McnKvUm","ordre":9,"notes":null,"slug":"m-pr-basse-mana-2018-oct01-dpu01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":150000},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":"EUR"}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000037382008"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"ECOL1816264A"}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":36,"substances":["tant","niob","lith","bery","etai","wolf","tita","auru"],"titulaireIds":["fr-790856850"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.699125239725,5.29137675727333],[-53.735659753333,5.24333287037071],[-53.6847736578144,5.232646225266],[-53.664223513371,5.23752353831223],[-53.6554344678131,5.25034817283726],[-53.6402449164671,5.25044876137938],[-53.6331053301638,5.26979119871868],[-53.6650166925488,5.27353207619541],[-53.699125239725,5.29137675727333]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.699125239725,5.29137675727333]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6650166925488,5.27353207619541]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6331053301638,5.26979119871868]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6402449164671,5.25044876137938]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6554344678131,5.25034817283726]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.664223513371,5.23752353831223]},"properties":{"nom":"F","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6847736578144,5.232646225266]},"properties":{"nom":"G","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.735659753333,5.24333287037071]},"properties":{"nom":"H","description":null}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[200814,585525],[204589,583534],[208127,583105],[207326,580968],[205641,580964],[204660,579549],[202378,579019],[196738,580226],[200814,585525]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[200814,585525]},"properties":{"nom":"A"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204589,583534]},"properties":{"nom":"B"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[208127,583105]},"properties":{"nom":"C"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[207326,580968]},"properties":{"nom":"D"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[205641,580964]},"properties":{"nom":"E"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204660,579549]},"properties":{"nom":"F"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[202378,579019]},"properties":{"nom":"G"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[196738,580226]},"properties":{"nom":"H"}}]},"geojson_origine_geo_systeme_id":"2972","geojson4326_forages":null,"geojson_origine_forages":null,"surface":48,"communes":[{"id":"97306","nom":"Mana"}],"secteurs_maritimes":[],"sdom_zones":["2"],"forets":["BSM"]}},"etape_statut_id":"acc","is_brouillon":false,"date":"2018-08-31","id":"KJtV68vswF5ewUyF2jTuLGhS","ordre":8,"notes":null,"slug":"m-pr-basse-mana-2018-oct01-dex01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":150000},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":"EUR"}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":"JORFTEXT000037382008"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"ECOL1816264A"}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"mdp","etape_statut_id":"fai","is_brouillon":false,"date":"2016-08-28","id":"qVJM9zS6hWyIr3My5OoubQA3","ordre":2,"notes":null,"slug":"m-pr-basse-mana-2018-oct01-mdp01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"mfr","fondamentale":{"date_debut":null,"date_fin":null,"duree":36,"substances":["tant","niob","scoc"],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"fai","is_brouillon":false,"date":"2016-06-19","id":"abABihashClZP0lL3NUPELNV","ordre":1,"notes":null,"slug":"m-pr-basse-mana-2018-oct01-mfr01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]}],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"oct","demarche_statut_id":"acc","demarche_date_debut":"2018-09-11","demarche_date_fin":"2021-09-11","ordre":1},{"id":"mZAUVvPyznbzpj3e3grjFmlJ","slug":"m-pr-basse-mana-2018-pr101","description":null,"etapes":[{"etape_type_id":"rpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"fai","is_brouillon":false,"date":"2023-11-17","id":"f76c17ab21ca966988390d92","ordre":11,"notes":null,"slug":"m-pr-basse-mana-2018-pr101-rpu01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2023-11-15","id":"71f6497117b21325d53d8e56","ordre":10,"notes":null,"slug":"m-pr-basse-mana-2018-pr101-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"Texte 3 sur 160"}]}],"entreprises_documents":[],"etape_documents":[{"id":"2023-11-15-pub-4d420801","description":"","etape_document_type_id":"pub","public_lecture":true,"entreprises_lecture":true}]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":30,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2023-11-07","id":"590f6dd2f808eeadf51b820e","ordre":9,"notes":null,"slug":"m-pr-basse-mana-2018-pr101-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"ppc","etape_statut_id":"ter","is_brouillon":false,"date":"2023-04-14","id":"da4a6c74690a6d1ef01ddde2","ordre":6,"notes":null,"slug":"m-pr-basse-mana-2018-pr101-ppc01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"ppu","etape_statut_id":"fai","is_brouillon":false,"date":"2023-03-27","id":"M1mK0vhAHH5CTaUwq4cJzK49","ordre":5,"notes":null,"slug":"m-pr-basse-mana-2018-pr101-ppu01","sections_with_values":[{"id":"opdp","elements":[{"id":"lien","nom":"Lien public externe","description":"","optionnel":true,"type":"url","value":null}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"mfr","fondamentale":{"date_debut":null,"date_fin":null,"duree":60,"substances":["tant","niob","lith","bery","etai","wolf","tita","auru"],"titulaireIds":["fr-790856850"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.699150462397206,5.291394409468797],[-53.73568497160258,5.2433505257409125],[-53.684798879087204,5.232663883719148],[-53.664248736219285,5.2375411971227654],[-53.65545969176547,5.250365830767107],[-53.64027014144058,5.250466419912988],[-53.633130556393525,5.269808855679936],[-53.66511918689031,5.291623119512839],[-53.699150462397206,5.291394409468797]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.699150462397206,5.291394409468797]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.66511918689031,5.291623119512839]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.633130556393525,5.269808855679936]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.64027014144058,5.250466419912988]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.65545969176547,5.250365830767107]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.664248736219285,5.2375411971227654]},"properties":{"nom":"F","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.684798879087204,5.232663883719148]},"properties":{"nom":"G","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.73568497160258,5.2433505257409125]},"properties":{"nom":"H","description":null}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[200814,585525],[204589,585534],[208127,583105],[207326,580968],[205641,580964],[204660,579549],[202378,579019],[196738,580226],[200814,585525]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[200814,585525]},"properties":{"nom":"A"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204589,585534]},"properties":{"nom":"B"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[208127,583105]},"properties":{"nom":"C"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[207326,580968]},"properties":{"nom":"D"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[205641,580964]},"properties":{"nom":"E"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204660,579549]},"properties":{"nom":"F"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[202378,579019]},"properties":{"nom":"G"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[196738,580226]},"properties":{"nom":"H"}}]},"geojson_origine_geo_systeme_id":"2972","geojson4326_forages":null,"geojson_origine_forages":null,"surface":null,"communes":[{"id":"97306","nom":"Mana"}],"secteurs_maritimes":[],"sdom_zones":["2"],"forets":["BSM"]}},"etape_statut_id":"fai","is_brouillon":false,"date":"2021-04-30","id":"NKW0jIKc5cPBIp2dwu2VceCG","ordre":1,"notes":null,"slug":"m-pr-basse-mana-2018-pr101-mfr01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"mdp","etape_statut_id":"fai","is_brouillon":false,"date":"2021-04-30","id":"wFb34sxGyHoRNOByPffQZyAF","ordre":2,"notes":null,"slug":"m-pr-basse-mana-2018-pr101-mdp01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"pr1","demarche_statut_id":"acc","demarche_date_debut":"2021-09-11","demarche_date_fin":"2024-03-11","ordre":2},{"id":"5df48d3536a38dd1dab542d7","slug":"m-pr-basse-mana-2018-pr201","description":"","etapes":[{"etape_type_id":"mdp","etape_statut_id":"fai","is_brouillon":false,"date":"2023-10-30","id":"37a1752da216067fc73328f9","ordre":2,"notes":null,"slug":"m-pr-basse-mana-2018-pr201-mdp01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"mfr","fondamentale":{"date_debut":null,"date_fin":null,"duree":60,"substances":["tant","niob","lith","bery","etai","wolf","tita","auru"],"titulaireIds":null,"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.695977302723314,5.258026897118486],[-53.69166175320614,5.243894120712839],[-53.691207934852734,5.238962048893827],[-53.66947244758239,5.236434510036549],[-53.66426676493007,5.2375411203489115],[-53.655468706369525,5.250365792413383],[-53.64027010339901,5.25045738302719],[-53.63422022259896,5.267391338838475],[-53.64933956522329,5.274005464773927],[-53.66943759690406,5.2748050575845875],[-53.66988205803166,5.281761503749559],[-53.671594626284566,5.281690874443703],[-53.67432345044184,5.276844434310086],[-53.67742349010169,5.274481516415551],[-53.68523182828244,5.270616251350751],[-53.695977302723314,5.258026897118486]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.695977302723314,5.258026897118486]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.68523182828244,5.270616251350751]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.67742349010169,5.274481516415551]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.67432345044184,5.276844434310086]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.671594626284566,5.281690874443703]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.66988205803166,5.281761503749559]},"properties":{"nom":"F","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.66943759690406,5.2748050575845875]},"properties":{"nom":"G","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.64933956522329,5.274005464773927]},"properties":{"nom":"H","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.63422022259896,5.267391338838475]},"properties":{"nom":"I","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.64027010339901,5.25045738302719]},"properties":{"nom":"J","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.655468706369525,5.250365792413383]},"properties":{"nom":"K","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.66426676493007,5.2375411203489115]},"properties":{"nom":"L","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.66947244758239,5.236434510036549]},"properties":{"nom":"M","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.691207934852734,5.238962048893827]},"properties":{"nom":"N","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.69166175320614,5.243894120712839]},"properties":{"nom":"O","description":null}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[201150,581831],[202348,583219],[203216,583643],[203561,583903],[203866,584438],[204056,584445],[204102,583675],[206331,583577],[208005,582838],[207326,580967],[205640,580964],[204658,579549],[204080,579429],[201670,579719],[201622,580265],[201150,581831]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[201150,581831]},"properties":{"nom":"A"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[202348,583219]},"properties":{"nom":"B"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[203216,583643]},"properties":{"nom":"C"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[203561,583903]},"properties":{"nom":"D"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[203866,584438]},"properties":{"nom":"E"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204056,584445]},"properties":{"nom":"F"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204102,583675]},"properties":{"nom":"G"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[206331,583577]},"properties":{"nom":"H"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[208005,582838]},"properties":{"nom":"I"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[207326,580967]},"properties":{"nom":"J"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[205640,580964]},"properties":{"nom":"K"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204658,579549]},"properties":{"nom":"L"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204080,579429]},"properties":{"nom":"M"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[201670,579719]},"properties":{"nom":"N"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[201622,580265]},"properties":{"nom":"O"}}]},"geojson_origine_geo_systeme_id":"2972","geojson4326_forages":null,"geojson_origine_forages":null,"surface":20.69,"communes":[{"id":"97306","nom":"Mana"}],"secteurs_maritimes":[],"sdom_zones":["2"],"forets":["BSM"]}},"etape_statut_id":"fai","is_brouillon":false,"date":"2023-10-30","id":"47a22a6ca44891d40e2f4149","ordre":1,"notes":null,"slug":"m-pr-basse-mana-2018-pr201-mfr01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]}],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"pr2","demarche_statut_id":"dep","demarche_date_debut":"2024-03-11","demarche_date_fin":null,"ordre":3}],"nb_activites_to_do":null})
+    const basseManaData = titreGetValidator.parse({"id":"ORKjSbwrb87xE53MsYClV8OF","nom":"Basse Mana","slug":"m-pr-basse-mana-2018","titre_type_id":"prm","titre_statut_id":"sup","titre_doublon":null,"references":[{"nom":"22/2018","referenceTypeId":"dea"},{"nom":"2016-0010-MI","referenceTypeId":"deb"}],"titre_last_modified_date":"2023-12-19","demarches":[{"id":"GnIerujOWqlS3U06Xcbc1Dr0","slug":"m-pr-basse-mana-2018-oct01","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":36,"substances":["tant","niob","lith","bery","etai","wolf","tita","auru"],"titulaireIds":["fr-790856850"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.699125239725,5.29137675727333],[-53.735659753333,5.24333287037071],[-53.6847736578144,5.232646225266],[-53.664223513371,5.23752353831223],[-53.6554344678131,5.25034817283726],[-53.6402449164671,5.25044876137938],[-53.6331053301638,5.26979119871868],[-53.6650166925488,5.27353207619541],[-53.699125239725,5.29137675727333]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.699125239725,5.29137675727333]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6650166925488,5.27353207619541]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6331053301638,5.26979119871868]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6402449164671,5.25044876137938]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6554344678131,5.25034817283726]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.664223513371,5.23752353831223]},"properties":{"nom":"F","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6847736578144,5.232646225266]},"properties":{"nom":"G","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.735659753333,5.24333287037071]},"properties":{"nom":"H","description":null}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[200814,585525],[204589,583534],[208127,583105],[207326,580968],[205641,580964],[204660,579549],[202378,579019],[196738,580226],[200814,585525]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[200814,585525]},"properties":{"nom":"A"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204589,583534]},"properties":{"nom":"B"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[208127,583105]},"properties":{"nom":"C"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[207326,580968]},"properties":{"nom":"D"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[205641,580964]},"properties":{"nom":"E"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204660,579549]},"properties":{"nom":"F"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[202378,579019]},"properties":{"nom":"G"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[196738,580226]},"properties":{"nom":"H"}}]},"geojson_origine_geo_systeme_id":"2972","geojson4326_forages":null,"geojson_origine_forages":null,"surface":48,"communes":[{"id":"97306","nom":"Mana"}],"secteurs_maritimes":[],"sdom_zones":["2"],"forets":["BSM"]}},"etape_statut_id":"acc","is_brouillon":false,"date":"2018-09-11","id":"ooH6ZbECJPcDPFsE0McnKvUm","ordre":9,"notes":null,"slug":"m-pr-basse-mana-2018-oct01-dpu01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":150000},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":"EUR"}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000037382008"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"ECOL1816264A"}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":36,"substances":["tant","niob","lith","bery","etai","wolf","tita","auru"],"titulaireIds":["fr-790856850"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.699125239725,5.29137675727333],[-53.735659753333,5.24333287037071],[-53.6847736578144,5.232646225266],[-53.664223513371,5.23752353831223],[-53.6554344678131,5.25034817283726],[-53.6402449164671,5.25044876137938],[-53.6331053301638,5.26979119871868],[-53.6650166925488,5.27353207619541],[-53.699125239725,5.29137675727333]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.699125239725,5.29137675727333]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6650166925488,5.27353207619541]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6331053301638,5.26979119871868]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6402449164671,5.25044876137938]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6554344678131,5.25034817283726]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.664223513371,5.23752353831223]},"properties":{"nom":"F","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.6847736578144,5.232646225266]},"properties":{"nom":"G","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.735659753333,5.24333287037071]},"properties":{"nom":"H","description":null}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[200814,585525],[204589,583534],[208127,583105],[207326,580968],[205641,580964],[204660,579549],[202378,579019],[196738,580226],[200814,585525]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[200814,585525]},"properties":{"nom":"A"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204589,583534]},"properties":{"nom":"B"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[208127,583105]},"properties":{"nom":"C"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[207326,580968]},"properties":{"nom":"D"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[205641,580964]},"properties":{"nom":"E"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204660,579549]},"properties":{"nom":"F"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[202378,579019]},"properties":{"nom":"G"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[196738,580226]},"properties":{"nom":"H"}}]},"geojson_origine_geo_systeme_id":"2972","geojson4326_forages":null,"geojson_origine_forages":null,"surface":48,"communes":[{"id":"97306","nom":"Mana"}],"secteurs_maritimes":[],"sdom_zones":["2"],"forets":["BSM"]}},"etape_statut_id":"acc","is_brouillon":false,"date":"2018-08-31","id":"KJtV68vswF5ewUyF2jTuLGhS","ordre":8,"notes":null,"slug":"m-pr-basse-mana-2018-oct01-dex01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":150000},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":"EUR"}]},{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":"JORFTEXT000037382008"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"ECOL1816264A"}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"mdp","etape_statut_id":"fai","is_brouillon":false,"date":"2016-08-28","id":"qVJM9zS6hWyIr3My5OoubQA3","ordre":2,"notes":null,"slug":"m-pr-basse-mana-2018-oct01-mdp01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"mfr","fondamentale":{"date_debut":null,"date_fin":null,"duree":36,"substances":["tant","niob","scoc"],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"fai","is_brouillon":false,"date":"2016-06-19","id":"abABihashClZP0lL3NUPELNV","ordre":1,"notes":null,"slug":"m-pr-basse-mana-2018-oct01-mfr01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"oct","demarche_statut_id":"acc","demarche_date_debut":"2018-09-11","demarche_date_fin":"2021-09-11","ordre":1},{"id":"mZAUVvPyznbzpj3e3grjFmlJ","slug":"m-pr-basse-mana-2018-pr101","description":null,"etapes":[{"etape_type_id":"rpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"fai","is_brouillon":false,"date":"2023-11-17","id":"f76c17ab21ca966988390d92","ordre":11,"notes":null,"slug":"m-pr-basse-mana-2018-pr101-rpu01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2023-11-15","id":"71f6497117b21325d53d8e56","ordre":10,"notes":null,"slug":"m-pr-basse-mana-2018-pr101-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"Texte 3 sur 160"}]}],"entreprises_documents":[],"etape_documents":[{"id":"2023-11-15-pub-4d420801","description":"","etape_document_type_id":"pub","public_lecture":true,"entreprises_lecture":true}],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":30,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2023-11-07","id":"590f6dd2f808eeadf51b820e","ordre":9,"notes":null,"slug":"m-pr-basse-mana-2018-pr101-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"ppc","etape_statut_id":"ter","is_brouillon":false,"date":"2023-04-14","id":"da4a6c74690a6d1ef01ddde2","ordre":6,"notes":null,"slug":"m-pr-basse-mana-2018-pr101-ppc01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"ppu","etape_statut_id":"fai","is_brouillon":false,"date":"2023-03-27","id":"M1mK0vhAHH5CTaUwq4cJzK49","ordre":5,"notes":null,"slug":"m-pr-basse-mana-2018-pr101-ppu01","sections_with_values":[{"id":"opdp","elements":[{"id":"lien","nom":"Lien public externe","description":"","optionnel":true,"type":"url","value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"mdp","etape_statut_id":"fai","is_brouillon":false,"date":"2021-04-30","id":"wFb34sxGyHoRNOByPffQZyAF","ordre":2,"notes":null,"slug":"m-pr-basse-mana-2018-pr101-mdp01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"mfr","fondamentale":{"date_debut":null,"date_fin":null,"duree":60,"substances":["tant","niob","lith","bery","etai","wolf","tita","auru"],"titulaireIds":["fr-790856850"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.699150462397206,5.291394409468797],[-53.73568497160258,5.2433505257409125],[-53.684798879087204,5.232663883719148],[-53.664248736219285,5.2375411971227654],[-53.65545969176547,5.250365830767107],[-53.64027014144058,5.250466419912988],[-53.633130556393525,5.269808855679936],[-53.66511918689031,5.291623119512839],[-53.699150462397206,5.291394409468797]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.699150462397206,5.291394409468797]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.66511918689031,5.291623119512839]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.633130556393525,5.269808855679936]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.64027014144058,5.250466419912988]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.65545969176547,5.250365830767107]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.664248736219285,5.2375411971227654]},"properties":{"nom":"F","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.684798879087204,5.232663883719148]},"properties":{"nom":"G","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.73568497160258,5.2433505257409125]},"properties":{"nom":"H","description":null}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[200814,585525],[204589,585534],[208127,583105],[207326,580968],[205641,580964],[204660,579549],[202378,579019],[196738,580226],[200814,585525]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[200814,585525]},"properties":{"nom":"A"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204589,585534]},"properties":{"nom":"B"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[208127,583105]},"properties":{"nom":"C"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[207326,580968]},"properties":{"nom":"D"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[205641,580964]},"properties":{"nom":"E"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204660,579549]},"properties":{"nom":"F"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[202378,579019]},"properties":{"nom":"G"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[196738,580226]},"properties":{"nom":"H"}}]},"geojson_origine_geo_systeme_id":"2972","geojson4326_forages":null,"geojson_origine_forages":null,"surface":null,"communes":[{"id":"97306","nom":"Mana"}],"secteurs_maritimes":[],"sdom_zones":["2"],"forets":["BSM"]}},"etape_statut_id":"fai","is_brouillon":false,"date":"2021-04-30","id":"NKW0jIKc5cPBIp2dwu2VceCG","ordre":1,"notes":null,"slug":"m-pr-basse-mana-2018-pr101-mfr01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"pr1","demarche_statut_id":"acc","demarche_date_debut":"2021-09-11","demarche_date_fin":"2024-03-11","ordre":2},{"id":"5df48d3536a38dd1dab542d7","slug":"m-pr-basse-mana-2018-pr201","description":"","etapes":[{"etape_type_id":"mdp","etape_statut_id":"fai","is_brouillon":false,"date":"2023-10-30","id":"37a1752da216067fc73328f9","ordre":2,"notes":null,"slug":"m-pr-basse-mana-2018-pr201-mdp01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"mfr","fondamentale":{"date_debut":null,"date_fin":null,"duree":60,"substances":["tant","niob","lith","bery","etai","wolf","tita","auru"],"titulaireIds":null,"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-53.695977302723314,5.258026897118486],[-53.69166175320614,5.243894120712839],[-53.691207934852734,5.238962048893827],[-53.66947244758239,5.236434510036549],[-53.66426676493007,5.2375411203489115],[-53.655468706369525,5.250365792413383],[-53.64027010339901,5.25045738302719],[-53.63422022259896,5.267391338838475],[-53.64933956522329,5.274005464773927],[-53.66943759690406,5.2748050575845875],[-53.66988205803166,5.281761503749559],[-53.671594626284566,5.281690874443703],[-53.67432345044184,5.276844434310086],[-53.67742349010169,5.274481516415551],[-53.68523182828244,5.270616251350751],[-53.695977302723314,5.258026897118486]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.695977302723314,5.258026897118486]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.68523182828244,5.270616251350751]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.67742349010169,5.274481516415551]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.67432345044184,5.276844434310086]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.671594626284566,5.281690874443703]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.66988205803166,5.281761503749559]},"properties":{"nom":"F","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.66943759690406,5.2748050575845875]},"properties":{"nom":"G","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.64933956522329,5.274005464773927]},"properties":{"nom":"H","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.63422022259896,5.267391338838475]},"properties":{"nom":"I","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.64027010339901,5.25045738302719]},"properties":{"nom":"J","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.655468706369525,5.250365792413383]},"properties":{"nom":"K","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.66426676493007,5.2375411203489115]},"properties":{"nom":"L","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.66947244758239,5.236434510036549]},"properties":{"nom":"M","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.691207934852734,5.238962048893827]},"properties":{"nom":"N","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-53.69166175320614,5.243894120712839]},"properties":{"nom":"O","description":null}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[201150,581831],[202348,583219],[203216,583643],[203561,583903],[203866,584438],[204056,584445],[204102,583675],[206331,583577],[208005,582838],[207326,580967],[205640,580964],[204658,579549],[204080,579429],[201670,579719],[201622,580265],[201150,581831]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[201150,581831]},"properties":{"nom":"A"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[202348,583219]},"properties":{"nom":"B"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[203216,583643]},"properties":{"nom":"C"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[203561,583903]},"properties":{"nom":"D"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[203866,584438]},"properties":{"nom":"E"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204056,584445]},"properties":{"nom":"F"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204102,583675]},"properties":{"nom":"G"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[206331,583577]},"properties":{"nom":"H"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[208005,582838]},"properties":{"nom":"I"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[207326,580967]},"properties":{"nom":"J"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[205640,580964]},"properties":{"nom":"K"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204658,579549]},"properties":{"nom":"L"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[204080,579429]},"properties":{"nom":"M"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[201670,579719]},"properties":{"nom":"N"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[201622,580265]},"properties":{"nom":"O"}}]},"geojson_origine_geo_systeme_id":"2972","geojson4326_forages":null,"geojson_origine_forages":null,"surface":20.69,"communes":[{"id":"97306","nom":"Mana"}],"secteurs_maritimes":[],"sdom_zones":["2"],"forets":["BSM"]}},"etape_statut_id":"fai","is_brouillon":false,"date":"2023-10-30","id":"47a22a6ca44891d40e2f4149","ordre":1,"notes":null,"slug":"m-pr-basse-mana-2018-pr201-mfr01","sections_with_values":[{"id":"prx","nom":"Propriétés du permis exclusif de recherches","elements":[{"id":"engagement","nom":"Engagement","optionnel":true,"type":"number","value":null},{"id":"engagementDeviseId","nom":"Devise de l'engagement","description":"","optionnel":true,"type":"select","options":[{"id":"EUR","nom":"Euros"},{"id":"FRF","nom":"Francs"},{"id":"XPF","nom":"Francs Pacifique"}],"value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"pr2","demarche_statut_id":"dep","demarche_date_debut":"2024-03-11","demarche_date_fin":null,"ordre":3}],"nb_activites_to_do":null})
 
     return Promise.resolve(basseManaData)
   },
@@ -683,7 +685,7 @@ const lenoncourtApiClient: PropsApiClient = {
     getTitreAction(titreIdOrSlug)
 
     // prettier-ignore
-    const lenoncourtData = titreGetValidator.parse({"id":"s7RvqvCAgKs4DxkQBYV93cVx","nom":"Lenoncourt","slug":"m-cx-lenoncourt-1968","titre_type_id":"cxm","titre_statut_id":"val","titre_doublon":null,"references":[{"nom":"2013-0275-MI","referenceTypeId":"deb"},{"nom":"54TM0153","referenceTypeId":"rnt"}],"titre_last_modified_date":"2024-03-21","demarches":[{"id":"ozYnUjy40eru81jUnXz5snv2","slug":"m-cx-lenoncourt-1968-oct01","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["nacl"],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"1968-01-24","id":"SG2zAN9QaKBN1hZKqKEgQGpI","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-oct01-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"1968-01-24-dec-89a94bb2","description":"Décret du 13 janvier 1968 instituant la concession de mines de sels de sodium de Lenoncourt (Meurthe-et-Moselle) au profit de la société Les Soudières réunies - La Madeleine-Varangéville","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true}]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"1968-01-13","id":"LM2Zk3PwAjrduc4EqmucOjeB","ordre":1,"notes":"Décret du 13 janvier 1968 instituant la concession de mines de sels de sodium de Lenoncourt (Meurthe-et-Moselle) au profit de la société Les Soudières réunies - La Madeleine-Varangéville","slug":"m-cx-lenoncourt-1968-oct01-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"oct","demarche_statut_id":"acc","demarche_date_debut":"1968-01-24","demarche_date_fin":"2024-03-01","ordre":1},{"id":"wM0cpipWSef9lDAHDurJxxhk","slug":"m-cx-lenoncourt-1968-mut01","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["selg","selh"],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"1970-11-19","id":"XScxzwDKFxmYtDnkJ7X7qZBi","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-mut01-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"1970-11-19-dec-8a77b142","description":"Décret du 16 novembre 1970 autorisant la mutation de propriété de cinq concessions de mines de sel gemme et de sources salées au profit de la société Produits chimiques Pechlney-Saint-Gobaln.","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true}]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":["fr-606320471"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"1970-11-16","id":"ejAqTpzBj82jgF0ShiwMRQmW","ordre":1,"notes":"Décret du 16 novembre 1970 autorisant la mutation de propriété de cinq concessions de mines de sel gemme et de sources salées au profit de la société Produits chimiques Pechlney-Saint-Gobaln.","slug":"m-cx-lenoncourt-1968-mut01-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"mut","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":2},{"id":"1UC2b0ORsm2ezCh6whHzbOKR","slug":"m-cx-lenoncourt-1968-mut02","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["selg","selh"],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"1975-11-27","id":"TjimKkEETzF0yGBG2m085on9","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-mut02-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"1975-11-27-dec-b50a06f5","description":"Décret du 24 novembre 1975 autorisant la mutation de cinq concessions de mines de sel gemme et de sources salées au profit de la Compagnie industrielle et minière","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true}]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":["fr-712025048"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"1975-11-24","id":"aYO0zwBFBOZP7VN11JaJDhzI","ordre":1,"notes":"Décret du 24 novembre 1975 autorisant la mutation de cinq concessions de mines de sel gemme et de sources salées au profit de la Compagnie industrielle et minière","slug":"m-cx-lenoncourt-1968-mut02-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"mut","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":3},{"id":"H5eANAZPKhY9eFQtCyLYjCvp","slug":"m-cx-lenoncourt-1968-exp01","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["nacl"],"titulaireIds":["fr-712025048"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[6.275644095814427,48.6854960696669],[6.255874124806144,48.675237870291575],[6.295319143383101,48.66801114312286],[6.316241924966296,48.676189123934925],[6.315656943097024,48.680413137182065],[6.307671761547864,48.69027442550079],[6.302487495007789,48.68919858322589],[6.296317613859298,48.68917495187758],[6.290997693817669,48.68780534512822],[6.285653764289864,48.68913324659737],[6.281744418990354,48.68911774206666],[6.275644095814427,48.6854960696669]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[6.275644095814427,48.6854960696669]},"properties":{"nom":"A","description":"Point situé sur la ligne joignant les clochers de Saulxures-lès-Nancy et de Buissoncourt, à son intersection avec la limite des communes de Saulxures-lès-Nancy et de Lenoncourt, soit à environ 2040 mètres à l'Est-Sud-Est du clocher de Saulxures-lès-Nancy"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.281744418990354,48.68911774206666]},"properties":{"nom":"B1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.285653764289864,48.68913324659737]},"properties":{"nom":"C1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.290997693817669,48.68780534512822]},"properties":{"nom":"D1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.296317613859298,48.68917495187758]},"properties":{"nom":"E1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.302487495007789,48.68919858322589]},"properties":{"nom":"F1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.307671761547864,48.69027442550079]},"properties":{"nom":"G1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.315656943097024,48.680413137182065]},"properties":{"nom":"B","description":"Point situé sur la ligne joignant les clochers de Saulxures-lès-Nancy et de Buissoncourt, à son intersection avec la limite Ouest de la concession de Cercueil-Buissoncourt, soit à environ 2 150 mètres au Nord-Nord-Ouest du clocher de Buissoncourt"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.316241924966296,48.676189123934925]},"properties":{"nom":"C","description":"Borne commune aux concessions d'Art-sur-Meurthe et de Cercueil-Buissoncourt"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.295319143383101,48.66801114312286]},"properties":{"nom":"D","description":"Sommet A de la concession d'Art-sur-Meurthe:"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.255874124806144,48.675237870291575]},"properties":{"nom":"E","description":"Sommet M de la concession d'Art-sur•Meurthe:"}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[889907.42,1117010.26],[890334.9,1117435.93],[890622.24,1117452.72],[891022.89,1117325.88],[891406.04,1117498.53],[891859.53,1117525.03],[892234.39,1117664.59],[892879.34,1116600.52],[892947.15,1116133.73],[891456.2,1115144.46],[888513.03,1115795.21],[889907.42,1117010.26]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[889907.42,1117010.26]},"properties":{"nom":"A","description":"Point situé sur la ligne joignant les clochers de Saulxures-lès-Nancy et de Buissoncourt, à son intersection avec la limite des communes de Saulxures-lès-Nancy et de Lenoncourt, soit à environ 2040 mètres à l’Est-Sud-Est du clocher de Saulxures-lès-Nancy"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[890334.9,1117435.93]},"properties":{"nom":"B1"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[890622.24,1117452.72]},"properties":{"nom":"C1"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[891022.89,1117325.88]},"properties":{"nom":"D1"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[891406.04,1117498.53]},"properties":{"nom":"E1"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[891859.53,1117525.03]},"properties":{"nom":"F1"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[892234.39,1117664.59]},"properties":{"nom":"G1"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[892879.34,1116600.52]},"properties":{"nom":"B","description":"Point situé sur la ligne joignant les clochers de Saulxures-lès-Nancy et de Buissoncourt, à son intersection avec la limite Ouest de la concession de Cercueil-Buissoncourt, soit à environ 2 150 mètres au Nord-Nord-Ouest du clocher de Buissoncourt"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[892947.15,1116133.73]},"properties":{"nom":"C","description":"Borne commune aux concessions d’Art-sur-Meurthe et de Cercueil-Buissoncourt"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[891456.2,1115144.46]},"properties":{"nom":"D","description":"Sommet A de la concession d’Art-sur-Meurthe:"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[888513.03,1115795.21]},"properties":{"nom":"E","description":"Sommet M de la concession d’Art-sur•Meurthe:"}}]},"geojson_origine_geo_systeme_id":"27571","geojson4326_forages":null,"geojson_origine_forages":null,"surface":6.75,"communes":[{"id":"54495","nom":"Saulxures-lès-Nancy"},{"id":"54311","nom":"Lenoncourt"},{"id":"54110","nom":"Cerville"},{"id":"54025","nom":"Art-sur-Meurthe"}],"secteurs_maritimes":[],"sdom_zones":[],"forets":[]}},"etape_statut_id":"acc","is_brouillon":false,"date":"1981-09-13","id":"C6UHWZDSFnLbwuaeksXG1SEj","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-exp01-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"N"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"1981-09-13-dec-8bf8fa4c","description":"Décret du 9 septembre 1981 portant extension de superficie de la concession des mines de sels de sodium de Lenoncourt (Meurthe-et-Moselle) et modifiant les conditions auxquelles est soumise ladite concession","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true}]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"1981-09-09","id":"xHxKuYk5goClAaZr1hxGaCyr","ordre":1,"notes":"Décret du 9 septembre 1981 portant extension de superficie de la concession des mines de sels de sodium de Lenoncourt (Meurthe-et-Moselle) et modifiant les conditions auxquelles est soumise ladite concession","slug":"m-cx-lenoncourt-1968-exp01-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"exp","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":4},{"id":"W9IX7VanFA5iYxYAGulcA0CY","slug":"m-cx-lenoncourt-1968-mut03","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["nacl"],"titulaireIds":["fr-442993283"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2000-10-06","id":"wuYTEAQ5UUAUZxiowQIthgkg","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-mut03-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000000208330"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"ECOI0000456A"}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2000-09-26","id":"f2iSnn7XPrOXDIrbmYFKUiz1","ordre":1,"notes":"Arrêté du 26 septembre 2000 autorisant la mutation de concessions de mines","slug":"m-cx-lenoncourt-1968-mut03-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"mut","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":6},{"id":"md9yLbhZSOqdcOANAAyUPTur","slug":"m-cx-lenoncourt-1968-mut04","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["nacl"],"titulaireIds":["fr-642014526"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2003-01-08","id":"yuMPprDNtN6mZzdmlVTDd25I","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-mut04-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000000228627"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"INDI0200856A"}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2002-12-24","id":"jZRW7aZo5DmTABnQCe35wVrh","ordre":1,"notes":"Arrêté du 24 décembre 2002 autorisant la mutation de concessions de mines","slug":"m-cx-lenoncourt-1968-mut04-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"mut","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":7},{"id":"3W0rdHS1VqDSIQjZ1mLD8b9L","slug":"m-cx-lenoncourt-1968-mut05","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["nacl"],"titulaireIds":["fr-442993283"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2004-02-28","id":"isgwwZGJwv7UDuJvtxAaj3T4","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-mut05-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000000434866"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"INDI0402498A"}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2004-02-13","id":"Full4Vnptm6czWaJ4b6kZR6W","ordre":1,"notes":"Arrêté du 13 février 2004 autorisant la mutation d’une concession de mines de sels de sodium","slug":"m-cx-lenoncourt-1968-mut05-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"mut","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":8},{"id":"fA9NJsMZ78XyG402LUdm2Szi","slug":"m-cx-lenoncourt-1968-pro01","description":"prolongation et extension de périmètre","etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2024-03-01","id":"a0af6a2e56cd046cd72c71cf","ordre":20,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000049219226"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"ECOL2320431D"}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2024-02-29","id":"aa23dc021366330e04383eba","ordre":19,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"2024-02-29-dec-12df6369","description":"","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true},{"id":"2024-02-29-dec-4bb7fd91","description":"","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true}]},{"etape_type_id":"epc","etape_statut_id":"ter","is_brouillon":false,"date":"2021-06-02","id":"3JEmzfDaS6MZdQGthz69jydI","ordre":12,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-epc01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"ama","etape_statut_id":"def","is_brouillon":false,"date":"2021-06-01","id":"ryW6mbg2cC906CimQRgdVhvd","ordre":11,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-ama01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"epu","etape_statut_id":"fai","is_brouillon":false,"date":"2021-04-20","id":"d1PRxUd0F9JHQSziUQ3skOem","ordre":9,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-epu01","sections_with_values":[{"id":"odlep","elements":[{"id":"lien","nom":"Lien public externe","description":"","optionnel":true,"type":"url","value":null}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"mcr","etape_statut_id":"fav","is_brouillon":false,"date":"2021-01-27","id":"pHf3m1Hygp8kz8d7G0j2TKgZ","ordre":4,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-mcr01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"mdp","etape_statut_id":"fai","is_brouillon":false,"date":"2020-08-04","id":"mQnOvtSGpc1T83bSvOOorVOa","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-mdp01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"mfr","fondamentale":{"date_debut":null,"date_fin":null,"duree":300,"substances":["nacl"],"titulaireIds":["fr-442993283"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[6.255869021711159,48.675202067410254],[6.263459497281365,48.6611397799328],[6.274477936823362,48.661530617274785],[6.29531036181682,48.66798716858568],[6.3162302722649795,48.67616624512283],[6.31565519531486,48.68038643555574],[6.307660371971501,48.69025022534333],[6.302480013569365,48.68917854238857],[6.2963188041374485,48.68915103738882],[6.290983811108587,48.68777705995633],[6.285642745098623,48.68911271820202],[6.281739260684181,48.68909422269382],[6.275638319504659,48.68547207905551],[6.255869021711159,48.675202067410254]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[6.255869021711159,48.675202067410254]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.275638319504659,48.68547207905551]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.281739260684181,48.68909422269382]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.285642745098623,48.68911271820202]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.290983811108587,48.68777705995633]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2963188041374485,48.68915103738882]},"properties":{"nom":"F","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.302480013569365,48.68917854238857]},"properties":{"nom":"G","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.307660371971501,48.69025022534333]},"properties":{"nom":"H","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.31565519531486,48.68038643555574]},"properties":{"nom":"I","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3162302722649795,48.67616624512283]},"properties":{"nom":"J","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.29531036181682,48.66798716858568]},"properties":{"nom":"K","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.274477936823362,48.661530617274785]},"properties":{"nom":"L","description":"Nouveau sommet « d’extension » défini par NOVACARB"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.263459497281365,48.6611397799328]},"properties":{"nom":"M","description":"Nouveau sommet « d’extension » défini par NOVACARB"}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[939659,6846613],[941066,6847814],[941498,6848235],[941785,6848249],[942184,6848117],[942570,6848286],[943023,6848308],[943399,6848443],[944033,6847372],[944095,6846905],[942594,6845932],[941091,6845151],[940282,6845074],[939659,6846613]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[939659,6846613]},"properties":{"nom":"A"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[941066,6847814]},"properties":{"nom":"B"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[941498,6848235]},"properties":{"nom":"C"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[941785,6848249]},"properties":{"nom":"D"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[942184,6848117]},"properties":{"nom":"E"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[942570,6848286]},"properties":{"nom":"F"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[943023,6848308]},"properties":{"nom":"G"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[943399,6848443]},"properties":{"nom":"H"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[944033,6847372]},"properties":{"nom":"I"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[944095,6846905]},"properties":{"nom":"J"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[942594,6845932]},"properties":{"nom":"K"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[941091,6845151]},"properties":{"nom":"L","description":"Nouveau sommet « d’extension » défini par NOVACARB"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[940282,6845074]},"properties":{"nom":"M","description":"Nouveau sommet « d’extension » défini par NOVACARB"}}]},"geojson_origine_geo_systeme_id":"2154","geojson4326_forages":null,"geojson_origine_forages":null,"surface":9.05,"communes":[{"id":"54495","nom":"Saulxures-lès-Nancy"},{"id":"54311","nom":"Lenoncourt"},{"id":"54110","nom":"Cerville"},{"id":"54025","nom":"Art-sur-Meurthe"}],"secteurs_maritimes":[],"sdom_zones":[],"forets":[]}},"etape_statut_id":"fai","is_brouillon":false,"date":"2020-07-06","id":"mh70cpBA8jOZWCEDJKupM4Rs","ordre":1,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-mfr01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[]}],"demarche_type_id":"pro","demarche_statut_id":"acc","demarche_date_debut":"2024-03-01","demarche_date_fin":"2049-03-01","ordre":11},{"id":"b7586ad241a658ae1eb42b08","slug":"m-cx-lenoncourt-1968-exp02","description":"","etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2024-03-01","id":"e48a19b86d090feadc67a893","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-exp02-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000049219226"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"ECOL2320431D"}]}],"entreprises_documents":[],"etape_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["nacl"],"titulaireIds":["fr-442993283"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[6.2559,48.6752],[6.2756,48.6855],[6.2817,48.6891],[6.2856,48.6891],[6.291,48.6878],[6.2963,48.6892],[6.3025,48.6892],[6.3076,48.689],[6.3157,48.6804],[6.3162,48.6762],[6.2953,48.668],[6.2794,48.6631],[6.2614,48.6649],[6.2559,48.6752]]]]}},"geojson4326_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2559,48.6752]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2756,48.6855]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2817,48.6891]},"properties":{"nom":"B1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2856,48.6891]},"properties":{"nom":"C1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.291,48.6878]},"properties":{"nom":"D1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2963,48.6892]},"properties":{"nom":"E1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3025,48.6892]},"properties":{"nom":"F1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3076,48.689]},"properties":{"nom":"G1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3157,48.6804]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3162,48.6762]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2953,48.668]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2794,48.6631]},"properties":{"nom":"Da","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2614,48.6649]},"properties":{"nom":"Db","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2559,48.6752]},"properties":{"nom":"E","description":null}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[6.2559,48.6752],[6.2756,48.6855],[6.2817,48.6891],[6.2856,48.6891],[6.291,48.6878],[6.2963,48.6892],[6.3025,48.6892],[6.3076,48.689],[6.3157,48.6804],[6.3162,48.6762],[6.2953,48.668],[6.2794,48.6631],[6.2614,48.6649],[6.2559,48.6752]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2559,48.6752]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2756,48.6855]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2817,48.6891]},"properties":{"nom":"B1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2856,48.6891]},"properties":{"nom":"C1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.291,48.6878]},"properties":{"nom":"D1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2963,48.6892]},"properties":{"nom":"E1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3025,48.6892]},"properties":{"nom":"F1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3076,48.689]},"properties":{"nom":"G1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3157,48.6804]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3162,48.6762]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2953,48.668]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2794,48.6631]},"properties":{"nom":"Da","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2614,48.6649]},"properties":{"nom":"Db","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2559,48.6752]},"properties":{"nom":"E","description":null}}]},"geojson_origine_geo_systeme_id":"4326","geojson4326_forages":null,"geojson_origine_forages":null,"surface":8.65,"communes":[{"id":"54495","nom":"Saulxures-lès-Nancy"},{"id":"54311","nom":"Lenoncourt"},{"id":"54110","nom":"Cerville"},{"id":"54025","nom":"Art-sur-Meurthe"}],"secteurs_maritimes":[],"sdom_zones":[],"forets":[]}},"etape_statut_id":"acc","is_brouillon":false,"date":"2024-02-29","id":"c15f4ceaa62a6298a2f8e117","ordre":1,"notes":null,"slug":"m-cx-lenoncourt-1968-exp02-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"2024-02-29-dec-d9f1e868","description":"","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true},{"id":"2024-02-29-dec-32312304","description":"","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true}]}],"demarche_type_id":"exp","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":12}],"nb_activites_to_do":null})
+    const lenoncourtData = titreGetValidator.parse({"id":"s7RvqvCAgKs4DxkQBYV93cVx","nom":"Lenoncourt","slug":"m-cx-lenoncourt-1968","titre_type_id":"cxm","titre_statut_id":"val","titre_doublon":null,"references":[{"nom":"2013-0275-MI","referenceTypeId":"deb"},{"nom":"54TM0153","referenceTypeId":"rnt"}],"titre_last_modified_date":"2024-03-21","demarches":[{"id":"ozYnUjy40eru81jUnXz5snv2","slug":"m-cx-lenoncourt-1968-oct01","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["nacl"],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"1968-01-24","id":"SG2zAN9QaKBN1hZKqKEgQGpI","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-oct01-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"1968-01-24-dec-89a94bb2","description":"Décret du 13 janvier 1968 instituant la concession de mines de sels de sodium de Lenoncourt (Meurthe-et-Moselle) au profit de la société Les Soudières réunies - La Madeleine-Varangéville","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true}],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"1968-01-13","id":"LM2Zk3PwAjrduc4EqmucOjeB","ordre":1,"notes":"Décret du 13 janvier 1968 instituant la concession de mines de sels de sodium de Lenoncourt (Meurthe-et-Moselle) au profit de la société Les Soudières réunies - La Madeleine-Varangéville","slug":"m-cx-lenoncourt-1968-oct01-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"oct","demarche_statut_id":"acc","demarche_date_debut":"1968-01-24","demarche_date_fin":"2024-03-01","ordre":1},{"id":"wM0cpipWSef9lDAHDurJxxhk","slug":"m-cx-lenoncourt-1968-mut01","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["selg","selh"],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"1970-11-19","id":"XScxzwDKFxmYtDnkJ7X7qZBi","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-mut01-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"1970-11-19-dec-8a77b142","description":"Décret du 16 novembre 1970 autorisant la mutation de propriété de cinq concessions de mines de sel gemme et de sources salées au profit de la société Produits chimiques Pechlney-Saint-Gobaln.","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true}],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":["fr-606320471"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"1970-11-16","id":"ejAqTpzBj82jgF0ShiwMRQmW","ordre":1,"notes":"Décret du 16 novembre 1970 autorisant la mutation de propriété de cinq concessions de mines de sel gemme et de sources salées au profit de la société Produits chimiques Pechlney-Saint-Gobaln.","slug":"m-cx-lenoncourt-1968-mut01-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"mut","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":2},{"id":"1UC2b0ORsm2ezCh6whHzbOKR","slug":"m-cx-lenoncourt-1968-mut02","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["selg","selh"],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"1975-11-27","id":"TjimKkEETzF0yGBG2m085on9","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-mut02-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"1975-11-27-dec-b50a06f5","description":"Décret du 24 novembre 1975 autorisant la mutation de cinq concessions de mines de sel gemme et de sources salées au profit de la Compagnie industrielle et minière","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true}],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":["fr-712025048"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"1975-11-24","id":"aYO0zwBFBOZP7VN11JaJDhzI","ordre":1,"notes":"Décret du 24 novembre 1975 autorisant la mutation de cinq concessions de mines de sel gemme et de sources salées au profit de la Compagnie industrielle et minière","slug":"m-cx-lenoncourt-1968-mut02-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"mut","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":3},{"id":"H5eANAZPKhY9eFQtCyLYjCvp","slug":"m-cx-lenoncourt-1968-exp01","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["nacl"],"titulaireIds":["fr-712025048"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[6.275644095814427,48.6854960696669],[6.255874124806144,48.675237870291575],[6.295319143383101,48.66801114312286],[6.316241924966296,48.676189123934925],[6.315656943097024,48.680413137182065],[6.307671761547864,48.69027442550079],[6.302487495007789,48.68919858322589],[6.296317613859298,48.68917495187758],[6.290997693817669,48.68780534512822],[6.285653764289864,48.68913324659737],[6.281744418990354,48.68911774206666],[6.275644095814427,48.6854960696669]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[6.275644095814427,48.6854960696669]},"properties":{"nom":"A","description":"Point situé sur la ligne joignant les clochers de Saulxures-lès-Nancy et de Buissoncourt, à son intersection avec la limite des communes de Saulxures-lès-Nancy et de Lenoncourt, soit à environ 2040 mètres à l'Est-Sud-Est du clocher de Saulxures-lès-Nancy"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.281744418990354,48.68911774206666]},"properties":{"nom":"B1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.285653764289864,48.68913324659737]},"properties":{"nom":"C1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.290997693817669,48.68780534512822]},"properties":{"nom":"D1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.296317613859298,48.68917495187758]},"properties":{"nom":"E1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.302487495007789,48.68919858322589]},"properties":{"nom":"F1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.307671761547864,48.69027442550079]},"properties":{"nom":"G1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.315656943097024,48.680413137182065]},"properties":{"nom":"B","description":"Point situé sur la ligne joignant les clochers de Saulxures-lès-Nancy et de Buissoncourt, à son intersection avec la limite Ouest de la concession de Cercueil-Buissoncourt, soit à environ 2 150 mètres au Nord-Nord-Ouest du clocher de Buissoncourt"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.316241924966296,48.676189123934925]},"properties":{"nom":"C","description":"Borne commune aux concessions d'Art-sur-Meurthe et de Cercueil-Buissoncourt"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.295319143383101,48.66801114312286]},"properties":{"nom":"D","description":"Sommet A de la concession d'Art-sur-Meurthe:"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.255874124806144,48.675237870291575]},"properties":{"nom":"E","description":"Sommet M de la concession d'Art-sur•Meurthe:"}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[889907.42,1117010.26],[890334.9,1117435.93],[890622.24,1117452.72],[891022.89,1117325.88],[891406.04,1117498.53],[891859.53,1117525.03],[892234.39,1117664.59],[892879.34,1116600.52],[892947.15,1116133.73],[891456.2,1115144.46],[888513.03,1115795.21],[889907.42,1117010.26]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[889907.42,1117010.26]},"properties":{"nom":"A","description":"Point situé sur la ligne joignant les clochers de Saulxures-lès-Nancy et de Buissoncourt, à son intersection avec la limite des communes de Saulxures-lès-Nancy et de Lenoncourt, soit à environ 2040 mètres à l’Est-Sud-Est du clocher de Saulxures-lès-Nancy"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[890334.9,1117435.93]},"properties":{"nom":"B1"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[890622.24,1117452.72]},"properties":{"nom":"C1"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[891022.89,1117325.88]},"properties":{"nom":"D1"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[891406.04,1117498.53]},"properties":{"nom":"E1"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[891859.53,1117525.03]},"properties":{"nom":"F1"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[892234.39,1117664.59]},"properties":{"nom":"G1"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[892879.34,1116600.52]},"properties":{"nom":"B","description":"Point situé sur la ligne joignant les clochers de Saulxures-lès-Nancy et de Buissoncourt, à son intersection avec la limite Ouest de la concession de Cercueil-Buissoncourt, soit à environ 2 150 mètres au Nord-Nord-Ouest du clocher de Buissoncourt"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[892947.15,1116133.73]},"properties":{"nom":"C","description":"Borne commune aux concessions d’Art-sur-Meurthe et de Cercueil-Buissoncourt"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[891456.2,1115144.46]},"properties":{"nom":"D","description":"Sommet A de la concession d’Art-sur-Meurthe:"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[888513.03,1115795.21]},"properties":{"nom":"E","description":"Sommet M de la concession d’Art-sur•Meurthe:"}}]},"geojson_origine_geo_systeme_id":"27571","geojson4326_forages":null,"geojson_origine_forages":null,"surface":6.75,"communes":[{"id":"54495","nom":"Saulxures-lès-Nancy"},{"id":"54311","nom":"Lenoncourt"},{"id":"54110","nom":"Cerville"},{"id":"54025","nom":"Art-sur-Meurthe"}],"secteurs_maritimes":[],"sdom_zones":[],"forets":[]}},"etape_statut_id":"acc","is_brouillon":false,"date":"1981-09-13","id":"C6UHWZDSFnLbwuaeksXG1SEj","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-exp01-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"N"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"1981-09-13-dec-8bf8fa4c","description":"Décret du 9 septembre 1981 portant extension de superficie de la concession des mines de sels de sodium de Lenoncourt (Meurthe-et-Moselle) et modifiant les conditions auxquelles est soumise ladite concession","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true}],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"1981-09-09","id":"xHxKuYk5goClAaZr1hxGaCyr","ordre":1,"notes":"Décret du 9 septembre 1981 portant extension de superficie de la concession des mines de sels de sodium de Lenoncourt (Meurthe-et-Moselle) et modifiant les conditions auxquelles est soumise ladite concession","slug":"m-cx-lenoncourt-1968-exp01-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"exp","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":4},{"id":"W9IX7VanFA5iYxYAGulcA0CY","slug":"m-cx-lenoncourt-1968-mut03","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["nacl"],"titulaireIds":["fr-442993283"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2000-10-06","id":"wuYTEAQ5UUAUZxiowQIthgkg","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-mut03-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000000208330"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"ECOI0000456A"}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2000-09-26","id":"f2iSnn7XPrOXDIrbmYFKUiz1","ordre":1,"notes":"Arrêté du 26 septembre 2000 autorisant la mutation de concessions de mines","slug":"m-cx-lenoncourt-1968-mut03-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"mut","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":6},{"id":"md9yLbhZSOqdcOANAAyUPTur","slug":"m-cx-lenoncourt-1968-mut04","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["nacl"],"titulaireIds":["fr-642014526"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2003-01-08","id":"yuMPprDNtN6mZzdmlVTDd25I","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-mut04-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000000228627"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"INDI0200856A"}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2002-12-24","id":"jZRW7aZo5DmTABnQCe35wVrh","ordre":1,"notes":"Arrêté du 24 décembre 2002 autorisant la mutation de concessions de mines","slug":"m-cx-lenoncourt-1968-mut04-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"mut","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":7},{"id":"3W0rdHS1VqDSIQjZ1mLD8b9L","slug":"m-cx-lenoncourt-1968-mut05","description":null,"etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["nacl"],"titulaireIds":["fr-442993283"],"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2004-02-28","id":"isgwwZGJwv7UDuJvtxAaj3T4","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-mut05-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000000434866"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"INDI0402498A"}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":[],"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2004-02-13","id":"Full4Vnptm6czWaJ4b6kZR6W","ordre":1,"notes":"Arrêté du 13 février 2004 autorisant la mutation d’une concession de mines de sels de sodium","slug":"m-cx-lenoncourt-1968-mut05-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"mut","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":8},{"id":"fA9NJsMZ78XyG402LUdm2Szi","slug":"m-cx-lenoncourt-1968-pro01","description":"prolongation et extension de périmètre","etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2024-03-01","id":"a0af6a2e56cd046cd72c71cf","ordre":20,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000049219226"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"ECOL2320431D"}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2024-02-29","id":"aa23dc021366330e04383eba","ordre":19,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"2024-02-29-dec-12df6369","description":"","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true},{"id":"2024-02-29-dec-4bb7fd91","description":"","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true}],"avis_documents":[]},{"etape_type_id":"epc","etape_statut_id":"ter","is_brouillon":false,"date":"2021-06-02","id":"3JEmzfDaS6MZdQGthz69jydI","ordre":12,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-epc01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"ama","etape_statut_id":"def","is_brouillon":false,"date":"2021-06-01","id":"ryW6mbg2cC906CimQRgdVhvd","ordre":11,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-ama01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"epu","etape_statut_id":"fai","is_brouillon":false,"date":"2021-04-20","id":"d1PRxUd0F9JHQSziUQ3skOem","ordre":9,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-epu01","sections_with_values":[{"id":"odlep","elements":[{"id":"lien","nom":"Lien public externe","description":"","optionnel":true,"type":"url","value":null}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"mcr","etape_statut_id":"fav","is_brouillon":false,"date":"2021-01-27","id":"pHf3m1Hygp8kz8d7G0j2TKgZ","ordre":4,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-mcr01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"mdp","etape_statut_id":"fai","is_brouillon":false,"date":"2020-08-04","id":"mQnOvtSGpc1T83bSvOOorVOa","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-mdp01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"mfr","fondamentale":{"date_debut":null,"date_fin":null,"duree":300,"substances":["nacl"],"titulaireIds":["fr-442993283"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[6.255869021711159,48.675202067410254],[6.263459497281365,48.6611397799328],[6.274477936823362,48.661530617274785],[6.29531036181682,48.66798716858568],[6.3162302722649795,48.67616624512283],[6.31565519531486,48.68038643555574],[6.307660371971501,48.69025022534333],[6.302480013569365,48.68917854238857],[6.2963188041374485,48.68915103738882],[6.290983811108587,48.68777705995633],[6.285642745098623,48.68911271820202],[6.281739260684181,48.68909422269382],[6.275638319504659,48.68547207905551],[6.255869021711159,48.675202067410254]]]]}},"geojson4326_points":{"type":"FeatureCollection","properties":{},"features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[6.255869021711159,48.675202067410254]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.275638319504659,48.68547207905551]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.281739260684181,48.68909422269382]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.285642745098623,48.68911271820202]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.290983811108587,48.68777705995633]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2963188041374485,48.68915103738882]},"properties":{"nom":"F","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.302480013569365,48.68917854238857]},"properties":{"nom":"G","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.307660371971501,48.69025022534333]},"properties":{"nom":"H","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.31565519531486,48.68038643555574]},"properties":{"nom":"I","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3162302722649795,48.67616624512283]},"properties":{"nom":"J","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.29531036181682,48.66798716858568]},"properties":{"nom":"K","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.274477936823362,48.661530617274785]},"properties":{"nom":"L","description":"Nouveau sommet « d’extension » défini par NOVACARB"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.263459497281365,48.6611397799328]},"properties":{"nom":"M","description":"Nouveau sommet « d’extension » défini par NOVACARB"}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[939659,6846613],[941066,6847814],[941498,6848235],[941785,6848249],[942184,6848117],[942570,6848286],[943023,6848308],[943399,6848443],[944033,6847372],[944095,6846905],[942594,6845932],[941091,6845151],[940282,6845074],[939659,6846613]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[939659,6846613]},"properties":{"nom":"A"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[941066,6847814]},"properties":{"nom":"B"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[941498,6848235]},"properties":{"nom":"C"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[941785,6848249]},"properties":{"nom":"D"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[942184,6848117]},"properties":{"nom":"E"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[942570,6848286]},"properties":{"nom":"F"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[943023,6848308]},"properties":{"nom":"G"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[943399,6848443]},"properties":{"nom":"H"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[944033,6847372]},"properties":{"nom":"I"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[944095,6846905]},"properties":{"nom":"J"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[942594,6845932]},"properties":{"nom":"K"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[941091,6845151]},"properties":{"nom":"L","description":"Nouveau sommet « d’extension » défini par NOVACARB"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[940282,6845074]},"properties":{"nom":"M","description":"Nouveau sommet « d’extension » défini par NOVACARB"}}]},"geojson_origine_geo_systeme_id":"2154","geojson4326_forages":null,"geojson_origine_forages":null,"surface":9.05,"communes":[{"id":"54495","nom":"Saulxures-lès-Nancy"},{"id":"54311","nom":"Lenoncourt"},{"id":"54110","nom":"Cerville"},{"id":"54025","nom":"Art-sur-Meurthe"}],"secteurs_maritimes":[],"sdom_zones":[],"forets":[]}},"etape_statut_id":"fai","is_brouillon":false,"date":"2020-07-06","id":"mh70cpBA8jOZWCEDJKupM4Rs","ordre":1,"notes":null,"slug":"m-cx-lenoncourt-1968-pro01-mfr01","sections_with_values":[],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]}],"demarche_type_id":"pro","demarche_statut_id":"acc","demarche_date_debut":"2024-03-01","demarche_date_fin":"2049-03-01","ordre":11},{"id":"b7586ad241a658ae1eb42b08","slug":"m-cx-lenoncourt-1968-exp02","description":"","etapes":[{"etape_type_id":"dpu","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":null,"titulaireIds":null,"amodiataireIds":null,"perimetre":null},"etape_statut_id":"acc","is_brouillon":false,"date":"2024-03-01","id":"e48a19b86d090feadc67a893","ordre":2,"notes":null,"slug":"m-cx-lenoncourt-1968-exp02-dpu01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":false,"type":"text","value":"JORFTEXT000049219226"},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":"ECOL2320431D"}]}],"entreprises_documents":[],"etape_documents":[],"avis_documents":[]},{"etape_type_id":"dex","fondamentale":{"date_debut":null,"date_fin":null,"duree":null,"substances":["nacl"],"titulaireIds":["fr-442993283"],"amodiataireIds":null,"perimetre":{"geojson4326_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[6.2559,48.6752],[6.2756,48.6855],[6.2817,48.6891],[6.2856,48.6891],[6.291,48.6878],[6.2963,48.6892],[6.3025,48.6892],[6.3076,48.689],[6.3157,48.6804],[6.3162,48.6762],[6.2953,48.668],[6.2794,48.6631],[6.2614,48.6649],[6.2559,48.6752]]]]}},"geojson4326_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2559,48.6752]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2756,48.6855]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2817,48.6891]},"properties":{"nom":"B1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2856,48.6891]},"properties":{"nom":"C1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.291,48.6878]},"properties":{"nom":"D1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2963,48.6892]},"properties":{"nom":"E1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3025,48.6892]},"properties":{"nom":"F1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3076,48.689]},"properties":{"nom":"G1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3157,48.6804]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3162,48.6762]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2953,48.668]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2794,48.6631]},"properties":{"nom":"Da","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2614,48.6649]},"properties":{"nom":"Db","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2559,48.6752]},"properties":{"nom":"E","description":null}}]},"geojson_origine_perimetre":{"type":"Feature","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[6.2559,48.6752],[6.2756,48.6855],[6.2817,48.6891],[6.2856,48.6891],[6.291,48.6878],[6.2963,48.6892],[6.3025,48.6892],[6.3076,48.689],[6.3157,48.6804],[6.3162,48.6762],[6.2953,48.668],[6.2794,48.6631],[6.2614,48.6649],[6.2559,48.6752]]]]}},"geojson_origine_points":{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2559,48.6752]},"properties":{"nom":"E","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2756,48.6855]},"properties":{"nom":"A","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2817,48.6891]},"properties":{"nom":"B1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2856,48.6891]},"properties":{"nom":"C1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.291,48.6878]},"properties":{"nom":"D1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2963,48.6892]},"properties":{"nom":"E1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3025,48.6892]},"properties":{"nom":"F1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3076,48.689]},"properties":{"nom":"G1","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3157,48.6804]},"properties":{"nom":"B","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.3162,48.6762]},"properties":{"nom":"C","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2953,48.668]},"properties":{"nom":"D","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2794,48.6631]},"properties":{"nom":"Da","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2614,48.6649]},"properties":{"nom":"Db","description":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[6.2559,48.6752]},"properties":{"nom":"E","description":null}}]},"geojson_origine_geo_systeme_id":"4326","geojson4326_forages":null,"geojson_origine_forages":null,"surface":8.65,"communes":[{"id":"54495","nom":"Saulxures-lès-Nancy"},{"id":"54311","nom":"Lenoncourt"},{"id":"54110","nom":"Cerville"},{"id":"54025","nom":"Art-sur-Meurthe"}],"secteurs_maritimes":[],"sdom_zones":[],"forets":[]}},"etape_statut_id":"acc","is_brouillon":false,"date":"2024-02-29","id":"c15f4ceaa62a6298a2f8e117","ordre":1,"notes":null,"slug":"m-cx-lenoncourt-1968-exp02-dex01","sections_with_values":[{"id":"publication","nom":"Références Légifrance","elements":[{"id":"jorf","nom":"Numéro JORF","description":"","optionnel":true,"type":"text","value":null},{"id":"nor","nom":"Numéro NOR","description":"","optionnel":true,"type":"text","value":null}]}],"entreprises_documents":[],"etape_documents":[{"id":"2024-02-29-dec-d9f1e868","description":"","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true},{"id":"2024-02-29-dec-32312304","description":"","etape_document_type_id":"dec","public_lecture":true,"entreprises_lecture":true}],"avis_documents":[]}],"demarche_type_id":"exp","demarche_statut_id":"acc","demarche_date_debut":null,"demarche_date_fin":null,"ordre":12}],"nb_activites_to_do":null})
 
     return Promise.resolve(lenoncourtData)
   },
diff --git a/packages/ui/src/components/titre.stories_snapshots_AbattisKoticaOctroi.html b/packages/ui/src/components/titre.stories_snapshots_AbattisKoticaOctroi.html
index 035a6e559..ab1861c40 100644
--- a/packages/ui/src/components/titre.stories_snapshots_AbattisKoticaOctroi.html
+++ b/packages/ui/src/components/titre.stories_snapshots_AbattisKoticaOctroi.html
@@ -376,6 +376,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -399,6 +400,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -422,6 +424,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
         </div>
diff --git a/packages/ui/src/components/titre.stories_snapshots_BasseManaMod.html b/packages/ui/src/components/titre.stories_snapshots_BasseManaMod.html
index 192dec5cc..b648b061a 100644
--- a/packages/ui/src/components/titre.stories_snapshots_BasseManaMod.html
+++ b/packages/ui/src/components/titre.stories_snapshots_BasseManaMod.html
@@ -253,6 +253,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -312,6 +313,7 @@
               </div>
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -348,6 +350,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -371,6 +374,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -394,6 +398,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -417,6 +422,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -563,6 +569,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
         </div>
diff --git a/packages/ui/src/components/titre.stories_snapshots_BonEspoirOctroi.html b/packages/ui/src/components/titre.stories_snapshots_BonEspoirOctroi.html
index a2a0cb0f1..1a78199c2 100644
--- a/packages/ui/src/components/titre.stories_snapshots_BonEspoirOctroi.html
+++ b/packages/ui/src/components/titre.stories_snapshots_BonEspoirOctroi.html
@@ -139,7 +139,7 @@
             </div>
             <div style="grid-column: unset;">
               <div class="fr-text--sm fr-mb-0">Communes</div>
-              <div class="fr-text--md fr-mb-0" style="font-weight: 500;">Mana, Saint-Laurent-du-Maroni</div>
+              <div class="fr-text--md fr-mb-0" style="font-weight: 500;">Saint-Laurent-du-Maroni, Mana</div>
             </div>
           </div>
         </div>
@@ -497,6 +497,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -533,6 +534,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
         </div>
diff --git a/packages/ui/src/components/titre.stories_snapshots_BonEspoirProlongation2.html b/packages/ui/src/components/titre.stories_snapshots_BonEspoirProlongation2.html
index 3cb94276b..26231f737 100644
--- a/packages/ui/src/components/titre.stories_snapshots_BonEspoirProlongation2.html
+++ b/packages/ui/src/components/titre.stories_snapshots_BonEspoirProlongation2.html
@@ -146,7 +146,7 @@
             </div>
             <div style="grid-column: unset;">
               <div class="fr-text--sm fr-mb-0">Communes</div>
-              <div class="fr-text--md fr-mb-0" style="font-weight: 500;">Mana, Saint-Laurent-du-Maroni</div>
+              <div class="fr-text--md fr-mb-0" style="font-weight: 500;">Saint-Laurent-du-Maroni, Mana</div>
             </div>
           </div>
         </div>
@@ -349,6 +349,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -418,6 +419,7 @@
               </div>
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -441,6 +443,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -490,6 +493,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
         </div>
diff --git a/packages/ui/src/components/titre.stories_snapshots_BonEspoirTravaux.html b/packages/ui/src/components/titre.stories_snapshots_BonEspoirTravaux.html
index eddcc4693..ccca2e27b 100644
--- a/packages/ui/src/components/titre.stories_snapshots_BonEspoirTravaux.html
+++ b/packages/ui/src/components/titre.stories_snapshots_BonEspoirTravaux.html
@@ -161,6 +161,7 @@
               </div>
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -204,6 +205,7 @@
               </div>
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -227,6 +229,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -250,6 +253,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
         </div>
diff --git a/packages/ui/src/components/titre.stories_snapshots_ChantepieMutation.html b/packages/ui/src/components/titre.stories_snapshots_ChantepieMutation.html
index 6b86a06ca..24ce10dde 100644
--- a/packages/ui/src/components/titre.stories_snapshots_ChantepieMutation.html
+++ b/packages/ui/src/components/titre.stories_snapshots_ChantepieMutation.html
@@ -251,6 +251,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -293,6 +294,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
         </div>
diff --git a/packages/ui/src/components/titre.stories_snapshots_ChantepieOctroi.html b/packages/ui/src/components/titre.stories_snapshots_ChantepieOctroi.html
index 694ae0611..e946586d9 100644
--- a/packages/ui/src/components/titre.stories_snapshots_ChantepieOctroi.html
+++ b/packages/ui/src/components/titre.stories_snapshots_ChantepieOctroi.html
@@ -342,6 +342,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -475,6 +476,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
         </div>
diff --git a/packages/ui/src/components/titre.stories_snapshots_ChantepieOctroiAsEntreprise.html b/packages/ui/src/components/titre.stories_snapshots_ChantepieOctroiAsEntreprise.html
index 9aa4b8cb1..af677a672 100644
--- a/packages/ui/src/components/titre.stories_snapshots_ChantepieOctroiAsEntreprise.html
+++ b/packages/ui/src/components/titre.stories_snapshots_ChantepieOctroiAsEntreprise.html
@@ -341,6 +341,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -472,6 +473,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
         </div>
diff --git a/packages/ui/src/components/titre.stories_snapshots_CriqueAdolpheOctroi.html b/packages/ui/src/components/titre.stories_snapshots_CriqueAdolpheOctroi.html
index 950b6f813..d5328030f 100644
--- a/packages/ui/src/components/titre.stories_snapshots_CriqueAdolpheOctroi.html
+++ b/packages/ui/src/components/titre.stories_snapshots_CriqueAdolpheOctroi.html
@@ -269,6 +269,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -294,6 +295,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -319,6 +321,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -356,6 +359,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -381,6 +385,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -406,6 +411,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -594,6 +600,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -631,6 +638,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
         </div>
diff --git a/packages/ui/src/components/titre.stories_snapshots_Full.html b/packages/ui/src/components/titre.stories_snapshots_Full.html
index 9241212dc..8a4869e38 100644
--- a/packages/ui/src/components/titre.stories_snapshots_Full.html
+++ b/packages/ui/src/components/titre.stories_snapshots_Full.html
@@ -319,6 +319,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
         </div>
diff --git a/packages/ui/src/components/titre.stories_snapshots_Lenoncourt.html b/packages/ui/src/components/titre.stories_snapshots_Lenoncourt.html
index 976aaa00e..2bd9f6a81 100644
--- a/packages/ui/src/components/titre.stories_snapshots_Lenoncourt.html
+++ b/packages/ui/src/components/titre.stories_snapshots_Lenoncourt.html
@@ -344,6 +344,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
           <div class="fr-pb-2w">
@@ -586,6 +587,7 @@
               </div>
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
         </div>
diff --git a/packages/ui/src/components/titre.stories_snapshots_TitreAvecUneSeuleDemarcheEnConstruction.html b/packages/ui/src/components/titre.stories_snapshots_TitreAvecUneSeuleDemarcheEnConstruction.html
index 78d8547f0..ebb17c257 100644
--- a/packages/ui/src/components/titre.stories_snapshots_TitreAvecUneSeuleDemarcheEnConstruction.html
+++ b/packages/ui/src/components/titre.stories_snapshots_TitreAvecUneSeuleDemarcheEnConstruction.html
@@ -295,6 +295,7 @@
               <!---->
               <!---->
               <!---->
+              <!---->
             </div>
           </div>
         </div>
diff --git a/packages/ui/src/components/titre/phase.ts b/packages/ui/src/components/titre/phase.ts
index 318df6c32..c2506e779 100644
--- a/packages/ui/src/components/titre/phase.ts
+++ b/packages/ui/src/components/titre/phase.ts
@@ -7,6 +7,7 @@ import { isEtapeDecision } from 'camino-common/src/static/etapesTypes'
 import { isNotNullNorUndefined, isNullOrUndefined, isNullOrUndefinedOrEmpty, OmitDistributive } from 'camino-common/src/typescript-tools'
 import { DemarcheSlug } from 'camino-common/src/demarche'
 import { isTravaux } from 'camino-common/src/static/demarchesTypes'
+import { ETAPE_IS_BROUILLON } from 'camino-common/src/etape'
 
 type TitreTimelineEvents = TitreGetDemarche & { first_etape_date: CaminoDate | null }
 type PhaseWithDateDebut = OmitDistributive<TitreGetDemarche, 'demarche_date_debut'> & { demarche_date_debut: CaminoDate; events: TitreTimelineEvents[] }
@@ -38,7 +39,8 @@ export const phaseWithAlterations = (demarches: TitreGetDemarche[], currentDate:
         if (!isPhase(demarche) && [DemarchesStatutsIds.Accepte, DemarchesStatutsIds.Termine].includes(demarche.demarche_statut_id)) {
           let demarcheDate = demarche.demarche_date_debut
           if (isNullOrUndefined(demarcheDate)) {
-            demarcheDate = [...demarche.etapes].sort((a, b) => b.ordre - a.ordre).find(etape => isEtapeDecision(etape.etape_type_id) && isEtapeStatusOk(etape.etape_statut_id))?.date ?? null
+            demarcheDate =
+              [...demarche.etapes].sort((a, b) => b.ordre - a.ordre).find(etape => isEtapeDecision(etape.etape_type_id) === ETAPE_IS_BROUILLON && isEtapeStatusOk(etape.etape_statut_id))?.date ?? null
           }
 
           if (isNotNullNorUndefined(demarcheDate) && demarcheDate >= phase.demarche_date_debut && (isNullOrUndefined(phase.demarche_date_fin) || demarcheDate < phase.demarche_date_fin)) {
diff --git a/packages/ui/src/components/titre/titre-demarche.tsx b/packages/ui/src/components/titre/titre-demarche.tsx
index 2cb1a1158..27ec9f4d2 100644
--- a/packages/ui/src/components/titre/titre-demarche.tsx
+++ b/packages/ui/src/components/titre/titre-demarche.tsx
@@ -136,6 +136,14 @@ export const TitreDemarche = defineComponent<Props>(props => {
     )
   })
 
+  const orderedEtapes = computed(() => {
+    return isNotNullNorUndefined(demarche.value)
+      ? [...demarche.value.etapes].sort((a, b) => {
+          return b.ordre - a.ordre
+        })
+      : []
+  })
+
   return () => (
     <>
       {demarche.value !== null ? (
@@ -212,32 +220,31 @@ export const TitreDemarche = defineComponent<Props>(props => {
               ) : null}
             </div>
             <div class="fr-mt-3w">
-              {[...demarche.value.etapes]
-                .sort((a, b) => b.ordre - a.ordre)
-                .map(etape => (
-                  <>
-                    {demarche.value !== null ? (
-                      <div class="fr-pb-2w">
-                        <DemarcheEtape
-                          etape={etape}
-                          router={props.router}
-                          user={props.user}
-                          entreprises={props.entreprises}
-                          titre={{ typeId: props.titre.titre_type_id, titreStatutId: props.titre.titre_statut_id, slug: props.titre.slug, nom: props.titre.nom }}
-                          demarche={{
-                            administrationsLocales: getAdministrationsLocales(perimetre.value?.communes.map(({ id }) => id) ?? [], perimetre.value?.secteurs_maritimes ?? []),
-                            demarche_type_id: demarche.value.demarche_type_id,
-                            titulaireIds: titulaires.value ?? [],
-                            sdom_zones: perimetre.value?.sdom_zones ?? [],
-                            etapes: demarche.value.etapes,
-                          }}
-                          apiClient={props.apiClient}
-                          initTab={props.initTab}
-                        />
-                      </div>
-                    ) : null}
-                  </>
-                ))}
+              {orderedEtapes.value.map(etape => (
+                <>
+                  {demarche.value !== null ? (
+                    <div class="fr-pb-2w">
+                      <DemarcheEtape
+                        etape={etape}
+                        router={props.router}
+                        user={props.user}
+                        entreprises={props.entreprises}
+                        titre={{ typeId: props.titre.titre_type_id, titreStatutId: props.titre.titre_statut_id, slug: props.titre.slug, nom: props.titre.nom }}
+                        demarche={{
+                          administrationsLocales: getAdministrationsLocales(perimetre.value?.communes.map(({ id }) => id) ?? [], perimetre.value?.secteurs_maritimes ?? []),
+                          demarche_type_id: demarche.value.demarche_type_id,
+                          titulaireIds: titulaires.value ?? [],
+                          sdom_zones: perimetre.value?.sdom_zones ?? [],
+                          communes: perimetre.value?.communes?.map(({ id }) => id) ?? [],
+                          etapes: demarche.value.etapes,
+                        }}
+                        apiClient={props.apiClient}
+                        initTab={props.initTab}
+                      />
+                    </div>
+                  ) : null}
+                </>
+              ))}
             </div>
           </div>
           {addDemarchePopup.value ? (
diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json
index 954b29a6e..ba6a640db 100644
--- a/packages/ui/tsconfig.json
+++ b/packages/ui/tsconfig.json
@@ -11,7 +11,7 @@
     "skipLibCheck": true,
     "jsx": "preserve",
     "jsxImportSource": "vue",
-    "noErrorTruncation": true,
+    "noErrorTruncation": false,
     "lib": [
       "esnext",
       "dom",
-- 
GitLab