Operator credentials, then your authenticator code. Sessions end after 15 idle minutes.
Every sign-in requires a 6-digit code from Google Authenticator, Microsoft Authenticator, or any standard authenticator app. First sign-in walks you through enrolment.
Activate GL 41180 · Reactivation fee income (mapped Form 1000 · 30220)
—
Finance · Kemi O.
There is deliberately no approve button on this list. Approval happens only inside the full review — after you have seen what changes, who asked, the before/after, and the evidence. An approval you could give without reading is not a control.
Customers
312,554 customers · type in the box to filter the table live
Tier 1
0
64%
Tier 2
0
27%
Tier 3
0
9%
Pending KYC review
0
oldest 2h 50m
No customers yet — this bank's book starts here
A brand-new tenant sees this, not a blank table. Two ways to begin: bring your existing customers across with the migration workbench (validated, tied out to the kobo), or onboard your first customer right now.
Customer
Type
Phone
Primary NUBAN
Tier
KYC
Total balance
Accts
Last activity
Risk
Chinedu Okafor
Individual
0803 221 4410
0234118765
Tier 3
Verified
₦4,182,330.55
3
14:32 today
Low
BABunmi Adeyemi
Individual
0805 114 9098
0234102211
Tier 2
Verified
₦482,120.00
1
yesterday
Low
HBHalima Bello
Individual
0902 337 5521
0234110034
Tier 3
Verified
₦2,930,700.10
2
22 Aug
Medium
ESEmeka & Sons Ltd
Corporate
0811 400 2287
0234099812
Tier 3
Verified · CAC
₦18,455,002.44
2
09:15 today
Low
NENgozi Eze
Individual
0703 992 1145
0234121490
Tier 1
Docs in review
₦61,240.00
1
19 Aug
Low
MIMusa Ibrahim
Individual
0908 220 7714
0234130267
Tier 2
Verified
₦734,910.85
1
07:58 today
Low
ANAdaobi Nwankwo
Individual
0812 664 0093
0234141822
Tier 1
BVN mismatch
₦8,300.00
1
17 Aug
Medium
GTGombi Traders Co-op
Corporate
0813 555 8102
0234150773
Tier 2
Verified
₦5,204,118.00
2
21 Aug
Low
0 selected
Rows 1-8 of 312,554 (server-side; sort and filters apply to the full base)page 1 of 39,070
Customer since Mar 2024 · Onitsha, Anambra · BVN verified · NIN verified · liveness passed · photo = KYC passport photograph on file
0803 221 4410 · chinedu.okafor@example.com · trader (building materials) · RM: Bola F. · branch: HQ Gombi · segment: SME-retail
Total balance
₦4,182,330.55
Daily limit used
₦250,000 / ₦5,000,000
Devices
2 bound
Risk score
Low · 12
What this customer is worth
Revenue (12 months)
₦84,220
fees ₦31,400 · net interest margin ₦52,820
Cost to serve
₦19,600
SMS, rail fees, agent commission, share of channel cost
Net contribution
₦64,620
the number that decides how hard to fight for them
Lifetime to date
₦158,400
since Mar 2024 · 2.4 years
Rank in base
Top 4%
by net contribution
Every figure comes from revenue attribution on real postings — the same source as the earnings dashboard, so a relationship manager and the CFO are never quoting different numbers.
Signals
Balance trend
+18% over 90d
Transaction frequency
Stable · 22/month
Products held
3 of 8 eligible
Salary/inflow pattern
Regular inflows, no payroll mandate
Credit behaviour
6/6 repayments on time
Churn risk
Low · 4%
Next best actions — ranked by expected value, with the reason attached
1
Offer a working-capital top-up (₦800k)
Perfect repayment record, turnover supports it, and his current facility is 61% repaid — the classic moment a competitor takes the relationship
+₦96,000/yr
2
Move payroll mandate to us
Regular third-party inflows suggest salary paid elsewhere; capturing the mandate makes the deposit sticky and cuts churn risk
+₦34,000/yr
3
Fixed deposit on the idle ₦3.9m
Savings balance has sat above ₦3m for 5 months earning 2.5% — a term product pays him more and funds us longer
+₦18,000/yr
4
Enable SMS alerts he has switched off
Alert suppression correlates with dispute volume; also a small fee line
+₦480/yr
These are suggestions with their reasoning shown, not automated decisions. Nothing here approves a loan, changes a price, or contacts a customer by itself — each one opens the proper governed flow, because a recommendation that can act on its own is a control failure.
Daily ₦5,000,000 · single ₦1,000,000 · no overrides active
Risk review
Low · 12 · next annual review Mar 2027
Every field here is edit-gated: contact changes need customer OTP, identity fields are read-only after verification (a correction is a new KYC event, never an edit), and every reveal of a masked number is itself an audited action.
NUBAN
Product
Balance
Held
Status
0234118765
Everyday Savings
₦3,912,330.55
₦0.00
Active
0234118772
Business Current
₦270,000.00
₦50,000.00
Active
0234118789
Fixed Deposit · 180d · 14%
₦500,000.00
—
Matures 12 Oct
NIP transfer ₦250,000 to GTBank · completed in 2.8 s
Logged in · device Pixel 8 · biometric
Amount block ₦50,000 placed on 0234118772 — court order ref CO/2214 · approved by 2 officers
Support note: requested statement for visa application — resolved
RC 1482091 · registered 2019 · customer since 2023 · TIN verified · building materials, Onitsha
Total balance
₦18,455,002.44
Directors
3
Signatories
3 · classes A/B
Mandate
v3 · any 2 incl. one A above ₦500K
References
1 of 2 confirmed
Every director is identity-verified and screened — matching Shinobi's director registry, plus PEP screening made visible
Director
Role
BVN
Screening
Shareholding
Emeka Nwosu
Managing Director
Verified
Clear
60%
Adaeze Nwosu
Director · Finance
Verified
Clear
30%
Chief O. Duru
Non-executive
Verified
PEP — EDD on file
10%
Mandate · v3 Active since 18 Aug
Up to ₦500,000
any one class-A signatory
₦500,001 – ₦5,000,000
any two, at least one class-A
Above ₦5,000,000
two class-A + board resolution on file
Signatories
Emeka Nwosu
Class A
specimen on file
Active
Adaeze Nwosu
Class A
specimen on file
Active
K. Obiora (accountant)
Class B
specimen on file
Active
The mandate is enforced in the payment path itself: a ₦3.12M transfer from this company is sitting in the Payments approval queue right now because this rule demands a second signatory — not because an officer remembered.
Current-account references — the account operates restricted until both confirm, and compliance sees the deferred list
Referee
Bank · account
Requested
Status
Okonkwo Holdings Ltd
Zenith · current ····8841
04 Mar 2024
Confirmed 12 Mar 2024
Nnewi Steel Traders
GTBank · current ····2205
04 Mar 2024
Pending · 2nd reminder sent
While a required reference is pending: outward transfers above the restricted threshold are held, and the account shows on the compliance deferred-references report — the account can never quietly operate unreferenced.
NUBAN
Product
Balance
Mandate applies
Status
0234099812
Corporate Current
₦18,255,002.44
v3
Active
0234099829
Duty-payments sub-account
₦200,000.00
v3
Active
The commercial agreement — which products this customer holds, at which negotiated terms, valid until when. What SDK.finance calls a “contract”: here it is versioned configuration binding the customer to products and the charge catalog, never a PDF someone has to remember.
Product / service
Terms
Negotiated override
Valid until
Status
Corporate Current
charge structure v14 (default)
—
open-ended
Active
Collections — virtual accounts
0.5% · cap ₦100 (catalog v4)
cap ₦80 · dual-approved 12 May
31 Dec 2026 · then reverts
Active
Bulk payments
₦20 per row · file limit 5,000
—
open-ended
Active
API access
2 keys · 120 req/min · IP allowlist
—
key rotation due Oct
Rotate soon
Every negotiated override carries an expiry and reverts to the catalog by itself — a discount can never quietly become permanent because everyone forgot it.
CAC certificate of incorporation
Verified against registry
MEMART (memorandum & articles)
Accepted
Board resolution — account opening & mandate
Accepted · BL-2024-03
Board resolution — mandate v3 change
Accepted · BL-2026-08
Director IDs (3)
All verified
Accounts
Every balance is a sum of ledger postings — nothing here is a stored guess
Open accounts
0
+1,310 this week
Dormant
0
6.3%
Post-no-debit
0
all dual-approved
Active liens
0
₦84.2M held
Recently touched accounts
Status changes, liens, and limit overrides — each row carries its approval trail
Holder: Chinedu Okafor · opened Mar 2024 · HQ Gombi · charge structure v14 (default)
Book balance
₦270,000.00
Held (lien)
₦50,000.00
Available
₦220,000.00
Daily limit used
₦0 / ₦5,000,000
Account economics (12 months)
Fee income generated
₦14,880
maintenance, transfers, statements
Funding value
₦9,240
what this balance saves us against wholesale funding
Direct cost
₦6,100
rail fees, alerts, channel share
Net contribution
₦18,020
Average balance
₦212,400
volatility low · sticky funding
Behaviour
Utilisation
Active · 22 txns/month
Channel mix
mobile 71% · POS 22% · branch 7%
Idle balance
₦150k+ idle 5 months
Charge exposure
structure v14 · no waivers
Limit headroom
uses 5% of daily limit
Next best actions
1
Sweep idle balance to a term product
₦150k has been idle five months on a 2.5% product; a 180-day placement pays the customer 14% and terms our funding
+₦9,400/yr
2
Review charge structure fit
Debit turnover puts him in a band where the standard structure over-charges relative to peers — a fairness check before he notices
retention
3
Release the expiring lien
Court order CO/2214 is the only thing blocking ₦50,000; the instrument expires in 12 days and nobody has diarised it
service
Nothing about this account exists in isolation — every linked thing is one click away, in both directions
Relationship
What
Detail
Holder
Chinedu Okafor
Tier 3 · 3 accounts · 1 loan
Sibling account
0234118765 · Everyday Savings
₦3,912,330.55 · repayment source for LN-7710
Sibling account
0234118789 · Fixed Deposit 180d
₦500,000.00 · matures 12 Oct
Loan
LN-7710 · Working capital
outstanding ₦1,046,220 · collected from 0234118765 (not this account)
Standing order
monthly 25th · ₦50,000
to GTBank 0122… (Mama)
Card
Verve ···· 8817
active · POS + web enabled
The balance IS this list — every figure above is a sum of these entries, nothing is a stored guess
Date
Entry
Debit
Credit
Balance
Correlation
22 Aug
Amount block placed — court order CO/2214 (two-phase hold)
—
—
270,000.00
c-88371
19 Aug
Inbound NIP · EMEKA & SONS
—
120,000.00
270,000.00
c-87104
15 Aug
POS purchase · SPAR Yola
34,500.00
—
150,000.00
c-86220
12 Aug
Book transfer from 0234118765
—
100,000.00
184,500.00
c-85913
Limit
Tier default
Override
Used today
Daily transfer
₦5,000,000
—
₦0
Single transfer
₦1,000,000
—
—
Channels
mobile ✓ · POS ✓ · partner API ✓ · USSD ✗
—
Every lien is its OWN record with its own lifecycle — never one merged blob. Partial release and enforcement act on a named lien, and its full history survives forever.
Mechanics, honestly: a lien is a two-phase hold in the ledger. A PARTIAL release is an atomic swap — the old hold is voided and a smaller hold placed in one linked, all-or-nothing batch — so the lien’s remaining amount is always exact and its lineage (L-0142 throughout) is unbroken. ENFORCEMENT moves held money to a designated internal suspense ledger — never directly to income — with dual approval and evidence attached; see the wizard.
Can transfer
On
Cash-out at agents
Off
Transaction second factor
PIN + biometric above ₦50,000
Settlement control
Standard · T+0 internal
Charge structure
Default v14
Post-no-debit
Not set
Account closure
Eligible after lien release
Deceased / estate
Not flagged
Virtual accounts
Collection rails: every payer gets their own NUBAN, so money arrives pre-labeled and reconciles itself
Active virtual NUBANs
0
+2,140 this week
Collections today
₦0M
+14%
Auto-matched
0%
sweeps < 5 s
Unmatched queue
0
oldest 38 min
Expected deposits open
0
partner-registered
Pools
Static pools live forever; dynamic pools mint per-invoice numbers that expire. Sweeps post through the same idempotent ledger path as everything else.
Pool
Owner
Type
Issued
Collected today
Sweep target
State
VA-KOBO-01
KoboPay Ltd
Static · per sub-customer
22,408
₦148,220,400
partner settlement wallet
Active
VA-AGRO-02
AgroLend NG
Dynamic · per invoice · 24h expiry
1,204 open
₦42,110,000
hold until matched
Active
VA-SCH-03
Gombi Schools collections
Static · per student
3,180
₦24,470,500
school current account
Active
VA-OLD-00
Retired pilot pool
Static
2,000
₦0
—
Tombstoned · inbound rejected
Inbound collections — live
Every credit resolves to matched or lands in the queue below — a payment can never silently sit in suspense. Try resolving the unmatched one.
Time
Virtual NUBAN
Payer
Amount
Matched to
State
14:33:02
9902114408
GTBank · ADEBAYO K.
₦86,000
KoboPay · sub-cust 8841
Matched · swept 2.1s
14:32:47
9902551203
Access · INV-2244 ref
₦1,250,000
AgroLend · invoice 2244
Matched · expected deposit
14:31:20
9902114408
UBA · C O EMENIKE
₦86,000
—
Unmatched · payer name differs
14:30:44
9902660071
Zenith · HALIMA B.
₦45,000
Gombi Schools · student 0771
Matched · swept 1.8s
14:29:12
9902553390
Opay · expired invoice
₦18,500
invoice 2199 · expired 09:00
Rejected · auto-returned to sender
Expected deposits — partner-registered
A partner announces an inbound before it happens; arrival auto-matches and fires their webhook
AG-3321
AgroLend · ₦2,400,000 · expires 18:00
Waiting
KB-1108
KoboPay · ₦680,000 · expires 16:30
Waiting
AG-3318
AgroLend · ₦1,250,000 · INV-2244
Arrived 14:32 · webhook 200
Collections by pool — today
KoboPay static ₦148.2M
AgroLend dynamic ₦42.1M
Gombi Schools ₦24.5M
Match rate, sweep latency, and unmatched aging export per partner — and every virtual-account balance rolls up into the CBN return schedules automatically.
The rule that keeps a reused number from ever meaning two things: STATIC numbers live forever (a wallet number that could ever mean someone else is not a wallet — closure tombstones it, never reuses it). DYNAMIC numbers cycle through four states, and money can only ever land on an ACTIVE one.
Available (rested)
Active · generation N · amount-bound · expiring
Paid / Expired
Quarantine · the late-payer window
Back to Available → generation N+1
Allocation (programmatic)
Idempotent by the partner’s own reference — a gateway retrying its API call gets the SAME number back, never two numbers for one checkout. Draws take the LONGEST-rested number first, maximizing effective quarantine.
What happens after use / expiry
The number is NOT immediately returned. It rests in quarantine (this pool: 30 days; checkout pools can run shorter) — any payment arriving during the rest is returned to the sender automatically, because a number between lives accepts nothing.
Reuse safety · generations
Every reissue is a new GENERATION with its own record — the journal never confuses gen 3’s money with gen 2’s. Amount binding adds the second wall: a late payment carrying the OLD invoice’s amount on a reused number goes to the visible queue for a human, never auto-credits the new owner.
Capacity today
100,000reserved to KoboPay1,204active3,811resting in quarantine2,090recycled & reusable92,895never used
95% still available · alarm at 20% ·
Gateway scale
30,000 allocations/week ≈ 4,300/day. Fresh numbers are spent first, so this 100,000 block lasts ~23 weeks on virgin supply alone — by which time the earliest numbers have rested ~5 months, far beyond the 30-day minimum. The dial: quarantine length vs block size, and this pool shows the arithmetic rather than hiding it.
Top to bottom, one payment: a KoboPay sub-customer pays into THEIR OWN virtual NUBAN → money is pre-labeled on arrival → matched to the sub-customer automatically → fee (0.5%, cap ₦80) split to income → net swept to the partner settlement wallet → webhook tells KoboPay in seconds. Nothing is reconciled by a human because nothing arrives unlabeled.
Payer sends ₦25,000 to 9021… (their virtual NUBAN)
Inbound credit · provisional → confirmed
Matched: sub-customer #8812
Fee ₦80 → income · net ₦24,920 held
Swept to partner wallet · <5s
Webhook 200 · KoboPay credits their user
Every arrow above is a ledger posting or a journaled event — the pool’s day reconciles to the kobo because the flow IS the reconciliation.
continuous (on match) · alternative: hourly / end-of-day batch
Matching rule (static pool)
1 virtual NUBAN = 1 sub-customer, forever — arrival IS the match
Fee application
on match, before sweep · catalog v4 + agreement override (cap ₦80, expires 31 Dec)
Change any of this
A static pool almost never mismatches; these are edge cases — and each is a decision, never a write-off
Arrived
Amount
Problem
14:02
₦50,000
paid to a TOMBSTONED virtual NUBAN (KP-9005, closed 11 Jul)
Event
Endpoint
Delivery
collection.matched
https://api.kobopay…/hooks
99.98% · p95 1.2s
signed · HMAC
sweep.completed
same
100%
retries 0s→24h · DLQ
Failed deliveries retry on the standard ladder and dead-letter with full history — the partner can also replay from their portal. A webhook is never the source of truth: KoboPay can query the collections API for the authoritative list.
Payments operations
Every transfer is in exactly one state · no transfer can be lost
NIBSS NIP DEGRADED — since 14:41 (23 min)
Outbound interbank submits are queuing, not failing: 231 transfers held safely with their money under hold — none lost, none double-sent. Status queries paused; auto-resume on recovery with the idempotent replay guarantee. Customers see an honest "delayed — your money is safe", never a false failure. Internal book transfers and inbound credits are unaffected.
Nothing here has an approve button — Review opens the full before/after and evidence first; approval lives inside the review
Action
Proposed by
Amount
Age
Approvals
Reversal — duplicate POS debit, Agent 00412
Tunde A.
₦620,000.00
0 of 2
Book transfer above corporate threshold
Partner API · Emeka & Sons
₦3,120,000.00
1 of 2
Manual journal — branch expense correction
Finance · Kemi O.
₦48,200.00
0 of 2
In-doubt transfers — the reconciler is on them
Both directions live here. Outbound ↗ in-doubt = we sent money and NIBSS has not given a final answer — the customer's money sits safely HELD (never gone) while the status query (TSQ) cycles until a final answer forces completion or automatic refund. Inbound ↙ in-doubt = another bank says they sent money to us — the credit is PROVISIONAL (visible but not spendable) until settlement confirms it, so a forged or failed inbound notice can never become spendable money. Click a row for its full state history.
Direction
Reference
Customer
Amount
Counterparty
State
TSQ cycle
Next
Outbound ↗
PUP-TRF-8E03D4
Halima Bello
₦1,400,000.00
Zenith · 2081…
HELD · awaiting NIBSS
3 of 12
40 s
Outbound ↗
PUP-TRF-6B22E8
Musa Ibrahim
₦75,000.00
Access · 0044…
HELD · awaiting NIBSS
1 of 12
12 s
Outbound ↗
PUP-TRF-5A97C2
Emeka & Sons Ltd
₦960,000.00
UBA · 1023…
FINAL · posting
4 of 12
confirming
Inbound ↙
IN-GTB-99A1E0
Chinedu Okafor
₦250,000.00
GTBank · 0044…
PROVISIONAL · awaiting settlement
—
settle window
Loans
Portfolio ₦412M · provisioning computed continuously per CBN prudential rules
Active loans
0
+38 this week
Portfolio
₦0M
+3.2%
Portfolio at risk (30d)
0%
−0.4 pts
Provisions held
₦0M
auto-posted
Applications in review
0
SLA on track
Application pipeline
Each application is an orchestrated process — nothing waits invisibly
Click a loan for its 360 — schedule, classification history, collateral, postings. One full profile is mocked: LN-7710.
Loan
Borrower
Product
Outstanding
Next due
Days overdue
Class
LN-7710
Chinedu Okafor
Working capital · 12m
₦1,046,220.00
01 Sep
0
Performing
LN-7581
Bunmi Adeyemi
Micro trade · 6m
₦118,400.00
04 Sep
0
Performing
LN-7203
Gombi Traders Co-op
Group lending · 9m
₦764,000.00
28 Aug
12
Watchlist
LN-6844
Halima Bello
Working capital · 12m
₦402,110.00
15 Jul
41
Substandard
LN-6019
Musa Ibrahim
Micro trade · 6m
₦58,300.00
02 May
115
Lost · 100% provisioned
Provisioning ladder — CBN prudential floors, tenant may tighten, never loosen
Classification and provisioning are computed continuously from days-overdue — this ladder IS the rule. A tenant value below the CBN floor is refused at save, not warned about.
Class
Days overdue
CBN floor
This bank
Portfolio in class
Provision held
Performing
0
1%
1%
₦379.1M
₦3.79M
Watchlist
1–30
5%
7% · tightened
₦17.5M
₦1.23M
Substandard
31–60
20%
20%
₦6.2M
₦1.24M
Doubtful
61–90
50%
50%
₦3.7M
₦1.85M
Lost
90+
100%
100%
₦5.9M
₦5.90M
Specific provisions above sum to ₦14.01M; the ₦18.7M KPI adds the general provision on the performing book and interest-in-suspense (both broken out in the Reports drill-down). Nothing here is hand-entered — the ladder drives postings automatically as loans age, and every provision movement is a ledger entry with this ladder version stamped on it.
Arrears buckets
Aging drives provisioning automatically
Current ₦379.1M
1–30 days ₦17.5M
31–90 days ₦9.9M
90+ days (non-performing) ₦5.9M
Collections today
Auto-debit with retry policy · failures queue for follow-up
Instalments collected
₦8,204,110
96.2%
Retry queue
₦312,400
2nd attempt 18:00
Escalated to recovery
₦64,900
3 loans
Restructuring, recovery & write-offs
The lifecycle beyond the pipeline — every step dual-approved, every provision auto-posted
LN-8611
Restructure · tenor 9 to 12 months · customer letter on file
Credit review task assigned to Tunde A. (queue: credit review)
AML screening — clear · directors screened, no PEP change since EDD on file
Scorecard 714: repayment history (no priors) · turnover ₦84M/yr · sector weight applied
Application submitted via the corporate portal · signed by E. Nwosu (class A)
Documents on the application
Management accounts · FY2025
Received
Stock purchase pro-forma · supplier
Received
Board resolution to borrow
Requested · 11:42
Why this page exists: everything about ONE application in one place — the stage, the history, the papers, the numbers. Access is role-gated (credit and ops see it; a teller does not) — visibility is controlled by roles, never by hiding the page from everyone.
Repayment mechanism — how the money actually comes back
Repayment source account
0234118765 · Everyday Savings — his own deposit account; the loan is NOT paid “into” the loan, it is collected FROM here
Collection method
auto-debit at 06:00 on each due date · standing instruction signed at booking
If the debit fails
retry 18:00 same day → +1 day → +3 days · partial balance is taken as a PART-payment · customer notified at every step · day-1 overdue starts the classification clock automatically
Allocation order
penalties → interest → principal (CBN order) — fixed by the engine, not by the officer
Early / extra payment
allowed any day from the app — recomputes against outstanding principal; early settlement quotes the exact payoff to the kobo
Change source account
Generated by the annuity engine at disbursement — principal conserved exactly (the final installment absorbs the rounding kobo, never the customer)
#
Due
Principal
Interest
Installment
Status
1
01 Apr
₦111,840
₦30,000
₦141,840
Paid 01 Apr
2
01 May
₦114,077
₦27,763
₦141,840
Paid 01 May
3
01 Jun
₦116,358
₦25,482
₦141,840
Paid 03 Jun · 2d grace
4
01 Jul
₦118,685
₦23,155
₦141,840
Paid 01 Jul
5
01 Aug
₦121,059
₦20,781
₦141,840
Paid 01 Aug
6
01 Sep
₦123,480
₦18,360
₦141,840
Due next
7–12
Oct – Mar
₦794,501
₦56,539
₦141,840 × 6
Upcoming
Totals
₦1,500,000
₦202,080
₦1,702,080
paid ₦709,200 · remaining ₦992,880
Is this loan actually profitable?
Interest earned to date
₦127,181
5 instalments collected
Fees earned
₦7,500
processing fee at disbursement
Cost of funds
₦38,400
what the money cost us to lend
Provision cost
₦10,462
held at 1% · released as principal falls
Operating cost
₦9,200
origination, monitoring, collections share
Net contribution to date
₦76,619
projected ₦141,300 over the full term
Risk-adjusted return
18.4%
against a 12% hurdle · comfortably above
Risk signals
Repayment behaviour
6/6 on time · 1 within grace
Collection method
Auto-debit, never failed
Source-account balance
Covers next instalment 27x
Collateral cover
1.4x · revaluation due Feb 2027
Guarantor exposure
Also guarantees LN-8842
Early-settlement likelihood
Moderate · balance trend rising
Next best actions
1
Pre-qualify a top-up at 61% repaid
Clean record and rising turnover; the top-up moment is where good borrowers get poached
+₦96,000/yr
2
Diarise the collateral revaluation
Cover is 1.4x on a Feb-2027 valuation; a stale valuation is how cover silently disappears
risk
3
Flag the guarantor concentration
Emeka Nwosu guarantees this loan AND LN-8842 — correlated exposure the single-obligor view should see
risk
Profitability here is per-loan, not per-product average: cost of funds, provisions and operating cost are attributed to THIS loan, so a decision to restructure, top up or decline is taken on what this borrower actually earns the bank.
Classification is computed from days-overdue against the provisioning ladder — it moves by itself, and every move posts its provision
Performing · 0 days overdue · 1% specific provision ₦10,462 held
Instalment 3 paid 2 days late — inside grace; no reclassification, event logged
If instalment 6 goes unpaid, the clock is visible here from day 1 — and at day 31 the loan moves to Watchlist and the 7% provision posts, without any human remembering to do it.
Stock hypothecation — building materials inventory
valued ₦2,100,000 · 12 Feb
Deed on file
Guarantor — Emeka Nwosu (director, Emeka & Sons)
BVN verified · consent signed
Active
Collateral cover 1.4× outstanding. Revaluation due Feb 2027 — the registry tracks the date and opens a task; it cannot silently lapse.
When
Event
Amount
Ledger legs
01 Aug
Instalment 5 collected
₦141,840
DR customer · CR loan principal ₦121,059 · CR interest income ₦20,781
01 Aug
Provision released (principal down)
₦1,211
DR provision · CR P&L
02 Mar
Disbursement
₦1,500,000
DR loan · CR customer 0234118765 · fee ₦7,500 CR income
Every row is a real double-entry posting — click-through to the GL journal in the accounting console; the loan can never disagree with the books because these ARE the books.
No restructures on this loan
When a restructure is approved, it appears here with the old and new schedules side by side, who proposed and approved it, and the customer instruction that justified it — the original schedule is never overwritten.
Fixed deposits
₦92.4M under management · interest accrues daily through the ledger
Active deposits
0
+11 this month
Principal held
₦0M
+6.0%
Maturing in 30 days
0
₦9.1M
Avg rate
0%
tenor-weighted
Maturing soon
Rollover instructions captured in-app; unanswered maturities pay out to the linked account
Ref
Customer
Principal
Rate
Tenor
Matures
Instruction
FD-2210
Chinedu Okafor
₦500,000
14.0%
180d
12 Oct
Roll principal
FD-2190
Halima Bello
₦2,000,000
13.5%
90d
02 Sep
Awaiting choice
FD-2144
Gombi Traders Co-op
₦1,500,000
12.8%
365d
28 Aug
Pay out
Premature termination requests
Penalty computed by the product's rule, shown to the customer before they confirm
FD-2201
Musa Ibrahim · ₦300,000 · 42 days early
penalty ₦4,830
Awaiting dual approval
Design preview · this screen does not read the ledger yet. Every figure below is illustrative sample data, not this bank’s records.
Bills & value-added services
Two-phase vending: hold, vend, confirm or auto-reverse — no ambiguous endings
MTN · 99.9% · 1.1s
Airtel · 99.7% · 1.3s
DSTV · 99.4% · 2.0s
IBEDC · 91.2% · failover to backup provider
EKEDC · 99.1% · 1.8s
Vends today
0
+12%
Value
₦0M
+9%
Auto-reversed
0
0.29% · all refunded
In doubt
0
re-querying
Vend monitor
The IBEDC failure below refunded itself before the customer could call support
Time
Customer
Service
Amount
Provider
State
14:31:12
Ngozi Eze
Electricity prepaid
₦12,000
IBEDC · primary
Failed → auto-reversed 14:31:58
14:31:40
Ngozi Eze
Electricity prepaid · retry
₦12,000
IBEDC · backup
Token delivered
14:30:52
Bunmi Adeyemi
Airtime
₦5,000
MTN
Completed · 1.1s
14:30:18
Agent 00412
DSTV Compact
₦19,800
DSTV
Vend sent · confirming
Design preview · this screen does not read the ledger yet. Every figure below is illustrative sample data, not this bank’s records.
Agency & POS
1,204 agents · 1,431 terminals · commission visible to agents in real time
Active agents
0
+18 this month
Agent volume today
₦0M
+11%
Terminals online
0
95.2%
Float requests
0
rule-checked
Open disputes
0
oldest 1d 4h
Float requests — the single-pending rule at work
An agent can hold one pending request; caps derive from their own 30-day volume. Try approving both rows.
Agent
Aggregator
Requested
Daily cap
Check
00412 · Nnewi Market
SE Aggregation Ltd
₦400,000
₦960,000
Within cap
00891 · Gombi
NE Agents Co
₦1,200,000
₦700,000
Exceeds cap
Terminal estate
Full device lifecycle: assign, replace, transfer, sync to the terminal-management system
Terminal
Serial
Agent
Model
Last seen
State
2PUP0412
SN-88213307
00412 · Nnewi
PAX A920
2 min ago
Online
2PUP0508
SN-88214112
00508 · Yola
PAX A920
6 hr ago
Offline
2PUP0733
SN-88216620
unassigned
Topwise T1
—
In store
Teller & cash operations
Tills and vaults are ledger accounts — a shortage surfaces the same evening, attributed to a session
Open tills
0
2 branches
Cash in tills
₦0M
live
Vault balance
₦0M
HQ · Gombi
Today's variances
₦0.00
4 clean closes
Till sessions
Try closing till 03 — the reconciliation runs before your eyes
Till
Teller
Opened
Opening float
Expected now
State
TILL-03
Ruth D.
08:02
₦500,000
₦823,400
Open
TILL-04
Ibrahim S.
08:05
₦500,000
—
Closed 14:02 · ₦0.00 variance
TILL-05
Amina K.
08:11
₦300,000
₦412,150
Open
Cheque register
CHQ-0088
Emeka & Sons Ltd · ₦1,500,000
Clearing · day 2 of 3
CHQ-0087
Gombi Traders Co-op · ₦480,000
Cleared · funds released
Design preview · this screen does not read the ledger yet. Every figure below is illustrative sample data, not this bank’s records.
Risk & findings
The apparatus an examiner looks for: an approved framework, an owned register, indicators with thresholds, and every finding tracked to evidence of closure
ERM framework
v2 · unapproved
Board approval outstanding 214 days
Risks on register
0
6 extreme · 11 high
KRIs breaching
0
2 at regulatory limits
Open findings
0
17 from the last examination
Implementation rate
0%
1 of 18 closed
THE GOVERNANCE GAP THE EXAMINERS NAMED
The Enterprise Risk Management Framework exists but was never Board-approved; the risk function is absent from the organogram; the Risk Management Committee did not meet during the period. Every item below is tracked here precisely so that the next examination reads differently — the register cannot be closed without evidence, and it ages in public.
Every examiner recommendation, with an owner, a due date and the evidence that closes it. A finding raised twice escalates by itself — a regulator repeating themselves is telling you the control never existed.
Finding
Recommendation
Owner
Due
Overdue
Status
F-2026-02 Critical
Make additional provision of ₦25.59m to meet the examiners' recommended provisions
CFO
30 Jun 2026
31d
Overdue
F-2026-07 Critical
The Board and Management should approve the Enterprise Risk Management Framework
MD
30 Apr 2026
92d
Overdue
F-2026-11 Major · repeat
Reconcile accounts with correspondent banks monthly repeat of F-2024-03
Finance
31 May 2026
61d
Evidence submitted
F-2026-08 Major
Board committees should be functional and meet at least once a quarter
Company Sec.
30 Sep 2026
—
In progress
F-2026-15 Moderate
Review the compliance manual to guide the compliance officer
Compliance
31 Dec 2026
—
Closed · evidence
Showing 5 of 23 · 17 open from the 31 March 2026 examinationAgeing report →
A finding cannot be closed by the person who owns it, and cannot be closed at all without evidence attached. Accepting a risk instead is allowed — but it is a Board decision, recorded with its rationale, and it stops the clock honestly rather than quietly.
Inherent risk, the controls, what they actually buy, and the residual position — each with a named owner and a review date the system computes rather than remembers
Risk
Category
Owner
Inherent
Controls buy
Residual
Treatment
Review
Every loan is non-performing
Credit
CRO
25
0
25 extreme
Mitigate
overdue 364d
Depositor concentration
Liquidity
CFO
20
8
12 high
Mitigate
due 30 Jun
No risk function in the organogram
Operational
MD
20
0
20 extreme
Mitigate
overdue 364d
Partner float concentration
Liquidity
CRO
16
4
12 high
Mitigate
due 15 Jul
KYC gaps on migrated customers
Compliance
Compliance
16
7
9 moderate
Mitigate
due 30 Jun
Single core-banking dependency
Technology
IT
12
6
6 moderate
Mitigate
due 31 Aug
The register refuses two things by construction: a risk with no owner (that is a risk noticed, not managed), and a residual score above its inherent score (controls cannot make a risk worse — if the assessment says so, the assessment is wrong).
Counted from the register, never drawn by hand — click any cell to see the risks inside it
Appetite is what the Board says is acceptable; tolerance is where it escalates; the regulatory limit is where it stops being our decision. An indicator that breaches quietly is not an indicator.
Indicator
Current
Appetite
Tolerance
Regulatory
Escalation
Portfolio at risk
100%
1%
2%
5%
Board + regulator
Liquidity ratio
7.82%
35%
25%
20%
Board + regulator
Capital adequacy
−6.09%
15%
12%
10%
Board + regulator
Top-20 depositor share
31%
25%
40%
—
Management
Unreconciled items > 30 days
1
0
3
—
Management
Findings overdue
17
0
2
—
Board
Losses AND near misses — the near miss is the cheapest lesson available, and the detection gap is the number that improves
Where entries come from — two doors, one register
Automatic. The platform posts an event here the moment its own audit trail records something the risk register cares about — the vault opened outside the cash window, a till that closed short, a customer's full details revealed without an open ticket, a supervisor override, a burst of failed sign-ins. It arrives already linked to the risk it belongs to; a person only classifies it: real loss, near miss, or noise. Nobody has to remember to write it down — the system saw it happen.
Manual. Anything a human notices that the system cannot see — a vendor invoice paid twice, a customer complaint that reveals a process gap — goes in through the Report incident button and lands in the same register, same fields, same discipline.
What an entry does once it exists
Every entry recomputes this screen by itself: the loss total, the near-miss count, the average detection gap, and the risk indicators on the KRI tab all read from the register — none of them is typed in. A loss above ₦1m goes straight into the Board pack; an event on a risk that is already outside appetite escalates per the KRI ladder. And an entry is never deleted — a misfiled one is reclassified, with both the mistake and the correction kept, because the examiners read this register too.
Net loss (12m)
₦5.29m
1 event
Near misses
0
controls worked
Avg detection gap
0 days
target under 2
Recovered
₦0
0% recovery rate
Event
Occurred
Discovered
Gap
Net loss
Control that failed
Unreconciled correspondent balance
10 Jan 2026
01 Mar 2026
50d
₦5,292,324
Nostro reconciliation — never performed
Duplicate posting near miss
01 Feb 2026
02 Feb 2026
1d
₦0
None — the day-close gate caught it
Event feed — posted automatically from the audit chain, awaiting classification
These wrote themselves. Classify each one: loss, near miss, or noise — the decision is logged with your name
Event
When
Source
Linked risk
Status
Vault opened outside the cash window
today 06:12 · Yola
audit AUD-88123
Operational · cash & vault
auto-captured
Till 03 closed ₦4,200 short
yesterday 17:58 · Gombi
audit AUD-87902
Operational · cash & vault
auto-captured
Customer PII revealed without an open ticket
23 Aug 14:31
audit AUD-87710
Operational · IT & access
auto-captured
Supervisor override on a blocked transfer
22 Aug 11:04
audit AUD-87544
Compliance & conduct
classified · near miss
The feed is the answer to "how do entries get made": the audit trail already records every vault opening, till close, PII reveal and override — the risk register subscribes to it. What needs a human is only the judgement, never the remembering.
"The Board committees did not meet during the period." A calendar with attendance and minutes makes that sentence impossible to write again.
Committee
Required
Last met
Next due
Attendance
Minutes
Status
Board Risk Management
Quarterly
never
overdue
—
—
Never convened
Board Audit
Quarterly
Nov 2024
overdue 500d
3 of 5
filed
Overdue
Board Credit
Quarterly
Nov 2024
overdue 500d
4 of 5
filed
Overdue
ALCO
Monthly
never
overdue
—
—
Not constituted
Management Risk
Monthly
never
overdue
—
—
Not constituted
Each row carries its own pack: the papers that went out, who attended, the minutes, and the decisions taken — which become findings with owners when they are actions. A committee that has not met shows as never convened rather than simply blank, because blank reads as an oversight and this is a fact.
Compliance & AML
Filing clocks are real deadlines — the STR window is 24 hours from detection
Open cases
0
1 urgent
STRs filed this month
0
all inside 24h
CTRs auto-generated
0
≥ ₦5M rule
Screening hits pending
0
review today
Case queue
Click a case for its evidence bundle
Case
Pattern
Subject
Exposure
Filing clock
Assigned
A-2214
Structuring (sub-threshold)
Adaobi Nwankwo + 3 linked
₦8,740,000
Kemi O.
A-2215
Velocity spike
Musa Ibrahim
₦1,120,000
review today
Kemi O.
A-2216
Sanctions near-match
Inbound remitter
₦440,000
funds held
unassigned
A-2211
New-account burst
Agent 00891 openings
—
cleared — false positive
closed
KYC review queue — the busiest desk of the day
Every item opens its full review: documents, checks, and the face-match evidence side by side — same review-first rule as money
The AML/KYC page of the CBN return — generated, not hand-ticked
AML/KYC returns rendered to agencies
Yes — evidence attached
STR filings inside deadline
3 of 3
Watchlist screening coverage
100% of book
Consent & data-subject rights (NDPA)
Consent is per purpose and revocable; a revocation is honoured everywhere the same minute. Requests carry statutory clocks.
Chinedu Okafor · transactional alerts
Granted · Mar 2024
Chinedu Okafor · marketing
Revoked 12 Aug · honoured
Access request · CUS-11840
Due in 6 days
Erasure request · CUS-09121
Legal-hold check
AML rule thresholds · v9
Compliance-owned configuration — every change dual-approved, every version kept
Velocity windows
1h · 24h · 7d · 30d
New-beneficiary hard cap
₦3,000,000 / day
Structuring watch band
₦4.5M — ₦5M
CTR auto-file threshold
₦5M individual · ₦10M corporate
regulator-anchored
Design preview · this screen does not read the ledger yet. Every figure below is illustrative sample data, not this bank’s records.
Process orchestrator
Durable business processes · nothing stalls silently · deadline clocks are live
Running now
0
11 definitions
Waiting on humans
0
4 queues
SLA breaches
0
escalated
Completed today
0
0 failed
Loan approval · instance LN-8842
₦2,000,000 working capital — Emeka & Sons Ltd · started 11:20 · definition version 7 · every step journaled
application received
credit score · 714
AML screen · clear
credit review · Tunde A. ·
approve → disburse
notify + CRMS
Find an instance
Stuck instances — the 15-minute detector
An instance that stops moving without a reason alerts at 15 minutes — nothing can wait invisibly. Every intervention below is dual-approved and journaled onto the instance.
Instance
Definition
Stuck at
For
Why
VD-88213
vend-airtime v4
provider confirm
MTN requery exhausted · refund pending window
LN-8839
loan-approval v7
credit review
assigned officer signed out · queue empty at Yola
Human task queues
Each task opens with full context in a side panel — no tab hunting
Queue
Waiting
Oldest
SLA
Online
Credit review
9
1h 12m
on track
3 officers
KYC document review
18
2h 50m
1 near breach
2 officers
Reversal approvals
4
2h 14m
1 breached · escalated
leads paged
Dispute responses
6
48m
on track
4 agents
Recently completed instances
TU-99104
Tier upgrade · Halima Bello
6 steps · 3h 40m
Completed 13:58
DS-40021
Dispute · Agent 00412 double-debit
9 steps · 1d 2h
Refunded · evidence archived
RV-77310
Reversal review · ₦120,000
4 steps · 22m
Auto-cleared under threshold
Versions — loan-approval
A published version is immutable; an edit forks the next version as a draft. In-flight instances ALWAYS finish on the version they started with — a rule the engine enforces, not a convention.
Version
Status
Instances
Changed
v8
Draft
—
threshold ₦1m → ₦750K · by Adaeze O.
v7
Active
3 running · 1,208 completed
18 Aug · dual-approved
v6
Retired
0 running · 2,441 completed
02 Jun
Process definitions
Versioned, code-reviewed artifacts deployed through the pipeline — click one for its map. In-flight instances always finish on the version they started with.
Definition
Version
Trigger
Started today
Human SLA
Status
loan-approval
v7
event · loan.application.submitted
84
4h
Live
tier-upgrade
v4
event · kyc.tier_requested
22
6h
Live
onboarding-review
v2
event · kyc.docs_submitted
61
8h
Live
dispute-resolution
v3
event · dispute.opened
9
24h
Live
reversal-review
v5
API + threshold rule
14
4h
Live
fd-maturity
v2
schedule · daily 06:00
34
—
Live
dormancy-sweep
v1
schedule · weekly Mon 02:00
—
—
Live
collections-retry
v2
schedule · daily 18:00
—
—
Live
account-closure
v2
API · console action
6
24h
Live
estate-settlement
v1
event · customer.deceased_flagged
0
legal review
Live
agent-onboarding
v3
event · agent.application
2
8h
Live
loan-approval · version 7 Live since 01 Aug
The map an examiner reads: every step, every branch, every deadline — and which queue owns the human step
trigger · loan.application.submitted
auto checks · score + AML + limits (parallel, retried)
human task · Credit review queue · SLA 4h · escalates 30m before breach
branch · approve / decline
disburse (dual-approved ≥ ₦1M)
notify + webhook + CRMS queue
v7 activated — added collateral-check step for loans above ₦5M · proposed Tunde A., approved Eli S.
v6 — SLA tightened from 8h to 4h after the pipeline review
v5 — auto-approve lane added for scores ≥ 720 under ₦500K
Process builder
Drag steps from the palette into the lane (or click a chip to add). Drag steps onto each other to reorder, click one to rename it, then validate, run a test instance, and save it as a draft definition.
▸ Trigger
⚙ Service call
☺ Human task
⎇ Condition
⏱ Timer
✉ Notify
⇄ Ledger post
■ End
Drag steps here to build the process — start with a Trigger
Step configuration
Click a step to configure it below the lane
How this works in production: the designer's output compiles to a versioned definition, goes through review like any code, and activates dual-approved — in-flight instances always finish on the version they started with. The simulation you run here uses the same engine semantics: service steps retry, human tasks genuinely wait, and every step is journaled.
Connection registry — where credentials actually live
A step never holds a secret. It names a connection; the connection references a credential in the vault. Rotate the credential and every process keeps working — nothing to edit, nothing leaked into definitions or journals.
Connection
Auth
Credential (vault reference)
Rotated
Health
NIBSS · NIP
mTLS + signed requests
vault: nibss/nip-prod
12 Aug
Healthy · 240 ms
QoreID · identity
API key
vault: qoreid/api-key
30 Jul
Healthy · 610 ms
VAS · MTN
bearer token
vault: vas/mtn-token
18 Aug
Healthy · 1.1 s
Partner webhook · KoboPay
HMAC signing secret
vault: partners/kobopay-whsec
02 Aug
Healthy
Ledger / Customers (internal)
service identity · short-lived
issued per call
automatic
Healthy
Queue service levels
Deadlines are configuration the business owns — changing one is dual-approved like everything else
Queue
SLA
Escalates to
Warning
Credit review
4h
head of credit
30m before
KYC document review
8h
compliance officer
1h before
Reversal approvals
4h
ops leads (paged)
30m before
Dispute responses
24h
support lead
4h before
Engine
Step retry policy (default)
5 attempts · exponential backoff + jitter
protected
Worker concurrency
32 per node · scales with the app tier
protected
Stuck-instance detector
alerts at 15 min without progress
protected
Journal retention
7 years · examiner-replayable
regulator-anchored
Reports
Every figure ties to the ledger to the kobo · every filing archived with a fingerprint
Ledger tie-out: 0.00 variance · 14:30
CBN / NDIC monthly return MMFBR · FinA
All 29 schedules of form MFB51027 — the exact workbook the bank files today, generated from the ledger
Trial balance
As of any date · drill to postings
Balance sheet form 300
Statement of assets & liabilities with CBN item codes
Stamp duty & electronic levy collected — remittance schedule
August return — draft preview generates live from the ledger
Form 300 excerpt with the CBN item codes — the draft the head of finance reviews before filing. Every line drills to its postings, and the cross-references (“Specify, MMFBR 711”) must agree or the return refuses to emit.
Code
Item
Amount ₦’000
Cross-check
10130
Total Cash
118
= tills + vaults
10220
Balances with Banks (Specify, MMFBR 221)
412
= schedule 221
10510
Treasury Bills
1,000
= investment register
10710
Micro Loans (Specify, MMFBR 711)
12,804
= schedule 711
10745
Other Loans (Specify, MMFBR 746)
9,922
= schedule 746
29 of 29 schedules generated ✓ · tie-out 0.00 ✓ ·
Filing archive
What was filed, when, by whom — content-fingerprinted so "what did we file in March?" is retrieved, not reconstructed
Filing
Period
Filed
By
Fingerprint
MMFBR monthly return
Jul 2026
06 Aug · day 6 of 14
Eli S. + Kemi O.
a3f2…9c41
STR — case A-2199
Jul 2026
18 Jul · hour 19 of 24
Kemi O.
77b0…e2ad
MMFBR monthly return
Jun 2026
08 Jul · day 8 of 14
Eli S. + Kemi O.
c901…44f8
Ledger & accounting
The chart of accounts, journals, and the end-of-day ceremony — where the books prove themselves daily
TIE-OUT FAILED — accounting day 24 Aug CANNOT close
The money ledger reports ₦8,421,300.00 for term deposits; the reporting ledger says ₦8,421,180.00 — a variance of ₦120.00, isolated to tag dep.term. The close is blocked by the engine, not by policy: no report can be generated from books that disagree. Ops paged 23:31 · runbook step 4 of 9 in progress.
GL accounts
0
6 classes
Postings today
0
both ledgers agree
Accounting day
24 Aug
open · closes 23:30
Last close variance
₦0.00
184 consecutive clean days
End-of-day close — dress rehearsal
Runs automatically at 23:30; the manual run here executes against a copy so you can watch the ceremony. A non-zero tie-out blocks the close and pages finance — the books cannot close wrong.
interest accrual
fee & levy sweep
ledger tie-out (both books, to the kobo)
day close + snapshot
idle
Chart of accounts
Every product and fee maps here before it can exist — click a row to drill toward its postings
GL code
Account
Class
Balance
Mapped products
20110
Savings deposits
Liability
₦6,842,110,400.22
Everyday Savings · Ajo · Kids Trust (draft)
20120
Current deposits
Liability
₦1,578,004,118.90
Business Current · Corporate Current
10710
Micro loans
Asset
₦412,400,000.00
all loan products
41100
Fee income
Income
₦412,806,220.10
charge structures v1…v14
51200
Interest expense
Expense
₦122,400,880.00
deposit products
10130
Cash (tills + vaults)
Asset
₦22,710,000.00
teller module
GL postings
Most recent entries on this account today — each drills to its source transaction
Time
Entry
Debit
Credit
Correlation
14:32:11
NIP transfer fee · PUP-TRF-9F27B1
—
26.88
c-88410
14:32:08
Airtime commission · PUP-BIL-4C11A9
—
50.00
c-88406
14:31:45
Agent deposit fee share · PUP-DEP-2A76F0
—
35.00
c-88399
Bulk & scheduled payments
Standing orders, payroll batches, payment links and QR — the set-and-forget rails
Standing orders
0
next run 18:00
Batches this month
0
₦214M
Payment links active
0
+11 this week
QR collections today
₦0M
+9%
Scheduled & recurring transfers
Each run executes through the full payment machinery — fees, limits, AML — and a failed run retries then notifies, never silently skips
Customer
To
Amount
Frequency
Next run
Chinedu Okafor
Mama · GTBank 0122…
₦50,000
monthly · 25th
25 Aug 08:00
Emeka & Sons Ltd
Rent · Zenith 2081…
₦1,200,000
quarterly
01 Sep 09:00
Gombi Traders Co-op
Ajo payout rotation
₦180,000
weekly · Fri
29 Aug 17:00
Bulk batches
Payroll · August · 214 rows · ₦18.4M
Validated · awaiting approval
Vendor batch 22 · 61 rows · ₦6.1M
Executing · 38 of 61
Vendor batch 22 — open the pipeline below
Executing · 3 rows failed
Payroll · July · 212 rows
Completed · 212/212
Payment links & QR
pup.ng/pay/emeka-inv2244
₦1,250,000
Paid
pup.ng/pay/ajo-fest
₦5,000 fixed
Active · 84 paid
pup.ng/pay/gombi-fees
any amount
Active
Batch pipeline — Vendor batch 22 · executing with failures (the honest mid-flight view)
Uploaded · 61 rows
Validated · 61/61
Approved · 2 officers
Executing · 38 done
Reconciled & closed
A failed row never blocks the batch and never disappears: it is named, reasoned, and waits for a decision. The batch cannot close while any row is undecided.
Row
Beneficiary
Amount
Status
Reason
1–38
38 vendors
₦3,812,400
Paid
—
14
Okeke Cement Ltd
₦412,000
Failed
beneficiary bank returned 07 — invalid account
27
Alh. Danladi Trading
₦96,500
Failed
rail timeout · TSQ says NOT applied — safe to retry
41
New Era Supplies
₦188,000
Failed
name mismatch above tolerance (68%)
42–61
20 vendors
₦1,591,100
Queued
executing in order
When every row is Paid, Refunded, or explicitly cancelled, the batch reconciles: total debits = total credits + refunds, proven to the kobo, and the closing report goes to the corporate customer automatically.
Design preview · this screen does not read the ledger yet. Every figure below is illustrative sample data, not this bank’s records.
Tenants — platform operator
The reseller headquarters — visible only to the platform-operator role, never to a bank’s own staff
Tenants
0
1 live · 1 onboarding · 1 sandbox
Platform uptime
0%
90-day
Cross-tenant incidents
0
isolation enforced at query layer
Licence revenue (ann.)
₦0M
1 signed
Tenants
Tenant
CBN code
Status
Modules
Certification
P-UP MFB (us)
51027
Live
all · USSD off (D-6)
148/148 · 01 Aug
Harmony MFB · Ibadan
51442
Onboarding
core + bills · cards later
Pending
Sandbox
—
Demo data
all
n/a
Isolation guarantees
Every row tenant-stamped; queries scoped at the data layer
Enforced
Per-tenant encryption keys
Enforced
A tenant’s misconfiguration cannot touch another’s books
By construction
Billing
Harmony MFB · 3-year licence
₦120M
signed
Support tier
24/7 · 99.99% SLA
active
Products & pricing
Launching a product is configuration, not code — every change is versioned and dual-approved
Deposit products
0
4 live · 3 draft
Loan products
0
all live
Charge structures
0
versioned
Pending activations
0
needs 2nd approver
Transfer fee structure · v14 Live since 01 Aug
Try proposing a band change — notice you cannot activate your own proposal
Band
From
To
Fee
Statutory added
1
₦1
₦5,000
₦10.75
levy as applicable
2
₦5,001
₦50,000
₦26.88
levy as applicable
3
₦50,001
—
₦53.75
levy + stamp duty
Charge catalog — every fee the bank levies, in one governed place
Each charge is versioned configuration with its own ledger mapping and scope. Changes are proposed → dual-approved → effective-dated, and every transaction records which charge version priced it. Statutory items are collected into their own ledger accounts and appear on the remittance report.
Charge
Basis
Rate / amount
Applies to
GL
Version
SMS alert fee
per SMS delivered · billed monthly
₦4.00
customers with SMS alerts on
41120
v3
Account maintenance (CAM)
per mille on debit turnover
₦1 / ₦1,000
current accounts
41110
v2
Interbank transfer fee
banded per transfer
₦10.75 / ₦26.88 / ₦53.75
all channels
41100
v14 · bands above
Collections fee (virtual accounts)
percent, capped
0.5% · cap ₦100
VA pools, per partner agreement
41130
v4
Agent commission structures
banded, split with aggregator
per structure
agency network
41140
v9
Card maintenance
quarterly
₦50.00
active cards
41150
v1
Statement (branch print)
per request · in-app free
₦100.00
all accounts
41160
v1
FD early-termination penalty
share of accrued interest
30%
fixed deposits
41170
v2
Electronic levystatutory
per qualifying transfer
₦50.00
regulator-defined
24510
anchored
rate follows the circular
Stamp dutystatutory
qualifying receipts
₦50.00
regulator-defined
24520
anchored
rate follows the circular
Waivers are first-class: a zero-SMS-fee on Kids Trust, or a fee holiday for a segment, is a scoped override with an expiry — proposed and dual-approved like everything else, never a hand edit. Statutory rows collect into liability ledger accounts (2xxxx) and feed the Statutory remittance report; income rows collect into 41xxx fee income.
Waivers — scoped, expiring, twice-approved
A waiver is a scoped override on a catalog charge with a MANDATORY expiry — it reverts by itself, so a discount can never quietly become permanent. Two named approvers by charge type, recorded on the waiver.
Waiver
Charge
Scope
Approvers
Expires
Status
Kids Trust — zero SMS fee
SMS alert ₦4 → ₦0
product: Kids Trust
Adaeze O. + Eli S.
31 Dec 2026
Active
Emeka & Sons — collections cap
cap ₦100 → ₦80
customer agreement
Bola F. + Eli S.
31 Dec 2026
Active
Yola launch — transfer-fee holiday
band 1 ₦10.75 → ₦0
branch: Yola · new customers
Adaeze O. + Eli S.
30 Sep 2026
Expires in 36 days
Ramadan promo
statement print ₦100 → ₦0
all customers
expired · auto-reverted
30 Apr 2026
Expired — reverted itself
Loan products — the loan factory
A loan product is versioned configuration: interest method, bands, penalties, and its provisioning profile — every running loan records which product VERSION priced it, so a product change never rewrites an existing loan.
Product
Method
Rate band
Tenor
Penalty
Provisioning
Version
Working capital
reducing balance
22–28% p.a.
6–18m
1% flat on overdue
standard ladder
v3
Micro trade
reducing balance
26–30% p.a.
3–9m
1% flat on overdue
standard ladder
v5
Group lending
flat rate
24% p.a.
6–12m
group guarantee first
tightened (Watchlist 7%)
v2
BNPL merchant
flat rate
3%/month
1–4m
merchant recourse
tightened
v1
Staff loan
reducing balance
8% p.a.
to 36m
payroll-deducted
standard ladder
v2
Deposit products
Everyday Savings · 2.5% p.a.
Live
v6
Business Current · fee-based
Live
v4
Ajo Target Savings · 5% locked
Live
v2
Kids Trust · guardian-mandated
Draft · pending activation
v1
Version history — transfer fees
v14 activated · proposed Kemi O. · approved Eli S. — band 2 fee ₦25.00 → ₦26.88
v13 activated · statutory levy mapping updated
v12 activated · new band 3 for high-value
Staff & roles
Least-privilege by default · every permission grant is itself an audited, approved change
Active staff
0
2 branches + HQ
Roles
0
deny-by-default
MFA enrolled
24 / 24
enforced — no exceptions
Access reviews
Q3 due
evidence auto-exported
Staff
Name
Role
Branch
MFA
Last active
Status
Adaeze O.
Operations officer
HQ · Gombi
TOTP
now
Active
Kemi O.
Compliance officer
HQ · Gombi
TOTP
12 min
Active
Tunde A.
Credit officer
HQ · Gombi
TOTP
3 min
Active
Eli S.
Finance lead · approver
HQ · Gombi
Hardware key
1 hr
Active
Ruth D.
Teller
Yola branch
TOTP
now
Active
Femi B.
Support agent
remote
Re-enrollment due
2 d
Suspended pending MFA
Roles — deny-by-default, every grant explicit
Click a role to load its permission grid below. Creating or editing a role is itself a maker-checker change — a permission grant activates only on a second officer's approval.
Role
Members
Scope
Segregation class
Last changed
Status
Operations officer
6
All branches
Maker
12 Aug · approved
Active
Compliance officer
2
All branches
Checker
02 Jul · approved
Active
Credit officer
3
All branches
Maker
02 Jul · approved
Active
Finance lead
1
HQ
Checker · high-value
18 Aug · approved
Active
Teller
8
Own branch · own till
Maker
14 Jun · approved
Active
Head teller
2
Own branch
Checker · cash
14 Jun · approved
Active
Credit risk officer
1
All branches · no posting rights
Checker · credit + ladder
25 Aug · approved
Active
Chief Risk Officer
1
All · risk, findings, KRIs · NO posting rights
Checker · independent
25 Aug · approved
Active
CFO
1
All · financial config + high-value approvals
Checker · financial
25 Aug · approved
Active
CEO
1
All · read + final approvals above thresholds · NO config, NO posting
Final approver only
25 Aug · approved
Active
Auditor
1
All · read-only
Neither — observe only
02 Jul · approved
Active
Administrator
1
Platform config only — NO money permissions
Segregated from money
02 Jul · approved
Active
Permission grid — Operations officer
Every permission is three-dimensional: View, Propose (maker), Approve (checker) — and the engine refuses any grid where one person can both propose and approve the same money action (segregation of duties, enforced at save, not by policy memo)
Permission
View
Propose
Approve
Customers — profile & KYC
Yes
Yes
No — segregated
Customer PII (unmasked BVN/NIN)
Step-up MFA + reason
—
—
Account status changes
Yes
Yes
No — segregated
Transfers & reversals
Yes
Yes
Yes, if not proposer
Manual journals
Yes
No
No
Charges & waivers
Yes
No
No
Mandates
Yes
Yes
No — segregated
Chart of accounts
Yes
No
No
AML cases
Summary only
No
No
Staff & roles
Yes
No
No
Reports & CBN returns
Yes
No
No
Active sessions
Concurrent-session limits enforced; force sign-out is immediate server-side revocation, audited
Adaeze O. · console · HQ Gombi
since 09:00 · 102.89.…
this session
Tunde A. · console · HQ Gombi
since 11:12
Active
Ruth D. · teller station · Yola
since 08:02
Active
Design preview · this screen does not read the ledger yet. Every figure below is illustrative sample data, not this bank’s records.
API partners
A partner is a business CUSTOMER with programmatic access · its keys are separate, scoped, rotatable clients underneath it
Partners
0
business customers with API access
Active clients (keys)
0
9 live · 5 sandbox
Calls today
0
+6%
Webhook delivery
0%
first attempt
In dead-letter
0
1 partner endpoint down
Partners
Click a partner for its clients, sub-customers, usage and the KYC allocation — one full profile is mocked: KoboPay Ltd
Partner
Customer record
Clients
Sub-customers
Calls today
KYC responsibility
Status
KoboPay Ltd
corporate · RC 992014
4
22,408
842,110
Bank-retained · partner-collected
Active
AgroLend NG
corporate · RC 771208
2
1,204
142,880
Bank-retained · partner-collected
Active
SwiftRemit
corporate · RC 448120
3
—
219,128
No sub-customers · transfers only
Active
Three different things, deliberately not blurred: the partner is the business customer; a client is one set of credentials belonging to that partner (production and sandbox are different clients, and so is each of the partner’s applications — so a leaked checkout key is revoked without killing their settlement job); a sub-customer is the partner’s own end user riding our rails.
Partner — KoboPay Ltd
API partners › KoboPay Ltd · corporate customer RC 992014
Business
KoboPay Ltd
payment gateway · partner since 2024
Settlement account
0234099901
sweeps land here
Collection pool
VA-KOBO-01
100,000 numbers reserved
Agreement
v3 · fee 0.5% cap ₦80
override expires 31 Dec
Rate ceiling
300 rps aggregate
across all clients
One partner, several credentials — by environment and by application, each independently scoped and rotatable. Regenerating shows the secret once; afterwards only its fingerprint survives.
Client
Environment
Scopes
Rate limit
Key
Last used
Checkout
Live
collections · name-enquiry
200 rps
pk_live_••••…8841
14:32 today
Settlement job
Live
transfers · balances
60 rps
pk_live_••••…2270
14:30 today
Reconciliation (read-only)
Live
reports · balances
20 rps
pk_live_••••…9902
06:00 today
Checkout · sandbox
Sandbox
collections · name-enquiry
50 rps
pk_test_••••…4410
11:04 today
Why several: a key leaked from their checkout front-end is revoked in seconds without stopping their settlement job or their nightly reconciliation. One key per partner would force an outage to fix a leak — which is how leaks end up tolerated.
The partner’s own end users, each holding a virtual account on our rails
These are created programmatically by KoboPay, never by hand in this console — but they are visible, tiered, screened and limited here, because the account is ours.
What the partner is actually consuming — and the answer to “we sent it twice, did you charge us twice?”
Calls today
842,110
Peak rate
186 rps of 300 ceiling
Rate-limited (429s)
0 today · 14 last week
Error rate
0.02% · all 4xx (their validation)
Idempotency inspector
idem_9f27b1
3 calls
1 execution
Their retry storm is visible AND provably harmless: three calls, one execution, the same response returned each time. This is the screen that settles a partner dispute in a minute instead of a day.
Event
Client
Attempt
Response
Latency
collection.matched · PUP-DEP-2A76F0
Checkout
1
200
180 ms
payment.completed · PUP-TRF-9F27B1
Settlement job
1
200
210 ms
kyc.tier_upgraded · KP-8598
Checkout
3
503
timeout
Endpoints are per client, signed per client, and retried on the standard ladder into a dead-letter queue with full history. A webhook is never the source of truth — the partner can always query the API for the authoritative state.
Regulatory position
The bank retains KYC and AML responsibility for every sub-customer holding a virtual account on our rails. The partner COLLECTS the identity evidence under contract; the obligation does not transfer with the paperwork.
Evidence flow
partner captures → pushes via API → our verification runs (BVN/NIN, screening) → tier assigned by OUR engine, not asserted by the partner
Tier ceiling for this partner
Tier 2 maximum · Tier 3 requires our own branch/agent capture
Ongoing monitoring
our AML engine screens sub-customer activity on the same rules as direct customers — velocity, structuring, sanctions
Expiring KYC
1 sub-customer expiring within 30 days · partner notified via webhook + report; expiry restricts the VA, it does not silently continue
Contractual allocation
Stated plainly because examiners ask it plainly: if a mule account is opened through a partner, the question comes to us. That is why sub-customers are visible, tiered, screened and limited in this console rather than living only in the partner’s own system.
Network allowlist — per client, deny by default
Client
Allowed sources
Checkout
154.113.8.0/24 · 41.223.44.10
Settlement job
154.113.8.64/28
Reconciliation
154.113.8.80/29
Design preview · this screen does not read the ledger yet. Every figure below is illustrative sample data, not this bank’s records.
Versioned, per-tenant brandable, data-minimised by rule
Template
Channels
Version
Credit alert
push + SMS
v9
Debit alert
push + SMS
v9
OTP
SMS + voice fallback
v4
Loan due reminder
push + SMS
v6
FD maturity choice
push + email
v2
Delivery issues
SMS provider A degraded 13:40–13:52
Auto-failover · 0 lost
1,204 push tokens expired this week
Re-registration on next login
4 emails bounced (mailbox full)
SMS fallback used
Routing rules — what gets sent, when, on which channel
Every rule fires off an event on the Kafka belt. Transactional and security rules are regulator- or safety-anchored — customers cannot mute them. Marketing respects consent (NDPA) and quiet hours. Rule changes are dual-approved with an effective date, like every other configuration.
Trigger event
Template
Channels
Condition / timing
Customer can mute?
money credited
Credit alert v9
push + SMS
immediate · SMS also sent if push undelivered in 60s
Sending and billing are deliberately separate: this screen decides when a message goes out; the ₦4 SMS alert fee it may incur is priced by the Charge catalog on Products & pricing — so a routing change can never silently change what customers pay, and a fee change can never silently change what they receive.
Audit log
Append-only and hash-chained — entries can be read forever and edited never
Time
Actor
Action
Target
Correlation
14:31:58
system · reconciler
Auto-reversal posted (vend failure)
PUP-BIL-1B44C7
c-88412
14:20:11
Adaeze O.
Viewed customer profile (masked PII)
CUS-10233 · Chinedu Okafor
c-88399
14:02:07
Ruth D. + Ibrahim S.
Till 04 closed · ₦0.00 variance
TILL-04 session 2214
c-88371
13:44:52
Kemi O.
AML case escalated to STR draft
A-2214
c-88340
12:19:33
Eli S.
Approved fee structure v14 activation
charge-structure 12
c-88102
11:20:04
Partner API · AgroLend
Expected deposit registered
₦2,400,000 · ref AG-3321
c-87990
Chain verified 14:30 · block 40,221 · fingerprint 7d1c…90aa — any tampering with history breaks this seal visibly.
Administration
Tenant configuration — the surface a buyer bank would operate for themselves
Tenant: P-UP MFB · 51027
Institution
Legal name
P-UP MICROFINANCE BANK LTD
CBN institution code
51027
State · LGA
Adamawa · Gombi
Licence
Tier 2 MFB
Regulatory contact
Eli Samson
Approval thresholds
Changing a threshold is itself a dual-approved change
Reversals require 2 approvers above
₦100,000
Manual journals always require
2 approvers
Corporate transfers require approval above
₦2,000,000
System configuration · v31 Active since 12 Aug
Every value is versioned; a change is a proposal until a second administrator approves it, and every version records who and why
Setting
Value
Why it exists
One-time code expiry
5 minutes · max 3 resends
interception window control
Staff session length
8 hours · idle lock 15 min
SOC 2 access control
TSQ retry schedule
12 cycles · 45 s apart, then ops escalation
no transfer left in doubt
Duplicate-transfer window
90 seconds · same amount + destination
double-tap protection
Velocity windows
1h · 24h · 7d · 30d
structuring detection
compliance-owned
New-device cooling period
24h limit cap after binding
SIM-swap defence
compliance-owned
Dormancy threshold
180 days no customer activity
CBN dormancy rules
regulator-anchored
Webhook retry policy
8 attempts · backoff · 24h to dead-letter
partner delivery guarantee
Configuration history
v31 — webhook retries raised 6 → 8 after a partner outage · proposed Adaeze O., approved Eli S.
v30 — idle lock tightened 30 → 15 min ahead of the security review
v29 — duplicate-transfer window widened 60 → 90 s from support data
Feature flags — this tenant
The resale surface: a buyer bank switches modules on and off here without a deploy. Restricting flags are dual-approved; regulated ones carry their anchor.
Cards
issuance via processor
On
Rewards
points program v5
On
Multi-currency
FX module + non-NGN balances
Off
USSD banking
decision D-6 — awaiting owner call
Off
decision pending
Virtual accounts
collections rails
On
core — always on
Bills failover routing
multi-provider
On
ops-owned
Brand tokens — white-label surface
A buyer bank swaps these and the customer-facing surfaces re-skin; the console stays operational-neutral
Action #1B55E9
Accent #057472
Success #4FB645
Ink #10233A
Grey #EBEFF0
Typeface: Montserrat (SDK.finance exact, freely licensed) · Eina (Mambu exact) available on licence purchase — decision D-4.
Design preview · this screen does not read the ledger yet. Every figure below is illustrative sample data, not this bank’s records.
Cards
Issued through tokenizing processors — the full card number, CVV, and PIN never touch this platform
Cards issued
0
+204 this week
Virtual
0
83%
Spend today
₦0M
+7%
Frozen
0
customer-initiated 96%
Card registry
Try the freeze — it takes effect at the processor in under a second, and the customer sees it instantly in-app
Holder
Card
Type
Controls
Spend today
Status
Chinedu Okafor
5060 99•• •••• 4412
Virtual
online ✓ · intl ✗ · ₦200K/day
₦42,300
Active
Halima Bello
5060 99•• •••• 8871
Physical
online ✓ · intl ✓ · ₦500K/day
₦128,000
Active
Emeka & Sons Ltd
5060 99•• •••• 2205
Virtual · expense
online ✓ · merchant-locked
₦610,500
Frozen by customer
PCI DSS posture: the number shown is a masked token from the processor. Card webhooks post to the ledger through the same idempotent path as every other movement.
Design preview · this screen does not read the ledger yet. Every figure below is illustrative sample data, not this bank’s records.
Currency exchange
Every conversion stores the exact rate version applied — reproducible forever
Currency pairs
0
NGN base
Conversions today
0
+9%
Volume today
$0K
+12%
Spread income
₦0M
this month
Live rate card · v212 Active since 09:00
Feed-based with a manual override lane; both are versioned and dual-approved
Pair
We buy
We sell
Spread
Source
USD / NGN
1,585.00
1,596.50
0.72%
feed + margin
GBP / NGN
2,011.20
2,028.00
0.83%
feed + margin
EUR / NGN
1,722.40
1,736.10
0.79%
feed + margin
CNY / NGN
218.90
221.40
1.14%
manual · Eli S.
Recent conversions
Each row records its rate version — an examiner can reprice any of them
Emeka & Sons · $12,000 → ₦
v212
Settled
SwiftRemit · £4,200 → ₦
v212
Settled
Halima Bello · ₦2M → $
v211
Settled
Multi-currency is tenant-optional: a naira-only bank never sees this screen; a resale tenant switches it on in Administration.
Design preview · this screen does not read the ledger yet. Every figure below is illustrative sample data, not this bank’s records.
Disputes
Every dispute carries its evidence pack: device, receipt, both ledger sides, timestamps
Open
0
oldest 1d 4h
Resolved this week
0
median 6h
Refunded
₦0M
this week
Chargeback exposure
₦0M
2 cases
Queue
Click a row for the evidence pack · try resolving the double-debit
Case
Type
Party
Amount
SLA
State
D-1182
POS double-debit
Agent 00412
₦20,000
Evidence complete
D-1179
VAS token
Ngozi Eze
₦12,000
—
Auto-reversal confirmed
D-1175
Chargeback
Issuer claim
₦86,000
Representment due
Reconciliation
Three walls: ledger self-check, settlement vs NIBSS, vendor vs vend records
Internal tie-out: 0.00 variance · 14:30
NIBSS settlement reconciliation — today
Press run: every NIP transfer is matched against the settlement report line by line
idle
Transfers matched
214,378 of 214,380
99.999%
Value matched
₦1,284,110,250.00
to the kobo
Exceptions
2
below
Reference
Issue
Amount
PUP-TRF-8E03D4
In settlement report, still HELD locally — TSQ will confirm and post
₦1,400,000
self-healing
PUP-TRF-3C8811
In settlement report, no local record — investigate inbound path
₦48,000
Open investigations
Every unexplained exception becomes a CASE with states and a resolution code — an exception can be resolved, never merely dismissed
Case
Source
Amount
Age
State
INV-2201
Settlement line, no local record
₦48,000
Investigating
INV-2199
IBEDC vend · vendor silent 48h
₦12,500
Awaiting vendor · escalated
Vendor reconciliation — bills
MTN · yesterday
18,240 vends
0 discrepancies
DSTV · yesterday
2,113 vends
0 discrepancies
IBEDC · yesterday
3,408 vends
2 pending vendor response
Settlement account monitor
A drop that doesn't match outbound flow pages ops immediately
Balance now
₦412,802,110.55
expected band
Largest single move today
₦18.4M
matched batch
Alert threshold
₦10M unexplained
not triggered
Design preview · this screen does not read the ledger yet. Every figure below is illustrative sample data, not this bank’s records.
Rewards
Points are a ledger currency too — earned, held, and redeemed with the same double-entry discipline
Reward wallets
0
59% of customers
Points earned today
0
+11%
Redeemed today
0
airtime 82%
Outstanding liability
₦0M
provisioned in GL
Earning rules · v5
Activity
Earns
Cap
Status
NIP transfer (fee-paying)
1 pt / ₦100 fee
200/day
Live
Bill payment
2 pts / ₦1,000
100/day
Live
Referral activated
500 pts
10/month
Live
Ajo savings streak (weekly)
150 pts
—
Draft v6
Recent earnings
Chinedu Okafor · NIP fee
+3 pts
14:32
Bunmi Adeyemi · airtime
+10 pts
14:32
Ngozi Eze · redemption → airtime
−500 pts
14:12
Design preview · this screen does not read the ledger yet. Every figure below is illustrative sample data, not this bank’s records.
Mobile app
Customer-facing design language — white-label brandable per tenant. The first phone is live: tap Send and complete a transfer.
9:415G · 98%
EVERYDAY SAVINGS · 0234118765
₦3,912,330.55
+ ₦500,000 on deposit · insured by NDIC
↑Send
◧Bills
✆Airtime
⋯More
RECENT
GTBank · Adaeze N.−₦250,000
MTN airtime−₦5,000
Salary · Zenith+₦480,000
Send to GTBank · Adaeze N.
AMOUNT
₦25,000
Fee ₦26.88 · levy as applicable
Name check confirmed: ADAEZE NWOSU — always before money moves.
Enter transaction PIN
Randomised keypad in production — shoulder-surfing defence
₦25,000 sent
to ADAEZE NWOSU · GTBank · in 2.8s
9:415G · 98%
Verify your identity
Step 4 of 6 — takes about a minute
BVN
2210••••••9
Matched: name + date of birth ✓
Face check
Blink, then turn your head — a photo can't do this
9:415G · 98%
Notifications
₦250,000 sent to ADAEZE NWOSU · GTBank
14:32 · receipt attached
New device signed in — Pixel 8, Lagos. Not you? Freeze your account with one tap.
09:04 · security
+10 reward points for your MTN top-up
14:32 · rewards
Fixed deposit matures 12 Oct — choose roll-over or payout
yesterday · savings
Live feed — streams over SSE, read-state synced
Design preview · this screen does not read the ledger yet. Every figure below is illustrative sample data, not this bank’s records.
POS agent app
Built for the degraded-network path: every action queues and syncs when connectivity returns. The terminal is live — run a cash-out.
AGENT 00412 · NNEWI2G ▂▄
FLOAT BALANCE
₦743,500.00
Commission today: ₦8,420 · visible live
Cash out — customer withdraws
AMOUNT
₦20,000
Agent commission: ₦140 · shown before confirm
Confirm
CustomerCHINEDU O. · ••8765
Amount₦20,000.00
Customer confirms viapush notification
Out-of-band confirmation defeats screen-overlay fraud: the customer approves the amount on their own phone, not this terminal.
Send yourself a signed test event and verify your endpoint
payment.completed
collection.received (virtual account)
kyc.tier_upgraded
Migration workbench
The Shinobi exit runs here: extract, validate, rehearse, load in cohorts, prove the balances to the kobo
Start a migration — what are you moving?
Order matters, and the workbench enforces it: 1 ledger before 2 customers, customers before 3 accounts, accounts before 4 balances & loans — a balance can only land in a real account, owned by a real customer, posting to a real ledger line. Every button walks the same five steps: upload the export file → validate every row → rehearse the load on a copy → tie out the numbers to the kobo → a second officer approves the production load. Nothing touches the live bank before step five.
1 · Ledger
Chart of accounts and opening balances — the shelves the money sits on
Done · 214 GL lines live
2 · Customers
People and businesses, with whatever identity the old system holds
Cohort A loaded · B validating
3 · Accounts
The account numbers — kept as they are, mapped to your new products
Cohort A loaded
4 · Balances & loans
The money itself — posted double-entry, proven to the kobo
Waits for cohort B accounts
Pipeline — cohort B (Yola branch customers)
Press run: each stage must go green before the next unlocks; nothing loads into production from a red stage
extract · 14,208 rows
parse · 0 rejects
validate
dry-run load
balance tie-out
ready for cohort load
stages 3–6 pending
Migration options — live switches, applied to every cohort
These are real controls, not statements: flip one and every later validation run uses the new setting (a cohort already past validation re-runs it). The recommended position is ON for all three — flipping one off tells you exactly what you would be giving up before it lets you.
Preserve existing NUBANs
ON · recommended
Customers keep their account numbers — zero disruption, inbound transfers keep working through the bridge. Same institution code means the check digits stay mathematically valid; every inherited NUBAN is check-digit-verified at import, and the handful that fail (if the old system ever issued malformed numbers) land in the error report for a decided remap, never a silent one.
BVN verification
After load · batch
At import we check only the SHAPE (11 digits). Real verification (name + date-of-birth match at the bureau) runs as a background batch AFTER the money has landed and tied out — so a third-party outage or rate limit can never block the cutover weekend. Full match → verified · partial → the adjudication queue (the BVN-mismatch review) · no match → restricted.
Identity-incomplete customers
Restricted track · ON
A customer with money but no BVN or phone is NOT discarded and NOT parked outside the books: they migrate as full ledger citizens — their balances tie out to the kobo like everyone else’s — with the customer record in Restricted · pre-KYC status until identity is captured and verified.
Identity coverage — what the legacy book actually looks like
The engine classifies every customer row up front; nobody discovers the gap on cutover weekend
Cohort split · 5,000 customers
Customers
Balances held
Track
BVN present (phone may be missing)
1,000
₦61.4M
Full — BVN verified in the post-load batch
Phone only, no BVN
380
₦8.2M
Restricted — SMS invite to KYC
No BVN, no phone
3,620
₦14.9M
Restricted — branch/agent KYC capture
Restricted means: money safe and visible · deposits land normally · withdrawals and transfers blocked until identity is verified — and the first withdrawal attempt IS the KYC moment: the customer presents ID, the officer captures BVN/phone on the spot, verification runs, the restriction lifts, and the customer walks out with their money and a working account. Never a locked-out customer without a stated path.
KYC conversion campaign — restricted → real customers
dormancy machinery applies — unclaimed-funds path, never quiet absorption
Customer (legacy ref)
Balance
Missing
Last contact
SHB-04412 · Maryamu A.
₦142,300
BVN + phone
in branch NOW · Gombi
SHB-01188 · Ibrahim S.
₦38,150
BVN
SMS invite · 21 Aug
Cohorts
A · HQ Gombi customers · 12,040 rows
Dress-rehearsed · tie-out ₦0.00
B · Yola branch · 14,208 rows
Validating
C · API partner sub-customers · 96,114 rows
Queued
Parallel-run scorecard
Cutover is gated on consecutive zero-difference days — your go/no-go, with evidence
Day 1 · 22 Aug
214,002 txns replayed
0 differences
Day 2 · 23 Aug
198,441 txns replayed
0 differences
Day 3 · today
running…
live
Balance tie-out — cohort A dress rehearsal (the fourfold report)
Every account in either system lands in exactly one bucket — matched, missing, extra, or mismatched with a signed kobo delta. The report is total: the four buckets sum to both sides, proven.
Bucket
Accounts
Detail
Verdict
Matched to the kobo
12,034
₦84,112,004.00 both sides
clean
Missing (in Shinobi, not loaded)
3
0234166…, 0234171…, 0234180… — rows failed validation (named in the row report)
Six accounts of 12,040 stand between this cohort and a clean load — and the engine will not load ANY row until all six are resolved at source. There is no “load anyway” button, deliberately.
Cutover go/no-go — the checklist that decides the weekend
All cohorts tie out ₦0.00
A: 6 items open · B validating · C queued
Parallel run ≥ 5 consecutive zero-difference days
3 of 5
NIP bridge dual-feed rehearsed both directions
awaiting middleware access (I-2)
Rollback rehearsed (return inbound routing to Shinobi)
scheduled with the bridge rehearsal
Sign-offs: owner · finance · compliance
gates above first
Verdict today: NO-GO — and the screen says so plainly. Cutover happens when every row here is green, not when a date on a calendar arrives.
Design preview · this screen does not read the ledger yet. Every figure below is illustrative sample data, not this bank’s records.
Registries & scheduled tasks
The reference data everything else leans on — banks, branches, states, and the clockwork
Branches
Click a branch for its full profile — every posting carries a branch stamp, so branch-level reporting is a filter, not a project
Every run leaves a record; a missed run pages ops — try pausing one
Task
Schedule
Last run
Next run
State
End-of-day close + tie-out
daily 23:30
23 Aug · ok · 4m 12s
today 23:30
Active
protected
Interest accrual
daily 00:15
today · ok · 1m 48s
tomorrow 00:15
Active
protected
Dormancy sweep
weekly Mon 02:00
18 Aug · ok
25 Aug 02:00
Active
NDPA retention purge
monthly 1st 03:00
01 Aug · ok · 2,114 records anonymised
01 Sep 03:00
Active
protected
Watchlist re-screen (full book)
nightly 01:00
today · ok · 0 new hits
tonight 01:00
Active
protected
Design preview · this screen does not read the ledger yet. Every figure below is illustrative sample data, not this bank’s records.
Sign-in & states
The unglamorous screens, treated as first-class — every failure state has honest copy and a next action
Staff sign-in — live demo
Two factors always; hardware keys for approvers
From your authenticator app — SMS is not accepted for staff sign-in.
Signed in · session 8h · this device remembered 30 days
Error with retry — live demo
A failed read never silently renders as "no data" — that distinction is a hard rule
We couldn't reach the reporting service.
The server returned an error (503). Your data is safe; this screen just can't load right now. Actions that depend on this data are hidden until it loads.
Trial balance · 24 Aug
Loaded on retry
Balance sheet · 24 Aug
Loaded on retry
Session expired
Your session ended after 8 hours.
Nothing was lost — the form you were filling is saved as a draft. Sign in to continue exactly where you stopped.
Permission denied
Your role can't approve fee structures.
You proposed this change, so a different role must approve it — that separation is deliberate. The approvers (Eli S., Kemi O.) have been notified.
Empty state
No disputes today.
A successful empty read is good news, not an error — and it says so, instead of showing a blank page.
Degraded network (agent app)
Working offline.
2 transactions queued on this device, signed and timestamped. They sync automatically when the network returns — the agent keeps serving customers.
Queued: 2 · last sync 4 min ago
Interactive design preview — sample data throughout; no real customers, balances, or filings. Every menu item is live; micro-interactions follow the house motion standards (150–250 ms, ease-out enters, reduced-motion respected).
New transaction — interbank transfer
Emeka & Sons LtdCorporate Current · opened Mar 2024 · HQ Gombi · charge structure v14
ActiveAvailable ₦18,255,002.44
Mandate v3 — any two signatories incl. one class-A above ₦500,000
Emeka NwosuClass A · MD
Adaeze NwosuClass A · Director
K. ObioraClass B · Accountant
Click any photo or signature to enlarge it.
Officer confirmations
Stored with the transaction — the audit log keeps who confirmed what, forever.
Resolved: ADEBAYO KUNLE VENTURESFirst-time beneficiary for this account
The name comes from the receiving bank via NIBSS — money never moves to an unresolved account. First-time beneficiaries add weight to the AML score and are highlighted to the approving officer.
Transfer fee (structure v14, band 3)
₦53.75
Statutory levy
₦50.00
Total debit
₦750,103.75
Checks before submission
₦750,000 > ₦500,000 → mandate requires two signatories incl. one class-A
Satisfied — per your checklist
Daily and single-transfer limits
Within limits
AML velocity and beneficiary screening
Pass · first-time beneficiary noted
Staff-initiated above threshold → second officer approval
Will queue for approval
Submitted — held for second approval
No money has moved yet. The transaction, your checklist answers, the signature verification, and the name-enquiry result are now in the approval queue for a different officer. It posts only when they approve — and the customer is notified the moment it does.
Case
Subject
Typology
What the engine saw
Filing clock
Assigned
Flagged transactions
Investigation narrative (goes into the STR verbatim)
Evidence
Document preview mock — in the real console this renders the actual file (image, PDF, or log extract) inline, with zoom and download, all access audit-logged.
Review
Nothing approves unread: the change, its before/after, and its evidence come first.
Requested by
When
Why (maker's note)
Money impact
What changes if you approve
Before (today)
After (if approved)
Evidence
Transact
Money restrictions
Service
Lifecycle
New customer — what kind?
The type decides the whole journey: what identity is verified, who may sign, and which documents the account cannot open without. Choose once; the flow diverges from here.
Looking for “new partner”? There deliberately isn’t one. A partner is a business customer with API access switched on — so the agreement, mandate, settlement account, charge structure and KYC record all live on ONE customer record instead of two half-records that drift apart. Create the business customer, then open its profile → Actions → Enable API access. A partner’s own end users (sub-customers) are created programmatically through their API — never here — and appear under the partner’s profile.
New product — which family?
Every product is versioned configuration with its own ledger mapping; the family decides which terms the wizard collects.
Transact
Governance
Partner access
Service
Transact
KYC & profile
Restrictions
F-2026-11 · Reconcile accounts with correspondent banks monthly
Major · escalatedrepeat of F-2024-03Evidence submitted61 days overdue
Source
NDIC hybrid examination as at 31 March 2026 · item 11
Raised
31 March 2026 · due 31 May 2026
Owner
Head of Finance
Why it escalated
The same recommendation was made in the 31 December 2024 examination and marked NOT IMPLEMENTED. A repeat raises severity automatically — nobody has to argue for it.
What it cost
₦5,292,324 written off as Other Known Losses
Evidence trail
Ref
What was submitted
By
When
REC-2026-06
June reconciliation performed — both correspondents, zero difference
Head of Finance
02 Jul 2026
SYS-2026-01
Automated nostro reconciliation enabled; day-close now blocks on any unreconciled item
IT
15 Jul 2026
This is the finding that the reconciliation engine now answers structurally: the control is no longer a monthly task somebody may forget, it is a gate the accounting day cannot pass. That distinction is what closes a repeat finding credibly.
Place lien / amount block
This is a money-restricting action: it takes effect only when a second officer approves. The customer keeps seeing the amount, but it becomes unspendable.
Statement — Chinedu Okafor · 0234118765
01–24 August 2026 · generated from the ledger, so it cannot disagree with the books
Date
Description
Debit
Credit
Balance
24 Aug
NIP → ADAEZE NWOSU · GTBank
250,000.00
—
3,912,330.55
24 Aug
Transfer fee + levy
76.88
—
4,162,330.55
23 Aug
Salary · ZENITH
—
480,000.00
4,162,407.43
22 Aug
MTN airtime
5,000.00
—
3,682,407.43
Document — NIN slip · Chinedu Okafor
Document image renders here (stored encrypted, watermarked on view)
Uploaded
02 Aug 2026 · mobile app
Checked against
NIN lookup · name + DOB match ✓
Reviewed by
Kemi O. · accepted
New customer LIVE
Creates a REAL customer on the staging register. They start at Tier 0 — no account can be opened until the verification checks pass.
Record verification check LIVE
Records EVIDENCE of an identity check — which check, which provider, their reference, the result. Raw identity numbers (BVN/NIN) are refused by the server; only the provider\u2019s reference is stored. Tier recomputes instantly.
Propose account restriction LIVE
Nothing changes now: this creates a PROPOSAL that takes effect only when a DIFFERENT officer approves it in My approvals. Four eyes, enforced by the machine.
Connect operator key
This console is being served by the LIVE staging gateway. Enter the operator API key to see live data. The key is kept only in this browser tab (session storage), sent only to this same server, and this is a staging-only convenience — production uses signed-in operator sessions with MFA.
Report an incident — loss, near miss, or event
Same register the automatic feed writes to. If money was lost, say how much; if a control caught it in time, that is a near miss — record it anyway, it is the cheapest lesson available.
Occurred-to-discovered is the detection gap — the number this register exists to shrink. Today it averages 26 days; the automatic feed's entries average under one.
Cohort B — 3 validation errors
Row-level, with the exact fix — nothing loads until this list is empty
row 2,204
BVN checksum invalid (10 digits, expected 11)
fix at source
row 8,101
Account balance ₦−12.00 — negative balances need a matching overdraft record
fix at source
row 11,088
Duplicate NUBAN across cohorts A and B
auto-dedupe available
Manual journal
Both legs must balance to the kobo — the submit button stays dead until they do. Manual journals always require a second officer.
Balanced ✓
Mandate document — Emeka & Sons Ltd
Corporate Current 0234099812 · version 3 · effective 18 Aug 2026 · authority: board resolution BL-2026-08 (on file, verified)
Operating rules
Up to ₦500,000
any one class-A signatory
₦500,001 — ₦5,000,000
any two signatories, at least one class-A
Above ₦5,000,000
two class-A + board resolution on file
Authorised signatories & specimens
Emeka NwosuClass A · MD
Adaeze NwosuClass A · Director
K. ObioraClass B · Accountant
v3 — threshold raised from ₦300,000 on board letter BL-2026-08 · proposed Adaeze O., approved Eli S.
v1 — original mandate at account opening · board resolution BL-2024-03
Wizard
New customer
They start at Tier 0 — no account opens until verification evidence exists. Only the name is required: an officer at a counter has a name and a phone, and the rest arrives as the customer climbs the tiers. Identity numbers are never typed here — BVN and NIN are recorded as verification checks, and the platform keeps only a fingerprint.
Record verification check
Evidence only: which check, which provider, their reference, the result. Raw BVN/NIN numbers are refused by the server — the bank never stores them.
Open account
Tier 1 or above is required; the wall answers with exactly what is missing. The account number is a real NUBAN, minted by the bank.
Propose account restriction
Nothing changes now: this creates a proposal that takes effect only when a DIFFERENT officer approves it in My approvals.
New loan application
Nothing is disbursed now: the application goes to a credit officer, and only a DIFFERENT officer’s approval moves money. The customer must be verification tier 2 or better.
Book a fixed deposit
The principal leaves the customer’s spendable balance now. The interest shown is a commitment — it is paid automatically at maturity. Breaking the term early forfeits the interest and takes two officers.
Suspend this officer now
This takes effect immediately and ends every live session they have. It needs only you — ending access is always allowed. Restoring it will need a second officer.
Propose access change
Approve password reset
You choose the temporary password and hand it to the officer in person. The bank never invents one and never shows one back — once you close this box it exists only in their hands. They must set their own at next sign-in.
Stage a payment run
One funding account, many beneficiaries. Validation is all-or-nothing: one bad row and NOTHING loads — every error named with its row number. The staged run then needs a DIFFERENT officer's approval in My approvals before any row executes.