# Desembarques

# control/grupo/listar - [index] (1,2)

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

## 🧾 **Descripción**

Retorna una lista paginada de **grupos de cargueros de desembarque**, filtrados por terminal, nombre y fecha.  
Cada grupo incluye sus placas asociadas y el nombre legible de la terminal.

Realiza consultas en la base **empresarial**, transforma datos y enriquece la respuesta con nombres de terminales y placas de cargueros programados.

---

# 🚀 **Endpoint**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-%2Fcargueros-dese"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`POST /cargueros-desembarque`</div></div>---

# 📥 **Request Body**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22terminal%22%3A-3%2C-%22pa"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"terminal"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">3</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"pagina"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">1</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"nombre"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"TURNO A"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>### Parámetros

<div class="_tableContainer_1rjym_1" id="bkmrk-campo-tipo-obligator"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1079" data-start="769"><thead data-end="813" data-start="769"><tr data-end="813" data-start="769"><th data-col-size="sm" data-end="777" data-start="769">Campo</th><th data-col-size="sm" data-end="784" data-start="777">Tipo</th><th data-col-size="sm" data-end="798" data-start="784">Obligatorio</th><th data-col-size="md" data-end="813" data-start="798">Descripción</th></tr></thead><tbody data-end="1079" data-start="859"><tr data-end="906" data-start="859"><td data-col-size="sm" data-end="870" data-start="859">terminal</td><td data-col-size="sm" data-end="876" data-start="870">int</td><td data-col-size="sm" data-end="884" data-start="876">✔️ Sí</td><td data-col-size="md" data-end="906" data-start="884">ID de la terminal.</td></tr><tr data-end="980" data-start="907"><td data-col-size="sm" data-end="916" data-start="907">pagina</td><td data-col-size="sm" data-end="922" data-start="916">int</td><td data-col-size="sm" data-end="930" data-start="922">✔️ Sí</td><td data-col-size="md" data-end="980" data-start="930">Número de página (paginación de 15 registros).</td></tr><tr data-end="1079" data-start="981"><td data-col-size="sm" data-end="990" data-start="981">nombre</td><td data-col-size="sm" data-end="999" data-start="990">string</td><td data-col-size="sm" data-end="1013" data-start="999">✖️ Opcional</td><td data-col-size="md" data-end="1079" data-start="1013">Filtra por nombre del grupo (activa rango de fecha extendido).</td></tr></tbody></table>

</div></div>---

# 🔐 **Seguridad**

Requiere token o autenticación definida en middleware general (no se valida dentro del método).

---

# 🧠 **Flujo del Servicio (resumen real)**

### 1. Validaciones iniciales

- Si no envían `terminal` → error obligatorio.
- Se toma `pagina` para paginar.
- Se define `limit = 15`.
- Fecha mínima:
    
    
    - Por defecto: **ayer**
    - Si se envía `nombre`: se amplía rango **–10 días a +10 días** y se agrega filtro LIKE al nombre.

### 2. Construcción del filtro para la consulta

Filtros aplicados:

- terminal = enviado
- status = 1
- fecha\_creacion &gt; fechaDesde
- si existe nombre → LIKE %nombre% y fecha\_creacion &lt; fechaHasta

### 3. Consulta de grupos de desembarque

Tabla: `emp_grupo_cargueros_desembarque`

Campos retornados:

- id
- grupo (array JSON de cap\_id)
- nombre
- terminal
- cerrar\_grupo
- fecha\_creacion
- placas = null (placeholder)

Si no hay resultados → “No se encontraron grupos”.

### 4. Obtención del catálogo de terminales

