Ce qu'elle fait à chaque passage
La tâche recherche les chaînes actives et, pour chacune, appelle la vérification d'intégrité. Tout l'essentiel se passe dans cette vérification : elle recalcule l'empreinte de chaque enregistrement et la compare à celle qui a été enregistrée. L'empreinte est un SHA-256 de l'enregistrement chaîné avec le précédent, et l'AEAT la recalcule de son côté : si elle ne correspond pas, elle accepte l'enregistrement avec une erreur à corriger.
La tâche existe dans toutes les branches publiées du module (17.0, 18.0, 19.0 et 20.0), publié sur Odoo Apps pour ces quatre versions. Ce schéma résume la tâche et le menu depuis lequel s'ouvrent les chaînes :

Détails qui ne se voient pas sur la fiche
Elle ne contrôle que les chaînes actives, une par une
La tâche ne parcourt pas toutes les chaînes existantes : elle recherche uniquement les actives et lance la vérification de chacune séparément. Chaque chaîne appartient à une société. Sur la fiche de All Chain States (Asesoría) vous trouvez le champ Company pour savoir de laquelle il s'agit.
Elle lit la chaîne entière à chaque passage
La vérification fait une requête qui rassemble les enregistrements d'ajout et d'annulation de la société et les trie par numéro d'enregistrement. Ensuite elle les parcourt du début à la fin. Le code ne part pas d'un point intermédiaire : chaque passage commence par le premier enregistrement.
Elle recalcule chaque empreinte à partir de ce qui est enregistré
Pour chaque enregistrement d'ajout, le code reconstruit l'empreinte avec ces données enregistrées : NIF de l'émetteur, numéro de série, date d'émission, type de facture (F1 s'il est vide), cotisation totale calculée à partir des bases imposables, montant total, empreinte de l'enregistrement précédent et date et heure de génération avec leur fuseau horaire. Le premier enregistrement part d'une empreinte précédente vide.
Le NIF de l'émetteur est utilisé sans le préfixe ES. Si la société a un NIF propre pour Verifactu, le code le préfère au numéro de TVA général. Un changement dans l'une de ces données après la génération de l'enregistrement fait que l'empreinte recalculée ne correspond plus à celle qui est enregistrée.
Les annulations sont calculées avec d'autres étiquettes
Les enregistrements d'annulation utilisent leur propre formule : ils n'ont ni type de facture, ni cotisation, ni montant, et leurs étiquettes sont celles de la facture annulée. Le code admet aussi les annulations générées avant la version 1.3.4 du module, qui ont été calculées avec les étiquettes des enregistrements d'ajout : si l'empreinte enregistrée correspond à cet ancien calcul, il la tient pour bonne.
Elle s'arrête à la première rupture et prévient
Dès qu'une empreinte enregistrée ne correspond pas à celle recalculée, la vérification s'arrête : elle ne poursuit pas avec les enregistrements suivants de cette chaîne. Elle renvoie combien d'enregistrements elle avait contrôlés jusque-là et le premier enregistrement rompu, avec son numéro d'enregistrement, son numéro de série, l'empreinte attendue et celle qui est enregistrée.
Cette même étape déclenche l'alerte de rupture de chaîne pour la société, avec le numéro d'enregistrement et le numéro de série où la rupture s'est produite. Si toute la chaîne correspond, la vérification renvoie qu'elle a réussi, avec le total des enregistrements contrôlés.
La fréquence est d'une fois par jour, et dans Odoo 17 elle se répète sans fin
La tâche tourne une fois par jour et est active dès l'installation. Dans Odoo 17.0, elle est en plus configurée pour se répéter sans fin.
Si elle semble ne rien faire
Avant de soupçonner la tâche, vérifiez ceci :
- Y a-t-il une chaîne active ? S'il n'y en a aucune, la recherche ne renvoie rien et il n'y a rien à vérifier.
- La tâche est-elle toujours active ? Elle est active dès l'installation, donc si elle ne tourne pas, vérifiez qu'elle est toujours active.
- Que peut-on attendre d'un passage correct ? La tâche ne fait qu'appeler la vérification de chaque chaîne, et une chaîne intègre renvoie qu'elle a réussi avec son total d'enregistrements contrôlés. Une rupture est ce qui déclenche l'alerte de rupture de chaîne.
- Voyez-vous le menu ? Les fiches de chaque chaîne s'ouvrent depuis
Verifactu / SIF › Compliance Records › Chain State. Chaque niveau demande des permissions différentes.

Les permissions du menu, niveau par niveau
Si vous n'avez pas la permission d'un niveau, vous ne voyez pas ce niveau. Voici celles que demande chacun :
| Niveau du menu | Permissions qui l'affichent |
|---|---|
Verifactu / SIF | Accountant, Asesoría Operator, Auditor (read-only), Privacy Officer, SIF Manager |
Compliance Records | Accountant, Auditor (read-only), SIF Manager |
Chain State | Auditor (read-only), SIF Manager |
Avec la seule permission Accountant, on voit les deux premiers niveaux, mais pas Chain State. Si quelqu'un dit qu'il ne trouve pas le menu, regardez d'abord ses permissions.
Pour aller plus loin
Si vous mettez en place Odoo et souhaitez que VeriFactu s'intègre à votre facturation, FlexigoTech déploie Odoo 17, 18, 19 et 20 et développe des connecteurs et des intégrations sur mesure. Vous pouvez voir le module sur sa fiche Odoo Apps.
À lire aussi
Vérifié dans le code du module (version 17.0 et 20.0) et dans les sources citées
Sources
- Code du module : flexigo_spain_verifactu 20.0 (1fdc980f): data/verifactu_crons.xml
- Code du module : flexigo_spain_verifactu 17.0 (8d43d727): data/verifactu_crons.xml
- Code du module : flexigo_spain_verifactu 20.0 (1fdc980f): models/verifactu_cadena.py
- www.agenciatributaria.es/static_files/AEAT_Desarrolladores/EEDD/IVA/VERI-FACTU/Veri-Factu_
- apps.odoo.com/apps/modules/20.0/flexigo_spain_verifactu
- flexigotech.com/en/services.html
