NormAPI
Validate and generate German e-invoices (XRechnung, ZUGFeRD) against the official KoSIT rules.
Sollte ich dies verwenden
Qualität und Sicherheit
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"@normapi/mcp"
]
}
}
}Ausführbare Pakete
1.0.1stdioRemote-Endpunkte
https://normapi.com/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (3)
🟢validate_invoice(xml, pdfBase64, fileName, language)
Check an XRechnung (UBL or CII XML) or a ZUGFeRD/Factur-X PDF against the official KoSIT rules. Returns the verdict, the rule set version, and every finding; each business-rule finding comes with a plain-language meaning, cause and fix. Send the XML as text in `xml`, or the PDF base64-encoded in `pdfBase64` — exactly one. Free, no account needed, 5 MB at most.
Eingabe-Schema
{
"type": "object",
"properties": {
"xml": {
"description": "The invoice XML as text",
"type": "string",
"maxLength": 5242880
},
"pdfBase64": {
"description": "A ZUGFeRD or Factur-X PDF, base64-encoded",
"type": "string",
"maxLength": 6990511
},
"fileName": {
"description": "The file name, echoed into the report only",
"type": "string",
"maxLength": 200
},
"language": {
"default": "en",
"description": "Language of the plain-language explanations: en (default) or de",
"type": "string",
"enum": [
"en",
"de"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"acceptable": {
"type": "boolean",
"description": "The verdict: true when no ERROR-severity finding remains"
},
"rulesetVersion": {
"type": "string",
"description": "The KoSIT rule set release that produced the verdict"
},
"scenario": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The rules that judged the document; null means nothing was checked"
},
"schemaValid": {
"type": "boolean"
},
"businessRulesEvaluated": {
"type": "boolean",
"description": "False when a schema failure stopped the run, so an empty list is not a pass"
},
"errors": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"warnings": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"severity": {
"type": "string",
"enum": [
"ERROR",
"WARNING",
"INFORMATION"
]
},
"origin": {
"type": "string",
"enum": [
"SCHEMA",
"SCHEMATRON"
]
},
"text": {
"type": "string",
"description": "The rule as the official rule set words it"
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "XPath of the offending node; null for schema findings"
},
"line": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"column": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"explanation": {
"anyOf": [
{
"type": "object",
"properties": {
"meaning": {
"type": "string"
},
"cause": {
"type": "string"
},
"fix": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"meaning",
"cause",
"fix",
"url"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Plain-language meaning, cause and fix; every business rule has one, schema findings none"
}
},
"required": [
"code",
"severity",
"origin",
"text",
"location",
"line",
"column",
"explanation"
],
"additionalProperties": false
}
}
},
"required": [
"acceptable",
"rulesetVersion",
"scenario",
"schemaValid",
"businessRulesEvaluated",
"errors",
"warnings",
"findings"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}⚪generate_invoice(syntax, invoice, language)
Produce an XRechnung (`ubl` or `cii` XML) or a ZUGFeRD hybrid PDF (`zugferd`) from invoice data. Totals are computed server-side in decimal arithmetic, and the document is validated against the official rules before it is returned. Data the rules do not permit is refused with the broken rules and how to fix each. Needs the user's NormAPI account; each document counts against the monthly allowance (25 free).
Eingabe-Schema
{
"type": "object",
"properties": {
"syntax": {
"default": "ubl",
"description": "ubl or cii for XRechnung XML, zugferd for the PDF/A-3 with the invoice embedded",
"type": "string",
"enum": [
"ubl",
"cii",
"zugferd"
]
},
"invoice": {
"type": "object",
"properties": {
"invoiceNumber": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "BT-1"
},
"issueDate": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"description": "BT-2, YYYY-MM-DD"
},
"typeCode": {
"description": "BT-3, UNTDID 1001; 380 when absent. 381 credit note, 384 corrected invoice, 326 partial, 389 self-billed, 875/876/877 construction invoices.",
"type": "string",
"pattern": "^[0-9]{3}$"
},
"precedingInvoices": {
"description": "BG-3, the invoices this one corrects, credits or settles. CII and ZUGFeRD carry one.",
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"number": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "BT-25"
},
"issueDate": {
"description": "BT-26",
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
},
"required": [
"number"
]
}
},
"dueDate": {
"description": "BT-9. XRechnung wants this or paymentTerms on a payable invoice.",
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"deliveryDate": {
"description": "BT-72. Omitting it draws an advisory.",
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"description": "BT-5, ISO 4217, e.g. EUR"
},
"buyerReference": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "BT-10, mandatory in XRechnung (BR-DE-15): the Leitweg-ID for public-sector buyers, else the buyer reference"
},
"note": {
"description": "BT-22",
"type": "string",
"maxLength": 1000
},
"seller": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "BT-27 / BT-44, the legal name"
},
"identifier": {
"description": "BT-29 / BT-46. A seller without a VAT id repeats its tax number here: BT-32 alone satisfies BR-DE-16 but not BR-CO-26.",
"type": "string",
"maxLength": 100
},
"vatId": {
"description": "BT-31 / BT-48, e.g. DE123456789",
"type": "string",
"maxLength": 30
},
"taxNumber": {
"description": "BT-32, the German Steuernummer",
"type": "string",
"maxLength": 30
},
"electronicAddress": {
"description": "BT-34 / BT-49, an email address unless a scheme says otherwise",
"type": "string",
"maxLength": 254
},
"electronicAddressScheme": {
"description": "EAS code for the electronic address; EM (email) when absent",
"type": "string",
"pattern": "^[0-9A-Z]{2,10}$"
},
"address": {
"type": "object",
"properties": {
"street": {
"description": "BT-35 / BT-50",
"type": "string",
"maxLength": 200
},
"city": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "BT-37 / BT-52, mandatory (BR-DE-3, BR-DE-8)"
},
"postcode": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"description": "BT-38 / BT-53, mandatory (BR-DE-4, BR-DE-9)"
},
"country": {
"type": "string",
"pattern": "^[A-Z]{2}$",
"description": "BT-40 / BT-55, ISO 3166-1 alpha-2, e.g. DE"
}
},
"required": [
"city",
"postcode",
"country"
],
"description": "BG-5 / BG-8"
},
"contact": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "BT-41"
},
"phone": {
"type": "string",
"minLength": 1,
"maxLength": 50,
"description": "BT-42"
},
"email": {
"type": "string",
"minLength": 1,
"maxLength": 254,
"description": "BT-43"
}
},
"required": [
"name",
"phone",
"email"
],
"description": "BG-6. XRechnung requires all three on the seller (BR-DE-2, BR-DE-5 to 7)."
}
},
"required": [
"name",
"address"
],
"description": "BG-4. Needs a VAT id or tax number (BR-DE-16) and a contact (BR-DE-2)."
},
"buyer": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "BT-27 / BT-44, the legal name"
},
"identifier": {
"description": "BT-29 / BT-46. A seller without a VAT id repeats its tax number here: BT-32 alone satisfies BR-DE-16 but not BR-CO-26.",
"type": "string",
"maxLength": 100
},
"vatId": {
"description": "BT-31 / BT-48, e.g. DE123456789",
"type": "string",
"maxLength": 30
},
"taxNumber": {
"description": "BT-32, the German Steuernummer",
"type": "string",
"maxLength": 30
},
"electronicAddress": {
"description": "BT-34 / BT-49, an email address unless a scheme says otherwise",
"type": "string",
"maxLength": 254
},
"electronicAddressScheme": {
"description": "EAS code for the electronic address; EM (email) when absent",
"type": "string",
"pattern": "^[0-9A-Z]{2,10}$"
},
"address": {
"type": "object",
"properties": {
"street": {
"description": "BT-35 / BT-50",
"type": "string",
"maxLength": 200
},
"city": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "BT-37 / BT-52, mandatory (BR-DE-3, BR-DE-8)"
},
"postcode": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"description": "BT-38 / BT-53, mandatory (BR-DE-4, BR-DE-9)"
},
"country": {
"type": "string",
"pattern": "^[A-Z]{2}$",
"description": "BT-40 / BT-55, ISO 3166-1 alpha-2, e.g. DE"
}
},
"required": [
"city",
"postcode",
"country"
],
"description": "BG-5 / BG-8"
},
"contact": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "BT-41"
},
"phone": {
"type": "string",
"minLength": 1,
"maxLength": 50,
"description": "BT-42"
},
"email": {
"type": "string",
"minLength": 1,
"maxLength": 254,
"description": "BT-43"
}
},
"required": [
"name",
"phone",
"email"
],
"description": "BG-6. XRechnung requires all three on the seller (BR-DE-2, BR-DE-5 to 7)."
}
},
"required": [
"name",
"address"
],
"description": "BG-7"
},
"payment": {
"type": "object",
"properties": {
"meansCode": {
"type": "string",
"pattern": "^([0-9]{1,3}|ZZZ)$",
"description": "BT-81, UNTDID 4461: 58 SEPA credit transfer, 30 credit transfer, 59 SEPA direct debit, 48/54/55 card, 10 cash, ZZZ mutually defined"
},
"iban": {
"description": "BT-84, the payee account; required for transfers (BR-DE-23-a)",
"type": "string",
"maxLength": 34
},
"reference": {
"description": "BT-83, what the payer should quote",
"type": "string",
"maxLength": 140
},
"meansText": {
"description": "BT-82, the payment means in words",
"type": "string",
"maxLength": 200
},
"accountName": {
"description": "BT-85, the payee account holder",
"type": "string",
"maxLength": 200
},
"bic": {
"description": "BT-86, the payee bank",
"type": "string",
"pattern": "^[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?$"
},
"card": {
"type": "object",
"properties": {
"number": {
"type": "string",
"minLength": 1,
"maxLength": 50,
"pattern": "^[^0-9]*([0-9][^0-9]*){0,10}$",
"description": "BT-87, masked: at most the first 6 and the last 4 digits, never the full number. Send digits without mask characters."
},
"holder": {
"description": "BT-88",
"type": "string",
"maxLength": 200
},
"network": {
"description": "VISA, MasterCard …; UBL writes NA when absent",
"type": "string",
"maxLength": 50
}
},
"required": [
"number"
],
"description": "BG-18, with payment means 48, 54 or 55"
},
"directDebit": {
"type": "object",
"properties": {
"mandateReference": {
"description": "BT-89",
"type": "string",
"maxLength": 35
},
"creditorId": {
"description": "BT-90, the SEPA creditor identifier",
"type": "string",
"maxLength": 35
},
"debitedAccount": {
"description": "BT-91, the buyer IBAN debited",
"type": "string",
"maxLength": 34
}
},
"description": "BG-19, with payment means 59. Leave out the payee IBAN (BR-DE-25-b)."
}
},
"required": [
"meansCode"
],
"description": "BG-16 and the group its code calls for: BG-17 transfer, BG-18 card, BG-19 direct debit"
},
"paymentTerms": {
"description": "BT-20",
"type": "string",
"maxLength": 1000
},
"allowances": {
"description": "BG-20",
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"amount": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "Two decimals. Give amount or percent, exactly one."
},
"percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "Give amount or percent, exactly one."
},
"baseAmount": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "What the percentage is taken of. Only with percent (PEPPOL-EN16931-R042)."
},
"reason": {
"description": "This or reasonCode is required",
"type": "string",
"maxLength": 500
},
"reasonCode": {
"description": "UNTDID 5189 for an allowance (95 discount), UNTDID 7161 for a charge (FC freight)",
"type": "string",
"pattern": "^[0-9A-Z]{1,3}$"
},
"vatCategory": {
"type": "string",
"enum": [
"S",
"Z",
"E",
"AE",
"K",
"G",
"O",
"L",
"M"
],
"description": "UNTDID 5305: S standard, Z zero-rated, E exempt, AE reverse charge, K intra-community supply, G export, O outside scope, L Canary Islands, M Ceuta/Melilla"
},
"vatRate": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "Percent"
},
"vatExemptionReason": {
"description": "BT-120, as on a line",
"type": "string",
"maxLength": 500
}
},
"required": [
"vatCategory"
],
"description": "A document-level allowance (BG-20) or charge (BG-21)"
}
},
"charges": {
"description": "BG-21: freight, packaging …",
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"amount": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "Two decimals. Give amount or percent, exactly one."
},
"percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "Give amount or percent, exactly one."
},
"baseAmount": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "What the percentage is taken of. Only with percent (PEPPOL-EN16931-R042)."
},
"reason": {
"description": "This or reasonCode is required",
"type": "string",
"maxLength": 500
},
"reasonCode": {
"description": "UNTDID 5189 for an allowance (95 discount), UNTDID 7161 for a charge (FC freight)",
"type": "string",
"pattern": "^[0-9A-Z]{1,3}$"
},
"vatCategory": {
"type": "string",
"enum": [
"S",
"Z",
"E",
"AE",
"K",
"G",
"O",
"L",
"M"
],
"description": "UNTDID 5305: S standard, Z zero-rated, E exempt, AE reverse charge, K intra-community supply, G export, O outside scope, L Canary Islands, M Ceuta/Melilla"
},
"vatRate": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "Percent"
},
"vatExemptionReason": {
"description": "BT-120, as on a line",
"type": "string",
"maxLength": 500
}
},
"required": [
"vatCategory"
],
"description": "A document-level allowance (BG-20) or charge (BG-21)"
}
},
"prepaidAmount": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "BT-113, already paid; the amount due is the total less this"
},
"lines": {
"minItems": 1,
"maxItems": 500,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"description": "BT-126; assigned 1..n when absent",
"type": "string",
"maxLength": 50
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "BT-153"
},
"description": {
"description": "BT-154",
"type": "string",
"maxLength": 1000
},
"quantity": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "BT-129, up to six decimals"
},
"unit": {
"type": "string",
"pattern": "^[0-9A-Z]{1,8}$",
"description": "BT-130, UN/ECE Rec 20: C62 piece, HUR hour, DAY day, KGM kilogram …"
},
"unitPrice": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "BT-146, net, up to four decimals"
},
"vatCategory": {
"type": "string",
"enum": [
"S",
"Z",
"E",
"AE",
"K",
"G",
"O",
"L",
"M"
],
"description": "UNTDID 5305: S standard, Z zero-rated, E exempt, AE reverse charge, K intra-community supply, G export, O outside scope, L Canary Islands, M Ceuta/Melilla"
},
"vatRate": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "BT-152, percent; required for category S"
},
"vatExemptionReason": {
"description": "BT-120; the rule set wants it for the exempt-family categories",
"type": "string",
"maxLength": 500
},
"allowances": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"amount": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "Two decimals. Give amount or percent, exactly one."
},
"percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "Give amount or percent, exactly one."
},
"baseAmount": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "What the percentage is taken of. Only with percent (PEPPOL-EN16931-R042)."
},
"reason": {
"description": "This or reasonCode is required",
"type": "string",
"maxLength": 500
},
"reasonCode": {
"description": "UNTDID 5189 for an allowance (95 discount), UNTDID 7161 for a charge (FC freight)",
"type": "string",
"pattern": "^[0-9A-Z]{1,3}$"
}
},
"description": "A line allowance (BG-27) or charge (BG-28); it changes the line net, in the line VAT category"
}
},
"charges": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"amount": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "Two decimals. Give amount or percent, exactly one."
},
"percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "Give amount or percent, exactly one."
},
"baseAmount": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$"
}
],
"description": "What the percentage is taken of. Only with percent (PEPPOL-EN16931-R042)."
},
"reason": {
"description": "This or reasonCode is required",
"type": "string",
"maxLength": 500
},
"reasonCode": {
"description": "UNTDID 5189 for an allowance (95 discount), UNTDID 7161 for a charge (FC freight)",
"type": "string",
"pattern": "^[0-9A-Z]{1,3}$"
}
},
"description": "A line allowance (BG-27) or charge (BG-28); it changes the line net, in the line VAT category"
}
}
},
"required": [
"name",
"quantity",
"unit",
"unitPrice",
"vatCategory"
]
},
"description": "BG-25. Totals are computed server-side in decimal arithmetic."
}
},
"required": [
"invoiceNumber",
"issueDate",
"currency",
"buyerReference",
"seller",
"buyer",
"payment",
"lines"
]
},
"language": {
"default": "en",
"description": "Language of the plain-language explanations: en (default) or de",
"type": "string",
"enum": [
"en",
"de"
]
}
},
"required": [
"invoice"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"syntax": {
"type": "string",
"enum": [
"ubl",
"cii",
"zugferd"
]
},
"fileName": {
"type": "string"
},
"mimeType": {
"type": "string"
},
"bytes": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"rulesetVersion": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The rule set the document passed before it was returned"
},
"scenario": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"xml": {
"description": "The XRechnung document; absent for the ZUGFeRD PDF, which is the attached resource",
"type": "string"
}
},
"required": [
"syntax",
"fileName",
"mimeType",
"bytes",
"rulesetVersion",
"scenario"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢explain_rule(code, language)
Explain one EN 16931 / XRechnung / Peppol business rule by its code (e.g. BR-DE-15, BR-CO-10, PEPPOL-EN16931-R010): what it requires, why invoices typically break it, and how to fix it, with a link to the full page. Case does not matter. Schema findings (cvc-*) have no explanation.
Eingabe-Schema
{
"type": "object",
"properties": {
"code": {
"type": "string",
"minLength": 2,
"maxLength": 60,
"description": "The rule code, e.g. BR-DE-15"
},
"language": {
"default": "en",
"description": "Language of the plain-language explanations: en (default) or de",
"type": "string",
"enum": [
"en",
"de"
]
}
},
"required": [
"code"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"code": {
"type": "string"
},
"language": {
"type": "string",
"enum": [
"de",
"en"
]
},
"meaning": {
"type": "string"
},
"cause": {
"type": "string"
},
"fix": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"code",
"language",
"meaning",
"cause",
"fix",
"url"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Community
Nachweis