Schedule Interface

Click one or more of an employee's cells to select shift(s) (click again to deselect), then drag any selected cell onto another employee's column to swap those dates between the two employees. Double-click a cell to directly change what that employee is working that day. Right-click a cell for a quick add/remove menu, or to lock/unlock it — locked shifts can't be moved by swaps, drag, edits, or the solver until unlocked.

This mirrors the native schedule file: columns are shift slots, cells show who's assigned. Click a cell to reassign it, or right-click to lock/unlock it — locked shifts can't be moved by swaps, drag, edits, or the solver until unlocked.

Live actual counts from the current schedule vs. reference targets. Target hours/FTE columns come from the loaded summary file (if any) since per-entity annualized FTE targets aren't part of constraints.json; hard-floor/backup-cap numbers come from constraints.json's hard constraints.

Solver — random swap search

Tries every valid two-employee swap within a date range, in random date order, and keeps only the swaps that improve the schedule score. Swaps that would put someone on a shift they aren't eligible for, or that touch a locked shift, are skipped without scoring (scoring the whole schedule is the expensive part). Runs entirely in this tab — don't edit the schedule elsewhere while it's running.

Employees

Task Types / Shifts

Constraints File

Upload a constraints.json file to replace the active ruleset (validated against constraints.schema.json before applying).

Schedule File (sched.json)

Upload a self-contained schedule file matching sched.schema.json (its problem section's roles/shifts/people, plus its schedule section's assignments) to replace the current roster/schedule. This only replaces the schedule — the currently-loaded constraints.json (scoring rules) is left untouched, so double-check the imported roles line up with it.

Backups & Autosave

Every change is autosaved to data/current_schedule.csv and undo history is kept for the whole session. Structural changes (add/delete employee or task type, constraints upload) also write a timestamped snapshot to backups/.