Kupinga

The enterprise user manual for the Kupinga anti-fraud platform.

A comprehensive guide for fraud analysts, compliance officers, operations engineers, system administrators and implementation partners. Catch what others miss.

Document
Enterprise Software User Manual
Product
Kupinga Anti-Fraud Platform
Version
v1.0 · RC-2026-05-20
Issued
21 May 2026
About this manual
Kupinga · v1.0 · 2026-05-21

About this manual

Why this document exists and how it is organised.

Read me first

This manual documents the day-to-day operation, configuration and administration of the Kupinga anti-fraud platform. It is the canonical reference for everyone who interacts with the application — from the analyst clearing the morning alert queue, through the compliance officer drafting a Suspicious Activity Report, to the SRE who watches the streaming fabric and the implementation partner who onboards a new tenant bank.

Every module that ships in the platform is documented here with its purpose, its audience, the fields and actions on the screen, the step-by-step usage for the most common workflows, the role and permission required to use it, the business rules and operational guardrails that govern it, and a screenshot taken from the live application so the reader can match the page on the screen to the description on the page.

The manual is organised by the operator's mental model rather than by service boundary. Workstream surfaces (Home, Investigations, Compliance, Screening, Adverse Media, Dashboards) appear first because they are where the daily work happens. Configuration surfaces (Detection, Administration, Ingestion, Operations) follow. Reference material sits at the back.

Audience & roles

The platform is built around a small number of well-known operating roles. Most readers will fit one of the profiles below. The permission model (see Permissions reference) controls exactly what each role can see and do.

RolePrimary surfacesWhat this manual gives them
Fraud AnalystInbox, Alerts, Cases, Customers, Transactions, HandoversHow to triage, investigate, decide, escalate and hand over.
Senior Analyst / Team LeadSame as analyst, plus Workflow Queues, Block approvals, Maker-CheckerHow to approve blocks, balance queues, and unstick stalled cases.
Compliance OfficerCompliance Dashboard, SAR/STR, Reports, Audit LogHow to file regulatory reports, schedule returns, and evidence decisions to a regulator.
Risk / ExecutiveExecutive, HQ Rollup, Risk Heatmap, Trend AnalyticsHow to read the portfolio-level dashboards and act on the signals.
Fraud EngineerScenarios, Rules, Model Registry, Monitoring, Explainable AIHow to safely change detection logic and govern model rollouts.
System AdministratorUsers & RBAC, SLA, Bank Config, Jobs, API Keys, IntegrationsHow to provision access, configure the institution, and integrate third parties.
Platform / SRESystem Status, Services Control, Ingestion, Batch, DatabusHow to monitor health, restart services, replay queues and prove lineage.
Implementation PartnerTenant onboarding, Adapters, Mappings, Schemas, SimulatorHow to bring a new tenant bank live without disrupting the production platform.

Conventions used in this document

NoteAn informational call-out. Provides extra context but does not change the procedure.
TipA recommended way of working. Following tips is optional but they reduce error.
CautionA guardrail. Ignoring it can produce noisy alerts, broken queues, or audit findings.
CriticalAn irreversible or regulator-visible operation. Read carefully before you act.

Inline literals such as routes, permission keys, configuration values and CLI commands are rendered in mono-spaced type. Field names appear the same way. Screenshots are reproduced with a thin border and a caption identifying the page, the section of the page and what the reader should be looking at.

Getting started

The platform is a web application. To use it you need:

  • A modern desktop browser. Chromium-based browsers (Chrome, Edge, Brave) and Safari are tested every release. Internet Explorer is not supported.
  • A user account, provisioned by your institution's administrator (see Users & RBAC) and assigned to one or more roles.
  • Network access to the institution's Kupinga URL — typically https://antifraud.<your-bank> on the corporate network or VPN.
  • If your institution uses single sign-on, your IdP account (Active Directory, Okta or similar) — you will not need a separate Kupinga password.

The application has three persistent surfaces: a top bar that hosts notifications, your active shift badge and the user menu; a left navigation that lists every section you are allowed to see; and a main content area that renders the currently selected page.

The left navigation is grouped into eleven sections — Home, Investigations, Compliance, Sanctions & Screening, Adverse Media, Dashboards, Detection, Administration, Ingestion, Operations, Settings — and is permission-filtered: links you do not have rights to use are not rendered. The platform fails closed: if a permission has not been granted to your account, the link does not appear and the URL is blocked by a permission gate, even if you type it directly.

The left navigation and the main content area scroll independently. Long admin sections may push items below the fold; scroll the left rail to find them.

Access & sign-in

How to authenticate, manage your session, and recover access.

Sign-in page

Audience: everyone /login

The sign-in page is the only unauthenticated surface in the application. Every other URL redirects here when no session is present, preserving the deep-link as a ?next= parameter so the user is sent back to the requested page after authentication.

Kupinga sign-in page
Figure A1 — Sign-in page. Email + password form. If your institution has configured an identity provider, a Continue with SSO button appears above the form.

Key fields

FieldTypeNotes
EmailemailYour work email address as provisioned in Users & RBAC.
PasswordpasswordSubject to your institution's complexity and rotation policy. Repeated failures lock the account; an administrator must unlock it from Users & RBAC.
Continue with SSOactionVisible only when OIDC is enabled. Hands off to your IdP for credential capture and MFA.

How to sign in

  1. Open the URL provided by your administrator. The address may differ between staging and production environments.
  2. Enter your work email and password, or click Continue with SSO if your institution uses single sign-on.
  3. If your account is provisioned with multi-factor authentication, complete the MFA challenge.
  4. You will land on your role-appropriate home page — analysts on the Unified Inbox, executives on the My Dashboard, compliance officers on the Compliance Dashboard.
CautionEvery sign-in attempt — success and failure — is recorded in the Access log. Failed attempts beyond the configured threshold lock the account.

Common issues

  • Account is locked. Five consecutive failed sign-ins lock the account. An administrator must unlock it from Users & RBAC; the manual procedure is documented in that section.
  • SSO button does not appear. OIDC is disabled for your environment. Use the password form.
  • You are redirected back to /login after submitting. Your session expired before the redirect completed. Sign in again — the deep link is preserved.

Forgot password

Audience: everyone /login/forgot

If you have forgotten your password, request a reset link. The platform issues the same generic response whether the email is registered or not, so attackers cannot enumerate accounts by status code.

Forgot password
Figure A2 — Forgot password. Submit your work email; a reset link is dispatched if the account exists. Same response either way to prevent enumeration.
  1. From the sign-in page, click Forgot password?.
  2. Enter your work email and submit.
  3. Check the email account for the reset link. The link expires after the duration configured in SLA policy (default 30 minutes).
  4. Follow the link to set a new password.
NoteInstitutions that use SSO disable the password reset flow; users reset their credentials through the IdP rather than through Kupinga.

Sessions, shifts and timeouts

Audience: everyone Top-right of every page

Your session has two clocks. The first is the security clock: the access token rotates silently every few minutes and expires after the maximum lifetime configured in the SLA policy. The second is the operational clock: the active shift. Analysts work in shift windows so the institution has a clear chain of custody and the system can route alerts to whoever is actually on duty.

You will see a banner across the top of every page when your shift is within ten minutes of ending. The banner links to the End-of-shift form so you can complete your handover before you sign out.

TipOpen the user menu in the top-right to see your role, your current shift window, and a one-click sign-out. Signing out cancels the active shift but does not file a handover — file one first if you have open items.

Home

Where every signed-in user lands, regardless of role.

The Home section gives every user one place to start the day. My Dashboard is the personal landing page — it adapts to the role so an executive sees portfolio-level signals and an analyst sees personal queue counters. The Unified Inbox aggregates every actionable item from across the platform into a single triage workspace.

My Dashboard

All signed-in users /my-dashboard Role-adaptive
Purpose
One personal landing page that adapts to the user's role and shows what matters most to that audience without a configuration step.
Audience
Every signed-in user. No permission gate at the link itself.
When to use
First page of the day. Quick reset between deep investigations. The place to go when an alert tab has been open for too long.

My Dashboard is the institution's standard personal home page. Rather than presenting one generic dashboard to everyone, it picks one of four curated variants based on the signed-in user's role and permission set, so a compliance officer never has to skip past analyst counters and an analyst never has to scroll past board-level KPIs.

How the variant is chosen

The page reads /api/v1/me on mount and applies the following resolution order — the first matching rule wins:

If…Variant renderedWhy
Role is admin or principal holds system:adminExecutive — same content as Executive DashboardFull org reach. Anyone who could read everything anyway should land on the portfolio view.
Role is compliance_officer or principal holds audit_log:readCompliance — same content as Compliance DashboardSAR/STR pipeline, regulatory return schedule and compliance calendar are the daily work of this role.
Principal holds alerts:read or cases:readAnalyst — personal-queue dashboardThe "what is on my plate right now" view that an on-shift analyst needs to start the day.
None of the aboveViewer welcome — quick-link cards for whatever the user can actually openAPI users, observers, partner read-only accounts — give them a friendly landing instead of a half-empty page.
NoteThe variant is decided on every page mount, so changing role tier (or being granted a JIT permission mid-day) flips the dashboard the next time you navigate to it. There is no manual override; the platform never lets a user pick a dashboard their permissions do not match.

Variant 1 — Executive (admin)

For users with system:admin or the admin role. Renders the same content as /dashboard — portfolio-level KPIs across every channel: Agency, Internet, Mobile, ATM, POS, USSD & NIP. Captured below with a logged-in admin so every band is populated with real data; the distinguishing feature from the standalone Executive Dashboard is that the left navigation highlights My Dashboard (not Executive Dashboard) — confirming the user landed on their personal home page.

My Dashboard — Executive variant (top, admin view)
Figure 1.1a — Executive variant (top, admin view). Title Executive Dashboard under the Enterprise Risk Management eyebrow; period selector top-right (Last 7 Days · Last 30 Days selected · This Quarter · This Year · Custom) with "Updated 17:17" freshness stamp. First band — Outcome Split (3,600 decisions, last 24h — 3,097 approve at 86.0%, 323 review at 9.0%, 180 decline at 5.0%, with the inline guardrail "Decline rate above 5%. Investigate channel mix below." in red). KPI strip — Decisions 3,600 (8 channels active, +1.6% vs prior 30d), Total Amount ₦11.16B (vs ₦2382.7M prior 30d), Declined Amount ₦230.40M (2.1% of total · vs ₦355.6M prior 30d), Unique Customers 2,232, P95 Latency 268 ms on the decision pipeline. Second band — Decision Volume — Last 30 days with TODAY 4,400 · AVG/DAY 4,719 · DECLINE RATE (TODAY) 2.70% above a 30-day sparkline; Channel Mix bars (MOBILE_APP 880, NIP 720, INTERNET_BANKING 560, POS 440, USSD 360, AGENT_BANKING 280, ATM 200 — each with the 5.0% decline portion in red). The My Dashboard link in the left rail is the active selection.
My Dashboard — Executive variant (bottom, admin view)
Figure 1.1a (continued) — Executive variant (bottom, admin view). The lower bands once the page has scrolled. Top Rules by Volume — Last 7 Days lists FRD-003 High-velocity NIP burst (18,342 hits, 7% declined), FRD-005 Name-enquiry mismatch on high-value NIP (8,911 / 17%), FRD-002 POS authorisation outside customer pattern (6,432 / 10%), FRD-001 Profile change followed by high-value transfer (5,219 / 11%), FRD-006 USSD session anomaly with SIM-swap signal (3,987 / 16%), FRD-009 Cross-border wire to high-risk corridor (2,103 / 12%), FRD-008 Agent cluster cash-out concentration (1,762 / 8%). Active Models card lists fraud-scorer 2026.05.03 (PRODUCTION · active · AUC 0.974), ato-scorer 2026.04.18 (PRODUCTION · active · AUC 0.961), mule-detector 2026.04.05 (PRODUCTION · active · AUC 0.943) and sar-narrative-llm 2026.05.18 (SHADOW — under evaluation). Channel Mix bars finish at the top-right with RTGS 160. Left rail still anchored on My Dashboard.
NoteFor the full anatomy of each band — what every tile means, what endpoint feeds it, and how to read the dashboard band-by-band — see the dedicated Executive Dashboard section. The two pages render the same component; only the route, the active sidebar item and the entry point differ.

