Embarques

Control/carguero/listar - (1,2) [indexCooler]

🧾 Descripción

Este servicio valida un código de cooler (BINS, COOLER o PALLET) y retorna la lista de guías (OSE) que tienen paquetes dentro del cooler y aún no están embarcadas.

Realiza consultas combinadas en CentOS y Empresarial, arma las guías agrupando cantidades y devuelve un resumen estructurado.


🚀 Endpoint

POST /index-cooler

📥 Request Body

{ "cooler": "string", "usuario": "string", "terminal": "string", "cap_id": "string" }

Parámetros requeridos

Campo Tipo Obligatorio Descripción
cooler string Código escaneado del cooler (debe contener BINS, COOLER o PALLET).
usuario string Usuario que ejecuta el proceso.
terminal string No Terminal desde donde opera.
cap_id string No ID de capacidad.

🔐 Seguridad

Generalmente protegido por token o cabecera de sesión (dependiendo del middleware definido). No se valida en la función directamente.


🧠 Flujo del Servicio (resumen real)

  1. Validaciones iniciales

    • Verifica que cooler y usuario existan.

    • Valida que cooler contenga: BINS o COOLER o PALLET.

  2. Verifica existencia del cooler
    Busca en emp_cooler:

    SELECT id, codigo_barra, cap_id FROM emp_cooler WHERE codigo_barra = <cooler> AND estado = 1 ORDER BY id DESC

    Si no existe → “Aún no hay paquetes en el cooler”

  3. Obtiene paquetes del cooler aún no embarcados

    SELECT ose_id, codigo_barra AS cooler, numero, usuario, fecha FROM emp_cooler_guias WHERE codigo_barra = <cooler> AND estado_embarque = 0 AND estado = 1 ORDER BY fecha DESC

  4. Agrupa paquetes por OSE

    • Extrae los primeros dígitos del campo numero.

    • Agrupa cantidades por OSE.

  5. Obtiene datos adicionales de la OSE
    Consulta empresarial:

    SELECT osd.osd_osid AS ose_id, os.ose_nroguiacliente AS guia, SUM(osd.osd_unidad) AS cantidad FROM emp_os_detalle osd LEFT JOIN emp_ordenservicio os ON os.ose_id = osd.osd_osid WHERE osd.osd_eliminado = 0 AND osd.osd_osid IN <ose_ids> GROUP BY osd.osd_osid

  6. Construye respuesta final
    Por cada OSE:

    • código del cooler

    • usuario y fecha del último registro

    • cantidades únicas encontradas

    • cantidad total desde la OS

    • número de guía del cliente


📤 Response 200 – Ejemplo

{ "success": true, "message": "lista guias embarcadas.", "data": [ { "ose_id": 12345, "cooler": "COOLER-001", "usuario": "jlopez", "fecha": "2025-01-20 10:15:00", "cantidades": "10,12", "cantidad": 22, "guia": "GUIA-998877" } ] }


Posibles Errores

1. Cooler no enviado

{ "success": false, "message": "No se encontró el cooler vuelva a intentarlo" }

2. Usuario no enviado

{ "success": false, "message": "No se encontró el usuario vuelva a intentarlo" }

3. Código de cooler inválido

{ "success": false, "message": "Cooler inválido. Debe contener la palabra BINS o COOLER" }

(Tu código acepta PALLET también, pero el mensaje no lo menciona.)

4. Cooler no tiene registros activos

{ "success": false, "message": "Aun no hay paquetes en el cooler" }

5. No hay paquetes no embarcados

{ "success": false, "message": "Aun no hay paquetes en el cooler", "data": [] }


📚 Schemas (estructuras usadas)

emp_cooler

{ "id": "number", "codigo_barra": "string", "cap_id": "number" }

emp_cooler_guias

{ "ose_id": "number", "cooler": "string", "numero": "string", "usuario": "string", "fecha": "datetime" }

emp_os_detalle + emp_ordenservicio

{ "ose_id": "number", "guia": "string", "cantidad": "number" }


🗃 Lógica en pseudo-código

if !cooler -> error if !usuario -> error if cooler not contains ["BINS", "COOLER", "PALLET"] -> error coolerData = SELECT from emp_cooler where codigo=cooler and estado=1 if empty -> error paquetes = SELECT from emp_cooler_guias where cooler=cooler and estado_embarque=0 if empty -> error agrupar paquetes por ose_id: extract cantidades from numero detalles = SELECT cantidades y guía por cada ose_id combinar datos: return lista por cada ose_id con cantidades únicas + total OS

control/carguero/obtener - [show]

PATH: /var/www/html/qaservicesapp/app/Http/Controllers/ShalomControl/CargueroController.php

🧾 Descripción

Obtiene la información detallada de un carguero programado (cap_id) incluyendo:

Este servicio consolida datos provenientes de varias tablas del sistema Empresarial.


🚀 Endpoint


POST /carguero/show

📥 Request Body

{ "cap_id": "number", "terminal": "string", "usuario": "string" }

Parámetros requeridos

Campo Tipo Obligatorio Descripción
cap_id number ID del carguero programado.
terminal string No Terminal origen (no se usa en la lógica actual).
usuario string No Usuario que consulta (no se usa en la lógica actual).

🔐 Seguridad

