# Obtiene descarga Renovación de contrato (1,2,3,4,5,6,7,8) - [getRenovacionContrato]

## 🧾 **Descripción**

*Valida si un trabajador tiene pendiente la descarga de su **renovación de contrato**, lo cual puede bloquear el registro de marcaciones o solicitudes dentro del aplicativo.*  
*El servicio evalúa fechas, estado del trabajador y el registro interno en base MySQL donde se guarda el historial de descargas realizadas.*

---

# 🚀 **Endpoint**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-get-%2Fget-renovacion-"><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);">**`<span class="hljs-keyword">GET</span> /<span class="hljs-keyword">get</span>-renovacion-contrato/{empleado}`**</span></div></div>> <span style="color: rgb(224, 62, 45);">**`{empleado}`**</span> corresponde al código del empleado (Employee.name en ERPNext).

---

# 🔐 **Seguridad**

- Requiere que el cliente esté autenticado (según arquitectura de la app).
- Accede a ERP (Frappe) mediante un servicio interno (<span style="color: rgb(224, 62, 45);">**`dbErp`**</span>).

---

# 📥 **Parámetros**

<div class="_tableContainer_1rjym_1" id="bkmrk-par%C3%A1metro-tipo-reque"><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="1058" data-start="899"><thead data-end="945" data-start="899"><tr data-end="945" data-start="899"><th data-col-size="sm" data-end="911" data-start="899">Parámetro</th><th data-col-size="sm" data-end="918" data-start="911">Tipo</th><th data-col-size="sm" data-end="930" data-start="918">Requerido</th><th data-col-size="sm" data-end="945" data-start="930">Descripción</th></tr></thead><tbody data-end="1058" data-start="992"><tr data-end="1058" data-start="992"><td data-col-size="sm" data-end="1003" data-start="992">empleado</td><td data-col-size="sm" data-end="1012" data-start="1003">string</td><td data-col-size="sm" data-end="1017" data-start="1012">Sí</td><td data-col-size="sm" data-end="1058" data-start="1017">Código único del empleado en ERPNext.</td></tr></tbody></table>

</div></div>---

# 📤 **Responses**

### ✔️ 200 – No corresponde validar renovación (fuera de fecha)

El proceso solo se ejecuta si **día &gt;= 26**.  
Si es antes, devuelve:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--4"><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-%22status%22%3A-true%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">"status"</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">"No es el día correcto para la renovación de contrato"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

### ✔️ 200 – Validación NO necesaria (no aplica por antigüedad)

Si el empleado ingresó después del mes previo:

<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-%22status%22%3A-true%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">"status"</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">"Se ha descargado el contrato de trabajo"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

### ❌ 200 – Debe descargar el contrato de renovación (pendiente)

El empleado tiene renovación generada y habilitada, pero **no tiene registro de descarga**:

<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-%22status%22%3A-false%2C-%22" 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">"status"</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">"Para poder registrar su marcación o realizar alguna solicitud, descargar su renovación de contrato"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

### ✔️ 200 – Renovación ya descargada

La base MySQL registra descarga previa:

<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-%22status%22%3A-true%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">"status"</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">"Se ha descargado el contrato de trabajo"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

### ✔️ 200 – Error controlado

Ante cualquier excepción:

<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-%22status%22%3A-true%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">"status"</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">"Se ha descargado el contrato de trabajo"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

# 🧩 **Flujo del Servicio**

1. Verifica el **día actual**
    
    
    - Si día &lt; 26 → no corresponde validar
2. Obtiene datos del empleado desde ERP (`fecha_de_ingreso_real`)
3. Calcula:
    
    
    - Último día del mes anterior
    - Mes actual (texto)
4. Si el ingreso del empleado es **anterior al último día del mes previo**, aplica validación.
5. Consulta en ERP:
    
    
    - Solicitudes de renovación para este empleado
    - Con criterios:
        
        
        - Mes
        - Año
        - Código del empleado
        - `renueva = "Si"`
        - documento validado
6. Si tiene renovación pendiente:
    
    
    - Consulta base MySQL2 → tabla `historial_procesos_app`
    - Busca registro del proceso `descargaContratoRenovacion`
    - Si no existe → debe descargar renovación
7. Si ya está registrado → permitir normal funcionamiento.

---

# 📚 **Consultas utilizadas**

### A. Obtener datos del empleado

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--15"><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-select-fecha_de_ingr" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-keyword">SELECT</span> fecha_de_ingreso_real<span class="hljs-keyword">FROM</span> `tabEmployee`<span class="hljs-keyword">WHERE</span> name <span class="hljs-operator">=</span> {empleado}`</td></tr></tbody></table>

### B. Consulta de renovaciones

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-select-doc.name-from"><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> doc.name<span class="hljs-keyword">FROM</span> `tabSolicitud de Renovaciones` doc<span class="hljs-keyword">LEFT</span> <span class="hljs-keyword">JOIN</span> `tabTrabajadores pendiete de renovar` tab <span class="hljs-keyword">ON</span> doc.name <span class="hljs-operator">=</span> tab.parent<span class="hljs-keyword">WHERE</span> doc.data_12 <span class="hljs-operator">=</span> {mes}  <span class="hljs-keyword">AND</span> doc.año <span class="hljs-operator">=</span> {<span class="hljs-keyword">year</span>}  <span class="hljs-keyword">AND</span> tab.codigo <span class="hljs-operator">=</span> {empleado}  <span class="hljs-keyword">AND</span> tab.renueva <span class="hljs-operator">=</span> <span class="hljs-string">'Si'</span>  <span class="hljs-keyword">AND</span> doc.estado_de_documento <span class="hljs-operator">=</span> <span class="hljs-string">'Validado'</span>`</td></tr></tbody></table>

</div></div></div></div>
### C. Validación de descarga

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-select-%2A-from-histor"><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> <span class="hljs-operator">*</span><span class="hljs-keyword">FROM</span> historial_procesos_app<span class="hljs-keyword">WHERE</span> empleado <span class="hljs-operator">=</span> {empleado}  <span class="hljs-keyword">AND</span> proceso <span class="hljs-keyword">IN</span> (<span class="hljs-string">'descargaContratoRenovacion'</span>)`</td></tr></tbody></table>

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

# 🧪 **Ejemplo de consumo (HTTP)**

### Request:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-get-%2Fget-renovacion--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">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"><span style="color: rgb(224, 62, 45);">**`<span class="hljs-keyword">GET</span> <span class="hljs-operator">/</span><span class="hljs-keyword">get</span><span class="hljs-operator">-</span>renovacion<span class="hljs-operator">-</span>contrato<span class="hljs-operator">/</span>EMP<span class="hljs-number">-00045</span>`**</span></div></div>### Response (pendiente):

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22status%22%3A-false%2C-%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">"status"</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">"Para poder registrar su marcación o realizar alguna solicitud, descargar su renovación de contrato"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

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