Consulta `emp_terminal` y crea un arreglo tipo diccionario:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%5B-ter_id-%3D%3E-ter_nomb"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-selector-attr">[ ter_id => ter_nombre ]</span>`</div></div>### 5. Enriquecimiento de la data

Para cada grupo:

1. Decodifica `grupo` (lista de cap\_id).
2. Consulta placas desde:
    
    
    - **emp\_cargprogramado (cap)**
    - **emp\_carguero\_new (carg)**
    
    Campos:
    
    
    - placa1
    - codigo1
    - placa2
3. Construye lista de placas:  
    `"placa1 codigo1"`
4. Reemplaza el id de terminal por su nombre real.

---

# 📤 **Response 200 – Ejemplo**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-true%2C-%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"lista de grupos"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"data"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>    <span class="hljs-punctuation">{</span>      <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">15</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"grupo"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-number">123</span><span class="hljs-punctuation">,</span> <span class="hljs-number">124</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"nombre"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"TURNO A"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"terminal"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Terminal Callao"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"cerrar"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">0</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"fecha"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2025-01-26 10:21:00"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"placas"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>        <span class="hljs-string">"B1234 C001"</span><span class="hljs-punctuation">,</span>        <span class="hljs-string">"B2288 C002"</span>      <span class="hljs-punctuation">]</span>    <span class="hljs-punctuation">}</span>  <span class="hljs-punctuation">]</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

# ❗ **Posibles Errores**

### 1. Terminal obligatorio

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Es obligatorio enviar una terminal"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>### 2. Sin resultados

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C--1"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"No se encontraron grupos"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

# 📚 **Schemas (estructuras usadas)**

### **emp\_grupo\_cargueros\_desembarque**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22id%22%3A-%22number%22%2C-%22g"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"grupo"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"json array of cap_id"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"nombre"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"terminal"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cerrar_grupo"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"fecha_creacion"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"datetime"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>### **emp\_cargprogramado + emp\_carguero\_new**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22placa1%22%3A-%22string%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"placa1"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"codigo1"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"placa2"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>### **emp\_terminal**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22ter_id%22%3A-%22number%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"ter_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ter_nombre"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ter_abrebiatura"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

# 🗃 **Lógica en pseudo-código**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-if-%21terminal--%3E-erro"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`if !terminal -> errorfechaDesde = yesterdayif nombre:    fechaDesde = -10 days    fechaHasta = +10 days    add filter nombre LIKE %nombre%    add filter fecha_creacion < fechaHastaadd filter fecha_creacion > fechaDesdegrupos = SELECT from emp_grupo_cargueros_desembarque where filters, paginatedif empty -> errorterminales = SELECT all terminalesmap[ter_id] = ter_nombrefor each grupo:    ids = decode(grupo.grupo)    cargueros = SELECT placas info using ids    grupo.placas = format placas    grupo.terminal = terminales[grupo.terminal]return grupos`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>

# control/grupo/obtener - [show]

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

## 🧾 **Descripción**

Este servicio obtiene la **información detallada de un grupo de cargueros de desembarque**, incluyendo:

- Datos del grupo
- Terminal asociada
- Cargueros programados (placas/códigos)
- Información estructurada lista para visualizar en pantalla

El servicio consulta varias tablas del sistema empresarial para reconstruir toda la información relacionada al grupo.

---

# 🚀 **Endpoint**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-%2Fgrupo-desembar"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`POST /grupo-desembarque/show`</div></div>---

# 📥 **Request Body**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22grp_id%22%3A-123-%7D"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"grp_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">123</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### Parámetros

<div class="_tableContainer_1rjym_1" id="bkmrk-campo-tipo-obligator"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="853" data-start="710"><thead data-end="754" data-start="710"><tr data-end="754" data-start="710"><th data-col-size="sm" data-end="718" data-start="710">Campo</th><th data-col-size="sm" data-end="725" data-start="718">Tipo</th><th data-col-size="sm" data-end="739" data-start="725">Obligatorio</th><th data-col-size="sm" data-end="754" data-start="739">Descripción</th></tr></thead><tbody data-end="853" data-start="800"><tr data-end="853" data-start="800"><td data-col-size="sm" data-end="809" data-start="800">grp\_id</td><td data-col-size="sm" data-end="819" data-start="809">integer</td><td data-col-size="sm" data-end="824" data-start="819">Sí</td><td data-col-size="sm" data-end="853" data-start="824">ID del grupo a consultar.</td></tr></tbody></table>

</div></div>---

# 🔐 **Seguridad**

Requiere autenticación estándar del sistema (middleware).  
La función no implementa validación de permisos directamente.

---

# 🧠 **Flujo del Servicio (resumen real)**

### 1. **Validación del parámetro**

- Si no se envía `grp_id`, retorna error.

---

### 2. **Obtiene información del grupo**

Consulta:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-select-id%2C-grupo%2C-no"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-keyword">SELECT</span> id, grupo, nombre, terminal, cerrar_grupo <span class="hljs-keyword">AS</span> cerrar,       fecha_creacion <span class="hljs-keyword">AS</span> fecha, <span class="hljs-keyword">null</span> <span class="hljs-keyword">AS</span> placas<span class="hljs-keyword">FROM</span> emp_grupo_cargueros_desembarque<span class="hljs-keyword">WHERE</span> id = <grp_id>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>- Si no se encuentra → error *"No se encontró el grupo"*.

---

### 3. **Reemplaza el ID de terminal por su nombre**

Consulta:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-select-ter_id%2C-ter_n"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-keyword">SELECT</span> ter_id, ter_nombre, ter_abrebiatura<span class="hljs-keyword">FROM</span> emp_terminal<span class="hljs-keyword">WHERE</span> ter_id <span class="hljs-operator">=</span> <span class="hljs-operator"><</span>grupo.terminal<span class="hljs-operator">></span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>Actualiza: `<span class="hljs-attr">grupo.terminal</span> = <terminal.ter_nombre>`

---

### 4. **Convierte el campo grupo a JSON**

`grupo.grupo` es un JSON que contiene una lista de `cap_id`.

Ejemplo:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%5B12%2C-15%2C-19%5D"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">[</span><span class="hljs-number">12</span><span class="hljs-punctuation">,</span> <span class="hljs-number">15</span><span class="hljs-punctuation">,</span> <span class="hljs-number">19</span><span class="hljs-punctuation">]</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

### 5. **Obtiene información de cargueros programados**

Consulta:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-select-cap.cap_cargu"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-keyword">SELECT</span> cap.cap_cargueroid <span class="hljs-keyword">AS</span> placa1,       carg.car_codigo <span class="hljs-keyword">AS</span> codigo1,       cap.cap_carguero_id2 <span class="hljs-keyword">AS</span> placa2<span class="hljs-keyword">FROM</span> emp_cargprogramado capLEFT <span class="hljs-keyword">JOIN</span> emp_carguero_new carg <span class="hljs-keyword">ON</span> cap.cap_cargid = carg.id<span class="hljs-keyword">WHERE</span> cap.cap_id <span class="hljs-keyword">IN</span> (<lista de cap_id>)  <span class="hljs-built_in">AND</span> cap.eliminado = <span class="hljs-number">0</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>Luego construye una lista tipo: `<span class="hljs-selector-attr">[<span class="hljs-string">"PLACA001 COD001"</span></span>, <span class="hljs-string">"PLACA002 COD009"</span>, ...]`

Asignado a: `<span class="hljs-attr">grupo.placas</span> = [...]`

---

### 6. **Respuesta final**

Retorna toda la estructura ensamblada.

---

# 📤 **Response 200 – Ejemplo**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-true%2C-%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Informacion de grupo"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"data"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>    <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">12</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"grupo"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-number">125</span><span class="hljs-punctuation">,</span> <span class="hljs-number">126</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"nombre"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"GRUPO 1"</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"terminal"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Terminal Norte"</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"cerrar"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">0</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"fecha"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2025-01-10 10:20:00"</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"placas"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>      <span class="hljs-string">"ABC123 COD001"</span><span class="hljs-punctuation">,</span>      <span class="hljs-string">"XYZ998 COD077"</span>    <span class="hljs-punctuation">]</span>  <span class="hljs-punctuation">}</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# ❗ **Posibles Errores**

### 1. Falta de parámetro obligatorio

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Es obligatorio enviar grp_id"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### 2. Grupo no encontrado

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C--1"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"No se encontró el grupo"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# 📚 **Schemas (estructuras usadas)**

### **emp\_grupo\_cargueros\_desembarque**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22id%22%3A-%22number%22%2C-%22g"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"grupo"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"json-array"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"nombre"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"terminal"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cerrar"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"fecha"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"datetime"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"placas"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"array<string>"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### **emp\_terminal**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22ter_id%22%3A-%22number%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"ter_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ter_nombre"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ter_abrebiatura"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### **emp\_cargprogramado + emp\_carguero\_new**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22placa1%22%3A-%22string%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"placa1"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"codigo1"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"placa2"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# 🗃 **Lógica en pseudo-código**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-if-%21grp_id--%3E-error-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`if !grp_id -> errorgrupo = SELECT ... FROM emp_grupo_cargueros_desembarque WHERE id=grp_idif !grupo -> errorterminal = SELECT ... FROM emp_terminal WHERE ter_id=grupo.terminalgrupo.terminal = terminal.nombreterminales = JSON decode(grupo.grupo)grupo.grupo = terminalesif terminales not empty:    cargueros = SELECT cargueros programados WHERE cap_id IN terminales    grupo.placas = ["placa1 codigo1", ...]return grupo`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>

# control/carguero/grupo - [listarPorGrupo]

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

## 🧾 **Descripción**

Este servicio recibe un **ID de grupo de cargueros (`grp_id`)** y retorna la **lista de cargueros asociados al grupo**, incluyendo información enriquecida:

- Datos del carguero (placas, choferes, ruta, origen/destino)
- Estado de QR generado
- Datos de desembarque (paquetes desembarcados y guías desembarcadas)
- Escalas generadas dinámicamente según origen y destino

El servicio consulta varias tablas del sistema Empresarial y CentOS y consolida la información en una sola respuesta.

---

# 🚀 **Endpoint**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-%2Flistar-por-gru"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`POST /listar-por-grupo`</div></div>---

# 📥 **Request Body**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22grp_id%22%3A-%22number%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"grp_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### Parámetros

<div class="_tableContainer_1rjym_1" id="bkmrk-campo-tipo-obligator"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1110" data-start="923"><thead data-end="967" data-start="923"><tr data-end="967" data-start="923"><th data-col-size="sm" data-end="931" data-start="923">Campo</th><th data-col-size="sm" data-end="938" data-start="931">Tipo</th><th data-col-size="sm" data-end="952" data-start="938">Obligatorio</th><th data-col-size="md" data-end="967" data-start="952">Descripción</th></tr></thead><tbody data-end="1110" data-start="1013"><tr data-end="1110" data-start="1013"><td data-col-size="sm" data-end="1022" data-start="1013">grp\_id</td><td data-col-size="sm" data-end="1031" data-start="1022">number</td><td data-col-size="sm" data-end="1036" data-start="1031">Sí</td><td data-col-size="md" data-end="1110" data-start="1036">ID del grupo registrado en la tabla `emp_grupo_cargueros_desembarque`.</td></tr></tbody></table>

</div></div>---

# 🔐 **Seguridad**

Protegido generalmente por autenticación de la API (token/middleware definido).  
El método no valida credenciales directamente.

---

# 🧠 **Flujo del Servicio (resumen real)**

1. **Validación de entrada**
    
    
    - Verifica que `grp_id` exista; si no, retorna error.
    - Busca el grupo en `emp_grupo_cargueros_desembarque`.
    - Verifica que el grupo tenga cargueros registrados.
2. **Obtiene cargueros asociados**  
    Consulta `emp_cargprogramado` para los `cap_id` del grupo:
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-keyword">SELECT</span> fecha, cap_id, chofer1, chofer2, ruta,       origen, destino, placa1, placa2, cerrado<span class="hljs-keyword">FROM</span> emp_cargprogramado<span class="hljs-keyword">WHERE</span> eliminado = <span class="hljs-number">0</span> <span class="hljs-keyword">AND</span> cap_id <span class="hljs-keyword">IN</span> (<cap_ids>)<span class="hljs-keyword">ORDER</span> <span class="hljs-keyword">BY</span> fecha <span class="hljs-keyword">DESC</span>`</div></div>
3. **Obtiene catálogo de terminales**
    
    
    - Lista nombres y abreviaturas de todas las terminales.
    - Se usa para convertir IDs de terminal en texto legible.