El servicio depende del middleware configurado (token, sesión, etc).
No valida autenticación dentro del método.


🧠 Flujo del Servicio (resumen real)

  1. Validación inicial

    • Si no se envía cap_id → retorna error.

  2. Obtiene datos del carguero


    SELECT fecha, choferes, ruta, placas, origen, destino, cerrado FROM emp_cargprogramado WHERE cap_id = <cap_id>
  3. Obtiene lista de terminales


    SELECT ter_id, ter_nombre FROM emp_terminal
    • Se genera un mapa ter_id → nombre.

  4. Convierte origen/destino (JSON) a texto descriptivo

    • Decodifica arrays JSON.

    • Reemplaza cada ID por: ID + nombre_terminal

    • Calcula campos:

      • origenes

      • destinos

      • escalas (unión única de ambos)

  5. Obtiene guías relacionadas al carguero


    SELECT ose_montofinal, ose_id FROM emp_ordenservicio WHERE ose_ultimo_carprog_embarque = <cap_id> ORDER BY ose_ultima_fecha_embarque DESC
  6. Calcula:

    • cantidad: número de guías

    • suma: suma total de ose_montofinal

  7. Elimina campos originales origen y destino del objeto final.

  8. Retorna JSON con todos los datos del carguero.


📤 Response 200 – Ejemplo

{ "success": true, "message": "Lista de cargueros", "data": { "fecha": "2025-01-15 10:00:00", "cap_id": 1287, "chofer1": "CHO123", "chofer2": "CHO456", "ruta": "RUTA-09", "placa1": "ABC-123", "placa2": "DEF-456", "cerrado": 0, "origenes": [ "1 Terminal Lima", "3 Terminal Arequipa" ], "destinos": [ "5 Terminal Piura" ], "escalas": [ "1 Terminal Lima", "3 Terminal Arequipa", "5 Terminal Piura" ], "cantidad": 42, "suma": 15789.50 } }

Posibles Errores

1. Falta cap_id

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

2. cap_id no existe en la BD

(La función no valida explícitamente este caso, pero retornará data = null)

Ejemplo de respuesta:

{ "success": true, "message": "Lista de cargueros", "data": null }

(Opcionalmente podrías corregir esto en backend.)


📚 Schemas (estructuras usadas)

emp_cargprogramado

{ "cap_id": "number", "fecha": "datetime", "chofer1": "string", "chofer2": "string", "ruta": "string", "placa1": "string", "placa2": "string", "cerrado": "number", "origen": "json[]", "destino": "json[]" }

emp_terminal

{ "ter_id": "number", "ter_nombre": "string" }

emp_ordenservicio

{ "ose_id": "number", "ose_montofinal": "float", "ose_ultimo_carprog_embarque": "number" }

🗃 Lógica en pseudo-código

if !cap_id -> error carguero = SELECT * FROM emp_cargprogramado WHERE cap_id = cap_id terminales = SELECT ter_id, ter_nombre FROM emp_terminal mapaTerminal = {ter_id: nombre} carguero.origenes = parseJSON(carguero.origen) carguero.destinos = parseJSON(carguero.destino) escalas = union(origenes, destinos) reemplazar cada ID por "ID + nombre_terminal" guias = SELECT ose_id, ose_montofinal FROM emp_ordenservicio WHERE ose_ultimo_carprog_embarque = cap_id carguero.cantidad = count(guias) carguero.suma = sum(ose_montofinal) return carguero

control/embarque/listar - [index]

🧾 Descripción

Este servicio retorna la lista de órdenes de servicio embarcadas asociadas a un cargoprogramación (cap_id).
Además, incluye:

Adicionalmente, permite filtrar por número de guía del cliente.


🚀 Endpoint


POST /ordenes-embarque

📥 Request Body

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

Parámetros requeridos

Campo Tipo Obligatorio Descripción
cap_id number ID de carga programación (embarque).
pagina number Página para paginación.
guia string No Número de guía del cliente.

🔐 Seguridad

Autenticación estándar del sistema (token/cabecera middleware). No validado directamente en la función.


🧠 Flujo del Servicio (resumen real)

  1. Valida que cap_id exista.
    Si no → “Es obligatorio enviar un id”

  2. Construye filtros

    • Siempre por: ose_ultimo_carprog_embarque = cap_id

    • Opcional: ose_nroguiacliente = guia

  3. Obtiene las órdenes de servicio (emp_ordenservicio), paginadas (15 registros por página).
    Incluye campos como:

    • fecha de preferencia de partida

    • monto final

    • remitente/destinatario

    • tipo de pago

    • origen / destino

    • usuario creador

    • estado de pago

    • etc.

  4. Carga los terminales (emp_terminal) para convertir IDs → nombres y alias.

  5. Si no existen órdenes
    “No ha embarcado nada aun”

  6. Obtiene detalles de contenido (emp_os_detalle) por OSE:

    • Agrupa por tipo de precio

    • Suma cantidades

    • Genera estructura como: "5 KG, 2 SB"

  7. Obtiene historial de embarque (emp_embarque_historial)

    • Determina si la guía está embarcada o no

    • Paquetes embarcados

    • Total de paquetes

  8. Obtiene abreviaturas de tipos de pago (emp_atributos)

    • Convierte código → abreviatura

  9. Integra la información para cada OSE

    • contenido

    • cantidad total

    • estado de guía (“GUIA EMBARCADA” / “SIN GUIA”)

    • paquetes embarcados

    • origen y destino por nombre

    • ruta generada (alias-origen → alias-destino)

  10. Obtiene nombres de remitentes (emp_persona)
    Convierte DNI → nombre completo.

  11. Reemplaza remitente DNI → nombre.

  12. Retorna lista final con toda la información enriquecida.


