Clinical Posting Planning and Scheduling
Epic summary
The Clinical Posting Planning and Scheduling workspace converts the curriculum’s clinical-posting requirements into dated learner rotations.
Clinical postings are scheduled as blocks rather than ordinary course periods.
Curriculum clinical-posting requirement -> Cohort clinical-posting plan -> Stable clinical groups -> Department rotation assignments -> Posting-specific unit subgroups -> Unit, site, and location allocationFor example, Clinical Group A may undertake General Medicine for four weeks. During that posting, its learners may be divided between Medicine Units 1, 2, and 3 according to the units and capacity available for those dates.
The posting requirement remains independent of a course offering. An optional curriculum relationship may show that the posting supports a course, but neither record owns the other.
Before you start
The following must already exist:
- a cohort phase plan that is Ready for Detailed Planning or Active;
- the cohort’s pinned curriculum version and applicable posting requirements;
- Active main clinical groups with actual learner membership;
- responsible department mappings;
- eligible department units where the department uses units;
- approved teaching hospitals or other clinical learning sites;
- eligible wards, OPDs, emergency areas, community sites, or other locations;
- unit, site, location, and supervisor capacity rules;
- an academic calendar and posting-time pattern; and
- the required Clinical Posting Coordinator and department roles.
The posting planner may be opened earlier to review requirements and projected capacity. It cannot create a final learner rotation until the clinical groups and operational delivery resources are ready.
Actors and access
| Access source | Access in this epic |
|---|---|
| Institute member with Academic Registrar role | Oversees phase-level clinical readiness and resolves cross-department exceptions |
| Institute member with Phase Coordinator role | Coordinates the posting plan with the phase calendar, course schedule, and learner roster |
| Institute member with Clinical Posting Coordinator role | Prepares the rotation, runs or adjusts scheduling proposals, resolves conflicts, and submits the plan for review |
| Department Admin, normally with HOD appointment | Confirms department participation, available units, capacity, and supervisor pools |
| Unit Admin | Confirms unit availability, location use, learner capacity, and eligible team for applicable dates |
| Facilities Officer role | Confirms site and location capability and availability without assigning learners |
| Faculty or clinical supervisor | Views assigned groups and records permitted later delivery, attendance, supervision, and sign-off work |
| Student | Views only the released posting assignment that applies to them |
| Auditor role | Reads requirements, availability, scheduler inputs, proposals, manual changes, locks, approvals, and history |
The user who prepares the schedule cannot confirm unit capacity on behalf of a department unless they also hold the required department or unit capability.
Posting-plan lifecycle
Draft -> Ready for Scheduling -> Partially Scheduled -> Fully Scheduled -> Submitted for Timetable Review -> Active -> CompletedA Draft plan may be Cancelled. A plan with released or completed learner assignments is retained and changed through controlled amendments rather than deletion.
Automatic scheduling creates a proposal only. It never submits, activates, or publishes the plan.
Workspace structure
The workspace contains:
- Posting Requirements
- Posting Plan and Rotation Calendar
- Clinical Groups
- Department, Unit, and Site Availability
- Department Rotation Scheduler
- Unit Subgroup Scheduler
- Manual Rotation Grid and Locks
- Coverage, Conflicts, and History
Screen 1: Posting Requirements
The screen reads the clinical-posting requirements from the cohort’s pinned curriculum version.
Each requirement shows:
- posting code and name;
- academic discipline;
- curriculum phase;
- required duration and unit;
- required number of blocks;
- minimum and maximum block length;
- whether the posting may be split;
- required sequence or prerequisite;
- required site type;
- attendance, supervision, sign-off, or exposure requirements;
- responsible department and eligible delivery mappings; and
- source reference.
These fields are read-only in the posting plan. An academic requirement change must be made through a successor curriculum version.
Screen 2: Posting Plan and Rotation Calendar
The user defines how the phase interval will be divided for clinical rotations.
| Field | Required | What the user defines |
|---|---|---|
| Cohort phase plan | Yes | Phase whose learners and curriculum requirements are being scheduled |
| Plan code and name | Yes | Institute-unique identity for the rotation plan |
| Posting start and end dates | Yes | Clinical-posting window inside the phase-plan dates |
| Posting-time pattern | Yes | Working days and daily clinical-posting hours |
| Rotation-period method | Yes | Requirement-led dates, common rotation boundaries, or another supported method |
| Calendar exceptions | No | Approved breaks, holidays, examinations, or protected dates that affect rotation periods |
| Clinical Posting Coordinator | Yes | Current authorised coordinator assignment |
| Planning notes | No | Plain operational information that does not alter a curriculum requirement |
The system creates dated rotation periods. Periods may have equal lengths where requirements permit, but unequal posting durations must also be supported.
For example:
Rotation 1 — 1 September to 28 SeptemberRotation 2 — 29 September to 26 OctoberRotation 3 — 27 October to 23 NovemberRotation 4 — 24 November to 21 DecemberA posting block reserves the learner group’s applicable clinical hours during the date range. It does not turn every day into a separate bedside-teaching record during this step.
Screen 3: Clinical Groups
The screen selects Active main clinical groups from Learner Group Management.
It shows:
- group code and name;
- actual learner count;
- effective membership dates;
- learners with restricted or partial availability;
- existing posting assignments;
- locked memberships; and
- unresolved roster differences.
The posting scheduler does not permanently redefine main clinical groups. Posting-specific unit subgroups are created later from the selected group’s actual membership.
Screen 4: Department, Unit, and Site Availability
The responsible department comes from Curriculum Delivery Setup. The department then confirms which eligible resources can receive learners during this plan.
Department-level fields
| Field | Required | What the user defines |
|---|---|---|
| Posting requirement | Yes | Curriculum posting being prepared |
| Responsible department | Inherited | Approved department responsible for delivery |
| Available date range | Yes | Dates within which the department can receive groups |
| Maximum simultaneous groups | Yes | Department-level concurrent capacity |
| Department confirmation | Yes | HOD or authorised Department Admin confirmation |
Unit-level fields
| Field | Required | What the user defines |
|---|---|---|
| Unit | Conditional | Eligible department unit; omitted where the department does not operate through units |
| Available dates | Yes | Dates during which this unit can receive learners |
| Maximum learners | Yes | Actual learner capacity of the unit |
| Maximum simultaneous subgroups | Yes | Number of posting subgroups the unit can supervise at once |
| Primary site | Yes | Teaching hospital or other approved clinical site |
| Eligible locations | Conditional | Ward, OPD, emergency area, community centre, or another suitable location |
| Supervisor pool | Yes | Faculty or clinical-supervisor assignments eligible for this posting and period |
| Whole-block availability | Yes | Whether the unit can receive the subgroup for the complete posting block |
| Unavailable dates | No | Unit-specific blackout dates |
| Preference | No | Primary or alternative delivery option used as a scheduling preference |
| Confirmation | Yes | Unit Admin or authorised department confirmation |
The number of units alone is not enough. The scheduler uses the actual unit records, dates, capacity, sites, locations, and supervisor pools.
Units and locations remain separate. A unit is a clinical team; a ward or OPD is a physical place used by that team.
Screen 5: Department Rotation Scheduler
The first scheduling stage assigns stable clinical groups to department postings and dated rotation periods.
Inputs
- actual learner membership of each clinical group;
- curriculum posting requirements and durations;
- rotation periods;
- responsible departments;
- department availability and concurrent capacity;
- posting sequence and split rules;
- protected academic periods;
- existing locked assignments; and
- any authorised group restriction.
Output
Rotation 1Clinical A → General MedicineClinical B → General SurgeryClinical C → Obstetrics and GynaecologyClinical D → Paediatrics
Rotation 2Clinical A → General SurgeryClinical B → Obstetrics and GynaecologyClinical C → PaediatricsClinical D → General MedicineHard constraints
The scheduler must ensure:
- every group receives every mandatory posting and required duration;
- a group is not in two postings during overlapping clinical hours;
- the posting remains inside the phase and posting-plan dates;
- department concurrent capacity is not exceeded;
- required sequence and prerequisites are respected;
- a posting is divided only when the curriculum permits it;
- protected and authority-locked activities do not move; and
- group membership is valid for the assignment dates.
Preferences
The scheduler should try to:
- avoid unnecessary gaps;
- distribute preferred and alternative sites fairly;
- keep rotation boundaries simple;
- balance department load; and
- minimise changes to an earlier reviewed proposal.
A preference may be missed and reported. A hard constraint may not be violated.
Screen 6: Unit Subgroup Scheduler
The second scheduling stage takes each department posting assignment and divides its learners between the units available for that posting.
For example:
Clinical Group A — General Medicine — 32 learners├── A1 — 12 learners → Medicine Unit 1├── A2 — 10 learners → Medicine Unit 2└── A3 — 10 learners → Medicine Unit 3The same main clinical group may split differently in another department:
Clinical Group A — General Surgery — 32 learners├── A1 — 16 learners → Surgery Unit 1└── A2 — 16 learners → Surgery Unit 2Posting-specific subgroups do not change the learner’s stable main clinical group.
Unit-allocation rules
- Every learner in the department assignment must be placed in exactly one active unit subgroup for the applicable dates.
- Unit capacity is checked using actual learner count.
- The unit must be eligible, available, and confirmed for the whole allocation period.
- The site and location must support the posting.
- Required supervisor capacity must be available.
- The subgroup cannot be larger than the selected unit’s capacity.
- Existing learner or unit locks are preserved.
- Subgroup sizes should be as balanced as capacity allows.
- A department without units receives a department-level assignment without artificial units.
Where a department deliberately rotates subgroups between units within one posting, the plan may use dated unit segments only when the delivery configuration permits it. The scheduler must still preserve the total required posting duration for every learner.
Scheduling approach
Clinical scheduling should not rely on a simple first-fit greedy algorithm alone. An early flexible assignment can consume the only capacity available for a later constrained group.
The scheduling service should:
- generate every valid group, posting, period, department, and unit candidate;
- remove candidates that already violate hard rules;
- create a fast initial proposal using scarcity-first greedy allocation;
- pass the proposal to a constraint solver for repair and improvement;
- stop after a configured time limit with the best feasible result found; and
- explain every requirement or learner it could not place.
The greedy pass schedules the most constrained work first:
- locked assignments;
- postings with only one eligible department, site, or unit;
- lowest-capacity resources;
- longest postings;
- strict sequences;
- largest groups; and
- flexible assignments last.
A constraint-programming solver such as CP-SAT is suitable because the problem combines assignment, capacity, date, sequence, exclusivity, and preference rules. The algorithm is deterministic for a retained input snapshot and seed. It is not an AI-generated timetable.
The scheduler returns Feasible, Optimal within the configured objective, Infeasible, or Not Solved within the time limit. Infeasible must include the smallest practical set of conflicting requirements that the system can explain.
Screen 7: Manual Rotation Grid and Locks
The main review screen uses:
- rows for stable clinical groups;
- columns for rotation periods; and
- cells showing the department posting, unit subgroups, sites, learner counts, and warnings.
The user can:
- move a group to another valid posting period;
- exchange two compatible group assignments;
- redistribute learners between available units;
- select another eligible unit or site;
- lock an accepted department or unit allocation;
- release a permitted lock with a reason;
- rerun scheduling around locked work; and
- inspect why an alternative is invalid.
Manual and automatic scheduling use the same validation service. A drag-and-drop action cannot bypass a hard rule.
Screen 8: Coverage, Conflicts, and History
Coverage is calculated per learner, group, posting requirement, duration, and unit allocation.
The screen identifies:
- missing or excess posting duration;
- a learner omitted from a unit subgroup;
- duplicate subgroup membership;
- department, unit, site, or supervisor capacity failure;
- overlapping clinical or course work;
- unavailable unit dates;
- invalid or ended group membership;
- a posting split that is not permitted;
- an unresolved protected-period conflict;
- a requirement that the scheduler could not place; and
- changes made after review or release.
History retains every input snapshot, scheduling run, proposal, accepted assignment, manual change, lock, confirmation, submission, activation, completion, and reversal.
Use case 1: Prepare a clinical-posting plan
As a Clinical Posting Coordinator
I want to prepare the phase’s posting requirements and rotation calendar
So that clinical groups can be scheduled against the correct curriculum and dates.
Acceptance criteria
- Requirements come from the cohort’s pinned curriculum version and are read-only.
- Posting dates and time patterns remain within the phase plan and calendar.
- Every requirement shows its responsible department and unresolved delivery gaps.
- Rotation periods support equal and unequal posting durations.
- The plan cannot become Ready for Scheduling until mandatory groups and delivery resources are available.
Use case 2: Confirm available departments, units, and sites
As a Department Admin or Unit Admin
I want to confirm when and how my department or unit can receive learners
So that the scheduler uses real clinical-teaching capacity.
Acceptance criteria
- Only eligible units, sites, locations, and supervisor pools can be selected.
- Unit capacity and simultaneous-subgroup capacity are separate fields.
- Availability is effective-dated for the posting plan.
- A unit and its physical locations remain separate records.
- Confirmation records the responsible role, actor, and time.
- An unavailable or unconfirmed resource is not used by the scheduler.
Use case 3: Generate the department rotation
As a Clinical Posting Coordinator
I want to automatically assign clinical groups to department postings
So that every group receives the required postings without clashes.
Acceptance criteria
- Every mandatory posting and duration is considered.
- Locked assignments remain unchanged.
- Hard constraints are never traded for preferences.
- The output shows every group by rotation period.
- Unscheduled requirements include a plain reason.
- The proposal is not activated or published automatically.
Use case 4: Generate posting-specific unit subgroups
As a Clinical Posting Coordinator
I want to divide each department group assignment across its available units
So that learners receive clinical teaching within real unit capacity.
Acceptance criteria
- Actual learners, rather than only a group count, are allocated.
- Every learner is assigned exactly once for the unit-allocation dates.
- Subgroup sizes respect unit capacity and are balanced where possible.
- A different subgroup pattern may be created for another department posting.
- Main clinical-group membership is not changed.
- A department without units remains department-level.
Use case 5: Review and manually adjust the rotation
As a Clinical Posting Coordinator
I want to adjust a proposed department or unit assignment while seeing conflicts
So that local operational knowledge can be applied safely.
Acceptance criteria
- The user sees learner, duration, capacity, unit, site, supervisor, and timetable impact before saving.
- Manual changes use the same hard validation rules as automatic scheduling.
- A permitted warning override records its reason and authority.
- Accepted allocations can be locked.
- A new scheduling run works around the retained locks.
Use case 6: Review coverage and submit for timetable review
As a Phase Coordinator
I want to confirm complete posting and unit coverage
So that the clinical rotation can enter the master-timetable review.
Acceptance criteria
- Coverage is shown for every learner, clinical group, posting requirement, and duration.
- Every learner has a valid department assignment and, where applicable, unit subgroup assignment.
- Hard conflicts and unexplained curriculum gaps block submission.
- Department and unit confirmations are visible.
- Submission does not itself publish the timetable.
Important business rules
- Clinical-posting requirements and course placements are independent curriculum records.
- Main clinical groups rotate across department postings.
- Departments with multiple teaching units normally divide the assigned group into posting-specific unit subgroups.
- Posting-specific subgroup membership does not alter the stable clinical group.
- The same group may split differently in different departments.
- Actual unit capacity, not merely the number of units, controls learner allocation.
- Units and physical locations remain separate.
- A department without units is scheduled at department level.
- Every learner must receive the complete posting duration required by their curriculum version.
- Automatic scheduling creates a proposal and never publishes it.
- Manual and automatic changes use the same constraints and audit rules.
- Daily actual supervisors and clinical delivery are recorded later in the Clinical Posting Workspace and Delivery without rewriting the planned rotation. Attendance, encounters, and competency evidence remain in their owning records.
Conceptual schema
| Record | Important fields |
|---|---|
academic.clinical_posting_plan | tenant, institute, phase plan, code/name, date window, time pattern, coordinator, status |
academic.posting_plan_requirement | plan, curriculum posting requirement, responsible department, planned dates, readiness, status |
academic.clinical_rotation_period | plan, code/name, start/end dates, time pattern, sequence, lock state |
academic.posting_department_availability | plan requirement, department, dates, simultaneous-group capacity, confirmation |
academic.posting_unit_availability | plan requirement, unit, dates, learner/subgroup capacity, site, locations, supervisor pool, preference, confirmation |
academic.clinical_posting_assignment | plan requirement, main clinical group, rotation period, department, start/end dates, source, lock, status |
academic.clinical_posting_subgroup | posting assignment, code/name, unit, site, location options, dates, learner count, supervisor pool, lock, status |
academic.clinical_posting_subgroup_member | posting subgroup, phase-plan participant, start/end dates, source, status |
academic.clinical_schedule_run | plan, stage, input snapshot, constraints, preferences, algorithm version, seed, time limit, result, summary |
academic.clinical_schedule_proposal_item | run, posting or subgroup assignment, proposed period/resource, result, warning or unscheduled reason |
academic.clinical_posting_event | plan or assignment, event type, earlier/new value or state, actor, reason, recorded at |
Process-layer responsibilities
The process layer:
- reads posting requirements from the exact curriculum version pinned to the cohort;
- creates requirement and rotation-plan records without changing the source curriculum;
- resolves actual clinical groups and membership from Active learner-group records;
- resolves eligible departments, units, sites, locations, and supervisor pools from effective-dated Setup records;
- generates department-rotation candidates and unit-subgroup candidates;
- applies hard date, duration, exclusivity, capacity, sequence, site, unit, supervisor, and lock constraints;
- applies preferences only after every hard rule is satisfied;
- uses scarcity-first construction followed by bounded constraint solving and repair;
- records inputs, algorithm version, seed, time limit, result quality, and explanations;
- calculates per-learner posting and unit-allocation coverage;
- supports manual adjustments through the same validation service;
- exposes protected posting times to course and master-timetable conflict checks;
- retains confirmed and locked assignments across later scheduling runs; and
- preserves every material proposal, acceptance, adjustment, activation, and completion event.
Success outcome
Every eligible learner has a complete, capacity-checked clinical rotation across the required departments and, where applicable, an explicit posting-specific assignment to an available clinical unit, ready for master-timetable review and later daily operation through the Clinical Posting Workspace and Delivery.