From 65fe788281b27b485b23ae05c3379b86991506bf Mon Sep 17 00:00:00 2001 From: EidanThen Date: Tue, 1 Sep 2026 11:58:15 -0400 Subject: [PATCH] fix: contar pdv unico --- .../planning-kpis/planning-kpis.component.ts | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/route-planner/src/app/private/home/planning-kpis/planning-kpis.component.ts b/route-planner/src/app/private/home/planning-kpis/planning-kpis.component.ts index c47f6a5..d370e3a 100644 --- a/route-planner/src/app/private/home/planning-kpis/planning-kpis.component.ts +++ b/route-planner/src/app/private/home/planning-kpis/planning-kpis.component.ts @@ -86,7 +86,13 @@ export class PlanningKpisComponent implements OnInit, OnDestroy { private refresh(): void { const assigned = this.routeState.getAssignedSnapshot(); const unassigned = this.routeState.getNoAssignedSnapshot(); - const totalPdvs = assigned.length + unassigned.length; + const assignedPdvIds = new Set(assigned.map(route => String(route.json.pdv_id))); + // A PDV with at least one scheduled visit is assigned; repeated weekly visits and + // partial-assignment alerts must not inflate the planning coverage counters. + const unassignedPdvIds = new Set(unassigned + .map(route => String(route.pdv_id)) + .filter(pdvId => !assignedPdvIds.has(pdvId))); + const totalPdvs = new Set([...assignedPdvIds, ...unassignedPdvIds]).size; const dailyRoutes = summarizeDailyRoutes(assigned); const totalDistance = dailyRoutes.reduce((sum, day) => sum + day.distanceKm, 0); const totalTravelHours = dailyRoutes.reduce((sum, day) => sum + day.travelHours, 0); @@ -134,9 +140,9 @@ export class PlanningKpisComponent implements OnInit, OnDestroy { this.summary = { totalPdvs, - assignedPdvs: assigned.length, - unassignedPdvs: unassigned.length, - coverage: totalPdvs ? (assigned.length / totalPdvs) * 100 : 0, + assignedPdvs: assignedPdvIds.size, + unassignedPdvs: unassignedPdvIds.size, + coverage: totalPdvs ? (assignedPdvIds.size / totalPdvs) * 100 : 0, users, days, totalDistance, @@ -149,9 +155,15 @@ export class PlanningKpisComponent implements OnInit, OnDestroy { assignmentBalance }; - const reasonCounts = new Map(); + const reasonByPdv = new Map(); for (const route of unassigned) { + const pdvId = String(route.pdv_id); + if (assignedPdvIds.has(pdvId) || reasonByPdv.has(pdvId)) continue; const reason = route.motivo?.trim() || 'Sin motivo especificado'; + reasonByPdv.set(pdvId, reason); + } + const reasonCounts = new Map(); + for (const reason of reasonByPdv.values()) { reasonCounts.set(reason, (reasonCounts.get(reason) ?? 0) + 1); } this.reasons = Array.from(reasonCounts.entries()) -- 2.52.0