Consulta de Recolección de Viajes
tip
El servicio que atiende exactamente este flujo es (con p_CONTROL_INTERNO, p_FECHA_RECOLECION, p_ORIGEN, p_TIPO, p_EVENTO, etc.) es el Dispatch Control Service (v1), con el endpoint de búsqueda de despachos (p. ej. /dispatches/_search), cuyo request schema searchDispatchesRequest y la respuesta AlpRecoleccionViajesCollection son las mismas que en legacy.
info
Este servicio es el mismo para realizar la actualización de recolecciones de viaje
🧱 Tablas involucradas
Tabla: ALP_RECOLECCION_VIAJES
Contiene la información principal del viaje de recolección.
| Columna | Tipo de dato | Descripción |
|---|---|---|
| ROW_ID | NUMBER | Identificador interno del registro |
| ID_VIAJE | NUMBER | Identificador del viaje |
| CONTROL_INTERNO | NUMBER | Control interno de programación |
| FECHA_RECOLECCION | DATE | Fecha de la recolección |
| ORIGEN | VARCHAR2(60) | Lugar de origen |
| DESTINO | VARCHAR2(60) | Lugar de destino |
| ZONA | VARCHAR2(60) | Zona operativa |
| TIPO | VARCHAR2(10) | Tipo de viaje (P, C, T, etc.) |
| RUTA | VARCHAR2(60) | Identificador de la ruta |
| OPERADOR_EMPLOYEE_NUMBER | VARCHAR2(30) | Número de empleado del operador |
| OPERADOR_FULL_NAME | VARCHAR2(120) | Nombre completo del operador |
| TRACTOR | VARCHAR2(15) | Número económico del tractor |
| PIPA | VARCHAR2(15) | Número económico de la pipa |
| DOLLY | VARCHAR2(15) | Dolly (opcional) |
| PROVEEDOR_TRANSPORTE | VARCHAR2(120) | Nombre del proveedor de transporte |
| FECHA_OPERADOR_PROGRAMADA | DATE | Fecha programada del operador |
| FECHA_OPERADOR_SALIDA_REAL | DATE | Fecha real de salida |
| PRODUCTO | VARCHAR2(50) | Código de producto |
| NUM_OC_TRANSFERENCIA | VARCHAR2(60) | Número de orden de compra de transferencia |
| EVENTO | VARCHAR2(240) | Estado o evento del viaje |
| FECHA_EVENTO | DATE | Fecha del evento actual |
| LATITUD | NUMBER | Latitud de última actualización GPS |
| LONGITUD | NUMBER | Longitud de última actualización GPS |
| LAST_UPDATE_DATE | DATE | Fecha de última actualización |
| CREATED_BY | NUMBER | Usuario creador |
| CREATION_DATE | DATE | Fecha de creación |
| ESTADO | VARCHAR2(60) | Estado general del viaje |
| ID_TRANSFERENCIA | NUMBER | Relación con la tabla de transferencias (si aplica) |
| PIPA2 / RUTA2 / PRODUCTO2 | VARCHAR2 | Campos secundarios derivados de transferencia |
Tabla: ALP_RECOLECCION_TRANSFERENCIAS
Relaciona dos controles internos cuando hay movimientos de transferencia entre viajes.
| Columna | Tipo de dato | Descripción |
|---|---|---|
| ID_TRANSFERENCIA | NUMBER | Identificador único |
| CONTROL_INTERNO1 | NUMBER | Control interno origen |
| CONTROL_INTERNO2 | NUMBER | Control interno destino |
| PRODUCTO | VARCHAR2(50) | Producto transferido |
| RUTA | VARCHAR2(60) | Ruta asociada a la transferencia |
| EVENTO | VARCHAR2(240) | Evento o estatus |
| FECHA_EVENTO | DATE | Fecha del evento |
⚙️ Lógica SQL de Referencia
SELECT
v.ROW_ID AS rowId,
v.ID_VIAJE AS idViaje,
v.CONTROL_INTERNO AS controlInterno,
v.FECHA_RECOLECCION,
v.ORIGEN, v.DESTINO, v.ZONA, v.TIPO, v.RUTA,
v.OPERADOR_EMPLOYEE_NUMBER, v.OPERADOR_FULL_NAME,
v.TRACTOR, v.PIPA, v.DOLLY,
v.PROVEEDOR_TRANSPORTE, v.PROVEEDOR_ID,
v.FECHA_OPERADOR_PROGRAMADA, v.FECHA_OPERADOR_SALIDA_REAL,
v.PRODUCTO, v.VOLUMEN,
v.EVENTO, v.FECHA_EVENTO, v.LATITUD, v.LONGITUD,
v.LAST_UPDATE_DATE, v.LAST_UPDATED_BY,
v.CREATED_BY, v.CREATION_DATE,
v.NUM_OC_TRANSFERENCIA, v.ESTADO,
t.CONTROL_INTERNO1, t.CONTROL_INTERNO2,
t.RUTA AS ruta2, t.PRODUCTO AS producto2
FROM ALP_RECOLECCION_VIAJES v
LEFT JOIN ALP_RECOLECCION_TRANSFERENCIAS t
ON v.ID_TRANSFERENCIA = t.ID_TRANSFERENCIA
WHERE
(:p_TIPO = 'CONTROL_INTERNO' AND v.CONTROL_INTERNO = :p_CONTROL_INTERNO)
AND v.FECHA_RECOLECCION = TO_DATE(:p_FECHA_RECOLECION, 'DD/MM/YYYY')
AND v.ORIGEN = NVL(:p_ORIGEN, v.ORIGEN)
AND v.EVENTO = NVL(:p_EVENTO, v.EVENTO);
🔁 Diagrama de Secuencia (Mermaid)
🧭 Descripción del Flujo
- El cliente (p. ej., un frontend o servicio móvil) envía la solicitud con los parámetros de control interno, fecha y evento.
- La API Recolección interpreta el tipo (
p_TIPO = 'CONTROL_INTERNO') y genera la consulta SQL. - Se realiza la búsqueda principal en
ALP_RECOLECCION_VIAJES. - Si
ID_TRANSFERENCIA > 0, se ejecuta unLEFT JOINhaciaALP_RECOLECCION_TRANSFERENCIASpara obtener los campos secundarios (controlInterno1/2,ruta2,producto2). - Los resultados se mapean a una estructura de salida estándar
AlpRecoleccionViajesCollection. - La API responde al cliente con el JSON completo, incluyendo los datos GPS, operador y estado.
📘 Fuentes: Diccionario de datos del dominio Recolección de Leche en el documento 5.hld.md.