--- name: Refactor monitoramento-cobranca (2026-04-23) description: View reescrita (1516→600 linhas), 4 abas limpas, filtros funcionais, fix bug URA SQL malformado type: project originSessionId: b36e383a-8f99-440c-a4c8-ab2f0625f864 --- # Refactor /monitoramento-cobranca (2026-04-23) ## Antes (problemas) - 12 cards de stats em 2 linhas (poluído) - 7 abas: Resumo, Envios, Boletos&Protestos, Erros, Por Cliente, Pagamentos&NFSe, Ligações — duas delas redundantes - Filtro "Tipo Cobrança" com 16 opções confusas - Botão "Limpar" apenas reseta pra data atual, não limpa de fato ## Depois (novo) - 6 cards: Valor vencido (R$), Pagos no mês, Envios hoje, Erros, Ligações hoje, NFSe pendentes - 4 abas: Clientes (default), Envios, Pagamentos & NFSe, Ligações - Filtros: De / Até / Status (3 opções) + [Filtrar] [Limpar] [CSV] - "Limpar" agora **zera todos os filtros de verdade** - Modal detalhe cliente com resumo em cards + boletos + últimos envios ## Bug URA corrigido `UraLigacaoLogModel` tinha `useTimestamps = true` + `updatedField = null`. CI4 gerava SQL com vírgula trailing: ``` INSERT INTO ura_ligacao_log (..., created_at, ) VALUES (..., '2026-04-22 14:44:04', '2026-04-22 14:44:04') ``` Fix: `useTimestamps = false` + callback `$beforeInsert = ['setCreatedAt']` que seta `created_at` manualmente. Tabela não tem `updated_at` mesmo. ## Botões Limpar - **"Limpar"** (filtros): reseta date/status, recarrega tudo. Funcional. - **"Limpar não atendidas"** (aba Ligações): chama `/monitoramento-cobranca/limpar-nao-atendidas` (DELETE em ligações com status != 'atendida'). Já funcionava no backend, mantido. ## Deploy - View `app/Views/monitoramento_cobranca/index.php` (reescrita, ~600 linhas) - Model `app/Models/UraLigacaoLogModel.php` (fix timestamps) - Ambos via pscp .tmp → php -l → mv atomic. Ok. ## Endpoints (não mexidos — continuam válidos) - `dashboard` GET — stats gerais - `resumo-clientes` GET — lista consolidada - `logs` GET — envios com paginação - `pagamentos` GET — boletos pagos com NFSe - `ligacoes` GET — ligações do período - `excluir-ligacao` POST — single delete - `limpar-nao-atendidas` POST — batch delete - `cliente/:id` GET — detalhes para modal