```mermaid classDiagram class Campus { +int id +String nom +String adresse +String ville +String codePostal +Boolean actif } class SallePret { +int id +String nom +String localisation +Boolean actif } class PosteEmprunt { +int id +String nom +String identifiantPoste +Boolean actif } class Utilisateur { +int id +String microsoftId +String nom +String prenom +String email +String classe +Boolean actif } class Role { +int id +String code +String libelle +String description } class CarteEtudiante { +int id +String qrCode +DateTime dateActivation +DateTime dateExpiration +Boolean actif } class CategorieMateriel { +int id +String nom +String description +Boolean actif } class Materiel { +int id +String nom +String marque +String modele +String reference +String numeroInventaire +String numeroSerie +StatutMateriel statut +String etatGeneral +Boolean actif +verifierDisponibilite() +changerStatut() } class Accessoire { +int id +String nom +String description +Boolean actif } class MaterielAccessoire { +int id +int materielId +int accessoireId +int quantiteAttendue +Boolean obligatoire } class Emprunt { +int id +DateTime dateEmprunt +DateTime dateRetourPrevue +DateTime dateRetourReelle +StatutEmprunt statut +ModeIdentification modeIdentificationEmprunt +ModeIdentification modeIdentificationRetour +String commentaireDepart +String commentaireRetour +confirmerDepartInchange() +soumettreEcartDepart() +confirmerEcartDepart() +initialiserRetourDepuisDepart() +confirmerRetourInchange() +soumettreEcartRetour() +confirmerEcartRetour() +marquerEnRetard() } class Checklist { +int id +TypeChecklist type +DateTime dateVerification +String commentaire +valider() } class ChecklistElement { +int id +String nomElement +EtatChecklistElement etat +int quantiteConstatee +String commentaire } class Anomalie { +int id +String type +String description +StatutAnomalie statut +Boolean detecteeAutomatiquement +String observation +DateTime dateDetection +DateTime dateResolution +ajouterObservation() +changerStatut() +cloturer() } class Historique { +int id +String action +String description +DateTime dateAction } class Notification { +int id +String titre +String message +String type +Boolean lu +DateTime dateCreation +marquerCommeLue() } class StatutMateriel { <> DISPONIBLE RESERVE EMPRUNTE NON_CONFORME DETERIORE MAINTENANCE INDISPONIBLE } class StatutEmprunt { <> EN_ATTENTE_VALIDATION_DEPART EN_COURS EN_RETARD EN_ATTENTE_VALIDATION_RETOUR CLOTURE RETOUR_NON_CONFORME ANNULE } class TypeChecklist { <> DEPART RETOUR } class EtatChecklistElement { <> PRESENT ABSENT DETERIORE } class StatutAnomalie { <> DETECTEE EN_COURS_TRAITEMENT RESOLUE CLOTUREE } class ModeIdentification { <> QR_CODE MAIL_ENSUP } Campus "1" --> "0..*" SallePret : contient Campus "1" --> "0..*" Utilisateur : rattache Campus "1" --> "0..*" Materiel : possede Campus "1" --> "0..*" Emprunt : localise Campus "0..1" --> "0..*" Historique : concerne_campus SallePret "1" --> "0..*" PosteEmprunt : possede SallePret "1" --> "0..*" Emprunt : concerne SallePret "0..1" --> "0..*" Historique : localise PosteEmprunt "1" --> "0..*" Emprunt : enregistre PosteEmprunt "0..1" --> "0..*" Historique : trace Role "1" --> "0..*" Utilisateur : attribue Utilisateur "1" --> "0..*" CarteEtudiante : possede Utilisateur "1" --> "0..*" Emprunt : effectue Utilisateur "1" --> "0..*" Checklist : renseigne Utilisateur "1" --> "0..*" Historique : declenche Utilisateur "1" --> "0..*" Notification : recoit CategorieMateriel "1" --> "0..*" Materiel : classe Materiel "1" --> "0..*" MaterielAccessoire : possede Accessoire "1" --> "0..*" MaterielAccessoire : compose Materiel "1" --> "0..*" Emprunt : concerne Emprunt "1" --> "1..2" Checklist : possede Checklist "1" --> "1..*" ChecklistElement : contient Accessoire "0..1" --> "0..*" ChecklistElement : verifie Emprunt "1" --> "0..*" Anomalie : genere Materiel "1" --> "0..*" Anomalie : concerne Utilisateur "1" --> "0..*" Anomalie : concerne_etudiant Utilisateur "0..1" --> "0..*" Anomalie : traitee_par_responsable Emprunt "0..1" --> "0..*" Historique : trace Materiel "0..1" --> "0..*" Historique : concerne Anomalie "0..1" --> "0..*" Notification : genere ```