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