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

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