# AN-004: Requisitos No Funcionales

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

---

## 1. Resumen

Este documento define los atributos de calidad (requisitos no funcionales) que el sistema debe cumplir, estableciendo métricas medibles y criterios de aceptación.

---

## 2. Requisitos No Funcionales

### RNF-001: Rendimiento - Tiempo de Respuesta

| Atributo | Valor |
|----------|-------|
| **ID** | RNF-001 |
| **Categoría** | Rendimiento |
| **Prioridad** | Alta |
| **Métrica** | Tiempo de respuesta < 200ms (P95) |

**Descripción:**
El sistema debe responder a las solicitudes del usuario en menos de 200 milisegundos en el percentil 95.

**Criterios de Aceptación:**

| Operación | Tiempo Máximo |
|-----------|---------------|
| Consulta lista de estudiantes | < 150ms |
| Consulta catálogo materias | < 100ms |
| Inscripción en materia | < 200ms |
| Crear/actualizar estudiante | < 200ms |
| Consulta compañeros de clase | < 150ms |

**Medición:**
- Herramienta: Application Insights / Logs estructurados
- Ambiente: Producción simulada
- Carga: 100 usuarios concurrentes

---

### RNF-002: Rendimiento - Throughput

| Atributo | Valor |
|----------|-------|
| **ID** | RNF-002 |
| **Categoría** | Rendimiento |
| **Prioridad** | Media |
| **Métrica** | >= 500 requests/segundo |

**Descripción:**
El sistema debe soportar al menos 500 solicitudes por segundo sin degradación.

**Criterios de Aceptación:**
- [ ] API soporta 500 req/s con latencia < 200ms
- [ ] Sin errores 5xx bajo carga normal
- [ ] CPU < 80% bajo carga máxima

---

### RNF-003: Seguridad - OWASP Top 10

| Atributo | Valor |
|----------|-------|
| **ID** | RNF-003 |
| **Categoría** | Seguridad |
| **Prioridad** | Crítica |
| **Estándar** | OWASP Top 10 2021 |

**Descripción:**
El sistema debe estar protegido contra las 10 vulnerabilidades más críticas según OWASP.

**Controles por Vulnerabilidad:**

| # | Vulnerabilidad | Control Implementado |
|---|----------------|----------------------|
| A01 | Broken Access Control | Validación de permisos en cada endpoint |
| A02 | Cryptographic Failures | HTTPS obligatorio, hashing de datos sensibles |
| A03 | Injection | Consultas parametrizadas (EF Core), validación de entrada |
| A04 | Insecure Design | Clean Architecture, validación en dominio |
| A05 | Security Misconfiguration | Headers de seguridad, CORS restrictivo |
| A06 | Vulnerable Components | Auditoría de dependencias (`dotnet list package --vulnerable`) |
| A07 | Auth Failures | Rate limiting, validación de sesión |
| A08 | Data Integrity Failures | Validación de DTOs, firma de respuestas |
| A09 | Logging Failures | Logs estructurados sin datos sensibles |
| A10 | SSRF | Validación de URLs, no fetch de recursos externos |

**Criterios de Aceptación:**
- [ ] Análisis SAST sin vulnerabilidades críticas
- [ ] Headers de seguridad configurados (CSP, X-Frame-Options, etc.)
- [ ] Sin secretos en código fuente
- [ ] HTTPS en todos los endpoints

---

### RNF-004: Seguridad - Validación de Entrada

| Atributo | Valor |
|----------|-------|
| **ID** | RNF-004 |
| **Categoría** | Seguridad |
| **Prioridad** | Alta |

**Descripción:**
Toda entrada del usuario debe ser validada tanto en frontend como en backend.

**Reglas de Validación:**

| Campo | Regla Frontend | Regla Backend |
|-------|----------------|---------------|
| Nombre | Required, MaxLength(100) | FluentValidation |
| Email | Required, EmailFormat | ValueObject + Validator |
| IDs | Numeric | Tipo fuerte (int) |

**Criterios de Aceptación:**
- [ ] Ningún input llega a la BD sin validación
- [ ] Mensajes de error claros y sin información sensible
- [ ] Sanitización de HTML en campos de texto

---

### RNF-005: Usabilidad - Responsive Design

| Atributo | Valor |
|----------|-------|
| **ID** | RNF-005 |
| **Categoría** | Usabilidad |
| **Prioridad** | Alta |
| **Estándar** | Mobile First |

**Descripción:**
La interfaz debe adaptarse correctamente a diferentes tamaños de pantalla.

**Breakpoints Soportados:**

| Dispositivo | Ancho | Soporte |
|-------------|-------|---------|
| Mobile | 320px - 480px | Obligatorio |
| Tablet | 481px - 768px | Obligatorio |
| Desktop | 769px - 1024px | Obligatorio |
| Large Desktop | > 1024px | Obligatorio |

