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-cron para tareas programadas
  • Función autoCloseOldEntries() en /lib/scheduler/autoCloseTimeEntries.ts
  • Inicialización automática mediante instrumentation.ts en 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 sendAutoCloseTimeEntryEmail en /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-cron v4.2.1 (ya instalada)
  • nodemailer v7.0.5 (ya instalada)
  • mongoose para 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 MongoDB
  • EMAIL_HOST - Servidor SMTP
  • EMAIL_PORT - Puerto SMTP
  • EMAIL_USER - Usuario SMTP
  • EMAIL_PASSWORD - Contraseña SMTP
  • EMAIL_SENDER_NAME - Nombre del remitente (opcional)

Notas de Implementación

  1. En producción: El scheduler se inicializa automáticamente mediante instrumentation.ts cuando arranca el servidor
  2. En desarrollo: Se inicializa al cargar el dashboard la primera vez
  3. Se ejecuta cada hora en punto (00:00, 01:00, 02:00, etc.)
  4. Solo afecta a fichajes con estado "active"
  5. No modifica fichajes ya completados
  6. Envía un email por cada fichaje cerrado automáticamente
  7. 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