# AN-001: Análisis de Requisitos Funcionales

**Proyecto:** Sistema de Registro de Estudiantes - Inter Rapidísimo
**Rol:** Analista de Sistemas
**Fecha:** 2026-01-07

---

## 1. Resumen Ejecutivo

Sistema web para gestión de inscripciones estudiantiles con programa de créditos académicos. Permite CRUD de estudiantes, inscripción en materias con restricciones de negocio, y visualización de compañeros de clase.

---

## 2. Requisitos Funcionales Identificados

### RF-001: Registro de Estudiantes (CRUD)

| Atributo | Descripción |
|----------|-------------|
| **ID** | RF-001 |
| **Nombre** | Gestión CRUD de Estudiantes |
| **Descripción** | El sistema debe permitir crear, leer, actualizar y eliminar registros de estudiantes |
| **Prioridad** | Alta |
| **Fuente** | Enunciado punto 1 |

**Criterios de Aceptación:**
- [ ] CA-001.1: Usuario puede crear estudiante con nombre y email válido
- [ ] CA-001.2: Usuario puede consultar lista de estudiantes registrados
- [ ] CA-001.3: Usuario puede actualizar datos de un estudiante existente
- [ ] CA-001.4: Usuario puede eliminar un estudiante (cascade con inscripciones)
- [ ] CA-001.5: Email debe ser único en el sistema

---

### RF-002: Programa de Créditos

| Atributo | Descripción |
|----------|-------------|
| **ID** | RF-002 |
| **Nombre** | Adhesión a Programa de Créditos |
| **Descripción** | Los estudiantes se inscriben en un programa basado en créditos académicos |
| **Prioridad** | Alta |
| **Fuente** | Enunciado punto 2 |

**Criterios de Aceptación:**
- [ ] CA-002.1: Sistema muestra créditos totales del estudiante
- [ ] CA-002.2: Créditos se calculan automáticamente según materias inscritas
- [ ] CA-002.3: Máximo 9 créditos por estudiante (3 materias × 3 créditos)

---

### RF-003: Catálogo de Materias

| Atributo | Descripción |
|----------|-------------|
| **ID** | RF-003 |
| **Nombre** | Gestión de 10 Materias |
| **Descripción** | El sistema debe gestionar un catálogo fijo de 10 materias académicas |
| **Prioridad** | Alta |
| **Fuente** | Enunciado punto 3 |

**Criterios de Aceptación:**
- [ ] CA-003.1: Sistema contiene exactamente 10 materias predefinidas
- [ ] CA-003.2: Usuario puede consultar catálogo completo de materias
- [ ] CA-003.3: Cada materia muestra nombre, créditos y profesor asignado

---

### RF-004: Valor de Créditos por Materia

| Atributo | Descripción |
|----------|-------------|
| **ID** | RF-004 |
| **Nombre** | Asignación de 3 Créditos por Materia |
| **Descripción** | Cada materia del catálogo equivale a exactamente 3 créditos |
| **Prioridad** | Alta |
| **Fuente** | Enunciado punto 4 |

**Criterios de Aceptación:**
- [ ] CA-004.1: Todas las materias tienen valor fijo de 3 créditos
- [ ] CA-004.2: Sistema muestra créditos en detalle de cada materia

---

### RF-005: Límite de Materias por Estudiante

| Atributo | Descripción |
|----------|-------------|
| **ID** | RF-005 |
| **Nombre** | Máximo 3 Materias por Estudiante |
| **Descripción** | Un estudiante solo puede inscribirse en máximo 3 materias |
| **Prioridad** | Alta |
| **Fuente** | Enunciado punto 5 |

**Criterios de Aceptación:**
- [ ] CA-005.1: Sistema impide inscripción si estudiante ya tiene 3 materias
- [ ] CA-005.2: Sistema muestra contador de materias inscritas
- [ ] CA-005.3: Mensaje de error claro al intentar exceder límite

---

### RF-006: Asignación Profesores-Materias

| Atributo | Descripción |
|----------|-------------|
| **ID** | RF-006 |
| **Nombre** | 5 Profesores con 2 Materias c/u |
| **Descripción** | El sistema tiene 5 profesores, cada uno dicta exactamente 2 materias |
| **Prioridad** | Alta |
| **Fuente** | Enunciado punto 6 |

**Criterios de Aceptación:**
- [ ] CA-006.1: Sistema contiene exactamente 5 profesores predefinidos
- [ ] CA-006.2: Cada profesor tiene asignadas exactamente 2 materias
- [ ] CA-006.3: Usuario puede ver qué profesor dicta cada materia

---

### RF-007: Restricción de Profesor Único

| Atributo | Descripción |
|----------|-------------|
| **ID** | RF-007 |
| **Nombre** | Prohibición de Mismo Profesor |
| **Descripción** | Un estudiante no puede inscribirse en dos materias del mismo profesor |
| **Prioridad** | Crítica |
| **Fuente** | Enunciado punto 7 |

**Criterios de Aceptación:**
- [ ] CA-007.1: Sistema valida profesor al momento de inscripción
- [ ] CA-007.2: Materias no disponibles se muestran deshabilitadas con razón
- [ ] CA-007.3: Mensaje de error específico: "Ya tienes una materia con este profesor"

---

### RF-008: Visualización de Registros

