# 🔧 Ajustes Pendentes - Financeiro V2 - Cruzamentos ## 📊 Contexto Os cruzamentos já estão usando corretamente a rota `/extrato/apresentar`: - **Receitas**: `tipoOperacao === 'C'` ✅ - **Despesas**: `tipoOperacao === 'D'` ✅ ## ✅ Implementado ### CruzamentoView (Receitas) - Estados de filtros adicionados - Lógica de filtragem implementada (`dadosFiltrados`) - KPIs recalculados (`kpisFiltrados`) - Gráficos atualizados para usar dados filtrados ## 🚧 Pendente ### 1. CruzamentoView (Receitas) - Finalizar UI #### 1.1. Adicionar Import do Select ```javascript // Linha 19, após Badge import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; ``` #### 1.2. Substituir Barra de Filtros (linhas 223-253) Substituir o conteúdo atual por: ```jsx {/* Filter & Summary Bar */}
{/* Primeira Linha: Filtros de Período */}
{filtroTipo === 'mes' && (
)} {(filtroTipo === 'mes' || filtroTipo === 'ano') && (
)}
{/* Segunda Linha: Filtro de Caixa */}
Caixa: {dadosFiltrados.length} registros
``` #### 1.3. Atualizar KPIs para usar kpisFiltrados (linhas 257-281) Substituir: - `kpis?.totalRecebido` por `kpisFiltrados?.totalRecebido` - `kpis?.totalPendente` por `kpisFiltrados?.totalPendente` - `kpis?.totalGeral` por `kpisFiltrados?.totalGeral` ### 2. CruzamentoDespesasView (Despesas) Aplicar as mesmas mudanças no arquivo `contas-pagar/CruzamentoDespesasView.jsx`: #### 2.1. Adicionar Estados de Filtros (após linha 84) ```javascript // Estados para filtros const [filtroMes, setFiltroMes] = React.useState(''); const [filtroAno, setFiltroAno] = React.useState(new Date().getFullYear().toString()); const [filtroCaixa, setFiltroCaixa] = React.useState('todos'); const [filtroTipo, setFiltroTipo] = React.useState('mes'); // 'mes' | 'ano' | 'todos' ``` #### 2.2. Adicionar Lógica de Filtragem ```javascript // Dados filtrados baseados nos filtros ativos const dadosExecutadosFiltrados = React.useMemo(() => { if (!Array.isArray(despesasExecutadas)) return []; return despesasExecutadas.filter(item => { // Filtro por período if (filtroTipo === 'mes' && filtroMes && filtroAno) { const dataItem = item?.dataEntrada || item?.data || ''; const [ano, mes] = dataItem.split('-'); if (ano !== filtroAno || mes !== filtroMes) return false; } else if (filtroTipo === 'ano' && filtroAno) { const dataItem = item?.dataEntrada || item?.data || ''; const [ano] = dataItem.split('-'); if (ano !== filtroAno) return false; } // Filtro por caixa if (filtroCaixa !== 'todos' && item?.caixinha) { if (item.caixinha !== filtroCaixa) return false; } return true; }); }, [despesasExecutadas, filtroMes, filtroAno, filtroCaixa, filtroTipo]); // KPIs recalculados const kpisFiltrados = React.useMemo(() => { const totalExecutado = dadosExecutadosFiltrados.reduce((acc, item) => acc + (item.valor || 0), 0); return { totalPlanejado: 0, totalExecutado, variacao: totalExecutado, percentualVariacao: 0 }; }, [dadosExecutadosFiltrados]); ``` #### 2.3. Atualizar useMemo para usar dados filtrados Substituir todas as referências a `despesasExecutadas` por `dadosExecutadosFiltrados` nos cálculos de: - `comparativoCategoria` - `timelineData` - `categoriaData` #### 2.4. Adicionar mesma UI de filtros (linhas 172-207) #### 2.5. Atualizar KPIs para usar kpisFiltrados ## 🎯 Resultado Esperado Após implementar essas mudanças: - ✅ Filtros de mês/ano funcionais - ✅ Filtro de caixa funcional - ✅ KPIs atualizados dinamicamente conforme filtros - ✅ Gráficos refletindo apenas dados filtrados - ✅ Contador de registros filtrados visível - ✅ Dados sempre vindos de `/extrato/apresentar` ## 📌 Observações 1. O campo `caixinha` pode não estar presente em todos os registros do extrato. Ajustar conforme necessário. 2. Os filtros são client-side. Para grandes volumes de dados, considerar filtros server-side. 3. O estado inicial do filtro de mês está vazio - o usuário precisa selecionar. 4. Considerar adicionar um botão "Limpar Filtros" para melhor UX.