feat(frontend): Relatórios > Chamadas — filtros completos

O backend (CallsController.list) já aceitava todos os filtros da especificação
(from/to/extensionId/agentId/queueId/campaignId/trunkId/phone/hangupCause/
dispositionId) desde a fase CDR — só a tela nunca expunha nada além de busca por
telefone. Adicionados os 8 filtros restantes (período real, ramal/agente/fila/
campanha/tronco/disposição como Select, causa de encerramento como texto livre),
cada um refletido na querystring, mesmo padrão de filtro-via-URL já usado em Leads/
Callbacks/Assinaturas.

Testado ponta a ponta: selecionar um filtro de fila navega pra ?queueId=<uuid> e a
busca server-side já aplica o filtro.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BFaBaBSQGhyXGEgtTYZGV8
This commit is contained in:
2026-08-30 09:04:58 -03:00
parent fcf334c7c0
commit 6f18b3a297
6 changed files with 232 additions and 44 deletions

16
TODO.md
View File

@@ -1684,6 +1684,22 @@ secao 96-103, 124, 169) + achado real de autorização em `/ai/models`
(confirmado por grep). O menu Tenant já tinha zerado essa lista na
PHASE 42
## PHASE 47 — Relatórios > Chamadas: filtros completos (agente.md secao
157)
- [x] O backend (`CallsController.list`) já aceitava todos os filtros
(from/to/extensionId/agentId/queueId/campaignId/trunkId/phone/
hangupCause/dispositionId) desde a fase CDR — só a tela nunca
expunha o resto além de telefone. Adicionados os 8 campos restantes
(data de/até como filtro real de período, não só client-side; ramal/
agente/fila/campanha/tronco/disposição como Select; causa de
encerramento como texto livre), cada um refletido na querystring
(`?queueId=...`), mesmo padrão de filtro-via-URL já usado em Leads/
Callbacks/Assinaturas
- [x] Testado ponta a ponta: selecionar um filtro de fila navega pra
`?queueId=<uuid>` e a página server-side já busca com esse filtro
aplicado (0 chamadas — não existe tráfego real neste tenant ainda,
resultado honesto)
---
## Riscos conhecidos