Wat ze bij elke run doet
De taak zoekt de actieve ketens en roept voor elk ervan de integriteitscontrole aan. Alles wat telt gebeurt binnen die controle: ze herberekent de hash van elke registratie en vergelijkt die met de hash die is opgeslagen. De hash is een SHA-256 van de registratie, gekoppeld aan de vorige, en de AEAT berekent hem zelf opnieuw: komt hij niet overeen, dan accepteert ze de registratie met een fout die je moet herstellen.
De taak bestaat in alle gepubliceerde branches van de module (17.0, 18.0, 19.0 en 20.0), die voor die vier versies in Odoo Apps staat. Dit schema vat de taak samen, samen met het menu waarmee je de ketens opent:

Details die je op het formulier niet ziet
Ze controleert alleen de actieve ketens, één voor één
De taak loopt niet langs alle bestaande ketens: ze zoekt alleen de actieve en start de controle van elk ervan afzonderlijk. Elke keten hoort bij een bedrijf. Op het formulier van All Chain States (Asesoría) vind je het veld Company om te zien om welk bedrijf het gaat.
Ze leest bij elke run de hele keten
De controle doet een zoekopdracht die de aanmaakregistraties en de annuleringsregistraties van het bedrijf samenbrengt en sorteert op registratienummer. Daarna loopt ze ze van begin tot eind door. De code start niet halverwege: elke run begint bij de eerste registratie.
Ze herberekent elke hash vanuit wat is opgeslagen
Voor elke aanmaakregistratie reconstrueert de code de hash met deze opgeslagen gegevens: btw-nummer van de uitgever, serienummer, uitgiftedatum, factuurtype (F1 als het leeg is), totaalbedrag aan btw berekend uit de belastbare grondslagen, totaalbedrag, hash van de vorige registratie en datum en tijd van aanmaak met tijdzone. De eerste registratie vertrekt van een lege vorige hash.
Het btw-nummer van de uitgever wordt gebruikt zonder het voorvoegsel ES. Heeft het bedrijf een eigen NIF voor Verifactu, dan geeft de code daar de voorkeur aan boven het algemene btw-nummer. Als een van die gegevens verandert nadat de registratie is aangemaakt, komt de herberekende hash niet meer overeen met de opgeslagen hash.
Annuleringen worden met andere labels berekend
Annuleringsregistraties gebruiken hun eigen formule: ze hebben geen factuurtype, btw-bedrag of totaalbedrag, en hun labels zijn die van de geannuleerde factuur. De code ondersteunt ook annuleringen die vóór versie 1.3.4 van de module zijn aangemaakt en die met de labels van de aanmaakregistraties werden berekend: komt de opgeslagen hash overeen met die oude berekening, dan keurt ze hem goed.
Ze stopt bij de eerste breuk en geeft een melding
Zodra een opgeslagen hash niet overeenkomt met de herberekende, stopt de controle: ze gaat niet verder met de volgende registraties van die keten. Ze geeft terug hoeveel registraties ze tot dan toe had gecontroleerd en de eerste gebroken registratie, met registratienummer, serienummer, de verwachte hash en de opgeslagen hash.
Dezelfde stap geeft de melding van een ketenbreuk voor het bedrijf, met het registratienummer en het serienummer waar de keten brak. Komt de hele keten overeen, dan geeft de controle terug dat ze geslaagd is, samen met het totaal aantal gecontroleerde registraties.
De frequentie is één keer per dag, en in Odoo 17 herhaalt ze zich zonder einde
De taak draait één keer per dag en staat na installatie actief. In Odoo 17.0 is ze bovendien ingesteld om zich zonder einde te herhalen.
Als ze niets lijkt te doen
Controleer dit eerst voordat je de taak verdenkt:
- Is er een actieve keten? Is er geen enkele, dan levert de zoekopdracht niets op en valt er niets te controleren.
- Staat de taak nog actief? Ze staat na installatie actief, dus als ze niet draait, controleer dan of ze nog actief is.
- Wat mag je van een correcte run verwachten? De taak roept alleen de controle van elke keten aan, en een intacte keten geeft terug dat ze geslaagd is, met het totaal aan gecontroleerde registraties. Een breuk is wat de melding van een ketenbreuk veroorzaakt.
- Zie je het menu? De formulieren van elke keten open je via
Verifactu / SIF › Compliance Records › Chain State. Elk onderdeel vraagt andere rechten.

De rechten van het menu, onderdeel voor onderdeel
Als je het recht voor een onderdeel niet hebt, zie je dat onderdeel niet. Dit zijn de rechten die elk onderdeel vraagt:
| Onderdeel van het menu | Rechten die het tonen |
|---|---|
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 |
Met alleen het recht Accountant zie je de eerste twee onderdelen, maar niet Chain State. Als iemand zegt dat hij het menu niet vindt, kijk dan eerst naar zijn rechten.
Meer lezen en hulp
Als je Odoo implementeert en wilt dat VeriFactu aansluit op je facturatie: FlexigoTech implementeert Odoo 17, 18, 19 en 20 en ontwikkelt connectoren en integraties op maat. Je kunt de module bekijken op de pagina in Odoo Apps.
Lees verder
Gecontroleerd in de broncode van de module (versie 17.0 en 20.0) en in de gelinkte bronnen
Bronnen
- Broncode van de module: flexigo_spain_verifactu 20.0 (1fdc980f): data/verifactu_crons.xml
- Broncode van de module: flexigo_spain_verifactu 17.0 (8d43d727): data/verifactu_crons.xml
- Broncode van de 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
