Amion Export

Downloads that month's duty grid (Team A/B/C, PM Consults, Echo, Nuclear, Overnight, Interventional, STEMI) straight from data.js, ready to select and paste into Amion's own grid UI — the same output as running python3 export_amion_grid.py --month YYYY-MM, without needing a terminal.

Export

Bundles every row generated so far in this browser (across every Day Roster you've applied, whether or not it's currently hidden by the filter above) into one file with the same 11 columns as the live spreadsheet's CURRENT tab. Open it and copy the rows into the real file, or paste them in directly.

How this works

Only shows issues within the Range above, which defaults to the day data.js was last generated through 3 months later — anything before that generation date is already in the past and can't be fixed anymore. Adjust the dates and click "Update range" to see further out (or narrow it down), or use the "3 months"/"6 months" shortcuts to jump straight to that window starting from today; the range resets to the 3-month default on a fresh page load, same as the Call Planner's own Range control.

Decisions here are saved in this browser only (not synced anywhere, so a different browser or device starts with none) so an item you've already triaged doesn't keep nagging you before you've had a chance to actually make the change — once you re-run the refresh pipeline with the real fix in place, the underlying discrepancy disappears from data.js on its own. If the same discrepancy's values change before then, its saved decision is discarded automatically and it reappears as pending. "Clear all decisions" in the Export card below wipes every saved decision on this page at once (with a confirmation first) if you want to start over from scratch.

Each specific issue (a mismatch, an uncovered role, a role conflict) is acknowledgment-only now — "Spreadsheet is correct", "Mark reviewed", "Dismiss", or (for a role conflict) recording who keeps it via the chips shown. None of these generate a spreadsheet row directly anymore; that's what the Day Roster below them is for.

Day Roster: one per date with any issue, listing all six tracked roles (Team A/B/C, Nuclear, PM Consults, Echo) with who's actually assigned to each right now — or, for whichever role is the actual problem, the same suggested substitute the issue's own text already showed. Edit any field(s) that need to change (type initials directly, comma-separate more than one, or click a provider chip to toggle them in/out — vacationing providers are left out of the chips entirely, anyone already busy elsewhere that day is flagged but still clickable; MH and TP never appear as Nuclear chips at all, since they never cover it). Click "Generate row(s) for changes" once: only the roles you actually edited produce a row, grouped one row per provider (matching how the real sheet represents a person's same-day duties). A provider removed from a role with no replacement doesn't get a row (the spreadsheet's change-log format can't "remove" anything) — that becomes a plain reminder note instead, same as echo (no spreadsheet column exists for it at all). "Reset" reverts every field in that roster back to what it showed originally, in case you want to bail out of an in-progress edit.

Vacation issues flag a real, multi-day Google Calendar absence that isn't yet reflected as an "off" row in the spreadsheet — "Generate row" produces one row spanning the block's Start and End Date with "No office, no echos" in Schedule Adjustment, no per-role editing needed. These render in their own group below the day's role rows, since a standing multi-day absence isn't really a same-day coverage concern the way the six tracked roles are. A single day off is only flagged this way for an inferred post-call Friday — any other single day off stays out of scope. A post-call Friday renders right alongside the six role rows instead (not in the Vacation group), with an info line, a "No echos" checkbox (checked by default), and a "Dismiss" button. Clicking "Generate row(s) for changes" for that date folds in a row for it too ("Post-call, no office, no echos", or "Post-call, no office" if "No echos" is unchecked), alongside whatever else changed that day — there's no separate Generate row just for this. "Dismiss" is for the weeks the post-call pattern just doesn't apply (the provider is actually working that Friday): it drops the row out of "Generate row(s) for changes" entirely and frees that provider back into the normal coverage pool for that date, so they show up as a pickable chip for Team A/B/C, NUCS, and Office at Via Delray again instead of being excluded as "vacationing." A dismissed post-call item's "Dismissed... Undo" always stays right there on its own date's card — unlike every other issue kind on this page, it doesn't need the "Show resolved" box checked to find it again, since undoing it has a real effect (freeing the provider) worth keeping easy to reach. The "Full day detail" panel's own Vacation row tags each name "— vacation" or "— post-call" so it's clear which kind of absence it is.

The Export card always shows a live preview of every row currently queued for the CSV, updating the moment you generate or undo one — no need to actually download to see what's queued.

No Nucs: check this next to the Nuclear row instead of naming a provider when the day intentionally has no nuclear stress testing coverage at all — disables that row's input/chips and generates a row with "no nucs" in Schedule Adjustment (the same sentinel parse_spreadsheet.py already recognizes, so it won't keep showing up as uncovered once entered).

Click "Full day detail" on any card for the complete day-inspector-equivalent picture of that date, including every suggestion index.html itself would show.

Generated rows are tab-separated so pasting into the first cell of a new row on the CURRENT tab spreads correctly across all 11 columns (same column order as write_coverage_assignments.py's preview output). "Download XLSX" bundles the same rows into a real spreadsheet file instead, if you'd rather open it directly than paste tab-separated text.

The Amion Export card is a live, in-browser version of export_amion_grid.py — pick a month and download the same duty grid as an XLSX file, ready to select and paste into Amion's own grid UI. Always reflects the current data.js, same as the rest of this page.

Each date card's "Full day detail" panel also carries a live Nuclear Days Tally line: each provider's confirmed total as of the last data refresh, plus a "(+N)" hint for any NUCS picks you've made in the Day Roster this session (whether already generated or still being edited) that a fresh data.js hasn't caught up to yet.