{ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "AI Extraction Checkup response shape — synthetic-invoice-000147", "type": "object", "additionalProperties": false, "required": [ "invoice_id", "invoice_date", "currency", "seller", "buyer", "line_items", "subtotal", "discount_rate", "discount_amount", "taxable_amount", "tax_rate", "tax_amount", "shipping", "total" ], "properties": { "invoice_id": { "type": [ "string", "null" ], "description": "A string when known; null if unreadable. See the versioned comparison contract." }, "invoice_date": { "type": [ "string", "null" ], "description": "A real calendar date in YYYY-MM-DD; null if unreadable." }, "currency": { "type": [ "string", "null" ], "description": "A string when known; null if unreadable. See the versioned comparison contract." }, "seller": { "type": [ "string", "null" ], "description": "A string when known; null if unreadable. See the versioned comparison contract." }, "buyer": { "type": [ "string", "null" ], "description": "A string when known; null if unreadable. See the versioned comparison contract." }, "subtotal": { "type": [ "string", "null" ], "description": "A string when known; null if unreadable. See the versioned comparison contract." }, "discount_rate": { "type": [ "string", "null" ], "description": "Unsigned decimal fraction, such as 0.05 for 5%, expressed as a JSON string; null if unreadable." }, "discount_amount": { "type": [ "string", "null" ], "description": "Positive magnitude to subtract from subtotal, despite the negative adjustment printed on the invoice. Use two decimal places; null if unreadable." }, "taxable_amount": { "type": [ "string", "null" ], "description": "A string when known; null if unreadable. See the versioned comparison contract." }, "tax_rate": { "type": [ "string", "null" ], "description": "Unsigned decimal fraction, such as 0.05 for 5%, expressed as a JSON string; null if unreadable." }, "tax_amount": { "type": [ "string", "null" ], "description": "A string when known; null if unreadable. See the versioned comparison contract." }, "shipping": { "type": [ "string", "null" ], "description": "A string when known; null if unreadable. See the versioned comparison contract." }, "total": { "type": [ "string", "null" ], "description": "A string when known; null if unreadable. See the versioned comparison contract." }, "line_items": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "line_id", "item_id", "description", "quantity", "unit_price", "line_total" ], "properties": { "line_id": { "type": [ "string", "null" ], "description": "Preserve the printed line ID and leading zeroes. A missing/null or duplicated ID cannot be aligned by guessing." }, "item_id": { "type": [ "string", "null" ], "description": "A string when known; null if unreadable. See the versioned comparison contract." }, "description": { "type": [ "string", "null" ], "description": "A string when known; null if unreadable. See the versioned comparison contract." }, "quantity": { "type": [ "string", "null" ], "description": "A string when known; null if unreadable. See the versioned comparison contract." }, "unit_price": { "type": [ "string", "null" ], "description": "A string when known; null if unreadable. See the versioned comparison contract." }, "line_total": { "type": [ "string", "null" ], "description": "A string when known; null if unreadable. See the versioned comparison contract." } } }, "maxItems": 20, "description": "Rows are matched by unique printed line_id, not by array position. Null row fields disclose uncertainty. The fixed answer has four rows." } }, "description": "Fixed exercise response shape. Null discloses uncertainty and does not pass a field check. Value, decimal/date format and row-identity checks are performed by the comparator." }