# Indice de Requerimientos Funcionales - MGN-002 Users ## Resumen del Modulo | Campo | Valor | |-------|-------| | **Codigo** | MGN-002 | | **Nombre** | Users - Gestion de Usuarios | | **Prioridad** | P0 - Critica | | **Total RFs** | 5 | | **Estado** | En documentacion | | **Fecha** | 2025-12-05 | --- ## Descripcion General El modulo de usuarios gestiona el ciclo de vida completo de los usuarios del sistema, incluyendo: - **CRUD de Usuarios**: Crear, listar, actualizar y eliminar usuarios (admin) - **Perfil Personal**: Cada usuario gestiona su propia informacion - **Cambio de Email**: Proceso seguro con verificacion - **Cambio de Password**: Autoservicio con validaciones - **Preferencias**: Personalizacion de la experiencia --- ## Lista de Requerimientos Funcionales | ID | Nombre | Prioridad | Complejidad | Estado | Story Points | |----|--------|-----------|-------------|--------|--------------| | [RF-USER-001](./RF-USER-001.md) | CRUD de Usuarios | P0 | Media | Aprobado | 13 | | [RF-USER-002](./RF-USER-002.md) | Perfil de Usuario | P1 | Baja | Aprobado | 7 | | [RF-USER-003](./RF-USER-003.md) | Cambio de Email | P1 | Media | Aprobado | 6 | | [RF-USER-004](./RF-USER-004.md) | Cambio de Password | P0 | Baja | Aprobado | 4 | | [RF-USER-005](./RF-USER-005.md) | Preferencias de Usuario | P2 | Baja | Aprobado | 7 | **Total Story Points:** 37 --- ## Grafo de Dependencias ``` RF-AUTH-001 (Login) │ ▼ RF-USER-001 (CRUD Usuarios) ─────────────────────────┐ │ │ ├──────────────────┬──────────────────┐ │ │ │ │ │ ▼ ▼ ▼ │ RF-USER-002 RF-USER-003 RF-USER-004 │ (Perfil) (Cambio Email) (Cambio Pass) │ │ │ │ └────────┬─────────┘ │ │ │ ▼ │ RF-USER-005 ◄───────────────────────────────┘ (Preferencias) ``` ### Orden de Implementacion Recomendado 1. **RF-USER-001** - CRUD de usuarios (base) 2. **RF-USER-004** - Cambio de password (seguridad basica) 3. **RF-USER-002** - Perfil de usuario (autoservicio) 4. **RF-USER-003** - Cambio de email (proceso complejo) 5. **RF-USER-005** - Preferencias (personalizacion) --- ## Endpoints del Modulo ### Gestion de Usuarios (Admin) | Metodo | Endpoint | RF | Descripcion | Permisos | |--------|----------|-----|-------------|----------| | POST | `/api/v1/users` | RF-USER-001 | Crear usuario | users:create | | GET | `/api/v1/users` | RF-USER-001 | Listar usuarios | users:read | | GET | `/api/v1/users/:id` | RF-USER-001 | Obtener usuario | users:read | | PATCH | `/api/v1/users/:id` | RF-USER-001 | Actualizar usuario | users:update | | DELETE | `/api/v1/users/:id` | RF-USER-001 | Eliminar usuario | users:delete | | POST | `/api/v1/users/:id/activate` | RF-USER-001 | Activar usuario | users:update | | POST | `/api/v1/users/:id/deactivate` | RF-USER-001 | Desactivar usuario | users:update | ### Perfil Personal (Self-service) | Metodo | Endpoint | RF | Descripcion | |--------|----------|-----|-------------| | GET | `/api/v1/users/me` | RF-USER-002 | Obtener mi perfil | | PATCH | `/api/v1/users/me` | RF-USER-002 | Actualizar mi perfil | | POST | `/api/v1/users/me/avatar` | RF-USER-002 | Subir avatar | | DELETE | `/api/v1/users/me/avatar` | RF-USER-002 | Eliminar avatar | | POST | `/api/v1/users/me/email/request-change` | RF-USER-003 | Solicitar cambio email | | GET | `/api/v1/users/email/verify-change` | RF-USER-003 | Verificar cambio email | | POST | `/api/v1/users/me/password` | RF-USER-004 | Cambiar password | | GET | `/api/v1/users/me/preferences` | RF-USER-005 | Obtener preferencias | | PATCH | `/api/v1/users/me/preferences` | RF-USER-005 | Actualizar preferencias | | POST | `/api/v1/users/me/preferences/reset` | RF-USER-005 | Reset preferencias | --- ## Tablas de Base de Datos | Tabla | Schema | RF | Descripcion | |-------|--------|-----|-------------| | `users` | core_users | RF-USER-001 | Tabla principal de usuarios | | `user_avatars` | core_users | RF-USER-002 | Historial de avatares | | `email_change_requests` | core_users | RF-USER-003 | Solicitudes de cambio email | | `password_history` | core_auth | RF-USER-004 | Historial de passwords | | `user_preferences` | core_users | RF-USER-005 | Preferencias por usuario | --- ## Modelo de Datos Principal ```mermaid erDiagram users ||--o| user_preferences : "has" users ||--o{ user_avatars : "has" users ||--o{ email_change_requests : "requests" users ||--o{ password_history : "has" users }o--|| tenants : "belongs to" users { uuid id PK uuid tenant_id FK varchar email varchar password_hash varchar first_name varchar last_name varchar phone varchar avatar_url enum status boolean is_active timestamptz email_verified_at timestamptz last_login_at integer failed_login_attempts timestamptz locked_until jsonb metadata timestamptz created_at uuid created_by timestamptz updated_at uuid updated_by timestamptz deleted_at uuid deleted_by } user_preferences { uuid id PK uuid user_id FK uuid tenant_id FK varchar language varchar timezone varchar date_format varchar time_format varchar theme jsonb notifications jsonb dashboard timestamptz updated_at } ``` --- ## Estados de Usuario | Estado | Descripcion | Puede Login | |--------|-------------|-------------| | `pending_activation` | Recien creado, esperando activacion | No | | `active` | Usuario activo y funcional | Si | | `inactive` | Desactivado por admin | No | | `locked` | Bloqueado por intentos fallidos | No | | `deleted` | Soft deleted | No | --- ## Criterios de Aceptacion Consolidados ### Seguridad - [ ] Soft delete en lugar de hard delete - [ ] Solo admins gestionan otros usuarios - [ ] Email verificado antes de cambio efectivo - [ ] Password actual requerido para cambios sensibles - [ ] Historial de passwords para evitar reuso - [ ] Rate limiting en operaciones sensibles ### Funcionalidad - [ ] CRUD completo con paginacion y filtros - [ ] Perfil autoservicio funcional - [ ] Avatar upload con resize automatico - [ ] Cambio de email con doble verificacion - [ ] Cambio de password con politica de complejidad - [ ] Preferencias persistentes y aplicadas ### Auditoria - [ ] created_by/updated_by en todas las operaciones - [ ] deleted_by en soft deletes - [ ] Historial de cambios de email - [ ] Historial de passwords --- ## Estimacion Total | Capa | Story Points | |------|--------------| | Database | 6 | | Backend | 15 | | Frontend | 16 | | **Total** | **37** | --- ## Riesgos Identificados | Riesgo | Probabilidad | Impacto | Mitigacion | |--------|--------------|---------|------------| | Spam de cambio de email | Media | Bajo | Rate limiting 3/dia | | Storage de avatares lleno | Baja | Medio | Cleanup job, limites | | Performance en listados | Media | Medio | Paginacion, indices | | Enumeracion de usuarios | Baja | Alto | Permisos estrictos | --- ## Referencias ### Documentacion Relacionada - [DDL-SPEC-core_users.md](../../02-modelado/database-design/DDL-SPEC-core_users.md) - Especificacion de base de datos - [ET-users-backend.md](../../02-modelado/especificaciones-tecnicas/ET-users-backend.md) - Especificacion tecnica backend - [TP-users.md](../../04-test-plans/TP-users.md) - Plan de pruebas ### Dependencias con Otros Modulos - **MGN-001 (Auth)**: Autenticacion y tokens - **MGN-003 (Roles)**: Asignacion de roles a usuarios - **MGN-004 (Tenants)**: Aislamiento multi-tenant --- ## 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 | - | - | [ ] |