diff --git a/apps/web/app/(dashboard)/conciliacion/page.tsx b/apps/web/app/(dashboard)/conciliacion/page.tsx index 67d314f..70377eb 100644 --- a/apps/web/app/(dashboard)/conciliacion/page.tsx +++ b/apps/web/app/(dashboard)/conciliacion/page.tsx @@ -36,6 +36,7 @@ function FilterHeader({ setFilters, openFilter, setOpenFilter, + suggestions, }: { label: string; filterKey: string; @@ -43,6 +44,7 @@ function FilterHeader({ setFilters: React.Dispatch>; openFilter: string | null; setOpenFilter: (v: string | null) => void; + suggestions: string[]; }) { const rawValue = (filters as any)[filterKey] || ''; const [localValue, setLocalValue] = useState(rawValue); @@ -61,6 +63,10 @@ function FilterHeader({ }, [debouncedValue]); const hasFilter = !!rawValue; + const filteredSuggestions = localValue.length >= 1 + ? suggestions.filter((s) => s.toLowerCase().includes(localValue.toLowerCase())).slice(0, 8) + : suggestions.slice(0, 8); + return (
{label} @@ -70,10 +76,10 @@ function FilterHeader({ - +

Filtrar por {label}

-
+
setLocalValue(e.target.value)} autoFocus /> + {filteredSuggestions.length > 0 && ( +
+ {filteredSuggestions.map((s, idx) => ( + + ))} +
+ )}
@@ -144,6 +167,15 @@ export default function ConciliacionPage() { const pendientes = cfdis?.filter((c) => c.conciliado !== 'true') || []; const conciliadas = cfdis?.filter((c) => c.conciliado === 'true') || []; + // Sugerencias únicas para filtros de columna (de todos los CFDIs cargados) + const allCfdis = cfdis || []; + const uniqueSuggestions = { + rfcEmisor: [...new Set(allCfdis.map((c: any) => c.rfcEmisor).filter(Boolean))].sort(), + nombreEmisor: [...new Set(allCfdis.map((c: any) => c.nombreEmisor).filter(Boolean))].sort(), + rfcReceptor: [...new Set(allCfdis.map((c: any) => c.rfcReceptor).filter(Boolean))].sort(), + nombreReceptor: [...new Set(allCfdis.map((c: any) => c.nombreReceptor).filter(Boolean))].sort(), + }; + // Score cards — tipo P usa monto_pago_mxn, otros usan total_mxn const getMonto = (c: any) => Number(c.montoMxn || c.totalMxn || 0); const montoConciliado = conciliadas.reduce((s, c) => s + getMonto(c), 0); @@ -362,10 +394,10 @@ export default function ConciliacionPage() { setSortPendientes(prev => prev?.field === 'fecha' ? { field: 'fecha', dir: prev.dir === 'asc' ? 'desc' : 'asc' } : { field: 'fecha', dir: 'asc' })}> Fecha - - - - + + + + setSortPendientes(prev => prev?.field === 'total' ? { field: 'total', dir: prev.dir === 'asc' ? 'desc' : 'asc' } : { field: 'total', dir: 'asc' })}> Total MXN @@ -481,8 +513,8 @@ export default function ConciliacionPage() { setSortConciliadas(prev => prev?.field === 'fecha' ? { field: 'fecha', dir: prev.dir === 'asc' ? 'desc' : 'asc' } : { field: 'fecha', dir: 'asc' })}> Fecha Emisión - - + + setSortConciliadas(prev => prev?.field === 'total' ? { field: 'total', dir: prev.dir === 'asc' ? 'desc' : 'asc' } : { field: 'total', dir: 'asc' })}> Total MXN