Treasury cash dashboard

The Treasury dashboard is the single screen that head of treasury and operations watch all day. It shows every branch's cash position, every in-flight CIT trip, every open incident, and every policy threshold utilisation — refreshed live.

Cash position dashboard
Cash position across branches with float bands.

Audience and access

The dashboard is bookmarked by:

Access is governed by the standard MFI roles. Each role sees only what it should: branch managers see their branch + region; regional managers see their region; HQ roles see everything.

  • **Head of treasury** — live cash position; CIT scheduling; vault overnight overage early warning
  • **Head of operations** — branch session progress; tellers stuck open at lunch; EOD progress in the afternoon
  • **Head of compliance** — open incidents by level; SLA breach alerts; STR queue depth
  • **CFO** — institution-wide cash holding; insurance limit utilisation; weekly trend

Dashboard panels

The dashboard is composed of these panels (configurable per user):

PanelWhat it showsRefresh
Branch SessionsPer-branch open / closing / closed status, time of last activity30s
Cash Heat-mapMap of branches coloured by vault % of overnight max60s
Live Till PositionsAll open till sessions, balance, time since last txn, status30s
CIT In FlightAll in-transit CIT trips with origin, destination, carrier, value, ETA60s
Incidents OpenAll open incidents grouped by level + SLA bucket60s
Limit Utilisation% of policy limits across till float, vault overnight, single-txn, CIT bag5m
Insurance UtilisationCash in vault + in transit vs insurance cap5m
Today's ThroughputCash in / out / net / by branch / by channel1m
STR QueueSTR cases pending FRC filing, days remaining5m (compliance only)
KRA ETIMS StatusETIMS submissions in last hour, success / failure5m

Alerts

Alerts are pushed to dashboard banners and (configurable per user) email / SMS / Slack. Defaults:

  • **Branch session not opened by 09:00** — branch ops + regional manager
  • **Till open > 6 hours without transaction** — supervisor + branch manager
  • **Till at 90% of operating max** — supervisor
  • **Vault at 90% of overnight max at 15:00 or later** — branch manager + regional manager
  • **CIT in transit > expected duration + 30 min** — head of treasury + carrier liaison
  • **Open L3 incident** — CFO, head of compliance, head of treasury (immediate)
  • **Insurance cap > 90% utilisation** — head of treasury
  • **ETIMS submission failure rate > 5% / hour** — IT + compliance

Historical mode

The dashboard has a 'replay' mode that lets you step back through any past trading day in 15-minute increments. Useful for:

  • **Post-incident review** — see exactly what the dashboard showed at the time of an L3 event
  • **Training** — walk new operations leads through a typical day
  • **Audit** — demonstrate that monitoring was operational at the relevant moment
  • **Capacity planning** — see peak till utilisation by hour-of-day across a month

Daily KPI tile

A summary tile at the top of the dashboard shows institution-wide KPIs for today vs yesterday vs same-day-last-week:

KPIDefinitionHealthy band
Branches open by 09:00Count of branches in OPEN state= total branches
Net cash positionSum of vault + till balances institution-wideTrending
Throughput todaySum of cash-in + cash-outCompare prior period
Variance countCount of incidents opened today≤ 1 per 10 branches
Variance total KESSum of variance amounts today≤ 0.01% of throughput
CIT trips todayCount completed + in flightPer route schedule
STR queuedFRC-eligible transactions awaiting filing0 ideally; ≤ 7-day-old always
Insurance utilisation(Cash in vault + in transit) / insurance cap< 80%

Permissions and PII

The dashboard surfaces aggregate balances and incident summaries. It does NOT show individual customer transactions, member names, or KYC data. Compliance-only panels (STR queue, AML flags) require the AML role. PII handling follows the ODPC retention rules described on the Compliance page.

Under the hood

The dashboard is rendered by an OWL widget that subscribes to a small set of materialised views and live websocket updates. Most panels refresh on a server cron; high-frequency panels (Live Till Positions, Branch Sessions) refresh on websocket push when a relevant record changes state. If the dashboard appears stale, check (in order): browser tab is still active; websocket connection in browser dev tools; the `mfi.cash.dashboard.refresh` scheduled action.

