Fehlercodes · Peppol BIS 3.0

PEPPOL-EN16931-R053Im Rechnungssystem

Only one tax total with tax subtotals must be provided

So lautet die Ablehnung wörtlich: „[PEPPOL-EN16931-R053] PEPPOL-EN16931-R053 fires when an invoice contains more than one cac:TaxTotal element that has cac:TaxSubtotal children. Peppol BIS Billing 3.0 allows multiple TaxTotal blocks only in narrow multi-currency scenarios (one in the document currency with subtotals, one in the tax accounting currency without subtotals). The schematron test `count(cac:TaxTotal[cac:TaxSubtotal]) = 1` enforces this: there must be exactly one TaxTotal carrying the category breakdown.

The rule is one of the most common structural failures in cross-border Peppol pipelines. Failure modes: (1) Multi-currency invoices emit two TaxTotal elements (document currency + tax accounting currency) but both carry TaxSubtotal children. Only the document-currency one may. (2) Code that loops over VAT rates emits one cac:TaxTotal per rate instead of one TaxTotal with multiple cac:TaxSubtotal children. (3) Merging logic concatenates TaxTotal blocks from two source documents without deduplicating. (4) On CII (UN/CEFACT D16B), the equivalent rule counts `ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID=$documentCurrencyCode]` — duplicates of the document-currency total trigger it. (5) Custom XSLT identity transforms that copy cac:TaxTotal from input verbatim, then add a computed one — producing two.

Was Sie bereithaltenNichts. Die Datei muss im Rechnungssystem neu erzeugt werden; wir prüfen sie danach erneut.
Was wir tunStep 1: Count cac:TaxTotal elements that contain cac:TaxSubtotal children. If the count is 1, the rule cannot fire — investigate why the validator reports it (namespace mismatch?). Step 2: If the count is > 1, identify which TaxTotal should hold the subtotals. Rule: the one whose currencyID on cbc:TaxAmount matches the document currency (cbc:DocumentCurrencyCode). Step 3: Merge all cac:TaxSubtotal children into that single TaxTotal, grouping by cac:TaxCategory/cbc:ID + cbc:Percent. Sum TaxableAmount and TaxAmount per group. Step 4: For any additional TaxTotal in the tax accounting currency (cbc:TaxCurrencyCode), keep only the cbc:TaxAmount, remove all cac:TaxSubtotal children. Step 5: Remove any other duplicate TaxTotal blocks entirely. Step 6: Recompute cac:TaxTotal/cbc:TaxAmount as the sum of the merged subtotal TaxAmount values. Step 7: Re-validate. R053 should clear. BR-CO-14 should also pass if the recompute is correct.
Wenn Sie es selbst im Rechnungssystem eintragen
Vorher
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="EUR">190.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="EUR">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="EUR">190.00</cbc:TaxAmount>
      <cac:TaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>19.00</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="EUR">35.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="EUR">500.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="EUR">35.00</cbc:TaxAmount>
      <cac:TaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>7.00</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
</Invoice>
Nachher
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="EUR">225.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="EUR">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="EUR">190.00</cbc:TaxAmount>
      <cac:TaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>19.00</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:TaxCategory>
    </cac:TaxSubtotal>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="EUR">500.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="EUR">35.00</cbc:TaxAmount>
      <cac:TaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>7.00</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
</Invoice>

Die Reihenfolge ist Teil der Regel: steht das Element an der falschen Stelle, lehnt der Validator mit PEPPOL-EN16931-R053 ab.

So sieht der Befund ausBeispiel
BefundAufbau fehlerhaft · PEPPOL-EN16931-R053
Stelle//cac:PaymentMeans/cbc:PaymentDueDate
Von IhnenNeu exportierte Datei
DanachNeu exportieren
NachweisSHA-256 und /verify-Link nach der Prüfung