4. **Procesamiento por cada carguero**  
    Para cada `cap_id`:
    
    
    - Decodifica JSON de `origen` y `destino`.
    - Traduce IDs a abreviaturas de terminal:
        
        <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
        </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-attribute">ORIGEN</span> → <span class="hljs-string">"LIM - CHI - ARE"</span>DESTINO → <span class="hljs-string">"ARE - JUL"</span>`</div></div>
    - Verifica si tiene QR generado (consulta en CentOS).
    - Obtiene información de desembarque por guía:
        
        
        - Paquetes desembarcados
        - Total de paquetes
        - Estado de guía (DESEMBARCADA, SIN GUIA, FALTA DESEMBARCAR GUIA)
    - Calcula:
        
        
        - Total de paquetes desembarcados
        - Total de guías desembarcadas
    - Construye lista de **escalas** combinando origen + destino.
5. **Devuelve lista final de cargueros procesados**

---

# 📤 **Response 200 – Ejemplo**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-true%2C-%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Lista de cargueros"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"data"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>    <span class="hljs-punctuation">{</span>      <span class="hljs-attr">"fecha"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2025-01-10 08:00:00"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"cap_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">98765</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"chofer1"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">1122</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"chofer2"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">3344</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"ruta"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"RUTA-01"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"origen"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"LIM - ARE"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"destino"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ARE - JUL"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"placa1"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ABC-123"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"placa2"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"XYZ-789"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"cerrado"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">0</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"qr_generado"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"escalas"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>        <span class="hljs-string">"1 Terminal Lima"</span><span class="hljs-punctuation">,</span>        <span class="hljs-string">"2 Terminal Arequipa"</span><span class="hljs-punctuation">,</span>        <span class="hljs-string">"3 Terminal Juliaca"</span>      <span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"paquetes"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">150</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"guias"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">12</span>    <span class="hljs-punctuation">}</span>  <span class="hljs-punctuation">]</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# ❗ **Posibles Errores**

### 1. No se envió `grp_id`

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Envie grp_id"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### 2. Grupo no existe

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C--1"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"No se encontró grupo"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### 3. Grupo sin cargueros

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C--2"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Agregue cargueros al grupo"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### 4. No hay cargueros coincidentes

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C--3"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Agregue cargueros al grupo"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# 📚 **Schemas (estructuras utilizadas)**

