Appointments & Calendar
Full calendar management — booking, rescheduling, status lifecycle, recurring series, and the waiting room.
Calendar views
The main calendar supports three views:
- Day: single-column per doctor, densest time grid
- Week: side-by-side columns for all doctors in the selected branch
- Month: overview — click any day to drill down
Switch views using the buttons in the top-right of the calendar. The selected view persists across sessions.
Appointment status lifecycle
Every appointment moves through a defined set of states:
SCHEDULED > CONFIRMED > ARRIVED > WAITING > IN_CHAIR > COMPLETED
> NO_SHOW
> CANCELLED (from any state except COMPLETED)
SCHEDULED — Booked, not yet confirmed
CONFIRMED — Patient confirmed attendance
ARRIVED — Patient physically checked in at the clinic
WAITING — In waiting room, being triaged
IN_CHAIR — Doctor has started the session
COMPLETED — Session saved, invoice auto-generated
NO_SHOW — Patient did not arrive
CANCELLED — Appointment cancelled
Status changes are recorded in the Audit Log.
Drag-and-drop rescheduling
Drag any appointment block to a new time slot or a different doctor column. A confirmation dialog shows the old and new time before saving.
Drag rescheduling is blocked for:
- Appointments with status IN_CHAIR or COMPLETED
- Appointments in the past (unless you have ADMIN role)
After rescheduling, WhatsApp and SMS reminders are automatically re-queued for the new time.
Walk-in appointments
For unscheduled patients arriving at the door:
- Press Shift + W anywhere in the dashboard, or click the + FAB (floating action button).
- Search for the patient or add them on the spot.
- Select the doctor, appointment type, and chief complaint.
- Click Add to Waiting Room — the appointment is created with status ARRIVED immediately.
Walk-ins appear at the top of the waiting room queue with a Walk-in badge.
Recurring appointments (series)
For patients who need regular sessions (physiotherapy, chemotherapy, dialysis):
- Create a new appointment as normal.
- Before saving, toggle Repeat.
- Set the frequency (Daily, Weekly, Every 2 weeks, Monthly) and end condition (number of sessions or end date).
- Click Save Series — all sessions are created at once.
To edit a single session without affecting others, open it and choose Edit this appointment only.
To cancel the entire series, choose Cancel all remaining.
Waiting room
The Waiting Room view (/dashboard/waiting-room) shows three live buckets:
Arrived — Checked in physically, not yet called
Waiting — Confirmed but not yet arrived
In Chair — Currently with the doctor
Each bucket shows a live count badge. Click Call Next to move the first patient in Arrived to In Chair and open their session.
The list updates in real time via Supabase Realtime WebSockets.
Pre-session triage (kiosk)
Patients can self-check-in on a reception tablet before seeing the doctor:
- Enable kiosk mode at App Management > Kiosk Mode.
- The patient enters their phone number and receives an OTP.
- They enter their chief complaint, current medications, and pain level.
- The doctor sees this pre-filled in the session notes before entering the room.
This reduces average session time and ensures no information is lost.