@startuml
'les clés primaire sont désignées avec un point
'les références entre tables sont désignées avec un carré

class en_DonneesEntree {
'Nom de l'organisation liée aux données
String nomOrganisation
'Le nom du lot permettant d’agréger les données provenant de différentes sources et d'en faire un suivi temporel
LocalDate nomLot
'La date du lot permet d’agréger les données provenant de différentes sources et d'en faire un suivi temporel
LocalDate dateLot
' le paramètre suivant est facultatif. Il liste les noms des critères souhaités dans le calcul, en cohérence avec la table ref_Critere . Son absence déclenchera le caclul sur l'ensemble des critères présents dans la table de référence ref_Critere
List<String> criteresDemandees
' le paramètre suivant est facultatif. Il liste les codes des étapes souhaitées dans le calcul, en cohérence avec la table ref_EtapeACV. Son absence déclenchera le caclul sur l'ensemble des étapes présentes dans la table de référence ref_EtapeACV.
List<String> etapesDemandees
List<en_OperationNonIT> operationsNonIT
List<en_EqP> equipementsPhysiques
List<en_DC> dataCenters
List<en_Messagerie> messageries
List<en_Entite> entites
String dureeUsage
}

class en_Entite {
String nomOrganisation
LocalDate dateLot
String nomEntite
Integer nbCollaborateurs
String responsableEntite
String responsableNumeriqueDurable
}

'Operation Non IT
class en_OperationNonIT {
*String nomItemNonIT
Double quantite
String type
Double dureeDeVie
String localisation
'Nom de l'entité responsable du datacenter
String nomEntite
String nomSourceDonnee
' Référence au data center = en_DC.nomCourtDataCenter
- String nomCourtDatacenter
String description
Double consoElecAnnuelle
}

'Equipement Physique
class en_EqP {
* String nomEquipementPhysique
'le type fait référence au ref_typeEquipement présent dans les références
String type
' Pour type == Serveur, Référence au data center = en_DC.nomCourtDataCenter
- String nomCourtDatacenter
String modele
String statut
String paysDUtilisation
String utilisateur
Date dateAchat
Data dateRetrait
Double dureeUsageInterne
Double dureeUsageAmont
Double dureeUsageAval
Double consoElecAnnuelle
Float nbJourUtiliseAn
Float goTelecharge
Integer quantite
String modeUtilisation
Double tauxUtilisation
'Nom de l'entité responsable de l'équipement physique
String nomEntite
String nomSourceDonnee
List<en_EqV> machinesVirtuelles
}


'Equipement Virtuel
class en_EqV {
* String nomEquipementVirtuel
'le type d'équipement virtuel contient "calcul", "stockage", "null"
String typeEqV
'nom de l'équipement physique sous jacent
- String  nomEquipementPhysique
Integer vCPU
'en To
Double capaciteStockage
' la clé de repartition est exprimée comme une fraction 
Double cleRepartition
Double consoElecAnnuelle
String cluster
'Nom de l'entité responsable de l'équipement virtuel
String nomEntite
String nomSourceDonnee
List<en_App> applications
}

'DataCenter
class en_DC {
*String nomCourtDatacenter
String nomLongDatacenter
Double PUE
String localisation
'Nom de l'entité responsable du datacenter
String nomEntite
String nomSourceDonnee
}

'Application = Une instance d'une application sur une VM
class en_App {
* String nomApplication
'les type d'environnements permettent de distinguer les environnements de développement, de recette, de production..
* String typeEnvironnement
' Référence à l'équipement virtuel = en_EqV.nomVM
- String nomEquipementVirtuel
'les catégories permettent le classement par domaine applicatif
String domaine
String sousDomaine
'Nom de l'entité associée
' permet de retrouver des données liées à l'entité
String nomEntite
String nomSourceDonnee
}

'données de la messagerie
class en_Messagerie {
'nombre total des mails émis par les collaborateurs
Double nombreMailEmis
'nombre de mail émis multiplié par le nombre de destinataires
Double nombreMailEmisXDestinataires
'Volume total des mails dans les boites mails des collaborateurs
Double volumeTotalMailEmis
'date au format MMYY
Date MoisAnnee
'Nom de l'entité associée
' Pas utile pour les applications
' mais utile pour retrouver des données liées à l'entité
String nomEntite
String nomSourceDonnee
}

en_DonneesEntree "1"--- "0-*" en_DC : peut contenir >
en_DonneesEntree "1"--- "0-*" en_OperationNonIT : peut contenir >
en_DonneesEntree "1"--- "0-*" en_EqP : peut contenir >
en_DonneesEntree "1"--- "0-*" en_Messagerie : peut contenir >
en_DonneesEntree "1"--- "0-*" en_Entite : peut contenir >
en_App "1" - "1" en_EqV : est contenu dans >
en_EqV "0-*" - "1" en_EqP : est contenu dans >


@enduml
