# SCAE 2026 - Control de Asistencia

Sistema web en PHP para el control de asistencia de estudiantes mediante lectura de QR del carnet o registro manual por DNI/codigo.

## Tecnologia usada

- PHP 8.x
- MySQL/MariaDB desde XAMPP
- Bootstrap 3.3.7 local
- jQuery 3.3.1 local
- Font Awesome 4.7.0 local
- Instascan local para lectura QR
- SweetAlert2 11.26.25 local para mensajes

## Modo intranet / sin internet

El sistema no depende de CDN ni de recursos externos para funcionar. Todos los archivos CSS, JavaScript, fuentes, sonido e imagenes estan dentro del proyecto:

- `plugins/Bootstrap-3.3.7/`
- `plugins/jQuery-3.3.1/`
- `plugins/font-awesome-4.7.0/`
- `plugins/instascan/`
- `plugins/sweetalert2/`
- `_css/`
- `_js/`
- `img/`

Mientras Apache y MySQL de XAMPP esten activos en el servidor de la institucion, el sistema puede usarse dentro de la red local sin conexion a internet.

## Diseno responsive

La interfaz se adapta a escritorio, tablet y celular. En pantallas pequenas el lector, el formulario, las metricas y las ultimas marcaciones se reorganizan en una sola columna. La tabla de marcaciones cambia a tarjetas legibles para evitar desplazamiento horizontal. El visor del lector QR se mantiene compacto para no ocupar demasiado espacio en la pantalla.

## Grilla de marcaciones

La tabla de marcaciones del dia usa la estructura:

`Nro | HORA_ING | HORA_SAL | DNI | ESTUDIANTE | GRA/SEC | EST | NIV`

La columna `EST` usa valores cortos:

- `A`: asistio
- `T`: tardanza
- `F`: falta o sin ingreso registrado
- `J`: justificada
- `S`: salida registrada

## Base de datos

La conexion esta configurada en:

`config/database.php`

Base usada:

`akrcsist_bd0003_2026`

Tabla de registro:

`asistencia_estudiante`

Vistas/tablas consultadas:

- `vw_asistencia_control_diario`
- `vw_asistencia_estudiante_detalle`
- `anio_lectivo`
- `matricula`
- `asistencia_hora`
- `asistencia_hora_config`

## Regla de asistencia por horario

El sistema usa la tabla `asistencia_hora` para identificar el bloque horario del estudiante segun su nivel educativo y la hora real de marcacion. Ese bloque se guarda en `asistencia_estudiante.id_asistencia_hora`.

Para ingreso, la tardanza se calcula con el primer bloque no recreo del nivel:

`hora_inicio + tiempo_adicional_min`

Para salida, se compara contra el ultimo bloque no recreo del nivel. Si la salida se registra antes de la hora final de ese bloque, se marca como salida anticipada.

## Registro automatico de ingreso/salida

El operador solo escanea el QR o ingresa el DNI. El sistema decide automaticamente:

- Si el estudiante no tiene ingreso registrado hoy, registra ingreso.
- Si ya tiene ingreso y no tiene salida, registra salida solo desde las 11:00 a.m.
- Si ya tiene ingreso antes de las 11:00 a.m., avisa que la salida todavia no esta habilitada.
- Si ya tiene salida, informa que la salida ya fue registrada.

## Acceso

Desde el servidor XAMPP:

`http://localhost/SCAE_2026/`

Desde otra computadora o tablet de la intranet:

`https://IP_DEL_SERVIDOR/SCAE_2026/`

## Nota sobre la camara

Los navegadores modernos bloquean la camara si el sistema se abre desde una IP de intranet usando solo HTTP. En el servidor, `localhost` suele funcionar; en tablets y celulares debe usarse HTTPS.

Solucion recomendada:

1. Habilitar SSL/HTTPS en Apache/XAMPP.
2. Abrir el sistema desde la tablet con `https://IP_DEL_SERVIDOR/SCAE_2026/`.
3. Aceptar el permiso de camara en el navegador.
4. Si Android o iPadOS no confian en el certificado, instalar el certificado de la institucion o usar un dominio interno con certificado confiable.

El registro manual por DNI funciona aunque la camara este bloqueada.
