{
 "use_case": "fi-disclosure-record",
 "title": "F&I disclosure record: a used-car F&I talk against its deal jacket",
 "about": "Eight diarized lines of a role-played used-car F&I conversation (two add-ons) and its deal jacket. The finance manager wrongly says there is no cooling-off period, and one add-on on the jacket is never discussed. Both must be flagged, and the signed record must verify with a two-year retention date.",
 "licence": "Synthetic role-play written from California SB 766: Larkspur Point Motors and every person are fictional. Audio spoken by Decosa house voices (Kokoro-82M stock voicepacks, Apache-2.0), each allowed by the consent ledger for project decosa-fi-demo; the segments are the diarizer output with its errors kept. Part of decosa-api, AGPL-3.0-or-later.",
 "inputs": [
  {
   "file": "inputs/segments.json",
   "what": "The diarized conversation: a list of {start, end, speaker, text} (or send plain text as transcript)."
  },
  {
   "file": "inputs/jacket.json",
   "what": "The deal jacket: vehicle, financing, add-ons and the written documents."
  },
  {
   "file": "inputs/consent.json",
   "what": "How recording consent was obtained."
  },
  {
   "file": "inputs/speakers.json",
   "what": "Speaker labels to names."
  }
 ],
 "links": [
  {
   "url": "/samples/fi-tb4-no-consent-no-cooling-off.m4a",
   "what": "The audio this transcript came from (optional)."
  }
 ],
 "steps": [
  {
   "id": "fi",
   "method": "POST",
   "path": "/fi/check",
   "body": {
    "segments": {
     "$file": "inputs/segments.json"
    },
    "jacket": {
     "$file": "inputs/jacket.json"
    },
    "consent": {
     "$file": "inputs/consent.json"
    },
    "speakers": {
     "$file": "inputs/speakers.json"
    },
    "title": "Rehearsal: LPM-1204 (fictional)"
   }
  },
  {
   "id": "verify",
   "method": "POST",
   "path": "/record/verify",
   "auth": false,
   "body": {
    "record": {
     "$ref": "fi.record"
    }
   }
  },
  {
   "id": "tampered",
   "method": "POST",
   "path": "/record/verify",
   "auth": false,
   "body": {
    "record": {
     "$ref": "fi.record"
    }
   },
   "tamper": {
    "at": "record.statement.flags",
    "set": 0
   }
  }
 ],
 "checks": [
  {
   "says": "at least five conversation checks ran",
   "path": "fi.checklist[basis=conversation]",
   "count_min": 5
  },
  {
   "says": "every conversation check got a typed answer",
   "path": "fi.checklist[basis=conversation][answer=null]",
   "count": 0
  },
  {
   "says": "the planted cooling-off denial is flagged",
   "path": "fi.checklist[id=cancel_right_misstated][0].status",
   "equals": "flag"
  },
  {
   "says": "the cooling-off flag points at a time in the recording",
   "path": "fi.checklist[id=cancel_right_misstated][0].at",
   "exists": true
  },
  {
   "says": "the add-on never discussed (paint and fabric protection) is flagged",
   "path": "fi.mismatches[kind=never_discussed,addon=a2]",
   "count_min": 1
  },
  {
   "says": "the signed record verifies",
   "path": "verify.ok",
   "equals": true
  },
  {
   "says": "the record carries a retention date",
   "path": "fi.record.statement.retain_until",
   "exists": true
  },
  {
   "says": "a record with its flag count changed no longer verifies",
   "path": "tampered.ok",
   "equals": false
  },
  {
   "says": "every model call has a signed receipt",
   "receipts": "signed",
   "min": 2
  }
 ]
}
