From 65f42213d94c66ca16505783c8f4051f068cd2ee Mon Sep 17 00:00:00 2001
From: OURY Sarah <sarah.oury@soprasteria.com>
Date: Fri, 2 Aug 2024 10:07:43 +0000
Subject: [PATCH] preparation release 2.1.0

---
 CHANGELOG.md                                  |    8 +
 docs/MoteurDeCalculG4IT_V1.1.adoc             |    7 +
 e2e/5_assert.sh                               |    1 -
 .../EquipementPhysique_hors_serveur.csv       |    2 +-
 services/.workspace/.idea/compiler.xml        |   55 -
 services/api-event-calculs/pom.xml            |    4 +-
 .../model/CalculEquipementPhysique.java       |    7 +-
 .../calculs/domain/model/CalculSizes.java     |    1 -
 .../client/ReferentielClient.java             |   49 -
 .../infrastructure/config/CacheConfig.java    |   11 +-
 .../config/DomainConfiguration.java           |    6 -
 .../rest/calculs/CalculsReseauController.java |   40 -
 .../ListenEquipementPhysique.java             |    1 -
 .../infrastructure/mapper/DomainMapper.java   |   14 -
 .../mapper/ReferentielMapper.java             |   16 -
 .../repository/DonneesEntreeRepository.java   |   52 +
 .../repository/IndicateurRepository.java      |   32 +-
 .../CalculEquipementPhysiqueService.java      |    5 +-
 .../service/calcul/CalculReseauService.java   |   58 -
 .../IntegrationCalculEquipementsService.java  |    6 +-
 ...richissementEquipementPhysiqueService.java |   81 +-
 .../EnrichissementOperationNonITService.java  |   38 +-
 .../src/main/resources/application.yaml       |    1 +
 .../src/main/resources/schema.sql             |   10 +-
 .../ApiEventCalculsApplicationTests.java      |   12 +-
 .../calcul/CalculReseauServiceTest.java       |   42 -
 ...issementEquipementPhysiqueServiceTest.java |  114 +-
 ...richissementOperationNonITServiceTest.java |   71 +
 .../resources/input/equipementPhysique.json   |   89 +-
 services/api-event-donneesentrees/pom.xml     |    4 +-
 services/api-expositiondonneesentrees/pom.xml |    4 +-
 .../domain/model/DemandeCalcul.java           |    4 +
 .../ports/input/ImportDonneesEntreePort.java  |    2 +-
 .../impl/ImportDonneesEntreePortImpl.java     |    7 +-
 .../ports/output/ReferentielServicePort.java  |    4 -
 .../adapters/ReferentielRestClient.java       |   35 +-
 .../controller/CalculController.java          |   18 +-
 .../jpa/entity/DonneesEntreesEntity.java      |   12 +
 .../repository/DonneesEntreesRepository.java  |   18 +-
 .../service/DonneesEntreesService.java        |   67 +
 .../service/ErrorManagementService.java       |    2 +-
 .../utils/Constants.java                      |    1 +
 .../src/main/resources/schema.sql             |   28 +-
 .../src/main/resources/static/openapi.yaml    |   13 +
 .../service/DonneesEntreesServiceTest.java    |  136 +
 services/api-referentiel/pom.xml              |    4 +-
 .../FusionFacteurCaracterisationService.java  |   58 -
 .../init/MigrationToRefTypeItem.java          |   35 -
 .../jpa/entity/ImpactEquipementEntity.java    |   35 -
 .../jpa/entity/ImpactReseauEntity.java        |   34 -
 .../jpa/entity/MixElectriqueEntity.java       |   30 -
 .../jpa/entity/TypeEquipementEntity.java      |   47 -
 .../entity/id/ImpactEquipementIdEntity.java   |   38 -
 .../jpa/entity/id/ImpactReseauIdEntity.java   |   37 -
 .../jpa/entity/id/MixElectriqueIdEntity.java  |   38 -
 .../ImpactEquipementRepository.java           |   13 -
 .../repository/ImpactReseauRepository.java    |   13 -
 .../repository/MixElectriqueRepository.java   |   13 -
 .../repository/TypeEquipementRepository.java  |   11 -
 .../mapper/ImpactEquipementMapper.java        |   13 -
 .../mapper/ImpactReseauMapper.java            |   13 -
 .../mapper/MixElectriqueMapper.java           |   13 -
 .../mapper/TypeEquipementMapper.java          |   10 -
 .../src/main/resources/schema.sql             |   50 -
 .../referentiel/factory/TestDataFactory.java  |   50 +-
 .../ImpactEquipementCsvExportServiceTest.java |   18 +-
 ...pactMixElectriqueCsvExportServiceTest.java |   29 +-
 .../ImpactReseauCsvExportServiceTest.java     |   14 +-
 .../TypeEquipementCsvExportServiceTest.java   |   19 +-
 services/calculs/pom.xml                      |    4 +-
 ...DemandeCalculImpactEquipementPhysique.java |   43 +-
 .../DemandeCalculImpactOperationNonIT.java    |    3 +-
 .../demande/DemandeCalculImpactReseau.java    |   30 -
 .../data/entree/EquipementPhysique.java       |    8 +-
 ...eferentielCorrespondanceRefEquipement.java |    6 +-
 .../ReferentielImpactEquipement.java          |   16 -
 .../referentiel/ReferentielImpactReseau.java  |   19 -
 .../referentiel/ReferentielMixElectrique.java |   14 -
 .../ReferentielTypeEquipement.java            |   24 -
 .../TraceCalculImpactEquipementPhysique.java  |    4 +-
 .../service/CalculImpactReseauService.java    |   12 -
 ...ulImpactEquipementPhysiqueServiceImpl.java |   55 +-
 .../impl/CalculImpactReseauServiceImpl.java   |  133 -
 ...reeDeVieEquipementPhysiqueServiceImpl.java |    8 +-
 ...ceCalculImpactEquipementPhysiqueUtils.java |    4 +-
 .../traceur/TraceCalculImpactReseauUtils.java |   44 -
 ...ulImpactEquipementPhysiqueServiceTest.java | 2768 ++++++-----------
 .../CalculImpactReseauServiceTest.java        |  215 --
 ...reeDeVieEquipementPhysiqueServiceTest.java |   34 +-
 .../steps/DataTableTypeDefinitions.java       |    6 +-
 services/common/pom.xml                       |    4 +-
 services/core/pom.xml                         |    2 +-
 92 files changed, 1754 insertions(+), 3525 deletions(-)
 delete mode 100644 services/.workspace/.idea/compiler.xml
 delete mode 100644 services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/rest/calculs/CalculsReseauController.java
 delete mode 100644 services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/CalculReseauService.java
 delete mode 100644 services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/CalculReseauServiceTest.java
 create mode 100644 services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DonneesEntreesService.java
 create mode 100644 services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DonneesEntreesServiceTest.java
 delete mode 100644 services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/init/FusionFacteurCaracterisationService.java
 delete mode 100644 services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/init/MigrationToRefTypeItem.java
 delete mode 100644 services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/ImpactEquipementEntity.java
 delete mode 100644 services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/ImpactReseauEntity.java
 delete mode 100644 services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/MixElectriqueEntity.java
 delete mode 100644 services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/TypeEquipementEntity.java
 delete mode 100644 services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/id/ImpactEquipementIdEntity.java
 delete mode 100644 services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/id/ImpactReseauIdEntity.java
 delete mode 100644 services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/id/MixElectriqueIdEntity.java
 delete mode 100644 services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/ImpactEquipementRepository.java
 delete mode 100644 services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/ImpactReseauRepository.java
 delete mode 100644 services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/MixElectriqueRepository.java
 delete mode 100644 services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/TypeEquipementRepository.java
 delete mode 100644 services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/demande/DemandeCalculImpactReseau.java
 delete mode 100644 services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielImpactEquipement.java
 delete mode 100644 services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielImpactReseau.java
 delete mode 100644 services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielMixElectrique.java
 delete mode 100644 services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielTypeEquipement.java
 delete mode 100644 services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/CalculImpactReseauService.java
 delete mode 100644 services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/CalculImpactReseauServiceImpl.java
 delete mode 100644 services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/traceur/TraceCalculImpactReseauUtils.java
 delete mode 100644 services/calculs/src/test/java/org/mte/numecoeval/calculs/domain/service/CalculImpactReseauServiceTest.java

diff --git a/CHANGELOG.md b/CHANGELOG.md
index ecdd696b..979cd8ae 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,14 @@
 
 Tous les changements de ce projet seront documentés dans ce document.
 
