Class ReporteService

java.lang.Object
com.gestorrh.api.service.ReporteService

@Service public class ReporteService extends Object
Servicio encargado de la generación de informes detallados y resumidos sobre la asistencia de los empleados.

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 Details

  • Constructor Details

    • ReporteService

      public ReporteService()
  • Method Details

    • obtenerNombreEmpresaAutenticada

      public String 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 ReporteDetalleDTO con 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 ReporteResumenDTO con la información agregada y consolidada por cada empleado detectado.
    • calcularFichaje

      private ReporteDetalleDTO calcularFichaje(Fichaje f)
      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 entidad Fichaje persistida que contiene las marcas horarias del empleado.
      Returns:
      ReporteDetalleDTO con los cálculos de minutos teóricos, reales y extras completamente procesados.