SAFTCheck

invoice.currency.exchange

I documenti in valuta estera richiedono un blocco <Currency> completo

Quando un documento dichiara una valuta diversa da EUR, CurrencyCode + CurrencyAmount + ExchangeRate devono essere tutti presenti.

Cosa controlla

Un documento emesso in una valuta diversa dall'euro contiene un blocco <Currency> all'interno di <DocumentTotals>. Il blocco ha tre figli, tutti obbligatori:

  • CurrencyCode: il codice ISO 4217 della valuta originale (ad esempio USD, GBP, BRL).
  • CurrencyAmount: il totale lordo del documento in quella valuta.
  • ExchangeRate: il tasso usato per convertire il documento in euro.

SAFTCheck controlla le fatture (Invoice), i documenti di lavoro (WorkDocument) e le ricevute (Payment). La regola scatta quando uno dei tre è mancante o vuoto, oppure quando ExchangeRate non è un numero maggiore di zero.

Un esempio corretto

Una fattura di 1.000,00 USD convertita a 0,92, quindi i totali in euro sono 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>

Tutti gli altri importi del documento (righe, NetTotal, GrossTotal) restano in euro. Solo CurrencyAmount è nella valuta originale.

Perché è importante

L'AT lavora in euro: l'IVA e i totali del SAF-T sono tutti in EUR, e il tasso è ciò che collega a essi un documento in valuta estera. Lo schema ufficiale richiede già tutti e tre i figli ogni volta che il blocco è presente, quindi un elemento mancante compare anche come errore di schema. Quell'errore però è difficile da leggere, e lo schema accetta un ExchangeRate pari a 0, che non può mai essere corretto. Questa regola indica invece il documento e il campo mancante.

Esempi

Blocco CurrencyVerdetto
USD / 1000.00 / 0.92✓
USD / 1000.00 / 0✗ ExchangeRate dev'essere maggiore di 0
USD / 1000.00 / (mancante)✗ ExchangeRate mancante
USD / (vuoto) / 0.92✗ CurrencyAmount mancante
EUR / 920.00 / 1✗ Errore di schema: EUR non è un codice ammesso, perché i documenti in euro non devono avere un blocco Currency
(nessun blocco Currency)✓ Documento in euro, la regola non si applica

Cause comuni

  • L'ERP scrive un blocco Currency per ogni documento, compresi quelli in euro, con EUR e un tasso pari a 1. Lo schema qui ammette solo codici di valute estere, quindi il blocco va eliminato.
  • Il tasso non è stato registrato al momento dell'emissione del documento (spesso per fatture create manualmente o documenti importati da un altro sistema), quindi l'esportazione scrive un tasso vuoto o pari a zero.
  • Valuta del cliente confusa con la valuta del documento: un cliente estero fatturato in euro non ha bisogno di un blocco Currency.

Come correggere

  1. Se il documento è effettivamente in valuta estera, registra il tasso di cambio sul documento nel tuo ERP (il Banco de Portugal pubblica tassi di riferimento giornalieri) ed esporta di nuovo.
  2. Se il documento è in euro, modifica l'impostazione di esportazione dell'ERP in modo che non scriva un blocco <Currency> per i documenti in euro.

Nella pagina del risultato, l'anomalia indica di quale documento si tratta (ad esempio Invoice[12].Currency) e quali campi sono mancanti o non validi.

Correlato

Altre regole