Aller au contenu principal
VeriFactu

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

L'erreur 4102 est l'erreur de structure par excellence : il manque au XML reçu par l'AEAT un champ que le schéma exige. Comme il s'agit d'un défaut structurel, l'AEAT rejette la requête complète, avec toutes les factures qu'elle contenait. Avec notre module, vous la verrez normalement dans Odoo avant tout envoi, et non en réponse de l'AEAT.

FlexigoTech · Responsable : Víctor Gómez · Mis à jour le 4 novembre 2026

L'essentiel

Module
VeriFactu
Versions
Odoo 17, 18, 19 et 20
Vérifié
dans le code du module, version 20.0 · dans les sources citées à la fin
Lecture
3 min

Pourquoi elle fait tomber tout l'envoi

Le document de validations de l'AEAT distingue trois types de contrôles : structurels, syntaxiques et métier. Les contrôles structurels vérifient que le XML respecte le schéma, avec ses balises obligatoires, et lorsqu'ils échouent, le rejet concerne le message entier. Ce rejet arrive sous forme de SoapFault et aucune facture de la requête n'est enregistrée, pas même celles qui étaient correctes.

Le texte de la liste officielle est sans ambiguïté : « El XML no cumple el esquema. Falta informar campo obligatorio. » (« Le XML ne respecte pas le schéma. Un champ obligatoire n'est pas renseigné. ») Il figure dans la première section, celle des codes qui rejettent l'envoi complet.

Fiche du code 4102 de VeriFactu
Le 4102 en rouge : il rejette la requête complète et, dans la file d'attente du module, laisse l'envoi en Failed.

Ce que fait le module pour qu'elle n'arrive pas

Un seul enregistrement mal formé entraînerait avec lui tous les autres du même envoi. Pour l'éviter, le module valide chaque enregistrement par rapport au schéma officiel de l'AEAT avant de l'envoyer. Il embarque une copie de ce schéma, le fichier SuministroLR.xsd avec ses dépendances, et le parcours est le suivant :

  1. À la validation de la facture Son enregistrement de facturation est créé et ne change plus.
  2. Au passage suivant de la file Chaque enregistrement en attente est transformé en XML et validé par rapport au schéma.
  3. Si un enregistrement ne le respecte pas Il est marqué comme rejeté dans Odoo avec le message du schéma, sans code AEAT, et n'est pas envoyé.
  4. Le reste Part vers l'AEAT dans la même requête, sans l'enregistrement défectueux.

Ainsi, un enregistrement défectueux n'entraîne pas avec lui les factures valides qui voyagent avec lui.

Comment vous la verrez dans Odoo

Dans la file d'envoi, l'enregistrement bloqué apparaît en Failed avec le message du validateur comme dernière erreur, à la place d'un code à quatre chiffres. Ce message nomme l'élément manquant ou superflu, ce qui vous indique précisément d'où vient le problème. Dans la liste des enregistrements de facturation, son statut est « Rechazado AEAT », même si l'AEAT ne l'a jamais reçu.

File d'envoi à l'AEAT regroupée par statut
La file regroupée par statut : les envois en Failed sont ceux qui ne seront pas relancés seuls. Capture d'Odoo 20 avec des données de démonstration ; les réponses de l'AEAT sont simulées.

Avant même le schéma, certaines données sont indispensables à la construction du XML, et le module vous l'indique avec son propre message :

  • Company … has no NIF for Veri*Factu. lorsque la société n'a pas de NIF.
  • Record … has no tax breakdown (Desglose) to declare. lorsque l'enregistrement n'a pas de ventilation des taxes.

Si le 4102 vient de l'AEAT

Si la réponse contenant le 4102 provient de l'AEAT elle-même, l'enregistrement a passé la validation locale et l'AEAT l'a rejeté avec son propre schéma. L'explication la plus probable est que le schéma de l'AEAT et la copie embarquée dans le module ne correspondent plus. Dans ce cas, renvoyer ne sert à rien : écrivez à comercial@flexigobe.com avec la réponse complète, le champ Raw Response de la file, afin que nous vérifiions la copie du schéma.

Puis-je corriger la donnée et relancer ?

Cela dépend de l'endroit où se trouve la donnée. L'en-tête est construit à chaque envoi à partir des données de la société à ce moment-là : si l'erreur portait sur le nom, corrigez-le et utilisez Reintentar Selección dans Errores AEAT. Si elle portait sur le NIF, la correction ne suffit pas, car le NIF est aussi entré dans l'empreinte de chaque facture lors de sa validation, et le renvoi revient avec le code 2000. Si la donnée se trouve dans l'enregistrement de la facture, une relance enverra la même chose et échouera à nouveau. Dans ces deux cas, écrivez-nous.

La facture est-elle perdue ?

Non. L'enregistrement reste dans Odoo, chaîné, et la file traite les envois en attente toutes les 1 minute dès que le problème est résolu.

À lire aussi

Erreurs VeriFactu avec le format d'envoi : XML illisible, UTF-8 et requêtes videsErreurs VeriFactu du format d'envoi (4103, 4119, 4135 à 4138, 1100, 1251) : XML illisible, UTF-8, GET ou requêtes vides, et comment Odoo envoie.Erreurs 4113 et 4114 de VeriFactu : trop d'enregistrements dans un même envoiLes erreurs 4113 et 4114 de VeriFactu : trop d'enregistrements dans un envoi. La limite de 1000 par requête, celle de chaque bloc et comment Odoo 17 à 20 la respecte.Erreur 4134 de VeriFactu : « Servicio no activo », ce qui arrive à vos factures et comment les renvoyerCe que signifie l'erreur 4134 de l'AEAT dans VeriFactu, pourquoi elle rejette l'envoi entier et comment renvoyer vos factures depuis Odoo 17, 18, 19 et 20.
Vérifié dans le code du module (version 20.0) et dans les sources citées

Sources