invoice.currency.exchange
Documentos em moeda estrangeira precisam de um bloco <Currency> completo
Quando um documento declara uma moeda não-EUR, CurrencyCode + CurrencyAmount + ExchangeRate têm de estar todos presentes.
O que se verifica
Quando um documento de venda / pagamento / trabalho declara uma moeda não-EUR através de um bloco <Currency>, três filhos são obrigatórios:
CurrencyCode— ISO-4217 (por exemplo,USD,GBP,BRL).CurrencyAmount— montante bruto na moeda estrangeira.ExchangeRate— taxa numérica positiva para EUR na data do documento.
Se qualquer um deles estiver em falta, vazio ou não-positivo, a regra dispara.
Porque é que a AT se importa
O motor fiscal da AT converte cada documento em moeda estrangeira para EUR, para IVA e agregados SAF-T. Sem uma taxa de câmbio não consegue fazer a conversão, e o documento é rejeitado à entrada. O XSD só obriga à presença de <Currency> quando o elemento existe — não obriga a que os três filhos venham juntos.
Exemplos
| Bloco Currency | Veredicto |
|---|---|
USD / 100.00 / 0.92 | ✓ |
USD / 100.00 / 0 | ✗ ExchangeRate tem de ser > 0 |
USD / 100.00 / (em falta) | ✗ ExchangeRate em falta |
(sem bloco Currency) | ✓ Documento em EUR, a regra não dispara |
Como corrigir
Se o documento é mesmo em moeda estrangeira, edite-o no ERP para registar a taxa de câmbio do dia (o Banco de Portugal publica taxas de referência diárias). Se o documento é em EUR, retire o elemento <Currency> espúrio da exportação.