NormAPI
Validate and generate German e-invoices (XRechnung, ZUGFeRD) against the official KoSIT rules.
我該用這個嗎
品質與安全性
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"@normapi/mcp"
]
}
}
}可執行的套件
1.0.1stdio遠端端點
https://normapi.com/mcpstreamable-http它能做什麼
工具清單
工具(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.
輸入結構描述
{
"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"
}輸出結構描述
{
"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).
輸入結構描述
{
"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"
}輸出結構描述
{
"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.
輸入結構描述
{
"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"
}輸出結構描述
{
"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
}社群
證據