Account
English

PEPPOL-EN16931-R053: Not exactly one tax total with subtotals

Peppol BIS Billing 3.0 rule · Error · UBL / CII

StandardPeppol BIS Billing 3.0 (OpenPeppol)SeverityError: the invoice is rejectedSyntaxUBL, CIIApplies toInvoices and credit notes sent over the Peppol network (UBL) and, because XRechnung embeds the Peppol rule set, every XRechnung as well.

Official rule text

[PEPPOL-EN16931-R053] Only one tax total with tax subtotals MUST be provided.

Why this error occurs

Peppol requires exactly one VAT total block that carries the breakdown: in UBL one cac:TaxTotal containing cac:TaxSubtotal elements, in CII exactly one ram:TaxTotalAmount with currencyID equal to the invoice currency. A second block may exist only for the VAT total in accounting currency (BT-111) and must have no subtotals. The rule fails when software emits one cac:TaxTotal per VAT rate, when the subtotals are missing entirely, or in CII when ram:TaxTotalAmount lacks the currencyID attribute.

How to fix it

In UBL build a single cac:TaxTotal with cbc:TaxAmount (sum, BT-110) and one cac:TaxSubtotal per VAT category and rate; if you use a VAT accounting currency, add a second cac:TaxTotal with only cbc:TaxAmount in that currency. In CII write exactly one ram:TaxTotalAmount with currencyID equal to ram:InvoiceCurrencyCode in ram:SpecifiedTradeSettlementHeaderMonetarySummation, plus optionally one in the tax currency; the breakdown itself goes into ram:ApplicableTradeTax elements. Never omit the currencyID on these amounts.

Example (valid)

<cac:TaxTotal>
  <cbc:TaxAmount currencyID="EUR">26.00</cbc:TaxAmount>
  <cac:TaxSubtotal>...19 %...</cac:TaxSubtotal>
  <cac:TaxSubtotal>...7 %...</cac:TaxSubtotal>
</cac:TaxTotal>

What the validator checks

Checked element (context):

UBL

ubl-creditnote:CreditNote | ubl-invoice:Invoice

Test (XPath):

count(cac:TaxTotal[cac:TaxSubtotal]) = 1

CII

ram:ApplicableHeaderTradeSettlement

Test (XPath):

count(ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID = $documentCurrencyCode]) = 1

Check your invoice

Drop your XML or PDF on the validator and every failed rule is linked to its page here. Free, no account, the file is not stored.

Check your invoice →

Same check via API:

curl -F file=@invoice.xml https://einvoicechecker.com/v1/validate

Related rules

Frequently asked questions

What does PEPPOL-EN16931-R053 mean?

PEPPOL-EN16931-R053 is a peppol bis billing 3.0 rule: Only one tax total with tax subtotals MUST be provided.

Will my invoice be rejected because of PEPPOL-EN16931-R053?

Yes. PEPPOL-EN16931-R053 is flagged "fatal"; validators (KoSIT, Peppol access points, the German ZRE/OZG-RE portals) reject the invoice until it is fixed.

Which formats does PEPPOL-EN16931-R053 apply to?

Invoices and credit notes sent over the Peppol network (UBL) and, because XRechnung embeds the Peppol rule set, every XRechnung as well. Syntax: UBL and CII.

Source: Peppol BIS Billing 3.0.20 (November 2025). Catalogue generated from the official schematron on 2026-10-14.