900 != 2 × 480 = 960
→ needs_review
The changed line also makes the printed subtotal disagree with the extracted line-item sum.Invoices, purchase orders, and bank statements become structured records only after deterministic math and reconciliation checks.
Public · synthetic demoA model can copy a printed total into JSON even when the document arithmetic is wrong. Posting that output without a gate turns a parsing success into a payment or reconciliation error.
{
"po_number": "PO-3002",
"vendor": "Fictional Office Supply Co.",
"line_items": [
{"sku":"DESK-02", "qty":2, "unit_price":480, "line_total":900}
],
"subtotal": 1860, "tax": 148.8, "shipping": 75,
"grand_total": 2083.8
}900 != 2 × 480 = 960
→ needs_review
The changed line also makes the printed subtotal disagree with the extracted line-item sum.opening + credits − debits = 2975printed closing = 2875
→ needs_review
The running transaction balances remain visible, so a reviewer can locate the discrepancy.| Record | Decision | Why |
|---|---|---|
| INV-DEMO | auto_accept | All deterministic gates passed |
| PO-3002 | needs_review | line_math + subtotal_mismatch |
| Bank sample | needs_review | duplicate/date/running-balance rules fired |
Bundled HITL batch: 33.3% auto-accept, 66.7% review, 0% reject across three synthetic records.
Line totals, subtotals, grand totals, date ordering, running balances, duplicates, and required fields are checked in deterministic Python. Extraction confidence is calibrated with the validation signal; every flag carries a reason and timestamped audit entry.