All Posts
February 13, 20260.1.20Calmony Sanctions Monitor

v0.1.20 — feat: OFSI list change detection and differential tracking

Release v0.1.20: OFSI List Change Detection and Differential Tracking

13 February 2026

What changed

  • Diff engine: New ofsi-diff.ts library compares each OFSI list import against the previous version, identifying added, removed, and modified entities by ofsiGroupId.
  • Portfolio impact estimation: Token-based name matching estimates how many of your monitored people could be affected by each change.
  • Import flow integration: Change detection runs automatically during every import batch — before new entities are inserted — and results are persisted to ofsiListChanges.
  • Smarter re-screening: Batch re-screening now triggers when actual diffs are detected, not just when the total entity count differs.
  • Resilient by design: Change detection is wrapped in error handling so it never blocks the core import flow.
  • 21 new unit tests covering diff computation, token matching, alias handling, case insensitivity, and diacritics.

Why it matters

Previously, imports could only detect that the list had changed by comparing total entity counts. Now the system knows exactly what changed — which entities were added, removed, or modified — and can estimate which of your monitored people might be affected. This feeds the existing dashboard and changes pages with real data.

Technical notes

  • New records are written to the ofsiListChanges table with change type, entity details, and portfolio impact count.
  • Change detection stats are now included in the import API response and audit log entries.
  • +856 lines across 3 files.

Release Notes

Successfully merged PR #36 and created release v0.1.20.

PR #36: feat: OFSI list change detection and differential tracking

What was released:

  • New ofsi-diff.ts library for computing diffs between OFSI sanctions list versions (additions, removals, modifications)
  • Portfolio impact estimation using token-based name matching
  • Integration into the import-batch API flow with resilient error handling
  • 21 comprehensive unit tests covering all pure functions
  • +856 lines added across 3 files