timefold/mistral.puml
2025-09-21 10:22:59 +02:00

80 lines
1.8 KiB
Plaintext

@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<Shift>
}
class Shift {
- id: String
- start: LocalDateTime
- end: LocalDateTime
- location: String
- requiredSkill: String
- employee: Employee
+ isOverlappingWithDate(date: LocalDate): boolean
}
class Employee {
- name: String
- skills: Set<String>
- unavailableDates: Set<LocalDate>
- undesiredDates: Set<LocalDate>
- desiredDates: Set<LocalDate>
+ hasSkill(skill: String): boolean
}
class EmployeeSchedule {
- employees: List<Employee>
- collectes: List<Collecte>
- score: HardSoftBigDecimalScore
- solverStatus: SolverStatus
+ getUnassignedShifts(): List<Shift>
}
' 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