STATvault Request a demoDemo

Coverage Calendar

Coverage Calendar: how it works in StatVault.

What this page is for

The Coverage Calendar is where you plan and track who is working which shift, who's out, and who's on call. It shows shifts, time off, route coverage, and on-call assignments together so you can spot gaps before they become missed routes.
For CXT-connected orgs, coverage tickets feed rows here too, and pushed edits carry a CXT chip.Names on tickets are matched to the driver's nickname first (set it in the driver's profile, e.g. "Joe" for Joseph Kilgore), then the full name, first or last name, or its start ("Rich" for Richard). If a name still doesn't match, or two drivers could fit ("Sam"), an RTC waits as Needs driver with the name kept. A Need to Cover isn't recorded at all until the name matches. A new nickname applies at the next re-sync.
A Need to Cover whose plan lists who takes each part of the day ("Mon - 7am-12pm = Poul, Mon - 12pm-3pm = ") counts as covered only when every part has a name. Until then the Billboard lists the open slots ("Joseph out Thu - uncovered: 12p-3p").

The layout

At the top: a legend (Driver Out, Coverage Assigned, On Call), layer toggles to show or hide Time off, Route coverage, On-call, Shifts, and Routes, and a Time-Off Requests panel you can expand or collapse.
Below that is calendar navigation: the ‹/› arrows, a Today button, and a view switcher with four modes - Month, Week, Board, and Day. Board's span selector picks 2 days Saturday-Sunday, 7 days Monday-Sunday, or Roster (Mon–Fri) - see below. Dispatchers also see a Templates button for building recurring shift patterns.
Times follow your clock setting: 24-hour or 12-hour, set on your Account page.
The Coverage Calendar in Month view, with the legend, layer toggles, and Time-Off Requests panel
Clicking a shift or day opens a popover or detail modal with the shift's state and actions. In Board view, dispatchers can drag one shift pill onto another to swap the two assignments, and can type a day note into a text box on the board (a plain-text log for that day; other roles see it read-only).
A shift/route popover also lists the driver's planned work for that day - each route, standing order, or float slot, in time order, with a "→ driver name" chip on any item someone else picked up. Its Roster day button jumps to the full plan-vs-actual drawer (see Roster) for that driver and date. An out driver's popover lists the same plan under Needs covering, flagging each item that still has nobody named.
A day popover open, listing that day's shifts

Common tasks

  1. Switch views. Click Month, Week, Board, or Day. The ‹/› buttons and the ←/→ arrow keys step by one month in Month view, one week in Week and Board, and one day in Day.
Week view
  1. Jump back to today. Click the Today button.
  2. Show or hide a layer. Uncheck any layer toggle - your choice is remembered.
  3. Assign a driver to a shift. Open the shift's popover and pick a driver. The shift moves to "Needs confirm" until it's confirmed.
  4. Confirm a shift. Open the shift popover and click Confirm. A driver must be assigned first.
  5. Reassign, unassign, or cancel a shift. Open the shift popover: pick a different driver to reassign, use "Needs driver" to unassign, or Cancel shift. Cancelling needs a typed reason.
  6. Swap two shifts quickly. In Board view, drag one shift pill onto another.
