NormAPI
Validate and generate German e-invoices (XRechnung, ZUGFeRD) against the official KoSIT rules.
¿Debería usar esto?
Calidad y seguridad
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"@normapi/mcp"
]
}
}
}Paquetes ejecutables
1.0.1stdioPuntos de conexión remotos
https://normapi.com/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (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.
Esquema de entrada
{
"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"
}Esquema de salida
{
"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).
Esquema de entrada
{
"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"
}Esquema de salida
{
"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.
Esquema de entrada
{
"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"
}Esquema de salida
{
"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
}Comunidad
Evidencia