Pasar al contenido principal
osky
Enviado por Oscar Hernández el
Castigos y Recompensas: La lógica de RetardoManager y BusinessDaysCalculator (Parte 4)
Categoría
Tecnología

Castigos y Recompensas: La lógica de RetardoManager y BusinessDaysCalculator (Parte 4)

Tener el check-in automatizado es una maravilla, pero la verdadera prueba de fuego de un sistema de RH es cómo maneja las excepciones. O, en español: cómo lidia con los que llegan tarde.

El pedo de los días hábiles en México

Si usas un SaaS extranjero, calcular los días hábiles es un dolor de huevos. En México tenemos días feriados oficiales (LFT), festivos "no oficiales" (como el Día de Muertos), puentes mágicos y días donde simplemente decidimos cerrar la agencia.

Por eso creé el BusinessDaysCalculator. Es un servicio en Drupal que jala un calendario administrable. Antes de que el sistema decida si alguien tiene un retardo o una falta, consulta este servicio. "¿Hoy es 16 de septiembre? Ah ok, no corras el script de penalizaciones".

RetardoManager: El juez implacable

Aquí es donde se acaba la amistad y empieza el código.

Nuestro RetardoManager es un monstruo matemático. Su trabajo es sencillo: evaluar el RegistroAsistencia contra el horario esperado del usuario.
Pero no es blanco y negro. Tiene reglas claras:
- Tolerancia: Tienes 15 minutos de gracia.
- Acumulación: 3 retardos en un mes calendario equivalen a un DiaDescontado.
- Excepciones: Si el registro tiene una entidad de PermisoConGoce o EventoScouting amarrada a esa misma fecha, el sistema te perdona automáticamente.

Cálculos en matriz

Lo hermoso de tener esto programado a la medida es que Recursos Humanos ya no tiene que hacer cortes de mes cruzando Excel y correos electrónicos. Cuando llega el día de la nómina, Drupal simplemente escupe un JSON con el saldo de días a pagar y penalizaciones exactas por empleado.

En el Capítulo 5, el final de esta serie, hablaré sobre ciberseguridad. Porque cuando pones un checador web, el primer instinto del mexicano es hackearlo. Hablaremos de DeviceFingerprint.