Skip to main content

6.2. Consulta viajes

Este documento define el nuevo servicio a utilizar para el flujo de consulta de viajes (formato moderno sin p_*) y el mapeo de campos hacia las tablas de base de datos del dominio de Recolección.


1) Servicio a utilizar

Nombre: Trip Query Service (v1)
Base URL: https://api.alpura.mx/trip-query/v1
Endpoint: POST /trips/_search

1.1 Request (nuevo formato)

{
"operadorId": 1563842,
"estatus": "En Transito",
"fecha": ""
}

fecha puede venir vacío para obtener activos o del día, según reglas de la API.

1.2 Response (ejemplo legacy equivalente)

{
"AlpRecoleccionViajesCollection": {
"AlpRecoleccionViajes": {
"rowId": 217207383,
"idViaje": 508463,
"controlInterno": 1314822,
"operadorEmployeeNumber": 1563842,
"operadorFullName": "BARRAZA SANCHEZ JOSE ARTURO",
"pipa": 148,
"dolly": "",
"proveedorTransporte": "ALPURA",
"proveedorId": 0,
"tractor": 1152,
"ruta": 471,
"volante": 2211637,
"FechaRecoleccion": "2024-06-03T00:00:00.000-05:00"
}
}
}

2) Mapeo a tablas de Base de Datos

Tablas principales: ALP_RECOLECCION_VIAJES (maestro) y ALP_DET_RECOLECCION_VIAJES (detalle).
Tabla opcional (según caso): ALP_RECOLECCION_TRANSFERENCIAS (si hay transferencia).

Campo respuestaTabla.ColumnaNotas
rowIdALP_RECOLECCION_VIAJES.ROW_IDIdentificador interno
idViajeALP_DET_RECOLECCION_VIAJES.ID_VIAJE o ALP_RECOLECCION_VIAJES.ID_VIAJESegún diseño, puede provenir del maestro o detalle; si no existe en maestro, usar del detalle
controlInternoALP_RECOLECCION_VIAJES.CONTROL_INTERNO
operadorEmployeeNumberALP_RECOLECCION_VIAJES.OPERADOR_EMPLOYEE_NUMBER
operadorFullNameALP_RECOLECCION_VIAJES.OPERADOR_FULL_NAME
pipaALP_RECOLECCION_VIAJES.PIPA
dollyALP_RECOLECCION_VIAJES.DOLLY
proveedorTransporteALP_RECOLECCION_VIAJES.PROVEEDOR_TRANSPORTE
proveedorIdALP_RECOLECCION_VIAJES.PROVEEDOR_ID
tractorALP_RECOLECCION_VIAJES.TRACTOR
rutaALP_RECOLECCION_VIAJES.RUTA
volanteALP_DET_RECOLECCION_VIAJES.VOLANTERequiere join al detalle
FechaRecoleccionALP_RECOLECCION_VIAJES.FECHA_RECOLECCION

Relaciones clave

  • ALP_RECOLECCION_VIAJES (1) — (N) ALP_DET_RECOLECCION_VIAJES (join por CONTROL_INTERNO y/o ID_VIAJE según disponibilidad).
  • ALP_RECOLECCION_VIAJES (1) — (0..1) ALP_RECOLECCION_TRANSFERENCIAS (si ID_TRANSFERENCIA > 0).

3) SQL de referencia (Oracle)

Filtra por operadorId (nómina), estatus y opcionalmente fecha.
La obtención de VOLANTE viene del detalle (escoge el más reciente si hay varios).

WITH det AS (
SELECT
d.CONTROL_INTERNO,
d.ID_VIAJE,
/* Elegir un VOLANTE representativo: el más reciente por FECHA_EVENTO o el máximo */
MAX(d.VOLANTE) KEEP (DENSE_RANK LAST ORDER BY NVL(d.FECHA_EVENTO, DATE '1900-01-01')) AS VOLANTE
FROM ALP_DET_RECOLECCION_VIAJES d
GROUP BY d.CONTROL_INTERNO, d.ID_VIAJE
)
SELECT
v.ROW_ID AS rowId,
NVL(v.ID_VIAJE, det.ID_VIAJE) AS idViaje,
v.CONTROL_INTERNO AS controlInterno,
v.OPERADOR_EMPLOYEE_NUMBER AS operadorEmployeeNumber,
v.OPERADOR_FULL_NAME AS operadorFullName,
v.PIPA AS pipa,
v.DOLLY AS dolly,
v.PROVEEDOR_TRANSPORTE AS proveedorTransporte,
v.PROVEEDOR_ID AS proveedorId,
v.TRACTOR AS tractor,
v.RUTA AS ruta,
det.VOLANTE AS volante,
v.FECHA_RECOLECCION AS FechaRecoleccion
FROM ALP_RECOLECCION_VIAJES v
LEFT JOIN det
ON det.CONTROL_INTERNO = v.CONTROL_INTERNO
OR (v.ID_VIAJE IS NOT NULL AND det.ID_VIAJE = v.ID_VIAJE)
WHERE
v.OPERADOR_EMPLOYEE_NUMBER = :operadorId
AND (:estatus IS NULL OR v.EVENTO = :estatus)
AND (:fecha IS NULL OR TRUNC(v.FECHA_RECOLECCION) = TO_DATE(:fecha, 'YYYY-MM-DD'));

Notas de implementación

  • Si fecha llega vacío en el request, se puede ignorar el filtro o usar SYSDATE según regla de negocio.
  • Si hay múltiples filas de detalle por viaje, se sugiere consolidar VOLANTE con la estrategia anterior (por fecha o por máximo).