O returnEasier está construído para o RGPD desde a base: os dados dos teus pedidos e dos teus clientes vivem em servidores da União Europeia e a aplicação responde corretamente aos três webhooks de privacidade da Shopify (pedido de acesso, apagamento de cliente e apagamento de loja). O único dado que se conserva após um apagamento é o registo de auditoria de eventos, e conserva-se precisamente porque é a prova legal de que cumpriu o Artigo 11.º-A.
Onde estão os dados? (residência UE)
Estes são os fornecedores que tocam em dados, e onde estão:
| Serviço | Fornecedor | Região / nota |
|---|---|---|
| Base de dados | Neon | eu-central-1 (AWS, Frankfurt) |
| Ficheiros (PDF, fotos…) | Cloudflare R2 | Jurisdição UE (.eu) |
| Email transacional | Brevo | França (sem Schrems II) |
| Rate limiting | Upstash | Contadores de limite por IP |
Além disso, o token de acesso da sua loja e as chaves de Sendcloud guardam-se cifrados (AES-256-GCM), e todos os webhooks se validam com HMAC antes de serem processados. Nunca se registam emails nem dados pessoais nos logs: para correlacionar usa-se uma impressão digital (os primeiros caracteres de um hash do email).
Os três webhooks de RGPD
A Shopify exige que toda a aplicação responda a três webhooks de privacidade. O returnEasier implementa-os assim:
1. Pedido de acesso (customers/data_request)
Quando um cliente exerce o seu direito de acesso, o returnEasier reúne todos os dados pessoais que tem dele —encomendas, pedidos, eventos, confirmações e verificações do portal— e envia-os a si, o responsável pelo tratamento, num export JSON por email. A aplicação não guarda cópia do export: gera-o e entrega-o. Se ele lhe pedir de novo os seus dados, gera-se outra vez.
2. Apagamento de cliente (customers/redact)
Quando um cliente pede o apagamento dos seus dados, o returnEasier:
- Anonimiza o email (para um valor neutro) e apaga o nome nas suas encomendas.
- Apaga as notas do cliente nos pedidos (os campos estruturais —quantidades, motivo— conservam-se).
- Invalida de imediato a sua verificação do portal.
- Elimina as confirmações de resolução do contrato e os seus PDF de R2.
- Conserva o registo de auditoria de eventos: é append-only, com hash encadeado, e mantém-se como prova do cumprimento legal.
3. Apagamento de loja (shop/redact)
A Shopify dispara este webhook 48 horas depois de desinstalar a aplicação. O returnEasier faz uma limpeza profunda: anonimiza os dados de clientes de toda a loja, apaga os ficheiros de R2 (PDF, fotos, etiquetas), limpa a configuração (definições legais, branding, Sendcloud), reda o token e deixa o plano em Free. A linha da loja e o registo de auditoria conservam-se (o registo referencia a loja) como tombstone para que o registo continue a ser atribuível.
Como se reconcilia o apagamento com um registo append-only?
É a pergunta-chave. O registo de auditoria é append-only: pela via normal da aplicação, a base de dados rejeita com um trigger os UPDATE e DELETE sobre os eventos. Quando chega um apagamento, anonimizam-se as tabelas mutáveis (encomendas, notas, verificações) e apagam-se os ficheiros, mas os eventos conservam-se ao abrigo da base legal de obrigação legal (provar o cumprimento do Artigo 11.º-A).
Nota de transparência: a base legal concreta para conservar PII dentro do registo append-only está pendente de revisão por advogado. Como próximo passo está prevista uma retenção por camadas do próprio registo (conservar apenas os hashes passado um prazo maior); entretanto, as linhas de eventos conservam-se protegidas por um trigger que, pela via normal da aplicação, impede modificá-las ou apagá-las.
Anonimização automática aos 5 anos
Além dos apagamentos que a Shopify dispara, o returnEasier executa uma tarefa semanal (todas as segundas-feiras de madrugada, em UTC) que aplica a retenção de 5 anos: cada registo corre o seu próprio relógio desde a criação e, passado o prazo, a tarefa:
- Anonimiza o email (para um valor neutro) e apaga o nome nas encomendas antigas.
- Apaga as notas do cliente nos pedidos (incluídas as notas por artigo); os campos estruturais —quantidades, motivo— conservam-se.
- Anonimiza as verificações do portal caducadas.
- Elimina de R2 os ficheiros associados: o PDF de confirmação, a etiqueta de envio e as fotos do cliente.
- Deixa rasto no registo de auditoria com um evento de anonimização (sem dados pessoais), que além disso evita repetir o trabalho.
Se o apagamento de um ficheiro falhar, a tarefa não dá o registo por anonimizado: tenta de novo na semana seguinte até confirmar que o ficheiro desapareceu. Não tem de configurar nada: a retenção funciona sozinha em todos os planos.
O que pode fazer você?
- Atender pedidos dos seus clientes: os webhooks da Shopify encarregam-se do trabalho automaticamente; você recebe o export de acesso por email.
- Exportar o seu histórico antes de desinstalar (ver «O que é o registo de auditoria e como exporto o meu histórico auditável?»).
- Entender o que acontece ao desinstalar ou cancelar: detalha-o «Desinstalar ou cancelar o returnEasier».