# Arquitectura y mantenimiento

## Responsabilidades

Neo es el aula virtual para alumnos e instructores. SICCAP conserva la administración de usuarios institucionales, catálogos, instructores, alumnos, cursos y asignaciones de aulas.

El aula activa delimita la navegación y el contenido. Cuando existen varias asignaciones, se puede cambiar de aula desde el menú lateral. Los enlaces a actividades y avisos se validan contra las aulas a las que tiene acceso el usuario.

## Organización del código

| Directorio             | Responsabilidad                                                  |
| ---------------------- | ---------------------------------------------------------------- |
| `app/(auth)`           | Inicio de sesión.                                                |
| `app/(dashboard)`      | Inicio, cursos y secciones del aula.                             |
| `app/(evaluacion)`     | Evaluaciones a pantalla completa.                                |
| `app/actions`          | Validación y coordinación de operaciones del servidor.           |
| `app/api`              | Autenticación, cargas y lectura autorizada de archivos.          |
| `components/alumno`    | Reproductor y recorrido de evaluaciones.                         |
| `components/dashboard` | Navegación, aulas, entregas y seguimiento.                       |
| `components/ui`        | Avisos, tema, carga y visor PDF compartidos.                     |
| `lib/data`             | Consultas y preparación de datos para la interfaz.               |
| `lib/aula`             | Esquemas, archivos, foro, entregas y notificaciones.             |
| `lib/alumno`           | Reglas de progreso, evaluaciones y recuperación de reproducción. |
| `lib/auth`             | Credenciales, sesión y validación del origen de solicitudes.     |
| `prisma`               | Representación del esquema existente de SICCAP.                  |

## Autenticación y autorización

El login unificado identifica al alumno por número de control y al instructor por expediente. Las contraseñas de alumnos se verifican contra el hash existente. Los instructores utilizan su RFC sin homoclave conforme al flujo institucional actual.

Las sesiones JWT tienen ocho horas de duración. `AUTH_SECRET` debe ser privado y estable. El prefijo de cookies `neo.authjs` evita colisiones con otras aplicaciones del mismo host.

El layout protege la interfaz; cada consulta, Server Action y ruta de archivos comprueba además su autorización. El instructor accede a sus aulas; el alumno debe tener una inscripción que coincida con su ID y número de control. Las respuestas correctas de evaluaciones permanecen en el servidor.

## Persistencia

| Información                                    | Ubicación                                              |
| ---------------------------------------------- | ------------------------------------------------------ |
| Personas, aulas, inscripciones y catálogos     | Tablas existentes de SICCAP.                           |
| Configuración, sesiones y materiales del curso | `cursos_online`.                                       |
| Avances, intentos de evaluación y actividad    | `aula_alumnos.aa_avances_json` y columnas de progreso. |
| Metadatos de entregas nuevas                   | `aa_avances_json.neoEntregas`.                         |
| Videos, materiales y guías cargadas            | `.data/aulas/<aulaId>/archivos/`.                      |
| Evidencias de alumnos                          | `.data/aulas/<aulaId>/entregas/<inscripcionId>/`.      |
| Conversaciones del foro                        | `.data/aulas/<aulaId>/foro.json`.                      |
| Historial y estado de lectura de avisos        | `.data/notificaciones/`.                               |

Las actualizaciones de progreso y entregas conservan los campos existentes y comprueban cambios concurrentes. Las revisiones de tareas incluyen una versión para evitar calificar una entrega reemplazada desde otra sesión.

El foro y los avisos usan escritura local con reemplazo atómico y una cola por recurso. Esta implementación requiere un único proceso de aplicación. Para varias instancias debe sustituirse por almacenamiento compartido con coordinación entre procesos.

## Archivos privados

Las cargas reciben nombres generados por el servidor y se guardan fuera de `public`. Los archivos se sirven por rutas que verifican sesión y acceso al aula. La reproducción soporta solicitudes de rangos. Las entregas no deben exponerse como archivos estáticos del proxy.

Los PDF utilizan el visor interno. La revisión de tareas muestra el documento con el panel de calificación en escritorio y un modal de datos en celular. Las entregas calificadas quedan en modo consulta.

## Dependencias de ejecución

La aplicación usa su propio código, su carpeta `.data` y la conexión configurada al esquema de SICCAP. Los foros se leen de `.data/aulas/<aulaId>/foro.json` y las entregas de la inscripción del alumno en la base de datos.

Next.js requiere un proceso Node.js activo. Apache o Nginx pueden exponerlo mediante HTTPS como proxy inverso, pero no interpretan Server Components, Server Actions ni consultas de Prisma. Los archivos compilados de `.next` forman parte del servidor de Next.js; no constituyen una página estática para `htdocs`.

Al trasladar el sistema al VPS, se necesitan el repositorio, sus dependencias instaladas, una compilación de producción, las variables de entorno y los datos persistentes. Git no incluye credenciales, base de datos ni archivos privados de las aulas.

## Convenciones

- Bun y `bun.lock` son la referencia para instalar dependencias.
- Prettier mantiene el formato y ESLint revisa el código.
- Las reglas de dominio y las consultas se ubican en `lib`; los componentes organizan la interfaz.
- Los componentes con estado o eventos declaran `"use client"`. Los módulos privados declaran `server-only`.
- Conserva la validación de propiedad y versión al ampliar acciones de escritura.
- Configuración y datos privados se mantienen fuera de Git.
