header.dates
Fechas de la cabecera: StartDate, EndDate, FiscalYear, DateCreated
Invariantes temporales que la AT impone sobre el bloque Header del SAF-T.
Qué comprueba la AT
El bloque Header del fichero SAF-T describe el periodo que cubre el fichero y cuándo se generó. La AT impone unas cuantas invariantes sobre estas fechas:
| Campo | Restricción |
|---|---|
StartDate | La primera fecha que cubre el fichero. |
EndDate | No puede ser anterior a StartDate (un periodo de un solo día es válido). |
FiscalYear | El año de StartDate, o el año anterior cuando el ejercicio no coincide con el año natural (por ejemplo, de febrero a enero). |
DateCreated | Debe ser igual o posterior a EndDate: no se puede generar un fichero antes de que termine el periodo que cubre. |
Un ejemplo correcto
El fichero mensual de facturación de septiembre de 2026, generado el 3 de octubre por una empresa cuyo ejercicio coincide con el año natural:
<Header>
...
<FiscalYear>2026</FiscalYear>
<StartDate>2026-09-01</StartDate>
<EndDate>2026-09-30</EndDate>
...
<DateCreated>2026-10-03</DateCreated>
...
</Header>
Todas las fechas usan el formato YYYY-MM-DD. En una empresa cuyo ejercicio va de abril a marzo, el fichero de enero de 2027 seguiría indicando FiscalYear 2026, y SAFTCheck lo señala como información, no como error.
Las fechas del Header también fijan el periodo en el que debe caer cada documento del fichero: consulta documentos fuera del periodo del Header.
Subreglas que aplica SAFTCheck
header.dates.range: se dispara cuandoStartDatees posterior aEndDate.header.dates.fiscal_year_previous:FiscalYeares el año anterior al deStartDate; correcto en un ejercicio que no coincide con el año natural, un error en los demás casos (información).header.dates.fiscal_year_mismatch:FiscalYeares cualquier otro año (aviso).header.dates.created_before_end: se dispara cuandoDateCreated < EndDate(aviso; la AT todavía puede aceptarlo).header.dates.future_end: se dispara cuandoEndDateestá en el futuro (aviso).
Errores comunes
- Cambio de año. Un fichero de enero con
FiscalYear=2025peroStartDate=2026-01-01, de una empresa cuyo ejercicio coincide con el año natural. El ERP cambió el año en un campo pero no en el otro. - Unidad de periodo incorrecta. Enviar un trimestre cuando la AT espera un mes, o al revés. Las fechas declaran la unidad; la incoherencia con la ventana de envío es otra comprobación del lado de la AT.
- DateCreated establecida en pruebas. Los ficheros exportados durante la configuración del ERP a veces traen una
DateCreateden el pasado o en el futuro respecto al momento real de generación.
Cómo corregir
- Revisa la selección del periodo de exportación en el ERP: la mayoría de los problemas vienen de elegir el mes de inicio/fin equivocado.
- Si las fechas están bien y solo FiscalYear está mal, edita el ajuste de año fiscal de la empresa en el ERP y vuelve a exportar. Para envíos puntuales, el editor en línea puede corregir
FiscalYeardirectamente en la página del resultado de la validación. - Si
DateCreatedestá en el futuro o antes deEndDate, ajusta el reloj del sistema del ERP y vuelve a exportar, o usa el editor en línea para el fichero inmediato.
El hallazgo combinado header.dates.range (StartDate frente a EndDate) no se puede editar como un único campo: corrige StartDate o EndDate por separado con el editor en línea, o vuelve a exportar.
Relacionado
- Editor en línea: corrige FiscalYear / EndDate / DateCreated en el propio fichero.
- Documentos fuera del periodo del Header
- Plazo de envío del SAF-T (PT)
- SAF-T en Portugal: qué es, quién lo envía, plazos y rechazos