📤 Response 200 – Ejemplo

{ "success": true, "message": "Lista de ordenes", "data": [ { "fecha": "2025-02-24 08:15:00", "monto": 150.50, "guia": "GC-2300122", "remitente": "JUAN PÉREZ GARCÍA", "destinatario": "EMPRESA XYZ", "tipo_pago": "CR", "origen": "LIMA", "destino": "AREQUIPA", "usuario": "amendoza", "ose_id": 554433, "estado_pago": "PAGADO", "tipo_entrega": "DELIVERY", "contenido": "3 KG, 2 SB", "ruta": "LIM - AQP", "embarque_guia": "GUIA EMBARCADA", "cant_paq": 5, "cant_total": 5, "embarcados": ["PKG001", "PKG002", "PKG003", "PKG004", "PKG005"] } ] }

Posibles Errores

1. Falta cap_id

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

2. No hay órdenes embarcadas aún

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

3. No hay órdenes coincidentes con la guía filtrada

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

📚 Schemas (estructuras usadas)

emp_ordenservicio

{ "ose_id": "number", "ose_nroguiacliente": "string", "ose_remiteempresa": "string (DNI)", "ose_destinaempresa": "string", "ose_servpagotipo": "string", "ose_termorigenatencion": "number", "ose_termdestinoentrega": "number", "ose_montofinal": "number" }

emp_os_detalle

{ "ose_id": "number", "tipo": "string", "cantidad": "number" }

emp_embarque_historial

{ "emb_ose_id": "number", "emb_estado_guia": "boolean", "emb_cant_paquetes_embarcados": "string (coma separada)", "emb_cant_paquetes_total": "number" }

emp_terminal

{ "ter_id": "number", "nombre": "string", "alias": "string" }

emp_persona

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

🗃 Lógica en pseudo-código

if !cap_id -> error where = { ose_ultimo_carprog_embarque = cap_id } if guia -> add filter guia ordenes = get OS with pagination if empty -> error ose_ids = extract ids detalles = query emp_os_detalle grouped by tipo and ose_id armar contenido y cantidad total embarques = query emp_embarque_historial for cap_id armar estado de guía y paquetes embarcados atributos = abreviaturas de tipo de pago terminales = mapear origen/destino for each orden: combinar detalles + embarques + terminales + atributos construir ruta guardar remitente DNI personas = query emp_persona for remitentes reemplazar DNI → nombre return lista enriquecida

control/carguero/qr - [generateQrMassive]

PATH: /var/www/html/qaservicesapp/app/Http/Controllers/ShalomControl/CargueroController.php

🧾 Descripción

Genera un registro QR asociado a un carguero programado (cap_id).
Obtiene automáticamente la placa del vehículo asignado y registra:

El registro se almacena en la tabla emp_cargprogramado_qr en la base de datos CentOS.

Nota: El código contiene una validación de contraseña deshabilitada (comentada).


🚀 Endpoint


POST /generate-qr-massive

📥 Request Body

{ "password": "string", "usuario": "string", "cap_id": "number", "terminal": "string", "placa": "string (ignorado, se reemplaza con la placa obtenida)" }

Reglas


🔐 Seguridad

La función no fuerza autenticación ni validación de contraseña porque está comentada, pero originalmente pretendía validar:


Hash::check(strtoupper(password), usr_clave)

La seguridad dependerá del middleware externo del proyecto.


🧠 Flujo del Servicio (resumen real)

  1. Recibe parámetros del request:
    password, usuario, cap_id, terminal, placa (pero placa será ignorada).

  2. Obtiene la placa real del carguero desde Empresarial:

    SELECT cap_cargueroid AS placa FROM emp_cargprogramado WHERE cap_id = <cap_id>
  3. Preparar datos para el QR:

    { cap_id, car_placa (placa obtenida), user (usuario), ter_id (terminal), fecha_crea (timestamp actual) }
  4. Inserta registro en CentOS:

    INSERT INTO emp_cargprogramado_qr RETURNING id
  5. Si la inserción falla → error
    Si inserta correctamente → éxito


📤 Response 200 – Ejemplo

{ "success": true, "message": "Qr Generado con éxito" }

Posibles Errores

1. Error al insertar el registro

{ "success": false, "message": "Error en el servicio vuelva a intentar" }

2. cap_id no encontrado (si la consulta no retorna placa)

(El código no valida este error explícitamente, pero sería un caso real posible)

{ "success": false, "message": "No se encontró carguero asociado al cap_id" }

3. Error inesperado (excepción del servidor)

(No manejado explícitamente, pero debe considerarse)

{ "success": false, "message": "Error interno del servidor" }

📚 Schemas (estructuras usadas)

emp_cargprogramado

{ "cap_id": "number", "cap_cargueroid": "string (placa)" }

emp_cargprogramado_qr

Campos insertados:

{ "cap_id": "number", "car_placa": "string", "user": "string", "ter_id": "string", "fecha_crea": "datetime" }

🗃 Lógica en pseudo-código

receive password, usuario, cap_id, terminal, placa // Validar contraseña (actualmente deshabilitado) placaReal = SELECT placa FROM emp_cargprogramado WHERE cap_id = cap_id data = { cap_id: cap_id, car_placa: placaReal, user: usuario, ter_id: terminal, fecha_crea: now() } id = INSERT INTO emp_cargprogramado_qr(data) if !id: return error return éxito

control/embarque/cerrar - [cerrar]

PATH: /var/www/html/qaservicesapp/app/Http/Controllers/ShalomControl/EmbarqueController.php

🧾 Descripción

Este servicio realiza el cierre de embarque para un carguero (cap_id).
Procesa todas las órdenes de servicio asociadas al carguero, registra el embarque individual de cada una, actualiza sus estados y marca el carguero como embarcado.

Además:


🚀 Endpoint


POST /cerrar

📥 Request Body

{ "cap_id": "number", "terminal": "string", "usuario": "string" }

Parámetros requeridos

Campo Tipo Obligatorio Descripción
cap_id number ID del carguero programado a cerrar.
terminal string Terminal donde se realiza el cierre.
usuario string Usuario que ejecuta el proceso.

🔐 Seguridad

Controlada por autenticación global (middleware).
El servicio no valida tokens directamente.


🧠 Flujo del Servicio (resumen real)

1. Obtiene órdenes asociadas al cap_id

Consulta emp_ordenservicio:

Si:


2. Marca historial de embarque como cerrado

Actualiza emp_embarque_historial:


3. Iteración por cada orden

Para cada orden:

a) Obtiene placa del carguero

Desde emp_cargprogramado.

b) Si la orden está en estado de reparto T, registra transbordo

Actualiza emp_transbordo:

c) Registra el embarque en emp_embarque

Guarda:

d) Actualiza estado de la orden en emp_ordenservicio:

ose_estadoembarque = 1 ose_terminalactual = terminal ose_estadodesembarque = 0 ose_reparto_estado = 0 ose_movilidad_reparto = null ose_estado_paquete_embarque = 0 ose_estado_guia_embarque = 0 estado_os = "Embarque"

4. Actualiza detalle del carguero (emp_cargprogramado_detalle)

Si existe registro:

Si no existe:


5. Calcula monto total embarcado

Suma ose_montofinal de todas las OS:


6. Registra un reporte de embarque

Inserta en emp_cargprogramado_reporte:


7. Retorna respuesta

Devuelve:

{ "success": true, "message": "Se grabó el Embarque correctamente." }

📤 Response 200 – Ejemplo

{ "success": true, "message": "Se grabó el Embarque correctamente." }

Posibles Errores

1. No hay órdenes para embarcar o ya están cerradas

{ "success": false, "message": "Carguero cerrado." }

Es el único error explícito que retorna el servicio.


📚 Schemas (estructuras usadas)

(Basado exclusivamente en los campos usados en el código)

emp_ordenservicio

{ "ose_id": "number", "ose_ultima_fecha_embarque": "datetime", "ose_reparto_estado": "string", "ose_emb_obs_tipo_temp": "string", "ose_emb_obs_mensaje_temp": "string", "ose_emb_obs_usuario_temp": "string", "ose_emb_obs_fecha_temp": "datetime", "ose_emb_obs_urlimg_temp": "string", "ose_estadoembarque": "string" }

emp_embarque_historial

{ "emb_carg_id": "number", "status": "number", "emb_estado_cierre": "number" }

emp_transbordo

{ "tra_osid": "number", "tra_estado": "string", "tra_salidaid2": "number", "tra_user2": "string", "tra_fecha2": "datetime", "tra_carguero2": "string" }

emp_embarque

Campos insertados:

{ "emb_ordenservicioid": "number", "emb_cargprograid": "number", "emb_horaembarque": "datetime", "emb_terminalembarque": "string", "eliminado": "number", "fhcrea": "datetime", "usercreaid": "string", "emb_obs_tipo": "string", "emb_obs_mensaje": "string", "emb_obs_usuario": "string", "emb_obs_fecha": "datetime", "emb_obs_urlimg": "string" }

emp_cargprogramado_detalle

{ "cap_id": "number", "id_terminal": "string", "cap_estado_embarque": "number" }

emp_cargprogramado_reporte

{ "cap_id": "number", "id_terminal": "string", "usuario_reg": "string", "fechareg": "datetime", "tipo_estado": "string", "flete": "number" }


🗃 Lógica en pseudo-código

ordenes = SELECT OS where cap_id si ordenes vacío o todas cerradas: return "Carguero cerrado" actualizar emp_embarque_historial: emb_estado_cierre = 1 para cada orden: cargar placa del carguero si reparto_estado == T: actualizar transbordo insertar en emp_embarque (datos de la OS) actualizar emp_ordenservicio: estadoembarque = 1 terminalactual = terminal otros estados... actualizar o insertar emp_cargprogramado_detalle monto = suma montofinal de ordenes embarcadas del terminal y cap_id insertar reporte en emp_cargprogramado_reporte return success

control/embarque/validar - [validar]

