# 🔧 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.