{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "compliance-sanctions-screener",
  "title": "Compliance Sanctions Screener",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-react/blocks/compliance-sanctions-screener/ComplianceSanctionsScreener.tsx",
      "content": "'use client'\n\nimport * as React from 'react'\nimport {\n  AlertTriangle,\n  Ban,\n  Building2,\n  Check,\n  CheckCircle2,\n  Eye,\n  FileSearch,\n  Globe,\n  Info,\n  RefreshCw,\n  RotateCcw,\n  Search,\n  ShieldAlert,\n  ShieldCheck,\n  ShieldX,\n  Sliders,\n  User,\n  Users,\n  X,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'\nimport { Input } from '@/components/ui/input'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\nimport { Slider } from '@/components/ui/slider'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\nimport type {\n  ComplianceSanctionsScreenerProps,\n  EntityType,\n  MatchStatus,\n  NotificationBanner,\n  SanctionAttributeComparison,\n  SanctionRecord,\n} from './compliance-sanctions-types'\nimport { defaultSanctionRecords } from './compliance-sanctions-data'\nimport { SanctionsInvestigationDialog } from './SanctionsInvestigationDialog'\n\nexport type {\n  ComplianceSanctionsScreenerProps,\n  EntityType,\n  MatchStatus,\n  NotificationBanner,\n  SanctionAttributeComparison,\n  SanctionRecord,\n}\n\nexport function ComplianceSanctionsScreener({\n  initialSearch = 'Viktor Ivanov',\n  initialCountry = 'all',\n  initialThreshold = 85,\n  initialRecords,\n  className,\n}: ComplianceSanctionsScreenerProps) {\n  const [searchQuery, setSearchQuery] = React.useState(initialSearch)\n  const [selectedCountry, setSelectedCountry] = React.useState(initialCountry)\n  const [selectedEntityType, setSelectedEntityType] = React.useState<'all' | EntityType>('all')\n  const [thresholdValue, setThresholdValue] = React.useState(initialThreshold)\n\n  const [records, setRecords] = React.useState<SanctionRecord[]>(() =>\n    initialRecords ? JSON.parse(JSON.stringify(initialRecords)) : JSON.parse(JSON.stringify(defaultSanctionRecords)),\n  )\n\n  React.useEffect(() => {\n    if (initialRecords) {\n      setRecords(JSON.parse(JSON.stringify(initialRecords)))\n    }\n  }, [initialRecords])\n\n  const [isBatchScreening, setIsBatchScreening] = React.useState(false)\n  const [notificationBanner, setNotificationBanner] = React.useState<{\n    message: string\n    type: 'success' | 'warning' | 'info' | 'destructive'\n  } | null>(null)\n\n  const [selectedRecord, setSelectedRecord] = React.useState<SanctionRecord | null>(null)\n  const [isInvestigationOpen, setIsInvestigationOpen] = React.useState(false)\n\n  const showNotification = React.useCallback(\n    (message: string, type: 'success' | 'warning' | 'info' | 'destructive' = 'info') => {\n      setNotificationBanner({ message, type })\n      setTimeout(() => {\n        setNotificationBanner((prev) => (prev?.message === message ? null : prev))\n      }, 4500)\n    },\n    [],\n  )\n\n  const handleRunBatchScreening = () => {\n    setIsBatchScreening(true)\n    setTimeout(() => {\n      setIsBatchScreening(false)\n      showNotification(\n        'Batch screening completed. 1,420 entities cross-referenced against 4 global registries. 12 matches flagged.',\n        'success',\n      )\n    }, 1200)\n  }\n\n  const handleClearFalsePositive = (record: SanctionRecord) => {\n    setRecords((prev) => prev.map((r) => (r.id === record.id ? { ...r, matchStatus: 'cleared_false_positive' } : r)))\n    showNotification(\n      `False positive cleared for \"${record.entityName}\". Compliance audit log logged with officer signature.`,\n      'success',\n    )\n  }\n\n  const handleBlockEntity = (record: SanctionRecord) => {\n    setRecords((prev) => prev.map((r) => (r.id === record.id ? { ...r, matchStatus: 'blocked' } : r)))\n    showNotification(\n      `Entity \"${record.entityName}\" confirmed PROHIBITED. Asset freeze locked and SAR report staged for FinCEN / EU MLRO.`,\n      'destructive',\n    )\n  }\n\n  const handleEscalate = (record: SanctionRecord) => {\n    showNotification(\n      `Case for \"${record.entityName}\" escalated to Senior Compliance Officer & Legal Counsel for review.`,\n      'warning',\n    )\n    setIsInvestigationOpen(false)\n  }\n\n  const handleResetFilters = () => {\n    setSearchQuery('')\n    setSelectedCountry('all')\n    setSelectedEntityType('all')\n    setThresholdValue(85)\n    showNotification('Filters reset to default workbench view.', 'info')\n  }\n\n  const openInvestigation = (record: SanctionRecord) => {\n    setSelectedRecord(record)\n    setIsInvestigationOpen(true)\n  }\n\n  const filteredRecords = React.useMemo(() => {\n    return records.filter((record) => {\n      if (searchQuery.trim()) {\n        const q = searchQuery.toLowerCase().trim()\n        const matchesName = record.entityName.toLowerCase().includes(q)\n        const matchesAlias = record.aliases.some((a) => a.toLowerCase().includes(q))\n        const matchesList = record.sanctionList.toLowerCase().includes(q)\n        const matchesId = record.nationalIdOrLei.toLowerCase().includes(q)\n        const matchesSummary = record.matchedAttributesSummary.toLowerCase().includes(q)\n        if (!matchesName && !matchesAlias && !matchesList && !matchesId && !matchesSummary) {\n          return false\n        }\n      }\n\n      if (selectedCountry !== 'all' && record.country !== selectedCountry) {\n        return false\n      }\n\n      if (selectedEntityType !== 'all' && record.entityType !== selectedEntityType) {\n        return false\n      }\n\n      return true\n    })\n  }, [records, searchQuery, selectedCountry, selectedEntityType])\n\n  const totalScreenedCount = 1420\n  const clearedCount = React.useMemo(() => {\n    const baseCleared = 1408\n    const additionalCleared = records.filter((r) => r.matchStatus === 'cleared_false_positive').length\n    const newlyBlocked = records.filter((r) => r.matchStatus === 'blocked').length\n    return baseCleared + additionalCleared - newlyBlocked\n  }, [records])\n\n  const flaggedCount = React.useMemo(() => {\n    const basePending = 12\n    const cleared = records.filter((r) => r.matchStatus === 'cleared_false_positive').length\n    const blocked = records.filter((r) => r.matchStatus === 'blocked').length\n    return Math.max(0, basePending - cleared - blocked)\n  }, [records])\n\n  const blockedCount = React.useMemo(() => {\n    return records.filter((r) => r.matchStatus === 'blocked').length\n  }, [records])\n\n  return (\n    <div className={cn('text-foreground w-full space-y-6', className)}>\n      {/* Header Section */}\n      <div className=\"flex flex-col gap-4 md:flex-row md:items-center md:justify-between\">\n        <div>\n          <div className=\"flex flex-wrap items-center gap-2.5\">\n            <h1 className=\"text-xl font-bold tracking-tight sm:text-2xl\">AML / OFAC Sanctions &amp; PEP Screening</h1>\n            <Badge wrap variant=\"outline\" className=\"border-success/30 bg-success/10 text-success gap-1.5 py-0.5\">\n              <span className=\"bg-success size-1.5 animate-pulse rounded-full\" />\n              <span className=\"font-medium\">OFAC SDN, EU Consolidated, UK HMT, UN Sanctions · Synced 10m ago</span>\n            </Badge>\n          </div>\n          <p className=\"text-muted-foreground mt-1 text-xs sm:text-sm\">\n            Automated identity verification, Politically Exposed Persons (PEP), and multilateral sanctions screening\n            workbench.\n          </p>\n        </div>\n\n        <div className=\"flex shrink-0 items-center gap-2\">\n          <Button\n            variant=\"default\"\n            size=\"sm\"\n            disabled={isBatchScreening}\n            className=\"cursor-pointer gap-2 shadow-xs\"\n            onClick={handleRunBatchScreening}\n          >\n            <RefreshCw className={cn('size-4', isBatchScreening && 'animate-spin')} />\n            <span>{isBatchScreening ? 'Screening 1,420 Records...' : 'Run Batch Screening'}</span>\n          </Button>\n        </div>\n      </div>\n\n      {/* Notification Toast / Banner */}\n      {notificationBanner && (\n        <div\n          className={cn(\n            'flex items-center justify-between gap-3 rounded-lg border px-4 py-3 text-xs transition-colors duration-200 sm:text-sm',\n            notificationBanner.type === 'success' && 'border-success/30 bg-success/10 text-success',\n            notificationBanner.type === 'warning' && 'border-warning/30 bg-warning/10 text-warning',\n            notificationBanner.type === 'destructive' && 'bg-destructive/10 border-destructive/30 text-destructive',\n            notificationBanner.type === 'info' && 'bg-primary/10 border-primary/20 text-primary',\n          )}\n        >\n          <div className=\"flex min-w-0 items-center gap-2\">\n            {notificationBanner.type === 'success' && <CheckCircle2 className=\"size-4 shrink-0\" />}\n            {notificationBanner.type === 'warning' && <AlertTriangle className=\"size-4 shrink-0\" />}\n            {notificationBanner.type === 'destructive' && <Ban className=\"size-4 shrink-0\" />}\n            {notificationBanner.type === 'info' && <Info className=\"size-4 shrink-0\" />}\n            <span>{notificationBanner.message}</span>\n          </div>\n          <button\n            type=\"button\"\n            className=\"rounded-md p-1 transition-colors hover:bg-black/5 dark:hover:bg-white/10\"\n            onClick={() => setNotificationBanner(null)}\n          >\n            <X className=\"size-3.5\" />\n          </button>\n        </div>\n      )}\n\n      {/* 4 Screening Telemetry Cards */}\n      <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n        {/* Card 1: Total Screened */}\n        <Card className=\"border-border/80 border shadow-xs\">\n          <CardContent className=\"p-4 sm:p-5\">\n            <div className=\"flex items-center justify-between\">\n              <span className=\"text-muted-foreground text-xs font-medium tracking-wider uppercase\">\n                Total Screened Today\n              </span>\n              <div className=\"bg-muted text-muted-foreground flex size-8 items-center justify-center rounded-md\">\n                <Users className=\"size-4\" />\n              </div>\n            </div>\n            <div className=\"mt-3 flex items-baseline gap-2\">\n              <span className=\"text-2xl font-bold tracking-tight tabular-nums\">\n                {totalScreenedCount.toLocaleString()}\n              </span>\n              <span className=\"text-muted-foreground text-xs font-medium\">Entities</span>\n            </div>\n            <p className=\"text-muted-foreground mt-1 text-xs\">\n              <span className=\"text-success font-medium\">+14.2%</span> vs yesterday · 38 automated batches\n            </p>\n          </CardContent>\n        </Card>\n\n        {/* Card 2: Clear / No Matches */}\n        <Card className=\"border-border/80 border shadow-xs\">\n          <CardContent className=\"p-4 sm:p-5\">\n            <div className=\"flex items-center justify-between\">\n              <span className=\"text-muted-foreground text-xs font-medium tracking-wider uppercase\">\n                Clear / No Matches\n              </span>\n              <div className=\"bg-success/10 text-success flex size-8 items-center justify-center rounded-md\">\n                <ShieldCheck className=\"size-4\" />\n              </div>\n            </div>\n            <div className=\"mt-3 flex items-baseline gap-2\">\n              <span className=\"text-success text-success text-2xl font-bold tracking-tight tabular-nums\">\n                {clearedCount.toLocaleString()}\n              </span>\n              <span className=\"text-success text-success text-xs font-semibold tabular-nums\">Cleared · 99.2%</span>\n            </div>\n            <p className=\"text-muted-foreground mt-1 text-xs\">Low Risk · 0 PEP matches · 0 adverse media</p>\n          </CardContent>\n        </Card>\n\n        {/* Card 3: Potential Matches Flagged */}\n        <Card className=\"border-border/80 border shadow-xs\">\n          <CardContent className=\"p-4 sm:p-5\">\n            <div className=\"flex items-center justify-between\">\n              <span className=\"text-muted-foreground text-xs font-medium tracking-wider uppercase\">\n                Potential Matches Flagged\n              </span>\n              <div className=\"bg-warning/10 text-warning flex size-8 items-center justify-center rounded-md\">\n                <AlertTriangle className=\"size-4\" />\n              </div>\n            </div>\n            <div className=\"mt-3 flex items-baseline gap-2\">\n              <span className=\"text-warning text-warning text-2xl font-bold tracking-tight tabular-nums\">\n                {flaggedCount}\n              </span>\n              <span className=\"text-warning text-xs font-semibold\">Pending Review</span>\n            </div>\n            <p className=\"text-muted-foreground mt-1 text-xs\">Action required · SLA &lt;2h · 1 high confidence</p>\n          </CardContent>\n        </Card>\n\n        {/* Card 4: Confirmed Prohibited Matches */}\n        <Card className=\"border-border/80 border shadow-xs\">\n          <CardContent className=\"p-4 sm:p-5\">\n            <div className=\"flex items-center justify-between\">\n              <span className=\"text-muted-foreground text-xs font-medium tracking-wider uppercase\">\n                Confirmed Prohibited Matches\n              </span>\n              <div className=\"bg-destructive/10 text-destructive flex size-8 items-center justify-center rounded-md\">\n                <Ban className=\"size-4\" />\n              </div>\n            </div>\n            <div className=\"mt-3 flex items-baseline gap-2\">\n              <span\n                className={cn(\n                  'text-2xl font-bold tracking-tight tabular-nums',\n                  blockedCount > 0 ? 'text-destructive' : 'text-foreground',\n                )}\n              >\n                {blockedCount}\n              </span>\n              <span className=\"text-muted-foreground text-xs font-semibold\">Blocked</span>\n            </div>\n            <p className=\"text-muted-foreground mt-1 text-xs\">Asset freeze locked · FinCEN SAR ready</p>\n          </CardContent>\n        </Card>\n      </div>\n\n      {/* Real-Time Entity Search Bar & Fuzzy Threshold Workbench */}\n      <Card className=\"border-border/80 bg-card border shadow-xs\">\n        <CardContent className=\"space-y-4 p-4 sm:p-5\">\n          <div className=\"grid grid-cols-1 items-end gap-4 md:grid-cols-12\">\n            {/* Search Input */}\n            <div className=\"space-y-1.5 md:col-span-4\">\n              <label\n                htmlFor=\"react-entity-search-input\"\n                className=\"text-foreground flex items-center gap-1.5 text-xs font-medium\"\n              >\n                <Search className=\"text-muted-foreground size-3.5\" />\n                <span>Search Individual / Entity Name</span>\n              </label>\n              <div className=\"relative\">\n                <Input\n                  id=\"react-entity-search-input\"\n                  value={searchQuery}\n                  onChange={(e) => setSearchQuery(e.target.value)}\n                  type=\"text\"\n                  placeholder=\"Search name, alias, ID or passport...\"\n                  className=\"bg-background pl-8 text-xs sm:text-sm\"\n                />\n                <Search className=\"text-muted-foreground pointer-events-none absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2\" />\n                {searchQuery && (\n                  <button\n                    type=\"button\"\n                    className=\"text-muted-foreground hover:text-foreground absolute top-1/2 right-2.5 -translate-y-1/2\"\n                    onClick={() => setSearchQuery('')}\n                  >\n                    <X className=\"size-3.5\" />\n                  </button>\n                )}\n              </div>\n            </div>\n\n            {/* Country Filter Dropdown */}\n            <div className=\"space-y-1.5 md:col-span-3\">\n              <label className=\"text-foreground flex items-center gap-1.5 text-xs font-medium\">\n                <Globe className=\"text-muted-foreground size-3.5\" />\n                <span>Country / Domicile Filter</span>\n              </label>\n              <Select value={selectedCountry} onValueChange={setSelectedCountry}>\n                <SelectTrigger className=\"bg-background w-full text-xs sm:text-sm [&>span]:truncate [&>svg]:shrink-0\">\n                  <SelectValue placeholder=\"All Countries\" />\n                </SelectTrigger>\n                <SelectContent>\n                  <SelectItem value=\"all\">All Countries</SelectItem>\n                  <SelectItem value=\"Russia\">Russia (Russian Federation)</SelectItem>\n                  <SelectItem value=\"United States\">United States (USA)</SelectItem>\n                  <SelectItem value=\"Cyprus\">Cyprus (EU)</SelectItem>\n                  <SelectItem value=\"United Kingdom\">United Kingdom (UK)</SelectItem>\n                  <SelectItem value=\"Switzerland\">Switzerland (CH)</SelectItem>\n                  <SelectItem value=\"United Arab Emirates\">United Arab Emirates (UAE)</SelectItem>\n                </SelectContent>\n              </Select>\n            </div>\n\n            {/* Entity Type Pills */}\n            <div className=\"space-y-1.5 md:col-span-2\">\n              <label className=\"text-foreground flex items-center gap-1.5 text-xs font-medium\">\n                <Building2 className=\"text-muted-foreground size-3.5\" />\n                <span>Entity Type</span>\n              </label>\n              <div className=\"bg-muted border-input flex h-9 items-center gap-1 rounded-md border p-1\">\n                <button\n                  type=\"button\"\n                  className={cn(\n                    'flex-1 rounded px-2 py-1 text-xs font-medium transition-colors',\n                    selectedEntityType === 'all'\n                      ? 'bg-background text-foreground shadow-xs'\n                      : 'text-muted-foreground hover:text-foreground',\n                  )}\n                  onClick={() => setSelectedEntityType('all')}\n                >\n                  All\n                </button>\n                <button\n                  type=\"button\"\n                  className={cn(\n                    'flex-1 rounded px-2 py-1 text-xs font-medium transition-colors',\n                    selectedEntityType === 'individual'\n                      ? 'bg-background text-foreground shadow-xs'\n                      : 'text-muted-foreground hover:text-foreground',\n                  )}\n                  onClick={() => setSelectedEntityType('individual')}\n                >\n                  Indiv.\n                </button>\n                <button\n                  type=\"button\"\n                  className={cn(\n                    'flex-1 rounded px-2 py-1 text-xs font-medium transition-colors',\n                    selectedEntityType === 'corporate'\n                      ? 'bg-background text-foreground shadow-xs'\n                      : 'text-muted-foreground hover:text-foreground',\n                  )}\n                  onClick={() => setSelectedEntityType('corporate')}\n                >\n                  Corp.\n                </button>\n              </div>\n            </div>\n\n            {/* Match Threshold Slider */}\n            <div className=\"space-y-1.5 md:col-span-3\">\n              <div className=\"flex flex-wrap items-center justify-between gap-x-2 gap-y-1\">\n                <label className=\"text-foreground flex items-center gap-1.5 text-xs font-medium\">\n                  <Sliders className=\"text-muted-foreground size-3.5\" />\n                  <span>Match Threshold</span>\n                </label>\n                <Badge wrap variant=\"secondary\" className=\"text-xs font-semibold tabular-nums\">\n                  {thresholdValue}% Fuzzy Match\n                </Badge>\n              </div>\n              <div className=\"pt-1.5\">\n                <Slider\n                  value={[thresholdValue]}\n                  onValueChange={(val) => setThresholdValue(val[0] ?? 85)}\n                  min={50}\n                  max={100}\n                  step={1}\n                  className=\"w-full\"\n                />\n              </div>\n            </div>\n          </div>\n\n          {/* Filter helper status bar */}\n          <div className=\"border-border/60 text-muted-foreground flex flex-wrap items-center justify-between gap-2 border-t pt-2 text-xs\">\n            <div className=\"flex min-w-0 items-center gap-2\">\n              <span>\n                Showing <strong className=\"text-foreground tabular-nums\">{filteredRecords.length}</strong> of{' '}\n                <strong className=\"text-foreground tabular-nums\">{records.length}</strong> screening audit records\n              </span>\n              {(searchQuery || selectedCountry !== 'all' || selectedEntityType !== 'all') && (\n                <span className=\"text-muted-foreground/60\">· Filters applied</span>\n              )}\n            </div>\n            <div className=\"flex min-w-0 items-center gap-2\">\n              {(searchQuery || selectedCountry !== 'all' || selectedEntityType !== 'all' || thresholdValue !== 85) && (\n                <Button\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  className=\"text-muted-foreground hover:text-foreground h-7 gap-1 text-xs\"\n                  onClick={handleResetFilters}\n                >\n                  <RotateCcw className=\"size-3\" />\n                  <span>Reset Filters</span>\n                </Button>\n              )}\n            </div>\n          </div>\n        </CardContent>\n      </Card>\n\n      {/* Screening Match Results Table */}\n      <Card className=\"border-border/80 overflow-hidden border shadow-xs\">\n        <CardHeader className=\"border-border/60 border-b p-4 pb-3 sm:p-5\">\n          <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n            <div>\n              <CardTitle className=\"text-base font-semibold\">\n                Active Screening Queue &amp; Target List Matches\n              </CardTitle>\n              <CardDescription className=\"mt-0.5 text-xs\">\n                Real-time fuzzy scoring across OFAC SDN, Sectoral SSI, EU Restrictive Measures, and UN Security Council\n                lists.\n              </CardDescription>\n            </div>\n            <div className=\"text-muted-foreground flex items-center gap-1.5 text-xs\">\n              <span className=\"bg-warning inline-block size-2 rounded-full\" />\n              <span>Amber: Requires Review</span>\n              <span className=\"bg-destructive ml-2 inline-block size-2 rounded-full\" />\n              <span>Red: Prohibited Asset Freeze</span>\n            </div>\n          </div>\n        </CardHeader>\n\n        <div className=\"overflow-x-auto\">\n          <Table>\n            <TableHeader className=\"bg-muted/40\">\n              <TableRow>\n                <TableHead className=\"min-w-[220px]\">Entity Name &amp; Classification</TableHead>\n                <TableHead className=\"min-w-[140px]\">Match Score &amp; Status</TableHead>\n                <TableHead className=\"min-w-[200px]\">Designated Watchlist / Program</TableHead>\n                <TableHead className=\"min-w-[220px]\">Matched Attributes</TableHead>\n                <TableHead className=\"min-w-[130px]\">Jurisdiction</TableHead>\n                <TableHead className=\"min-w-[220px] text-right\">Actions</TableHead>\n              </TableRow>\n            </TableHeader>\n            <TableBody>\n              {filteredRecords.map((record) => (\n                <TableRow\n                  key={record.id}\n                  className={cn(\n                    'hover:bg-muted/30 transition-colors',\n                    record.matchStatus === 'potential_match' && 'bg-warning/[0.02]',\n                    record.matchStatus === 'prohibited_match' && 'bg-destructive/[0.03]',\n                    record.matchStatus === 'blocked' && 'bg-destructive/[0.06] opacity-90',\n                  )}\n                >\n                  {/* 1. Entity Name & Classification */}\n                  <TableCell className=\"py-3.5 align-top font-medium\">\n                    <div className=\"flex items-start gap-2.5\">\n                      <div\n                        className={cn(\n                          'mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-lg text-xs font-bold',\n                          record.entityType === 'individual'\n                            ? 'bg-primary/10 text-primary'\n                            : 'bg-secondary text-secondary-foreground',\n                        )}\n                      >\n                        {record.entityType === 'individual' ? (\n                          <User className=\"size-4\" />\n                        ) : (\n                          <Building2 className=\"size-4\" />\n                        )}\n                      </div>\n                      <div>\n                        <div className=\"flex items-center gap-1.5\">\n                          <span className=\"text-foreground font-semibold\">{record.entityName}</span>\n                          <Badge wrap variant=\"outline\" className=\"px-1.5 py-0 text-xs uppercase\">\n                            {record.entityType}\n                          </Badge>\n                        </div>\n                        {record.originalScript && (\n                          <p className=\"text-muted-foreground mt-0.5 text-xs\">{record.originalScript}</p>\n                        )}\n                        {record.aliases && record.aliases.length > 0 && (\n                          <div className=\"text-muted-foreground/80 mt-1 flex flex-wrap gap-1 text-xs\">\n                            <span className=\"font-medium\">AKAs:</span>\n                            <span>\n                              {record.aliases.slice(0, 2).join(', ')}\n                              {record.aliases.length > 2 ? ` (+${record.aliases.length - 2} more)` : ''}\n                            </span>\n                          </div>\n                        )}\n                      </div>\n                    </div>\n                  </TableCell>\n\n                  {/* 2. Match Score & Status */}\n                  <TableCell className=\"py-3.5 align-top\">\n                    <div className=\"space-y-1\">\n                      {record.matchStatus === 'blocked' ? (\n                        <Badge wrap variant=\"destructive\" className=\"gap-1 text-xs font-semibold\">\n                          <Ban className=\"size-3\" />\n                          <span>Blocked &amp; Frozen</span>\n                        </Badge>\n                      ) : record.matchStatus === 'cleared_false_positive' ? (\n                        <Badge\n                          wrap\n                          variant=\"outline\"\n                          className=\"border-success/30 bg-success/10 text-success gap-1 text-xs font-semibold\"\n                        >\n                          <CheckCircle2 className=\"size-3\" />\n                          <span>Cleared (False Positive)</span>\n                        </Badge>\n                      ) : record.matchScore >= 95 ? (\n                        <Badge wrap variant=\"destructive\" className=\"gap-1 text-xs font-semibold tabular-nums\">\n                          <ShieldX className=\"size-3\" />\n                          <span>{record.matchScore}% Critical Match</span>\n                        </Badge>\n                      ) : record.matchScore >= thresholdValue ? (\n                        <Badge\n                          wrap\n                          variant=\"outline\"\n                          className=\"border-warning/40 bg-warning/15 text-warning text-warning gap-1 text-xs font-semibold tabular-nums\"\n                        >\n                          <AlertTriangle className=\"size-3\" />\n                          <span>{record.matchScore}% Match</span>\n                        </Badge>\n                      ) : (\n                        <Badge\n                          wrap\n                          variant=\"outline\"\n                          className=\"border-success/30 bg-success/10 text-success text-success gap-1 text-xs font-semibold tabular-nums\"\n                        >\n                          <Check className=\"size-3\" />\n                          <span>{record.matchScore}% Match · Clear</span>\n                        </Badge>\n                      )}\n\n                      <div className=\"text-muted-foreground text-xs tabular-nums\">Screened {record.lastScreened}</div>\n                    </div>\n                  </TableCell>\n\n                  {/* 3. Target Sanctions List & Programs */}\n                  <TableCell className=\"py-3.5 align-top\">\n                    <div className=\"space-y-1\">\n                      <div className=\"text-foreground text-xs font-medium\">{record.sanctionList}</div>\n                      <div className=\"text-muted-foreground line-clamp-2 text-xs\">{record.program}</div>\n                      {record.pepLevel && <div className=\"text-warning text-xs font-medium\">{record.pepLevel}</div>}\n                    </div>\n                  </TableCell>\n\n                  {/* 4. Matched Attributes */}\n                  <TableCell className=\"py-3.5 align-top\">\n                    <div className=\"space-y-1 text-xs\">\n                      <div className=\"text-foreground font-medium\">{record.matchedAttributesSummary}</div>\n                      <div className=\"text-muted-foreground tabular-nums\">ID: {record.nationalIdOrLei}</div>\n                      <div className=\"text-muted-foreground max-w-[240px] truncate\">{record.address}</div>\n                    </div>\n                  </TableCell>\n\n                  {/* 5. Jurisdiction */}\n                  <TableCell className=\"py-3.5 align-top\">\n                    <div className=\"space-y-1 text-xs\">\n                      <div className=\"text-foreground flex items-center gap-1 font-medium\">\n                        <Globe className=\"text-muted-foreground size-3 shrink-0\" />\n                        <span>{record.country}</span>\n                      </div>\n                      <div className=\"text-muted-foreground\">{record.jurisdiction}</div>\n                    </div>\n                  </TableCell>\n\n                  {/* 6. Actions */}\n                  <TableCell className=\"py-3.5 text-right align-top\">\n                    <div className=\"flex flex-col items-end justify-end gap-1.5 sm:flex-row sm:items-center\">\n                      <Button\n                        variant=\"outline\"\n                        size=\"sm\"\n                        className=\"h-8 cursor-pointer gap-1.5 text-xs\"\n                        onClick={() => openInvestigation(record)}\n                      >\n                        <Eye className=\"size-3.5\" />\n                        <span>Review Match</span>\n                      </Button>\n\n                      {record.id === 'SANCT-2026-001' &&\n                        record.matchStatus !== 'cleared_false_positive' &&\n                        record.matchStatus !== 'blocked' && (\n                          <>\n                            <Button\n                              variant=\"ghost\"\n                              size=\"sm\"\n                              className=\"text-success hover:bg-success/10 hover:text-success h-8 cursor-pointer gap-1 text-xs\"\n                              onClick={() => handleClearFalsePositive(record)}\n                            >\n                              <Check className=\"size-3.5\" />\n                              <span>Clear False Positive</span>\n                            </Button>\n                            <Button\n                              variant=\"destructive\"\n                              size=\"sm\"\n                              className=\"h-8 cursor-pointer gap-1 text-xs\"\n                              onClick={() => handleBlockEntity(record)}\n                            >\n                              <Ban className=\"size-3.5\" />\n                              <span>Block &amp; Freeze</span>\n                            </Button>\n                          </>\n                        )}\n\n                      {record.id === 'SANCT-2026-004' && record.matchStatus !== 'blocked' && (\n                        <Button\n                          variant=\"destructive\"\n                          size=\"sm\"\n                          className=\"h-8 cursor-pointer gap-1 text-xs\"\n                          onClick={() => handleBlockEntity(record)}\n                        >\n                          <Ban className=\"size-3.5\" />\n                          <span>Block Entity</span>\n                        </Button>\n                      )}\n                    </div>\n                  </TableCell>\n                </TableRow>\n              ))}\n\n              {filteredRecords.length === 0 && (\n                <TableRow>\n                  <TableCell colSpan={6} className=\"text-muted-foreground py-10 text-center\">\n                    <div className=\"flex flex-col items-center justify-center gap-2\">\n                      <FileSearch className=\"text-muted-foreground/50 size-8\" />\n                      <p className=\"text-sm font-medium\">No matching screening records found</p>\n                      <p className=\"text-xs\">Adjust your search keyword, country filter, or match threshold.</p>\n                      <Button variant=\"outline\" size=\"sm\" className=\"mt-2 text-xs\" onClick={handleResetFilters}>\n                        Reset Filters\n                      </Button>\n                    </div>\n                  </TableCell>\n                </TableRow>\n              )}\n            </TableBody>\n          </Table>\n        </div>\n      </Card>\n\n      {/* Sanction Match Investigation Modal / Dialog */}\n      <SanctionsInvestigationDialog\n        open={isInvestigationOpen}\n        onOpenChange={setIsInvestigationOpen}\n        selectedRecord={selectedRecord}\n        thresholdValue={thresholdValue}\n        onClear={handleClearFalsePositive}\n        onEscalate={handleEscalate}\n        onBlock={handleBlockEntity}\n      />\n    </div>\n  )\n}\n",
      "type": "registry:block",
      "target": "~/components/blocks/ComplianceSanctionsScreener.tsx"
    },
    {
      "path": "packages/registry-react/blocks/compliance-sanctions-screener/SanctionsInvestigationDialog.tsx",
      "content": "'use client'\n\nimport * as React from 'react'\nimport { Ban, Check, Layers, ShieldAlert, ShieldCheck } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from '@/components/ui/dialog'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\nimport type { SanctionRecord } from './compliance-sanctions-types'\n\ninterface SanctionsInvestigationDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  selectedRecord: SanctionRecord | null\n  thresholdValue: number\n  onClear: (record: SanctionRecord) => void\n  onEscalate: (record: SanctionRecord) => void\n  onBlock: (record: SanctionRecord) => void\n}\n\nexport function SanctionsInvestigationDialog({\n  open,\n  onOpenChange,\n  selectedRecord,\n  thresholdValue,\n  onClear,\n  onEscalate,\n  onBlock,\n}: SanctionsInvestigationDialogProps) {\n  if (!selectedRecord) return null\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"max-h-[90vh] overflow-y-auto sm:max-w-3xl\">\n        <DialogHeader>\n          <div className=\"flex min-w-0 items-center gap-2.5\">\n            <div\n              className={cn(\n                'flex size-9 shrink-0 items-center justify-center rounded-lg',\n                selectedRecord.matchScore >= 85 ? 'bg-warning/15 text-warning' : 'bg-success/15 text-success',\n              )}\n            >\n              {selectedRecord.matchScore >= 85 ? (\n                <ShieldAlert className=\"size-5\" />\n              ) : (\n                <ShieldCheck className=\"size-5\" />\n              )}\n            </div>\n            <div>\n              <DialogTitle className=\"text-base font-bold sm:text-lg\">\n                Sanction Match Investigation &amp; Attribute Comparison\n              </DialogTitle>\n              <DialogDescription className=\"text-muted-foreground mt-0.5 text-xs\">\n                Detailed biometric, legal entity registry, and designated watchlist reconciliation audit trail.\n              </DialogDescription>\n            </div>\n          </div>\n        </DialogHeader>\n\n        <div className=\"space-y-4 py-2\">\n          {/* Entity Overview Banner */}\n          <div className=\"border-border bg-muted/40 grid grid-cols-1 gap-3 rounded-lg border p-3 text-xs sm:grid-cols-3\">\n            <div>\n              <span className=\"text-muted-foreground block\">Subject Entity Name</span>\n              <strong className=\"text-foreground text-sm font-semibold\">{selectedRecord.entityName}</strong>\n              {selectedRecord.originalScript && (\n                <div className=\"text-muted-foreground mt-0.5 text-xs\">{selectedRecord.originalScript}</div>\n              )}\n            </div>\n            <div>\n              <span className=\"text-muted-foreground block\">Fuzzy Algorithm Score</span>\n              <div className=\"mt-0.5 flex items-center gap-1.5\">\n                <span\n                  className={cn(\n                    'text-sm font-bold tabular-nums',\n                    selectedRecord.matchScore >= 85 ? 'text-warning' : 'text-success',\n                  )}\n                >\n                  {selectedRecord.matchScore}% Match\n                </span>\n                <Badge\n                  wrap\n                  variant={\n                    selectedRecord.matchScore >= 95\n                      ? 'destructive'\n                      : selectedRecord.matchScore >= 85\n                        ? 'outline'\n                        : 'success'\n                  }\n                  className=\"py-0 text-xs\"\n                >\n                  {selectedRecord.matchScore >= 95\n                    ? 'Critical Risk'\n                    : selectedRecord.matchScore >= 85\n                      ? 'High Confidence'\n                      : 'Clear / Clean'}\n                </Badge>\n              </div>\n              <span className=\"text-muted-foreground text-xs\">Threshold: {thresholdValue}%</span>\n            </div>\n            <div>\n              <span className=\"text-muted-foreground block\">Primary Watchlist Source</span>\n              <strong className=\"text-foreground mt-0.5 line-clamp-1 font-medium\">{selectedRecord.sanctionList}</strong>\n              <span className=\"text-muted-foreground text-xs\">{selectedRecord.jurisdiction}</span>\n            </div>\n          </div>\n\n          {/* Attribute Comparison Matrix */}\n          <div className=\"space-y-2\">\n            <h4 className=\"text-muted-foreground flex items-center gap-1.5 text-xs font-semibold tracking-wider uppercase\">\n              <Layers className=\"text-primary size-3.5\" />\n              <span>Attribute-by-Attribute Verification Matrix</span>\n            </h4>\n\n            <div className=\"border-border overflow-hidden rounded-lg border\">\n              <Table>\n                <TableHeader className=\"bg-muted/60\">\n                  <TableRow>\n                    <TableHead className=\"w-[140px] text-xs\">Attribute</TableHead>\n                    <TableHead className=\"min-w-[160px] text-xs\">Submitted Query Data</TableHead>\n                    <TableHead className=\"min-w-[200px] text-xs\">Designated Watchlist Record</TableHead>\n                    <TableHead className=\"w-[130px] text-right text-xs\">Match Verdict</TableHead>\n                  </TableRow>\n                </TableHeader>\n                <TableBody>\n                  {selectedRecord.attributeComparisons.map((attr, idx) => (\n                    <TableRow key={idx} className=\"hover:bg-muted/20 text-xs\">\n                      <TableCell className=\"text-foreground py-2.5 align-top font-medium\">{attr.field}</TableCell>\n                      <TableCell className=\"text-muted-foreground py-2.5 align-top\">\n                        <span className=\"text-foreground font-medium\">{attr.submittedValue}</span>\n                      </TableCell>\n                      <TableCell className=\"py-2.5 align-top\">\n                        <div className=\"space-y-0.5\">\n                          <span className=\"text-foreground font-medium\">{attr.watchlistValue}</span>\n                          {attr.note && <p className=\"text-muted-foreground/80 text-xs italic\">{attr.note}</p>}\n                        </div>\n                      </TableCell>\n                      <TableCell className=\"py-2.5 text-right align-top\">\n                        {attr.matchType === 'exact' ? (\n                          <Badge wrap variant=\"destructive\" className=\"text-xs font-semibold tabular-nums\">\n                            {attr.score}% Exact Match\n                          </Badge>\n                        ) : attr.matchType === 'fuzzy' || attr.matchType === 'partial' ? (\n                          <Badge\n                            wrap\n                            variant=\"outline\"\n                            className=\"border-warning/40 bg-warning/15 text-warning text-warning text-xs font-semibold tabular-nums\"\n                          >\n                            {attr.score}% Fuzzy Hit\n                          </Badge>\n                        ) : (\n                          <Badge\n                            wrap\n                            variant=\"outline\"\n                            className=\"border-success/30 bg-success/10 text-success text-xs font-semibold\"\n                          >\n                            Clear\n                          </Badge>\n                        )}\n                      </TableCell>\n                    </TableRow>\n                  ))}\n                </TableBody>\n              </Table>\n            </div>\n          </div>\n\n          {/* Legal Authority & Compliance Advisory Warning */}\n          {selectedRecord.matchScore >= 85 && (\n            <div className=\"border-destructive/30 bg-destructive/5 text-foreground space-y-2 rounded-lg border p-3.5 text-xs\">\n              <div className=\"text-destructive flex min-w-0 items-center gap-2 font-semibold\">\n                <ShieldAlert className=\"size-4\" />\n                <span>Mandatory Sanctions Compliance &amp; Asset Freeze Notice (31 CFR Part 587)</span>\n              </div>\n              <p className=\"text-muted-foreground\">\n                If confirmed prohibited, all property and interests in property of this entity within U.S. or EU\n                jurisdiction must be immediately blocked and reported to OFAC / designated national sanctions\n                authorities within 10 business days.\n              </p>\n              <div className=\"text-muted-foreground flex flex-wrap items-center gap-3 font-mono text-xs\">\n                <span>Program: {selectedRecord.program}</span>\n                <span>•</span>\n                <span>SAR Filing: Required within 30d</span>\n              </div>\n            </div>\n          )}\n        </div>\n\n        <DialogFooter className=\"border-border flex flex-col-reverse gap-2 border-t pt-3 sm:flex-row sm:items-center sm:justify-between\">\n          <DialogClose asChild>\n            <Button variant=\"outline\" size=\"sm\" className=\"text-xs\">\n              Dismiss / Close\n            </Button>\n          </DialogClose>\n\n          <div className=\"flex min-w-0 items-center gap-2\">\n            {selectedRecord.matchStatus !== 'cleared_false_positive' && (\n              <Button\n                variant=\"outline\"\n                size=\"sm\"\n                className=\"text-success hover:bg-success/10 hover:text-success gap-1.5 text-xs\"\n                onClick={() => {\n                  onClear(selectedRecord)\n                  onOpenChange(false)\n                }}\n              >\n                <Check className=\"size-3.5\" />\n                <span>Clear False Positive</span>\n              </Button>\n            )}\n\n            <Button\n              variant=\"secondary\"\n              size=\"sm\"\n              className=\"gap-1.5 text-xs\"\n              onClick={() => onEscalate(selectedRecord)}\n            >\n              <ShieldAlert className=\"size-3.5\" />\n              <span>Escalate to MLRO</span>\n            </Button>\n\n            {selectedRecord.matchStatus !== 'blocked' && (\n              <Button\n                variant=\"destructive\"\n                size=\"sm\"\n                className=\"gap-1.5 text-xs\"\n                onClick={() => {\n                  onBlock(selectedRecord)\n                  onOpenChange(false)\n                }}\n              >\n                <Ban className=\"size-3.5\" />\n                <span>Confirm Prohibited &amp; Block</span>\n              </Button>\n            )}\n          </div>\n        </DialogFooter>\n      </DialogContent>\n    </Dialog>\n  )\n}\n",
      "type": "registry:block",
      "target": "~/components/blocks/SanctionsInvestigationDialog.tsx"
    },
    {
      "path": "packages/registry-react/blocks/compliance-sanctions-screener/compliance-sanctions-types.ts",
      "content": "export type MatchStatus = 'potential_match' | 'prohibited_match' | 'clear' | 'cleared_false_positive' | 'blocked'\nexport type EntityType = 'individual' | 'corporate'\n\nexport interface SanctionAttributeComparison {\n  field: string\n  submittedValue: string\n  watchlistValue: string\n  matchType: 'exact' | 'fuzzy' | 'partial' | 'clean' | 'unmatched'\n  score: number\n  note?: string\n}\n\nexport interface SanctionRecord {\n  id: string\n  entityName: string\n  originalScript?: string\n  entityType: EntityType\n  matchScore: number\n  matchStatus: MatchStatus\n  sanctionList: string\n  program: string\n  matchedAttributesSummary: string\n  country: string\n  jurisdiction: string\n  dateOfBirthOrIncorporation: string\n  nationalIdOrLei: string\n  address: string\n  aliases: string[]\n  pepLevel?: string\n  remarks?: string\n  lastScreened: string\n  attributeComparisons: SanctionAttributeComparison[]\n}\n\nexport interface NotificationBanner {\n  message: string\n  type: 'success' | 'warning' | 'destructive' | 'info'\n}\n\nexport interface ComplianceSanctionsScreenerProps {\n  initialSearch?: string\n  initialCountry?: string\n  initialThreshold?: number\n  initialRecords?: SanctionRecord[]\n  className?: string\n}\n",
      "type": "registry:block",
      "target": "~/components/blocks/compliance-sanctions-types.ts"
    },
    {
      "path": "packages/registry-react/blocks/compliance-sanctions-screener/compliance-sanctions-data.ts",
      "content": "import type { SanctionRecord } from './compliance-sanctions-types'\n\nexport const defaultSanctionRecords: SanctionRecord[] = [\n  {\n    id: 'SANCT-2026-001',\n    entityName: 'Viktor Ivanov',\n    originalScript: 'Иванов Виктор Петрович',\n    entityType: 'individual',\n    matchScore: 94,\n    matchStatus: 'potential_match',\n    sanctionList: 'OFAC SDN List · Sectoral Sanctions',\n    program: 'UKRAINE-EO13662 · Executive Order 14024',\n    matchedAttributesSummary: 'DOB 1974, Russia, Passport 77-04-889102',\n    country: 'Russia',\n    jurisdiction: 'US (OFAC) / EU / UK',\n    dateOfBirthOrIncorporation: '1974-05-12',\n    nationalIdOrLei: '77-04-889102 (RUS)',\n    address: 'Presnenskaya Naberezhnaya 12, Moscow, Russia',\n    aliases: ['Victor Ivanov', 'V. P. Ivanov', 'Viktor Petrovich Ivanov'],\n    pepLevel: 'PEP Tier 2 · Former Deputy Minister of Industry',\n    remarks: 'Designated under Executive Order 14024 for operating in the financial and defense sector.',\n    lastScreened: '10m ago',\n    attributeComparisons: [\n      {\n        field: 'Full Legal Name',\n        submittedValue: 'Viktor Ivanov',\n        watchlistValue: 'IVANOV, Viktor Petrovich (Иванов Виктор Петрович)',\n        matchType: 'fuzzy',\n        score: 96,\n        note: 'Transliteration and patronymic expansion matched',\n      },\n      {\n        field: 'Known Aliases & AKAs',\n        submittedValue: 'Victor Ivanov, V. P. Ivanov',\n        watchlistValue: 'Viktor Ivanov, Victor Petrovich Ivanov, Victor Ivanov-Karpov',\n        matchType: 'partial',\n        score: 94,\n        note: 'Direct alias hit in OFAC Specially Designated database',\n      },\n      {\n        field: 'Date of Birth / Inception',\n        submittedValue: '1974-05-12',\n        watchlistValue: '1974-05-12 (Moscow, USSR / Russian Federation)',\n        matchType: 'exact',\n        score: 100,\n        note: '100% exact cryptographic DOB date match',\n      },\n      {\n        field: 'Passport / National ID',\n        submittedValue: '77-04-889102 (Russian Federation)',\n        watchlistValue: '77-04-889102 / Int. Passport 51-09-112344',\n        matchType: 'exact',\n        score: 100,\n        note: 'Official primary national identity document match',\n      },\n      {\n        field: 'Registered Address',\n        submittedValue: 'Presnenskaya Naberezhnaya 12, Moscow',\n        watchlistValue: 'Presnenskaya Embankment 12, Fl. 4, Moscow 123112, Russia',\n        matchType: 'fuzzy',\n        score: 92,\n        note: 'Street and district normalization matched',\n      },\n      {\n        field: 'PEP Status & Legal Program',\n        submittedValue: 'Executive Director (Disclosed Non-PEP)',\n        watchlistValue: 'OFAC SDN [UKRAINE-EO13662] · PEP Tier 2 · Mandatory Asset Freeze',\n        matchType: 'exact',\n        score: 100,\n        note: 'Undeclared PEP Tier 2 designation active on UK HMT / EU Sanctions',\n      },\n    ],\n  },\n  {\n    id: 'SANCT-2026-002',\n    entityName: 'Sarah Connor',\n    originalScript: 'Sarah Connor',\n    entityType: 'individual',\n    matchScore: 12,\n    matchStatus: 'clear',\n    sanctionList: 'No Sanctions Matches (All Databases Checked)',\n    program: 'None · Standard Retail Profile',\n    matchedAttributesSummary: 'No sanction matches · Low risk profile',\n    country: 'United States',\n    jurisdiction: 'Global / FATF Compliant',\n    dateOfBirthOrIncorporation: '1985-02-28',\n    nationalIdOrLei: 'SSN ***-**-4910',\n    address: '742 Evergreen Terrace, Los Angeles, CA 90001, USA',\n    aliases: ['Sarah J. Connor'],\n    pepLevel: 'Non-PEP',\n    remarks: 'Clear of all OFAC, EU, UN, and PEP lists. Auto-approved by automated compliance pipeline.',\n    lastScreened: '18m ago',\n    attributeComparisons: [\n      {\n        field: 'Full Legal Name',\n        submittedValue: 'Sarah Connor',\n        watchlistValue: 'CONNOR, Sara Helena (Low Soundex Similarity)',\n        matchType: 'fuzzy',\n        score: 18,\n        note: 'Distant phonetical overlap below decision threshold',\n      },\n      {\n        field: 'Known Aliases & AKAs',\n        submittedValue: 'Sarah J. Connor',\n        watchlistValue: 'No matching designated aliases found',\n        matchType: 'clean',\n        score: 0,\n        note: 'Zero hits across all official alias directories',\n      },\n      {\n        field: 'Date of Birth / Inception',\n        submittedValue: '1985-02-28',\n        watchlistValue: '1962-11-04 (Bogota, Colombia)',\n        matchType: 'unmatched',\n        score: 0,\n        note: 'DOB discrepancy (>22 years divergence)',\n      },\n      {\n        field: 'Passport / National ID',\n        submittedValue: 'SSN ***-**-4910 (USA)',\n        watchlistValue: 'COL-9902148 (Republic of Colombia)',\n        matchType: 'unmatched',\n        score: 0,\n        note: 'Different country of issuance and identifier structure',\n      },\n      {\n        field: 'Registered Address',\n        submittedValue: '742 Evergreen Terrace, Los Angeles, CA, USA',\n        watchlistValue: 'Calle 72 #10-34, Bogota, Colombia',\n        matchType: 'unmatched',\n        score: 0,\n        note: 'Zero geographic intersection',\n      },\n      {\n        field: 'PEP Status & Legal Program',\n        submittedValue: 'Individual Retail Client',\n        watchlistValue: 'Clean / Unrestricted Jurisdiction',\n        matchType: 'clean',\n        score: 0,\n        note: 'No adverse media or PEP exposure',\n      },\n    ],\n  },\n  {\n    id: 'SANCT-2026-003',\n    entityName: 'Elena Rostova',\n    originalScript: 'Elena Rostova-Dimitriou',\n    entityType: 'individual',\n    matchScore: 0,\n    matchStatus: 'clear',\n    sanctionList: 'No Sanctions Matches (All Databases Checked)',\n    program: 'None · Private Banking Profile',\n    matchedAttributesSummary: 'No sanction matches · High assurance clean record',\n    country: 'Cyprus',\n    jurisdiction: 'EU / Global Compliant',\n    dateOfBirthOrIncorporation: '1991-09-17',\n    nationalIdOrLei: 'CY-ID 9920194',\n    address: 'Archbishop Makarios III Ave 45, Limassol 3025, Cyprus',\n    aliases: ['Elena Rostova-Dimitriou'],\n    pepLevel: 'Non-PEP',\n    remarks: 'Verified clean record across UN Consolidated, OFAC SDN, UK HMT, and Interpol Red Notices.',\n    lastScreened: '32m ago',\n    attributeComparisons: [\n      {\n        field: 'Full Legal Name',\n        submittedValue: 'Elena Rostova',\n        watchlistValue: 'No target record matches identified in any watchlist',\n        matchType: 'clean',\n        score: 0,\n        note: 'Zero hits across 42 global sanction jurisdictions',\n      },\n      {\n        field: 'Known Aliases & AKAs',\n        submittedValue: 'Elena Rostova-Dimitriou',\n        watchlistValue: 'No target record matches',\n        matchType: 'clean',\n        score: 0,\n        note: 'Zero alias records found',\n      },\n      {\n        field: 'Date of Birth / Inception',\n        submittedValue: '1991-09-17',\n        watchlistValue: 'No target record matches',\n        matchType: 'clean',\n        score: 0,\n        note: 'Clean verification result',\n      },\n      {\n        field: 'Passport / National ID',\n        submittedValue: 'CY-ID 9920194 (Cyprus / EU)',\n        watchlistValue: 'No target record matches',\n        matchType: 'clean',\n        score: 0,\n        note: 'Clean verification result',\n      },\n      {\n        field: 'Registered Address',\n        submittedValue: 'Archbishop Makarios III Ave 45, Limassol, Cyprus',\n        watchlistValue: 'No target record matches',\n        matchType: 'clean',\n        score: 0,\n        note: 'Verified standard EU residential registry',\n      },\n      {\n        field: 'PEP Status & Legal Program',\n        submittedValue: 'Private Banking Client',\n        watchlistValue: 'Verified Non-PEP · Zero Adverse Media Flag',\n        matchType: 'clean',\n        score: 0,\n        note: 'Clean compliance status',\n      },\n    ],\n  },\n  {\n    id: 'SANCT-2026-004',\n    entityName: 'Sberbank Trade Corp',\n    originalScript: 'ПАО Сбербанк / Sberbank Trade Corp',\n    entityType: 'corporate',\n    matchScore: 98,\n    matchStatus: 'prohibited_match',\n    sanctionList: 'EU Sanctions Article 5',\n    program: 'EU Reg 833/2014 Annex XIII · UK Sanctions S.I. 2022/194 · OFAC SSI Directives',\n    matchedAttributesSummary: 'LEI RU-9912048, Sector: Financials, Subsidiary of Sberbank PJSC',\n    country: 'Russia',\n    jurisdiction: 'EU / UK / OFAC Sectoral',\n    dateOfBirthOrIncorporation: '2008-11-14',\n    nationalIdOrLei: 'LEI: 253400X89892182 / INN: 7707083893',\n    address: 'Vavilova St 19, Moscow, 117997, Russia',\n    aliases: ['Sber Trade LLC', 'Sberbank Trading House', 'PJSC Sberbank Sub-Entity'],\n    pepLevel: 'State-Owned Enterprise (SOE) · Comprehensive Asset Freeze',\n    remarks:\n      'Subject to broad asset freeze and prohibitions on financial dealings, capital markets, and correspondent accounts.',\n    lastScreened: '1h ago',\n    attributeComparisons: [\n      {\n        field: 'Legal Entity Name',\n        submittedValue: 'Sberbank Trade Corp',\n        watchlistValue: 'PJSC SBERBANK / Sberbank Trade Corp (ПАО Сбербанк)',\n        matchType: 'exact',\n        score: 99,\n        note: 'Substantial majority-owned direct subsidiary matching designated parent',\n      },\n      {\n        field: 'Known Aliases & AKAs',\n        submittedValue: 'Sber Trade LLC, Sberbank Trading House',\n        watchlistValue: 'Sberbank Trading House / Sber Trade / Sberbank Capital LLC',\n        matchType: 'exact',\n        score: 100,\n        note: '100% match on registered trading names in EU Annex XIII',\n      },\n      {\n        field: 'Date of Incorporation',\n        submittedValue: '2008-11-14',\n        watchlistValue: '2008-11-14 (Moscow, Russian Federation)',\n        matchType: 'exact',\n        score: 100,\n        note: 'Registration date matching corporate charter record',\n      },\n      {\n        field: 'LEI / Corporate Tax ID',\n        submittedValue: 'LEI 253400X89892182 / INN 7707083893',\n        watchlistValue: 'LEI 253400X89892182 / INN 7707083893 / OGRN 1027700132195',\n        matchType: 'exact',\n        score: 100,\n        note: 'Unique global Legal Entity Identifier (LEI) direct match',\n      },\n      {\n        field: 'Registered Head Office',\n        submittedValue: 'Vavilova St 19, Moscow, 117997, Russia',\n        watchlistValue: '19 Vavilova St, Moscow 117997, Russian Federation',\n        matchType: 'exact',\n        score: 98,\n        note: 'Exact match with sanctioned financial headquarters address',\n      },\n      {\n        field: 'Sanction Program & Enforcement',\n        submittedValue: 'Corporate Investment Account',\n        watchlistValue: 'EU Article 5 / UK HMT Sanctions / OFAC 50% Rule Asset Freeze',\n        matchType: 'exact',\n        score: 100,\n        note: 'Mandatory transaction blocking and immediate regulatory freeze required',\n      },\n    ],\n  },\n]\n",
      "type": "registry:block",
      "target": "~/components/blocks/compliance-sanctions-data.ts"
    }
  ],
  "dependencies": [
    "lucide-react"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/react/badge.json",
    "https://uipkge.dev/r/react/button.json",
    "https://uipkge.dev/r/react/card.json",
    "https://uipkge.dev/r/react/dialog.json",
    "https://uipkge.dev/r/react/input.json",
    "https://uipkge.dev/r/react/select.json",
    "https://uipkge.dev/r/react/slider.json",
    "https://uipkge.dev/r/react/table.json"
  ],
  "description": "AML/KYC OFAC, Politically Exposed Persons (PEP), and global sanctions list screening workbench with fuzzy match threshold tuning, real-time entity inspection modal, and prohibited match enforcement.",
  "categories": [
    "legal",
    "dashboard",
    "finance",
    "security"
  ]
}