SmartCheq · Module Specification

Corridor Operations System

The operational control centre for managing bilateral CBDC liquidity corridors between African Union member states. Covers reserve pool management, lock lifecycle, FX rates, rebalancing, governance escalation, and emergency actions.

Version 1.0
Scope 54 AU Member Corridors
Updated April 2026
Status Production Reference
§1

System Overview

An operator at a central bank uses Corridor Ops to allocate reserve funds into locked pools that back cross-border digital cash issuance, monitor real-time liquidity positions, enforce risk limits, reconcile ledger state, and escalate anomalies to governance.

Left Pane — Identity

  • Select active corridor
  • Set operating mode
  • View FX snapshot
  • View liquidity summary
  • View corridor metadata

Middle Pane — Operations

  • Lock / release reserve funds
  • Rebalance pool allocation
  • View active locks table
  • Registry & audit log

Right Pane — Controls

  • Corridor limits & safety
  • FX configuration
  • Liquidity position
  • Registry sync & reconciliation
  • Governance escalation
  • Emergency actions

Key Concepts

ConceptDefinitionExample
CorridorBilateral arrangement between two central banks enabling CBDC transfersGHA → MLI denominated in XOF
Reserve PoolNamed sub-account within a corridor holding pledged central bank funds. Three pools per corridor.BCEAO-XOF-RESERVE-01
LockImmutable ledger entry reserving a specific amount from a reserve pool for a defined duration50,000 XOF locked for 24h
Linked IssuanceA CVIB batch issued against the backing of one or more active locksCVIB batch backed by LK-E0E7A9E1
Net PositionDomestic available liquidity minus linked outstanding issuance50,000 − 0 = 50,000 XOF
§2

Data Model

Corridor

FieldTypeReqDescription
iduuidPrimary key
codestringHuman identifier e.g. GHA-MLI
source_countryiso3ISO 3166-1 alpha-3 of sending country
target_countryiso3ISO 3166-1 alpha-3 of receiving country
asset_codestringISO 4217 currency denomination
statusenumactive | paused | frozen | inactive
modeenumpilot | supervised | production
daily_capdecimalMaximum total issuance per calendar day
velocity_limitdecimalMaximum rolling 1-hour issuance volume
per_transaction_capdecimalHard ceiling per individual transfer

LiquidityLock

FieldTypeReqDescription
iduuidPrimary key
lock_idstringHuman reference e.g. LK-E0E7A9E1-20260407142828
corridor_iduuid FKReferences Corridor
amountdecimalValue in corridor asset currency
reserve_poolstringPool tag. NULL = pool-01 by convention
statusenumactive | released | expired
durationstringe.g. 24h, 48h, custom
expires_attimestampWhen lock auto-expires (UTC)
release_reasonstringOperator note on manual release

ReservePoolEvent (virtual accounting)

FieldTypeDescription
event_idstringIdempotency key: RBL-{hex}-{timestamp}
corridor_iduuid FKReferences Corridor
source_poolstringPool funds moved from
dest_poolstringPool funds moved to
amountdecimalVirtual amount transferred
currencystringISO 4217 currency code
§3

Left Pane — Corridor Selector

Corridor Dropdown

Editable QComboBox with QCompleter (MatchContains, CaseInsensitive). Populated from GET /api/v2/corridors. Display format: {flag} {SRC} → {flag} {DST}. Fires on activated signal only — not on each keystroke.

On Change — Full Reload Cascade

Load corridor identity

GET /corridors/:id → ID, Code, Asset Code, Status, Agreement ID, Source, Target

Load FX rate

GET /corridors/:id/fx_rate → sets current rate and FX snapshot labels

Load liquidity position

GET /corridors/:id/liquidity_position → Domestic, Linked, Net labels

Load reserve pools

GET /corridors/:id/reserve_pools → populates pool selector dropdown

Load active locks

GET /api/v2/liquidity_locks?corridor_id=:id → populates active locks table

