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.

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 :
- À la validation de la facture Son enregistrement de facturation est créé et ne change plus.
- Au passage suivant de la file Chaque enregistrement en attente est transformé en XML et validé par rapport au schéma.
- 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é.
- 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.

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
Vérifié dans le code du module (version 20.0) et dans les sources citées
Sources
- www.agenciatributaria.es/static_files/AEAT_Desarrolladores/EEDD/IVA/VERI-FACTU/Validacione
- Code du module : flexigo_spain_verifactu 20.0 (aa2ea3d2): models/verifactu_aeat_client.py
- Code du module : flexigo_spain_verifactu 20.0 (aa2ea3d2): data/verifactu_crons.xml
- Code du module : flexigo_spain_verifactu 20.0 (aa2ea3d2): models/verifactu_cola_envio.py
- Code du module : flexigo_spain_verifactu 20.0 (aa2ea3d2): models/verifactu_registro.py
- prewww2.aeat.es/static_files/common/internet/dep/aplicaciones/es/aeat/tikeV1.0/cont/ws/err
- Code du module : flexigo_spain_verifactu 20.0 (aa2ea3d2): models/verifactu_cadena.py
