# Documento de Ingresos (Formulario Ficha de Personal (1)) - [formFichaPersonal]

### 🧾 Descripción

*Registra la **Ficha Personal** del trabajador, permitiendo actualizar:*

- Datos de contacto de emergencia
- Información del cónyuge/conviviente según estado civil
- Registro del proceso en el módulo *historial\_procesos\_app*

*Es un servicio utilizado por la aplicación para completar los datos obligatorios que el trabajador debe registrar para continuar con otros procesos internos.*

*Este servicio actualiza directamente el documento **Employee** en el ERP.*

---

# 🚀 Endpoint

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-%2Fform-ficha-per"><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 /form-ficha-personal`**</span></div></div>---

# 📥 Request Body (JSON)

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22empleado%22%3A-%22emp-0"><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">"empleado"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"EMP-0001"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"contactoEmergencia"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>    <span class="hljs-attr">"nombreCompleto"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Juan Perez"</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"parentesco"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Hermano"</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"telefono"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"987654321"</span>  <span class="hljs-punctuation">}</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"estadoCivil"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>    <span class="hljs-attr">"nombreCompleto"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Ana Torres"</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"fechaNacimiento"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"1990-01-01"</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"ocupacion"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Administradora"</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"centroTrabajo"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Empresa X"</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"direccion"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Av. Los Olivos 123"</span>  <span class="hljs-punctuation">}</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"datosFamiliares"</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>Los campos **contactoEmergencia** y **estadoCivil** vienen como JSON string y se decodifican dentro del servicio.

---

# 🔐 Seguridad

- Requiere autenticación interna ERP vía `ServiceErp()`.
- Solo accesible para usuarios autenticados en la app.
- Valida que el Employee exista antes de actualizar.

---

# 🧠 Flujo del Servicio (Paso a Paso)

### 1️⃣ Validaciones iniciales

- Verifica que **estadoCivil** exista.
- Verifica que **contactoEmergencia** exista.
- Si faltan datos, devuelve error.

### 2️⃣ Obtiene información del empleado

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-get-%2Fresource%2Femploy"><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);">`GET /resource/Employee/{empleado}`</span>**</div></div>Valida que el empleado exista y revisa si tiene estado civil registrado en el ERP:

- Si es **Casado/a** o **Conviviente**, revisa que toda la información del cónyuge esté completa.

### 3️⃣ Determina nuevo estado civil

Si el ERP no tiene estado civil registrado:

- Si `estadoCivil["nombreCompleto"]` existe → **Casado/a**
- Si no existe → **Soltero/a**

### 4️⃣ Construye el body para actualizar Employee

Campos incluidos:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22person_to_be_cont"><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">"person_to_be_contacted"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"..."</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"relation"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"..."</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"emergency_phone_number"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"..."</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"nombre_completo_conyugue"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"..."</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"fecha_de_nacimiento_conyugue"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"..."</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"ocupación_conyugue"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"..."</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"centro_de_trabajo_conyugue"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"..."</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"dirección_actual_conyugue"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"..."</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"estado_civil_personal"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Casado/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>Todos los textos se envían en mayúsculas.

### 5️⃣ Actualiza Employee

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-put-%2Fresource%2Femploy"><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);">**`PUT /resource/Employee/{empleado}`**</span></div></div>### 6️⃣ Registra proceso de Ficha Personal

Inserta un registro en MySQL (`historial_procesos_app`) con:

- proceso = "registerFichaPersonal"
- fecha actual
- empleado

Sirve para el tracking de documentos obligatorios.

### 7️⃣ Respuesta exitosa

Devuelve:

<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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Se registró correctamente"</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 200 – Ejemplo

### ✔️ Caso exitoso

<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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Se registró correctamente"</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>### ❌ Error: falta información del estado civil

<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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"No tiene su información de estado civil, debe comunicarse con Soporte"</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>### ❌ Error: datos incompletos del cónyuge

<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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Complete la información del cónyugue o conviviente. Información faltante: fechaNacimiento"</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>### ❌ Error al actualizar en el ERP

<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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Ocurrió un error al actualizar la información del trabajador."</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"data"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span> ...respuestaERP... <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 Detallados

