> ## 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.

# Conceptos de rendimiento

> Glosario operativo: ruta, viaje, ralentí, carga, PARAM, desvío, distancias GPS y vendor

# Conceptos de rendimiento de combustible

Este glosario define cómo United Logistics interpreta cada término en el [reporte de rendimiento](/combustible/reporte-rendimiento). Léalo antes de generar o entregar un informe a operaciones.

<Info>
  El módulo vive en Paso Rápido → Combustible → **Rendimiento combustible** (`/paso-rapido/dashboard/combustible/reporte-rendimiento`). Requiere el permiso de módulo `fuel_management`.
</Info>

## Modelo mental en una frase

| Modo | Pregunta que responde |
| - | - |
| **Reporte de rutas (jornada)** — un solo día | Entre esta carga y la anterior del mismo vehículo, ¿cuántos km/gal obtuvimos vs el PARAM, y qué dijo la telemática de ralentí y velocidad? |
| **Reporte de rendimiento (período)** — varios días | En este rango, ¿cuántos km recorrimos por cada galón comprado, con la mejor historia de odómetro justificada (vendor, GPS o manual)? |

***

## Carga / entrada / fill

Una **carga** (también *entrada* o *fuel entry*) es un registro en el sistema de que el vehículo recibió combustible: galones, fecha/hora, odómetro del proveedor (vendor/API), odómetro GPS (si existe), conductor de la carga y vehículo.

Se crean manualmente, por [importación](/combustible/importar) o por integración. Sin cargas válidas no hay reporte de rendimiento.

Campos que el reporte usa de forma crítica:

| Campo | Uso en el reporte |
| - | - |
| `gallons` | Denominador del rendimiento (km/gal). Cargas con galones ≤ 0 se omiten. |
| `odometer_reading` | Odómetro **vendor** (bomba / TopKat / API). |
| `gps_odometer_reading` | Odómetro **GPS** asociado a la carga. |
| `transaction_date` | Ordena la cadena de cargas y define la ventana entre cargas. |
| `driver_name` | Conductor mostrado en la **carga** (no necesariamente el del viaje telemático). |

Véase también [Entradas de combustible](/combustible/entradas).

***

## Ruta (línea de jornada)

En el **reporte diario**, una **ruta** no es un viaje telemático ni una ruta comercial predefinida.

Es **una línea del informe**: la carga del día seleccionada, comparada con la **carga anterior del mismo vehículo**.

```mermaid theme={null}
flowchart LR
  A["Carga anterior<br/>(mismo vehículo)"] -->|"ventana entre cargas"| B["Carga del día"]
  B --> C["Línea de ruta<br/>km · gl · rend · PARAM · ralentí · viajes"]
```

Reglas:

* Solo se generan líneas para cargas del **día calendario en zona America/Santo\_Domingo** (UTC−4).
* Debe existir una carga previa en la cadena del vehículo (búsqueda hasta **45 días** atrás).
* Si no hay carga previa → esa recarga **no aparece** como ruta.
* El contador **Rutas** del resumen = número de esas líneas.

