diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7caa7ee262585ee50766f2b7f27200f164961633..cd8753fe58263e9b4dd8d68c0bd3773c14b79a9f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,7 @@ Tous les changements de ce projet seront documentés dans ce document.
 
 ## [Non livré]
 
+- 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)
 
diff --git a/e2e/5_assert.sh b/e2e/5_assert.sh
index 03c217fb5b59c128fc3858c0a25e8371217e2748..93b6a5e013e62137b45a4bf6aacc39e91ff63196 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 d4e39e300cae58958b56a5e142ec5bf86468347f..c2169111f3881a1924de7faba69f98126b890d51 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 84cc240af38dc7893a3d41b3e62e4c328bf1f58f..0000000000000000000000000000000000000000
--- 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/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 170b5cd6c8be19d23c70ea9ed1e14e2d61ab1472..9356ac3d3a6f52e7c55b29dda3faac1c9e262a72 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 89f9b8984ef5da314d27f76577b7e9c9d724509e..5bb2028bf1ad4542fd472ea0bb9538138fea5cdb 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 ba9e0e067caab98e089fc87f604ee06f38919ffb..ad6ddc9fc3e234d20bb564e96c2188553df41fe1 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/DomainConfiguration.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/DomainConfiguration.java
index d41eaae9ae9a7359c783b2853d15e3b6d9f88d6e..ff21d8a62e5fdcacb6f116b029c20faff0402cca 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 f859f33038835b82a3cd1f3af166e2af340eddf0..0000000000000000000000000000000000000000
--- 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/mapper/DomainMapper.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/mapper/DomainMapper.java
index 47ef6c1b8ad71bac48517f30bbf97ce2815951a8..94c276a0124dc1e5c68d54e08c063f8cb0d56404 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 6624cc54ba6c58c9e158af0f77cba530a80f1e06..4d078347201d3df89d0516ee70559b0d03ffcd10 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/IndicateurRepository.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/repository/IndicateurRepository.java
index a2148ebc7194456c2f3ae69e64ef70c93a3e9d21..c26afae5e373e9fb4eb232156ea32fb530b941eb 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 c1102a25bd9ea128a501996ab3316cf561e5908c..4fdb49aa7d6e4bc0523a906ccb46dc871e407828 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 307fc4a6ba5fe596ac4b6337759eac36410e6e77..0000000000000000000000000000000000000000
--- 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 1eff91ae2f216ca92e67cdea259a994cde814312..c3eb9545b3659abe57fcebe7af9b380946e5576b 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 28043cc23e78f1ae48e7ddf688b6a4ff70002561..cf2ea565b473209d6dfd46f0d0763e8ff3ab4ccb 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
@@ -79,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/test/java/org/mte/numecoeval/calculs/ApiEventCalculsApplicationTests.java b/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/ApiEventCalculsApplicationTests.java
index 4310c44079d6a92dd53ad178ec7b3f46bb86bfab..35979fc3f22d7b96bddcda90785b1d611381edfc 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 836abbc15b11d2b42e83e7b5984069c39b85da00..0000000000000000000000000000000000000000
--- 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 47f30be0050db5d8ddfddbf026b2ed76f7f8b6fc..b7259e49add5948299c301a13bebca6959f5bb60 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
@@ -88,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 */
@@ -109,42 +115,11 @@ 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);
 
-    }
-
-    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)));
+        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
@@ -163,20 +138,19 @@ 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());
     }
 
