# XIII. Reglas de Negocio

La integridad del sistema se basa en el cumplimiento estricto de las siguientes reglas de negocio:

## RN-01: Restricción de Registro Anticipado
El sistema impedirá el registro de una sesión antes de la hora de finalización programada para dicha clase. La validación se realiza comparando `Hora_Actual >= Hora_Fin_Clase` del horario correspondiente. Si la condición no se cumple, se muestra un mensaje claro indicando la hora de fin de la clase.

## RN-02: Determinación de Puntualidad
El estado del registro se calculará automáticamente comparando la hora de envío contra la hora de fin de la clase más el margen de tolerancia configurado:
- `Hora_Registro <= Hora_Fin + Tolerancia` → Estado: **A tiempo** (`en_tiempo`)
- `Hora_Registro > Hora_Fin + Tolerancia` → Estado: **Fuera de plazo** (`fuera_de_plazo`)
- La tolerancia se obtiene del campo `tolerancia_minutos` en el horario específico; si no está definido, se usa la tolerancia global de `horario_academico`.

## RN-03: Privacidad y Aislamiento de Datos
El personal docente tendrá acceso exclusivo a su propia carga académica, sin visibilidad sobre otros usuarios. Todas las consultas de clases del día, horario semanal e historial están filtradas por el `docente_id` del usuario autenticado. El coordinador, en cambio, tiene visibilidad completa de todos los docentes.

## RN-04: Seguridad de Sesión
El sistema implementa:
- Bloqueo de cuenta tras 5 intentos fallidos de inicio de sesión (15 minutos de espera).
- Cierre de sesión automático por inactividad prolongada (configurable vía Shield).
- Autenticación mediante CodeIgniter Shield con contraseñas cifradas.
- Los usuarios `admin` y `coordinador` tienen acceso a todos los módulos; los `docentes` solo a su panel personal.

## RN-05: Dependencia de Entidades Maestras
Solo los horarios marcados como `esta_activo = 1` y los periodos marcados como `es_activo = 1` serán considerados para la operación diaria en el panel docente. Las entidades inactivas se excluyen automáticamente de todas las consultas operativas.

## RN-06: Integridad de Periodos Académicos
No se permite modificar las fechas de un periodo académico si este tiene horarios, registros de sesión o asignaciones asociadas. El sistema verifica la integridad referencial antes de permitir la actualización.

## RN-07: Validación de Cruce Horario
No pueden existir dos horarios activos en el mismo día con rangos horarios que se superpongan. El sistema valida que no haya cruce al crear o actualizar un horario.

## RN-08: Límite de Horas Semanales por Curso
La suma de horas de todos los horarios activos de un curso no puede exceder las `horas_semanales` definidas en el curso. El sistema calcula las horas actuales y valida antes de guardar un nuevo horario.

## RN-09: Contenido Mínimo del Registro
El registro de sesión requiere obligatoriamente una descripción de la actividad realizada. No se permiten registros vacíos o con solo espacios en blanco.

## RN-10: Origen del Registro
Todo registro de sesión debe identificar el origen desde el cual fue creado (`web`, `api`, etc.) para fines de auditoría y trazabilidad.

---
- Regresar al [[index|Inicio]]