Board view, with per-hub day columns and shift pills
  1. Add a quick shift. In Board view, click the + next to a hub's name in a day column, fill in the details, and Create.
  2. Leave a note on a shift. Type in the shift popover's notes field; it saves when you click away.
  3. Leave a note for the day. In Board view, type into that day's note box; it saves when you click away.
  4. Flag a route that needs coverage. Click Flag for coverage on the route's row. You can add a note explaining why.
  5. Review time-off requests. Open the Time-Off Requests panel and click Approve or Deny on each pending request (dispatcher and up). Deny asks for a reason, which goes to the driver. Either decision reaches the driver as a push and is also kept as a durable item for their in-app inbox, so a missed push (or a phone that can't receive one) doesn't lose the answer. The driver app's inbox screen has not shipped yet, so for now the push is what the driver sees.
- Approve time off (+ push NTC). Approve opens a dialog with an optional note for the driver and, for CXT-connected orgs with the bridge in "both" mode, an Also push NTC to CXT checkbox, ticked by default. Approving always records the driver as out and notifies them. With the box ticked, one Need-to-Cover ticket for all the request's dates is created in CXT right then and the out rows get the CXT chip. Untick it to record the out here only and push it later from the calendar. If a push is refused, the approval still stands and the dialog tells you which rows to push from the calendar. A push is also refused until a super admin sets the coverage-ticket account and origin under Admin › Organizations › CXT connection. A ✅ reaction in Slack approves the same way and pushes the NTC too.
  1. Build a recurring shift pattern. Click Templates, then "+ New template" or an existing row to edit Name, Hub, Days, Start, End, Default driver, Sort, and Notes, and toggle it Active. There's no delete - turn a template off with the Active toggle instead.
  2. Cover an out driver. In Board view, an out driver's pill has a Cover button that opens the Add-shift form pre-filled for that driver's date and window. Add the legs (one per line: time, stops, and who's covering), a pay disposition, and an optional amount, then Create. The new coverage row shows on that day as "Needs driver" until someone's assigned.
  3. Log a driver out. Approving a time-off request creates the out row. There's no separate "log an out" button.
  4. Push a coverage row to CXT. (CXT-connected orgs with the bridge in "both" mode; dispatcher and up.) Open an out or coverage row - the day popover in Board view or the detail card in Month view - and click Push to CXT. A preview shows exactly what CXT will receive: the ticket number (or "NEW ticket"), the operations (new NTC/RTC ticket, assign driver, confirm, unconfirm, edit header/comments, cancel ticket), and the header, comments, special instructions, driver number and state. Nothing reaches CXT until you click Confirm push.
- If the ticket changed in CXT since this row last synced, the preview says CXT has newer edits and shows a "CXT now / StatVault" diff with differing fields highlighted. The button reads Overwrite in CXT and stays disabled until you tick the acknowledgement.
- If someone else edited the row meanwhile, the push is refused and a fresh preview is shown. Confirm again.
- Every push is written to the shift audit log and to the ticket's order timeline as "pushed from StatVault by <you>".
- A multi-date out (a time-off request) is one ticket: pushing any of its days pushes them all.
The shift-template admin modal, listing existing templates

Day view

Day view is the drill-down for one date: one row per driver, grouped by hub, with a time axis across the top. Each rostered driver's bar runs from their shift's start to end, colored like a shift pill. A solid red band means the driver is logged out. A driver with real work but no shift gets a dashed "unplanned" marker; open it to see the work.
Along the bar, a square tick is a planned route leg, a dot a standing order, a diamond a float slot, colored by status like the Roster day drawer. A hollow circle is extra work the driver picked up. A thin red line is "now" (today only).
Click a bar, tick, or lane to open the Roster day drawer (see Roster). Clicking a tick scrolls to that item.

Roster (weekdays)

In Board view, pick Roster (Mon–Fri) from the span selector for a weekday roster: one row per driver, one column per weekday, grouped under a header band per hub (e.g. STAMFORD · 4 drivers; drivers with no hub sort last as "General"). A normal day has no fill, an OUT day is tinted red and a LEFT day teal, and a day with no shift reads "off". The grid is built from who actually ran the work (see "How the roster knows who ran it"), so it tells you what happened, not just whether it matched the plan.
On a phone the roster shows one day at a time; tap Mon - Fri to switch days.
Each driver row has their name, a #123 link to their driver page (with a CXT driver number), and a one-line story of their week: "Out Mon–Tue · Rich, Poul ran it", "Filled in for Ken", or "Ran their own work all week".
Each filled cell shows: - Coral 1 stop never closed · <stop> · <time> - a route stop nobody was assigned, never completed.
- Coral N stops not closed · <route> · <name> - a route stop assigned to that driver but never completed by the end of the day. It's a custody gap and counts the same as "never closed" in the day header.
- Neutral gray not run · still pending (due <Dow>) · <lane> - an order with no driver whose due day is today or has passed. It counts toward the day header.
- Neutral gray rolled to <Dow> · <lane> - an order with no driver whose due day is still ahead. This is expected, not a gap, and doesn't count in the day header. Once its due day passes and it still hasn't run, it reads "not run" and also shows under that due day's own column.
An empty cell shows a + for dispatchers - clicking it creates a plain shift for that driver on that date, using their shift template's usual window, or 8:00am–6:00pm if they have none.
A day header shows that day's totals ("2 out · 1 left early · 1 stop never closed · 2 not closed"), or nothing dropped. Each count is clickable and lists who or which stops. Gaps are only checked once a day is over, so today reads day in progress and later days upcoming. If the read fails, it says gaps unavailable.
Below the rostered drivers, more groups appear when they have anything to show:A Hand-offs only toggle above the grid hides every row with a routine week so busy weeks don't bury the drivers who need attention. It's remembered per browser.
The day drawer is that day's manifest. Click any filled cell to open it. From the top: - On a day that's over, dispatchers can act on each card: Approve $X takes the suggestion, Edit… / Set pay… sets any amount ($0–5000), and Clear removes an approved line. Approving is StatVault's own audited record: it keeps every earlier amount and is not sent to CXT. Open days (today, the future) can't be approved.
- Orders today is the driver's own day pay, coverage or not: every order they ran with its pay line, the total, how many are verified for billing (✓), and any order with no pay line. Routes are paid weekly, so their stops don't appear. Route pay this week lists the driver's weekly route-pay (RP) lines for context.Hospital colors. Each hub band and route code is tinted by its hospital system, using the org's palette (Admin → Organizations → Systems). A new customer picks up its color on its own.
In the Plan section, every planned item is listed in order with its kind (route/standing/float), label, expected time, and one of these statuses:A matched or drifted item links to the real order or route it matched. Confirm shift is the same action as the board popover.
Move work. With the day drawer open, dispatchers can drag a planned item onto a driver's cell for the same weekday only. This moves the plan slot (creating a plain shift if needed, or a covering plan if the target is out). It changes the plan only - it never touches a real order or pushes to CXT.
Apply plan. Enabled once the day has a Drifted item. It lists each real order and who it went to vs. who the plan named, with Apply per row (plus Apply all). Applying is the same reassignment as the dispatch board's driver-assign, including the push to CXT. Route items get no Apply button - reassign those on the board.
Suggestions. Also from the drawer (and from Prefill from history on the template editor's Default-driver field), Suggestions mines that driver's order/route history into a proposed weekday bundle: for each weekday with enough history, an editable window and hub plus a checked-by-default list of the lanes/routes seen. Nothing is written until you tick what you want and click Accept selected - that's the only step that creates or updates shift templates and standing orders. A lane already on that driver's template for that weekday shows greyed-out and unticked ("already on the template"). Zippy can read the same roster, so "who's on today and is anything uncovered?" answers from this plan.
A Lost lanes note names a lane this driver used to run that has recently gone to someone else. It's an observation only; nothing is reassigned. A lane new to this driver is tagged new to this driver.
Pre-Scheduled vs On Demand. Every standing-order row, Extra, and Suggestions lane carries a chip for where the ticket comes from. Pre-Sched means a scheduler places it (CXT's recurring Scheduler or StatVault's own generator). On Demand means it was called in (portal, phone, API, or a dispatcher). A lane with no history shows no chip. Pre-Scheduled lanes are proposed by Suggestions sooner, and an Extra a scheduler placed that no standing order expects gets an amber edge and a no standing order chip. A scheduler will keep placing it, so accept it via Suggestions.
CXT pre-schedule chip. A row whose ticket was posted by a CXT pre-schedule shows CXT #123456 · Mon–Fri (the pre-schedule number and the days it posts), and says so if it's no longer active in CXT.
Click any row for its story. A planned row or Extra expands in place: the full origin → destination, the expected time, and a status story. Matched names the order and its times. Drifted names who ran it vs. who the plan named. Missing gives how long it's gone unseen, with Retire. Pending and Uncovered say what's still owed. An Extra nudges you to accept it via Suggestions if it keeps happening.
Retire a standing order. A Missing item unseen for several scheduled days carries a "not seen N days · retire?" chip. For a standing order, dispatchers get a Retire button that stops it generating future roster items (same as turning a template's Active toggle off) and never touches a real order. A route item shows the chip with no button.
How the roster knows who ran it. The roster compares what actually happened with the same weekday in past weeks.Zippy's roster answers ("who covered Ken on Monday?") come from the same read.

Things that confuse people

Related