El campo y lo que comprueba la AEAT
El campo se llama FechaHoraHusoGenRegistro y guarda fecha, hora y huso del momento en que el sistema generó el registro, con la forma AAAA-MM-DDThh:mm:ss más el desfase horario. El documento de validaciones de la AEAT dice que tiene que ser menor o igual que la fecha del sistema de la AEAT, admitiendo un margen de error. Si lo supera, devuelve un aviso sin rechazo.
El texto del 2004 en la lista de la AEAT es «El valor del campo FechaHoraHusoGenRegistro debe ser la fecha actual del sistema de la AEAT, admitiéndose un margen de error de:» y termina ahí: la lista no publica cuántos segundos o minutos son ese margen.

Los cuatro códigos de este campo
| Código | Texto de la AEAT | Efecto |
|---|---|---|
| 2004 | El valor del campo FechaHoraHusoGenRegistro debe ser la fecha actual del sistema de la AEAT, admitiéndose un margen de error de: | Aceptado; la AEAT no pide subsanar. |
| 1243 | Error técnico al obtener el cálculo de la fecha del huso horario. | Rechaza el registro por un fallo técnico de la AEAT. |
| 1244 | El campo FechaHoraHusoGenRegistro tiene un formato incorrecto. | Rechaza el registro. |
| 1268 | La longitud del campo FechaHoraHusoGenRegistro no cumple con las especificaciones. | Rechaza el registro. |
En su lista de errores admisibles, la AEAT marca este caso como uno de los dos que no hace falta subsanar. El otro es la ClaveRegimen vacía con el impuesto IPSI.
De dónde sale la hora en Odoo
El módulo toma el momento en que generó el registro de facturación, al publicar la factura, con su desfase horario. Ese momento queda guardado y no se puede modificar después, igual que la huella, porque forma parte de lo que se encadena. El formato lo arma el propio módulo siempre igual, así que un 1244 o un 1268 con un envío de nuestro módulo no debería aparecer: si lo ves, mándanoslo.
Para el 2004, la pregunta es si el reloj del servidor de Odoo iba adelantado cuando se publicó la factura. El módulo trae un cron, Verifactu: Clock Drift Check, que cada 1 hora compara la hora de Odoo con la de su base de datos PostgreSQL, y un botón para hacerlo cuando quieras. No la compara con ninguna hora externa: si Odoo y la base de datos están en la misma máquina, o van adelantados los dos, no avisa. La hora real se comprueba contra un servidor NTP.

Qué hacer en cada caso
- Con un 2004, nada sobre la factura: está registrada. Pide a quien administre el servidor que compare su hora con un servidor NTP y la sincronice si va adelantada. Check Clock Drift no sirve para esto: solo compara Odoo con su base de datos.
- Con un 1243, espera: es un error técnico del lado de la AEAT y la cola ya reintenta sola, con esperas de 2 minutos a 12 horas, hasta el sexto intento.
- Con un 1244 o un 1268, escríbenos a comercial@flexigobe.com con la respuesta del envío.
En Odoo, un 2004 deja el registro como «Aceptado con errores (subsanar)», la misma etiqueta de todos los códigos 2xxx. Para este código en concreto, la AEAT dice que no hace falta subsanar: puedes dejarlo así.
¿Un reloj atrasado da error?
La regla de la AEAT solo mira si tu hora es mayor que la suya más el margen. Un registro con la hora por detrás no salta por este control.
Sigue leyendo
Comprobado en el código del módulo (versión 20.0) y en las fuentes enlazadas
Fuentes
- www.agenciatributaria.es/static_files/AEAT_Desarrolladores/EEDD/IVA/VERI-FACTU/Validacione
- Código del módulo: flexigo_spain_verifactu 20.0 (aa2ea3d2): models/verifactu_aeat_client.py
- Código del módulo: flexigo_spain_verifactu 20.0 (aa2ea3d2): models/verifactu_cola_envio.py
- Código del módulo: flexigo_spain_verifactu 20.0 (aa2ea3d2): models/verifactu_registro.py
- prewww2.aeat.es/static_files/common/internet/dep/aplicaciones/es/aeat/tikeV1.0/cont/ws/err
- Código del módulo: flexigo_spain_verifactu 20.0 (aa2ea3d2): models/verifactu_cadena.py
