Ir al contenido principal

Horas Extras del Mes (1) - [getMarkingsForEmployeePerMonth2]

🧾 Descripción

Obtiene y calcula todas las horas extras registradas para un empleado en un mes específico, detallando:

  • Horas al 25%

  • Horas al 35%

  • Horas al 100% (domingos y feriados)

  • Listado detallado por día

  • Total acumulado del periodo de corte mensual

El servicio consulta información desde varios recursos del ERP:

  • Cortes (tabCortes) → para determinar el rango mensual válido

  • Horas Extras (tabHoras Extras) → totales por mes

  • Marcaciones (tabMarcaciones) → registros por día

  • Archivo local de feriados: holidays.json


🚀 Endpoint

POST /get-markings-employee-month

📥 Parámetros en el body

{ "employee": "EMP-0001", "month": "02", "year": "2025" }

🔐 Seguridad

  • Requiere token interno del ERP (autenticación manejada por ServiceErp()).

  • Validación del request vía Laravel.


🧠 Flujo del Servicio (resumen real)

1️⃣ Obtiene el corte mensual

Consulta el recurso:

GET /resource/Cortes filters: año = year, mes = month

Si no existe corte → retorna error "No hay corte mensual para este mes".


2️⃣ Obtiene las horas extras acumuladas del mes

GET /resource/Horas Extras fields: ["hhee_al_25","hhee_al_35","hhee_al_100"] filters: año, mes, empleado

3️⃣ Obtiene las marcaciones dentro del periodo del corte

GET /resource/Marcaciones filters: user_id = employee date BETWEEN corte.inicio AND corte.fin hours != 0

Si no hay marcaciones → retorna mensaje informativo.


4️⃣ Carga feriados desde archivo local

public/recursos_humanos/holidays.json

Feriados + domingos se consideran jornada al 100%.


5️⃣ Procesa cada marcación

Por cada registro:

  • Si es feriado/domingo → 100%

  • Si horas ≤ 2 → 25%

  • Si horas > 2

    • primeras 2h → 25%

    • resto → 35%

Cada día se estructura como:

{ "fecha": "05 DE ENERO", "porcentaje": "35%", "horas_completadas": "3H" }

6️⃣ Arma la respuesta final:

Incluye:

  • marcaciones: detalle por día

  • horas25, horas35, horas100: de la tabla Horas Extras

  • horas_acumuladas: sumatoria real de horas del mes


📤 Response 200 – Ejemplo

{ "valor": true, "msn": "Lista de horas extras generado correctamente", "data": { "marcaciones": [ { "fecha": "03 DE ENERO", "porcentaje": "25%", "horas_completadas": "2H" }, { "fecha": "03 DE ENERO", "porcentaje": "35%", "horas_completadas": "1H" } ], "horas25": "12", "horas35": "4", "horas100": "2", "horas_acumuladas": "15" } }

❗ Posibles Errores

1. Corte mensual no configurado

{ "valor": false, "msn": "No hay corte mensual para este mes", "data": [] }

2. Error al traer horas extras

{ "valor": false, "msn": "Surgió un error, al obtener las horas extras", "data": [] }

3. Marcaciones vacías

{ "valor": false, "msn": "No hay horas extras registradas para este mes", "data": { "marcaciones": [], "horas25": "0", "horas35": "0", "horas100": "0", "horas_acumuladas": "0" } }

4. Error en servicio del ERP

{ "valor": false, "msn": "Surgió un error, al obtener las marcaciones.", "data": [] }

📚 Schemas utilizados

Cortes

{ "dia_inicio": "2025-01-01", "dia_final": "2025-01-31" }

Horas Extras

{ "hhee_al_25": "10", "hhee_al_35": "5", "hhee_al_100": "2" }

Marcaciones

{ "fecha": "2025-01-03", "horas": 3 }


🗃 Lógica en pseudo-código

corte = GET Cortes where año=year and mes=month if corte empty → return error hours = GET Horas Extras where año, mes, empleado markings = GET Marcaciones where user_id=employee and date between corte feriados = cargar holidays.json foreach marking: if fecha in feriados → 100% else if horas <= 2 → 25% else: agregar 2h al 25% agregar horas-2 al 35% sumar horas acumuladas return { marcaciones procesadas, horas25, horas35, horas100, horas_acumuladas }