Overview
A snapshot of demand, quality, and coverage across all advisors and channels. Use the sidebar for the full detail behind any of these.
Service Demand
Case-note domain volume over time — anonymous triage-bot conversations, not advisor-handled cases (see Case Volume for that).
Case-note domain (Debt, Housing, Benefits, Employment, Family, Other) by day.
| Date ▼ | Domain ▼ | Volume ▼ |
|---|---|---|
| Loading… | ||
Case Volume
Cases an advisor actually completed (finalized case notes) by day.
Not to be confused with "Service Demand", which counts anonymous triage-bot conversations, not advisor-handled cases.
| Date ▼ | Cases completed ▼ |
|---|---|
| Loading… | |
AI Insights & Quality
Case note quality grading and advisor time saved.
AI-assisted completion time (recording finished → case note finalized) compared against NCAB's own pre-AI baseline. Nothing here is estimated — the baseline is whatever figure NCAB enters below, and the AI-assisted average only counts cases actually completed through this system.
Each finalized case note is automatically graded (0-3) against its category's real Casebook checklist — one point per section (Background/Notes, Info Sources, Next Steps) that's adequately covered. Only case notes saved since this feature shipped have a score.
| Date ▼ | Category ▼ | Avg score (0-3) ▼ | Notes graded ▼ |
|---|---|---|---|
| Loading… | |||
Knowledge Coverage
% of queries where the knowledge base returned a confidently-relevant result.
% of queries where the knowledge base returned a confidently-relevant result (vs. a low-scoring or zero-result "coverage gap") — the same threshold the Retrieval Quality admin view uses.
| Date ▼ | Queries ▼ | Coverage gaps ▼ | Coverage % ▼ |
|---|---|---|---|
| Loading… | |||
Trend & Spikes
Domains whose current week's volume is unusually high relative to the trailing average.
A candidate signal for an emerging local issue. Method and thresholds are configured server-side (env config, no code change needed) and shown per card. Bar = this week's volume; the tick marks the trailing baseline.
Peak Demand Heatmap
Query volume by day and hour — helps plan advisor staffing. Not filtered by date range (all-time pattern).
Query volume heatmap — darker/brighter cells are busier.
Categories & Domains
Classified topic of incoming chat/triage queries over time.
Classified topic of incoming chat/triage queries by day (broader than case-note domain).
| Date ▼ | Category ▼ | Volume ▼ |
|---|---|---|
| Loading… | ||
Feedback
Average client-facing feedback rating per query category, by day.
| Date ▼ | Category ▼ | Avg rating ▼ | Rated count ▼ |
|---|---|---|---|
| Loading… | |||
Geographic Demand
By outward postcode district only, plotted on real Norfolk district boundaries.
By outward postcode district only (e.g. "NR1") — combines the public triage flow's optional postcode question and the Case Record intake's optional postcode field. No full postcode or address is ever captured or shown here — district-level shading only, never a precise location.
Areas below the small-cell threshold, or with no cases on file, are shown with a muted fill and no category detail on hover — never as a specific count below the threshold. See the module notes in api/routes/leadership_analytics.py for why.
Settings
How this dashboard's data is produced and kept up to date — no configuration here changes any calculation.
Data pipeline
Every section above is served from materialized views built and refreshed by
DatabaseQueries.create_tables() / refresh_analytics_materialized_views().
A nightly external cron job hits POST /admin/analytics/refresh automatically —
the "Refresh underlying data now" button in the top bar triggers exactly that same
recompute on demand. "Refresh view" (also in the top bar) only re-queries the section
you're currently looking at against whatever was last computed — it does not recompute
anything server-side.
Geographic privacy threshold
The Geographic Demand map suppresses any area/category combination below a minimum
case count (GEO_MIN_CELL_SIZE, server-configured) entirely — never shown
as "<N". This is a data-governance setting, not something changed from this UI.