diff --git a/docs/DonneeEntree.plantuml b/docs/DonneeEntree.plantuml index 64ee36e406478db430b8b912da063022600fb289..ffb8cbd25448601035f9b1c59fa04b56b8965b22 100644 --- a/docs/DonneeEntree.plantuml +++ b/docs/DonneeEntree.plantuml @@ -59,8 +59,11 @@ String paysDUtilisation String utilisateur Date dateAchat Data dateRetrait +' la durée d'usage interne correspond à l'age de l'équipement (en années) au sein de l'organisation Double dureeUsageInterne +' la durée d'usage amont correspond à la durée (en années) de première vie d'un équipement, avant que ce dernier ne soit possédé par l'organisation Double dureeUsageAmont +' la durée d'usage aval correspond à la durée (en années) de troisième vie d'un équipement, une fois que ce dernier a été sorti de l'organisation Double dureeUsageAval Double consoElecAnnuelle Float nbJourUtiliseAn diff --git a/docs/MoteurDeCalculG4IT_V1.1.adoc b/docs/MoteurDeCalculG4IT_V1.1.adoc index 2e8dba793ba9c680cd99514eba6a43a188f3d78d..fe2a19afc968f1c0696e1a950f377165054452b7 100644 --- a/docs/MoteurDeCalculG4IT_V1.1.adoc +++ b/docs/MoteurDeCalculG4IT_V1.1.adoc @@ -256,9 +256,11 @@ Le body de la requête est composé : Il existe 2 paramètres associés à cette requête : * mode : le mode de traitement, SYNC ou ASYNC (ASYNC est la valeur par défaut) -* dureeUsage : la méthode de calcul de la durée de vie des équipements physique utilisée, FIXE : la méthode de calcul de la durée de vie se base sur l'attribut 'dureeUsageInterne' de l'équipement physique ou REEL : la méthode de calcul de la durée de vie se base sur l'âge réel de l'équipement physique (dateRetrait-dateAchat) (FIXE est la valeur par défaut) +* dureeUsage : la méthode de calcul de la durée de vie des équipements physiques utilisée, qui peut être +** FIXE (valeur par defaut): la méthode de calcul de la durée de vie se base sur l'attribut 'dureeUsageInterne' de l'équipement physique +** REEL : la méthode de calcul de la durée de vie se base sur l'âge réel de l'équipement physique (dateRetrait-dateAchat quand les données sont disponibles) -NumEcoEval lance alors les calculs des indicateurs et les sauvegarde dans la base correspondante. +NumEcoEval effectue alors les calculs des indicateurs et les sauvegardes dans la base correspondante. La cinématique globale est décrite ci-dessous : @@ -431,28 +433,28 @@ Elle est exprimée en années et autorise les décimales. [pseudocode] ---- -Règle RG_DureeVieItem(equipementPhysique) { +Règle RG_DureeVieItem(equipementPhysique, dureeVieItem) { SI methodeDureeUsage=="REEL" ALORS - 'dans le cas où il est possible de calculer l'age réel de l'item, ce dernier fait foi + 'dans le cas où il est possible de calculer l'age réel de l'item (c'est à dire sa durée de vie au sein de l'organisation), ce dernier fait foi SI equipementPhysique.DateAchat est correcte et renseignée ET equipementPhysique.DateRetrait est correcte et renseignée ALORS SI ((equipementPhysique.DateRetrait - equipementPhysique.DateAchat) / 365 + equipementPhysique.dureeUsageAmont + equipementPhysique.dureeUsageAval < 1) - ' si la durée de vie totale de l'équipement est inférieure à 1 an, on la fixe à 1 an car : - ' comme impact = facteurCaracterisation/dureeDeVie, si la dureeDeVie est inférieure à 1, on prendrait + de 100% de l'impact de l'équipement pour sa première année ce qui n'est pas logique - ALORS RENVOYER 1 - SINON RENVOYER (((equipementPhysique.DateRetrait - equipementPhysique.DateAchat) / 365) + equipementPhysique.DureeUsageAmont + equipementPhysique.DureeUsageAval) + 'si la durée de vie totale de l'équipement est inférieure à 1 an, on la fixe à 1 an car pour éviter d'avoir un impact supérieur à l'impact total de l'équipement sur l'ensemble de son cycle de vie + 'En effet : impact = facteurCaracterisation/dureeDeVie. Si la dureeDeVie est inférieure à 1, alors impact > facteurCaracterisation de l'équipement. + ALORS dureeVieItem = 1 + SINON dureeVieItem= (((equipementPhysique.DateRetrait - equipementPhysique.DateAchat) / 365) + equipementPhysique.DureeUsageAmont + equipementPhysique.DureeUsageAval) 'dans le cas où seul la date d'achat est disponible, la règle du "Pseudo-amortissement" prévaut (impact de 100% sur l'année d'achat, 50% l'année 2, 33% l'année 3, etc... ) - SINON SI equipementPhysique.DateAchat est correcte et equipementPhysique.DateRetrait non reseignée + SINON SI equipementPhysique.DateAchat est correcte et equipementPhysique.DateRetrait non renseignée SI ((equipementPhysique.DateRetrait - date du jour) / 365 + equipementPhysique.dureeUsageAmont + equipementPhysique.dureeUsageAval < 1) - ALORS RENVOYER 1 - SINON RENVOYER (((equipementPhysique.DateAchat - date du jour) / 365) + equipementPhysique.DureeUsageAmont + equipementPhysique.DureeUsageAval) + ALORS dureeVieItem= 1 + SINON dureeVieItem= (((equipementPhysique.DateAchat - date du jour) / 365) + equipementPhysique.DureeUsageAmont + equipementPhysique.DureeUsageAval) 'dans les autres cas, une durée de vie moyenne de l'équipement est déduite SINON SI (RG_DureeVieItem_Defaut(equipementPhysique) + equipementPhysique.DureeUsageAmont + equipementPhysique.DureeUsageAval < 1) - ALORS RENVOYER 1 - SINON RENVOYER (RG_DureeVieItem_Defaut(equipementPhysique) + equipementPhysique.DureeUsageAmont + equipementPhysique.DureeUsageAval) + ALORS dureeVieItem= 1 + SINON dureeVieItem= (RG_DureeVieItem_Defaut(equipementPhysique) + equipementPhysique.DureeUsageAmont + equipementPhysique.DureeUsageAval) FIN SI 'par défaut, la méthode de calcul de la durée de vie est la méthode "FIXE" SINON @@ -460,29 +462,29 @@ Règle RG_DureeVieItem(equipementPhysique) { SI equipementPhysique.DureeUsageInterne est renseignée et supérieure à 0 ALORS SI (equipementPhysique.DureeUsageInterne + equipementPhysique.DureeUsageAmont + equipementPhysique.DureeUsageAval < 1) - ALORS RENVOYER 1 - SINON RENVOYER (equipementPhysique.DureeUsageInterne + equipementPhysique.DureeUsageAmont + equipementPhysique.DureeUsageAval) + ALORS dureeVieItem= 1 + SINON dureeVieItem= (equipementPhysique.DureeUsageInterne + equipementPhysique.DureeUsageAmont + equipementPhysique.DureeUsageAval) SINON SI (RG_DureeVieItem_Defaut(equipementPhysique) + equipementPhysique.DureeUsageAmont + equipementPhysique.DureeUsageAval < 1) - ALORS RENVOYER 1 - SINON RENVOYER (RG_DureeVieItem_Defaut(equipementPhysique) + equipementPhysique.DureeUsageAmont + equipementPhysique.DureeUsageAval) + ALORS dureeVieItem= 1 + SINON dureeVieItem= (RG_DureeVieItem_Defaut(equipementPhysique) + equipementPhysique.DureeUsageAmont + equipementPhysique.DureeUsageAval) FIN SI FIN SI } -Règle RG_DureeVieItem(operationNonIT) { +Règle RG_DureeVieItem(operationNonIT, dureeVieItem) { 'dans le cas où il est possible de calculer l'age réel de l'item, ce dernier fait foi SI operationNonIT.dureeDeVie est correcte et renseignée ALORS SI operationNonIT.dureeDeVie < 1 - ALORS RENVOYER 1 - SINON RENVOYER operationNonIT.dureeDeVie + ALORS dureeVieItem= 1 + SINON dureeVieItem= operationNonIT.dureeDeVie 'dans les autres cas, une durée de vie moyenne de l'équipement est déduite SINON SI RG_DureeVieItem_Defaut(operationNonIT) < 1 - ALORS RENVOYER 1 - SINON RENVOYER RG_DureeVieItem_Defaut(operationNonIT) + ALORS dureeVieItem= 1 + SINON dureeVieItem= RG_DureeVieItem_Defaut(operationNonIT) FIN SI } ---- @@ -510,10 +512,12 @@ La durée de vie des items peut être déterminée par défaut dans le cas où l Règle RG_DureeVieItem_Defaut(Item, dureeVieItem_Defaut) { 'la durée de vie par défaut des items est celle renseignée dans la table des types d'items SI l'item en entrée est présent dans la table des références d'items (si Item.type = ref_TypeItem.nom) - ALORS dureeVieItem_Defaut = ref_TypeItem.dureeVieDefaut - 'on retient l hypothèse d'une durée de vie par défaut des items égale à la durée de vie des items enregistrée dans les hypothèses - SINON SI ref_Hypothese(dureeVieParDefaut) existe - ALORS dureeVieItem_Defaut = ref_Hypothese(dureeVieParDefaut).valeur + ALORS dureeVieItem_Defaut= ref_TypeItem.dureeVieDefaut + 'on retient l'hypothèse d'une durée de vie par défaut des items égale à la durée de vie des items enregistrés dans les hypothèses + SINON (SI Item='equipementPhysique' ET SI ref_Hypothese(dureeVieParDefaut) existe) + ALORS dureeVieItem_Defaut= ref_Hypothese(dureeVieParDefaut).valeur + SINON (SI Item='operationNonIT' ET SI ref_Hypothese(dureeVieBatimentParDefaut) existe) + ALORS dureeVieItem_Defaut= ref_Hypothese(dureeVieBatimentParDefaut).valeur SINON ErrCalcul("la durée de vie par défaut de l'item n'a pas pu être déterminée") FIN SI @@ -534,17 +538,17 @@ Cette règle permet de retrouver l'équipement de référence, c'est à dire cel |paramètre|entree/sortie|Description |organisation|entrée|l'organisation en cours de traitement |equipement|entrée|l'équipement dont on cherche la référence -|refEquipementretenu|sortie|l'équipement dont l'impact servira de référence +|refEquipementRetenu|sortie|l'équipement dont l'impact servira de référence |=== [pseudocode] ---- -Règle RG_correspondanceRefEquipement(nomOrganisation, equipement, refEquipementretenu) { +Règle RG_correspondanceRefEquipement(equipement, refEquipementRetenu) { - SI ref_CorrespondanceRefEqP(nomOrganisation, equipement.modele) existe - RENVOYER refEquipementretenu = ref_CorrespondanceRefEqP(nomOrganisation, equipement.modele).refEquipementCible + SI ref_CorrespondanceRefEqP(equipement.modele) existe + refEquipementRetenu= ref_CorrespondanceRefEqP(equipement.modele).refEquipementCible SINON SI ref_TypeItem(equipement.type).refEquipementParDefaut existe - RENVOYER refEquipementretenu = ref_TypeItem(equipement.type).refEquipementParDefaut + refEquipementRetenu= ref_TypeItem(equipement.type).refEquipementParDefaut SINON ErrCalcul("aucune correspondance avec un équipement de référence n'a pu être déterminée") FIN SI @@ -566,15 +570,15 @@ Cette règle permet de retrouver l'item de référence, c'est à dire celui dont |paramètre|entree/sortie|Description |organisation|entrée|l'organisation en cours de traitement |item|entrée|l'item dont on cherche la référence -|refItemParDefaut|sortie|l'item dont l'impact servira de référence +|refItemRetenu|sortie|l'item dont l'impact servira de référence |=== [pseudocode] ---- -Règle RG_correspondanceRefItem(nomOrganisation, item, refItemRetenu) { +Règle RG_correspondanceRefOperationNonIT(nomOrganisation, item, refItemRetenu) { SI ref_TypeItem(item.type).refItemParDefaut existe - RENVOYER refItemRetenu = ref_TypeItem(equipement.type).refItemParDefaut + refItemRetenu = ref_TypeItem(equipement.type).refItemParDefaut SINON ErrCalcul("aucune correspondance avec un item de référence n'a pu être déterminée") FIN SI @@ -617,25 +621,24 @@ Cette règle permet le calcul de l'impact moyen d'un équipement physique sur un [pseudocode] ---- -soit en_EqP(Equipement) = EqP +soit equipementPhysique = EqP Règle calculIndicateurImpactEquipementPhysique(critere, etape, nomOrganisation, EqP, en_DC, ind_ImpactEquipementPhysique) { -'Récupération de la correspondance de refEquipement -refEquipementRetenu = RG_correspondanceRefEquipement(nomOrganisation, equipementPhysique) + 'Récupération de la correspondance de refEquipement + refEquipementRetenu = RG_correspondanceRefEquipement(equipementPhysique) + result=0 - ind_ImpactEquipementPhysique(Equipement, EtapeACV, Critere) = - SI EtapeACV.code = "UTILISATION" - EqP.quantité + result= result + EqP.quantité SI EqP.consoElecAnnuelle est renseigné - x EqP.consoElecAnnuelle + result = result x EqP.consoElecAnnuelle 'enregistrement de la consommation electrique retenue ind_ImpactEquipementPhysique.consoElecMoyenne = EqP.consoElecAnnuelle SINON SI 'récupération de la consommation électrique de la référence de l'équipement retenue - x Ref_FacteurCaracterisation(refEquipementRetenu, EtapeACV, Critere).consoElecAnMoyenne + result = result x Ref_FacteurCaracterisation(refEquipementRetenu, EtapeACV, Critere).consoElecAnMoyenne 'enregistrement de la consommation electrique retenue ind_ImpactEquipementPhysique.consoElecMoyenne = Ref_FacteurCaracterisation(refEquipementRetenu, EtapeACV, Critere).consoElecAnMoyenne SINON @@ -646,60 +649,46 @@ refEquipementRetenu = RG_correspondanceRefEquipement(nomOrganisation, equipement SI EqP.NomCourtDatacenter est renseigné SI n_DC(EqP.NomCourtDatacenter).PUE existe - x en_DC(EqP.NomCourtDatacenter).PUE - SINON SI ref_Hypothese(PUEParDefaut) - x ref_Hypothese(PUEParDefaut) + result = result x en_DC(EqP.NomCourtDatacenter).PUE + SINON SI ref_Hypothese(PUEParDefaut) existe + result = result x ref_Hypothese(PUEParDefaut).valeur SINON ErrCalcFonc("le PUE est manquant et ne permet le calcul de l'impact à l'usage de l'équipement") Arret du calcul FIN SI - x ref_FacteurCaracterisation(EtapeACV, Critere, Categorie=electricity-mix, Localisation = en_DC(NomCourtDatacenter).localisation).valeur + result = result x ref_FacteurCaracterisation(EtapeACV, Critere, Categorie=electricity-mix, Localisation = en_DC(NomCourtDatacenter).localisation).valeur SINON - x ref_FacteurCaracterisation(EtapeACV, Critere, Categorie=electricity-mix, Localisation = EqP.PaysDUtilisation).valeur - - FIN SI + result = result x ref_FacteurCaracterisation(EtapeACV, Critere, Categorie=electricity-mix, Localisation = EqP.PaysDUtilisation).valeur - SI EqP.tauxUtilisation est renseigné - x EqP.tauxUtilisation - SINON SI EqP.modeUtilisation est renseigné - SI ref_Hypothese(EqP.modeUtilisation) existe - EqP.tauxUtilisation = ref_Hypothese(EqP.modeUtilisation) - x EqP.tauxUtilisation - SINON - EqP.tauxUtilisation = 1.0 - x EqP.tauxUtilisation - SINON - EqP.tauxUtilisation = 1.0 - x EqP.tauxUtilisation FIN SI SINON - EqP.quantité + result= result + EqP.quantité + + 'récupération de l'impact pour le critère et l'étape ACV en cours, de la référence de l'équipement retenue + result = result x Ref_FacteurCaracterisation(refEquipementretenu, EtapeACV, Critere).valeur + + result = result/ RG_DureeVieItem_Defaut(equipementPhysique) + FIN SI - SI EqP.tauxUtilisation est renseigné - x EqP.tauxUtilisation + 'pour toutes les étapes, on multiplie par un taux d'utilisation + SI EqP.tauxUtilisation est renseigné + result = result x EqP.tauxUtilisation SINON SI EqP.modeUtilisation est renseigné SI ref_Hypothese(EqP.modeUtilisation) existe - EqP.tauxUtilisation = ref_Hypothese(EqP.modeUtilisation) - x EqP.tauxUtilisation + EqP.tauxUtilisation = ref_Hypothese(EqP.modeUtilisation).valeur + result = result x EqP.tauxUtilisation SINON EqP.tauxUtilisation = 1.0 - x EqP.tauxUtilisation + result = result x EqP.tauxUtilisation SINON EqP.tauxUtilisation = 1.0 - x EqP.tauxUtilisation + result = result x EqP.tauxUtilisation FIN SI - 'récupération de l'impact pour le critère et l'étape ACV en cours, de la référence de l'équipement retenue - x Ref_FacteurCaracterisation(refEquipementretenu, EtapeACV, Critere).valeur - - / RG_DureeVieItem_Defaut(equipementPhysique) - - 'conso electrique retenue est null - ind_ImpactEquipementPhysique.consoElecMoyenne = null +ind_ImpactEquipementPhysique.impactUnitaire= result - FIN SI } ---- @@ -826,34 +815,34 @@ Cette règle permet le calcul de l'impact moyen d'une opération Non IT sur une |ind_ImpactOperationNonIT.nomItemNonIT|sortie|le nom de l'item dont on a calculé l'impact |ind_ImpactOperationNonIT.critere|sortie|le critere calculé |ind_ImpactOperationNonIT.etapeACV|sortie|l'étape ACV calculée -|ind_ImpactOperationNonIT.type|sortie|le type d'item +|ind_ImpactOperationNonIT.typeItem|sortie|le type d'item |ind_ImpactOperationNonIT.impactUnitaire|sortie|l'impact calculé pour le critère et l'étape ACV, vaut null en cas d'erreur |ind_ImpactOperationNonIT.quantite|sortie|la quantité d'items |ind_ImpactOperationNonIT.unite|sortie|l'unité présente dans le référentiel correspondant au critère en cours |ind_ImpactOperationNonIT.consoElecMoyenne|sortie|la consommation électrique -|ind_ImpactOperationNonIT.qualite|sortie|la qualité de la donnée d'inventaire +|ind_ImpactOperationNonIT.qualite|sortie| operationNonIT.qualite |=== [pseudocode] ---- -soit en_OperatioNonIT(Operation) = OpNIT +soit operationNonIT = OpNIT Règle calculIndicateurImpactOperationNonIT(critere, etape, nomOrganisation, OpNIT, ind_ImpactOperationNonIT) { 'Récupération de la correspondance de refItem refItemRetenu = RG_correspondanceRefOperationNonIT(nomOrganisation, OpNIT) - ind_ImpactOperationNonIT(Item, EtapeACV, Critere) = + result = 0 SI OpNIT.categorie = "RESEAU_MOBILE" OU "RESEAU_FIXE" OU "MAINTENANCE" OU "BATIMENT" SI EtapeACV.code = "UTILISATION" - OpNIT.quantité + result= result + OpNIT.quantité SI OpNIT.consoElecAnnuelle est renseigné - x OpNIT.consoElecAnnuelle + result= result x OpNIT.consoElecAnnuelle 'enregistrement de la consommation electrique retenue ind_ImpactOperationNonIT.consoElecMoyenne = OpNIT.consoElecAnnuelle SINON SI 'récupération de la consommation électrique de la référence de l'équipement retenue - x Ref_FacteurCaracterisation(refItemRetenu, EtapeACV, Critere).consoElecAnMoyenne + result= result x Ref_FacteurCaracterisation(refItemRetenu, EtapeACV, Critere).consoElecAnMoyenne 'enregistrement de la consommation electrique retenue ind_ImpactOperationNonIT.consoElecMoyenne = Ref_FacteurCaracterisation(refItemRetenu, EtapeACV, Critere).consoElecAnMoyenne SINON @@ -861,44 +850,52 @@ Règle calculIndicateurImpactOperationNonIT(critere, etape, nomOrganisation, OpN Arret du calcul FIN SI - x ref_FacteurCaracterisation(EtapeACV, Critere, Categorie=electricity-mix, Localisation = OpNIT.Localisation).valeur - + result= result x ref_FacteurCaracterisation(EtapeACV, Critere, Categorie=electricity-mix, Localisation = OpNIT.Localisation).valeur + SINON SI EtapeACV.code != "UTILISATION" - OpNIT.quantité + result= result + OpNIT.quantité - 'récupération de l'impact pour le critère et l'étape ACV en cours, de la référence de l'item retenu - x Ref_FacteurCaracterisation(refItemRetenu, EtapeACV, Critere).valeur + 'récupération de l'impact pour le critère, de l'étape ACV en cours et de la référence de l'item retenu + result= result x Ref_FacteurCaracterisation(refItemRetenu, EtapeACV, Critere).valeur - SI OpNIT.categorie = "RESEAU_FIXE" - / ref_Hypothese.valeur(CAPACITE_LIGNE_FIXE_LOCALISATION) + SI OpNIT.categorie = "RESEAU_FIXE" + referenceHypothese= ref_TypeItem(OpNIT.type).refHypothese + SI referenceHypothese existe + SI ref_Hypothese(referenceHypothese) existe + result= result / ref_Hypothese(referenceHypothese).valeur - SINON SI OpNIT.categorie = "BATIMENT" - / RG_DureeVieItem_Defaut(operationNonIT) + SINON SI OpNIT.categorie = "BATIMENT" + result= result / RG_DureeVieItem_Defaut(operationNonIT) FIN SI SINON SI OpNIT.categorie = "DEPLACEMENT_ELECTRIQUE" OU "DEPLACEMENT_ESSENCE" OU DEPLACEMENT_HYBRIDE - 'nombre de kilomètres parcourus dans le véhicule - OpNIT.quantité + 'la quantité est dans ce cas relative au nombre de kilomètres parcourus par le véhicule + result= result + OpNIT.quantité 'récupération de la consommation moyenne pour le véhicule choisi, valeur récupérée dans ref_hypothèses - x ref_Hypothese.valeur(OpNIT.refHypothese) + referenceHypothese= ref_TypeItem(OpNIT.type).refHypothese + SI referenceHypothese existe + SI ref_Hypothese(referenceHypothese) existe + result= result x ref_Hypothese(referenceHypothese).valeur SI OpNIT.categorie = "DEPLACEMENT_ELECTRIQUE" 'récupération du mix électrique pour le critère de Fabrication et pour l'étape ACV en cours - x ref_FacteurCaracterisation.valeur(FABRICATION, Critère, mix elec, OpNIT.Localisation)) + result= result x ref_FacteurCaracterisation(FABRICATION, Critère, mix elec, OpNIT.Localisation).valeur SINON SI OpNIT.categorie = "DEPLACEMENT_ESSENCE" 'récupération de l'impact de la production d'essence pour le critère de Fabrication et pour l'étape ACV en cours - x ref_FacteurCaracterisation.valeur(FABRICATION, Critère, Production essence )) + result= result x ref_FacteurCaracterisation(FABRICATION, Critère, Production essence).valeur SINON SI OpNIT.categorie = "DEPLACEMENT_HYBRIDE" 'récupération de l'impact de la production d'essence pour le critère de Fabrication et pour l'étape ACV en cours - x ref_FacteurCaracterisation.valeur(FABRICATION, Critère, Production essence )) + result= result x ref_FacteurCaracterisation(FABRICATION, Critère, Production essence).valeur 'récupération du taux utile pour le calcul d'impact des véhicules hybrides, valeur récupérée dans ref_hypothèses - x ref_Hypothese.valeur('taux_vehicule_hybride') + result= result x ref_Hypothese('taux_vehicule_hybride').valeur FIN SI FIN SI +ind_ImpactOperationNonIT.impactUnitaire = result + } ---- diff --git a/docs/References.plantuml b/docs/References.plantuml index 52d234c61d99ce24ce2a264ceba0f62bc7292bc2..a0715b6ab244b18eaf7fec06cc5710d5b94cd978 100644 --- a/docs/References.plantuml +++ b/docs/References.plantuml @@ -10,6 +10,7 @@ String source 'liste des types d'items autorisés class ref_TypeItem{ *String type +' Equipement, BATIMENT, RESEAU_FIXE, DEPLACEMENT_ELECTRIQUE... String categorie 'le booléen "serveur" permet de distinguer les équipements inclus dans le calcul de l'impact d'un serveur applicatif à l'utilisation boolean serveur