Skip to main content

6.2.1 Consulta viajes por tipo

Este documento mapea el endpoint legacy consultaViajesTipo al nuevo servicio, detalla el mapeo de campos a la base de datos y provee SQL/diagramas de referencia.


1) Legacy → Nuevo Servicio

1.1 Request (legacy)

{
"destino": "",
"tipo": "CONTROL_INTERNO",
"configuracion": "",
"valor1": 1315031,
"valor2": ""
}

1.2 Nuevo servicio

Servicio: Trip Query Service (v1)
Endpoint: POST /trips/_search-by-type
Descripción: Consulta viajes por tipo/configuración y valores asociados (p.ej. CONTROL_INTERNO + valor1 = controlInterno).

Request (nuevo, equivalente):

{
"tipo": "CONTROL_INTERNO",
"configuracion": "",
"valor1": 1315031,
"valor2": "",
"destino": ""
}

Response (nuevo, equivalente al legacy):

{
"AlpRecoleccionViajesCollection": {
"AlpRecoleccionViajes": {
"rowId": 217842603,
"idViaje": 508821,
"controlInterno": 1315031,
"fechaRecoleccion": "2024-06-03T00:00:00.000-05:00",
"origen": "CUAUTITLAN",
"destino": "CUAUTITLAN",
"zona": "QUERETARO",
"tipo": "P",
"ruta": 34,
"operadorEmployeeNumber": 1507783,
"operadorFullName": "CORONA MARTINEZ JOSE PERFECTO",
"tractor": 1647,
"pipa": 1143,
"dolly": "",
"proveedorTransporte": "ALPURA",
"proveedorId": 0,
"volante": 2212044,
"selloDomo": 169927,
"justificacionSelloDomo": "LAVADO",
"sedeSelloDomo": "Planta Cuautitlán",
"selloValvula": "",
"justificacionSelloValvula": "",
"sedeSelloValvula": "",
"litrosRemisionados": 32215,
"fechaEvento": "2024-06-03T00:00:00.000-05:00",
"idTransferencia": 0,
"ticketVigilancia": "",
"numOcTransferencia": "",
"producto": "DIINEZ0001",
"descripcionProducto": "LECHE CRUDA AL 3.6%"
}
}
}

Nota: El endpoint moderno elimina los prefijos p_* y consolida filtros por tipo/configuración. Para tipo = "CONTROL_INTERNO", el valor1 corresponde al controlInterno.


2) Mapeo a Tablas de Base de Datos

Tablas principales:

  • ALP_RECOLECCION_VIAJES (maestro del viaje)
  • ALP_DET_RECOLECCION_VIAJES (detalle por socio/visita) — para volante
  • ALP_DET_RECO_TANQUES_VIAJES (tanques/mediciones) — para agregados de litrosRemisionados si aplica
Campo (response)Tabla.Columna / Lógica
rowIdALP_RECOLECCION_VIAJES.ROW_ID
idViajeALP_RECOLECCION_VIAJES.ID_VIAJE
controlInternoALP_RECOLECCION_VIAJES.CONTROL_INTERNO
fechaRecoleccionALP_RECOLECCION_VIAJES.FECHA_RECOLECCION
origen / destino / zonaALP_RECOLECCION_VIAJES.ORIGEN / DESTINO / ZONA
tipoALP_RECOLECCION_VIAJES.TIPO
rutaALP_RECOLECCION_VIAJES.RUTA
operadorEmployeeNumberALP_RECOLECCION_VIAJES.OPERADOR_EMPLOYEE_NUMBER
operadorFullNameALP_RECOLECCION_VIAJES.OPERADOR_FULL_NAME
tractor / pipa / dollyALP_RECOLECCION_VIAJES.TRACTOR / PIPA / DOLLY
proveedorTransporte / proveedorIdALP_RECOLECCION_VIAJES.PROVEEDOR_TRANSPORTE / PROVEEDOR_ID
volantePreferente: ALP_DET_RECOLECCION_VIAJES.VOLANTE (join por ID_VIAJE o CONTROL_INTERNO)
selloDomo / sedeSelloDomo / justificacionSelloDomoALP_RECOLECCION_VIAJES.SELLO_DOMO / SEDE_SELLO_DOMO / JUS_SELLO_DOMO
selloValvula / sedeSelloValvula / justificacionSelloValvulaALP_RECOLECCION_VIAJES.SELLO_VALVULA / SEDE_SELLO_VALVULA / JUS_SELLO_VALVULA
litrosRemisionadosPreferente: ALP_RECOLECCION_VIAJES.LITROS_REMISIONADOS; Fallback: SUM(ALP_DET_RECO_TANQUES_VIAJES.LITROS_REMISIONADOS) por ID_VIAJE
fechaEventoALP_RECOLECCION_VIAJES.FECHA_EVENTO
idTransferenciaALP_RECOLECCION_VIAJES.ID_TRANSFERENCIA
ticketVigilanciaALP_RECOLECCION_VIAJES.TICKET_VIGILANCIA
numOcTransferenciaALP_RECOLECCION_VIAJES.NUM_OC_TRANSFERENCIA
producto / descripcionProductoALP_RECOLECCION_VIAJES.PRODUCTO / DESCRIPCION_PRODUCTO

