returnEasier est conçu pour le RGPD dès la base : toutes les données personnelles vivent sur des serveurs de l'Union européenne et l'application répond correctement aux trois webhooks de confidentialité de Shopify (demande d'accès, suppression de client et suppression de boutique). La seule donnée conservée après une suppression est le journal d'audit des événements, et il est conservé précisément parce qu'il est la preuve légale que vous avez respecté l'Article 11 bis.
Où sont les données ? (résidence UE)
Tous les prestataires détenant des données personnelles sont dans l'Union européenne :
| Service | Prestataire | Région / note |
|---|---|---|
| Base de données | Neon | eu-west-2 (AWS, Londres) |
| Fichiers (PDF, photos…) | Cloudflare R2 | Juridiction UE (.eu) |
| Email transactionnel | Brevo | France (sans Schrems II) |
| Rate limiting | Upstash | UE |
| Erreurs | Sentry | Instance UE, avec scrubbing des PII |
| Analytique produit | PostHog | Instance UE |
De plus, le jeton d'accès de votre boutique et les clés Sendcloud sont conservés chiffrés (AES-256-GCM), et tous les webhooks sont validés par HMAC avant traitement. Jamais d'emails ni de données personnelles ne sont consignés dans les logs : pour corréler, on utilise une empreinte (les premiers caractères d'un hachage de l'email).
Les trois webhooks RGPD
Shopify exige que toute application réponde à trois webhooks de confidentialité. returnEasier les implémente ainsi :
1. Demande d'accès (customers/data_request)
Quand un client exerce son droit d'accès, returnEasier réunit toutes les données personnelles qu'il détient de lui — commandes, demandes, événements, confirmations et vérifications du portail — et vous les envoie à vous, le responsable du traitement, dans un export JSON par email. L'application ne conserve pas de copie de l'export : elle le génère et le livre. S'il vous redemande ses données, il est régénéré.
2. Suppression de client (customers/redact)
Quand un client demande la suppression de ses données, returnEasier :
- Anonymise l'email (vers une valeur neutre) et efface le nom dans ses commandes.
- Efface les notes du client dans les demandes (les champs structurels — quantités, motif — sont conservés).
- Invalide immédiatement sa vérification du portail.
- Supprime les confirmations de rétractation et leurs PDF de R2.
- Conserve le journal d'audit des événements : il est immuable et maintenu comme preuve du respect légal.
3. Suppression de boutique (shop/redact)
Shopify déclenche ce webhook 48 heures après que vous ayez désinstallé l'application. returnEasier procède à un nettoyage approfondi : anonymisation des données des clients de toute la boutique, effacement des fichiers de R2 (PDF, photos, étiquettes), nettoyage de la configuration (paramètres légaux, image de marque, Sendcloud), rédaction du jeton et passage du forfait à Free. La ligne de la boutique et le journal d'audit sont conservés (le journal référence la boutique) comme tombstone afin que le registre reste attribuable.
Comment la suppression se concilie-t-elle avec un journal immuable ?
C'est la question clé. Le journal d'audit est en ajout seul : la base de données rejette tout UPDATE ou DELETE sur les événements. Quand une suppression arrive, les tables mutables sont anonymisées (commandes, notes, vérifications) et les fichiers sont effacés, mais les événements sont conservés sur la base légale d'obligation légale (prouver le respect de l'Article 11 bis).
Note de transparence : la base légale concrète pour conserver des PII dans le journal immuable est en attente de revue par un avocat. La prochaine étape prévue est une rétention par couches du journal lui-même (ne conserver que les hachages au-delà d'un délai plus long) ; en attendant, les lignes d'événements sont conservées, protégées par le déclencheur d'immuabilité.
Anonymisation automatique au bout de 5 ans
En plus des suppressions déclenchées par Shopify, returnEasier exécute une tâche hebdomadaire (chaque lundi au petit matin, en UTC) qui applique la rétention de 5 ans : chaque enregistrement court sa propre horloge depuis sa création et, le délai passé, la tâche :
- Anonymise l'email (vers une valeur neutre) et efface le nom dans les commandes anciennes.
- Efface les notes du client dans les demandes (y compris les notes par article) ; les champs structurels — quantités, motif — sont conservés.
- Anonymise les vérifications du portail expirées.
- Supprime de R2 les fichiers associés : le PDF de confirmation, l'étiquette d'envoi et les photos du client.
- Laisse une trace dans le journal d'audit avec un événement d'anonymisation (sans données personnelles), qui évite en outre de répéter le travail.
Si la suppression d'un fichier échoue, la tâche ne considère pas l'enregistrement comme anonymisé : elle réessaie la semaine suivante jusqu'à confirmer que le fichier a disparu. Vous n'avez rien à configurer : la rétention fonctionne toute seule dans tous les forfaits.
Que pouvez-vous faire, vous ?
- Répondre aux demandes de vos clients : les webhooks de Shopify s'occupent du travail automatiquement ; vous recevez l'export d'accès par email.
- Exporter votre historique avant de désinstaller (voir « Qu'est-ce que le journal d'audit et comment exporter mon historique vérifiable ? »).
- Comprendre ce qui se passe à la désinstallation ou à l'annulation : c'est détaillé dans « Que deviennent mes données si je désinstalle ou annule returnEasier ? ».