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.
- A Need to Cover ticket records the driver as out.
- An RTC ticket ("RTC Aby = Mike") records who covers. Legs that name nobody belong to the coverer in the header.
- A full-day RTC also records the covered driver as out, so the Billboard reads "out - covered". One coverer who has the driver's whole day also covers each planned route and stop that has no coverer of its own. Coverage for part of the day doesn't, so those items still show as uncovered.
- An RTC for part of the day ("Al = Rich 5p-7p") only records the coverage.
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
- Like every shell page, the topbar gives you Orders (O), Map (M), Notes (N), Chat (C) and Help (?) without leaving this page.
Common tasks
- 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.
- Jump back to today. Click the Today button.
- Show or hide a layer. Uncheck any layer toggle - your choice is remembered.
- 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.
- Confirm a shift. Open the shift popover and click Confirm. A driver must be assigned first.
- 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.
- Swap two shifts quickly. In Board view, drag one shift pill onto another.
- 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. - Leave a note on a shift. Type in the shift popover's notes field; it saves when you click away.
- Leave a note for the day. In Board view, type into that day's note box; it saves when you click away.
- Flag a route that needs coverage. Click Flag for coverage on the route's row. You can add a note explaining why.
- 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.
- 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.
- 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.
- Log a driver out. Approving a time-off request creates the out row. There's no separate "log an out" button.
- 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 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:
- A status badge when the day wasn't routine: red OUT (ran none of their usual work), outlined LEFT 1:50P (finished early, at that time), or amber SWAPPED (a full day of mostly other people's work). A COVERING badge marks a floater whose whole day was picking up someone else's work. A routine day shows no badge, just the driver's compressed route codes (
SH11–14) or lane labels and a stop count. - Who ran it, one row per coverer or covered-for driver: a color swatch, the name, what they ran, and the time span. A dashed swatch and for
<name>marks work picked up for someone else; +1 stop marks a one-off pickup too small to call real coverage. Someone who ran only a stop or two of this driver's work gets a plain row with no swatch. - A share bar under an out/left/swapped day showing whose work is whose, with a coral segment for anything posted with nobody on it.
- A drift line (
SH14 → Poul Krog, amber) when someone else ran one of the driver's routes or lanes on an otherwise normal day. - A times line -
conf · 1st · last(first confirmation, first pickup, last drop) - colored only when off that driver's usual: amber for late, teal for an early last drop. - Gap lines, labelled plainly:
<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:
- FLOATERS - drivers with no usual work of their own: the other side of every hand-off, so a floater who covered someone shows the same for
<name>rows as anyone else. A rostered driver never gets a second FLOATERS row. - SHARED RUNS - work with no single owner: a rotating cast of 3+ drivers where nobody runs it most of the time. Each row names the run from its own data and, when one driver runs it most days they're in, calls that out ("Freddy when in (8 of 13)") with an amber flag on a day they were in but didn't run it ("Freddy was in"). Only steady work gets a row. RUN is two or more pickups worked together; LANE is a single pickup that rotates.
- FLOATING LANES - one-off orders with no steady pattern, grouped into one row per time of day (Earlybird, Morning, Afternoon, Rush, Evening, Night) by when each was called in. Each cell lists the call-in time, where it was called from, and who ran it. Click a driver's name to open their day.
The day drawer is that day's manifest. Click any filled cell to open it. From the top:
- Header - name, date, the day's badge, the hospital system most of the work belongs to, and any RTC coverage ticket (click to open it).
- Three time tiles - confirmed, first pickup, last drop, each with that driver's usual underneath; amber = late, teal = early.
- One-sentence story - "Left at 1:40p. Poul Krog SH14 SH22–23 +2 (1:50p–6:20p) ran the rest."
- Share line - a bar plus each person's stops and pieces on this driver's usual work that day.
- The day, in stop order - every stop and order of the driver's usual work, whoever ran it, plus anything they ran for someone else. A route (or a run of three or more back-to-back orders) is one line: code, who ran it ("Edgar → Poul Krog"), stops, pieces, the time span, and "✓ all closed" or "N open". Click to see every stop (a route that changed hands opens by itself, with a marker where the other driver took over). Each stop shows its due time, P/D/E, name, who closed it, pieces (↓ 24 = pieces recorded at the drop) and when it closed. A single order is its own line with the order number (click to open it). On a LEFT day a marker shows where their last stop was and who ran everything after. A checklist stop closed without a driver tap shows no tap.
- Gaps - never closed / not closed / not run for this driver's work, or "Nothing dropped" once the day is over.
- Full manifest › - opens
/manifestfor this driver and day (the print-friendly table). - Pay (dispatchers and up; collapsed, opens by itself when something needs checking; never shown to members) - coverage pay for this day, both ways: people who covered this driver, and people this driver covered. Each card says who covered whom, what they ran, and the coverage ticket line ("$480 of $710", "$0 · ticket not priced", "no line"). Flags: No pay recorded, Planned, no pay, Not on the ticket, Not priced yet, Pending sync (a pay edit made here that CXT hasn't echoed), Possible double pay (coverage approved on top of order pay). Coverage paid another way reads as a status and is never flagged: Paid on route pay, Paid on other tickets, Ticket says no pay, Paid on the order · $X. Unpaid finished coverage shows a Suggested $ based on what the org has paid for coverage of this driver's work.
- 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.
- Plan (collapsed) - the shift window and state, every planned item with its status, Extras, and the dispatcher actions Suggestions, Apply plan and Confirm shift. The summary line reads e.g. "Needs confirm · 07:00–14:00 · 2 items". Click it to open.
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:
- Matched - a real order or route stop showed up assigned to the planned driver, on time.
- Pending - nothing due yet.
- Missing - well past the expected time with nothing to match.
- Drifted - the work happened, but a different driver ended up on it. A route the planned driver only partly ran reads Split: Ken ran 1 of 8 stops, Tarsheena the most of the rest. An end-of-route checklist stop never counts toward who ran a route.
- Uncovered - the driver is out and nobody was named to cover this item.
- Extra - work the driver did that wasn't on anyone's plan (listed below the planned items).
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.
- Who ran a route stop is whoever completed it in the driver app. Pay and coverage tickets never count as work.
- Each route, pre-schedule, standing order, or regular pickup lane belongs to the driver who usually runs it that weekday. Covering someone for a couple of weeks does not move ownership. A run that rotates through 3 or more drivers with no clear owner is a shared run.
- Each driver's day is normal, out (someone else ran almost all of their usual work), left (others ran the rest after the driver's last stop), swapped (a full day of mostly other people's work), float (no usual work of their own), or off. Someone else running a driver's work counts as covering only when the driver was out, left, or swapped; otherwise it's drift. "Filled in for" needs a route or at least 3 of their stops. An off day never lists anyone covering.
- Posted work nobody ran is split two ways once the day is over: a route stop nobody closed (a custody gap) and an order still pending with no driver (often rolled forward).
Things that confuse people
- A coverage chip always reads coverer = driver who is out (
Poul Krog = Edgar Melomeans Poul is covering Edgar), the same order the RTC ticket header uses.Needs driver = Garymeans nobody has picked up Gary's route yet. - Shift states: Needs driver (nobody assigned), Needs confirm (the plan changed to a new driver and someone needs to confirm it with them), Confirmed, and Cancelled. A driver's own regular day, created from their shift template with them as its driver, starts Confirmed. Confirm is only asked when the plan changes to a new driver: assigning a different driver, a coverage shift for an out driver, dragging a planned item onto another driver's shift, or naming a coverer for an out driver's item. Each drops a confirmed shift back to Needs confirm.
Escapecloses whichever popover or modal is open. The←/→keys step the calendar (not while typing in a field).- Week view collapses weekday roster shifts by default. A weekday shift from a template with a default driver renders as one per-hub summary pill ("WPH · 9 drivers · 1 open · 2 out"). Click the pill to jump to Day view for that date. Weekend shifts, manually-added shifts, route-flag shifts, out/coverage rows, and the on-call ribbon are never collapsed. The "Show weekday shifts as blocks" toggle above the week grid shows one block per shift; it's remembered per browser.
- On-call is tracked separately from shifts and shown read-only here (a ribbon per day). A driver can be on-call without a shift that day, and you don't set on-call from this page. Every role sees the ribbon; only dispatchers and up can change on-call shifts.
- A CXT chip on an out/coverage row means it came from (or will be pushed to) a CXT coverage ticket. Edits made here don't reach CXT until a dispatcher pushes them. A second "CXT stale" chip means CXT hasn't confirmed it has the edit yet; it clears about 30 seconds after the push, and the Board header counts those as "N un-pushed". If the chip never clears, the push didn't land - open the row and push again.
- If CXT was unreachable, a driver change is queued for retry and the confirm is held back (the toast says so). Re-push once the retry has gone through; until then a preview may say "CXT has newer edits" - that's the retry in flight.
- Push to CXT refuses (and tells you why) when the coverer has no CXT driver number, when the out/coverage subject can't be matched to a driver, or when a ticket's coverers are split between confirmed and not-confirmed. Confirm or unconfirm the siblings first, then push.
- Inbound is automatic, outbound never is: a change made in CXT lands on the calendar by itself (within about a minute), but no calendar edit, approval, Slack reaction, or Zippy action ever writes CXT without a dispatcher clicking Confirm on the preview. Zippy can show you a preview; it cannot confirm one.
- Push to CXT only appears when your org has the CXT adapter and the coverage bridge is switched to "both". Native orgs never see it.
- "Overwrite in CXT" is deliberate friction: it means someone edited the ticket in CXT after the calendar last saw it, and your push replaces their edit. Read the CXT column before you tick the box.
- If the push created a new CXT ticket but StatVault then failed to record it, the refusal names the CXT order number. Do not push again (that would create a second ticket); link or cancel that ticket in CXT.
- A Need-to-Cover ticket that names who covers which leg counts the driver as covered once every named coverer is a real driver on the roster. A leg whose coverer can't be matched shows in the popover but does not count. Ticket names are matched against the whole live roster, not just app users.
- Assigning, confirming, cancelling shifts, flagging a route, and editing day notes are dispatcher-only. A plain member can view the calendar but these controls won't appear or will be refused.
- Cancelling a shift won't go through with a blank reason. Denying a time-off request is looser: OK with an empty box still denies it with no reason recorded, so type one.
Related
- Drivers
- Routes and Route Planner
- Zippy in Slack
- open Coverage