3) SQL de referencia (CONTROL_INTERNO + detalle)

Filtra por tipo = CONTROL_INTERNO y valor1 = :controlInterno. Trae volante desde el detalle y calcula litrosRemisionados si el maestro no lo tiene.

WITH det AS (
SELECT
d.ID_VIAJE,
/* Si hay varios volantes, selecciona el más reciente por fecha o el máximo */
MAX(d.VOLANTE) AS VOLANTE
FROM ALP_DET_RECOLECCION_VIAJES d
GROUP BY d.ID_VIAJE
),
tanques AS (
SELECT
t.ID_VIAJE,
SUM(t.LITROS_REMISIONADOS) AS LTS_REM
FROM ALP_DET_RECO_TANQUES_VIAJES t
GROUP BY t.ID_VIAJE
)
SELECT
v.ROW_ID AS rowId,
v.ID_VIAJE AS idViaje,
v.CONTROL_INTERNO AS controlInterno,
v.FECHA_RECOLECCION AS fechaRecoleccion,
v.ORIGEN, v.DESTINO, v.ZONA, v.TIPO, v.RUTA,
v.OPERADOR_EMPLOYEE_NUMBER AS operadorEmployeeNumber,
v.OPERADOR_FULL_NAME AS operadorFullName,
v.TRACTOR, v.PIPA, v.DOLLY,
v.PROVEEDOR_TRANSPORTE AS proveedorTransporte,
v.PROVEEDOR_ID AS proveedorId,
COALESCE(det.VOLANTE, v.VOLANTE) AS volante,
v.SELLO_DOMO AS selloDomo,
v.JUS_SELLO_DOMO AS justificacionSelloDomo,
v.SEDE_SELLO_DOMO AS sedeSelloDomo,
v.SELLO_VALVULA AS selloValvula,
v.JUS_SELLO_VALVULA AS justificacionSelloValvula,
v.SEDE_SELLO_VALVULA AS sedeSelloValvula,
COALESCE(v.LITROS_REMISIONADOS, tanques.LTS_REM) AS litrosRemisionados,
v.FECHA_EVENTO AS fechaEvento,
v.ID_TRANSFERENCIA AS idTransferencia,
v.TICKET_VIGILANCIA AS ticketVigilancia,
v.NUM_OC_TRANSFERENCIA AS numOcTransferencia,
v.PRODUCTO AS producto,
v.DESCRIPCION_PRODUCTO AS descripcionProducto
FROM ALP_RECOLECCION_VIAJES v
LEFT JOIN det ON det.ID_VIAJE = v.ID_VIAJE
LEFT JOIN tanques ON tanques.ID_VIAJE = v.ID_VIAJE
WHERE
:tipo = 'CONTROL_INTERNO'
AND v.CONTROL_INTERNO = :valor1
AND (:destino IS NULL OR v.DESTINO = :destino)
AND (:configuracion IS NULL OR :configuracion = '' OR 1=1)
FETCH FIRST 200 ROWS ONLY;

Notas

  • Ajusta el FETCH o LIMIT según tu motor.
  • Si el modelo no tiene LITROS_REMISIONADOS en maestro, deja solo el SUM de tanques.
  • Si la lógica de volante es distinta (por secuencia/fecha), reemplaza el MAX con la regla apropiada.

4) Diagrama de Secuencia (consulta por tipo)