Ir al contenido principal

Aplicar convocatoria (1) - [setJobApplicantPerApp]

🧾 Descripción

Registra una nueva solicitud de postulación (Job Applicant) desde la aplicación móvil, validando previamente:

  • Que el usuario autenticado no tenga ya una solicitud creada para el mismo puesto.

  • Que exista un empleado vinculado al email de sesión.

  • Que los campos obligatorios del formulario estén correctamente enviados.

  • Que la información personal del empleado se complemente para generar el registro.

Este servicio crea un documento Job Applicant en el ERP y también registra un Error Log con la data enviada al ERP (para auditoría).


🚀 Endpoint

POST /set-job-applicant-per-app


📥 Parámetros requeridos (Request Body)

{ "email_logued": "string (obligatorio)", "job_title": "string (obligatorio)", "email_id": "string (obligatorio, debe contener @)", "direccion": "string", "adjuntar_copia_de_documento": "string (file url)", "sucursal": "string", "resume_attachment": "string (file url)", "grado_instruccion": "string", "phone_number": "string (opcional)", "country": "string (opcional)", "ciudad": "string (opcional)", "nacionalidad": "string (opcional)", "carrera_profesional": "string (opcional)" }

🔐 Seguridad

  • Requiere usuario autenticado en la app.

  • La comunicación con el ERP se realiza mediante apiService().

  • No requiere token específico del usuario final, es un servicio interno controlado.


🧠 Flujo del Servicio (Explicación Detallada)

1️⃣ Validaciones iniciales

  • Verifica que exista email_logued.

  • Verifica que el email del formulario (email_id) sea válido y contenga “@”.

  • Valida campos obligatorios: dirección, documentos, sucursal, CV, grado de instrucción, job_title.

2️⃣ Verifica si ya existe una postulación previa

Consulta en el ERP:

GET Job Applicant ?limit=None &filters=[["email_logued","=","<email_logued>"], ["job_title","=","<job_title>"]]

Si ya existe un registro → retorna error.

3️⃣ Obtiene datos del empleado

Busca el empleado vinculado al email logueado:

GET Employee ?fields=["*"] &filters=[["user_id","=","<email_logued>"]]

Si no existe → retorna error.

4️⃣ Calcula la edad del postulante

Usando la fecha de nacimiento del empleado mediante DateTime::diff.

5️⃣ Construye el cuerpo del nuevo Job Applicant

Incluye:

  • Datos del empleado (nombres, apellidos, género, fecha de nacimiento, DNI, nacionalidad).

  • Datos enviados desde la app (CV, copia de documento, email, sucursal, carrera, etc.).

  • Estado inicial del proceso: "status": "Open"

  • Email logueado para relacionarlo a la cuenta APP.

6️⃣ Crea el registro Job Applicant

POST Job Applicant BODY: { ...data }

7️⃣ Registra error interno en Error Log (auditoría)

La respuesta del ERP se envía también a: POST Error Log

8️⃣ Retorna la respuesta al cliente

Si se creó correctamente:

{ "valor": true, "msn": "Solicitud insertada correctamente", "data": { ... } }

Si falló:

{ "valor": false, "msn": "Solicitud no se puede insertar correctamente", "data": { ... } }

📤 Respuesta 200 – Ejemplo (Éxito)

{ "valor": true, "msn": "Solicitud insertada correctamente", "data": { "name": "JOB-APP-000123", "status": "Open", "applicant_name": "Juan Pérez", "job_title": "VAC-2025-005", "email_logued": "empleado@empresa.com" } }

❌ Respuesta 200 – Ejemplo (Error)

{ "valor": false, "msn": "Ya existe una solicitud para su usuario", "data": [] }

❗ Posibles Errores Comunes

1. Falta email_logued

{ "valor": false, "msn": "Es necesario el email con el que ha entrado a la app" }

2. Email sin “@”

{ "valor": false, "msn": "El email debe contener @" }

3. Empleado no existe

{ "valor": false, "msn": "Error al traer el empleado asociado" }

4. Solicitud duplicada

{ "valor": false, "msn": "Ya existe una solicitud para su usuario" }

5. Error al crear Job Applicant

{ "valor": false, "msn": "Solicitud no se puede insertar correctamente", "data": { ...ERP response... } }

🗃 Estructuras usadas (Schemas)

▶ Employee (GET)

Campos consultados:

{ "first_name": "string", "middle_name": "string", "first_last_name": "string", "second_last_name": "string", "nombre_completo": "string", "gender": "string", "passport_number": "string", "date_of_birth": "date", "place_of_issue": "string" }

▶ Job Applicant (POST)

Campos enviados:

{ "grado": "string", "job_title": "string", "applicant_name": "string", "numero_de_documento": "string", "email_id": "string", "sucursal": "string", "resume_attachment": "string", "status": "Open", "email_logued": "string" }

🧩 Pseudocódigo del Servicio

if !email_logued: error // validar duplicados list = GET Job Applicant by email_logued & job_title if list > 0: error employee = GET Employee by user_id=email_logued if not exists: error validar campos obligatorios edad = calcular edad(employee.date_of_birth) body = construir Job Applicant createJob = POST Job Applicant registrar Error Log con createJob if createJob.data: return success else: return error