NormAPI
Validate and generate German e-invoices (XRechnung, ZUGFeRD) against the official KoSIT rules.
使うべきか
品質と安全性
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `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
}コミュニティ
エビデンス