Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Errores (relacionados con al AEAT) (https://www.clubdelphi.com/foros/forumdisplay.php?f=78)
-   -   Error 2004 en VeriFactu: FechaHoraHusoGenRegistro fuera de sincronización (https://www.clubdelphi.com/foros/showthread.php?t=97539)

francescofera 18-06-2025 16:04:36

Error 2004 en VeriFactu: FechaHoraHusoGenRegistro fuera de sincronización
 
Hola a todos,

Estoy teniendo dificultades con el siguiente error de validación por parte de la AEAT:

2004 - El valor del campo FechaHoraHusoGenRegistro debe ser la fecha actual del sistema de la AEAT, admitiéndose un margen de error de: 240 segundos.

Contexto de la implementación:
- Es un sistema C# .NET
- Utilizamos un sistema encolado que envía los registros cada 60 segundos, y en el caso concreto que generó este error, el envío al WebService ocurrió solo unos segundos después.
- El valor de `FechaHoraHusoGenRegistro` se genera justo en el momento de la creación del registro
- El valor enviado tenía este formato (ISO 8601 con zona horaria): 2025-06-18T12:51:58+02:00

Según la documentación official:
Cita:

"Se validará que la FechaHoraHusoGenRegistro sea menor o igual que la fecha del sistema de la AEAT, admitiéndose un margen de error. En caso de superar el umbral, se devolverá un aviso de error."
Dudas:
1. ¿Debemos enviar siempre la hora exacta del momento del envío a AEAT y no la del momento de creación del registro?
2. ¿Es más seguro convertir la hora a UTC (`+00:00`) para evitar malinterpretaciones con el huso horario?
3. ¿Alguien ha solucionado este error sincronizando el servidor NTP o ajustando manualmente el margen?

Agradezco cualquier sugerencia o experiencia relacionada con este problema

Gracias por adelantado

Jarogo08 18-06-2025 17:05:31

Casualmente, ese es el único error que se excepciona de ser subsanado.


De todas maneras, estaría bien saber porque te da. En el ejemplo que pones, el registro se crea a las 12:51:58. ¿realmente no era esa hora? ¿la hora del pc estaba atrasada o adelantada? Porque sino no debería darte.

francescofera 18-06-2025 17:36:13

Gracias por tu respuesta, justo por eso me desconcierta más este error.

La hora del sistema es totalmente correcta. El valor de FechaHoraHusoGenRegistro era:
2025-06-18T12:51:58+02:00
y fue generado literalmente segundos antes de ser enviado a la AEAT (mi sistema tiene una cola que lo transmite automáticamente en menos de 10 segundos).

Lo que más me confunde es la diferencia entre:

Cita:

El mensaje del error 2004, que dice que el campo debe ser la fecha actual del sistema de la AEAT, lo cual suena como si esperaran una coincidencia casi exacta.
vs.

Lo que dice la documentación técnica, es decir:

Cita:

"Se validará que la FechaHoraHusoGenRegistro sea menor o igual que la fecha del sistema de la AEAT, admitiéndose un margen de error."
y también:

Cita:

"El huso horario es el que está usando el sistema informático de facturación en el momento de generación del registro de facturación."
Así que no me queda claro si:

el WebService realmente respeta el huso horario informado (como +02:00)

o si internamente espera que se le envíe el valor en UTC (con sufijo Z) o huso horario +1:00.

Estoy considerando hacer una prueba forzando UtcNow con zona Z para descartar eso, pero no me parece consistente con lo que la documentación dice.

¿A ti te ha pasado algo parecido? ¿Tienes idea de cómo lo interpreta realmente la AEAT?

rci 18-06-2025 17:49:05

Revisa si en este hilo encuentras alguna información que pueda ayudarte.

https://www.clubdelphi.com/foros/showthread.php?t=97445

ermendalenda 18-06-2025 17:50:40

Cita:

Empezado por francescofera (Mensaje 565666)
Gracias por tu respuesta, justo por eso me desconcierta más este error.

La hora del sistema es totalmente correcta. El valor de FechaHoraHusoGenRegistro era:
2025-06-18T12:51:58+02:00
y fue generado literalmente segundos antes de ser enviado a la AEAT (mi sistema tiene una cola que lo transmite automáticamente en menos de 10 segundos).

Lo que más me confunde es la diferencia entre:


vs.

Lo que dice la documentación técnica, es decir:


y también:


Así que no me queda claro si:

el WebService realmente respeta el huso horario informado (como +02:00)

o si internamente espera que se le envíe el valor en UTC (con sufijo Z) o huso horario +1:00.

Estoy considerando hacer una prueba forzando UtcNow con zona Z para descartar eso, pero no me parece consistente con lo que la documentación dice.

¿A ti te ha pasado algo parecido? ¿Tienes idea de cómo lo interpreta realmente la AEAT?

Es raro ese error nunca me ha dado sin haber xometido un error en la programación del control de flujos.
Revisa que la hora de tu sistema esté correctamente sincronizada con un servicio fiable. Algunos servicios de sincronizacion juegan malas pasadas y te ponen horas +-2 horas de diferencia en tu sistema. Supongo que además la hora que has puesto no le habrás quitado las 2 horas, que es una función que te la tal que así.

bmfranky 18-06-2025 19:05:54

Hola, ese error en c# se origina al enviarle el DateTime, incluye los milisegundos, hemos posteado bastante al respecto, revisa lo.


Código:

public System.DateTime dateTimeSinMilisegundos(System.DateTime currentDateTime)
        {
          return new DateTime(currentDateTime.Year,  currentDateTime.Month, currentDateTime.Day, currentDateTime.Hour,  currentDateTime.Minute, currentDateTime.Second, DateTimeKind.Local);
        }

Esto quita los milisegundos.

Jarogo08 18-06-2025 22:17:04

Si es cierto lo que puso en el primer post y el XML realmente llevaba el valor que dice, lo tiene bien (y siempre que realmente fuese esa hora, claro... que también confirmó que si):


Cita:

Empezado por francescofera (Mensaje 565662)
El valor enviado tenía este formato (ISO 8601 con zona horaria): 2025-06-18T12:51:58+02:00


Por ejemplo, este es el último registro que envié hoy, llevaba este valor y entró sin problemas:

2025-06-18T18:08:09+02:00

ermendalenda 19-06-2025 04:21:36

Cita:

Empezado por Jarogo08 (Mensaje 565680)
Si es cierto lo que puso en el primer post y el XML realmente llevaba el valor que dice, lo tiene bien (y siempre que realmente fuese esa hora, claro... que también confirmó que si):




Por ejemplo, este es el último registro que envié hoy, llevaba este valor y entró sin problemas:

2025-06-18T18:08:09+02:00


Si tienes el registro de la respuesta se puede analizar y si eso es así se lo puedes mandar a verifactu que miren donde tienen el problema

edari 19-06-2025 09:25:09

A mí este error me sale cuando tengo un número grande de facturas para subir (p.e. 300) y el tiempo entre la primera y la última es mayor de los famosos 240 segundos, así que he tenido que hacer "paquetes" de hasta 180 segundos, dedicar el minuto restante a generar el xml con las facturas, subirlo y recoger la respuesta.


Y a partir de ahí esperar hasta el siguiente ciclo.

Noe277 01-07-2025 12:41:26

Error
 
Si da este error como se subsana ?

gcqZW 01-07-2025 12:53:41

No se subsana.


La franja horaria es GMT +2. Ahora son las 11:29:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi