Skip to main content

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: rowId va 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 BDComentario
rowId (path)ROW_IDIdentificador del detalle de tanque por viaje
muestraMUESTRA (o MUESTRA_RECO)Campo de muestreo, verificar nombre exacto en físico
saborOlorSABOR_OLORAtributo sensorial
estabilidadESTABILIDADEstabilidad de la muestra
densidadDENSIDADDensidad medida
temperaturaTEMPERATURATemperatura medida
udmUDM (si aplica)Unidad de medida
observacionesOBSERVACIONESNotas u observaciones
litrosRemisionadosLITROS_REMISIONADOSCantidad remisionada registrada
latitudLATITUDGeoposición
longitudLONGITUDGeoposición
nombreResponsableNOMBRE_RESPONSABLE (si existe en físico)Responsable en sitio
firmaResponsableFIRMA_RESPONSABLE (BLOB/Base64 si aplica)Firma en base64
p_employee_numberP_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_ID ya 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-Key obligatorio para evitar duplicados en reintentos.
  • Registrar X-Trace-Id, X-Correlation-Id y p_employee_number en bitácora.
  • Validar rango de temperatura y densidad conforme a reglas de calidad (rechazar con 400 si inválido).

7) Diagrama de Secuencia