@startuml
'Uniquement pour faciliter la lecture du diagramme, pas encore d'usage
abstract class TraceCalculImpact{
}
hide TraceCalculImpact

' Classes de trace


class TraceCalculImpactEquipementPhysique {
    String formule
    Integer quantite
    Double tauxUtilisation
    String paysUtilisation
    String nomCourtDataCenter
    ConsoElecAnMoyenne consoElecAnMoyenne
    MixElectrique mixElectrique
    NbJourUtiliseAn nbJourUtiliseAn
    Double valeurReferentielImpactEquipement
    String sourceReferentielImpactEquipement
    DureeDeVie dureeDeVie
    String erreur
}

class TraceCalculOperationNonIT {
    String formule
    ConsoElecAnMoyenne consoElecAnMoyenne
    MixElectrique mixElectrique
    Double valeurReferentielFacteurCaracterisation
    String valeurReferentielFacteurCaracterisation
    Hypothese hypothese;
    DureeDeVie dureeDeVie
    String erreur
}

class TraceCalculImpactEquipementVirtuel {
    String formule
    Integer nbEquipementsVirtuels
    Integer nbTotalVCPU
    Double stockageTotalVirtuel
    String erreur
}

class TraceCalculImpactApplication {
    String formule
    Integer nbApplications
    String erreur
}

class TraceCalculImpactMessagerie {
    String formule
    String critere
    String sourceReferentielImpactMessagerie
    Double volumeTotalMailEmis
    Double nombreMailEmis
    Double constanteCoefficientDirecteur
    Double poidsMoyenMail
    Double constanteOrdonneeOrigine
    Double nombreMailEmisXDestinataires
}

' Classes des objets associées aux calculs

class ConsoElecAnMoyenne {
    Double valeur
    Double valeurEquipementConsoElecAnnuelle
    Double valeurReferentielConsoElecMoyenne
    String sourceReferentielImpactEquipement
}

 class DureeDeVie {
    Double valeurRetenue
    private String methodeDureeUsage
    private Double dureeUsageInterne
    private Double dureeUsageAmont
    private Double dureeUsageAval
    String dateAchat
    String dateRetrait
    DureeDeVieParDefaut dureeDeVieParDefaut
}

 class DureeDeVieParDefaut {
    Double valeur
    Double valeurEquipementDureeVieDefaut
    Double valeurReferentielHypothese
    String sourceReferentielHypothese
    String typeEquipement
}

class MixElectrique {
   Double valeur
   boolean isServeur
   Double dataCenterPue
   Double valeurReferentiel
   String sourceReferentiel
   String pays
}

class NbJourUtiliseAn {
    Double equipementNbJourUtiliseAn
    Double valeurReferentielHypothese
    String sourceReferentielHypothese
    Double valeur
}

ConsoElecAnMoyenne "0-1" -up- "1" TraceCalculImpactEquipementPhysique : peut contenir >
DureeDeVie "0-1" -up- "1" TraceCalculImpactEquipementPhysique : peut contenir >
MixElectrique "0-1" -up- "1" TraceCalculImpactEquipementPhysique : peut contenir >
NbJourUtiliseAn "0-1" -up- "1" TraceCalculImpactEquipementPhysique : peut contenir >

ConsoElecAnMoyenne "0-1" -up- "1" TraceCalculOperationNonIT : peut contenir >
DureeDeVie "0-1" -up- "1" TraceCalculOperationNonIT : peut contenir >
MixElectrique "0-1" -up- "1" TraceCalculOperationNonIT : peut contenir >

DureeDeVieParDefaut "0-1" -up- "1" DureeDeVie : peut contenir >

TraceCalculImpact <|-- "hérite de" TraceCalculImpactMessagerie
TraceCalculImpact <|-- "hérite de" TraceCalculOperationNonIT
TraceCalculImpact <|-- "hérite de" TraceCalculImpactEquipementVirtuel
TraceCalculImpact <|-- "hérite de" TraceCalculImpactEquipementPhysique

@enduml
