Objective
SAR-narrative quality is analyst-dependent: the same fact pattern yields a strong narrative from a senior and an inconsistent one from a junior, and the examiner sees the variance. This recipe retrieves the most semantically similar prior SARs for a new case, so the analyst starts from proven language for the matching typology — consistency by construction.
Step 1: Your SAR history with narrative embeddings
DROP TABLE IF EXISTS sar_hist;
CREATE TABLE sar_hist (
sar_id TEXT PRIMARY KEY,
typology TEXT,
narrative TEXT,
emb VECTOR(384)
);
INSERT INTO sar_hist VALUES
('SAR-9001','structuring',
'Customer made repeated sub-10k cash deposits across several days totaling well over the reporting threshold.',
EMBED('Customer made repeated sub-10k cash deposits across several days totaling well over the reporting threshold.')),
('SAR-9002','layering',
'Funds moved rapidly through three shell accounts before an offshore cashout.',
EMBED('Funds moved rapidly through three shell accounts before an offshore cashout.'));
Step 2: Find the closest prior SARs for a new case
SELECT sar_id,
typology,
COSINE_SIMILARITY(
emb,
EMBED('Client broke a large cash amount into many deposits under 10000 to avoid the CTR threshold.')
) AS sim
FROM sar_hist
ORDER BY sim DESC
LIMIT 2;
Result — the new structuring case correctly retrieves the prior structuring SAR ahead of the layering one:
| sar_id | typology | sim |
|---|---|---|
| SAR-9001 | structuring | 0.587 |
| SAR-9002 | layering | 0.365 |
Why it matters
The analyst drafts from a proven, same-typology narrative instead of a blank page — faster and more consistent for the regulator. This is the retrieval half of a grounded SAR-drafting workflow; pair it with an agentic reviewer to draft, and a tamper-evident ledger to prove the process.