PATH:  /var/www/html/qaservicesapp/app/Http/Controllers/ShalomControl/EmbarqueController.php

🧾 Descripción

Este servicio valida si una Orden de Servicio (OSE) puede ser procesada para embarque, verificando:

El servicio evita el embarque de guías que estén incompletas, anuladas o sin documentación obligatoria.


🚀 Endpoint


POST /validar-guia

📥 Request Body

{ "ose_id": "number", "cantidad": "number", "numero": "string", "usuario": "string", "terminal": "string", "tipo_cierre": "APP | PDA", "cap_id": "string" }

Parámetros requeridos

Campo Tipo Obligatorio Descripción
ose_id number ID de la Orden de Servicio.
cantidad number Cantidad escaneada.
numero string No* Número del paquete escaneado. (Si no existe, no se valida embarque)
usuario string Usuario que realiza la validación.
terminal string Terminal donde se realiza el proceso.
tipo_cierre string Tipo de cierre: APP o PDA.
cap_id string Capacidad asociada.

🔐 Seguridad

Depende del middleware del proyecto.
La función no valida seguridad interna, se asume que ya llega un request autenticado.


🧠 Flujo del Servicio (resumen real)

  1. Validaciones básicas del Request

    • Verifica existencia de:

      • ose_id

      • cantidad

      • usuario

      • terminal

      • cap_id

      • tipo_cierre ∈ {APP, PDA}

    • Si no existe numero, retorna:

      "Embarque de guías no se valida."

  2. Consulta Orden de Servicio


    SELECT ose_id, ose_estadoPago, ose_nroguiacliente, ose_code_qr, ose_termdestinoentrega, ose_remiteempresa, ose_destinaempresa, ose_termorigenatencion, ose_fhpreferenciapartida, ose_remitecontactomail, ose_remitecontactofono FROM emp_ordenservicio WHERE ose_id = <ose_id>

    Validaciones:

    • Si no existe: ❌ "Guía no encontrada."

    • Si está anulada (ose_estadoPago = 'AN'): ❌ "La guía se encuentra anulada."

    • Si no corresponde al terminal destino: ❌ "La Orden de Servicio ya se encuentra en su destino."

  3. Validaciones por tipo de cliente

    • Si tiene información de remitente con reglas especiales:

      • Si remitecontactomail == '0' → ❌ “Primero debe confirmar la guía en empresarial.”

    • Si cliente es tipo "CLIENTES":

      • Busca clave en emp_code_send

      • Busca adicionales en emp_adicionales

      • Si no tiene clave ni adicionales → ❌ “La Orden de Servicio no tiene clave Creada.”

    • Si no es cliente tipo especial, verifica QR:

      • Si no tiene QR → ❌ “La Orden de Servicio no tiene código QR.”

  4. Validación adicional mediante validar_grt()
    Llama:


    validar_grt(ose_id, cap_id, remiteempresa, destinaempresa)
    • Si falla, retorna error directo.

  5. Si todo es correcto
    Retorna:

    { "success": true, "message": "Orden de servicio validada." }

📤 Response 200 – Ejemplo

{ "success": true, "message": "Orden de servicio validada." }

Posibles Errores

1. Falta ose_id

{ "success": false, "message": "Falta ose_id.", "data": "error" }

2. No se valida porque no se envió número

{ "success": true, "message": "Embarque de guias no se valida." }

3. Falta algún parámetro obligatorio

Ejemplo — falta terminal:

{ "success": false, "message": "Falta terminal.", "data": "error" }

4. Guía no encontrada

{ "success": false, "message": "Guia no encontrada.", "data": "error" }

5. Guía anulada

{ "success": false, "message": "La guía se encuentra anulada.", "data": "error" }

6. Terminal incorrecto

{ "success": false, "message": "La Orden de Servicio ya se encuentra en su destino.", "data": "error" }

7. Guía sin confirmación

{ "success": false, "message": "Primero debe confirmar la guía en empresarial.", "data": "error" }

8. No tiene clave creada

{ "success": false, "message": "La Orden de Servicio no tiene clave Creada.", "data": "error" }

9. No tiene QR

{ "success": false, "message": "La Orden de Servicio no tiene código QR.", "data": "error" }

10. Error por validar GRT

Ejemplo:

{ "success": false, "message": "Error en validación GRT.", "data": "password" }

📚 Schemas (estructuras usadas)

emp_ordenservicio

Campos utilizados:

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

emp_code_send

{ "idose": "number", "password": "string" }

emp_adicionales

{ "adc_ordenservicioid": "number", "adc_tipo": "string" }

🗃 Lógica en pseudo-código

if !ose_id -> error if !numero -> return "Embarque de guías no se valida." if !cantidad or !usuario or !terminal or !cap_id -> error if tipo_cierre not in ["APP", "PDA"] -> error orden = SELECT FROM emp_ordenservicio WHERE ose_id if !orden -> error if estadoPago == 'AN' -> error if orden.destino != terminal -> error validaciones cliente: if remitenteMail == '0' -> error if CLIENTES and no clave y no adicional -> error else if no QR -> error valida_grt = validar_grt(...) if !success -> return valida_grt return success

control/embarque/paquete -[storeQuantities]

Path: /var/www/html/qaservicesapp/app/Http/Controllers/ShalomControl/EmbarqueController.php

🧾 Descripción

Este servicio registra el embarque de paquetes para una Orden de Servicio (OS).
Valida toda la información crítica del embarque, verifica restricciones de rutas, valida si la OS está apta para embarque (QR / clave / no anulada), confirma cantidades, registra procesos históricos, actualiza estados de embarque y permite manejar escenarios:

Es uno de los servicios centrales del módulo logístico.


🚀 Endpoint


POST /store-quantities

📥 Request Body

{ "ose_id": 12345, "cantidad": 12, "cantidades": "1,2,3,4", "usuario": "jlopez", "terminal": 7, "tipo_cierre": "APP", "cap_id": 881, "cierre_aereo": null, "cooler": null, "placa": null, "traspaso": 0 }

Campos requeridos

Campo Tipo Obligatorio Descripción
ose_id number ID de la Orden de Servicio a embarcar.
cantidad number Cantidad total declarada a embarcar.
cantidades string (CSV) Paquetes escaneados para este embarque.
usuario string Usuario que está realizando el proceso.
terminal number Terminal desde donde se embarca.
tipo_cierre "APP" | "PDA" Tipo de registro del embarque.
cap_id number Carguero (ruta programada) asignado.

Campos opcionales

Campo Tipo Descripción
cierre_aereo number ID del cierre a registrar si es embarque aéreo.
cooler string Código del cooler si se embarca desde uno.
placa string Para embarque masivo (opcional).
traspaso number (0/1) Indica si permite traspaso entre terminales.

🔐 Seguridad

Servicio protegido mediante autenticación de API interna del sistema.
Requiere usuario autenticado y terminal válida.


🧠 Flujo del Servicio (resumen real)

A continuación, el flujo real y completo basado en tu código:


🔹 1. Validación de parámetros obligatorios


🔹 2. Obtiene la Orden de Servicio

Consulta: emp_ordenservicio
Valida:


🔹 3. Valida retención de embarque aéreo

Consulta: emp_retencion_embarque_aereo
Si existe → no permite embarque.


🔹 4. Valida terminales, rutas y restricciones del carguero

Consulta: emp_cargprogramado

Verifica:

Si alguna restricción aplica → error.


🔹 5. Obtiene cantidades totales de la OS

Consulta: emp_os_detalle
Calcula unidades totales.


🔹 6. Verifica paquetes previamente desembarcados

Consulta: emp_procesos_historial_app
Si encuentra que todos los paquetes ya están en destino → bloquea embarque.


🔹 7. Verifica embarques previos

Consulta: emp_embarque_historial
Evalúa:

Si ya embarcó todos los paquetes → error.


🔹 8. Registra o actualiza el embarque

Dos escenarios:

a) Primer registro

Inserta en:
emp_embarque_historial

b) Actualización

Actualiza registro existente.


🔹 9. Actualiza el estado de la Orden de Servicio

Actualiza en emp_ordenservicio:


🔹 10. Registra proceso histórico

En:
emp_procesos_historial_app


🔹 11. Procesos adicionales


🔹 12. Respuesta final

Devuelve éxito y número de guía.


📤 Response 200 – Ejemplo

{ "success": true, "message": "Paquetes de la OS: 458822 embarcados con éxito." }


Posibles Errores

1. Campos faltantes

{ "success": false, "message": "Falta cantidad." }

2. OS no encontrada

{ "success": false, "message": "Guia no encontrada." }

3. OS anulada

{ "success": false, "message": "La guía se encuentra anulada." }

4. OS sin QR o clave válida

{ "success": false, "message": "La Orden de Servicio no tiene código QR." }

5. Terminal no permitida

{ "success": false, "message": "La Orden de Servicio ya se encuentra en su destino." }

6. Restricción de embarque aéreo

{ "success": false, "message": "La guia tiene una retención de embarque aereo, no se puede embarcar" }

7. Restricción de ruta

{ "success": false, "message": "En la ruta X no puede embarcar para el destino Y." }

8. Paquetes ya embarcados

{ "success": false, "message": "Ya fueron embarcados todos los paquetes de la guia." }

9. Error al actualizar embarque aéreo o cooler

{ "success": false, "message": "Ocurrió un error al embarcar la OS: XXXX" }


📚 Schemas (estructuras usadas)

emp_ordenservicio

{ "ose_id": "number", "ose_nroguiacliente": "string", "ose_estadoPago": "string", "ose_code_qr": "string", "ose_termorigenatencion": "number", "ose_termdestinoentrega": "number", "ose_fhpreferenciapartida": "datetime" }

emp_embarque_historial

{ "emb_id": "number", "emb_ose_id": "number", "emb_cant_paquetes_embarcados": "string", "emb_cant_paquetes_total": "number", "emb_terminal": "number", "emb_carg_id": "number" }

emp_procesos_historial_app

{ "id": "number", "idose": "number", "idcarguero": "number", "proceso": "string", "nombre_metodo": "string", "cant_paquetes": "string" }

emp_cooler_guias

{ "codigo_barra": "string", "ose_id": "number", "estado_embarque": "0|1" }

emp_embarque_aereo

{ "ose_id": "number", "estado": "number", "cierre_id": "number|null" }


🗃 Lógica en pseudo-código

