SAFTCheck

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

Um documento emitido numa moeda que não o euro inclui um bloco <Currency> dentro de <DocumentTotals>. O bloco tem três filhos, todos obrigatórios:

  • CurrencyCode: o código ISO 4217 da moeda original (por exemplo USD, GBP, BRL).
  • CurrencyAmount: o total bruto do documento nessa moeda.
  • ExchangeRate: a taxa usada para converter o documento para euros.

O SAFTCheck verifica faturas (Invoice), documentos de conferência (WorkDocument) e recibos (Payment). A regra dispara quando qualquer um dos três está em falta ou vazio, ou quando ExchangeRate não é um número superior a zero.

Um exemplo correto

Uma fatura de 1.000,00 USD convertida à taxa de 0,92, pelo que os totais em euros são 920,00:

<DocumentTotals>
  <TaxPayable>0.00</TaxPayable>
  <NetTotal>920.00</NetTotal>
  <GrossTotal>920.00</GrossTotal>
  <Currency>
    <CurrencyCode>USD</CurrencyCode>
    <CurrencyAmount>1000.00</CurrencyAmount>
    <ExchangeRate>0.92</ExchangeRate>
  </Currency>
</DocumentTotals>

Todos os outros montantes do documento (linhas, NetTotal, GrossTotal) ficam em euros. Apenas CurrencyAmount está na moeda original.

Porque é importante

A AT trabalha em euros: o IVA e os totais do SAF-T estão todos em EUR, e a taxa é o que liga um documento em moeda estrangeira a esses valores. O esquema oficial já obriga aos três filhos sempre que o bloco existe, por isso um elemento em falta também aparece como erro de esquema. Esse erro, no entanto, é difícil de ler, e o esquema aceita um ExchangeRate de 0, que nunca pode estar certo. Esta regra indica antes o documento e o campo em falta.

Exemplos

Bloco CurrencyVeredicto
USD / 1000.00 / 0.92✓
USD / 1000.00 / 0✗ ExchangeRate tem de ser superior a 0
USD / 1000.00 / (em falta)✗ ExchangeRate em falta
USD / (vazio) / 0.92✗ CurrencyAmount em falta
EUR / 920.00 / 1✗ Erro de esquema: EUR não é um código permitido, porque os documentos em euros não podem ter bloco Currency
(sem bloco Currency)✓ Documento em euros, a regra não se aplica

Causas comuns

  • O ERP escreve um bloco Currency em todos os documentos, incluindo os emitidos em euros, com EUR e taxa 1. O esquema só permite aqui códigos de moedas estrangeiras, por isso o bloco tem de ser retirado.
  • A taxa não foi registada quando o documento foi emitido (muitas vezes em faturas criadas manualmente ou documentos importados de outro sistema), e a exportação escreve uma taxa vazia ou zero.
  • Moeda do cliente confundida com moeda do documento: um cliente estrangeiro faturado em euros não precisa de bloco Currency.

Como corrigir

  1. Se o documento é mesmo em moeda estrangeira, registe a taxa de câmbio no documento no seu ERP (o Banco de Portugal publica taxas de referência diárias) e volte a exportar.
  2. Se o documento é em euros, altere a definição de exportação do ERP para que não escreva um bloco <Currency> em documentos em euros.

Na página do resultado, o aviso indica qual é o documento (por exemplo Invoice[12].Currency) e que campos estão em falta ou são inválidos.

Relacionado

Outras regras