Creating invoices in a different currency in UBL: DocumentCurrencyCode, TaxCurrencyCode and dual VAT totals.
Not every invoice is in euros. In international trade, you regularly invoice in dollars, British pounds or another currency. UBL supports this, but an extra layer comes into play: VAT must in many cases be expressed in the local currency of the tax authority. This article explains how to correctly construct an invoice in a foreign currency.
The currency of the invoice is determined by the DocumentCurrencyCode element. All amounts in the invoice (line amounts, totals, PayableAmount) are expressed in this currency:
<cbc:DocumentCurrencyCode>USD</cbc:DocumentCurrencyCode>
In this example, the invoice is drawn up in US dollars. The currency codes follow the ISO 4217 standard (EUR, USD, GBP, CHF, and so on).
If the invoice currency differs from the currency in which VAT must be reported to the tax authority, you include a second currency via TaxCurrencyCode:
<cbc:DocumentCurrencyCode>USD</cbc:DocumentCurrencyCode>
<cbc:TaxCurrencyCode>EUR</cbc:TaxCurrencyCode>
This indicates that the invoice is drawn up in dollars, but that the VAT amounts must also be expressed in euros. In the Netherlands, the VAT reporting currency is always euros, so for Dutch suppliers invoicing in another currency, this element is relevant.
When TaxCurrencyCode is specified and differs from DocumentCurrencyCode, the invoice must contain two TaxTotal blocks:
TaxTotal in the invoice currency (with TaxSubtotal elements)TaxTotal in the VAT currency (only the total VAT amount, without TaxSubtotal)<!-- VAT in invoice currency (USD) -->
<cac:TaxTotal>
<cbc:TaxAmount currencyID="USD">210.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="USD">1000.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="USD">210.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<!-- VAT in reporting currency (EUR) -->
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">189.00</cbc:TaxAmount>
</cac:TaxTotal>
The first block contains the full VAT breakdown in dollars. The second block contains only the total VAT amount in euros. This second amount is based on the exchange rate applicable at the time of invoicing.
Note: the second TaxTotal block does not contain TaxSubtotal elements. Only the total VAT amount in the reporting currency is sufficient.
The UBL standard does not prescribe how the exchange rate should be recorded. In practice, there are two approaches:
Implicit rate. The exchange rate can be derived from the ratio between the VAT amounts in both currencies. In the example above: 189.00 / 210.00 = 0.90 (1 USD = 0.90 EUR). This is the most common approach.
Explicit mention. Some organisations include the applied exchange rate in the PaymentTerms or as a note. This is not standardised but can be useful for accounting purposes.
Tip: for the exchange rate, you can use the ECB reference rate applicable on the invoice date. Most accounting packages apply these rates automatically.
All amounts in the LegalMonetaryTotal are expressed in the DocumentCurrencyCode. There is no separate total block in the reporting currency:
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="USD">1000.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="USD">1000.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="USD">1210.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="USD">1210.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
The most common situations:
For intra-Community supplies within the EU, invoicing is usually done in euros, but another currency is also permitted as long as VAT reporting takes place in the local currency.
eConnect processes invoices in all common currencies. The DocumentCurrencyCode and TaxCurrencyCode are automatically recognised and validated. When submitting invoices in foreign currency via the PSB API, ensure that all currencyID attributes consistently contain the correct currency code. A mix of currencies within line amounts leads to a validation error.
Validate invoice