commvita
Connected care platform
GOVERNANCE & ASSURANCE EDITION

Quality & Performance Report

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.

Five domains, and 27 indicators — 23 computed, 4 declared unavailableDemand4 INDICATORSWhat is arriving, and whatis waiting.Capacity7 INDICATORSWhat we have to meet itwith.Efficiency3 INDICATORSHow well the capacity isbeing used.Outcome4 INDICATORSWhat happened to people as aresult.Experience5 INDICATORSWhat it was like — forpatients and for staff.EXPERIENCE IS A DOMAIN HERE, NOT A SUB-TYPE — and that is the substantive changeIn the report this is modelled on, experience sits as two rows underneath Outcome, and both were recorded as having no data. Staff experience had no representationat all: workforce appeared under Capacity as vacancy and sickness, which measure SUPPLY, not experience.A domain carries a RAG, a direction and a claim on the watchlist. A buried sub-type carries none of those — which is how two rows stayed empty for thirteenmonths without triggering anything.So both halves are measured here: patient (rapid reviews raised by patients and families, significant concerns, communication needs recorded) and staff (appraisalsoverdue, mandatory training overdue).
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.

An indicator is in one of three states, and they are never collapsedThere is deliberately no fourth. A figure invented to fill a board paper is worse than an admitted gap.ComputedPROVENANCE: LIVEA real query against a real table, with the fieldit was computed from named on the indicator.The record references travel with the count, sothe number reconciles with the list behind it.No dataPROVENANCE: NO_DATAThe source exists and is wired, but there isnothing to compute from this period —typically a rate with no denominator.A vacancy rate of nought per cent reads as a fullystaffed organisation. So it is null, with thereason.No sourcePROVENANCE: NO_SOURCENothing in the platform holds this at all.Each names the module that would have to be wired,so the report doubles as commvita’s own gapregister rather than a dead end.A genuinely counted nought is still nought. “None happened” and “we cannot see it” are different facts and are shown differently.
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

Assurance is DERIVED from coverage, not written in the narrativeA domain cannot report full assurance while a third of its indicators are unavailable. That was the source report’s own conclusion; here it is enforced.Fullevery indicator measurablePartialunder a third unavailableLimiteda third or more unavailableAnd the watchlist never cites an indicator nobody hasOnly indicators that MOVED and that can actually be seen reach the watchlist — worst first, at most five.You cannot be worried about a number you do not have. Putting an unavailable indicator on a watchlist is how a GAP gets mistaken for a FINDING, and then getsmanaged as one.
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

Direction is a property of the indicator — a single up-is-bad rule scores half the report backwardsPREVIOUSCURRENTMOVEMENTPeople on a waiting listlower is better1,2401,180improvingDiagnostic orders outstandinglower is better310402adverse — redOut-of-area mental health placementslower is better67adverse — amberCommunication needs recordedhigher is better88104improvingReferrals receivedneither2,1402,260reported, not ratedAdverse movement of 20% or more is red; less is amber. An indicator with no better direction is reported and NOT rated — more referrals is not good or bad on its own.
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

PartWhereStatus
The live report — five domains, 27 indicators /quality-performance-reportLive
Computed for a periodGET /qp-report/live Live
What is measured, and what cannot beGET /qp-report/methodology Live
Published board papers, frozenGET /qp-report/published Live
Publishing a period (care coordinator and above) POST /qp-report/publishLive
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
© 2026 Commvita Digital Health Solutions Ltd. All rights reserved.