Sanctions screening · a working console over the real OFAC list

Most of the recall is lost before the matcher is called.

Screening runs in two steps. A search narrows 19,329 listed entities to a shortlist; a matcher then scores that shortlist. The public benchmark for this task scores the second step. This measures the first, and lets you operate it.

…

The console · every row below is a real screening decision

Set the catch rate you have to hold. The queue is what it costs you.

… real customer names, each a genuine alternate spelling for a party on today's SDN list, screened against the whole list with the same matcher the repository uses. Move either dial and the queue below re-partitions. Nothing is simulated.

Your portfolio decides this, not the matcher.

Why the misses happen

Every name on the list is written in one alphabet.

All 43,872 names published on the SDN list are written in Latin letters. A customer whose name arrives in its own script therefore shares no word with any entry on the list, and a phonetic key cannot bridge the gap either, because phonetic keys are defined over Latin letters too.

Type a name. This runs the same normalisation the measurements use, then looks the resulting tokens up against the … name tokens the SDN list indexes.

Token overlap only is shown here, never the phonetic key. Reimplementing a phonetic algorithm in JavaScript would risk this page disagreeing with the repository, and the two implementations shipped inside jellyfish itself already disagree on 5 tokens in every 5,000. The queue above uses the real keys, computed in Python.

Retrieval, by writing system

Romanising the query is a six-line change and recovers most of the loss.

Han stays broken because romanising Chinese needs pinyin rather than a generic converter, and the residual Latin misses are romanisation divergence rather than script: Mikalaj Mikalajevitj VERABEJ against the list's Mikalai Mikalaevich VARABEI.

What this does not establish

The honest limits.