Skip to content

PEPPOL-EN16931-R055: VAT amount in invoice and accounting currency with different signs

Official message

[PEPPOL-EN16931-R055] Invoice total VAT amount and Invoice total VAT amount in accounting currency MUST have the same operational sign

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

[PEPPOL-EN16931-R055] Invoice total VAT amount and Invoice total VAT amount in accounting currency MUST have the same operational sign

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)

What does this mean?

Invoice total VAT amount and Invoice total VAT amount in accounting currency MUST have the same operational sign: if a VAT accounting currency (BT-6) is given, BT-110 and BT-111 must both be positive or both be negative. The amounts have different signs.
The rule originates from Peppol BIS Billing 3.0 and is applied in the XRechnung validation. In CII an amount of 0 counts as positive, in UBL 0 matches both signs.

Typical causes

For a credit note or corrected invoice only one of the two amounts was stated negative.

How to fix the error

Calculate BT-111 from BT-110 with the exchange rate so that both amounts have the same sign.
CII: two ram:TaxTotalAmount with currencyID BT-5 and BT-6, UBL: cac:TaxTotal/cbc:TaxAmount in both currencies.
Generate and validate the invoice again.

In E-Rechnungsfreund

In the invoice form, "Experte" view, section "Belegsummen (BG-22)" (document totals), fill in the field "Steuer in Buchungswährung (BT-111)" (VAT in accounting currency) with the same sign as "Steuer gesamt (BT-110)" (total VAT).

Example

Wrong

<ram:TaxTotalAmount currencyID="EUR">-63.75</ram:TaxTotalAmount>
<ram:TaxTotalAmount currencyID="CHF">59.90</ram:TaxTotalAmount>

Correct

<ram:TaxTotalAmount currencyID="EUR">-63.75</ram:TaxTotalAmount>
<ram:TaxTotalAmount currencyID="CHF">-59.90</ram:TaxTotalAmount>
For developers: test expression per syntax

XRechnung (CII) (CII)

Context: ram:ApplicableHeaderTradeSettlement

not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID = $documentCurrencyCode]) or (ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID = $taxCurrencyCode] < 0 and ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID = $documentCurrencyCode] < 0) or (ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID = $taxCurrencyCode] >= 0 and ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID = $documentCurrencyCode] >= 0)

XRechnung (UBL) (UBL)

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

not(cbc:TaxCurrencyCode) or (cac:TaxTotal/cbc:TaxAmount[@currencyID=normalize-space(../../cbc:TaxCurrencyCode)] <= 0 and cac:TaxTotal/cbc:TaxAmount[@currencyID=normalize-space(../../cbc:DocumentCurrencyCode)] <= 0) or (cac:TaxTotal/cbc:TaxAmount[@currencyID=normalize-space(../../cbc:TaxCurrencyCode)] >= 0 and cac:TaxTotal/cbc:TaxAmount[@currencyID=normalize-space(../../cbc:DocumentCurrencyCode)] >= 0)

Related validation rules

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