{
  "type": "object",
  "additionalProperties": false,
  "required": ["invoice_type", "document_subtype", "observed_item_line_count", "header", "items", "adjustments", "tax_summary", "totals", "currency", "reference_candidates"],
  "properties": {
    "invoice_type": {"$ref": "#/$defs/text_field"},
    "document_subtype": {"$ref": "#/$defs/text_field"},
    "observed_item_line_count": {"type": ["integer", "null"], "minimum": 0},
    "header": {
      "type": "object", "additionalProperties": false,
      "required": ["supplier", "invoice", "store", "transaction_time", "payment_method", "payment_reference"],
      "properties": {
        "supplier": {
          "type": "object", "additionalProperties": false,
          "required": ["name", "legal_entity", "abn"],
          "properties": {"name": {"$ref": "#/$defs/text_field"}, "legal_entity": {"$ref": "#/$defs/text_field"}, "abn": {"$ref": "#/$defs/text_field"}}
        },
        "invoice": {
          "type": "object", "additionalProperties": false,
          "required": ["number", "date"],
          "properties": {
            "number": {"$ref": "#/$defs/text_field"},
            "date": {
              "type": "object", "additionalProperties": false,
              "required": ["issue_date", "due_date"],
              "properties": {"issue_date": {"$ref": "#/$defs/text_field"}, "due_date": {"$ref": "#/$defs/text_field"}}
            }
          }
        },
        "store": {"$ref": "#/$defs/text_field"},
        "transaction_time": {"$ref": "#/$defs/text_field"},
        "payment_method": {"$ref": "#/$defs/text_field"},
        "payment_reference": {"$ref": "#/$defs/text_field"}
      }
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object", "additionalProperties": false,
        "required": ["description", "qty", "transaction_unit", "package_size", "unit_price", "unit_price_basis", "gst_line", "line_total", "tax_code", "source_text", "source_line", "bounding_box"],
        "properties": {
          "description": {"$ref": "#/$defs/text_field"},
          "qty": {"$ref": "#/$defs/number_field"},
          "transaction_unit": {"$ref": "#/$defs/text_field"},
          "package_size": {"$ref": "#/$defs/package_size"},
          "unit_price": {"$ref": "#/$defs/number_field"},
          "unit_price_basis": {"$ref": "#/$defs/text_field"},
          "gst_line": {"$ref": "#/$defs/number_field"},
          "line_total": {"$ref": "#/$defs/number_field"},
          "tax_code": {"$ref": "#/$defs/text_field"},
          "source_text": {"type": ["string", "null"]},
          "source_line": {"type": ["string", "integer", "null"]},
          "bounding_box": {"$ref": "#/$defs/bounding_box"}
        }
      }
    },
    "adjustments": {
      "type": "array", "items": {"type": "object", "additionalProperties": false,
        "required": ["type", "description", "amount", "source_text", "confidence"],
        "properties": {
          "type": {"enum": ["payment_surcharge", "discount", "rounding", "other"]},
          "description": {"type": ["string", "null"]},
          "amount": {"type": "number"},
          "source_text": {"type": ["string", "null"]},
          "confidence": {"type": "number", "minimum": 0, "maximum": 1}
        }}
    },
    "tax_summary": {
      "type": "object", "additionalProperties": false,
      "required": ["tax_inclusive", "tax_total", "lines"],
      "properties": {
        "tax_inclusive": {"type": ["boolean", "null"]},
        "tax_total": {"$ref": "#/$defs/number_field"},
        "lines": {"type": "array", "items": {"type": "object", "additionalProperties": false,
          "required": ["tax_code", "rate", "net_amount", "tax_amount"],
          "properties": {
            "tax_code": {"type": ["string", "null"]}, "rate": {"type": ["number", "null"]},
            "net_amount": {"type": ["number", "null"]}, "tax_amount": {"type": ["number", "null"]}
          }}}
      }
    },
    "totals": {
      "type": "object", "additionalProperties": false,
      "required": ["subtotal", "gst", "grand_total"],
      "properties": {
        "subtotal": {"$ref": "#/$defs/number_field"},
        "gst": {"$ref": "#/$defs/number_field"},
        "grand_total": {"$ref": "#/$defs/number_field"}
      }
    },
    "currency": {"$ref": "#/$defs/text_field"},
    "reference_candidates": {
      "type": "array",
      "items": {
        "type": "object", "additionalProperties": false,
        "required": ["label", "value", "confidence"],
        "properties": {
          "label": {"type": "string"}, "value": {"type": "string"},
          "confidence": {"type": "number", "minimum": 0, "maximum": 1}
        }
      }
    }
  },
  "$defs": {
    "text_field": {
      "type": "object", "additionalProperties": false,
      "required": ["verbatim", "computed", "confidence"],
      "properties": {
        "verbatim": {"type": ["string", "null"]},
        "computed": {"type": ["string", "null"]},
        "confidence": {"type": "number", "minimum": 0, "maximum": 1}
      }
    },
    "number_field": {
      "type": "object", "additionalProperties": false,
      "required": ["verbatim", "computed", "confidence"],
      "properties": {
        "verbatim": {"type": ["string", "number", "null"]},
        "computed": {"type": ["number", "null"]},
        "confidence": {"type": "number", "minimum": 0, "maximum": 1}
      }
    },
    "package_size": {
      "type": "object", "additionalProperties": false,
      "required": ["value", "unit"],
      "properties": {"value": {"type": ["number", "null"]}, "unit": {"type": ["string", "null"]}}
    },
    "bounding_box": {
      "type": ["array", "null"], "minItems": 4, "maxItems": 4,
      "items": {"type": "number"}
    }
  }
}
