{
 "use_case": "tariff-classification",
 "title": "Tariff memo: a wall-mounted heater, and a bag described too thinly",
 "about": "Two synthetic product descriptions. The wall-mounted, hard-wired fan heater must be proposed under heading 8516 (subheading 8516.29) with at least one quote verified word for word in a retrieved CBP ruling; the bag described only as a bag with a strap must go to a broker. The memo record must verify. Run it against your own ruling set: the ruling numbers you see depend on the set fetched.",
 "licence": "Synthetic descriptions written for decosa-api (AGPL-3.0-or-later). The rulings searched are CBP CROSS rulings and the HTS text, US Government works in the public domain.",
 "inputs": [
  {
   "file": "inputs/wall-heater.json",
   "what": "A wall-mounted electric fan heater, not portable."
  },
  {
   "file": "inputs/vague-bag.json",
   "what": "A bag with no material or use given."
  }
 ],
 "steps": [
  {
   "id": "heater",
   "method": "POST",
   "path": "/tariff/classify",
   "timeout": 300,
   "body": {
    "$file": "inputs/wall-heater.json"
   }
  },
  {
   "id": "record",
   "method": "POST",
   "path": "/record/verify",
   "auth": false,
   "body": {
    "record": {
     "$ref": "heater.record"
    }
   }
  },
  {
   "id": "vague",
   "method": "POST",
   "path": "/tariff/classify",
   "timeout": 300,
   "body": {
    "$file": "inputs/vague-bag.json"
   }
  }
 ],
 "checks": [
  {
   "says": "the heater is proposed",
   "path": "heater.status",
   "equals": "proposed"
  },
  {
   "says": "under heading 8516",
   "path": "heater.proposal.heading",
   "equals": "8516"
  },
  {
   "says": "subheading 8516.29",
   "path": "heater.proposal.subheading",
   "equals": "851629"
  },
  {
   "says": "at least one ruling quote verified word for word",
   "path": "heater.proposal.ruling_citations[ok=true]",
   "count_min": 1
  },
  {
   "says": "a retrieved ruling was classified by CBP in 8516",
   "path": "heater.rulings[heading=8516]",
   "count_min": 1
  },
  {
   "says": "the ruling search has a signed search receipt",
   "path": "heater.search_receipts[0].sig",
   "truthy": true
  },
  {
   "says": "the memo record verifies",
   "path": "record.ok",
   "equals": true
  },
  {
   "says": "the thin description goes to a broker",
   "path": "vague.status",
   "equals": "needs_broker"
  },
  {
   "says": "every model call has a signed receipt",
   "receipts": "signed",
   "min": 2
  }
 ]
}