feat(frontend): Relatórios (Filas/Agentes/Campanhas/IA) + PHASE 28 security review
Quatro páginas novas em /app/relatorios/*, uma rota por relatório (não abas de uma página só, pra não quebrar o realce de "ativo" da sidebar quando vários itens de menu apontam pro mesmo relatório) — reusa os endpoints de reports que já existiam desde as fases de CDR/AI, nenhum backend novo. Security quality gate (agente.md secao 224): revisão dedicada sobre todo o diff desde origin/main (billing + frontend inteiro, 7 commits) não achou nenhuma vulnerabilidade de alta confiança. Suítes de teste de isolamento multi-tenant, autenticação/RBAC e rating engine reexecutadas do zero e verdes. TODO.md documenta o escopo real ainda faltando (Agentes bloqueado por falta de endpoint de listagem de usuários, Dialplan, Monitoramento em tempo real, Gravações, IA CRUD, Relatórios > Chamadas/Consumo) em vez de alegar a aplicação "finalizada". Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BFaBaBSQGhyXGEgtTYZGV8
This commit is contained in:
73
TODO.md
73
TODO.md
@@ -905,8 +905,77 @@ Troncos, Discador > Lista de Bloqueio (agente.md secao 50-51, 41-42, 71,
|
||||
light, mesma decisão de escopo das últimas telas simples) —
|
||||
reavaliar junto com a Sidebar quando "Agentes" ganhar tela própria
|
||||
|
||||
## PHASE 28+ — ver `agente.md` seções 140 em diante (resto do Frontend,
|
||||
Security, Tests)
|
||||
## PHASE 28 — Segurança, testes de regressão, Frontend: Relatórios
|
||||
(agente.md secao 157-160, 119, 183-184, 202, 224)
|
||||
- [x] **Security quality gate (secao 224)**: review dedicado (subagente
|
||||
independente) sobre o diff completo desde `origin/main` (billing
|
||||
orchestration + todo o frontend novo, 7 commits) — auth/sessão,
|
||||
todos os controllers NestJS tocados, `permission.guard.ts`, RLS da
|
||||
migration de billing, todas as Server Actions novas do frontend.
|
||||
**Nenhum achado com confiança >= 7/10** (nem IDOR, nem bypass de
|
||||
tenant, nem segredo vazado em resposta/log). Ver seção "Auditoria de
|
||||
segurança" no relatório desta sessão (não persistida em arquivo —
|
||||
resultado: limpo).
|
||||
- [x] **Portas sensíveis (secao 184)** conferidas depois do reboot da VM:
|
||||
Postgres (5432) e Redis (6379) só em `127.0.0.1`, Event Socket
|
||||
(8021) não publicado no host, `apps/api` (3000) só em `127.0.0.1`.
|
||||
Único listener em todas as interfaces é o `apps/frontend` (3001, dev
|
||||
server) — necessário pra o usuário testar de fora da VM; token de
|
||||
acesso nunca chega no browser (arquitetura desde a PHASE 23), então
|
||||
isso não expõe a API real.
|
||||
- [x] **Testes de regressão (secao 202)** re-executados do zero pós-reboot
|
||||
pra confirmar que nada quebrou: `test:isolation` (RLS multi-tenant),
|
||||
`test:auth` (login/RBAC/refresh rotation/logout), `packages/billing`
|
||||
(RatingEngine, 17 casos) — todos verdes.
|
||||
- [x] Frontend > Relatórios (secao 157-160, 119): 4 páginas novas —
|
||||
`/app/relatorios/{filas,agentes,campanhas,ia}` — cada uma sua
|
||||
própria rota (não abas de uma página só: 4 itens de menu apontando
|
||||
pro mesmo `href` fariam a sidebar realçar os 4 ao mesmo tempo, ver
|
||||
`components/shell/nav-list.tsx`). Reusa os endpoints que já existiam
|
||||
desde a PHASE 17/21 (`GET /reports/{queues,agents,campaigns,ai-
|
||||
dashboard}`), nenhum endpoint novo. Últimos 30 dias fixo, sem
|
||||
seletor de período ainda (decisão deliberada, documentada na
|
||||
própria tela).
|
||||
- [x] Menu Tenant: "Relatórios > Agentes/Filas/Campanhas" e "IA >
|
||||
Análises" saem de "em breve"; "Relatórios > Chamadas/Consumo" e o
|
||||
resto do menu IA continuam pendentes.
|
||||
- [x] Testado ponta a ponta contra a API real (tenant Acme, ainda sem
|
||||
chamadas reais) — as 4 telas renderizam os estados vazios corretos
|
||||
(honestos: `0` quando é contagem real, traço fantasma com
|
||||
explicação quando é média sem dado), título/descrição da topbar
|
||||
resolvidos corretamente por rota (sem a ambiguidade que teria dado
|
||||
se as 4 dividissem um `href`).
|
||||
- [ ] **Escopo real ainda faltando pra "aplicação finalizada" segundo o
|
||||
agente.md completo** (236 seções) — não coberto nesta fase, listado
|
||||
explicitamente em vez de fingir completo:
|
||||
- Call Center > Agentes (frontend): bloqueado por uma lacuna de
|
||||
backend, não só falta de tela — `POST /agents` exige um `userId`
|
||||
de um usuário já existente do tenant, mas **não existe nenhum
|
||||
endpoint pra listar/convidar usuários do tenant** ainda (só
|
||||
criação de tenant/usuário via script, mesma lacuna já anotada na
|
||||
PHASE 22 pra tenant/plano/assinatura). Precisa de um "Usuários"
|
||||
(Administração) antes de Agentes fazer sentido na UI.
|
||||
- Telefonia > Dialplan (editor estruturado, condition/actions
|
||||
dinâmicos, generate/activate de versão) — backend pronto desde a
|
||||
PHASE 10, zero UI.
|
||||
- Monitoramento em tempo real (secao 54-55, 161) — WebSocket já
|
||||
existe no backend (`RealtimeGateway`), zero cliente no frontend.
|
||||
- Gravações (player de áudio, secao 121) e IA > Scorecards/Prompts/
|
||||
Configurações (CRUD, secao 114-118) — backend pronto, zero UI.
|
||||
- Relatórios > Chamadas (lista filtrável) e > Consumo (dashboard de
|
||||
quotas, secao 139) — sem tela ainda.
|
||||
- Menu Platform: Clientes/Infraestrutura/Sistema inteiros "em
|
||||
breve" (só Billing > Tarifas e o dashboard existem).
|
||||
- "Itens sem permissão não aparecem" (secao 169) nunca foi aplicado
|
||||
— lacuna conhecida desde a PHASE 24.
|
||||
- Nenhuma bateria de teste automatizado de frontend (E2E/component)
|
||||
existe — toda verificação até aqui foi manual via Puppeteer +
|
||||
screenshot, sessão a sessão.
|
||||
- `apps/api`/`apps/frontend` continuam sem supervisor de processo
|
||||
(ver "Riscos conhecidos") — não sobrevivem a um reboot sozinhos.
|
||||
- nginx / TLS / domínio público (PHASE 01, pendência original)
|
||||
continuam sem existir — o acesso de teste é direto na porta 3001
|
||||
da VM, sem HTTPS.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user