Parked during the hard constraints design session. Pick up after hard constraints are implemented and in use.
“PGY-X residents should complete N shifts of template type Y over the academic year.”
program_idpgy_min / pgy_max — PGY rangeresident_tag_ids — optional additional filter (AND
logic)template_id or call_type_id — what
shifts counttarget_count — the goalmin_count / max_count — optional hard
floor/ceiling“Distribute shifts fairly across residents in a group.”
program_idpgy_min / pgy_max — defines the resident
groupresident_tag_ids — optional additional group
filterThe core tension: soft targets need to balance across multiple schedules within an academic year, but: - You need to know which schedules to balance across - Those schedules might not all exist yet when you create the constraint - The “academic year” is implicit (no explicit entity), defined by date ranges of schedules
program_year concept that groups schedules. Cleanest
model but adds a new entity.Soft targets are optimization objectives, not hard constraints. The solver should: - Try to hit target counts (minimize deviation from target) - Minimize variance across the balance group (fairness) - These compete with “maximize filled shifts” — need to define priority/weighting