Variant 2 — Compliance

For users with the compliance_officer role or audit_log:read. Renders the same content as /compliance — the SAR/STR pipeline, the regulator schedule and the compliance calendar.

My Dashboard — Compliance variant (top)
Figure 1.1b — Compliance variant (top). Four headline tiles: In Progress (drafts + in review + pending approval), Submitted (filed with NFIU), Overdue (past their CBN-mandated 7-day filing window) and Filed this month. Below, the SAR / STR pipeline funnel (Draft → In review → Submitted → Acknowledged → Rejected) and the Compliance calendar with the 18 upcoming items grouped by week.
My Dashboard — Compliance variant (middle)
Figure 1.1c — Compliance variant (middle). The calendar continues into June with the recurring Daily queue health, Weekly throughput by channel, Monthly fraud KPI deck and the regulator-facing items (NFIU Currency Transactions Report, CBN Monthly Fraud Return). The Upcoming regulatory returns table starts at the bottom of the viewport.
My Dashboard — Compliance variant (bottom)
Figure 1.1d — Compliance variant (bottom). The Upcoming regulatory returns table in full — due date, regulator, code (OPS-QUEUE, NFIU-CTR, CBN-MONTHLY, …), name and type (Operational, Regulatory). The Reports console link in the top-right of the table jumps straight to the Reports catalogue.

Variant 3 — Analyst

For users holding alerts:read or cases:read but not the elevated permissions above. The page answers a single question: "what is on my plate right now?"

My Dashboard — Analyst variant
Figure 1.1e — Analyst variant. A personalised greeting ("Good afternoon, Test.") with the on-shift and analyst chips top-right. Four personal counters: Open Alerts (16), In Review (8), Pending Approvals (10 — 4 blocks · 6 SARs) and Personal SLA (0% — 24 breached / 24 total, framed by a yellow attention border). Below: a "My open alerts" list (empty-state copy "Pull from a queue when you start your shift.") and Quick triage cards (Open inbox, SLA breaches first, Customer search, Pull next from queue) — each card has a one-click Go affordance straight to the right surface.

Variant 4 — Viewer welcome

For accounts that hold no analyst, compliance or admin permission — API integration accounts, observers, partner read-only users. Instead of rendering an empty dashboard, the page shows a welcome card and only the quick links the user's permissions actually let them open.

My Dashboard — Viewer welcome
Figure 1.1f — Viewer welcome. "Welcome, Test Analyst — Quick links to the surfaces you have access to. Your reach is set by your role; talk to an admin if something's missing." The example principal holds transactions:read and customers:read, so only the Transactions and Customers tiles render. A principal with no surface permissions sees the welcome header alone — the platform never renders a grid of greyed-out cards.

Common chrome on every variant

  • Shift-end banner. The orange banner at the top of every page appears when the analyst's shift has less than ten minutes remaining and links straight to End-of-shift. It is dismissable per page but the shift clock keeps ticking and the banner returns on the next navigation.
  • Active navigation marker. "My Dashboard" in the left rail is highlighted in Kupinga blue while the user is on this page.
  • Real-time updates. Analyst counters refresh on the WebSocket alert/case events; the executive and compliance variants refresh on their own polling intervals (default 30s).
  • Empty states. Every tile that has nothing to show explains why. Empty is never the same shape as broken.

How to use it well

  1. Land here first. Treat it as the homepage — the shape of what you see tells you what kind of day you have ahead.
  2. Trust the chips. The on shift / analyst chips top-right of the analyst variant reflect your current state, not what you logged in as — if you handed shift but did not sign out, this is how you confirm.
  3. Open one thing. Don't bounce between the Quick triage shortcuts. Open the inbox or pull the next alert and finish it before coming back.
  4. Use the personal SLA tile as your priority signal. A 0% personal SLA in the analyst variant is the loudest warning the platform makes about you personally.

Permissions reference

PermissionEffect on My Dashboard
system:admin / admin roleRoutes to Executive variant.
audit_log:read / compliance_officer roleRoutes to Compliance variant (and unlocks the SAR / Reports / Audit log surfaces).
alerts:read / cases:readRoutes to Analyst variant.
Any of transactions:read, customers:read, blocks:read, reports:read, branches:read, teams:readRenders a corresponding quick-link card on the Viewer welcome variant.

Operational notes

  • The route itself is gated by the same outer permission group as the rest of the Insights/Operations rollup. A principal who somehow has no permission in that family will see an "Access denied" card rather than the dashboard.
  • The analyst variant's "My open alerts" list shows your assigned alerts only — not everything in the queue. Use the Alerts queue to pull from the queue.
  • Counters can lag behind the real database by up to one polling cycle (30 seconds) during high-traffic periods. If two counters disagree, refresh the page.
  • "Personal SLA = 0%" with breaches > 0 means every one of your assigned items has missed its SLA. This is a coaching signal — talk to your team lead before continuing.
CautionThe executive and compliance variants surface portfolio-level numbers — board-room information. Treat the page like any other report containing PII: do not screen-share it without permission, and use the Print button on the underlying Executive Dashboard rather than camera-captures when an offline copy is needed.
TipIf your dashboard looks like the wrong variant, your role or permission set probably needs adjusting. Open the Settings hub for your current role and permissions, then contact your administrator — do not work around the wrong dashboard by deep-linking to the surface you expected.

Unified Inbox

Inbox readers /inbox Canonical landing
Purpose
One queue that aggregates alerts, pending blocks, SAR reviews, handovers and notifications.
Audience
Any role with inbox:read. Analysts especially.
When to use
The first thing you open. Triage everything that needs your attention without switching pages.
Unified inbox
Figure 1.2 — Unified Inbox. Three-pane workspace: list of items on the left, focused item in the middle, contextual details on the right. The left-nav highlights "Inbox" as the active item.

Why this exists

Without the Inbox, an analyst would have to check four separate queues every morning — alerts, block approvals, SAR reviews waiting for sign-off and overnight notifications. The Inbox merges all of them into one ranked list so nothing is forgotten. Items are sorted by SLA proximity and severity.

Key actions

  • Click an item in the left column to focus it. The middle pane shows the workspace; the right pane shows context (history, related cases, similar items).
  • Press j / k to walk through items without taking your hands off the keyboard.
  • Decide, escalate or hand off from the action bar. Every decision lands in the Audit log immediately.

Permissions

Visibility of an item is gated by the underlying resource permission — an analyst without sars:read will not see SAR review items in the Inbox even if they otherwise have inbox:read.

TipThe Inbox is the recommended landing page for analyst roles. Configure it as the default route from the Settings hub.

Investigations

The analyst's daily lane: alerts, cases, customers, transactions, and the relationships between them.

Investigations is where fraud is found, evidenced and acted on. Alerts arrive from the rules engine and the ML models; analysts triage them into cases; cases hold the chain of evidence; customers and transactions are the anchors. Network Explorer and Consortium Intelligence widen the lens beyond the institution.

This section is the busiest part of the platform for the average user. Every page below is designed to keep keyboard-driven analysts fast: predictable layouts, consistent action bars, copy-on-click identifiers, and SLA banding everywhere.

Alerts queue

Analysts /alerts Real-time
Purpose
Stream of all fraud alerts awaiting triage, with filters, queues, and SLA bands.
Audience
Anyone with alerts:read.
When to use
Every shift — this is where alerts that have not yet been picked up live.
Alerts queue
Figure 2.1 — Alerts queue. Filter strip across the top (All open, My Queue, Unassigned Critical, SLA At-Risk), table of alerts below, fraud-queue counts in the left rail. The "Alerts" item in the sidebar is the active selection.

Key columns

ColumnMeaning
PriorityCritical · High · Medium · Low. Drives queue sort order and SLA budget.
ScenarioThe rule or scenario that fired (e.g. FRD-001 Profile change followed by high-value transfer).
CustomerSubject of the alert. Hyperlinks to Customer 360.
Amount / ChannelUnderlying transaction context.
QueueBanking · POS · AML · Cyber. Determines who is on the hook.
SLATime remaining inside the SLA window — green, amber, red.
OwnerAnalyst the alert is assigned to. Blank = unassigned.

How to triage an alert

  1. Filter the list to My Queue or to the queue you are working today.
  2. Click the alert ID to open the Alert detail page.
  3. Review the rationale strip and the underlying transaction.
  4. Pivot to Customer 360 for context if the alert is not self-evident.
  5. Decide: Approve, Decline, Escalate to case, Step-up customer, or Block.

Filters

Alerts queue with filters
Figure 2.2 — Filter panel (when opened). Narrow by channel, scenario, priority, queue, SLA band and time window. Filters compose; multi-select widens the result set.

Business rules

  • Alerts are deduplicated by the platform — repeated firings against the same underlying activity within a configurable window are folded into one row to keep the queue scannable.
  • SLA budgets come from the SLA policy — critical alerts default to 15 minutes; lower priorities have longer budgets.
  • Decisions are append-only — the audit trail records every state change with the analyst's identity, the timestamp, and the rationale, and cannot be edited.
CautionDecisions made on alerts feed back into the Closed-loop feedback store and influence future model training. Snap decisions degrade model quality across the platform.

Alert detail & review

Analysts /alerts/<id>

The alert workspace is where most of the daily decisions are made. It surfaces the underlying transaction, the rule rationale, the customer profile, the device and channel signals, and the buttons that record the decision.

Alert detail — top
Figure 2.3a — Alert detail (top). Header strip with priority, SLA, queue and assignee; rationale panel; underlying transaction summary.
Alert detail — middle
Figure 2.3b — Alert detail (middle). Customer summary card, related signals, device fingerprint context.
Alert detail — bottom
Figure 2.3c — Alert detail (bottom). Decision action bar, comment thread and audit trail.

Decisions available

DecisionWhat it doesPermission
ApproveClose the alert as not fraud. The underlying transaction proceeds.alerts:decide
DeclineBlock the underlying transaction. May produce a customer challenge.alerts:decide
Escalate to casePromote to a Case with a full evidence pack.cases:create
Step-upTrigger a customer challenge (OTP, callback, video).alerts:step_up
Place blockOpen the block request form pre-populated with the customer and rationale.blocks:request
CriticalThe Decline and Place Block actions affect customers directly. If you are unsure, escalate to a case rather than declining outright — declining cannot be undone without manual rollback by an administrator.

Common mistakes

  • Approving an alert without leaving a rationale in the comment thread. Future audits cannot reconstruct why the decision was made.
  • Escalating to case when a step-up challenge would have resolved the suspicion in two minutes.
  • Decline-then-undo loops. The platform tracks these and the analyst's quality score drops — repeated occurrences trigger a coaching review from the team lead.

Cases list

Analysts /cases

A case is the durable container for an investigation. It holds alerts, transactions, customers, evidence, comments, decisions, and any SAR or block raised from it. The Cases list is the queue of investigations that are not yet closed.

Cases list
Figure 2.4 — Cases list. Open cases grouped by team and SLA band. Click a case ID to drill in.

Case lifecycle

Cases progress through a fixed state machine: NewIn reviewAwaiting customerPending closureClosed. The state machine is rendered visually on the State machine view page.

Filters

  • Owner — your cases vs the team's vs unassigned.
  • State — only New, only In review, etc.
  • Scenario — group by the originating rule or model.
  • SLA — surface cases that are about to breach.

Case detail

Analysts /cases/<id>

