← Especificação Funcional

CIPA — Microserviço de Gestão

Comissão Interna de Prevenção de Acidentes · NR-5 + Lei 14.457/2022 · integrado à Livon 100% via API
Atualizado
2026-06-28 13:12
20%

Visão Geral

Valor central do projeto

Produzir e preservar a prova legal da CIPA — atas assinadas e imutáveis (hash SHA-256 + auditoria) e eleições com voto secreto real e apuração determinística — conforme a NR-5 e a Lei 14.457/2022, sem depender do banco da Livon.

20% concluído
Progresso geral
13/91
Requisitos concluídos
14%
2/8
Fases concluídas
25%
12
Decisões registradas
5 validadas
15
Eventos na timeline
desde 2026-06-26
O que é

Microserviço em Go, com banco de dados próprio (PostgreSQL), que gere o ciclo de vida completo da CIPA (Comissão Interna de Prevenção de Acidentes — segurança do trabalho) em conformidade com a NR-5 e a Lei 14.457/2022. Roda fora do monólito da Livon (plataforma EHS Django/Nuxt) e integra com ela 100% via API REST: o dado da CIPA (eleições, atas, reuniões, riscos, denúncias) é do microserviço; quem é o usuário, de qual empresa e a lista de colaboradores vêm da Livon pela API. É um backend (API); as telas pertencem à camada Livon/Nuxt.

Contexto
  • Plataforma Livon: EHS/saúde ocupacional brasileira, monólito Django 4.1 + DRF + PostgreSQL (backend) e Nuxt 2/Vue 2 (frontend), auth Keycloak OIDC, multi-tenant (Tenant/appGH Company→Unit). A CIPA é greenfield na Livon — não existe módulo CIPA/NR-5 hoje (só duas flags is_candidate_to_cipa/is_elected_to_cipa em appUser.User).
  • Origem do domínio: um protótipo Lovable (React/Supabase, livon-cipa-hub, ~30 tabelas, RLS) foi submetido a engenharia reversa (_reversa_sdd/). O protótipo é fonte derivada e incompleta — as regras autoritativas NR-5 + Lei 14.457 prevalecem sobre ele.
  • Realidade da integração (sem achismo): "100% via API puro" não é totalmente viável hoje. A auth de sistema da Livon (ClientIntegrationAuthentication) só cobre poucos endpoints; as leituras que a CIPA precisa exigem usuário logado. Padrão que funciona: pass-through do token Keycloak do usuário. A integração é bidirecional (consumir + legar) e exige construir endpoints no lado da Livon (mapeada e rodando local; merge/UAT oficial é o passo final).
  • Lei 14.457/2022: área inteira (canal de denúncia anônimo + treinamento anual de assédio) que o protótipo não tinha — adicionada às regras autoritativas.
  • Estado atual do código: Fases 0–1 prontas e verificadas (fundação agnóstica de regra, observabilidade, auth/ACL/RBAC). ListEligibleVoters, GetCompanyHeadcount e GetUnit retornam ErrLivonEndpointNotAvailable (endpoints a construir na Livon).
  • Gate de processo (regra dura): nenhuma execução de código de feature começa antes de o Bruno revisar e aprovar a visão geral consolidada das fases. As Fases 0–1 ficam como estão.

Especificação Funcional

Todos os 91 requisitos da v1, agrupados por categoria. 13 já entregues e verificados (Fases 0–1).
Authentication AUTH
4/4
  • AUTH-01 O serviço valida localmente o token Keycloak (Bearer JWT) por JWKS — assinatura, iss, aud e exp; token inválido/expirado retorna 401
  • AUTH-02 O serviço extrai um Principal (livon_user_id=sub, email, empresa, unidade, roles) do token e o expõe em GET /api/v1/me
  • AUTH-03 O token do usuário é repassado (pass-through) às chamadas da API da Livon (GET /api/v1/livon/me resolve o colaborador via ACL)
  • AUTH-04 Em modo dev (AUTH_ENABLED=false), o serviço injeta um Principal sintético (admin) sem validar token
