Skip to content

Scheduling engine

Who this is for: Developers and advanced admins
What you'll achieve: Understand materialise → recompute → publish

Implementation lives in packages/domain (especially engine.ts) and is invoked from apps/web day services.

Pipeline

mermaid
flowchart LR
  Template[Weekly template] --> Materialise[Materialise]
  Materialise --> Absences[Apply absences]
  Absences --> Gaps[Find gaps]
  Gaps --> Score[Score candidates]
  Score --> Propose[Propose revision]
  Propose --> Publish[Explicit publish]
  Publish --> Notify[Notification rules]
  1. Materialise — copy template slots/assignments into a day revision
  2. Apply absences — remove unavailable people
  3. Find gaps — unmet headcount / lead / capability requirements
  4. Score candidates — duty tiers, grade priority, capabilities, fairness heuristics
  5. Propose — write a draft revision with explanations
  6. Publish — lock revision; fire notifications

Hard rules (product)

  • Engine output is a proposal — never auto-publish
  • Last-resort placements must remain visible and explainable
  • Audit trail records publish and material config changes

Same-day ops

Recording an absence triggers a propose recompute. Duty leads review on Today and publish. See Recording absences.

Tests

bash
pnpm test

Domain unit tests cover constraint and scoring behaviour.

SchoolRota documentation — every slot covered, every day.