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 |
CRUD de Usuarios |
P0 |
Media |
Aprobado |
13 |
| RF-USER-002 |
Perfil de Usuario |
P1 |
Baja |
Aprobado |
7 |
| RF-USER-003 |
Cambio de Email |
P1 |
Media |
Aprobado |
6 |
| RF-USER-004 |
Cambio de Password |
P0 |
Baja |
Aprobado |
4 |
| RF-USER-005 |
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
- RF-USER-001 - CRUD de usuarios (base)
- RF-USER-004 - Cambio de password (seguridad basica)
- RF-USER-002 - Perfil de usuario (autoservicio)
- RF-USER-003 - Cambio de email (proceso complejo)
- 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
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
Funcionalidad
Auditoria
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
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 |
- |
- |
[ ] |