| Atributo | Descripción |
|----------|-------------|
| **ID** | RF-008 |
| **Nombre** | Consulta de Otros Estudiantes |
| **Descripción** | Cada estudiante puede ver en línea los registros de otros estudiantes |
| **Prioridad** | Media |
| **Fuente** | Enunciado punto 8 |

**Criterios de Aceptación:**
- [ ] CA-008.1: Usuario puede ver lista de todos los estudiantes registrados
- [ ] CA-008.2: Información visible: nombre (según restricciones de privacidad)

---

### RF-009: Compañeros de Clase

| Atributo | Descripción |
|----------|-------------|
| **ID** | RF-009 |
| **Nombre** | Ver Nombres de Compañeros por Materia |
| **Descripción** | El estudiante puede ver solo el nombre de alumnos con quienes compartirá clase |
| **Prioridad** | Media |
| **Fuente** | Enunciado punto 9 |

**Criterios de Aceptación:**
- [ ] CA-009.1: Sistema muestra compañeros agrupados por materia
- [ ] CA-009.2: Solo se muestra el nombre (no email ni otros datos)
- [ ] CA-009.3: Solo muestra compañeros de materias donde está inscrito

---

### RF-010: Autenticación y Roles

| Atributo | Descripción |
|----------|-------------|
| **ID** | RF-010 |
| **Nombre** | Sistema de Autenticación con Roles |
| **Descripción** | El sistema debe soportar autenticación JWT con roles Admin y Student |
| **Prioridad** | Alta |
| **Fuente** | Requisito de seguridad implícito |

**Criterios de Aceptación:**
- [ ] CA-010.1: Usuario puede iniciar sesión con credenciales válidas
- [ ] CA-010.2: Sistema genera token JWT con claims de rol
- [ ] CA-010.3: Rutas protegidas requieren autenticación
- [ ] CA-010.4: Admin puede acceder a gestión de estudiantes
- [ ] CA-010.5: Student solo puede acceder a su dashboard personal

---

### RF-011: Flujo de Activación de Estudiantes

| Atributo | Descripción |
|----------|-------------|
| **ID** | RF-011 |
| **Nombre** | Activación de Cuenta de Estudiante |
| **Descripción** | Admin crea estudiantes con código de activación. Estudiantes activan su cuenta para crear credenciales |
| **Prioridad** | Alta |
| **Fuente** | Requisito de seguridad y UX |

**Criterios de Aceptación:**
- [ ] CA-011.1: Admin puede crear estudiante y obtener código de activación
- [ ] CA-011.2: Código de activación es de 12 caracteres alfanuméricos
- [ ] CA-011.3: Código de activación expira en 48 horas
- [ ] CA-011.4: Estudiante puede validar código y crear credenciales
- [ ] CA-011.5: Sistema genera código de recuperación al activar
- [ ] CA-011.6: Código de recuperación se muestra solo una vez
- [ ] CA-011.7: Admin puede regenerar código si expira

---

### RF-012: Control de Acceso por Rol

| Atributo | Descripción |
|----------|-------------|
| **ID** | RF-012 |
| **Nombre** | Restricción de Acceso por Rol |
| **Descripción** | El sistema debe restringir funcionalidades según el rol del usuario |
| **Prioridad** | Alta |
| **Fuente** | Requisito de seguridad |

**Criterios de Aceptación:**
- [ ] CA-012.1: Admin puede ver y gestionar todos los estudiantes
- [ ] CA-012.2: Student no puede acceder a rutas de administración
- [ ] CA-012.3: Student solo ve su información y materias
- [ ] CA-012.4: Intentos de acceso no autorizado redirigen al dashboard

---

## 3. Matriz de Trazabilidad

| Requisito | Historia | Componente Backend | Componente Frontend |
|-----------|----------|-------------------|---------------------|
| RF-001 | US-001 | StudentController, StudentService | StudentFormComponent |
| RF-002 | US-002 | EnrollmentService | DashboardComponent |
| RF-003 | US-003 | SubjectController | SubjectListComponent |
| RF-004 | US-003 | Subject Entity | SubjectCardComponent |
| RF-005 | US-004 | EnrollmentValidator | EnrollmentComponent |
| RF-006 | US-003 | Professor Entity | ProfessorListComponent |
| RF-007 | US-005 | EnrollmentDomainService | EnrollmentComponent |
| RF-008 | US-006 | StudentQuery | StudentListComponent |
| RF-009 | US-007 | ClassmatesQuery | ClassmatesComponent |
| RF-010 | US-010 | LoginCommand, JwtService | LoginComponent |
| RF-011 | US-011 | ActivateAccountCommand | ActivateComponent |
| RF-012 | US-012 | AuthorizationMiddleware | auth.guard.ts |

---

## 4. Dependencias entre Requisitos

```
RF-010 (Autenticación)
    ↓
RF-011 (Activación) ──► RF-012 (Control Acceso)
    ↓                         ↓
RF-001 (Estudiantes)          │
    ↓                         ▼
RF-002 (Programa Créditos) ← RF-004 (3 créditos/materia)
    ↓
RF-005 (Max 3 materias) ← RF-003 (10 materias)
    ↓                         ↓
RF-007 (Restricción profesor) ← RF-006 (5 profesores)
    ↓
RF-008/RF-009 (Visualización)
```

---

## 5. Aprobación

| Rol | Nombre | Fecha | Firma |
|-----|--------|-------|-------|
| Analista | Sistema | 2026-01-07 | ✓ |
| Product Owner | Pendiente | - | - |
| Líder Técnico | Pendiente | - | - |
