docs(okf): entidades e relacionamentos OKF do DashDescomplicar

This commit is contained in:
2026-10-28 16:01:20 +00:00
parent f063a2ec8c
commit 61ae4697f9
48 changed files with 2610 additions and 0 deletions
@@ -0,0 +1,27 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, integra]
title: "CSR-Integration → integra-com → Metrics"
---
# CSR-Integration integra Metrics
CSR-Integration instrumento requisições HTTP e tempos de renderização para Metrics.
## Instrumentação
- Latência de requisições (por endpoint)
- Taxa de sucesso / erro (HTTP 2xx vs 4xx/5xx)
- Tempo de renderização (React components)
- Tamanho de payload
## Tipo de relação
`integra-com` — CSR-Integration expõe eventos para coleta de métricas.
## Implementação
- Middleware Express para logging
- Custom hooks React para performance monitoring
- `logs/performance-metrics.json` (saída)
@@ -0,0 +1,32 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, exibe]
title: "Dashboard-Engine → exibe → Painéis"
---
# Dashboard-Engine exibe Painéis
Dashboard-Engine orquestra e exibe todos os painéis através da navegação por routes.
## Arestas individuais
- Dashboard-Engine → exibe → Painel-Dashboard (`/`)
- Dashboard-Engine → exibe → Painel-Monitor (`/monitor`)
- Dashboard-Engine → exibe → Painel-Financeiro (`/financial`)
- Dashboard-Engine → exibe → Painel-MCPs (`/mcps`)
- Dashboard-Engine → exibe → Painel-N8n (`/n8n`)
- Dashboard-Engine → exibe → Painel-Paperclip (`/paperclip`)
- Dashboard-Engine → exibe → Painel-IA (`/ai`)
- Dashboard-Engine → exibe → Painel-Operacoes (`/operations`)
- Dashboard-Engine → exibe → Painel-CronDev (`/cron-dev`) — proposto
## Tipo de relação
`exibe` — Dashboard-Engine é responsável por renderizar os painéis.
## Implementação
- React Router (v6+)
- Route handlers em `src/App.tsx`
- Layout wrapper em `src/components/Layout.tsx`
@@ -0,0 +1,27 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, integra]
title: "Dashboard-Engine → integra-com → CSR-Integration"
---
# Dashboard-Engine integra CSR-Integration
Dashboard-Engine integra a camada CSR para fetch de dados, caching e reconnection logic.
## Fluxo
1. Dashboard-Engine renderiza Layout
2. Painéis (componentes filhos) usam hooks/Context de CSR-Integration
3. CSR-Integration faz requisições HTTP para API Express
4. Respostas são cacheadas e compartilhadas entre painéis
## Tipo de relação
`integra-com` — Dashboard-Engine depende funcionalmente de CSR-Integration.
## Touchpoints
- `src/lib/DataContext.tsx` — Context Provider
- `src/App.tsx` — wrapper CSR
- Painéis — consumem Context
@@ -0,0 +1,52 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, observabilidade, sistema]
title: "Dashboard-Engine → integra-com → Observabilidade (Sistema)"
---
# Dashboard-Engine integra Observabilidade
Dashboard-Engine integra o sistema Observabilidade para visibilidade de sessões Claude Code, métricas cross-sistema e operações.
## Escopo de Integração
**Observabilidade é um sistema transversal (Desk #2059) que:**
- Fornece SPEC autoritária em `/media/ealmeida/Dados/Hub/05-Projectos/Observabilidade/SPEC.md`
- Fornece PLAN autoritário em `/media/ealmeida/Dados/Hub/05-Projectos/Observabilidade/PLAN.md`
- Indexa e expõe sessões Claude Code (replay, timeline, eventos)
- Coleta telemetria cross-projeto (IJFW, n8n, MCPs, SelfImprovement)
## Touchpoints no DashDescomplicar
1. **Painel Sessions** (`/sessions`) — Replay de sessões Claude Code
- Consome índice SQLite do Observabilidade
- Timeline + busca + filtros por agente/projecto
2. **Painel Monitor** (`/monitor`) — Métricas de infraestrutura
- Integrado com telemetria Observabilidade
- Health de MCPs, n8n, servidores VPS
3. **Painel Operações** (`/operations`) — Desk CRM + eventos cross-sistema
- Visibility de tarefas + webhooks/eventos Observabilidade
4. **Metrics Entity** (`okf/entidades/Metrics.md`)
- Coleta de eventos do Observabilidade
- Agregação em `logs/performance-metrics.json`
## Tipo de relação
`integra-com` — Dashboard-Engine depende de Observabilidade para visibilidade completa do stack
## Relacionamentos Secundários (Bidirecional)
- Metrics ← alimenta → Painel-Monitor (okf/relacionamentos/Metrics-alimenta-PainelMonitor.md)
- Painel-Sessions ← consome → Observabilidade
- Observabilidade ← expõe-em → Painel-Monitor + Painel-Operacoes
## Referências Autoritárias
- **Observabilidade SPEC:** `/media/ealmeida/Dados/Hub/05-Projectos/Observabilidade/SPEC.md`
- **Observabilidade PLAN:** `/media/ealmeida/Dados/Hub/05-Projectos/Observabilidade/PLAN.md`
- **Desk Observabilidade:** #2059
- **SelfImprovement:** #2066 (melhoria contínua da Observabilidade)
@@ -0,0 +1,63 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, automação, melhoria]
title: "Dashboard-Engine → integra-com → SelfImprovement"
---
# Dashboard-Engine integra SelfImprovement
Dashboard-Engine integra o ciclo de melhoria contínua SelfImprovement para feedback, análise e decisões de priorização.
## Ciclo de Feedback
**Fluxo PDCA (em STATUS.md § ACT):**
1. **Recolher Feedback**
- Desk #65 comentários (bugs, features)
- CodeRED incidents (site down, P0)
- Logs de erro (`docker logs descomplicar_dashboard_descomplicar`)
- Métricas de saúde monitoradas (uptime, response time, error rate)
2. **Análise** (SelfImprovement)
- Identificar padrões e causa raiz
- Correlacionar com eventos do Observabilidade
- Priorizar via RICE: Reach × Impact ÷ Confidence ÷ Effort
3. **Decisão & Implementação**
- Nova feature/bugfix → PR em Gitea
- Code review + merge → deploy
- Atualizar CHANGELOG.md + PLAN.md roadmap
4. **Registar & Monitorar**
- STATUS.md atualizado com versão
- Métricas de sucesso monitoradas
- Feedback loop re-inicia
## SelfImprovement Desk Task
- **Desk #2066:** Melhoria contínua da operação
- **SPEC:** `/media/ealmeida/Dados/Hub/05-Projectos/SelfImprovement/SPEC.md`
- **PLAN:** `/media/ealmeida/Dados/Hub/05-Projectos/SelfImprovement/PLAN.md`
## Tipo de relação
`integra-com` — Dashboard-Engine alimenta SelfImprovement com feedback e métricas para decisões
## Relacionamentos Secundários
- Metrics ← coleta-observabilidade → SelfImprovement (validação de impacto)
- Observabilidade ← expõe-dados → SelfImprovement (causa raiz)
- SelfImprovement ← realimenta → Dashboard-Engine (novas features/fixes)
## Escalação de Incidentes
| Severidade | Processo | Contacto |
|------------|----------|----------|
| **P0** (site down) | CodeRED trigger imediato | `curl -X POST https://codered.descomplicar.pt/v1/trigger/RED-ZMT3FCU8` |
| **P1** (erro crítico) | Desk #65 comentário + SelfImprovement análise | RFC em #65 |
| **P2** (bugfix/feature) | Desk #65 comentário + roadmap | Próximo sprint Q3-Q4 |
## Referência à Integração
Ver STATUS.md § ACT (Melhoria Contínua) para documentação do ciclo completo.
@@ -0,0 +1,29 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, docker, deploy]
title: "Docker-Deploy-serve-Dashboard"
---
# Docker-Deploy → serve → DashDescomplicar
**Origem:** [[Docker-Deploy]]
**Destino:** [[Express-API]], [[Dashboard-Engine]]
**Tipo:** `serve`
## Descrição
O Docker-Deploy empacota e serve a aplicação completa (frontend + backend) num container Docker no EasyPanel Swarm.
## Fluxo de Deploy
```
git push Gitea → Docker build → docker service update → Traefik → dash.descomplicar.pt
```
## Artefactos
- **Dockerfile**: `node:22-alpine`, build multi-stage
- **Procfile**: `web: node api/dist/server.js`
- **Volume**: `sessions.db` bind mount para persistência SQLite
- **Rede**: Traefik reverse proxy (EasyPanel)
@@ -0,0 +1,34 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, api, paineis]
title: "ExpressAPI-roteia-Paineis"
---
# ExpressAPI → roteia → Painéis
**Origem:** [[Express-API]]
**Destino:** [[Painel-Dashboard]], [[Painel-Monitor]], [[Painel-Financeiro]], [[Painel-MCPs]], [[Painel-N8n]], [[Painel-Paperclip]], [[Painel-IA]], [[Painel-Operacoes]], [[Painel-Sessoes]]
**Tipo:** `roteia`
## Descrição
A Express-API expõe 15 endpoints REST que fornecem dados a todos os 9 painéis frontend. Cada painel consome um ou mais endpoints específicos:
| Painel | Endpoint(s) |
|---|---|
| Painel-Dashboard | `GET /api/dashboard` |
| Painel-Monitor | `GET /api/monitor`, `GET /api/beszel`, `GET /api/hetzner` |
| Painel-Financeiro | `GET /api/financial` |
| Painel-MCPs | `GET /api/mcps` |
| Painel-N8n | `GET /api/n8n` |
| Painel-Paperclip | `GET /api/paperclip` |
| Painel-IA | `GET /api/ai` |
| Painel-Operacoes | `GET /api/operations` |
| Painel-Sessoes | `GET /api/sessions` |
## Notas
- Vite proxy no desenvolvimento: `/api` → `http://localhost:3001`
- Em produção, Express serve o bundle estático + API na mesma porta (3001)
- Rate limit compartilhado: 100 req/15min (prod), 1000/15min (dev)
@@ -0,0 +1,32 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, gemini, telemetria]
title: "Gemini-Telemetry-alimenta-Observabilidade"
---
# Monitorizacao-Gemini → alimenta → Observabilidade
**Origem:** [[Monitorizacao-Gemini]]
**Destino:** [[Observabilidade-Sessions]]
**Tipo:** `alimenta`
## Descrição
Os hooks de telemetria do Gemini CLI escrevem métricas de tool calls no mesmo ficheiro JSONL usado pelo Claude Code, unificando a observabilidade cross-engine.
## Fluxo
```
Gemini CLI (tool call)
→ gemini-pre-telemetry.py (timestamp start)
→ [tool execution]
→ gemini-telemetry.py (log JSONL)
→ ~/.claude-work/tool-invocations.jsonl
→ Observabilidade-Sessions (indexer)
→ Painel-Sessoes (consulta)
```
## Formato Unificado
Cada entrada inclui campo `engine` para distinguir origem (claude, gemini, hermes, opencode).
@@ -0,0 +1,16 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, beszel, monitor]
title: "Integracao-Beszel-alimenta-Monitor"
---
# Integracao-Beszel → alimenta → Painel-Monitor
**Origem:** [[Integracao-Beszel]]
**Destino:** [[Painel-Monitor]]
**Tipo:** `alimenta`
## Descrição
A integração Beszel recolhe métricas de fleet (CPU, RAM, disco, containers, uptime) via PocketBase API e alimenta a secção "Frota Beszel" do Painel-Monitor.
@@ -0,0 +1,16 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, hetzner, monitor]
title: "Integracao-Hetzner-alimenta-Monitor"
---
# Integracao-Hetzner → alimenta → Painel-Monitor
**Origem:** [[Integracao-Hetzner]]
**Destino:** [[Painel-Monitor]]
**Tipo:** `alimenta`
## Descrição
A integração Hetzner recolhe métricas de CPU, disco e rede dos VPS e sincroniza a lista de servidores. Estes dados alimentam a secção "Servidores" do Painel-Monitor, com histórico para gráficos de tendência.
@@ -0,0 +1,16 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, mcp, gateway]
title: "Integracao-MCPGateway-alimenta-Paineis"
---
# Integracao-MCP-Gateway → alimenta → Painéis
**Origem:** [[Integracao-MCP-Gateway]]
**Destino:** [[Painel-MCPs]], [[Painel-IA]]
**Tipo:** `alimenta`
## Descrição
A integração MCP Gateway faz ping paralelo a 32 MCPs e fornece estado (online/offline/disabled) para o Painel-MCPs (detalhe por MCP) e Painel-IA (Camada 1 — contagem de MCPs).
@@ -0,0 +1,16 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, n8n, monitor]
title: "Integracao-N8n-alimenta-Paineis"
---
# Integracao-N8n-API → alimenta → Painéis
**Origem:** [[Integracao-N8n-API]]
**Destino:** [[Painel-N8n]], [[Painel-IA]]
**Tipo:** `alimenta`
## Descrição
A integração n8n consulta a API REST do n8n (`automator.descomplicar.pt`) e fornece dados de workflows e execuções para o Painel-N8n (detalhe de workflows) e Painel-IA (Camada 2 — contagem de workflows determinísticos).
@@ -0,0 +1,16 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, wordpress, monitor]
title: "Integracao-WordPress-alimenta-Monitor"
---
# Integracao-WordPress → alimenta → Painel-Monitor
**Origem:** [[Integracao-WordPress]]
**Destino:** [[Painel-Monitor]]
**Tipo:** `alimenta`
## Descrição
O plugin "Descomplicar Monitor" instalado nos sites WordPress cliente envia dados (versão WP, plugins, temas, health) via POST para a API. Estes dados alimentam as secções "Sites WordPress" e "WP Updates" do Painel-Monitor.
@@ -0,0 +1,35 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, observabilidade, métricas]
title: "Metrics → alimenta → Painel-Monitor"
---
# Metrics alimenta Painel-Monitor
Painel-Monitor consome métricas de infraestrutura e performance agregadas pelo sistema Metrics.
## Fluxo de Dados
1. **Coleta:** Middleware Express + hooks React instrumentam requisições/renderização
2. **Agregação:** Logs JSON em `logs/performance-metrics.json` (rotated 7 dias)
3. **Exposição:** GET `/api/metrics` (Prometheus format ou JSON custom)
4. **Consumo:** Painel-Monitor via CSR-Integration (com cache + reconnect)
## Métricas Expostas
- **Performance:** response time (p95), latência por endpoint, tamanho de payload
- **Disponibilidade:** uptime, taxa de erro (5xx), health de dependências
- **Infraestrutura:** CPU/RAM/Disk dos servidores monitorados (via SSH)
- **Aplicação:** tempos de renderização, LCP, FID, CLS
## Tipo de relação
`alimenta` — Metrics → Painel-Monitor: fonte de verdade para observabilidade
## Referências
- Entidade Metrics: `okf/entidades/Metrics.md`
- Entidade Painel-Monitor: `okf/entidades/Painel-Monitor.md`
- Métrica de saúde: STATUS.md § CHECK
- Documentação: docs/PLANS/DashDescomplicar-PLAN.md § Métricas de Saúde
@@ -0,0 +1,37 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, mysql, servicos]
title: "MySQL-Pool-alimenta-Servicos"
---
# MySQL-Pool → alimenta → Serviços
**Origem:** [[MySQL-Pool]]
**Destino:** [[Express-API]], [[Painel-Dashboard]], [[Painel-Financeiro]], [[Painel-Operacoes]]
**Tipo:** `alimenta`
## Descrição
O MySQL-Pool é a fonte de verdade para dados do Desk CRM (Perfex). Todos os serviços que precisam de dados de negócio (tarefas, tickets, facturação, leads, projectos) consultam o mesmo pool.
## Fluxo de Dados
```
MySQL-Pool (ealmeida_desk24 @ 176.9.3.158)
├── dashboard.ts → Painel-Dashboard (16 queries)
├── financial.ts → Painel-Financeiro (7 queries)
├── operations.ts → Painel-Operacoes (4 queries)
├── monitoring.ts → Painel-Monitor (1 query)
└── hetzner.ts → Painel-Monitor (sync + métricas)
```
## Tabelas Críticas
| Tabela | Consumidores |
|---|---|
| `tbltasks` | dashboard, operations |
| `tblinvoices` | financial |
| `tblexpenses` | financial |
| `tbltickets` | dashboard, operations |
| `tbl_eal_monitoring` | monitoring, hetzner, wp-monitor |
@@ -0,0 +1,26 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, sessoes, observabilidade]
title: "Observabilidade-alimenta-PainelSessoes"
---
# Observabilidade-Sessions → alimenta → Painel-Sessoes
**Origem:** [[Observabilidade-Sessions]]
**Destino:** [[Painel-Sessoes]]
**Tipo:** `alimenta`
## Descrição
O sistema de observabilidade indexa sessões Claude Code (JSONL), Hermes (SQLite) e OpenCode (SQLite) na base SQLite local. O Painel-Sessoes consulta estes dados via API para listagem paginada com filtros e visualização detalhada de eventos.
## Fluxo
```
Fontes (JSONL + SQLite)
→ Systemd-Timers (indexer/import/patterns)
→ Observabilidade-Sessions (sessions.db)
→ Express-API (/api/sessions)
→ Painel-Sessoes (lista + detalhe)
```
@@ -0,0 +1,30 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, consome]
title: "Painéis → usa → Desk CRM"
---
# Painéis consomem Desk CRM
Múltiplos painéis consomem dados do Desk CRM (tarefas, projetos, tickets, horas).
## Painéis que consomem
- Painel-Dashboard — hero stats (tarefas, calendário)
- Painel-Operacoes — tickets, alta prioridade, SLA metrics
- Painel-Financeiro — dados de horas e projectos para cálculo de receita
## API
- Desk CRM API (gateway: `desk.descomplicar.pt:3150`)
- Endpoints: `/tasks`, `/projects`, `/tickets`, `/timesheets`
## Tipo de relação
`usa` — Painéis consomem dados de Desk CRM para exibição.
## Autenticação
- JWT / OAuth (conforme configuração Desk)
- Credenciais em `.env`
@@ -0,0 +1,35 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, consome]
title: "Painéis → usa → MCP Gateway"
---
# Painéis consomem MCP Gateway
Painel-MCPs consome estado dos 39 MCPs através do MCP Gateway.
## Dados consumidos
- Estado online/offline/disabled de cada MCP
- Health check results
- Latência de resposta
- Última actualização
## Painel que consome
- Painel-MCPs — status agregados, lista detalhada
## API
- MCP Gateway: `gateway.descomplicar.pt:3151`
- Endpoint: `GET /health`, `GET /mcps`
## Tipo de relação
`usa` — Painel-MCPs consome estado dos MCPs.
## Frequência
- Polling a cada 30-60 segundos
- Refresh manual via botão "Actualizar"
@@ -0,0 +1,35 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, consome]
title: "Painéis → usa → Moloni API"
---
# Painéis consomem Moloni API
Painel-Financeiro consome dados de faturação da Moloni.
## Dados consumidos
- Documentos (Faturas, Recibos)
- Clientes
- Produtos
- Estatísticas (Receita, Despesa por período)
## Painel que consome
- Painel-Financeiro — receita, despesa, gráficos de evolução
## API
- Moloni API v2 (MCP: `moloni-api`)
- Gateway: `gateway.descomplicar.pt:3158`
## Tipo de relação
`usa` — Painel-Financeiro consome dados de faturação da Moloni.
## Frequência
- Polling a cada 15-30 minutos (configurável)
- Cache local para performance
@@ -0,0 +1,38 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, consome]
title: "Painéis → usa → SSH/Infraestrutura"
---
# Painéis consomem SSH/Infraestrutura
Painel-Monitor consome dados de infraestrutura via SSH2 e APIs Hetzner.
## Dados consumidos
- Load dos servidores (CPU, RAM, Disk)
- Estado de containers Docker
- Status de serviços
- Logs de erro / alertas
- Backup status
## Painel que consome
- Painel-Monitor — load, containers, serviços, backups
## Fontes
- **SSH2**: `ssh-unified` MCP (servidores Hetzner)
- `176.9.3.158` (CWP)
- `176.9.65.41` (EasyPanel)
- **Hetzner Cloud API**: infra.descomplicar.pt
- **WP-CLI**: WordPress sites via SSH
## Tipo de relação
`usa` — Painel-Monitor consome dados de infraestrutura.
## Frequência
- Polling contínuo (WebSocket ou short-poll a cada 30s)
@@ -0,0 +1,36 @@
---
type: Relationship
layer: wiki
tags: [stack, dashdescomplicar, relacionamento, systemd, observabilidade]
title: "Systemd-Timers-alimenta-Observabilidade"
---
# Systemd-Timers → alimenta → Observabilidade
**Origem:** [[Systemd-Timers]]
**Destino:** [[Observabilidade-Sessions]]
**Tipo:** `alimenta`
## Descrição
Os systemd timers executam scripts de indexação de sessões que alimentam a base de dados SQLite de observabilidade.
## Fluxo
```
Systemd-Timers
├── observabilidade-indexer (always-on) → Watcher JSONL
├── observabilidade-worklog-import (daily 03:00) → Import Desk worklogs
└── observabilidade-patterns (Sun 23:00) → Detecção padrões
↓
Observabilidade-Sessions (sessions.db)
↓
Express-API → Painel-Sessoes
```
## Volumes
- `~/.claude-work/sessions.db` (local) ↔ `/data/sessions.db` (container via bind mount)
- `~/.claude/projects/` → fonte JSONL
- `~/.hermes/state.db` → fonte Hermes
- `~/.local/share/opencode/opencode.db` → fonte OpenCode