Clinic groups · Operations BI
DashboardClinic groupsOne operations dashboard for a group of clinics
A group of clinics often runs on a spreadsheet from each branch manager, stitched together before the Monday meeting. Here is one dashboard with shared definitions, monitors that tell the right person and a weekly PDF for the owners.
Valnora & Elric team5 min read
Branch summary, last 4 weeks
| Branch | Appointments | Utilisation | No-show | Answer rate | Status |
|---|---|---|---|---|---|
| Koramangala | 2,110 | 85% | 6.9% | 91% | On track |
| Indiranagar | 1,860 | 79% | 7.8% | 88% | On track |
| HSR Layout | 1,640 | 76% | 9.1% | 84% | Watch |
| Whitefield | 1,220 | 61% | 11.4% | 78% | Alert |
| Jayanagar | 1,590 | 73% | 8.2% | 79% | Alert |
1 version
Of each number in meetings and alerts
Illustrative: every panel, monitor and PDF reads the same named metrics.
15 min
Typical refresh for materialized datasets
Or query live on each view, with results cached for about a minute.
0 hours
Spent merging branch spreadsheets
Illustrative: the weekly PDF replaces the Monday consolidation.
Illustrative example. Figures show how the workflow is measured; they are not customer results.
A group of six clinics usually runs its Monday meeting on six spreadsheets. Each branch manager counts appointments a little differently, nobody agrees what "utilisation" means, and the call answer rate is whatever someone remembers from the phone system. By the time the numbers are merged, last week is history.
This post walks through one operations dashboard for a clinic group, built with Agent Serve Dashboards: appointments, utilisation, no-shows, revenue per branch and call answer rates, with monitors and a weekly PDF to the owners. Branch names and figures are illustrative.
Where the numbers come from
Three sources cover most of it.
- The practice system. If it runs on PostgreSQL, MySQL or MSSQL, connect the database under Data sources with a read-only user. If it only exports, a scheduled Excel export works too. Appointments, roster slots and invoices become datasets, either materialized and refreshed on a schedule as often as every 15 minutes, or live and queried on each view.
- Calls. A workflow runs every hour, lists the last hour’s calls with the Twilio Voice block, or calls the phone system’s API with the generic API block, and writes one row per call to a calls table in Tables.
- Reminder replies. If you run no-show reminders, those workflows already write confirmations and no-shows to a table as they happen.
No EHR or practice system integration ships. The database connection or the API block does the work.
Definitions before panels
From branch systems to one dashboard and a weekly report
Data · Sources
- 01Practice system databasePostgreSQL, MySQL or MSSQL behind the practice system, or Excel exports, as datasets.
- 02Call records workflowPulls call records each hour, from Twilio Voice or the phone system’s API, into a calls table.
- 03Reminder repliesConfirmations and no-shows written by the reminder workflows as they happen.
Definitions · Semantic model
- 04Shared entitiesBranch, clinician, appointment, roster slot, invoice and call, joined once.
- 05Named metricsUtilisation, no-show rate, revenue per branch and call answer rate, defined once.
Dashboard · Group operations
- 06Operations dashboardTiles, weekly trends and a branch table, filtered by branch and specialty.
- 07Branch monitorsNo-show, answer rate and utilisation thresholds, alerting the branch that owns them.
- 08Weekly owner PDFSent every Monday at 7:00 to the owners, including external email addresses.
Most arguments in the Monday meeting are about definitions. Settle them once in the semantic model and as named metrics:
- Utilisation: booked clinician minutes divided by rostered available minutes.
- No-show rate: no-shows divided by appointments not cancelled at least 24 hours ahead.
- Revenue per branch: invoiced amount net of refunds, by visit date, not payment date.
- Call answer rate: answered inbound calls divided by inbound calls during that branch’s opening hours.
Every tile, chart, monitor and report then reads the same number. When an owner asks why Whitefield is at 61%, the answer starts from the definition, not from whose spreadsheet it was.
What each panel shows
Read it from top to bottom.
- Tiles. Appointments, utilisation, no-show rate and call answer rate for the period, with the change against the previous one.
- Utilisation trend. Weekly utilisation by branch. Filter to one specialty to see whether a gap is a branch problem or a rota problem.
- Branch table. One row per branch with a status pill. A rule in plain language sets the pill, for example "alert when utilisation is below 65% or no-show rate is above 10%".
- Revenue. Revenue per branch and per clinician session, next to utilisation, so a busy but low-revenue branch stands out.
Monitors that tell the branch, not everyone
Monitors re-check as often as every 5 minutes and alert by email, in the app or in Slack. Three are enough to start:
- Call answer rate below 80% during opening hours on a day, to the branch manager and front-desk lead.
- No-show rate above 10% for a branch over seven days, to the branch manager.
- Next week’s utilisation below 60% for a specialty, to the operations lead, while there is still time to fill or merge sessions.
What the solution produces
Weekly owner report summary (illustrative)
MemoWeek 41 · 6 branches · 2,480 appointments, up 3% on the previous week.
Utilisation 74% overall. Whitefield at 60% for a third week: two dermatology sessions run under half full.
No-shows 8.4%. Whitefield and HSR Layout above the 10% alert line on two days each.
Call answer rate 86%. Jayanagar fell to 72% on Saturday morning with one receptionist on leave.
Revenue by branch is on page 2, net of refunds, by visit date.
Monitor alert to a branch manager (illustrative)
MessageCall answer rate at Jayanagar is 72% today during opening hours, below the 80% threshold.
41 of 147 inbound calls were missed between 9:00 and 13:00.
Open the dashboard, filtered to Jayanagar and today.
The weekly PDF to owners
A scheduled report sends the dashboard as a PDF every Monday at 7:00 to the owners and finance, including email addresses outside the workspace. It carries the same panels and the same definitions, so the meeting starts from the report rather than from a merge.
How to measure it
1 version
Of each number in meetings and alerts
Illustrative: every panel, monitor and PDF reads the same named metrics.
15 min
Typical refresh for materialized datasets
Or query live on each view, with results cached for about a minute.
0 hours
Spent merging branch spreadsheets
Illustrative: the weekly PDF replaces the Monday consolidation.
Illustrative example. Figures show how the workflow is measured; they are not customer results.
Access
Controls and governance
Row-level access
Row-level policies narrow what each person sees in tables, dashboards, exports and scheduled reports.
Roles and permission groups
Admin, write and read roles per workspace, plus permission groups that limit which models, blocks and integrations a team can use.
SSO and SCIM
Sign in through your identity provider with SAML 2.0 or OIDC, and provision people with SCIM.
Audit trail
Proposals, approvals, declines and executed actions are written to the workspace audit log, which admins can export.
Self-hosting
Run Agent Serve in your own cloud or data centre, next to the systems it reads.
PII detection
A Guardrails block detects personal data and blocks or masks it before text reaches the next step.
More on how Agent Serve handles access, data and audit on the security page.
Row-level access means each branch manager sees their own branch in the dashboard, in exports and in scheduled reports, while owners see all six. Keep patient identifiers out of the datasets altogether; the dashboard needs counts and amounts, not names. Sign in through your identity provider, and run Agent Serve self-hosted if the practice database must stay on your own network.
Start with appointments and no-shows from one data source, agree the definitions with the owners, then add calls and revenue. For a wider look at branch reporting, see branch performance BI.
Questions teams ask
Does the dashboard show patient-level data?
It does not need to. Panels group by branch, specialty, clinician and week. Keep patient identifiers out of the datasets, and row-level access narrows what each person sees in panels, exports and scheduled reports.
Is this real time?
Near-real-time. Materialized datasets refresh on a schedule as often as every 15 minutes, live datasets query on each view, and rows written by workflows appear as they land. It is not second-by-second.
What you need
- Read access to the practice system’s database, or scheduled Excel exports, for appointments, rosters and invoices
- Call records from Twilio Voice or a phone system with an API
- Agreed definitions for utilisation, no-show, revenue and answer rate, signed off by the owners
- Opening hours per branch, so answer rate counts only calls during them
- Alert thresholds per metric and a named owner per branch
- The owners’ email addresses for the weekly PDF
- Row-level access policies so each branch manager sees their own branch