@startuml EmployeeSchedulingModel ' Configuration pour un rendu plus lisible skinparam classAttributeIconSize 0 skinparam defaultFontName Arial left to right direction ' Définition des classes class Collecte { - id: String - start: LocalDateTime - end: LocalDateTime - location: String + getShifts(): List } class Shift { - id: String - start: LocalDateTime - end: LocalDateTime - location: String - requiredSkill: String - employee: Employee + isOverlappingWithDate(date: LocalDate): boolean } class Employee { - name: String - skills: Set - unavailableDates: Set - undesiredDates: Set - desiredDates: Set + hasSkill(skill: String): boolean } class EmployeeSchedule { - employees: List - collectes: List - score: HardSoftBigDecimalScore - solverStatus: SolverStatus + getUnassignedShifts(): List } ' Relations entre les classes Collecte "1" *-- "0..*" Shift : contient > Shift "1" --o "0..1" Employee : assigné à > EmployeeSchedule "1" *-- "0..*" Employee : gère > EmployeeSchedule "1" *-- "0..*" Collecte : organise > ' Légende pour les cardinalités legend right | **Cardinalités** | |------------------| | "1" = Un et un seul | | "0..*" = Zéro ou plusieurs | | "0..1" = Zéro ou un | endlegend ' Notes pour expliquer les contraintes note top of Shift Un Shift représente un besoin pour une compétence spécifique dans une Collecte. end note note right of Employee Un Employee peut être assigné à plusieurs Shifts s'il a les compétences requises et est disponible. end note note bottom of Collecte Une Collecte nécessite plusieurs Shifts, chacun avec une compétence spécifique. Exemple : 2 INFIRMIER, 1 MEDECIN, etc. end note @enduml