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) ||