Account
English

PEPPOL-EN16931-R005: VAT accounting currency equals the invoice currency

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-R005] VAT accounting currency code MUST be different from invoice currency code when provided.

Why this error occurs

The VAT accounting currency code (BT-6) exists only to report VAT in a currency different from the invoice currency (BT-5); if both are the same the element is meaningless and Peppol forbids it. The rule compares cbc:TaxCurrencyCode with cbc:DocumentCurrencyCode (UBL) or ram:TaxCurrencyCode with ram:InvoiceCurrencyCode (CII). It is almost always caused by software that always emits the tax currency element, filled with the document currency.

How to fix it

Remove cbc:TaxCurrencyCode / ram:TaxCurrencyCode when it equals the invoice currency; also remove the second cac:TaxTotal (UBL) or second ram:TaxTotalAmount (CII) that carried BT-111 in that currency. Only keep BT-6 for genuine cross-currency cases (e.g. invoice in USD, VAT reported in EUR), and then provide the VAT total in that currency (BR-53).

Example (valid)

<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<cbc:BuyerReference>PO-55821</cbc:BuyerReference>

What the validator checks

Checked element (context):

UBL

cbc:TaxCurrencyCode

Test (XPath):

not(normalize-space(text()) = normalize-space(../cbc:DocumentCurrencyCode/text()))

CII

ram:ApplicableHeaderTradeSettlement

Test (XPath):

not(ram:TaxCurrencyCode) or normalize-space(ram:TaxCurrencyCode/text()) != normalize-space(ram:InvoiceCurrencyCode/text())

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-R005 mean?

PEPPOL-EN16931-R005 is a peppol bis billing 3.0 rule: VAT accounting currency code MUST be different from invoice currency code when provided.

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

Yes. PEPPOL-EN16931-R005 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-R005 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.