returnEasier è costruito per il GDPR fin dalle fondamenta: tutti i dati personali vivono su server dell'Unione Europea e l'app risponde correttamente ai tre webhook di privacy di Shopify (richiesta di accesso, cancellazione del cliente e cancellazione del negozio). L'unico dato che si conserva dopo una cancellazione è il registro di audit degli eventi, e si conserva proprio perché è la prova legale del fatto che hai rispettato l'Articolo 11 bis.
Dove si trovano i dati? (residenza UE)
Tutti i fornitori con dati personali sono nell'Unione Europea:
| Servizio | Fornitore | Regione / nota |
|---|---|---|
| Database | Neon | eu-west-2 (AWS, Londra) |
| File (PDF, foto…) | Cloudflare R2 | Giurisdizione UE (.eu) |
| Email transazionale | Brevo | Francia (senza Schrems II) |
| Rate limiting | Upstash | UE |
| Errori | Sentry | Istanza UE, con scrubbing di PII |
| Analytics di prodotto | PostHog | Istanza UE |
Inoltre, il token di accesso del tuo negozio e le chiavi di Sendcloud vengono conservati cifrati (AES-256-GCM), e tutti i webhook vengono validati con HMAC prima di essere elaborati. Mai vengono registrate email o dati personali nei log: per correlare si usa un'impronta (i primi caratteri di un hash dell'email).
I tre webhook del GDPR
Shopify esige che ogni app risponda a tre webhook di privacy. returnEasier li implementa così:
1. Richiesta di accesso (customers/data_request)
Quando un cliente esercita il suo diritto di accesso, returnEasier riunisce tutti i dati personali che ha di lui —ordini, richieste, eventi, conferme e verifiche del portale— e te li invia a te, il titolare del trattamento, in un export JSON via email. L'app non conserva copia dell'export: lo genera e lo consegna. Se ti richiede di nuovo i suoi dati, viene generato di nuovo.
2. Cancellazione del cliente (customers/redact)
Quando un cliente richiede la cancellazione dei suoi dati, returnEasier:
- Anonimizza l'email (con un valore neutro) e cancella il nome nei suoi ordini.
- Cancella le note del cliente nelle richieste (i campi strutturali —quantità, motivo— si conservano).
- Invalida immediatamente la sua verifica del portale.
- Elimina le conferme di recesso e i loro PDF da R2.
- Conserva il registro di audit degli eventi: è immutabile e si mantiene come prova della conformità legale.
3. Cancellazione del negozio (shop/redact)
Shopify attiva questo webhook 48 ore dopo che disinstalli l'app. returnEasier esegue una pulizia profonda: anonimizza i dati dei clienti di tutto il negozio, cancella i file da R2 (PDF, foto, etichette), ripulisce la configurazione (impostazioni legali, branding, Sendcloud), redige il token e lascia il piano su Free. La riga del negozio e il registro di audit si conservano (il log fa riferimento al negozio) come tombstone affinché il registro resti attribuibile.
Come si concilia la cancellazione con un log immutabile?
È la domanda chiave. Il registro di audit è append-only: il database rifiuta qualsiasi UPDATE o DELETE sugli eventi. Quando arriva una cancellazione, si anonimizzano le tabelle mutabili (ordini, note, verifiche) e si cancellano i file, ma gli eventi si conservano sulla base giuridica dell'obbligo legale (provare la conformità all'Articolo 11 bis).
Nota di trasparenza: la base giuridica concreta per conservare PII dentro il log immutabile è in attesa di revisione da parte di un avvocato. Come passo successivo è prevista una conservazione a livelli del log stesso (conservare solo gli hash trascorso un termine più lungo); nel frattempo, le righe di eventi si conservano protette dal trigger di immutabilità.
Anonimizzazione automatica dopo 5 anni
Oltre alle cancellazioni attivate da Shopify, returnEasier esegue un'attività settimanale (ogni lunedì nelle prime ore del mattino, in UTC) che applica la conservazione di 5 anni: ogni record fa correre il proprio orologio dalla sua creazione e, trascorso il termine, l'attività:
- Anonimizza l'email (con un valore neutro) e cancella il nome negli ordini più vecchi.
- Cancella le note del cliente nelle richieste (incluse le note per articolo); i campi strutturali —quantità, motivo— si conservano.
- Anonimizza le verifiche del portale scadute.
- Elimina da R2 i file associati: il PDF di conferma, l'etichetta di spedizione e le foto del cliente.
- Lascia traccia nel registro di audit con un evento di anonimizzazione (senza dati personali), che inoltre evita di ripetere il lavoro.
Se la cancellazione di un file fallisce, l'attività non considera il record anonimizzato: ci riprova la settimana successiva finché non conferma che il file è sparito. Non devi configurare nulla: la conservazione funziona da sola in tutti i piani.
Cosa puoi fare tu?
- Gestire le richieste dei tuoi clienti: i webhook di Shopify si occupano del lavoro automaticamente; tu ricevi l'export di accesso via email.
- Esportare il tuo storico prima di disinstallare (vedi «Cos'è il registro di audit e come esporto il mio storico verificabile?»).
- Capire cosa succede alla disinstallazione o annullamento: lo spiega in dettaglio «Disinstallare o annullare returnEasier».