En proyectos de Odoo Community con RRHH, uno de los problemas más frecuentes (y más frustrantes) aparece cuando las horas trabajadas, ausencias, planificación o asistencias no se calculan como esperas.
A veces el usuario lo describe así:
“He fichado bien, pero Odoo me parte la jornada raro”
“El total del día no cuadra”
“Una ausencia de 1 día descuenta más/menos horas”
“Planificación y asistencias no casan”
“El reporte sale distinto al portal / vista previa”
La buena noticia: en la mayoría de casos no es un bug, sino una configuración incompleta en el conjunto Empleado → Recurso → Calendario de trabajo → Zona horaria.
En este post explicamos el por qué, cómo detectarlo rápido y cómo solucionarlo sin tocar código.
Qué está pasando realmente (la causa raíz)
En Odoo, los cálculos de tiempo no dependen solo de “lo que ficha” un empleado, sino de:
Calendario laboral (resource.calendar)
Define cuándo se trabaja (franjas, días, horas semanales, descansos…).Recurso del empleado (resource.resource)
Es lo que Odoo usa como base “técnica” para calcular disponibilidad y horas.Zona horaria (usuario/empresa/empleado)
En sistemas con varios husos o con usuarios que acceden desde otros países, la hora “real” puede desplazarse.Reglas de ausencia y validación (HR Time Off, contratos, etc.)
Una ausencia se descuenta según horas/días del calendario, no por una norma “fija”.
Si uno de estos puntos no está bien, el resultado típico es: horas partidas, totales erróneos o ausencias que descuentan mal.
Síntomas típicos y cómo interpretarlos
1) “Me aparece un corte raro en mitad del día”
Suele pasar cuando el calendario tiene dos tramos (mañana/tarde) y Odoo intenta encajar asistencias o planificación dentro de esas franjas, pero:
el fichaje se ha hecho “por fuera” del tramo,
hay un descanso configurado que no coincide,
o el empleado está usando un calendario distinto al que crees.
2) “Una ausencia de 1 día descuenta 8h… pero ese día eran 6h”
Esto suele ser el clásico: el empleado no tiene asignado el calendario correcto, o se está usando el calendario por defecto (empresa) en lugar del del empleado/contrato.
3) “En planificación veo X, pero en asistencias sale Y”
Planificación (Planning) y Asistencias (Attendance) pueden convivir, pero si el calendario o la zona horaria no son consistentes, cada módulo puede “interpretar” distinto el mismo día.
Checklist de diagnóstico (rápido, sin perderse)
Antes de tocar nada, revisa esto en orden:
✅ 1) Empleado → Calendario de trabajo asignado
Abre el empleado
Busca Horario de trabajo / Calendario
Confirma que es el correcto (no el genérico de empresa si no toca)
✅ 2) Calendario → Asistencias del calendario
En el calendario laboral revisa:
Días laborales correctos
Tramos (ej. 08:00–12:00 y 14:00–18:00)
Descansos (si los hay) y su coherencia
Horas semanales esperadas
✅ 3) Zona horaria
Comprueba:
Zona horaria de la empresa
Zona horaria del usuario que ficha
Si hay empleados en distintas ubicaciones, define una política clara
✅ 4) Recurso/Empleado
En algunos casos (dependiendo módulos), un recurso mal heredado puede dar resultados raros. Si algo no cuadra, revisa que el empleado tenga su recurso correctamente vinculado.
Solución paso a paso (la que suele arreglar el 80% de casos)
Paso 1 — Ajusta el Calendario Laboral
Ve a Ajustes → Técnico → Recursos → Calendarios de trabajo (o desde RRHH si aparece accesible)
Asegura que las franjas coinciden con la realidad.
Si hay jornada partida, que los tramos estén bien (y no se solapen).
Si no quieres cortes, evita “tramos raros” y define un tramo continuo.
Paso 2 — Asigna el calendario al empleado correcto
En el empleado, asigna el calendario.
Ojo: si tienes varios calendarios (verano/invierno), define una regla clara de cambio o usa calendarios separados con fechas.
Paso 3 — Revisa la zona horaria del usuario que ficha
Si el fichaje se realiza desde el portal o por usuarios distintos, asegúrate de que no hay un offset extraño.
Paso 4 — Recalcula/valida
Según el caso, puede que necesites:
revalidar ausencias,
revisar fichajes del día afectado,
o regenerar planificación.
Cómo comprobar que quedó bien (pruebas recomendadas)
Haz estas pruebas controladas:
Día normal (sin ausencias)
fichar entrada y salida
comprobar total del día
Día con jornada partida
fichar entrada/salida mañana
fichar entrada/salida tarde
comprobar que no “inventó” cortes ni restó horas
Ausencia de 1 día
comprobar horas descontadas
deben corresponder al calendario de ese día
Buenas prácticas para evitar que vuelva a pasar
No uses un único calendario para todo si tienes turnos distintos.
Define un estándar de zona horaria (empresa) y documenta qué se permite en usuario.
Para jornada partida, los tramos deben reflejar la realidad: Odoo no “adivina”.
Si el cliente pide “que siempre cuente 8h”, eso no es un calendario: es una regla. Hay que decidirlo funcionalmente.
Conclusión
Cuando Odoo “no cuadra horas” casi siempre es porque el sistema está funcionando exactamente como fue configurado… pero la configuración no representa el escenario real.
La clave es calendario laboral + asignación al empleado + zona horaria. Ajustando eso, el cálculo se vuelve consistente en asistencias, ausencias y planificación.