# Indice de Requerimientos Funcionales - MGN-001 Auth

## Resumen del Modulo

| Campo | Valor |
|-------|-------|
| **Codigo** | MGN-001 |
| **Nombre** | Auth - Autenticacion |
| **Prioridad** | P0 - Critica |
| **Total RFs** | 5 |
| **Estado** | En documentacion |
| **Fecha** | 2025-12-05 |

---

## Descripcion General

El modulo de autenticacion es el pilar fundamental de seguridad del ERP. Proporciona:

- **Autenticacion**: Verificacion de identidad del usuario
- **Autorizacion**: Generacion de tokens con permisos
- **Gestion de Sesiones**: Control del ciclo de vida de sesiones
- **Seguridad**: Proteccion contra ataques comunes

---

## Lista de Requerimientos Funcionales

| ID | Nombre | Prioridad | Complejidad | Estado | Story Points |
|----|--------|-----------|-------------|--------|--------------|
| [RF-AUTH-001](./RF-AUTH-001.md) | Login con Email y Password | P0 | Media | Aprobado | 10 |
| [RF-AUTH-002](./RF-AUTH-002.md) | Generacion y Validacion JWT | P0 | Alta | Aprobado | 9 |
| [RF-AUTH-003](./RF-AUTH-003.md) | Refresh Token y Renovacion | P0 | Media | Aprobado | 10 |
| [RF-AUTH-004](./RF-AUTH-004.md) | Logout y Revocacion | P0 | Baja | Aprobado | 6 |
| [RF-AUTH-005](./RF-AUTH-005.md) | Recuperacion de Password | P1 | Media | Aprobado | 10 |

**Total Story Points:** 45

---

## Grafo de Dependencias

```
RF-AUTH-001 (Login)
    │
    ├──► RF-AUTH-002 (JWT Tokens)
    │        │
    │        └──► RF-AUTH-003 (Refresh Token)
    │                 │
    │                 └──► RF-AUTH-004 (Logout)
    │
    └──► RF-AUTH-005 (Password Recovery)
              │
              └──► RF-AUTH-004 (Logout) [logout-all]
```

### Orden de Implementacion Recomendado

1. **RF-AUTH-001** - Login (base de todo)
2. **RF-AUTH-002** - JWT Tokens (generacion)
3. **RF-AUTH-003** - Refresh Token (renovacion)
4. **RF-AUTH-004** - Logout (cierre de sesion)
5. **RF-AUTH-005** - Password Recovery (recuperacion)

---

## Endpoints del Modulo

| Metodo | Endpoint | RF | Descripcion |
|--------|----------|-----|-------------|
| POST | `/api/v1/auth/login` | RF-AUTH-001 | Autenticar usuario |
| POST | `/api/v1/auth/refresh` | RF-AUTH-003 | Renovar tokens |
| POST | `/api/v1/auth/logout` | RF-AUTH-004 | Cerrar sesion |
| POST | `/api/v1/auth/logout-all` | RF-AUTH-004 | Cerrar todas las sesiones |
| POST | `/api/v1/auth/password/request-reset` | RF-AUTH-005 | Solicitar recuperacion |
| POST | `/api/v1/auth/password/reset` | RF-AUTH-005 | Cambiar password |
| GET | `/api/v1/auth/password/validate-token/:token` | RF-AUTH-005 | Validar token reset |

---

## Tablas de Base de Datos

| Tabla | RF | Descripcion |
|-------|-----|-------------|
| `users` | RF-AUTH-001 | Usuarios (existente, agregar columnas) |
| `refresh_tokens` | RF-AUTH-002, RF-AUTH-003 | Tokens de refresh |
| `revoked_tokens` | RF-AUTH-002 | Blacklist de tokens |
| `session_history` | RF-AUTH-001, RF-AUTH-004 | Historial de sesiones |
| `login_attempts` | RF-AUTH-001 | Control de intentos fallidos |
| `password_reset_tokens` | RF-AUTH-005 | Tokens de recuperacion |
| `password_history` | RF-AUTH-005 | Historial de passwords |

---

## Criterios de Aceptacion Consolidados

### Seguridad

- [ ] Passwords hasheados con bcrypt (salt rounds = 12)
- [ ] Tokens JWT firmados con RS256
- [ ] Refresh tokens en httpOnly cookies
- [ ] Access tokens con expiracion corta (15 min)
- [ ] Deteccion de token replay
- [ ] Rate limiting en todos los endpoints
- [ ] No revelar existencia de emails

### Funcionalidad

- [ ] Login con email/password funcional
- [ ] Generacion correcta de par de tokens
- [ ] Refresh automatico antes de expiracion
- [ ] Logout individual y global
- [ ] Recuperacion de password via email

### Auditoria

- [ ] Todos los logins registrados
- [ ] Todos los logouts registrados
- [ ] Intentos fallidos registrados
- [ ] Cambios de password registrados

---

## Reglas de Negocio Transversales

| ID | Regla | Aplica a |
|----|-------|----------|
| RN-T001 | Multi-tenancy: tenant_id obligatorio en tokens | Todos |
| RN-T002 | Usuarios pueden tener multiples sesiones | RF-001, RF-003 |
| RN-T003 | Maximo 5 sesiones activas por usuario | RF-001, RF-003 |
| RN-T004 | Bloqueo despues de 5 intentos fallidos | RF-001 |
| RN-T005 | Notificaciones de seguridad via email | RF-004, RF-005 |

---

## Estimacion Total

| Capa | Story Points |
|------|--------------|
| Database | 9 |
| Backend | 23 |
| Frontend | 13 |
| **Total** | **45** |

---

## Riesgos Identificados

| Riesgo | Probabilidad | Impacto | Mitigacion |
|--------|--------------|---------|------------|
| Vulnerabilidad en manejo de tokens | Media | Alto | Code review, testing seguridad |
| Performance en blacklist | Baja | Medio | Redis con TTL automatico |
| Email delivery failures | Media | Medio | Retry queue, logs |
| Session fixation | Baja | Alto | Regenerar tokens post-login |

---

## Referencias

### Documentacion Relacionada

- [DDL-SPEC-core_auth.md](../../02-modelado/database-design/DDL-SPEC-core_auth.md) - Especificacion de base de datos
- [ET-auth-backend.md](../../02-modelado/especificaciones-tecnicas/ET-auth-backend.md) - Especificacion tecnica backend
- [TP-auth.md](../../04-test-plans/TP-auth.md) - Plan de pruebas

### Directivas Aplicables

- `DIRECTIVA-DOCUMENTACION-PRE-DESARROLLO.md`
- `DIRECTIVA-PATRONES-ODOO.md`
- `ESTANDARES-API-REST-GENERICO.md`

---

## Historial de Cambios

| Version | Fecha | Autor | Cambios |
|---------|-------|-------|---------|
| 1.0 | 2025-12-05 | System | Creacion inicial con 5 RFs |

---

## Aprobaciones

| Rol | Nombre | Fecha | Firma |
|-----|--------|-------|-------|
| Analista | System | 2025-12-05 | [x] |
| Tech Lead | - | - | [ ] |
| Product Owner | - | - | [ ] |
