Odoo Community RRHH: El “corte de mediodía” que descuadra las horas (y cómo arreglarlo)

Odoo 18 Asistencias: el “corte de mediodía” que descuadra las horas (y cómo arreglarlo)
Solucionex
25
Feb 26

Cuando en Odoo Community (módulo Asistencias / hr_attendance) ves que una jornada “no cuadra” —por ejemplo, entras a las 08:00, sales a las 15:00 y no te devuelve 7h— lo normal es pensar que Odoo está “metiendo” un descanso que no existe.

En la práctica, Odoo no se inventa una pausa: la mayoría de discrepancias vienen de cómo está definido el Calendario de trabajo (resource.calendar) o de cómo se cruzan varios factores como tramos AM/PM, huecos, zona horaria, y reglas de redondeo.

La clave es esta:

Asistencias registra horas reales de entrada/salida, pero cuando se interpretan/contrastan con otras piezas (Work Entries, Planning, informes, nómina…), manda el Calendario de trabajo.
Si el calendario no refleja la realidad, el sistema no puede cuadrar.


1) Contexto y síntoma

Ejemplo típico 1: “No salen 7h”

  • Entrada: 08:00

  • Salida: 15:00

  • Esperado: 7:00 h

  • Resultado en Odoo (o en informes): 6:00 h, o la jornada aparece “cortada”.

Esto suele notarse más cuando:

  • Se generan informes, PDFs o reportes que tiran de calendarios/entradas de trabajo.

  • Se usan Work Entries (Entradas de trabajo) y hay reglas de planificación.

  • Hay usuarios con zonas horarias distintas (usuario vs empleado vs servidor).

Ejemplo típico 2: “La jornada aparece como partida”

  • El empleado hace jornada continua de 08:00 a 15:00.

  • Pero el calendario está definido como:

    • 08:00–14:00

    • 16:00–18:00
      (con hueco 14:00–16:00)

En ese caso, aunque el empleado haya fichado continuo, Odoo interpreta que existe una estructura de jornada partida y al conciliar horas con calendario / entradas de trabajo puede aparecer una “partición” o descuadre.


2) Qué revisar primero (check rápido)

Antes de tocar nada, haz este checklist en 2 minutos:

✅ A) Calendario de trabajo del empleado

Ruta típica:
RRHH → Empleados → Contrato → Calendario de trabajo

Comprueba:

  • Si el calendario es el correcto (muchas veces el empleado tiene uno heredado por copia o plantilla).

  • Si el calendario define jornada continua o partida.

✅ B) Tramos AM/PM y huecos

Mira si el horario tiene:

  • Dos bloques (mañana / tarde)

  • Un hueco entre medias

📌 Si hay hueco, Odoo entiende jornada partida (aunque tú no lo veas como “descanso”, para el sistema es un intervalo no laborable).

✅ C) Zona horaria

Revisa:

  • Zona horaria del usuario que revisa

  • Zona horaria del empleado

  • Zona horaria del servidor / contenedor Docker

Ejemplo de fallo típico:

  • Usuario en Europe/Madrid

  • Servidor en UTC

  • Empleado sin TZ definida o con otra TZ
    → una entrada 08:00 puede interpretarse internamente con offset y “moverse” a otra hora al conciliar.

✅ D) Reglas de redondeo (si están activas)

Algunas configuraciones o módulos complementarios aplican:

  • redondeo de entrada/salida (ej. al cuarto de hora)

  • redondeo por tramos

Eso puede hacer que 08:03–15:02 se convierta en 08:15–15:00, etc.


3) Diagnóstico paso a paso

Paso A: Localiza un día “fallido”

Elige un día donde el empleado se queje del descuadre y revisa:

  • la entrada y salida registradas

  • si hay más de un registro ese día (doble fichaje, fichaje abierto, etc.)

Si tienes acceso técnico:

  • revisa registros en hr.attendance para ese empleado y fecha.

Paso B: Verifica el calendario asociado

Abre el calendario (resource.calendar) y valida:

  1. ¿Qué tramos están definidos?

  • Caso correcto (jornada continua 8–15):

    • 08:00–15:00 (un solo bloque)

  • Caso problemático (jornada partida “por plantilla”):

    • 08:00–14:00

    • 16:00–18:00

  1. ¿Coinciden con la realidad?
    Si el empleado trabaja continuo, pero el calendario define partido, estás sembrando la discrepancia.

Paso C: Aísla si es un problema de configuración o de datos

Haz una prueba rápida:

  • Compara con un empleado “control” que tenga un calendario estándar bien definido.

  • Repite el mismo patrón (08:00–15:00) en un día de prueba.

Si con el empleado control funciona y con el otro no, casi seguro es:

  • calendario asignado incorrecto

  • o redondeos / tz / reglas asociadas a ese contrato/empleado


4) Solución

Solución principal: ajustar el calendario para que represente el horario real

Opción 1: Jornada continua real

Si la empresa trabaja de 08:00 a 15:00:

  • Define un único tramo: 08:00–15:00

  • Evita que el calendario tenga dos bloques.

Opción 2: Jornada partida real (pero coherente)

Si realmente hay descanso y jornada partida:

  • Define los tramos reales y asegúrate de que los fichajes esperados “encajan”.
    Ejemplo:

  • 08:00–14:00

  • 15:00–17:00
    (si el descanso es 14:00–15:00)

📌 Si el empleado ficha de 08:00 a 17:00 sin pausa, el sistema tendrá conflicto: el calendario dice que 14:00–15:00 no es laborable.

Recomendación práctica para despliegues

  • Documenta el “horario corporativo” por tipo de contrato (ej. oficina, taller, parcial, intensiva verano…).

  • Crea calendarios separados por caso.

  • Asigna explícitamente el calendario correcto en el contrato.

Esto evita el clásico:

“copié el contrato de otro empleado”
y te llevas un calendario que no corresponde.


5) Validación

Después de cambiar el calendario:

  1. Repite el caso:

  • Entrada 08:00

  • Salida 15:00

  • Comprueba que las horas esperadas coinciden.

  1. Si tienes módulos conectados, revisa impacto en:

  • Partes de horas (Timesheets)

  • Entradas de trabajo (Work Entries)

  • Planning

  • Nómina (si aplica)

📌 Importante: si ya existen Work Entries generadas con el calendario anterior, puede que necesites:

  • regenerar entradas de trabajo para el periodo afectado

  • o recalcular según el flujo que estés usando (depende versión/configuración)


6) Conclusión

En Odoo, la regla de oro es:

Si el calendario no representa la realidad, Asistencias no puede cuadrar.

Checklist final para futuros despliegues

  • Calendario correcto asignado en el contrato

  • Tramos horarios sin huecos si la jornada es continua

  • Zonas horarias alineadas (usuario/empleado/servidor)

  • Redondeos revisados y documentados

  • Validación con 2–3 casos reales antes de pasar a producción


implantar odoo