Functional contract
Appointments and schedule
Location appointment book at /app/schedule. An appointment is booking intent only; the on-floor encounter is a Visit.
Records
| Model | What it is |
|---|---|
Appointment | Booked slot or series override. Status: scheduled, canceled, no-show, checked-in |
AppointmentSeries | Recurring master (RFC 5545 RRULE + duration + EXDATEs) |
AppointmentStaff / AppointmentLocationResource | Optional 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
| Role | May |
|---|---|
| Org / location admin, receptionist | Read and manage |
| Organization manager, veterinarian | Read (vet cannot book/cancel/no-show) |
Check-in uses visits.manage and redirects to the whiteboard.
Full contract: docs/functional/appointments.md.