### **emp\_grupo\_cargueros\_desembarque**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22id%22%3A-number%2C-%22gru"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> number<span class="hljs-punctuation">,</span>  <span class="hljs-attr">"grupo"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string (JSON array)"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### **emp\_cargprogramado**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22cap_id%22%3A-number%2C-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"cap_id"</span><span class="hljs-punctuation">:</span> number<span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_fhsalidaprogramada"</span><span class="hljs-punctuation">:</span> datetime<span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_chofer1id"</span><span class="hljs-punctuation">:</span> number<span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_chofer2id"</span><span class="hljs-punctuation">:</span> number|<span class="hljs-literal"><span class="hljs-keyword">null</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_rutacarguero"</span><span class="hljs-punctuation">:</span> string<span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_origen"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"JSON array"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_destino"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"JSON array"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_cargueroid"</span><span class="hljs-punctuation">:</span> string<span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_carguero_id2"</span><span class="hljs-punctuation">:</span> string|<span class="hljs-literal"><span class="hljs-keyword">null</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_cerrado"</span><span class="hljs-punctuation">:</span> number<span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### **emp\_terminal**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22ter_id%22%3A-number%2C-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"ter_id"</span><span class="hljs-punctuation">:</span> number<span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ter_nombre"</span><span class="hljs-punctuation">:</span> string<span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ter_abrebiatura"</span><span class="hljs-punctuation">:</span> string<span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### **emp\_desembarque\_historial + emp\_ordenservicio**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22des_ose_id%22%3A-numb"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"des_ose_id"</span><span class="hljs-punctuation">:</span> number<span class="hljs-punctuation">,</span>  <span class="hljs-attr">"desembarcados"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"comma separated string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"total"</span><span class="hljs-punctuation">:</span> number<span class="hljs-punctuation">,</span>  <span class="hljs-attr">"estadoguia"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"FALTA DESEMBARCAR GUIA | SIN GUIA | GUIA DESEMBARCADA"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# 🗃 **Lógica en pseudo-código**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-if-%21grp_id--%3E-error-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`if !grp_id -> errorgrupo = SELECT grupo WHERE id=grp_idif !grupo -> errorcap_ids = json_decode(grupo.grupo)if empty -> errorcargueros = SELECT cargueros WHERE cap_id IN cap_idsif empty -> errorterminales = SELECT ter_id, ter_nombre, abreviaturafor each carguero:    origen_ids = json_decode(carguero.origen)    destino_ids = json_decode(carguero.destino)    traducir ids a abreviaturas    verificar QR generado    consultar historial de desembarque    calcular paquetes desembarcados y guías desembarcadas    generar escalas a partir de origen + destinoreturn cargueros procesados`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>

# control/grupo/guardar - [store]

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

## 🧾 **Descripción**

Crea un nuevo registro en **emp\_grupo\_cargueros\_desembarque**, que representa un grupo de cargueros/desembarque asociado a un terminal.

Si el usuario no envía un nombre, el sistema genera uno automáticamente usando el nombre del terminal y la fecha de creación.

---

# 🚀 **Endpoint**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-%2Fgrupo-carguero"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`POST /grupo-cargueros-desembarque`</div></div>---

# 📥 **Request Body**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22nombre%22%3A-%22string-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"nombre"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string (opcional)"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"terminal"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number (requerido)"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"usuario"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string (opcional)"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### Parámetros requeridos

<div class="_tableContainer_1rjym_1" id="bkmrk-campo-tipo-obligator"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1092" data-start="694"><thead data-end="744" data-start="694"><tr data-end="744" data-start="694"><th data-col-size="sm" data-end="706" data-start="694">Campo</th><th data-col-size="sm" data-end="715" data-start="706">Tipo</th><th data-col-size="sm" data-end="729" data-start="715">Obligatorio</th><th data-col-size="md" data-end="744" data-start="729">Descripción</th></tr></thead><tbody data-end="1092" data-start="796"><tr data-end="876" data-start="796"><td data-col-size="sm" data-end="808" data-start="796">terminal</td><td data-col-size="sm" data-end="817" data-start="808">number</td><td data-col-size="sm" data-end="831" data-start="817">Sí</td><td data-col-size="md" data-end="876" data-start="831">ID del terminal donde se creará el grupo.</td></tr><tr data-end="986" data-start="877"><td data-col-size="sm" data-end="889" data-start="877">nombre</td><td data-col-size="sm" data-end="898" data-start="889">string</td><td data-col-size="sm" data-end="912" data-start="898">No</td><td data-col-size="md" data-end="986" data-start="912">Nombre personalizado del grupo. Si no se envía, el sistema genera uno.</td></tr><tr data-end="1092" data-start="987"><td data-col-size="sm" data-end="999" data-start="987">usuario</td><td data-col-size="sm" data-end="1008" data-start="999">string</td><td data-col-size="sm" data-end="1022" data-start="1008">No</td><td data-col-size="md" data-end="1092" data-start="1022">Usuario que realiza la operación (no se usa dentro de la función).</td></tr></tbody></table>

</div></div>---

# 🔐 **Seguridad**

El método no define validación propia, pero depende del middleware o autenticación general de la API.

---

# 🧠 **Flujo del Servicio (resumen real)**

1. **Obtiene los parámetros**: nombre, terminal, usuario, fecha actual.
2. **Valida que terminal sea numérico**.  
    Si no lo es → retorna:
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-punctuation">{</span> <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span> <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Debe enviar el terminal"</span> <span class="hljs-punctuation">}</span>`</div></div>
3. **Busca datos del terminal** en `emp_terminal`:
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-keyword">SELECT</span> ter_id, ter_nombre <span class="hljs-keyword">AS</span> nombre<span class="hljs-keyword">FROM</span> emp_terminal<span class="hljs-keyword">WHERE</span> ter_id = {terminal}`</div></div>
4. **Genera nombre automáticamente** si no se envía:  
    → `<nombre_terminal> <fecha>`
5. **Inserta un nuevo grupo** en `emp_grupo_cargueros_desembarque`:
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-keyword">INSERT</span> <span class="hljs-keyword">INTO</span> emp_grupo_cargueros_desembarque(nombre, terminal, fecha_creacion)<span class="hljs-keyword">VALUES</span> (...)`</div></div>
6. **Retorna ID generado** mediante `insertGetId`.

