Demand · Capacity · Efficiency · Outcome · Experience. Twenty-seven indicators, none of them seeded — each is computed from a real record or is null with the reason, and assurance is derived from how many of them can actually be seen.
Live vs demonstrated:Live — real, API-backed platform logic (wired end-to-end today)Demonstrated — representative control surface with seeded data / illustrative UI mock-up
1What the report is
The monthly system performance report, structured as Demand ·
Capacity · Efficiency · Outcome · Experience. It asks
five questions in order: what is arriving, what we have to meet it with, how well
that is being used, what happened to people as a result, and what it was like.
It is modelled on a published quality and performance report that is unusually
good in one specific respect: it writes “no data” rather than a
zero, and then says in its own executive summary that the gaps limit
assurance. That honesty is the thing worth copying, and this implementation
enforces it rather than leaving it to whoever writes the narrative.
Twenty-seven indicators across five domains. Experience is the change: in the source it is two rows buried under Outcome, both empty, with staff experience absent entirely.
2Nothing is seeded
Every figure is either computed from a real table or is null with a stated
reason. There is no third option, and no estimate anywhere.
The distinction between 'the source is wired but there is nothing to compute' and 'nothing in the platform holds this at all' matters, because one needs data entry and the other needs building.
Four indicators are declared unavailable, by name.
Cost improvement delivery, Friends and Family Test response rate, complaints
received, and staff engagement. Each states the module that would have to be
wired — so the report doubles as commvita’s own gap register rather
than presenting a shorter list as a complete one. Three of the four are
experience indicators, which is exactly the domain the source report also could
not populate.
3Assurance follows the coverage
A board reading 'full assurance' beneath a domain where a third of the indicators are blank is being misled by the layout. The rating is computed from what is actually measurable.
4Movement, rated in the right direction
Half the measures a health system cares about improve by going down. Applying one rule to all of them produces a report that is confidently wrong in half its rows — and plausibly wrong, which is worse.
Every count carries its record references. An
indicator does not just report a number; it carries the identifiers of the
records behind it, so the value reconciles with the set it counts. A figure on a
board paper that cannot be drilled into is a figure nobody can challenge.
5A published report is frozen
The live view keeps moving as records are created. A published report is
a board paper: the full payload is stored as it stood at the moment it was tabled,
with who published it and when. One period cannot be published twice.
That separation is the point. Six months later, the question a board asks is
not what does this indicator say now but what did we see when we took
that decision — and a report that silently recomputes itself cannot
answer it.
6Where it lives, and its honest edges
Part
Where
Status
The live report — five domains, 27 indicators
/quality-performance-report
Live
Computed for a period
GET /qp-report/live
Live
What is measured, and what cannot be
GET /qp-report/methodology
Live
Published board papers, frozen
GET /qp-report/published
Live
Publishing a period (care coordinator and above)
POST /qp-report/publish
Live
Cost improvement delivery
—
Not available
FFT response rate · complaints · staff engagement
—
Not available
Four things this report cannot tell you, and it
publishes them rather than leaving them to be discovered.
Whether an indicator moved because the service
changed or because recording changed. A rise in recorded safeguarding alerts
can mean more harm or better reporting. This report cannot distinguish them, and
the difference matters enormously.
Anything still done outside commvita. Work
carried on paper, by email or in a spreadsheet is invisible here and must not
be read as absence of activity.
Case mix and acuity. Counts are raw. A busier
month with sicker people is not distinguished from a busier month alone.
Statistical significance. Movement is reported as
direction, not as a tested signal — two points are a line, not a trend.
Separating a real signal from ordinary variation needs statistical process
control, and that is not built.
Model: QPReport · API: /qp-report/ (5 endpoints) · Route: /quality-performance-report23 indicators computed from live records · 4 declared unavailable · Non-SaMD