Skip to content

PEPPOL-EN16931-R054: VAT amount in accounting currency (BT-111) missing or superfluous

Official message

[PEPPOL-EN16931-R054] Only one tax total amount must be provided where currency id equals tax currency code, if tax currency code (BT-6) is provided.

XRechnung (CII) · Error · Message language: English · Version: xrechnung-3.0.2-validator-configuration-2026-08-31

[PEPPOL-EN16931-R054] Only one tax total without tax subtotals MUST be provided when tax currency code is provided.

XRechnung (UBL) · Error · Message language: English · Version: xrechnung-3.0.2-validator-configuration-2026-08-31
Severity
Error The invoice is invalid and may be rejected by the recipient.
Applies to
XRechnung (CII), XRechnung (UBL)
Affected fields
BT-6

What does this mean?

If a VAT accounting currency code (BT-6) is provided, the invoice total VAT amount in accounting currency (BT-111) must be present exactly once. Without BT-6 there must be no such amount. The invoice does not meet this.
The rule originates from Peppol BIS Billing 3.0 and is applied in the XRechnung validation. CII: ram:TaxTotalAmount with a currencyID other than the invoice currency (BT-5) is counted. UBL: cac:TaxTotal without cac:TaxSubtotal is counted.

Typical causes

BT-6 is given, BT-111 is missing.
BT-111 is given, but BT-6 is not.
BT-111 occurs more than once or was output with the invoice currency instead of the VAT accounting currency.

How to fix the error

With BT-6: state BT-111 exactly once with currencyID equal to BT-6. CII: a second ram:TaxTotalAmount, UBL: a second cac:TaxTotal with cbc:TaxAmount only, without cac:TaxSubtotal.
Without BT-6: omit BT-111.
BT-6 must differ from BT-5 (PEPPOL-EN16931-R005).
Generate and validate the invoice again.

In E-Rechnungsfreund

In the invoice form, "Experte" view, if a "Steuerwährung (BT-6)" (VAT accounting currency) is selected, fill in the field "Steuer in Buchungswährung (BT-111)" (VAT in accounting currency) in section "Belegsummen (BG-22)" (document totals). If no different VAT currency is needed, choose "– nicht angegeben –" (not specified) for "Steuerwährung (BT-6)" in section "Rechnungsdetails" (invoice details).

Example

Wrong

<ram:ApplicableHeaderTradeSettlement>
  <ram:TaxCurrencyCode>CHF</ram:TaxCurrencyCode>
  <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
  ...
  <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
    ...
    <ram:TaxTotalAmount currencyID="EUR">63.75</ram:TaxTotalAmount>
    ...
  </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
</ram:ApplicableHeaderTradeSettlement>

Correct

<ram:ApplicableHeaderTradeSettlement>
  <ram:TaxCurrencyCode>CHF</ram:TaxCurrencyCode>
  <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
  ...
  <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
    ...
    <ram:TaxTotalAmount currencyID="EUR">63.75</ram:TaxTotalAmount>
    <ram:TaxTotalAmount currencyID="CHF">59.90</ram:TaxTotalAmount>
    ...
  </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
</ram:ApplicableHeaderTradeSettlement>
For developers: test expression per syntax

XRechnung (CII) (CII)

Context: ram:ApplicableHeaderTradeSettlement

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

XRechnung (UBL) (UBL)

Context: ubl-creditnote:CreditNote | ubl-invoice:Invoice

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

Related validation rules

Last updated:
Explanation of the validation rule, not legal or tax advice.