75 lines
1.7 KiB
Plaintext
75 lines
1.7 KiB
Plaintext
@startuml BloodCollectionSimple
|
|
|
|
!define PLANNING_ENTITY class
|
|
!define PLANNING_SOLUTION class
|
|
!define PROBLEM_FACT class
|
|
|
|
' Main solution class (même qu'avant)
|
|
PLANNING_SOLUTION BloodCollectionSchedule {
|
|
- List<Employee> employees
|
|
- List<BloodCollection> bloodCollections
|
|
- HardSoftBigDecimalScore score
|
|
- SolverStatus solverStatus
|
|
+ getAllShifts() : List<Shift>
|
|
}
|
|
|
|
' Employee (inchangé)
|
|
PROBLEM_FACT Employee {
|
|
@PlanningId
|
|
- String name
|
|
- Set<String> skills
|
|
- Set<LocalDate> unavailableDates
|
|
- Set<LocalDate> undesiredDates
|
|
- Set<LocalDate> desiredDates
|
|
}
|
|
|
|
' Collecte de sang
|
|
PROBLEM_FACT BloodCollection {
|
|
@PlanningId
|
|
- String id
|
|
- String name
|
|
- LocalDate date
|
|
- String location
|
|
- List<Shift> shifts
|
|
+ getShifts() : List<Shift>
|
|
+ isTeamComplete() : boolean
|
|
}
|
|
|
|
' Shift (légèrement modifié)
|
|
PLANNING_ENTITY Shift {
|
|
@PlanningId
|
|
- String id
|
|
- LocalDateTime start
|
|
- LocalDateTime end
|
|
- String requiredSkill
|
|
- BloodCollection parentCollection
|
|
@PlanningVariable
|
|
- Employee employee
|
|
+ getParentCollection() : BloodCollection
|
|
}
|
|
|
|
' Relations
|
|
BloodCollectionSchedule ||--o{ Employee : contains
|
|
BloodCollectionSchedule ||--o{ BloodCollection : contains
|
|
|
|
BloodCollection ||--o{ Shift : contains
|
|
Shift }o--|| BloodCollection : belongs_to
|
|
Shift }o--o| Employee : assigned_to
|
|
|
|
note right of BloodCollection
|
|
Une collecte contient exactement:
|
|
- 2 shifts INFIRMIER
|
|
- 1 shift MEDECIN
|
|
- 1 shift CHAUFFEUR
|
|
- 1 shift ACCUEIL
|
|
|
|
Chacun avec ses propres horaires
|
|
end note
|
|
|
|
note left of Shift
|
|
Même concept qu'avant,
|
|
mais maintenant lié à
|
|
une collecte parente
|
|
end note
|
|
|
|
@enduml |