{
 "use_case": "sanctions-disposition-record",
 "title": "Sanctions alert disposition: same name and nationality as an SDN entry, a different date of birth",
 "about": "A fictional customer, Ali Zeaiter (born 2 Nov 1977, Lebanese), hits the real OFAC SDN entry ofac-sdn:17037 (Ali ZEAITER, born 24 Feb 1977, Lebanon). The code compares every field and proposes a false positive by rule R-DISQ: same year, different date of birth, and nothing else that identifies the person agrees. The model gives an independent reading and a rationale whose sentences are checked against the fields they cite. The analyst clears the alert; the decision is sealed in a signed, hash-chained record that verifies, and an edited record does not. A decision against the proposal without a reason is refused. Needs the list snapshot of 26 Sep 2026 (or any snapshot that still has ofac-sdn:17037).",
 "licence": "The customer is fictional (made up for this bundle). The list entry is public OFAC SDN data (US government work, public domain). Part of decosa-api, AGPL-3.0-or-later.",
 "inputs": [
  {
   "file": "inputs/customer.json",
   "what": "The screened party: a fictional customer record."
  },
  {
   "file": "inputs/alert.json",
   "what": "The alert's id, source and screening system (fictional)."
  }
 ],
 "steps": [
  {
   "id": "review",
   "method": "POST",
   "path": "/sanctions/review",
   "body": {
    "customer": {
     "$file": "inputs/customer.json"
    },
    "entry_uid": "ofac-sdn:17037",
    "alert": {
     "$file": "inputs/alert.json"
    },
    "synthetic": true
   }
  },
  {
   "id": "override",
   "method": "POST",
   "path": "/sanctions/decide",
   "expect_status": 422,
   "body": {
    "review": {
     "$ref": "review.review"
    },
    "decision": "true_match",
    "analyst": {
     "id": "rehearsal-analyst"
    }
   }
  },
  {
   "id": "decide",
   "method": "POST",
   "path": "/sanctions/decide",
   "body": {
    "review": {
     "$ref": "review.review"
    },
    "decision": "false_positive",
    "analyst": {
     "id": "rehearsal-analyst"
    },
    "note": "Different date of birth (2 Nov 1977 vs 24 Feb 1977) on the customer's passport copy; cleared."
   }
  },
  {
   "id": "verify",
   "method": "POST",
   "path": "/sanctions/verify",
   "auth": false,
   "body": {
    "record": {
     "$ref": "decide.record"
    }
   }
  },
  {
   "id": "tampered",
   "method": "POST",
   "path": "/sanctions/verify",
   "auth": false,
   "body": {
    "record": {
     "$ref": "decide.record"
    }
   },
   "tamper": {
    "at": "record.statement.decision",
    "set": "true_match"
   }
  },
  {
   "id": "sample",
   "method": "POST",
   "path": "/sanctions/audit-sample",
   "body": {
    "records": [
     {
      "$ref": "decide.record"
     }
    ],
    "size": 5
   }
  }
 ],
 "checks": [
  {
   "says": "the code proposes a false positive",
   "path": "review.analysis.proposal.decision",
   "equals": "false_positive"
  },
  {
   "says": "by the disqualifier rule",
   "path": "review.analysis.proposal.rule",
   "equals": "R-DISQ"
  },
  {
   "says": "the date of birth is the disqualifier",
   "path": "review.analysis.fields[id=F.dob][0].status",
   "equals": "conflict"
  },
  {
   "says": "the nationality agrees",
   "path": "review.analysis.fields[id=F.nationality][0].status",
   "equals": "match"
  },
  {
   "says": "at least one rationale sentence is grounded in the fields it cites",
   "path": "review.sentences[status=grounded]",
   "count_min": 1
  },
  {
   "says": "the review is signed",
   "path": "review.review.sig",
   "truthy": true
  },
  {
   "says": "deciding against the proposal without a reason is refused",
   "path": "override.error",
   "contains": "override_reason"
  },
  {
   "says": "the disposition record verifies",
   "path": "verify.ok",
   "equals": true
  },
  {
   "says": "the record keeps the analyst's decision",
   "path": "verify.disposition.decision",
   "equals": "false_positive"
  },
  {
   "says": "the record is kept for 10 years",
   "path": "decide.retain_until",
   "exists": true
  },
  {
   "says": "a record with its decision changed no longer verifies",
   "path": "tampered.ok",
   "equals": false
  },
  {
   "says": "the audit sample takes the record and is signed",
   "path": "sample.manifest.size",
   "equals": 1
  },
  {
   "says": "every model call has a signed receipt",
   "receipts": "signed",
   "min": 2
  }
 ]
}