O returnEasier está construído para o RGPD desde a base: todos os dados pessoais 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)
Todos os fornecedores com dados pessoais estão na União Europeia:
| Serviço | Fornecedor | Região / nota |
|---|---|---|
| Base de dados | Neon | eu-west-2 (AWS, Londres) |
| Ficheiros (PDF, fotos…) | Cloudflare R2 | Jurisdição UE (.eu) |
| Email transacional | Brevo | França (sem Schrems II) |
| Rate limiting | Upstash | UE |
| Erros | Sentry | Instância UE, com scrubbing de PII |
| Analítica de produto | PostHog | Instância UE |
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: é imutável 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 imutável?
É a pergunta-chave. O registo de auditoria é append-only: a base de dados rejeita qualquer UPDATE ou 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 imutável 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 pelo trigger de imutabilidade.
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».