validar parámetros requeridos orden = obtener OS si no existe o está anulada -> error validar QR o clave validar terminal de destino validar retenciones aéreas validar rutas, orígenes, restricciones detalle = obtener total de paquetes de OS procesos_previos = obtener historial si todos los paquetes ya están en destino -> error embarques_previos = obtener embarques si ya embarcados todos -> error si no existe embarque actual: insertar registro de embarque sino: actualizar registro existente actualizar estado de OS registrar proceso histórico si cierre_aereo -> actualizar emp_embarque_aereo si cooler -> actualizar emp_cooler_guias return éxito

control/embarque/obtener - [show]

Path: /var/www/html/qaservicesapp/app/Http/Controllers/ShalomControl/EmbarqueController.php

 

🧾 Descripción

Obtiene la información completa de una Orden de Servicio (OSE), incluyendo:

Es un servicio para consulta detallada de una guía antes o durante el proceso de embarque.


🚀 Endpoint


POST /show

📥 Request Body

{ "ose_id": "number", "cap_id": "number", "terminal": "string" }

Parámetros requeridos

Campo Tipo Obligatorio Descripción
ose_id number ID de la orden de servicio a consultar.
cap_id number ID de carga (embarque) asociado.
terminal string No Terminal desde donde se consulta.

🔐 Seguridad

El servicio depende del middleware global (token/sesión del sistema).
No hace validación explícita dentro de la función.


🧠 Flujo del Servicio (resumen real)

1. Validación inicial

2. Obtiene datos de la orden

Consulta principal:

SELECT fecha, monto, guia, remitente, destinatario, tipo_pago, origen, destino, usuario, ose_id, estado_pago, tipo_entrega, contenido = null, ruta = null, embarque_guia = 'SIN GUIA', cant_paq = 0, cant_total = 0, embarcados = null, cap_id = '' FROM emp_ordenservicio WHERE ose_id = <ose_id>

Si no existe → "Orden de servicio no encontrada"
Si está anulada (estado_pago = 'AN') → error.


3. Obtiene nombres de terminales

Se reemplazan los IDs de origen/destino por su nombre y alias:

SELECT nombre, alias FROM emp_terminal WHERE ter_id = origen SELECT nombre, alias FROM emp_terminal WHERE ter_id = destino

Crea la ruta: ruta = origen_alias + ' - ' + destino_alias


4. Obtiene contenido de la OSE

Consulta:

SELECT tipo, cantidad FROM emp_os_detalle WHERE osd_osid = <ose_id> AND osd_eliminado = 0

Construye:


5. Obtiene estado de embarque

Consulta:

SELECT emb_estado_guia, emb_cant_paquetes_embarcados FROM emp_embarque_historial WHERE emb_ose_id = <ose_id> AND emb_carg_id = <cap_id> AND status = 1

Calcula:


6. Traduce tipo de pago

Consulta atributos:

SELECT abreviatura, valor FROM emp_atributos WHERE concepto = 'tipospago' AND atr_idpadre = 90

Aplica la conversión: orden.tipo_pago = abreviatura del valor recibido


7. Obtiene nombre del remitente

SELECT documento, nombre_completo FROM emp_persona WHERE documento = orden.remitente


8. Obtiene usuario creador

SELECT usr_alias FROM emp_usuario WHERE usr_id = orden.usuario


9. Devuelve respuesta final

Incluye:


📤 Response 200 – Ejemplo

{ "success": true, "message": "Orden encontrada", "data": { "ose_id": 152233, "fecha": "2025-01-12", "guia": "G-998877", "remitente": "EMPRESA S.A.", "destinatario": "CLIENTE SAC", "tipo_pago": "CR", "origen": "LIMA", "destino": "AREQUIPA", "ruta": "LIM - AQP", "contenido": "5 CAJA / 2 SOBRE", "cant_total": 7, "embarque_guia": "SIN GUIA", "cant_paq": 0, "usuario": "jrojas", "cap_id": 22, "embarcados": [] } }


Posibles Errores

1. Falta ose_id

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

2. Falta cap_id

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

3. OSE no encontrada

{ "success": true, "message": "Orden de servicio no encontrada" }

4. Guía anulada

{ "success": false, "message": "La guía se encuentra anulada." }


📚 Schemas (estructuras usadas)

Orden de Servicio (emp_ordenservicio)

{ "ose_id": "number", "fecha": "datetime", "monto": "number", "guia": "string", "remitente": "string", "destinatario": "string", "tipo_pago": "string", "origen": "number", "destino": "number", "usuario": "number", "estado_pago": "string" }

Detalle OSE (emp_os_detalle)

{ "tipo": "string", "cantidad": "number" }

Terminal (emp_terminal)

{ "nombre": "string", "alias": "string" }

Embarque Historial

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


🗃 Lógica en pseudo-código

if !ose_id -> error if !cap_id -> error orden = SELECT from emp_ordenservicio if not found -> return mensaje if anulada -> error origen = SELECT terminal destino = SELECT terminal orden.ruta = origen.alias + " - " + destino.alias detalles = SELECT detalle OSE contenido = concatenar tipo + cantidad cant_total = sum cantidades embarques = SELECT embarques para ose_id y cap_id calcular emb_guia, cant_paq, embarcados[] tipo_pago = traducir via emp_atributos remitente = SELECT persona usuario = SELECT usuario return orden completa