---

# 📤 **Response 200 – Ejemplo**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-true%2C-%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Grupo creado correctamente"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"data"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">58</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>*(donde `58` es el ID del nuevo grupo)*

---

# ❗ **Posibles Errores**

### 1. Terminal no válido

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Debe enviar el terminal"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>*(No existen más validaciones dentro del método.)*

---

# 📚 **Schemas (estructuras usadas)**

### **emp\_terminal**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22ter_id%22%3A-%22number%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"ter_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"nombre"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### **emp\_grupo\_cargueros\_desembarque**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22id%22%3A-%22number%22%2C-%22n"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"nombre"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"terminal"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"fecha_creacion"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"datetime"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# 🗃 **Lógica en pseudo-código**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-nombre-%3D-request.nom"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`nombre = request.nombreterminal = request.terminalusuario = request.usuariofecha = now()if terminal is not numeric:    return errorterminal_data = SELECT nombre FROM emp_terminal WHERE ter_id = terminalif nombre is empty:    nombre = terminal_data.nombre + " " + fechagrupo_new = INSERT INTO emp_grupo_cargueros_desembarque (nombre, terminal, fecha_creacion)return success with grupo_new id`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>

# control/grupo/carguero/agregar - [agregarCarguero]

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

## 🧾 **Descripción**

Agrega un **carguero (cap\_id)** a un **grupo de cargueros de desembarque (grp\_id)**.  
El servicio valida que:

- Exista el grupo.
- El grupo tenga su lista de cargueros almacenados en formato JSON.
- El carguero no esté ya incluido en el grupo.
- Luego actualiza la tabla agregando el carguero al listado.

Este servicio modifica directamente la tabla:

**emp\_grupo\_cargueros\_desembarque**

---

# 🚀 **Endpoint**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-%2Fagregar-cargue"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`POST /agregar-carguero`</div></div>---

# 📥 **Request Body**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22grp_id%22%3A-%22number%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"grp_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### Parámetros requeridos

<div class="_tableContainer_1rjym_1" id="bkmrk-campo-tipo-obligator"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1045" data-start="833"><thead data-end="877" data-start="833"><tr data-end="877" data-start="833"><th data-col-size="sm" data-end="841" data-start="833">Campo</th><th data-col-size="sm" data-end="848" data-start="841">Tipo</th><th data-col-size="sm" data-end="862" data-start="848">Obligatorio</th><th data-col-size="md" data-end="877" data-start="862">Descripción</th></tr></thead><tbody data-end="1045" data-start="923"><tr data-end="991" data-start="923"><td data-col-size="sm" data-end="932" data-start="923">grp\_id</td><td data-col-size="sm" data-end="941" data-start="932">number</td><td data-col-size="sm" data-end="946" data-start="941">Sí</td><td data-col-size="md" data-end="991" data-start="946">ID del grupo de cargueros de desembarque.</td></tr><tr data-end="1045" data-start="992"><td data-col-size="sm" data-end="1001" data-start="992">cap\_id</td><td data-col-size="sm" data-end="1010" data-start="1001">number</td><td data-col-size="sm" data-end="1015" data-start="1010">Sí</td><td data-col-size="md" data-end="1045" data-start="1015">ID del carguero a agregar.</td></tr></tbody></table>

</div></div>---

# 🔐 **Seguridad**

Protegido por autenticación del sistema (middleware).  
El servicio no valida permisos dentro de la función.

---

# 🧠 **Flujo del Servicio (resumen real)**

1. **Validación inicial de parámetros**
    
    
    - Si falta `grp_id` → retorna error.
    - Si falta `cap_id` → retorna error.
2. **Obtiene información del grupo**
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-keyword">SELECT</span> grupo<span class="hljs-keyword">FROM</span> emp_grupo_cargueros_desembarque<span class="hljs-keyword">WHERE</span> id <span class="hljs-operator">=</span> grp_id`</div></div>
    - Si no existe → error “Grupo no encontrado”.
3. **Decodifica el campo `grupo`**
    
    
    - Si el campo `grupo` tiene JSON → se convierte en array.
    - Si está vacío → se crea array vacío.
4. **Verifica si el carguero ya está en el grupo**
    
    
    - Si `cap_id` ya existe → error “El carguero ya se encuentra en el grupo”.
5. **Agrega el nuevo carguero al grupo**
    
    
    - Inserta `cap_id` dentro del array.
    - Convierte el array nuevamente a JSON.
6. **Actualiza la BD**
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-keyword">UPDATE</span> emp_grupo_cargueros_desembarque<span class="hljs-keyword">SET</span> grupo <span class="hljs-operator">=</span> json_encode(arreglo_actualizado)<span class="hljs-keyword">WHERE</span> id <span class="hljs-operator">=</span> grp_id`  
      
    </div></div>
7. **Retorna éxito**
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-string">"Carguero agregado al grupo"</span>`</div></div>

---

# 📤 **Response 200 – Ejemplo**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-true%2C-%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Carguero agregado al grupo"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# ❗ **Posibles Errores**

### 1. Falta `grp_id`

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Falta cap_id"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>*(El mensaje es incorrecto en el código, pero lo dejamos tal cual está implementado.)*

---

### 2. Falta `cap_id`

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C--1"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Falta cap_id"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

### 3. Grupo no existe

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C--2"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Grupo no encontrado"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

### 4. Carguero repetido

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C--3"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"El carguero ya se encuentra en el grupo"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# 📚 **Schemas (estructuras usadas)**

### Tabla: `emp_grupo_cargueros_desembarque`

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22id%22%3A-%22number%22%2C-%22g"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"grupo"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string(JSON array of cap_id)"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>Ejemplo del campo `grupo`: `<span class="hljs-punctuation">[</span><span class="hljs-string">"123"</span><span class="hljs-punctuation">,</span> <span class="hljs-string">"245"</span><span class="hljs-punctuation">,</span> <span class="hljs-string">"300"</span><span class="hljs-punctuation">]</span>`

---

