Scheduling
Most ambulatory schedulers treat the day as a provider calendar grid — fifteen-minute
boxes, double-booking by accident, no idea that the noon physical needs a special
blood-draw chair. REV.health treats the practice as a graph of
resources — clinicians, rooms, MAs, equipment, telehealth bridges — and
visit types as multi-stage routes through that graph. A constraint solver places
appointments at minute resolution, surfaces feasible alternatives
when the requested slot is infeasible, and re-optimizes in real time when visits run
long. Pajama time shrinks because the day stays on schedule; patient wait time
shrinks because rooming starts the moment the room is free.
The front desk, the clinical team, and the patient see one consistent
plan from booking through checkout. Eligibility checks fire automatically
at booking; reminder ladders keep no-shows low; walk-ins are absorbed without
breaking the day.
Key Capabilities
Resource-Graph Minute-Level Booking
The solver evaluates provider availability, exam-room availability, MA capacity,
and equipment dependencies (BP machine, otoscope, ECG) at minute resolution. It
returns the three best feasible windows and explains why other windows were
rejected — room conflict, MA overload, lunch block. The agent picks 2:14 pm; the
visit is booked across all needed resources atomically.
Each visit type is a multi-stage route through the resource graph. The solver
holds every named resource for exactly the minutes it is needed —
no double-booked rooms, no MA pulled mid-rooming, no provider waiting on a
phlebotomy chair. Switch encounter types to see how the resource footprint
changes minute by minute.
Every resource the visit touches — and how each tier handles it
| Resource / behavior |
Paper / phone |
Generic calendar (Google, Outlook) |
Typical EHR scheduler |
REV.health resource-graph |
| Providers (MD, DO, PA, NP) |
One grid per provider |
One calendar per provider |
15-min provider slots |
Minute-level availability with lunch, admin, and co-sign blocks modeled explicitly |
| Medical assistants |
"Whoever's free" |
Not tracked |
Implicit; not bookable |
First-class resource — required for rooming stage, released after |
| Registered nurses |
Pulled mid-visit |
Not tracked |
Sometimes a side calendar |
Bookable for triage, injections, follow-up; capacity enforced |
| Front-desk staff |
One person, always |
Not tracked |
Not tracked |
Required for check-in / checkout stages; concurrent capacity enforced |
| Exam rooms |
Sticky notes on doors |
Manual room calendar |
Provider's "room" — single assumption |
Distinct resource per room; held atomically across rooming → provider stages |
| Procedure / blood-draw chairs |
"Hope it's open" |
Not tracked |
Not tracked |
Bookable equipment resource with its own availability |
| Shared equipment (ECG, ultrasound, derm scope) |
Walk and look |
Not tracked |
Not tracked |
Per-visit-type dependencies declared and solver-enforced |
| Telehealth bridges |
— |
Generic video link |
Separate vendor tab |
Bridge concurrency is a resource — visits cannot exceed licensed seats |
| Waiting-room capacity |
Lobby overflow |
Not tracked |
Not tracked |
Soft constraint on concurrent waiting patients |
| Slot granularity |
15 min |
15 / 30 min |
10–15 min |
1 minute |
| Visit multi-stage routing |
Mental model |
None |
One block per visit |
Check-in → rooming → provider → nurse → checkout, each stage with its own resources and durations |
| Re-optimization when a visit runs long |
Cascade chaos |
None |
Manual reshuffling |
Solver re-runs in real time; downstream slots are nudged automatically |
| Walk-in absorption |
Squeeze in |
None |
Manual |
Auto-search for the smallest insertable window that respects committed wait-time SLAs |
| Cancellation / no-show recovery |
Phone tree |
None |
Manual waitlist |
Waitlist auto-fill with 5-minute SMS offer; eligibility re-runs on accept |
| Encounter chains (recurring care) |
Sticky notes |
None |
None |
Multi-step chains with interval rules; next slot auto-suggested at a resource-feasible time |
Visit-Type Stages with Named Resources
"Established Adult Office Visit" is defined as: Check-in (3 min, FrontDesk) →
Waiting (0–5 min, WaitingRoom) → Rooming/Vitals (7 min, MA + ExamRoom) →
Provider Eval (18 min, Provider + ExamRoom) → Nurse Follow-up (5 min, RN) →
Checkout (4 min, FrontDesk). Stages are first-class objects; the same exam room
is held across rooming + provider stages; the MA is released after rooming.
Practices configure their own stage compositions.
Self-Scheduling via Patient Portal
An established patient opens the
Patient Portal, picks
"Annual Physical with Dr. Lee," and sees the next ten resource-feasible
openings filtered by network and self-scheduling policy. They book; an
eligibility check fires automatically, a
confirmation goes out by SMS (TCPA-compliant opt-in), and a Good Faith
Estimate appears if the patient is self-pay.
See the spec & demo:
Patient Portal module ·
Patient demo dashboard ·
Self-scheduling demo flow
Walk-In Absorption Without Breaking the Day
A walk-in with acute symptoms enters a triage priority and complaint type. The
scheduler searches the next 90 minutes for the smallest insertable window that
does not push any booked patient past the committed wait-time SLA. If a slot is
found, the walk-in is booked; if not, the system offers a same-day telehealth
slot or next-morning option.
No-Show Recovery with Waitlist Auto-Fill
A 9:00 am no-show is auto-detected at the 10-minute mark. The slot is released,
and the waitlist is queried for matching patients (same provider, similar visit
type, opted-in to short-notice). The top match receives a 5-minute SMS offer. If
accepted, the slot is rebooked and eligibility runs automatically.
Multi-Provider Day View
A live status board shows who is roomed, who is waiting, and who is over
scheduled time — updated within 2 seconds of any stage transition. Display-mode
supports back-office wall screens so the whole team stays coordinated.
Encounter Chains
An encounter chain is a sequence of related appointments that
must occur in a defined order — for example, new-patient intake → follow-up
in 2 weeks → annual physical in 6 months. Each chain carries chain
rules: minimum and maximum intervals between steps, required ordering,
and recurrence patterns (e.g., quarterly A1c checks for diabetics). When a
visit in the chain completes, the scheduler auto-suggests the next
appointment in the sequence at a resource-feasible time that respects
the interval constraint. The patient and provider see the full chain timeline
— not just the next slot — so care gaps are visible before they happen.
Chains are configured per VisitType in the stage composer. A practice can define
a "New Patient Comprehensive" chain as: Step 1 — 45-min intake, Step 2 —
20-min follow-up within 14 days, Step 3 — 30-min annual wellness within 6
months. The solver respects chain rules alongside resource constraints, so the
suggested follow-up is both clinically appropriate and operationally feasible.
Phase 2 — Encounter chains ship in Phase 2 alongside the
resource-graph constraint solver. Phase 1 supports manual follow-up scheduling
without chain enforcement.
Resource Day View
A minute-resolution grid showing every provider, room, and MA
across the day — the visual surface behind the solver's placement decisions.
Each row is a resource; each column is a time increment (configurable from 1 to
15 minutes). Booked stages render as colored blocks labeled by patient and
VisitType; gaps render as open windows. The grid shows the practice's day as a
graph of resources, not a provider calendar — so the front
desk can see that Room 3 is empty while Dr. M is between patients, and the MA
is free to room the next visit.
Resources are graphed and optimized: the solver places each
encounter chain on the grid to minimize provider idle time and room turnover
gaps. The result is a packed day where the provider walks into a roomed patient
every time. Staff can drag-and-drop reschedule within the day
view — moving a block from 10:20 to 10:40, for example — and the solver
re-validates resource conflicts in real time. If the move would double-book a
room or overload an MA, the drop is rejected with an explanation; if an
adjacent block shifts to accommodate, the cascade is shown before confirmation.
Phase 2 — The resource day view ships in Phase 2 alongside the
constraint solver. Phase 1 provides a flat provider calendar view without
minute-level resource graphing.
Technical Highlights
Seven noun-apps compose the scheduling surface on the IC platform: Schedule, Slot,
Appointment, Resource, VisitType, VisitStage, and WaitlistEntry. Every entity is
org-scoped, carrying OrganizationID as the Cosmos
partition key and the full four-field audit trail. The patient referenced by an
Appointment is a global entity; the Appointment row is the practice's record of "we
agreed to see this patient at this time."
Data Model
- Schedule — a practice-and-provider-scoped calendar surface.
One provider may have multiple Schedules (in-person + telehealth). Modeled on
FHIR R4 Schedule.
- Slot — a bookable interval on a Schedule for a particular
VisitType. Status lifecycle: Free → Held → Busy → Cancelled. Mirrors FHIR R4
Slot.
- Appointment — the committed booking. References exactly one
Slot. Carries patient identity, eligibility cross-reference, reminder ladder
state, and check-in / no-show timestamps. Mirrors FHIR R4 Appointment.
- Resource — a first-class schedulable entity: provider, MA/RN,
exam room, equipment, front-desk agent, or telehealth bridge. Carries capability
tags consumed by the constraint solver.
- VisitType — a practice-defined visit category that composes
one or more VisitStages in a fixed order. Drives slot generation via templates.
- VisitStage — an ordered step inside a VisitType, consuming
one or more named resources for a fixed duration. Drives the live status board and
the rooming queue.
- WaitlistEntry — a patient's standing offer to take an earlier
slot, matched to cancellations and no-shows by visit type, provider, and time
window.
API Surface
FHIR R4 Schedule, Slot, and Appointment resources are exposed at the platform's
standard FHIR API surface, conformant to US Core 7.0.0+. Provider schedules emit
a read-only iCal feed signed with a tenant key. Internally, the constraint solver
is a Google OR-Tools / Timeflow kernel wrapped in a domain-specific search strategy
that prefers minimum makespan and minimum patient wait.