Control de Sesiones de Empleados
Registro automático de entrada y salida de empleados con control de horas trabajadas.
💡 Antes de comenzar: Las sesiones se crean automáticamente cuando un empleado inicia sesión con su PIN y se cierran cuando hace logout. El sistema registra todas las sesiones para control de asistencia y horas trabajadas.
¿Qué es una Sesión?
Una sesión de trabajo es el registro de un turno de un empleado que incluye:
- Check-in: Fecha y hora de entrada
- Check-out: Fecha y hora de salida
- Duración: Tiempo total trabajado (en minutos)
- Terminal: Desde dónde trabajó (POS, Kitchen, etc.)
- Estadísticas: Órdenes procesadas, ventas realizadas
- Estado: Activa, completada o abortada
Ciclo de Vida de una Sesión
- Inicio de Sesión (Check-in):
- Empleado ingresa PIN
- Sistema crea SessionLog con status="active"
- Registra checkIn = ahora
- Guarda terminal y dirección IP
- Trabajo Activo:
- Empleado procesa órdenes, cobra, prepara comida, etc.
- El sistema actualiza estadísticas en tiempo real
- La sesión permanece activa
- Fin de Sesión (Check-out):
- Empleado hace logout
- Sistema registra checkOut = ahora
- Calcula duration = (checkOut - checkIn) / 60000
- Cambia status="completed"
Check-in Automático
El check-in es completamente automático:
- Empleado va a la pantalla de login (POS, Kitchen, Waiter)
- Ingresa su PIN de 4 dígitos
- Si el PIN es válido:
- Se crea una nueva sesión automáticamente
- NO necesita hacer un check-in manual
- Es redirigido a su interfaz de trabajo
✅ Sin pasos extra: A diferencia de otros sistemas, no hay un botón de "Marcar entrada" separado. El login Y el check-in son la misma acción.
Check-out Manual
Desde el POS/Kitchen/Waiter
- Haz clic en tu nombre o avatar en la esquina superior
- Haz clic en "Cerrar Sesión" o "Logout"
- Confirma la acción
- La sesión se marca como completada
- Se calcula y guarda la duración
⚠️ Recuerda hacer logout: Si cierras el navegador sin hacer logout, la sesión permanece activa hasta el cierre automático (8 horas).
Auto-Cierre de Sesiones
Para evitar sesiones infinitas, el sistema tiene cierre automático:
Cierre a las 8 Horas
- Cuándo: Una sesión lleva 8 horas activa
- Acción: El sistema automáticamente:
- Establece checkOut = checkIn + 8 horas
- duration = 480 minutos (8 horas)
- status = "completed"
- autoClosedAt8Hours = true
- Notificación: Se envía evento Socket.io al empleado
Sesiones de Overtime (Horas Extra)
Si un empleado necesita trabajar más de 8 horas:
- La sesión de 8 horas se cierra automáticamente
- El empleado puede solicitar overtime (próximamente)
- Se crea una nueva sesión vinculada con
isOvertimeSession=true - Esta sesión se auto-cierra cuando termina el overtime solicitado
💡 Cron Job: El sistema ejecuta un trabajo automático cada 5 minutos que verifica sesiones que deben cerrarse. Esto garantiza que ninguna sesión quede abierta indefinidamente.
Información de la Sesión
| Campo | Descripción |
|---|---|
checkIn | Fecha y hora de entrada |
checkOut | Fecha y hora de salida (null si activa) |
duration | Tiempo trabajado en minutos |
terminal | Desde dónde trabajó (ej: "POS") |
ipAddress | Dirección IP del dispositivo |
stats.ordersProcessed | Cantidad de órdenes procesadas |
stats.totalSales | Total vendido en la sesión |
status | active, completed, aborted |
notes | Notas del administrador (opcional) |
Cerrar Sesión Manualmente (Admin)
Como administrador, puedes cerrar la sesión activa de un empleado:
- Ve a /[slug]/admin/employees/sessions
- Busca la sesión activa del empleado
- Haz clic en "Cerrar Sesión"
- Opcionalmente, agrega notas explicando por qué
- Confirma
⚠️ Úsalo con cuidado: Cerrar la sesión de un empleado lo desconecta inmediatamente. Solo hazlo si el empleado olvidó hacer logout o hay un problema técnico.
Estados de Sesiones
🟢 Active
El empleado está trabajando actualmente. checkOut es null.
🔵 Completed
La sesión finalizó normalmente. Tiene checkOut y duration calculados.
🔴 Aborted
La sesión fue cancelada o tuvo un problema. Raramente usado.
Usos del Registro de Sesiones
- Control de asistencia: Quién trabajó cuándo
- Cálculo de nómina: Horas totales trabajadas por período
- Productividad: Órdenes procesadas por hora
- Auditoría: Quién estaba trabajando cuando ocurrió X
- Reportes: Horas extra, ausentismo, puntualidad
Buenas Prácticas
✅ Siempre hacer logout: Instruye a los empleados a cerrar sesión al terminar su turno, no solo cerrar el navegador.
✅ Revisa sesiones diarias: Al final del día, verifica que no haya sesiones activas olvidadas.
✅ Explica el sistema: Capacita a los empleados sobre qué es una sesión y por qué es importante registrarla correctamente.
✅ Monitorea horas extra: Si las sesiones de 8 horas son frecuentes, analiza si necesitas más personal.
Solución de Problemas
La sesión se cerró sola a las 8 horas
Esto es normal. El sistema cierra automáticamente sesiones después de 8 horas para evitar turnos infinitos. Si el empleado necesitaba seguir trabajando, puede iniciar sesión nuevamente creando una nueva sesión.
El empleado olvidó hacer checkout ayer
Si la sesión tiene más de 8 horas, ya se cerró automáticamente. Si tiene menos, puedes cerrarla manualmente desde el panel de administración. Ve a Sesiones, encuentra la sesión activa y ciérrala indicando el horario real de salida en las notas.
No aparecen las estadísticas de la sesión
Las estadísticas (órdenes procesadas, ventas totales) se actualizan en tiempo real durante la sesión. Si aparecen en 0, puede ser que el empleado no haya procesado ninguna orden durante esa sesión (ej: solo estuvo en modo de espera).
¿Puedo editar el check-in o check-out de una sesión?
Actualmente no se pueden editar sesiones por temas de auditoría. Si un empleado registró mal su entrada/salida, puedes agregar notas a la sesión explicando la corrección, pero los timestamps originales se mantienen. En futuras versiones se agregará la capacidad de ajustar con justificación.
El empleado tiene 2 sesiones activas al mismo tiempo
Esto no debería pasar. El sistema verifica antes de crear una nueva sesión si ya hay una activa. Si detectas este caso, cierra manualmente la sesión más antigua desde el panel de administración. Puede haber ocurrido por un error de red durante el login.
¿Te fue útil este artículo?