> ## Documentation Index
> Fetch the complete documentation index at: https://docs.unitedpetroleum.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Reporte diario de rutas

> Cómo se genera e interpreta el reporte de rutas de un día: tanque a tanque, viajes, ralentí, PARAM y alertas

# Reporte diario de rutas (jornada)

Cuando en los filtros elige **la misma fecha de inicio y fin**, United Logistics abre el modo **Reporte de rutas (jornada)**. Es la ficha operativa del día para entregar a supervisión de flota o combustible.

<Info>
  Antes de usar este manual, revise el [glosario](/combustible/conceptos-rendimiento): qué es una **ruta**, un **viaje** y el **ralentí**.
</Info>

## Cuándo usarlo

* Cierre diario de eficiencia por unidad.
* Investigar una recarga anómala del día.
* Cruzar combustible (galones / odómetro) con telemática (viajes, idle, velocidad).
* Preparar evidencia antes de hablar con un conductor o taller.

Para tendencias semanales o mensuales use el [reporte por período](/combustible/reporte-periodo).

***

## Cómo generar el reporte

<Steps>
  <Step title="Abrir Rendimiento combustible">
    En Paso Rápido vaya a **Combustible** → **Rendimiento**, o directamente a `/paso-rapido/dashboard/combustible/reporte-rendimiento`.
  </Step>

  <Step title="Elegir un solo día">
    Use el selector de fechas con **inicio = fin** (presets **Hoy** o **Ayer**). La zona del día es siempre **America/Santo\_Domingo**, no la zona del navegador.
  </Step>

  <Step title="Filtrar (opcional)">
    * **Marca** y **Flota** para reducir el universo.
    * **Vehículos**: vacío = todos los que tengan cargas ese día (según filtros).
    * **Umbral amarillo %** (default **6**) y **umbral rojo %** (default **10**) para las alertas de desvío vs PARAM.
  </Step>

  <Step title="Generar reporte">
    Pulse **Generar reporte**. La vista se desplaza a los resultados (`#rendimiento-results`).
  </Step>

  <Step title="Revisar, ajustar y guardar">
    Edite kilómetros si hace falta, expanda filas para ver viajes, guarde la configuración si la reutilizará.
  </Step>
</Steps>

<Note>
  Si cambia de un día único a un rango (o al revés), la app **limpia** los resultados anteriores: son dos motores distintos.
</Note>

***

## Qué hace el sistema por detrás

Orden conceptual del cálculo (API `POST /api/fuel-route-day`):

1. Toma todas las [cargas](/combustible/entradas) del día (ventana SDT) con vehículo asignado.
2. Para cada vehículo arma la cadena de cargas desde **día − 45 días** hasta el fin del día, ordenada por fecha e id.
3. Por cada carga del día, busca la **carga anterior** en esa cadena. Sin anterior → no hay línea.
4. Omite galones ≤ 0.
5. Calcula distancia GPS y vendor; **elige GPS si el delta GPS > 0**, si no vendor.
6. Calcula rendimiento, desvío vs **PARAM** del vehículo y nivel de alerta con los umbrales del filtro.
7. Asocia [viajes](/flota/viajes) en `(carga_anterior, carga_actual]` y agrega motor, idle, ECO, velocidad máxima.
8. Devuelve las líneas + un resumen (KPIs).

```mermaid theme={null}
sequenceDiagram
  participant U as Usuario
  participant UI as Reporte UI
  participant API as fuel-route-day
  participant DB as Cargas + Viajes + Vehículos

  U->>UI: Día + filtros + Generar
  UI->>API: date, org, vehicles, umbrales
  API->>DB: cargas del día + cadena 45d
  API->>DB: viajes en ventana tanque-a-tanque
  API->>DB: PARAM, ralentí máx, límite velocidad
  API-->>UI: líneas + summary
  UI-->>U: KPIs + tabla + detalle viajes
```

***

## KPIs del encabezado

| KPI | Significado |
| - | - |
| **Rutas** | Número de líneas (= recargas del día con carga previa usable). |
| **Galones** | Suma de galones de esas cargas. |
| **Kilómetros** | Suma de distancias efectivas usadas en cada línea. |
| **Rend. prom.** | Promedio de los rendimientos no nulos de las líneas. |
| **Alertas** | Conteos amarillas / rojas según umbrales. |

Si ve el mensaje *No hay rutas con recarga…*, suele significar: no hubo cargas ese día, o ninguna tenía carga previa en 45 días, o los filtros dejaron fuera los vehículos.

***

## Columnas de la tabla (cómo leerlas)

