invoice.currency.exchange
Foreign-currency documents need a complete <Currency> block
When a document declares a non-EUR currency, CurrencyCode + CurrencyAmount + ExchangeRate must all be present.
What this checks
When a sales / payment / work document declares a non-EUR currency via a <Currency> block, three children are mandatory:
CurrencyCode— ISO-4217 (e.g.USD,GBP,BRL).CurrencyAmount— gross amount in the foreign currency.ExchangeRate— positive numeric rate to EUR on the document date.
If any of those is missing, empty or non-positive, the rule fires.
Why AT cares
AT's tax engine converts every foreign-currency document to EUR for VAT and SAF-T aggregates. Without an exchange rate it can't do the conversion, and the document is rejected on intake. XSD only enforces presence of <Currency> when the element exists at all — it doesn't enforce all three children together.
Examples
| Currency block | Verdict |
|---|---|
USD / 100.00 / 0.92 | ✓ |
USD / 100.00 / 0 | ✗ ExchangeRate must be > 0 |
USD / 100.00 / (missing) | ✗ ExchangeRate missing |
(no Currency block) | ✓ EUR document, rule doesn't fire |
How to fix
If the document is genuinely in a foreign currency, edit it in your ERP to record the day's exchange rate (Banco de Portugal publishes daily reference rates). If the document is in EUR, drop the spurious <Currency> element from the export.