Ir al contenido principal

control/desembarque/pendientes - [pendientes]

🧾 Descripción

Este servicio retorna la lista de órdenes de servicio (OSE) que aún tienen paquetes pendientes por desembarcar en una unidad específica (cap_id).
Combina información de embarques, desembarques, órdenes de servicio, detalles de OS, atributos, terminales y datos de personas.

Permite aplicar filtro por número de guía y soporta paginación.

Es un servicio crítico para la vista de desembarques pendientes.


🚀 Endpoint


POST /pendientes

📥 Request Body

{ "cap_id": "number", "pagina": "number", "guia": "string (opcional)" }

Parámetros

Campo Tipo Obligatorio Descripción
cap_id number ✔ Sí ID de la unidad de carga programada.
pagina number ✔ Sí Número de página a listar.
guia string ✘ No Filtra por número de guía del cliente.

🔐 Seguridad

Requiere autenticación estándar usada en los endpoints del backend (middleware Laravel).
No se valida explícitamente dentro del método.


🧠 Flujo del Servicio (resumen real)

1. Validación inicial

  • cap_id es obligatorio.

  • Define paginación con limit = 15.


2. Obtener embarques asociados al cap_id

Consulta tabla emp_embarque_historial:

  • Se filtra por:

    • estado activo (status = 1)

    • paquete habilitado (emb_estado_paquete = 1)

    • carg_id igual al cap_id

Si no hay embarques:
“Aún no se ha embarcado nada en esta unidad.”

Se arma:

  • Lista de OSE (ose_ids)

  • Información del embarque por OSE:

    • estado de guía

    • cantidad de paquetes embarcados

    • cantidad total de paquetes


3. Obtener desembarques del mismo cap_id

Consulta tabla emp_desembarque_historial similares filtros:

Se arma:

  • Lista de desembarques por OSE:

    • estado de guía

    • paquetes desembarcados

    • total de paquetes


4. Obtener órdenes de servicio relacionadas

Consulta:

SELECT (varios campos) FROM emp_ordenservicio WHERE ose_id IN (ose_ids) AND (opcional) ose_nroguiacliente = guia OFFSET (pagina - 1) * 15 LIMIT 15

Si no encuentra OS → “No ha embarcado nada aun”


5. Obtener terminales (origen y destino)

Convierte IDs a:

  • nombre

  • alias (para construir la ruta)


6. Obtener detalle de OS

Consulta emp_os_detalle:

Agrupa por:

  • OSE

  • Tipo

Construye por OSE:

  • contenido: "cantidad tipo"

  • cantidad total sumada


7. Obtener atributos de tipo de pago

Convierte tipo_pago → abreviatura usando tabla emp_atributos.


8. Integrar datos (núcleo del servicio)

Por cada OS:

  • Si existe desembarque:

    • Calcula paquetes pendientes = total – desembarcados

    • Marca guía como "GUIA EMBARCADA" o "SIN GUIA"

  • Si no existe desembarque:

    • Paquetes pendientes = total del detalle

  • Si cantidad pendiente es 0 → se omite del resultado final.

  • Se construye:

    • contenido

    • cantidad total

    • cantidad pendiente

    • ruta origen → destino

    • nombre de terminales

Si después de filtrar no hay OS pendientes:
“No hay desembarques pendientes”


9. Obtener nombres de remitentes

Consulta emp_persona usando los DNIs encontrados:

Reemplaza el DNI por nombre completo.


✔ 10. Respuesta Final

Devuelve toda la data procesada.


📤 Response 200 – Ejemplo

{ "success": true, "message": "Lista de ordenes", "data": [ { "ose_id": 202525, "fecha": "2025-02-15 10:30:00", "monto": 45.50, "guia": "GUIA-882233", "remitente": "Carlos Gómez", "destinatario": "Empresa ABC", "tipo_pago": "CR", "origen": "LIMA", "destino": "AREQUIPA", "ruta": "LIM - AQP", "cap_id": 33112, "contenido": "10 CAJA, 2 SOBRE", "cant_paq": 5, "cant_total": 12, "desembarque_guia": "SIN GUIA", "usuario": "jperez" } ] }

Posibles Errores

1. No envía cap_id

{ "success": false, "message": "Es obligatorio enviar un cap_id" }

2. No hay embarques

{ "success": false, "message": "Aun nó se ha embarcado nada en esta unidad." }

3. No hay órdenes

{ "success": false, "message": "No ha embarcado nada aun" }

4. No hay desembarques pendientes

{ "success": false, "message": "No hay desembarques pendientes" }

📚 Schemas (estructuras usadas)

emp_embarque_historial

{ "emb_ose_id": "number", "emb_estado_guia": "string", "emb_cant_paquetes_embarcados": "string", "emb_cant_paquetes_total": "number" }

emp_desembarque_historial

{ "des_ose_id": "number", "des_estado_guia": "string", "des_cant_paquetes_desembarcados": "string", "des_cant_paquetes_total": "number" }

emp_ordenservicio

Campos usados:

{ "ose_id": "number", "ose_fhpreferenciapartida": "datetime", "ose_nroguiacliente": "string", "ose_remiteempresa": "string", "ose_destinaempresa": "string", "ose_servpagotipo": "string", "ose_termorigenatencion": "number", "ose_termdestinoentrega": "number", "ose_estadoPago": "number" }

emp_os_detalle

{ "osd_osid": "number", "osd_tipopreciomanual": "string", "cantidad": "number" }

emp_atributos

{ "valor": "string", "abreviatura": "string" }

emp_persona

{ "documento": "string", "nombre": "string" }

🗃 Lógica en pseudo-código

if !cap_id -> error embarques = SELECT embarques WHERE cap_id = input if empty -> error desembarques = SELECT desembarques WHERE cap_id = input ose_ids = embarques.ose_id ordenes = SELECT OS WHERE ose_id in ose_ids FILTER guia IF EXISTS PAGINACION if empty -> error detalles = SELECT SUM(cantidad), tipo FROM emp_os_detalle WHERE ose_id in ose_ids GROUP BY ose_id,tipo atributos = SELECT mapa tipo_pago -> abreviatura terminales = SELECT terminal_id -> nombre, alias build lista: para cada OS: calcular paquetes pendientes si 0 → excluir traducir tipo_pago generar ruta origen/destino agregar contenido y totales if lista vacía -> “No hay desembarques pendientes” buscar nombres remitente en emp_persona return lista final