# 🗃 **Lógica en pseudo-código**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-if-%21grp_id--%3E-error%28"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`if !grp_id -> error("Falta cap_id")if !cap_id -> error("Falta cap_id")grupo = SELECT grupo FROM tabla WHERE id = grp_idif !grupo -> error("Grupo no encontrado")grupos = decode(grupo.grupo) OR []if cap_id in grupos:    error("El carguero ya se encuentra en el grupo")grupos.append(cap_id)UPDATE tabla SET grupo = encode(grupos) WHERE id = grp_idsuccess("Carguero agregado al grupo")`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>

# control/carguero/obtener - [show]

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

## 🧾 **Descripción**

Este servicio devuelve **toda la información detallada** de un carguero programado (`cap_id`), incluyendo:

- Datos generales del carguero (choferes, placas, ruta, fechas).
- Orígenes y destinos estructurados con su nombre de terminal.
- Escalas calculadas (orígenes + destinos).
- Cantidad de órdenes de servicio asociadas al carguero.
- Suma de los montos finales de dichas OS.

Lee información combinada de `emp_cargprogramado`, `emp_terminal` y `emp_ordenservicio`.

---

# 🚀 **Endpoint**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-%2Fcarguero%2Fshow"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`POST /carguero/show`</div></div>---

# 📥 **Request Body**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22cap_id%22%3A-%22number%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"cap_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"terminal"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string (opcional)"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"usuario"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string (opcional)"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### Parámetros requeridos

<div class="_tableContainer_1rjym_1" id="bkmrk-campo-tipo-obligator"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1120" data-start="864"><thead data-end="908" data-start="864"><tr data-end="908" data-start="864"><th data-col-size="sm" data-end="872" data-start="864">Campo</th><th data-col-size="sm" data-end="879" data-start="872">Tipo</th><th data-col-size="sm" data-end="893" data-start="879">Obligatorio</th><th data-col-size="sm" data-end="908" data-start="893">Descripción</th></tr></thead><tbody data-end="1120" data-start="954"><tr data-end="1008" data-start="954"><td data-col-size="sm" data-end="963" data-start="954">cap\_id</td><td data-col-size="sm" data-end="972" data-start="963">number</td><td data-col-size="sm" data-end="977" data-start="972">Sí</td><td data-col-size="sm" data-end="1008" data-start="977">ID del carguero programado.</td></tr><tr data-end="1068" data-start="1009"><td data-col-size="sm" data-end="1019" data-start="1009">usuario</td><td data-col-size="sm" data-end="1028" data-start="1019">string</td><td data-col-size="sm" data-end="1033" data-start="1028">No</td><td data-col-size="sm" data-end="1068" data-start="1033">Usuario que ejecuta el proceso.</td></tr><tr data-end="1120" data-start="1069"><td data-col-size="sm" data-end="1080" data-start="1069">terminal</td><td data-col-size="sm" data-end="1089" data-start="1080">string</td><td data-col-size="sm" data-end="1094" data-start="1089">No</td><td data-col-size="sm" data-end="1120" data-start="1094">Terminal de operación.</td></tr></tbody></table>

</div></div>---

# 🔐 **Seguridad**

Requiere sesión o token según la configuración del middleware (no validado en la función).

---

# 🧠 **Flujo del Servicio (resumen real)**

1. **Validación inicial**
    
    
    - Si no se envía `cap_id`, retorna error.
2. **Obtiene datos del carguero**
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.8711%;"></col></colgroup><tbody><tr><td>`<span class="hljs-keyword">SELECT</span> fecha, cap_id, chofer1, chofer2, ruta, placa1, placa2, cerrado,       origen, destino<span class="hljs-keyword">FROM</span> emp_cargprogramado<span class="hljs-keyword">WHERE</span> cap_id <span class="hljs-operator">=</span> :cap_id`</td></tr></tbody></table>
    
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>
3. **Obtiene datos de terminales**
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-keyword">SELECT</span> ter_id, ter_nombre <span class="hljs-keyword">FROM</span> emp_terminal`</div></div>Construye un diccionario:
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`listaTerminal[<span class="hljs-built_in">id</span>] = nombre`</div></div>
4. **Procesa orígenes y destinos**
    
    
    - Decodifica JSON almacenado en BD.
    - Convierte cada id de terminal a:
        
        <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
        </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="language-xml">"<span class="hljs-tag"><<span class="hljs-name">id</span></span></span>> <span class="hljs-tag"><<span class="hljs-name">nombre</span></span>>"`</div></div>
5. **Calcula escalas**
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-attr">escalas</span> = origenes ∪ destinos`</div></div>
6. **Busca órdenes de servicio asociadas al carguero**
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-keyword">SELECT</span> ose_montofinal, ose_id<span class="hljs-keyword">FROM</span> emp_ordenservicio<span class="hljs-keyword">WHERE</span> ose_ultimo_carprog_embarque = :cap_id<span class="hljs-keyword">ORDER</span> <span class="hljs-keyword">BY</span> ose_ultima_fecha_embarque <span class="hljs-keyword">DESC</span>`</div></div>
7. **Calcula:**
    
    
    - `cantidad` = total de OS encontradas
    - `suma` = sumatoria de `ose_montofinal`
8. **Retorna el carguero con estructura final.**

---

# 📤 **Response 200 – Ejemplo**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-true%2C-%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Lista de cargueros"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"data"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>    <span class="hljs-attr">"fecha"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2025-01-21 14:00:00"</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"cap_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">441</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"chofer1"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"CH00123"</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"chofer2"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"CH00452"</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"ruta"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"NORTE 01"</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"placa1"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ABC-123"</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"placa2"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"XYZ-987"</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"cerrado"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">0</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"cantidad"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">12</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"suma"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">1560.50</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"escalas"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>      <span class="hljs-string">"01 LIMA"</span><span class="hljs-punctuation">,</span>      <span class="hljs-string">"05 CHIMBOTE"</span><span class="hljs-punctuation">,</span>      <span class="hljs-string">"07 TRUJILLO"</span>    <span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"origenes"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>      <span class="hljs-string">"01 LIMA"</span><span class="hljs-punctuation">,</span>      <span class="hljs-string">"05 CHIMBOTE"</span>    <span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"destinos"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>      <span class="hljs-string">"07 TRUJILLO"</span>    <span class="hljs-punctuation">]</span>  <span class="hljs-punctuation">}</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# ❗ **Posibles Errores**

