SanctionsScreening
A screening hit with list source, match strength and the reviewer's disposition.
npx shadcn add @lopifi/sanctions-screeningExamples
The same component, case by case. Each stage is the shipped code with the props it shows; switch to Code for the usage.
Open, awaiting review
No disposition yet: the hit is open, and recording one requires a choice and a rationale.
How it behaves
What it renders, what it refuses to render, and why. The same paragraphs as the family spec, so the two can’t disagree.
One screening hit, laid out so a reviewer can decide it: the screened name beside the listed name, a field-by-field comparison (exact, partial, no match), the list source with its entry id and refresh date, the provider's match strength and score, and the disposition (true-match | false-positive | escalated) with reviewer, timestamp and rationale.
Dispositions are append-only. There's no clear, no dismiss and no edit. A changed mind is a new record with its own reason, and the earlier one stays in the history. Paying a sanctioned party is a legal event, not an accounting one (procure to pay), and a hit that vanished without a reviewer's name is exactly what an examiner asks about.
Refuses to render: an anonymous disposition. The form names the reviewer and requires a rationale, and without reviewer and onRecord the hit renders read-only. An escalated hit is still open.
Data, not constants: the list's name, version and refresh date, and the strength thresholds, are the provider's. Demos use an illustrative list and fictional parties.
Accessibility: native radio inputs, so the browser owns the arrow keys. A real <form> and <fieldset>. The current disposition is a status region.
More in Tax & compliance
See also
Where this component is specified, defined and running.
Elsewhere in the system
The live section SanctionsScreening renders in, the calculators behind its figures, and the ledger payloads that feed it.
- SanctionsScreening, runningThe compliance showcase — live, with theme, density, grayscale and reduced-motion switches.
- Tax & complianceControlTestResult sits beside them and speaks their idiom. Every component in this family takes an explicit asOf. "Today" is never the client clock, so a server render, a printed copy and a screenshot agree on what is late. Shared types live in src/ledger/lib/compliance.types.ts; the tax-ID checks l
Components are copied into your repository and meant to be edited. Rounding policy, fiscal calendar and compliance copy differ per company.
Release notes
Get an email when Tax & compliance changes
Your copy doesn’t update itself when we fix something here.
- One email when a Tax & compliance component needs a migration
- Nothing when nothing changes
Or install it now
npx shadcn add @lopifi/sanctions-screening