The case workspace is where an investigation is built. It has tabs for the summary, the linked alerts, the transactions of interest, the customer profile, the evidence locker, and the activity timeline.

Case detail — header
Figure 2.5a — Case detail (header). Subject, priority, state, age and SLA at a glance. Action bar on the right.
Case detail — evidence
Figure 2.5b — Case detail (evidence). Linked alerts and transactions; customer signal strip; rule rationale.
Case detail — timeline
Figure 2.5c — Case detail (timeline). Append-only timeline of every action by every analyst. The audit trail of the case.
Case detail — actions
Figure 2.5d — Case detail (closure). Closure actions: close as confirmed fraud, close as not fraud, file SAR, hand over to the next shift.

Key actions

  • Link items. Drag alerts and transactions into the case to build the evidence pack.
  • Comment. Every comment is timestamped and signed; comments cannot be edited or deleted (only flagged).
  • File a SAR. Open the SAR wizard pre-populated with the case data — the regulator's narrative is the case timeline.
  • Place a block. Opens the block request form pre-filled with the case context.
  • Hand over. Park the case for the next shift with a structured note — see Handovers.
  • Close. Confirmed fraud, not fraud, or insufficient evidence. Closure is irreversible by analysts — reopening requires a team lead.
CautionA case cannot be closed while it has open alerts attached. Decide every linked alert first, or unlink alerts that turned out to be unrelated.

Customers search

Analysts /customers

A search-first hub for finding a customer by name, customer number, BVN, email or phone. The page intentionally renders no rows until the user has searched — the customer base is too large to list and a fishing expedition is not a valid use case.

Customers search — empty state
Figure 2.6a — Customers search (empty). Type a customer number, name, BVN, email or phone to find a record.
Customers search — results
Figure 2.6b — Customers search (results). The search bar carries the query Lagos; the Searching label confirms the query is committed. Eight matched customers render in the results table — Adesola Mule (high · 78 · pnd), Olamide Victim (critical · 91 · pnd), Hon. Adetokunbo Bello (medium · 64 · active), Lagos Tech Hub (critical · 92 · restricted), Funke Dormant (low · 28 · active), Chioma Adebayo (high · 71 · restricted), Ifeanyi Agent (high · 84 · restricted), Bola Retail (high · 82 · pnd). Each row shows the customer-number (DEMOC-<persona>-<seq>), the masked BVN, the masked phone, the KYC tier (TIER_1 / TIER_2 / TIER_3), the risk score + tier badge (colour-coded low → critical) and the account status badge (active / pnd / restricted). Hyperlinks on the customer name open Customer 360. The "Customers" item in the left navigation is the active selection.

Result columns

  • Customer — display name and email; click to open Customer 360.
  • Customer number — institution identifier.
  • BVN — masked unless the analyst has elevated PII access.
  • KYC tier — Tier 1, 2, or 3.
  • Risk — composite score with risk-tier badge.
  • Status — Active, Restricted, PND, Closed.
NoteBVN and other PII fields are masked by default. Unmasked access is auditable and only available to analysts with customers:read_pii. Every unmask is recorded with the analyst's identity in the Audit log.

Customer 360

Analysts /customers/<id>

The single most-loaded page in the platform during an active investigation. Every fact the platform knows about the customer — identity, KYC, accounts, transactions, alerts, cases, challenges, screening hits, adverse-media verdicts, blocks, network neighbours and behaviour over time — is gathered here under one set of tabs.

Customer 360 — top
Figure 2.7a — Customer 360 (top). Header strip (identity + risk + 90-day trajectory), tabbed workspace, headline counters. The active tab is Overview.
Customer 360 — bottom
Figure 2.7b — Customer 360 (bottom). Recent activity feed and the profile dossier (KYC, address, identifiers, screening posture).

Tabs

TabWhat it shows
OverviewProfile, risk score, recent activity, screening posture.
AccountsEvery account owned by the customer with balances and statuses.
TransactionsTransaction history with channel filters and amount banding.
Alerts & CasesEvery alert and case ever raised against this customer.
ChallengesOTP, callback and video challenge outcomes.
ScreeningSanctions, PEP, watchlist and ad-hoc screening hits.
Adverse mediaLLM-classified mentions, with verdict and citation trail.
BlocksActive and historical blocks against any account.
NetworkCounterparties, devices and connections — drill into Network Explorer.
BehaviourChannel mix, time-of-day, amount distributions.
NotesAnalyst notes, append-only.
TimelineUnified timeline of everything that has ever happened on the account.

Common actions

  • Export dossier. Top-right button. Produces a regulator-ready PDF of the entire 360 view.
  • Ad-hoc screen. Run the customer against sanctions / PEP / adverse-media on demand.
  • Trigger challenge. Step the customer up with OTP, callback or video proof of life.
  • Request a block. Pre-populates the block form with this customer and the case context.

Transactions

Analysts /transactions

The cross-customer transaction explorer. Used when the question is "show me every transaction matching X" rather than "show me what this customer did". Filters span channel, amount, time, currency, counterparty and decision outcome.

Transactions — top
Figure 2.8a — Transactions (top). Filter strip across the top, results table below.
Transactions — bottom
Figure 2.8b — Transactions (lower controls). Pagination, page-size selector and export options.

Filters

Filters are persistent for the session — switching pages does not lose them. Channels (POS, NIP, RTGS, USSD, mobile, internet, agent, ATM) colour-code the results so a scan reveals channel concentration at a glance.

Transaction detail

Analysts Compliance reviewers /transactions/<id>
Purpose
Single, printable, regulator-ready view of one transaction across every dimension that matters during an investigation.
Audience
Anyone with transactions:read — analysts during triage, compliance during SAR drafting, audit during a regulator visit.
When to use
Whenever a single transaction is the unit of work — confirming an alert rationale, attaching to a case, exporting as evidence.

The Transaction detail page is reached three ways: by clicking a row in the Transactions list, by following the underlying-transaction link from an alert, or by pasting a transaction reference into the global search bar. The same page is rendered for every channel — POS, NIP, RTGS, USSD, mobile, internet, agent, ATM — and adapts its content to whichever signals the channel produces, instead of duplicating the layout per channel.

Layout

The page is a sticky-header workspace above a Radix-style accordion. Every accordion section is open by default so the analyst sees the whole transaction in one scroll; sections can be collapsed individually to skim, and the print stylesheet forces all sections open regardless of state so the printable evidence pack is always complete.

Transaction detail — top (header → Source)
Figure 2.9a — Transaction detail (top). Sticky header with the transaction reference NIP-100024-26050414000001, the Successful + NIP status/channel chips, the amount (₦2,500,000.00) and the Print action. Overview section shows the Name Enquiry mismatch (32% similarity) and the NIP session id. Source & Destination cards render side-by-side with masked accounts, bank codes and a cross-link to the originating customer (C9001). Channel & Device and Merchant / Terminal sections render an explanatory dash because NIP does not produce those signals. The "Transactions" item in the left navigation is highlighted as the active selection.
Transaction detail — bottom (Balances → Raw payload)
Figure 2.9b — Transaction detail (bottom). Lower half of the page after scrolling: Source/Destination tile bases; Channel & Device and Merchant / Terminal "no signal" panels; Balances (source debit ₦5,000,000 → ₦2,500,000 with the −₦2,500,000 reduction in red); Linked entities listing the FRD-005 name-mismatch alert at score 78 with an open badge, plus the attached Decision · review; and the Raw payload section with its one-line JSON preview and copy-on-click affordance.

Header — the at-a-glance row

The header strip is sticky on long-scroll so the transaction reference, status and amount remain visible while the analyst reads through the rest of the page.

FieldMeaning
Transaction referenceThe institution-issued identifier (POS-, NIP-, RTGS-, USSD-…). The single most useful piece of evidence to put in a case note. Copy-on-click.
Status chipSuccessful · Pending · Failed / Reversed · Cancelled. The terminal state of the transaction in the source system.
Channel badgePOS · NIP · RTGS · USSD · mobile · internet · agent · ATM. Colour-coded the same way as the Transactions list so the eye carries colour memory between the two pages.
AmountRight-aligned and bold. Currency is the institution's default unless the transaction is explicitly multi-currency.
Occurred at / Posted atInitiation time and settlement time. Useful for spotting NIP-style settle lag.
PrintOpens the browser print dialog with the print stylesheet applied. Every accordion section is forced open in the PDF so nothing is hidden in the printed evidence pack.

The seven accordion sections

SectionWhat it showsImportant when…
1. OverviewChannel-specific high-signal fields: name-enquiry result, NIP session ID, RTGS payment instruction, POS auth code. These are the fields most likely to be quoted in a SAR narrative.Reviewing the alert rationale; quick scan to decide whether to escalate.
2. SourceThe debiting party: customer name (if a known customer), NUBAN, account type (Savings, Current, Wallet), holding bank with CBN code. The customer link opens Customer 360.Confirming the originating account belongs to the customer on the alert.
3. DestinationThe crediting party. Often a different institution; OPay, Kuda and PalmPay receiving accounts are common destinations for mule transfers and the platform colour-codes high-velocity counterparties.Spotting "first-stop" beneficiaries that the consortium has already seen.
4. Channel & DeviceFor online channels — device fingerprint, OS, browser, IP, geo-IP, ASN, Tor flag, SIM-swap signal, recent-device-change marker.FRD-001 (profile-change-then-transfer), FRD-006 (SIM-swap → ATO), FRD-007 (device-binding fraud).
5. Merchant / TerminalFor acquiring channels — merchant ID (MID), terminal ID (TID), MCC, location, acquirer.FRD-002 (POS card-testing), terminal velocity scenarios.
6. BalancesThe source debit and destination credit shown as an arrow with explicit pre- and post-balance values; reversals show the inverse.Confirming the transaction actually moved value (vs declined / reversed).
7. Linked entitiesEvery alert that fired on this transaction, every decision attached, every case it belongs to.Building the evidence pack. Each row links back to the alert / case it represents.
8. Raw payloadThe verbatim canonical JSON that landed on the platform from the source system. Collapsible; click to expand. Copy-on-click to attach to a SAR draft.Disputes — when the regulator asks "show me exactly what the platform was given".
NoteChannel & Device and Merchant / Terminal render an explanatory dash ("No additional channel or device metadata.") when the channel does not produce that signal. The dash is intentional — it tells the analyst the absence is normal for this channel, not that data is missing.

How to use

  1. Read the Overview first. For a NIP transfer, check the Name Enquiry result; for POS, check the auth code and the entry mode; for RTGS, read the narration.
  2. Confirm the Source belongs to the customer on the alert. A mismatch here is itself a finding.
  3. Look at the Destination. Click the destination customer link if it is internal; check the counterparty bank if it is external.
  4. Open Linked entities to see which alerts fired on this transaction and the analyst decisions already recorded.
  5. Decide. From this page you can pivot to the alert, the case, the source customer or the destination customer; you can attach the transaction to a case; or you can print the evidence pack.

Actions

ActionBehaviourPermission
PrintRenders the page with every section forced open and the chrome stripped. Save as PDF to attach to a SAR or a case note.transactions:read
Open customerPivots to the source or destination customer's Customer 360.customers:read
Open alertFrom a row in Linked entities — opens the alert detail page.alerts:read
Attach to caseAdds the transaction to an existing case as evidence. Reachable from the case workspace, not from this page directly.cases:edit
Copy raw payloadCopies the verbatim canonical JSON to the clipboard. Useful for SAR drafts and audit replies.transactions:read

Permissions & PII

The page requires transactions:read. NUBAN and BVN fields are masked by default; analysts with customers:read_pii see the unmasked value and every unmask is recorded in the Audit log. Raw-payload PII follows the same rule — sensitive fields inside the JSON are masked in the rendered preview but the unmasked value is available in the copied clipboard text only when the elevated permission is held.