| Columna | Qué mira | Cómo actuar |
| - | - | - |
| **#** | Índice de línea del día | Referencia al hablar de “la ruta 3”. |
| **Ficha** | Número / placa / modelo | Identifica la unidad. |
| **Conductor** | Nombre en la **entrada de combustible** | No es automáticamente el del viaje. |
| **Km** | Odómetro inicio → fin (editable) | Prefill GPS luego vendor. Editar → fuente **manual**. |
| **Recorr.** | Km efectivos + badge de fuente (`gps` / `vendor` / `manual`) | Base del rendimiento. |
| **Gl** | Galones de la carga del día | Denominador. |
| **Rend.** | km/gal del tramo | Comparar con PARAM. |
| **PARAM** | Meta km/gal del vehículo | Si falta → desvío y alerta “desconocida”. |
| **Desvío** | % vs PARAM (verde si +, rojo si −) | Magnitud del problema o del ahorro. |
| **Alerta** | ok / yellow / red / unknown | Priorice rojas, luego amarillas. |
| **Ralentí** | % idle vs máximo del vehículo | Rojo si supera `ralenti_max_percentage`. Hover: motor / parking / conductores de viaje. |
| **ECO** | Promedio de `eco_score` de los viajes | Conducción eficiente telemática. |
| **Máx** | Velocidad pico vs límite (`red_threshold` del vehículo) | Exceso si pico > límite. |
| **Exceso** | Segundos sobre el límite (desde telemetría de velocidad) | Evidencia de manejo agresivo. |
| **Viajes** | Cantidad de trips en la ventana | Expandir para detalle. |

***

## Fórmulas que debe poder explicar en una reunión

**Rendimiento**

```
rendimiento = round2(km efectivos / galones)
```

**Desvío %**

```
desvío % = round1(((rendimiento - PARAM) / PARAM) × 100)
```

**Desvío en galones**

```
desvío gal = round2(galones × (desvío % / 100))
```

**Alerta**

* Sin desvío calculable → `unknown`
* `|desvío| > rojo` → `red`
* `|desvío| > amarillo` → `yellow`
* si no → `ok`

**% ralentí**

```
% ralentí = round((idleSeconds / engineOnSeconds) × 100)
```

**Parking (aprox.)**

```
parking = max(0, segundos entre cargas - engineOnSeconds)
```

***

## Detalle al expandir una ruta

Cada viaje muestra, entre otros:

* Mapa de inicio/fin (si hay coordenadas).
* Distancia y duración del trip.
* Motor / conducción / ralentí del viaje.
* ECO y driving score.
* Velocidad máxima y si hubo exceso vs límite del vehículo.
* Conductor telemático.

Use esto para separar:

1. Problema de **dato** (odo mal, GPS faltante, carga mal tipada).
2. Problema de **operación** (mucho idle en cola, rutas cortas, exceso de velocidad).
3. Problema de **meta** (PARAM desactualizado para ese modelo).

***

## Editar kilómetros

Puede corregir km inicio, km fin o la distancia de la línea. Al guardar el ajuste:

* La fuente pasa a **manual**.
* Se recalculan rendimiento, desvío y alerta con los **mismos umbrales** del filtro actual.
* El ajuste puede persistirse al **Guardar** la configuración del reporte (`route_distance_edits`).

<Tip>
  Corrija odómetros solo con evidencia (foto de tablero, ticket, GPS confiable). Deje constancia en el título o notas de la configuración guardada.
</Tip>

***

## Guardar y reabrir

* **Guardar**: título opcional; conserva filtros, umbrales y ediciones de distancia del modo diario.
* La organización conserva como máximo las **3 configuraciones más recientes** (las anteriores se depuran).
* **Guardados**: menú para recargar (regenera el reporte). También puede abrirse con `?configId=` en la URL.

***

## Casos límite frecuentes

| Situación | Qué verá |
| - | - |
| Primera carga del vehículo en 45 días | Sin línea de ruta para esa recarga. |
| Sin GPS y vendor inválido | Distancia `none`, rendimiento vacío, alerta `unknown`. |
| Sin PARAM en el vehículo | Desvío vacío, alerta `unknown`. |
| Sin viajes en la ventana | Viajes = 0; idle/ECO vacíos o pobres; parking ≈ toda la ventana. |
| Día sin cargas | Resumen en cero / mensaje vacío. |
| Umbrales personalizados | Solo afectan alertas; no cambian el cálculo de km/gal. |

***

## Checklist de entrega diaria (handoff)

1. Generar **Ayer** (o el día operativo cerrado) sin filtros, luego filtrar flotas críticas.
2. Ordenar mentalmente: alertas **rojas** → **amarillas** → idle over → exceso de velocidad.
3. Expandir cada roja: ¿dato malo o operación real?
4. Ajustar km solo con evidencia; guardar configuración con título `Jornada YYYY-MM-DD`.
5. Si necesita tendencia de la semana, pasar al [reporte por período](/combustible/reporte-periodo) (export Excel/PDF).
6. Para interpretación de negocio y acciones recomendadas, ver [Interpretación y uso](/combustible/interpretacion).
