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 }