New budget
Form to create a budget from scratch. The budget is born in draft state on save, and the workflow continues from the detail.
At a glance
- How you usually get here.
- From the patient record → New budget (patient pre-selected).
- From the list → New budget (patient picker required).
- From a treatment plan → generates a budget kept in sync via
treatment_plan.treatment_added/treatment_plan.budget_sync_requestedevents.
- Auto-numbering. The number (
PRES-YYYY-####) is assigned on save; it is not editable. - Default validity — the form proposes
valid_from = todayandvalid_until = today + 30 days. Adjust if your policy differs. - Price snapshot. Each line records the catalog price effective at creation time. Editing the catalog later does not change existing budgets.
Create a budget
Requires
budget.write.
- If you didn't come from a patient record, pick the patient in the header.
- Add items from the catalog. For each line you can choose:
- Tooth and surfaces (FDI notation).
- Quantity, unit price (prefilled from the catalog), line discount (percent or absolute).
- VAT type (prefilled from the catalog).
- Apply a global discount if needed.
- Review the totals in the sidebar.
- Save. The budget is created in
draftand you land on the detail to send it, sign it, or invoice it later.
Create from a treatment plan
Requires
budget.writeandtreatment_plan.write.
- On the treatment plan, click Generate budget.
- The plan's treatments arrive in the form as prefilled lines via a snapshot event payload.
- Adjust what you need and save.
Permissions
| What you see / can do | Permission |
|---|---|
| Access the form and see the catalog | budget.read |
| Create the budget | budget.write |
Troubleshooting
- Patient picker is empty. You lack
patients.read(without it the form cannot list patients). - A catalog item is missing. Make sure it is active under Settings → Catalog and your role has
catalog.read. - Totals don't match what you expect. Check line vs global discount. Application order: price × quantity → line discount → VAT → global discount on the total.