{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/erechio/json-schema/erechio-ergebnis-schema.json",
  "title": "Ergebnis",
  "x-generated": "2026-11-11",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/erechio-openapi.json#/components/schemas/Ergebnis",
  "type": "object",
  "required": [
    "vollstaendig_validiert",
    "regelpruefung_bestanden",
    "schemapruefung",
    "valid",
    "syntax",
    "spezifikation",
    "geprueft",
    "fehler",
    "warnungen",
    "meldungen",
    "kontingent",
    "regeln",
    "regelstand",
    "ohne",
    "dauer_ms"
  ],
  "properties": {
    "vollstaendig_validiert": {
      "type": "boolean",
      "description": "`true` nur, wenn die Rechnung schemagültig ist (XSD) und die Regelprüfung bestanden hat – entspricht der Annahme durch das KoSIT-Prüftool. Sagt nichts über die inhaltliche oder steuerliche Richtigkeit."
    },
    "regelpruefung_bestanden": {
      "type": "boolean",
      "description": "`true`, wenn die Schematron-Regeln (EN 16931, bei XRechnung BR-DE) keinen Fehler melden und die Spezifikationskennung (BT-24) zu einem KoSIT-Szenario passt. Allein noch keine vollständige Validierung."
    },
    "schemapruefung": {
      "type": "string",
      "enum": [
        "bestanden",
        "fehlgeschlagen"
      ],
      "description": "Ergebnis der XSD-Schemaprüfung (UBL 2.1 bzw. CII D16B). Schemafehler stehen in `meldungen` mit Code `XSD`."
    },
    "valid": {
      "type": "boolean",
      "deprecated": true,
      "description": "Veraltet seit 1.1.0, gleich `vollstaendig_validiert`. In 1.0.0 war `valid` schon ohne Schemaprüfung `true`."
    },
    "syntax": {
      "type": "string",
      "enum": [
        "UBL",
        "CII"
      ]
    },
    "spezifikation": {
      "type": [
        "string",
        "null"
      ],
      "description": "Spezifikationskennung BT-24 aus der Rechnung"
    },
    "szenario": {
      "type": [
        "string",
        "null"
      ],
      "description": "Gewähltes KoSIT-Szenario; fehlt, wenn keins passt"
    },
    "hinweis": {
      "type": "string",
      "description": "Nur gesetzt, wenn kein KoSIT-Szenario passt (dann nur EN 16931 geprüft)"
    },
    "geprueft": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Angewandte Regelwerke"
    },
    "fehler": {
      "type": "integer",
      "minimum": 0
    },
    "warnungen": {
      "type": "integer",
      "minimum": 0
    },
    "leitweg_id": {
      "$ref": "#/$defs/LeitwegId"
    },
    "meldungen": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Meldung"
      }
    },
    "kontingent": {
      "$ref": "#/$defs/Kontingent"
    },
    "regeln": {
      "type": "string",
      "description": "Regelstand"
    },
    "regelstand": {
      "type": "string",
      "pattern": "^[0-9a-f]{12}$",
      "description": "Kennung des Regelstands: Anfang der SHA-256 über alle Regel- und Schemadateien. Gleiche Kennung = gleiche Regeln. Details: https://erechio.de/aenderungen.html (seit 1.2.0)"
    },
    "ohne": {
      "type": "string",
      "description": "Was nicht geprüft wird"
    },
    "dauer_ms": {
      "type": "integer",
      "minimum": 0
    }
  },
  "$defs": {
    "Erklaerung": {
      "type": "object",
      "description": "Deutsche Erklärung; nur für Regeln, zu denen es eine ausführliche Erklärung gibt",
      "required": [
        "titel",
        "was",
        "beheben",
        "mehr"
      ],
      "properties": {
        "titel": {
          "type": "string"
        },
        "was": {
          "type": "string",
          "description": "Was die Regel verlangt"
        },
        "beheben": {
          "type": "string",
          "description": "Wie man den Fehler behebt"
        },
        "pfad": {
          "type": [
            "string",
            "null"
          ],
          "description": "Element in der jeweiligen Syntax (UBL oder CII)"
        },
        "mehr": {
          "type": "string",
          "format": "uri",
          "description": "Ausführliche Seite zum Regelcode"
        }
      }
    },
    "Kontingent": {
      "type": "object",
      "required": [
        "genutzt",
        "limit",
        "rest"
      ],
      "properties": {
        "genutzt": {
          "type": "integer",
          "minimum": 0
        },
        "limit": {
          "type": "integer",
          "minimum": 0
        },
        "rest": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "LeitwegId": {
      "type": "object",
      "description": "Nur gesetzt, wenn BT-10 wie eine Leitweg-ID aussieht. Hinweis, ändert das KoSIT-Ergebnis nicht.",
      "required": [
        "wert",
        "pruefziffer_ok"
      ],
      "properties": {
        "wert": {
          "type": "string"
        },
        "pruefziffer_ok": {
          "type": "boolean",
          "description": "Prüfziffer nach ISO 7064 Mod 97-10"
        },
        "erwartet": {
          "type": "string",
          "description": "Richtige Prüfziffer, nur wenn `pruefziffer_ok` false ist"
        }
      }
    },
    "Meldung": {
      "type": "object",
      "required": [
        "code",
        "level",
        "text"
      ],
      "properties": {
        "code": {
          "type": "string",
          "description": "Regelcode, z. B. BR-DE-15; `XSD` für Schemafehler, `ABBRUCH`, wenn die Regelprüfung wegen eines Werts im falschen Format abbrach"
        },
        "level": {
          "type": "string",
          "enum": [
            "fehler",
            "warnung",
            "hinweis"
          ]
        },
        "text": {
          "type": "string",
          "description": "Meldungstext mit deutschen BT-/BG-Namen"
        },
        "location": {
          "type": [
            "string",
            "null"
          ],
          "description": "XPath der Fundstelle; bei Schemafehlern „Zeile n“"
        },
        "erklaerung": {
          "$ref": "#/$defs/Erklaerung"
        }
      }
    }
  }
}