SAFTCheck

header.dates

Date dell'header: StartDate, EndDate, FiscalYear, DateCreated

Invarianti temporali che l'AT impone sul blocco Header del SAF-T.

Cosa controlla l'AT

Il blocco Header del file SAF-T descrive il periodo coperto dal file e quando è stato generato. L'AT impone alcune invarianti su queste date:

CampoVincolo
StartDateLa prima data coperta dal file.
EndDateNon può essere precedente a StartDate (un periodo di un solo giorno è valido).
FiscalYearL'anno di StartDate, oppure l'anno precedente quando l'esercizio non coincide con l'anno solare (ad esempio da febbraio a gennaio).
DateCreatedDovrebbe essere uguale o successiva a EndDate: non puoi generare un file prima che termini il periodo coperto.

Un esempio corretto

Il file mensile di fatturazione di settembre 2026, generato il 3 ottobre da un'azienda il cui esercizio coincide con l'anno solare:

<Header>
  ...
  <FiscalYear>2026</FiscalYear>
  <StartDate>2026-09-01</StartDate>
  <EndDate>2026-09-30</EndDate>
  ...
  <DateCreated>2026-10-03</DateCreated>
  ...
</Header>

Tutte le date usano il formato YYYY-MM-DD. Per un'azienda il cui esercizio va da aprile a marzo, il file di gennaio 2027 riporterebbe comunque FiscalYear 2026, e SAFTCheck lo segnala come informazione anziché come errore.

Le date dell'header definiscono anche il periodo in cui deve ricadere ogni documento del file: vedi documenti fuori dal periodo dell'header.

Sotto-regole applicate da SAFTCheck

  • header.dates.range: scatta quando StartDate è successiva a EndDate.
  • header.dates.fiscal_year_previous: FiscalYear è l'anno precedente a quello di StartDate: corretto per un esercizio non solare, un errore negli altri casi (info).
  • header.dates.fiscal_year_mismatch: FiscalYear è qualsiasi altro anno (warning).
  • header.dates.created_before_end: scatta quando DateCreated < EndDate (warning; l'AT può comunque accettare).
  • header.dates.future_end: scatta quando EndDate è nel futuro (warning).

Errori comuni

  • Cambio anno. Un file di gennaio con FiscalYear=2025 ma StartDate=2026-01-01, di un'azienda il cui esercizio coincide con l'anno solare. L'ERP ha cambiato anno su un campo ma non sull'altro.
  • Unità di periodo sbagliata. Inviare un trimestre quando l'AT si aspetta un mese, o viceversa. Le date dichiarano l'unità; il disallineamento con la finestra di invio è un controllo separato lato AT.
  • DateCreated impostata durante i test. I file esportati durante la configurazione dell'ERP riportano talvolta una DateCreated nel passato o nel futuro rispetto al momento reale di generazione.

Come correggere

  1. Controlla la selezione del periodo di esportazione nell'ERP: la maggior parte dei problemi viene dallo scegliere il mese di inizio/fine sbagliato.
  2. Se le date sono corrette e solo FiscalYear è errato, modifica l'impostazione dell'anno fiscale dell'azienda nell'ERP e riesporta. Per invii occasionali, l'editor inline può correggere FiscalYear direttamente nella pagina del risultato della validazione.
  3. Se DateCreated è nel futuro o prima di EndDate, sistema l'orologio di sistema dell'ERP e riesporta, oppure usa l'editor inline per il file immediato.

L'anomalia combinata header.dates.range (StartDate vs EndDate) non è modificabile come singolo campo: correggi StartDate o EndDate separatamente con l'editor inline, oppure riesporta.

Correlato

Altre regole