HR Efficiency Module
Descripción
El módulo hr_efficiency permite llevar un registro de la eficiencia de los empleados comparando las horas planeadas vs las horas realmente trabajadas. Proporciona análisis mensuales detallados que incluyen:
- Horas disponibles (considerando vacaciones y tiempo libre)
- Horas planeadas (desde el módulo de planeación)
- Horas planeadas en proyectos facturables
- Horas registradas en proyectos facturables
- Horas planeadas en proyectos no facturables
- Horas registradas en proyectos no facturables
Características
🔄 Cálculo Automático
- Ejecución semanal automática para los últimos 3 meses y próximos 6 meses
- Cron job configurado para ejecutarse cada semana
- Actualización automática de registros existentes
🛠️ Cálculo Manual
- Wizard para ejecución manual del cálculo
- Selección de período personalizado
- Filtrado por empleados específicos
- Resultados detallados del proceso
📊 Reportes y Análisis
- Vista de lista con indicadores visuales de eficiencia
- Reportes pivot y gráficos para análisis
- Indicadores Configurables: Sistema flexible de indicadores con fórmulas y ponderaciones
- Filtros por indicadores (Good Planning, Good Time Tracking, High Overall Efficiency)
- Filtros por tipo de proyecto (facturable, no facturable)
- Filtros de meses dinámicos (últimos 2, actual, próximos 2)
- Agrupación por empleado, mes, departamento
📈 Seguimiento Histórico Inteligente
- Nuevos registros se crean solo cuando hay cambios en los datos
- Registros anteriores se archivan automáticamente (campo
active = False)
- Campo
calculation_date para rastrear cuándo se realizó cada cálculo
- Permite ver la evolución de la eficiencia a lo largo del tiempo
- Solo los registros más recientes están activos para evitar duplicados
🔗 Integración Completa
- Planning: Extrae horas planeadas de
planning.slot
- Timesheets: Obtiene horas reales de
account.analytic.line
- Projects: Distingue entre proyectos facturables y no facturables
- Holidays: Considera vacaciones y tiempo libre en el cálculo de disponibilidad
⚙️ Indicadores Configurables
- Indicador 1 - Planeación: Al menos 90% del tiempo disponible debe estar planeado
- Indicador 2 - Tiempo Registrado: Al menos 90% del tiempo planeado debe estar registrado
- Fórmulas Personalizables: Cada indicador puede usar fórmulas con variables de eficiencia
- Ponderaciones: Cada indicador tiene un peso en el cálculo de eficiencia general
- Umbrales de Color: Configuración de colores para diferentes niveles de rendimiento
- Gestión desde Planning: Configuración disponible en Planning → Settings → Efficiency Indicators
Instalación
- Copiar el módulo a
/extra-addons/custom/hr_efficiency
- Actualizar la lista de módulos en Odoo
- Instalar el módulo "HR Efficiency"
Uso
Acceso al Módulo
El módulo se puede acceder desde:
- Menú HR: Employees → Efficiency
- Menú Planning: Planning → Reporting → Efficiency
Cálculo Manual
- Ir a Employees → Efficiency → Calculate Efficiency
- Configurar el período (formato: YYYY-MM)
- Seleccionar empleados (opcional, por defecto todos)
- Ejecutar el cálculo
- Revisar resultados y acceder a los registros
Configuración de Indicadores
Acceso a la Configuración
- Ir a Planning → Settings → Efficiency Indicators
- Aquí puedes gestionar todos los indicadores de eficiencia
Indicadores por Defecto
Variables Disponibles en Fórmulas
available_hours: Horas disponibles
planned_hours: Horas planeadas totales
planned_billable_hours: Horas planeadas en proyectos facturables
planned_non_billable_hours: Horas planeadas en proyectos no facturables
actual_billable_hours: Horas registradas en proyectos facturables
actual_non_billable_hours: Horas registradas en proyectos no facturables
Visualización de Datos
Vista de Lista
- Muestra todos los registros de eficiencia
- Indicadores visuales:
- 🟢 Verde: Eficiencia ≥ 90%
- 🟡 Amarillo: Eficiencia 70-89%
- 🔴 Rojo: Eficiencia < 70%
Filtros Disponibles
Reportes
- Efficiency Analysis: Reportes pivot y gráficos
- Agrupación por mes, empleado, departamento
- Métricas de eficiencia y utilización
Estructura del Módulo
hr_efficiency/
├── __init__.py
├── __manifest__.py
├── models/
│ ├── __init__.py
│ └── hr_efficiency.py
├── wizard/
│ ├── __init__.py
│ ├── hr_efficiency_calculation_wizard.py
│ └── hr_efficiency_calculation_wizard_views.xml
├── views/
│ ├── hr_efficiency_views.xml
│ └── planning_views.xml
├── report/
│ ├── __init__.py
│ ├── hr_efficiency_report.py
│ └── hr_efficiency_report_views.xml
├── security/
│ └── ir.model.access.csv
├── data/
│ └── hr_efficiency_cron.xml
└── README.md
Modelos
hr.efficiency
Modelo principal que almacena los registros de eficiencia mensual por empleado.
Campos principales:
month_year: Mes y año (formato: YYYY-MM)
employee_id: Empleado
calculation_date: Fecha y hora cuando se realizó el cálculo (para seguimiento histórico)
available_hours: Horas disponibles
planned_hours: Horas planeadas totales
planned_billable_hours: Horas planeadas en proyectos facturables
planned_non_billable_hours: Horas planeadas en proyectos no facturables
actual_billable_hours: Horas reales en proyectos facturables
actual_non_billable_hours: Horas reales en proyectos no facturables
efficiency_rate: Porcentaje de eficiencia general
billable_efficiency_rate: Porcentaje de eficiencia en proyectos facturables
hr.efficiency.calculation.wizard
Wizard para ejecutar cálculos manuales de eficiencia.
Comportamiento de Registros:
- Creación inteligente: Nuevos registros se crean solo cuando hay cambios en los datos
- Archivo automático: Registros anteriores se archivan (campo
active = False) antes de crear nuevos
- Seguimiento histórico: Permite ver cómo evolucionan los datos de eficiencia a lo largo del tiempo
- Sin duplicados activos: Solo el registro más reciente está activo para cada empleado y mes
- Timestamp de cálculo: Cada registro incluye la fecha y hora exacta cuando se realizó el cálculo
Wizard para cálculo manual de eficiencia.
hr.efficiency.report
Modelo de reporte para análisis y visualización de datos.
Cálculos
Horas Disponibles
# Horas totales del calendario del empleado
total_work_hours = employee._list_work_time_per_day(start_date, end_date)
# Restar horas de vacaciones aprobadas
time_off_hours = get_approved_leaves_hours(employee, start_date, end_date)
available_hours = total_work_hours - time_off_hours
Horas Planeadas
# Obtener slots de planning del empleado
planning_slots = env['planning.slot'].search([
('employee_id', '=', employee.id),
('start_datetime', '>=', start_datetime),
('end_datetime', '<=', end_datetime),
('state', 'in', ['draft', 'published'])
])
# Separar por tipo de proyecto
for slot in planning_slots:
if slot.project_id.allow_billable:
planned_billable += slot.allocated_hours
else:
planned_non_billable += slot.allocated_hours
Horas Reales
# Obtener timesheets del empleado (excluyendo vacaciones)
timesheets = env['account.analytic.line'].search([
('employee_id', '=', employee.id),
('date', '>=', start_date),
('date', '<=', end_date),
('project_id', '!=', False),
('holiday_id', '=', False) # Excluir timesheets de vacaciones
])
# Separar por tipo de proyecto
for timesheet in timesheets:
if timesheet.project_id.allow_billable:
actual_billable += timesheet.unit_amount
else:
actual_non_billable += timesheet.unit_amount
Configuración
Cron Job
El módulo incluye un cron job configurado para ejecutarse semanalmente:
- Nombre: HR Efficiency: Calculate Efficiency (Weekly)
- Frecuencia: Semanal
- Prioridad: 10
- Método:
_cron_calculate_efficiency()
Permisos
- Usuarios HR: Lectura, escritura y creación de registros
- Managers HR: Acceso completo incluyendo eliminación
- Reportes: Solo lectura para análisis
Dependencias
hr: Gestión de empleados
hr_timesheet: Timesheets
hr_holidays: Gestión de vacaciones
project: Gestión de proyectos
planning: Planeación de recursos
project_timesheet_holidays: Integración de vacaciones con timesheets
Notas Técnicas
Consideraciones de Rendimiento
- El cálculo se ejecuta por empleado y mes para optimizar el rendimiento
- Los registros existentes se actualizan en lugar de crear duplicados
- El cron job está configurado para ejecutarse en horarios de baja actividad
Integración con Vacaciones
- El módulo considera automáticamente las vacaciones aprobadas
- Excluye timesheets generados automáticamente por vacaciones
- Calcula la disponibilidad real considerando el calendario del empleado
Proyectos Facturables
- Utiliza el campo
allow_billable de project.project
- Distingue entre proyectos facturables y no facturables
- Permite análisis separado de eficiencia por tipo de proyecto
Soporte
Para reportar problemas o solicitar mejoras, contactar al equipo de desarrollo.
Licencia
LGPL-3