**Criterios de Aceptación:**
- [ ] UI funcional en Chrome, Firefox, Safari, Edge
- [ ] Sin scroll horizontal en mobile
- [ ] Formularios usables con teclado virtual
- [ ] Touch targets >= 44px

---

### RNF-006: Usabilidad - Accesibilidad

| Atributo | Valor |
|----------|-------|
| **ID** | RNF-006 |
| **Categoría** | Usabilidad |
| **Prioridad** | Media |
| **Estándar** | WCAG 2.1 Nivel AA |

**Descripción:**
El sistema debe ser accesible para usuarios con discapacidades.

**Criterios de Aceptación:**
- [ ] Contraste de colores >= 4.5:1
- [ ] Navegación completa por teclado
- [ ] Labels en todos los inputs
- [ ] Atributos ARIA donde corresponda
- [ ] Textos alternativos en imágenes

---

### RNF-007: Mantenibilidad - Cobertura de Tests

| Atributo | Valor |
|----------|-------|
| **ID** | RNF-007 |
| **Categoría** | Mantenibilidad |
| **Prioridad** | Alta |
| **Métrica** | >= 80% cobertura |

**Descripción:**
El código debe tener una cobertura de tests unitarios mínima del 80%.

**Distribución de Tests:**

| Capa | Cobertura Mínima | Tipo de Tests |
|------|------------------|---------------|
| Domain | 90% | Unit tests |
| Application | 85% | Unit + Integration |
| Adapters | 70% | Integration |
| Frontend | 75% | Unit + Component |

**Criterios de Aceptación:**
- [ ] Cobertura global >= 80%
- [ ] Todas las reglas de negocio con tests
- [ ] Tests ejecutables en CI/CD

---

### RNF-008: Mantenibilidad - Calidad de Código

| Atributo | Valor |
|----------|-------|
| **ID** | RNF-008 |
| **Categoría** | Mantenibilidad |
| **Prioridad** | Media |

**Descripción:**
El código debe seguir estándares de calidad medibles.

**Métricas:**

| Métrica | Umbral |
|---------|--------|
| Complejidad ciclomática | < 10 por método |
| Duplicación de código | < 3% |
| Archivos | < 100 líneas |
| Métodos | < 30 líneas |
| Warnings del compilador | 0 |

**Herramientas:**
- .NET: `dotnet format`, Roslyn Analyzers
- Angular: ESLint, Prettier

---

### RNF-009: Disponibilidad

| Atributo | Valor |
|----------|-------|
| **ID** | RNF-009 |
| **Categoría** | Disponibilidad |
| **Prioridad** | Media |
| **Métrica** | 99% uptime |

**Descripción:**
El sistema debe estar disponible el 99% del tiempo durante horario laboral.

**Criterios de Aceptación:**
- [ ] Health checks implementados
- [ ] Reinicio automático ante fallos
- [ ] Graceful shutdown
- [ ] Logs de errores para diagnóstico

---

### RNF-010: Escalabilidad

| Atributo | Valor |
|----------|-------|
| **ID** | RNF-010 |
| **Categoría** | Escalabilidad |
| **Prioridad** | Baja |

**Descripción:**
La arquitectura debe permitir escalado horizontal sin cambios de código.

**Criterios de Aceptación:**
- [ ] Aplicación stateless
- [ ] Configuración externalizada
- [ ] Base de datos separada de aplicación
- [ ] Contenedores Docker funcionales

---

## 3. Matriz de Priorización

| ID | Requisito | Prioridad | Impacto | Esfuerzo |
|----|-----------|-----------|---------|----------|
| RNF-003 | Seguridad OWASP | Crítica | Alto | Alto |
| RNF-001 | Tiempo respuesta | Alta | Alto | Medio |
| RNF-004 | Validación entrada | Alta | Alto | Medio |
| RNF-005 | Responsive | Alta | Alto | Medio |
| RNF-007 | Cobertura tests | Alta | Medio | Alto |
| RNF-002 | Throughput | Media | Medio | Medio |
| RNF-006 | Accesibilidad | Media | Medio | Medio |
| RNF-008 | Calidad código | Media | Medio | Bajo |
| RNF-009 | Disponibilidad | Media | Alto | Medio |
| RNF-010 | Escalabilidad | Baja | Bajo | Alto |

---

## 4. Estrategia de Validación

### Tests de Rendimiento
```bash
# k6 para load testing
k6 run --vus 100 --duration 30s tests/performance/api-load.js
```

### Tests de Seguridad
```bash
# OWASP ZAP scan
docker run -t owasp/zap2docker-stable zap-baseline.py -t https://localhost:5001
```

### Tests de Accesibilidad
```bash
# Lighthouse CI
npx lighthouse https://localhost:4200 --only-categories=accessibility
```

---

## 5. Aprobación

| Rol | Nombre | Fecha | Firma |
|-----|--------|-------|-------|
| Arquitecto | Sistema | 2026-01-07 | ✓ |
| Líder Técnico | Pendiente | - | - |
| QA Lead | Pendiente | - | - |
