2 Commits
Author SHA1 Message Date
melgarafaelandClaude Opus 5.5 f399c920ce fix(eventos): handler declara o que faz na organização parada
naOrgParada obrigatório no EventHandler; o dreno lê o status das orgs do
lote numa consulta só e o dispatcher consome como skipped quem custa ou
sai para fora. Leitura que falha adia o lote em vez de consumir às cegas.

Invariante alterado sem afrouxar invariante da main — checar-invariantes-so-crescem.sh verde.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 23:50:57 -03:00
Rafael MelgaçoandClaude Opus 4.7 9f6a73bda5 feat(EPIC-08): lgpd-redact-worker [wave 5]
Cascade SQL transacional via RPC fn_lgpd_cascade_redact_contact (security
definer, search_path=public, atomic per contact). 7 mutations dentro de
1 TX:
1. contacts → is_anonymized=true, name='Cliente Anonimizado #...',
   email/phone/cpf/birthdate nulled, consent={}, tags=[] (L-04 irreversível)
2. conversations.metadata = {}
3. messages: body='[mensagem anonimizada]', media_url=null, metadata={}
4. crm_lead_activities.metadata = {}
5. crm_leads.title anonimizado + metadata pessoal stripped
6. orders: PRESERVADOS (valor histórico fiscal, Spec 06 §7.1) — apenas
   metadata personal-fields stripped
7. storage_redaction_queue: media URLs enfileiradas pra deleção async
8. api_audit_log: lgpd.redact_executed com cascaded_to counts + bypassed_rls

Worker:
- scope='contact': 1 RPC call; idempotente (already_anonymized short-circuit)
- scope='tenant' (emergency=true): batches de 100 com checkpoint em
  request_payload.progress (resumível); ao final flips
  organizations.status='redacted'
- Tenta callback NuvemshopAdapter.redactCustomer (stub se adapter ausente)
- Status flow received → processing → completed | failed | partial_failure
- attempts capped at 3
- Emit lgpd.redact_applied + lgpd.redact_failed; audit dense; zero PII em logs

Storage cleanup worker drena storage_redaction_queue async (cron-friendly).

Migrations:
- 0018_lgpd_redaction_queue: tabela storage_redaction_queue + RLS
- 0019_lgpd_cascade_redact_rpc: function fn_lgpd_cascade_redact_contact

L-01/L-04/L-06 enforced. Spec 01 §8.2 + Spec 06 §7.1 implementados.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 12:06:09 -03:00