| Always present |
| valid | boolean | Primary flag to branch on. true when the file passes all CII, Schematron, and PDF/A-3b checks. |
| detail | string | Human-readable summary, e.g. "Your invoice is ZUGFeRD compliant…" or "Validation failed with 2 error(s)". |
| data.conformanceLevel | string | Detected EN 16931 profile, e.g. EN16931, EXTENDED, BASIC. |
| data.profile | string? | Conformance profile whose rules were applied: minimum, basic-wl, basic, en16931, extended or xrechnung. Read from the specification identifier in the embedded XML, never assumed from the filename. Null when the identifier has no dedicated rule set. |
| data.customizationId | string? | The specification identifier the document declared, verbatim, e.g. urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:en16931. Null when the embedded XML carries no identifier. |
| data.specificationIdentifier | string | Full specification identifier URI from the embedded XML, e.g. urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:en16931. |
| data.schemaValid | boolean | CII XSD schema check passed for the detected version. |
| data.schematronValid | boolean | EN 16931 Schematron business rules check passed. |
| Findings (errors and warnings) |
| errors | object[] | Flat array of finding objects, one per blocking rule violation. Empty array on a valid invoice. |
| warnings | object[] | Flat array of finding objects for non-blocking advisories. May contain entries on a valid invoice. |
| [].rule | string | Rule identifier, e.g. BR-AE-05, BR-CO-14. |
| [].layer | string | Validation layer the finding came from: schema (CII XSD), en16931 (EN 16931 base rules), or the per-profile Schematron rule set. |
| [].line | int? | Invoice line item number where the violation occurred, or null for document-level findings. |
| [].message | string | Human-readable, plain-language description suitable for end users and no-code notification workflows. |
| [].btCodes | string[] | EN 16931 Business Term codes the rule references, e.g. ["BT-110"]. |
| [].fields | string[] | Dotted JSON paths the finding maps to, e.g. ["totals.taxTotalAmount"]. Use them to highlight the exact form input that failed. |
| [].raw | string | Verbatim technical validator output, including the rule code and the XPath context, for programmatic handling and logging. |
| Compliance report (always present) |
| report | object[] | One row per EN 16931 Business Term found on the invoice, with its value and a pass/fail flag. null if the report could not be built. |
| report[].code | string | Business Term code, e.g. BT-1. |
| report[].name | string | Human-readable term name, e.g. Invoice number. |
| report[].section | string | Grouping for display: header, seller, buyer, lines, payment, totals, or tax. |
| report[].path | string | Dotted JSON path to the field, e.g. lines[0].priceDetails.netPrice. |
| report[].value | string? | Current value of the term, or null when absent. |
| report[].isValid | boolean | false when a validation error references this term, otherwise true. |
| report[].errors | string[] | All error messages referencing this Business Term. Empty array when the term has no errors. |
| report[].warnings | string[] | All warning messages referencing this Business Term. Empty array when the term has no warnings. |