Der Fall: eine Auskunftsanfrage in einer Steuerkanzlei
Beispiel Fiktiver Fall: Firma und Zahlen sind erfunden, um den Ablauf zu zeigen.
Asesoría Ribera, eine für dieses Beispiel erfundene Steuerkanzlei, erhält die Anfrage einer Person, die wissen möchte, welche ihrer Daten in der Fakturierung eines Mandanten gespeichert sind. Die Datenschutzverantwortliche der Kanzlei arbeitet in Odoo mit VeriFactu España (AEAT RRSIF Compliance) und muss diese Informationen aus dem Modul ziehen.
Die Schaltfläche gibt es in den Branches 17, 18, 19 und 20 des Moduls, das für diese vier Versionen in Odoo Apps veröffentlicht ist. Das Folgende beschreibt den Code von Odoo 20.0.

Wie sie zur Schaltfläche gelangt
Die Maske öffnet sich über Verifactu / SIF › Privacy / GDPR › DSAR Wizard. Jeder Abschnitt des Menüs verlangt Berechtigungen, und wenn Sie keine haben, sehen Sie diesen Abschnitt nicht: Privacy / GDPR sehen Privacy Officer und SIF Manager; Verifactu / SIF sehen zusätzlich Accountant, Asesoría Operator und Auditor (read-only).
In der Maske hängt die Schaltfläche von keiner Bedingung der Ansicht ab: Sie ist in allen vier Versionen sichtbar. Die Schritte der Datenschutzverantwortlichen sind diese:
- Öffnen Sie das Menü und gehen Sie in die Maske des
DSAR Wizard. Die Felder der Anfrage stehen in der GruppeRequest Details. - Prüfen Sie das Feld
Company. Standardmäßig ist das aktive Unternehmen eingetragen, und die Suche läuft nur innerhalb des Unternehmens, das dort steht. - Tragen Sie in
Data Subject NIF / Namedie NIF der Person oder ihren Namen ein. - Wenn die Kanzlei eine Vorgangsnummer führt, notiert sie diese in
Request Reference. - Klicken Sie auf
Generate Access Export (art.15).
Die Beschriftung der Schaltfläche ändert sich mit der Sprache von Odoo. Bei Odoo auf Spanisch ist es die obige; bei Odoo auf Katalanisch Generar Exportació d'Accés (art.15).

