JustCyber

RN964 Cockpit

Agente do setor elétrico precisa mostrar à ANEEL onde está cada controle da RN 964 e o que já foi feito a respeito.

O RN964 Cockpit é GRC verticalizado para a Resolução Normativa 964/2021 da ANEEL. A diferença estrutural para os outros módulos de conformidade está na origem do score: aqui o readiness não vem de um questionário, vem do estado real dos controles que o cliente cadastra. Cada controle tem código único no tenant, domínio e status; mudar o status recomputa o readiness na mesma transação.

O catálogo declarativo traz oito domínios com peso relativo: governança e gestão de risco (1,5), proteção e resposta (2,0), detecção (1,5), recuperação, continuidade e terceiros (1,0). O cálculo é a média dos controles aplicáveis dentro do domínio, e depois a média ponderada dos domínios que têm controle. 'Não aplicável' sai do denominador; 'não avaliado' conta como zero, porque só é pronto o que já foi confirmado. Domínio sem controle algum é omitido em vez de virar zero.

Incidente e plano de ação fecham o ciclo. O incidente ganha referência legível, prazo de comunicação em dias úteis derivado no serviço, o marcador afeta_ot de primeira classe e uma máquina de seis estados que carimba a comunicação à ANEEL e ao ONS uma única vez. O item do plano de ação pode apontar para um controle e/ou um incidente, e esse vínculo é validado no mesmo tenant sob RLS — um id de outro tenant recebe a mesma resposta de um id inexistente, sem vazar existência.

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.

  • Controles com código único por tenant

    CRUD completo em oito domínios e cinco status (não avaliado, não conforme, parcial, conforme, não aplicável). Código duplicado devolve conflito.

  • Readiness derivado do estado real dos controles

    compute_readiness é função pura sobre a lista de controles. Recomputado a cada mutação, na leitura do assessment e no POST /assessment/recompute, com snapshot materializado por versão do framework (rn964-2021.v1).

  • Incidente ciber com prazo regulatório derivado

    Referência RN964INC-2026-0001 e aneel_prazo_at igual a detectado_em mais N dias úteis (JC_RN964_INCIDENT_REPORT_DEADLINE_DAYS, padrão 2), calculado no serviço, nunca aceito do corpo. Nove categorias, incluindo ot_ics e ransomware.

  • Máquina de estados do incidente

    Seis estados. Comunicar à ANEEL ou ao ONS carimba a data com COALESCE — idempotente, não sobrescreve o carimbo original. Transição não prevista devolve 409.

  • Plano de ação com vínculo validado

    Item com prioridade, responsável, prazo e vínculo opcional a controle e/ou incidente. O vínculo é checado no mesmo tenant sob RLS; inexistente devolve 422 sem revelar se pertence a outro tenant. Máquina de cinco estados com reabertura.

  • Escalação a partir do OT Sentinel

    O catálogo RBAC registra que o escalate do OT Sentinel cria incidente RN964 com afeta_ot verdadeiro reusando este serviço, com o vínculo feito sob RLS.

  • Trilha append-only por objeto

    audit_log recebe control.created/updated/deleted, incident.registered, incident.status_changed, action.created e assessment.recomputed, sempre sem PII de terceiro.

O que fica com você

Entregáveis

  • Painel de controles por domínio com status atual
  • Readiness global e por domínio, versionado e recomputável sob demanda
  • Registro de incidentes com prazo ANEEL/ONS e carimbos de comunicação
  • Plano de ação priorizado, amarrado ao controle ou ao incidente que o originou

O que este módulo não faz

Não vem catálogo de controles da RN 964. O produto traz os oito domínios e seus pesos; a lista de controles é cadastrada pelo cliente ou pelo consultor — o seed cria um único controle de demonstração. Não há mapeamento artigo-a-artigo da resolução no código. O prazo de 2 dias úteis é placeholder configurável, marcado como tal no próprio código: o número exato da norma não está fixado. O cálculo de dias úteis pula só sábado e domingo, sem feriado. Não há alerta de prazo: nenhum beat vigia aneel_prazo_at, diferente do CondoLGPD, que tem beat para DSAR. Não há minuta por IA — o módulo não tem generate.py nem escopo de draft. readiness.catalog_payload() está escrito mas nenhuma rota o expõe, então a tela precisa duplicar a lista de domínios. Não há relatório de gap agregado nem exportação: existe a leitura dos controles e o score, e nada além disso.

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

  • OT Sentinel (escalate cria incidente RN964 com afeta_ot, vínculo sob RLS)
  • app.api.idempotency (POST de controles, incidentes, itens de ação e recompute)
  • audit_log append-only
  • RLS FORCE nas quatro tabelas rn964_* (migration 0019)
  • 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.

  • rn964:control:read
  • rn964:control:write
  • rn964:assessment:read
  • rn964:assessment:write
  • rn964:incident:read
  • rn964:incident:write
  • rn964:action:read
  • rn964:action:write
RN964 Cockpit

Quer ver funcionando?

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