6.5. Flujo actualiza detalles tankes
Este documento mapea el servicio legacy actualizaDetTanquesRest al nuevo endpoint y detalla el mapeo a la base de datos, más ejemplos de request/response y SQL de referencia.
1) Nuevo servicio equivalente
Servicio: Trip Execution Service (v1)
Base URL: https://api.alpura.mx/trip-execution/v1
Endpoint: POST /trips/{rowId}/tanks
Este endpoint captura resultados de muestreo de tanques y cantidades remisionadas para un detalle de viaje identificado por
rowId.
2) Mapeo Legacy → Nuevo
2.1 Request Legacy (ejemplo)
{
"rowId": 2998915,
"muestra": 1,
"saborOlor": "No",
"estabilidad": "No",
"densidad": "",
"temperatura": 5,
"udm": 49.2,
"observaciones": "ok",
"litrosRemisionados": 13450,
"latitud": "",
"longitud": "",
"nombreResponsable": "",
"firmaResponsable": "",
"p_employee_number": 1515411
}
2.2 Request Nuevo (equivalente)
POST /trips/2998915/tanks
Content-Type: application/json
{
"muestra": 1,
"saborOlor": "No",
"estabilidad": "No",
"densidad": "",
"temperatura": 5,
"udm": 49.2,
"observaciones": "ok",
"litrosRemisionados": 13450,
"latitud": "",
"longitud": "",
"nombreResponsable": "",
"firmaResponsable": "",
"p_employee_number": "1515411"
}
Diferencia clave:
rowIdva en el path (/trips/{rowId}/tanks) y ya no dentro del body.
2.3 Response Nuevo (equivalente)
{ "resultado": "OK" }
3) Mapeo a la Base de Datos
Tabla principal: ALP_DET_RECO_TANQUES_VIAJES
| Campo (request/response) | Columna BD | Comentario |
|---|---|---|
rowId (path) | ROW_ID | Identificador del detalle de tanque por viaje |
muestra | MUESTRA (o MUESTRA_RECO) | Campo de muestreo, verificar nombre exacto en físico |
saborOlor | SABOR_OLOR | Atributo sensorial |
estabilidad | ESTABILIDAD | Estabilidad de la muestra |
densidad | DENSIDAD | Densidad medida |
temperatura | TEMPERATURA | Temperatura medida |
udm | UDM (si aplica) | Unidad de medida |
observaciones | OBSERVACIONES | Notas u observaciones |
litrosRemisionados | LITROS_REMISIONADOS | Cantidad remisionada registrada |
latitud | LATITUD | Geoposición |
longitud | LONGITUD | Geoposición |
nombreResponsable | NOMBRE_RESPONSABLE (si existe en físico) | Responsable en sitio |
firmaResponsable | FIRMA_RESPONSABLE (BLOB/Base64 si aplica) | Firma en base64 |
p_employee_number | P_EMPLOYEE_NUMBER (o bitácora/audit) | Auditoría/empleado que registra |
Relación: ALP_DET_RECOLECCION_VIAJES (1) — (N) ALP_DET_RECO_TANQUES_VIAJES por (ID_VIAJE, ID_SOCIO) y ROW_ID como PK del registro de tanque.
4) SQL de referencia (Oracle/PostgreSQL)
Upsert: Si el
ROW_IDya existe, actualizar; si no, registrar (ajustar a estándar de su motor).
-- Ejemplo UPDATE por ROW_ID
UPDATE ALP_DET_RECO_TANQUES_VIAJES
SET
MUESTRA = :muestra,
SABOR_OLOR = :saborOlor,
ESTABILIDAD = :estabilidad,
DENSIDAD = :densidad,
TEMPERATURA = :temperatura,
UDM = :udm,
OBSERVACIONES = :observaciones,
LITROS_REMISIONADOS = :litrosRemisionados,
LATITUD = NULLIF(:latitud, ''),
LONGITUD = NULLIF(:longitud, ''),
NOMBRE_RESPONSABLE = :nombreResponsable,
FIRMA_RESPONSABLE = :firmaResponsable,
P_EMPLOYEE_NUMBER = :p_employee_number,
LAST_UPDATE_DATE = CURRENT_TIMESTAMP
WHERE ROW_ID = :rowId;
-- (Opcional) INSERT si no existe (dependerá de su contrato de idempotencia)
INSERT INTO ALP_DET_RECO_TANQUES_VIAJES (
ROW_ID, MUESTRA, SABOR_OLOR, ESTABILIDAD, DENSIDAD, TEMPERATURA, UDM,
OBSERVACIONES, LITROS_REMISIONADOS, LATITUD, LONGITUD, NOMBRE_RESPONSABLE,
FIRMA_RESPONSABLE, P_EMPLOYEE_NUMBER, CREATION_DATE
) SELECT
:rowId, :muestra, :saborOlor, :estabilidad, :densidad, :temperatura, :udm,
:observaciones, :litrosRemisionados, NULLIF(:latitud, ''), NULLIF(:longitud, ''),
:nombreResponsable, :firmaResponsable, :p_employee_number, CURRENT_TIMESTAMP
WHERE NOT EXISTS (SELECT 1 FROM ALP_DET_RECO_TANQUES_VIAJES WHERE ROW_ID = :rowId);
6) Consideraciones de idempotencia y auditoría
Idempotency-Keyobligatorio para evitar duplicados en reintentos.- Registrar
X-Trace-Id,X-Correlation-Idyp_employee_numberen bitácora. - Validar rango de temperatura y densidad conforme a reglas de calidad (rechazar con 400 si inválido).