fix(mi-dia): dedup capturas que ya aparecen en leads/oportunidades

Cuando un lead se crea con Monday activo, aparece tanto en el tablero
Monday (misLeads) como en LeadCaptura (misCapturas). Filtrar de
'misCapturas' los items cuyo leadId ya existe en misLeads/misOportunidades
para evitar el duplicado visual que reportan los vendedores.

597 tests verdes.
This commit is contained in:
2026-09-06 08:26:03 +00:00
parent 60649890eb
commit 50e6eca7da
3 changed files with 24 additions and 26 deletions

View File

@@ -400,6 +400,14 @@ export async function resumenMiDia(
}
})
.sort((a, b) => b.capturadoEn.localeCompare(a.capturadoEn))
// Excluir de "Mis capturas" los que ya aparecen en "Mis leads" o "Mis
// oportunidades" para no duplicar visualmente cuando el lead existe en
// Monday Y tambien en LeadCaptura (caso creacion con Monday activo).
const idsEnOtrosTabs = new Set([
...misLeads.map((l) => l.id),
...mios.map((o) => o.id),
])
const misCapturasSinDuplicados = misCapturas.filter((c) => !idsEnOtrosTabs.has(c.leadId))
// "Mis clientes" es local + cruce con Monday: el alta en progreso lleva
// proyecto '', el alta completada lleva el proyecto lleno. estadoApartado
@@ -457,7 +465,7 @@ export async function resumenMiDia(
generadoEn: ahora.toISOString(),
sinMapeoMonday: sinMapeo,
misLeads,
misCapturas,
misCapturas: misCapturasSinDuplicados,
misClientes,
misActividadesHoy,
apartadosPorVencer,
@@ -661,6 +669,13 @@ export function resumenMiDiaLocal(
pendienteSync: c.pendienteSync,
}))
.sort((a, b) => b.capturadoEn.localeCompare(a.capturadoEn))
// Excluir de "Mis capturas" los que ya aparecen en "Mis leads" u "Mis
// oportunidades" para no duplicar visualmente.
const idsEnOtrosTabsLocal = new Set([
...misLeads.map((l) => l.id),
...itemsOportunidades.map((o) => o.id),
])
const misCapturasSinDuplicadosLocal = misCapturas.filter((c) => !idsEnOtrosTabsLocal.has(c.leadId))
const etapaApartadoPorId = new Map(apartadosLocales.map((a) => [a.leadId, a.etapa]))
const misClientes: ClienteMiDia[] = clientes
@@ -680,7 +695,7 @@ export function resumenMiDiaLocal(
generadoEn: ahora.toISOString(),
sinMapeoMonday: usuario.mondayUserId === null,
misLeads,
misCapturas,
misCapturas: misCapturasSinDuplicadosLocal,
misClientes,
misActividadesHoy: [], // no hay tabla local de actividades
apartadosPorVencer: [], // los apartados locales aún no guardan fecha límite