Trust overview — cross-academy KPIs at a glance
For adminsTrust overview
Section titled “Trust overview”The trust overview is the trust IT lead, COO and CEO’s first stop. It shows every academy in the trust as a row, every product module’s headline KPI as a card, and a RAG-coloured cell at the intersection. Click any non-zero cell to drill into the underlying list with the school context already focused.
Find it under Admin → Trust → Trust overview (or
/admin/trust/overview).
What you’re looking at
Section titled “What you’re looking at”Each card is one product module’s contribution. Today five sections ship:
| Section | Columns | What “alert” means |
|---|---|---|
| Estates compliance | On schedule / Due soon / Overdue | One or more statutory checks (gas, electrical, water, asbestos, fire, lifts, PAT) past their due date. |
| SCR — Single Central Record | Valid / Expiring / Expired / Action | One or more KCSIE checks expired, or in failed/pending requiring intervention. |
| Helpdesk | Open / SLA breached | One or more open tickets at the academy with a breached SLA timer. |
| Governance | Policies overdue / High risks | A published policy past its next_review_date, or a residual risk score ≥ 12 on the 5×5 grid. |
More sections appear as new product modules ship — Health & Safety (incidents, accidents, COSHH), People (absence, CPD), Assets (refresh cycle, EOL devices) are on the roadmap.
The two RAG vocabularies
Section titled “The two RAG vocabularies”We use two visual cues so the heatmap reads cleanly even with hundreds of cells:
- Cell tone — green (mark), amber (warn), red (alert), grey (neutral).
- Dot prefix — same colour as a small indicator inside the cell, so the value is legible at a glance even on small viewports where the cell fill is muted.
Neutral grey doesn’t mean “all good”; it means “nothing in this bucket”. An academy with no statutory schedules at all (a brand-new join, or a setup gap) shows neutral cells everywhere, which is itself a useful signal.
Drilling in
Section titled “Drilling in”Clicking a non-zero cell does two things:
- Switches the school context to that academy (the masthead chip updates to read the academy’s name).
- Lands on the relevant list page with the right filter applied
(e.g. SCR register filtered to
expires=expiring_soon).
Click All on a card header to leave focus open and review the full module across the trust.
Who can see it
Section titled “Who can see it”Trust admins only. School-pinned users (DSL, school office, individual
headteachers — any user with restricted_to_school_id set) get a 403:
they wouldn’t see another academy’s data anywhere else, so the rollup
view would expose data that’s outside their tier. See
School-level access control for the two-tier model.
A user without a specific module’s permission (e.g. a trust admin who
isn’t in estates::admin) gets the rollup with that section’s card
omitted, rather than a partial render. The rest of the page works
normally.
Why a row of zeroes is a useful signal
Section titled “Why a row of zeroes is a useful signal”When an academy has zero data in every column for a section, that’s usually one of three things:
- Brand-new academy in the process of being onboarded — the trust IT lead can spot the gap and chase the local team.
- A module the academy hasn’t started using — surface for a chase.
- An academy whose data was imported with
school_id = NULL— see trust-level rows in the RBAC doc.
Performance
Section titled “Performance”The rollup runs each module’s contributor in turn and assembles the payload server-side. Each contributor uses a single grouped query against the relevant table; total turnaround on a 14-academy trust is typically < 50 ms even with thousands of records per academy. We don’t cache the result — the trust admin opens this page when they want a fresh read, and stale numbers are worse than slightly slower ones.