returnEasier
← Per a la teva botiga
Per a la teva botigaComerciant7 min de lectura

Què és l'audit log i com exporto el meu històric auditable?

L'audit log de returnEasier és un registre append-only de cada sol·licitud i cada esdeveniment, encadenat amb hashos SHA-256. Des de Compliment → Exportar auditoria pots descarregar un ZIP amb dos CSV, els PDF de justificant de recepció i un fitxer d'integritat. Fins a 1200 sol·licituds per exportació: l'enllaç de descàrrega apareix en pantalla i, entre 101 i 1200, t'arriba a més per correu.

L'audit log de returnEasier és un registre append-only de tot el que passa amb les teves sol·licituds: cada cop que se'n crea una, s'aprova, es marca com a rebuda o es reemborsa, s'hi afegeix una fila nova, i l'app no ofereix cap manera d'editar-la ni esborrar-la. Cada esdeveniment se segella amb un hash SHA-256 encadenat amb l'anterior, que pots contrastar amb els de les teves exportacions anteriors; el PDF del justificant de recepció porta, a més, el hash de la seva sol·licitud. Quan necessites lliurar proves —a un auditor, a l'administració o al teu assessor— vas a Compliment → Exportar auditoria i descarregues un ZIP amb tot l'històric i un fitxer d'integritat per verificar-lo.


Per què el registre és append-only?

La taula d'esdeveniments és append-only: només s'hi afegeixen files. Per la via normal de l'aplicació, un trigger de PostgreSQL rebutja els UPDATE i DELETE sobre ella, i l'app no ofereix cap manera d'editar ni esborrar un esdeveniment.

Sobre aquesta base es construeix la cadena de hashos:

  • El contingut de cada esdeveniment (payload) es converteix a un JSON canònic (claus ordenades, sense ambigüitat) i se li calcula un SHA-256.
  • Aquest hash es calcula incloent el hash de l'esdeveniment anterior (hash_anterior). El primer esdeveniment de cada cadena és el «gènesi».
  • Si algú canviés una sola dada del contingut (payload) d'un esdeveniment passat, el seu hash canviaria i deixaria de quadrar amb el hash_anterior de l'esdeveniment següent: una modificació aïllada del contingut trenca la cadena. La data de cada esdeveniment es desa a part i no forma part del hash. Per contrastar l'històric davant d'una reescriptura completa, conserva les teves exportacions anteriors.

Les sol·licituds (return_requests) porten també el seu propi hash i hash anterior, que s'inclouen a l'exportació perquè es puguin verificar fora de l'app.

Com exporto el meu històric auditable?

L'exportació viu a Compliment → Exportar auditoria (ruta /app/settings/compliance/export) dins de l'app, al Shopify Admin.

  1. Obre Compliment al menú lateral; l'exportació és el bloc Exportar auditoria.
  2. Indica un interval de dates: «des de» i «fins a» (format data). Pots deixar tots dos buits per exportar tot el teu històric. Les dates s'interpreten en la zona horària de la teva botiga (per defecte Europe/Madrid).
  3. Prem Generar exportació. Segons el nombre de sol·licituds de l'interval, returnEasier fa una de dues coses (vegeu més avall).

Descàrrega a l'instant o per correu, segons el volum

returnEasier genera el ZIP en els dos casos; el que canvia amb el volum és si, a més, te l'envia per correu:

Sol·licituds a l'interval Què passa
1 – 100 Es genera i tens l'enllaç de descàrrega en pantalla.
101 – 1200 Es genera igual: tens l'enllaç de descàrrega en pantalla i, a més, te l'enviem per correu (si la teva botiga no té correu a Shopify, només en pantalla).
Més de 1200 L'exportació es rebutja: acota l'interval de dates.

En els dos casos, l'enllaç caduca al cap de 7 dies. Si no hi ha cap sol·licitud a l'interval, l'app t'ho diu i no genera res.

El límit dur és de 1200 sol·licituds per exportació. Si el teu històric és més gran, divideix-lo en diversos intervals de dates (per exemple, trimestre a trimestre) i exporta cadascun.

En acabar, la pantalla et mostra el recompte de sol·licituds, esdeveniments i PDF, si la cadena d'esdeveniments està «Verificada» i quants PDF no estaven disponibles. A la mateixa pàgina pots generar el DPA.

Què hi ha dins del ZIP?

L'arxiu s'anomena returneasier-auditoria-<la-teva-botiga>-<data>.zip i conté:

  • LLEGEIXME.txt — guia en llenguatge clar: què és cada fitxer i com verificar la integritat.
  • solicitudes.csv — una fila per sol·licitud, amb columnes com 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 i refund_id.
  • eventos.csv — el registre append-only complet: public_id, return_request_id, evento, actor, actor_id, fecha_utc, hash, hash_anterior i payload_json.
  • pdfs/ — els PDF de justificant de recepció de cada desistiment, un per sol·licitud.
  • INTEGRITY.json — el fitxer d'integritat: algorisme (SHA-256), recomptes, el hash de cada fitxer del ZIP i la verificació de cada cadena d'esdeveniments.

Com verifico la integritat de l'exportació?

L'INTEGRITY.json és la peça clau per comprovar que els fitxers del ZIP no han canviat des que es va generar l'exportació —sempre que el contrastis amb una còpia del manifest que guardis a part, perquè viatja sense signatura dins del mateix ZIP—, i porta el resultat de recalcular la cadena d'esdeveniments de cada sol·licitud:

  • Porta el hash SHA-256 de cada fitxer del ZIP. Recalcula el hash de, per exemple, eventos.csv amb qualsevol eina estàndard i compara'l amb el que hi figura.
  • Inclou la verificació de cada cadena d'esdeveniments: per cada sol·licitud indica si la seva cadena està ok o broken (a la pantalla de l'app: «Verificada» o «N cadena(es) amb problemes») i, si escau, el motiu (cadena bifurcada, cicle, hash que no recompon…).
  • Si algun PDF no es va poder recuperar (per exemple, perquè es va esborrar per una sol·licitud RGPD, o perquè el justificant d'un desistiment no es va arribar a generar mai), queda anotat a la llista de PDF no disponibles amb el seu motiu, en lloc de fer fallar tota l'exportació.

El mateix INTEGRITY.json no pot contenir el seu propi hash, així que és l'únic fitxer que no s'autocomprova; tota la resta sí.

Relació amb altres funcions

L'audit log és la base de les plantilles legals i del PDF de justificant de recepció (vegeu «Què conté el PDF de justificant de recepció del desistiment?»): cada confirmació de desistiment que s'envia al client queda ancorada a la cadena de hashos. Per entendre quins correus generen aquests esdeveniments, mira «Quins correus envia returnEasier i a qui?». I abans de desinstal·lar o cancel·lar, convé exportar l'històric: ho explica «Què passa amb les meves dades si desinstal·lo o cancel·lo returnEasier?».

T'ha servit aquest article?