80 lines
1.8 KiB
Plaintext
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
|