Appointments
A complete guide to the Appointments module — scheduling, status management, calendar view, rescheduling, and CSV export.
Written By Dev010
Last updated 19 days ago
The Appointments module manages the full scheduling workflow for your clinic — from booking through to completion. Appointments link patients, doctors, and services together and feed directly into medical records and invoices.
Accessing the Module
Sidebar → Appointments
Direct URL:
https://yourdomain.com/dashboard/appointmentsWho can access:
Appointment List
The main appointments page shows a paginated, searchable list of all appointments across the clinic.
Each row displays:
Patient name
Doctor assigned
Service
Date and time (start and end)
Status badge
Action buttons (edit, reschedule, cancel, delete)
Search and Filters
The search bar filters appointments by:
Patient name
Doctor name
Service name
Results update as you type.
Appointment Statuses
Every appointment has one of four statuses:
Status flows in a typical clinical workflow:
pending → confirmed → completed
↓
cancelledOnly Admin can delete an appointment record entirely. All other roles can cancel, which sets status to
cancelledand preserves the record for audit purposes.
Booking an Appointment
Click the Book Appointment button in the top right of the appointments list.
Required Fields
Optional Fields
Saving the Appointment
Click Book Appointment to save. The appointment appears immediately in the list and calendar view. You are returned to the appointments list after booking.
At least one active Service must exist before appointments can be booked. If no services are configured, the service dropdown will be empty. See the Services guide to add services.
Editing an Appointment
Click the Edit button on any appointment row to open the edit form.
Direct URL:
https://yourdomain.com/dashboard/appointments/[id]/editAll fields from the booking form are editable including patient, doctor, service, time, notes, and status.
Updating Appointment Status
Status can be changed directly from the edit form. Common status update workflows:
Receptionist confirms a pending booking: Edit → set status to confirmed → Save
Doctor marks a visit as complete: Edit → set status to completed → Save
Patient cancels their appointment: Edit → set status to cancelled → Save
Doctors typically update status to
completedafter a visit. This is the trigger for creating a medical record or issuing a prescription for that visit.
Rescheduling an Appointment
Click the Reschedule option from the appointment row action menu.
Rescheduling opens a focused form showing only the date and time fields — the patient, doctor, and service remain unchanged. Update the start and end time and save.
The appointment status is not automatically changed when rescheduling — it remains in its current state.
Cancelling an Appointment
Click the Cancel option from the appointment row action menu.
A confirmation dialog appears. On confirmation, the appointment status is set to cancelled. The record remains in the system for audit and reporting purposes.
Cancelled appointments are included in the Admin dashboard's appointment status chart. This gives visibility into cancellation rates over time.
Calendar View
The calendar provides a visual overview of all scheduled appointments.
Sidebar → Calendar or direct URL:
https://yourdomain.com/dashboard/calendarThe calendar supports:
Day view — detailed hourly schedule
Week view — weekly overview of all appointments
Month view — monthly bird's-eye view
Each appointment block on the calendar displays the patient name, service, and status color.
Drag and Drop Rescheduling
Appointments can be rescheduled directly on the calendar by dragging an appointment block to a new time slot. The appointment's start and end times update automatically when dropped.
Drag and drop is implemented with
@dnd-kit. The reschedule is saved to the database immediately on drop — there is no undo. Confirm the new time before releasing.
CSV Export
The full appointment list can be exported as a CSV file.
Click the Export button on the appointments list page.
The exported CSV includes:
Patient name
Doctor name
Service name
Start time
End time
Status
Notes
Reminder sent flag
Created date
CSV export requires the
appointments.exportpermission. Granted to Admin only by default. Adjust in Dashboard → Permissions if needed.
Appointment Database Fields
Complete appointments table schema:
Indexes are set on doctor_id, patient_id, start_time, and status for fast filtering and calendar queries.
Relationship to Other Modules
Appointments are the central link between most clinical and financial workflows:
One appointment can have at most one linked invoice (enforced by a unique constraint on
invoices.appointment_id). If you need to invoice multiple services from one visit, use invoice line items instead of linking multiple invoices.
Workflow Examples
Full visit workflow from booking to invoice:
Receptionist books appointment → status:
pendingReceptionist confirms appointment → status:
confirmedPatient arrives — nurse records vitals in Medical Records
Doctor sees patient — adds clinical notes and prescription
Doctor marks appointment → status:
completedReceptionist creates invoice linked to the appointment
Patient pays → payment recorded
Checking today's schedule:
Dashboard → Today's Schedule widget (all roles)
Or Sidebar → Calendar → Day view
Finding all pending appointments for follow-up:
Sidebar → Appointments
Scan status column for
pendingbadgesContact patients and confirm or cancel
Troubleshooting
Book Appointment button missing:
Confirm your role has
appointments.createpermission in Dashboard → PermissionsNurses do not have create permission by default
Service dropdown is empty when booking:
No active services exist — go to Sidebar → Services and create at least one service before booking
Appointment not appearing in calendar:
Hard refresh the browser
Confirm the appointment was saved — check Supabase → Table Editor → appointments
Check the calendar is showing the correct date range — navigate to the appointment's date
Cannot drag to reschedule in calendar:
Confirm you have
appointments.reschedulepermissionDrag and drop requires a desktop browser — it is not supported on mobile touchscreens in the current version
Duplicate appointments appearing:
CareNova does not enforce hard conflicts for the same doctor at overlapping times at the database level — the conflict detection is UI-side
Review and cancel the duplicate manually from the appointments list
CSV export not downloading:
Confirm your account has
appointments.exportpermission — Admin only by defaultCheck browser download blocker settings
Next Step
Continue to the Medical Records module guide to learn how vitals, clinical notes, diagnoses, and attachments are managed per patient visit.