Módulo Contratación
- Documento de Ingresos (Subir Documentos de ingresos (1)) - [documentosIngreso]
- Documento de Ingresos (Formulario Ficha de Personal (1)) - [formFichaPersonal]
- Documento de Ingresos (Verificar Registro de Postulación (1)) - [validatePersonalRequirement]
- Documento de Ingresos (Registrar Proceso de Descarga (1)) - [registerProcessApp]
- Documento de Ingresos (Registrar Equipamiento (1)) - [store_equipament]
- Documento de Ingresos (Registrar Proceso de Descarga (1, 2,3,4,5)) - [registerProcessApp]
- Contrato de Trabajo(Url Contrato de trabajo PDF (1)) - [printContractPerDesignation]
Documento de Ingresos (Subir Documentos de ingresos (1)) - [documentosIngreso]
🧾 Descripción
Registra y actualiza los documentos obligatorios de ingreso de un empleado dentro del ERP, así como su información bancaria y de fondo de pensiones.
Este servicio valida la información mínima necesaria antes de actualizar el documento Employee en el ERP.
👉 Es un servicio crítico para el proceso de onboarding, ya que sin este registro el empleado no continúa con otros procesos internos.
🚀 Endpoint
POST /documentos-ingreso
📥 Parámetros de entrada (Request Body)
🔐 Seguridad
Requiere token válido del ERP (la autenticación se maneja internamente mediante ServiceErp()).
🧠 Flujo del Servicio (Resumen Real)
-
Valida que existan campos obligatorios:
-
employee
-
banco
-
fondo_pensiones
-
afiliado_fondo_pensiones (“SI” o “NO”)
-
-
Construye un arreglo con los datos a actualizar:
-
Si el fondo de pensiones es ONP, también actualiza:
-
Si se envían documentos opcionales (DNI, copia de DNI de hijos, CV, certificado de trabajo, etc.), también se agregan al payload.
-
Realiza la actualización del empleado:
-
Devuelve la respuesta del ERP junto con los datos enviados.
📤 Response 200 – Ejemplo
❗ Posibles Errores
1. Falta el employee
2. Falta banco
3. Falta fondo de pensiones
4. Afiliado fondo pensiones inválido
5. Error del ERP al actualizar
📚 Data Model Usado
Employee (PUT)
Campos actualizables:
🗃 Pseudocódigo de la lógica
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
📥 Request Body (JSON)
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
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:
Todos los textos se envían en mayúsculas.
5️⃣ Actualiza Employee
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:
📤 Response 200 – Ejemplo
✔️ Caso exitoso
❌ Error: falta información del estado civil
❌ Error: datos incompletos del cónyuge
❌ Error al actualizar en el ERP
❗ Posibles Errores Detallados
| Error | Descripción |
|---|---|
| Missing estadoCivil | No se envió estado civil o JSON inválido |
| Missing contactoEmergencia | Falta información mínima para completar la ficha |
| Employee no encontrado | GET Employee/{empleado} no encontró registro |
| Información incompleta del cónyuge | Falta un campo requerido cuando el estado civil es casado/conviviente |
| Error de actualización | PUT Employee falló |
| Error registrando proceso | Inserción en historial_procesos_app falló |
📚 Schemas (Estructuras Utilizadas)
Employee (GET y PUT)
Campos usados:
person_to_be_contacted
relation
emergency_phone_number
nombre_completo_conyugue
fecha_de_nacimiento_conyugue
ocupación_conyugue
centro_de_trabajo_conyugue
dirección_actual_conyugue
estado_civil_personal |
historial_procesos_app (INSERT)
🗃 Lógica en pseudo-código
Documento de Ingresos (Verificar Registro de Postulación (1)) - [validatePersonalRequirement]
🧾 Descripción
Este servicio valida si un postulante (que ya es empleado o está en proceso de contratación) cumple con las condiciones necesarias para continuar el proceso de Alta y Requerimiento de Personal.
La validación se basa en:
-
Información del Employee
-
Su postulación (Job Applicant)
-
Su Convocatoria (Job Opening)
-
Su Terminal / Sucursal (Branch)
-
El Requerimiento de Personal asociado a la convocatoria
Este servicio permite determinar si se puede generar su trámite de contratación y qué parámetros corresponden a su modalidad de trabajo y tipo de jornada.
🚀 Endpoint
POST /validate-personal-requirement
📥 Request Body
Parámetros:
-
document: DNI o pasaporte del postulante.
🔐 Seguridad
Requiere autenticación interna hacia el ERP mediante dbErp() y rutas definidas en APICAPACITACION.
🧠 Flujo del Servicio (Resumen)
1️⃣ Validar si el documento pertenece a un Employee
Consulta en tabEmployee:
-
Si no existe → ❌ devuelve error.
2️⃣ Buscar su postulación más reciente (Job Applicant)
Consulta:
-
Si no tiene postulación → ❌ retorna error.
3️⃣ Obtener información de la Convocatoria (Job Opening)
Consulta:
-
Determina:
-
Tipo de jornada / modalidad de la convocatoria.
-
Sucursal asignada al postulante.
-
4️⃣ Obtener información de la Sucursal (Branch)
Consulta:
-
Determina la zona RRHH responsable.
-
Según la zona, define qué tabla usar para el Requerimiento de Personal:
-
Lima →
tabRequerimiento de Personal Lima -
Otros →
tabRequerimiento de Personal
-
5️⃣ Obtener el Requerimiento de Personal asociado a la convocatoria
-
Si no existe RP → ❌ el proceso de contratación debe repetirse.
6️⃣ Respuesta exitosa
Devuelve:
-
Tipo de jornada
-
Modalidad del puesto
-
Código de convocatoria
📤 Response 200 – Ejemplo
❗ Posibles Errores
1. No existe empleado con el documento
2. No existen postulaciones válidas
3. Convocatoria no encontrada
4. Sucursal/Terminal inexistente
5. Requerimiento de Personal no creado
6. Error del servidor
📚 Esquemas utilizados
Employee
Campos consultados:
Job Applicant
Job Opening
Branch
Requerimiento de Personal
🗃 Lógica en Pseudocódigo
Documento de Ingresos (Registrar Proceso de Descarga (1)) - [registerProcessApp]
🧾 Descripción
Registra en la tabla historial_procesos_app cada evento o proceso realizado por un usuario dentro de la aplicación móvil.
Además, dependiendo del tipo de proceso, realiza validaciones adicionales como:
-
Validación de renovación de contrato
-
Validación de cambio de modalidad
-
Creación automática de usuario conductor en sistema externo
-
Validación de existencia del empleado en ERP
Este servicio funciona como logger centralizado de acciones críticas del trabajador.
🚀 Endpoint
POST /register-process-app
📥 Parámetros de Entrada (Body)
🔐 Seguridad
-
Acceso interno del sistema
-
Requiere conexión válida a BD secundaria (
mysql2) -
Valida datos contra API ERP mediante
dbErpyServiceErp
🧠 Flujo del Servicio (Resumen Real)
1️⃣ Obtiene parámetros principales del request:
-
usuario
-
empleado
-
agencia
-
lat/long
-
proceso
-
month / year
2️⃣ Si el proceso es descargaContratoReingreso
-
Ejecuta validación de renovación del contrato:
-
Ejecuta validación de cambio de modalidad:
3️⃣ Si el proceso es descargaContratoTrabajo
a) Obtiene datos del empleado en el ERP
(Documento, sucursal, nombre y puesto)
b) Si el puesto contiene la palabra CONDUCTOR
El sistema crea un usuario conductor en un sistema externo:
Cualquier error en este paso retorna:
4️⃣ Inserta el registro del proceso en historial_procesos_app
Campos insertados:
| Campo | Descripción |
|---|---|
| usuario | Usuario que ejecuta el proceso |
| empleado | Código del empleado |
| agencia | ID de la agencia |
| latitude | Latitud |
| longitude | Longitud |
| proceso | Nombre del proceso ejecutado |
| fecha | Fecha y hora actual |
| estado | 1 (registrado) |
| month | Mes |
| year | Año |
5️⃣ Devuelve respuesta exitosa
📤 Respuestas
✔ 200 – Éxito
❗ Error al insertar registro
❗ Empleado no encontrado
❗ Error de creación de usuario conductor
📚 Estructuras utilizadas
Tabla: historial_procesos_app
ERP: Employee
Campos usados:
🗃 Lógica en Pseudocódigo
Documento de Ingresos (Registrar Equipamiento (1)) - [store_equipament]
🧾 Descripción
Registra o actualiza las tallas de equipamiento de EPP (botas, polo, pantalón) para un postulante, validando previamente:
-
Que el documento exista en el sistema.
-
Que las tallas enviadas sean válidas según los rangos permitidos.
-
Que el postulante exista.
-
Que ya tenga o no un registro previo en Triaje de Postulante 2, para decidir entre crear (POST) o actualizar (PUT).
Es un servicio que integra:
-
Validaciones locales.
-
Consulta de postulantes.
-
Inserción o actualización en el ERP vía ServiceErp().
🚀 Endpoint
POST /store-equipament
🔐 Seguridad
Requiere autenticación interna contra el ERP mediante:
-
ServiceErp() -
searchPostulanteByDocument()
No hace validaciones de token en el controlador; se maneja internamente por los métodos usados.
🧠 Flujo del Servicio (explicación real)
-
Lee los parámetros enviados en la petición:
-
documento
-
botas
-
polo
-
pantalon
-
-
Valida la estructura y tallas permitidas:
Elemento Tallas permitidas botas 36–45 polo S, M, L, XL pantalón S, M, L, XL -
Busca al postulante por documento:
Llama a:Si no existe → retorna error.
-
Busca si ya existe un registro de triaje activo en el ERP:
GET
/resource/Triaje de Postulante 2
con filtros: -
Dependiendo del resultado:
-
No existe registro → crea uno (POST)
-
Sí existe → actualiza el existente (PUT)
-
-
Realiza el POST o PUT correspondiente hacia el ERP.
-
Si ERP devuelve error, intenta decodificar
_server_messagespara obtener error real del ERP. -
Retorna respuesta final indicando éxito o error.
📥 Request Body
Ejemplo:
📤 Response 200 – Ejemplos
✔️ Registro/Actualización exitosa
❌ Documento no enviado
❌ Talla inválida
❌ Postulante no encontrado
❌ Error del ERP
❗ Posibles Errores del Servicio
| Tipo | Ejemplo |
|---|---|
| Documento no enviado | "Falta enviar el documento" |
| Talla no válida | "Ingrese una talla de botas válida" |
| Postulante no encontrado | respuesta directa del servicio searchPostulanteByDocument |
| Error al crear/actualizar en ERP | Mensaje del _server_messages o mensaje genérico |
| Error inesperado | Devuelve el error capturado del ERP |
🗃 ERP: Documentos involucrados
Triaje de Postulante 2 (GET / POST / PUT)
Campos usados:
| Campo | Tipo |
|---|---|
| documento | string |
| botas | int |
| polo | string |
| pantalon | string |
| name | string (clave para PUT) |
🧩 Lógica en Pseudocódigo
Documento de Ingresos (Registrar Proceso de Descarga (1, 2,3,4,5)) - [registerProcessApp]
🧾 Descripción
Registra en la tabla historial_procesos_app todas las acciones (procesos) que el usuario realiza dentro del aplicativo móvil, como descargas de documentos, validación de contratos, marcaciones, entre otros.
Antes de registrar el proceso:
-
Valida si corresponde un proceso de Reingreso o Renovación de Contrato.
-
Procesa el registro especial para Conductores, creando su usuario en el sistema empresarial cuando descarga su contrato.
-
Guarda la información del evento (geolocalización, mes, año, proceso, etc.) en la base de datos MySQL2.
Este servicio constituye una pieza clave para los módulos de:
-
Marcación
-
Documentos obligatorios
-
Control de procesos del trabajador
-
Contratos / renovaciones
🚀 Endpoint
POST /register-process-app
📥 Request Body
🔐 Seguridad
-
Requiere token válido para consumir servicios internos del ERP.
-
Conexión interna a MySQL2 para registrar procesos.
-
Algunos procesos hacen integración con APIs externas (como Empresarial → creación de usuario conductor).
🧠 Flujo del Servicio (resumen real)
1️⃣ Obtiene los parámetros enviados desde la App
Usuario, empleado, agencia, geolocalización, proceso, mes y año.
2️⃣ Si el proceso es descargaContratoReingreso
Ejecuta:
-
validateProcessContractRenovation()
-
validateProcessContractChangeModality()
Estas funciones validan:
-
Si el empleado tiene renovación pendiente
-
Si debe descargar documentos obligatorios
-
Si existen cambios de modalidad pendientes
3️⃣ Si el proceso es descargaContratoTrabajo
-
Obtiene datos del empleado desde ERP:
-
DNI (passport_number)
-
Sucursal
-
Nombre completo
-
Puesto (designation)
-
-
Si el puesto contiene
"CONDUCTOR", registra el usuario en el sistema empresarial:
Enviando:
4️⃣ Inserta el proceso en la tabla MySQL:
Tabla: historial_procesos_app
Campos guardados:
-
usuario
-
empleado
-
agencia
-
latitude
-
longitude
-
proceso
-
fecha
-
estado
-
month
-
year
5️⃣ Retorna la respuesta del proceso
📤 Response 200 – Ejemplo
❗ Posibles Errores
1. No se puede registrar el proceso en MySQL
2. No se encuentra el empleado en el ERP
3. Error creando usuario conductor
4. Error genérico
📚 Schemas – Objetos usados
🗂 Employee (GET ERP)
Campos usados:
🗂 Registro MySQL – historial_procesos_app
🗃 Lógica en pseudo-código
Contrato de Trabajo(Url Contrato de trabajo PDF (1)) - [printContractPerDesignation]
🧾 Descripción
Genera y descarga el Contrato de Trabajo correspondiente a un empleado, seleccionando de forma automática el formato de contrato correcto según:
-
Tipo de documento del empleado (DNI / PAS / CE)
-
Modalidad laboral (Full time, Part time, Teletrabajo)
-
Tipo de puesto (Ej. Conductor, Vigilante)
-
Número de contratos previos
-
Funciones asociadas al contrato (solo extranjeros)
El servicio determina internamente qué plantilla PDF debe usarse y devuelve el archivo final generado.
Es un servicio interno que consulta múltiples recursos del ERP:
-
Employee
-
Contrato de Trabajo
-
Funciones del Contrato
-
Otros contratos previos
🚀 Endpoint
GET /print-contract-per-designation/{employee}
📥 Parámetros de ruta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| employee | string | Sí | Código único del empleado en ERP |
🔐 Seguridad
Requiere autenticación interna:
-
Consulta ERP vía
dbErp() -
Obtención de PDF vía
PDF::loadView()
🧠 Flujo del Servicio (Resumen Real)
1️⃣ Validación del empleado
Consulta al ERP:
Si no existe → retorna error: "No existe empleado".
2️⃣ Obtiene el contrato activo más reciente
Se buscan contratos con:
-
empleado = employee -
docstatus = 1 -
fecha_de_ingreso_real = fecha_ingreso_empleado -
Ordenado por creación descendente
Si no existe contrato → retorna "No cuenta con Contrato".
3️⃣ Obtiene funciones asociadas (solo extranjeros)
Busca funciones del contrato:
FROM tabtabla_funcion_extranjero
WHERE parent = contrato.name |
Estas funciones se agregan al contrato en el PDF.
4️⃣ Determina el número de contratos previos
Solo aplica a empleados con documento PAS o CE.
Consulta cantidad de contratos registrados después del ingreso real.
Esto permite determinar si el contrato es:
-
Primer contrato
-
Segundo contrato
-
Tercer contrato
-
Etc. (usando arreglo ordinal: primero, segundo, tercero, …)
5️⃣ Selección automática de la plantilla PDF
En base a reglas:
| Condición | Plantilla |
|---|---|
| modalidad_de_trabajo = Teletrabajo | contrato_teletrabajo |
| labor contiene "CONDUCTOR" | contrato_conductor_interprovincial |
| labor = "VIGILANTE" | contrato_full_time_vigilante |
| tipo_doc PAS o CE, primer contrato | contrato_extranjero |
| tipo_doc PAS o CE, más de 1 contrato | contrato_extranjero_mas_de_segundo_contrato |
| tipo_contrato = PART TIME, labor=CALL CENTER ATC | contrato_call_center_part_time |
| tipo_contrato = PART TIME | contrato_part_time |
| tipo_contrato = FULL TIME | contrato_full_time |
El método retorna el PDF con:
📤 Response – Archivo PDF
Retorna directamente la descarga del contrato correspondiente.
Si ocurre algún error, retorna un JSON:
✔️ Empleado válido, pero sin contrato
❌ Empleado no encontrado
❗ Posibles Errores
| Error | Descripción |
|---|---|
| Empleado no existe | No se encontró en tabEmployee |
| No tiene contratos vigentes | No existe Contrato de Trabajo activo |
| Error DB ERP | Respuesta inesperada en dbErp |
| Plantilla no encontrada | Error al cargar vista PDF (muy raro) |
📚 Tablas y Campos Utilizados
Employee (GET)
Campos usados: