Le cas : une demande d'accès dans un cabinet de gestion
Exemple Cas illustratif : l'entreprise et ses chiffres sont inventés pour expliquer le flux.
Asesoría Ribera, un cabinet de gestion inventé pour cet exemple, reçoit la demande d'une personne qui veut savoir quelles données la concernant figurent dans la facturation d'un client. La responsable de la confidentialité du cabinet travaille dans Odoo avec VeriFactu España (AEAT RRSIF Compliance) et doit extraire cette information du module.
Le bouton existe dans les branches 17, 18, 19 et 20 du module, publié sur Odoo Apps pour ces quatre versions. Ce qui suit décrit le code d'Odoo 20.0.

Comment elle arrive au bouton
La fiche s'ouvre depuis Verifactu / SIF › Privacy / GDPR › DSAR Wizard. Chaque niveau du menu demande des droits et, si vous n'en avez pas un, vous ne voyez pas ce niveau : Privacy / GDPR est visible pour Privacy Officer et SIF Manager ; Verifactu / SIF est visible aussi pour Accountant, Asesoría Operator et Auditor (read-only).
Une fois dans la fiche, le bouton ne dépend d'aucune condition de la vue : il s'affiche dans les quatre versions. Voici les étapes qu'elle suit :
- Ouvrez le menu et entrez dans la fiche du
DSAR Wizard. Les champs de la demande se trouvent dans le groupeRequest Details. - Regardez le champ
Company. Par défaut, il reprend la société active, et la recherche se fait uniquement dans la société indiquée là. - Saisissez dans
Data Subject NIF / Namele NIF de la personne ou son nom. - Si le cabinet utilise un numéro de dossier, notez-le dans
Request Reference. - Cliquez sur
Generate Access Export (art.15).
Le libellé du bouton change avec la langue d'Odoo. Avec Odoo en espagnol, c'est celui ci-dessus ; avec Odoo en catalan, Generar Exportació d'Accés (art.15).

Ce que fait le bouton, dans l'ordre
Lorsqu'on clique dessus, le code procède ainsi, étape par étape :
- Il prend le texte saisi dans
Data Subject NIF / Name, retire les espaces aux extrémités et lance la recherche avec ce texte dans la société choisie. - Il assemble le résultat, qui contient le texte saisi, le nom de la société et deux listes : les enregistrements et les annulations trouvés.
- Il enregistre ce résultat dans un fichier JSON dans l'assistant lui-même, nommé
dsar_access_export_suivi des vingt premiers caractères de ce que vous avez saisi et de l'extension.json. - Il tente en plus de générer un PDF (plus bas, ce que fait le code si cela échoue).
- Il consigne un événement (section suivante).
- Il rouvre la même fiche de l'assistant dans une fenêtre contextuelle, avec le même enregistrement.
Le code décrit cette extraction comme une lecture des champs de données personnelles sans modifier aucun enregistrement de la chaîne.
Ce qu'il cherche et ce qu'il exporte
| Bloc | Où il cherche | Quelles données il extrait |
|---|---|---|
| Enregistrements | Identifiant ou nom de la contrepartie | Numéro de série, date d'émission, nom, type d'identifiant, identifiant et total |
| Annulations | Uniquement l'identifiant de la contrepartie | Numéro de série, date d'émission et identifiant |
La correspondance est de type « contient », sans tenir compte de la casse. Si Asesoría Ribera ne saisit qu'un morceau de nom, tous les enregistrements de cette société dont le nom ou l'identifiant contient ce morceau sont retenus. Et si elle saisit un nom, les annulations ne sont pas recherchées par ce nom, seulement par identifiant.
Ce qui est consigné
Une fois le fichier généré, le bouton crée un événement dans le registre d'événements du module, pour la société choisie. L'événement contient la date et l'heure, l'utilisateur qui a cliqué sur le bouton, une description avec le NIF ou le nom saisi, le NIF ou le nom et la référence de la demande comme contexte (la référence reste vide si vous ne l'avez pas remplie), une empreinte calculée sur ces données et un numéro de séquence propre à la société.
La référence de la demande est transmise à l'événement ; le fichier JSON de l'export ne l'inclut pas. Et l'ordre compte : si la génération du fichier s'arrête sur une erreur, le code n'arrive pas à consigner l'événement.
Autres actions qui laissent des événements
L'événement du bouton n'est pas le seul consigné de cette manière. Lors de l'enregistrement de la fiche d'une société, si l'environnement de l'AEAT, le responsable du SIF ou le périmètre de VeriFactu a changé, un événement est aussi créé. De plus, le bouton standard d'annulation d'une facture, que le module étend, et la tâche planifiée Verifactu: Clock Drift Check, qui s'exécute toutes les heures et est active dès l'installation, alimentent ce même registre. Pour ce que le module ajoute aux factures, consultez cet article.
Le PDF que le code tente d'enregistrer
En plus du JSON, le code tente de générer un PDF avec le même assistant et, s'il y parvient, l'enregistre sous le nom dsar_access_export_ plus les vingt premiers caractères du texte saisi et l'extension .pdf. Si cette génération échoue, le code intercepte l'erreur, note un avertissement dans le journal du serveur et poursuit avec le JSON et l'événement.
Ce que le cas enseigne
- Confirmez le champ
Companyavant de cliquer : la recherche s'y limite. - Saisissez le NIF complet quand vous l'avez ; un nom partiel peut ramener plus d'enregistrements que prévu, et les annulations ne ressortent que par identifiant.
- Notez la
Request Referencesi vous voulez que l'événement la porte : le JSON exporté ne l'inclut pas.
Comment FlexigoTech vous aide
FlexigoTech met en place Odoo 17, 18, 19 et 20 et développe des connecteurs et des intégrations sur mesure. Si vous souhaitez vérifier qui doit avoir les droits du menu de confidentialité, ou adapter le module à votre processus, écrivez-nous.
À lire aussi
Vérifié dans le code du module (version 20.0) et dans les sources citées
Sources
- Code du module : flexigo_spain_verifactu 20.0 (1fdc980f): wizards/verifactu_dsar_wizard_views.xml
- Code du module : flexigo_spain_verifactu 20.0 (1fdc980f): wizards/verifactu_dsar_wizard.py
- Code du module : 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