Load limits + apply status style

GET /corridors/:id/limits → Risk Limits panel. applyCorridorStatusStyle() updates Danger Zone button.

Mode Selector

ModeDaily CapPer-Tx CapVelocityGovernance Required
Pilot500,000 XOF10,000 XOF100,000/hrAll lock operations
Supervised2,500,000 XOF500,000 XOF1,000,000/hrLocks > 1M, FX changes
ProductionPer corridor configPer corridor configPer corridor configFX changes, limit changes
§4

Middle Pane — Operations

Intent Action Bar

IntentVisibleButton
Lock LiquidityReserve Pool, Amount, 10M/50M/100M/MAX, DurationExecute (blue)
Release LiquidityLock ID selector, read-only Amount, Release ReasonRelease Selected
Update FX RateNew Rate input, live % comparison, Effective TimePropose Change (purple)
Adjust Risk LimitsDaily Cap, Velocity, Per-Tx cap inputsPropose Change (purple)

Lock Liquidity — Validation Rules

amount > 0
amount ≤ pool_available
amount ≤ per_transaction_cap
daily_total + amount ≤ daily_cap
hourly_total + amount ≤ velocity_limit
corridor.status == 'active'

Lock States

ACTIVE RELEASED EXPIRED
StateMeaningTransition
ACTIVEFunds committed. Backs linked issuances.→ RELEASED (manual) or → EXPIRED (timer)
RELEASEDFunds returned to reserve pool. Audit record written.Terminal
EXPIREDDuration elapsed. System auto-marks. Funds need reconciliation.Terminal

Active Locks Table

ColumnSourceNotes
✓ CheckboxQt::CheckStateRole col 0Enables batch release. Full row clickable.
Corridorlock.corridor.codee.g. GHA-MLI
Lock IDlock.lock_idTruncated for display. DB UUID in UserRole+2.
Amountlock.amountFormatted with currency. UserRole+3 for combo auto-fill.
Expirylock.expires_atYYYY-MM-DD HH:MM truncated
Statuslock.statusColoured capsule pill: green=ACTIVE, blue=RELEASED, red=EXPIRED

Rebalance Reserve Pools

Dialog

Source Pool, Destination Pool (cannot equal), Amount. Preview panel shows projected balances before confirm.

POST /api/v2/liquidity_locks/rebalance

corridor_id, source_pool, dest_pool, amount, rebalanced_at

Physical retag attempt

Server selects locks on source_pool smallest-first. Resets reserve_pool column to dest_pool until amount exhausted.

Virtual event fallback

If no individual lock ≤ remaining, writes ReservePoolEvent. reserve_pools endpoint applies as virtual adjustment.

§5

Right Pane — Controls & Governance

Corridor Limits & Safety

LimitEnforcementDefault
Per-Transaction CapServer + client guardrail500,000 XOF
Daily Corridor CapServer + client warning + utilisation bar2,500,000 XOF
Monthly CapServer monthly sum check25,000,000 XOF
Velocity LimitServer rolling 1h window4,000,000 XOF/hr
Client-side validation provides real-time UX feedback only. The Rails server re-validates on every lock creation and returns HTTP 422 with a structured error if any limit is exceeded.

Liquidity Position (read-only)

FieldCalculation
Domestic AvailableSUM of all active lock amounts for this corridor
Linked OutstandingSUM of denominations of active + issued CVIB notes backed by this corridor
Net PositionDomestic Available − Linked Outstanding
Position StatusSurplus (net > 0) | Balanced (net = 0) | Deficit (net < 0) | At Risk (net < −10% daily cap)

Emergency Actions

