diff --git a/servicios.html b/servicios.html index b58ab42..a360a49 100644 --- a/servicios.html +++ b/servicios.html @@ -580,29 +580,31 @@ s._stateInfo = stateInfo; const stName = stateInfo.name.toLowerCase(); - // --- LÓGICA REVISADA DE CONTADORES --- + // --- LÓGICA REVISADA Y EXACTA DE CONTADORES --- + // 1. SIN ASIGNAR: No tiene operario o está en la bolsa if (!s.assigned_name || stateInfo.id === 'bolsa' || stName.includes('asignar') || stName.includes('desasignado')) { - // Si no tiene operario, o está en bolsa, o el estado dice explícitamente sin asignar kpiUnassigned++; } + // 2. INCIDENCIA: El estado incluye la palabra "incidencia" o "pausa" else if (stName.includes('incidencia') || stName.includes('pausa')) { - // Si hay un problema kpiIncident++; } + // 3. ESPERA CLIENTE: El estado es literalmente "Esperando al cliente" else if (stName.includes('espera')) { - // SOLUCIONADO: Ahora solo cuenta aquí si el estado se llama literalmente "Esperando al cliente" kpiWaiting++; } - else if (raw.scheduled_date && raw.scheduled_date !== "" && !stateInfo.is_final) { - // Citados: Tiene operario (ya pasó el primer filtro) y SÍ tiene fecha + // 4. CITADO CONFIRMADO: El estado incluye la palabra "citado" + else if (stName.includes('citado')) { kpiScheduled++; } - else if (!stateInfo.is_final && (!raw.scheduled_date || raw.scheduled_date === "")) { - // Asignado sin cita: Tiene operario, no es incidencia, no es espera, y NO tiene fecha + // 5. ASIGNADO SIN CITA: Tiene operario (ya pasó el primer if), el estado es "asignado" y NO tiene fecha + else if (stName.includes('asignado') && (!raw.scheduled_date || raw.scheduled_date === "")) { kpiAssignedNoDate++; } + // ... (El resto del código de los filtros visuales se mantiene igual) + // Filtro de búsqueda visual (esto no cambia) const matchesSearch = searchTerm === "" || (raw["Nombre Cliente"] || "").toLowerCase().includes(searchTerm) ||