Plans inbox
Inbox of the clinic's treatment plans. Organized into five tabs aligned with the plan state machine, plus a pipeline view that surfaces the follow-up queue.
At a glance
- Tabs by state. Drafts (not confirmed), Pending (waiting for patient acceptance), Active (treatment in progress), Completed, Closed (rejected, expired, cancelled, abandoned, or other).
- Pipeline. Aggregate inbox view (
GET /pipeline) with totals per column and plans that need front-desk action (pending with no recent contact, unsent budget, etc.). - Search and filters. Search by patient or plan number; filter by assigned professional, creation date, and closure reason.
- Budget sync. Each plan has a linked budget (or creates one on confirm). Plan changes propagate to the budget via snapshot events — no need to edit the budget by hand.
- Clinical notes. Since issue #60, notes are not stored on the plan: they are delegated to the
clinical_notesmodule. The plan only logs executions.
Find a plan
- Switch tabs or enter the pipeline.
- Filter by professional, date, or closure reason as needed.
- Click a row to open the detail.
Create a plan
Requires
treatment_plan.plans.write.
- Click New plan (top right) → goes to
/treatment-plans/new. - Pick patient, professional, and add treatments.
Log a contact
Requires
treatment_plan.plans.write.
- On the row or detail, use Log contact to record a phone / WhatsApp / email touchpoint by the front desk.
- These contacts feed the pipeline view so plans don't go too long without activity.
Permissions
| What you see / can do | Permission |
|---|---|
| View inbox, pipeline, and detail | treatment_plan.plans.read |
| Create, edit, add items, log contacts | treatment_plan.plans.write |
| Confirm (draft → pending) | treatment_plan.plans.confirm |
| Close a plan | treatment_plan.plans.close |
| Reactivate a closed plan | treatment_plan.plans.reactivate |
Troubleshooting
- Plan is pending but the patient accepted. The
budget.acceptedevent moves it to active automatically. If it hasn't, check that the budget is actually accepted and both modules are installed. - Closed plan is missing. On the Closed tab, filter by closure reason. The default includes all.
- No Confirm button. Your role lacks
treatment_plan.plans.confirmor the plan is already in pending or later.