Cash management
Cash management is the discipline of moving, storing, and counting every Kenyan shilling that touches the institution — from the teller window to the vault to the CIT van to the bank. This section maps every till, every vault movement, every dual-control transfer, and every end-of-day cut-off so that nothing leaves the branch without two signatures and a journal entry.

Scope of cash management
Cash management in the MFI Suite covers every shilling held outside a bank account — including teller cash drawers, branch vaults, mobile-teller pouches, ATM cassettes, agent floats, and money in transit between any two of these. It does not cover bank balances (handled by **Treasury & ALM**) or M-Pesa floats (handled by **Mobile money**).
- **Tills** — teller-held cash drawers, one per cashier per shift
- **Vaults** — branch-level secure storage, dual-control
- **Cash policies** — per-branch limits, max float, max single transaction, max overnight holding
- **CIT** — cash-in-transit movements between branches, between branch and bank, between branch and HQ
- **Branch session** — open/close cycle for the whole branch, drives the cash GL cut-off
- **End-of-day** — balancing routine: declared vs system, variance handling, sign-off
- **Incidents** — overage, shortage, robbery, fire, suspected fraud — every variance has a case
- **Dashboard** — Treasury workspace with live branch-by-branch positions
Modules in this section

| Module | Slug | Purpose |
|---|---|---|
| Tills | tills | Teller drawer open/close, denomination breakdown, float assignment |
| Vaults | vaults | Branch vault movements, dual-control approvals, denomination ledger |
| Cash policy | cash_policy | Per-branch limits and threshold rules |
| Cash-in-transit | cit | CIT manifest, sealed-bag tracking, carrier handover |
| Branch session | branch_session | Branch open/close cycle, controls cash GL cut-off |
| End-of-day | eod | Balancing wizard, variance handling, supervisor sign-off |
| Incidents | incidents | Variance cases, robbery reports, regulator notification |
| Dashboard | dashboard | Treasury workspace: live branch positions + alerts |
How cash flows through a branch
A typical Nairobi branch handles KES 800k–2M of cash per day across deposits, loan disbursements, loan repayments, savings withdrawals, and CIT pickups. The flow is:
- **Branch opens** — supervisor opens the branch session. Vault is unlocked under dual control. Opening cash is counted denomination-by-denomination against the vault ledger.
- **Tellers open** — each teller draws a starting float (typically KES 50k) from the vault. The vault and the till both log the movement.
- **Customer transactions** — deposits add cash to the till; withdrawals/disbursements remove cash. Every transaction is journalled against the customer's account and the till GL account.
- **Mid-day sweeps** — when a till exceeds its operating maximum (typically KES 200k), the supervisor sweeps excess back to the vault. Logged as an internal CIT movement.
- **Branch closes** — tellers close their tills: count, declare, reconcile to system, variance to incidents if any. Final cash returned to vault.
- **Vault close** — supervisor counts the vault, signs off the branch session, and (if it's a CIT day) hands sealed bags to the carrier.
- **CIT to bank** — Wells Fargo / G4S / KK Security picks up sealed bags. Tracked from seal-on at branch to seal-off at bank, with each leg signed.
Built-in controls
Cash management is the single highest fraud-risk surface in any MFI. The system enforces seven controls automatically — they cannot be bypassed without an audited override:
| Control | Enforcement | Override |
|---|---|---|
| Dual control on vault | Two distinct user ids required to open vault | None — system blocks single-user open |
| Maximum till float | Defined in cash policy, blocks transaction that would breach | Branch manager override, logged |
| Maximum overnight holding | Branch session cannot close with overage | Regional manager override, logged + email alert |
| Single transaction cap | Per-product per-channel limit | Compliance officer override + reason |
| Denomination audit trail | Every movement records bills × denomination | None |
| Variance escalation | Any unreconciled cent triggers incident | Cannot close EOD until variance has a case |
| CIT seal integrity | Seal number captured at branch + bank, mismatch blocks acceptance | None — physical investigation required |
Regulatory context (Kenya)
The Central Bank of Kenya does not directly regulate microfinance below the deposit-taking threshold, but two regimes apply to every MFI:
- **POCAMLA + FRC reporting** — single-cash transactions above KES 1,000,000 (USD 10,000-equivalent) trigger a Suspicious Transaction Report obligation; the system flags and queues these automatically
- **KRA receipts** — cash receipts above KES 100,000 must be supported by an ETIMS-compliant invoice or receipt; the cash module emits an ETIMS payload at receipt
- **ODPC privacy** — denomination capture is not personally identifying, but combined with member id it becomes PII; cash transaction logs follow the same 7-year retention as ledger
- **DTM tier (if applicable)** — deposit-taking microfinance banks under CBK Prudential Guidelines must hold cash within tightly defined limits and report monthly cash-management returns (CBK/PG/MFB/03)
Roles and segregation of duties
| Role | Can do | Cannot do |
|---|---|---|
| Teller | Open own till, transact, count, declare, close own till | Open vault, approve variance, accept CIT |
| Branch supervisor | Open vault (with co-signer), sweep tills, approve variance ≤ KES 5,000, accept CIT | Override cash policy, write off shortage |
| Branch manager | Override cash policy, approve variance ≤ KES 50,000, sign off branch session | Write off shortage > KES 50,000 |
| Regional manager | Approve variance ≤ KES 250,000, authorise overnight overage | Set institution-wide policy |
| Head of Treasury | Set policies, approve write-offs, escalate to board | Transact at till (segregation) |
| Internal audit | Read-only across all | Transact, approve, write off |
Where to start
If you are new to cash management, work through the pages in this order:
- **Cash policy** — define your limits before you let anyone touch cash
- **Vaults** — set up the branch vault and assign the two-key holders
- **Tills** — create one till per teller and link to a cash GL account
- **Branch session** — practice an open/close cycle in your sandbox tenant
- **End-of-day** — walk through the balancing wizard with a known variance
- **CIT** — configure your CIT carriers (Wells Fargo, G4S) and route templates
- **Incidents** — review the incident workflow and notification matrix
- **Dashboard** — bookmark the Treasury workspace for daily monitoring
Worked scenarios
Scenario — A full day at Kawangware branch
| Character | Role |
|---|---|
| Florence Achieng | Branch manager |
| Peter Otieno | Supervisor |
| Mary Mutua | Senior teller |
| Kimani Mwangi | Teller |
| Aisha Hassan | Teller |
Timeline
- 07:45: Florence and Peter unlock the vault under dual control. System logs both badges. (Vault session opened, opening balance KES 620,000)
- 07:55: Each teller draws KES 50,000 starting float from the vault. Three vault → till movements logged. (Vault balance KES 470,000; three tills × KES 50k)
- 08:00: Branch opens. First customers are loan repayments and small deposits. (Branch session OPEN)
- 11:20: Aisha disburses a KES 180,000 group loan in cash. Her till would breach KES 250k operating maximum — system flags. (Cash policy: till_max_balance check)
- 11:22: Peter sweeps KES 100,000 from Aisha's till to vault before the disbursement so post-payout she sits at KES 130k. (Till → Vault transfer logged dual-control)
- 13:00: Lunch rotation. Mary's till is locked when she steps away. Reopened with badge + PIN. (Till locked / unlocked events)
- 15:30: CIT pickup scheduled. Florence prepares two sealed bags (KES 800k principal float for HQ + KES 200k for KCB Mama Ngina). (CIT manifest drafted, seals 88412 / 88413)
- 16:00: G4S crew arrives. Florence and the senior crew member sign the handover. Bag seals match manifest. (CIT in-transit)
- 17:05: Branch closes to public. Tellers begin individual till close. (Three EOD wizards open)
- 17:18: Kimani's till has a KES 200 shortage. Recount confirms it. Peter raises a level-1 incident. (Incident INC/2026/0314 opened)
- 17:35: All tills returned to vault. Florence counts vault, runs the branch EOD wizard, signs off. (Branch session CLOSED, closing vault KES 540,000)
Outcome — Branch closes clean apart from a KES 200 documented shortage; CIT confirmed received at KCB at 17:48; Florence signs off at 17:42.
Reference
Models behind the section
| Model | Records | Description |
|---|---|---|
| mfi.cash.till | 1 per teller per shift | Active drawer with running balance |
| mfi.cash.till.session | 1 per till per day | Open-to-close audit of a single till |
| mfi.cash.vault | 1 per branch | Vault master with denomination ledger |
| mfi.cash.vault.movement | 1 per movement | Vault in/out, dual-control |
| mfi.cash.policy | 1 per branch (or branch group) | Limit set |
| mfi.cash.cit | 1 per CIT trip | Manifest with sealed bags |
| mfi.cash.cit.bag | many per trip | Sealed bag with denomination breakdown |
| mfi.branch.session | 1 per branch per day | Wrapper for vault + tills, drives GL cut-off |
| mfi.cash.eod | 1 per till per day + 1 branch summary | Balancing record |
| mfi.cash.incident | 1 per variance / event | Case file for shortage, overage, robbery, fraud |
Default thresholds (out of the box)
Edit in Cash policy.
| Threshold | Default | Effect when breached |
|---|---|---|
| Till operating maximum | KES 200,000 | Soft warning, requires sweep within 30 min |
| Till hard maximum | KES 250,000 | Blocks further cash-in transactions |
| Vault overnight maximum | KES 5,000,000 | Branch session cannot close until reduced or override |
| Single cash transaction | KES 1,000,000 | STR queued for FRC at transaction post |
| KRA ETIMS threshold | KES 100,000 | ETIMS payload emitted automatically |
| Variance auto-incident | KES 1 | Any variance creates incident — no exceptions |
| Variance officer cap | KES 5,000 | Supervisor can close incident |
| Variance manager cap | KES 50,000 | Branch manager can close incident |
| Variance regional cap | KES 250,000 | Regional manager required |
| CIT carrier hold limit | KES 10,000,000 | Per carrier liability cap before second carrier required |
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Teller cannot open till in the morning | Branch session not yet opened, or previous day's till session not closed | Supervisor opens the branch session first, then check yesterday's till — if a session is still OPEN, force-close via the EOD wizard with the supervisor. |
| Vault movement blocked with 'dual control required' | Only one badge swiped within the 2-minute window | Both badge-holders must tap within 120 seconds. If one is unavailable, the branch manager can elevate to manager + supervisor instead. |
| Cash policy blocks a legitimate disbursement | Disbursement would breach till maximum | Sweep excess from till to vault first via Till → Vault movement, then process the disbursement. |
| EOD reconciliation shows phantom variance with no obvious cause | Mid-day CIT sweep posted to wrong till, or a void was processed without reversing the cash movement | Run the till movement report for the shift. Look for un-paired Till↔Vault rows. Reverse the orphan. |
| CIT bag rejected at bank because seal does not match manifest | Seal numbers transposed on data entry or seal physically tampered | Treat as security incident: do not accept bag back without joint inventory; raise robbery/tamper incident; notify CIT carrier and bank security. |

