Operations demo

Clinical Coverage Planner

A weekly staffing board for a network of clinics plus 24/7 telemedicine. You build the schedule; it shows where coverage is short, where it's wasted, what the week costs, and which assignments break the rules. Built by directing an AI assistant in plain English — one of a few small tools at nateeisenstein.com.

Sandbox. Fictional staff and a fictional week. Click any cell to assign or move people; your changes live only in this browser tab and reset when you close it.

This week

Daily digest

The morning summary for a single day — coverage gaps, rule flags, who's on, and the day's cost — the kind of thing you'd send the clinic leads. Pick a day; click a gap or flag to jump to that shift in the grid below.

Coverage grid

The whole week. Each cell is one shift: nurses / needed · MAs / needed. Red = short, green = covered, amber = over. Click to open the shift.

Issues

Pay & cost

Nurses earn more than MAs; onsite nurses earn more than telemedicine nurses; within telemedicine the overnight shift pays the most; MAs in larger markets earn a bit more; and weekend hours carry a premium for everyone. Every rate is editable — the schedule cost updates as you change them.

Roster

Staff by home location. Each row is one person's week — hours against their max, weekly pay, shifts, and weekend days. Click a location to open its team; people over their max are flagged.

Reset

Auto-fill is a quick greedy pass — it respects the hard rules (role, remote-eligibility, no double-booking, max hours, rest) and spreads hours out, but it won't find the optimal schedule. A real version would hand that to a solver (see below).

How I'd build the full version This demo is the manage-and-validate core. Here's the rest — the optimizer, the data it would pull from, and how it scales to 30 sites.

Auto-generation — a real optimizer

Scheduling to a hard minimum across 30 sites, two roles, 24/7 remote coverage, and fairness is a constraint-optimization problem. I'd model it as one: decision variables for "worker w on shift s", hard constraints (coverage floors, one place at a time, max hours, min rest, credentials, approved time off), and an objective that minimizes uncovered slots first, then overtime, then unevenness in nights and weekends. Solve with OR-Tools CP-SAT or a commercial solver; re-solve nightly and on demand.

Where the data comes from

  • People & credentials — the HRIS (Workday, UKG) or an identity system: role, licenses and their expiry, home site, FTE.
  • Availability & time off — the PTO / leave system, plus a self-service "can't work" calendar for staff.
  • Demand — clinic hours and the coverage floor per site; for telemedicine, historical visit volume by hour to set the day/evening/overnight targets instead of guessing.
  • Actuals — the timeclock (who actually worked), to close the loop on overtime and no-shows.

Pay & cost

The rate card in the tool is a stand-in. Real rates come from the HRIS comp bands — and for nurses often a union contract: a base rate by role and step, a market adjustment by location, and shift differentials for evening, night, and weekend hours. This demo models the differentials the schedule actually turns on (onsite vs. telemedicine, telemedicine day / swing / night, a geographic step for MAs in higher-cost markets, and a weekend premium) and treats overtime as a flat 1.5× on hours over each person's weekly max. A real payroll engine also handles daily overtime, doubletime, on-call, and holiday rules. Showing cost next to coverage is what catches the expensive fix — closing a gap with overtime or a premium night shift — while it can still be changed.

The daily digest

The digest here is generated on demand. In the real thing a scheduled job builds it for each site every morning and delivers it where the leads already are — Slack, Teams, or email — with the gap and flag links pointing back at the live schedule. The same builder feeds an end-of-day version (what actually happened vs. what was planned) and an alert that fires the moment a shift drops below its floor, rather than waiting for the morning.

Scaling to 30 sites

The grid collapses to a per-region roll-up (covered / short / over) with drill-down to a site. Sites are mostly independent, so the solver partitions by region and only the shared telemedicine nurse pool couples them — which keeps it fast.

Why this demo is client-side

Single file, nothing to run, no login. The coverage math and rule checks are exactly what the real service would enforce — only the data source and the optimizer change.