# Verificar *** - [verifyDownloadSalary]

## 🧾 **Descripción**

*Valida si un trabajador ha descargado su boleta de pago correspondiente al mes anterior.*  
*La validación solo aplica del **día 1 al 7 de cada mes**; fuera de ese rango, se asume automáticamente como validación positiva.*

*El servicio consulta el registro de descargas en la tabla <span style="color: rgb(224, 62, 45);">**`historial_procesos_app`**</span>.*

---

# 🚀 Endpoint

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-%2Fverify-downloa"><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 style="color: rgb(224, 62, 45);">`POST /verify-download-salary`</span>**</div></div>> La ruta final depende de cómo esté configurada en <span style="color: rgb(224, 62, 45);">**`routes/api.php`**</span>.

---

# 🔐 Seguridad

No se valida token en el controlador, pero se recomienda proteger el endpoint detrás de autenticación de la app.

---

# 📥 Request Body

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--3"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div><table border="1" id="bkmrk-%7B-%22employee%22%3A-%22strin" 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">"employee"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"fechaIngreso"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string (YYYY-MM-DD)"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

### Campos 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="1195" data-start="902"><thead data-end="956" data-start="902"><tr data-end="956" data-start="902"><th data-col-size="sm" data-end="918" data-start="902">Campo</th><th data-col-size="sm" data-end="927" data-start="918">Tipo</th><th data-col-size="sm" data-end="941" data-start="927">Obligatorio</th><th data-col-size="md" data-end="956" data-start="941">Descripción</th></tr></thead><tbody data-end="1195" data-start="1012"><tr data-end="1095" data-start="1012"><td data-col-size="sm" data-end="1028" data-start="1012">employee</td><td data-col-size="sm" data-end="1037" data-start="1028">string</td><td data-col-size="sm" data-end="1051" data-start="1037">Sí</td><td data-col-size="md" data-end="1095" data-start="1051">Código del empleado (ID del trabajador).</td></tr><tr data-end="1195" data-start="1096"><td data-col-size="sm" data-end="1112" data-start="1096">fechaIngreso</td><td data-col-size="sm" data-end="1121" data-start="1112">string</td><td data-col-size="sm" data-end="1135" data-start="1121">Sí</td><td data-col-size="md" data-end="1195" data-start="1135">Fecha de ingreso del trabajador en formato `YYYY-MM-DD`.</td></tr></tbody></table>

</div></div>---

# 🧠 Reglas de negocio

1. **Validación por fecha**  
    Si la fecha actual es mayor al día 7 del mes → **no corresponde validación**.
2. Obtiene el **mes anterior** y convierte el número en texto (ej. 01 → Enero).
3. Si <span style="color: rgb(224, 62, 45);">**`fechaIngreso >= primer día del mes actual`**</span>, entonces el trabajador ingresó recientemente → **no se valida descarga**.
4. Consulta en la BD (<span style="color: rgb(224, 62, 45);">**`mysql2.historial_procesos_app`**</span>) si existe un registro:
    
    
    - `proceso = 'NOMINA'`
    - `empleado = <employee>`
    - `month` y `year` del mes anterior
    - Registros con fecha ascendente
5. Si existe registro → sí descargó  
    Si no → debe descargar su boleta pendiente.

---

# 📤 Responses

### 🟦 Caso 1: Fuera del rango de fechas (después del día 7)

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--6"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div><table border="1" id="bkmrk-%7B-%22valor%22%3A-true%2C-%22ms" 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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"No corresponde validación, fuera de fecha."</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

### 🟥 Error: falta fecha de ingreso

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--8"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div><table border="1" id="bkmrk-%7B-%22valor%22%3A-false%2C-%22m" 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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Debe enviar la fecha de ingreso del trabajador"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

### 🟥 Error: falta empleado

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--10"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div><table border="1" id="bkmrk-%7B-%22valor%22%3A-false%2C-%22m-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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Debe enviar el código de empleado del trabajador"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

### 🟦 Caso 2: Ingreso reciente (no se valida)

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--12"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div><table border="1" id="bkmrk-%7B-%22valor%22%3A-true%2C-%22ms-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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"No corresponde validación"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

### 🟩 Caso 3: El trabajador SÍ descargó su boleta

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--14"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div><table border="1" id="bkmrk-%7B-%22valor%22%3A-true%2C-%22ms-2" 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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Si descargó boleta."</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

### 🟥 Caso 4: El trabajador NO descargó su boleta

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--16"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div><table border="1" id="bkmrk-%7B-%22valor%22%3A-false%2C-%22m-2" 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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Tiene pendiente descargar su boleta de pago del mes de <MesTexto> <Año>, descárguelo desde el módulo Boletas de Pago."</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

**Ejemplo:**

<table border="1" id="bkmrk-%7B-%22valor%22%3A-false%2C-%22m-3" 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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Tiene pendiente descargar su boleta de pago del mes de Enero 2025, descárguelo desde el módulo Boletas de Pago."</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

# 🔎 Ejemplo de consumo (curl)

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-curl--x-post-https%3A%2F"><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>`curl -X POST https://midominio.com/api/verify-download-salary \-H <span class="hljs-string">"Content-Type: application/json"</span> \-d <span class="hljs-string">'{"employee":"EMP-001","fechaIngreso":"2023-02-15"}'</span>`</td></tr></tbody></table>

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