Il registro di audit di returnEasier è un registro immutabile di tutto ciò che accade alle tue richieste: ogni volta che ne viene creata una, viene approvata, viene segnata come ricevuta o viene rimborsata, resta una riga che non si può modificare né cancellare. Ogni evento viene sigillato con un hash SHA-256 concatenato con il precedente, formando una catena a prova di manomissione. Quando hai bisogno di fornire prove —a un revisore, all'amministrazione o al tuo consulente— vai su Conformità → Esporta e scarichi uno ZIP con tutto lo storico e un file di integrità per verificarlo.
Perché il registro è immutabile?
La tabella degli eventi è append-only: il database ammette solo l'aggiunta di righe. Un trigger di PostgreSQL rifiuta qualsiasi tentativo di UPDATE o DELETE su di essa, da qualunque parte provenga (l'app, uno script, una migrazione o un attaccante con permessi). Non è una promessa di configurazione: è imposto nel motore del database.
Su questa base si costruisce la catena di hash:
- Ogni evento viene convertito in un JSON canonico (chiavi ordinate, senza ambiguità) e gli viene calcolato uno SHA-256.
- Quell'hash viene calcolato includendo l'hash dell'evento precedente (
hash_precedente). Il primo evento di ogni catena è il «genesi». - Se qualcuno modificasse un solo dato di un evento passato, il suo hash cambierebbe e smetterebbe di combaciare con l'
hash_precedentedell'evento successivo: la manomissione si tradisce da sola.
Le richieste (return_requests) portano anche il proprio hash e hash precedente, che vengono inclusi nell'esportazione affinché si possano verificare fuori dall'app.
Come esporto il mio storico verificabile?
L'esportazione vive in Conformità → Esporta (percorso /app/settings/compliance/export) dentro l'app, nello Shopify Admin.
- Apri Conformità → Esporta nel menu laterale.
- Indica un intervallo di date: «da» e «a» (formato data). Puoi lasciare entrambi vuoti per esportare tutto il tuo storico. Le date vengono interpretate nel fuso orario del tuo negozio (per impostazione predefinita Europe/Madrid).
- Premi esporta. A seconda del numero di richieste dell'intervallo, returnEasier fa una di due cose (vedi più avanti).
Download all'istante o via email, a seconda del volume
returnEasier adatta la consegna alla dimensione dell'intervallo per non bloccare il browser con download enormi:
| Richieste nell'intervallo | Cosa succede |
|---|---|
| 0 – 100 | Si genera e si scarica lo ZIP all'istante. |
| 101 – 1000 | returnEasier ti invia lo ZIP via email (link temporaneo). |
| Più di 1000 | L'esportazione viene rifiutata: restringi l'intervallo di date. |
Il limite rigido è di 1000 richieste per esportazione. Se il tuo storico è più grande, suddividilo in più intervalli di date (per esempio, trimestre per trimestre) ed esporta ciascuno.
Cosa c'è dentro lo ZIP?
Il file si chiama returneasier-auditoria-<tuo-negozio>-<data>.zip e contiene:
LEGGIMI.txt— guida in linguaggio chiaro: cos'è ogni file e come verificare l'integrità.solicitudes.csv— una riga per richiesta, con colonne comepublic_id,tipo,estado,creada_en_utc,resuelta_en_utc,pedido,cliente_email,cliente_nombre,importe,moneda,motivo,resolucion_preferida,notas_cliente,hash,hash_anteriorerefund_id.eventos.csv— il registro append-only completo:public_id,evento,actor,actor_id,fecha_utc,hash,hash_anteriorepayload_json.pdfs/— i PDF di ricevuta di recesso di ciascun recesso, uno per richiesta.INTEGRITY.json— il file di integrità: algoritmo (SHA-256), conteggi, l'hash di ogni file dello ZIP e la verifica di ogni catena di eventi.
Come verifico l'integrità dell'esportazione?
L'INTEGRITY.json è il pezzo chiave per dimostrare che nulla è stato toccato:
- Contiene l'hash SHA-256 di ogni file dello ZIP. Ricalcola l'hash di, per esempio,
eventos.csvcon qualsiasi strumento standard e confrontalo con quello indicato lì. - Include la verifica di ogni catena di eventi: per ciascuna richiesta indica se la sua catena è «ok» o «rotta» e, se del caso, il motivo (catena biforcata, ciclo, hash che non si ricostruisce…).
- Se qualche PDF non si è potuto recuperare (per esempio, perché è stato cancellato per una richiesta GDPR), resta annotato nell'elenco dei PDF non disponibili con il suo motivo, anziché far fallire l'intera esportazione.
L'INTEGRITY.json stesso non può contenere il proprio hash, quindi è l'unico file che non si autoverifica; tutto il resto sì.
Relazione con altre funzioni
Il registro di audit è la base dei modelli legali e del PDF di ricevuta di recesso (vedi «Cosa contiene il PDF di ricevuta del recesso?»): ogni conferma di recesso che viene inviata al cliente resta ancorata alla catena di hash. Per capire quali email generano quegli eventi, guarda «Quali email invia returnEasier e a chi?». E prima di disinstallare o annullare, conviene esportare lo storico: lo racconta «Disinstallare o annullare returnEasier».