Operational notes

  • One canonical record per transaction. A reversal does not produce a second transaction — the platform reuses the same record and updates the status. The Balances section flips to show the reversed direction.
  • NIP session ID is the high-signal join key. When an analyst pivots between this page, the Network Explorer and the consortium feed, NIP session ID is the field most likely to match.
  • Print is the regulator-ready export path. The PDF produced by the browser print dialog is the format the platform commits to for evidence packs. Custom downloads or screenshot exports are not equivalent.
  • Linked entities is the back-pointer. If an alert was raised on a transaction but the analyst opened the transaction first, this is where they find the alert. There is no "no alerts" empty state — the section is hidden entirely when there are none.
CautionIf the transaction reference shown in the header does not match the reference you typed into the address bar, you are looking at a different transaction — the platform never silently rewrites references. Investigate the link that brought you here; a mismatch is a signal of corrupted state or a broken integration.

Common pitfalls

  • Quoting the database id in a SAR instead of the transaction_reference. The reference is institution-issued and customer-recognisable; the database id is not.
  • Copying the masked NUBAN out of the rendered text. Use the copy widget — it copies the unmasked value (subject to PII permission) so downstream attachments are usable.
  • Closing the Raw payload accordion before printing. The print stylesheet re-opens it automatically, but on-screen review may miss it if collapsed.
  • Treating "No additional channel or device metadata" as a bug. For NIP, RTGS and most server-to-server channels this is the normal state.
TipThe header layout is responsive — on narrow screens the chips wrap and the page never horizontally scrolls. If you are demoing on a small projector, the page will still read cleanly.

Network Explorer

Analysts /investigations/network

A force-directed graph that lays out the customer, the counterparties they have transacted with, the devices used and the accounts touched. The right tool when the investigation is about a ring rather than a single customer.

Network Explorer
Figure 2.10 — Network Explorer. Seed a search with a customer or account; expand neighbours; highlight the cluster.

How to use

  1. Seed the graph by typing a customer number, account, BVN, device hash or phone number.
  2. Click a node to expand its first-degree neighbours. Repeat to broaden the picture.
  3. Use the legend toggles to hide weak edges or filter to a single channel.
  4. Copy a node's identifier into the clipboard with the small inline button beside it — useful when pivoting back to Customer 360.
TipMule rings are usually obvious in Network Explorer within two hops — look for a star pattern where many customers transact with the same wallet over a short window.

Consortium Intelligence

Senior analysts /intelligence/consortium

The shared intelligence feed — typologies, suspicious counterparty wallets, compromised device hashes and emerging tactics — contributed by every Kupinga tenant in anonymised form. Used to spot fraud that another bank already saw, before it spreads.

Consortium Intelligence
Figure 2.11 — Consortium Intelligence (admin view). INTELLIGENCE eyebrow above the Consortium feed title with the operator brief: "Cross-bank watchlists, indicators of compromise, and industry-wide alerts shared by consortium members. Acknowledge what you've reviewed; escalate anything that needs immediate triage." Four KPI tiles across the top — Open items, Watchlist hits, IOC matches, Acknowledged — all at 0 in this fresh sandbox tenant. Three tabs follow (Watchlist hits selected, IOC matches, Industry alerts) with the empty-state copy "No watchlist hits — Nothing actionable right now. Toggle 'Show actioned items' to see acknowledged or ignored history." Footnote at the bottom: "Data ingestion is owned by the consortium gateway (AF-D40). Items appear here within seconds of upstream publication." The "Consortium Intel" item in the left navigation is the active selection.
CautionContributions to the Consortium are stripped of PII before they leave the institution, but contributions are governed by the institution's data sharing policy. Make sure your role-tier permits contribution before publishing a signal.

Compliance

Regulatory workflows — SAR/STR filings, block management, regulatory reports, and the compliance officer's dashboard.

The Compliance section is the regulator-facing surface of the platform. It is where Suspicious Activity Reports are drafted, reviewed and filed; where blocks and post-no-debit orders are requested, approved and lifted; where reports are scheduled to land in the regulator's inbox; and where the compliance officer's day starts.

Compliance dashboard

Compliance officers /compliance
Purpose
One screen for the SAR/STR pipeline, the regulatory return schedule and the compliance calendar.
Audience
Compliance officers; anyone with audit:read.
When to use
First page of the compliance officer's day. Also useful before regulator visits.
Compliance dashboard — top
Figure 3.1a — Compliance dashboard (top). SAR pipeline funnel, time-to-file metrics, regulator-facing KPIs.
Compliance dashboard — middle
Figure 3.1b — Compliance dashboard (middle). Regulatory return schedule with status badges.
Compliance dashboard — lower middle
Figure 3.1c — Compliance dashboard. Blocks and freezes overview, customer challenge outcomes.
Compliance dashboard — bottom
Figure 3.1d — Compliance dashboard (bottom). Compliance calendar — upcoming filings, audits and trainings.

What it tells you

  • How many SARs are in each pipeline stage — drafted, reviewed, approved, filed.
  • Whether any regulatory return is at risk of being filed late.
  • How blocks and challenges are landing this period.
  • Upcoming compliance events on the calendar.

SAR / STR filings

Compliance officers /sars

The SAR / STR workspace. Drafts are prepared from a case, reviewed by a second pair of eyes, approved by a third, and filed with the regulator. Each step is gated by a separate permission — the standard separation-of-duties pattern that auditors expect.

SAR/STR list
Figure 3.2 — SAR / STR list. Drafts, in review, approved, filed. Filter by stage, owner or originating case.

Lifecycle

  1. Prepare (sars:prepare) — Open a case and click File SAR. The wizard pre-fills subject, narrative and attached evidence from the case.
  2. Review (sars:review) — A reviewer (not the preparer) reads the draft and either returns it for amendment or moves it to approval.
  3. Approve (sars:approve) — An approver (not the preparer, not the reviewer) gives the final sign-off.
  4. File — The platform submits the SAR to the regulator's filing endpoint and stores the acknowledgement.
CriticalThe three permissions are deliberately separated. An institution that grants all three to the same user breaks separation of duties and may produce an audit finding. Use role tiers to enforce the separation.

Blocks & freezes

Analysts & team leads /blocks

Blocks are restrictive actions placed on a customer's account — Post-No-Debit, transaction freeze, partial restriction or full freeze. Every block goes through a maker-checker flow so no single user can freeze an account on their own (with the exception of explicit emergency-block permissions held by a small group of leads).

Blocks list — top
Figure 3.3a — Active blocks (top). Active and expiring blocks, with the account, the rationale, and the requester.
Blocks list — bottom
Figure 3.3b — Active blocks (lower). History strip and bulk-action affordances.

Requesting a block

Block request — top
Figure 3.4a — Block request form (top). Pre-fills customer / account when launched from an alert or case.
Block request — bottom
Figure 3.4b — Block request form (bottom). Block type, duration, rationale and supporting attachments.

Approval queue

Block approval queue
Figure 3.5 — Block approval queue. Pending blocks awaiting a second approver. The requester cannot approve their own request.

Permissions

ActionPermissionNotes
Request a blockblocks:requestGranted to analysts and above.
Approve a blockblocks:approveApprover must be different from the requester.
Lift a blockblocks:liftStandard lifts. Regulatory blocks need blocks:lift_regulatory.
Emergency block (no checker)blocks:emergencyHeld by a very small group. Every emergency block produces an audit ticket.
CautionA block that has been on a customer for more than seven days without a status update produces an SLA breach. Schedule a review meeting before the seven-day point.

Reports catalogue

Compliance, executives /reports

The catalogue of every report the platform can produce — standing regulatory returns, internal MI, scheduled email-outs and ad-hoc exports. Each report tile shows the last-run timestamp and links to the detail page where you can run it again or schedule it.

Reports catalogue — top
Figure 3.6a — Reports catalogue (top). Catalogue cards grouped by category — regulatory, MI, operational, ad-hoc.
Reports catalogue — bottom
Figure 3.6b — Reports catalogue (bottom). Additional cards and the All reports link.

Report scheduling

Compliance, administrators /reports/schedule

Where regulatory and MI reports are scheduled to run. Schedule by cron, set recipients, choose the delivery channel (email, SFTP, secure download) and the retention policy.

Report scheduling — top
Figure 3.7a — Report scheduling (top). Active schedules with next-run and last-run timestamps.
Report scheduling — middle
Figure 3.7b — Report scheduling (middle). Schedule editor — cron expression, recipients, delivery channel.
Report scheduling — bottom
Figure 3.7c — Report scheduling (bottom). Run history and failure diagnostics.
NoteScheduled reports run as a system identity, not as the user who created the schedule. The user is recorded as the schedule owner for audit purposes.

Handovers

Analysts /handovers

Shift work demands explicit handover. At the end of every shift, the analyst documents the open work, blocks the incoming shift will pick up, and any context that did not make it into the case or alert comments. The Handovers page is the durable record of those notes — searchable across shifts and never deleted.

Handovers log
Figure 3.8 — Handovers log. Every shift handover, by analyst, queue and timestamp. Click a row to read the full note.

End-of-shift form

Analysts /handovers/end-shift

The structured form that an analyst fills in before signing out. The platform reminds the analyst to file it in the last ten minutes of the shift.

End shift — top
Figure 3.9a — End-of-shift form (top). Open cases, outstanding actions, escalations.
End shift — bottom
Figure 3.9b — End-of-shift form (bottom). Free-text note and submit button.
TipThe form is fastest if you keep the case ids in a sticky note all shift. Paste them in; the platform looks them up and renders rich previews.

Sanctions & Screening

Sanctions, PEP and watchlist screening — the AML-style surface that sits alongside fraud monitoring.

Screening evaluates customers, counterparties and beneficiaries against sanctions lists (OFAC, EU, UK, UN), PEP databases and the institution's internal watchlist. Every customer onboarded is screened; every high-value transaction is screened against the beneficiary; and any analyst can run an ad-hoc check from the Console.

Screening dashboard

Compliance, screening operators /screening/dashboard

Headline metrics for the screening platform — match volume, hit precision, source freshness, model and matcher status.

Screening dashboard
Figure 4.1 — Screening dashboard. Match volume, true-positive precision, source freshness, matcher health.

Screening console

Screening operators /screening/console

Operator workspace for the screening engine — engine status, list catalogue, real-time activity. The page folds in what used to be a separate "Sources" tab; it now shows every list source the platform consumes, its last-refresh timestamp, and its current matcher status.

Screening console
Figure 4.2 — Screening console (admin view). Header "Screening console — Unified operations surface for the screening platform — matcher engine health, list catalogue provenance, dataset refresh telemetry, and manual list ingestion." Top KPI strip: Lists enabled 6, Healthy 5, Stale 0, Failed 1, Entities indexed 23,728. Engine card shows Matcher engine ready with 23,728 entities loaded across 6 lists, source cache_hit, normaliser 0.18.0 / scorer 0.14.2, last completed at 5:30 today. Sanctions sub-section below carries one card per list — OFAC_SDN (healthy · 14,820 entities · cadence 15m · last refresh "now"), EU_CONSOLIDATED (healthy · 4,410 · 15m), UK_HMT (stale · 2,910 · last refresh > 24h ago — flagged) with Disable / Cadence / Refresh now affordances on every card. The Console item in the Sanctions & Screening section of the left navigation is highlighted as the active selection.

What you can do here

  • Force-refresh a list source (where allowed by the source provider).
  • Inspect a matcher's behaviour against a sample subject.
  • Run an ad-hoc screen by typing a name, BVN or organisation.

Screening history

Compliance, analysts /screening/history

Searchable history of every screening run — who ran it, against what subject, against which lists, what matched, what was overridden. The regulator-facing audit trail.