Authorization / RBAC RBAC
2/5
  • RBAC-01 O serviço combina papéis do token (realm_access.roles) com o RBAC próprio persistido (cipa_role_assignments: admin, it_admin, cipa_member, president, secretary, auditor)
  • RBAC-02 Endpoints protegidos exigem papel via middleware RequireRole; acesso é negado por padrão (defesa no servidor, não cosmética)
  • RBAC-03 Toda autorização é escopada por empresa/unidade (tenant); um usuário só acessa recursos da própria empresa/unidade
  • RBAC-04 Papéis funcionais (presidente, secretário, membro) são derivados do mandato vigente (cipa_members) e concedem permissões operacionais (criar reunião/ata, triar sugestões)
  • RBAC-05 Auditor tem acesso somente-leitura às trilhas (atas, eleições, acessos), sem escrita em nenhum recurso
Livon Integration INTEG
3/13
  • INTEG-01 Todo acesso à Livon passa pela camada anticorrupção (LivonClient); DTOs da Livon nunca vazam ao domínio
  • INTEG-02 O cliente HTTP da Livon tem circuit breaker, retry, timeout, cache efêmero (~60s) e singleflight; nenhum dado da Livon é persistido
  • INTEG-03 GetEmployee consome GET /users/user_information com pass-through do Bearer do usuário
  • INTEG-04 ListEligibleVoters retorna colaboradores elegíveis por empresa/unidade com campos eleitorais (endpoint a construir na Livon)
  • INTEG-05 GetCompanyHeadcount retorna nº de empregados + grau de risco (NR-4) por empresa/unidade, base do dimensionamento (endpoint a construir na Livon)
  • INTEG-06 GetUnit retorna dados da unidade/estabelecimento (endpoint a construir na Livon)
  • INTEG-07 Trilha de auth de sistema para leituras sem usuário logado (rotinas/jobs) — bloqueador, a construir na Livon
  • INTEG-08 A CIPA grava de volta na Livon o resultado da eleição / mandato (flags is_candidate_to_cipa/is_elected_to_cipa ou recurso de "mandato CIPA")
  • INTEG-09 Registro do módulo CIPA + entitlement por empresa (CompanyLinkedModule) e permissões na Livon
  • INTEG-10 Webhook de admissão/desligamento mantém a elegibilidade/membros atualizados (sem dado defasado)
  • INTEG-11 Operações autoritativas (homologar eleição, fechar dimensionamento) falham fechado quando a Livon está indisponível
  • INTEG-12 Toda chamada à Livon padroniza o tenant via X-Company-Id
  • INTEG-13 Documento "Contrato de Integração Livon" lista todos os endpoints consumidos e gravados (existentes vs a construir), servindo de spec do lado da Livon
Risk Map RISK
0/5
  • RISK-01 Usuário (admin/cipa_member) pode criar áreas de risco e itens de risco vinculados a empresa/unidade
  • RISK-02 Item de risco tem severidade (baixo/médio/alto/crítico) × probabilidade (raro…certo); o nível de risco (1–20) é calculado automaticamente
  • RISK-03 Item de risco tem tipo (físico/químico/biológico/ergonômico/acidente)
  • RISK-04 Item de risco transiciona por estados (identificado → sob controle → mitigado → eliminado)
  • RISK-05 Usuário pode visualizar o mapa de riscos com bandas por nível
Suggestions SUGG
0/6
  • SUGG-01 Colaborador pode enviar sugestão identificada ou anônima (anônima = sem vínculo ao autor)
  • SUGG-02 Sugestão tem categoria e segue máquina de estados (nova → em análise → em deliberação → concluída → arquivada) com transições válidas impostas
  • SUGG-03 Nova sugestão notifica os membros CIPA ativos sem vazar o autor
  • SUGG-04 Membro/admin pode triar a sugestão (categoria, prioridade, resposta) e o revisor (reviewed_by) é registrado
  • SUGG-05 Colaborador vê apenas as próprias sugestões na visão pública
  • SUGG-06 Sugestão pode ser vinculada a uma deliberação de ata (opcional)
Meetings MEET
0/8
  • MEET-01 Usuário (admin/cipa_member) pode agendar reunião (ordinária/extraordinária) com data futura, pauta e participantes
  • MEET-02 Reunião segue estados agendada → em andamento → concluída, com ramo cancelada
  • MEET-03 O sistema alerta o compliance de periodicidade: ordinária mensal (bimestral para ME/EPP grau 1–2); ata assinada pelos presentes
  • MEET-04 O quórum da reunião é configurável (Regimento Interno; default maioria absoluta = membros ativos/2 + 1) e calculado pelos presentes
  • MEET-05 O quórum pode ser dispensado com justificativa registrada
  • MEET-06 Agendar reunião gera convocação/notificação a cada participante
  • MEET-07 Usuário registra presença (presente/ausente/atrasado/justificado); ausência de titular exige justificativa
  • MEET-08 Reunião tem plano de ação com responsável, prazo, prioridade e status
Minutes / Atas ATA
0/12
  • ATA-01 Usuário pode criar uma ata a partir de reunião concluída/em andamento que ainda não tem ata (relação 1:1)
  • ATA-02 A ata é pré-preenchida com pauta e participantes presentes/ausentes (com justificativa) da reunião
  • ATA-03 A ata recebe numeração automática única ATA-<UNIDADE>-<ANO>-<SEQ> por unidade+ano (sem corrida)
  • ATA-04 A ata é máquina de estados rica: rascunho → em revisão → em aprovação → assinado → publicado → arquivado, com → retificado (nova versão); transições são métodos com invariantes
  • ATA-05 A ata não pode ser assinada sem número + quórum atingido + ≥1 deliberação
  • ATA-06 Ao assinar, o serviço calcula o hash SHA-256 do conteúdo canônico e registra a assinatura (minute_signatures: signed_at, IP, user_agent); a ata assinada torna-se imutável
  • ATA-07 A ata pode ser enviada para aprovação e o presidente é notificado
  • ATA-08 A ata assinada não pode ser editada — apenas retificada (nova versão com parent_version_id, version++; a anterior vira retificado; ambas acessíveis)
  • ATA-09 Toda transição/edição/assinatura/publicação grava ata_audit_log
  • ATA-10 A ata tem retenção legal de 5 anos (retention_until); ao vencer é arquivada, nunca deletada
  • ATA-11 Toda deliberação segue 5W2H (what/who/when/where/why/how/howMuch) com status; concluir deliberação com evidence_required exige anexo
  • ATA-12 A ata publicada gera PDF com o hash no rodapé e um resumo
Elections ELEC
0/10
  • ELEC-01 Admin pode abrir eleição que segue o ciclo NR-5: convocação (edital) → inscrição → campanha → votação → apuração → posse
  • ELEC-02 O edital é publicado ≥45 dias antes do fim do mandato; votação ≥30 dias antes; inscrição de candidatos ≥15 dias; posse até o fim do mandato anterior; o sistema alerta os prazos
  • ELEC-03 O dimensionamento usa o Quadro I da NR-5 (nº de empregados × grau de risco 1–4) para titulares + suplentes; override exige justificativa
  • ELEC-04 Colaborador elegível pode se candidatar (1 candidatura por pessoa por eleição); a elegibilidade valida ≥90 dias de casa, ativo (sem aviso prévio) e não-chefia
  • ELEC-05 Candidatura nasce pendente; admin aprova ou rejeita (motivo obrigatório)
  • ELEC-06 Eleitor apto vota uma única vez por eleição (voto único garantido por unicidade no log de votantes)
  • ELEC-07 O voto é secreto de verdade: o log de votantes (quem votou) é desvinculado da cédula (sem identidade); a cédula não é auditada
  • ELEC-08 A apuração é serviço de domínio determinístico: contagem → desempate NR-5 (tempo de casa/idade/sorteio auditável) → atribuição titular/suplente → homologação
  • ELEC-09 A homologação cria os cipa_members (mandato) e grava o resultado de volta na Livon
  • ELEC-10 Toda operação de eleição/candidatura é auditada; o voto não é auditado (sigilo)
Members / Mandate MEMB
0/8
  • MEMB-01 Mandato = 1 ano, com 1 reeleição (máx. 2 consecutivos); 2 anos só via convenção coletiva
  • MEMB-02 O sistema rastreia a estabilidade do membro: da candidatura até 1 ano após o fim do mandato (titulares e suplentes que exerceram)
  • MEMB-03 A posse é bloqueada até o membro concluir o treinamento NR-5 (8/12/16/20h conforme grau de risco), antes da posse (até 30 dias após, se eleição extraordinária)
  • MEMB-04 Membro segue estados ativo → inativo/suspenso/substituído; vacância convoca o suplente
  • MEMB-05 O sistema alerta a expiração de mandato (faixas 30/60/90 dias)
  • MEMB-06 A composição é paritária (representantes do empregador × dos empregados)
  • MEMB-07 Empresa ≤19 empregados (ou ≤20 grau 1–2) designa 1 responsável (designado), sem eleição, mas com treinamento e atribuições
  • MEMB-08 Em registros com valor jurídico (participante de ata assinada, candidato homologado), grava-se um snapshot de nome/matrícula do momento do evento
Communication COMM
0/4
  • COMM-01 Usuário (admin/cipa_member) pode criar comunicado (nasce rascunho) e publicá-lo (ação separada)
  • COMM-02 Usuário confirma ciência por ação afirmativa ("Li e estou ciente"); a leitura é idempotente (1 por usuário+comunicado)
  • COMM-03 Comunicado tem visibilidade (aberto/cipa_only) e segmentação de público
  • COMM-04 O dashboard mostra a taxa de leitura (derivada dos registros de leitura)
SIPAT SIPAT
0/2
  • SIPAT-01 Usuário pode planejar e gerir a SIPAT anual, com mínimo de 5 dias consecutivos
  • SIPAT-02 Comunicados podem ser agrupados em campanha (SIPAT / mês temático)
Harassment — Lei 14.457/2022 HARASS
0/4
  • HARASS-01 O sistema oferece um canal de denúncia anônimo de assédio/violência, com proteção anti-retaliação
  • HARASS-02 As regras de conduta sobre assédio são divulgadas e incluídas no regimento da CIPA
  • HARASS-03 O sistema gerencia o treinamento anual sobre assédio/violência/diversidade (registro + alerta)
  • HARASS-04 A denúncia segue um fluxo de triagem confidencial, com acesso restrito
Observability OBS
4/6
  • OBS-01 O serviço expõe GET /healthz (liveness) e GET /readyz (readiness, checa banco; Livon é dependência soft)
  • OBS-02 O serviço exporta traces via OTLP; cada request HTTP vira um trace com spans de banco (visível no Grafana/Tempo)
  • OBS-03 Logs em slog JSON com trace_id/span_id (stdout; pipeline OTLP→Loki pré-configurado)
  • OBS-04 A stack (Prometheus/Loki/Tempo/Grafana) sobe via docker compose com dashboards/datasources provisionados
  • OBS-05 O serviço exporta métricas RED + de domínio (atas pendentes, estado do breaker Livon, p95 da apuração) via MeterProvider
  • OBS-06 Logs são enviados via OTLP (log bridge) ao Loki
AI AI
0/4
  • AI-01 A IA gera rascunho de ata (entra como rascunho; humano revisa; IA nunca assina/aprova)
  • AI-02 A IA classifica sugestões
  • AI-03 A IA apoia a análise de risco
  • AI-04 PII é pseudonimizada antes do prompt; acesso é registrado; opt-out por empresa; saída marcada como "sugestão de IA"; provedor com no-train/zero-retention

Especificação Técnica

Pilares da arquitetura

Arquitetura Hexagonal

Ports & adapters: o domínio (regras legais) fica no centro e não depende de banco, web ou Livon. Tudo aponta para dentro.

100% via API

Zero acesso ao banco da Livon. Identidade e colaboradores vêm por API REST (bidirecional); o dado da CIPA é do microserviço.

📡

Observabilidade dia 1

Traces, logs e métricas desde a Fase 0 (OpenTelemetry → Grafana/Tempo/Loki/Prometheus). Cada request é rastreável ponta a ponta.

🔒

Prova legal

Ata com hash SHA-256, imutável e auditável; voto secreto real. A peça jurídica é blindada por design, não por confiança.

Decisões técnicas (Key Decisions)
Validada

Microserviço Go + banco Postgres próprio

Independência de deploy/evolução; stack escolhida; regras legais explícitas (sem ORM mágico)

✓ Good (Fase 0 roda)
Revisar

Integração 100% via API com a Livon (bidirecional)

Não acoplar ao banco da Livon; respeitar LGPD; consumir + legar

⚠️ Revisit (depende de endpoints a construir + contrato/SLA)
Validada

Pass-through do token Keycloak do usuário

Auth de sistema da Livon só cobre poucos endpoints; pass-through resolve identidade+papel+empresa de uma vez, continua "via API"

✓ Good (Fase 1)
Validada

Observabilidade desde o dia 1

Operação e diagnóstico de fluxos críticos (apuração, ata) desde o início

✓ Good (traces ponta a ponta; métricas/logs OTLP pendentes)
Pendente

IA isolada (Anthropic) na camada app, nunca no domínio

IA assistiva, nunca autoritativa (não assina/aprova); LGPD (pseudonimização, no-train)

— Pending (Fase 6)
Pendente

Quórum configurável (Regimento Interno)

A NR-5 não fixa percentual; resolve o conflito de quórum do protótipo (não hardcodar)

— Pending (Fase 3)
Validada

Regras NR-5 / Lei 14.457 acima do protótipo

Protótipo é fonte derivada e incompleta (errou estabilidade, ignorou grau de risco, sem assédio)

✓ Good (fundação Fases 0–1 é agnóstica de regra)
Pendente

Voto secreto realelection_voter_log (quem votou) desvinculado de election_ballots (cédula sem identidade)

Supera o protótipo, que só escondia por RLS

— Pending (Fase 4)
Pendente

Ata como máquina de estados com hash SHA-256 + auditoria + imutabilidade + retificação versionada

Materializa a prova legal que o protótipo prometia mas não implementava

— Pending (Fase 3)
Validada

Auth via Keycloak com validação local (JWKS) + RBAC próprio escopado por empresa

Autenticação na Livon; autorização na CIPA (papéis funcionais via cipa_members)

✓ Good (Fase 1)
Pendente

Dimensionamento via Quadro I (nº empregados × grau de risco NR-4)

Protótipo ignorava o grau de risco; depende de headcount + grau vindos da Livon

— Pending (Fase 4; percentuais exatos do Quadro I a fechar)
Pendente

Snapshots legais de PII (nome/matrícula no momento do evento)

Blinda registros jurídicos contra anonimização LGPD futura na Livon; não é cópia/sync

— Pending
Restrições & arquitetura

Tech stack

Go (net/http Go 1.22 + chi, pgx/v5 + sqlc, goose, go-oidc+jwx, gobreaker+go-retryablehttp, anthropic-sdk-go) — decisão de stack e ausência de ORM mágico (regras legais explícitas)

Banco

PostgreSQL próprio do microserviço, um schema por bounded context; IDs externos opacos da Livon (livon_user_id/livon_company_id/livon_unit_id, sem FK física) — independência do banco da Livon

Integração

100% via API REST com a Livon, bidirecional; sem DB direto, sem cópia persistente — independência e LGPD

Compliance

NR-5 (vigente 2023) + Lei 14.457/2022 + LGPD são regras autoritativas acima do protótipo — risco legal/trabalhista

Dependência

endpoints a construir no lado da Livon + contrato/SLA por escrito antes da Fase 4 — bloqueia a apuração eleitoral (dados de colaboradores/headcount/grau de risco)

Segurança (Livon)

exigir JWT_SECRET separado do SECRET_KEY (P838), JWT com iss/aud/nbf/iat (P839), aplicar quota (P840) antes de produção

Infra/Deploy

Docker + Portainer na VPS Contabo; 3 ambientes (local / dev-VPS / banco estável p/ versionamento); futuro: plugar na Livon (AWS/Keycloak)

Fases técnicas
0Fundação, Observabilidade e DockerConcluída

Esqueleto hexagonal roda em containers com observabilidade ponta a ponta desde o dia 1 (CONCLUÍDA)

OBS-01OBS-02OBS-03OBS-04
1Autenticação, ACL Livon e RBACConcluída

Usuário autentica via Keycloak e o serviço autoriza por papel, falando com a Livon pela camada anticorrupção (CONCLUÍDA)

AUTH-01AUTH-02AUTH-03AUTH-04RBAC-01RBAC-02INTEG-01INTEG-02INTEG-03
2Mapa de Riscos e SugestõesEm foco

Entregar valor cedo com módulos de baixo acoplamento à Livon (só livon_user_id), escopados por tenant

RISK-01RISK-02RISK-03RISK-04RISK-05SUGG-01SUGG-02SUGG-03SUGG-04SUGG-05SUGG-06RBAC-03OBS-06
3Reuniões e AtasPlanejada

Produzir e preservar a prova legal — atas assinadas, imutáveis e auditáveis a partir de reuniões com quórum

MEET-01MEET-02MEET-03MEET-04MEET-05MEET-06MEET-07MEET-08ATA-01ATA-02ATA-03ATA-04ATA-05ATA-06ATA-07ATA-08ATA-09ATA-10ATA-11ATA-12RBAC-05
4Contrato de Integração Livon (bidirecional)Planejada

Firmar e implementar o contrato bidirecional com a Livon (consumir + legar) que destrava a apuração eleitoral

INTEG-04INTEG-05INTEG-06INTEG-07INTEG-08INTEG-09INTEG-10INTEG-11INTEG-12INTEG-13
5Eleições, Apuração e Membros/MandatoPlanejada

Conduzir eleições NR-5 com voto secreto real, apuração determinística e gestão completa de mandato (incluindo designado)

ELEC-01ELEC-02ELEC-03ELEC-04ELEC-05ELEC-06ELEC-07ELEC-08ELEC-09ELEC-10MEMB-01MEMB-02MEMB-03MEMB-04MEMB-05MEMB-06MEMB-07MEMB-08RBAC-04OBS-05
6Comunicação, SIPAT e Canal de Denúncia (Lei 14.457)Planejada

Engajamento e conformidade com a Lei 14.457 — comunicados com ciência afirmativa, SIPAT anual e canal anônimo de assédio

COMM-01COMM-02COMM-03COMM-04SIPAT-01SIPAT-02HARASS-01HARASS-02HARASS-03HARASS-04
7IA (Anthropic)Planejada

IA assistiva isolada na camada app, nunca autoritativa, com salvaguardas LGPD

AI-01AI-02AI-03AI-04

Visão Unificada

A mesma engenharia, em linguagem simples — o lado funcional (o que faz) e o técnico (como faz), com analogias do dia a dia.
🛡️

O que é a CIPA?

É a comissão eleita pelos próprios colegas para cuidar da segurança no trabalho. Pense num 'conselho de segurança' interno, obrigatório por lei (NR-5), que se reúne, registra atas e propõe melhorias.

🏠

Por que um sistema separado?

Em vez de mexer na casa principal (a plataforma Livon), construímos um puxadinho especializado ao lado, com sua própria fechadura e seu próprio armário (banco). Os dois conversam por uma ponte (API) — mais seguro e fácil de evoluir.

🗄️

A ata como cofre lacrado

Quando a ata é assinada, o sistema gera um 'lacre digital' (hash SHA-256). A partir daí vira documento de cartório: ninguém edita. Se precisar corrigir, anexa-se uma nova versão e a antiga fica preservada.

🗳️

Voto secreto de verdade

São duas urnas separadas: uma lista de quem votou (para garantir voto único) e outra com os votos sem nome. Ninguém consegue juntar as duas — o sigilo é real, não só uma tela escondida.

📐

Eleição por tamanho da empresa

O Quadro I da NR-5 é uma tabela que decide quantos membros a CIPA terá, conforme o número de funcionários e o grau de perigo do ramo. O sistema calcula isso automaticamente.

✈️

Caixa-preta do avião

Como a caixa-preta registra tudo num voo, a observabilidade grava cada passo do sistema (rastros, logs, métricas). Se algo falhar numa apuração ou ata, dá para reconstituir o que aconteceu.

📮

Canal de denúncia anônimo

A Lei 14.457/2022 exige um canal anônimo contra assédio. É como uma caixa de correio lacrada: a pessoa denuncia sem se identificar e fica protegida de retaliação.

🤝

IA como estagiário

A inteligência artificial escreve rascunhos (de ata, de classificação), mas nunca assina nem aprova nada. Um humano sempre revisa e decide — a IA é assistente, jamais autoridade.

Tecnologias

Stack do microserviço e das ferramentas de engenharia que o produziram.

Linguagens & Core

Gonet/http 1.22 + chi
Node.jsgerador do painel

Dados & Persistência

PostgreSQLbanco próprio
pgx/v5driver
sqlcSQL tipado
goosemigrations embutidas

Observabilidade

OpenTelemetrytraces OTLP
Grafanadashboards
Prometheusmétricas
Lokilogs
Tempotracing
slogJSON estruturado

IA & LLM

Anthropic / Claudeanthropic-sdk-go
Langfuseobservabilidade de LLM

Auth & Segurança

Keycloak / OIDCidentidade
JWKSgo-oidc + jwx
RBAC próprioescopado por empresa
gobreakercircuit breaker
go-retryablehttpretry/timeout

Infra & Deploy

Dockerdistroless não-root
Portainerdeploy de stacks
VPS Contabo3 ambientes
GitHub ActionsCI/CD

Meta-tools (engenharia)

Claude Codeagente de engenharia
GSDplanejamento por fases
Reversaengenharia reversa
graphifyknowledge graph

Timeline

Linha do tempo do projeto — etapas, decisões e builds com data e hora.
2026-06-26 · 09:00SetupSetup
graphify e reversa instalados no projeto
Ferramentas de knowledge graph e engenharia reversa habilitadas no repositório CIPA.
2026-06-26 · 09:30PesquisaReversa
Engenharia reversa do protótipo (reversa)
Scout → 11 Arqueólogos em paralelo → Data Master → Design System → Detetive → Arquiteto → 11 Redatores → Revisor. Saída: _reversa_sdd/ (198 docs).
2026-06-26 · 10:00DecisãoReversa
Nível de documentação: Detalhado
Specs por módulo, execução em paralelo.
2026-06-26 · 11:00DecisãoReversa
Escavação dos módulos → paralelo
11 módulos analisados simultaneamente por arqueólogos dedicados.
2026-06-27 · 09:00DecisãoArquitetura
Arquitetura: microserviço Go independente
Banco próprio, integração 100% via API com a Livon (bidirecional).
2026-06-27 · 09:30DecisãoArquitetura
Dados da CIPA → banco próprio
PostgreSQL do microserviço, um schema por bounded context; IDs opacos da Livon sem FK física.
2026-06-27 · 10:30BuildFase 0
Fase 0 (Fundação) concluída
Esqueleto hexagonal + observabilidade (Grafana/OTel/Loki/Tempo/Prometheus) + Docker. Testada.
2026-06-27 · 13:00BuildFase 1
Fase 1 (Auth+ACL+RBAC) concluída
Validação token Keycloak (JWKS) + ACL Livon mockada + RBAC próprio. 20 testes verdes.
2026-06-27 · 15:00PesquisaRegras
Explore de regras autoritativas
NR-5 (2023) + Lei 14.457/2022 (assédio) + mercado.
2026-06-27 · 17:49MarcoGSD
GSD iniciado
config + PROJECT.md + REQUIREMENTS.md (91 requisitos) + ROADMAP.md (8 fases).
2026-06-27 · 17:49Commit
chore: add project config
commit 152bbc1
2026-06-27 · 17:55Commit
docs: define v1 requirements
commit 1ca8dab
2026-06-27 · 17:55Commit
docs: initialize project
commit f8cc6d2
2026-06-28 · 10:00DecisãoPainel
Painel → VPS Contabo + HTML único
Dashboard auto-contido publicado via Portainer para acompanhamento em tempo real.
2026-06-28 · 11:00BuildPainel
Painel de acompanhamento (gsd-dashboard) construído
Skill reutilizável gera dashboard executivo a partir da estrutura .planning/*.

Progresso

Progresso geral do projeto
20%
13/91 requisitos (14%) 2/8 fases (25%)
Requisitos — feito × pendente
Requisitos por categoria
Status das fases
Atividade por dia
Decisões por situação