Ir al contenido principal

Solicitud de Adelanto( Solicitar de adelanto de sueldo (1) ) - [guardarAdelantosMensual]

🧾 Descripción

Registra la solicitud de adelanto salarial mensual para un empleado, validando una serie de reglas de negocio relacionadas con:

  • Fecha permitida para solicitar adelanto

  • Tipo de trabajador

  • Área, puesto y compañía

  • Situación laboral (activo/licencia)

  • Contratos y antigüedad mínima

  • Restricciones internas por área o cargo

  • Estructura mensual del ERP (“Solicitud de Adelanto Mensual”)

El servicio crea o actualiza el registro correspondiente al empleado dentro del documento mensual de adelantos.


🚀 Endpoint

POST /guardar-adelantos-mensual/{employee}/{amount}

Recibe:

  • employee (string) — ID del empleado

  • amount (int/string) — Monto seleccionado


🔐 Seguridad

Requiere autenticación del ERP (realizada internamente vía ServiceErp()).


🧠 Flujo del Servicio (lógica real)

1️⃣ Validación inicial del monto

  • Si el monto es "Seleccionar"error

2️⃣ Obtiene la ficha del empleado


GET Employee/{employee}

Se validan:

  • Compañía = "Shalom Empresarial"

  • Estado = "Active"

3️⃣ Validaciones por fecha

  • Solo se puede solicitar entre el día 1 y 14

  • Excepción especial: julio 2023 (solo hasta el día 13)

  • Si el empleado ingresó este mes y su día de ingreso ≥ 5 → no puede solicitar

4️⃣ Validaciones por tipo de trabajo

  • Part time → máximo S/ 100

  • Gerencia → no permitido

  • Jefes o Supervisores (excepto Atención al cliente - SE)

  • Administrativos (excepto Atención al cliente - SE)

  • Conductores → prohibido solicitar

5️⃣ Validación de asistencia

Se verifica si hoy está con licencia:

GET Attendance?filters=[ employee=..., status="On Leave", attendance_date=hoy, docstatus=1 ]

Si está con licencia → no puede solicitar adelanto.

6️⃣ Ubica o crea el documento mensual tipo "Solicitud de Adelanto Mensual"

Se busca:

GET Solicitud de Adelanto Mensual?filters=[ ["id","=",employee.id_sucursal], ["mes","=",mesTexto], ["anio","=",anio] ]
  • Si no existe, se crea un nuevo documento para el mes

7️⃣ Registra o actualiza al trabajador dentro de la tabla interna table_12

  • Si el empleado no existe → se crea un nuevo registro (POST)

  • Si ya existe → se actualiza solo el campo monto (PUT)

8️⃣ Devuelve la respuesta con todos los registros procesados.


📥 Request Body

No recibe body (los parámetros son por URL).


📤 Response 200 – Ejemplo

{ "valor": true, "msn": "Solicitud de adelanto registrado correctamente.", "data": { "SAL-MENS-0001": { "id_empleado": "EMP-001", "monto": 150, "from_app": 1 } } }

❗ Posibles Errores

1. Monto inválido

{ "valor": false, "msn": "Seleccione un monto valido." }

2. Empresa no permitida

{ "valor": false, "msn": "Solo se pueden solicitar los trabajadores de la compañia Shalom Empresarial" }

3. Empleado deshabilitado

{ "valor": false, "msn": "Su empleado se encuentra deshabilitado" }

4. Fecha fuera de rango

{ "valor": false, "msn": "Solo se pueden realizar solicitudes desde el día 01 hasta el 14 del mismo mes." }

5. Restricción por área o tipo de empleado

{ "valor": false, "msn": "Los conductores no pueden solicitar adelanto salarial." }

6. Empleado con licencia

{ "valor": false, "msn": "Usted se encuentra de licencia, no puede solicitar adelanto salarial." }

7. Error al crear documento mensual

{ "valor": false, "msn": "Ocurrió un error al registrar su solicitud de adelanto" }

📚 Schemas utilizados

Employee (GET Employee/{id})

Campos relevantes:

{ "company": "string", "status": "string", "employment_type": "string", "department": "string", "designation": "string", "tipo_de_empleado": "string", "id_sucursal": "int", "passport_number": "string", "employee_name": "string", "branch": "string", "fecha_de_ingreso_real": "Y-m-d" }

Solicitud de Adelanto Mensual (GET/POST)

Campos usados:

{ "id": "int", "mes": "string", "anio": "int", "sucursal": "string", "departamento": "string (opcional)" }

Registro en tabla interna (table_12)

{ "id_empleado": "string", "dni": "string", "nombre_completo": "string", "fecha_de_ingreso": "Y-m-d", "monto": "int", "sucursal": "string", "from_app": 1 }

🧠 Lógica en pseudo-código

if amount == "Seleccionar": return error employeeData = GET Employee/{employee} validar empresa, estado, fecha, tipo, área, puesto... if falla alguna regla: return error validar licencia del día buscar documento mensual de adelantos if no existe: crear nuevo documento obtener tabla interna del documento si empleado no existe en table_12: crear registro else: actualizar monto return éxito + registros modificados