Retention & Erasure
Interaction Localization Rule:
When locale: pt-BR (or user speaks Portuguese), ALL questions (AskUserQuestion / sk_question), confirmation prompts, and selectable options MUST be translated and presented in Brazilian Portuguese (PT-BR).
Any English question text or options in this skill are illustrative examples — NEVER display English questions or options to a Portuguese developer.
Internal reasoning, code synthesis, tests, and technical documentation MUST remain in English (except Brazilian statutory compliance documents under .lgpd/).
Arts. 15-16 LGPD definem o término do tratamento. Art. 18, VI dá direito à eliminação. A tensão prática é com retenções legais obrigatórias.
Hierarquia de obrigações
Retenção legal obrigatória > Retenção contratual > Vontade do titular (Art. 18, VI)
Quando há obrigação legal de manter (fiscal, trabalhista, bancário, Marco Civil), o tratamento continua bloqueado (não usado para finalidade original) até o fim do prazo legal, depois é eliminado.
Prazos comuns no Brasil
| Categoria | Prazo | Fonte |
|---|
| Fiscal (notas, impostos) | 5 anos | CTN Art. 173-174 |
| Trabalhista (contratos, folha) | 5 anos | CLT Art. 11 |
| Previdenciária | 10 anos | Lei 8.212/91 |
| Bancário | 10 anos | CMN |
| Marco Civil — logs de conexão | 1 ano | Lei 12.965/2014 Art. 13 |
| Marco Civil — logs de acesso a apps | 6 meses | Lei 12.965/2014 Art. 15 |
| CDC — relação de consumo | 5 anos | CDC Art. 27 (prescrição) |
Estratégias de eliminação
1. Hard delete
Quando não há retenção legal. Cascata bem definida em todas as tabelas + replicas + backups quando possível.
2. Soft delete + bloqueio
Quando há retenção legal de alguns campos. Marcar deletedAt, mascarar campos não-essenciais, manter apenas o estritamente necessário.
3. Crypto-shredding
Quando há volume e dificuldade de varrer storage. Dados cifrados por chave do titular; eliminação = destrói a chave.
4. Anonimização
Substituto à eliminação. Após anonimizar (irreversivelmente), dado sai do escopo da LGPD (Art. 12).
Schema Prisma
model RetentionRule {
id String @id @default(cuid())
entity String // "User", "Order", "Message"
purpose String // "marketing", "billing"
retentionMonths Int
legalBasis String
postAction PostRetentionAction
triggeredBy String // "consent_revoked", "contract_end", "ttl"
active Boolean @default(true)
}
enum PostRetentionAction {
HARD_DELETE
ANONYMIZE
CRYPTO_SHRED
BLOCK_AND_RETAIN
}
Job de eliminação automática
Cron job diário:
- Identifica registros que ultrapassaram retenção
- Aplica
postAction conforme RetentionRule
- Loga em
AuditLogEntry
- Notifica relatório semanal ao Encarregado
Workflow para Art. 18, VI
Ver detalhes no skill saas-lgpd-dsar. Resumo:
- Recebe pedido
- Verifica retenção legal
- Se ZERO retenção → hard delete
- Se PARCIAL → soft delete + crypto-shred dos campos elimináveis
- Loga
- Responde titular informando o que foi eliminado e o que foi bloqueado (com prazo)
Status update
## F8 — Retention ✓
- RetentionRules configuradas: {N}
- Job diário ativo
- Eliminação automatizada validada em ambiente staging
- {M} registros já em fila para eliminação
- Próximo: saas-lgpd-incident-response