Skip to main content
VeriFactu

What VeriFactu España adds to the Odoo invoice and when it acts

When you post a customer invoice or its credit note, VeriFactu España creates a chained registration record and links it to the invoice, provided its conditions are met (VeriFactu active with the VeriFactu scope and no foral regime, among others) and after its prior validations. It also adds two checkboxes (simplified F2 and exchange F3) and several fields that appear once a record exists.

FlexigoTech · Editor in charge: Víctor Gómez · Updated 5 November 2026

Key facts

Module
VeriFactu
Versions
Odoo 17, 18, 19 and 20
Checked
in the module's source code, version 20.0 · against the sources linked at the end
Reading time
5 min

The module is published on Odoo Apps for 17.0, 18.0, 19.0 and 20.0.

What it adds to the invoice

The module extends the invoice of Odoo's standard invoicing app (Invoicing). It adds checkboxes you tick yourself and read-only fields that show once the invoice has its record. Here is the list, with where each one appears.

Code-generated diagram: the standard Invoicing app at the top and, below it, the fields the module adds, including Verifactu Registro, Verifactu Estado, Factura simplificada (F2), Canje de simplificadas (F3), Cotejo URL, SIF Record and SIF Cancel
Code-generated diagram based on the module's published code (not an Odoo screenshot): the Invoicing app and the fields the module adds to the invoice, with the original labels from the code.
FieldWhereWhen it shows
Verifactu RegistroForm, group Verifactu / SIF, read-onlyOnly when the invoice already has a record
Verifactu EstadoForm, group Verifactu / SIF, read-onlyOnly when the invoice already has a record
Cotejo URLForm, group Verifactu / SIF, read-onlyOnly when the invoice already has a record
SIF RecordFormHidden when it is zero
SIF CancelFormHidden when it is zero
Factura simplificada (F2)FormOnly on customer invoices; hidden when the exchange is ticked
Canje de simplificadas (F3)FormOnly on customer invoices; hidden when the simplified box is ticked
Simplificadas sustituidasFormOnly on customer invoices with the exchange ticked
Tickets externos sustituidosFormOnly on customer invoices with the exchange ticked

You do not write Verifactu Registro yourself: the module fills it in when the invoice is posted. Verifactu Estado is calculated: if the invoice has a cancellation record it shows that record's status; otherwise it shows the status of the registration record; and it stays empty if there is neither. SIF Record and SIF Cancel are one when the matching record exists and zero when it does not.

Step by step: from the checkbox to the record

  1. Create the customer invoice as usual. If you need one of the two variants, tick Factura simplificada (F2) or Canje de simplificadas (F3) on the form; each box hides when you tick the other.
  2. For a simplified invoice, the field help reads: Emitir como factura simplificada (clave AEAT F2, sin bloque Destinatarios). Límite AEAT: 3.000 € por factura (validación 1150). In plain English: issue it as a simplified invoice, AEAT key F2, without the recipients block, with an AEAT limit of €3.000 per invoice.
  3. For an exchange, ticking the box makes Simplificadas sustituidas and Tickets externos sustituidos appear. The help of Canje de simplificadas (F3) reads: Factura emitida en sustitución de facturas simplificadas ya facturadas y declaradas (clave AEAT F3). No rectifica ni anula las simplificadas: sus importes no vuelven a computar (FAQ AEAT). That of Simplificadas sustituidas: Facturas simplificadas (F2) o rectificativas de simplificadas (R5) que este canje sustituye. And that of Tickets externos sustituidos: Referencias de simplificadas emitidas fuera de Odoo, una por línea con el formato: NUMERO-SERIE | DD-MM-AAAA.
  4. Post the invoice. The module acts right after Odoo posts it, and only on invoices that have actually ended up posted.
  5. Open the form and look for the group Verifactu / SIF. If the invoice has a record, you will see Verifactu Registro, Verifactu Estado and Cotejo URL there.
  6. Check SIF Record and SIF Cancel: the first shows there is a registration record, the second that there is a cancellation record. At zero they are hidden.
Code-generated diagram: the help text of the Factura simplificada (F2) checkbox in Spanish and in Catalan
Code-generated diagram based on the module's published translations (not an Odoo screenshot): the simplified-invoice checkbox help with Odoo in Spanish and in Catalan («Emetre com a factura simplificada (clau AEAT F2, sense bloc Destinataris). Límit AEAT: €3.000 per factura (validació 1150).»).

When the module acts and in what order

The module hooks into Odoo's posting: when Odoo posts invoices, it looks at each one that has ended up posted and, if it applies, creates its record. It does that part with system permissions. According to the code, the order is:

  • First it checks whether it applies. The module only acts if the company has VeriFactu active with the VeriFactu scope and no foral regime. It also stops there if the document is neither a customer invoice nor a customer credit note.
  • There is also a coexistence guard: if it trips, the module exits without doing anything.
  • If the invoice is an exchange, the module runs the exchange validation before anything is chained.
  • It then runs the NIF validation and the credit note validation, also before anything is added to the chain.
  • Next it appends the registration record to the company's chain and writes it into Verifactu Registro.
  • Finally it tries to generate the QR. If that fails, it only leaves a warning in the log: the record is already linked and is not undone.

If the group Verifactu / SIF does not appear

The group and its fields stay hidden while Verifactu Registro is empty, so their absence means the invoice has no record. Before creating the record, the module's code checks the following:

  • The invoice has been posted and is no longer in draft.
  • It is a customer invoice or a customer credit note.
  • The company has VeriFactu active, with the VeriFactu scope and no foral regime.
  • The coexistence guard does not trip.

After those, the module runs the exchange validation (if it is an exchange), the NIF validation and the credit note validation, and then appends the record.

How FlexigoTech can help

FlexigoTech implements Odoo 17, 18, 19 and 20 and builds custom connectors and integrations. If you are implementing Odoo and want to review how your customer invoices are issued before switching anything on, we can go through it with you.

Keep reading

«Only a SIF Manager can retry AEAT submissions.»: when it appears and what to doWhat the VeriFactu message «Only a SIF Manager can retry AEAT submissions.» means in Odoo: when it appears, which buttons trigger it and how to fix it.What the Generate Export button in VeriFactu España does in OdooWhat the Generate Export button in VeriFactu España for Odoo does: who can see it, what each export type produces and the event it logs.Run Pre-flight & Create in VeriFactu: a step-by-step checklistChecklist for the Run Pre-flight & Create button in VeriFactu España for Odoo: when it appears, what it checks, what changes and which errors it gives.
Checked in the module's source code (version 20.0) and the linked sources

Sources