Skip to main content
A coverage plan defines how many people you need on at any given time. It’s the source of truth for:
  • “Am I understaffed on Mon mornings?”
  • “Can I approve this PTO without creating a gap?”
  • Future: automatic gap warnings when saving schedules

Structure

A plan has:
  • Name — e.g. “Standard weekday coverage”
  • Effective from / to — date range this plan applies
  • Requirements — one row per (day-of-week + time-range) with a minimum staff count
And optional:
  • Exceptions — one row per date with an adjustment (+/– staff)

Create a plan

On /app/admin/coverage-plans, use the top form:
  • Name — required
  • Effective from — required date
  • Effective to — optional (leave blank for “ongoing”)
Click Create. The plan is created without any requirements yet. In the current UI you’d add requirements via SQL or a future inline-edit view; the database schema is set up to support them:
insert into coverage_requirements (plan_id, day_of_week, start_time, end_time, min_staff, location_id, role_label)
values ('plan-uuid', 1 /* Mon */, '08:00', '17:00', 3, null, null);

Exceptions

When a specific date needs different coverage — a holiday where you need fewer people, or a planned training day that needs more — create an exception:
  • Date — the specific day
  • Plan — which plan this exception modifies
  • Reason — short text
  • Adjustment — integer, +/– the number of staff from the plan’s minimum
The recent exceptions list at the bottom of the Coverage page shows the last 20.

Gap detection

The app doesn’t currently block approvals based on coverage gaps — but it flags them:
  • On the Admin schedules dashboard
  • On the Today dashboard for users with schedule.publish
Before approving PTO or trades, compare the plan’s min against the actual scheduled count for the affected days.

Required permissions

  • coverage.view — see plans, requirements, exceptions
  • coverage.manage — create/edit/delete
Both on Supervisor and Admin by default.