Reports — technical overview
Read-only analytics over billing, budgets, scheduling, and (roadmap #230) financial, patient-stats, and operational families. Every endpoint is a GET gated by its family's reports.<family>.read permission; list endpoints accept ?format=csv for export. No events published or consumed; no mutations.
Families
- billing / budgets / scheduling — the original families (per-endpoint list under API surface below).
- financial (roadmap #230) — invoice-axis only (never payments):
GET /billing/aging(outstanding buckets) +GET /billing/issued-trend(issued totals over time), both underreports.financial.read, plus thefinancial_reportcopilot tool. An off-books guard test pins the invoice-axis scope. - patient-stats (roadmap #230) —
GET /patients/demographics(age bands, sex split) +GET /patients/visits(first vs returning), underreports.patient_stats.read, plus thepatient_stats_reportcopilot tool. - operational (roadmap #230) —
GET /operational/productivity(per-professional completed visits, cabinets, plan pipeline counts), underreports.operational.read, plus theoperational_reportcopilot tool. Reads agenda + treatment_plan.
API surface
GET /api/v1/reports/billing/by-payment-methodGET /api/v1/reports/billing/by-professionalGET /api/v1/reports/billing/gapsGET /api/v1/reports/billing/overdueGET /api/v1/reports/billing/summaryGET /api/v1/reports/billing/vat-summaryGET /api/v1/reports/budgets/by-professionalGET /api/v1/reports/budgets/by-statusGET /api/v1/reports/budgets/by-treatmentGET /api/v1/reports/budgets/summaryGET /api/v1/reports/scheduling/by-cabinetGET /api/v1/reports/scheduling/by-day-of-weekGET /api/v1/reports/scheduling/by-professionalGET /api/v1/reports/scheduling/duration-varianceGET /api/v1/reports/scheduling/first-visitsGET /api/v1/reports/scheduling/funnelGET /api/v1/reports/scheduling/punctualityGET /api/v1/reports/scheduling/summaryGET /api/v1/reports/scheduling/waiting-times
Frontend
backend/app/modules/reports/frontend/pages/reports/index.vue→/reportsbackend/app/modules/reports/frontend/pages/reports/billing.vue→/reports/billingbackend/app/modules/reports/frontend/pages/reports/budgets.vue→/reports/budgetsbackend/app/modules/reports/frontend/pages/reports/scheduling.vue→/reports/scheduling
Permissions
billing.read, budgets.read, scheduling.read
See ./permissions.md for the full role mapping.
Events
- Emits: (none)
- Subscribes: (none)
module participates in the event bus).
See also
- Module CLAUDE notes:
backend/app/modules/reports/CLAUDE.md - Documentation portal contract