@@ -184,34 +158,30 @@ class EnrichissementEquipementPhysiqueServiceTest {
     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 {
-        initMocksEtapesAndCriteres();
         Mockito.lenient().when(donneesEntreeRepository.findEtapes(any())).thenReturn("UTILISATION##FABRICATION");
 
         var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
@@ -221,7 +191,6 @@ class EnrichissementEquipementPhysiqueServiceTest {
 
     @Test
     void testServiceEnrichissementEquipementPhysique_doesNotFilterEtapesWhenDataNull() throws JsonProcessingException {
-        initMocksEtapesAndCriteres();
         Mockito.lenient().when(donneesEntreeRepository.findEtapes(any())).thenReturn(null);
 
         var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
@@ -231,7 +200,6 @@ class EnrichissementEquipementPhysiqueServiceTest {
 
     @Test
     void testServiceEnrichissementEquipementPhysique_filterCriteres() throws JsonProcessingException {
-        initMocksEtapesAndCriteres();
         Mockito.lenient().when(donneesEntreeRepository.findCriteres(any())).thenReturn("Climate change##Ionising radiation##Acidification");
 
         var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
@@ -241,7 +209,6 @@ class EnrichissementEquipementPhysiqueServiceTest {
 
     @Test
     void testServiceEnrichissementEquipementPhysique_doesNotFilterCriteresWhenDataNull() throws JsonProcessingException {
-        initMocksEtapesAndCriteres();
         Mockito.lenient().when(donneesEntreeRepository.findCriteres(any())).thenReturn(null);
 
         var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
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 30d28311c0a2de8d7ffc71bfd6d7a7011ec122d5..eeb19664d61bd7d03ba91d184784442e29815d61 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-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 cdb09811ef29d757887f67ef4b1435b06f757a4f..9c2275c29a7ef6b10c74014e4696c3af6d186f67 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 44eb82e2a01d5c8e8a6a502effe99c5c8c80759b..2cd2bfeab6bcefd5bc17eebfe0435d92155eb852 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 277f1e5da336ffafe3c7e5e7cd991f9f61d51e90..ac417db6b0d852b1e57828a65dbdcfd058909711 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/service/ErrorManagementService.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/ErrorManagementService.java
index 8ed1eabfe75d977546e740d462ac527709d939b8..f803a3fdf824a3a8d0e31b96c24108b80c22f8ce 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 ca102130363923e1592bff37a46cec6353df60e5..17909eaf2e8354a08cf4fe4336f50ef04e8611bb 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/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 6c0da70ed89125cb7e070a24004add2322b0da59..99719512b91dc8b2651bc87afed58210cd45a71a 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 fade2b05612d66d8489bd351486c6aa6865c64b4..e0ddf3a41b7083af72a6d86d944837917daf4b67 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 4a76a7ad0a11c40ac071c8d9ac501555a609f5b5..0000000000000000000000000000000000000000
--- 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 02376c96d42f20d50e6a1e96f9c41008d03c51bc..ba2cdfafff91140a6667c23841e05242995715c1 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 0170b74f45258cdc82678b6f7839ede9316b3cfa..bf19aa676a129bc8bc1c4f489db341598617cdf8 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 7aa514cd4808e05407038779ed340d1f269dcd63..0000000000000000000000000000000000000000
--- 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 6ed08356e812f8bd1fb850973b325d6b747a3aa2..0000000000000000000000000000000000000000
--- 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 67ca444976078a561a1864094094daf591fa4207..0000000000000000000000000000000000000000
--- 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 7a762ff5acb8a82fdd5d36366bfef40ab65e81fb..0000000000000000000000000000000000000000
--- 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 a8236a86cc4aed6439fa5fc27fb7b85f97f8ab98..f3d000e3cd623fd4331f7d48a32289353516cb6b 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 5d2b8b5bd7a4c2a29f152db7e20a5fc77f3024aa..0000000000000000000000000000000000000000
--- 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 27b32aa92ebd44bd543f855aff8f1cf6d1b528e6..c6956b920be458e8645f849910b8ae1d2faed2f7 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 74f449d0d5325d86b4ff41b78e17e9c89b4e4c16..0000000000000000000000000000000000000000
--- 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 58e22f1d5c6f3f35de8e51456331ddb27debeb86..b22c5f0c53fb0e5a6d1490ab7c06cd9c270caf33 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 42560d275d9e9d154b6a87c670de2c94975b6b51..acf0260cf3a98d5fbdec96d4ff14030432919030 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 69c37222e72052206f1b300af7a8b6badfc57a67..0000000000000000000000000000000000000000
--- 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 38135838120be3bfdbcadfd63a9ebbd9b4fc2e32..a638acf629eeec2bca20005464345edccb27b1a9 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 5ae06bb4b352c4a42b7706847253c733192f4163..0000000000000000000000000000000000000000
--- 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 60969a2a1d764cb040409b99d68d32816f9c0a9c..821cc25cfc70ee290297929698cfc8ff9220361d 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 f69aaf98ece7e8df602681e8947e377c41dbaba9..25f145adad164dbe76c7f87b3a328c4a01ad3c25 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()
             );