Was die Schaltfläche tut, der Reihe nach
Beim Klicken führt der Code nacheinander Folgendes aus:
- Er nimmt den in
Data Subject NIF / Nameeingegebenen Text, entfernt die Leerzeichen an den Enden und sucht damit im gewählten Unternehmen. - Er stellt das Ergebnis zusammen, das den eingegebenen Text, den Namen des Unternehmens und zwei Listen enthält: die gefundenen Datensätze und die gefundenen Stornierungen.
- Er speichert dieses Ergebnis als JSON-Datei im Assistenten selbst, mit dem Namen
dsar_access_export_, gefolgt von den ersten zwanzig Zeichen des Eingegebenen und der Endung.json. - Er versucht zusätzlich, ein PDF zu erzeugen (weiter unten, was der Code tut, wenn das nicht klappt).
- Er erfasst ein Ereignis (nächster Abschnitt).
- Er öffnet dieselbe Maske des Assistenten erneut in einem Popup-Fenster, mit demselben Datensatz.
Der Code beschreibt diese Extraktion als Lesen der personenbezogenen Datenfelder, ohne einen Datensatz der Kette zu verändern.
Was gesucht und was exportiert wird
| Block | Wo gesucht wird | Welche Daten ausgegeben werden |
|---|---|---|
| Datensätze | Kennung oder Name der Gegenpartei | Seriennummer, Ausstellungsdatum, Name, Kennungstyp, Kennung und Gesamtbetrag |
| Stornierungen | Nur die Kennung der Gegenpartei | Seriennummer, Ausstellungsdatum und Kennung |
Die Übereinstimmung ist «enthält», ohne Unterscheidung von Groß- und Kleinschreibung. Wenn Asesoría Ribera nur ein Stück eines Namens eingibt, werden alle Datensätze dieses Unternehmens berücksichtigt, deren Name oder Kennung dieses Stück enthält. Und wenn ein Name eingegeben wird, werden die Stornierungen nicht danach gesucht, sondern nur nach Kennung.
Was erfasst wird
Nach dem Erzeugen der Datei legt die Schaltfläche für das gewählte Unternehmen ein Ereignis im Ereignisprotokoll des Moduls an. Das Ereignis enthält Datum und Uhrzeit, den Benutzer, der die Schaltfläche geklickt hat, eine Beschreibung mit der eingegebenen NIF oder dem Namen, die NIF oder den Namen und die Referenz der Anfrage als Kontext (die Referenz bleibt leer, wenn Sie sie nicht ausgefüllt haben), einen über diese Daten berechneten Hash und eine unternehmenseigene Sequenznummer.
Die Referenz der Anfrage wandert ins Ereignis; die JSON-Datei des Exports enthält sie nicht. Und die Reihenfolge ist wichtig: Wenn die Erzeugung der Datei mit einem Fehler abbricht, erfasst der Code das Ereignis gar nicht erst.
Weitere Aktionen, die Ereignisse hinterlassen
Das Ereignis der Schaltfläche ist nicht das einzige, das auf diese Weise erfasst wird. Beim Speichern der Maske eines Unternehmens wird ebenfalls ein Ereignis angelegt, wenn die AEAT-Umgebung, der SIF-Verantwortliche oder der Geltungsbereich von VeriFactu geändert wurde. Außerdem gelangen die Standardschaltfläche zum Stornieren einer Rechnung, die das Modul erweitert, und die geplante Aufgabe Verifactu: Clock Drift Check, die jede Stunde läuft und bei der Installation aktiv ist, in dasselbe Protokoll. Zu dem, was das Modul bei den Rechnungen ergänzt, lesen Sie diesen Artikel.
Das PDF, das der Code zu speichern versucht
Neben dem JSON versucht der Code, mit demselben Assistenten ein PDF zu erzeugen, und speichert es, falls das gelingt, unter dem Namen dsar_access_export_ plus den ersten zwanzig Zeichen des Eingegebenen und der Endung .pdf. Wenn diese Erzeugung fehlschlägt, fängt der Code den Fehler ab, vermerkt eine Warnung im Serverprotokoll und macht mit dem JSON und dem Ereignis weiter.
Was der Fall lehrt
- Bestätigen Sie das Feld
Company, bevor Sie klicken: Die Suche ist darauf beschränkt. - Geben Sie die vollständige NIF ein, wenn Sie sie haben; ein Teilname kann mehr Datensätze liefern als erwartet, und Stornierungen werden nur über die Kennung gefunden.
- Notieren Sie die
Request Reference, wenn das Ereignis sie tragen soll: Das exportierte JSON enthält sie nicht.
Wie FlexigoTech hilft
FlexigoTech führt Odoo 17, 18, 19 und 20 ein und entwickelt Konnektoren und individuelle Integrationen. Wenn Sie prüfen möchten, wer die Berechtigungen des Datenschutzmenüs haben soll, oder das Modul an Ihren Prozess anpassen wollen, schreiben Sie uns.
Weiterlesen
Geprüft im Quellcode des Moduls (Version 20.0) und in den verlinkten Quellen
Quellen
- Quellcode des Moduls: flexigo_spain_verifactu 20.0 (1fdc980f): wizards/verifactu_dsar_wizard_views.xml
- Quellcode des Moduls: flexigo_spain_verifactu 20.0 (1fdc980f): wizards/verifactu_dsar_wizard.py
- Quellcode des Moduls: 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