ButtonActionAuth
Manual ReconFull ledger reconciliation with operator reason. No funds moved.Standard token
System OverrideForced sync bypassing validation. Reason + 4-digit PIN. Dialog stays open until server confirms.PIN + ENV['OVERRIDE_PIN'] in production
Request SupportPre-filled support ticket with corridor snapshot. Generates SUP-{code}-{timestamp}.Standard token
Deactivate / ReactivateDynamic button. Red when active. Green when paused/frozen. Two-step confirm + reason for deactivation.Standard token + mandatory reason
The Deactivate / Reactivate button must always live in the Emergency Actions group box (grpEmergencyActions), behind a visual "⚠ Danger Zone" divider. It must never appear in the Action bar or alongside routine operations.
§6

Button-Level Behaviour

Execute (Lock Liquidity)Middle Pane
Inputs
Amount, Reserve Pool, Duration
API
POST /api/v2/liquidity_locks {corridor_id, amount, reserve_pool, duration, expires_at}
Success
New ACTIVE row in locks table. Pool balance decremented. Liquidity position updated.
Failure
HTTP 422 → critical dialog with server error message.
Release SelectedMiddle Pane
Inputs
Checked rows in locks table OR selected Lock ID from Release Liquidity panel
API
POST /api/v2/liquidity_locks/:id/release {reason?} — one call per lock
Success
Rows show RELEASED. Pool balance restored. Lock ID combo refreshed after 600ms.
Failure
Warning dialog listing all failed lock IDs.
Rebalance PoolsMiddle Pane
Inputs
Source Pool, Destination Pool (≠ source), Amount
API
POST /api/v2/liquidity_locks/rebalance
Success
Physical lock retag if lock ≤ amount. Virtual ReservePoolEvent if no lock fits.
Propose Change — FX RateMiddle Pane
Inputs
New FX Rate (high-precision decimal), Effective Time (Immediate | Scheduled)
API
POST /api/v2/corridors/:id/fx_rate {rate, effective_time}
Success
Returns pending_four_eyes. Rate unchanged until approved by second operator.
Escalate to GovernanceRight Pane
Inputs
Reason (mandatory dropdown), Proposal ID (auto-generated)
API
POST /api/v2/escalations {corridor_id, reason, proposal_id}
Rule
Proposing operator cannot self-approve. Four-Eyes enforced server-side.
Deactivate / Reactivate CorridorRight Pane · Danger Zone
Deactivate
Two-step dialog. Reason combo (6 options, mandatory). POST /corridors/:id/deactivate {reason} → status=paused
Reactivate
Routes to onCreateCorridor. Detects already_exists (HTTP 200) and offers reactivation.
§7

System Rules & Edge Cases

Liquidity = 0

Execute button disabled with tooltip "Waiting for pool balance". Operator must rebalance from another pool or create a new lock. Issuance blocked. Corridor remains functional for FX and governance actions.

Cap Exceeded

Client: validateAmountGuardrail() shows red warning. Execute disabled.
Server: HTTP 422 {code: cap_exceeded}. QMessageBox::critical shown.
Partial cap: MAX button fills to remaining headroom automatically.

Corridor Status Capability Matrix

StatusLock CreateLock ReleaseIssuanceFX Update
ACTIVEVia governance
PAUSEDVia governance
FROZENVia governance only
INACTIVEMust reactivate first

Rebalance with No Fitting Lock

If rebalance amount < every individual lock: physical retag = 0. ReservePoolEvent written for full amount.
reserve_pools endpoint: dest_pool += event.amount, source_pool -= event.amount (floored at 0).
§8

End-to-End Flow

Complete walkthrough: GHA → MLI corridor from selection through limit breach, governance escalation, and reconciliation.

Select corridor

Type "GHA" in corridor selector. GHA → MLI activates. Full reload fires. FX=50.5425, Pool BCEAO-XOF-RESERVE-01 Available=49,000 XOF (Low).

Lock liquidity

Intent=Lock Liquidity. Click 10M → guardrail fires "Exceeds daily cap". Reduce to 2,000,000. Duration=24h. Execute. Lock LK-BF0B… ACTIVE created.

Issuance linked

