Saltar al contenido principal
VeriFactu

Error 4102 de VeriFactu: «El XML no cumple el esquema. Falta informar campo obligatorio»

El 4102 es el error de estructura por excelencia: al XML que recibe la AEAT le falta un campo que el esquema exige. Como es un fallo estructural, la AEAT rechaza la petición completa, con todas las facturas que llevara. Con nuestro módulo lo normal es verlo antes de que salga nada, en Odoo, y no como respuesta de la AEAT.

FlexigoTech · Responsable: Víctor Gómez · Actualizado el 4 de noviembre de 2026

Lo esencial

Módulo
VeriFactu
Versiones
Odoo 17, 18, 19 y 20
Comprobado
en el código del módulo, versión 20.0 · en las fuentes enlazadas al final
Lectura
3 min

Por qué tumba el envío entero

El documento de validaciones de la AEAT distingue tres tipos de comprobación: estructurales, sintácticas y de negocio. Las estructurales miran que el XML cumpla el esquema, con sus etiquetas obligatorias, y si fallan el rechazo es del mensaje completo. Ese rechazo llega como un SoapFault y no queda registrada ninguna factura de la petición, tampoco las que estaban bien.

El texto de la lista oficial lo dice tal cual: «El XML no cumple el esquema. Falta informar campo obligatorio.» Está en el primer apartado, el de los códigos que rechazan el envío completo.

Tarjeta del código 4102 de VeriFactu
El 4102 en rojo: rechaza la petición completa y, en la cola del módulo, deja el envío en Failed.

Lo que hace el módulo para que no llegue

Un solo registro mal formado arrastraría a todos los demás del mismo envío. Para evitarlo, el módulo valida cada registro contra el esquema oficial de la AEAT antes de mandarlo. Lleva una copia de ese esquema dentro, el fichero SuministroLR.xsd con sus dependencias, y el recorrido es este:

  1. Al publicar la factura Se crea su registro de facturación, que ya no cambia.
  2. En la siguiente vuelta de la cola Cada registro pendiente se convierte en XML y se valida contra el esquema.
  3. Si un registro no lo cumple Se da por rechazado en Odoo con el mensaje del esquema, sin código de la AEAT, y no sale.
  4. El resto Sale a la AEAT en la misma petición, sin el registro malo.

Así, un registro defectuoso no se lleva por delante las facturas buenas que viajan con él.

Cómo lo verás en Odoo

En la cola de envío, el registro detenido aparece en Failed con el mensaje del validador en el último error, en lugar de un código de cuatro cifras. Ese mensaje nombra el elemento que falta o que sobra, que es justo lo que necesitas para saber de dónde viene. En la lista de registros de facturación, su estado es «Rechazado AEAT», aunque la AEAT no llegó a verlo.

Cola de envío a la AEAT agrupada por estado
La cola agrupada por estado: los envíos en Failed son los que no van a reintentarse solos. Captura de Odoo 20 con datos de demostración; las respuestas de la AEAT son simuladas.

Antes incluso del esquema, hay datos sin los que el módulo ni siquiera construye el XML, y te lo dice con su propio mensaje:

  • Company … has no NIF for Veri*Factu. cuando la empresa no tiene NIF.
  • Record … has no tax breakdown (Desglose) to declare. cuando el registro no tiene desglose de impuestos.

Si el 4102 llega de la AEAT

Si la respuesta con el 4102 viene de la propia AEAT, el registro pasó la validación local y la AEAT lo rechazó con su esquema. La explicación razonable es que el esquema de la AEAT y la copia que lleva el módulo ya no coinciden. En ese caso no sirve de nada reenviar: escríbenos a comercial@flexigobe.com con la respuesta completa, el campo Raw Response de la cola, para revisar la copia del esquema.

¿Puedo corregir el dato y reintentar?

Depende de dónde esté el dato. La cabecera se arma en cada envío con los datos de la empresa de ese momento: si el fallo estaba en el nombre, corrígelo y usa Reintentar Selección en Errores AEAT. Si estaba en el NIF, corregirlo no basta, porque el NIF también entró en la huella de cada factura al publicarla y el reenvío vuelve con el 2000. Si el dato está en el registro de la factura, el reintento manda lo mismo y volverá a fallar. En esos dos casos, escríbenos.

¿Se pierde la factura?

No. El registro sigue en Odoo, encadenado, y la cola procesa lo pendiente cada 1 minuto en cuanto el problema se resuelve.

Sigue leyendo

Errores de VeriFactu con el formato del envío: XML ilegible, UTF-8 y peticiones vacíasErrores de VeriFactu del formato del envío (4103, 4119, 4135 a 4138, 1100, 1251): XML ilegible, UTF-8, GET o peticiones vacías, y cómo envía Odoo.Errores 4113 y 4114 de VeriFactu: demasiados registros en un mismo envíoLos errores 4113 y 4114 de VeriFactu: demasiados registros en un envío. El límite de 1000 por petición, el de cada bloque y cómo lo respeta Odoo 17 a 20.Error 4134 de VeriFactu: «Servicio no activo», qué pasa con tus facturas y cómo reenviarlasQué significa el error 4134 de la AEAT en VeriFactu, por qué rechaza el envío entero y cómo reenviar las facturas desde Odoo 17, 18, 19 y 20 sin perder ninguna.
Comprobado en el código del módulo (versión 20.0) y en las fuentes enlazadas

Fuentes