CondoLGPD
Condomínio com CFTV, portaria e biometria tratando dado de morador, e o síndico sem registro, sem prazo e sem prova.
O CondoLGPD cobre quatro frentes de conformidade em uma só base: o registro das operações de tratamento (ROPA), a fila de solicitações do titular (DSAR), o assessment de prontidão LGPD e o registro de incidentes de dados. Cada uma é tenant-scoped sob RLS FORCE — o tenant vem do JWT, nunca do corpo da requisição.
O prazo é cidadão de primeira classe. Ao abrir um DSAR, o serviço gera um protocolo legível (DSAR-2026-0001) e calcula o prazo como criação mais 15 dias corridos, configurável, jamais aceito do corpo. A fila mostra dias restantes e marca o vencido. A mudança de estado passa por uma máquina de cinco estados com efeitos: responder exige a resposta preenchida, recusar exige justificativa, reabrir limpa os carimbos, e transição inválida devolve 409. Um beat cross-tenant descobre os que vão vencer e os vencidos, carimba e emite o alerta no outbox na mesma transação, com deduplicação por estágio — um aviso na janela e um ao vencer, sem spam a cada tick.
A minimização é explícita. Na visão de fila, CPF e contato do titular não saem: só o nome. A PII completa só aparece no detalhe. O payload do alerta carrega apenas referências (protocolo, tipo, prazo, id do destinatário) — o e-mail em claro é resolvido dentro da task de e-mail, sob RLS. A trilha de auditoria grava estados e ids, nunca dado pessoal cru.
Capacidades em operação
Cada item corresponde a funcionalidade que existe no código e é alcançável por um usuário com o escopo correto.
-
ROPA com vocabulário do setor
CRUD do registro de operações com as dez bases legais, categorias de titular (moradores, condôminos, funcionários, visitantes, prestadores) e de dado (incluindo imagem_cftv, biometrico e saude), compartilhamento estruturado por destinatário e finalidade, retenção e medidas de segurança.
-
DSAR com prazo legal derivado no serviço
Protocolo sequencial por ano e prazo calculado na criação (15 dias, JC_CONDOLGPD_DSAR_SLA_DAYS). A fila filtra por status, tipo e vencidos; cada item traz days_left e a marca de overdue.
-
Máquina de estados do DSAR
Cinco estados com transições declaradas e efeitos na mesma transação. Responder sem resposta e recusar sem justificativa são bloqueados com 422; transição não prevista devolve 409.
-
Alerta automático de SLA por e-mail
Beat cross-tenant condolgpd.dsar_sla_check (cadência padrão de 6h) descobre DSAR a 3 dias do vencimento e já vencidos, carimba alertado_em e emite condolgpd.dsar_due no outbox na mesma transação. O relay entrega à fila de e-mail. Dedup por estágio garante um aviso na janela e um ao vencer.
-
Assessment LGPD de condomínio
Doze perguntas em cinco domínios, com CFTV como domínio próprio: placa de aviso, prazo de retenção das imagens e RIPD de biometria. Score determinístico global e por domínio, mesma regra de peso do ComplianceBot.
-
Incidente com prazo ANPD calculado
Referência INC-2026-0001 e anpd_prazo_at igual a detectado_em mais 3 dias úteis, derivado no serviço.
-
Minuta por IA em três tipos
Política de privacidade, aviso de CFTV e resposta a DSAR, via Gateway com allowlist de egress. A nota livre do operador entra embrulhada como dado. Sempre rascunho, com disclaimer.
-
Timeline por solicitação
O detalhe do DSAR devolve os eventos daquele registro lidos do audit_log, em ordem cronológica.
Entregáveis
- Registro de operações de tratamento (ROPA) consultável pela API
- Fila de DSAR com protocolo, prazo, dias restantes e marcação de vencido
- Score de prontidão LGPD, global e por domínio, com CFTV separado
- Registro de incidentes com prazo ANPD já calculado
- Minuta de política, aviso de CFTV ou resposta ao titular, em texto, marcada como rascunho
O que este módulo não faz
O beat de SLA nasce desligado: JC_CONDOLGPD_ENABLED é false por padrão. Sem ligar, a fila e os prazos funcionam, mas nenhum e-mail sai. O cálculo de dias úteis pula só sábado e domingo — feriado não é considerado, e isso está declarado no código como aproximação. Não há alerta de prazo ANPD: o prazo do incidente é calculado e exibido, mas nenhum job o vigia; o beat cobre apenas DSAR. O incidente não tem máquina de estados — o status muda por PATCH livre, sem validação de transição, diferente do DSAR e do RN964. Não existe canal público para o titular abrir a solicitação: 'portal' é só um rótulo de origem, e POST /dsar exige o escopo condolgpd:dsar:write. A minuta não é persistida, nem seus metadados: fica só a linha de auditoria com tipo e run_id. A função service.emit_dsar_due está escrita e não tem chamador — o beat reimplementa a mesma emissão inline. Não há exportação em PDF do ROPA nem do relatório.
Declaramos o limite porque software de segurança que promete tudo não é auditável. Se o que falta aqui é o que você precisa, o serviço consultivo cobre — ou dizemos que não cobre.
Conecta com
- app.core.outbox (fato de domínio condolgpd.dsar_due, transacional)
- worker/tasks/outbox.py → fila emails (task email.send)
- Celery beat condolgpd-dsar-sla-check
- app.ai.gateway (task condolgpd_draft, budget_scope subscription)
- app.api.idempotency (POST de ROPA, DSAR, incidentes e minutas)
- audit_log append-only
- RLS FORCE nas tabelas condolgpd_* (migration 0018)
Controle de acesso
O acesso é concedido por escopo, não por perfil genérico. Quem só precisa ler não recebe permissão de escrita, e a barreira é o banco de dados, não a interface.
- condolgpd:ropa:read
- condolgpd:ropa:write
- condolgpd:dsar:read
- condolgpd:dsar:write
- condolgpd:assessment:read
- condolgpd:assessment:write
- condolgpd:incident:read
- condolgpd:incident:write
- condolgpd:draft:generate
Quer ver funcionando?
Demonstração com dado do seu ambiente, não com base de exemplo. É a única forma de saber se serve.