# 03 — Matriz de roles y permisos *(Entregable C)*

## Los cinco roles

| Rol | Naturaleza | Ámbito de datos |
|---|---|---|
| **Superadmin** | Rol técnico-administrativo máximo | Toda la institución, todos los años |
| **Coordinador** | Rol académico-administrativo | Toda la institución, sin configuración institucional ni de años |
| **Docente** | Rol académico operativo | **Solo** sus asignaciones (asignatura + curso + año) |
| **Acudiente** | Rol de consulta | **Solo** los estudiantes asociados a él |
| **Estudiante** | Rol de consulta | **Solo** su propia información |

### Director de curso — sub-rol derivado, no rol propio [RT]

La especificación (§8, §37) otorga capacidades adicionales al director de curso: emitir comunicados a su curso y
registrar observaciones generales de sus estudiantes. **No se modela como un rol separado**, sino como un permiso
que se deriva automáticamente de la asignación *"soy director del curso X en el año Y"*.

Razón: un rol separado obligaría a asignarlo y revocarlo manualmente cada año, y a mantenerlo sincronizado con la
asignación real de dirección. Derivándolo, cambiar el director de curso en el módulo de cursos actualiza los
permisos al instante y sin posibilidad de desincronización.

Y, como exige §8, **ser director de curso no impide** ser docente titular de asignaturas en ese mismo curso o en
otros: son dos relaciones independientes que se suman.

---

## Convenciones de la matriz

| Símbolo | Significado |
|---|---|
| **T** | Total — crear, leer, actualizar, activar/desactivar |
| **E** | Escritura limitada — solo sobre los recursos de su ámbito |
| **L** | Solo lectura |
| **L\*** | Solo lectura restringida a su ámbito |
| **—** | Sin acceso. La opción **no aparece** en el menú **y** el servidor rechaza la petición |
| **[DP]** | Depende de una decisión pendiente |

---

## C.1 — Configuración e institución

| Funcionalidad | Superadmin | Coordinador | Docente | Acudiente | Estudiante |
|---|:---:|:---:|:---:|:---:|:---:|
| Ver datos del colegio | T | L | — | — | — |
| Editar datos del colegio | T | — | — | — | — |
| Cargar logo y escudo | T | — | — | — | — |
| Configurar encabezado y firmas del boletín | T | — | — | — | — |
| Configurar escala de desempeño | T | — | — | — | — |
| Configurar nota mínima / máxima / decimales | T | — | — | — | — |
| Configurar política de recuperación | T | — | — | — | — |
| Configurar visibilidad para familias | T | — | — | — | — |

