Functional contract

Appointments and schedule

Location appointment book at /app/schedule. An appointment is booking intent only; the on-floor encounter is a Visit.

Calendar + recurrence shipped Source: docs/functional/appointments.md

Records

ModelWhat it is
AppointmentBooked slot or series override. Status: scheduled, canceled, no-show, checked-in
AppointmentSeriesRecurring master (RFC 5545 RRULE + duration + EXDATEs)
AppointmentStaff / AppointmentLocationResourceOptional staff and rooms/equipment

Times use the Location time zone. Occurrences are expanded for the visible range; they are not pre-created as rows. Staff pickers list accepted, enabled Staff who can work at this Location. Booking pickers omit disabled or deceased patients.

Check-in sets checked-in and creates a Visit (idempotent). Canceled and no-show are terminal and never create a visit. Clinical statuses stay on the whiteboard.

Views

Staff / Resource / Day / Week / Month / Year. Toolbar: Today, prev/next, interval on Day/Staff/Resource. Conflict icons when staff or resources overlap (still allowed after confirm).

Organization workspace shows a pick-a-Location placeholder. Schedule writes use the session Location.

RBAC

RoleMay
Org / location admin, receptionistRead and manage
Organization manager, veterinarianRead (vet cannot book/cancel/no-show)

Check-in uses visits.manage and redirects to the whiteboard.

Full contract: docs/functional/appointments.md.