Das Audit-Log von returnEasier ist ein unveränderliches Protokoll von allem, was mit deinen Anfragen geschieht: Jedes Mal, wenn eine erstellt, genehmigt, als empfangen markiert oder erstattet wird, bleibt eine Zeile, die nicht geändert oder gelöscht werden kann. Jedes Ereignis wird mit einem verketteten SHA-256-Hash mit dem vorherigen versiegelt und bildet eine manipulationssichere Kette. Wenn du Nachweise vorlegen musst – einem Prüfer, der Behörde oder deinem Berater – gehst du zu Compliance → Exportieren und lädst ein ZIP mit dem gesamten Verlauf und einer Integritätsdatei zur Überprüfung herunter.
Warum ist das Protokoll unveränderlich?
Die Ereignistabelle ist Append-only: Die Datenbank erlaubt nur das Hinzufügen von Zeilen. Ein Trigger von PostgreSQL lehnt jeden Versuch von UPDATE oder DELETE darauf ab, woher er auch kommt (die App, ein Skript, eine Migration oder ein Angreifer mit Rechten). Das ist kein Konfigurationsversprechen: Es ist in der Datenbank-Engine erzwungen.
Auf dieser Basis wird die Hash-Kette aufgebaut:
- Jedes Ereignis 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 eines vergangenen Ereignisses ändern, würde sich dessen Hash ändern und nicht mehr zum
hash_anteriordes folgenden Ereignisses passen: Die Manipulation verrät sich von selbst.
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 → Exportieren (Pfad /app/settings/compliance/export) innerhalb der App, im Shopify-Admin.
- Öffne Compliance → Exportieren im Seitenmenü.
- 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).
- Klicke auf Exportieren. 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 passt die Zustellung an die Größe des Zeitraums an, um den Browser nicht mit riesigen Downloads zu blockieren:
| Anfragen im Zeitraum | Was passiert |
|---|---|
| 0 – 100 | Das ZIP wird erzeugt und sofort heruntergeladen. |
| 101 – 1000 | returnEasier schickt dir das ZIP per E-Mail (temporärer Link). |
| Mehr als 1000 | Der Export wird abgelehnt: Grenze den Zeitraum ein. |
Die harte Grenze liegt bei 1000 Anfragen pro Export. Ist dein Verlauf größer, teile ihn in mehrere Zeiträume auf (zum Beispiel quartalsweise) und exportiere jeden einzeln.
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 wiepublic_id,tipo,estado,creada_en_utc,resuelta_en_utc,pedido,cliente_email,cliente_nombre,importe,moneda,motivo,resolucion_preferida,notas_cliente,hash,hash_anteriorundrefund_id.eventos.csv— das vollständige Append-only-Protokoll:public_id,evento,actor,actor_id,fecha_utc,hash,hash_anteriorundpayload_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 beweisen, dass nichts angetastet wurde:
- Sie enthält den SHA-256-Hash jeder Datei im ZIP. Berechne den Hash zum Beispiel von
eventos.csvmit 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 „defekt" ist 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), 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".