> §7 excluye al Coordinador de "la configuración/datos institucionales sensibles". Se resuelve como **lectura
> total, escritura nula** — ver [AMB-11](00-hallazgos-y-decisiones.md#amb-11--datos-institucionales-sensibles-del-colegio-no-está-definido).

## C.2 — Años y periodos

| Funcionalidad | Superadmin | Coordinador | Docente | Acudiente | Estudiante |
|---|:---:|:---:|:---:|:---:|:---:|
| Crear / editar año académico | T | — | — | — | — |
| Activar / desactivar año | T | — | — | — | — |
| Cerrar año | T | — | — | — | — |
| Definir número de periodos | T | — | — | — | — |
| Crear / editar periodos | T | — | — | — | — |
| Definir año y periodo predeterminados | T | — | — | — | — |
| **Cerrar periodo** | T | **T** | — | — | — |
| **Reabrir periodo** | T | **T** | — | — | — |
| Cambiar el contexto de consulta (año/periodo) | T | T | L\* | — | — |
| Copiar estructura académica del año anterior | T | — | — | — | — |

> El Coordinador **sí** cierra y reabre periodos (§7, §46) pero **no** administra años ni define cuántos periodos
> hay (§7). Ambas operaciones quedan auditadas con motivo obligatorio.

## C.3 — Estructura académica

| Funcionalidad | Superadmin | Coordinador | Docente | Acudiente | Estudiante |
|---|:---:|:---:|:---:|:---:|:---:|
| Administrar grados | T | T | — | — | — |
| Crear / editar cursos | T | T | — | — | — |
| Activar / desactivar cursos | T | T | — | — | — |
| Asignar director de curso | T | T | — | — | — |
| Administrar áreas | T | T | — | — | — |
| Administrar asignaturas | T | T | — | — | — |
| Ofertar asignaturas por curso | T | T | — | — | — |
| Asignar docente titular | T | T | — | — | — |
| Ver estructura académica | T | T | L\* | — | — |

## C.4 — Personas

| Funcionalidad | Superadmin | Coordinador | Docente | Acudiente | Estudiante |
|---|:---:|:---:|:---:|:---:|:---:|
| Crear / editar docentes | T | T | — | — | — |
| Activar / desactivar docentes | T | T | — | — | — |
| Crear / editar estudiantes | T | T | — | — | — |
| Ver ficha completa del estudiante | T | T | L\* | L\* | L\* |
| Ver campos sensibles (EPS, RH, obs. médicas) | L | L | — | L\* | — |
| Crear / editar acudientes | T | T | — | — | — |
| Asociar acudiente a estudiante | T | T | — | — | — |
| Ver el listado de estudiantes de un curso | T | T | L\* | — | — |

> Los campos sensibles se restringen por [RG-02](00-hallazgos-y-decisiones.md#rg-02--datos-sensibles-de-menores--ley-1581-de-2012)
> (datos de salud de menores, Ley 1581 de 2012). El docente ve la ficha académica del estudiante, no su historia
> clínica. **[RT]** — la especificación no lo restringe explícitamente.

## C.5 — Matrícula y movimientos

| Funcionalidad | Superadmin | Coordinador | Docente | Acudiente | Estudiante |
|---|:---:|:---:|:---:|:---:|:---:|
| Buscar estudiante por documento | T | T | — | — | — |
| Matricular estudiante | T | T | — | — | — |
| Editar matrícula | T | T | — | — | — |
| Cambiar estado de matrícula (retiro, etc.) | T | T | — | — | — |
| Trasladar de curso dentro del año | T | T | — | — | — |
| Ver histórico de matrículas | T | T | — | L\* | L\* |
| Ejecutar promoción al año siguiente | T | T | — | — | — |
| Anular / eliminar una matrícula | **—** | **—** | — | — | — |

> Nadie elimina matrículas (§48). El estado *Retirado* o *Anulado* cubre todos los casos reales conservando la
> trazabilidad.

## C.6 — Evaluación

| Funcionalidad | Superadmin | Coordinador | Docente | Acudiente | Estudiante |
|---|:---:|:---:|:---:|:---:|:---:|
| Crear / editar desempeños (logros) | T | T | **E** | — | — |
| Asignar desempeños al periodo | T | T | **E** | — | — |
| Digitar notas | T | T | **E** | — | — |
| Editar notas | T | T | **E** | — | — |
| Registrar recuperaciones | T | T | **E** | — | — |
| Registrar observación general del estudiante | T | T | **E** (director de curso) | — | — |
| Registrar observación por asignatura | T | T | **E** | — | — |
| Ver notas de un curso completo | T | T | L\* (sus asignaturas) | — | — |
| **Ver notas individuales por asignatura** | T | T | L\* | **—** | **—** |
| Ver indicador de rendimiento | T | T | L\* | L\* | L\* |
| Ver puesto del estudiante | T | T | L\* | [DP-01] | [DP-01] |
| Modificar notas en periodo cerrado | T | T | **—** | — | — |
| Modificar información de año cerrado | **—** | **—** | — | — | — |

> **E** para el docente significa estrictamente: *solo sobre las asignaturas donde es titular, solo en cursos donde
> tiene esa asignación, solo en periodos abiertos del año activo* (§8, §14, §31). Es la restricción más importante
> del sistema y se valida en el servidor en cada operación.

## C.7 — Comunicación

| Funcionalidad | Superadmin | Coordinador | Docente | Acudiente | Estudiante |
|---|:---:|:---:|:---:|:---:|:---:|
| Crear tarea | T | T | **E** | — | — |
| Editar / eliminar tarea propia | T | T | **E** | — | — |
| Eliminar tarea de otro docente | T | T | — | — | — |
| Consultar tareas | T | T | L\* | L\* | L\* |
| Comunicado a toda la institución | T | **T** | — | — | — |
| Comunicado a varios cursos | T | **T** | — | — | — |
| Comunicado a su curso (director) | T | T | **E** | — | — |
| Comunicado a sus cursos (docente titular) | T | T | **E** | — | — |
| Consultar comunicados | T | T | L\* | L\* | L\* |

> "Eliminar" una tarea es siempre **desactivación lógica** (§48): desaparece de la vista de estudiantes y
> acudientes, pero queda registrada.

## C.8 — Boletines y reportes

| Funcionalidad | Superadmin | Coordinador | Docente | Acudiente | Estudiante |
|---|:---:|:---:|:---:|:---:|:---:|
| Generar boletín individual | T | T | L\* (sus estudiantes) | **—** | **—** |
| Generar boletines de un curso | T | T | L\* (si es director) | — | — |
| Reportes administrativos | T | T | — | — | — |
| Reportes académicos | T | T | L\* | — | — |
| Reportes de carga docente | T | T | L\* (propia) | — | — |
| Reportes de tareas | T | T | L\* | — | — |
| Exportar a Excel / PDF / imprimir | T | T | L\* | — | — |

> **[DP-02]** — la exclusión de la familia del boletín es explícita en §9 y §41 y aquí se respeta literalmente.
> Que el docente pueda o no generar boletines de sus estudiantes **no está definido en la especificación**; se
> propone permitirlo en solo lectura, porque es útil para la atención a acudientes y no expone nada que el
> docente no vea ya.

## C.9 — Usuarios, seguridad y auditoría

| Funcionalidad | Superadmin | Coordinador | Docente | Acudiente | Estudiante |
|---|:---:|:---:|:---:|:---:|:---:|
| Crear / editar usuarios | T | E (roles inferiores) | — | — | — |
| Asignar roles | T | — | — | — | — |
| Restablecer contraseña de docente | T | T | — | — | — |
| Restablecer contraseña de estudiante / acudiente | T | T | — | — | — |
| Restablecer contraseña de Coordinador | T | **—** | — | — | — |
| Restablecer contraseña de Superadmin | T (la propia) | **—** | — | — | — |
| Cambiar la propia contraseña | T | T | T | **—** [DP-08] | **—** [DP-08] |
| Bloquear / desbloquear cuenta | T | T | — | — | — |
| Consultar auditoría completa | T | L | — | — | — |
| Consultar auditoría de su ámbito | T | L | **—** | — | — |
| Exportar auditoría | T | — | — | — | — |

> La fila crítica es la de **restablecimiento cruzado**: un Coordinador nunca puede restablecer la contraseña de un
> Superadmin ni de otro Coordinador. Sin esta regla, el Coordinador puede escalar a Superadmin en dos clics —
> ver [AMB-10](00-hallazgos-y-decisiones.md#amb-10--el-coordinador-puede-restablecer-contraseñas--de-quién).

## C.10 — Dashboards

| Funcionalidad | Superadmin | Coordinador | Docente | Acudiente | Estudiante |
|---|:---:|:---:|:---:|:---:|:---:|
| Dashboard institucional | T | T | — | — | — |
| Dashboard académico de coordinación | T | T | — | — | — |
| Dashboard docente | T (vista) | T (vista) | L\* | — | — |
| Dashboard familiar | — | — | — | L\* | L\* |

---

## Modelo de autorización

### Tres niveles, evaluados en orden

```
Petición del usuario
        │
        ▼
┌───────────────────────────────────────────────────────────┐
│ NIVEL 1 — ¿Está autenticado y la sesión es válida?        │ ──► No: al login
└───────────────────┬───────────────────────────────────────┘
                    ▼
┌───────────────────────────────────────────────────────────┐
│ NIVEL 2 — ¿Su rol tiene el PERMISO para esta acción?      │ ──► No: 403
│           ej. "notas.editar"                              │
└───────────────────┬───────────────────────────────────────┘
                    ▼
┌───────────────────────────────────────────────────────────┐
│ NIVEL 3 — ¿Tiene ÁMBITO sobre ESTE recurso concreto?      │ ──► No: 403
│  · Docente: ¿es titular de esta asignatura en este curso  │
│    y este año?                                            │
│  · Acudiente: ¿este estudiante está asociado a él?        │
│  · Estudiante: ¿este dato es suyo?                        │
│  · Todos: ¿el periodo está abierto? ¿el año está activo?  │
└───────────────────┬───────────────────────────────────────┘
                    ▼
              Ejecutar + Auditar
```

**El nivel 3 es el que más se olvida en los sistemas académicos y es el que causa las fugas reales.** Un docente
con permiso `notas.editar` no debe poder editar *cualquier* nota. La comprobación de ámbito no es opcional ni
delegable a la interfaz: vive en el servicio de autorización y se invoca **antes de cualquier escritura**.

### Permisos como catálogo, no como código

Los permisos se definen como registros (`modulo.accion`) y se asignan a roles en base de datos, no incrustados en
condicionales dispersos. Ventajas:

- Añadir el rol *Secretaría* en el futuro no requiere tocar los módulos existentes.
- La matriz de esta página es **consultable desde el sistema**, no solo desde este documento.
- La auditoría puede registrar exactamente qué permiso autorizó cada operación.

### El menú refleja los permisos, pero no los sustituye

El menú lateral se construye dinámicamente a partir de los permisos efectivos (§63). Esto es **exclusivamente
usabilidad**: ocultar una opción no protege nada. La protección real está en los niveles 2 y 3, del lado del
servidor, en cada petición — incluidas las peticiones AJAX y las descargas de archivos (§50).

---

## Casos borde resueltos

| Situación | Comportamiento |
|---|---|
| Un docente es también acudiente de un estudiante | Una sola cuenta, dos roles. Selector de perfil en la barra superior. Cada perfil ve estrictamente su ámbito. |
| Un docente deja de ser titular a mitad de año | Pierde el acceso de escritura de inmediato. Las notas que ya digitó permanecen, con su autoría registrada. |
| El director de curso cambia | El permiso derivado se traslada automáticamente al nuevo director. Las observaciones ya escritas conservan su autor. |
| Un estudiante se retira | Su usuario se desactiva. Su histórico permanece consultable para Superadmin y Coordinador. |
| Un acudiente tiene hijos en dos cursos | Ve ambos, con un selector de estudiante. Nunca ve datos de estudiantes no asociados. |
| Se consulta un año cerrado | Todo el sistema pasa a solo lectura para ese contexto, para todos los roles (§47). |
| Un docente intenta calificar en periodo cerrado | El servidor rechaza aunque la pantalla se hubiera cargado antes del cierre (ver [RG-07](00-hallazgos-y-decisiones.md#rg-07--concurrencia-en-la-digitación-de-notas)). |
