Medrota
Automates an emergency department's monthly duty rota — structured requests in, a rules-checked draft schedule out, round-tripping the department's existing Excel sheet cell-for-cell.
- Seconds, not days
- for a full month's first draft
- Cell-for-cell
- round-trips the department's own sheet
- Locked, not lost
- manual edits survive every regeneration
The problem
A monthly emergency-department duty rota is normally weeks of free-text requests, a rulebook held in one scheduler's head, and a spreadsheet rebuilt by hand under deadline pressure. Medrota, part of the Docuity suite, puts that process on rails without asking the department to leave its spreadsheet behind.
What it does
Doctors submit structured requests — a day off, an easier run of mornings or evenings, specific dates on nights, or a weekend off — for any of the next three months, instead of texting or emailing the scheduler. A rules engine that encodes the department's own real construction checklist then drafts the whole month in seconds: on-call rotation, night groups, weekend and holiday cover, and a plain reason for every request it could and couldn't honor.
The scheduler reviews and edits the draft on a grid built to look like the spreadsheet they already use — same layout, same colour meanings — and any manual change or claimed shift stays locked in place even if the month is regenerated. The finished rota exports back into that exact workbook, formatted the way the department already reads it.
Once published, the month runs live: doctors can trade shifts with each other (subject to the other doctor and the scheduler both agreeing), claim open extra-pay sessions on a first-come basis, and report an absence or request leave without a phone call. It shares its sign-in with the rest of the Docuity suite, and a doctor can check their shifts or claim an open session straight from Docuity Chat.
Key features
Structured requests instead of a text thread
A day off, an easier stretch of mornings or evenings, specific nights, or a weekend off — submitted properly, so nothing gets lost in a chat scrollback.
A month drafted in seconds, not days
The rules the department already schedules by are built into the generator, so the first draft of a month that used to take days of manual work is ready in seconds.
The same grid, the same colours, no retraining
The review screen matches the spreadsheet the department already reads at a glance, so nobody has to learn a new layout just to check a month over.
Manual fixes survive a regeneration
Once a scheduler locks in a manual change or a doctor's claimed shift, regenerating the month never quietly undoes it.
Trades and open shifts, worked out in the app
Doctors swap shifts or pick up an open extra-pay session themselves, with the scheduler's sign-off built into the flow, instead of arranging it over text and hoping it makes the spreadsheet.
Your existing spreadsheet stays the format of record
Import the department's own workbook to get started, and export the finished month back into that same layout, so nobody downstream has to change how they read it.
Where it stands
Built first around one emergency department's real construction rules and its actual workbook — the demo data is that department's real rota, so it's never shown publicly. In this version, each account belongs to one department's schedule at a time.
Under the hood — for the technically-minded
How it's built
The generator works in passes rather than one big calculation: it lays down the fixed weekly skeleton and the senior on-call and night rotations first, fills the rest of the month against each doctor's leave, capability and stated preferences, then checks the whole draft for anything that still breaks a rule. It's deterministic — the same inputs produce the same draft — so a scheduler can regenerate with confidence instead of getting a different answer each time.
Fairness is tracked with running tallies that carry from month to month, so the generator weighs who's owed an easier stretch next time rather than treating every month in isolation. Anything a scheduler has manually locked, or a doctor has claimed or traded, is reapplied as a fixed point before the next regeneration, so a human decision is never silently overwritten.
Import and export share the department's real workbook layout — the same column blocks, merged headers and cell colours, down to the shorthand the department already uses for shift labels. Import fuzzy-matches names so small spelling differences in an old sheet don't break the match, and nothing commits until the scheduler confirms what it parsed.
The hard problems
A rota round-trip that's faithful without being a raw file copy
What comes back out matches the department's workbook in layout, colour and shift notation, cell for cell — but the tallies and totals are computed by the app itself and written back as plain values, not as the spreadsheet's original formulas. It's a faithful reproduction of what the department reads, not a literal copy of the file's internals.
Fair, not just full
The generator scores candidates against running equity tallies as well as hard rules, so it's weighing who's owed an easier month, not only who's legally allowed to take the slot. Requests are honored where they can be, and every one — granted or not — comes back with a plain reason why.
Chat actions run as the real doctor, not a shared login
A shift claim or leave request made from Docuity Chat runs through the same functions, audit trail and approval rules as the in-app version, tied to the actual doctor's own account rather than a generic bot identity — so nothing reaches the rota through a side door the interface doesn't also enforce.
Built with
- Remix
- Drizzle
- Postgres
- exceljs
- Passkeys
Building something in this space?
Work with us →