SAFTCheck
Docs / currency-exchange
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 blockVerdict
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.

Other rules

Usamos um cookie de sessão para autenticação, um cookie de idioma para a preferência linguística e o Tawk.to para o widget de chat ao vivo (que define os seus próprios cookies quando abre o chat). O Google Analytics (GA4) só é carregado depois de aceitar, com anonimização de IP; sem rastreadores publicitários. Consulte a nossa Política de Privacidade.