control/embarque/eliminar - [destroy]

Path: /var/www/html/qaservicesapp/app/Http/Controllers/ShalomControl/EmbarqueController.php

🧾 Descripción

Este servicio elimina el embarque asociado a una orden de servicio (OSE) y un carguero (cap_id).
Revierte todos los estados de embarque relacionados y registra el historial de eliminación del proceso.
Si aplica, también elimina el embarque en Moova (integración externa).

Es un servicio crítico dentro del flujo de desembarque / reversión de embarque.


🚀 Endpoint


POST /embarque/destroy

📥 Request Body

{ "ose_id": "number", "usuario": "string", "terminal": "string", "cap_id": "number" }

Parámetros requeridos

Campo Tipo Obligatorio Descripción
ose_id number ID de la orden de servicio a revertir.
usuario string Usuario que ejecuta la eliminación del embarque.
terminal string Terminal desde donde se realiza el proceso.
cap_id number ID del carguero asociado al embarque.

🔐 Seguridad

Protegido por autenticación estándar de la API (middleware Laravel).
La función asume que ya hay un usuario validado.


🧠 Flujo del Servicio (resumen real)

1. Validaciones iniciales

Verifica que existan los campos obligatorios: ose_id, usuario, terminal, cap_id.
Si falta alguno → responde con error inmediato.


2. Obtiene información del carguero

Consulta en emp_cargprogramado para asegurarse de que el carguero existe.

SELECT cap_origen, cap_destino, cap_rutacarguero, cap_restricciones, ruta_aerea FROM emp_cargprogramado LEFT JOIN emp_grupos WHERE cap_id = <cap_id>

Si no existe → error: "No se encontró el carguero."


3. Define estructura de reversión de OSE

Se arma un arreglo con todos los campos de embarque en estado inicial:

{ "ose_usuario_embarque": null, "ose_estadoembarque": 0, "ose_ultimo_carprog_embarque": null, "ose_ultima_fecha_embarque": null, "ose_fecha_paquete_embarque": null, "ose_fecha_guia_embarque": null, "ose_estado_guia_embarque": 0, "ose_usuario_guia_embarque": null, "ose_usuario_paquete_embarque": null, "ose_estado_paquete_embarque": 0 }


4. Valida si la OSE tuvo desembarque anterior

Consulta:

SELECT des_id FROM emp_desembarque_historial WHERE des_ose_id = <ose_id> AND des_carg_id = <cap_id>

Si existen → marca estado_os = "Desembarque"


5. Revierte el embarque en historial empresarial

Actualiza emp_embarque_historial:

WHERE emb_carg_id = cap_id AND emb_ose_id = ose_id UPDATE status = 0


6. Resetea información de embarque en la OSE

UPDATE emp_ordenservicio SET <campos de $OS> WHERE ose_id = <ose_id>


7. Revierte procesos en historial de CentOS

Busca procesos activos en:

emp_procesos_historial_app WHERE idose = ose_id AND idcarguero = cap_id AND proceso = 'embarque' AND nombre_metodo IN ('embarque_paquete', 'embarque_guia') UPDATE status = 0


8. Registra un nuevo historial de eliminación

Inserta un registro indicando el proceso "eliminar_embarque".


9. Integración con Moova (si aplica)

Si el carguero contiene destino "523", verifica si el terminal está habilitado para Moova:

SELECT id FROM emp_ter_moova WHERE ter_id = terminal AND status = 1

Si existe → Ejecuta: MoovaController::destroy($ose_id)


10. Respuesta final

Devuelve mensaje de éxito: { "success": true, "message": "Embarque eliminado" }


📤 Response 200 – Ejemplo

{ "success": true, "message": "Embarque eliminado" }


❗ Posibles Errores

1. Falta ose_id

{ "success": false, "message": "Falta ose_id." }

2. Falta usuario

{ "success": false, "message": "Falta usuario." }

3. Falta terminal

{ "success": false, "message": "Falta terminal." }

4. Falta cap_id

{ "success": false, "message": "Falta cap_id." }

5. Carguero no encontrado

{ "success": false, "message": "No se encontró el carguero." }


📚 Schemas (estructuras usadas)

emp_cargprogramado

{ "cap_origen": "string", "cap_destino": "json/string", "cap_rutacarguero": "string", "cap_restricciones": "json/string" }

emp_embarque_historial

{ "emb_ose_id": "number", "emb_carg_id": "number", "status": "number" }

emp_ordenservicio

{ "ose_id": "number", "ose_estadoembarque": "number", "ose_usuario_embarque": "string|null" }

emp_procesos_historial_app

{ "idose": "string", "idcarguero": "string", "proceso": "string", "nombre_metodo": "string", "status": "number" }


🗃 Lógica en pseudo-código

validar campos obligatorios: ose_id, usuario, terminal, cap_id carguero = obtener carguero if !carguero -> error OS = campos en estado inicial desembarque = buscar desembarque previo if existe -> OS.estado_os = 'Desembarque' actualizar emp_embarque_historial SET status = 0 actualizar emp_ordenservicio SET OS actualizar procesos_historial_app SET status = 0 insertar registro eliminar_embarque si carguero.cap_destino contiene '523': si terminal tiene configuración moova: llamar MoovaController.destroy(ose_id) return success