# Solicitud de Licencias(Solicitar solicitud de licencia (1)) - [store]

🧾 **Descripción**

*Crea una **Solicitud de Licencias** para un empleado, validando previamente:*

- Tipo de licencia permitido
- Fechas y rangos máximos establecidos por normativa interna
- Archivos obligatorios según el tipo de licencia
- Que el empleado no tenga otra solicitud en borrador

El servicio registra en el ERP un nuevo documento **"Solicitud de Licencias"** si cumple todas las reglas definidas.

---

# 🚀 Endpoint

### **POST /solicitud-licencias/store**

---

# 📥 Request Body – 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="1609" data-start="821"><thead data-end="865" data-start="821"><tr data-end="865" data-start="821"><th data-col-size="sm" data-end="829" data-start="821">Campo</th><th data-col-size="sm" data-end="836" data-start="829">Tipo</th><th data-col-size="sm" data-end="850" data-start="836">Obligatorio</th><th data-col-size="md" data-end="865" data-start="850">Descripción</th></tr></thead><tbody data-end="1609" data-start="910"><tr data-end="954" data-start="910"><td data-col-size="sm" data-end="921" data-start="910">empleado</td><td data-col-size="sm" data-end="930" data-start="921">string</td><td data-col-size="sm" data-end="935" data-start="930">sí</td><td data-col-size="md" data-end="954" data-start="935">ID del empleado</td></tr><tr data-end="1047" data-start="955"><td data-col-size="sm" data-end="970" data-start="955">tip\_licencia</td><td data-col-size="sm" data-end="979" data-start="970">string</td><td data-col-size="sm" data-end="984" data-start="979">sí</td><td data-col-size="md" data-end="1047" data-start="984">Tipo de licencia (validado contra `$this->tipos_licencias`)</td></tr><tr data-end="1106" data-start="1048"><td data-col-size="sm" data-end="1060" data-start="1048">fecha\_ini</td><td data-col-size="sm" data-end="1067" data-start="1060">date</td><td data-col-size="sm" data-end="1072" data-start="1067">sí</td><td data-col-size="md" data-end="1106" data-start="1072">Fecha de inicio de la licencia</td></tr><tr data-end="1159" data-start="1107"><td data-col-size="sm" data-end="1119" data-start="1107">fecha\_fin</td><td data-col-size="sm" data-end="1126" data-start="1119">date</td><td data-col-size="sm" data-end="1131" data-start="1126">sí</td><td data-col-size="md" data-end="1159" data-start="1131">Fecha fin de la licencia</td></tr><tr data-end="1254" data-start="1160"><td data-col-size="sm" data-end="1181" data-start="1160">declaracion\_jurada</td><td data-col-size="sm" data-end="1192" data-start="1181">file/url</td><td data-col-size="sm" data-end="1202" data-start="1192">depende</td><td data-col-size="md" data-end="1254" data-start="1202">Obligatorio si tip\_licencia = "Familiar Enfermo"</td></tr><tr data-end="1351" data-start="1255"><td data-col-size="sm" data-end="1278" data-start="1255">hoja\_hospitalizacion</td><td data-col-size="sm" data-end="1289" data-start="1278">file/url</td><td data-col-size="sm" data-end="1299" data-start="1289">depende</td><td data-col-size="md" data-end="1351" data-start="1299">Obligatorio si tip\_licencia = "Familiar Enfermo"</td></tr><tr data-end="1431" data-start="1352"><td data-col-size="sm" data-end="1358" data-start="1352">uci</td><td data-col-size="sm" data-end="1369" data-start="1358">file/url</td><td data-col-size="sm" data-end="1379" data-start="1369">depende</td><td data-col-size="md" data-end="1431" data-start="1379">Obligatorio si tip\_licencia = "Familiar Enfermo"</td></tr><tr data-end="1517" data-start="1432"><td data-col-size="sm" data-end="1450" data-start="1432">acta\_nacimiento</td><td data-col-size="sm" data-end="1461" data-start="1450">file/url</td><td data-col-size="sm" data-end="1471" data-start="1461">depende</td><td data-col-size="md" data-end="1517" data-start="1471">Obligatorio si tip\_licencia = "Paternidad"</td></tr><tr data-end="1609" data-start="1518"><td data-col-size="sm" data-end="1535" data-start="1518">acta\_defuncion</td><td data-col-size="sm" data-end="1546" data-start="1535">file/url</td><td data-col-size="sm" data-end="1556" data-start="1546">depende</td><td data-col-size="md" data-end="1609" data-start="1556">Obligatorio si tip\_licencia = "Licencia Por Luto"</td></tr></tbody></table>

</div></div>---

# 🧠 Flujo del Servicio (resumen real)

1. **Validación de campos obligatorios**
    
    
    - Verifica empleado, tipo de licencia válido, fecha\_ini y fecha\_fin.
2. **Cálculo de días de licencia**
    
    <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-variable">$dias</span> = (<span class="hljs-keyword">new</span> <span class="hljs-title class_">DateTime</span>(fecha_ini))-><span class="hljs-title function_ invoke__">diff</span>(<span class="hljs-keyword">new</span> <span class="hljs-title class_">DateTime</span>(fecha_fin))->days;`</div></div>