### 1. cap\_id no enviado

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Es obligatorio enviar un id"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### 2. No se encuentra carguero (si cap\_id no existe)

*(Laravel devolverá null y puede lanzar errores posteriores, según tu implementación)*  
Puedes documentarlo así:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C--1"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Carguero no encontrado"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>*(**Sugerencia:** en tu función no validas esto, pero debería considerarse.)*

---

# 📚 **Schemas (estructuras usadas)**

### **emp\_cargprogramado**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22cap_id%22%3A-%22number%22-1"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"cap_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_fhsalidaprogramada"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"datetime"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_chofer1id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_chofer2id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_rutacarguero"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_cargueroid"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_carguero_id2"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_origen"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"json[]"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_destino"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"json[]"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_cerrado"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### **emp\_terminal**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22ter_id%22%3A-%22number%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"ter_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ter_nombre"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### **emp\_ordenservicio**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22ose_id%22%3A-%22number%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"ose_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ose_montofinal"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"float"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ose_ultimo_carprog_embarque"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ose_ultima_fecha_embarque"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"datetime"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# 🗃 **Lógica en pseudo-código**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-if-%21cap_id--%3E-error-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`if !cap_id -> errorcarguero = SELECT carguero WHERE cap_idterminales = SELECT id, nombre FROM terminalmapaTerminal = map(id => nombre)carguero.origenes = decodeJSON(carguero.origen)carguero.destinos = decodeJSON(carguero.destino)escalas = unique(origenes + destinos)convertir ids a "<id> <nombre>" usando mapaTerminalordenes = SELECT OS WHERE os.ose_ultimo_carprog_embarque = cap_idcarguero.cantidad = count(ordenes)carguero.suma = sum(ordenes.montofinal)return carguero`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>

# query/validar_crear_ruta - [funct_validar_crear_ruta_module]

Path: /var/www/html/moradex-qa/app/Models/GeneralesApp.php

## 🧾 **Descripción**

Servicio que valida si un usuario o un terminal tienen permiso para acceder a un módulo específico.  
Actualmente, debido a un `return` colocado antes de la validación, **el servicio siempre devuelve acceso permitido**, pero la lógica diseñada incluye listas de usuarios y terminales autorizados.

---

# 🚀 **Endpoint**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-%2Fvalidar-crear-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`POST /validar-crear-ruta-<span class="hljs-keyword">module</span>`</div></div>---

# 📥 **Request Body**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22username%22%3A-%22strin"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"username"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"terminalId"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### Parámetros

<div class="_tableContainer_1rjym_1" id="bkmrk-campo-tipo-obligator"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="928" data-start="708"><thead data-end="752" data-start="708"><tr data-end="752" data-start="708"><th data-col-size="sm" data-end="716" data-start="708">Campo</th><th data-col-size="sm" data-end="723" data-start="716">Tipo</th><th data-col-size="sm" data-end="737" data-start="723">Obligatorio</th><th data-col-size="sm" data-end="752" data-start="737">Descripción</th></tr></thead><tbody data-end="928" data-start="798"><tr data-end="859" data-start="798"><td data-col-size="sm" data-end="809" data-start="798">username</td><td data-col-size="sm" data-end="818" data-start="809">string</td><td data-col-size="sm" data-end="823" data-start="818">Sí</td><td data-col-size="sm" data-end="859" data-start="823">DNI o identificador del usuario.</td></tr><tr data-end="928" data-start="860"><td data-col-size="sm" data-end="873" data-start="860">terminalId</td><td data-col-size="sm" data-end="882" data-start="873">string</td><td data-col-size="sm" data-end="887" data-start="882">Sí</td><td data-col-size="sm" data-end="928" data-start="887">ID del terminal desde el cual accede.</td></tr></tbody></table>

</div></div>---

# 🔐 **Seguridad**

Sin validación interna adicional.  
Generalmente depende del middleware aplicado al endpoint.

---

# 🧠 **Flujo del Servicio (resumen real)**

> **IMPORTANTE:** El servicio retorna inmediatamente acceso permitido debido al primer `return`.

### Flujo implementado (real):

1. Obtiene:
    
    
    - `username` (usuario)
    - `terminalId` (terminal)
2. Retorna:
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.8711%;"></col></colgroup><tbody><tr><td>`{ <span class="hljs-attr">valor:</span> <span class="hljs-literal">true</span>, <span class="hljs-attr">msn:</span> <span class="hljs-string">"Puede acceder al modulo"</span> }`</td></tr></tbody></table>
    
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>

Esto interrumpe el método, haciendo que la lógica posterior nunca se ejecute.

---

### Flujo diseñado (pero actualmente inactivo por el return anticipado)

1. Verificar si el usuario está en la lista de usuarios permitidos:
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-keyword">if</span> (<span class="hljs-title function_ invoke__">in_array</span>(<span class="hljs-variable">$user</span>, <span class="hljs-variable">$usuarios_permitidas</span>))    acceso permitido`</div></div>
2. Verificar si el terminal está en la lista de terminales permitidas:
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-keyword">if</span> (<span class="hljs-title function_ invoke__">in_array</span>(<span class="hljs-variable">$terminal</span>, <span class="hljs-variable">$terminales_permitidas</span>))    acceso permitido`</div></div>
3. Si no coincide con ninguna lista → acceso denegado (pero el código está incompleto y termina con `retur`).

---

# 📤 **Response – Ejemplo (actual)**

### ✔️ Acceso permitido (siempre)

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22valor%22%3A-true%2C-%22ms"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"valor"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Puede acceder al modulo"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# ❗ **Posibles Errores (según la lógica esperada)**

> *Actualmente NO se producen porque la función retorna antes de validar.*

### 1. Usuario NO autorizado

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22valor%22%3A-false%2C-%22m"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"valor"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Usuario no autorizado"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### 2. Terminal NO autorizada

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22valor%22%3A-false%2C-%22m-1"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"valor"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Terminal no autorizada"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### 3. Petición incompleta

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22valor%22%3A-false%2C-%22m-2"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"valor"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Datos insuficientes (username o terminalId faltantes)"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# 📚 **Schemas (estructuras usadas)**