Screening history
Figure 4.3 — Screening history (admin view). Title Sanctions screening history with subtitle "Full audit of every alert/onboard, PEP and watchlist scan run against any subject on the platform. Searchable, filterable, exportable — built for compliance teams and inspectors." A 30-day KPI strip carries five tiles — Scans 5,840, Hit Rate 3.7%, Block Band 28, Review Band 88, Hits Today 60 — with the "Last 24h" period chip selected. Filter row beneath: Search · Subject type · Status · Mode · Band · Matches presence toggle · Export CSV. Results table shows recent rows: Adesola Mule (customer · live · complete · weak band · invalid date), Hon. Adetokunbo Bello (related party · live · complete · weak), Lagos Tech Hub (merchant · live · complete · 2 matches · review band), Chioma Adebayo (customer · live · complete · 2 matches · review). Each row is clickable to open the per-screening detail. The History item in the left navigation is the active selection.

Adverse Media

LLM-classified mentions of customers and counterparties in news and the open web.

The Adverse Media track is the sister to Sanctions & Screening. It pulls news and watchdog feeds, runs them through a hash-pinned prompt against a governed LLM, and yields a per-mention classification with a citation trail. Subjects with persistent adverse mentions are graded into a durable risk tier on the Profiles page.

Adverse-media dashboard

Compliance, screening /adverse-media/dashboard
Adverse-media dashboard
Figure 5.1 — Adverse-media dashboard. Ingestion volume, LLM ops (latency, tokens), eval-set drift, feed health.

Feeds

Adverse-media operators /adverse-media/feeds

Catalogue of every news and watchdog feed the platform ingests. New feeds can be enabled only through an attestation gate — the operator confirms the feed is licensed for the institution's jurisdiction before traffic flows.

Adverse-media feeds
Figure 5.2 — Adverse-media feeds (admin view). Title Adverse-media feeds with the standing note "One row per ingestion source. A feed cannot flip enabled until its compliance attestation is on file (§15.5 / §22.5)." The catalogue renders as a card grid — GDelt Global News (RSS · tier_1 · GLOBAL · healthy · last pull 4m ago), BBC News Africa (RSS · tier_1 · healthy · 9m ago), Reuters World (RSS · tier_1 · healthy · 12m ago), Premium Times Nigeria (RSS · tier_2 · NG · healthy · 18m ago), The Punch (Nigeria) (RSS · tier_2 · healthy · 22m ago), OCCRP investigations (RSS · tier_1 · healthy · 6m ago), EFCC press releases (HTML scrape · tier_1 · NG · healthy · 14m), NFIU bulletins (HTML scrape · tier_1 · stale · 40m ago), X / Twitter fraud watchlist (social · tier_3 · disabled · last successful pull 4 days ago, 8 consecutive failures). Each card carries Refresh and Disable affordances (gated on attestation). The Feeds item in the Adverse Media section is the active selection.
CautionDisabling a feed does not delete the classifications it already produced. To purge classifications, use the data-retention controls on the Profiles page.

Classifications

Compliance reviewers /adverse-media/classifications

Per-mention LLM verdicts. Each row shows the subject, the verdict, the source, the prompt version that produced it, and the citation trail. Verdicts can be challenged — a challenged classification opens a review workflow and is excluded from the subject's profile aggregation while the challenge is open.

Adverse-media classifications
Figure 5.3 — Adverse-media classifications (admin view). Title Adverse-media classifications with subtitle "Per-(mention, stage) verdicts. Use the alerts queue for the full disposition workflow; this view is the analyst-side investigation surface." Filter strip across the top: Status (open · closed · all), Subject (customer · related party · merchant), Category (fraud, corruption, money laundering, sanctions evasion, terrorism financing, human trafficking, tax evasion, market abuse, regulatory breach, organised crime), Severity (low · medium · high · critical). Results table columns — SUBJECT, CATEGORY, SEVERITY, CONFIDENCE, STAGE, DISPOSITION, WHEN — populated with 10 rows: Adesola Mule (Fraud · high · 62% · classified · true_match), Hon. Adetokunbo Bello (sanctions · medium · 68% · classified · pending), Lagos Tech Hub (pep · high · 74% · classified · pending), Ifeanyi Agent (Corruption · critical · 80% · classified · pending), Chioma Adebayo (Fraud · medium · 86% · classified · true_match), then a second batch of fraud/aml/corruption rows with mixed dispositions (false_positive, pending). Click any row to open the per-classification detail with the citation trail. The Classifications item in the left navigation is the active selection.

Risk profiles

Compliance officers /adverse-media/profiles

The durable per-subject view. The profile aggregates every classification across time, weighs them by recency and severity, and assigns a risk tier (Low, Medium, High, Critical) used by downstream Customer 360.

Adverse-media profiles
Figure 5.4 — Adverse-media risk profiles (admin view). Title Adverse-media profiles with the standing brief "Durable per-(subject_type, subject_id) record. Tier + active categories + hit counts drive customer-360 and fraud-engine consumption." Lookup field carries the default profile id prof-cust-1231. The profile card below renders the durable record for the customer subject Adesola Mule with a HIGH risk tier badge top-right. Hit counters: Open hits 4, Total hits 18, 30d (any) 5, 365d (any) 19. Active categories: Fraud · aml. Notes: "Subject of an active FRD-003 case; mule controller suspected." Footer line: "Last screened 5/21/2026, 7:56:35 PM. Continuous monitoring: enhanced." The Profiles item in the Adverse Media section of the left navigation is the active selection.

Eval set

Compliance owners /adverse-media/eval-set

The labelled corpus that the compliance team owns. New prompt versions are evaluated against the eval set before they are promoted to production. If the eval-set scores drop, the deployment is blocked.

Adverse-media eval set
Figure 5.5 — Eval set. Compliance-owned labelled examples — the gate every prompt change must clear.

Prompt registry

Administrators (adverse_media:prompts_admin) /adverse-media/prompts

The hash-pinned prompt registry. Every prompt is stored with its SHA, the model it targets, the eval-set score at promotion, the operator who promoted it and the timestamp. Production traffic always runs against a pinned version — never against a freshly-edited draft.

Adverse-media prompts
Figure 5.6 — Prompt registry. Pinned prompt versions with scores and promotion lineage.
CriticalPromoting a new prompt without an updated eval-set score is gated and audited. Skipping the eval is not possible from the UI; it can only be done from the API by an emergency override role.

Dashboards

Every analytical roll-up across the institution — executive, risk, operations, branch, role-based.

Dashboards is the portfolio of views the institution uses to understand its fraud posture in aggregate. Each dashboard has a different audience and a different cadence — the Executive Dashboard is read in board meetings; Operations Health is up on the SOC wall; Risk Heatmap is a 30-day strategic view; the HQ Rollup compares branches and lines of business.

Executive Dashboard

Executives System administrators /dashboard Real-time, cross-channel
Purpose
One-screen, regulator-presentable view of the institution's fraud posture across every channel.
Audience
Executives (CRO, COO, Head of Fraud), system administrators, and anyone granted system:admin. Doubles as the My Dashboard landing for these roles.
When to use
Daily review at the start of the morning standup. Before board meetings. When an incident report cites a fraud volume number that needs checking.

The Executive Dashboard is the institution's at-a-glance picture of fraud across every channel the platform monitors — Agency, Internet, Mobile, ATM, POS, USSD & NIP. It pulls live aggregates from the analytics service and renders six bands of cards: Outcome Split, KPI strip, Decision Volume, Channel Mix, Top Rules by Volume and Active Models. The time window is operator-controlled with one click.

Executive Dashboard — top (Outcome Split, KPI strip, Decision Volume, Channel Mix)
Figure 6.1a — Executive Dashboard (top, Last 30 Days). Eyebrow Enterprise Risk Management; title Executive Dashboard; subtitle "Real-time monitoring across Agency, Internet, Mobile, ATM, POS, USSD & NIP." Period selector top-right with five chips (Last 7 Days, Last 30 Days selected, This Quarter, This Year, Custom) and an "Updated 17:07" freshness stamp underneath. Top row: Outcome Split card (3,600 decisions, last 24h — 3,097 approve at 86.0%, 323 review at 9.0%, 180 decline at 5.0%, with the inline guardrail copy "Decline rate above 5%. Investigate channel mix below." in red); KPI strip — Decisions 3,600 with 8 channels active and a +1.6% delta sparkline vs prior 30d; Total Amount ₦11.16B with ₦2382.7M vs prior 30d; Declined Amount ₦230.40M (2.1% of total) with ₦355.6M vs prior 30d; Unique Customers 2,232; P95 Latency 268 ms on the decision pipeline. Second row: Decision Volume — Last 30 days with the headline triple (TODAY 4,400 · AVG/DAY 4,719 · DECLINE RATE (TODAY) 2.70%) above a 30-day sparkline; Channel Mix stacked-bar tile listing every channel (MOBILE_APP 880, NIP 720, INTERNET_BANKING 560, POS 440, USSD 360, AGENT_BANKING 280, ATM 200, RTGS 160) with the approve / review / decline split rendered in green / amber / red.
Executive Dashboard — bottom (Top Rules by Volume, Active Models)
Figure 6.1b — Executive Dashboard (bottom). Top Rules by Volume — Last 7 Days card with hits + outcome breakdown for each fired rule: FRD-003 High-velocity NIP burst (18,342 hits, 7% declined), FRD-005 Name-enquiry mismatch on high-value NIP (8,911 / 17%), FRD-002 POS authorisation outside customer pattern (6,432 / 10%), FRD-001 Profile change followed by high-value transfer (5,219 / 11%), FRD-006 USSD session anomaly with SIM-swap signal (3,987 / 16%), FRD-009 Cross-border wire to high-risk corridor (2,103 / 12%), FRD-008 Agent cluster cash-out concentration (1,762 / 8%). Each row carries a green / amber / red mini-bar visualising the approve / review / decline split. Active Models card lists fraud-scorer 2026.05.03 (PRODUCTION · active · AUC 0.974), ato-scorer 2026.04.18 (PRODUCTION · active · AUC 0.961), mule-detector 2026.04.05 (PRODUCTION · active · AUC 0.943) and sar-narrative-llm 2026.05.18 (SHADOW — under evaluation, not yet scoring).

Six bands, top-to-bottom

#BandWhat it showsSource endpoint
1Outcome SplitApprove · review · decline totals for the last 24 hours with the % of each. Inline guardrail copy fires when the decline rate crosses 5%.GET /analytics/dashboard
2KPI stripDecisions · Total amount · Declined amount · Unique customers · P95 latency. Each tile carries a delta vs the prior period of equal length so the executive sees movement, not just level.GET /analytics/dashboard
3Decision VolumeDaily decision count and decline rate across the selected window. Today / Average / Today's decline rate above the sparkline so the eye lands on the leading indicator first.GET /analytics/trends?days=<period>
4Channel MixPer-channel bar with the approve / review / decline split in colour. The order is volume-descending so the busiest channel is on top.GET /analytics/dashboard
5Top Rules by VolumeThe seven highest-volume rules in the last seven days with hit count, percentage declined and a coloured mini-bar of the outcome split. Reads the rules-performance endpoint, fixed to a 7-day window regardless of the page selector.GET /analytics/rules/performance?days=7
6Active ModelsEvery model in PRODUCTION or SHADOW state with version, status and the single most important metric (AUC for the scorers; exact-match for the LLMs). Inactive models are hidden.GET /analytics/models/performance
NoteEvery band is empty-state-aware. If the analytics service has not produced a snapshot for the window — for example, immediately after a fresh deployment or a long maintenance window — the card explains the situation in plain English ("Either no traffic in window or the daily aggregator hasn't run") rather than rendering a blank chart.

The period selector

Five chips top-right control every band on the page except Top Rules (always 7d) and Active Models (always current). Switching a chip re-fetches the snapshot and trend endpoints in parallel; the existing render stays on screen until the new data lands so the page never flashes blank.

