Resolved availability for each date of from..to.
The range exceptions and days describe, inclusive local dates in timezone.
Today's local date in timezone — what "today" means on this calendar.
The physician's EFFECTIVE calendar zone — schedulingTimezone when set,
else clinicTimezone. Every rule, exception, day, from/to and
today here is read in it; draw the calendar in it and label it.
The clinic's zone — what timezone falls back to.
The zone this physician chose for their calendar, or null when they
follow the clinic (timezone === clinicTimezone). Set or clear it with
timezone on PATCH /schedule (null clears).
How many booked appointments this physician has ahead of them. For the confirmation before a zone change: their rules keep their clock times, these keep their instants and move to the new zone's clock on the calendar — say so with the number.
Consultation length, so a calendar can show how many appointments a window holds.
How far ahead the tenant asks its physicians to publish.
The date that horizon lands on.
The last date this physician actually covers without a gap, or null when
nothing is published. Compare with requiredThrough to tell a physician
their rota is short — the one number that matters to them.
GET/PUT/PATCH /v1/physicians/{id}/scheduleresponse: the stored document plus its reading over the requested range.rulesare always the physician's WHOLE rota.exceptionsanddaysare only those touchingfrom..to(the query's range, clamped toMAX_SCHEDULE_RANGE_DAYS; default today →requiredThrough) — page by range to look further ahead.daysis the engine's resolution of rules + exceptions for every date of the range (resolveDaysin./schedule), so a surface can draw the calendar without running the engine itself.