Changelog
Últimas novedades
Nuevas Funcionalidades
Sistema de Cierre Automático de Fichajes
- Cierre automático de fichajes que superen las 12 horas de duración
- Notificación por correo electrónico cuando se cierra un fichaje automáticamente
- Scheduler ejecutándose en segundo plano de forma independiente
- Cálculo preciso de horas trabajadas considerando pausas
Mejoras Técnicas
Scheduler en Segundo Plano
- Implementación de
node-cronpara tareas programadas - Función
autoCloseOldEntries()en/lib/scheduler/autoCloseTimeEntries.ts - Inicialización automática mediante
instrumentation.tsen producción - En desarrollo: se inicializa al cargar el dashboard por primera vez
- Ejecución horaria:
"* * * * *"(cada minuto) - El scheduler funciona independientemente de que haya usuarios conectados
Sistema de Correos
- Nueva plantilla
sendAutoCloseTimeEntryEmailen/lib/email.ts - Email personalizado con:
- Detalles del fichaje cerrado (entrada, salida, horas trabajadas)
- Información sobre pausas si las hay
- Enlaces directos al sistema de fichajes
- Logo de la empresa adjunto
Lógica de Negocio
- ClockOut establecido exactamente 12 horas después del ClockIn
- Respeto por fichajes ya completados (no se modifican)
- Cálculo correcto de horas trabajadas incluyendo tiempo de pausas
- Nota automática en fichajes cerrados por el sistema
Testing
Suite de Tests
- 6 tests implementados en
/lib/scheduler/__tests__/autoCloseTimeEntries.test.ts - Cobertura completa de casos:
- Fichajes antiguos (>12h): se cierran ✅
- Fichajes recientes (<12h): permanecen activos ✅
- Cálculo con pausas ✅
- Precisión de clockOut ✅
- Inmunidad de fichajes completados ✅
- Documentación de resultados en
TEST_RESULTS.md
Archivos Modificados
Nuevos Archivos
/lib/scheduler/autoCloseTimeEntries.ts- Lógica de cierre automático/lib/scheduler/__tests__/autoCloseTimeEntries.test.ts- Suite de tests/instrumentation.ts- Inicialización del scheduler al arrancar el servidor/TEST_RESULTS.md- Documentación de pruebas/.env.local- Variables de entorno para desarrollo
Archivos Actualizados
/app/api/dashboard/stats/route.ts- Inicialización del scheduler en desarrollo/lib/email.ts- Nueva función de email para cierres automáticos/package.json- Actualización a v1.5.2
Archivos Eliminados
/app/api/init/route.ts- Ya no necesario (sustituido por instrumentation.ts)
Dependencias
No se requieren nuevas dependencias. Se utilizan las ya existentes:
node-cronv4.2.1 (ya instalada)nodemailerv7.0.5 (ya instalada)mongoosepara operaciones de base de datos
Configuración Requerida
Variables de Entorno
Las siguientes variables deben estar configuradas en .env.local:
MONGODB_URI- Conexión a MongoDBEMAIL_HOST- Servidor SMTPEMAIL_PORT- Puerto SMTPEMAIL_USER- Usuario SMTPEMAIL_PASSWORD- Contraseña SMTPEMAIL_SENDER_NAME- Nombre del remitente (opcional)
Notas de Implementación
- En producción: El scheduler se inicializa automáticamente mediante
instrumentation.tscuando arranca el servidor - En desarrollo: Se inicializa al cargar el dashboard la primera vez
- Se ejecuta cada hora en punto (00:00, 01:00, 02:00, etc.)
- Solo afecta a fichajes con estado "active"
- No modifica fichajes ya completados
- Envía un email por cada fichaje cerrado automáticamente
- El scheduler funciona en segundo plano independientemente de usuarios conectados
Recomendaciones
- Comunicar a los usuarios sobre la política de 12 horas máximas
- Monitorear los logs del scheduler para detectar posibles problemas
- Verificar configuración SMTP antes del despliegue en producción
- Considerar ajustar el límite de 12 horas según políticas de la empresa
Compatibilidad
- Compatible con todas las versiones anteriores
- No requiere migración de base de datos
- Sin cambios en la interfaz de usuario