Skip to main content
VeriFactu

Verifactu: what the task that escalates alerts to an in-app banner does

The task Verifactu: Alert Escalation to In-App Banner runs every five minutes and is active as soon as the module is installed. On each run it looks for alert-sent events that are at least five minutes old and, for each one, sends a persistent warning notification in the application. If you see no notification, first check whether such events exist and what text they carry.

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 17.0 and 20.0 · against the sources linked at the end
Reading time
4 min

What the task does on each run

The task is called Verifactu: Alert Escalation to In-App Banner. It runs every five minutes and is active on install. It exists in every published branch of the module: Odoo 17, 18, 19 and 20. The order of a run, according to the published Odoo 20 code, is this:

  1. It works out a cut-off: the current time in UTC minus five minutes.
  2. It searches for events of the alert-sent type whose timestamp is equal to or earlier than that cut-off. The search uses those two conditions, the event type and its age.
  3. It goes through those events one by one and, for each, sends a notification to the channel of the user the method runs as. The notification is persistent, of warning type, and has the title Verifactu Compliance Alert (Escalated).
  4. For the notification text it uses the event description. If the event has no description, it uses a generic text that asks you to check your email and activities.
  5. If sending one notification fails, it writes a warning to the Odoo technical log with the event identifier and the reason, and carries on with the next event. One failed notification does not cut the run short.
Code-generated diagram: the scheduled task that runs every five minutes and the Event Log menu
Diagram generated from the module's published code, not an Odoo screenshot: the task, active on install in Odoo 17.0, 18.0, 19.0 and 20.0, and the Event Log menu. Labels are in English, the original text from the code.

Where the events it goes through are

The events the task looks at are those opened from the menu Verifactu / SIF › Audit Trail › Event Log. Each part of the menu asks for permissions, and if you hold none of them you do not see that part:

  • The Audit Trail part asks for Accountant, Auditor (read-only), Privacy Officer or SIF Manager.
  • The Verifactu / SIF part asks for Accountant, Asesoría Operator, Auditor (read-only), Privacy Officer or SIF Manager.

The notification text comes from the event's Descripcion field. You see it in the All Events (Asesoría) form, inside the Description group. On screen it has no label: only its content shows. It also appears in the All Events (Asesoría) list.

Event Log list with two events, showing date, company, actor and description
The Event Log with two events (responsible declaration issued and SIF started) for the company YourCompany with actor OdooBot, to show how the list looks.

An illustrative case: the notification nobody saw

Example Illustrative case: the company and its figures are made up to explain the flow.

Picture an invented company, Distribuciones Mirlo. Marta holds the SIF Manager role and a colleague mentions that a Verifactu notification popped up on their screen. Marta saw none and wants to know why.

First she opens the Event Log and looks for an alert-sent event. In its form she reads the content of the Description group: that is exactly the text the notification carries. If the field were empty, the notification would show the generic text pointing to email and activities, so a notification with that text would not be a fault.

Then she thinks about timing. The event must be five minutes past its timestamp, and the task runs every five minutes, so the notification arrives on the first run after that cut-off, not at the instant the alert is recorded.

Finally she notes down a question for whoever administers the server: the code sends the notification to the channel of the user the method runs as, and she wants to know who that is. She also asks them to check the Odoo technical log for warnings about a notification not sent, carrying that event's identifier.

What the case teaches: the task comes down to three questions. Is there an alert event old enough? What text does it carry? Which user is the notification sent to?

What to check if the task seems to do nothing

  • That the event exists. If there are no alert-sent events at least five minutes old, the search finds nothing and no notification is sent.
  • That the task is still active. It is active on install. Ask whoever administers Odoo to confirm that the task with this name is still active.
  • The notification text. A notification with the generic text means the event had no description. Read the event description in the All Events (Asesoría) form, inside the Description group.
  • The technical log. When a notification fails to send, a warning with the event identifier and the reason is left, and the task carries on with the rest.
  • The recipient user. The notification goes to the channel of the user the method runs as. Keep that in mind before concluding that the notification was not sent.

By version

The task is in every published branch of the module (17.0, 18.0, 19.0 and 20.0), and the module is published on Odoo Apps for those four. In Odoo 17.0 the task is set up to repeat without end. The detail of the run you have just read is that of the Odoo 20 code.

How FlexigoTech can help

FlexigoTech implements Odoo 17, 18, 19 and 20 and builds custom connectors and integrations. If you are rolling the module out and want to go through who receives the notifications and how to read the events, get in touch. The module is on its Odoo Apps page.

Keep reading

What the Run Pre-flight button in VeriFactu España doesWhat the Run Pre-flight button in VeriFactu España for Odoo does: when it shows, what it checks on each row, what it saves and which errors stop it.
Checked in the module's source code (version 17.0 and 20.0) and the linked sources

Sources