Step-by-Step: Posting a Collection Sheet (Counter Post)

The Collection Sheet Post Flow (/sheet/:hex/post or <sheet-post-page hex>) is the critical counter verification and atomic ledger commit gate. It ensures that physical cash handed over by a field loan officer is verified note-by-note before being posted to the General Ledger.


1. Segregation of Duties (SOD) Gate

  • Permitted Roles: Branch Tellers (teller), Branch Managers (manager), and Administrators (admin).
  • Refused Roles: Loan Officers (officer).
  • Refusal Reason: Field officers stage borrower collections in the field, but cannot post directly to the ledger. This eliminates fictitious collection entries, ghost loans, and cash skimming. Cash must be counted and accepted across the branch counter.

2. The Three Steps of Counter Posting

┌──────────────┐         ┌──────────────┐         ┌──────────────┐
│    Step 1    │  ────►  │    Step 2    │  ────►  │    Step 3    │
│  The Sheet   │         │   The Cash   │         │   Confirm    │
│(Staged Lines)│         │(Denominations│         │(Atomic Post) │
└──────────────┘         └──────────────┘         └──────────────┘

Step 1: The Sheet (What Was Staged in the Field)

  1. Dossier Header:
    • Displays scheduled borrower line count, total staged cash amount (e.g. 14 lines · KES 48,500), officer name, branch station, and meeting date.
  2. Itemized Line Breakdown:
    • Inspects each borrower’s row: borrower name, loan account reference, product name, delinquency status (DPD), and staged amount.
  3. Validation Pre-Flight:
    • The engine verifies that every line has an amount $> 0$ and that the sheet has not already been posted.
  4. Click Continue ›.

Step 2: The Cash (Counted Note by Note)

  1. Denomination Counter Grid: The teller physically counts cash in front of the officer and inputs counts into the responsive currency grid:
    • KES 1,000: Enter count (e.g. 40 $\to$ KES 40,000).
    • KES 500: Enter count (e.g. 14 $\to$ KES 7,000).
    • KES 200: Enter count (e.g. 5 $\to$ KES 1,000).
    • KES 100: Enter count (e.g. 4 $\to$ KES 400).
    • KES 50: Enter count (e.g. 2 $\to$ KES 100).
    • Coins: Enter total coin sum (e.g. 0).
  2. Real-Time Difference Tile:
    • Counted: Total physical cash calculated from denominations.
    • On the Sheet: Expected collection sum staged by officer.
    • Variance Tile:
      • Displays green Agrees if variance $= 0.00$.
      • Displays amber/red Over or Short if discrepancy exists.
  3. Mandatory Difference Note:
    • If $| \text{difference} | \ge 1.00$, the teller must input an explanatory note (minimum 4 characters) detailing the root cause (e.g. “Borrower John note damaged, officer to replace tomorrow”).
  4. Click Continue ›.

Step 3: Confirm & Atomic Execution

  1. Summary & Read-Back:
    • Summary reads: “Post KES 48,500 across 14 loans. The count agrees.”
    • Explains ledger transition: Sheet moves draft → posted, and journals are generated one per line.
  2. Mandatory Attestation Checkbox:
    • Teller must tick: ☑ “The cash is in the till and the lines are as collected.”
  3. Atomic Execution (POST /sheets/:hex/post):
    • Within an atomic database transaction (prisma.$transaction):
      • Debits Branch Cash Drawer GL 1101.
      • Credits Principal (1201), Interest (4100), Fees (4200), and Penalties (4300) per loan waterfall.
      • Advances borrower schedules and recalculates DPD.
      • Enqueues automated SMS payment receipts to all paying borrowers.
      • Changes sheet status to posted.
  4. Click The Sheet to view the completed ledger summary or All sheets to return to the feed.