Lo que la AEAT no puede leer
| Código | Texto de la AEAT |
|---|---|
| 4103 | Se ha producido un error inesperado al parsear el XML. |
| 4119 | Error al informar caracteres cuya codificación no es UTF-8. |
| 4135 | Esta URL no puede ser utilizada mediante GET. |
| 4136 | No se ha enviado el nodo RegistroAlta o el anterior al nodo RegistroAlta no es correcto. |
| 4137 | No se ha enviado el nodo RegistroAnulacion o el anterior al nodo RegistroAnulacion no es correcto. |
| 4138 | Petición vacía en el XML o encoding incorrecto. |
Los seis están en el apartado de la lista que rechaza el envío completo. Los otros dos códigos de esta página rechazan solo un registro: el 1100, Valor o tipo incorrecto del campo., el más genérico de la lista, y el 1251, para un IDVersion incorrecto.

Cómo envía Odoo cada petición
El módulo manda cada envío como un POST SOAP 1.1 por TLS mutuo, con el certificado de la empresa. El cuerpo es XML en UTF-8, con su declaración de codificación, y la cabecera HTTP lo anuncia como text/xml en UTF-8. Los textos se normalizan a la forma NFC, para que una misma letra con tilde llegue siempre con los mismos bytes. Cada registro lleva IDVersion 1.0, y antes de salir pasa por la validación contra el esquema oficial que lleva el módulo.
Con esa forma de enviar, los fallos de esta página no tendrían que verse: no hay GET, no hay peticiones vacías y la codificación es siempre la misma.
El caso del GET
El 4135 es el único de esta página que se ve a menudo, y tiene una explicación muy sencilla: alguien ha abierto la dirección del servicio de la AEAT en un navegador. Un navegador pide las páginas con GET, y el servicio solo acepta POST. Si lo ves al probar la dirección a mano, no indica ningún problema con tus envíos: la cola de Odoo nunca pide con GET.

Qué hacer
- Con un 4103, 4119 o 4138 en un envío del módulo, guarda la respuesta del campo Raw Response y escríbenos a comercial@flexigobe.com: queremos ver qué factura iba en ese envío.
- Con un 4136 o 4137, igual. El módulo construye esos nodos para cada alta y cada anulación.
- Con un 1100, el mensaje no dice qué campo: la respuesta completa sí suele dejar ver a qué registro afecta.
Cuando sepamos la causa, los envíos en Failed se reenvían desde Envío a AEAT › Errores AEAT con Reintentar Selección. Los del 1100 y el 1251 la cola ya los reintenta, pero con los mismos datos.
Los códigos de esta página, con el texto de la AEAT
Cada código con su texto literal, tal como lo da la lista de errores de la AEAT:
| Código | Texto de la AEAT |
|---|---|
| 4103 | Se ha producido un error inesperado al parsear el XML. |
| 4119 | Error al informar caracteres cuya codificación no es UTF-8. |
| 4135 | Esta URL no puede ser utilizada mediante GET. |
| 4136 | No se ha enviado el nodo RegistroAlta o el anterior al nodo RegistroAlta no es correcto. |
| 4137 | No se ha enviado el nodo RegistroAnulacion o el anterior al nodo RegistroAnulacion no es correcto. |
| 4138 | Petición vacía en el XML o encoding incorrecto. |
| 1100 | Valor o tipo incorrecto del campo. |
| 1251 | El valor del campo IdVersion tiene un valor incorrecto |
Los errores de esquema, cuando falta un campo obligatorio, tienen su propia página: el error 4102.
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): data/verifactu_error_catalogue.xml
- prewww2.aeat.es/static_files/common/internet/dep/aplicaciones/es/aeat/tikeV1.0/cont/ws/err