<Tip>
  Piense la ruta como el “tramo tanque-a-tanque” cerrado por la recarga del día. Los [viajes](/combustible/conceptos-rendimiento#viaje--trip) son lo que ocurrió *dentro* de ese tramo.
</Tip>

***

## Viaje / trip

Un **viaje** es un segmento telemático registrado en la flota (inicio, fin, distancia, velocidades, scores). En el reporte diario se asocian a cada ruta si:

1. El `vehicle_id` coincide, y
2. La fecha de inicio del viaje es **estrictamente posterior** a la carga anterior y **menor o igual** a la carga actual.

Es decir: viajes en el intervalo `(carga_anterior, carga_actual]`.

En la tabla verá la columna **Viajes** (`tripCount`). Al expandir la fila aparecen tarjetas por viaje (mapa, ralentí, ECO, exceso de velocidad, conductor del viaje).

<Note>
  El **conductor de la carga** (combustible) y el **conductor del viaje** (telemática) pueden diferir. Ambos se muestran; no se fuerza un único conductor.
</Note>

Detalle operativo de viajes en flota: [Viajes](/flota/viajes).

***

## Ralentí (idle)

El **ralentí** es el tiempo con motor encendido sin avance significativo de conducción, derivado de métricas telemáticas ERM.

### Cómo se calcula el porcentaje

```
% ralentí = (segundos de idle / segundos con motor encendido) × 100
```

El porcentaje se redondea a entero y se acota entre 0 y 100. Si no hay tiempo de motor (`engineOn ≤ 0`), el % queda vacío.

### Motor encendido, conducción y parking

| Concepto | Significado en el reporte diario |
| - | - |
| **Motor / engine-on** | Tiempo de motor estimado por viaje: duración del viaje + **186 s** de standing por viaje (`ERM_TRIP_STANDING_SECONDS`). |
| **Conducción / travel** | Parte del tiempo de motor atribuida a movimiento (desde rollup diario del vehículo, prorrateado por viaje). |
| **Ralentí / idle** | `motor − conducción` (no negativo). |
| **Parking** | Tiempo de la ventana entre cargas menos el motor encendido: aproximación de vehículo apagado / estacionado. |

Si no hay rollup diario de telemática, el sistema usa una proporción de idle por defecto (\~15,8 %) para estimar.

### Límite de ralentí (`idleMaxPct`)

Cada vehículo puede tener `ralenti_max_percentage` (heredado o definido a nivel vehículo / marca). Si el % de ralentí de la ruta **supera** ese máximo → se marca `idleOver` (barra en rojo / alerta visual).

Si el vehículo no tiene máximo configurado, la UI puede mostrar “Sin categoría” y no se dispara el exceso.

***

## Distancia: GPS, vendor y manual

El rendimiento necesita kilómetros. Hay tres fuentes:

| Fuente | Origen | Cuándo se usa (diario) | Cuándo se sugiere (período) |
| - | - | - | - |
| **GPS** | Delta de `gps_odometer_reading` (o eventos GPS en período) | Preferida si el delta GPS > 0 | Si el vendor no es usable |
| **Vendor** | Delta de `odometer_reading` (bomba/API) | Respaldo si no hay GPS válido | Preferida si el delta vendor es usable |
| **Manual** | Edición del usuario (km inicio/fin o km totales) | Cuando corrige la fila | Cuando fuerza un ajuste |

**Delta válido:** solo si odómetro fin > inicio. Resets, negativos o faltantes → distancia nula en esa fuente.

<Warning>
  En el **reporte diario** la prioridad automática es **GPS → vendor**. En el **reporte por período** la sugerencia automática prioriza **vendor** cuando es usable, y cae a GPS si el vendor está dañado (reset, outlier, etc.). Son políticas distintas a propósito.
</Warning>

***

## Rendimiento (km/gal)

```
rendimiento = kilómetros efectivos / galones de la carga
```

Unidades: **kilómetros por galón** (no L/100 km). Se redondea a 2 decimales. Queda vacío si no hay distancia > 0 o galones ≤ 0.

***

## PARAM (meta de eficiencia)

**PARAM** es la meta de km/gal del vehículo (`fuel_efficiency_target`). Si no está definida a nivel vehículo, suele migrarse/derivarse del rango medio de la **marca** (categoría de eficiencia).

En el reporte diario cada línea compara su rendimiento contra ese PARAM.

En el reporte por período, en lugar de un solo PARAM, se usan bandas **mín–máx** de eficiencia (`fuel_efficiency_min` / `fuel_efficiency_max`) de la marca o del vehículo para colorear y detectar outliers.

***

## Desvío % y desvío en galones

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

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

Interpretación rápida:

* Desvío **positivo** → mejor que la meta (más km por galón).
* Desvío **negativo** → peor que la meta (quema más de lo esperado).

***

## Alerta (ok / amarilla / roja / desconocida)

La alerta del reporte diario se basa en el **valor absoluto** del desvío % frente a umbrales configurables:

| Nivel | Condición (por defecto) |
| - | - |
| **ok** | Absoluto del desvío ≤ umbral amarillo (6 %) |
| **yellow** | Umbral amarillo \< absoluto del desvío ≤ umbral rojo |
| **red** | Absoluto del desvío > umbral rojo (10 %) |
| **unknown** | No se pudo calcular (sin PARAM, sin distancia, etc.) |

Los umbrales se editan en los filtros del día y se pueden guardar en una configuración.

***

## Ficha

**Ficha** es la identificación de visualización del vehículo (número interno, a menudo con placa). En la tabla diaria la columna **Ficha** muestra ese identificador.

***

## Marca y flota

| Término | Rol |
| - | - |
| **Marca** | Categoría de eficiencia / operación del vehículo (bandas min–máx, a veces límite de ralentí). En la UI sigue llamándose “Marca”. |
| **Flota** | Agrupación operativa (`fleet_id`) para filtrar unidades. |

Los filtros de marca y flota reducen la lista de vehículos disponibles de forma cascada.

***

## Carga previa (carry-in)

En el **reporte por período**, si está activo **Incluir última carga previa** (por defecto sí):

* Se busca la última carga **antes** del inicio del período (hasta 45 días).
* Esa carga define el odómetro de arranque del primer tanque del período.
* Evita subestimar kilómetros cuando el período empieza a mitad de un tanque.

Si lo desactiva, el cálculo arranca en la primera carga *dentro* del período.

***

## Resumen de dependencias

```mermaid theme={null}
flowchart TB
  E["Entradas de combustible"] --> D["Reporte diario de rutas"]
  E --> P["Reporte por período"]
  V["Viajes telemáticos"] --> D
  R["Rollups / eventos GPS"] --> D
  R --> P
  CFG["PARAM · ralentí máx · umbrales · bandas marca"] --> D
  CFG --> P
```

Siguiente paso: [cómo generar el reporte](/combustible/reporte-rendimiento) o ir directo al [manual del reporte diario](/combustible/reporte-diario).
