header.dates
Datas do cabeçalho: StartDate, EndDate, FiscalYear, DateCreated
Invariantes temporais que a AT impõe no bloco Header do SAF-T.
O que a AT verifica
O bloco Header do ficheiro SAF-T descreve o período que o ficheiro cobre e quando foi gerado. A AT impõe algumas invariantes sobre estas datas:
| Campo | Restrição |
|---|---|
StartDate | A primeira data coberta pelo ficheiro. |
EndDate | Não pode ser anterior a StartDate (um período de um só dia é válido). |
FiscalYear | O ano de StartDate, ou o ano anterior quando o ano fiscal não coincide com o ano civil (por exemplo, de fevereiro a janeiro). |
DateCreated | Deve ser igual ou posterior a EndDate: não se pode gerar um ficheiro antes do fim do período que cobre. |
Um exemplo correto
O ficheiro mensal de faturação de setembro de 2026, gerado a 3 de outubro por uma empresa cujo ano fiscal coincide com o ano civil:
<Header>
...
<FiscalYear>2026</FiscalYear>
<StartDate>2026-09-01</StartDate>
<EndDate>2026-09-30</EndDate>
...
<DateCreated>2026-10-03</DateCreated>
...
</Header>
Todas as datas usam o formato YYYY-MM-DD. Para uma empresa cujo ano fiscal vai de abril a março, o ficheiro de janeiro de 2027 continuaria a indicar FiscalYear 2026, e o SAFTCheck assinala isso como informação e não como erro.
As datas do cabeçalho definem também o período em que todos os documentos do ficheiro se devem enquadrar: consulte documentos fora do período do cabeçalho.
Sub-regras que o SAFTCheck aplica
header.dates.range: dispara quandoStartDateé posterior aEndDate.header.dates.fiscal_year_previous: oFiscalYearé o ano anterior ao deStartDate: correto num ano fiscal que não coincide com o ano civil, um erro nos restantes casos (informação).header.dates.fiscal_year_mismatch: oFiscalYearé qualquer outro ano (aviso).header.dates.created_before_end: dispara quandoDateCreated < EndDate(aviso; a AT ainda pode aceitar).header.dates.future_end: dispara quandoEndDateestá no futuro (aviso).
Erros comuns
- Mudança de ano. Um ficheiro de janeiro com
FiscalYear=2025masStartDate=2026-01-01, de uma empresa cujo ano fiscal coincide com o ano civil. O ERP mudou o ano num campo mas não no outro. - Unidade de período errada. Submeter um trimestre quando a AT espera um mês, ou vice-versa. As datas declaram a unidade; o desencontro com a janela de submissão é uma verificação separada do lado da AT.
- DateCreated definido em testes. Ficheiros exportados durante a configuração do ERP trazem por vezes uma
DateCreatedno passado ou no futuro em relação ao momento em que foram efetivamente gerados.
Como corrigir
- Verifique a seleção do período de exportação no ERP: a maioria dos problemas vem de escolher o mês de início/fim errado.
- Se as datas estão certas e só o FiscalYear está mal, edite a definição de ano fiscal da empresa no ERP e volte a exportar. Para submissões pontuais, o editor inline consegue corrigir
FiscalYeardiretamente na página do resultado da validação. - Se
DateCreatedestá no futuro ou antes deEndDate, corrija o relógio do sistema do ERP e volte a exportar, ou use o editor inline para o ficheiro imediato.
O aviso combinado header.dates.range (StartDate vs EndDate) não é editável como campo único: corrija StartDate ou EndDate individualmente com o editor inline, ou volte a exportar.
Relacionado
- Editor inline: corrigir FiscalYear / EndDate / DateCreated diretamente no ficheiro.
- Documentos fora do período do cabeçalho
- Prazo de submissão do SAF-T (PT)
- SAF-T em Portugal: o que é, quem submete, prazos e rejeições