Disponibles a partir de la versión 9.0.0.1
Sistema multi-zona horaria que permite registrar y mostrar fichajes correctamente independientemente de dónde esté el empleado en el mundo, manteniendo una hora oficial coherente para el cálculo de nóminas y jornadas.
¿Por qué zonas horarias?
Un empleado en Canarias y otro en Madrid que fichan "a las 8:00" producen la misma hora UTC aunque son momentos distintos. No hay forma de saber desde dónde fichó cada uno.
El sistema captura la hora local del dispositivo y la convierte a UTC. Luego aplica una política configurable por empleado para mostrar la hora "oficial" en la zona horaria correcta según la empresa.
Los 4 Campos de Hora
La hora que marca el reloj del dispositivo del empleado cuando ficha. "Mi móvil dice las 8:00".
La misma hora convertida a UTC (referencia universal inmutable). "En Greenwich son las 7:00".
La hora final oficial mostrada al usuario, en la zona horaria destino. Esta es la que se usa para calcular jornadas y nóminas.
Cuándo se grabó el registro en la base de datos (siempre UTC). Usado para detección de fraude horario.
La Fórmula de Conversión
Modos de Zona Horaria (TimeZoneMode)
La hora final siempre se muestra en la zona horaria de la oficina asignada al empleado, independientemente de dónde esté.
Usa la zona horaria de la localización de fichaje si tiene TZ asignada. Si no, usa la del dispositivo. Último fallback: zona de la oficina.
Usa siempre la zona horaria del dispositivo del empleado, ignorando la localización aunque la tenga. CheckTime ≈ DeviceLocalTime.
Ejemplos Prácticos
Campos en la Tabla Markings
*UtcOffsetMin son DST-aware — calculados con AT TIME ZONE en el instante exacto del fichaje. No usar la tabla time_zones.OffsetMinutes para UI (offset fijo de invierno, no DST-aware).Detección de Fraude Horario
El sistema implementa un mecanismo anti-fraude en 2 fases para detectar cuando el reloj del dispositivo del empleado está manipulado:
pMarkings_InsertOneTZ compara CheckTimeUtc vs SYSUTCDATETIME(). Si la diferencia supera el umbral (8 min por defecto):
pCron_Incidences_Fast (cada 5-10 min) migra el tipo 19 a una incidencia formal de tipo 16 (Fraude Horario) en Employees_Assistence_Incidences.
Indicadores Visuales en la Interfaz
Cuándo aparece: El dispositivo del empleado está en una zona horaria diferente a la zona de destino usada para calcular CheckTime.
Significado: Puramente informativo. El empleado fichó desde un bloque horario distinto al de referencia.
Cuándo aparece: Incidencia de tipo 19 (fase inmediata) o tipo 16 (fraude confirmado por cron).
Significado: Desfase detectado entre el reloj del dispositivo y el servidor superior al umbral configurado.
Cuándo aparece: Al hacer click en la hora del fichaje.
Muestra: El "viaje" del fichaje en 3 pasos: Dispositivo (origen) → UTC (audit) → Destino aplicado (CheckTime).
¿Le ha sido útil este artículo?
¡Qué bien!
Gracias por sus comentarios
¡Sentimos mucho no haber sido de ayuda!
Gracias por sus comentarios
Sus comentarios se han enviado
Agradecemos su esfuerzo e intentaremos corregir el artículo