InvoiceValidator.eu

PEPPOL-EN16931-R054

fatalPeppol BIS Billing 3.0profileCIIUBLBT-6

Only one tax total without tax subtotals MUST be provided when tax currency code is provided.

Why it fails

A tax currency code is present but the invoice does not carry exactly one TaxTotal without subtotals for it.

How to fix it

When BT-6 is used, add a second cac:TaxTotal that holds ONLY the total VAT amount in that currency and no TaxSubtotal groups. The first TaxTotal keeps the breakdown.

What the validator checks

CII — context —

count(ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID != $documentCurrencyCode]) = (if (ram:TaxCurrencyCode) then 1 else 0)

UBL — context —

count(cac:TaxTotal[not(cac:TaxSubtotal)]) = (if (cbc:TaxCurrencyCode) then 1 else 0)

Related rules

Part of PEPPOL-EN16931 — Peppol BIS Billing 3.0.

Check your own invoice against PEPPOL-EN16931-R054

…or paste the XML instead

Nothing is stored, and the whole invoice is checked, not just this rule. A PDF only works if it is Factur-X / ZUGFeRD — a PDF with the invoice XML inside it.

This is a Peppol BIS Billing 3.0 rule: an invoice can be perfectly valid EN 16931 and still be rejected by it.