JustCyber

ComplianceBot AI

Você precisa provar conformidade em LGPD, ISO 27001, SOC 2, PCI DSS ou NIST CSF e não sabe onde está o buraco.

O ComplianceBot é um assessment multi-framework. O checklist de cada norma é conteúdo do produto, escrito e versionado em código: 52 perguntas ao todo — 11 para LGPD, 11 para ISO 27001, 8 para SOC 2, 12 para PCI DSS e 10 para NIST CSF. O banco guarda só as respostas do seu tenant e o score derivado, com chave por (tenant, framework, versão do checklist). Quando o checklist muda de versão, as respostas antigas continuam íntegras na versão antiga.

O cálculo é uma função pura. Cada item tem peso; cada resposta vale 1,0 (sim), 0,5 (parcial) ou 0 (não). 'Não se aplica' e item sem resposta saem do denominador — não penalizam nem inflam. Isso evita o falso zero que assusta o cliente na primeira tela. O readiness sai global e por domínio, e é recomputado tanto na escrita quanto na leitura, então o número na tela sempre bate com as respostas gravadas.

O relatório de gap é derivado a cada requisição, numa única varredura dos itens: classifica cada controle, ordena os gaps por prioridade e peso, agrega a quebra por domínio e devolve a faixa de maturidade. A minuta por IA passa pelo Gateway da plataforma com allowlist explícita de oito campos estruturados — nome de titular, documento e e-mail não têm por onde entrar. A minuta volta como rascunho, com disclaimer, e não é gravada como documento.

O que faz hoje

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.

  • Checklist versionado de cinco frameworks

    GET /frameworks e GET /assessment/checklist devolvem domínios, rótulos de exibição e perguntas em português. Conteúdo declarativo em readiness.py, com versão própria por framework (lgpd.v1, iso27001.v1, soc2.v1, pci.v1, nist_csf.v1).

  • Readiness determinístico, global e por domínio

    compute_readiness é função pura: mesma entrada, mesma saída. Recomputado no PUT das respostas e de novo na leitura — o número na tela nunca depende de cache. O score também é gravado na linha do assessment (`readiness_score`, `readiness_by_domain`, `snapshot_at`) como carimbo, mas a API não o lê de volta: toda leitura recalcula a partir das respostas.

  • Relatório de gap e maturidade

    Classifica cada item em atendido, parcial, não atendido, não aplicável ou não avaliado; lista os gaps ordenados por prioridade e peso; devolve total, respondidos, conformes, parciais e não conformes por domínio, mais a faixa de maturidade (incipiente, inicial, intermediário, avançado).

  • Repositório de evidências por controle

    POST, GET e DELETE em /evidences, com framework, referência de controle, título, chave de objeto opaca, hash e validade. Idempotency-Key obrigatório na criação.

  • Minuta por IA em quatro tipos

    Política, procedimento, declaração e resposta a auditor. Entrada minimizada por allowlist, nota livre do operador embrulhada como dado (nunca instrução) e disclaimer obrigatório, devolvido pela API em toda minuta. O prompt ainda instrui o modelo a marcar [REVISAR: ...] no que faltar — esse marcador depende do modelo, o código não o verifica. Idempotency-Key obrigatório — a geração custa IA.

  • Trilha append-only

    audit_log recebe assessment.answered, evidence.created, evidence.deleted e draft.generated, sempre sem PII e sem o conteúdo da minuta.

O que fica com você

Entregáveis

  • Tela de assessment por framework com score global e por domínio
  • Relatório de gap com lista priorizada, quebra por domínio e faixa de maturidade
  • Inventário de evidências vinculadas a controles
  • Minuta de documento em texto, marcada como rascunho

O que este módulo não faz

Não há upload de arquivo: POST /evidences grava apenas metadados, e arquivo_s3_key é uma string informada por você — o bucket S3/MinIO é gancho externo e não existe no código. Não há exportação em PDF ou DOCX; o relatório sai como JSON e a renderização é da tela. A minuta não é persistida: só metadados (tipo, framework, run_id, modelo) vão para compliancebot_drafts, o texto volta na resposta e some — não existe GET /drafts. Os checklists são de alto nível, de 8 a 12 perguntas por framework: não é auditoria item-a-item do Anexo A da ISO nem dos 12 requisitos do PCI. valid_until é gravado, mas nenhum job vigia evidência vencida. O status do assessment nunca chega a 'concluido' pela API: sobe de 'rascunho' para 'em_andamento' e para aí.

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.ai.gateway (task compliancebot_draft, budget_scope subscription, allowlist de egress própria)
  • app.api.idempotency (Idempotency-Key obrigatório em evidências e minutas)
  • audit_log append-only da Fundação
  • RLS FORCE nas tabelas compliancebot_* (migration 0022)
  • RBAC da plataforma (app/rbac/catalog.py)

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.

  • compliancebot:assessment:read
  • compliancebot:assessment:write
  • compliancebot:evidence:read
  • compliancebot:evidence:write
  • compliancebot:draft:generate
ComplianceBot AI

Quer ver funcionando?

Demonstração com dado do seu ambiente, não com base de exemplo. É a única forma de saber se serve.