### Request

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22username%22%3A-%22strin-1"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"username"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"terminalId"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### Response

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22valor%22%3A-%22boolean%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"valor"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"boolean"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# 🗃 **Lógica en pseudo-código**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-user-%3D-post.username"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`user = POST.usernameterminal = POST.terminalIdreturn { valor: true, msn: "Puede acceder al modulo" }  // retorna siempreusuarios_permitidos = [...]terminales_permitidas = [...]if user in usuarios_permitidos:    return acceso permitidoif terminal in terminales_permitidas:    return acceso permitidoreturn acceso denegado`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>

# 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**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-%2Fpendientes"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`POST /pendientes`</div></div>---

# 📥 **Request Body**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22cap_id%22%3A-%22number%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"cap_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"pagina"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"guia"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string (opcional)"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### Parámetros

<div class="_tableContainer_1rjym_1" id="bkmrk-campo-tipo-obligator"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1084" data-start="807"><thead data-end="851" data-start="807"><tr data-end="851" data-start="807"><th data-col-size="sm" data-end="815" data-start="807">Campo</th><th data-col-size="sm" data-end="822" data-start="815">Tipo</th><th data-col-size="sm" data-end="836" data-start="822">Obligatorio</th><th data-col-size="sm" data-end="851" data-start="836">Descripción</th></tr></thead><tbody data-end="1084" data-start="897"><tr data-end="962" data-start="897"><td data-col-size="sm" data-end="906" data-start="897">cap\_id</td><td data-col-size="sm" data-end="915" data-start="906">number</td><td data-col-size="sm" data-end="922" data-start="915">✔ Sí</td><td data-col-size="sm" data-end="962" data-start="922">ID de la unidad de carga programada.</td></tr><tr data-end="1018" data-start="963"><td data-col-size="sm" data-end="972" data-start="963">pagina</td><td data-col-size="sm" data-end="981" data-start="972">number</td><td data-col-size="sm" data-end="988" data-start="981">✔ Sí</td><td data-col-size="sm" data-end="1018" data-start="988">Número de página a listar.</td></tr><tr data-end="1084" data-start="1019"><td data-col-size="sm" data-end="1026" data-start="1019">guia</td><td data-col-size="sm" data-end="1035" data-start="1026">string</td><td data-col-size="sm" data-end="1042" data-start="1035">✘ No</td><td data-col-size="sm" data-end="1084" data-start="1042">Filtra por número de guía del cliente.</td></tr></tbody></table>

</div></div>---

# 🔐 **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:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-select-%28varios-campo"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-keyword">SELECT</span> (varios campos)<span class="hljs-keyword">FROM</span> emp_ordenservicio<span class="hljs-keyword">WHERE</span> ose_id <span class="hljs-keyword">IN</span> (ose_ids)<span class="hljs-keyword">AND</span> (opcional) ose_nroguiacliente = guia<span class="hljs-keyword">OFFSET</span> (pagina - <span class="hljs-number">1</span>) * <span class="hljs-number">15</span><span class="hljs-keyword">LIMIT</span> <span class="hljs-number">15</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>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**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-true%2C-%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Lista de ordenes"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"data"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>    <span class="hljs-punctuation">{</span>      <span class="hljs-attr">"ose_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">202525</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"fecha"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2025-02-15 10:30:00"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"monto"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">45.50</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"guia"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"GUIA-882233"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"remitente"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Carlos Gómez"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"destinatario"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Empresa ABC"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"tipo_pago"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"CR"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"origen"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"LIMA"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"destino"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"AREQUIPA"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"ruta"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"LIM - AQP"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"cap_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">33112</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"contenido"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"10 CAJA, 2 SOBRE"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"cant_paq"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">5</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"cant_total"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">12</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"desembarque_guia"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"SIN GUIA"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"usuario"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"jperez"</span>    <span class="hljs-punctuation">}</span>  <span class="hljs-punctuation">]</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# ❗ **Posibles Errores**

### 1. No envía `cap_id`

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Es obligatorio enviar un cap_id"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### 2. No hay embarques

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C--1"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Aun nó se ha embarcado nada en esta unidad."</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### 3. No hay órdenes

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C--2"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"No ha embarcado nada aun"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### 4. No hay desembarques pendientes

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C--3"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"No hay desembarques pendientes"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# 📚 **Schemas (estructuras usadas)**

### **emp\_embarque\_historial**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22emb_ose_id%22%3A-%22num"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"emb_ose_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"emb_estado_guia"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"emb_cant_paquetes_embarcados"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"emb_cant_paquetes_total"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### **emp\_desembarque\_historial**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22des_ose_id%22%3A-%22num"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"des_ose_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"des_estado_guia"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"des_cant_paquetes_desembarcados"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"des_cant_paquetes_total"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### **emp\_ordenservicio**

Campos usados:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22ose_id%22%3A-%22number%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"ose_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ose_fhpreferenciapartida"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"datetime"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ose_nroguiacliente"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ose_remiteempresa"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ose_destinaempresa"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ose_servpagotipo"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ose_termorigenatencion"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ose_termdestinoentrega"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ose_estadoPago"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### **emp\_os\_detalle**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22osd_osid%22%3A-%22numbe"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"osd_osid"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"osd_tipopreciomanual"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cantidad"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### **emp\_atributos**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22valor%22%3A-%22string%22%2C"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"valor"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"abreviatura"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### **emp\_persona**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22documento%22%3A-%22stri"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"documento"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"nombre"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# 🗃 **Lógica en pseudo-código**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-if-%21cap_id--%3E-error-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`if !cap_id -> errorembarques = SELECT embarques WHERE cap_id = inputif empty -> errordesembarques = SELECT desembarques WHERE cap_id = inputose_ids = embarques.ose_idordenes = SELECT OS WHERE ose_id in ose_ids FILTER guia IF EXISTS PAGINACIONif empty -> errordetalles = SELECT SUM(cantidad), tipo FROM emp_os_detalle WHERE ose_id in ose_ids GROUP BY ose_id,tipoatributos = SELECT mapa tipo_pago -> abreviaturaterminales = SELECT terminal_id -> nombre, aliasbuild lista:    para cada OS:        calcular paquetes pendientes        si 0 → excluir        traducir tipo_pago        generar ruta origen/destino        agregar contenido y totalesif lista vacía -> “No hay desembarques pendientes”buscar nombres remitente en emp_personareturn lista final`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>