Skip to content
Snippets Groups Projects
Commit 0728a30f authored by LEMERCIER Denis's avatar LEMERCIER Denis Committed by OURY Sarah
Browse files

Ajout du champ duree de vie dans la libraire de calcul

parent 630894a7
No related branches found
No related tags found
1 merge request!39Ajout du champ duree de vie dans la libraire de calcul
......@@ -4,6 +4,7 @@ Tous les changements de ce projet seront documentés dans ce document.
## [Non livré]
- Librairie de calculs : Ajout du champ DureeDeVie dans l'objet ImpactEquipementPhysique
- Correction : Trace du calcul de l'utilisation d'un équipement physique : suppression de '/ 365'
- Nettoyage : Suppression complète du calcul de l'impact du réseau à partir d'un équipement physique de type réseau (donc suppression des champs goTelecharge et nbJourUtiliseAn dans l'inventaire des équipements physiques). Désormais, l'impact du réseau se calcule grâce aux opérations non IT -> [Issue10](https://gitlab-forge.din.developpement-durable.gouv.fr/pub/numeco/m4g/numecoeval/-/issues/10)
- Customisation des référentiels par organisation : les référentiels TypeItem, FacteurCaracterisation, CorrespondanceRefEquipement et Hypotheses peuvent être personnalisés par une organisation -> [Issue9](https://gitlab-forge.din.developpement-durable.gouv.fr/pub/numeco/m4g/numecoeval/-/issues/9)
......
......@@ -12,6 +12,7 @@
|majeur|22/02/2023|Intégrer des nouveaux impact au référentiel(déplacements collaborateurs, bâtiments) -> Création d'une nouvelle API facteurscaracterisation
|majeur|02/05/2023|Charger et lancer un calcul sur les nouveaux impacts (réseau, déplacements, bâtiments, maintenance) -> import de nouveaux csv OperationNonIT puis création d'indicateurs associés
|majeur|17/05/2023|Inclure dans l'évaluation d'impact des informations sur la qualité des données -> ajout d'un champ qualité à l'import puis transmission de la qualité jusqu'aux indicateurs en sortie
|mineur|12/11/2024|Inclure dans le résultat du calcul d'impact la durée de vie retenue -> ajout d'un champ dureeDeVie aux indicateurs de sortie
|===
......@@ -604,6 +605,7 @@ Cette règle permet le calcul de l'impact moyen d'un équipement physique sur un
|ind_ImpactEquipementPhysique.unite|sortie|l'unité présente dans le référentiel correspondant au critère en cours
|ind_ImpactEquipementPhysique.consoElecMoyenne|sortie|la consommation électrique déterminée par la règle suivante
|ind_ImpactEquipementPhysique.qualite|sortie|la qualité de la donnée d'inventaire
|ind_ImpactEquipementPhysique.dureeDeVie|sortie|la durée de vie retenue d'un équipement physique en année
|===
......
......@@ -34,4 +34,5 @@ public class ImpactEquipementPhysique {
Double quantite;
String statutEquipementPhysique;
String qualite;
Double dureeDeVie;
}
......@@ -59,36 +59,48 @@ public class CalculImpactEquipementPhysiqueServiceImpl implements CalculImpactEq
TraceCalculImpactEquipementPhysique traceCalculImpactEquipementPhysique;
var quantite = demandeCalcul.getEquipementPhysique().getQuantite();
double tauxUtilisationEqPhysique = getTauxUtilisationEqPhysique(demandeCalcul);
Double dureeDeVieRetenue = null;
if ("UTILISATION".equals(demandeCalcul.getEtape().getCode())) {
var consoElecAnMoyenne = getConsoElecAnMoyenne(demandeCalcul);
var mixElectrique = getMixElectrique(demandeCalcul);
valeurImpactUnitaire = quantite
* consoElecAnMoyenne.getValeur()
* mixElectrique.getValeur()
* tauxUtilisationEqPhysique
;
* tauxUtilisationEqPhysique;
consoElecMoyenne = consoElecAnMoyenne.getValeur();
traceCalculImpactEquipementPhysique = TraceCalculImpactEquipementPhysiqueUtils.buildTracePremierScenario(quantite, consoElecAnMoyenne, mixElectrique, tauxUtilisationEqPhysique);
// duree de vie remontee sur l'impact, non necessaire pour les calculs en etape UTILISATION
try {
DureeDeVie dureeVie = dureeDeVieEquipementPhysiqueService.calculerDureeVie(demandeCalcul);
dureeDeVieRetenue = dureeVie == null ? null : dureeVie.getValeurRetenue();
} catch (CalculImpactException ignored) {
}
} else {
var refImpactEquipementOpt = getFacteurCaracterisation(demandeCalcul);
if (refImpactEquipementOpt.isPresent()) {
ReferentielFacteurCaracterisation referentielImpactEquipement = refImpactEquipementOpt.get();
var valeurReferentiel = referentielImpactEquipement.getValeur();
valeurImpactUnitaire = quantite * valeurReferentiel * tauxUtilisationEqPhysique;
DureeDeVie dureeVie = dureeDeVieEquipementPhysiqueService.calculerDureeVie(demandeCalcul);
if (dureeVie != null && dureeVie.getValeurRetenue() != null && dureeVie.getValeurRetenue() > 0) {
var valeurDureeVie = dureeVie.getValeurRetenue();
valeurImpactUnitaire = valeurImpactUnitaire / valeurDureeVie;
traceCalculImpactEquipementPhysique = TraceCalculImpactEquipementPhysiqueUtils.buildTraceSecondScenario(quantite, valeurReferentiel, referentielImpactEquipement.getSource(), dureeVie, tauxUtilisationEqPhysique);
dureeDeVieRetenue = dureeVie == null ? null : dureeVie.getValeurRetenue();
if (dureeDeVieRetenue != null && dureeDeVieRetenue > 0) {
valeurImpactUnitaire = valeurImpactUnitaire / dureeDeVieRetenue;
} else {
throw new CalculImpactException(TypeErreurCalcul.ERREUR_FONCTIONNELLE.getCode(), "Durée de vie de l'équipement inconnue");
}
traceCalculImpactEquipementPhysique = TraceCalculImpactEquipementPhysiqueUtils.buildTraceSecondScenario(quantite, valeurReferentiel, referentielImpactEquipement.getSource(), dureeVie, tauxUtilisationEqPhysique);
} else {
throw new CalculImpactException(TypeErreurCalcul.ERREUR_FONCTIONNELLE.getCode(), "Référentiel Facteur Caracterisation inconnu");
}
}
var calcul = buildCalculImpactEquipementPhysique(demandeCalcul, valeurImpactUnitaire, consoElecMoyenne);
var calcul = buildCalculImpactEquipementPhysique(demandeCalcul, valeurImpactUnitaire, consoElecMoyenne, dureeDeVieRetenue);
calcul.setTrace(TraceUtils.getTraceFromTraceur(traceCalculImpactEquipementPhysique));
return calcul;
}
......@@ -109,7 +121,8 @@ public class CalculImpactEquipementPhysiqueServiceImpl implements CalculImpactEq
return resultFromRefEquipementCible;
}
private ImpactEquipementPhysique buildCalculImpactEquipementPhysique(DemandeCalculImpactEquipementPhysique demandeCalcul, Double valeurImpactUnitaire, Double consoElecMoyenne) {
private ImpactEquipementPhysique buildCalculImpactEquipementPhysique(DemandeCalculImpactEquipementPhysique demandeCalcul,
Double valeurImpactUnitaire, Double consoElecMoyenne, Double dureeDeVie) {
return ImpactEquipementPhysique
.builder()
.nomEquipement(demandeCalcul.getEquipementPhysique().getNomEquipementPhysique())
......@@ -131,6 +144,7 @@ public class CalculImpactEquipementPhysiqueServiceImpl implements CalculImpactEq
.nomEntite(demandeCalcul.getEquipementPhysique().getNomEntite())
.nomOrganisation(demandeCalcul.getEquipementPhysique().getNomOrganisation())
.qualite(demandeCalcul.getEquipementPhysique().getQualite())
.dureeDeVie(dureeDeVie)
.build();
}
......
......@@ -522,6 +522,7 @@ class CalculImpactEquipementPhysiqueServiceTest {
assertEquals(28.4, actualImpactUnitaireLimited);
verify(dureeDeVieEquipementPhysiqueService, times(1)).calculerDureeVie(demandeCalcul);
assertNull(actual.getConsoElecMoyenne());
assertEquals(5.0d, actual.getDureeDeVie());
}
@Test
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment