Leave Governance
Beyond the basic time-off request flow (see Availability, Time Off & Swaps), ShiftPilot has a full leave-governance layer: configurable leave types and accrual, staff-visible balances, FMLA/ADA protected designations, a supervisor of record who approves leave, per-role leave limits, and seasonal blackouts. This page covers all of it. Like compensation, the sensitive pieces are gated by capabilities, not role alone.
Leave types, accrual & balances (/leave)
The Leave Admin console (gated by MANAGE_ACCRUAL_POLICIES) defines the leave your organization offers:
- Leave types — PTO, Sick, CME, Jury Duty, etc. Each is paid/unpaid and either accrues or is simply tracked.
- Accrual policies — how a type accrues:
PER_PAY_PERIOD(a fixed amount each period),ANNUAL_GRANT(once a year), orPER_HOURS_WORKED(a rate × hours worked — using actual timecard hours where a punch exists, else scheduled). Policies carry a max balance cap and a carryover cap, and are assigned to staff. - Balances are never a mutable counter — they're a sum over an append-only ledger, so every accrual, usage, adjustment, and forfeiture is individually auditable and reversible. Staff see their balances on the Time Off page.
Accruals run idempotently (the monthly cron, or the Run accruals now button) — re-running a period is a
no-op. At year-end, Apply year-end carryover forfeits any balance above each policy's carryover cap (a
carryoverCap of 0 means use-it-or-lose-it; blank means unlimited carryover), writing a CARRYOVER_FORFEIT ledger
entry.
Protected leave (FMLA / ADA)
A time-off request can be designated FMLA or ADA by a holder of MANAGE_PROTECTED_LEAVE. This is treated as
sensitive, medical-adjacent data: the protected designation and note are stripped from the API response for
anyone who isn't the staff member themselves or a holder of VIEW_PROTECTED_LEAVE at that facility — the client is
never trusted to hide them. ShiftPilot tracks designations; it does not determine FMLA/ADA eligibility, which is
an HR/legal call.
Supervisor of record
Every staff member can have a supervisor (set on their profile, /staff/[id]). The supervisor is the person
who approves their leave and the one notified about their leave, swaps, and schedule changes. A profile
shows "Reports to …", and the seed builds a manager → charge → clinical chain to demonstrate it.
Approval authority is deliberately "sole-approver, safely" — leave is never stranded:
- The supervisor chain approves (the direct supervisor, or anyone above them).
- Admin break-glass — an administrator with access to the facility can always approve, covering an absent, inactive, or unset supervisor.
- No supervisor set falls back to the previous rule: any scheduler at that facility.
A person can never approve their own leave, regardless of role. An unrelated scheduler can no longer approve leave for someone who does have a supervisor — that was the point of the feature.
Per-role leave limits
Under Leave Rules (/org/leave-rules, gated by MANAGE_LEAVE_RULES) you can cap how many people of a role can
be off at once. A leave limit applies to a role at a facility (optionally one department) and sets an absolute
cap (max concurrently off) and/or a percentage of headcount, optionally counting only certain leave types.
When someone submits time off, ShiftPilot checks two triggers on every requested day:
- the per-role cap — would this push the role over its limit?
- coverage impact — would it drop a covered station below the
minimumCountin its staffing model?
If either fires, the request is not denied — it's created but held PENDING and flagged "Over capacity."
It can then only be approved by someone who both has approval authority and holds the OVERRIDE_LEAVE_LIMITS
capability; the approver's list shows a red badge and the reason, and approving prompts for an override reason that
is audited (TIME_OFF_LIMIT_OVERRIDDEN). A supervisor is typically granted OVERRIDE_LEAVE_LIMITS per-facility
from Access & Scopes; admins hold it by default.
Approvers can also edit the requested hours on a pending request (the auto-computed hours are an estimate from shift lengths) before approving.
Seasonal blackouts
Also under Leave Rules, a blackout blocks discretionary leave for covered roles during a window ("Summer census surge", "Year-end close") — facility-wide or per-department, for specific roles or all.
- Submitting normal leave inside a blackout is rejected with the blackout's reason.
- The staff member can still submit if they flag it FMLA, ADA, or an emergency — this creates a PENDING request
held against the blackout for a supervisor override (the same
OVERRIDE_LEAVE_LIMITSgate as a limit breach), audited asTIME_OFF_BLACKOUT_EXCEPTION_APPROVED. A blackout can also disallow exceptions entirely.
The self-declared exception reason is kept separate from the formal FMLA/ADA protected designation above: the exception is a request reason the approver sees; the protected designation remains a privileged HR action.