Worked scenarios

Scenario — Head of Treasury runs the dashboard through a busy day

Setting: Mary Mutua is Head of Treasury. Wednesday, end of quarter — heavy cash day institution-wide.

CharacterRole
Mary MutuaHead of treasury, HQ
Florence AchiengBranch manager Karen
Peter OtienoRegional manager East
Aisha HassanCompliance officer

Timeline

  1. 08:00: Mary opens dashboard. 38 of 40 branches show OPEN. (Branch Sessions panel)
  2. 08:05: Two branches still 'draft'. Mary pings the two regional managers via the dashboard chat-link. (Notifications sent)
  3. 08:30: Both branches now OPEN. Mary moves on. (—)
  4. 10:15: Cash Heat-map shows Karen at 65% of overnight max already — unusual for morning. (Karen tile YELLOW)
  5. 10:18: Mary drills in: large mid-month corporate-bulk deposit explains it. Schedules a same-day CIT to KCB. (CIT trip CIT/2026/0701 drafted)
  6. 13:00: L2 incident opens — KES 18,000 variance at Westlands. Mary watches but doesn't intervene (regional manager owns). (Incidents panel updates)
  7. 15:45: CIT In Flight panel shows the 14:00 G4S trip from Mombasa is 30 min late. Mary calls G4S Ops. (—)
  8. 15:55: G4S reports vehicle breakdown; replacement crew dispatched. Trip ETA updated. (ETA refreshed)
  9. 17:00: Public counters close. EOD progress panel turns over: 0/40 closed. (EOD bar updates)
  10. 17:30: EOD progress 18/40. Mary watches the slowest cluster. (—)
  11. 17:55: EOD progress 39/40. One branch stuck on an open incident. Mary pings the branch manager. (—)
  12. 18:10: EOD progress 40/40. Insurance utilisation finalised at 73%. (Day closed)

Outcome — Mary identified two operational issues (slow branches, late CIT) and one capacity issue (heavy Karen vault) — all resolved before EOD; institution closed clean.

Reference

Panel definitions and source

PanelSource view / modelFilter scope
Branch Sessionsmfi.branch.sessionBy user role region
Cash Heat-mapmfi.cash.vault + branch geoAll visible branches
Live Till Positionsmfi.cash.till.session (state=active|locked)By user role
CIT In Flightmfi.cash.cit (state in transit / received)All visible
Incidents Openmfi.cash.incident (state != closed)By severity + role
Limit UtilisationAggregated from mfi.cash.policyAll visible
Insurance UtilisationAggregated across vault + CIT vs policyHQ only
Today's Throughputaccount.move filtered to cash journalsBy branch
STR Queuemfi.cash.incident (str_filed=True)Compliance role only
KRA ETIMS Statusetims.submissionAll visible

Alert channel defaults

AlertDefault channelRecipient role
Branch not opened by 09:00Email + SlackBranch ops + regional
Till idle > 6 hSlackSupervisor + branch manager
Vault > 90% overnight maxEmail + SMSBranch + regional manager
CIT late > 30 minEmail + SMSHead of treasury
L3 incident openedSMS + Email + SlackCFO + heads of treasury / compliance
Insurance cap > 90%EmailHead of treasury
ETIMS failure rate > 5%/hEmail + SlackIT + compliance

Troubleshooting

SymptomLikely causeFix
Dashboard panels say 'no data' for one branchBranch system clock skew or websocket disconnectedCheck branch server NTP; restart the websocket service at that branch; reload dashboard.
Stale data — panels do not updateBrowser tab inactive; websockets pauseClick anywhere in the tab or press F5. Long-running monitoring should pin the tab.
Cash Heat-map shows wrong geo locationBranch lat/lng not set or staleUpdate res.branch.partner_id geo coordinates. Heat-map refreshes on the next cron tick.
STR Queue panel missing for compliance userUser not in `mfi.group_compliance_officer`Settings → Users → assign group; user logs out and back in.
Dashboard slow to load with 40+ branchesMaterialised views not refreshed; falls back to live aggregationVerify cron `mfi.cash.dashboard.refresh_materialised` is running every 5 minutes. Increase server resources if needed.

See also

Was this page helpful?