fix: mejorar el calculo de ETA usando duracion estimada de la BD y corregir etiquetas de tiempo en la interfaz
This commit is contained in:
@ -78,7 +78,7 @@ export function useETA() {
|
||||
const [routeRes, stopsRes] = await Promise.all([
|
||||
supabase
|
||||
.from('routes')
|
||||
.select('distance_km, average_speed_kmh')
|
||||
.select('distance_km, average_speed_kmh, estimated_duration_minutes')
|
||||
.eq('id', ruta_id)
|
||||
.single(),
|
||||
supabase
|
||||
@ -107,10 +107,18 @@ export function useETA() {
|
||||
}
|
||||
distanciaAcumuladaKm *= 1.2;
|
||||
const velocidad = routeData.average_speed_kmh || VELOCIDAD_PROMEDIO_KMH;
|
||||
const tiempoViajeMinutos = (distanciaAcumuladaKm / velocidad) * 60;
|
||||
const numeroParadas = targetStopIndex;
|
||||
const tiempoParadasMinutos = (numeroParadas * TIEMPO_PARADA_SEGUNDOS) / 60;
|
||||
minutosHastaParada = tiempoViajeMinutos + tiempoParadasMinutos;
|
||||
|
||||
// Si la ruta tiene una duración estimada en BD, la usamos como base para el trayecto total
|
||||
// y calculamos la proporción según la parada.
|
||||
if (routeData.estimated_duration_minutes && routeData.distance_km) {
|
||||
const proporcionDistancia = distanciaAcumuladaKm / (routeData.distance_km * 1.2);
|
||||
minutosHastaParada = routeData.estimated_duration_minutes * proporcionDistancia;
|
||||
} else {
|
||||
const tiempoViajeMinutos = (distanciaAcumuladaKm / velocidad) * 60;
|
||||
const numeroParadas = targetStopIndex;
|
||||
const tiempoParadasMinutos = (numeroParadas * TIEMPO_PARADA_SEGUNDOS) / 60;
|
||||
minutosHastaParada = tiempoViajeMinutos + tiempoParadasMinutos;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -135,16 +143,23 @@ export function useETA() {
|
||||
|
||||
// Si ya salió, el trayecto restante es base - transcurrido. Si no ha salido, es el base completo.
|
||||
const minutosTransitoRestante = Math.max(0, minutosTransitoBase - minutosTranscurridosDesdeSalida);
|
||||
|
||||
const etaMinutos = minutosEsperaSalida + minutosTransitoRestante;
|
||||
|
||||
const minutosLlegadaEstablecidos = minutosSalida + minutosTransitoBase;
|
||||
|
||||
// Logging para depuración (solo en desarrollo)
|
||||
if (import.meta.env.DEV) {
|
||||
console.log(`SIBU | Bus ${salida}: Ahora=${minutosAhora}, Salida=${minutosSalida}, Espera=${minutosEsperaSalida}, TransitoRest=${Math.round(minutosTransitoRestante)}, ETA=${Math.round(etaMinutos)}`);
|
||||
}
|
||||
|
||||
const horaLlegada = format12h(minutosLlegadaEstablecidos);
|
||||
const horaSalidaFormato = format12h(minutosSalida);
|
||||
|
||||
let estado: BusETA['estado'];
|
||||
const busYaSalio = minutosAhora >= minutosSalida;
|
||||
|
||||
if (etaMinutos > 5) {
|
||||
estado = (minutosAhora >= minutosSalida) ? 'en_camino' : 'próximo';
|
||||
estado = busYaSalio ? 'en_camino' : 'próximo';
|
||||
} else if (etaMinutos >= -2) {
|
||||
estado = 'en_camino';
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user