Lesson 67Compliance flowsAdvanced

Sanctions and PEP screening cascades

A name hit on a sanctions list blocks a payment at the ledger boundary.

By Solomon Ajayi · Free to read, no signup

Every cross-border transaction (and increasingly every domestic one) gets screened against OFAC, UN Consolidated, EU Consolidated, and PEP (Politically Exposed Persons) lists. A hit doesn't mean guilty, most are false positives (same name, different person), but a confirmed hit DOES mean you cannot legally complete the payment. The accounting consequence: the payment stops mid-flight. Whatever bucket the money is in (auth pending, in-transit, etc) it gets reclassified to a SCREENING-HELD bucket pending compliance review. This lesson posts an outbound wire that hits a sanctions match, gets held, and then either reverts (false positive cleared) or is permanently blocked.

Sanctions screening is a hard stop at the ledger boundary. Before an outbound payment leaves, the counterparty name is matched against watchlists, and a fuzzy match above your threshold (87% against an OFAC entry, say) halts the payment automatically. Nothing has gone wrong yet; most hits are false positives, the same name attached to a different person. But you cannot let the money move until a human confirms which it is.

The hold is a reclassification: User Wallet (Available) down, User Wallet (Screening Held) up. The Nostro never moves, because no money has actually left, and the user sees their total balance unchanged while their available balance drops and the wire shows as under review. From here exactly one of three things happens. A false positive releases back to Available. A confirmed match becomes something far heavier. Anything unresolved stays in Screening Held under an SLA.

A confirmed true positive is the moment the money stops being returnable. By law you must block it, not refund it, so you debit Screening Held and credit Blocked Funds, a regulatory-hold liability that no longer points at the user's wallet. The user can dispute through legal process, but you cannot release without authorisation. Both Screening Held and Blocked Funds are liabilities on your side of the balance sheet, yet the user can only ever act against Available.

Worked example, step by step

User initiates $500 wire: name hit on OFAC list

User submits a wire to a counterparty whose name fuzzy-matches an OFAC entry (similarity score 87%, above your 80% threshold). The wire is automatically held; user wallet is debited from Available and credited to Screening Held. The Nostro doesn't move yet, no money has left.

$500 wire held: OFAC name match (87% similarity)
AccountDebitCredit
User Wallet (Available) (2000)₦750,000.00
User Wallet (Screening Held) (2160)₦750,000.00

User Wallet (Available) DOWN ₦750,000 (debit at 1500 NGN/USD). User Wallet (Screening Held) UP ₦750,000 (credit). Pure reclassification. The user sees their balance unchanged in 'total' but the available balance dropped, they get a 'transaction under review' status in the app.

Compliance reviews: confirmed false positive, release

Compliance officer reviews. The counterparty's DOB, address, and passport differ from the OFAC entry. False positive. Release: Screening Held → Available, and the wire flow resumes.

Screening cleared: release $500 back to Available
AccountDebitCredit
User Wallet (Screening Held) (2160)₦750,000.00
User Wallet (Available) (2000)₦750,000.00

User Wallet (Screening Held) DOWN ₦750,000 (debit). User Wallet (Available) UP ₦750,000 (credit). The release is a reverse of the hold, with a different metadata reasonCode for the audit trail.

Different wire: confirmed true positive, funds permanently blocked

$300 wire. Sanctions match confirmed by compliance, the counterparty IS the sanctioned individual. By law, the funds must be BLOCKED (kept by you, not returned to the user). They go to a regulatory hold liability, NOT back to the user's wallet. The user can dispute via legal process; you cannot release without authorization.

Sanctions confirmed: $300 to regulatory blocked funds
AccountDebitCredit
User Wallet (Screening Held) (2160)₦450,000.00
Blocked Funds (regulatory hold) (2900)₦450,000.00

User Wallet (Screening Held) DOWN ₦450,000 (debit). Blocked Funds (regulatory hold) UP ₦450,000 (credit). This is the moment money becomes UNCONDITIONALLY non-returnable to the user. Your books carry a NEW liability, to whatever future regulator action defines disposition.

Takeaway

Sanctions / PEP screening is a HARD STOP at the ledger boundary, the payment doesn't complete until compliance reviews. Three outcomes: false positive (release back to Available), true positive (move to Blocked Funds, regulator notified, user disputes via legal process), or pending (stays in Screening Held while review continues, with SLAs for resolution). The Screening Held bucket and the Blocked Funds bucket are LIABILITIES on YOUR side of the balance sheet, but the user can only act against Available. The discipline pays off when regulators audit, your compliance team can answer 'how much is currently held' and 'what's been blocked this year' to the kobo.

Practice this on a real ledger

Reading is half of it. Open this lesson in the lab to post the entries yourself against a real Postgres-backed double-entry ledger, with the validation on. Free, your sandbox is yours.

More in this section

Search lessons

Type to find any of the 85 lessons. Press Enter to open.