+## [Non livré]
+
+- Colonnes goTelecharge et nbJourUtiliseAn plus obligatoires dans les fichiers d'inventaire des équipement physiques
+- Correction bug dans la table ind_indicateur_impact_operation_non_it, ajout de l'attribut date_lot_discrimminator
+- Nettoyage du code : Enlever tous les appels aux anciennes API (impactReseau, impactEquipement, mixelec et typeEquipement), les API restent fonctionnelles mais ne sont plus appelées par les autres composants
+- Nettoyage : Supression des tables, Entities et Repositories plus utilisés (pour MixElectrique, ImpactEquipement, ImpactReseau & TypeEquipement) 
+- Lancer les calculs sur uniquement quelques critères et/ou étapes -> [Issue6](https://gitlab-forge.din.developpement-durable.gouv.fr/pub/numeco/m4g/numecoeval/-/issues/6)
+
 ## [2.0.1] - 2024-07-10
 
 - Correction bug lors du lancement d'un calcul pour un équipement physique dont le modèle n'est pas renseigné -> [Issue8](https://gitlab-forge.din.developpement-durable.gouv.fr/pub/numeco/m4g/numecoeval/-/issues/8)
diff --git a/docs/MoteurDeCalculG4IT_V1.1.adoc b/docs/MoteurDeCalculG4IT_V1.1.adoc
index 2871cda6..fe2a19af 100644
--- a/docs/MoteurDeCalculG4IT_V1.1.adoc
+++ b/docs/MoteurDeCalculG4IT_V1.1.adoc
@@ -246,6 +246,13 @@ pour obtenir l'objet ref_Hypothese correspondant
 == Moteur de calcul
 
 Le déclenchement des règles présentes dans le Bloc Calcul se réalise à la soumission des calculs sur un lot donné via le endpoint POST /entrees/calculs/soumission.
+
+Le body de la requête est composé :
+
+* du nomLot : qui permet de récupérer toutes les données d'entrées liées à cette demande de calcul
+* d'une liste d'étapes facultative : permet de lancer le calcul uniquement sur un sous-ensemble d'étapes présentes dans les références. Si la liste n'est pas renseignée, alors on ne filtre pas (on lance le calcul sur toutes les étapes présentes dans la table ref_etapeacv)
+* d'une liste de critères facultative : permet de lancer le calcul uniquement sur un sous-ensemble de critères présents dans les références. Si la liste n'est pas renseignée, alors on ne filtre pas (on lance le calcul sur tous les critères présents dans la table ref_critere)
+
 Il existe 2 paramètres associés à cette requête :
 
 * mode : le mode de traitement, SYNC ou ASYNC (ASYNC est la valeur par défaut)
diff --git a/e2e/5_assert.sh b/e2e/5_assert.sh
index 03c217fb..93b6a5e0 100644
--- a/e2e/5_assert.sh
+++ b/e2e/5_assert.sh
@@ -18,7 +18,6 @@ mkdir actual
 export_table equipementPhysique conso_elec_moyenne,critere,etapeacv,impact_unitaire,nom_entite,nom_entite_discriminator,nom_equipement,nom_source_donnee,nom_source_donnee_discriminator,quantite,source,statut_equipement_physique,statut_indicateur,trace,type_equipement,unite,version_calcul,qualite
 export_table equipementVirtuel cluster,conso_elec_moyenne,critere,etapeacv,impact_unitaire,nom_entite,nom_entite_discriminator,nom_equipement,nom_equipement_virtuel,nom_source_donnee,nom_source_donnee_discriminator,source,statut_indicateur,trace,unite,version_calcul,qualite
 export_table application conso_elec_moyenne,critere,domaine,etapeacv,impact_unitaire,nom_application,nom_entite,nom_entite_discriminator,nom_equipement_physique,nom_equipement_virtuel,nom_source_donnee,nom_source_donnee_discriminator,source,sous_domaine,statut_indicateur,trace,type_environnement,unite,version_calcul,qualite
-export_table reseau etapeacv,critere,source,statut_indicateur,trace,version_calcul,impact_unitaire,unite,nom_entite,nom_equipement
 export_table operationNonIT conso_elec_moyenne,critere,etapeacv,impact_unitaire,nom_entite,nom_entite_discriminator,nom_item_non_it,nom_source_donnee,nom_source_donnee_discriminator,quantite,source,statut_indicateur,trace,type_item,unite,version_calcul,qualite
 
 ALL_OK=true
diff --git a/e2e/input_template/EquipementPhysique_hors_serveur.csv b/e2e/input_template/EquipementPhysique_hors_serveur.csv
index d4e39e30..c2169111 100644
--- a/e2e/input_template/EquipementPhysique_hors_serveur.csv
+++ b/e2e/input_template/EquipementPhysique_hors_serveur.csv
@@ -8,7 +8,7 @@ physical-eq-006;PIXEL 6;1;;2022-10-18;2022-12-18;0.1;0.2;0.2;Communication Devic
 physical-eq-007;UP2516D;1;;2022-07-31;2023-06-16;4.5;;;Monitor;Retired;France;;;;MY ENTERPRISE;;365;;;0.9;basse
 physical-eq-008;UP2516D;2;;2022-03-10;2023-06-16;4.5;1;2;Wrong /  Type;In stock;France;;;;MY ENTERPRISE;;365;;COPE;0.6;
 physical-eq-009;;3;;2021-08-09;2023-06-16;4.5;1;2;IP Router;In use;France;;;;MY ENTERPRISE;;365;;COPE;0;
-physical-eq-010;Unknown;3;;2021-08-09;2023-06-16;4.5;1;2;IP Router;In use;France;;;;MY ENTERPRISE;;365;;;;
+physical-eq-010;Cisco 5672UP;3;;2021-08-09;2023-06-16;4.5;1;2;IP Router;In use;France;;;;MY ENTERPRISE;;365;;;;
 physical-eq-011;HP 8440p;1;;2021-08-05;2023-06-16;4.5;1;2;Wrong \type;Missing;France;;;;MY ENTERPRISE;;365;;;;
 physical-eq-012;HP 8440p;1;;2023-04-27;2023-06-16;4.5;1;2;Personal Computer;Retired;France;;;;MY ENTERPRISE;;365;;;;
 physical-eq-013;HP 8470w;2;;2025-08-23;2023-06-16;4.5;1;2;Personal Computer;Retired;France;;;;MY ENTERPRISE;;365;;;;
diff --git a/services/.workspace/.idea/compiler.xml b/services/.workspace/.idea/compiler.xml
deleted file mode 100644
index 84cc240a..00000000
--- a/services/.workspace/.idea/compiler.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="CompilerConfiguration">
-    <annotationProcessing>
-      <profile default="true" name="Default" enabled="true" />
-      <profile name="Maven default annotation processors profile" enabled="true">
-        <sourceOutputDir name="target/generated-sources/annotations" />
-        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
-        <outputRelativeToContentRoot value="true" />
-      </profile>
-      <profile name="Annotation profile for common" enabled="true">
-        <sourceOutputDir name="target/generated-sources/annotations" />
-        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
-        <outputRelativeToContentRoot value="true" />
-        <processorPath useClasspath="false">
-          <entry name="$MAVEN_REPOSITORY$/org/mapstruct/mapstruct-processor/1.5.5.Final/mapstruct-processor-1.5.5.Final.jar" />
-          <entry name="$MAVEN_REPOSITORY$/org/mapstruct/mapstruct/1.5.5.Final/mapstruct-1.5.5.Final.jar" />
-          <entry name="$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.18.30/lombok-1.18.30.jar" />
-          <entry name="$MAVEN_REPOSITORY$/org/projectlombok/lombok-mapstruct-binding/0.2.0/lombok-mapstruct-binding-0.2.0.jar" />
-          <entry name="$MAVEN_REPOSITORY$/com/github/therapi/therapi-runtime-javadoc-scribe/0.15.0/therapi-runtime-javadoc-scribe-0.15.0.jar" />
-          <entry name="$MAVEN_REPOSITORY$/com/github/therapi/therapi-runtime-javadoc/0.15.0/therapi-runtime-javadoc-0.15.0.jar" />
-          <entry name="$MAVEN_REPOSITORY$/org/instancio/instancio-processor/2.2.0/instancio-processor-2.2.0.jar" />
-          <entry name="$MAVEN_REPOSITORY$/org/instancio/instancio-core/2.2.0/instancio-core-2.2.0.jar" />
-          <entry name="$MAVEN_REPOSITORY$/org/jetbrains/annotations/23.1.0/annotations-23.1.0.jar" />
-        </processorPath>
-        <module name="api-referentiel" />
-        <module name="api-event-indicateurs" />
-        <module name="common" />
-        <module name="api-event-enrichissement" />
-        <module name="api-rest-caculs" />
-        <module name="calculs" />
-        <module name="api-expositiondonneesentrees" />
-        <module name="api-event-donneesEntrees" />
-        <module name="api-event-calculs" />
-      </profile>
-    </annotationProcessing>
-    <bytecodeTargetLevel>
-      <module name="api-event-calcul-indicateurs" target="17" />
-      <module name="api-event-enrichissement" target="17" />
-      <module name="api-expositionDonneesEntrees" target="17" />
-    </bytecodeTargetLevel>
-  </component>
-  <component name="JavacSettings">
-    <option name="ADDITIONAL_OPTIONS_OVERRIDE">
-      <module name="api-event-calculs" options="-parameters" />
-      <module name="api-event-donneesEntrees" options="-parameters" />
-      <module name="api-expositiondonneesentrees" options="-parameters" />
-      <module name="api-referentiel" options="-parameters" />
-      <module name="api-rest-caculs" options="-parameters" />
-      <module name="calculs" options="-parameters" />
-      <module name="common" options="-parameters" />
-      <module name="core" options="-parameters" />
-    </option>
-  </component>
-</project>
\ No newline at end of file
diff --git a/services/api-event-calculs/pom.xml b/services/api-event-calculs/pom.xml
index 44eaafd1..71aa8d64 100644
--- a/services/api-event-calculs/pom.xml
+++ b/services/api-event-calculs/pom.xml
@@ -5,12 +5,12 @@
     <parent>
         <groupId>org.mte.numecoeval</groupId>
         <artifactId>core</artifactId>
-        <version>2.0.1</version>
+        <version>2.1.0-SNAPSHOT</version>
         <relativePath/> <!-- lookup parent from repository -->
     </parent>
     <artifactId>api-event-calculs</artifactId>
     <name>api-event-calculs</name>
-    <version>2.0.1</version>
+    <version>2.1.0-SNAPSHOT</version>
     <description>api-event-calculs</description>
 
     <repositories>
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/domain/model/CalculEquipementPhysique.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/domain/model/CalculEquipementPhysique.java
index 170b5cd6..9356ac3d 100644
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/domain/model/CalculEquipementPhysique.java
+++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/domain/model/CalculEquipementPhysique.java
@@ -17,8 +17,7 @@ public class CalculEquipementPhysique {
     private List<HypotheseDTO> hypotheses;
     private CorrespondanceRefEquipementDTO correspondanceRefEquipement;
     private EquipementPhysiqueDTO equipementPhysique;
-    private TypeEquipementDTO typeEquipement;
-    private List<MixElectriqueDTO> mixElectriques;
-    private List<ImpactReseauDTO> impactsReseau;
-    private List<ImpactEquipementDTO> impactsEquipement;
+    private TypeItemDTO typeItem;
+    private List<FacteurCaracterisationDTO> facteurCaracterisations;
+
 }
\ No newline at end of file
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/domain/model/CalculSizes.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/domain/model/CalculSizes.java
index 89f9b898..5bb2028b 100644
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/domain/model/CalculSizes.java
+++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/domain/model/CalculSizes.java
@@ -12,7 +12,6 @@ public class CalculSizes {
     private long nbIndicateurEquipementPhysique;
     private long nbIndicateurEquipementVirtuel;
     private long nbIndicateurApplication;
-    private long nbIndicateurReseau;
     private long nbIndicateurOperationNonIT;
     private long nbIndicateurMessagerie;
 }
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/client/ReferentielClient.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/client/ReferentielClient.java
index ba9e0e06..ad6ddc9f 100644
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/client/ReferentielClient.java
+++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/client/ReferentielClient.java
@@ -71,18 +71,6 @@ public class ReferentielClient {
         return null;
     }
 
-    @Cacheable(value = "TypeEquipement")
-    public TypeEquipementDTO getTypeEquipement(String type) {
-        try {
-            return interneNumEcoEvalApi.getTypeEquipement(type).block();
-        } catch (WebClientResponseException e) {
-            if (e.getStatusCode() != HttpStatusCode.valueOf(404)) {
-                throw new ExternalApiException(e);
-            }
-        }
-        return null;
-    }
-
     @Cacheable(value = "TypeItem")
     public TypeItemDTO getTypeItem(String type) {
         try {
@@ -95,43 +83,6 @@ public class ReferentielClient {
         return null;
     }
 
-    @Cacheable(value = "ImpactEquipement")
-    public ImpactEquipementDTO getImpactEquipement(String refEquipement, String critere, String etape) {
-        try {
-            return interneNumEcoEvalApi.getImpactEquipement(refEquipement, critere, etape).block();
-        } catch (WebClientResponseException e) {
-            if (e.getStatusCode() != HttpStatusCode.valueOf(404)) {
-                throw new ExternalApiException(e);
-            }
-        }
-        return null;
-    }
-
-    @Cacheable(value = "ImpactReseau")
-    public ImpactReseauDTO getImpactReseau(String refReseau, String critere, String etape) {
-        try {
-            return interneNumEcoEvalApi.getImpactReseau(refReseau, critere, etape).block();
-        } catch (WebClientResponseException e) {
-            if (e.getStatusCode() != HttpStatusCode.valueOf(404)) {
-                throw new ExternalApiException(e);
-            }
-        }
-        return null;
-    }
-
-    @Cacheable(value = "MixElectrique")
-    public MixElectriqueDTO getMixElectrique(String pays, String critere) {
-        if (pays == null || critere == null) return null;
-        try {
-            return interneNumEcoEvalApi.getMixElectrique(pays, critere).block();
-        } catch (WebClientResponseException e) {
-            if (e.getStatusCode() != HttpStatusCode.valueOf(404)) {
-                throw new ExternalApiException(e);
-            }
-        }
-        return null;
-    }
-
     @Cacheable(value = "FacteurCaracterisationMixElec")
     public FacteurCaracterisationDTO getMixElectriqueFromFacteurCaracterisation(String critere, String localisation) {
         try {
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/CacheConfig.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/CacheConfig.java
index 5e182885..90538c3d 100644
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/CacheConfig.java
+++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/CacheConfig.java
@@ -37,4 +37,13 @@ public class CacheConfig {
     public void emptyAllCaches() {
         log.info("Nettoyage de tous les caches internes");
     }
-}
+
+    @CacheEvict(value = {
+            "EtapesFiltrees",
+            "CriteresFiltres",
+    }, allEntries = true)
+    @Scheduled(fixedRateString = "${numecoeval.cache.donnesfiltrees}", timeUnit = TimeUnit.MINUTES)
+    public void emptyDonneesFiltreesCaches() {
+        log.info("Nettoyage des caches d'EtapesFiltrees et CriteresFiltres");
+    }
+}
\ No newline at end of file
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/DomainConfiguration.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/DomainConfiguration.java
index d41eaae9..ff21d8a6 100644
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/DomainConfiguration.java
+++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/DomainConfiguration.java
@@ -30,12 +30,6 @@ public class DomainConfiguration {
         return new CalculImpactApplicationServiceImpl();
     }
 
-
-    @Bean
-    public CalculImpactReseauService calculImpactReseauService() {
-        return new CalculImpactReseauServiceImpl();
-    }
-
     @Bean
     public CalculImpactOperationNonITService calculImpactOperationNonITService() {
         return new CalculImpactOperationNonITServiceImpl();
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/rest/calculs/CalculsReseauController.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/rest/calculs/CalculsReseauController.java
deleted file mode 100644
index f859f330..00000000
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/rest/calculs/CalculsReseauController.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.mte.numecoeval.calculs.infrastructure.controller.rest.calculs;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import lombok.AllArgsConstructor;
-import org.mte.numecoeval.calculs.domain.port.input.service.impl.CalculImpactReseauServiceImpl;
-import org.mte.numecoeval.calculs.infrastructure.mapper.DomainMapper;
-import org.mte.numecoeval.calculs.infrastructure.service.rest.calculs.CheckIndicateurService;
-import org.mte.numecoeval.calculs.rest.generated.api.model.DemandeCalculImpactReseauEquipementPhysiqueRest;
-import org.mte.numecoeval.calculs.rest.generated.api.model.IndicateurImpactReseauRest;
-import org.mte.numecoeval.calculs.rest.generated.api.server.CalculsReseauApi;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@AllArgsConstructor
-public class CalculsReseauController implements CalculsReseauApi {
-
-    DomainMapper domainMapper;
-
-    ObjectMapper objectMapper;
-
-    CheckIndicateurService checkIndicateurService;
-
-    /**
-     * POST /calculs/reseau/equipementPhysique
-     *
-     * @param demandeCalculImpactReseauEquipementPhysiqueRest (required)
-     * @return la liste d'indicateurs calcules
-     */
-    @Override
-    public ResponseEntity<IndicateurImpactReseauRest> calculerImpactReseau(DemandeCalculImpactReseauEquipementPhysiqueRest demandeCalculImpactReseauEquipementPhysiqueRest) {
-        var demandeCalcul = domainMapper.toDomain(demandeCalculImpactReseauEquipementPhysiqueRest);
-
-        var indicateur = new CalculImpactReseauServiceImpl().calculerImpactReseau(demandeCalcul);
-
-        return checkIndicateurService.isOk(indicateur.getStatutIndicateur()) ?
-                ResponseEntity.ok(domainMapper.toRest(indicateur)) :
-                ResponseEntity.badRequest().body(domainMapper.toRest(indicateur));
-    }
-}
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenEquipementPhysique.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenEquipementPhysique.java
index 3a4ed077..7bb761ea 100644
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenEquipementPhysique.java
+++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenEquipementPhysique.java
@@ -4,7 +4,6 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.mte.numecoeval.calculs.infrastructure.service.calcul.MainEquipementPhysiqueService;
 import org.mte.numecoeval.topic.data.EquipementPhysiqueDTO;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.kafka.annotation.KafkaListener;
 import org.springframework.stereotype.Component;
 
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/mapper/DomainMapper.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/mapper/DomainMapper.java
index 47ef6c1b..94c276a0 100644
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/mapper/DomainMapper.java
+++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/mapper/DomainMapper.java
@@ -26,8 +26,6 @@ public interface DomainMapper {
 
     /* Référentiels */
 
-    ReferentielTypeEquipement toDomain(TypeEquipementRest rest);
-
     ReferentielCorrespondanceRefEquipement toDomain(CorrespondanceRefEquipementRest rest);
 
     ReferentielHypothese toDomain(HypotheseRest rest);
@@ -36,13 +34,6 @@ public interface DomainMapper {
 
     ReferentielCritere toDomain(CritereRest rest);
 
-    ReferentielImpactEquipement toDomain(ImpactEquipementRest rest);
-
-    @Mapping(source = "valeur", target = "impactReseauMobileMoyen")
-    ReferentielImpactReseau toDomain(ImpactReseauRest rest);
-
-    ReferentielMixElectrique toDomain(MixElectriqueRest rest);
-
     ReferentielImpactMessagerie toDomain(ImpactMessagerieRest rest);
 
     /*Indicateurs*/
@@ -58,8 +49,6 @@ public interface DomainMapper {
 
     IndicateurImpactApplicationRest toRest(ImpactApplication domain);
 
-    IndicateurImpactReseauRest toRest(ImpactReseau domain);
-
     IndicateurImpactOperationNonITRest toRest(ImpactOperationNonIT domain);
 
     IndicateurImpactMessagerieRest toRest(ImpactMessagerie domain);
@@ -68,9 +57,6 @@ public interface DomainMapper {
     @Mapping(target = "dateCalcul", expression = "java(java.time.LocalDateTime.now())")
     DemandeCalculImpactEquipementPhysique toDomain(DemandeCalculImpactEquipementPhysiqueRest rest);
 
-    @Mapping(target = "dateCalcul", expression = "java(java.time.LocalDateTime.now())")
-    DemandeCalculImpactReseau toDomain(DemandeCalculImpactReseauEquipementPhysiqueRest rest);
-
     @Mapping(target = "dateCalcul", expression = "java(java.time.LocalDateTime.now())")
     DemandeCalculImpactEquipementVirtuel toDomain(DemandeCalculEquipementVirtuelRest rest);
 
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/mapper/ReferentielMapper.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/mapper/ReferentielMapper.java
index 6624cc54..4d078347 100644
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/mapper/ReferentielMapper.java
+++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/mapper/ReferentielMapper.java
@@ -1,7 +1,6 @@
 package org.mte.numecoeval.calculs.infrastructure.mapper;
 
 import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
 import org.mte.numecoeval.calculs.domain.data.referentiel.*;
 import org.mte.numecoeval.calculs.referentiels.generated.api.model.*;
 
@@ -14,11 +13,6 @@ public interface ReferentielMapper {
 
     ReferentielCritere toCritere(CritereDTO critereDTO);
 
-    @Mapping(source = "valeur", target = "impactReseauMobileMoyen")
-    ReferentielImpactReseau toImpactReseau(ImpactReseauDTO impactReseauDTO);
-
-    List<ReferentielImpactReseau> toListImpactReseau(List<ImpactReseauDTO> impactReseauDTO);
-
     ReferentielHypothese toHypothese(HypotheseDTO hypotheseDTO);
 
     List<ReferentielHypothese> toListHypothese(List<HypotheseDTO> hypotheseDTO);
@@ -27,21 +21,11 @@ public interface ReferentielMapper {
 
     List<ReferentielFacteurCaracterisation> toListFacteurCaracterisation(List<FacteurCaracterisationDTO> facteurCaracterisationDTO);
 
-    ReferentielImpactEquipement toImpactEquipement(ImpactEquipementDTO impactEquipementDTO);
-
-    List<ReferentielImpactEquipement> toListImpactEquipement(List<ImpactEquipementDTO> impactEquipementDTO);
-
-    ReferentielMixElectrique toMixElectrique(MixElectriqueDTO mixElectriqueDTO);
-
-    List<ReferentielMixElectrique> toListMixElectrique(List<MixElectriqueDTO> mixElectriqueDTO);
-
     ReferentielImpactMessagerie toImpactMessagerie(ImpactMessagerieDTO impactMessagerieDTO);
 
     List<ReferentielImpactMessagerie> toListImpactMessagerie(List<ImpactMessagerieDTO> impactMessagerieDTO);
 
     ReferentielCorrespondanceRefEquipement toCorrespondanceRefEquipement(CorrespondanceRefEquipementDTO dto);
 
-    ReferentielTypeEquipement toTypeEquipement(TypeEquipementDTO dto);
-
     ReferentielTypeItem toTypeItem(TypeItemDTO dto);
 }
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/DonneesEntreeRepository.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/DonneesEntreeRepository.java
index d23d6cdd..965c8c4f 100644
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/DonneesEntreeRepository.java
+++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/DonneesEntreeRepository.java
@@ -45,4 +45,56 @@ public class DonneesEntreeRepository {
         }
         return result.getFirst();
     }
+
+    @Cacheable("EtapesFiltrees")
+    public String findEtapes(String nomLot) {
+        List<String> result = new ArrayList<>();
+        try (Connection conn = dataSource.getConnection()) {
+            try (var ps = conn.prepareStatement("""
+                     SELECT etapes
+                     FROM en_donnees_entrees
+                     WHERE nom_lot = ?
+                    """)) {
+
+                ps.setString(1, nomLot);
+                var rs = ps.executeQuery();
+                while (rs.next()) {
+                    result.add(rs.getString("etapes"));
+                }
+            }
+        } catch (SQLException e) {
+            log.error("Une erreur s'est produite lors de la selection dans PostgreSQL. Exception: ", e);
+            throw new DatabaseException(e);
+        }
+        if (result.isEmpty()) {
+            return null;
+        }
+        return result.getFirst();
+    }
+
+    @Cacheable("CriteresFiltres")
+    public String findCriteres(String nomLot) {
+        List<String> result = new ArrayList<>();
+        try (Connection conn = dataSource.getConnection()) {
+            try (var ps = conn.prepareStatement("""
+                     SELECT criteres
+                     FROM en_donnees_entrees
+                     WHERE nom_lot = ?
+                    """)) {
+
+                ps.setString(1, nomLot);
+                var rs = ps.executeQuery();
+                while (rs.next()) {
+                    result.add(rs.getString("criteres"));
+                }
+            }
+        } catch (SQLException e) {
+            log.error("Une erreur s'est produite lors de la selection dans PostgreSQL. Exception: ", e);
+            throw new DatabaseException(e);
+        }
+        if (result.isEmpty()) {
+            return null;
+        }
+        return result.getFirst();
+    }
 }
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/IndicateurRepository.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/IndicateurRepository.java
index a2148ebc..c26afae5 100644
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/IndicateurRepository.java
+++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/IndicateurRepository.java
@@ -89,8 +89,7 @@ public class IndicateurRepository {
     public void saveIndicateursEquipements(
             List<ImpactEquipementPhysique> impactsEquipementPhysique,
             List<ImpactEquipementVirtuel> impactsEquipementVirtuels,
-            List<ImpactApplication> impactsApplications,
-            List<ImpactReseau> impactsReseau
+            List<ImpactApplication> impactsApplications
     ) {
         if (impactsEquipementPhysique.isEmpty()) return;
 
@@ -192,35 +191,6 @@ public class IndicateurRepository {
 
                 ps.executeBatch();
             }
-
-            try (var ps = conn.prepareStatement(INSERT_RESEAU_QUERY)) {
-
-                for (ImpactReseau indicateur : impactsReseau) {
-                    ps.setTimestamp(1, PreparedStatementUtils.getTimestampFromLocalDateTime(indicateur.getDateCalcul()));
-                    ps.setDate(2, PreparedStatementUtils.getDateFromLocalDate(indicateur.getDateLot()));
-                    ps.setDate(3, PreparedStatementUtils.getDateFromLocalDate(Optional.ofNullable(indicateur.getDateLot()).orElse(LocalDate.EPOCH)));
-                    ps.setString(4, indicateur.getNomOrganisation());
-                    ps.setString(5, StringUtils.defaultString(indicateur.getNomOrganisation()));
-                    ps.setString(6, indicateur.getEtapeACV());
-                    ps.setString(7, indicateur.getCritere());
-                    ps.setString(8, indicateur.getNomEquipement());
-                    ps.setString(9, indicateur.getNomEntite());
-                    ps.setString(10, StringUtils.defaultString(indicateur.getNomEntite()));
-                    ps.setString(11, indicateur.getSource());
-                    ps.setString(12, indicateur.getStatutIndicateur());
-                    ps.setString(13, indicateur.getTrace());
-                    ps.setString(14, indicateur.getVersionCalcul());
-                    PreparedStatementUtils.setDoubleValue(ps, 15, indicateur.getImpactUnitaire());
-                    ps.setString(16, indicateur.getUnite());
-                    ps.setString(17, indicateur.getNomLot());
-                    ps.setString(18, indicateur.getNomSourceDonnee());
-                    ps.setString(19, StringUtils.defaultString(indicateur.getNomSourceDonnee()));
-                    ps.addBatch();
-                }
-
-                ps.executeBatch();
-            }
-
             conn.commit();
         } catch (SQLException e) {
             log.error("Une erreur s'est produite lors de l'insertion dans PostgreSQL. Exception: ", e);
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/CalculEquipementPhysiqueService.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/CalculEquipementPhysiqueService.java
index c1102a25..4fdb49aa 100644
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/CalculEquipementPhysiqueService.java
+++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/CalculEquipementPhysiqueService.java
@@ -51,11 +51,10 @@ public class CalculEquipementPhysiqueService {
                         .equipementPhysique(entreesMapper.toDomain(calculEquipementPhysique.getEquipementPhysique()))
                         .etape(referentielMapper.toEtape(etapeDTO))
                         .critere(referentielMapper.toCritere(critereDTO))
-                        .typeEquipement(referentielMapper.toTypeEquipement(calculEquipementPhysique.getTypeEquipement()))
+                        .typeItem(referentielMapper.toTypeItem(calculEquipementPhysique.getTypeItem()))
                         .correspondanceRefEquipement(referentielMapper.toCorrespondanceRefEquipement(calculEquipementPhysique.getCorrespondanceRefEquipement()))
                         .hypotheses(referentielMapper.toListHypothese(calculEquipementPhysique.getHypotheses()))
-                        .mixElectriques(referentielMapper.toListMixElectrique(calculEquipementPhysique.getMixElectriques()))
-                        .impactEquipements(referentielMapper.toListImpactEquipement(calculEquipementPhysique.getImpactsEquipement()))
+                        .facteurCaracterisations(referentielMapper.toListFacteurCaracterisation(calculEquipementPhysique.getFacteurCaracterisations()))
                         .optionsCalcul(new OptionsCalcul(dureeUsage))
                         .build();
 
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/CalculReseauService.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/CalculReseauService.java
deleted file mode 100644
index 307fc4a6..00000000
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/CalculReseauService.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.mte.numecoeval.calculs.infrastructure.service.calcul;
-
-import lombok.AllArgsConstructor;
-import org.mte.numecoeval.calculs.domain.data.demande.DemandeCalculImpactReseau;
-import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactReseau;
-import org.mte.numecoeval.calculs.domain.model.CalculEquipementPhysique;
-import org.mte.numecoeval.calculs.domain.port.input.service.CalculImpactReseauService;
-import org.mte.numecoeval.calculs.infrastructure.mapper.EntreesMapper;
-import org.mte.numecoeval.calculs.infrastructure.mapper.ReferentielMapper;
-import org.mte.numecoeval.calculs.referentiels.generated.api.model.CritereDTO;
-import org.mte.numecoeval.calculs.referentiels.generated.api.model.EtapeDTO;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-
-@Service
-@AllArgsConstructor
-public class CalculReseauService {
-
-    EntreesMapper entreesMapper;
-    ReferentielMapper referentielMapper;
-
-    CalculImpactReseauService calculImpactReseauService;
-
-    /**
-     * Calcule les impacts réseau d'un équipement physique
-     * Returne la liste d'impacts
-     *
-     * @param calculEquipementPhysique l'equipement physique
-     * @return la liste d'impacts
-     */
-    public List<ImpactReseau> calculImpactReseau(CalculEquipementPhysique calculEquipementPhysique) {
-
-        List<ImpactReseau> impactReseauList = new ArrayList<>();
-
-        if (calculEquipementPhysique == null ||
-                calculEquipementPhysique.getEquipementPhysique() == null ||
-                calculEquipementPhysique.getEquipementPhysique().getGoTelecharge() == null) return impactReseauList;
-
-        LocalDateTime dateCalcul = LocalDateTime.now();
-
-        for (EtapeDTO etape : calculEquipementPhysique.getEtapes()) {
-            for (CritereDTO critere : calculEquipementPhysique.getCriteres()) {
-                impactReseauList.add(calculImpactReseauService.calculerImpactReseau(DemandeCalculImpactReseau.builder()
-                        .dateCalcul(dateCalcul)
-                        .equipementPhysique(entreesMapper.toDomain(calculEquipementPhysique.getEquipementPhysique()))
-                        .etape(referentielMapper.toEtape(etape))
-                        .critere(referentielMapper.toCritere(critere))
-                        .impactsReseau(referentielMapper.toListImpactReseau(calculEquipementPhysique.getImpactsReseau()))
-                        .build()));
-            }
-        }
-
-        return impactReseauList;
-    }
-}
\ No newline at end of file
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/IntegrationCalculEquipementsService.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/IntegrationCalculEquipementsService.java
index 1eff91ae..c3eb9545 100644
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/IntegrationCalculEquipementsService.java
+++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/IntegrationCalculEquipementsService.java
@@ -7,7 +7,6 @@ import org.mte.numecoeval.calculs.domain.data.entree.EquipementVirtuel;
 import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactApplication;
 import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactEquipementPhysique;
 import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactEquipementVirtuel;
-import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactReseau;
 import org.mte.numecoeval.calculs.domain.model.CalculEquipementPhysique;
 import org.mte.numecoeval.calculs.domain.model.CalculSizes;
 import org.mte.numecoeval.calculs.infrastructure.repository.ApplicationRepository;
@@ -33,7 +32,6 @@ public class IntegrationCalculEquipementsService {
     CalculEquipementPhysiqueService calculEquipementPhysiqueService;
     CalculEquipementVirtuelService calculEquipementVirtuelService;
     CalculApplicationService calculApplicationService;
-    CalculReseauService calculReseauService;
 
     /**
      * Calcul les impacts d'un équipement physique enrichi, liste des impacts:
@@ -62,7 +60,6 @@ public class IntegrationCalculEquipementsService {
         var ttAfterClear = System.currentTimeMillis();
 
         List<ImpactEquipementPhysique> impactEquipementPhysiqueList = calculEquipementPhysiqueService.calculImpactEquipementPhysique(calculEquipementPhysique);
-        List<ImpactReseau> impactReseauList = calculReseauService.calculImpactReseau(calculEquipementPhysique);
 
         // get equipements virtuels
         List<EquipementVirtuel> equipementVirtuelList = equipementVirtuelRepository.findEquipementVirtuels(nomOrganisation, nomLot, nomEquipementPhysique);
@@ -95,7 +92,7 @@ public class IntegrationCalculEquipementsService {
         var ttAfterEqVAndApp = System.currentTimeMillis();
 
         // save impacts into db
-        indicateurRepository.saveIndicateursEquipements(impactEquipementPhysiqueList, allImpactVirtuel, allImpactApplication, impactReseauList);
+        indicateurRepository.saveIndicateursEquipements(impactEquipementPhysiqueList, allImpactVirtuel, allImpactApplication);
 
         var ttAfterSave = System.currentTimeMillis();
 
@@ -124,7 +121,6 @@ public class IntegrationCalculEquipementsService {
         result.setNbIndicateurEquipementPhysique(impactEquipementPhysiqueList.size());
         result.setNbIndicateurEquipementVirtuel(allImpactVirtuel.size());
         result.setNbIndicateurApplication(allImpactApplication.size());
-        result.setNbIndicateurReseau(impactReseauList.size());
         return result;
     }
 }
\ No newline at end of file
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/enrichissement/EnrichissementEquipementPhysiqueService.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/enrichissement/EnrichissementEquipementPhysiqueService.java
index d3e3830c..cf2ea565 100644
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/enrichissement/EnrichissementEquipementPhysiqueService.java
+++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/enrichissement/EnrichissementEquipementPhysiqueService.java
@@ -4,6 +4,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.mte.numecoeval.calculs.domain.model.CalculEquipementPhysique;
 import org.mte.numecoeval.calculs.infrastructure.client.ReferentielClient;
+import org.mte.numecoeval.calculs.infrastructure.repository.DonneesEntreeRepository;
+import org.mte.numecoeval.calculs.referentiels.generated.api.model.CritereDTO;
+import org.mte.numecoeval.calculs.referentiels.generated.api.model.EtapeDTO;
 import org.mte.numecoeval.calculs.referentiels.generated.api.model.HypotheseDTO;
 import org.mte.numecoeval.topic.data.EquipementPhysiqueDTO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -12,10 +15,13 @@ import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 
 @Slf4j
 @Service
 public class EnrichissementEquipementPhysiqueService {
+    @Autowired
+    DonneesEntreeRepository donneesEntreeRepository;
 
     @Value("${numecoeval.hypotheses.equipementPhysique}")
     private String hypothesesEquipementPhysique;
@@ -34,8 +40,35 @@ public class EnrichissementEquipementPhysiqueService {
 
         calculEquipementPhysique.setEquipementPhysique(equipementPhysiqueDTO);
 
-        calculEquipementPhysique.setEtapes(referentielClient.getEtapes());
-        calculEquipementPhysique.setCriteres(referentielClient.getCriteres());
+        String etapesFiltrees = donneesEntreeRepository.findEtapes(calculEquipementPhysique.getEquipementPhysique().getNomLot());
+        List<String> etapesList = etapesFiltrees == null ? null : new ArrayList<>(Arrays.asList(etapesFiltrees.split("##")));
+        // si etapesList est vide alors on ne filtre pas et on utilise toutes les étapes du référentiel
+        if (etapesList == null) {
+            calculEquipementPhysique.setEtapes(referentielClient.getEtapes());
+        } else {
+            List<EtapeDTO> etapesCalcul = new ArrayList<>();
+            for (var etape : referentielClient.getEtapes()) {
+                if (etapesList.contains(etape.getCode())) {
+                    etapesCalcul.add(etape);
+                }
+            }
+            calculEquipementPhysique.setEtapes(etapesCalcul);
+        }
+
+        String criteresFiltrees = donneesEntreeRepository.findCriteres(calculEquipementPhysique.getEquipementPhysique().getNomLot());
+        List<String> criteresList = criteresFiltrees == null ? null : new ArrayList<>(Arrays.asList(criteresFiltrees.split("##")));
+        // si criteresList est vide alors on ne filtre pas et on utilise tous les critères du référentiel
+        if (criteresList == null) {
+            calculEquipementPhysique.setCriteres(referentielClient.getCriteres());
+        } else {
+            List<CritereDTO> criteresCalcul = new ArrayList<>();
+            for (var critere : referentielClient.getCriteres()) {
+                if (criteresList.contains(critere.getNomCritere())) {
+                    criteresCalcul.add(critere);
+                }
+            }
+            calculEquipementPhysique.setCriteres(criteresCalcul);
+        }
 
         var hypotheses = new ArrayList<HypotheseDTO>();
 
@@ -46,52 +79,46 @@ public class EnrichissementEquipementPhysiqueService {
                 });
 
         calculEquipementPhysique.setHypotheses(hypotheses);
+
         if (equipementPhysiqueDTO.getModele() != null) {
             calculEquipementPhysique.setCorrespondanceRefEquipement(referentielClient.getCorrespondanceRefEquipement(equipementPhysiqueDTO.getModele()));
         }
-        calculEquipementPhysique.setTypeEquipement(referentielClient.getTypeEquipement(equipementPhysiqueDTO.getType()));
 
-        calculEquipementPhysique.setImpactsEquipement(new ArrayList<>());
-        calculEquipementPhysique.setImpactsReseau(new ArrayList<>());
-        calculEquipementPhysique.setMixElectriques(new ArrayList<>());
+        calculEquipementPhysique.setTypeItem(referentielClient.getTypeItem(equipementPhysiqueDTO.getType()));
+
+        calculEquipementPhysique.setFacteurCaracterisations(new ArrayList<>());
         for (var critere : calculEquipementPhysique.getCriteres()) {
             for (var etape : calculEquipementPhysique.getEtapes()) {
                 if (calculEquipementPhysique.getCorrespondanceRefEquipement() != null) {
-                    calculEquipementPhysique.getImpactsEquipement().add(
-                            referentielClient.getImpactEquipement(
-                                    calculEquipementPhysique.getCorrespondanceRefEquipement().getRefEquipementCible(),
+                    calculEquipementPhysique.getFacteurCaracterisations().add(
+                            referentielClient.getFacteurCaracterisationByCritereAndEtapeAndNom(
                                     critere.getNomCritere(),
-                                    etape.getCode()
+                                    etape.getCode(),
+                                    calculEquipementPhysique.getCorrespondanceRefEquipement().getRefEquipementCible()
                             )
                     );
-                } else if (calculEquipementPhysique.getTypeEquipement() != null
-                        && StringUtils.isNotBlank(calculEquipementPhysique.getTypeEquipement().getRefEquipementParDefaut())) {
-                    calculEquipementPhysique.getImpactsEquipement().add(
-                            referentielClient.getImpactEquipement(
-                                    calculEquipementPhysique.getTypeEquipement().getRefEquipementParDefaut(),
+                } else if (calculEquipementPhysique.getTypeItem() != null
+                        && StringUtils.isNotBlank(calculEquipementPhysique.getTypeItem().getRefItemParDefaut())) {
+                    calculEquipementPhysique.getFacteurCaracterisations().add(
+                            referentielClient.getFacteurCaracterisationByCritereAndEtapeAndNom(
                                     critere.getNomCritere(),
-                                    etape.getCode()
+                                    etape.getCode(),
+                                    calculEquipementPhysique.getTypeItem().getRefItemParDefaut()
                             )
                     );
                 }
-                calculEquipementPhysique.getImpactsReseau().add(
-                        referentielClient.getImpactReseau(
-                                "impactReseauMobileMoyen",
-                                critere.getNomCritere(),
-                                etape.getCode()
-                        )
-                );
             }
 
-            var mixElec = referentielClient.getMixElectrique(equipementPhysiqueDTO.getPaysDUtilisation(), critere.getNomCritere());
-            if (mixElec != null) calculEquipementPhysique.getMixElectriques().add(mixElec);
+            var mixElec = referentielClient.getMixElectriqueFromFacteurCaracterisation(critere.getNomCritere(), equipementPhysiqueDTO.getPaysDUtilisation());
+            if (mixElec != null) calculEquipementPhysique.getFacteurCaracterisations().add(mixElec);
 
             if (equipementPhysiqueDTO.getDataCenter() != null
                     && StringUtils.isNotBlank(equipementPhysiqueDTO.getDataCenter().getLocalisation())
                     && !StringUtils.equals(equipementPhysiqueDTO.getPaysDUtilisation(), equipementPhysiqueDTO.getDataCenter().getLocalisation())) {
 
-                var mixElecDataCenter = referentielClient.getMixElectrique(equipementPhysiqueDTO.getDataCenter().getLocalisation(), critere.getNomCritere());
-                if (mixElecDataCenter != null) calculEquipementPhysique.getMixElectriques().add(mixElecDataCenter);
+                var mixElecDataCenter = referentielClient.getMixElectriqueFromFacteurCaracterisation(critere.getNomCritere(), equipementPhysiqueDTO.getDataCenter().getLocalisation());
+                if (mixElecDataCenter != null)
+                    calculEquipementPhysique.getFacteurCaracterisations().add(mixElecDataCenter);
             }
         }
 
diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/enrichissement/EnrichissementOperationNonITService.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/enrichissement/EnrichissementOperationNonITService.java
index e386fc9d..ef39f73e 100644
--- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/enrichissement/EnrichissementOperationNonITService.java
+++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/service/enrichissement/EnrichissementOperationNonITService.java
@@ -4,6 +4,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.mte.numecoeval.calculs.domain.model.CalculOperationNonIT;
 import org.mte.numecoeval.calculs.infrastructure.client.ReferentielClient;
+import org.mte.numecoeval.calculs.infrastructure.repository.DonneesEntreeRepository;
+import org.mte.numecoeval.calculs.referentiels.generated.api.model.CritereDTO;
+import org.mte.numecoeval.calculs.referentiels.generated.api.model.EtapeDTO;
 import org.mte.numecoeval.calculs.referentiels.generated.api.model.HypotheseDTO;
 import org.mte.numecoeval.topic.data.OperationNonITDTO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -12,11 +15,14 @@ import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 
 @Slf4j
 @Service
 public class EnrichissementOperationNonITService {
 
+    @Autowired
+    DonneesEntreeRepository donneesEntreeRepository;
     @Value("${numecoeval.hypotheses.operationNonIt}")
     private String hypothesesOperationNonIt;
 
@@ -34,8 +40,36 @@ public class EnrichissementOperationNonITService {
 
         calculOperationNonIT.setOperationNonIT(operationNonITDTO);
 
-        calculOperationNonIT.setEtapes(referentielClient.getEtapes());
-        calculOperationNonIT.setCriteres(referentielClient.getCriteres());
+        String etapesFiltrees = donneesEntreeRepository.findEtapes(calculOperationNonIT.getOperationNonIT().getNomLot());
+        List<String> etapesList = etapesFiltrees == null ? null : new ArrayList<>(Arrays.asList(etapesFiltrees.split("##")));
+        // si etapesList est vide alors on ne filtre pas et on utilise toutes les étapes du référentiel
+        if (etapesList == null) {
+            calculOperationNonIT.setEtapes(referentielClient.getEtapes());
+        } else {
+            List<EtapeDTO> etapesCalcul = new ArrayList<>();
+            for (var etape : referentielClient.getEtapes()) {
+                if (etapesList.contains(etape.getCode())) {
+                    etapesCalcul.add(etape);
+                }
+            }
+            calculOperationNonIT.setEtapes(etapesCalcul);
+        }
+
+        String criteresFiltrees = donneesEntreeRepository.findCriteres(calculOperationNonIT.getOperationNonIT().getNomLot());
+        List<String> criteresList = criteresFiltrees == null ? null : new ArrayList<>(Arrays.asList(criteresFiltrees.split("##")));
+        // si criteresList est vide alors on ne filtre pas et on utilise tous les critères du référentiel
+        if (criteresList == null) {
+            calculOperationNonIT.setCriteres(referentielClient.getCriteres());
+        } else {
+            List<CritereDTO> criteresCalcul = new ArrayList<>();
+            for (var critere : referentielClient.getCriteres()) {
+                if (criteresList.contains(critere.getNomCritere())) {
+                    criteresCalcul.add(critere);
+                }
+            }
+            calculOperationNonIT.setCriteres(criteresCalcul);
+        }
+
         calculOperationNonIT.setTypeItem(referentielClient.getTypeItem(operationNonITDTO.getType()));
 
         var hypotheses = new ArrayList<HypotheseDTO>();
diff --git a/services/api-event-calculs/src/main/resources/application.yaml b/services/api-event-calculs/src/main/resources/application.yaml
index 22e10dfe..070760f9 100644
--- a/services/api-event-calculs/src/main/resources/application.yaml
+++ b/services/api-event-calculs/src/main/resources/application.yaml
@@ -42,6 +42,7 @@ numecoeval:
     url: "http://localhost:18080"
   cache:
     ttl: "20"
+    donnesfiltrees: "1"
 
 server:
   port: 18085
diff --git a/services/api-event-calculs/src/main/resources/schema.sql b/services/api-event-calculs/src/main/resources/schema.sql
index b95c0f38..9a7df953 100644
--- a/services/api-event-calculs/src/main/resources/schema.sql
+++ b/services/api-event-calculs/src/main/resources/schema.sql
@@ -104,7 +104,11 @@ CREATE TABLE IF NOT EXISTS ind_indicateur_impact_operation_non_it
     nom_organisation           varchar(255)     NULL,
     nom_source_donnee          varchar(255)     NULL,
     nom_item_non_it            varchar(255)     NULL,
-    qualite                    varchar(255)     NULL
+    qualite                    varchar(255)     NULL,
+    date_lot_discriminator          date            NOT NULL DEFAULT('1970-01-01'),
+    nom_organisation_discriminator  varchar(255)    NOT NULL DEFAULT(''),
+    nom_entite_discriminator        varchar(255)    NOT NULL DEFAULT(''),
+    nom_source_donnee_discriminator varchar(255)    NOT NULL DEFAULT('')
 );
 
 CREATE TABLE IF NOT EXISTS ind_indicateur_impact_messagerie
@@ -158,6 +162,10 @@ ALTER TABLE IF EXISTS ind_indicateur_impact_equipement_physique ADD COLUMN IF NO
 ALTER TABLE IF EXISTS ind_indicateur_impact_application ADD COLUMN IF NOT EXISTS qualite varchar(255)  NULL DEFAULT '';
 ALTER TABLE IF EXISTS ind_indicateur_impact_equipement_virtuel ADD COLUMN IF NOT EXISTS qualite varchar(255)  NULL DEFAULT '';
 ALTER TABLE IF EXISTS ind_indicateur_impact_operation_non_it ADD COLUMN IF NOT EXISTS qualite varchar(255)  NULL DEFAULT '';
+ALTER TABLE IF EXISTS ind_indicateur_impact_operation_non_it ADD COLUMN IF NOT EXISTS date_lot_discriminator date NOT NULL DEFAULT('1970-01-01');
+ALTER TABLE IF EXISTS ind_indicateur_impact_operation_non_it ADD COLUMN IF NOT EXISTS nom_organisation_discriminator varchar(255) NOT NULL DEFAULT('');
+ALTER TABLE IF EXISTS ind_indicateur_impact_operation_non_it ADD COLUMN IF NOT EXISTS nom_entite_discriminator varchar(255) NOT NULL DEFAULT('');
+ALTER TABLE IF EXISTS ind_indicateur_impact_operation_non_it ADD COLUMN IF NOT EXISTS nom_source_donnee_discriminator varchar(255) NOT NULL DEFAULT('');
 
 CREATE INDEX IF NOT EXISTS idx_ind_eq_p__nom_lot_nom_equipement   ON ind_indicateur_impact_equipement_physique (nom_lot, nom_equipement);
 CREATE INDEX IF NOT EXISTS idx_ind_eq_v__nom_lot_nom_equipement   ON ind_indicateur_impact_equipement_virtuel (nom_lot, nom_equipement);
diff --git a/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/ApiEventCalculsApplicationTests.java b/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/ApiEventCalculsApplicationTests.java
index 4310c440..35979fc3 100644
--- a/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/ApiEventCalculsApplicationTests.java
+++ b/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/ApiEventCalculsApplicationTests.java
@@ -9,7 +9,10 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.Mockito;
 import org.mte.numecoeval.calculs.domain.data.entree.Application;
 import org.mte.numecoeval.calculs.domain.data.entree.EquipementVirtuel;
-import org.mte.numecoeval.calculs.domain.data.indicateurs.*;
+import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactApplication;
+import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactEquipementPhysique;
+import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactEquipementVirtuel;
+import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactMessagerie;
 import org.mte.numecoeval.calculs.domain.model.CalculEquipementPhysique;
 import org.mte.numecoeval.calculs.domain.model.CalculMessagerie;
 import org.mte.numecoeval.calculs.infrastructure.repository.*;
@@ -41,7 +44,6 @@ import static org.mockito.Mockito.times;
 @EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class, DataSourceAutoConfiguration.class, KafkaAutoConfiguration.class})
 class ApiEventCalculsApplicationTests {
 
-
     @Autowired
     IntegrationCalculEquipementsService integrationCalculEquipementsService;
     @Autowired
@@ -69,8 +71,6 @@ class ApiEventCalculsApplicationTests {
     ArgumentCaptor<List<ImpactEquipementPhysique>> captorImpactEqPh = ArgumentCaptor.forClass((Class) List.class);
     ArgumentCaptor<List<ImpactEquipementVirtuel>> captorImpactEqV = ArgumentCaptor.forClass((Class) List.class);
     ArgumentCaptor<List<ImpactApplication>> captorImpactApp = ArgumentCaptor.forClass((Class) List.class);
-    ArgumentCaptor<List<ImpactReseau>> captorImpactReseau = ArgumentCaptor.forClass((Class) List.class);
-
     ArgumentCaptor<List<ImpactMessagerie>> captorImpactMsg = ArgumentCaptor.forClass((Class) List.class);
 
     @Test
@@ -120,18 +120,16 @@ class ApiEventCalculsApplicationTests {
         integrationCalculEquipementsService.calculImpactEquipementPhysique(calculEquipementPhysique);
 
         /* CAPTURE Impacts lists */
-        Mockito.verify(indicateurRepository, times(1)).saveIndicateursEquipements(captorImpactEqPh.capture(), captorImpactEqV.capture(), captorImpactApp.capture(), captorImpactReseau.capture());
+        Mockito.verify(indicateurRepository, times(1)).saveIndicateursEquipements(captorImpactEqPh.capture(), captorImpactEqV.capture(), captorImpactApp.capture());
 
         List<ImpactEquipementPhysique> actualImpactEqPh = captorImpactEqPh.getValue();
         List<ImpactEquipementVirtuel> actualImpactEqV = captorImpactEqV.getValue();
         List<ImpactApplication> actualImpactApp = captorImpactApp.getValue();
-        List<ImpactReseau> actualImpactReseau = captorImpactReseau.getValue();
 
         /* Check EXPECTED */
         Assertions.assertEquals(4, actualImpactEqPh.size());
         Assertions.assertEquals(4, actualImpactEqV.size());
         Assertions.assertEquals(4, actualImpactApp.size());
-        Assertions.assertEquals(4, actualImpactReseau.size());
 
         /* Check all statutIndicateur = OK */
         // Assertions.assertTrue(actualImpactEqPh.stream().allMatch(i -> "OK".equals(i.getStatutIndicateur())));
diff --git a/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/CalculReseauServiceTest.java b/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/CalculReseauServiceTest.java
deleted file mode 100644
index 836abbc1..00000000
--- a/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/CalculReseauServiceTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.mte.numecoeval.calculs.infrastructure.service.calcul;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.InjectMocks;
-import org.mockito.junit.jupiter.MockitoExtension;
-import org.mte.numecoeval.calculs.domain.model.CalculEquipementPhysique;
-
-import java.util.List;
-
-@ExtendWith(MockitoExtension.class)
-class CalculReseauServiceTest {
-
-    @InjectMocks
-    CalculReseauService calculReseauService;
-
-    private static final ObjectMapper mapper = new ObjectMapper().registerModule(new JavaTimeModule());
-
-    @Test
-    void testCalculImpactReseau_nullCases() throws JsonProcessingException {
-        Assertions.assertEquals(List.of(), calculReseauService.calculImpactReseau(null));
-
-        Assertions.assertEquals(List.of(), calculReseauService.calculImpactReseau(new CalculEquipementPhysique()));
-
-        Assertions.assertEquals(List.of(), calculReseauService.calculImpactReseau(mapper.readValue("""
-                { "equipementPhysique": {} }
-                """, CalculEquipementPhysique.class)));
-
-        Assertions.assertEquals(List.of(), calculReseauService.calculImpactReseau(mapper.readValue("""
-                {
-                    "equipementPhysique": {
-                       "goTelecharge": null
-                    }
-                }
-                """, CalculEquipementPhysique.class)));
-    }
-
-}
\ No newline at end of file
diff --git a/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/EnrichissementEquipementPhysiqueServiceTest.java b/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/EnrichissementEquipementPhysiqueServiceTest.java
index 7d7c105b..b7259e49 100644
--- a/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/EnrichissementEquipementPhysiqueServiceTest.java
+++ b/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/EnrichissementEquipementPhysiqueServiceTest.java
@@ -12,6 +12,7 @@ import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.mte.numecoeval.calculs.infrastructure.client.ReferentielClient;
+import org.mte.numecoeval.calculs.infrastructure.repository.DonneesEntreeRepository;
 import org.mte.numecoeval.calculs.infrastructure.service.enrichissement.EnrichissementEquipementPhysiqueService;
 import org.mte.numecoeval.calculs.referentiels.generated.api.model.*;
 import org.mte.numecoeval.topic.data.EquipementPhysiqueDTO;
@@ -38,6 +39,9 @@ class EnrichissementEquipementPhysiqueServiceTest {
     @Mock
     ReferentielClient referentielClient;
 
+    @Mock
+    DonneesEntreeRepository donneesEntreeRepository;
+
     @Value("${numecoeval.hypotheses.equipementPhysique}")
     private String hypothesesEquipementPhysique;
 
@@ -84,16 +88,22 @@ class EnrichissementEquipementPhysiqueServiceTest {
 
         /* MOCK REFERENTIEL : Etapes */
         Mockito.lenient().when(referentielClient.getEtapes()).thenReturn(Arrays.asList(mapper.readValue("""
-                [{ "code": "UTILISATION", "libelle": "Using" }]
+                [
+                  { "code": "FABRICATION", "libelle": "Manufacturing" },
+                  { "code": "DISTRIBUTION", "libelle": "Transportation" },
+                  { "code": "UTILISATION", "libelle": "Using" },
+                  { "code": "FIN_DE_VIE", "libelle": "End of Life" }
+                ]
                 """, EtapeDTO[].class)));
 
         /* MOCK REFERENTIEL : Criteres */
         Mockito.lenient().when(referentielClient.getCriteres()).thenReturn(Arrays.asList(mapper.readValue("""
-                [{
-                  "nomCritere": "Climate change",
-                  "unite": "kg CO2 eq",
-                  "description": "Greenhouse gases (GHG)"
-                }]
+                [
+                  { "nomCritere": "Climate change" },
+                  { "nomCritere": "Particulate matter and respiratory inorganics" },
+                  { "nomCritere": "Ionising radiation" },
+                  { "nomCritere": "Acidification" }
+                ]
                 """, CritereDTO[].class)));
 
         /* MOCK REFERENTIEL : Hypothese */
@@ -105,18 +115,15 @@ class EnrichissementEquipementPhysiqueServiceTest {
                 }
                 """, HypotheseDTO.class));
 
-        /* MOCK REFERENTIEL : ImpactReseau */
-        Mockito.lenient().when(referentielClient.getImpactReseau(any(), any(), any())).thenReturn(new ImpactReseauDTO());
 
-        /* MOCK REFERENTIEL : MixElectrique */
-        var mixFr = new MixElectriqueDTO();
-        mixFr.setPays("FR");
-        Mockito.lenient().when(referentielClient.getMixElectrique("France", "Climate change")).thenReturn(mixFr);
-        Mockito.lenient().when(referentielClient.getMixElectrique(null, "Climate change")).thenReturn(null);
+        var mixFr = new FacteurCaracterisationDTO();
+        mixFr.setLocalisation("FR");
+        Mockito.lenient().when(referentielClient.getMixElectriqueFromFacteurCaracterisation("Climate change", "France")).thenReturn(mixFr);
+        Mockito.lenient().when(referentielClient.getMixElectriqueFromFacteurCaracterisation("Climate change", null)).thenReturn(null);
     }
 
     @Test
-    void testServiceEnrichissementEquipementPhysqique_null() {
+    void testServiceEnrichissementEquipementPhysique_null() {
         Assertions.assertNull(enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(null));
     }
 
@@ -131,50 +138,81 @@ class EnrichissementEquipementPhysiqueServiceTest {
                 }
                 """, CorrespondanceRefEquipementDTO.class));
 
-        /* MOCK REFERENTIEL : ImpactEquipement */
-        var impactEquipementDTO = new ImpactEquipementDTO();
-        impactEquipementDTO.setValeur(1.1);
+        /* MOCK REFERENTIEL : FacteurCaracterisation */
+        var fcDTO = new FacteurCaracterisationDTO();
+        fcDTO.setValeur(1.1);
 
-        Mockito.when(referentielClient.getImpactEquipement(eq("cible"), any(), any())).thenReturn(impactEquipementDTO);
+        Mockito.when(referentielClient.getFacteurCaracterisationByCritereAndEtapeAndNom(any(), any(), eq("cible"))).thenReturn(fcDTO);
 
         var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
 
-        Assertions.assertEquals(1, actual.getEtapes().size());
-        Assertions.assertEquals(1, actual.getCriteres().size());
+        Assertions.assertEquals(4, actual.getEtapes().size());
+        Assertions.assertEquals(4, actual.getCriteres().size());
         Assertions.assertEquals(4, actual.getHypotheses().size());
-        Assertions.assertEquals(1, actual.getMixElectriques().size());
-        Assertions.assertEquals("FR", actual.getMixElectriques().get(0).getPays());
-        Assertions.assertEquals(1.1, actual.getImpactsEquipement().get(0).getValeur());
+        Assertions.assertEquals(17, actual.getFacteurCaracterisations().size());
+        Assertions.assertEquals(1.1, actual.getFacteurCaracterisations().getFirst().getValeur());
         Assertions.assertEquals("HAUTE", actual.getEquipementPhysique().getQualite());
     }
 
-
     @Test
     void testServiceEnrichissementEquipementPhysique_typeEquipement() throws JsonProcessingException {
 
         /* MOCK REFERENTIEL : CorrespondanceRefEquipement */
-        Mockito.when(referentielClient.getTypeEquipement("Server")).thenReturn(mapper.readValue("""
+        Mockito.when(referentielClient.getTypeItem("Server")).thenReturn(mapper.readValue("""
                 {
-                  "refEquipementParDefaut": "default-ref-server"
+                  "refItemParDefaut": "default-ref-server"
                 }
-                """, TypeEquipementDTO.class));
-
-        /* MOCK REFERENTIEL : ImpactEquipement */
-        var impactEquipementDTO = new ImpactEquipementDTO();
-        impactEquipementDTO.setValeur(2.2);
+                """, TypeItemDTO.class));
 
-        equipementPhysiqueDTO.setModele(null);
+        /* MOCK REFERENTIEL : FacteurCaracterisation */
+        var fcDTO = new FacteurCaracterisationDTO();
+        fcDTO.setValeur(2.2);
 
-        Mockito.when(referentielClient.getImpactEquipement(eq("default-ref-server"), any(), any())).thenReturn(impactEquipementDTO);
+        Mockito.when(referentielClient.getFacteurCaracterisationByCritereAndEtapeAndNom(any(), any(), eq("default-ref-server"))).thenReturn(fcDTO);
 
         var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
 
-        Assertions.assertEquals(1, actual.getEtapes().size());
-        Assertions.assertEquals(1, actual.getCriteres().size());
+        Assertions.assertEquals(4, actual.getEtapes().size());
+        Assertions.assertEquals(4, actual.getCriteres().size());
         Assertions.assertEquals(4, actual.getHypotheses().size());
-        Assertions.assertEquals(1, actual.getMixElectriques().size());
-        Assertions.assertEquals("FR", actual.getMixElectriques().get(0).getPays());
-        Assertions.assertEquals(2.2, actual.getImpactsEquipement().get(0).getValeur());
+        Assertions.assertEquals(17, actual.getFacteurCaracterisations().size());
+        Assertions.assertEquals(2.2, actual.getFacteurCaracterisations().getFirst().getValeur());
         Assertions.assertEquals("HAUTE", actual.getEquipementPhysique().getQualite());
     }
+
+    @Test
+    void testServiceEnrichissementEquipementPhysique_filterEtapes() throws JsonProcessingException {
+        Mockito.lenient().when(donneesEntreeRepository.findEtapes(any())).thenReturn("UTILISATION##FABRICATION");
+
+        var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
+
+        Assertions.assertEquals(2, actual.getEtapes().size());
+    }
+
+    @Test
+    void testServiceEnrichissementEquipementPhysique_doesNotFilterEtapesWhenDataNull() throws JsonProcessingException {
+        Mockito.lenient().when(donneesEntreeRepository.findEtapes(any())).thenReturn(null);
+
+        var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
+
+        Assertions.assertEquals(4, actual.getEtapes().size());
+    }
+
+    @Test
+    void testServiceEnrichissementEquipementPhysique_filterCriteres() throws JsonProcessingException {
+        Mockito.lenient().when(donneesEntreeRepository.findCriteres(any())).thenReturn("Climate change##Ionising radiation##Acidification");
+
+        var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
+
+        Assertions.assertEquals(3, actual.getCriteres().size());
+    }
+
+    @Test
+    void testServiceEnrichissementEquipementPhysique_doesNotFilterCriteresWhenDataNull() throws JsonProcessingException {
+        Mockito.lenient().when(donneesEntreeRepository.findCriteres(any())).thenReturn(null);
+
+        var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
+
+        Assertions.assertEquals(4, actual.getCriteres().size());
+    }
 }
diff --git a/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/EnrichissementOperationNonITServiceTest.java b/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/EnrichissementOperationNonITServiceTest.java
index 55f4b387..f9042c30 100644
--- a/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/EnrichissementOperationNonITServiceTest.java
+++ b/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/infrastructure/service/calcul/EnrichissementOperationNonITServiceTest.java
@@ -12,6 +12,7 @@ import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.mte.numecoeval.calculs.infrastructure.client.ReferentielClient;
+import org.mte.numecoeval.calculs.infrastructure.repository.DonneesEntreeRepository;
 import org.mte.numecoeval.calculs.infrastructure.service.enrichissement.EnrichissementOperationNonITService;
 import org.mte.numecoeval.calculs.referentiels.generated.api.model.*;
 import org.mte.numecoeval.topic.data.OperationNonITDTO;
@@ -24,6 +25,7 @@ import org.springframework.test.util.ReflectionTestUtils;
 import java.util.Arrays;
 
 import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.mockito.ArgumentMatchers.any;
 
 @ExtendWith({MockitoExtension.class, SpringExtension.class})
 @ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class)
@@ -36,6 +38,8 @@ class EnrichissementOperationNonITServiceTest {
 
     @Mock
     ReferentielClient referentielClient;
+    @Mock
+    DonneesEntreeRepository donneesEntreeRepository;
 
     @Value("${numecoeval.hypotheses.operationNonIt}")
     private String hypothesesOperationNonIt;
@@ -125,6 +129,33 @@ class EnrichissementOperationNonITServiceTest {
                 """, FacteurCaracterisationDTO.class));
     }
 
+    void initMocksEtapesAndCriteres() throws JsonProcessingException {
+        /* MOCK REFERENTIEL : Etapes */
+        Mockito.lenient().when(referentielClient.getEtapes()).thenReturn(Arrays.asList(mapper.readValue("""
+                [{ "code": "FABRICATION", "libelle": "Manufacturing" },
+                 { "code": "DISTRIBUTION", "libelle": "Transportation" },
+                 { "code": "UTILISATION", "libelle": "Using" },
+                 { "code": "FIN_DE_VIE", "libelle": "End of Life" }]
+                """, EtapeDTO[].class)));
+
+        Mockito.lenient().when(referentielClient.getCriteres()).thenReturn(Arrays.asList(mapper.readValue("""
+                [{
+                  "nomCritere": "Climate change",
+                  "unite": "kg CO2 eq",
+                  "description": "Greenhouse gases (GHG)"
+                },
+                {
+                  "nomCritere": "Particulate matter and respiratory inorganics"
+                },
+                {
+                  "nomCritere": "Ionising radiation"
+                },
+                {
+                  "nomCritere": "Acidification"
+                }]
+                """, CritereDTO[].class)));
+    }
+
     @Test
     void testServiceEnrichissementOperationNonIT_null() {
         assertNull(enrichissementOperationNonITService.serviceEnrichissementOperationNonIT(null));
@@ -150,4 +181,44 @@ class EnrichissementOperationNonITServiceTest {
         Assertions.assertEquals("BASSE", actual.getOperationNonIT().getQualite());
 
     }
+
+    @Test
+    void testServiceEnrichissementEquipementPhysique_filterEtapes() throws JsonProcessingException {
+        initMocksEtapesAndCriteres();
+        Mockito.lenient().when(donneesEntreeRepository.findEtapes(any())).thenReturn("UTILISATION##FABRICATION");
+
+        var actual = enrichissementOperationNonITService.serviceEnrichissementOperationNonIT(operationNonITDTO);
+
+        Assertions.assertEquals(2, actual.getEtapes().size());
+    }
+
+    @Test
+    void testServiceEnrichissementEquipementPhysique_doesNotFilterEtapesWhenDataNull() throws JsonProcessingException {
+        initMocksEtapesAndCriteres();
+        Mockito.lenient().when(donneesEntreeRepository.findEtapes(any())).thenReturn(null);
+
+        var actual = enrichissementOperationNonITService.serviceEnrichissementOperationNonIT(operationNonITDTO);
+
+        Assertions.assertEquals(4, actual.getEtapes().size());
+    }
+
+    @Test
+    void testServiceEnrichissementEquipementPhysique_filterCriteres() throws JsonProcessingException {
+        initMocksEtapesAndCriteres();
+        Mockito.lenient().when(donneesEntreeRepository.findCriteres(any())).thenReturn("Climate change##Ionising radiation##Acidification");
+
+        var actual = enrichissementOperationNonITService.serviceEnrichissementOperationNonIT(operationNonITDTO);
+
+        Assertions.assertEquals(3, actual.getCriteres().size());
+    }
+
+    @Test
+    void testServiceEnrichissementEquipementPhysique_doesNotFilterCriteresWhenDataNull() throws JsonProcessingException {
+        initMocksEtapesAndCriteres();
+        Mockito.lenient().when(donneesEntreeRepository.findCriteres(any())).thenReturn(null);
+
+        var actual = enrichissementOperationNonITService.serviceEnrichissementOperationNonIT(operationNonITDTO);
+
+        Assertions.assertEquals(4, actual.getCriteres().size());
+    }
 }
diff --git a/services/api-event-calculs/src/test/resources/input/equipementPhysique.json b/services/api-event-calculs/src/test/resources/input/equipementPhysique.json
index 30d28311..eeb19664 100644
--- a/services/api-event-calculs/src/test/resources/input/equipementPhysique.json
+++ b/services/api-event-calculs/src/test/resources/input/equipementPhysique.json
@@ -61,131 +61,88 @@
     },
     "stockageTotalVirtuel": null
   },
-  "typeEquipement": {
+  "typeItem": {
     "type": "Server",
     "serveur": true,
     "commentaire": "Lifetime par defaut Sopra Steria",
     "dureeVieDefaut": 7.0,
     "source": "",
-    "refEquipementParDefaut": "blade-server--28"
+    "refItemParDefaut": "blade-server--28"
   },
-  "mixElectriques": [
-    null,
+  "facteurCaracterisations": [
     {
-      "pays": "France",
-      "raccourcisAnglais": "FR",
+      "nom": "Electricty-mix FR",
+      "localisation": "France",
+      "categorie": "electricity-mix",
       "critere": "Climate change",
       "valeur": 0.0813225,
       "source": "Base IMPACTS®2.02"
     },
-    null,
     {
-      "pays": "France",
-      "raccourcisAnglais": "FR",
+      "nom": "Electricty-mix FR",
+      "localisation": "France",
+      "categorie": "electricity-mix",
       "critere": "Particulate matter and respiratory inorganics",
       "valeur": 4.15844e-9,
       "source": "Base IMPACTS®2.02"
     },
-    null,
     {
-      "pays": "France",
-      "raccourcisAnglais": "FR",
+      "nom": "Electricty-mix FR",
+      "localisation": "France",
+      "categorie": "electricity-mix",
       "critere": "Ionising radiation",
       "valeur": 3.23443,
       "source": "Base IMPACTS®2.02"
     },
-    null,
     {
-      "pays": "France",
-      "raccourcisAnglais": "FR",
+      "nom": "Electricty-mix FR",
+      "localisation": "France",
+      "categorie": "electricity-mix",
       "critere": "Acidification",
       "valeur": 0.000209809,
       "source": "Base IMPACTS®2.02"
     },
-    null,
     {
-      "pays": "France",
-      "raccourcisAnglais": "FR",
+      "nom": "Electricty-mix FR",
+      "localisation": "France",
+      "categorie": "electricity-mix",
       "critere": "Resource use (minerals and metals)",
       "valeur": 4.85798e-8,
       "source": "Base IMPACTS®2.02"
-    }
-  ],
-  "impactsReseau": [
-    {
-      "refReseau": "impactReseauMobileMoyen",
-      "etapeACV": "FABRICATION",
-      "critere": "Climate change",
-      "unite": null,
-      "source": "Test V1.00",
-      "valeur": 518.28,
-      "consoElecMoyenne": null
-    },
-    {
-      "refReseau": "impactReseauMobileMoyen",
-      "etapeACV": "UTILISATION",
-      "critere": "Climate change",
-      "unite": null,
-      "source": "Test V1.00",
-      "valeur": 76.28,
-      "consoElecMoyenne": null
-    },
-    {
-      "refReseau": "impactReseauMobileMoyen",
-      "etapeACV": "FABRICATION",
-      "critere": "Particulate matter and respiratory inorganics",
-      "unite": null,
-      "source": "Test V1.00",
-      "valeur": 148.28,
-      "consoElecMoyenne": null
     },
     {
-      "refReseau": "impactReseauMobileMoyen",
-      "etapeACV": "UTILISATION",
-      "critere": "Particulate matter and respiratory inorganics",
-      "unite": null,
-      "source": "Test V1.00",
-      "valeur": 18.8,
-      "consoElecMoyenne": null
-    }
-  ],
-  "impactsEquipement": [
-    {
-      "refEquipement": "blade-server--28",
+      "nom": "blade-server--28",
       "etape": "FABRICATION",
       "critere": "Climate change",
+      "unite": null,
       "source": "test",
-      "type": "",
       "valeur": 2935.5392,
       "consoElecMoyenne": 3504.0,
       "description": "Blade server  2 processor high-end  1 SSD: 1024 GB each  0 HDD  16 RAM, 16 GB each  0 GPU"
     },
     {
-      "refEquipement": "blade-server--28",
+      "nom": "blade-server--28",
       "etape": "UTILISATION",
       "critere": "Climate change",
       "source": "test",
-      "type": "",
       "valeur": 234.62784,
       "consoElecMoyenne": 3504.0,
       "description": "Blade server  2 processor high-end  1 SSD: 1024 GB each  0 HDD  16 RAM, 16 GB each  0 GPU"
     },
     {
-      "refEquipement": "blade-server--28",
+      "nom": "blade-server--28",
       "etape": "FABRICATION",
       "critere": "Particulate matter and respiratory inorganics",
       "source": "test",
-      "type": "",
       "valeur": 0.0000917808,
       "consoElecMoyenne": 3504.0,
       "description": "Blade server  2 processor high-end  1 SSD: 1024 GB each  0 HDD  16 RAM, 16 GB each  0 GPU"
     },
     {
-      "refEquipement": "blade-server--28",
+      "nom": "blade-server--28",
       "etape": "UTILISATION",
       "critere": "Particulate matter and respiratory inorganics",
       "source": "test",
-      "type": "",
       "valeur": 0.000052475904,
       "consoElecMoyenne": 3504.0,
       "description": "Blade server  2 processor high-end  1 SSD: 1024 GB each  0 HDD  16 RAM, 16 GB each  0 GPU"
diff --git a/services/api-event-donneesentrees/pom.xml b/services/api-event-donneesentrees/pom.xml
index bd8ce48c..328eb5cf 100644
--- a/services/api-event-donneesentrees/pom.xml
+++ b/services/api-event-donneesentrees/pom.xml
@@ -5,12 +5,12 @@
     <parent>
         <groupId>org.mte.numecoeval</groupId>
         <artifactId>core</artifactId>
-        <version>2.0.1</version>
+        <version>2.1.0-SNAPSHOT</version>
         <relativePath/> <!-- lookup parent from repository -->
     </parent>
     <artifactId>api-event-donneesEntrees</artifactId>
     <name>api-event-donneesEntrees</name>
-    <version>2.0.1</version>
+    <version>2.1.0-SNAPSHOT</version>
     <description>api-event-donneesEntrees</description>
 
     <repositories>
diff --git a/services/api-expositiondonneesentrees/pom.xml b/services/api-expositiondonneesentrees/pom.xml
index 9cae4c76..4e194233 100644
--- a/services/api-expositiondonneesentrees/pom.xml
+++ b/services/api-expositiondonneesentrees/pom.xml
@@ -5,11 +5,11 @@
     <parent>
         <groupId>org.mte.numecoeval</groupId>
         <artifactId>core</artifactId>
-        <version>2.0.1</version>
+        <version>2.1.0-SNAPSHOT</version>
         <relativePath/> <!-- lookup parent from repository -->
     </parent>
     <artifactId>api-expositiondonneesentrees</artifactId>
-    <version>2.0.1</version>
+    <version>2.1.0-SNAPSHOT</version>
     <name>api-expositiondonneesentrees</name>
     <description>API Exposition des données d'entrées - Exposition par API pour injecter des données d'entrées
     </description>
diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/model/DemandeCalcul.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/model/DemandeCalcul.java
index 97babf49..f8c83751 100644
--- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/model/DemandeCalcul.java
+++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/model/DemandeCalcul.java
@@ -7,6 +7,8 @@ import lombok.Setter;
 import lombok.experimental.Accessors;
 import lombok.experimental.SuperBuilder;
 
+import java.util.List;
+
 @Getter
 @Setter
 @EqualsAndHashCode
@@ -17,4 +19,6 @@ public class DemandeCalcul {
     String nomLot;
     String dateLot;
     String nomOrganisation;
+    List<String> etapes;
+    List<String> criteres;
 }
diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/ImportDonneesEntreePort.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/ImportDonneesEntreePort.java
index b53d99b3..1425bd95 100644
--- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/ImportDonneesEntreePort.java
+++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/ImportDonneesEntreePort.java
@@ -14,7 +14,7 @@ import java.util.List;
 @SuppressWarnings("java:S107")
 // Obligatoire à cause de la gestion des fichiers différents au niveau contrat d'interface
 public interface ImportDonneesEntreePort {
-    String EQUIPEMENT_PHYSIQUE_CSV_HEADER = "modele;quantite;nomEquipementPhysique;type;statut;paysDUtilisation;utilisateur;nbCoeur;nomCourtDatacenter;goTelecharge;nbJourUtiliseAn;consoElecAnnuelle";
+    String EQUIPEMENT_PHYSIQUE_CSV_HEADER = "modele;quantite;nomEquipementPhysique;type;statut;paysDUtilisation;utilisateur;nbCoeur;nomCourtDatacenter;consoElecAnnuelle";
     String CSV_SEPARATOR = ";";
     String DATA_CENTER_CSV_HEADER = "nomCourtDatacenter;nomLongDatacenter;pue;localisation";
     String EQUIPEMENT_VIRTUEL_CSV_HEADER = "nomEquipementPhysique;vCPU;cluster";
diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/impl/ImportDonneesEntreePortImpl.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/impl/ImportDonneesEntreePortImpl.java
index cdb09811..9c2275c2 100644
--- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/impl/ImportDonneesEntreePortImpl.java
+++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/impl/ImportDonneesEntreePortImpl.java
@@ -12,7 +12,6 @@ import org.mte.numecoeval.expositiondonneesentrees.generated.api.model.StatutTra
 import org.mte.numecoeval.expositiondonneesentrees.infrastructure.helper.CSVHelper;
 import org.mte.numecoeval.expositiondonneesentrees.infrastructure.service.DefaultValueService;
 import org.mte.numecoeval.expositiondonneesentrees.infrastructure.service.ErrorManagementService;
-import org.mte.numecoeval.expositiondonneesentrees.referentiels.generated.api.model.TypeEquipementDTO;
 import org.mte.numecoeval.expositiondonneesentrees.referentiels.generated.api.model.TypeItemDTO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -192,7 +191,7 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort {
         RapportImport rapportImport = new RapportImport();
         rapportImport.setFichier(csvEquipementPhysique.getOriginalFilename());
         rapportImport.setType("equipement_physique");
-        List<TypeEquipementDTO> typesEquipement = referentielServicePort.getAllTypesEquipement();
+        List<TypeItemDTO> typesItem = referentielServicePort.getAllTypesItem();
         Set<String> avertissements = new HashSet<>();
 
         try (Reader reader = new InputStreamReader(csvEquipementPhysique.getInputStream())) {
@@ -209,7 +208,7 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort {
                 String nomEquipementPhysique = CSVHelper.safeString(csvRecord, LABEL_NOM_EQUIPEMENT_PHYSIQUE, "equipement");
                 String typeEquipement = csvRecord.get("type");
                 String checkNomTypeItem = errorManagementService.checkNomTypeItem(typeEquipement, "L'équipement physique", nomEquipementPhysique);
-                var refTypeEquipementOpt = typesEquipement.stream()
+                var refTypeEquipementOpt = typesItem.stream()
                         .filter(refType -> refType.getType().equals(typeEquipement))
                         .findFirst();
 
@@ -271,7 +270,7 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort {
                             .qualite(qualite)
                             .build();
 
-                    var erreurs = errorManagementService.checkEquipementPhysique(equipementToAdd, refTypeEquipementOpt.get().getRefEquipementParDefaut());
+                    var erreurs = errorManagementService.checkEquipementPhysique(equipementToAdd, refTypeEquipementOpt.get().getRefItemParDefaut());
                     rapportImport.getErreurs().addAll(erreurs.getKey());
                     avertissements.addAll(erreurs.getValue());
                     defaultValueService.setEquipementValeurDefaut(equipementToAdd);
diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/output/ReferentielServicePort.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/output/ReferentielServicePort.java
index 44eb82e2..2cd2bfea 100644
--- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/output/ReferentielServicePort.java
+++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/output/ReferentielServicePort.java
@@ -7,14 +7,10 @@ import java.util.List;
 public interface ReferentielServicePort {
     boolean hasMixElec(String pays);
 
-    List<TypeEquipementDTO> getAllTypesEquipement();
-
     List<TypeItemDTO> getAllTypesItem();
 
     CorrespondanceRefEquipementDTO getCorrespondance(String modele);
 
-    ImpactEquipementDTO getImpactEquipement(String refEquipement, String critere, String etape);
-
     FacteurCaracterisationDTO getFacteurCaracterisation(String critere, String etape, String refItem);
 
     List<EtapeDTO> getAllEtapes();
diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/adapters/ReferentielRestClient.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/adapters/ReferentielRestClient.java
index 277f1e5d..ac417db6 100644
--- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/adapters/ReferentielRestClient.java
+++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/adapters/ReferentielRestClient.java
@@ -6,6 +6,7 @@ import org.mte.numecoeval.expositiondonneesentrees.domain.exception.RestExceptio
 import org.mte.numecoeval.expositiondonneesentrees.domain.ports.output.ReferentielServicePort;
 import org.mte.numecoeval.expositiondonneesentrees.referentiels.generated.api.client.InterneNumEcoEvalApi;
 import org.mte.numecoeval.expositiondonneesentrees.referentiels.generated.api.model.*;
+import org.mte.numecoeval.expositiondonneesentrees.utils.Constants;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
@@ -23,24 +24,17 @@ public class ReferentielRestClient implements ReferentielServicePort {
     @Cacheable("hasMixElec")
     @Override
     public boolean hasMixElec(String pays) {
-
         boolean result = false;
         try {
-            var res = interneNumEcoEvalApi.getMixElectriqueParPaysWithHttpInfo(pays).block();
-            if (res == null || res.getBody() == null) return result;
-            return !res.getBody().isEmpty();
+            var res = interneNumEcoEvalApi.getFacteurCaracterisation(null, null, null, pays, Constants.ELECTRICITY_MIX_CATEGORY).blockFirst();
+            if (res == null) return result;
+            return true;
         } catch (Exception e) {
-            log.error("Une erreur est survenue lors de l'appel au référentiel mix electrique", e);
+            log.error("Une erreur est survenue lors de l'appel au référentiel facteurcaracterisation", e);
         }
         return result;
     }
 
-    @Override
-    public List<TypeEquipementDTO> getAllTypesEquipement() {
-        var result = interneNumEcoEvalApi.getAllTypeEquipementWithHttpInfo().block();
-        return result.getBody();
-    }
-
     @Override
     public List<TypeItemDTO> getAllTypesItem() {
         var result = interneNumEcoEvalApi.getAllTypeItemWithHttpInfo().block();
@@ -60,28 +54,9 @@ public class ReferentielRestClient implements ReferentielServicePort {
         }
     }
 
-    @Cacheable("ImpactEquipement")
-    @Override
-    public ImpactEquipementDTO getImpactEquipement(String refEquipement, String critere, String etape) {
-
-        try {
-            var res = interneNumEcoEvalApi.getImpactEquipement(refEquipement, critere, etape).block();
-            if (res != null) {
-                return res;
-            }
-        } catch (WebClientResponseException e) {
-            if (e.getStatusCode() != HttpStatus.NOT_FOUND) {
-                log.error("Une erreur est survenue lors de l'appel au référentiel impactequipement", e);
-                return null;
-            }
-        }
-        return null;
-    }
-
     @Cacheable("FacteurCaracterisation")
     @Override
     public FacteurCaracterisationDTO getFacteurCaracterisation(String critere, String etape, String refEquipement) {
-
         try {
             var res = interneNumEcoEvalApi.getFacteurCaracterisation(critere, etape, refEquipement, null, null).blockFirst();
             if (res != null) {
diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/controller/CalculController.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/controller/CalculController.java
index aea43dca..2a40f112 100644
--- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/controller/CalculController.java
+++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/controller/CalculController.java
@@ -7,8 +7,8 @@ import org.mte.numecoeval.expositiondonneesentrees.domain.ports.input.Soumission
 import org.mte.numecoeval.expositiondonneesentrees.domain.ports.input.StatutPourCalculPort;
 import org.mte.numecoeval.expositiondonneesentrees.generated.api.model.*;
 import org.mte.numecoeval.expositiondonneesentrees.generated.api.server.CalculsApi;
-import org.mte.numecoeval.expositiondonneesentrees.infrastructure.jpa.repository.DonneesEntreesRepository;
 import org.mte.numecoeval.expositiondonneesentrees.infrastructure.mapper.CalculRestMapper;
+import org.mte.numecoeval.expositiondonneesentrees.infrastructure.service.DonneesEntreesService;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.RestController;
@@ -18,6 +18,8 @@ import org.springframework.web.bind.annotation.RestController;
 @RequiredArgsConstructor
 public class CalculController implements CalculsApi {
 
+    public static final String TYPE_CALCUL_REJEU = "rejeu";
+    public static final String TYPE_CALCUL_SOUMISSION = "soumission";
     @Value("${regle-par-defaut-duree-usage}")
     private String defaultDureeUsage;
 
@@ -27,8 +29,7 @@ public class CalculController implements CalculsApi {
 
     final SoumissionCalculSyncPort soumissionCalculSyncPort;
     final StatutPourCalculPort statutPourCalculPort;
-
-    final DonneesEntreesRepository donneesEntreesRepository;
+    final DonneesEntreesService donneesEntreesService;
 
     @Override
     public ResponseEntity<StatutCalculRest> statutPourCalcul(String nomLot, String nomOrganisation) {
@@ -44,10 +45,10 @@ public class CalculController implements CalculsApi {
         if (DureeUsage.REEL != modeDureeUsage) {
             modeDureeUsage = DureeUsage.FIXE;
         }
-
-        log.info("Soumission de calcul pour nom_lot: {}, dureeUsage: {}, mode: {}", demandeCalculRest.getNomLot(), modeDureeUsage, mode);
+        log.info("Soumission de calcul pour nom_lot: {}, dureeUsage: {}, mode: {}, etapes:{}, criteres:{}", demandeCalculRest.getNomLot(), modeDureeUsage, mode, demandeCalculRest.getEtapes(), demandeCalculRest.getCriteres());
         var demandeCalcul = calculRestMapper.toDomain(demandeCalculRest);
-        donneesEntreesRepository.updateDonneesEntreesDureeUsage(String.valueOf(modeDureeUsage), demandeCalculRest.getNomLot());
+
+        donneesEntreesService.manageDonneesEntrees(demandeCalculRest.getNomLot(), dureeUsage, demandeCalculRest.getEtapes(), demandeCalculRest.getCriteres(), TYPE_CALCUL_SOUMISSION);
 
         var soumission = ModeRest.ASYNC == mode ?
                 soumissionCalculPort.soumissionCalcul(demandeCalcul) :
@@ -56,11 +57,14 @@ public class CalculController implements CalculsApi {
         return ResponseEntity.ok(calculRestMapper.toRest(soumission));
     }
 
+
     @Override
     public ResponseEntity<RapportDemandeCalculRest> rejeuCalcul(DemandeCalculRest demandeCalculRest) {
-        log.info("Rejeu de calcul, nom_lot: {}", demandeCalculRest.getNomLot());
+        log.info("Rejeu de calcul, nom_lot: {}, etapes:{}, criteres:{}", demandeCalculRest.getNomLot(), demandeCalculRest.getEtapes(), demandeCalculRest.getCriteres());
         var demandeCalcul = calculRestMapper.toDomain(demandeCalculRest);
 
+        donneesEntreesService.manageDonneesEntrees(demandeCalculRest.getNomLot(), null, demandeCalculRest.getEtapes(), demandeCalculRest.getCriteres(), TYPE_CALCUL_REJEU);
+
         var soumission = soumissionCalculPort.rejeuCalcul(demandeCalcul);
 
         var responseBody = calculRestMapper.toRest(soumission);
diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/jpa/entity/DonneesEntreesEntity.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/jpa/entity/DonneesEntreesEntity.java
index bd22d5dc..cddc63a2 100644
--- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/jpa/entity/DonneesEntreesEntity.java
+++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/jpa/entity/DonneesEntreesEntity.java
@@ -54,4 +54,16 @@ public class DonneesEntreesEntity extends AbstractEntreeEntity {
      */
     private String dureeUsage;
 
+    /**
+     * Liste des étapes pour lesquelles on veut calculer les impacts
+     * séparés par ##
+     */
+    private String etapes;
+    /**
+     * Liste des critères pour lesquels on veut calculer les impacts
+     * séparés par ##
+     */
+    private String criteres;
+
+
 }
diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/jpa/repository/DonneesEntreesRepository.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/jpa/repository/DonneesEntreesRepository.java
index 053371f2..12b6c978 100644
--- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/jpa/repository/DonneesEntreesRepository.java
+++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/jpa/repository/DonneesEntreesRepository.java
@@ -2,23 +2,11 @@ package org.mte.numecoeval.expositiondonneesentrees.infrastructure.jpa.repositor
 
 import org.mte.numecoeval.expositiondonneesentrees.infrastructure.jpa.entity.DonneesEntreesEntity;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
-import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
 
 @Repository
 public interface DonneesEntreesRepository extends JpaRepository<DonneesEntreesEntity, Long> {
-    @Transactional
-    @Modifying
-    @Query("""
-              UPDATE DonneesEntreesEntity dee
-              SET dee.dureeUsage = :dureeUsage
-              WHERE dee.nomLot = :nomLot
-            """)
-    int updateDonneesEntreesDureeUsage(
-            @Param("dureeUsage") String dureeUsage,
-            @Param("nomLot") String nomLot
-    );
+    List<DonneesEntreesEntity> findByNomLot(String nomLot);
 }
diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DonneesEntreesService.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DonneesEntreesService.java
new file mode 100644
index 00000000..a5f0ca4f
--- /dev/null
+++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DonneesEntreesService.java
@@ -0,0 +1,67 @@
+package org.mte.numecoeval.expositiondonneesentrees.infrastructure.service;
+
+import lombok.RequiredArgsConstructor;
+import org.mte.numecoeval.expositiondonneesentrees.domain.exception.ValidationException;
+import org.mte.numecoeval.expositiondonneesentrees.generated.api.model.DureeUsage;
+import org.mte.numecoeval.expositiondonneesentrees.infrastructure.adapters.ReferentielRestClient;
+import org.mte.numecoeval.expositiondonneesentrees.infrastructure.jpa.entity.DonneesEntreesEntity;
+import org.mte.numecoeval.expositiondonneesentrees.infrastructure.jpa.repository.DonneesEntreesRepository;
+import org.mte.numecoeval.expositiondonneesentrees.referentiels.generated.api.model.CritereDTO;
+import org.mte.numecoeval.expositiondonneesentrees.referentiels.generated.api.model.EtapeDTO;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.HashSet;
+import java.util.List;
+
+import static org.mte.numecoeval.expositiondonneesentrees.infrastructure.controller.CalculController.TYPE_CALCUL_SOUMISSION;
+
+@Service
+@RequiredArgsConstructor
+public class DonneesEntreesService {
+
+    @Value("${regle-par-defaut-duree-usage}")
+    private String defaultDureeUsage;
+
+    final ReferentielRestClient referentielRestClient;
+    final DonneesEntreesRepository donneesEntreesRepository;
+
+    public void manageDonneesEntrees(String nomLot, DureeUsage modeDureeUsage, List<String> etapes, List<String> criteres, String typeCalcul) {
+        var donneeEntreeEntity = donneesEntreesRepository.findByNomLot(nomLot).getFirst();
+        donneeEntreeEntity = enrichi(donneeEntreeEntity, modeDureeUsage, etapes, criteres, typeCalcul);
+        donneesEntreesRepository.save(donneeEntreeEntity);
+    }
+
+    private DonneesEntreesEntity enrichi(DonneesEntreesEntity donneeEntreeEntity, DureeUsage dureeUsage, List<String> etapes, List<String> criteres, String typeCalcul) {
+        if (typeCalcul.equals(TYPE_CALCUL_SOUMISSION)) {
+            var modeDureeUsage = dureeUsage == null ? DureeUsage.fromValue(defaultDureeUsage) : dureeUsage;
+            if (DureeUsage.REEL != modeDureeUsage) {
+                modeDureeUsage = DureeUsage.FIXE;
+            }
+            donneeEntreeEntity.setDureeUsage(String.valueOf(modeDureeUsage));
+        }
+        if (etapes != null) {
+            var allEtapes = referentielRestClient.getAllEtapes().stream().map(EtapeDTO::getCode).toList();
+            if (!new HashSet<>(allEtapes).containsAll(etapes)) {
+                throw new ValidationException(
+                        "La liste d'étapes n'est pas valide, elle doit être comprise dans: " + allEtapes
+                );
+            }
+            donneeEntreeEntity.setEtapes(String.join("##", etapes));
+        } else {
+            donneeEntreeEntity.setEtapes(null);
+        }
+        if (criteres != null) {
+            var allCriteres = referentielRestClient.getAllCriteres().stream().map(CritereDTO::getNomCritere).toList();
+            if (!new HashSet<>(allCriteres).containsAll(criteres)) {
+                throw new ValidationException(
+                        "La liste de critères n'est pas valide, elle doit être comprise dans: " + allCriteres
+                );
+            }
+            donneeEntreeEntity.setCriteres(String.join("##", criteres));
+        } else {
+            donneeEntreeEntity.setCriteres(null);
+        }
+        return donneeEntreeEntity;
+    }
+}
diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/ErrorManagementService.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/ErrorManagementService.java
index 8ed1eabf..f803a3fd 100644
--- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/ErrorManagementService.java
+++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/ErrorManagementService.java
@@ -123,7 +123,7 @@ public class ErrorManagementService {
         var criteres = referentielServicePort.getAllCriteres();
         for (var critere : criteres) {
             for (var etape : etapes) {
-                var impact = referentielServicePort.getImpactEquipement(refEquipement, critere.getNomCritere(), etape.getCode());
+                var impact = referentielServicePort.getFacteurCaracterisation(critere.getNomCritere(), etape.getCode(), refEquipement);
                 if (impact == null) {
                     avertissements.add(messageProperties.getMessages().get("ITEM_IMPACT_INCONNU").formatted(refEquipement, etape.getCode(), critere.getNomCritere()));
                 }
diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/utils/Constants.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/utils/Constants.java
index ca102130..17909eaf 100644
--- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/utils/Constants.java
+++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/utils/Constants.java
@@ -4,5 +4,6 @@ import java.util.List;
 
 public class Constants {
     public static final List<String> QUALITES_DONNEES = List.of("BASSE", "MOYENNE", "HAUTE");
+    public static final String ELECTRICITY_MIX_CATEGORY = "electricity-mix";
 
 }
diff --git a/services/api-expositiondonneesentrees/src/main/resources/schema.sql b/services/api-expositiondonneesentrees/src/main/resources/schema.sql
index 9f3d48f3..c5059800 100644
--- a/services/api-expositiondonneesentrees/src/main/resources/schema.sql
+++ b/services/api-expositiondonneesentrees/src/main/resources/schema.sql
@@ -1,17 +1,19 @@
 CREATE TABLE IF NOT EXISTS en_donnees_entrees
 (
-    id                        int8         NOT NULL,
-    date_update               timestamp    NULL,
-    date_creation             timestamp    NULL,
-    date_lot                  date         NULL,
-    nom_organisation          varchar(255) NULL,
-    nom_lot                   varchar(255) NULL,
-    nbr_applications          int8         NULL,
-    nbr_data_center           int8         NULL,
-    nbr_equipements_physiques int8         NULL,
-    nbr_equipements_virtuels  int8         NULL,
-    nbr_messageries           int8         NULL,
-    duree_usage               varchar(255) NULL,
+    id                        int8                NOT NULL,
+    date_update               timestamp           NULL,
+    date_creation             timestamp           NULL,
+    date_lot                  date                NULL,
+    nom_organisation          varchar(255)        NULL,
+    nom_lot                   varchar(255)        NULL,
+    nbr_applications          int8                NULL,
+    nbr_data_center           int8                NULL,
+    nbr_equipements_physiques int8                NULL,
+    nbr_equipements_virtuels  int8                NULL,
+    nbr_messageries           int8                NULL,
+    duree_usage               varchar(255)        NULL,
+    etapes                    text                NULL,
+    criteres                  text                NULL,
     CONSTRAINT en_donnees_entrees_pkey PRIMARY KEY (id)
 );
 
@@ -198,6 +200,8 @@ ALTER TABLE IF EXISTS en_equipement_physique ADD COLUMN IF NOT EXISTS duree_usag
 ALTER TABLE IF EXISTS en_equipement_physique ADD COLUMN IF NOT EXISTS duree_usage_aval float8;
 
 ALTER TABLE IF EXISTS en_donnees_entrees ADD COLUMN IF NOT EXISTS duree_usage varchar(255);
+ALTER TABLE IF EXISTS en_donnees_entrees ADD COLUMN IF NOT EXISTS etapes text;
+ALTER TABLE IF EXISTS en_donnees_entrees ADD COLUMN IF NOT EXISTS criteres text;
 
 -- Creation indexes
 -- Accelere la recuperation des donnees depuis EquipementPhysiqueIntegrationConfig.java
diff --git a/services/api-expositiondonneesentrees/src/main/resources/static/openapi.yaml b/services/api-expositiondonneesentrees/src/main/resources/static/openapi.yaml
index 4eb839bc..e395cf1d 100644
--- a/services/api-expositiondonneesentrees/src/main/resources/static/openapi.yaml
+++ b/services/api-expositiondonneesentrees/src/main/resources/static/openapi.yaml
@@ -63,6 +63,9 @@ paths:
         <li>FIXE : La méthode de calcul de la durée de vie se base sur l'attribut 'dureeUsageInterne' de l'équipement physique (méthode utilisée par défaut si le paramètre dureeUsage n'est pas renseigné). </li>
         <li>REEL : La méthode de calcul de la durée de vie se base sur l'âge réel de l'équipement physique (dateRetrait-dateAchat). </li>
         </ul>
+        Vous pouvez également lancer le calcul sur uniquement quelques critères et/ou étapes spécifiques en renseignant leurs noms dans les listes "etapes" et "criteres" dans le body de la requête. 
+        /!\ Il faut que les noms soient présents dans les tables ref_etapeacv et ref_critere (case sensitive).
+        Par défaut, si rien n'est renseigné, le calcul sera lancé sur toutes les étapes et tous les critères présents dans les tables ref_etapeacv et ref_critere.
       tags:
         - Calculs
       operationId: soumissionPourCalcul
@@ -280,6 +283,16 @@ components:
         nomLot:
           description: "Nom du lot rattaché"
           type: string
+        etapes:
+          description: "Liste des étapes pour lesquelles on veut calculer les impacts"
+          type: array
+          items:
+            type: string
+        criteres:
+          description: "Liste des critères pour lesquels on veut calculer les impacts"
+          type: array
+          items:
+            type: string
     ModeRest:
       type: string
       enum:
diff --git a/services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DonneesEntreesServiceTest.java b/services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DonneesEntreesServiceTest.java
new file mode 100644
index 00000000..76ed19eb
--- /dev/null
+++ b/services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DonneesEntreesServiceTest.java
@@ -0,0 +1,136 @@
+package org.mte.numecoeval.expositiondonneesentrees.infrastructure.service;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mte.numecoeval.expositiondonneesentrees.domain.exception.ValidationException;
+import org.mte.numecoeval.expositiondonneesentrees.generated.api.model.DureeUsage;
+import org.mte.numecoeval.expositiondonneesentrees.infrastructure.adapters.ReferentielRestClient;
+import org.mte.numecoeval.expositiondonneesentrees.infrastructure.jpa.entity.DonneesEntreesEntity;
+import org.mte.numecoeval.expositiondonneesentrees.referentiels.generated.api.model.CritereDTO;
+import org.mte.numecoeval.expositiondonneesentrees.referentiels.generated.api.model.EtapeDTO;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import java.util.Arrays;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThrows;
+import static org.mte.numecoeval.expositiondonneesentrees.infrastructure.controller.CalculController.TYPE_CALCUL_SOUMISSION;
+
+@ExtendWith({SpringExtension.class})
+@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class)
+public class DonneesEntreesServiceTest {
+    @InjectMocks
+    DonneesEntreesService donneesEntreesService;
+    @Mock
+    ReferentielRestClient referentielRestClient;
+    private static final ObjectMapper mapper = new ObjectMapper().registerModule(new JavaTimeModule());
+
+    @Value("${regle-par-defaut-duree-usage}")
+    private String defaultDureeUsage;
+
+    @BeforeEach
+    void init() throws JsonProcessingException {
+        ReflectionTestUtils.setField(donneesEntreesService, "defaultDureeUsage", defaultDureeUsage);
+
+        /* MOCK REFERENTIEL : Etapes */
+        Mockito.lenient().when(referentielRestClient.getAllEtapes()).thenReturn(Arrays.asList(mapper.readValue("""
+                [{ "code": "UTILISATION", "libelle": "Using" },
+                { "code": "FABRICATION", "libelle": "Manufacturing" },
+                { "code": "DISTRIBUTION", "libelle": "Transportation" }]
+                """, EtapeDTO[].class)));
+
+        /* MOCK REFERENTIEL : Criteres */
+        Mockito.lenient().when(referentielRestClient.getAllCriteres()).thenReturn(Arrays.asList(mapper.readValue("""
+                [{
+                  "nomCritere": "Climate change",
+                  "unite": "kg CO2 eq",
+                  "description": "Greenhouse gases (GHG)"
+                },
+                {
+                  "nomCritere": "Particulate matter and respiratory inorganics"
+                },
+                {
+                  "nomCritere": "Ionising radiation"
+                },
+                {
+                  "nomCritere": "Acidification"
+                }]
+                """, CritereDTO[].class)));
+    }
+
+    @Test
+    void enrichiDonneesEntrees_with_dureeUsageNull() {
+        DonneesEntreesEntity donneeEntreeEntity = new DonneesEntreesEntity(Long.parseLong("10000"), Long.parseLong("10"), Long.parseLong("20"), Long.parseLong("4"), Long.parseLong("4"), Long.parseLong("4"), null, null, null);
+        DonneesEntreesEntity actual = ReflectionTestUtils.invokeMethod(donneesEntreesService, "enrichi", donneeEntreeEntity, null, null, null, TYPE_CALCUL_SOUMISSION);
+        assertEquals("FIXE", actual.getDureeUsage());
+    }
+
+    @Test
+    void enrichiDonneesEntrees_with_dureeUsageFixe() {
+        DonneesEntreesEntity donneeEntreeEntity = new DonneesEntreesEntity(Long.parseLong("10000"), Long.parseLong("10"), Long.parseLong("20"), Long.parseLong("4"), Long.parseLong("4"), Long.parseLong("4"), null, null, null);
+        DonneesEntreesEntity actual = ReflectionTestUtils.invokeMethod(donneesEntreesService, "enrichi", donneeEntreeEntity, DureeUsage.valueOf("FIXE"), null, null, TYPE_CALCUL_SOUMISSION);
+        assertEquals("FIXE", actual.getDureeUsage());
+    }
+
+    @Test
+    void enrichiDonneesEntrees_with_dureeUsageReel() {
+        DonneesEntreesEntity donneeEntreeEntity = new DonneesEntreesEntity(Long.parseLong("10000"), Long.parseLong("10"), Long.parseLong("20"), Long.parseLong("4"), Long.parseLong("4"), Long.parseLong("4"), null, null, null);
+        DonneesEntreesEntity actual = ReflectionTestUtils.invokeMethod(donneesEntreesService, "enrichi", donneeEntreeEntity, DureeUsage.valueOf("REEL"), null, null, TYPE_CALCUL_SOUMISSION);
+        assertEquals("REEL", actual.getDureeUsage());
+    }
+
+    @Test
+    void enrichiDonneesEntrees_with_etapesFiltree_shouldFilter() {
+        DonneesEntreesEntity donneeEntreeEntity = new DonneesEntreesEntity(Long.parseLong("10000"), Long.parseLong("10"), Long.parseLong("20"), Long.parseLong("4"), Long.parseLong("4"), Long.parseLong("4"), null, null, null);
+        DonneesEntreesEntity actual = ReflectionTestUtils.invokeMethod(donneesEntreesService, "enrichi", donneeEntreeEntity, DureeUsage.valueOf("FIXE"), List.of("UTILISATION", "FABRICATION"), List.of(), TYPE_CALCUL_SOUMISSION);
+        assertEquals("UTILISATION##FABRICATION", actual.getEtapes());
+    }
+
+    @Test
+    void enrichiDonneesEntrees_with_etapesFiltreeNull_shouldReturnNull() {
+        DonneesEntreesEntity donneeEntreeEntity = new DonneesEntreesEntity(Long.parseLong("10000"), Long.parseLong("10"), Long.parseLong("20"), Long.parseLong("4"), Long.parseLong("4"), Long.parseLong("4"), null, null, null);
+        DonneesEntreesEntity actual = ReflectionTestUtils.invokeMethod(donneesEntreesService, "enrichi", donneeEntreeEntity, DureeUsage.valueOf("FIXE"), null, List.of(), TYPE_CALCUL_SOUMISSION);
+        Assertions.assertNull(actual.getEtapes());
+    }
+
+    @Test
+    void enrichiDonneesEntrees_with_etapeFiltreeNotInReferentiel_shouldThrowError() {
+        DonneesEntreesEntity donneeEntreeEntity = new DonneesEntreesEntity(Long.parseLong("10000"), Long.parseLong("10"), Long.parseLong("20"), Long.parseLong("4"), Long.parseLong("4"), Long.parseLong("4"), null, null, null);
+        var exception = assertThrows(ValidationException.class, () -> ReflectionTestUtils.invokeMethod(donneesEntreesService, "enrichi", donneeEntreeEntity, DureeUsage.valueOf("FIXE"), List.of("FAB"), List.of(), TYPE_CALCUL_SOUMISSION));
+        assertEquals("La liste d'étapes n'est pas valide, elle doit être comprise dans: [UTILISATION, FABRICATION, DISTRIBUTION]", exception.getErreur());
+    }
+
+    @Test
+    void enrichiDonneesEntrees_with_criteresFiltree_shouldFilter() {
+        DonneesEntreesEntity donneeEntreeEntity = new DonneesEntreesEntity(Long.parseLong("10000"), Long.parseLong("10"), Long.parseLong("20"), Long.parseLong("4"), Long.parseLong("4"), Long.parseLong("4"), null, null, null);
+        DonneesEntreesEntity actual = ReflectionTestUtils.invokeMethod(donneesEntreesService, "enrichi", donneeEntreeEntity, DureeUsage.valueOf("FIXE"), List.of(), List.of("Acidification", "Ionising radiation", "Climate change"), TYPE_CALCUL_SOUMISSION);
+        assertEquals("Acidification##Ionising radiation##Climate change", actual.getCriteres());
+    }
+
+    @Test
+    void enrichiDonneesEntrees_with_criteresFiltreeNull_shouldReturnNull() {
+        DonneesEntreesEntity donneeEntreeEntity = new DonneesEntreesEntity(Long.parseLong("10000"), Long.parseLong("10"), Long.parseLong("20"), Long.parseLong("4"), Long.parseLong("4"), Long.parseLong("4"), null, null, null);
+        DonneesEntreesEntity actual = ReflectionTestUtils.invokeMethod(donneesEntreesService, "enrichi", donneeEntreeEntity, DureeUsage.valueOf("FIXE"), null, null, TYPE_CALCUL_SOUMISSION);
+        Assertions.assertNull(actual.getCriteres());
+    }
+
+    @Test
+    void enrichiDonneesEntrees_with_critereFiltreeNotInReferentiel_shouldThrowError() {
+        DonneesEntreesEntity donneeEntreeEntity = new DonneesEntreesEntity(Long.parseLong("10000"), Long.parseLong("10"), Long.parseLong("20"), Long.parseLong("4"), Long.parseLong("4"), Long.parseLong("4"), null, null, null);
+        var exception = assertThrows(ValidationException.class, () -> ReflectionTestUtils.invokeMethod(donneesEntreesService, "enrichi", donneeEntreeEntity, DureeUsage.valueOf("FIXE"), null, List.of("CLIMATE CHANGE"), TYPE_CALCUL_SOUMISSION));
+        Assertions.assertEquals("La liste de critères n'est pas valide, elle doit être comprise dans: [Climate change, Particulate matter and respiratory inorganics, Ionising radiation, Acidification]", exception.getErreur());
+    }
+}
diff --git a/services/api-referentiel/pom.xml b/services/api-referentiel/pom.xml
index 742f02b0..fba8b24d 100644
--- a/services/api-referentiel/pom.xml
+++ b/services/api-referentiel/pom.xml
@@ -5,12 +5,12 @@
     <parent>
         <groupId>org.mte.numecoeval</groupId>
         <artifactId>core</artifactId>
-        <version>2.0.1</version>
+        <version>2.1.0-SNAPSHOT</version>
         <relativePath/> <!-- lookup parent from repository -->
     </parent>
 
     <artifactId>api-referentiel</artifactId>
-    <version>2.0.1</version>
+    <version>2.1.0-SNAPSHOT</version>
     <name>api-referentiel</name>
     <description>API Referentiel - Lecture, chargement et exposition par API</description>
 
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/init/FusionFacteurCaracterisationService.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/init/FusionFacteurCaracterisationService.java
deleted file mode 100644
index 986138c7..00000000
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/init/FusionFacteurCaracterisationService.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.mte.numecoeval.referentiel.infrastructure.init;
-
-import jakarta.annotation.PostConstruct;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.mte.numecoeval.referentiel.domain.exception.ReferentielException;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.adapter.ImpactEquipementJpaAdapter;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.adapter.ImpactReseauJpaAdapter;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.adapter.MixElectriqueJpaAdapter;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.repository.ImpactEquipementRepository;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.repository.ImpactReseauRepository;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.repository.MixElectriqueRepository;
-import org.mte.numecoeval.referentiel.infrastructure.mapper.ImpactEquipementMapper;
-import org.mte.numecoeval.referentiel.infrastructure.mapper.ImpactReseauMapper;
-import org.mte.numecoeval.referentiel.infrastructure.mapper.MixElectriqueMapper;
-import org.springframework.stereotype.Service;
-
-@Service
-@Slf4j
-@AllArgsConstructor
-public class FusionFacteurCaracterisationService {
-    private MixElectriqueJpaAdapter mixElectriqueJpaAdapter;
-    private MixElectriqueRepository mixElectriqueRepository;
-    private MixElectriqueMapper mixElectriqueMapper;
-    private ImpactReseauJpaAdapter impactReseauJpaAdapter;
-    private ImpactReseauRepository impactReseauRepository;
-    private ImpactReseauMapper impactReseauMapper;
-    private ImpactEquipementJpaAdapter impactEquipementJpaAdapter;
-    private ImpactEquipementRepository impactEquipementRepository;
-    private ImpactEquipementMapper impactEquipementMapper;
-
-    @PostConstruct
-    public void init() throws ReferentielException {
-        log.info("démarrage de la fusion des tables vers ref_facteurcaracterisation");
-
-        var mixelecs = mixElectriqueRepository.findAll();
-        if (!mixelecs.isEmpty()) {
-            log.info("migration des mix électriques vers la nouvelle table");
-            mixElectriqueJpaAdapter.saveAll(mixElectriqueMapper.toDomains(mixelecs));
-            mixElectriqueRepository.deleteAll();
-            log.info("fin de la migration des mix électriques vers la nouvelle table");
-        }
-        var impactReseaux = impactReseauRepository.findAll();
-        if (!impactReseaux.isEmpty()) {
-            log.info("migration des impact réseaux vers la nouvelle table");
-            impactReseauJpaAdapter.saveAll(impactReseauMapper.toDomains(impactReseaux));
-            impactReseauRepository.deleteAll();
-            log.info("fin de la migration des impact réseaux vers la nouvelle table");
-        }
-        var impactEquipements = impactEquipementRepository.findAll();
-        if (!impactEquipements.isEmpty()) {
-            log.info("migration des impacts équipements vers la nouvelle table");
-            impactEquipementJpaAdapter.saveAll(impactEquipementMapper.toDomains(impactEquipements));
-            impactEquipementRepository.deleteAll();
-            log.info("fin de la migration des impacts équipements vers la nouvelle table");
-        }
-    }
-}
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/init/MigrationToRefTypeItem.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/init/MigrationToRefTypeItem.java
deleted file mode 100644
index a4f9a4cf..00000000
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/init/MigrationToRefTypeItem.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.mte.numecoeval.referentiel.infrastructure.init;
-
-import jakarta.annotation.PostConstruct;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.mte.numecoeval.referentiel.domain.exception.ReferentielException;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.adapter.TypeItemJpaAdapter;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.TypeEquipementEntity;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.repository.TypeEquipementRepository;
-import org.mte.numecoeval.referentiel.infrastructure.mapper.TypeEquipementMapper;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-@Slf4j
-@AllArgsConstructor
-public class MigrationToRefTypeItem {
-
-    private TypeEquipementRepository typeEquipementRepository;
-    private TypeEquipementMapper typeEquipementMapper;
-    private TypeItemJpaAdapter typeItemJpaAdapter;
-
-    @PostConstruct
-    public void init() throws ReferentielException {
-        log.info("démarrage de la migration de la table ref_type_equipement vers ref_type_item");
-        List<TypeEquipementEntity> typesEquipement = typeEquipementRepository.findAll();
-        if (!typesEquipement.isEmpty()) {
-            log.info("migration des référentiels de types d'équipements existants vers la nouvelle table");
-            typeItemJpaAdapter.saveAll(typeEquipementMapper.toTypesItem(typeEquipementMapper.toDomaines(typesEquipement)));
-            typeEquipementRepository.deleteAll();
-            log.info("fin de la migration de la table ref_type_equipement vers ref_type_item");
-        }
-    }
-}
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/ImpactEquipementEntity.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/ImpactEquipementEntity.java
deleted file mode 100644
index d878dc03..00000000
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/ImpactEquipementEntity.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.mte.numecoeval.referentiel.infrastructure.jpa.entity;
-
-import jakarta.persistence.*;
-import lombok.AccessLevel;
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.experimental.Accessors;
-import lombok.experimental.FieldDefaults;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id.ImpactEquipementIdEntity;
-
-@Getter
-@Setter
-@Accessors(chain = true)
-@FieldDefaults(level = AccessLevel.PRIVATE)
-@Entity
-@IdClass(ImpactEquipementIdEntity.class)
-@Table(name = "REF_IMPACTEQUIPEMENT")
-@EqualsAndHashCode
-public class ImpactEquipementEntity implements AbstractReferentielEntity {
-    @Id
-    @Column(name = "REFEQUIPEMENT")
-    String refEquipement;
-    @Id
-    @Column(name = "ETAPEACV")
-    String etape;
-    @Id
-    @Column(name = "NOMCRITERE")
-    String critere;
-    String source;
-    String type;
-    Double valeur;
-    Double consoElecMoyenne;
-    String description;
-}
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/ImpactReseauEntity.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/ImpactReseauEntity.java
deleted file mode 100644
index de8f5b5f..00000000
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/ImpactReseauEntity.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.mte.numecoeval.referentiel.infrastructure.jpa.entity;
-
-import jakarta.persistence.*;
-import lombok.AccessLevel;
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.experimental.Accessors;
-import lombok.experimental.FieldDefaults;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id.ImpactReseauIdEntity;
-
-@Getter
-@Setter
-@Accessors(chain = true)
-@FieldDefaults(level = AccessLevel.PRIVATE)
-@Entity
-@IdClass(ImpactReseauIdEntity.class)
-@Table(name = "REF_IMPACTRESEAU")
-@EqualsAndHashCode
-public class ImpactReseauEntity implements AbstractReferentielEntity {
-    @Id
-    @Column(name = "REFRESEAU", nullable = false)
-    String refReseau;
-    @Id
-    @Column(name = "ETAPEACV", nullable = false)
-    String etape;
-    @Id
-    @Column(name = "NOMCRITERE", nullable = false)
-    String critere;
-    String source;
-    Double valeur;
-    @Column(name = "CONSOELECMOYENNE")
-    Double consoElecMoyenne;
-}
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/MixElectriqueEntity.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/MixElectriqueEntity.java
deleted file mode 100644
index f73d5334..00000000
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/MixElectriqueEntity.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.mte.numecoeval.referentiel.infrastructure.jpa.entity;
-
-import jakarta.persistence.*;
-import lombok.AccessLevel;
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.experimental.Accessors;
-import lombok.experimental.FieldDefaults;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id.MixElectriqueIdEntity;
-
-@Getter
-@Setter
-@Accessors(chain = true)
-@FieldDefaults(level = AccessLevel.PRIVATE)
-@Entity
-@IdClass(MixElectriqueIdEntity.class)
-@Table(name = "REF_MIXELEC")
-@EqualsAndHashCode
-public class MixElectriqueEntity implements AbstractReferentielEntity {
-    @Id
-    String pays;
-    @Id
-    @Column(name = "NOMCRITERE")
-    String critere;
-    @Column(name = "RACCOURCISANGLAIS")
-    String raccourcisAnglais;
-    String source;
-    Double valeur;
-}
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/TypeEquipementEntity.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/TypeEquipementEntity.java
deleted file mode 100644
index dced599b..00000000
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/TypeEquipementEntity.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.mte.numecoeval.referentiel.infrastructure.jpa.entity;
-
-import jakarta.persistence.Entity;
-import jakarta.persistence.Id;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-import lombok.experimental.Accessors;
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
-
-@Builder
-@Getter
-@Setter
-@Accessors(chain = true)
-@NoArgsConstructor
-@AllArgsConstructor
-@Entity(name = "REF_TYPE_EQUIPEMENT")
-public class TypeEquipementEntity implements AbstractReferentielEntity {
-    @Id
-    String type;
-    boolean serveur;
-    String commentaire;
-    Double dureeVieDefaut;
-    String source;
-
-    // Référence de l'équipement par défaut, permet des correspondances en cas d'absence de correspondance direct.
-    String refEquipementParDefaut;
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-
-        if (o == null || getClass() != o.getClass()) return false;
-
-        TypeEquipementEntity that = (TypeEquipementEntity) o;
-
-        return new EqualsBuilder().append(serveur, that.serveur).append(type, that.type).append(commentaire, that.commentaire).append(dureeVieDefaut, that.dureeVieDefaut).append(source, that.source).isEquals();
-    }
-
-    @Override
-    public int hashCode() {
-        return new HashCodeBuilder(17, 37).append(type).append(serveur).append(commentaire).append(dureeVieDefaut).append(source).toHashCode();
-    }
-}
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/id/ImpactEquipementIdEntity.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/id/ImpactEquipementIdEntity.java
deleted file mode 100644
index 2cec43b7..00000000
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/id/ImpactEquipementIdEntity.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id;
-
-import lombok.AccessLevel;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-import lombok.experimental.Accessors;
-import lombok.experimental.FieldDefaults;
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
-
-@Getter
-@Setter
-@Accessors(chain = true)
-@FieldDefaults(level = AccessLevel.PRIVATE)
-@NoArgsConstructor
-
-public class ImpactEquipementIdEntity implements AbstractReferentieIdEntity {
-    String refEquipement;
-    String etape;
-    String critere;
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-
-        if (o == null || getClass() != o.getClass()) return false;
-
-        ImpactEquipementIdEntity that = (ImpactEquipementIdEntity) o;
-
-        return new EqualsBuilder().append(refEquipement, that.refEquipement).append(etape, that.etape).append(critere, that.critere).isEquals();
-    }
-
-    @Override
-    public int hashCode() {
-        return new HashCodeBuilder(17, 37).append(refEquipement).append(etape).append(critere).toHashCode();
-    }
-}
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/id/ImpactReseauIdEntity.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/id/ImpactReseauIdEntity.java
deleted file mode 100644
index e43e7251..00000000
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/id/ImpactReseauIdEntity.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id;
-
-import lombok.AccessLevel;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-import lombok.experimental.Accessors;
-import lombok.experimental.FieldDefaults;
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
-
-@Getter
-@Setter
-@Accessors(chain = true)
-@FieldDefaults(level = AccessLevel.PRIVATE)
-@NoArgsConstructor
-public class ImpactReseauIdEntity implements AbstractReferentieIdEntity {
-    String refReseau;
-    String etape;
-    String critere;
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-
-        if (o == null || getClass() != o.getClass()) return false;
-
-        ImpactReseauIdEntity that = (ImpactReseauIdEntity) o;
-
-        return new EqualsBuilder().append(refReseau, that.refReseau).append(etape, that.etape).append(critere, that.critere).isEquals();
-    }
-
-    @Override
-    public int hashCode() {
-        return new HashCodeBuilder(17, 37).append(refReseau).append(etape).append(critere).toHashCode();
-    }
-}
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/id/MixElectriqueIdEntity.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/id/MixElectriqueIdEntity.java
deleted file mode 100644
index feae6b5e..00000000
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/entity/id/MixElectriqueIdEntity.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id;
-
-import lombok.AccessLevel;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-import lombok.experimental.Accessors;
-import lombok.experimental.FieldDefaults;
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
-
-@Getter
-@Setter
-@Accessors(chain = true)
-@FieldDefaults(level = AccessLevel.PRIVATE)
-@NoArgsConstructor
-
-public class MixElectriqueIdEntity implements AbstractReferentieIdEntity {
-
-    String pays;
-    String critere;
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-
-        if (o == null || getClass() != o.getClass()) return false;
-
-        MixElectriqueIdEntity that = (MixElectriqueIdEntity) o;
-
-        return new EqualsBuilder().append(pays, that.pays).append(critere, that.critere).isEquals();
-    }
-
-    @Override
-    public int hashCode() {
-        return new HashCodeBuilder(17, 37).append(pays).append(critere).toHashCode();
-    }
-}
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/ImpactEquipementRepository.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/ImpactEquipementRepository.java
deleted file mode 100644
index af84c79c..00000000
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/ImpactEquipementRepository.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.mte.numecoeval.referentiel.infrastructure.jpa.repository;
-
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.ImpactEquipementEntity;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id.ImpactEquipementIdEntity;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.rest.core.annotation.RepositoryRestResource;
-
-@RepositoryRestResource(path = "ImpactEquipement" , itemResourceRel = "ImpactEquipements")
-@Tag(name = "ImpactEquipement - CRUD/Spring Data REST")
-public interface ImpactEquipementRepository extends JpaRepository<ImpactEquipementEntity, ImpactEquipementIdEntity> {
-
-}
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/ImpactReseauRepository.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/ImpactReseauRepository.java
deleted file mode 100644
index f37f3c3a..00000000
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/ImpactReseauRepository.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.mte.numecoeval.referentiel.infrastructure.jpa.repository;
-
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.ImpactReseauEntity;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id.ImpactReseauIdEntity;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.rest.core.annotation.RepositoryRestResource;
-
-@RepositoryRestResource(path = "ImpactReseau" , itemResourceRel = "ImpactReseaux")
-@Tag(name = "ImpactReseau - CRUD/Spring Data REST")
-public interface ImpactReseauRepository extends JpaRepository<ImpactReseauEntity, ImpactReseauIdEntity> {
-
-}
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/MixElectriqueRepository.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/MixElectriqueRepository.java
deleted file mode 100644
index 448a8b3b..00000000
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/MixElectriqueRepository.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.mte.numecoeval.referentiel.infrastructure.jpa.repository;
-
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.MixElectriqueEntity;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id.MixElectriqueIdEntity;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.rest.core.annotation.RepositoryRestResource;
-
-@RepositoryRestResource(path = "MixElectrique" , itemResourceRel = "MixElectriques")
-@Tag(name = "MixElectrique - CRUD/Spring Data REST")
-public interface MixElectriqueRepository extends JpaRepository<MixElectriqueEntity, MixElectriqueIdEntity> {
-
-}
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/TypeEquipementRepository.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/TypeEquipementRepository.java
deleted file mode 100644
index c924a861..00000000
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/jpa/repository/TypeEquipementRepository.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.mte.numecoeval.referentiel.infrastructure.jpa.repository;
-
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.TypeEquipementEntity;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.rest.core.annotation.RepositoryRestResource;
-
-@RepositoryRestResource(path = "TypeEquipement" , itemResourceRel = "TypesEquipements")
-@Tag(name = "TypeEquipement - CRUD/Spring Data REST")
-public interface TypeEquipementRepository extends JpaRepository<TypeEquipementEntity,String> {
-}
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/ImpactEquipementMapper.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/ImpactEquipementMapper.java
index 50743926..eddf92bf 100644
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/ImpactEquipementMapper.java
+++ b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/ImpactEquipementMapper.java
@@ -5,28 +5,15 @@ import org.mapstruct.Mapping;
 import org.mte.numecoeval.referentiel.domain.model.FacteurCaracterisation;
 import org.mte.numecoeval.referentiel.domain.model.ImpactEquipement;
 import org.mte.numecoeval.referentiel.domain.model.id.ImpactEquipementId;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.ImpactEquipementEntity;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id.ImpactEquipementIdEntity;
 import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.ImpactEquipementDTO;
 import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.id.ImpactEquipementIdDTO;
 
-import java.util.Collection;
 import java.util.List;
 
 @Mapper(componentModel = "spring")
 public interface ImpactEquipementMapper {
     ImpactEquipementId toDomainId(ImpactEquipementIdDTO id);
 
-    ImpactEquipementEntity toEntity(ImpactEquipement referentiel);
-
-    List<ImpactEquipementEntity> toEntities(Collection<ImpactEquipement> referentiel);
-
-    ImpactEquipementIdEntity toEntityId(ImpactEquipementId id);
-
-    ImpactEquipement toDomain(ImpactEquipementEntity entity);
-
-    List<ImpactEquipement> toDomains(List<ImpactEquipementEntity> entities);
-
     ImpactEquipement toDomain(ImpactEquipementDTO dto);
 
     List<ImpactEquipement> toDomainsFromDTO(List<ImpactEquipementDTO> iesDTO);
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/ImpactReseauMapper.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/ImpactReseauMapper.java
index 4bc31228..82bd261f 100644
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/ImpactReseauMapper.java
+++ b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/ImpactReseauMapper.java
@@ -5,37 +5,24 @@ import org.mapstruct.Mapping;
 import org.mte.numecoeval.referentiel.domain.model.FacteurCaracterisation;
 import org.mte.numecoeval.referentiel.domain.model.ImpactReseau;
 import org.mte.numecoeval.referentiel.domain.model.id.ImpactReseauId;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.ImpactReseauEntity;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id.ImpactReseauIdEntity;
 import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.ImpactReseauDTO;
 import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.id.ImpactReseauIdDTO;
 
-import java.util.Collection;
 import java.util.List;
 
 @Mapper(componentModel = "spring")
 
 public interface ImpactReseauMapper {
 
-    ImpactReseauEntity toEntity(ImpactReseau impactReseau);
-
     @Mapping(source = "etape", target = "etapeACV")
     ImpactReseauDTO toDTO(ImpactReseau impactReseau);
 
-    ImpactReseauIdEntity toEntityId(ImpactReseauId reseauId);
-
-    ImpactReseau toDomain(ImpactReseauEntity reseauEntity);
-
     @Mapping(source = "etapeACV", target = "etape")
     ImpactReseau toDomain(ImpactReseauDTO impactReseauDTO);
 
     @Mapping(source = "etapeACV", target = "etape")
     ImpactReseauId toDomainId(ImpactReseauIdDTO idImpactReseauDTO);
 
-    List<ImpactReseauEntity> toEntity(Collection<ImpactReseau> facteursImpacts);
-
-    List<ImpactReseau> toDomains(List<ImpactReseauEntity> entities);
-
     List<ImpactReseau> toDomainsFromDTO(List<ImpactReseauDTO> dtos);
 
     @Mapping(target = "nom", source = "refReseau")
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/MixElectriqueMapper.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/MixElectriqueMapper.java
index bbafcff0..b29345dc 100644
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/MixElectriqueMapper.java
+++ b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/MixElectriqueMapper.java
@@ -5,12 +5,9 @@ import org.mapstruct.Mapping;
 import org.mte.numecoeval.referentiel.domain.model.FacteurCaracterisation;
 import org.mte.numecoeval.referentiel.domain.model.MixElectrique;
 import org.mte.numecoeval.referentiel.domain.model.id.MixElectriqueId;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.MixElectriqueEntity;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id.MixElectriqueIdEntity;
 import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.MixElectriqueDTO;
 import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.id.MixElectriqueIdDTO;
 
-import java.util.Collection;
 import java.util.List;
 
 @Mapper(componentModel = "spring")
@@ -18,16 +15,6 @@ public interface MixElectriqueMapper {
 
     MixElectriqueId toDomainId(MixElectriqueIdDTO id);
 
-    MixElectriqueEntity toEntity(MixElectrique mixElecs);
-
-    List<MixElectriqueEntity> toEntities(Collection<MixElectrique> mixElecs);
-
-    MixElectriqueIdEntity toEntityId(MixElectriqueId id);
-
-    MixElectrique toDomain(MixElectriqueEntity mixElec);
-
-    List<MixElectrique> toDomains(List<MixElectriqueEntity> mixElec);
-
     List<MixElectrique> toDomainsFromDTO(List<MixElectriqueDTO> mixElecs);
 
     MixElectriqueDTO toDTO(MixElectrique mixElectrique);
diff --git a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/TypeEquipementMapper.java b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/TypeEquipementMapper.java
index 5af2f6ad..87dd9b83 100644
--- a/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/TypeEquipementMapper.java
+++ b/services/api-referentiel/src/main/java/org/mte/numecoeval/referentiel/infrastructure/mapper/TypeEquipementMapper.java
@@ -4,25 +4,15 @@ import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
 import org.mte.numecoeval.referentiel.domain.model.TypeEquipement;
 import org.mte.numecoeval.referentiel.domain.model.TypeItem;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.TypeEquipementEntity;
 import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.TypeEquipementDTO;
 
-import java.util.Collection;
 import java.util.List;
 
 @Mapper(componentModel = "spring")
 public interface TypeEquipementMapper {
 
-    TypeEquipement toDomaine(TypeEquipementEntity typeEquipementEntity);
-
-    List<TypeEquipement> toDomaines(List<TypeEquipementEntity> typeEquipementEntities);
-
     TypeEquipement toDomaine(TypeEquipementDTO typeEquipementDTO);
 
-    TypeEquipementEntity toEntity(TypeEquipement typeEquipement);
-
-    List<TypeEquipementEntity> toEntities(Collection<TypeEquipement> typeEquipements);
-
     TypeEquipementDTO toDto(TypeEquipement typeEquipement);
 
     @Mapping(target = "refItemParDefaut", source = "refEquipementParDefaut")
diff --git a/services/api-referentiel/src/main/resources/schema.sql b/services/api-referentiel/src/main/resources/schema.sql
index 1f910575..d81d8dde 100644
--- a/services/api-referentiel/src/main/resources/schema.sql
+++ b/services/api-referentiel/src/main/resources/schema.sql
@@ -22,17 +22,6 @@ CREATE TABLE IF NOT EXISTS ref_hypothese
     CONSTRAINT ref_hypothese_pkey PRIMARY KEY (code)
 );
 
-CREATE TABLE IF NOT EXISTS ref_type_equipement
-(
-    "type"                    varchar(255) NOT NULL,
-    commentaire               varchar(255) NULL,
-    duree_vie_defaut          float8       NULL,
-    serveur                   bool         NOT NULL,
-    "source"                  varchar(255) NULL,
-    ref_equipement_par_defaut varchar(255) NULL,
-    CONSTRAINT ref_type_equipement_pkey PRIMARY KEY (type)
-);
-
 CREATE TABLE IF NOT EXISTS ref_type_item
 (
     "type"                    varchar(255) NOT NULL,
@@ -61,40 +50,6 @@ CREATE TABLE IF NOT EXISTS ref_correspondance_ref_eqp
     ref_equipement_cible     varchar(255) NULL,
     CONSTRAINT ref_correspondance_ref_eqp_pkey PRIMARY KEY (modele_equipement_source)
 );
-
-CREATE TABLE IF NOT EXISTS ref_impactequipement
-(
-    refequipement      varchar(255) NOT NULL,
-    conso_elec_moyenne float8       NULL,
-    "source"           varchar(255) NULL,
-    "type"             varchar(255) NULL,
-    valeur             float8       NULL,
-    etapeacv           varchar(255) NOT NULL,
-    nomcritere         varchar(255) NOT NULL,
-    description        varchar(255) NULL,
-    CONSTRAINT ref_impactequipement_pkey PRIMARY KEY (nomcritere, etapeacv, refequipement)
-);
-
-CREATE TABLE IF NOT EXISTS ref_impactreseau
-(
-    refreseau        varchar(255) NOT NULL,
-    consoelecmoyenne float8       NULL,
-    "source"         varchar(255) NULL,
-    valeur           float8       NULL,
-    etapeacv         varchar(255) NOT NULL,
-    nomcritere       varchar(255) NOT NULL,
-    CONSTRAINT ref_impactreseau_pkey PRIMARY KEY (nomcritere, etapeacv, refreseau)
-);
-
-CREATE TABLE IF NOT EXISTS ref_mixelec
-(
-    pays              varchar(255) NOT NULL,
-    raccourcisanglais varchar(255) NULL,
-    "source"          varchar(255) NULL,
-    valeur            float8       NULL,
-    nomcritere        varchar(255) NOT NULL,
-    CONSTRAINT ref_mixelec_pkey PRIMARY KEY (nomcritere, pays)
-);
     CREATE TABLE IF NOT EXISTS ref_facteurcaracterisation
 (
      nom      varchar(255) NOT NULL,
@@ -112,9 +67,4 @@ CREATE TABLE IF NOT EXISTS ref_mixelec
      CONSTRAINT ref_facteurcaracterisation_pkey PRIMARY KEY (nom, etapeacv, nomcritere)
 );
 -- suppression des contraintes de clés étrangères
-ALTER TABLE ref_impactequipement DROP CONSTRAINT IF EXISTS fk5iuiwnk7rymtob1fku71uuj52;
-ALTER TABLE ref_impactequipement DROP CONSTRAINT IF EXISTS fksfjum8kagn7q6vsv5uqn6kimx;
-ALTER TABLE ref_impactreseau DROP CONSTRAINT IF EXISTS fk31ykp7xtj41win3ptqlr3us9s;
-ALTER TABLE ref_impactreseau DROP CONSTRAINT IF EXISTS fkb8tkreu8c8s8pqqnft6vr4pnf;
-ALTER TABLE ref_mixelec DROP CONSTRAINT IF EXISTS fkdncd4m2je6fbno7pkn850u1fs;
 ALTER TABLE ref_impact_messagerie DROP CONSTRAINT IF EXISTS fkohnlpwfp0ebk7dswmfbe5l3k0;
diff --git a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/factory/TestDataFactory.java b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/factory/TestDataFactory.java
index 6082c03d..62338a5d 100644
--- a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/factory/TestDataFactory.java
+++ b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/factory/TestDataFactory.java
@@ -3,7 +3,9 @@ package org.mte.numecoeval.referentiel.factory;
 import org.mte.numecoeval.referentiel.domain.model.*;
 import org.mte.numecoeval.referentiel.domain.model.id.*;
 import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.*;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id.*;
+import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id.CritereIdEntity;
+import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id.EtapeIdEntity;
+import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.id.HypotheseIdEntity;
 import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.*;
 import org.mte.numecoeval.referentiel.infrastructure.restapi.dto.id.*;
 
@@ -141,9 +143,6 @@ public class TestDataFactory {
                     .build();
         }
 
-        public static TypeEquipementEntity entity(String type, boolean estUnServeur, Double dureeVieDefaut, String commentaire, String source, String refEquipementParDefaut) {
-            return new TypeEquipementEntity(type, estUnServeur, commentaire, dureeVieDefaut, source, refEquipementParDefaut);
-        }
     }
 
     public static class TypeItemFactory {
@@ -200,15 +199,6 @@ public class TestDataFactory {
                     .setSource(source);
         }
 
-        public static MixElectriqueEntity entity(CritereEntity critere, String pays, String raccourcisAnglais, Double valeur, String source) {
-            return new MixElectriqueEntity()
-                    .setCritere(critere.getNomCritere())
-                    .setPays(pays)
-                    .setRaccourcisAnglais(raccourcisAnglais)
-                    .setValeur(valeur)
-                    .setSource(source);
-        }
-
         public static MixElectriqueIdDTO idDTO(CritereIdDTO critereId, String pays) {
             return MixElectriqueIdDTO
                     .builder()
@@ -222,12 +212,6 @@ public class TestDataFactory {
                     .setCritere(critereId.getNomCritere())
                     .setPays(pays);
         }
-
-        public static MixElectriqueIdEntity idEntity(CritereIdEntity critereId, String pays) {
-            return new MixElectriqueIdEntity()
-                    .setCritere(critereId.getNomCritere())
-                    .setPays(pays);
-        }
     }
 
     public static class ImpactEquipementFactory {
@@ -256,17 +240,6 @@ public class TestDataFactory {
                     .setConsoElecMoyenne(consoElecMoyenne);
         }
 
-        public static ImpactEquipementEntity entity(EtapeEntity etape, CritereEntity critere, String refEquipement, String source, String type, Double valeur, Double consoElecMoyenne) {
-            return new ImpactEquipementEntity()
-                    .setEtape(etape.getCode())
-                    .setCritere(critere.getNomCritere())
-                    .setRefEquipement(refEquipement)
-                    .setSource(source)
-                    .setType(type)
-                    .setValeur(valeur)
-                    .setConsoElecMoyenne(consoElecMoyenne);
-        }
-
         public static ImpactEquipementIdDTO idDTO(String etapeIdDTO, String critereId, String refEquipement) {
             return ImpactEquipementIdDTO
                     .builder()
@@ -379,16 +352,6 @@ public class TestDataFactory {
                     .setConsoElecMoyenne(consoElecMoyenne);
         }
 
-        public static ImpactReseauEntity entity(EtapeEntity etape, CritereEntity critere, String refReseau, String source, Double valeur, Double consoElecMoyenne) {
-            return new ImpactReseauEntity()
-                    .setEtape(etape.getCode())
-                    .setCritere(critere.getNomCritere())
-                    .setRefReseau(refReseau)
-                    .setSource(source)
-                    .setValeur(valeur)
-                    .setConsoElecMoyenne(consoElecMoyenne);
-        }
-
         public static ImpactReseauIdDTO idDTO(EtapeIdDTO etapeIdDTO, CritereIdDTO critereId, String refReseau) {
             return ImpactReseauIdDTO
                     .builder()
@@ -404,13 +367,6 @@ public class TestDataFactory {
                     .setCritere(critereId.getNomCritere())
                     .setRefReseau(refReseau);
         }
-
-        public static ImpactReseauIdEntity idEntity(EtapeIdEntity etapeIdEntity, CritereIdEntity critereId, String refReseau) {
-            return new ImpactReseauIdEntity()
-                    .setEtape(etapeIdEntity.getCode())
-                    .setCritere(critereId.getNomCritere())
-                    .setRefReseau(refReseau);
-        }
     }
 
     public static class ImpactMessagerieFactory {
diff --git a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactEquipementCsvExportServiceTest.java b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactEquipementCsvExportServiceTest.java
index dc702968..175cfa44 100644
--- a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactEquipementCsvExportServiceTest.java
+++ b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactEquipementCsvExportServiceTest.java
@@ -85,33 +85,33 @@ class ImpactEquipementCsvExportServiceTest {
 
     @Test
     void printRecordShouldUseEntityAttributes() throws IOException {
-        var entity = TestDataFactory.ImpactEquipementFactory.entity(
+        var entity = TestDataFactory.FacteurCaracterisationFactory.entity("Laptop",
                 TestDataFactory.EtapeFactory.entity("UTILISATION", ""),
                 TestDataFactory.CritereFactory.entity("Changement climatique", "", ""),
-                "Ref-Ecran", "RefTest", "Ecran", 0.1, 0.2
+                "", Constants.EQUIPEMENT_NIVEAU, "", "Ecran", 0.1, "", 0.2, "", "NegaOctet"
         );
+
         DecimalFormat df = new DecimalFormat("0", DecimalFormatSymbols.getInstance(Locale.ENGLISH));
         df.setMaximumFractionDigits(340);
 
-        assertDoesNotThrow(() -> exportService.printRecord(csvPrinter, equipementMapper.toDomain(entity)));
+        assertDoesNotThrow(() -> exportService.printRecord(csvPrinter, equipementMapper.toImpactEquipement(facteurCaracterisationMapper.toDomain(entity))));
 
-        Mockito.verify(csvPrinter, times(1)).printRecord(entity.getRefEquipement(),
+        Mockito.verify(csvPrinter, times(1)).printRecord(entity.getNom(),
                 entity.getEtape(), entity.getCritere(),
                 df.format(entity.getConsoElecMoyenne()), df.format(entity.getValeur()),
-                entity.getSource(), entity.getType());
+                entity.getSource(), null);
 
 
     }
 
     @Test
     void logRecordErrorShouldLogSpecificErrorForRecord() {
-        var entity = TestDataFactory.ImpactEquipementFactory.entity(
+        var entity = TestDataFactory.FacteurCaracterisationFactory.entity("Laptop",
                 TestDataFactory.EtapeFactory.entity("UTILISATION", ""),
                 TestDataFactory.CritereFactory.entity("Changement climatique", "", ""),
-                "Ref-Ecran", "RefTest", "Ecran", 0.1, 0.2
+                "", Constants.EQUIPEMENT_NIVEAU, "", "Ecran", 0.1, "", 0.2, "", "NegaOctet"
         );
-
-        assertDoesNotThrow(() -> exportService.logRecordError(equipementMapper.toDomain(entity), new Exception("Test")));
+        assertDoesNotThrow(() -> exportService.logRecordError(equipementMapper.toImpactEquipement(facteurCaracterisationMapper.toDomain(entity)), new Exception("Test")));
     }
 
     @Test
diff --git a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactMixElectriqueCsvExportServiceTest.java b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactMixElectriqueCsvExportServiceTest.java
index 1553433e..2ef28e59 100644
--- a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactMixElectriqueCsvExportServiceTest.java
+++ b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactMixElectriqueCsvExportServiceTest.java
@@ -12,7 +12,6 @@ import org.mte.numecoeval.referentiel.domain.model.MixElectrique;
 import org.mte.numecoeval.referentiel.domain.ports.input.impl.ImportMixElectriquePortImpl;
 import org.mte.numecoeval.referentiel.factory.TestDataFactory;
 import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.FacteurCaracterisationEntity;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.MixElectriqueEntity;
 import org.mte.numecoeval.referentiel.infrastructure.jpa.repository.FacteurCaracterisationRepository;
 import org.mte.numecoeval.referentiel.infrastructure.mapper.FacteurCaracterisationMapper;
 import org.mte.numecoeval.referentiel.infrastructure.mapper.FacteurCaracterisationMapperImpl;
@@ -68,13 +67,6 @@ class ImpactMixElectriqueCsvExportServiceTest {
         );
     }
 
-    private MixElectriqueEntity mixElectriqueEntity() {
-        return TestDataFactory.MixElectriqueFactory.entity(
-                TestDataFactory.CritereFactory.entity("Changement climatique", "", ""),
-                "France", "FR", 0.2, "Test"
-        );
-    }
-
     @Test
     void getHeadersShouldReturnSameHeadersAsImport() {
         Assertions.assertEquals(ImportMixElectriquePortImpl.getHeaders(), exportService.getHeaders());
@@ -91,15 +83,20 @@ class ImpactMixElectriqueCsvExportServiceTest {
 
     @Test
     void printRecordShouldUseEntityAttributes() throws IOException {
-        var entity = mixElectriqueEntity();
+        var entity = TestDataFactory.FacteurCaracterisationFactory.entity("Electricity mix FR",
+                TestDataFactory.EtapeFactory.entity("FABRICATION", ""),
+                TestDataFactory.CritereFactory.entity("Changement climatique", "", ""),
+                "", Constants.MIXELEC_NIVEAU, "", Constants.MIXELEC_CATEGORIE, 0.0, "France", 0.2, "", "NegaOctet"
+        );
+
         DecimalFormat df = new DecimalFormat("0", DecimalFormatSymbols.getInstance(Locale.ENGLISH));
         df.setMaximumFractionDigits(340);
 
-        assertDoesNotThrow(() -> exportService.printRecord(csvPrinter, mixElectriqueMapper.toDomain(entity)));
+        assertDoesNotThrow(() -> exportService.printRecord(csvPrinter, mixElectriqueMapper.toMixElectrique(facteurCaracterisationMapper.toDomain(entity))));
 
         Mockito.verify(csvPrinter, times(1)).printRecord(
-                entity.getPays(),
-                entity.getRaccourcisAnglais(),
+                entity.getLocalisation(),
+                null,
                 entity.getCritere(),
                 df.format(entity.getValeur()),
                 entity.getSource());
@@ -107,9 +104,13 @@ class ImpactMixElectriqueCsvExportServiceTest {
 
     @Test
     void logRecordErrorShouldLogSpecificErrorForRecord() {
-        var entity = mixElectriqueEntity();
+        var entity = TestDataFactory.FacteurCaracterisationFactory.entity("Electricity mix FR",
+                TestDataFactory.EtapeFactory.entity("FABRICATION", ""),
+                TestDataFactory.CritereFactory.entity("Changement climatique", "", ""),
+                "", Constants.MIXELEC_NIVEAU, "", Constants.MIXELEC_CATEGORIE, 0.0, "France", 0.2, "", "NegaOctet"
+        );
 
-        assertDoesNotThrow(() -> exportService.logRecordError(mixElectriqueMapper.toDomain(entity), new Exception("Test")));
+        assertDoesNotThrow(() -> exportService.logRecordError(mixElectriqueMapper.toMixElectrique(facteurCaracterisationMapper.toDomain(entity)), new Exception("Test")));
     }
 
     @Test
diff --git a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactReseauCsvExportServiceTest.java b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactReseauCsvExportServiceTest.java
index c398b1ec..008e8f04 100644
--- a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactReseauCsvExportServiceTest.java
+++ b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/ImpactReseauCsvExportServiceTest.java
@@ -84,18 +84,18 @@ class ImpactReseauCsvExportServiceTest {
 
     @Test
     void printRecordShouldUseEntityAttributes() throws IOException {
-        var entity = TestDataFactory.ImpactReseauFactory.entity(
+        var entity = TestDataFactory.FacteurCaracterisationFactory.entity("Fixed-line network",
                 TestDataFactory.EtapeFactory.entity("UTILISATION", ""),
                 TestDataFactory.CritereFactory.entity("Changement climatique", "", ""),
-                "Ref-Ecran", "RefTest", 0.1, 0.2
+                "", Constants.RESEAU_NIVEAU, Constants.RESEAU_TIERS, "Ecran", 0.1, "", 0.2, "", "NegaOctet"
         );
 
         DecimalFormat df = new DecimalFormat("0", DecimalFormatSymbols.getInstance(Locale.ENGLISH));
         df.setMaximumFractionDigits(340);
 
-        assertDoesNotThrow(() -> exportService.printRecord(csvPrinter, reseauMapper.toDomain(entity)));
+        assertDoesNotThrow(() -> exportService.printRecord(csvPrinter, reseauMapper.toImpactReseau(facteurCaracterisationMapper.toDomain(entity))));
 
-        Mockito.verify(csvPrinter, times(1)).printRecord(entity.getRefReseau(),
+        Mockito.verify(csvPrinter, times(1)).printRecord(entity.getNom(),
                 entity.getEtape(), entity.getCritere(),
                 df.format(entity.getValeur()), df.format(entity.getConsoElecMoyenne()),
                 entity.getSource());
@@ -103,13 +103,13 @@ class ImpactReseauCsvExportServiceTest {
 
     @Test
     void logRecordErrorShouldLogSpecificErrorForRecord() {
-        var entity = TestDataFactory.ImpactReseauFactory.entity(
+        var entity = TestDataFactory.FacteurCaracterisationFactory.entity("Fixed-line network",
                 TestDataFactory.EtapeFactory.entity("UTILISATION", ""),
                 TestDataFactory.CritereFactory.entity("Changement climatique", "", ""),
-                "Ref-Ecran", "RefTest", 0.1, 0.2
+                "", Constants.RESEAU_NIVEAU, Constants.RESEAU_TIERS, "Ecran", 0.1, "", 0.2, "", "NegaOctet"
         );
 
-        assertDoesNotThrow(() -> exportService.logRecordError(reseauMapper.toDomain(entity), new Exception("Test")));
+        assertDoesNotThrow(() -> exportService.logRecordError(reseauMapper.toImpactReseau(facteurCaracterisationMapper.toDomain(entity)), new Exception("Test")));
     }
 
     @Test
diff --git a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/TypeEquipementCsvExportServiceTest.java b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/TypeEquipementCsvExportServiceTest.java
index 47eb4fcf..434e3a84 100644
--- a/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/TypeEquipementCsvExportServiceTest.java
+++ b/services/api-referentiel/src/test/java/org/mte/numecoeval/referentiel/infrastructure/adapter/export/TypeEquipementCsvExportServiceTest.java
@@ -11,7 +11,6 @@ import org.mockito.MockitoAnnotations;
 import org.mte.numecoeval.referentiel.domain.model.TypeEquipement;
 import org.mte.numecoeval.referentiel.domain.ports.input.impl.ImportTypeEquipementPortImpl;
 import org.mte.numecoeval.referentiel.factory.TestDataFactory;
-import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.TypeEquipementEntity;
 import org.mte.numecoeval.referentiel.infrastructure.jpa.entity.TypeItemEntity;
 import org.mte.numecoeval.referentiel.infrastructure.jpa.repository.TypeItemRepository;
 import org.mte.numecoeval.referentiel.infrastructure.mapper.TypeEquipementMapper;
@@ -64,10 +63,8 @@ class TypeEquipementCsvExportServiceTest {
         );
     }
 
-    private TypeEquipementEntity typeEquipementEntity() {
-        return TestDataFactory.TypeEquipementFactory.entity(
-                "Serveur", true, 6.0, "Commentaires", "Test",
-                "test");
+    private TypeItemEntity typeItemEntity() {
+        return TestDataFactory.TypeItemFactory.entity("Serveur", CATEGORIE_EQUIPEMENT_PHYSIQUE, true, null, 6.0, null, "", "Test");
     }
 
     @Test
@@ -86,11 +83,13 @@ class TypeEquipementCsvExportServiceTest {
 
     @Test
     void printRecordShouldUseEntityAttributes() throws IOException {
-        var entity = typeEquipementEntity();
+        var entity = TestDataFactory.TypeItemFactory.entity(
+                "Serveur", null, true, "Exemple de serveur basique",
+                6.0, null, "NegaOctet", "serveur_par_defaut");
         DecimalFormat df = new DecimalFormat("0", DecimalFormatSymbols.getInstance(Locale.ENGLISH));
         df.setMaximumFractionDigits(340);
 
-        assertDoesNotThrow(() -> exportService.printRecord(csvPrinter, typeEquipementMapper.toDomaine(entity)));
+        assertDoesNotThrow(() -> exportService.printRecord(csvPrinter, typeEquipementMapper.toTypeEquipement(typeItemMapper.toDomain(entity))));
 
         Mockito.verify(csvPrinter, times(1)).printRecord(
                 entity.getType(),
@@ -98,13 +97,13 @@ class TypeEquipementCsvExportServiceTest {
                 entity.getCommentaire(),
                 df.format(entity.getDureeVieDefaut()),
                 entity.getSource(),
-                entity.getRefEquipementParDefaut());
+                entity.getRefItemParDefaut());
     }
 
     @Test
     void logRecordErrorShouldLogSpecificErrorForRecord() {
-        var entity = typeEquipementEntity();
-        assertDoesNotThrow(() -> exportService.logRecordError(typeEquipementMapper.toDomaine(entity), new Exception("Test")));
+        var entity = typeItemEntity();
+        assertDoesNotThrow(() -> exportService.logRecordError(typeEquipementMapper.toTypeEquipement(typeItemMapper.toDomain(entity)), new Exception("Test")));
     }
 
     @Test
diff --git a/services/calculs/pom.xml b/services/calculs/pom.xml
index 52a81e2f..3d09cc0a 100644
--- a/services/calculs/pom.xml
+++ b/services/calculs/pom.xml
@@ -5,11 +5,11 @@
     <parent>
         <groupId>org.mte.numecoeval</groupId>
         <artifactId>core</artifactId>
-        <version>2.0.1</version>
+        <version>2.1.0-SNAPSHOT</version>
         <relativePath/> <!-- lookup parent from repository -->
     </parent>
     <artifactId>calculs</artifactId>
-    <version>2.0.1</version>
+    <version>2.1.0-SNAPSHOT</version>
     <name>calculs</name>
     <description>Module contenant l'intégralité des règles de calculs et du code métier lié aux calculs d'impact
         d'équipement
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/demande/DemandeCalculImpactEquipementPhysique.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/demande/DemandeCalculImpactEquipementPhysique.java
index 6c0da70e..99719512 100644
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/demande/DemandeCalculImpactEquipementPhysique.java
+++ b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/demande/DemandeCalculImpactEquipementPhysique.java
@@ -1,11 +1,9 @@
 package org.mte.numecoeval.calculs.domain.data.demande;
 
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.*;
 import org.mte.numecoeval.calculs.domain.data.entree.EquipementPhysique;
 import org.mte.numecoeval.calculs.domain.data.referentiel.*;
+import org.mte.numecoeval.calculs.domain.utils.Constants;
 
 import java.time.LocalDateTime;
 import java.util.List;
@@ -14,6 +12,7 @@ import java.util.Optional;
 
 @Builder
 @AllArgsConstructor
+@NoArgsConstructor
 @Getter
 @Setter
 public class DemandeCalculImpactEquipementPhysique {
@@ -26,15 +25,13 @@ public class DemandeCalculImpactEquipementPhysique {
 
     ReferentielCritere critere;
 
-    ReferentielTypeEquipement typeEquipement;
+    ReferentielTypeItem typeItem;
 
     ReferentielCorrespondanceRefEquipement correspondanceRefEquipement;
 
     List<ReferentielHypothese> hypotheses;
 
-    List<ReferentielImpactEquipement> impactEquipements;
-
-    List<ReferentielMixElectrique> mixElectriques;
+    List<ReferentielFacteurCaracterisation> facteurCaracterisations;
 
     OptionsCalcul optionsCalcul;
 
@@ -54,28 +51,28 @@ public class DemandeCalculImpactEquipementPhysique {
                 .toList();
     }
 
-    public Optional<ReferentielImpactEquipement> getImpactEquipement(String refEquipement) {
-        if (refEquipement == null || impactEquipements == null) {
+    public Optional<ReferentielFacteurCaracterisation> getFacteurCaracterisation(String refItem) {
+        if (refItem == null || facteurCaracterisations == null) {
             return Optional.empty();
         }
-        return impactEquipements.stream()
+        return facteurCaracterisations.stream()
                 .filter(Objects::nonNull)
-                .filter(impactEquipement -> refEquipement.equals(impactEquipement.getRefEquipement())
-                        && critere.getNomCritere().equals(impactEquipement.getCritere())
-                        && etape.getCode().equals(impactEquipement.getEtape())
+                .filter(facteurCaracterisation -> refItem.equals(facteurCaracterisation.getNom())
+                        && critere.getNomCritere().equals(facteurCaracterisation.getCritere())
+                        && etape.getCode().equals(facteurCaracterisation.getEtape())
                 )
                 .findFirst();
     }
 
-    public Optional<ReferentielMixElectrique> getMixElectrique(String pays) {
-        if (pays == null || mixElectriques == null) {
+    public Optional<ReferentielFacteurCaracterisation> getMixElectriqueFromFacteurCaracterisation(String localisation) {
+        if (localisation == null || facteurCaracterisations == null) {
             return Optional.empty();
         }
-        return mixElectriques.stream()
+        return facteurCaracterisations.stream()
                 .filter(Objects::nonNull)
-                .filter(mixElectrique -> pays.equals(mixElectrique.getPays())
-                        && critere.getNomCritere().equals(mixElectrique.getCritere())
-                )
+                .filter(fc -> Constants.ELECTRICITY_MIX_CATEGORY.equals(fc.getCategorie()) &&
+                        localisation.equals(fc.getLocalisation()) &&
+                        critere.getNomCritere().equals(fc.getCritere()))
                 .findFirst();
     }
 
@@ -86,9 +83,9 @@ public class DemandeCalculImpactEquipementPhysique {
         return null;
     }
 
-    public String getRefEquipementParDefaut() {
-        if (typeEquipement != null) {
-            return typeEquipement.getRefEquipementParDefaut();
+    public String getRefItemParDefaut() {
+        if (typeItem != null) {
+            return typeItem.getRefItemParDefaut();
         }
         return null;
     }
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/demande/DemandeCalculImpactOperationNonIT.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/demande/DemandeCalculImpactOperationNonIT.java
index fade2b05..e0ddf3a4 100644
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/demande/DemandeCalculImpactOperationNonIT.java
+++ b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/demande/DemandeCalculImpactOperationNonIT.java
@@ -73,8 +73,7 @@ public class DemandeCalculImpactOperationNonIT {
                 .filter(Objects::nonNull)
                 .filter(fc -> Constants.ELECTRICITY_MIX_CATEGORY.equals(fc.getCategorie()) &&
                         localisation.equals(fc.getLocalisation()) &&
-                        critere.getNomCritere().equals(fc.getCritere())
-                )
+                        critere.getNomCritere().equals(fc.getCritere()))
                 .findFirst();
     }
 
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/demande/DemandeCalculImpactReseau.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/demande/DemandeCalculImpactReseau.java
deleted file mode 100644
index 4a76a7ad..00000000
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/demande/DemandeCalculImpactReseau.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.mte.numecoeval.calculs.domain.data.demande;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.Setter;
-import org.mte.numecoeval.calculs.domain.data.entree.EquipementPhysique;
-import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielCritere;
-import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielEtapeACV;
-import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielImpactReseau;
-
-import java.time.LocalDateTime;
-import java.util.List;
-
-@Builder
-@AllArgsConstructor
-@Getter
-@Setter
-public class DemandeCalculImpactReseau {
-
-    LocalDateTime dateCalcul;
-
-    EquipementPhysique equipementPhysique;
-
-    ReferentielEtapeACV etape;
-
-    ReferentielCritere critere;
-
-    List<ReferentielImpactReseau> impactsReseau;
-}
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/entree/EquipementPhysique.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/entree/EquipementPhysique.java
index 02376c96..ba2cdfaf 100644
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/entree/EquipementPhysique.java
+++ b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/entree/EquipementPhysique.java
@@ -1,13 +1,15 @@
 package org.mte.numecoeval.calculs.domain.data.entree;
 
-import lombok.Builder;
-import lombok.Data;
+import lombok.*;
 
 import java.time.LocalDate;
 import java.util.List;
 
-@Data
 @Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Getter
+@Setter
 public class EquipementPhysique {
     private String nomEquipementPhysique;
     private String modele;
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielCorrespondanceRefEquipement.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielCorrespondanceRefEquipement.java
index 0170b74f..bf19aa67 100644
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielCorrespondanceRefEquipement.java
+++ b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielCorrespondanceRefEquipement.java
@@ -1,12 +1,10 @@
 package org.mte.numecoeval.calculs.domain.data.referentiel;
 
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.*;
 
 @Builder
 @AllArgsConstructor
+@NoArgsConstructor
 @Getter
 @Setter
 public class ReferentielCorrespondanceRefEquipement {
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielImpactEquipement.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielImpactEquipement.java
deleted file mode 100644
index 7aa514cd..00000000
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielImpactEquipement.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.mte.numecoeval.calculs.domain.data.referentiel;
-
-import lombok.Builder;
-import lombok.Data;
-
-@Builder
-@Data
-public class ReferentielImpactEquipement {
-    String refEquipement;
-    String etape;
-    String critere;
-    String source;
-    String type;
-    Double valeur;
-    Double consoElecMoyenne;
-}
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielImpactReseau.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielImpactReseau.java
deleted file mode 100644
index 6ed08356..00000000
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielImpactReseau.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.mte.numecoeval.calculs.domain.data.referentiel;
-
-import lombok.Builder;
-import lombok.Data;
-
-@Builder
-@Data
-public class ReferentielImpactReseau {
-
-    private String refReseau;
-    private String critere;
-    private String etapeACV;
-    private String unite;
-    private String source;
-    private Double impactReseauMobileMoyen;
-    private Double consoElecMoyenne;
-
-
-}
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielMixElectrique.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielMixElectrique.java
deleted file mode 100644
index 67ca4449..00000000
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielMixElectrique.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.mte.numecoeval.calculs.domain.data.referentiel;
-
-import lombok.Builder;
-import lombok.Data;
-
-@Builder
-@Data
-public class ReferentielMixElectrique {
-    String pays;
-    String raccourcisAnglais;
-    String critere;
-    Double valeur;
-    String source;
-}
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielTypeEquipement.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielTypeEquipement.java
deleted file mode 100644
index 7a762ff5..00000000
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/referentiel/ReferentielTypeEquipement.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.mte.numecoeval.calculs.domain.data.referentiel;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.Setter;
-
-@Builder
-@AllArgsConstructor
-@Getter
-@Setter
-public class ReferentielTypeEquipement {
-    String type;
-
-    Boolean serveur;
-
-    String commentaire;
-
-    Double dureeVieDefaut;
-
-    String source;
-
-    String refEquipementParDefaut;
-}
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/trace/TraceCalculImpactEquipementPhysique.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/trace/TraceCalculImpactEquipementPhysique.java
index a8236a86..f3d000e3 100644
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/trace/TraceCalculImpactEquipementPhysique.java
+++ b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/data/trace/TraceCalculImpactEquipementPhysique.java
@@ -11,8 +11,8 @@ public class TraceCalculImpactEquipementPhysique {
     private String formule;
     private ConsoElecAnMoyenne consoElecAnMoyenne;
     private MixElectrique mixElectrique;
-    private Double valeurReferentielImpactEquipement;
-    private String sourceReferentielImpactEquipement;
+    private Double valeurReferentielFacteurCaracterisation;
+    private String sourceReferentielFacteurCaracterisation;
     private DureeDeVie dureeDeVie;
     private String erreur;
 }
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/CalculImpactReseauService.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/CalculImpactReseauService.java
deleted file mode 100644
index 5d2b8b5b..00000000
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/CalculImpactReseauService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.mte.numecoeval.calculs.domain.port.input.service;
-
-import org.mte.numecoeval.calculs.domain.data.demande.DemandeCalculImpactReseau;
-import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactReseau;
-
-public interface CalculImpactReseauService {
-
-    String REF_RESEAU = "impactReseauMobileMoyen";
-
-    ImpactReseau calculerImpactReseau(DemandeCalculImpactReseau demandeCalcul);
-
-}
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/CalculImpactEquipementPhysiqueServiceImpl.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/CalculImpactEquipementPhysiqueServiceImpl.java
index 27b32aa9..c6956b92 100644
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/CalculImpactEquipementPhysiqueServiceImpl.java
+++ b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/CalculImpactEquipementPhysiqueServiceImpl.java
@@ -6,7 +6,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.mte.numecoeval.calculs.domain.data.demande.DemandeCalculImpactEquipementPhysique;
 import org.mte.numecoeval.calculs.domain.data.erreur.TypeErreurCalcul;
 import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactEquipementPhysique;
-import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielImpactEquipement;
+import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielFacteurCaracterisation;
 import org.mte.numecoeval.calculs.domain.data.trace.ConsoElecAnMoyenne;
 import org.mte.numecoeval.calculs.domain.data.trace.DureeDeVie;
 import org.mte.numecoeval.calculs.domain.data.trace.MixElectrique;
@@ -26,8 +26,8 @@ public class CalculImpactEquipementPhysiqueServiceImpl implements CalculImpactEq
     private static final String VERSION_CALCUL = "1.0";
     public static final String NB_JOUR_UTILISE_PAR_DEFAUT = "NbJourUtiliseParDefaut";
     public static final String ERREUR_DE_CALCUL_IMPACT_EQUIPEMENT_MESSAGE = "Erreur de calcul impact équipement: Type: {}, Cause: {}, Etape: {}, Critere: {}, Equipement Physique: {}, RefEquipementRetenu: {}, RefEquipementParDefaut: {}";
-    private final DureeDeVieEquipementPhysiqueService dureeDeVieEquipementPhysiqueService;
 
+    private final DureeDeVieEquipementPhysiqueService dureeDeVieEquipementPhysiqueService;
 
     public ImpactEquipementPhysique calculerImpactEquipementPhysique(DemandeCalculImpactEquipementPhysique demandeCalcul) {
         log.debug("Début de calcul d'impact d'équipement physique : {}, {}, {} ",
@@ -44,7 +44,7 @@ public class CalculImpactEquipementPhysiqueServiceImpl implements CalculImpactEq
                     demandeCalcul.getCritere().getNomCritere(),
                     demandeCalcul.getEquipementPhysique().getNomEquipementPhysique(),
                     demandeCalcul.getRefEquipementCible(),
-                    demandeCalcul.getRefEquipementParDefaut());
+                    demandeCalcul.getRefItemParDefaut());
             impactErreur = buildCalculImpactForError(demandeCalcul, e);
         } catch (Exception e) {
             log.debug("{} : Erreur de calcul impact équipement physique: Erreur technique de l'indicateur : {}", TypeErreurCalcul.ERREUR_TECHNIQUE.getCode(), e.getMessage());
@@ -71,9 +71,9 @@ public class CalculImpactEquipementPhysiqueServiceImpl implements CalculImpactEq
             consoElecMoyenne = consoElecAnMoyenne.getValeur();
             traceCalculImpactEquipementPhysique = TraceCalculImpactEquipementPhysiqueUtils.buildTracePremierScenario(quantite, consoElecAnMoyenne, mixElectrique, tauxUtilisationEqPhysique);
         } else {
-            var refImpactEquipementOpt = getImpactEquipement(demandeCalcul);
+            var refImpactEquipementOpt = getFacteurCaracterisation(demandeCalcul);
             if (refImpactEquipementOpt.isPresent()) {
-                ReferentielImpactEquipement referentielImpactEquipement = refImpactEquipementOpt.get();
+                ReferentielFacteurCaracterisation referentielImpactEquipement = refImpactEquipementOpt.get();
                 var valeurReferentiel = referentielImpactEquipement.getValeur();
                 valeurImpactUnitaire = quantite * valeurReferentiel * tauxUtilisationEqPhysique;
                 DureeDeVie dureeVie = dureeDeVieEquipementPhysiqueService.calculerDureeVie(demandeCalcul);
@@ -85,7 +85,7 @@ public class CalculImpactEquipementPhysiqueServiceImpl implements CalculImpactEq
                     throw new CalculImpactException(TypeErreurCalcul.ERREUR_FONCTIONNELLE.getCode(), "Durée de vie de l'équipement inconnue");
                 }
             } else {
-                throw new CalculImpactException(TypeErreurCalcul.ERREUR_FONCTIONNELLE.getCode(), "Référentiel Impact Equipement inconnu");
+                throw new CalculImpactException(TypeErreurCalcul.ERREUR_FONCTIONNELLE.getCode(), "Référentiel Facteur Caracterisation inconnu");
             }
         }
 
@@ -94,17 +94,17 @@ public class CalculImpactEquipementPhysiqueServiceImpl implements CalculImpactEq
         return calcul;
     }
 
-    private Optional<ReferentielImpactEquipement> getImpactEquipement(DemandeCalculImpactEquipementPhysique demandeCalcul) {
+    private Optional<ReferentielFacteurCaracterisation> getFacteurCaracterisation(DemandeCalculImpactEquipementPhysique demandeCalcul) {
 
-        Optional<ReferentielImpactEquipement> resultFromRefEquipementCible = Optional.empty();
+        Optional<ReferentielFacteurCaracterisation> resultFromRefEquipementCible = Optional.empty();
         if (StringUtils.isNotBlank(demandeCalcul.getRefEquipementCible())) {
-            resultFromRefEquipementCible = demandeCalcul.getImpactEquipement(
+            resultFromRefEquipementCible = demandeCalcul.getFacteurCaracterisation(
                     demandeCalcul.getCorrespondanceRefEquipement().getRefEquipementCible()
             );
         }
         if (resultFromRefEquipementCible.isEmpty()) {
-            return demandeCalcul.getImpactEquipement(
-                    demandeCalcul.getRefEquipementParDefaut()
+            return demandeCalcul.getFacteurCaracterisation(
+                    demandeCalcul.getRefItemParDefaut()
             );
         }
         return resultFromRefEquipementCible;
@@ -118,7 +118,7 @@ public class CalculImpactEquipementPhysiqueServiceImpl implements CalculImpactEq
                 .critere(demandeCalcul.getCritere().getNomCritere())
                 .dateCalcul(demandeCalcul.getDateCalcul())
                 .versionCalcul(VERSION_CALCUL)
-                .reference(StringUtils.defaultIfEmpty(demandeCalcul.getRefEquipementCible(), demandeCalcul.getRefEquipementParDefaut()))
+                .reference(StringUtils.defaultIfEmpty(demandeCalcul.getRefEquipementCible(), demandeCalcul.getRefItemParDefaut()))
                 .typeEquipement(demandeCalcul.getEquipementPhysique().getType())
                 .quantite(demandeCalcul.getEquipementPhysique().getQuantite())
                 .statutEquipementPhysique(demandeCalcul.getEquipementPhysique().getStatut())
@@ -143,7 +143,7 @@ public class CalculImpactEquipementPhysiqueServiceImpl implements CalculImpactEq
                 .critere(demandeCalcul.getCritere().getNomCritere())
                 .dateCalcul(demandeCalcul.getDateCalcul())
                 .versionCalcul(VERSION_CALCUL)
-                .reference(StringUtils.defaultIfEmpty(demandeCalcul.getRefEquipementCible(), demandeCalcul.getRefEquipementParDefaut()))
+                .reference(StringUtils.defaultIfEmpty(demandeCalcul.getRefEquipementCible(), demandeCalcul.getRefItemParDefaut()))
                 .typeEquipement(demandeCalcul.getEquipementPhysique().getType())
                 .quantite(demandeCalcul.getEquipementPhysique().getQuantite())
                 .statutEquipementPhysique(demandeCalcul.getEquipementPhysique().getStatut())
@@ -170,21 +170,20 @@ public class CalculImpactEquipementPhysiqueServiceImpl implements CalculImpactEq
                     .build();
         }
 
-
-        if (StringUtils.isAllBlank(demandeCalcul.getRefEquipementCible(), demandeCalcul.getRefEquipementParDefaut())) {
-            throw new CalculImpactException(TypeErreurCalcul.ERREUR_FONCTIONNELLE.getCode(), "Référentiel Impact Equipement inconnu");
+        if (StringUtils.isAllBlank(demandeCalcul.getRefEquipementCible(), demandeCalcul.getRefItemParDefaut())) {
+            throw new CalculImpactException(TypeErreurCalcul.ERREUR_FONCTIONNELLE.getCode(), "Référentiel Facteur Caracterisation inconnu");
         }
 
-        var referentielImpactEquipementOpt = getImpactEquipement(demandeCalcul);
+        var referentielImpactEquipementOpt = getFacteurCaracterisation(demandeCalcul);
         if (referentielImpactEquipementOpt.isEmpty()) {
-            throw new CalculImpactException(TypeErreurCalcul.ERREUR_FONCTIONNELLE.getCode(), "Référentiel Impact Equipement inconnu");
+            throw new CalculImpactException(TypeErreurCalcul.ERREUR_FONCTIONNELLE.getCode(), "Référentiel Facteur Caracterisation inconnu");
         }
 
         if (referentielImpactEquipementOpt.get().getConsoElecMoyenne() == null) {
             throw new CalculImpactException(TypeErreurCalcul.ERREUR_FONCTIONNELLE.getCode(),
                     "Donnée de consommation electrique manquante : equipementPhysique : " + demandeCalcul.getEquipementPhysique().getNomEquipementPhysique() +
                             ", RefEquipementCible : " + demandeCalcul.getRefEquipementCible() +
-                            ", RefEquipementParDefaut : " + demandeCalcul.getRefEquipementParDefaut()
+                            ", RefItemParDefaut : " + demandeCalcul.getRefItemParDefaut()
             );
         }
 
@@ -198,25 +197,25 @@ public class CalculImpactEquipementPhysiqueServiceImpl implements CalculImpactEq
     }
 
     private MixElectrique getMixElectrique(DemandeCalculImpactEquipementPhysique demandeCalcul) throws CalculImpactException {
-        // Taiga #918 - EquipementPhysique.dataCenter != null est équivalent à EquipementPhysique.nomCourtDatacenter est renseigné + le DataCenter existe dans les données
+        // EquipementPhysique.dataCenter != null est équivalent à EquipementPhysique.nomCourtDatacenter est renseigné + le DataCenter existe dans les données
         if (demandeCalcul.getEquipementPhysique().getDataCenter() != null
                 && StringUtils.isNotBlank(demandeCalcul.getEquipementPhysique().getDataCenter().getLocalisation())) {
             var pays = demandeCalcul.getEquipementPhysique().getDataCenter().getLocalisation();
-            var refMixElecOpt = demandeCalcul.getMixElectrique(pays);
+            var refMixElecOpt = demandeCalcul.getMixElectriqueFromFacteurCaracterisation(pays);
             if (refMixElecOpt.isPresent()) {
-                var refMixElec = refMixElecOpt.get().getValeur();
+                var refMixElec = refMixElecOpt.get();
                 var pue = getDataCenterPUE(demandeCalcul);
                 return MixElectrique.builder()
                         .isServeur(true)
                         .dataCenterPue(pue)
-                        .valeurReferentielMixElectrique(refMixElec)
-                        .sourceReferentielMixElectrique(refMixElecOpt.get().getSource())
-                        .valeur(refMixElec * pue)
+                        .valeurReferentielMixElectrique(refMixElec.getValeur())
+                        .sourceReferentielMixElectrique(refMixElec.getSource())
+                        .valeur(refMixElec.getValeur() * pue)
                         .build();
             }
         }
         if (StringUtils.isNotBlank(demandeCalcul.getEquipementPhysique().getPaysDUtilisation())) {
-            var refMixElecOpt = demandeCalcul.getMixElectrique(demandeCalcul.getEquipementPhysique().getPaysDUtilisation());
+            var refMixElecOpt = demandeCalcul.getMixElectriqueFromFacteurCaracterisation(demandeCalcul.getEquipementPhysique().getPaysDUtilisation());
             if (refMixElecOpt.isPresent()) {
                 var refMixElec = refMixElecOpt.get();
                 return MixElectrique.builder()
@@ -229,7 +228,7 @@ public class CalculImpactEquipementPhysiqueServiceImpl implements CalculImpactEq
         throw new CalculImpactException(TypeErreurCalcul.ERREUR_FONCTIONNELLE.getCode(),
                 "Il n'existe pas de Mix électrique pour cet équipement : critere: " + demandeCalcul.getCritere().getNomCritere() +
                         " - equipement: " + demandeCalcul.getEquipementPhysique().getNomEquipementPhysique() +
-                        " - Pays d'utilisation: " + demandeCalcul.getEquipementPhysique().getPaysDUtilisation() +
+                        " - Localisation: " + demandeCalcul.getEquipementPhysique().getPaysDUtilisation() +
                         " - NomCourtDatacenter: " + demandeCalcul.getEquipementPhysique().getNomCourtDatacenter()
 
         );
@@ -248,7 +247,7 @@ public class CalculImpactEquipementPhysiqueServiceImpl implements CalculImpactEq
                 "Le PUE est manquant et ne permet le calcul de l'impact à l'usage de l'équipement :" +
                         " equipement: " + demandeCalcul.getEquipementPhysique().getNomEquipementPhysique() +
                         " - RefEquipementCible: " + demandeCalcul.getRefEquipementCible() +
-                        " - refEquipementParDefaut: " + demandeCalcul.getRefEquipementParDefaut() +
+                        " - refItemParDefaut: " + demandeCalcul.getRefItemParDefaut() +
                         " - NomCourtDatacenter: " + demandeCalcul.getEquipementPhysique().getNomCourtDatacenter()
 
         );
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/CalculImpactReseauServiceImpl.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/CalculImpactReseauServiceImpl.java
deleted file mode 100644
index 74f449d0..00000000
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/CalculImpactReseauServiceImpl.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package org.mte.numecoeval.calculs.domain.port.input.service.impl;
-
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.mte.numecoeval.calculs.domain.data.demande.DemandeCalculImpactReseau;
-import org.mte.numecoeval.calculs.domain.data.erreur.TypeErreurCalcul;
-import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactReseau;
-import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielImpactReseau;
-import org.mte.numecoeval.calculs.domain.exception.CalculImpactException;
-import org.mte.numecoeval.calculs.domain.port.input.service.CalculImpactReseauService;
-import org.mte.numecoeval.calculs.domain.traceur.TraceCalculImpactReseauUtils;
-import org.mte.numecoeval.calculs.domain.traceur.TraceUtils;
-
-import java.util.Objects;
-
-@Slf4j
-@AllArgsConstructor
-public class CalculImpactReseauServiceImpl implements CalculImpactReseauService {
-
-    private static final String VERSION_CALCUL = "1.0";
-
-    @Override
-    public ImpactReseau calculerImpactReseau(DemandeCalculImpactReseau demandeCalcul) {
-        try {
-            if (demandeCalcul.getEquipementPhysique().getGoTelecharge() == null) {
-                throw new CalculImpactException(
-                        TypeErreurCalcul.ERREUR_FONCTIONNELLE.getCode(),
-                        "Erreur de calcul impact réseau: Etape: %s, Critere: %s, Equipement Physique: %s : la valeur en_EqP(Equipement).goTelecharge est nulle"
-                                .formatted(
-                                        demandeCalcul.getEtape().getCode(),
-                                        demandeCalcul.getCritere().getNomCritere(),
-                                        demandeCalcul.getEquipementPhysique().getNomEquipementPhysique()
-                                )
-                );
-            }
-
-            var referentielImpactReseau = getReferentielImpactReseau(demandeCalcul, REF_RESEAU);
-
-            return calculerImpact(demandeCalcul, referentielImpactReseau);
-        } catch (CalculImpactException exception) {
-            log.debug("{} : {}", exception.getErrorType(), exception.getMessage());
-            return buildCalculForError(demandeCalcul, exception);
-        } catch (Exception exception) {
-            log.debug("{} : {}", TypeErreurCalcul.ERREUR_TECHNIQUE, exception.getMessage());
-            return buildCalculForError(demandeCalcul, new CalculImpactException(TypeErreurCalcul.ERREUR_TECHNIQUE.getCode(), exception.getMessage()));
-        }
-    }
-
-    private ReferentielImpactReseau getReferentielImpactReseau(DemandeCalculImpactReseau demandeCalcul, String refReseau) throws CalculImpactException {
-        var referentielImpactReseau = demandeCalcul.getImpactsReseau().stream()
-                .filter(Objects::nonNull)
-                .filter(refImpactReseau ->
-                        demandeCalcul.getEtape().getCode().equals(refImpactReseau.getEtapeACV())
-                                && demandeCalcul.getCritere().getNomCritere().equals(refImpactReseau.getCritere())
-                                && refReseau.equals(refImpactReseau.getRefReseau())
-                )
-                .findFirst()
-                .orElseThrow(() -> new CalculImpactException(
-                                TypeErreurCalcul.ERREUR_FONCTIONNELLE.getCode(),
-                                "Erreur de calcul impact réseau: Etape: %s, Critere: %s, RefReseau: %s, Equipement Physique: %s : La référence ImpactReseau n'existe pas."
-                                        .formatted(
-                                                demandeCalcul.getEtape().getCode(),
-                                                demandeCalcul.getCritere().getNomCritere(),
-                                                REF_RESEAU,
-                                                demandeCalcul.getEquipementPhysique().getNomEquipementPhysique()
-                                        )
-                        )
-                );
-
-        if (Objects.isNull(referentielImpactReseau.getImpactReseauMobileMoyen())) {
-            throw new CalculImpactException(
-                    TypeErreurCalcul.ERREUR_FONCTIONNELLE.getCode(),
-                    "Erreur de calcul impact réseau: Etape: %s, Critere: %s, RefReseau: %s, Equipement Physique: %s : L'impactReseauMobileMoyen de la référence est null."
-                            .formatted(
-                                    demandeCalcul.getEtape().getCode(),
-                                    demandeCalcul.getCritere().getNomCritere(),
-                                    REF_RESEAU,
-                                    demandeCalcul.getEquipementPhysique().getNomEquipementPhysique()
-                            )
-            );
-        }
-
-        return referentielImpactReseau;
-    }
-
-    private ImpactReseau calculerImpact(DemandeCalculImpactReseau demandeCalcul, ReferentielImpactReseau referentielImpactReseau) {
-        return ImpactReseau.builder()
-                .versionCalcul(VERSION_CALCUL)
-                .dateCalcul(demandeCalcul.getDateCalcul())
-                .nomLot(demandeCalcul.getEquipementPhysique().getNomLot())
-                .nomSourceDonnee(demandeCalcul.getEquipementPhysique().getNomSourceDonnee())
-                .dateLot(demandeCalcul.getEquipementPhysique().getDateLot())
-                .etapeACV(demandeCalcul.getEtape().getCode())
-                .critere(demandeCalcul.getCritere().getNomCritere())
-                .statutIndicateur("OK")
-                .source(referentielImpactReseau.getSource())
-                .nomEntite(demandeCalcul.getEquipementPhysique().getNomEntite())
-                .nomOrganisation(demandeCalcul.getEquipementPhysique().getNomOrganisation())
-                .nomEquipement(demandeCalcul.getEquipementPhysique().getNomEquipementPhysique())
-                .impactUnitaire(
-                        demandeCalcul.getEquipementPhysique().getGoTelecharge() * referentielImpactReseau.getImpactReseauMobileMoyen()
-                )
-                .unite(referentielImpactReseau.getUnite())
-                .trace(
-                        TraceUtils.getTraceFromTraceur(
-                                TraceCalculImpactReseauUtils.buildTrace(demandeCalcul, referentielImpactReseau))
-                )
-                .build();
-    }
-
-    private ImpactReseau buildCalculForError(DemandeCalculImpactReseau demandeCalcul, CalculImpactException exception) {
-        return ImpactReseau.builder()
-                .versionCalcul(VERSION_CALCUL)
-                .dateCalcul(demandeCalcul.getDateCalcul())
-                .nomLot(demandeCalcul.getEquipementPhysique().getNomLot())
-                .nomSourceDonnee(demandeCalcul.getEquipementPhysique().getNomSourceDonnee())
-                .dateLot(demandeCalcul.getEquipementPhysique().getDateLot())
-                .etapeACV(demandeCalcul.getEtape().getCode())
-                .critere(demandeCalcul.getCritere().getNomCritere())
-                .statutIndicateur("ERREUR")
-                .nomEntite(demandeCalcul.getEquipementPhysique().getNomEntite())
-                .nomOrganisation(demandeCalcul.getEquipementPhysique().getNomOrganisation())
-                .nomEquipement(demandeCalcul.getEquipementPhysique().getNomEquipementPhysique())
-                .unite(demandeCalcul.getCritere().getUnite())
-                .impactUnitaire(null)
-                .unite(demandeCalcul.getCritere().getUnite())
-                .trace(TraceUtils.getTraceFromTraceur(
-                        TraceCalculImpactReseauUtils.buildTraceErreur(exception))
-                )
-                .build();
-    }
-
-}
\ No newline at end of file
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/DureeDeVieEquipementPhysiqueServiceImpl.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/DureeDeVieEquipementPhysiqueServiceImpl.java
index 58e22f1d..b22c5f0c 100644
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/DureeDeVieEquipementPhysiqueServiceImpl.java
+++ b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/port/input/service/impl/DureeDeVieEquipementPhysiqueServiceImpl.java
@@ -125,11 +125,11 @@ public class DureeDeVieEquipementPhysiqueServiceImpl implements DureeDeVieEquipe
     @Override
     public DureeDeVieParDefaut calculerDureeVieDefaut(DemandeCalculImpactEquipementPhysique demandeCalcul) throws CalculImpactException {
 
-        if (demandeCalcul.getTypeEquipement() != null && demandeCalcul.getTypeEquipement().getDureeVieDefaut() != null) {
+        if (demandeCalcul.getTypeItem() != null && demandeCalcul.getTypeItem().getDureeVieDefaut() != null) {
             return DureeDeVieParDefaut.builder()
-                    .valeurTypeItemDureeVieDefaut(demandeCalcul.getTypeEquipement().getDureeVieDefaut())
-                    .sourceTypeItemDureeVieDefaut(demandeCalcul.getTypeEquipement().getSource())
-                    .valeur(demandeCalcul.getTypeEquipement().getDureeVieDefaut())
+                    .valeurTypeItemDureeVieDefaut(demandeCalcul.getTypeItem().getDureeVieDefaut())
+                    .sourceTypeItemDureeVieDefaut(demandeCalcul.getTypeItem().getSource())
+                    .valeur(demandeCalcul.getTypeItem().getDureeVieDefaut())
                     .build();
         }
 
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/traceur/TraceCalculImpactEquipementPhysiqueUtils.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/traceur/TraceCalculImpactEquipementPhysiqueUtils.java
index 42560d27..acf0260c 100644
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/traceur/TraceCalculImpactEquipementPhysiqueUtils.java
+++ b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/traceur/TraceCalculImpactEquipementPhysiqueUtils.java
@@ -32,8 +32,8 @@ public class TraceCalculImpactEquipementPhysiqueUtils {
     public static TraceCalculImpactEquipementPhysique buildTraceSecondScenario(Double quantite, Double valeurRefrentiel, String sourceReferentiel, DureeDeVie dureeDeVie, Double taux_utilisation) {
         return TraceCalculImpactEquipementPhysique.builder()
                 .formule(getFormuleSecondScenario(quantite, valeurRefrentiel, dureeDeVie.getValeurRetenue(), taux_utilisation))
-                .valeurReferentielImpactEquipement(valeurRefrentiel)
-                .sourceReferentielImpactEquipement(sourceReferentiel)
+                .valeurReferentielFacteurCaracterisation(valeurRefrentiel)
+                .sourceReferentielFacteurCaracterisation(sourceReferentiel)
                 .dureeDeVie(dureeDeVie)
                 .build();
     }
diff --git a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/traceur/TraceCalculImpactReseauUtils.java b/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/traceur/TraceCalculImpactReseauUtils.java
deleted file mode 100644
index 69c37222..00000000
--- a/services/calculs/src/main/java/org/mte/numecoeval/calculs/domain/traceur/TraceCalculImpactReseauUtils.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.mte.numecoeval.calculs.domain.traceur;
-
-import org.mte.numecoeval.calculs.domain.data.demande.DemandeCalculImpactReseau;
-import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielImpactReseau;
-import org.mte.numecoeval.calculs.domain.data.trace.TraceCalculImpactReseau;
-import org.mte.numecoeval.calculs.domain.exception.CalculImpactException;
-
-public class TraceCalculImpactReseauUtils {
-    private TraceCalculImpactReseauUtils() {
-    }
-
-    private static String getFormule(Float goTelecharge, String critere, String etapeACV, String equipementPhysique, Double impactReseauMobileMoyen) {
-        return "impactReseau = 'equipementPhysique.goTelecharge (%s) x ref_ImpactReseau(%s, %s, %s).valeur(%s)'".formatted(goTelecharge, critere, etapeACV, equipementPhysique, impactReseauMobileMoyen);
-    }
-
-    public static TraceCalculImpactReseau buildTraceErreur(CalculImpactException exception) {
-        var message = "Erreur lors du calcul de l'impact réseau pour un équipement physique";
-        if(exception != null) {
-            message = exception.getErrorType() + " : " + exception.getMessage();
-        }
-        return TraceCalculImpactReseau.builder()
-                .erreur(message)
-                .build();
-    }
-
-    public static TraceCalculImpactReseau buildTrace(DemandeCalculImpactReseau demandeCalculImpactReseau, ReferentielImpactReseau referentielImpactReseau){
-
-        return TraceCalculImpactReseau.builder()
-                .critere(demandeCalculImpactReseau.getCritere().getNomCritere())
-                .etapeACV(demandeCalculImpactReseau.getEtape().getCode())
-                .equipementPhysique(demandeCalculImpactReseau.getEquipementPhysique().getNomEquipementPhysique())
-                .impactReseauMobileMoyen(referentielImpactReseau.getImpactReseauMobileMoyen().toString())
-                .goTelecharge(demandeCalculImpactReseau.getEquipementPhysique().getGoTelecharge().toString())
-                .sourceReferentielReseau(referentielImpactReseau.getSource())
-                .formule(getFormule(
-                        demandeCalculImpactReseau.getEquipementPhysique().getGoTelecharge(),
-                        demandeCalculImpactReseau.getCritere().getNomCritere(),
-                        demandeCalculImpactReseau.getEtape().getCode(),
-                        referentielImpactReseau.getRefReseau(),
-                        referentielImpactReseau.getImpactReseauMobileMoyen()
-                ))
-                .build();
-    }
-}
diff --git a/services/calculs/src/test/java/org/mte/numecoeval/calculs/domain/service/CalculImpactEquipementPhysiqueServiceTest.java b/services/calculs/src/test/java/org/mte/numecoeval/calculs/domain/service/CalculImpactEquipementPhysiqueServiceTest.java
index 38135838..a638acf6 100644
--- a/services/calculs/src/test/java/org/mte/numecoeval/calculs/domain/service/CalculImpactEquipementPhysiqueServiceTest.java
+++ b/services/calculs/src/test/java/org/mte/numecoeval/calculs/domain/service/CalculImpactEquipementPhysiqueServiceTest.java
@@ -11,7 +11,6 @@ import org.mockito.junit.jupiter.MockitoExtension;
 import org.mte.numecoeval.calculs.domain.data.demande.DemandeCalculImpactEquipementPhysique;
 import org.mte.numecoeval.calculs.domain.data.demande.OptionsCalcul;
 import org.mte.numecoeval.calculs.domain.data.entree.DataCenter;
-import org.mte.numecoeval.calculs.domain.data.entree.EquipementPhysique;
 import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactEquipementPhysique;
 import org.mte.numecoeval.calculs.domain.data.referentiel.*;
 import org.mte.numecoeval.calculs.domain.data.trace.ConsoElecAnMoyenne;
@@ -30,10 +29,9 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
-import java.util.Collections;
+import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.*;
 
 
@@ -41,767 +39,432 @@ import static org.mockito.Mockito.*;
 class CalculImpactEquipementPhysiqueServiceTest {
 
     private CalculImpactEquipementPhysiqueService calculImpactEquipementPhysiqueService;
-    private String etapeACV;
-    private ReferentielCritere critere;
-    private LocalDateTime dateCalcul;
-    private String refEquipementCible;
-    private String refEquipementParDefaut;
-    private EquipementPhysique equipementPhysique;
-    private ReferentielImpactEquipement referentielImpactEquipement;
-    private ReferentielMixElectrique referentielMixElectrique;
-    ReferentielCorrespondanceRefEquipement refEquipement;
-    ReferentielTypeEquipement typeEquipement;
-    ReferentielHypothese referentielHypothese;
+
     @Mock
     private DureeDeVieEquipementPhysiqueServiceImpl dureeDeVieEquipementPhysiqueService;
 
+    private static final ObjectMapper objectMapper = new ObjectMapper();
+
+    private DemandeCalculImpactEquipementPhysique createDemande() {
+        try {
+            var res = objectMapper.readValue("""
+                       {
+                         "equipementPhysique": {
+                           "nomEquipementPhysique" : "Apple Iphone 11",
+                           "nomOrganisation": "Test",
+                           "nomLot": "Test|20220101",
+                           "type" : "telephone",
+                           "modele": "iphone-11",
+                           "paysDUtilisation": "France",
+                           "quantite": 1.0                         },
+                         "etape": {
+                           "code": "UTILISATION"
+                         },
+                         "critere": {
+                           "nomCritere": "Changement Climatique",
+                           "unite": "kg CO_{2} eq"
+                         },
+                         "correspondanceRefEquipement":{
+                           "refEquipementCible": "iphone",
+                           "modeleEquipementSource" : "iphone-11"
+                         },
+                         "facteurCaracterisations":[
+                           {
+                             "nom": "Electricty Mix FR",
+                             "etape": "FABRICATION",
+                             "critere": "Changement Climatique",
+                             "categorie" : "electricity-mix",
+                             "niveau": "0-Base data",
+                             "localisation": "France",
+                             "source": "CAF1",
+                             "valeur" : 0.08
+                           },
+                           {
+                             "nom": "iphone",
+                             "niveau" : "2-Equipement",
+                             "etape": "UTILISATION",
+                             "critere": "Changement Climatique",
+                             "consoElecMoyenne":10
+                           }],
+                         "hypotheses": []
+                       }
+                    """, DemandeCalculImpactEquipementPhysique.class);
+            res.setDateCalcul(LocalDateTime.parse("2024-01-01T00:00:00"));
+            return res;
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
     @BeforeEach
-    public void init() throws Exception {
+    public void init() {
         MockitoAnnotations.openMocks(this);
-        calculImpactEquipementPhysiqueService = new CalculImpactEquipementPhysiqueServiceImpl(
-                dureeDeVieEquipementPhysiqueService
-        );
-        etapeACV = "UTILISATION";
-        String etapeACV = "UTILISATION";
-        critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        dateCalcul = LocalDateTime.now();
-        refEquipementCible = "Apple Iphone 11";
-        refEquipementParDefaut = "Apple Iphone 11";
-        equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Téléphone")
-                .nomEquipementPhysique("Apple Iphone 11")
-                .modele("Apple Iphone 11")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(216.0)
-                .consoElecAnnuelle(0.09)
-                .modeUtilisation("COPE")
-                .build();
-        referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .source("CAF1")
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .refEquipement(refEquipementCible)
-                .consoElecMoyenne(0.09)
-                .build();
-        referentielMixElectrique = ReferentielMixElectrique.builder()
-                .critere(critere.getNomCritere())
-                .pays("France")
-                .raccourcisAnglais("FR")
-                .source("CAF1")
-                .valeur(0.0813225)
-                .build();
-        refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
+        calculImpactEquipementPhysiqueService = new CalculImpactEquipementPhysiqueServiceImpl(dureeDeVieEquipementPhysiqueService);
     }
 
-    @Test
-    void shouldCalculerImpactEquipementPhysique_CAF1() {
 
+    @Test
+    void shouldCalculerImpactEquipementPhysique_CAF1() throws JsonProcessingException {
         //Given
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "Apple Iphone 11";
-        String refEquipementParDefaut = "Apple Iphone 11";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Téléphone")
-                .nomEquipementPhysique("Apple Iphone 11")
-                .modele("Apple Iphone 11")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(216.0)
-                // Consommation electrique annuelle à null, celle du référentiel sera utilisé
-                .consoElecAnnuelle(null)
-                .build();
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .source("CAF1")
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .refEquipement(refEquipementCible)
-                .consoElecMoyenne(0.09)
-                .build();
-        ReferentielMixElectrique referentielMixElectrique = ReferentielMixElectrique.builder()
-                .critere(critere.getNomCritere())
-                .pays("France")
-                .raccourcisAnglais("FR")
-                .source("CAF1")
-                .valeur(0.0813225)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "Electricty Mix FR",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "categorie": "electricity-mix",
+                     "niveau": "0-Base data",
+                     "localisation": "France",
+                     "source": "CAF1",
+                     "valeur": 0.08
+                   },
+                   {
+                     "nom": "iphone",
+                     "niveau": "2-Equipement",
+                     "etape": "UTILISATION",
+                     "critere": "Changement Climatique",
+                     "consoElecMoyenne": 10
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
 
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
-        assertEquals(dateCalcul, actual.getDateCalcul());
+        assertEquals(LocalDateTime.parse("2024-01-01T00:00:00"), actual.getDateCalcul());
         assertNotNull(actual.getImpactUnitaire());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
-        assertEquals(0.0073, actualImpactUnitaireLimited);
-        assertEquals(referentielImpactEquipement.getConsoElecMoyenne(), actual.getConsoElecMoyenne());
+        assertEquals(0.8, actualImpactUnitaireLimited);
+        assertEquals(10, actual.getConsoElecMoyenne());
     }
 
-    /* même cas que le CAF1 mais avec une consoElecAnnuelle à 0 au lieu de null.
+    /**
+     * même cas que le CAF1 mais avec une consoElecAnnuelle à 0 au lieu de null.
      * Conformément au Taiga 895 : le 0 est bien appliqué et ramène le résultat à 0
      */
     @Test
     void taiga895_shouldApplyConsoElecAnnuelWithConsoElecAnnuelleAt0_CAF1() {
 
         //Given
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "Apple Iphone 11";
-        String refEquipementParDefaut = "Apple Iphone 11";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Téléphone")
-                .nomEquipementPhysique("Apple Iphone 11")
-                .modele("Apple Iphone 11")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(216.0)
-                // Consommation electrique annuelle à 0, elle sera utilisé et rend le calcul à 0
-                .consoElecAnnuelle(0.0)
-                .build();
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .source("CAF1")
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .refEquipement(equipementPhysique.getModele())
-                .consoElecMoyenne(0.09)
-                .build();
-        ReferentielMixElectrique referentielMixElectrique = ReferentielMixElectrique.builder()
-                .critere(critere.getNomCritere())
-                .pays("France")
-                .raccourcisAnglais("FR")
-                .source("CAF1")
-                .valeur(0.0813225)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setConsoElecAnnuelle(0.0);
 
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
-        assertEquals(dateCalcul, actual.getDateCalcul());
         assertNotNull(actual.getImpactUnitaire());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
         assertEquals(0, actualImpactUnitaireLimited);
         assertEquals(0, actual.getConsoElecMoyenne());
-        assertNotEquals(referentielImpactEquipement.getConsoElecMoyenne(), actual.getConsoElecMoyenne());
     }
 
     @Test
-    void shouldCalculerImpactEquipementPhysique_CAF2_neededCorrection() {
+    void shouldCalculerImpactEquipementPhysique_CAF2_neededCorrection() throws JsonProcessingException {
 
         //Given
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "Ecran2";
-        String refEquipementParDefaut = "Ecran2";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Ecran")
-                .nomEquipementPhysique("Ecran2")
-                .modele("Ecran2")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(30.0)
-                .build();
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .source("CAF2")
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .refEquipement(equipementPhysique.getModele())
-                .consoElecMoyenne(70.0)
-                .build();
-        ReferentielMixElectrique referentielMixElectrique = ReferentielMixElectrique.builder()
-                .critere(critere.getNomCritere())
-                .pays("France")
-                .raccourcisAnglais("FR")
-                .source("CAF1")
-                .valeur(0.0813225)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .build();
-
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "Electricty Mix FR",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "categorie": "electricity-mix",
+                     "niveau": "0-Base data",
+                     "localisation": "France",
+                     "source": "CAF1",
+                     "valeur": 0.0813225
+                   },
+                   {
+                     "nom": "iphone",
+                     "niveau": "2-Equipement",
+                     "etape": "UTILISATION",
+                     "critere": "Changement Climatique",
+                     "consoElecMoyenne": 70.0
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
-        assertEquals(dateCalcul, actual.getDateCalcul());
         assertNotNull(actual.getImpactUnitaire());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(3, RoundingMode.DOWN).doubleValue();
         assertEquals(5.692, actualImpactUnitaireLimited);
-        assertEquals(referentielImpactEquipement.getConsoElecMoyenne(), actual.getConsoElecMoyenne());
+        assertEquals(70.0, actual.getConsoElecMoyenne());
     }
 
     @Test
-    void shouldCalculerImpactEquipementPhysique_CAF3_decimalFixing() {
+    void shouldCalculerImpactEquipementPhysique_CAF3_decimalFixing() throws JsonProcessingException {
 
         //Given
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "OrdinateurBureau3";
-        String refEquipementParDefaut = "OrdinateurBureau3";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("OrdinateurBureau")
-                .nomEquipementPhysique("OrdinateurBureau3")
-                .modele("OrdinateurBureau3")
-                .paysDUtilisation("Irlande")
-                .nomCourtDatacenter(null)
-                .quantite(1.0)
-                .nbJourUtiliseAn(365.0)
-                .build();
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .source("CAF3")
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .refEquipement(equipementPhysique.getModele())
-                .consoElecMoyenne(3504.0)
-                .build();
-        ReferentielMixElectrique referentielMixElectrique = ReferentielMixElectrique.builder()
-                .critere(critere.getNomCritere())
-                .pays("Irlande")
-                .raccourcisAnglais("IR")
-                .source("CAF3")
-                .valeur(0.648118)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "Electricty Mix FR",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "categorie": "electricity-mix",
+                     "niveau": "0-Base data",
+                     "localisation": "France",
+                     "source": "CAF1",
+                     "valeur": 0.648118
+                   },
+                   {
+                     "nom": "iphone",
+                     "niveau": "2-Equipement",
+                     "etape": "UTILISATION",
+                     "critere": "Changement Climatique",
+                     "consoElecMoyenne": 3504.0
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
 
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
         assertNotNull(actual.getImpactUnitaire());
-        assertEquals(dateCalcul, actual.getDateCalcul());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
         // quantité * refEquipementPhysique.consoElecMoyenne * MixElec
         assertEquals(BigDecimal.valueOf(1.0 * 3504.0 * 0.648118).setScale(4, RoundingMode.DOWN).doubleValue(), actualImpactUnitaireLimited);
-        assertEquals(referentielImpactEquipement.getConsoElecMoyenne(), actual.getConsoElecMoyenne());
+        assertEquals(3504.0, actual.getConsoElecMoyenne());
     }
 
     @Test
-    void taiga918_DataCenterReferencedAndUsedForPUE_CAF1() {
+    void taiga918_DataCenterReferencedAndUsedForPUE_CAF1() throws JsonProcessingException {
 
         //Given
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
         DataCenter dataCenter = DataCenter.builder()
                 .nomCourtDatacenter("sequoia2")
                 .nomLongDatacenter("sequoia2")
                 .localisation("France")
                 .pue(1.43)
                 .build();
-        String refEquipementCible = "ref-Serveur1";
-        String refEquipementParDefaut = "ref-Serveur1";
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Serveur")
-                .nomEquipementPhysique("Serveur_100")
-                .dateAchat(LocalDate.of(2018, 10, 1))
-                .modele("ref-Serveur1")
-                .paysDUtilisation("France")
-                .serveur(true)
-                .nomCourtDatacenter("sequoia2")
-                .dataCenter(dataCenter)
-                .quantite(2.0)
-                .consoElecAnnuelle(500.0)
-                .nbJourUtiliseAn(365.0)
-                .build();
-        ReferentielMixElectrique referentielMixElectrique = ReferentielMixElectrique.builder()
-                .critere(critere.getNomCritere())
-                .pays("France")
-                .raccourcisAnglais("FR")
-                .source("CAF1")
-                .valeur(0.08)
-                .build();
-
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .build();
+        demandeCalcul.getEquipementPhysique().setConsoElecAnnuelle(500.0);
+        demandeCalcul.getEquipementPhysique().setDataCenter(dataCenter);
+        demandeCalcul.getEquipementPhysique().setQuantite(2.0);
+
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "Electricty Mix FR",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "categorie": "electricity-mix",
+                     "localisation": "France",
+                     "valeur": 0.08
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
 
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
         assertNotNull(actual.getImpactUnitaire());
-        assertEquals(dateCalcul, actual.getDateCalcul());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
         // quantité * equipementPhysique.consoElecAnnuelle * DataCenter.pue * MixElec(France)
         assertEquals(BigDecimal.valueOf(2.0 * 500.0 * 1.43 * 0.08).setScale(4, RoundingMode.DOWN).doubleValue(), actualImpactUnitaireLimited);
     }
 
     @Test
-    void taiga918_DataCenterWithoutPUEAndDefaultPUEUsed_CAF2() {
-
+    void taiga918_DataCenterWithoutPUEAndDefaultPUEUsed_CAF2() throws JsonProcessingException {
         //Given
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
         DataCenter dataCenter = DataCenter.builder()
                 .nomCourtDatacenter("sequoia3")
                 .nomLongDatacenter("sequoia3")
                 .localisation("France")
                 .pue(null)
                 .build();
-        String refEquipementCible = "ref-Serveur4";
-        String refEquipementParDefaut = "ref-Serveur4";
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Serveur")
-                .nomEquipementPhysique("Serveur_104")
-                .modele("ref-Serveur4")
-                .paysDUtilisation("France")
-                .serveur(true)
-                .nomCourtDatacenter("sequoia3")
-                .dataCenter(dataCenter)
-                .consoElecAnnuelle(500.0)
-                .quantite(1.0)
-                .nbJourUtiliseAn(365.0)
-                .build();
-        ReferentielHypothese referentielHypothese = ReferentielHypothese.builder()
-                .valeur(2.0)
-                .code("PUEParDefaut")
-                .source("CAF2")
-                .build();
-        ReferentielMixElectrique referentielMixElectrique = ReferentielMixElectrique.builder()
-                .critere(critere.getNomCritere())
-                .pays("France")
-                .raccourcisAnglais("FR")
-                .source("CAF2")
-                .valeur(0.08)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .hypotheses(Collections.singletonList(referentielHypothese))
-                .build();
+        demandeCalcul.getEquipementPhysique().setConsoElecAnnuelle(500.0);
+        demandeCalcul.getEquipementPhysique().setDataCenter(dataCenter);
+
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "Electricty Mix FR",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "categorie": "electricity-mix",
+                     "localisation": "France",
+                     "valeur": 0.08
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
+        demandeCalcul.setHypotheses(List.of(objectMapper.readValue("""
+                [
+                  {
+                    "code": "PUEParDefaut",
+                    "valeur": "2.0",
+                    "source": "sourceDefault"
+                  }
+                ]
+                """, ReferentielHypothese[].class)));
 
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
         assertNotNull(actual.getImpactUnitaire());
-        assertEquals(dateCalcul, actual.getDateCalcul());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
         // quantité * equipementPhysique.consoElecAnnuelle * ref_Hypothese(PUEParDefaut).valeur * MixElec France
         assertEquals(BigDecimal.valueOf(1.0 * 500.0 * 2.0 * 0.08).setScale(4, RoundingMode.DOWN).doubleValue(), actualImpactUnitaireLimited);
     }
 
     @Test
-    void taiga918_ConsoElecMoyenneUsedFromRef_CAF3() {
+    void taiga918_ConsoElecMoyenneUsedFromRef_CAF3() throws JsonProcessingException {
 
         //Given
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
         DataCenter dataCenter = DataCenter.builder()
                 .nomCourtDatacenter("sequoia2")
                 .nomLongDatacenter("sequoia2")
                 .localisation("France")
                 .pue(1.43)
                 .build();
-        String refEquipementCible = "ref-Serveur2";
-        String refEquipementParDefaut = "ref-Serveur2";
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Serveur")
-                .nomEquipementPhysique("Serveur_101")
-                .modele("ref-Serveur2")
-                .paysDUtilisation("France")
-                .serveur(true)
-                .nomCourtDatacenter("sequoia2")
-                .dataCenter(dataCenter)
-                .quantite(1.0)
-                .nbJourUtiliseAn(365.0)
-                .build();
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .source("CAF2")
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .refEquipement(equipementPhysique.getModele())
-                .consoElecMoyenne(10512.0)
-                .valeur(1139.839200000007)
-                .build();
-        ReferentielMixElectrique referentielMixElectrique = ReferentielMixElectrique.builder()
-                .critere(critere.getNomCritere())
-                .pays("France")
-                .raccourcisAnglais("FR")
-                .source("CAF3")
-                .valeur(0.08)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .build();
+        demandeCalcul.getEquipementPhysique().setDataCenter(dataCenter);
+
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "Electricty Mix FR",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "categorie": "electricity-mix",
+                     "localisation": "France",
+                     "valeur": 0.08
+                   },
+                   {
+                     "nom": "iphone",
+                     "niveau": "2-Equipement",
+                     "etape": "UTILISATION",
+                     "critere": "Changement Climatique",
+                     "consoElecMoyenne": 10512.0
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
 
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
         assertNotNull(actual.getImpactUnitaire());
-        assertEquals(dateCalcul, actual.getDateCalcul());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
         // quantité * refEquipementPhysique.consoElecMoyenne * DataCEnter.pue * MixElec France
         assertEquals(BigDecimal.valueOf(1.0 * 10512.0 * 1.43 * 0.08).setScale(4, RoundingMode.DOWN).doubleValue(), actualImpactUnitaireLimited);
-        assertEquals(referentielImpactEquipement.getConsoElecMoyenne(), actual.getConsoElecMoyenne());
+        assertEquals(10512.0, actual.getConsoElecMoyenne());
     }
 
     @Test
-    void taiga918_CAF4_whenDonneesConsoElecAbsente_shouldReturnErreurCalcul() {
+    void taiga918_CAF4_whenDonneesConsoElecAbsente_shouldReturnErreurCalcul() throws JsonProcessingException {
 
         //Given
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        DataCenter dataCenter = DataCenter.builder()
-                .nomCourtDatacenter("sequoia2")
-                .nomLongDatacenter("sequoia2")
-                .localisation("France")
-                .pue(1.43)
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "ref-Serveur3";
-        String refEquipementParDefaut = "ref-Serveur3";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Serveur")
-                .nomEquipementPhysique("Serveur_103")
-                .modele("ref-Serveur3")
-                .paysDUtilisation("France")
-                .serveur(true)
-                .nomCourtDatacenter("sequoia2")
-                .dataCenter(dataCenter)
-                .consoElecAnnuelle(null)
-                .quantite(1.0)
-                .nbJourUtiliseAn(365.0)
-                .build();
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .source("CAF4")
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .refEquipement(equipementPhysique.getModele())
-                .consoElecMoyenne(null)
-                .valeur(1139.839200000007)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setConsoElecAnnuelle(null);
+
+        demandeCalcul.setTypeItem(objectMapper.readValue("""
+                {
+                   "type": "telephone",
+                   "categorie": "EquipementPhysique",
+                   "refItemParDefaut": "iphone"
+                 }
+                """, ReferentielTypeItem.class));
+
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "Electricty Mix FR",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "categorie": "electricity-mix",
+                     "localisation": "France",
+                     "valeur": 0.08
+                   },
+                   {
+                     "nom": "iphone",
+                     "niveau": "2-Equipement",
+                     "etape": "UTILISATION",
+                     "critere": "Changement Climatique",
+                     "consoElecMoyenne": null
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
 
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertNull(actual.getImpactUnitaire());
         assertEquals("ERREUR", actual.getStatutIndicateur());
         assertEquals(
-                "{\"erreur\":\"ErrCalcFonc : Donnée de consommation electrique manquante : equipementPhysique : Serveur_103, RefEquipementCible : ref-Serveur3, RefEquipementParDefaut : ref-Serveur3\"}",
+                "{\"erreur\":\"ErrCalcFonc : Donnée de consommation electrique manquante : equipementPhysique : Apple Iphone 11, RefEquipementCible : iphone, RefItemParDefaut : iphone\"}",
                 actual.getTrace()
         );
     }
 
     @Test
-    void taiga918_ecranCAF5() {
-
+    void taiga918_ecranCAF5() throws JsonProcessingException {
         //Given
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "ref-Ecran";
-        String refEquipementParDefaut = "ref-Ecran";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Ecran")
-                .nomEquipementPhysique("Ecran_1")
-                .modele("ref-Ecran")
-                .paysDUtilisation("France")
-                .serveur(false)
-                .nomCourtDatacenter(null)
-                .dataCenter(null)
-                .quantite(1.0)
-                .consoElecAnnuelle(100.0)
-                .nbJourUtiliseAn(365.0)
-                .build();
-        ReferentielMixElectrique referentielMixElectrique = ReferentielMixElectrique.builder()
-                .critere(critere.getNomCritere())
-                .pays("France")
-                .raccourcisAnglais("FR")
-                .source("CAF5")
-                .valeur(0.08)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+        demandeCalcul.getEquipementPhysique().setConsoElecAnnuelle(100.0);
+
+        demandeCalcul.setCorrespondanceRefEquipement(objectMapper.readValue("""
+                {
+                   "modeleEquipementSource":"ECRAN DELL",
+                   "refEquipementCible": "ref-Ecran"
+                 }
+                """, ReferentielCorrespondanceRefEquipement.class));
+
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "Electricty Mix FR",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "categorie": "electricity-mix",
+                     "localisation": "France",
+                     "valeur": 0.08
+                   },
+                   {
+                     "nom": "iphone",
+                     "niveau": "2-Equipement",
+                     "etape": "UTILISATION",
+                     "critere": "Changement Climatique",
+                     "consoElecMoyenne": null
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
 
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
         assertNotNull(actual.getImpactUnitaire());
-        assertEquals(dateCalcul, actual.getDateCalcul());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
         // quantité * equipementPhysique.consoElecAnnuelle * MixElec France
         assertEquals(BigDecimal.valueOf(1.0 * 100.0 * 0.08).setScale(4, RoundingMode.DOWN).doubleValue(), actualImpactUnitaireLimited);
@@ -809,70 +472,53 @@ class CalculImpactEquipementPhysiqueServiceTest {
 
     @Test
     void shouldCalculerImpactEquipementPhysique_CAF4() throws Exception {
-
         //Given
-        String etapeACV = "FABRICATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "Ordinateur4";
-        String refEquipementParDefaut = "Ordinateur4";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Desktop")
-                .nomEquipementPhysique("Ordinateur4")
-                .modele("Ordinateur4")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(null)
-                .build();
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .source("CAF4")
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .refEquipement(equipementPhysique.getModele())
-                .consoElecMoyenne(null)
-                .valeur(142.0)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .optionsCalcul(new OptionsCalcul("REEL"))
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.setEtape(objectMapper.readValue("""
+                {"code": "FABRICATION"}
+                """, ReferentielEtapeACV.class));
+
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+
+        demandeCalcul.setCorrespondanceRefEquipement(objectMapper.readValue("""
+                {
+                   "modeleEquipementSource":"ECRAN DELL",
+                   "refEquipementCible": "refEcran"
+                 }
+                """, ReferentielCorrespondanceRefEquipement.class));
+
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "Electricty Mix FR",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "categorie": "electricity-mix",
+                     "localisation": "France",
+                     "valeur": 0.08
+                   },
+                   {
+                     "nom": "refEcran",
+                     "niveau": "2-Equipement",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "valeur": 142.0
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
 
         when(dureeDeVieEquipementPhysiqueService.calculerDureeVie(any(DemandeCalculImpactEquipementPhysique.class))).thenReturn(DureeDeVie.builder().valeurRetenue(5.0d).build());
 
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
-        assertEquals(dateCalcul, actual.getDateCalcul());
         assertNotNull(actual.getImpactUnitaire());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
+        // quantité * facteurCaracterisation / dureeDeVie
+        assertEquals(BigDecimal.valueOf(1.0 * 142.0 / 5.0).setScale(4, RoundingMode.DOWN).doubleValue(), actualImpactUnitaireLimited);
         assertEquals(28.4, actualImpactUnitaireLimited);
         verify(dureeDeVieEquipementPhysiqueService, times(1)).calculerDureeVie(demandeCalcul);
         assertNull(actual.getConsoElecMoyenne());
@@ -880,262 +526,134 @@ class CalculImpactEquipementPhysiqueServiceTest {
 
     @Test
     void shouldCalculerImpactEquipementPhysique_CAF5() throws Exception {
-
         //Given
-        String etapeACV = "FIN_DE_VIE";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "KyoceraTaskalfa3253Ci";
-        String refEquipementParDefaut = "KyoceraTaskalfa3253Ci";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Imprimante")
-                .nomEquipementPhysique("Imprimante5")
-                .modele("KyoceraTaskalfa3253Ci")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(null)
-                .build();
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .source("CAF5")
-                .etape(etapeACV)
-                .critere(critere.getNomCritere())
-                .refEquipement(equipementPhysique.getModele())
-                .consoElecMoyenne(123.3)
-                .valeur(17.3)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .optionsCalcul(new OptionsCalcul("REEL"))
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.setEtape(objectMapper.readValue("""
+                {"code": "FIN_DE_VIE"}
+                """, ReferentielEtapeACV.class));
+
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+
+        demandeCalcul.setCorrespondanceRefEquipement(objectMapper.readValue("""
+                {
+                   "modeleEquipementSource":"ECRAN DELL",
+                   "refEquipementCible": "ref-Ecran"
+                 }
+                """, ReferentielCorrespondanceRefEquipement.class));
+
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "Electricty Mix FR",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "categorie": "electricity-mix",
+                     "localisation": "France",
+                     "valeur": 0.08
+                   },
+                   {
+                     "nom": "ref-Ecran",
+                     "niveau": "2-Equipement",
+                     "etape": "FIN_DE_VIE",
+                     "critere": "Changement Climatique",
+                     "valeur": 17.3
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
+
         when(dureeDeVieEquipementPhysiqueService.calculerDureeVie(any(DemandeCalculImpactEquipementPhysique.class))).thenReturn(DureeDeVie.builder().valeurRetenue(6.0).build());
 
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
-        assertEquals(dateCalcul, actual.getDateCalcul());
         assertNotNull(actual.getImpactUnitaire());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
-        assertEquals(2.8833, actualImpactUnitaireLimited);
+        // quantité * facteurCaracterisation / dureeDeVie
+        assertEquals(BigDecimal.valueOf(1.0 * 17.3 / 6.0).setScale(4, RoundingMode.DOWN).doubleValue(), actualImpactUnitaireLimited);
         verify(dureeDeVieEquipementPhysiqueService, times(1)).calculerDureeVie(demandeCalcul);
         assertNull(actual.getConsoElecMoyenne());
     }
 
     @Test
     void shouldCalculerImpactEquipementPhysique_CAF6() throws Exception {
-
         //Given
-        String etapeACV = "DISTRIBUTION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "Ecran6";
-        String refEquipementParDefaut = "Ecran6";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Ecran")
-                .nomEquipementPhysique("Ecran6")
-                .modele("Ecran6")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(null)
-                .build();
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .source("CAF6")
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .refEquipement(equipementPhysique.getModele())
-                .consoElecMoyenne(123.3)
-                .valeur(1.273)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .optionsCalcul(new OptionsCalcul("REEL"))
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.setEtape(objectMapper.readValue("""
+                {"code": "DISTRIBUTION"}
+                """, ReferentielEtapeACV.class));
+
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+
+        demandeCalcul.setCorrespondanceRefEquipement(objectMapper.readValue("""
+                {
+                   "modeleEquipementSource":"ECRAN DELL",
+                   "refEquipementCible": "ref-Ecran"
+                 }
+                """, ReferentielCorrespondanceRefEquipement.class));
+
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "Electricty Mix FR",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "categorie": "electricity-mix",
+                     "localisation": "France",
+                     "valeur": 0.08
+                   },
+                   {
+                     "nom": "ref-Ecran",
+                     "niveau": "2-Equipement",
+                     "etape": "DISTRIBUTION",
+                     "critere": "Changement Climatique",
+                     "valeur": 1.273
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
+
         when(dureeDeVieEquipementPhysiqueService.calculerDureeVie(any(DemandeCalculImpactEquipementPhysique.class))).thenReturn(DureeDeVie.builder().valeurRetenue(7.0).build());
 
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
-        assertEquals(dateCalcul, actual.getDateCalcul());
         assertNotNull(actual.getImpactUnitaire());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
-        assertEquals(0.1818, actualImpactUnitaireLimited);
+        // quantité * facteurCaracterisation / dureeDeVie
+        assertEquals(BigDecimal.valueOf(1.0 * 1.273 / 7.0).setScale(4, RoundingMode.DOWN).doubleValue(), actualImpactUnitaireLimited);
         verify(dureeDeVieEquipementPhysiqueService, times(1)).calculerDureeVie(demandeCalcul);
         assertNull(actual.getConsoElecMoyenne());
     }
 
-    @Test
-    void shouldCalculerImpactEquipementPhysique_whenEtapeACVUTILISATIONAndEquipementConsoElecMoyenneFilled() throws Exception {
-
-        //Given
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "Apple Iphone 11";
-        String refEquipementParDefaut = "Apple Iphone 11";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Téléphone")
-                .nomEquipementPhysique("Apple Iphone 11")
-                .modele("Apple Iphone 11")
-                .paysDUtilisation("France")
-                .consoElecAnnuelle(0.09)
-                .quantite(1.0)
-                .nbJourUtiliseAn(216.0)
-                .build();
-        ReferentielMixElectrique referentielMixElectrique = ReferentielMixElectrique.builder()
-                .critere(critere.getNomCritere())
-                .pays("France")
-                .raccourcisAnglais("FR")
-                .source("CAF1")
-                .valeur(0.0813225)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .build();
-
-        //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
-
-        //Then
-        assertContentIndicateur(demandeCalcul, actual);
-        assertEquals("OK", actual.getStatutIndicateur());
-        assertEquals(dateCalcul, actual.getDateCalcul());
-        assertNotNull(actual.getImpactUnitaire());
-        double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
-        assertEquals(0.0073, actualImpactUnitaireLimited);
-        assertEquals(equipementPhysique.getConsoElecAnnuelle(), actual.getConsoElecMoyenne());
-    }
-
     @Test
     void shouldBuildTraceWithFirstFormulaScenario1() throws JsonProcessingException {
 
-        //GIVEN
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder().nomCritere("Changement Climatique").unite("CO2").build();
-        String refEquipementCible = "Samsung SMP";
-        String refEquipementParDefaut = "Samsung SMP";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .nomEquipementPhysique("Samsung S21")
-                .modele("Samsung SMP")
-                .consoElecAnnuelle(200d)
-                .paysDUtilisation("France")
-                .nbJourUtiliseAn(230d)
-                .serveur(false)
-                .quantite(3d)
-                .build();
-
-        ReferentielMixElectrique referentielMixElectrique = ReferentielMixElectrique.builder()
-                .critere(critere.getNomCritere())
-                .pays("France")
-                .raccourcisAnglais("FR")
-                .source("Source-Mix")
-                .valeur(150d)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(LocalDateTime.now())
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .build();
+        //Given
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setQuantite(3d);
+        demandeCalcul.getEquipementPhysique().setConsoElecAnnuelle(200d);
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "Electricty Mix FR",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "categorie": "electricity-mix",
+                     "localisation": "France",
+                     "valeur": 150,
+                     "source": "Source-Mix"
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
 
         var formule = TraceCalculImpactEquipementPhysiqueUtils.getFormulePremierScenario(3d, 200d, 150d, 1.0);
-
         var consoElecAnMoyenne = ConsoElecAnMoyenne.builder().valeurItemConsoElecAnnuelle(200d).valeur(200d).build();
         var mixElectrique = MixElectrique.builder().valeur(150d).valeurReferentielMixElectrique(150d).sourceReferentielMixElectrique("Source-Mix").build();
         TraceCalculImpactEquipementPhysique trace = TraceCalculImpactEquipementPhysique.builder()
@@ -1143,7 +661,9 @@ class CalculImpactEquipementPhysiqueServiceTest {
                 .consoElecAnMoyenne(consoElecAnMoyenne)
                 .mixElectrique(mixElectrique)
                 .build();
+
         var expected = new ObjectMapper().writeValueAsString(trace);
+
         //WHEN
         var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
         //THEN
@@ -1152,58 +672,48 @@ class CalculImpactEquipementPhysiqueServiceTest {
 
     @Test
     void shouldBuildTraceWithFirstFormulaScenario2() throws JsonProcessingException {
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder().nomCritere("Changement Climatique").unite("CO2").build();
+        //Given
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+
         DataCenter dataCenter = DataCenter.builder()
                 .localisation("Spain")
                 .pue(5d)
                 .build();
-        String refEquipementCible = "IBM E1080";
-        String refEquipementParDefaut = "IBM E1080";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .quantite(6d)
-                .modele("IBM E1080")
-                .serveur(true)
-                .dataCenter(dataCenter)
-                .build();
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .refEquipement("IBM E1080")
-                .source("source-RefEquipement")
-                .consoElecMoyenne(130d)
-                .build();
-        ReferentielMixElectrique referentielMixElectrique = ReferentielMixElectrique.builder()
-                .critere(critere.getNomCritere())
-                .pays("Spain")
-                .source("Source-Mix")
-                .valeur(25d)
-                .build();
-
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(LocalDateTime.now())
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .build();
+        demandeCalcul.getEquipementPhysique().setDataCenter(dataCenter);
+
+        demandeCalcul.getEquipementPhysique().setQuantite(6d);
+        demandeCalcul.getEquipementPhysique().setDataCenter(dataCenter);
+        demandeCalcul.getEquipementPhysique().setServeur(true);
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+
+        demandeCalcul.setCorrespondanceRefEquipement(objectMapper.readValue("""
+                {
+                   "modeleEquipementSource":"ECRAN DELL",
+                   "refEquipementCible": "ref-Ecran"
+                 }
+                """, ReferentielCorrespondanceRefEquipement.class));
+
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "Electricty Mix FR",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "categorie": "electricity-mix",
+                     "localisation": "Spain",
+                     "valeur": 25,
+                     "source":"Source-Mix"
+                   },
+                   {
+                     "nom": "ref-Ecran",
+                     "niveau": "2-Equipement",
+                     "etape": "UTILISATION",
+                     "critere": "Changement Climatique",
+                     "consoElecMoyenne":130,
+                     "source": "source-RefEquipement"
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
 
         var formule = TraceCalculImpactEquipementPhysiqueUtils.getFormulePremierScenario(6d, 130d, 5d * 25d, 1.0);
 
@@ -1233,58 +743,41 @@ class CalculImpactEquipementPhysiqueServiceTest {
 
     @Test
     void shouldBuildTraceWithSecondFormula() throws JsonProcessingException, CalculImpactException {
-        String etapeACV = "Fin de vie";
-        ReferentielCritere critere = ReferentielCritere.builder().nomCritere("Changement Climatique").unite("CO2").build();
+
+        //Given
         LocalDate dateAchat = LocalDate.of(2020, 1, 22);
         LocalDate dateRetrait = LocalDate.of(2021, 5, 12);
-        double quantite = 6d;
-        double tauxUtilisation = 1.0;
-        String refEquipementCible = "IBM E1080";
-        String refEquipementParDefaut = "IBM E1080";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .quantite(quantite)
-                .modele("IBM E1080")
-                .dateAchat(dateAchat)
-                .dateRetrait(dateRetrait)
-                .serveur(false)
-                .build();
-        double valeurRefrentiel = 100d;
-        String sourceReferentielImpactEquipement = "source-RefEquipement";
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .refEquipement("IBM E1080")
-                .source(sourceReferentielImpactEquipement)
-                .consoElecMoyenne(130d)
-                .valeur(valeurRefrentiel)
-                .build();
-
-
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(LocalDateTime.now())
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .optionsCalcul(new OptionsCalcul("REEL"))
-                .build();
 
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setQuantite(6d);
+        demandeCalcul.getEquipementPhysique().setDateAchat(dateAchat);
+        demandeCalcul.getEquipementPhysique().setDateRetrait(dateRetrait);
+        demandeCalcul.setOptionsCalcul(new OptionsCalcul("REEL"));
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+
+        demandeCalcul.setEtape(objectMapper.readValue("""
+                {"code": "FIN DE VIE"}
+                """, ReferentielEtapeACV.class));
+
+        demandeCalcul.setCorrespondanceRefEquipement(objectMapper.readValue("""
+                {
+                   "modeleEquipementSource":"ECRAN DELL",
+                   "refEquipementCible": "ref-Ecran"
+                 }
+                """, ReferentielCorrespondanceRefEquipement.class));
+
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "ref-Ecran",
+                     "niveau": "2-Equipement",
+                     "etape": "FIN DE VIE",
+                     "critere": "Changement Climatique",
+                     "valeur":100,
+                     "source": "sourceReferentielFacteurCaracterisation"
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
 
         when(dureeDeVieEquipementPhysiqueService.calculerDureeVie(demandeCalcul)).thenCallRealMethod();
 
@@ -1298,13 +791,13 @@ class CalculImpactEquipementPhysiqueServiceTest {
                 .dateRetrait(dateRetrait.format(DateTimeFormatter.ISO_DATE))
                 .build();
 
-        var formule = TraceCalculImpactEquipementPhysiqueUtils.getFormuleSecondScenario(quantite, valeurRefrentiel, valeurDureeVie, tauxUtilisation);
+        var formule = TraceCalculImpactEquipementPhysiqueUtils.getFormuleSecondScenario(6d, 100d, valeurDureeVie, 1.0);
 
         TraceCalculImpactEquipementPhysique trace = TraceCalculImpactEquipementPhysique.builder()
                 .formule(formule)
                 .dureeDeVie(dureeDeVie)
-                .valeurReferentielImpactEquipement(valeurRefrentiel)
-                .sourceReferentielImpactEquipement(sourceReferentielImpactEquipement)
+                .valeurReferentielFacteurCaracterisation(100d)
+                .sourceReferentielFacteurCaracterisation("sourceReferentielFacteurCaracterisation")
                 .build();
         var expected = new ObjectMapper().writeValueAsString(trace);
         //WHEN
@@ -1314,67 +807,46 @@ class CalculImpactEquipementPhysiqueServiceTest {
         assertEquals(expected, actual.getTrace());
     }
 
+    //EN DOUBLE
     @Test
-    void taiga862_CAF1_calculImpactEquipementPhysiqueWithoutCorrespondanceShouldUseRefEquipementParDefaut() throws Exception {
-
+    void taiga862_CAF1_calculImpactEquipementPhysiqueWithoutCorrespondanceShouldUseRefItemParDefaut() throws Exception {
         //Given
-        String etapeACV = "DISTRIBUTION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementParDefaut = "EcranParDefaut";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Ecran")
-                .nomEquipementPhysique("Ecran6")
-                .modele("Ecran6")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(null)
-                .build();
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .source("CAF6")
-                .refEquipement(refEquipementParDefaut)
-                .consoElecMoyenne(123.3)
-                .valeur(1.273)
-                .build();
-
-        ReferentielCorrespondanceRefEquipement refEquipement = null;
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .optionsCalcul(new OptionsCalcul("REEL"))
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+
+        demandeCalcul.setEtape(objectMapper.readValue("""
+                {"code": "DISTRIBUTION"}
+                """, ReferentielEtapeACV.class));
+
+        demandeCalcul.setCorrespondanceRefEquipement(objectMapper.readValue("""
+                {
+                   "modeleEquipementSource":"ECRAN DELL",
+                   "refEquipementCible": "ref-Ecran"
+                 }
+                """, ReferentielCorrespondanceRefEquipement.class));
+
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "ref-Ecran",
+                     "niveau": "2-Equipement",
+                     "etape": "DISTRIBUTION",
+                     "critere": "Changement Climatique",
+                     "valeur":1.273,
+                     "consoElecMoyenne": 123,
+                     "source": "sourceReferentielFacteurCaracterisation"
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
 
         when(dureeDeVieEquipementPhysiqueService.calculerDureeVie(any(DemandeCalculImpactEquipementPhysique.class))).thenReturn(DureeDeVie.builder().valeurRetenue(7.0).build());
 
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
-        assertEquals(dateCalcul, actual.getDateCalcul());
         assertNotNull(actual.getImpactUnitaire());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
         assertEquals(0.1818, actualImpactUnitaireLimited);
@@ -1383,70 +855,51 @@ class CalculImpactEquipementPhysiqueServiceTest {
     }
 
     @Test
-    void taiga862_CAF1_calculImpactEquipementPhysiqueWithoutImpactForCorrespondanceShouldUseRefEquipementParDefaut() throws Exception {
-
+    void taiga862_CAF1_calculImpactEquipementPhysiqueWithoutImpactForCorrespondanceShouldUseRefItemParDefaut() throws Exception {
         //Given
-        String etapeACV = "DISTRIBUTION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementParDefaut = "EcranParDefaut";
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .source("CAF6")
-                .refEquipement(refEquipementParDefaut)
-                .consoElecMoyenne(123.3)
-                .valeur(1.273)
-                .build();
-        String refEquipementCible = "Ecran6";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Ecran")
-                .nomEquipementPhysique("Ecran6")
-                .modele("Ecran6")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(null)
-                .build();
-
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .optionsCalcul(new OptionsCalcul("REEL"))
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+
+        demandeCalcul.setEtape(objectMapper.readValue("""
+                {"code": "DISTRIBUTION"}
+                """, ReferentielEtapeACV.class));
+
+        demandeCalcul.setCorrespondanceRefEquipement(objectMapper.readValue("""
+                {
+                   "modeleEquipementSource":"ECRAN DELL",
+                   "refEquipementCible": "ref-Cible"
+                 }
+                """, ReferentielCorrespondanceRefEquipement.class));
+
+        demandeCalcul.setTypeItem(objectMapper.readValue("""
+                {
+                   "type": "telephone",
+                   "categorie": "EquipementPhysique",
+                   "refItemParDefaut": "iphone"
+                 }
+                """, ReferentielTypeItem.class));
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "iphone",
+                     "niveau": "2-Equipement",
+                     "etape": "DISTRIBUTION",
+                     "critere": "Changement Climatique",
+                     "valeur":1.273,
+                     "consoElecMoyenne": 123,
+                     "source": "sourceReferentielFacteurCaracterisation"
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
 
         when(dureeDeVieEquipementPhysiqueService.calculerDureeVie(any(DemandeCalculImpactEquipementPhysique.class))).thenReturn(DureeDeVie.builder().valeurRetenue(7.0).build());
 
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
-        assertEquals(dateCalcul, actual.getDateCalcul());
         assertNotNull(actual.getImpactUnitaire());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
         assertEquals(0.1818, actualImpactUnitaireLimited);
@@ -1455,72 +908,44 @@ class CalculImpactEquipementPhysiqueServiceTest {
     }
 
     @Test
-    void tech_whenDureeDeVieUnknown_shouldReturnIndicateurWithError() {
-
+    void tech_whenDureeDeVieUnknown_shouldReturnIndicateurWithError() throws JsonProcessingException {
         //Given
-        String etapeACV = "FIN_DE_VIE";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        DataCenter dataCenter = DataCenter.builder()
-                .nomCourtDatacenter("sequoia2")
-                .nomLongDatacenter("sequoia2")
-                .localisation("France")
-                .pue(1.43)
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "ref-Serveur3";
-        String refEquipementParDefaut = "ref-Serveur3";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Serveur")
-                .nomEquipementPhysique("Serveur_103")
-                .modele("ref-Serveur3")
-                .paysDUtilisation("France")
-                .serveur(true)
-                .nomCourtDatacenter("sequoia2")
-                .dataCenter(dataCenter)
-                .consoElecAnnuelle(null)
-                .quantite(1.0)
-                .nbJourUtiliseAn(365.0)
-                .build();
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .source("CAF4")
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .refEquipement(equipementPhysique.getModele())
-                .consoElecMoyenne(100.0)
-                .valeur(1139.839200000007)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .optionsCalcul(new OptionsCalcul("REEL"))
-                .build();
-
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+
+        demandeCalcul.setEtape(objectMapper.readValue("""
+                {"code": "DISTRIBUTION"}
+                """, ReferentielEtapeACV.class));
+
+        demandeCalcul.setCorrespondanceRefEquipement(objectMapper.readValue("""
+                {
+                   "modeleEquipementSource":"ECRAN DELL",
+                   "refEquipementCible": "ref-Cible"
+                 }
+                """, ReferentielCorrespondanceRefEquipement.class));
+
+        demandeCalcul.setTypeItem(objectMapper.readValue("""
+                {
+                   "type": "telephone",
+                   "categorie": "EquipementPhysique",
+                   "refItemParDefaut": "iphone"
+                 }
+                """, ReferentielTypeItem.class));
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "iphone",
+                     "niveau": "2-Equipement",
+                     "etape": "DISTRIBUTION",
+                     "critere": "Changement Climatique",
+                     "valeur":1.273,
+                     "consoElecMoyenne": 123,
+                     "source": "sourceReferentielFacteurCaracterisation"
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
@@ -1533,598 +958,382 @@ class CalculImpactEquipementPhysiqueServiceTest {
     }
 
     @Test
-    void verifyErrorWhenCallConsoElecAnMoyenneWithoutConsoInEntryWithImpactRefWithoutConso() {
-
+    void verifyErrorwhenNoReferentielImpactEquipement_shouldReturnIndicateurWithError() throws JsonProcessingException {
         //Given
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "Apple Iphone 11";
-        String refEquipementParDefaut = "Apple Iphone 11";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Téléphone")
-                .nomEquipementPhysique("Apple Iphone 11")
-                .modele("Apple Iphone 11")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(216.0)
-                .build();
-        ReferentielMixElectrique referentielMixElectrique = ReferentielMixElectrique.builder()
-                .critere(critere.getNomCritere())
-                .pays("France")
-                .raccourcisAnglais("FR")
-                .source("CAF5")
-                .valeur(0.08)
-                .build();
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .source("CAF4")
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .refEquipement(equipementPhysique.getModele())
-                .consoElecMoyenne(null)
-                .valeur(1139.839200000007)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+
+        demandeCalcul.setCorrespondanceRefEquipement(objectMapper.readValue("""
+                {
+                   "modeleEquipementSource":"ECRAN DELL",
+                   "refEquipementCible": "Apple Iphone 11"
+                 }
+                """, ReferentielCorrespondanceRefEquipement.class));
+
+        demandeCalcul.setTypeItem(objectMapper.readValue("""
+                {
+                   "type": "telephone",
+                   "categorie": "EquipementPhysique",
+                   "refItemParDefaut": "iphone"
+                 }
+                """, ReferentielTypeItem.class));
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                {
+                     "nom": "Electricty Mix FR",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "categorie": "electricity-mix",
+                     "localisation": "France",
+                     "valeur": 0.08,
+                     "source":"Source-Mix"
+                   }                   
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
 
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
-
-        //Then
-        assertContentIndicateur(demandeCalcul, actual);
-        assertNull(actual.getImpactUnitaire());
-        assertEquals("ERREUR", actual.getStatutIndicateur());
-        assertEquals(
-                "{\"erreur\":\"ErrCalcFonc : Donnée de consommation electrique manquante : equipementPhysique : Apple Iphone 11, RefEquipementCible : Apple Iphone 11, RefEquipementParDefaut : Apple Iphone 11\"}",
-                actual.getTrace()
-        );
-    }
-
-    @Test
-    void verifyErrorWhenCallConsoElecAnMoyenneWithoutConsoInEntryAndNoImpactRef() {
-
-        //Given
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementParDefaut = "EcranParDefaut";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Ecran")
-                .nomEquipementPhysique("Ecran6")
-                .modele("Ecran6")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .build();
-        //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertNull(actual.getImpactUnitaire());
         assertEquals("ERREUR", actual.getStatutIndicateur());
         assertEquals(
-                "{\"erreur\":\"ErrCalcFonc : Référentiel Impact Equipement inconnu\"}",
+                "{\"erreur\":\"ErrCalcFonc : Référentiel Facteur Caracterisation inconnu\"}",
                 actual.getTrace()
         );
     }
 
-    @Test
-    void tech_whenNoReferentielImpactEquipement_shouldReturnIndicateurWithError() throws CalculImpactException {
-        //Given
-        String etapeACV = "FIN_DE_VIE";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        DataCenter dataCenter = DataCenter.builder()
-                .nomCourtDatacenter("sequoia2")
-                .nomLongDatacenter("sequoia2")
-                .localisation("France")
-                .pue(1.43)
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "ref-Serveur3";
-        String refEquipementParDefaut = "ref-Serveur3";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Serveur")
-                .nomEquipementPhysique("Serveur_103")
-                .modele("ref-Serveur3")
-                .paysDUtilisation("France")
-                .serveur(true)
-                .nomCourtDatacenter("sequoia2")
-                .dataCenter(dataCenter)
-                .consoElecAnnuelle(null)
-                .quantite(1.0)
-                .nbJourUtiliseAn(365.0)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(6.0)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.emptyList())
-                .build();
-
-        //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
-
-        //Then
-        assertContentIndicateur(demandeCalcul, actual);
-        assertNull(actual.getImpactUnitaire());
-        assertEquals("ERREUR", actual.getStatutIndicateur());
-        assertEquals(
-                "{\"erreur\":\"ErrCalcFonc : Référentiel Impact Equipement inconnu\"}",
-                actual.getTrace()
-        );
-    }
 
     @Test
     void tech_whenMixElectriqueNotFound_shouldReturnIndicateurWithError() throws Exception {
-
         //Given
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "Apple Iphone 11";
-        String refEquipementParDefaut = "Apple Iphone 11";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Téléphone")
-                .nomEquipementPhysique("Apple Iphone 11")
-                .modele("Apple Iphone 11")
-                .paysDUtilisation("France")
-                .consoElecAnnuelle(0.09)
-                .quantite(1.0)
-                .nbJourUtiliseAn(216.0)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .mixElectriques(Collections.emptyList())
-                .build();
-
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+
+        demandeCalcul.setCorrespondanceRefEquipement(objectMapper.readValue("""
+                {
+                   "modeleEquipementSource":"ECRAN DELL",
+                   "refEquipementCible": "ref-Cible"
+                 }
+                """, ReferentielCorrespondanceRefEquipement.class));
+
+        demandeCalcul.setTypeItem(objectMapper.readValue("""
+                {
+                   "type": "telephone",
+                   "categorie": "EquipementPhysique",
+                   "refItemParDefaut": "iphone"
+                 }
+                """, ReferentielTypeItem.class));
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "iphone",
+                     "niveau": "2-Equipement",
+                     "etape": "UTILISATION",
+                     "critere": "Changement Climatique",
+                     "valeur":1.273,
+                     "consoElecMoyenne": 123,
+                     "source": "sourceReferentielFacteurCaracterisation"
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertNull(actual.getImpactUnitaire());
         assertEquals("ERREUR", actual.getStatutIndicateur());
         assertEquals(
-                "{\"erreur\":\"ErrCalcFonc : Il n'existe pas de Mix électrique pour cet équipement : critere: Changement Climatique - equipement: Apple Iphone 11 - Pays d'utilisation: France - NomCourtDatacenter: null\"}",
+                "{\"erreur\":\"ErrCalcFonc : Il n'existe pas de Mix électrique pour cet équipement : critere: Changement Climatique - equipement: Apple Iphone 11 - Localisation: France - NomCourtDatacenter: null\"}",
                 actual.getTrace()
         );
     }
 
     @Test
     void tech_whenMixElectriqueNotFoundWithDataCenter_shouldReturnIndicateurWithError() throws Exception {
-
         //Given
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "IBM X96";
-        String refEquipementParDefaut = "IBM X96";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Serveur")
-                .nomEquipementPhysique("IBM X96")
-                .modele("IBM X96")
-                .paysDUtilisation("France")
-                .consoElecAnnuelle(0.09)
-                .quantite(1.0)
-                .nbJourUtiliseAn(216.0)
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+        demandeCalcul.getEquipementPhysique().setNomCourtDatacenter("TanaMana 2");
+        DataCenter dataCenter = DataCenter.builder()
+                .localisation("Spain")
+                .pue(5d)
                 .nomCourtDatacenter("TanaMana 2")
-                .dataCenter(
-                        DataCenter.builder()
-                                .nomCourtDatacenter("TanaMana 2")
-                                .nomLongDatacenter("TanaMana 2 - Rack B")
-                                .localisation("France")
-                                .pue(6.2)
-                                .build()
-                )
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
                 .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .mixElectriques(Collections.emptyList())
-                .build();
-
+        demandeCalcul.getEquipementPhysique().setDataCenter(dataCenter);
+
+        demandeCalcul.setCorrespondanceRefEquipement(objectMapper.readValue("""
+                {
+                   "modeleEquipementSource":"ECRAN DELL",
+                   "refEquipementCible": "ref-Cible"
+                 }
+                """, ReferentielCorrespondanceRefEquipement.class));
+
+        demandeCalcul.setTypeItem(objectMapper.readValue("""
+                {
+                   "type": "telephone",
+                   "categorie": "EquipementPhysique",
+                   "refItemParDefaut": "iphone"
+                 }
+                """, ReferentielTypeItem.class));
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "iphone",
+                     "niveau": "2-Equipement",
+                     "etape": "UTILISATION",
+                     "critere": "Changement Climatique",
+                     "valeur":1.273,
+                     "consoElecMoyenne": 123,
+                     "source": "sourceReferentielFacteurCaracterisation"
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertNull(actual.getImpactUnitaire());
         assertEquals("ERREUR", actual.getStatutIndicateur());
         assertEquals(
-                "{\"erreur\":\"ErrCalcFonc : Il n'existe pas de Mix électrique pour cet équipement : critere: Changement Climatique - equipement: IBM X96 - Pays d'utilisation: France - NomCourtDatacenter: TanaMana 2\"}",
+                "{\"erreur\":\"ErrCalcFonc : Il n'existe pas de Mix électrique pour cet équipement : critere: Changement Climatique - equipement: Apple Iphone 11 - Localisation: France - NomCourtDatacenter: TanaMana 2\"}",
                 actual.getTrace()
         );
     }
 
     @Test
     void tech_whenPUEUknown_shouldReturnIndicateurWithError() throws Exception {
-
         //Given
-        String etapeACV = "UTILISATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "IBM X96";
-        String refEquipementParDefaut = "IBM X96";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Serveur")
-                .nomEquipementPhysique("Tanabana2-IBM X96")
-                .modele("IBM X96")
-                .paysDUtilisation("France")
-                .consoElecAnnuelle(0.09)
-                .quantite(1.0)
-                .nbJourUtiliseAn(216.0)
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+        demandeCalcul.getEquipementPhysique().setNomCourtDatacenter("TanaMana 2");
+        demandeCalcul.getEquipementPhysique().setServeur(true);
+        DataCenter dataCenter = DataCenter.builder()
+                .localisation("France")
+                .pue(null)
                 .nomCourtDatacenter("TanaMana 2")
-                .dataCenter(
-                        DataCenter.builder()
-                                .nomCourtDatacenter("TanaMana 2")
-                                .nomLongDatacenter("TanaMana 2 - Rack B")
-                                .localisation("France")
-                                .pue(null)
-                                .build()
-                )
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        ReferentielMixElectrique referentielMixElectrique = ReferentielMixElectrique.builder()
-                .critere(critere.getNomCritere())
-                .pays("France")
-                .raccourcisAnglais("FR")
-                .source("CAF1")
-                .valeur(0.0813225)
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
                 .build();
+        demandeCalcul.getEquipementPhysique().setDataCenter(dataCenter);
+
+        demandeCalcul.setCorrespondanceRefEquipement(objectMapper.readValue("""
+                {
+                   "modeleEquipementSource":"ECRAN DELL",
+                   "refEquipementCible": "ref-Cible"
+                 }
+                """, ReferentielCorrespondanceRefEquipement.class));
+
+        demandeCalcul.setTypeItem(objectMapper.readValue("""
+                {
+                   "type": "telephone",
+                   "categorie": "EquipementPhysique",
+                   "refItemParDefaut": "iphone"
+                 }
+                """, ReferentielTypeItem.class));
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                    {
+                       "nom": "Electricty Mix FR",
+                       "etape": "FABRICATION",
+                       "critere": "Changement Climatique",
+                       "categorie" : "electricity-mix",
+                       "niveau": "0-Base data",
+                       "localisation": "France",
+                       "source": "CAF1",
+                       "valeur" : 0.08
+                    },
+                   {
+                     "nom": "iphone",
+                     "niveau": "2-Equipement",
+                     "etape": "UTILISATION",
+                     "critere": "Changement Climatique",
+                     "valeur":1.273,
+                     "consoElecMoyenne": 123,
+                     "source": "sourceReferentielFacteurCaracterisation"
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
 
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
 
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertNull(actual.getImpactUnitaire());
         assertEquals("ERREUR", actual.getStatutIndicateur());
         assertEquals(
-                "{\"erreur\":\"ErrCalcFonc : Le PUE est manquant et ne permet le calcul de l'impact à l'usage de l'équipement : equipement: Tanabana2-IBM X96 - RefEquipementCible: IBM X96 - refEquipementParDefaut: IBM X96 - NomCourtDatacenter: TanaMana 2\"}",
+                "{\"erreur\":\"ErrCalcFonc : Le PUE est manquant et ne permet le calcul de l'impact à l'usage de l'équipement : equipement: Apple Iphone 11 - RefEquipementCible: ref-Cible - refItemParDefaut: iphone - NomCourtDatacenter: TanaMana 2\"}",
                 actual.getTrace()
         );
     }
 
-    private void assertContentIndicateur(DemandeCalculImpactEquipementPhysique source, ImpactEquipementPhysique result) {
-        assertNotNull(result);
-        assertEquals(source.getEquipementPhysique().getNomEquipementPhysique(), result.getNomEquipement());
-        assertEquals(source.getEquipementPhysique().getType(), result.getTypeEquipement());
-        assertEquals(source.getEquipementPhysique().getStatut(), result.getStatutEquipementPhysique());
-        assertEquals(source.getEquipementPhysique().getQuantite(), result.getQuantite());
-
-        assertEquals(source.getEquipementPhysique().getNomLot(), result.getNomLot());
-        assertEquals(source.getEquipementPhysique().getDateLot(), result.getDateLot());
-        assertEquals(source.getEquipementPhysique().getNomOrganisation(), result.getNomOrganisation());
-        assertEquals(source.getEquipementPhysique().getNomEntite(), result.getNomEntite());
-        assertEquals(source.getEquipementPhysique().getNomSourceDonnee(), result.getNomSourceDonnee());
-
-        assertEquals(source.getDateCalcul(), result.getDateCalcul());
-
-        assertEquals(source.getCritere().getNomCritere(), result.getCritere());
-        assertEquals(source.getEtape().getCode(), result.getEtapeACV());
-        assertEquals(source.getCritere().getUnite(), result.getUnite());
-
-        assertEquals("1.0", result.getVersionCalcul());
-    }
 
     @Test
-    void verifyFormulaForModeUtilisationCOPE() {
+    void verifyFormulaForModeUtilisationCOPE() throws JsonProcessingException {
         //Given
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Téléphone")
-                .nomEquipementPhysique("Apple Iphone 11")
-                .modele("Apple Iphone 11")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(216.0)
-                .consoElecAnnuelle(0.09)
-                .modeUtilisation("COPE")
-                .build();
-        ReferentielHypothese referentielHypothese = ReferentielHypothese.builder()
-                .valeur(0.8)
-                .code("taux_utilisation_COPE")
-                .source("RCP_SI")
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .hypotheses(Collections.singletonList(referentielHypothese))
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setModeUtilisation("COPE");
+        demandeCalcul.setHypotheses(List.of(objectMapper.readValue("""
+                [
+                  {
+                    "code": "taux_utilisation_COPE",
+                    "valeur": "0.8",
+                    "source": "source"
+                  }
+                ]
+                """, ReferentielHypothese[].class)));
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                    {
+                       "nom": "Electricty Mix FR",
+                       "etape": "FABRICATION",
+                       "critere": "Changement Climatique",
+                       "categorie" : "electricity-mix",
+                       "niveau": "0-Base data",
+                       "localisation": "France",
+                       "source": "CAF1",
+                       "valeur" : 0.0813225
+                    },
+                   {
+                     "nom": "iphone",
+                     "niveau": "2-Equipement",
+                     "etape": "UTILISATION",
+                     "critere": "Changement Climatique",
+                     "consoElecMoyenne": 0.09,
+                     "source": "sourceReferentielFacteurCaracterisation"
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
+
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
         assertNotNull(actual.getImpactUnitaire());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
-        assertEquals(0.0058, actualImpactUnitaireLimited);
-        assertEquals(referentielImpactEquipement.getConsoElecMoyenne(), actual.getConsoElecMoyenne());
+        // quantité * consoElecMoyenne *tauxUtilisation
+        assertEquals(BigDecimal.valueOf(0.0813225 * 0.09 * 0.8).setScale(4, RoundingMode.DOWN).doubleValue(), actualImpactUnitaireLimited);
     }
 
     @Test
-    void verifyFormulaForModeUtilisationBYOD() {
+    void verifyFormulaForModeUtilisationBYOD() throws JsonProcessingException {
         //Given
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Téléphone")
-                .nomEquipementPhysique("Apple Iphone 11")
-                .modele("Apple Iphone 11")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(216.0)
-                .consoElecAnnuelle(0.09)
-                .modeUtilisation("BYOD")
-                .build();
-        ReferentielHypothese referentielHypothese = ReferentielHypothese.builder()
-                .valeur(0.57)
-                .code("taux_utilisation_BYOD")
-                .source("RCP_SI")
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .hypotheses(Collections.singletonList(referentielHypothese))
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setModeUtilisation("BYOD");
+        demandeCalcul.setHypotheses(List.of(objectMapper.readValue("""
+                [
+                  {
+                    "code": "taux_utilisation_BYOD",
+                    "valeur": "0.57",
+                    "source": "source"
+                  }
+                ]
+                """, ReferentielHypothese[].class)));
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                    {
+                       "nom": "Electricty Mix FR",
+                       "etape": "FABRICATION",
+                       "critere": "Changement Climatique",
+                       "categorie" : "electricity-mix",
+                       "niveau": "0-Base data",
+                       "localisation": "France",
+                       "source": "CAF1",
+                       "valeur" : 0.0813225
+                    },
+                   {
+                     "nom": "iphone",
+                     "niveau": "2-Equipement",
+                     "etape": "UTILISATION",
+                     "critere": "Changement Climatique",
+                     "consoElecMoyenne": 0.09,
+                     "source": "sourceReferentielFacteurCaracterisation"
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
+
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
         assertNotNull(actual.getImpactUnitaire());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
-        assertEquals(0.0041, actualImpactUnitaireLimited);
-        assertEquals(referentielImpactEquipement.getConsoElecMoyenne(), actual.getConsoElecMoyenne());
+        // quantité * consoElecMoyenne *tauxUtilisation
+        assertEquals(BigDecimal.valueOf(0.0813225 * 0.09 * 0.57).setScale(4, RoundingMode.DOWN).doubleValue(), actualImpactUnitaireLimited);
     }
 
     @Test
-    void verifyFormulaForModeUtilisationModeUtilisationNull() {
+    void verifyFormulaForModeUtilisationModeUtilisationNull() throws JsonProcessingException {
         //Given
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Téléphone")
-                .nomEquipementPhysique("Apple Iphone 11")
-                .modele("Apple Iphone 11")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(216.0)
-                .consoElecAnnuelle(0.09)
-                .build();
-        ReferentielHypothese referentielHypothese = ReferentielHypothese.builder()
-                .valeur(0.57)
-                .code("taux_utilisation_BYOD")
-                .source("RCP_SI")
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .hypotheses(Collections.singletonList(referentielHypothese))
-                .build();
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setModeUtilisation(null);
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                    {
+                       "nom": "Electricty Mix FR",
+                       "etape": "FABRICATION",
+                       "critere": "Changement Climatique",
+                       "categorie" : "electricity-mix",
+                       "niveau": "0-Base data",
+                       "localisation": "France",
+                       "source": "CAF1",
+                       "valeur" : 0.0813225
+                    },
+                   {
+                     "nom": "iphone",
+                     "niveau": "2-Equipement",
+                     "etape": "UTILISATION",
+                     "critere": "Changement Climatique",
+                     "consoElecMoyenne": 0.09,
+                     "source": "sourceReferentielFacteurCaracterisation"
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
+
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
         assertNotNull(actual.getImpactUnitaire());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
-        assertEquals(0.0073, actualImpactUnitaireLimited);
-        assertEquals(referentielImpactEquipement.getConsoElecMoyenne(), actual.getConsoElecMoyenne());
+        // quantité * consoElecMoyenne * tauxUtilisation
+        assertEquals(BigDecimal.valueOf(0.0813225 * 0.09 * 1.0).setScale(4, RoundingMode.DOWN).doubleValue(), actualImpactUnitaireLimited);
     }
 
     @Test
-    void verifyFormulaForModeUtilisationModeUtilisationUnknown() {
-        //Given
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Téléphone")
-                .nomEquipementPhysique("Apple Iphone 11")
-                .modele("Apple Iphone 11")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(216.0)
-                .consoElecAnnuelle(0.09)
-                .modeUtilisation("COB")
-                .build();
-        ReferentielHypothese referentielHypothese = ReferentielHypothese.builder()
-                .valeur(0.57)
-                .code("taux_utilisation_BYOD")
-                .source("RCP_SI")
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .hypotheses(Collections.singletonList(referentielHypothese))
-                .build();
+    void verifyFormulaForModeUtilisationUnknown() throws JsonProcessingException {
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setModeUtilisation("COB");
+        demandeCalcul.setHypotheses(List.of(objectMapper.readValue("""
+                [
+                  {
+                    "code": "taux_utilisation_BYOD",
+                    "valeur": "0.57",
+                    "source": "source"
+                  }
+                ]
+                """, ReferentielHypothese[].class)));
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                    {
+                       "nom": "Electricty Mix FR",
+                       "etape": "FABRICATION",
+                       "critere": "Changement Climatique",
+                       "categorie" : "electricity-mix",
+                       "niveau": "0-Base data",
+                       "localisation": "France",
+                       "source": "CAF1",
+                       "valeur" : 0.0813225
+                    }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("ERREUR", actual.getStatutIndicateur());
@@ -2134,37 +1343,28 @@ class CalculImpactEquipementPhysiqueServiceTest {
     }
 
     @Test
-    void verifyFormulaForModeUtilisationModeUtilisationCOPEButNotInRefHypotheses() {
-        //Given
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Téléphone")
-                .nomEquipementPhysique("Apple Iphone 11")
-                .modele("Apple Iphone 11")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(216.0)
-                .consoElecAnnuelle(0.09)
-                .modeUtilisation("COPE")
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .build();
+    void verifyFormulaForModeUtilisationModeUtilisationCOPEButNotInRefHypotheses() throws JsonProcessingException {
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.getEquipementPhysique().setModeUtilisation("COPE");
+
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                    {
+                       "nom": "Electricty Mix FR",
+                       "etape": "FABRICATION",
+                       "critere": "Changement Climatique",
+                       "categorie" : "electricity-mix",
+                       "niveau": "0-Base data",
+                       "localisation": "France",
+                       "source": "CAF1",
+                       "valeur" : 0.0813225
+                    }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
+
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
+
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("ERREUR", actual.getStatutIndicateur());
@@ -2175,123 +1375,119 @@ class CalculImpactEquipementPhysiqueServiceTest {
 
     @Test
     void verifyFormulaForNotTUILISATIONModeUtilisationCOPE() throws Exception {
-        //Given
-        String etapeACV = "FABRICATION";
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        String refEquipementCible = "Ordinateur4";
-        String refEquipementParDefaut = "Ordinateur4";
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Desktop")
-                .nomEquipementPhysique("Ordinateur4")
-                .modele("Ordinateur4")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .modeUtilisation("COPE")
-                .nbJourUtiliseAn(null)
-                .build();
-        ReferentielImpactEquipement referentielImpactEquipement = ReferentielImpactEquipement.builder()
-                .source("CAF4")
-                .critere(critere.getNomCritere())
-                .etape(etapeACV)
-                .refEquipement(equipementPhysique.getModele())
-                .consoElecMoyenne(null)
-                .valeur(142.0)
-                .build();
-        ReferentielCorrespondanceRefEquipement refEquipement = ReferentielCorrespondanceRefEquipement.builder()
-                .refEquipementCible(refEquipementCible)
-                .modeleEquipementSource(equipementPhysique.getModele())
-                .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
-                .type(equipementPhysique.getType())
-                .refEquipementParDefaut(refEquipementParDefaut)
-                .dureeVieDefaut(null)
-                .build();
-        ReferentielHypothese referentielHypothese = ReferentielHypothese.builder()
-                .valeur(0.85)
-                .code("taux_utilisation_COPE")
-                .source("RCP_SI")
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .hypotheses(Collections.singletonList(referentielHypothese))
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .optionsCalcul(new OptionsCalcul("REEL"))
-                .build();
-        when(dureeDeVieEquipementPhysiqueService.calculerDureeVie(any(DemandeCalculImpactEquipementPhysique.class))).thenReturn(DureeDeVie.builder().valeurRetenue(5.0d).build());
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+        demandeCalcul.setEtape(objectMapper.readValue("""
+                {"code": "DISTRIBUTION"}
+                """, ReferentielEtapeACV.class));
+
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+        demandeCalcul.getEquipementPhysique().setModeUtilisation("COPE");
+        demandeCalcul.setHypotheses(List.of(objectMapper.readValue("""
+                [
+                  {
+                    "code": "taux_utilisation_COPE",
+                    "valeur": "0.85",
+                    "source": "source"
+                  }
+                ]
+                """, ReferentielHypothese[].class)));
+        demandeCalcul.setCorrespondanceRefEquipement(objectMapper.readValue("""
+                {
+                   "modeleEquipementSource":"ECRAN DELL",
+                   "refEquipementCible": "ref-Ecran"
+                 }
+                """, ReferentielCorrespondanceRefEquipement.class));
+
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "ref-Ecran",
+                     "niveau": "2-Equipement",
+                     "etape": "DISTRIBUTION",
+                     "critere": "Changement Climatique",
+                     "valeur": 142
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
+
+        when(dureeDeVieEquipementPhysiqueService.calculerDureeVie(any(DemandeCalculImpactEquipementPhysique.class)))
+                .thenReturn(DureeDeVie.builder().valeurRetenue(5.0d).build());
+
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
+
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
-        assertEquals(dateCalcul, actual.getDateCalcul());
         assertNotNull(actual.getImpactUnitaire());
         double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
-        assertEquals(24.14, actualImpactUnitaireLimited);
+        // quantité / facteurCaracterisation * tauxUtilisation
+        assertEquals(BigDecimal.valueOf(1.0 * 142 * 0.85 / 5.0).setScale(4, RoundingMode.DOWN).doubleValue(), actualImpactUnitaireLimited);
         verify(dureeDeVieEquipementPhysiqueService, times(1)).calculerDureeVie(demandeCalcul);
         assertNull(actual.getConsoElecMoyenne());
     }
 
     @Test
     void verifyFormulaForUTILISATIONTauxUtilisationFilled() throws Exception {
-        //Given
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .type("Téléphone")
-                .nomEquipementPhysique("Apple Iphone 11")
-                .modele("Apple Iphone 11")
-                .paysDUtilisation("France")
-                .quantite(1.0)
-                .nbJourUtiliseAn(216.0)
-                .consoElecAnnuelle(0.09)
-                .modeUtilisation("")
-                .tauxUtilisation(0.1)
-                .build();
-        ReferentielHypothese referentielHypothese = ReferentielHypothese.builder()
-                .valeur(0.57)
-                .code("taux_utilisation_BYOD")
-                .source("RCP_SI")
-                .build();
-        DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
-                .builder()
-                .dateCalcul(dateCalcul)
-                .etape(ReferentielEtapeACV.builder().code(etapeACV).build())
-                .critere(critere)
-                .equipementPhysique(equipementPhysique)
-                .correspondanceRefEquipement(refEquipement)
-                .typeEquipement(typeEquipement)
-                .impactEquipements(Collections.singletonList(referentielImpactEquipement))
-                .mixElectriques(Collections.singletonList(referentielMixElectrique))
-                .hypotheses(Collections.singletonList(referentielHypothese))
-                .build();
+
+        DemandeCalculImpactEquipementPhysique demandeCalcul = createDemande();
+
+        demandeCalcul.getEquipementPhysique().setModele("ECRAN DELL");
+        demandeCalcul.getEquipementPhysique().setConsoElecAnnuelle(56.0);
+        demandeCalcul.getEquipementPhysique().setTauxUtilisation(0.1);
+
+        demandeCalcul.setCorrespondanceRefEquipement(objectMapper.readValue("""
+                {
+                   "modeleEquipementSource":"ECRAN DELL",
+                   "refEquipementCible": "ref-Ecran"
+                 }
+                """, ReferentielCorrespondanceRefEquipement.class));
+
+        demandeCalcul.setFacteurCaracterisations(List.of(objectMapper.readValue("""
+                [
+                   {
+                     "nom": "Electricty Mix FR",
+                     "etape": "FABRICATION",
+                     "critere": "Changement Climatique",
+                     "categorie" : "electricity-mix",
+                     "niveau": "0-Base data",
+                     "localisation": "France",
+                     "source": "CAF1",
+                     "valeur" : 0.08
+                   }
+                 ]
+                  """, ReferentielFacteurCaracterisation[].class)));
+
         //When
-        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(
-                demandeCalcul
-        );
+        var actual = calculImpactEquipementPhysiqueService.calculerImpactEquipementPhysique(demandeCalcul);
         //Then
         assertContentIndicateur(demandeCalcul, actual);
         assertEquals("OK", actual.getStatutIndicateur());
         assertNotNull(actual.getImpactUnitaire());
-        double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(5, RoundingMode.DOWN).doubleValue();
-        assertEquals(0.00073, actualImpactUnitaireLimited);
-        assertEquals(referentielImpactEquipement.getConsoElecMoyenne(), actual.getConsoElecMoyenne());
+        double actualImpactUnitaireLimited = BigDecimal.valueOf(actual.getImpactUnitaire()).setScale(4, RoundingMode.DOWN).doubleValue();
+        // quantité * consoElecMoyenne * MixElectrique * TauxUtilisation
+        assertEquals(BigDecimal.valueOf(1.0 * 56 * 0.08 * 0.1).setScale(4, RoundingMode.DOWN).doubleValue(), actualImpactUnitaireLimited);
+    }
+
+    private void assertContentIndicateur(DemandeCalculImpactEquipementPhysique source, ImpactEquipementPhysique result) {
+        assertNotNull(result);
+        assertEquals(source.getEquipementPhysique().getNomEquipementPhysique(), result.getNomEquipement());
+        assertEquals(source.getEquipementPhysique().getType(), result.getTypeEquipement());
+        assertEquals(source.getEquipementPhysique().getStatut(), result.getStatutEquipementPhysique());
+        assertEquals(source.getEquipementPhysique().getQuantite(), result.getQuantite());
+
+        assertEquals(source.getEquipementPhysique().getNomLot(), result.getNomLot());
+        assertEquals(source.getEquipementPhysique().getDateLot(), result.getDateLot());
+        assertEquals(source.getEquipementPhysique().getNomOrganisation(), result.getNomOrganisation());
+        assertEquals(source.getEquipementPhysique().getNomEntite(), result.getNomEntite());
+        assertEquals(source.getEquipementPhysique().getNomSourceDonnee(), result.getNomSourceDonnee());
+
+        assertEquals(source.getDateCalcul(), result.getDateCalcul());
+
+        assertEquals(source.getCritere().getNomCritere(), result.getCritere());
+        assertEquals(source.getEtape().getCode(), result.getEtapeACV());
+        assertEquals(source.getCritere().getUnite(), result.getUnite());
+
+        assertEquals("1.0", result.getVersionCalcul());
     }
 }
\ No newline at end of file
diff --git a/services/calculs/src/test/java/org/mte/numecoeval/calculs/domain/service/CalculImpactReseauServiceTest.java b/services/calculs/src/test/java/org/mte/numecoeval/calculs/domain/service/CalculImpactReseauServiceTest.java
deleted file mode 100644
index 5ae06bb4..00000000
--- a/services/calculs/src/test/java/org/mte/numecoeval/calculs/domain/service/CalculImpactReseauServiceTest.java
+++ /dev/null
@@ -1,215 +0,0 @@
-package org.mte.numecoeval.calculs.domain.service;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mte.numecoeval.calculs.domain.data.demande.DemandeCalculImpactReseau;
-import org.mte.numecoeval.calculs.domain.data.entree.EquipementPhysique;
-import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactReseau;
-import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielCritere;
-import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielEtapeACV;
-import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielImpactReseau;
-import org.mte.numecoeval.calculs.domain.port.input.service.CalculImpactReseauService;
-import org.mte.numecoeval.calculs.domain.port.input.service.impl.CalculImpactReseauServiceImpl;
-
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.Collections;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-class CalculImpactReseauServiceTest {
-
-    private final String REF_RESEAU = "impactReseauMobileMoyen";
-
-    private CalculImpactReseauService calculImpactService;
-
-    @BeforeEach
-    void setUp() {
-        calculImpactService = new CalculImpactReseauServiceImpl();
-    }
-
-    @Test
-    void shouldReturnCorrectCalculImpact_whenValidInputs() {
-        // Given
-        LocalDateTime dateCalcul = LocalDateTime.now();
-        ReferentielEtapeACV etapeACV = ReferentielEtapeACV.builder()
-                .code("UTILISATION")
-                .build();
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .nomEquipementPhysique("Equipement 1")
-                .goTelecharge(3.5f)
-                .build();
-        ReferentielImpactReseau referentielImpactReseau = ReferentielImpactReseau.builder()
-                .etapeACV(etapeACV.getCode())
-                .critere(critere.getNomCritere())
-                .refReseau(REF_RESEAU)
-                .impactReseauMobileMoyen(4d)
-                .build();
-        var demandeCalcul = DemandeCalculImpactReseau.builder()
-                .dateCalcul(dateCalcul)
-                .equipementPhysique(equipementPhysique)
-                .etape(etapeACV)
-                .critere(critere)
-                .impactsReseau(Collections.singletonList(referentielImpactReseau))
-                .build();
-        Double expected = 4d * 3.5f;
-
-        //When
-        var impactReseau = assertDoesNotThrow(() -> calculImpactService.calculerImpactReseau(demandeCalcul));
-
-        //Then
-        assertNotNull(impactReseau.getImpactUnitaire());
-        assertEquals(expected, impactReseau.getImpactUnitaire());
-        assertContentIndicateur(demandeCalcul, impactReseau);
-        assertEquals("OK", impactReseau.getStatutIndicateur());
-        assertEquals(
-                "{\"critere\":\"Changement Climatique\",\"etapeACV\":\"UTILISATION\",\"equipementPhysique\":\"Equipement 1\",\"impactReseauMobileMoyen\":\"4.0\",\"goTelecharge\":\"3.5\",\"formule\":\"impactReseau = 'equipementPhysique.goTelecharge (3.5) x ref_ImpactReseau(Changement Climatique, UTILISATION, impactReseauMobileMoyen).valeur(4.0)'\"}",
-                impactReseau.getTrace()
-        );
-    }
-
-    @Test
-    void shouldReturnError_whenInvalidInputs() {
-        //Given
-        ReferentielEtapeACV etapeACV = ReferentielEtapeACV.builder()
-                .code("UTILISATION")
-                .build();
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .nomEquipementPhysique("Equipement 1")
-                .goTelecharge(null)
-                .build();
-        var demandeCalcul = DemandeCalculImpactReseau.builder()
-                .dateCalcul(LocalDateTime.now())
-                .equipementPhysique(equipementPhysique)
-                .etape(etapeACV)
-                .critere(critere)
-                .impactsReseau(Collections.emptyList())
-                .build();
-
-        //When
-        var impactReseau = calculImpactService.calculerImpactReseau(demandeCalcul);
-
-        //Then
-        assertContentIndicateur(demandeCalcul, impactReseau);
-        assertEquals("ERREUR", impactReseau.getStatutIndicateur());
-        assertNull(impactReseau.getImpactUnitaire());
-        assertEquals("{\"erreur\":\"ErrCalcFonc : Erreur de calcul impact réseau: Etape: UTILISATION, Critere: Changement Climatique, Equipement Physique: Equipement 1 : la valeur en_EqP(Equipement).goTelecharge est nulle\"}", impactReseau.getTrace());
-    }
-
-    @Test
-    void shouldReturnError_whenInvalidReference() {
-        //Given
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .nomEquipementPhysique("Equipement 1")
-                .goTelecharge(4.0f)
-                .build();
-        ReferentielEtapeACV etapeACV = ReferentielEtapeACV.builder()
-                .code("UTILISATION")
-                .build();
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        ReferentielImpactReseau referentielImpactReseau = ReferentielImpactReseau.builder()
-                .etapeACV(etapeACV.getCode())
-                .critere(critere.getNomCritere())
-                .refReseau(REF_RESEAU)
-                .build();
-        var demandeCalcul = DemandeCalculImpactReseau.builder()
-                .dateCalcul(LocalDateTime.now())
-                .equipementPhysique(equipementPhysique)
-                .etape(etapeACV)
-                .critere(critere)
-                .impactsReseau(Collections.singletonList(referentielImpactReseau))
-                .build();
-
-        //When
-        var impactReseau = calculImpactService.calculerImpactReseau(demandeCalcul);
-
-        //Then
-        assertContentIndicateur(demandeCalcul, impactReseau);
-        assertEquals("ERREUR", impactReseau.getStatutIndicateur());
-        assertNull(impactReseau.getImpactUnitaire());
-        assertEquals("{\"erreur\":\"ErrCalcFonc : Erreur de calcul impact réseau: Etape: UTILISATION, Critere: Changement Climatique, RefReseau: impactReseauMobileMoyen, Equipement Physique: Equipement 1 : L'impactReseauMobileMoyen de la référence est null.\"}", impactReseau.getTrace());
-    }
-
-    @Test
-    void shouldReturnError_whenReferenceNotFound() {
-        //Given
-        EquipementPhysique equipementPhysique = EquipementPhysique.builder()
-                .dateLot(LocalDate.of(2022, 1, 1))
-                .nomOrganisation("Test")
-                .nomLot("Test|20220101")
-                .nomSourceDonnee("Source_Test")
-                .nomEquipementPhysique("Equipement 1")
-                .goTelecharge(4.0f)
-                .dateLot(LocalDate.of(2023, 1, 1))
-                .build();
-        ReferentielEtapeACV etapeACV = ReferentielEtapeACV.builder()
-                .code("UTILISATION")
-                .build();
-        ReferentielCritere critere = ReferentielCritere.builder()
-                .nomCritere("Changement Climatique")
-                .unite("kg CO_{2} eq")
-                .build();
-        ReferentielImpactReseau referentielImpactReseau = ReferentielImpactReseau.builder()
-                .etapeACV(etapeACV.getCode())
-                .critere(critere.getNomCritere())
-                .refReseau(REF_RESEAU)
-                .build();
-        var demandeCalcul = DemandeCalculImpactReseau.builder()
-                .dateCalcul(LocalDateTime.now())
-                .equipementPhysique(equipementPhysique)
-                .etape(etapeACV)
-                .critere(critere)
-                .impactsReseau(Collections.singletonList(referentielImpactReseau))
-                .build();
-
-        //When
-        var impactReseau = calculImpactService.calculerImpactReseau(demandeCalcul);
-
-        //Then
-        assertContentIndicateur(demandeCalcul, impactReseau);
-        assertEquals("ERREUR", impactReseau.getStatutIndicateur());
-        assertNull(impactReseau.getImpactUnitaire());
-        assertEquals("{\"erreur\":\"ErrCalcFonc : Erreur de calcul impact réseau: Etape: UTILISATION, Critere: Changement Climatique, RefReseau: impactReseauMobileMoyen, Equipement Physique: Equipement 1 : L'impactReseauMobileMoyen de la référence est null.\"}", impactReseau.getTrace());
-    }
-
-    private static void assertContentIndicateur(DemandeCalculImpactReseau demandeCalcul, ImpactReseau impactReseau) {
-        assertEquals(demandeCalcul.getDateCalcul(), impactReseau.getDateCalcul());
-
-        assertEquals(demandeCalcul.getEtape().getCode(), impactReseau.getEtapeACV());
-        assertEquals(demandeCalcul.getCritere().getNomCritere(), impactReseau.getCritere());
-        assertEquals(demandeCalcul.getCritere().getNomCritere(), impactReseau.getCritere());
-
-        assertEquals(demandeCalcul.getEquipementPhysique().getNomLot(), impactReseau.getNomLot());
-        assertEquals(demandeCalcul.getEquipementPhysique().getDateLot(), impactReseau.getDateLot());
-        assertEquals(demandeCalcul.getEquipementPhysique().getNomEntite(), impactReseau.getNomEntite());
-        assertEquals(demandeCalcul.getEquipementPhysique().getNomOrganisation(), impactReseau.getNomOrganisation());
-        assertEquals(demandeCalcul.getEquipementPhysique().getNomEquipementPhysique(), impactReseau.getNomEquipement());
-        assertEquals(demandeCalcul.getEquipementPhysique().getNomSourceDonnee(), impactReseau.getNomSourceDonnee());
-
-        assertEquals("1.0", impactReseau.getVersionCalcul());
-    }
-
-}
\ No newline at end of file
diff --git a/services/calculs/src/test/java/org/mte/numecoeval/calculs/domain/service/DureeDeVieEquipementPhysiqueServiceTest.java b/services/calculs/src/test/java/org/mte/numecoeval/calculs/domain/service/DureeDeVieEquipementPhysiqueServiceTest.java
index 60969a2a..821cc25c 100644
--- a/services/calculs/src/test/java/org/mte/numecoeval/calculs/domain/service/DureeDeVieEquipementPhysiqueServiceTest.java
+++ b/services/calculs/src/test/java/org/mte/numecoeval/calculs/domain/service/DureeDeVieEquipementPhysiqueServiceTest.java
@@ -8,7 +8,7 @@ import org.mte.numecoeval.calculs.domain.data.demande.OptionsCalcul;
 import org.mte.numecoeval.calculs.domain.data.entree.EquipementPhysique;
 import org.mte.numecoeval.calculs.domain.data.erreur.TypeErreurCalcul;
 import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielHypothese;
-import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielTypeEquipement;
+import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielTypeItem;
 import org.mte.numecoeval.calculs.domain.data.trace.DureeDeVie;
 import org.mte.numecoeval.calculs.domain.exception.CalculImpactException;
 import org.mte.numecoeval.calculs.domain.port.input.service.DureeDeVieEquipementPhysiqueService;
@@ -28,7 +28,7 @@ class DureeDeVieEquipementPhysiqueServiceTest {
     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/MM/yyyy");
 
     @Test
-    void whenTypeEquipementDoesntHaveDureeDeVie_shouldUseHypotheseForDureeDeVie() throws Exception {
+    void whenTypeItemDoesntHaveDureeDeVie_shouldUseHypotheseForDureeDeVie() throws Exception {
 
         //Given
         EquipementPhysique equipementPhysique = EquipementPhysique.builder()
@@ -38,7 +38,7 @@ class DureeDeVieEquipementPhysiqueServiceTest {
                 .code("dureeVieParDefaut")
                 .valeur(1.17d)
                 .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
+        ReferentielTypeItem typeItem = ReferentielTypeItem.builder()
                 .type("serveur")
                 .dureeVieDefaut(null)
                 .build();
@@ -46,7 +46,7 @@ class DureeDeVieEquipementPhysiqueServiceTest {
                 .builder()
                 .equipementPhysique(equipementPhysique)
                 .hypotheses(Collections.singletonList(hypothese))
-                .typeEquipement(typeEquipement)
+                .typeItem(typeItem)
                 .optionsCalcul(new OptionsCalcul("REEL"))
                 .build();
 
@@ -70,7 +70,7 @@ class DureeDeVieEquipementPhysiqueServiceTest {
         DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
                 .builder()
                 .equipementPhysique(equipement)
-                .typeEquipement(null)
+                .typeItem(null)
                 .optionsCalcul(new OptionsCalcul("REEL"))
                 .build();
         //When
@@ -92,7 +92,7 @@ class DureeDeVieEquipementPhysiqueServiceTest {
         DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
                 .builder()
                 .equipementPhysique(equipement)
-                .typeEquipement(null)
+                .typeItem(null)
                 .optionsCalcul(new OptionsCalcul("REEL"))
                 .build();
         //When
@@ -113,7 +113,7 @@ class DureeDeVieEquipementPhysiqueServiceTest {
         DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
                 .builder()
                 .equipementPhysique(equipement)
-                .typeEquipement(null)
+                .typeItem(null)
                 .optionsCalcul(new OptionsCalcul("REEL"))
                 .build();
         //When
@@ -137,7 +137,7 @@ class DureeDeVieEquipementPhysiqueServiceTest {
         DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
                 .builder()
                 .equipementPhysique(equipement)
-                .typeEquipement(null)
+                .typeItem(null)
                 .optionsCalcul(new OptionsCalcul("REEL"))
                 .build();
         //When
@@ -166,7 +166,7 @@ class DureeDeVieEquipementPhysiqueServiceTest {
                 .builder()
                 .equipementPhysique(equipement)
                 .hypotheses(Collections.singletonList(hypothese))
-                .typeEquipement(null)
+                .typeItem(null)
                 .optionsCalcul(new OptionsCalcul("REEL"))
                 .build();
         //When
@@ -177,7 +177,7 @@ class DureeDeVieEquipementPhysiqueServiceTest {
     }
 
     @Test
-    void whenMissingDate_ShouldUseDureeDeVieTypeEquipementInPriority() throws Exception {
+    void whenMissingDate_ShouldUseDureeDeVieTypeItemInPriority() throws Exception {
         //Given
         var equipement = EquipementPhysique.builder()
                 .type("laptop")
@@ -186,14 +186,14 @@ class DureeDeVieEquipementPhysiqueServiceTest {
                 .code("dureeVieParDefaut")
                 .valeur(1.17d)
                 .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
+        ReferentielTypeItem typeItem = ReferentielTypeItem.builder()
                 .type("laptop")
                 .dureeVieDefaut(3.5d)
                 .build();
         DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
                 .builder()
                 .equipementPhysique(equipement)
-                .typeEquipement(typeEquipement)
+                .typeItem(typeItem)
                 .hypotheses(Collections.singletonList(hypothese))
                 .optionsCalcul(new OptionsCalcul("REEL"))
                 .build();
@@ -214,14 +214,14 @@ class DureeDeVieEquipementPhysiqueServiceTest {
                 .code("dureeVieParDefaut")
                 .valeur(null)
                 .build();
-        ReferentielTypeEquipement typeEquipement = ReferentielTypeEquipement.builder()
+        ReferentielTypeItem typeItem = ReferentielTypeItem.builder()
                 .type("laptop")
                 .dureeVieDefaut(null)
                 .build();
         DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
                 .builder()
                 .equipementPhysique(equipement)
-                .typeEquipement(typeEquipement)
+                .typeItem(typeItem)
                 .hypotheses(Collections.singletonList(hypothese))
                 .optionsCalcul(new OptionsCalcul("REEL"))
                 .build();
@@ -244,7 +244,7 @@ class DureeDeVieEquipementPhysiqueServiceTest {
         DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
                 .builder()
                 .equipementPhysique(equipement)
-                .typeEquipement(null)
+                .typeItem(null)
                 .optionsCalcul(new OptionsCalcul("FIXE"))
                 .build();
         //When
@@ -265,7 +265,7 @@ class DureeDeVieEquipementPhysiqueServiceTest {
         DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
                 .builder()
                 .equipementPhysique(equipement)
-                .typeEquipement(null)
+                .typeItem(null)
                 .optionsCalcul(new OptionsCalcul("FIXE"))
                 .build();
         //When
@@ -348,7 +348,7 @@ class DureeDeVieEquipementPhysiqueServiceTest {
         DemandeCalculImpactEquipementPhysique demandeCalcul = DemandeCalculImpactEquipementPhysique
                 .builder()
                 .equipementPhysique(equipement)
-                .typeEquipement(null)
+                .typeItem(null)
                 .optionsCalcul(new OptionsCalcul("FIXE"))
                 .build();
 
diff --git a/services/calculs/src/test/java/org/mte/numecoeval/calculs/steps/DataTableTypeDefinitions.java b/services/calculs/src/test/java/org/mte/numecoeval/calculs/steps/DataTableTypeDefinitions.java
index f69aaf98..25f145ad 100644
--- a/services/calculs/src/test/java/org/mte/numecoeval/calculs/steps/DataTableTypeDefinitions.java
+++ b/services/calculs/src/test/java/org/mte/numecoeval/calculs/steps/DataTableTypeDefinitions.java
@@ -11,7 +11,7 @@ import org.mte.numecoeval.calculs.domain.data.entree.EquipementPhysique;
 import org.mte.numecoeval.calculs.domain.data.entree.EquipementVirtuel;
 import org.mte.numecoeval.calculs.domain.data.indicateurs.ImpactEquipementPhysique;
 import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielHypothese;
-import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielTypeEquipement;
+import org.mte.numecoeval.calculs.domain.data.referentiel.ReferentielTypeItem;
 
 import java.text.ParseException;
 import java.time.LocalDate;
@@ -87,8 +87,8 @@ public class DataTableTypeDefinitions {
         var hypotheses = new ArrayList<ReferentielHypothese>();
 
         if (StringUtils.isNotBlank(entry.get("refTypeEquipement.dureeVieDefaut"))) {
-            builder.typeEquipement(
-                    ReferentielTypeEquipement.builder()
+            builder.typeItem(
+                    ReferentielTypeItem.builder()
                             .dureeVieDefaut(getDoubleOrNull(entry, "refTypeEquipement.dureeVieDefaut"))
                             .build()
             );
diff --git a/services/common/pom.xml b/services/common/pom.xml
index a7921ce6..f9bf0567 100644
--- a/services/common/pom.xml
+++ b/services/common/pom.xml
@@ -5,12 +5,12 @@
     <parent>
         <groupId>org.mte.numecoeval</groupId>
         <artifactId>core</artifactId>
-        <version>2.0.1</version>
+        <version>2.1.0-SNAPSHOT</version>
         <relativePath/> <!-- lookup parent from repository -->
     </parent>
 
     <artifactId>common</artifactId>
-    <version>2.0.1</version>
+    <version>2.1.0-SNAPSHOT</version>
     <name>common</name>
     <description>Module commun</description>
 
diff --git a/services/core/pom.xml b/services/core/pom.xml
index ff4444ca..9fcdb6e4 100644
--- a/services/core/pom.xml
+++ b/services/core/pom.xml
@@ -11,7 +11,7 @@
 
     <groupId>org.mte.numecoeval</groupId>
     <artifactId>core</artifactId>
-    <version>2.0.1</version>
+    <version>2.1.0-SNAPSHOT</version>
     <name>core</name>
     <packaging>pom</packaging>
     <description>Projet parent du projet NumEcoEval</description>
-- 
GitLab