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/appointments

Who can access:

Action

Admin

Doctor

Receptionist

Nurse

View appointments

Create appointment

Edit appointment

Reschedule

Cancel

Assign doctor

Delete appointment

Export appointments

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

Description

Badge Color

pending

Booked but not yet confirmed

Yellow

confirmed

Confirmed by admin or doctor

Blue

completed

Visit has taken place

Green

cancelled

Appointment was cancelled

Red

Status flows in a typical clinical workflow:

pending → confirmed → completed
              ↓
          cancelled

Only Admin can delete an appointment record entirely. All other roles can cancel, which sets status to cancelled and preserves the record for audit purposes.

Booking an Appointment

Click the Book Appointment button in the top right of the appointments list.

Required Fields

Field

Notes

Patient

Search and select from registered patients

Doctor

Select from active staff with doctor role

Service

Select from active clinic services

Start Date and Time

Date and time picker

End Date and Time

Calculated from service duration or set manually

Optional Fields

Field

Notes

Notes

Internal notes about the appointment

Status

Defaults to pending — can be set to confirmed immediately

Reminder

Toggle to mark that a reminder should be sent

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]/edit

All 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 completed after 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/calendar

The 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.export permission. Granted to Admin only by default. Adjust in Dashboard → Permissions if needed.

Appointment Database Fields

Complete appointments table schema:

Column

Type

Description

id

uuid

Unique appointment identifier

patient_id

uuid

FK → patients (cascade delete)

doctor_id

uuid

FK → users

service_id

uuid

FK → services (set null on delete)

start_time

timestamptz

Appointment start

end_time

timestamptz

Appointment end

status

enum

pending, confirmed, completed, cancelled

notes

text

Internal notes

reminder_sent

integer

0 or 1 — reminder flag

reminder_sent_at

timestamptz

When reminder was sent

created_at

timestamptz

Creation timestamp

updated_at

timestamptz

Last updated timestamp

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:

Module

Relationship

Patients

Every appointment belongs to one patient

Medical Records

A medical record can reference an appointment

Prescriptions

A prescription can reference an appointment

Invoices

An invoice can be linked to one appointment (unique)

Test Reports

A test report can reference an appointment

Vitals

Vitals can be recorded against an appointment

Clinical Notes

Notes can be linked to an appointment

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:

  1. Receptionist books appointment → status: pending

  2. Receptionist confirms appointment → status: confirmed

  3. Patient arrives — nurse records vitals in Medical Records

  4. Doctor sees patient — adds clinical notes and prescription

  5. Doctor marks appointment → status: completed

  6. Receptionist creates invoice linked to the appointment

  7. Patient pays → payment recorded

Checking today's schedule:

  1. Dashboard → Today's Schedule widget (all roles)

  2. Or Sidebar → Calendar → Day view

Finding all pending appointments for follow-up:

  1. Sidebar → Appointments

  2. Scan status column for pending badges

  3. Contact patients and confirm or cancel

Troubleshooting

Book Appointment button missing:

  • Confirm your role has appointments.create permission in Dashboard → Permissions

  • Nurses 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.reschedule permission

  • Drag 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.export permission — Admin only by default

  • Check 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.