Sandbox sobre la preproducción de la AEAT · sin tarjeta · Primera factura en 5 minutos
verifactu.co

Control de flujo · art. 16

TiempoEsperaEnvio: el control de flujo

Hacienda te dice cuántos segundos esperar antes del siguiente envío. Ignorarlo no da un error claro: te deja sin servicio en hora punta, que es justo cuando no puedes permitírtelo.

¿Qué es TiempoEsperaEnvio y qué pasa si no se respeta?

Es el campo de la respuesta de la AEAT que indica cuántos segundos esperar antes del siguiente envío, como parte del control de flujo del artículo 16. Ignorarlo provoca cortes de servicio en los momentos de más volumen.

El valor hay que persistirlo, no guardarlo en memoria —el siguiente envío puede hacerlo otro proceso—, y aplicarlo por canal de envío, no por factura.

Fuente: Real Decreto 1007/2023, de 5 de diciembre · Orden HAC/1177/2024, de 17 de octubre

01 Qué es El artículo 16

Cada respuesta de la AEAT trae un campo TiempoEsperaEnvio: los segundos que debes esperar antes del siguiente envío. Es el control de flujo con el que Hacienda protege su servicio, y no es opcional.

En la respuesta
<RespuestaRegFactuSistemaFacturacion>
  <EstadoEnvio>Correcto</EstadoEnvio>

  <!-- Segundos que hay que esperar antes del -->
  <!-- SIGUIENTE envío. No es una sugerencia. -->
  <TiempoEsperaEnvio>60</TiempoEsperaEnvio>
</RespuestaRegFactuSistemaFacturacion>
Ignorarlo no da un error elegante ni un mensaje que explique nada: da rechazos y cortes justo en hora punta, que es cuando más facturas tienes. Es de los fallos que peor se diagnostican porque en desarrollo, con poco volumen, nunca se manifiesta.
02 Dónde se falla Tres formas
01

Guardarlo en memoria

El siguiente envío puede hacerlo otro worker, otro proceso o la petición de otro usuario. Si el valor vive en memoria, ese otro no se entera y envía igual. Hay que persistirlo.

02

Aplicarlo por factura en vez de por cuenta

El control de flujo es del canal, no de la factura. Diez procesos esperando cada uno «su» tiempo por separado siguen mandando diez veces más de lo permitido.

03

Asumir un valor fijo

El valor lo decide la AEAT y puede cambiar según su carga. Cablear 60 s funciona hasta el día que pide más.

Leerlo con un valor por defecto sensato
// El valor hay que PERSISTIRLO, no guardarlo en memoria:
// si el siguiente envío lo hace otro proceso, otro worker
// u otra petición, en memoria no se entera.

public static function esperaFlujo(?string $tiempoEsperaEnvio, int $porDefecto = 60): int
{
    $v = (int) trim((string) $tiempoEsperaEnvio);
    return $v > 0 ? $v : $porDefecto;
}

// Sin dato utilizable se espera 60 s. Esperar de más
// retrasa; esperar de menos te deja sin servicio.
03 Reintentos Qué reintentar y cuánto

El control de flujo dice cuándo puedes enviar. La política de reintentos dice si merece la pena volver a intentarlo. Son cosas distintas y se confunden a menudo.

Respuesta de la AEATClasificación¿Se reintenta?
CorrectoaceptadoNo hace falta
AceptadoConErroresaceptado con erroresNo: se aceptó. Pero hay que mirarlo — por qué
IncorrectorechazadoNo. Es de contenido: dará el mismo error siempre
Sin respuesta útil, red, timeouttransitorio, con espera creciente
La política real
// Espera creciente: 5 · 3^(n-1) minutos, con tope de un día.
return (int) min(5 * (3 ** max(0, $intentos - 1)), 1440);

// La secuencia real, ejecutada:
//   1er fallo →   5 min
//   2º       →  15 min
//   3º       →  45 min
//   4º       → 135 min  (2,3 h)
//   5º       → 405 min  (6,8 h)
//   6º       → se abandona y se marca «error»
//
// Ventana total: 605 min ≈ 10 horas de reintentos
// antes de pedir que alguien lo mire.
La distinción que lo gobierna todo: reintentar un rechazo de contenido —un NIF que no cuadra con el censo, una razón social equivocada— no lo arregla, solo lo esconde detrás de una cola que gira en vacío. Y no reintentar un fallo transitorio deja la factura colgada sin que nadie se entere.
FAQ Preguntas Respuestas directas
¿Qué es TiempoEsperaEnvio en VeriFactu?

Es el campo de la respuesta de la AEAT que indica cuántos segundos hay que esperar antes del siguiente envío. Forma parte del control de flujo del artículo 16 y es obligatorio respetarlo.

¿Qué pasa si ignoro el control de flujo?

Que en hora punta te quedas sin servicio. No da un error que explique la causa: se traduce en rechazos y cortes justo cuando más volumen de facturación tienes, y en desarrollo con poco volumen nunca se reproduce.

¿El tiempo de espera es por factura o por cuenta?

Por canal de envío, no por factura. Si diez procesos esperan cada uno «su» tiempo por separado, entre todos siguen enviando muy por encima de lo permitido.

¿Qué errores de la AEAT hay que reintentar?

Solo los transitorios: fallos de red, timeouts o ausencia de respuesta útil. Un rechazo de contenido (estado Incorrecto) dará el mismo error las veces que se mande, así que reintentarlo solo esconde el problema.

¿Cuánto tiempo se reintenta antes de rendirse?

En verifactu.co, cinco reintentos con espera creciente de 5, 15, 45, 135 y 405 minutos: unas diez horas en total. Superado eso, el registro se marca como error para que alguien lo revise, en lugar de seguir girando en vacío.

Última revisión normativa: Especificaciones de huella AEAT v0.1.2 Revisado por el equipo técnico de verifactu.co