@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 employees - List bloodCollections - HardSoftBigDecimalScore score - SolverStatus solverStatus + getAllShifts() : List } ' Employee (inchangé) PROBLEM_FACT Employee { @PlanningId - String name - Set skills - Set unavailableDates - Set undesiredDates - Set desiredDates } ' Collecte de sang PROBLEM_FACT BloodCollection { @PlanningId - String id - String name - LocalDate date - String location - List shifts + getShifts() : List + 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