returnEasier
← Für deinen Shop
Für deinen ShopHändler7 Min Lesezeit

Was ist das Audit-Log und wie exportiere ich meinen prüfbaren Verlauf?

Das Audit-Log von returnEasier ist ein Append-only-Protokoll jeder Anfrage und jedes Ereignisses, mit SHA-256-Hashes verkettet. Unter Compliance → Audit exportieren lädst du ein ZIP mit zwei CSV-Dateien, den PDF-Empfangsbestätigungen und einer Integritätsdatei herunter. Bis zu 1200 Anfragen pro Export: Der Download-Link erscheint auf dem Bildschirm, und bei 101 bis 1200 erhältst du ihn zusätzlich per E-Mail.

Das Audit-Log von returnEasier ist ein Append-only-Protokoll von allem, was mit deinen Anfragen geschieht: Jedes Mal, wenn eine erstellt, genehmigt, als empfangen markiert oder erstattet wird, wird eine neue Zeile hinzugefügt, und die App bietet keine Möglichkeit, sie zu bearbeiten oder zu löschen. Jedes Ereignis wird mit einem verketteten SHA-256-Hash mit dem vorherigen versiegelt; diese Hashes kannst du mit denen deiner früheren Exporte abgleichen, und das PDF der Empfangsbestätigung trägt zudem den Hash seiner Anfrage. Wenn du Nachweise vorlegen musst – einem Prüfer, der Behörde oder deinem Berater – gehst du zu Compliance → Audit exportieren und lädst ein ZIP mit dem gesamten Verlauf und einer Integritätsdatei zur Überprüfung herunter.


Warum werden im Protokoll nur Einträge hinzugefügt?

Die Ereignistabelle ist Append-only: Es werden nur Zeilen hinzugefügt. Über den normalen Weg der Anwendung lehnt ein Trigger von PostgreSQL UPDATE und DELETE darauf ab, und die App bietet keine Möglichkeit, ein Ereignis zu bearbeiten oder zu löschen.

Auf dieser Basis wird die Hash-Kette aufgebaut:

  • Der Inhalt jedes Ereignisses (payload) wird in ein kanonisches JSON umgewandelt (sortierte Schlüssel, ohne Mehrdeutigkeit) und es wird ein SHA-256 berechnet.
  • Dieser Hash wird unter Einbeziehung des Hashes des vorherigen Ereignisses (hash_anterior) berechnet. Das erste Ereignis jeder Kette ist das „Genesis-Ereignis“.
  • Würde jemand auch nur einen einzigen Wert im Inhalt (payload) eines vergangenen Ereignisses ändern, würde sich dessen Hash ändern und nicht mehr zum hash_anterior des folgenden Ereignisses passen: Eine isolierte Änderung des Inhalts bricht die Kette. Das Datum jedes Ereignisses wird separat gespeichert und ist nicht Teil des Hashes. Um den Verlauf gegen eine vollständige Neuschreibung abzugleichen, bewahre deine früheren Exporte auf.

Die Anfragen (return_requests) tragen ebenfalls ihren eigenen Hash und vorherigen Hash, die in den Export aufgenommen werden, damit sie außerhalb der App überprüft werden können.

Wie exportiere ich meinen prüfbaren Verlauf?

Der Export liegt unter Compliance → Audit exportieren (Pfad /app/settings/compliance/export) innerhalb der App, im Shopify-Admin.

  1. Öffne Compliance im Seitenmenü; der Export ist der Block Audit exportieren.
  2. Gib einen Zeitraum an: „von“ und „bis“ (Datumsformat). Du kannst beide leer lassen, um deinen gesamten Verlauf zu exportieren. Die Daten werden in der Zeitzone deines Shops interpretiert (standardmäßig Europe/Madrid).
  3. Klicke auf Export erzeugen. Je nach Anzahl der Anfragen im Zeitraum macht returnEasier eines von zwei Dingen (siehe unten).

Sofortiger Download oder per E-Mail, je nach Volumen

returnEasier erzeugt das ZIP in beiden Fällen; mit dem Volumen ändert sich nur, ob es dir zusätzlich per E-Mail geschickt wird:

Anfragen im Zeitraum Was passiert
1 – 100 Das ZIP wird erzeugt und du hast den Download-Link auf dem Bildschirm.
101 – 1200 Es wird genauso erzeugt: Du hast den Download-Link auf dem Bildschirm und wir schicken ihn dir zusätzlich per E-Mail (hat dein Shop in Shopify keine E-Mail-Adresse, nur auf dem Bildschirm).
Mehr als 1200 Der Export wird abgelehnt: Grenze den Zeitraum ein.

In beiden Fällen läuft der Link nach 7 Tagen ab. Gibt es im Zeitraum keine Anfrage, sagt dir die App das und erzeugt nichts.

Die harte Grenze liegt bei 1200 Anfragen pro Export. Ist dein Verlauf größer, teile ihn in mehrere Zeiträume auf (zum Beispiel quartalsweise) und exportiere jeden einzeln.

Am Ende zeigt dir der Bildschirm die Anzahl der Anfragen, Ereignisse und PDFs, ob die Ereigniskette „Verifiziert“ ist und wie viele PDFs nicht verfügbar waren. Auf derselben Seite kannst du den DPA erzeugen.

Was ist im ZIP enthalten?

Die Datei heißt returneasier-auditoria-<dein-shop>-<datum>.zip und enthält:

  • LIESMICH.txt — Anleitung in klarer Sprache: was jede Datei ist und wie man die Integrität überprüft.
  • solicitudes.csv — eine Zeile pro Anfrage, mit Spalten wie public_id, tipo, estado, creada_en_utc, resuelta_en_utc, pedido, cliente_email, cliente_nombre, importe, moneda, motivo, resolucion_preferida, notas_cliente, hash, hash_anterior und refund_id.
  • eventos.csv — das vollständige Append-only-Protokoll: public_id, return_request_id, evento, actor, actor_id, fecha_utc, hash, hash_anterior und payload_json.
  • pdfs/ — die PDF-Empfangsbestätigungen jedes Widerrufs, eine pro Anfrage.
  • INTEGRITY.json — die Integritätsdatei: Algorithmus (SHA-256), Zählungen, der Hash jeder Datei im ZIP und die Prüfung jeder Ereigniskette.

Wie überprüfe ich die Integrität des Exports?

Die INTEGRITY.json ist das Schlüsselstück, um zu prüfen, dass sich die Dateien im ZIP seit der Erstellung des Exports nicht verändert haben —sofern du sie mit einer separat aufbewahrten Kopie des Manifests vergleichst, denn sie liegt unsigniert im selben ZIP—, und sie enthält das Ergebnis der Neuberechnung der Ereigniskette jeder Anfrage:

  • Sie enthält den SHA-256-Hash jeder Datei im ZIP. Berechne den Hash zum Beispiel von eventos.csv mit einem beliebigen Standard-Tool neu und vergleiche ihn mit dem dort angegebenen.
  • Sie enthält die Prüfung jeder Ereigniskette: Für jede Anfrage gibt sie an, ob ihre Kette ok oder broken ist (auf dem Bildschirm der App: „Verifiziert“ oder „N Kette(n) mit Problemen“) und gegebenenfalls den Grund (verzweigte Kette, Zyklus, Hash, der nicht rekonstruiert…).
  • Konnte ein PDF nicht wiederhergestellt werden (zum Beispiel, weil es durch eine DSGVO-Anfrage gelöscht wurde, oder weil die Empfangsbestätigung eines Widerrufs nie erzeugt wurde), wird das in der Liste der nicht verfügbaren PDFs mit Grund vermerkt, statt den gesamten Export scheitern zu lassen.

Die INTEGRITY.json selbst kann ihren eigenen Hash nicht enthalten, daher ist sie die einzige Datei, die sich nicht selbst prüft; alles andere schon.

Bezug zu anderen Funktionen

Das Audit-Log ist die Grundlage der Rechtsvorlagen und der PDF-Empfangsbestätigung (siehe „Die PDF-Empfangsbestätigung des Widerrufs“): Jede Widerrufsbestätigung, die an den Kunden gesendet wird, ist an die Hash-Kette verankert. Um zu verstehen, welche E-Mails diese Ereignisse erzeugen, sieh dir „Welche E-Mails versendet returnEasier und an wen?“ an. Und bevor du deinstallierst oder kündigst, solltest du den Verlauf exportieren: Das erklärt „returnEasier deinstallieren oder kündigen“.

Hat dir dieser Artikel geholfen?