NormAPI

Validate and generate German e-invoices (XRechnung, ZUGFeRD) against the official KoSIT rules.

我该使用它吗

质量与安全性

A
描述质量
100%
模式完整度
94%
命名质量
93%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

基于对工具定义和协议合规性的自动分析。

上下文开销

~5,660token 数(工具定义)
~18.0 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 4.42%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "mcp": {
      "command": "npx",
      "args": [
        "@normapi/mcp"
      ]
    }
  }
}

可运行的软件包

npm@normapi/mcp1.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
}

社区

评价此服务器

证据

最近观测

已验证未记录版本3 个工具