Executive Dashboard — Last 7 Days view
Figure 6.1c — Last 7 Days view. Selecting Last 7 Days updates the KPI tile deltas to compare against the previous 7-day window (+24.7% prior 7d on decisions), the Decision Volume sparkline collapses to a 7-point trend, and the chart x-axis re-anchors to "15 May → 21 May". The Channel Mix totals and the Outcome Split do not change because they are 24-hour and 8-channel-active aggregates respectively, not window-bound.
Executive Dashboard — This Quarter view
Figure 6.1d — This Quarter view. Selecting This Quarter stretches the Decision Volume chart to ~90 daily points (21 Feb → 21 May) and recomputes the KPI deltas against the previous 90-day window (+2.2% prior 90d on decisions). The wave-and-swell pattern becomes visible — weekly dips on the 7-day cycle plus a longer ~30-day swell — exactly the kind of macro-trend an executive should be looking at.

How to read the page

  1. Decline rate. Glance at the Outcome Split first. A decline rate above 5% triggers the inline guardrail; an analyst should already be investigating, but the executive needs to know.
  2. Movement. Look at the KPI deltas. A +24% week is interesting; a −20% week may signal a broken integration upstream.
  3. Where. Read the Channel Mix bars. Concentration on one channel can either be a normal pattern (NIP dominates most days) or a campaign — a sudden shift requires a follow-up.
  4. Why. Read the Top Rules card. The rule producing the most hits is the institution's current dominant typology — for the captured snapshot, the velocity-NIP-burst rule (FRD-003) at 18,342 hits is the loudest signal.
  5. What's scoring. Confirm the Active Models row. If a model that should be in production is missing, scoring is degraded; if a SHADOW model is producing better numbers than its PRODUCTION counterpart, schedule a promotion.