3. **Validaciones específicas por tipo de licencia**
    
    <div class="_tableContainer_1rjym_1"><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="2265" data-start="1954"><thead data-end="2001" data-start="1954"><tr data-end="2001" data-start="1954"><th data-col-size="sm" data-end="1973" data-start="1954">Tipo de licencia</th><th data-col-size="md" data-end="1986" data-start="1973">Requisitos</th><th data-col-size="sm" data-end="2001" data-start="1986">Máximo días</th></tr></thead><tbody data-end="2265" data-start="2056"><tr data-end="2132" data-start="2056"><td data-col-size="sm" data-end="2079" data-start="2056">**Familiar Enfermo**</td><td data-col-size="md" data-end="2127" data-start="2079">declaracion\_jurada, hoja\_hospitalizacion, uci</td><td data-col-size="sm" data-end="2132" data-start="2127">7</td></tr><tr data-end="2177" data-start="2136"><td data-col-size="sm" data-end="2153" data-start="2136">**Paternidad**</td><td data-col-size="md" data-end="2171" data-start="2153">acta\_nacimiento</td><td data-col-size="sm" data-end="2177" data-start="2171">10</td></tr><tr data-end="2227" data-start="2181"><td data-col-size="sm" data-end="2205" data-start="2181">**Licencia Por Luto**</td><td data-col-size="md" data-end="2222" data-start="2205">acta\_defuncion</td><td data-col-size="sm" data-end="2227" data-start="2222">5</td></tr><tr data-end="2265" data-start="2231"><td data-col-size="sm" data-end="2255" data-start="2231">**Licencia sin goce**</td><td data-col-size="md" data-end="2259" data-start="2255">—</td><td data-col-size="sm" data-end="2265" data-start="2259">30</td></tr></tbody></table>
    
    </div></div>
4. **Validación: El empleado no debe tener una solicitud en borrador**
    
    <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-selector-tag">GET</span> <span class="hljs-selector-tag">Solicitud</span> <span class="hljs-selector-tag">de</span> <span class="hljs-selector-tag">Licencias</span><span class="hljs-selector-tag">filters</span>: <span class="hljs-selector-attr">[[<span class="hljs-string">"id_empleado"</span></span>,<span class="hljs-string">"="</span>,empleado],<span class="hljs-selector-attr">[<span class="hljs-string">"docstatus"</span></span>,<span class="hljs-string">"="</span>,0]]`</td></tr></tbody></table>
    
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>
5. **Construcción del body para enviar al ERP**
    
    
    - Incluye campos adicionales dependiendo del tipo de licencia.
6. **Creación de la solicitud**
    
    <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-attribute">POST</span> resource/Solicitud de Licencias`</td></tr></tbody></table>
    
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>
7. **Retorno de respuesta estándar**

---

# 📤 Response 200 – Ejemplo exitoso

<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">"Solicitud de licencias enviada"</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-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>*(El campo data retorna el borrador encontrado, si existía.)*

---

# ⚠️ Posibles Errores

### 1. Falta de parámetros

<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">"Envie el empleado"</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. Tipo de licencia inválido

<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">"Envie el tipo de licencia válido"</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. Fechas incompletas

<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">"Envie la fecha de inicio"</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. Exceso de días permitidos

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22valor%22%3A-false%2C-%22m-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">"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">"El rango de fecha no debe sobrepasar los 7 dias"</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. Documentación obligatoria faltante

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22valor%22%3A-false%2C-%22m-4"><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">"Suba su hoja de hospitalizacion"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### 6. Solicitud duplicada en borrador

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22valor%22%3A-true%2C-%22ms-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">true</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"No se puede crear, Ya tiene una solicitud en borrador"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### 7. Error al registrar en ERP

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22valor%22%3A-false%2C-%22m-5"><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">"Ocurrió un error al crear la Solicitud de Licencias"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"error"</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>---

# 🗃 Lógica en Pseudocódigo

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-if-empleado-vac%C3%ADo-%E2%86%92-"><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 empleado vacío → errorif tipo no permitido → errorif fechas vacías → errordias = fecha_fin - fecha_iniswitch tipo_licencia:    Familiar Enfermo:        validar documentos        validar dias <= 7    Paternidad:        validar acta_nacimiento        validar dias <= 10    Luto:        validar acta_defuncion        validar dias <= 5    Licencia sin goce:        validar dias <= 30buscar borradores:    GET Solicitud de Licencias where empleado & docstatus=0    si existe → errorbody = { empleado, tipo, fechas, documentos }crear solicitud:    POST Solicitud de Licenciassi ERP responde error → retornar errorretornar éxito`</td></tr></tbody></table>

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

# 📚 Estructuras usadas

### **Solicitud de Licencias (POST)**

Campos enviados:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22id_empleado%22%3A-%22st"><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_empleado"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"tip_licencia"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"fecha_ini"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"YYYY-mm-dd"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"fecha_fin"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"YYYY-mm-dd"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"declaracion_jurada"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"url (opcional)"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"hoja_hospitalizacion"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"url (opcional)"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"uci"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"url (optional)"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"acta_nacimiento"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"url (optional)"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"acta_defuncion"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"url (optional)"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

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