<div class="_tableContainer_1rjym_1" id="bkmrk-error-descripci%C3%B3n-mi"><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="4321" data-start="3819"><thead data-end="3842" data-start="3819"><tr data-end="3842" data-start="3819"><th data-col-size="sm" data-end="3827" data-start="3819">Error</th><th data-col-size="md" data-end="3842" data-start="3827">Descripción</th></tr></thead><tbody data-end="4321" data-start="3866"><tr data-end="3932" data-start="3866"><td data-col-size="sm" data-end="3888" data-start="3866">Missing estadoCivil</td><td data-col-size="md" data-end="3932" data-start="3888">No se envió estado civil o JSON inválido</td></tr><tr data-end="4014" data-start="3933"><td data-col-size="sm" data-end="3962" data-start="3933">Missing contactoEmergencia</td><td data-col-size="md" data-end="4014" data-start="3962">Falta información mínima para completar la ficha</td></tr><tr data-end="4088" data-start="4015"><td data-col-size="sm" data-end="4040" data-start="4015">Employee no encontrado</td><td data-col-size="md" data-end="4088" data-start="4040">GET Employee/{empleado} no encontró registro</td></tr><tr data-end="4199" data-start="4089"><td data-col-size="sm" data-end="4126" data-start="4089">Información incompleta del cónyuge</td><td data-col-size="md" data-end="4199" data-start="4126">Falta un campo requerido cuando el estado civil es casado/conviviente</td></tr><tr data-end="4247" data-start="4200"><td data-col-size="sm" data-end="4225" data-start="4200">Error de actualización</td><td data-col-size="md" data-end="4247" data-start="4225">PUT Employee falló</td></tr><tr data-end="4321" data-start="4248"><td data-col-size="sm" data-end="4276" data-start="4248">Error registrando proceso</td><td data-col-size="md" data-end="4321" data-start="4276">Inserción en historial\_procesos\_app falló</td></tr></tbody></table>

</div></div>---

# 📚 Schemas (Estructuras Utilizadas)

### Employee (GET y PUT)

Campos usados:

<table border="1" id="bkmrk-person_to_be_contact" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-attribute">person_to_be_contacted</span>relationemergency_phone_numbernombre_completo_conyuguefecha_de_nacimiento_conyugueocupación_conyuguecentro_de_trabajo_conyuguedirección_actual_conyugueestado_civil_personal`</td></tr></tbody></table>

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--7"><div class="overflow-y-auto p-4" dir="ltr"></div></div>### historial\_procesos\_app (INSERT)

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-usuario-empleado-pro"><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-attribute">usuario</span>empleadoprocesofechaestado`</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-empleado-%3D-request.e"><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>`empleado = request.empleadocontacto = json_decode(request.contactoEmergencia)civil = json_decode(request.estadoCivil)<span class="hljs-keyword">if</span> civil <span class="hljs-keyword">is</span> <span class="hljs-literal">null</span> or empty:    <span class="hljs-keyword">return</span> error(<span class="hljs-string">"No tiene información de estado civil"</span>)<span class="hljs-keyword">if</span> contacto <span class="hljs-keyword">is</span> <span class="hljs-literal">null</span>:    <span class="hljs-keyword">return</span> error(<span class="hljs-string">"Falta información de contacto de emergencia"</span>)employee = GET Employee/{empleado}<span class="hljs-keyword">if</span> civil.previous == Casado or Conviviente:    validar campos completos de cónyugenewCivil = employee.estadoCivil != <span class="hljs-string">""</span> ? employee.estadoCivil :           (civil.nombreCompleto ? <span class="hljs-string">"Casado/a"</span> : <span class="hljs-string">"Soltero/a"</span>)bodyPUT = construir campos del contacto + cónyugeupdate = PUT Employee/{empleado}<span class="hljs-keyword">if</span> update.ok:    insertar registro en historial_procesos_app    <span class="hljs-keyword">return</span> success<span class="hljs-keyword">else</span>:    <span class="hljs-keyword">return</span> error(<span class="hljs-string">"Ocurrió un error al actualizar"</span>)`</td></tr></tbody></table>

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