Financial Services

A neobank processes 3M wire transfers per day. Compliance must screen every transaction against sanctions lists and detect structuring patterns (splitting transactions to stay under $10K reporting thresholds) — all before the wire settles in 30 minutes.

The batch screening job runs every 4 hours. A structuring pattern across 6 transactions from the same sender was caught 3 hours after the last wire already settled.
LIVEwire_transfers
wire_idsender_acctreceiver_acctamountcurrencyreceiver_bankts
WIR-20240315-88901ACC-7741ACC-33029400USDJPMorgan Chase2024-03-15T10:02:14.000Z
WIR-20240315-88914ACC-7741ACC-55188750USDBank of America2024-03-15T10:06:41.000Z
WIR-20240315-88927ACC-7741ACC-33027900USDJPMorgan Chase2024-03-15T10:11:03.000Z
WIR-20240315-88938ACC-7741ACC-88909950USDWells Fargo2024-03-15T10:15:22.000Z
WIR-20240315-88945ACC-7741ACC-66176200USDCitibank2024-03-15T10:19:48.000Z
WIR-20240315-88951ACC-7741ACC-55185800USDBank of America2024-03-15T10:24:07.000Z
Streaming SQLRunning
Detect structuring patterns
CREATE MATERIALIZED VIEW structuring_alerts AS
SELECT
  sender_acct,
  COUNT(*) AS txn_count,
  COUNT(DISTINCT receiver_acct) AS distinct_recipients,
  SUM(amount) AS total_amount,
  MAX(amount) AS largest_txn,
  MIN(amount) AS smallest_txn,
  EXTRACT(EPOCH FROM MAX(ts) - MIN(ts)) / 60 AS time_span_minutes,
  window_start
FROM TUMBLE(wire_transfers, ts, INTERVAL '60 MINUTES')
WHERE currency = 'USD'
GROUP BY sender_acct, window_start
HAVING
  COUNT(*) > 3
  AND MAX(amount) < 10000
  AND SUM(amount) > 30000;
Screen against sanctions watchlist
aml_alertsauto-updating
sender_acctalert_typetxn_counttotal_amounttime_span_minutesrisk_score
ACC-7741STRUCTURING64800021.8892
ACC-2204SANCTIONS_MATCH147250078
RisingWave detects sender ACC-7741 splitting $48,000 across 6 wires to 4 different recipients in 22 minutes — each under $10K. SAR filed before the 5th wire settles.
Best-in-Class Event Streaming
for Agents, Apps, and Analytics
GitHubXLinkedInSlackYouTube
Sign up for our to stay updated.