CVIB batch 1,800,000 XOF issued from Issuance tab, linked to new lock. Net Position = 200,000 XOF.

Limit reached

Second lock attempt for 1,000,000 XOF. "Daily cap reached: 0 remaining today." Execute disabled.

Escalate to governance

Reason="Temporary cap increase". Proposal GOV-2026040922 created. Supervisor approves in Governance tab. daily_cap raised to 5,000,000.

Reconcile

Reconciliation Report POST /reconcile. Returns "2 active locks, 1 linked issuance, no discrepancies". Sync status: In Sync ✓.

End state: 2 active locks on BCEAO-XOF-RESERVE-01, 1 linked CVIB batch, net position positive, all limits within bounds, full audit trail recorded.
🗑️

Remove Saved Contact?

Contact Name
abc123...xyz789

⚠️ You will need their Cash Code again to send them money in the future.

CBDC Preview
Status Valid
Currency -
Amount -
Serial Number -
Uploading files...
Please wait
💸
Confirm Giving Cash
Check the details below
Amount GHS 0.00
To Cash Code ...
Cash Notes 0
⚠️

Already Transferred

The following CBDC notes have already been transferred and cannot be used again.

📱 Your Digital Cash Code QR

Let others scan this to send you money

How to use: The sender opens "Send Digital Cash" and taps the scan icon to read this QR code.

Trade Claim Submission

Submit verified trade to request cross-border liquidity.

Claiming Institution

Select Country...

Trade Details

Select Corridor first...

Select a corridor to load destination-country institutions.

Beneficiary Information

Supporting Documents

Click to upload or drag and drop

PDF, PNG, or JPG (max 10MB each)

Declarations

Confirm Trade Claim
Please review the details before submitting
Amount
Corridor
Institution
Beneficiary
Invoice Ref
Direction
⚠️

Once submitted, this trade claim will enter the supervisory review queue and cannot be edited. Please verify all details are correct.

Trade Claim Submitted!

Your trade claim has been successfully submitted and is now pending
review for pre-clearance by regulators.

Trade Claim ID:
TC-20260215-000000

An initial pre-clearance review shows your trade appears compliant.
It will now be routed for final approval.

Pre-cleared trade is pending review by regulators for approval.
Beneficiary funds will be held while the trade is being finalized.
Track status any time via the Issuance → Desk section.
📊 Trade Summary:
Trade Amount KES 1,000,000
Trade Direction Import into Nigeria
Beneficiary Kenya Exports Ltd
Help & Docs · Contact Support · Dashboard

Draft Saved!

Your trade claim has been saved as a draft.
You can continue editing it anytime.

Draft Reference:
TC-00000000

Your draft has been saved and can be accessed from your dashboard.
Complete the submission when you're ready.

Draft saved securely to your account.
Continue editing anytime from your dashboard.
Submit when ready via Drafts section.
📋 Draft Summary:
Amount KES 0
Direction -
Status Draft
Help & Docs · Contact Support · Dashboard

Issuance Desk

Manage and review recent cross-border trade claims.

Claim ID
Direction
Destination Corridor
Amount
Status
View

Loading trade claims...

No trade claims found

Showing 0 of 0
Help & Docs · Contact Support · Dashboard
SA
Admin Console v1.2.3

Administrator Console

System management and monitoring dashboard.

Total Corridor Volume
USD Equivalent
Pending Claims
⏳ Pending
Daily Limit Utilization
USD Equivalent
Non-Compliance Alerts
Admin viewed trade claims. Today at

Latest Trade Claim Activity

Read-only monitoring view. No transactional authority.

ID Institution Amount Corridor Status Risk
Loading claims...

Corridor Volume

0

Active Issuance Queue

0 Pending requests

Corridor Quota Limits

Corridor Corridor Limit Remaining Daily Limit Remaining Compliance Status
Loading corridor data...
Admin Console v1.2.3
🔒 System Admin