Files
rota/README.md

2.7 KiB

rota

Desktop app for generating monthly shift schedules for medical residents.

Tauri Rust SvelteKit License: MIT

Features

  • Configurable roster: residents, their allowed shift types, and per-resident shift caps
  • Constraints: forbidden pairings, day-off (negative) requests, and manual pre-assignments that the solver works around
  • Fairness: workload, weekend/holiday, and per-shift-type loads are balanced across the team
  • Interactive swaps: after generating, ask the engine for all legal swaps for any shift and apply one without breaking constraints
  • Export: one click writes the schedule and per-resident metrics to .docx and .txt

How it works

A month is laid out as a sequence of slots. Days alternate between two kinds of duty:

Day Shift Slots per day
odd open 2
even closed 1

The solver fills every slot with exactly one resident subject to the hard constraints:

  • no resident works two consecutive days
  • forbidden ("toxic") pairs never share a day
  • a resident is never placed on a day they requested off, or into a shift type they aren't allowed to take
  • per-resident caps on total shifts, weekend/holiday shifts, and shifts of each type are respected

The search is a backtracking DFS over the slots, with a few tricks to make it fast and produce good schedules:

  • Least-flexibility-first: at each slot, candidate residents are ordered by how few options they have left in the rest of the month, so the most constrained people get placed first (a fail-first / most-constrained heuristic).
  • Parallel roots:the first slot's candidates are fanned out across threads with rayon; the first thread to find a complete schedule wins and signals the others to stop.
  • Timeout: the search aborts after 5s and reports that no solution was found rather than hanging.

Getting started

Prerequisites

Commands

Run just --list to see every recipe.