Permissions & access

  • The route is gated by system:admin on the sidebar entry. The underlying /analytics/* endpoints all check audit:read, which is granted by the admin tier and a few other senior tiers; an executive who is not also an admin will see the dashboard through the My Dashboard shortcut.
  • Print-ready: the page passes through the platform's print stylesheet so File → Print produces a PDF suitable for board packs without bespoke formatting.
  • No PII is rendered. Every figure is an aggregate; no row drills down to a customer. The page is safe to screen-share inside the institution.

Operational notes

  • Freshness. The "Updated HH:MM" stamp is the window_end from the snapshot, not the page render time. If the stamp lags by more than a minute, the daily aggregator job may be stuck — check System status.
  • Sparkline scale. The Decision Volume chart auto-scales to the data — comparing two windows visually can mislead. Read the headline numbers above the chart for the actual values.
  • Top Rules is fixed to 7 days. Changing the period chip does not change the rule window. This is deliberate so the executive always sees the recent typology rather than a stale quarter average.
  • Latency tile. P95 latency is decision-pipeline latency end-to-end — not just the model. A sudden P95 spike is usually a databus or rules-service incident; cross-reference Operations health.
  • No customer drill-down. By design — this is the portfolio view. To investigate a specific signal, pivot to the Alerts queue filtered by the dominant rule, or the Trend analytics page for deeper time-series.
CautionThe Outcome Split's decline-rate guardrail is calibrated for the institution's normal posture. If you change rule thresholds or onboard a new channel, the 5% guardrail copy will fire constantly until the new normal stabilises. Adjust the threshold in SLA policy after a channel onboarding rather than ignoring the banner.
TipThe fastest sanity check after a deployment: open this page, confirm every band has data, glance at the "Updated" stamp. Three things prove the analytics, rules-performance and models-performance endpoints are all alive — which means most of the platform is too.

Trend analytics

Risk team /analytics
Trend analytics
Figure 6.2 — Trend analytics. Time-series views — volumes, decline rates, scenario hit rates over windows.

Operations health

SRE, ops leads /operations
Operations health
Figure 6.3 — Operations health. Operational KPIs — queue depth, SLA breach counts, analyst utilisation, batch state.

Risk heatmap

Risk officers /highlights
Risk heatmap
Figure 6.4 — Risk heatmap. Enterprise risk highlights — segments and scenarios coloured by exposure.

HQ rollup

Executives, head office /dashboard/hq
HQ rollup
Figure 6.5 — HQ rollup. Branch- and LOB-level comparison view for head-office consumers.

Role workspaces

All roles /role-dashboards
Role workspaces
Figure 6.6 — Role workspaces. A library of role-tuned dashboards — analyst, team lead, compliance, exec, SRE.

Dashboard library

Everyone /portfolio
Portfolio of all dashboards
Figure 6.7 — All dashboards. The catalogue of every dashboard the platform ships, with descriptions and audiences.

Detection & Models

Scenarios, rules and machine-learning models — the detection engine and its governance.

Detection is where the institution defines what counts as suspicious. Scenarios codify typologies; rules implement them deterministically; models score them statistically; maker-checker stops anyone from changing the engine without a second pair of eyes; fraud-to-AML promotes confirmed fraud into the AML pipeline; communications keeps the customer informed.

Scenarios

Fraud engineers /admin/scenarios

Scenarios are the institution's library of typologies — FRD-001 (profile change followed by high-value transfer), FRD-003 (NIP velocity), FRD-009 (cross-border to high-risk corridor) and so on. Each scenario binds to one or more rules and one or more models; the platform ships ten standard scenarios that cover the common Nigerian patterns out of the box.

Scenarios
Figure 7.1 — Scenarios. Catalogue of scenarios; click any row to inspect the rules and models bound to it.

Rules

Fraud engineers /admin/rules
Rules — top
Figure 7.2a — Rules list (top). Active and shadow rules, last-fire counts, owner.
Rules — bottom
Figure 7.2b — Rules list (bottom). Rule-state badges and the new-rule entry point.

Why rules are versioned, not edited in place

Editing a live rule in place silently breaks every alert that fired against the previous version of the rule — the audit log loses the link between cause and effect. Kupinga therefore versions every rule. Changing logic creates a new version; the previous version is preserved and the active rule pointer is moved.

CautionRule changes are maker-checker gated. The author cannot self-approve. Promote-to-production goes through a shadow deployment for at least 24 hours by default.

Create-rule wizard

Fraud engineers /admin/rules/new 5-step wizard
Purpose
Author a brand-new detection rule through a five-step guided wizard with per-step validation.
Audience
Fraud engineers (system:admin or rules:write).
When to use
When a new typology needs a rule, a new channel needs a tailored detector, or a hard-coded threshold has been validated for production.

The wizard is built so the operator cannot publish a half-finished rule — each step has its own validation gate, and Next stays disabled until the gate passes. The five steps map exactly to what the rules-service stores: basic identity, channel filter, detection logic, risk & routing, and the final back-test gate.

Create-rule wizard
Figure 7.3 — Create-rule wizard. Guided rule-authoring flow with expression validation and back-test preview. The 5-step Stepper at the top runs through Basic Info → Channels → Detection Logic → Risk Config → Validate.

The five steps

#StepWhat it capturesValidation gate
1Basic InfoRule name, description, tags, category, owner team.Rule name required.
2ChannelsWhich channels the rule fires on — Mobile Banking, Internet Banking, USSD, NIP Outbound, Agent Banking, POS, ATM.At least one channel selected.
3Detection LogicThe rule's predicate — choose between Deterministic (classic AND/OR condition tree), ML score uplift (registered model + threshold) and Cumulative pattern (pre-aggregated rolling-window series).At least one condition (deterministic) or model/window (ml/cumulative).
4Risk ConfigBase risk score (0–100), priority level (Low / Medium / High / Critical), action type (Score only / Step-up challenge / Block transaction / Open case), reason code, owner team.Base score > 0 and action type chosen.
5ValidateFinal preview + Test Sandbox. Shows estimated 30-day matches, false-positive %, decision-split projection, and the complete DSL the wizard will publish.Server-side compile of the DSL must succeed.

How to use

  1. Name and describe the rule on Step 1. Tag it with the scenario family (FRD-001, FRD-003 …) so the rule library stays searchable.
  2. Pick the channels on Step 2. Channels not selected here are exempt from the rule even if their transactions match the predicate.
  3. Build the predicate on Step 3. Use the inline "How to configure a deterministic rule" disclosure for the field catalogue.
  4. Set the score, priority, action and reason code on Step 4. The reason code is stamped on every alert the rule fires.
  5. On Step 5, run the Historical Test (30 days) and read the projected match volume. If the projection is wildly higher than expected, walk Step 3 back and tighten the predicate.
  6. Submit. The rule lands in maker-checker pending approval — a second engineer reviews and promotes.
CautionNew rules deploy in shadow by default. They evaluate but do not affect decisions until promoted to active. Plan for at least 24h of shadow observation before flipping a high-impact rule live — see Manage existing rule for the promotion path.

Manage existing rule

Fraud engineers /admin/rules /admin/rules/<id> Versioned edits
Purpose
Find, inspect and version-edit any rule already in the catalogue. Editing reuses the 5-step wizard so the engineer changes the rule through the same validation gates as the original author.
Audience
Fraud engineers; team leads who promote shadow rules to active.
When to use
Tightening a threshold; adding a channel; pausing a rule that is producing noise; promoting a shadow rule to production; reviewing a rule's version history before a regulator visit.

Rules are versioned, not edited in place. Every save publishes a new rule_versions row; the previous version is preserved and the rule's current_version_id pointer is moved atomically. Every alert produced by a rule remembers exactly which version fired it, so the audit trail never loses the cause-and-effect link.

Entry — the Rules Library

Manage rule — list page
Figure 7.3.1 — Fraud Detection Rules Library (entry). KPI strip at the top (Total Rules 10, Active 8, Shadow 1, Drafts 1) plus toggles (10/100% compliant, Newest, Last 7d, Last 24h). The catalogue table lists every rule with code, name, channels, detection logic preview, score, priority, status, in-use count and last-updated. Each row carries Preview (eye) and Edit (pencil) affordances; the blue Create rule button top-right launches the new-rule wizard. The "Rules" item in the Detection section of the sidebar is the active selection.

The edit flow — same 5-step wizard, populated

Clicking the Edit affordance on any rule opens /admin/rules/<id>. The page reuses the Stepper from the create wizard, but every step is pre-populated from the rule's current version, and every step in the Stepper is marked complete so the engineer can jump directly to any step they need to change.

Manage rule — Step 1 Basic Info
Figure 7.3.2 — Step 1 Basic Info (editing "Velocity NIP burst"). Sticky header carries RULE MANAGER / Velocity NIP burst, the green ACTIVE status badge, the snake-case rule identifier velocity_nip_burst, plus Cancel and Save changes affordances. An amber "Heads up" banner warns when a rule was authored before migration 0142 and its DSL is not in the wizard's grammar — Step 3 will open empty in that case. The Stepper shows all five steps green-checked. Step 1 form is populated: Rule Name "Velocity NIP burst", Description, Tags (NIP, velocity).
Manage rule — Step 2 Channels
Figure 7.3.3 — Step 2 Applicable Channels. Eight channel checkboxes (Mobile Banking, Internet Banking, USSD, NIP Outbound, Agent Banking, POS, ATM) with Select All / Clear affordances. The rule's existing channel selection is restored from the persisted state.
Manage rule — Step 3 Detection Logic
Figure 7.3.4 — Step 3 Detection Logic Builder. Kind picker across the top (Deterministic selected · 3 conditions; ML score uplift; Cumulative pattern) with one-liner explanations. "How to configure a deterministic rule" disclosure. Below the AND/OR header, three condition rows show transaction.amount > 1000000, same_beneficiary_count_15m > 5, transaction.channel = nip, each with its INGESTED-field badge. The View JSON action top-right reveals the persisted wizard payload.
Manage rule — Step 4 Risk Config
Figure 7.3.5 — Step 4 Risk & Action Configuration. Base Risk Score slider (currently 0.62 / 100) with 0 / 50 / 100 ticks; Priority Level dropdown set to MEDIUM; Action Type dropdown set to Block Transaction; Reason Code FRD_003_V4 (SCREAMING_SNAKE_CASE convention, stamped on every alert the rule fires); Owner Team Detection.
Manage rule — Step 5 Validate
Figure 7.3.6 — Step 5 Test Sandbox & Validation. Left-rail "Heads up" note: "Score below 20 may not move the decision threshold — confirm this is intentional." Three preview tiles — EST. MATCHES (30D), FALSE POSITIVE %, DECISION SPLIT — each labelled "needs test runner" / "needs labeled feedback" because the historical-test runner hasn't been wired in this environment yet. The Run Historical Test (30 Days) action sits top-right. Below: the Rule Preview card with the rule's display name, description, status pills (MEDIUM · Block Transaction · score 0.62 · FRD_003_V4), the channels list (nip, mobile_app), and the full Detection Logic IF-clause expanded literally so the operator can read what will publish. Save changes is enabled when validation passes.

Common workflows

WorkflowStepsNotes
Tighten a thresholdEdit → Step 3 → adjust condition value → Step 5 → Save changes.Publishes a new version; previous version preserved. Maker-checker required for production rules.
Add a channelEdit → Step 2 → tick additional channel → Save changes.Triggers a fresh shadow window for the new channel unless the rule is explicitly promoted in the same save.
Promote shadow → activeFrom the rule preview or detail page, click Promote to active; a team-lead approver confirms.The original author cannot promote their own rule (separation of duties).
Pause a noisy ruleEdit → Step 1 (or the rule detail action menu) → toggle status to paused → Save.Pauses immediately; no maker-checker required for pause/resume on the operator's own rule.
Roll back to a prior versionRule detail → Version History tab → click the older version → Promote this version.Atomic switch of current_version_id. No data loss — the rolled-back version becomes the new head.
Retire a rule permanentlyEdit → Step 1 → status disabled → Save. Then archive from the catalogue.Archived rules disappear from the active library but remain queryable for audit.

Versioning & audit

  • Every save publishes a new rule_versions row with change_notes, reason_code and wizard_payload snapshot. The wizard payload makes future edits round-trip cleanly — the structured condition tree is restored verbatim, bypassing the lossy DSL parser.
  • Every promotion is recorded in the Audit log as rule.version_promoted, with the actor's email and the from/to version numbers.
  • Every rule remembers which alerts it produced and at which version, so the alert detail page can always answer "which exact logic fired this?".
CriticalChanging a production rule is maker-checker gated. The engineer who saves the change cannot self-approve it. Bypassing maker-checker on a live rule is impossible from the UI; the API permits it only with a break-glass role that itself triggers an audit ticket and a compliance escalation.
TipIf you only need to read the current rule logic (not change it), use the Preview (eye) affordance on the catalogue row instead of Edit. Preview reads the same data without taking the rule into the wizard, so a stray Save changes click cannot accidentally publish a new version.

Model registry

ML engineers, risk team /ml

Every model that has ever been registered with the platform — production, shadow, candidate, retired — with the version, training metadata, AUC, drift status and the operator who promoted it.

Model registry
Figure 7.4 — Model registry. Models with version, state and key performance metrics.

Model monitoring

ML engineers /ml/monitoring
Model monitoring
Figure 7.5 — Model monitoring. Drift, calibration and segment-level performance over time.
CautionIf drift exceeds the configured threshold for more than one day, the platform raises a system-level alert and de-prioritises the model's contribution to scoring until it is retrained or rolled back.

Explainable AI

Compliance, ML engineers /ml/governance

Per-decision feature attribution. The regulator-facing view that proves any individual decision can be explained.

Explainable AI
Figure 7.6 — Explainable AI. Feature attribution and reason codes for sample decisions.

Closed-loop feedback

ML engineers /admin/ml

The store of analyst decisions that feed the next training cycle. Every approve/decline lands here with the analyst's identity, the timestamp, the rationale and the underlying features.

Closed-loop feedback
Figure 7.7 — Closed-loop feedback. Recent analyst feedback events and aggregate quality metrics by analyst and by model.

Maker-checker

Administrators /admin/maker-checker

The central record of every change that needed a second approver — rule edits, scenario toggles, model promotions, integration changes, role grants and more. Pending items appear at the top of the page for the relevant approvers.

Maker-checker
Figure 7.8 — Maker-checker. Pending approvals with subject, change type, requester and SLA, plus the history strip of approved, rejected and expired items.
CriticalThe platform refuses to let any user approve their own change, regardless of role. This is hard-coded; no role tier can bypass it.

Fraud → AML

Administrators /admin/fraud-to-aml

The bridge between confirmed fraud and the AML pipeline. Configures which case outcomes promote into AML monitoring and how the AML team is notified.

Fraud to AML
Figure 7.9 — Fraud → AML. Promotion rules — which fraud outcomes feed the AML pipeline.

Communications

Administrators /admin/communications

Outbound customer communication templates and the workflows that send them — block notifications, SAR-related outreach, challenge messages. Each template has a localised version per supported language and a per-channel variant (SMS, email, in-app).

Communications
Figure 7.10 — Communications. Workflows for outbound customer notifications.

Administration

Access, role tiers, institutional configuration, third-party integrations.

Administration is the configuration surface — it answers the questions "who can use the platform", "what is the institution's policy", "how do third parties plug in" and "what runs on a schedule". Most users will not touch this section; system administrators live in it.

Users & RBAC

System administrators /admin/users

The user directory — every account, the role tier it belongs to, its status (active, locked, disabled), its last sign-in and its branch/team membership. Administrators provision new users here, unlock accounts after lockouts, and disable users who leave the institution.

Users & RBAC
Figure 8.1 — Users & RBAC. Every user account with role, status, branch and last sign-in.

Common procedures

  • Provision a new user. Click New user, enter their work email, choose role tier, branch and team, save. The platform emails the user an activation link.
  • Unlock an account. Find the user, click Unlock. The unlock is recorded in the audit log.
  • Disable a user. Disabled users cannot sign in; existing sessions are revoked immediately.
  • Grant elevated access. Use Access requests to grant temporary just-in-time permissions; do not assign permissions ad hoc.
CautionEditing a user's role tier is maker-checker gated. The administrator who edits the role cannot self-approve the change.

Role tiers

System administrators /admin/roles

Role tiers are bundles of permissions — Junior Analyst, Senior Analyst, Team Lead, Compliance Officer, Compliance Reviewer, Compliance Approver, Risk Officer, Fraud Engineer, System Administrator, Platform SRE. Each tier maps to a fixed permission set; institutions can clone a tier and adjust the permissions for their own policy.

Role tiers
Figure 8.2 — Role tiers. Tier definitions with the permissions each tier grants.
NoteSome permissions can only be granted via a role tier — never inline on a user. This is enforced to prevent ad-hoc administrative grants that go unaudited.

Branches

System administrators /admin/branches
Branches
Figure 8.3 — Branches. The institution's branch directory; users and queues bind to branches for routing.

Teams

System administrators /admin/teams
Teams
Figure 8.4 — Teams. Teams as the routing primitive — alerts and cases route to teams; users belong to one or more.

Access requests

Approvers (access:grant or admin) /access-requests

Just-in-time access. A user requests an elevated permission with a reason, an approver reviews it, and the grant is time-bound — it expires automatically when the window closes. Used for break-glass scenarios, after-hours support, and tightly-scoped audit access.

Access requests inbox
Figure 8.5 — Access requests inbox. Pending requests for the approver; click any to review the rationale and decide.
TipPrefer JIT access over permanent role-tier changes for anything that is one-off. The audit log makes JIT easy to defend; permanent grants accumulate and become a security debt.

My access requests

All signed-in users /access-requests/mine
My access requests
Figure 8.6 — My access requests. Your own outstanding and historical JIT requests.

SLA policy

System administrators /admin/sla

The institution's service-level policy — how long an alert at each priority is allowed to wait, when a case is overdue, when a block must be reviewed. Every SLA band in the platform reads from here.

SLA policy
Figure 8.7 — SLA policy. SLA budgets by priority and queue. Editing this changes the SLA banding everywhere in the platform.
CautionLoosening an SLA hides risk rather than reduces it. Discuss the change with risk and compliance before applying.

Bank configuration

System administrators /admin/bank-configuration

Identity of the institution — display name, CBN code, branding, default currency, default timezone, supported channels. Tenants in a multi-bank deployment have one bank-configuration record each.

Bank configuration
Figure 8.8 — Bank configuration. Institution identity, branding and channel posture.

Scheduled jobs

System administrators /admin/jobs
Scheduled jobs
Figure 8.9 — Scheduled jobs. Every cron-driven job — refreshes, sweeps, reconciliations and report runs.

Customer challenges

Administrators /admin/challenges

Step-up records — OTP, callback and video proof-of-life challenges issued to customers. Used by analysts to confirm a transaction is genuine before approving a high-risk decision.

Customer challenges
Figure 8.10 — Customer challenges. Per-customer challenge attempts with outcome and rationale.

Challenge plane settings

System administrators /admin/challenges/settings
Challenge plane settings
Figure 8.11 — Challenge plane settings. Per-channel challenge configuration — providers, timeouts, retry policy.

API keys

System administrators /admin/api-keys

Programmatic credentials. Every integration that calls the platform's API does so with a scoped API key — never with a user's session token. Keys are rotated on a schedule and revoked the moment an integration stops being used.

API keys
Figure 8.12 — API keys. Key inventory with scope, owner, last-used timestamp and rotation status.
CriticalThe secret value of an API key is shown only once — at issuance. There is no recovery path. If you lose the secret, rotate the key.

Integrations registry

System administrators /admin/integrations

The single place where every third-party system the platform talks to is registered — sanctions lists, KYC providers, NIBSS, OFAC, NIMC, GDelt, MaxMind, Apicurio Schema Registry, MinIO, comms providers and more. New integrations are added here so the platform always has one place that answers "what are we depending on".

Integrations registry
Figure 8.13 — Integrations registry. Every external dependency with category, status, owner and last health check.

Ingestion — Enterprise Databus

Tenant ingestion control plane: onboarding, adapters, mappings, schemas, DLQ, reconciliation, lineage.

The Enterprise Databus is how customer data enters the platform. Each tenant bank has one or more adapters that pull events from its core systems, mappings that translate proprietary formats into the canonical schema, and reconciliation runs that prove the platform agrees with the source of record. The Banking Simulator is the sandbox-only counterpart used to rehearse onboarding without touching production data.

Tenant onboarding wizard

Databus administrators /admin/databus/onboard

The guided onboarding flow — picks a template, creates the tenant, attaches an adapter, generates a mapping, and validates against a sample payload, in one pass.

Tenant onboarding — top
Figure 9.1a — Onboard wizard (top). Choose a template and start a new tenant.
Tenant onboarding — middle
Figure 9.1b — Onboard wizard (middle). Adapter and mapping configuration.
Tenant onboarding — bottom
Figure 9.1c — Onboard wizard (bottom). Validation against a sample payload before activation.

Databus ops dashboard

SRE, databus operators /admin/databus
Databus ops dashboard
Figure 9.2 — Databus ops dashboard. Tenant ingest rate, DLQ depth, reconciliation lag, schema-version drift.

Tenants & adapters

Databus operators /admin/databus/adapters
Adapters
Figure 9.3 — Tenants & adapters. Adapters grouped by tenant with state, last event, and lag.

Mapping editor

Databus operators /admin/databus/mappings

Per-tenant field mapping from the source-of-record format into the canonical schema. The editor renders the source payload on the left and the canonical schema on the right; the operator draws lines between fields.

Mapping editor
Figure 9.4 — Mapping editor. Two-pane field mapping with sample preview, transformation expressions and validation diagnostics.

Schema registry

Databus operators /admin/databus/schemas
Schema registry
Figure 9.5 — Schema registry. Canonical schemas with version lineage and per-tenant compatibility status.

Dead-letter queue

SRE, databus operators /admin/databus/dlq

Events that failed to parse, validate or process land in the dead-letter queue with the failure reason. Operators inspect, fix the upstream cause, and replay individual events or batches.

DLQ
Figure 9.6 — Dead-letter queue. Failed events with reason, tenant, source topic and replay options.
CautionReplaying a DLQ event re-injects it at the head of the pipeline. If the same root cause is still in place, the event will be DLQ'd again — fix the upstream issue before replaying in bulk.

Reconciliation

SRE /admin/databus/recon
Reconciliation runs
Figure 9.7 — Reconciliation runs. Daily reconciliation between Kupinga and the tenant's source of record.

Lineage explorer

SRE, compliance /admin/databus/lineage

For a chosen event, the platform shows where it came from, every transformation it underwent, every decision it informed and every downstream artifact (alert, case, SAR, block) it produced. The auditor's chain of custody.

Lineage explorer
Figure 9.8 — Lineage explorer. Search by event ID; the graph shows source, transformations and downstream artifacts.

Databus settings

Databus administrators /admin/databus/settings
Databus settings
Figure 9.9 — Databus settings (admin view). Title Databus settings with subtitle "Runtime-configurable knobs for the databus + streaming fabric. Env-var overrides take precedence; sensitive values are written to Vault and tracked by reference." The blue Single-tenant scope chip top-right is selected; the inline banner explains "Single-tenant mode. Every setting on this page is the deployment-wide global. The per-tenant override picker is hidden because the deployment is the tenant boundary. To edit per-tenant overrides you would first enable platform.multi_tenant_enabled on the feature flags page." The settings list below renders one row per knob with the key as a monospace token, the type (bool · int · duration · string · vault_ref), the source (global · env · tenant · default), the editable value field, and a per-row description: platform.multi_tenant_enabled (bool · global · true), ingest.parser.batch_size (int · global · 500), ingest.parser.max_concurrency (int · global · 8), ingest.dlq.replay_window_minutes (duration · global · 30), decisioner.timeout_ms (int · global · 500). Save affordance per row commits the change; sensitive values render as vault:// references rather than plaintext.

Banking Simulator

The simulator is the sandbox companion to the Databus. Operators rehearse onboarding flows, regression scenarios and chaos drills against synthetic data with no risk to production tenants.

Simulator runs

Databus administrators /admin/databus-simulator
Simulator runs
Figure 9.10 — Simulator runs. Recent simulator runs with status and resulting fixtures.

Simulator scenarios

Databus administrators /admin/databus-simulator/scenarios
Simulator scenarios
Figure 9.11 — Simulator scenarios. Reusable simulation profiles and chaos templates.

Chaos rehearsal

SRE /admin/databus-simulator/chaos
Chaos rehearsal — top
Figure 9.12a — Chaos rehearsal (top). Choose a chaos template — broker outage, topic lag, schema break.
Chaos rehearsal — bottom
Figure 9.12b — Chaos rehearsal (bottom). Execution log and recovery checks.
CriticalThe simulator's safety middleware refuses to execute against a production environment. The page is hidden in production. Never disable the safety middleware to "just test once" — it has saved the platform from incident more than once.

Simulator allowlist

Databus administrators /admin/databus-simulator/allowlist
Simulator allowlist
Figure 9.13 — Simulator allowlist. Tenants explicitly cleared to receive simulator traffic in this environment.

Simulator services

SRE /admin/databus-simulator/system
Simulator services
Figure 9.14 — Simulator services. Per-service control panel for the simulator stack.

Operations

Live health, services control, audit, batch and developer tools.

The Operations section is the SRE's home. It is where the platform itself is monitored, where services are started and stopped, where the audit and access logs are searched and where developer tools live for non-production environments.

System status

SRE, administrators /admin/system-status
System status
Figure 10.1 — System status. Per-service health, version, build SHA and last-restart.

Services control

SRE (system:admin) /admin/services Dev / staging only

Start, stop and restart any platform service. Wraps scripts/services.sh on the host. Refuses to run in production environments — production work goes through the institution's change-management process.

Services control
Figure 10.2 — Services control. Per-service status with start/stop/restart and a live console.
CriticalThe page is hidden when APP_ENV=production. Do not attempt to override the gate. Use your institution's change-management process to make changes in production.

Ingestion engine

SRE /admin/ingestion
Ingestion engine
Figure 10.3 — Ingestion engine. Ingestion telemetry — rate, latency, partition lag.

Batch processing

SRE, administrators /admin/batch
Batch processing
Figure 10.4 — Batch processing. Unified batch console: jobs, runs, durations and failure diagnostics.

Workflow queues

Team leads, SRE /workflow

Per-queue depth and ageing view. Used by team leads to balance load across shifts and by SREs to spot bottlenecks.

Workflow queues
Figure 10.5 — Workflow queues. Open / in-review counts and SLA breaches by queue.

State machine

Everyone /workflow/state-machine

A visual diagram of the case state machine — useful for training and for explaining the workflow to auditors.

State machine
Figure 10.6 — State machine. Case lifecycle transitions and the actions that drive them.

Audit log

Compliance, administrators /admin/audit

Per-entity audit trail. Every change to every entity in the platform — by whom, when, from where, why — is written here append-only. The regulator-facing record.

Audit log
Figure 10.7 — Audit log. Per-entity change log with actor, timestamp and full payload diff.
CriticalAudit log entries cannot be edited or deleted from the UI. Anyone who needs to redact a record must go through a documented, regulator-approved process — and that process itself is audited.

Access log

Security, administrators /admin/access-log
Access log
Figure 10.8 — Access log. Sign-ins, sign-outs, lockouts, MFA challenges — security-sensitive events.

Demo data

Demo operators /admin/demo-data Dev / staging only

Seed or reset the demo personas defined in config/demo/personas/personas.yaml. Used to set up the platform for a sales demo, a customer training session or an integration rehearsal.

Demo data console
Figure 10.9 — Demo data console (admin view). Eyebrow SETTINGS → DEMO DATA; title Demo data console; subtitle "Populate every feature with realistic demo data, or reset the database back to the staging baseline. Disabled in production." Actions card with two destructive controls: blue Seed demo data (provisions the 10 personas defined in config/demo/personas/personas.yaml across customers, accounts, transactions, alerts, cases, blocks and SARs) and red Reset (wipes every demo_seed=true row, or every row in the reset-table list under the hard variant). Recent runs table shows the last three completed runs — seed · done · 100% · 10 personas (5/21 16:54), reset · done · 100% · 0 personas (5/21 16:14), seed · done · 100% · 10 personas (5/20 16:59) — with the created timestamp as a hyperlink to the individual job detail. The page is hidden when APP_ENV=production.

Notifications & Settings

Personal communication preferences and the per-user settings hub.

Notification centre

Everyone /notifications

Inbox of platform-issued notifications — assignments, mentions, SLA warnings, system advisories. Always reachable from the bell icon in the top bar.

Notifications centre — top
Figure 11.1a — Notification centre (top). Most recent notifications across all categories.
Notifications centre — middle
Figure 11.1b — Notification centre (middle). Category filters and bulk actions.
Notifications centre — bottom
Figure 11.1c — Notification centre (bottom). Older notifications and history.

Notification preferences

Everyone /notifications/preferences
Notification preferences
Figure 11.2 — Notification preferences. Per-category channels (in-app, email, SMS) and quiet hours.

Settings hub

Everyone /settings

The user's personal settings — name, language, timezone, default landing page, keyboard preferences, two-factor enrolment. Permission-gated tiles for administrative settings appear here only for administrators.

Settings hub — top
Figure 11.3a — Settings hub (top). Personal preferences — profile, language, timezone, landing page.
Settings hub — bottom
Figure 11.3b — Settings hub (bottom). Security tiles — password rotation, MFA, active sessions.

Reference

Permissions reference, glossary, and support escalation paths.

Permissions reference

A non-exhaustive listing of the most commonly assigned permissions and what they enable. The canonical source of truth is Role tiers, where the institution-specific bundles live.

PermissionEnablesTypical role
inbox:readOpen the unified Inbox.Analyst, Team Lead, Compliance
alerts:readSee alerts and the alert queue.Analyst
alerts:decideApprove / decline alerts.Analyst
cases:read / cases:createOpen cases and create new ones.Analyst
customers:read / read_piiRead customer records / unmask PII.Analyst / Senior Analyst
transactions:readRead transactions.Analyst
blocks:requestSubmit a block for approval.Analyst
blocks:approveApprove a block request.Team Lead
blocks:lift / lift_regulatoryLift a block (regulatory variant).Team Lead / Compliance
sars:prepare / review / approveThree-step SAR lifecycle.Compliance Preparer / Reviewer / Approver
reports:readOpen the reports catalogue.Compliance, Risk
screening:readSee screening surfaces.Compliance, Senior Analyst
adverse_media:readSee adverse-media classifications and profiles.Compliance
adverse_media:prompts_adminPromote adverse-media prompt versions.Compliance Admin
ml:read / ml:promote_productionRead ML registry / promote models to prod.ML Engineer / ML Manager
workflow:readSee workflow queues and the state-machine view.Team Lead, SRE
audit_log:readRead the entity audit log.Compliance, Admin
access_log:readRead sign-in / lockout events.Security, Admin
system:readRead platform health.SRE
system:adminFull administration (short-circuit grant).System Administrator
databus:read / databus:adminRead databus state / configure it.Databus Operator / Admin
access:grant / jit:approveApprove JIT access requests.Admin, Security
consortium:readRead consortium intelligence.Senior Analyst, Risk
branches:read / teams:readRead the institution structure.Admin
demo:adminReseed / reset demo data.Demo Operator (non-prod)
NoteThe system:admin permission short-circuits every other gate. Grant sparingly and never to an integration or service account.

Glossary

TermDefinition
AlertA single firing of a rule or model against a transaction. Triaged by an analyst.
CaseThe durable investigation container. Holds alerts, transactions, evidence, decisions.
ScenarioA named fraud typology (e.g. FRD-001) — bundles rules and models.
RuleDeterministic boolean expression evaluated over an incoming event.
ModelStatistical scorer producing a probability of fraud.
BlockRestrictive action on an account (PND, freeze) raised by maker-checker.
SAR / STRSuspicious Activity Report / Suspicious Transaction Report — regulatory filings.
ChallengeStep-up customer authentication (OTP, callback, video proof of life).
DatabusThe platform's tenant ingestion control plane.
AdapterA per-tenant connector that pulls events from a source system.
MappingSource-to-canonical schema translation for one tenant.
DLQDead-letter queue — events that failed to process.
Maker-checkerA control where the author of a change cannot be its approver.
JITJust-in-time — time-bound access granted in response to an explicit request.
HandoverStructured note filed at the end of an analyst's shift for the next analyst.
PNDPost-no-debit — a block that prevents outgoing transactions only.
NIPNIBSS Instant Payment — Nigeria's interbank instant payment rail.
RTGSReal-Time Gross Settlement — high-value interbank settlement.
BVNBank Verification Number — Nigeria's unique customer identity.

Support & escalation

If you hit a problem you cannot resolve from this manual, escalate in this order:

  1. Your team lead. Day-to-day operational questions (workload, queue routing, decisions you are unsure about).
  2. Your institution's system administrator. Access problems (locked account, missing permission), bank-configuration questions, role-tier questions.
  3. Platform / SRE. Health questions, service status, ingestion lag, DLQ growth, suspicious behaviour.
  4. Kupinga support. Bugs, feature questions, integration help. Reach out through the channel agreed in your support contract.

Always include in any support request:

  • The URL of the page you were on.
  • The exact error message, if any.
  • What you were trying to do, in one sentence.
  • The time the issue happened, with timezone.
  • Your user identifier (visible in the top-right user menu).

For incidents that affect customer service, follow your institution's incident-management procedure rather than this manual.