Modulo de Asistencia y Marcaciones (Asistencia)
- Obtiene descarga boleta de pago (2) - [getDownloadBoletaPago]
- Obtiene descarga Renovación de contrato (2) - [getRenovacionContrato]
- Lista de Asistencias (1) - [getMarkingsApp]
Obtiene descarga boleta de pago (2) - [getDownloadBoletaPago]
🧾 Descripción
Este servicio valida si un empleado debe descargar obligatoriamente su boleta de pago del último mes antes de poder realizar acciones como:
-
Registrar marcación
-
Registrar solicitudes en la app
-
Acceder a otros módulos operativos
El servicio evalúa:
-
Si está dentro del rango de validación (solo del día 1 al 3 de cada mes).
-
La fecha de ingreso del trabajador.
-
Si tiene boleta generada el mes anterior.
-
Si el mes correspondiente está habilitado para descarga.
-
Si el empleado ya descargó la boleta (se revisa historial en MySQL).
-
Si el empleado está PreActivo, no se valida la descarga.
🚀 Endpoint
GET /get-download-boleta-pago/{empleado}
📌 Parámetro obligatorio:
-
empleado → ID del Employee (name)
🔐 Seguridad
-
Requiere autenticación interna por el ERP mediante
dbErp()y conexión MySQL interna. -
El servicio está pensado solo para uso interno de la aplicación móvil corporativa.
🧠 Flujo del Servicio (resumen)
1️⃣ Validación de fecha
Solo se ejecuta validación si el día actual está entre 1 y 3.
Si el día > 3 → se omite toda validación:
2️⃣ Obtener información del empleado
Consulta ERP:
Si el empleado está PreActivo, no se valida boleta:
3️⃣ Comparar fecha de ingreso vs fecha límite
Se calcula:
-
Mes anterior
-
Último día del mes anterior
Solo se valida si el empleado ingresó antes del cierre del mes previo.
4️⃣ Verificar en MySQL si ya descargó la boleta
Consulta tabla historial_procesos_app:
Si no existe registro se sigue validación.
5️⃣ Validar si EXISTE boleta en ERP
Consulta Salary Slip del último mes:
Si no tiene boleta:
6️⃣ Validar si el mes está habilitado para descarga
Consulta:
Si está habilitado pero el trabajador NO la descargó, se bloquea:
7️⃣ Si pasa todas las validaciones → OK
📥 Request
No usa body, solo el parámetro de ruta: empleado: string
📤 Response – Ejemplos
✔ Caso permitido (día fuera de rango)
✔ Empleado en PreActivo
✔ No tiene boleta generada
❌ No ha descargado la boleta y es obligatoria
✔ Todo correcto
❗ Posibles errores
| Error | Descripción |
|---|---|
| Empleado no existe | No se encuentra en ERP |
| No tiene boleta generada | Salary Slip del mes anterior vacío |
| Boleta habilitada pero no descargada | Bloquea marcación y solicitudes |
| Error en ERP o MySQL | Respuesta capturada por el catch |
🧩 Tablas consultadas
ERP (Frappe/ERPNext)
-
tabEmployee -
tabSalary Slip -
tabEstado Boleta Mensual
MySQL externo
-
historial_procesos_app
🗃 Pseudocódigo del servicio
Obtiene descarga Renovación de contrato (2) - [getRenovacionContrato]
🧾 Descripción
Valida si un empleado debe descargar su renovación de contrato, según reglas internas de fecha y estado en el ERP.
Este servicio determina:
-
Si hoy es la fecha válida para revisar renovaciones (solo a partir del día 26 de cada mes).
-
Si el empleado ingresó antes del cierre del mes anterior (lo que lo vuelve candidato a renovación).
-
Si el empleado tiene una solicitud de renovación aprobada y marcada como “Validado”.
-
Si el empleado ya descargó su documento de renovación.
-
Caso contrario, se bloquean ciertas funcionalidades hasta que la descargue.
-
Se combina información del ERP y del registro histórico en MySQL2.
🚀 Endpoint
GET /get-renovacion-contrato/{empleado}
📌 El parámetro empleado es obligatorio (ID del Employee en ERP).
🔐 Seguridad
✔ Requiere autenticación interna vía dbErp() y tokens del ERP.
✔ Acceso restringido a servicios del backend.
🧠 Flujo del Servicio (Resumen)
-
Verifica la fecha actual.
-
Si el día del mes es menor a 26 → No corresponde validar renovaciones.
-
-
Obtiene datos del empleado.
-
Determina si el empleado aplica para renovación:
-
Debe haber ingresado antes del último día del mes anterior.
-
-
Busca renovaciones validadas del empleado:
-
Si existe una renovación validada:
-
Consulta MySQL2 → tabla
historial_procesos_app -
Revisa si el usuario ya descargó su renovación:
-
-
Si no la descargó → bloquea ciertas funciones.
-
Si todo está conforme → indica que la renovación fue descargada.
📥 Request
Parámetro de ruta
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| empleado | string | ✔ | ID del Employee dentro del ERP |
No tiene body.
📤 Response 200 – Ejemplos
✔ Caso 1 — No es día de validación
✔ Caso 2 — Debe descargar renovación (bloqueo)
✔ Caso 3 — Renovación descargada correctamente
✔ Caso 4 — Error controlado
❗ Posibles errores
| Código | Significado |
|---|---|
| status:false | El empleado tiene renovación pendiente y no la descargó |
| status:true | No aplica validación o ya cumplió con la descarga |
| Excepción | Se devuelve un mensaje genérico indicando que el contrato fue descargado |
📚 Tablas / Datos utilizados
ERP - tabEmployee
Campos usados:
-
fecha_de_ingreso_real
ERP - tabSolicitud de Renovaciones
Campos usados:
-
data_12 -
año -
estado_de_documento
ERP - tabTrabajadores pendiete de renovar
Campos usados:
-
codigo -
renueva
MySQL2 - tabla historial_procesos_app
Procesos revisados:
-
descargaContratoRenovacion
🗃 Lógica en Pseudo-Código
Lista de Asistencias (1) - [getMarkingsApp]
🧾 Descripción
Este servicio obtiene y consolida todas las asistencias de un empleado en un mes específico, calculando:
-
Porcentaje de asistencia del mes.
-
Total de días asistidos.
-
Permisos.
-
Faltas.
-
Feriados.
-
Días de descanso.
-
Marcaciones incompletas.
-
Fechas únicas de asistencia.
Además, toma en cuenta:
-
Fecha de ingreso del trabajador (para no contar días previos como faltas).
-
Domingos y feriados declarados en holidays.json.
-
Validación de límites según el mes actual.
Es un endpoint fundamental para el módulo de Control de Asistencias dentro del aplicativo.
🚀 Endpoint
POST /get-markings-app
📥 Requiere parámetros obligatorios en el body:
🔐 Seguridad
Requiere autenticación interna del sistema ERP mediante:
-
dbErp()para consultas SQL internas. -
Acceso a archivo local
/public/recursos_humanos/holidays.json.
🧠 Flujo del Servicio (resumen real)
-
Recibe parámetros del empleado y mes a consultar.
employee, month, anio, fechaIngreso
-
Calcula rango real del mes a evaluar, tomando en cuenta:
-
Si es el mes actual.
-
Si el empleado ingresó después del día 1.
-
Días previos al ingreso del trabajador.
-
-
Carga feriados y domingos del archivo JSON:
/public/recursos_humanos/holidays.json -
Determina cuántos días del mes son feriados o domingos dentro del rango permitido.
-
Valida campos obligatorios.
-
Consulta en el ERP todas las asistencias del empleado en el mes:
-
Recorre todas las asistencias y clasifica:
-
Present → Suma asistencia
-
On Leave → Permisos
-
Absent → Faltas
-
Feriado → Feriados
-
Día de Descanso → Descansos
-
Marcacion Incompleta → Marcaciones incompletas
-
-
Calcula porcentaje de asistencia, considerando:
-
Días previos al ingreso.
-
Si el mes es el actual → hasta el día de hoy.
-
Casos especiales de permisos dominicales.
-
-
Construye respuesta final con totales y fechas.
📥 Request Body
📌 Todos son obligatorios.
📤 Response 200 – Ejemplo
❗ Posibles Errores
1. Faltan parámetros obligatorios
2. No existe asistencia registrada
3. Error interno inesperado
📚 Estructuras usadas
Attendance (tabAttendance)
Campos consultados:
-
attendance_date -
status -
horas_trabajadas -
horas_extras -
name
Archivo holidays.json
Estructura: