Scheduling App | Canvas Medical

miguelquintas/scheduling-app

Chart ApplicationAppointmentsPatient Scheduling

Scheduling App

A custom scheduling experience that replaces Canvas's built-in scheduling modal. When this plugin is installed, Canvas opens its appointment-booking UI instead of the native modal at every scheduling entry point — the schedule-page button, calendar drag-and-drop, the patient chart, and the reschedule flows. It is a reference implementation of the scheduling application type, built entirely from public SDK building blocks. If no scheduling plugin is installed, the built-in modal works unchanged.

Requires the scheduling application type, which is not yet available in a released Canvas SDK (latest published is 0.167.0, which does not include SchedulingApplication). Until that ships, the plugin can't be installed on a standard instance, and the Python tests must run against an SDK build that includes the feature — see Running tests.

What it does

Renders its own scheduling UI (a React app) in place of the built-in modal, prefilled from whatever context the entry point supplied (provider, location, patient, time, or the appointment being rescheduled). From that UI a user can:

All dropdown data (providers, locations, visit types, reasons for visit, labels) is read through the SDK ORM, and all bookings are written through appointment effects — no FHIR calls and no raw SQL.

Problem it solves

The built-in scheduling modal is fixed: teams can't change its fields, layout, or booking behavior. This plugin is the worked example of overriding it end to end — taking over every scheduling entry point and booking real appointments with only the SDK. A team can fork it and shape scheduling to their own workflow (custom fields, durations, multi-provider visits, recurring series) without waiting on changes to Canvas core.

Who it's for

Canvas plugin developers and implementation teams who need to customize the scheduling/booking experience beyond what the native modal allows. It is a developer reference, not a turnkey end-user feature.

How to install

canvas install scheduling_app

Installing the plugin makes it the active scheduling modal automatically; uninstalling restores the built-in modal. No secrets are required.

Configuration options

This plugin has no secrets. One behavior is configured in code, because the value it mirrors isn't exposed to plugins at runtime:

Setting Where Default Purpose
STRUCTURED_REASON_FOR_VISIT scheduling_app/handlers/scheduling_web_app.py False Mirror your instance's STRUCTURED_REASON_FOR_VISIT_ENABLED flag. True renders a coded reason-for-visit dropdown; False renders a free-text field (the shipped Canvas default).

How it works

Supported flows

v1 limitations (vs. the built-in modal)

This is a faithful-but-not-identical reproduction. Some modal behaviors depend on home-app internals a plugin can't reach today:

Running tests

Python tests (require an SDK build that includes the scheduling application type — see the note at the top):

uv run pytest tests/

Frontend tests:

cd frontend && yarn install && yarn test

Rebuild the embedded UI bundle after changing the frontend:

cd frontend && yarn build   # regenerates scheduling_app/_assets.py