What this is
A single-file management dashboard for one care home, organised into seven tabs — Overview, Occupancy &
residents, Staffing & agency, Money, Quality & compliance, Trends, and Data & entry. Everything on it
is an aggregate, name-free figure: bed counts, hours, amounts, incident counts and training percentages.
No resident or staff names appear anywhere — none are needed, read or displayed — which is exactly what
makes it safe to email as a snapshot or hand to the board.
Quick start
- Load your data. Drop an export (.xlsx or .csv)
anywhere on the page, or use Load data. Five kinds of export are recognised
automatically by their column headings, in any column order: daily occupancy (date, capacity, occupied,
and optionally admissions, discharges and deaths), shifts (date, shift, role, hours, staff type, and
optionally cost and agency name), monthly income (month, funding stream, amount), incidents
(date, category) and absence (date, role, hours lost). A workbook may carry several on separate sheets;
the Template (.xlsx) button on the Data & entry tab downloads all five layouts.
- Enter the quality aggregates. Incidents by category and month, training and supervision currency
(staff in date ÷ staff in scope), and complaints/compliments are typed straight into the
Data & entry tab — charts redraw as you type.
- Read the tiles. Occupancy, agency share and spend, care hours per occupied-bed-day, resident moves,
incidents, training currency, income and vacant-bed income foregone — each for the latest complete
month, compared with the month before (▲▼). Partial months are never used for headline comparisons.
- Keep your data. The dashboard stores nothing in the browser. Backup JSON
(Data & entry tab) downloads everything re-loadably; Snapshot downloads a frozen,
fully interactive copy of the whole dashboard with the data embedded.
The tabs
- Overview
- The headline pair — occupancy against capacity and target, and agency use by role — under
the KPI tiles and the What-changed checks.
- Occupancy & residents
- Resident flows (admissions, discharges and — where the export carries a
deaths column — deaths), vacant bed-days with the income-foregone estimate, and the funding mix over time.
- Staffing & agency
- Staffing mix, care hours against target, agency share against the home’s
ceiling, shift fill by day-of-week × shift against the planned-hours grid, agency hours by agency (when the
export names agencies — companies, not people), and sickness absence when an absence export is loaded.
- Money
- Income by stream stacked monthly, weekly income per occupied bed by stream (a contribution
estimate — per-resident fees are not derivable from aggregate data), the agency premium estimate, staffing cost
per occupied-bed-day, and the vacant-bed income-foregone trend.
- Quality & compliance
- Incidents by category with falls per 1,000 occupied-bed-days, training and
supervision currency against the configured threshold, complaints and compliments, and the inspection-evidence
completeness meter.
- Trends
- Year-on-year lines (January–December, one line per year) for occupancy, agency share, falls
per 1,000 bed-days, income and the care-hours ratio.
- Data & entry
- Dataset status, the Excel template, JSON backup/restore, demo reset, the quality
entry forms and every configuration figure.
Targets, thresholds and assumptions
All dashed lines and flags are the home’s own settings, not regulatory requirements: occupancy target
(default 92%), care-hours target (default 3.4 h per occupied-bed-day), agency ceiling (default 15%), training and
supervision threshold (default 90%), average weekly fee (default £1,100), permanent hourly rates for the premium
estimate (defaults: Nurse £22, Senior Carer £14, Carer £11.50, Other £12) and the planned-hours grid per shift
(defaults: Early 67.5 h, Late 60 h, Night 50 h per day). Change them on the Data & entry tab or with a
configuration JSON.
What changed — automatic checks
Fixed, deterministic rules run every time the data changes: occupancy pacing for the month in progress
(month-to-date against the same point of the prior month), month-on-month occupancy moves, agency share rising or
above the ceiling, agency spend against its recent norm, care hours below target, cost per occupied-bed-day
moves, the falls rate against its prior-six-month norm, training topics below threshold, incident-free streaks,
the agency premium for the latest complete month, sickness share spikes and record occupancy months. Complete
months only; every card shows the figures behind the claim; the same data always produces the same callouts. If
nothing is out of range it says so.
Written reports
Report writes two documents from the loaded data. The Monthly board summary
covers occupancy, staffing, agency, money and quality (incidents, training, complaints) for a chosen month with
points to note. The Inspection readiness summary lists the evidence-completeness meter, training and
supervision currency, incident rates and open gaps in plain factual language — it describes what the data shows
and claims nothing beyond it. Copy text / Print put either
straight into an email or a PDF, and Aggregates CSV downloads de-identified monthly
totals.
Site configuration
Drop a .json file containing "careHomeDashboardConfig": 1, e.g.
{"careHomeDashboardConfig":1, "homeName":"…", "capacity":60, "occupancyTargetPct":92,
"hoursTarget":3.4, "avgWeeklyFee":1100, "agencyCeilingPct":15, "trainingThresholdPct":90,
"plannedHours":{"Early":67.5,"Late":60,"Night":50}, "permanentRates":{"Nurse":22,"Senior Carer":14,
"Carer":11.5,"Other":12}}. Save a snapshot afterwards to keep it embedded.
Snapshots — sharing a copy
Snapshot downloads a frozen copy of this dashboard with the loaded datasets, every
entered quality figure and the configuration embedded inside it. It opens in any browser, fully interactive,
with a banner showing when it was saved. Because the data is aggregate and name-free, a snapshot carries no
personal information — bed counts, hours, amounts and counts only.
How figures are calculated
- Occupancy %
- Occupied bed-days ÷ available bed-days (capacity × days). Capacity comes from the
occupancy export where present, otherwise from the configuration.
- Agency share
- Agency hours ÷ all care hours worked in the period, from the shifts export.
- Care hours per occupied-bed-day
- Hours worked ÷ occupied bed-days, counting only days present in both
datasets, so a missing week of one export cannot skew the ratio.
- Staffing cost
- The cost column of the shifts export where present; otherwise estimated from typical
hourly rates — Nurse £22 permanent / £26 bank / £38 agency; Senior Carer £14 / £16.50 / £24; Carer £11.50 /
£13 / £19.50 — and clearly marked as an estimate.
- Agency premium
- Agency cost minus the same hours priced at the configured permanent rates — an
estimate of the extra cost of agency cover, with the assumption stated wherever it appears.
- Falls per 1,000 occupied-bed-days
- Falls ÷ occupied bed-days × 1,000 — comparable across months of
different occupancy. Needs occupancy data for the same month; otherwise raw counts are shown.
- Training / supervision currency
- Entered aggregates: staff in date ÷ staff in scope per topic.
The dashboard never asks which staff members they are.
- Vacant-bed income foregone
- Vacant bed-days × average weekly fee ÷ 7, using the home’s own fee
assumption. A planning estimate, not an invoice figure.
- Privacy
- Everything is computed in your browser and nothing is written to browser storage. The
dashboard works entirely from aggregate exports and entered counts — no resident or staff names anywhere, by
design.
Figures are indicative until reconciled against the home’s own
records. Use Print for a paper or PDF copy of the current view.