El caso: una petición de acceso en una gestoría
Ejemplo Caso ilustrativo: la empresa y sus datos son inventados para explicar el flujo.
Asesoría Ribera, una gestoría inventada para este ejemplo, recibe la petición de una persona que quiere saber qué datos suyos constan en la facturación de un cliente. La responsable de privacidad de la gestoría trabaja en Odoo con VeriFactu España (AEAT RRSIF Compliance) y tiene que sacar esa información del módulo.
El botón está en las ramas 17, 18, 19 y 20 del módulo, publicado en Odoo Apps para esas cuatro versiones. Lo que sigue describe el código de Odoo 20.0.

Cómo llega ella al botón
La ficha se abre desde Verifactu / SIF › Privacidad / RGPD › Asistente DSAR (Verifactu / SIF › Privacy / GDPR › DSAR Wizard). Cada tramo del menú pide permisos y, si no tienes uno, no ves ese tramo: Privacidad / RGPD (Privacy / GDPR) lo ven Responsable de Privacidad (Privacy Officer) y Gestor SIF (SIF Manager); Verifactu / SIF lo ven también Contable (Accountant), Operador de Asesoría (Asesoría Operator) y Auditor (solo lectura) (Auditor (read-only)).
Una vez en la ficha, el botón no depende de ninguna condición de la vista: se ve en las cuatro versiones. Los pasos de ella son estos:
- Abre el menú y entra en la ficha del
Asistente DSAR. Los campos de la solicitud están en el grupoDetalles de la Solicitud(Request Details). - Mira el campo
Empresa(Company). Por defecto trae la empresa activa, y la búsqueda se hace solo dentro de la empresa que figure ahí. - Escribe en
NIF / Nombre del Interesado(Data Subject NIF / Name) el NIF de la persona o su nombre. - Si la gestoría lleva un número de expediente, lo anota en
Referencia de la Solicitud(Request Reference). - Pulsa
Generar Exportación de Acceso (art.15).
El rótulo del botón cambia con el idioma de Odoo. Con Odoo en castellano es el de arriba; con Odoo en catalán, Generar Exportació d'Accés (art.15).

Qué hace el botón, en orden
Al pulsarlo, el código hace esto, uno detrás de otro:
- Toma el texto escrito en
NIF / Nombre del Interesado, le quita los espacios de los extremos y busca con él en la empresa elegida. - Monta el resultado, que lleva el texto que escribiste, el nombre de la empresa y dos listas: los registros y las anulaciones encontrados.
- Guarda ese resultado como archivo JSON en el propio asistente, con el nombre
dsar_access_export_seguido de los primeros veinte caracteres de lo que escribiste y la extensión.json. - Intenta generar además un PDF (más abajo, qué hace el código si no sale).
- Registra un evento (siguiente sección).
- Vuelve a abrir la misma ficha del asistente en una ventana emergente, con el mismo registro.
El código describe esta extracción como una lectura de los campos de datos personales sin alterar ningún registro de la cadena.
Qué busca y qué exporta
| Bloque | Dónde busca | Qué datos saca |
|---|---|---|
| Registros | Identificador o nombre de la contraparte | Número de serie, fecha de expedición, nombre, tipo de identificador, identificador y total |
| Anulaciones | Solo el identificador de la contraparte | Número de serie, fecha de expedición e identificador |
La coincidencia es «contiene», sin distinguir mayúsculas. Si Asesoría Ribera escribe solo un trozo de un nombre, entran todos los registros de esa empresa cuyo nombre o identificador contenga ese trozo. Y si escribe un nombre, las anulaciones no se buscan por él, solo por identificador.
Qué queda registrado
Tras generar el archivo, el botón crea un evento en el registro de eventos del módulo, para la empresa elegida. El evento lleva la fecha y hora, el usuario que pulsó el botón, una descripción con el NIF o nombre escrito, el NIF o nombre y la referencia de la solicitud como contexto (la referencia queda vacía si no la rellenaste), una huella calculada sobre esos datos y un número de secuencia propio de la empresa.
La referencia de la solicitud viaja al evento; el archivo JSON de la exportación no la incluye. Y el orden importa: si la generación del archivo se detiene con un error, el código no llega a registrar el evento.
Otras acciones que dejan eventos
El evento del botón no es el único que se registra de este modo. Al guardar la ficha de una empresa, si se ha cambiado el entorno de la AEAT, el responsable del SIF o el ámbito de VeriFactu, también queda un evento. Además, el botón estándar de cancelar una factura, que el módulo amplía, y la tarea programada Verifactu: Comprobación del Desfase del Reloj (Verifactu: Clock Drift Check), que corre cada hora y está activa al instalar, llegan a ese mismo registro. Para lo que el módulo añade a las facturas, mira este artículo.
El PDF que intenta guardar el código
Además del JSON, el código intenta generar un PDF con el mismo asistente y, si lo consigue, lo guarda con el nombre dsar_access_export_ más los primeros veinte caracteres de lo escrito y la extensión .pdf. Si esa generación falla, el código captura el error, anota un aviso en el registro del servidor y sigue con el JSON y el evento.
Qué aprender del caso
- Confirma el campo
Empresaantes de pulsar: la búsqueda se limita a ella. - Escribe el NIF completo cuando lo tengas; un nombre parcial puede traer más registros de los esperados, y las anulaciones solo salen por identificador.
- Anota la
Referencia de la Solicitudsi quieres que el evento la lleve: el JSON exportado no la incluye.
Cómo ayuda FlexigoTech
FlexigoTech implanta Odoo 17, 18, 19 y 20 y desarrolla conectores e integraciones a medida. Si quieres revisar quién debe tener los permisos del menú de privacidad, o ajustar el módulo a vuestro proceso, escríbenos.
Sigue leyendo
Comprobado en el código del módulo (versión 20.0) y en las fuentes enlazadas
Fuentes
- Código del módulo: flexigo_spain_verifactu 20.0 (1fdc980f): wizards/verifactu_dsar_wizard_views.xml
- Código del módulo: flexigo_spain_verifactu 20.0 (1fdc980f): wizards/verifactu_dsar_wizard.py
- Código del módulo: flexigo_spain_verifactu 20.0 (1fdc980f): models/res_company.py
- apps.odoo.com/apps/modules/20.0/flexigo_spain_verifactu
- flexigotech.com/en/services.html
