Class ReporteService
Centraliza el procesamiento de datos de fichajes para proporcionar reportes precisos que pueden ser filtrados por fecha y por empleado. Estos informes son fundamentales para el cumplimiento de auditorías laborales y la gestión eficiente de los recursos humanos de la empresa.
Incluye lógica avanzada de cálculo para transformar registros de entrada/salida en métricas de tiempo trabajado, tiempo teórico y detección automática de horas extraordinarias.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final EmpleadoRepositoryprivate final EmpresaRepositoryprivate final FichajeRepositoryprivate static final DateTimeFormatterprivate static final int -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate ReporteDetalleDTORealiza el cálculo matemático exhaustivo de un registro de fichaje individualizado.Obtiene el nombre de la empresa asociada al usuario autenticado que ha realizado la petición.obtenerReporteDetallado(LocalDate fechaInicio, LocalDate fechaFin, Long idEmpleadoFiltro) Genera un reporte detallado de los fichajes realizados en un periodo temporal definido.obtenerReporteResumen(LocalDate fechaInicio, LocalDate fechaFin, Long idEmpleadoFiltro) Genera un reporte resumido que consolida los datos de asistencia agrupados por empleado.
-
Field Details
-
fichajeRepository
-
empresaRepository
-
empleadoRepository
-
MINUTOS_CORTESIA
private static final int MINUTOS_CORTESIA- See Also:
-
HORA_FORMATTER
-
-
Constructor Details
-
ReporteService
public ReporteService()
-
-
Method Details
-
obtenerNombreEmpresaAutenticada
Obtiene el nombre de la empresa asociada al usuario autenticado que ha realizado la petición.Determina si el usuario posee el rol de Empresa o de Empleado y recupera el nombre correspondiente desde el repositorio adecuado. En caso de no encontrar la entidad, se devuelve "EMPRESA" como valor por defecto.
- Returns:
- El nombre de la empresa como cadena de texto.
-
obtenerReporteDetallado
@Transactional(readOnly=true) public List<ReporteDetalleDTO> obtenerReporteDetallado(LocalDate fechaInicio, LocalDate fechaFin, Long idEmpleadoFiltro) Genera un reporte detallado de los fichajes realizados en un periodo temporal definido.El reporte incluye un desglose pormenorizado por cada registro de entrada y salida, calculando el tiempo trabajado, el tiempo teórico según el turno asignado y el exceso de jornada (horas extra).
Control de Acceso por Roles:
ROLE_EMPRESA: Acceso total a todos los empleados de la organización.ROLE_SUPERVISOR: Acceso restringido a los empleados de su propio departamento corporativo.ROLE_EMPLEADO: Acceso restringido exclusivamente a su historial de fichajes personal.
- Parameters:
fechaInicio- Fecha de comienzo del periodo de reporte (inclusive).fechaFin- Fecha de finalización del periodo de reporte (inclusive).idEmpleadoFiltro- Identificador opcional de un empleado específico para filtrar los resultados de la consulta.- Returns:
- List de
ReporteDetalleDTOcon los datos de fichajes procesados y ordenados secuencialmente por empleado y fecha. - Throws:
RuntimeException- Si la fecha de inicio es posterior a la de fin o si no se encuentran registros en el periodo.
-
obtenerReporteResumen
@Transactional(readOnly=true) public List<ReporteResumenDTO> obtenerReporteResumen(LocalDate fechaInicio, LocalDate fechaFin, Long idEmpleadoFiltro) Genera un reporte resumido que consolida los datos de asistencia agrupados por empleado.Este método es ideal para obtener una visión ejecutiva del rendimiento de la plantilla, calculando totales de días laborados, tiempo total trabajado y el acumulado de minutos extraordinarios. Los resultados son adecuados para ser presentados en resúmenes visuales o exportaciones PDF.
- Parameters:
fechaInicio- Fecha inicial para el cálculo de los totales acumulados.fechaFin- Fecha final para el cálculo de los totales acumulados.idEmpleadoFiltro- Identificador opcional para realizar un resumen de un único trabajador.- Returns:
- List de
ReporteResumenDTOcon la información agregada y consolidada por cada empleado detectado.
-
calcularFichaje
Realiza el cálculo matemático exhaustivo de un registro de fichaje individualizado.Determina la duración de la jornada real efectuada frente a la duración teórica del turno que el empleado tenía planificado para ese día. Implementa una lógica de negocio de "minutos de cortesía" para la contabilización de las horas extra (sólo se cuentan si superan los 15 minutos de exceso).
En caso de que el empleado no tenga un turno asignado (Fichaje Fantasma), el tiempo trabajado se contabiliza íntegramente como tiempo total y extra.
- Parameters:
f- La entidadFichajepersistida que contiene las marcas horarias del empleado.- Returns:
ReporteDetalleDTOcon los cálculos de minutos teóricos, reales y extras completamente procesados.
-