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

Los seis rechazos de la AEAT que te vas a comer (y cómo evitarlos)

No son los errores del manual. Son los que aparecen cuando ya crees que lo tienes terminado y Hacienda te devuelve un código de cuatro cifras sin explicación.

1110 · «El productor del SIF no consta»

Este llega cuando declaras el bloque SistemaInformatico. La AEAT no valida el NIF por un lado y el nombre por otro: los contrasta juntos contra su censo. Si tu empresa figura en Hacienda como KRAAKVC OU y tú envías tu marca comercial, el par no cuadra y el envío se cae entero.

El campo NombreRazon del sistema informático es la razón social del fabricante del software, no el nombre del programa. El nombre del programa va en NombreSistemaInformatico, que es otro campo distinto. Confundirlos es el camino más corto al 1110.

Truco Si no estás seguro de cómo consta tu empresa en el censo, léelo del titular del propio certificado: por definición coincide con Hacienda. Quita el sufijo « - NIF» y tienes el nombre exacto.

1177 · «Identificador del sistema informático incorrecto»

El campo IdSistemaInformatico admite dos caracteres. Ni tres, ni seis, ni un identificador bonito tipo VFCO01. Dos.

Y hay una confusión habitual que conviene deshacer: ese identificador no te lo asigna la AEAT. Lo eliges tú y lo haces constar en tu declaración responsable. Nadie te va a mandar un código; lo inventas y lo declaras.

4104 · «Emisor no identificado»

El hermano del 1110, pero aplicado al obligado a emisión. La razón social del emisor tiene que ser exactamente la del censo de Hacienda: la que aparece en sus modelos fiscales, no el rótulo del local ni el nombre con el que factura de cara al público.

Es el motivo número uno de rechazo en producción, porque el dato lo introduce el usuario final en su ficha y nadie lo valida. Si tu software deja escribir el nombre a mano, avisa en la propia interfaz de que ahí va el nombre fiscal.

El formato de los importes (este no avisa)

Los tres anteriores son ruidosos: te rechazan el envío y te enteras. Este no.

La huella se calcula sobre una cadena de texto donde los importes van escritos de una forma concreta. El XML que remites escribe esos mismos importes. Si los dos formatos no coinciden —por ejemplo, la huella sobre 12 y el XML declarando 12.00— la AEAT recalcula la huella desde el XML, no le cuadra con la que le has enviado, y marca el registro como «Aceptado con errores».

No se pierde. No falla nada visible. Simplemente queda un defecto anotado en Hacienda, factura a factura, hasta que alguien lo mire.

Regla Escribe el importe con dos decimales siempre, en la huella y en el XML. El documento de la AEAT tolera «una o dos posiciones decimales»; cero posiciones se sale de esa frase, y no merece la pena apurar el margen en algo irreversible.

La cadena bifurcada (este tampoco avisa)

Registrar una factura es leer el último registro de la cadena, calcular la huella nueva usando la suya, e insertar. Tres pasos.

Si dos facturas del mismo emisor se registran a la vez —dos puestos de TPV, una pestaña duplicada, un cron solapándose con un usuario— las dos leen el mismo registro anterior y las dos se encadenan a él. La cadena se bifurca.

Y aquí está lo importante: la huella es irreversible. No se recalcula. Para arreglarlo habría que rehacer el histórico entero, cosa que no se puede hacer con registros ya remitidos. El único momento de evitarlo es antes de que ocurra.

# Serializar la escritura en la cadena, por emisor
SELECT GET_LOCK('cadena_' + emisor_id, 10);
  -- leer último registro
  -- calcular huella
  -- insertar
SELECT RELEASE_LOCK('cadena_' + emisor_id);

Un SELECT … FOR UPDATE sobre la fila anterior parece la solución natural, pero tiene un agujero: cuando el emisor todavía no tiene ningún registro no hay fila que bloquear, y ese es justamente uno de los casos en los que dos altas simultáneas se pisan.

El control de flujo del artículo 16

En cada respuesta, la AEAT te dice cuántos segundos debes esperar antes del siguiente envío (TiempoEsperaEnvio). No es una sugerencia.

Si lo ignoras y sigues enviando, te encuentras con que el servicio deja de atenderte justo cuando más lo necesitas: en hora punta, con la cola llena. Guarda ese valor y respétalo, y diseña la cola asumiendo que a veces habrá que esperar.

Y uno de propina: el sello temporal

El campo FechaHoraHusoGenRegistro entra en el cálculo de la huella y tiene que ir en ISO-8601 con huso horario (2026-08-04T11:10:20+02:00). Sin el huso, la huella que calculas y la que calcula Hacienda no coinciden.

Más sutil: ese sello hay que guardarlo. Cuando montes el XML tienes que escribir exactamente el mismo instante que usaste al calcular la huella. Si lo regeneras al enviar —aunque sean dos segundos después— ya no cuadra.

¿Te toca integrarlo?

Nosotros ya nos hemos comido los rechazos. Puedes ahorrártelos.

Seguir leyendo

Técnico

El QR de la factura: qué lleva dentro y dónde ponerlo

Contenido exacto del código QR de VeriFactu, la leyenda que lo acompaña y los errores típicos al imprimirlo.

Técnico

Qué puede comprobar realmente quien escanea tu factura

Qué información devuelve el validador de la AEAT, qué no devuelve, y para qué sirve eso en una inspección o ante un cliente.