US-MGN002-004: Preferencias de Usuario
Identificacion
| Campo |
Valor |
| ID |
US-MGN002-004 |
| Modulo |
MGN-002 Users |
| Sprint |
Sprint 3 |
| Prioridad |
P2 - Media |
| Story Points |
5 |
| Estado |
Ready |
| Autor |
System |
| Fecha |
2025-12-05 |
Historia de Usuario
Como usuario autenticado del sistema
Quiero poder configurar mis preferencias personales
Para personalizar mi experiencia en la plataforma
Criterios de Aceptacion
Escenario 1: Obtener preferencias
Given un usuario autenticado
When accede a GET /api/v1/users/me/preferences
Then el sistema retorna sus preferencias
And si no tiene preferencias, retorna defaults del tenant
Escenario 2: Cambiar idioma
Given un usuario con idioma "es"
When cambia a idioma "en"
Then el sistema guarda la preferencia
And la interfaz cambia a ingles inmediatamente
Escenario 3: Cambiar tema
Given un usuario con tema "light"
When activa tema "dark"
Then la interfaz cambia a colores oscuros
And la preferencia persiste entre sesiones
Escenario 4: Configurar notificaciones
Given un usuario con notificaciones de marketing activas
When desactiva notificaciones de marketing
Then deja de recibir ese tipo de emails
And mantiene otras notificaciones activas
Escenario 5: Reset preferencias
Given un usuario con preferencias personalizadas
When ejecuta reset de preferencias
Then todas sus preferencias vuelven a defaults del tenant
Mockup / Wireframe
+------------------------------------------------------------------+
| [Logo] Preferencias |
+------------------------------------------------------------------+
| |
| ┌─────────────────────────────────────────────────────────┐ |
| │ IDIOMA Y REGION │ |
| ├─────────────────────────────────────────────────────────┤ |
| │ Idioma [Español ▼] │ |
| │ Zona horaria [America/Mexico_City ▼] │ |
| │ Formato fecha [DD/MM/YYYY ▼] │ |
| │ Formato hora [24 horas ▼] │ |
| │ Moneda [MXN - Peso Mexicano ▼] │ |
| └─────────────────────────────────────────────────────────┘ |
| |
| ┌─────────────────────────────────────────────────────────┐ |
| │ APARIENCIA │ |
| ├─────────────────────────────────────────────────────────┤ |
| │ Tema [☀️ Claro] [🌙 Oscuro] [💻 Sistema] │ |
| │ Tamaño fuente [Pequeño] [Mediano] [Grande] │ |
| │ ☐ Modo compacto │ |
| │ ☐ Sidebar colapsado por defecto │ |
| └─────────────────────────────────────────────────────────┘ |
| |
| ┌─────────────────────────────────────────────────────────┐ |
| │ NOTIFICACIONES │ |
| ├─────────────────────────────────────────────────────────┤ |
| │ Email │ |
| │ ☑ Habilitado Frecuencia: [Diario ▼] │ |
| │ ☑ Alertas de seguridad │ |
| │ ☑ Actualizaciones del sistema │ |
| │ ☐ Comunicaciones de marketing │ |
| │ │ |
| │ Push │ |
| │ ☑ Habilitado │ |
| │ ☑ Sonido de notificacion │ |
| │ │ |
| │ In-App │ |
| │ ☑ Habilitado │ |
| │ ☐ Notificaciones de escritorio │ |
| └─────────────────────────────────────────────────────────┘ |
| |
| [Restaurar valores predeterminados] [ Guardar Cambios ] |
+------------------------------------------------------------------+
Notas Tecnicas
API Endpoints
// Obtener preferencias
GET /api/v1/users/me/preferences
// Response 200
{
"language": "es",
"timezone": "America/Mexico_City",
"dateFormat": "DD/MM/YYYY",
"timeFormat": "24h",
"currency": "MXN",
"numberFormat": "es-MX",
"theme": "dark",
"sidebarCollapsed": false,
"compactMode": false,
"fontSize": "medium",
"notifications": {
"email": {
"enabled": true,
"digest": "daily",
"marketing": false,
"security": true,
"updates": true
},
"push": { "enabled": true, "sound": true },
"inApp": { "enabled": true, "desktop": false }
},
"dashboard": {
"defaultView": "overview",
"widgets": ["sales", "inventory"]
}
}
// Actualizar preferencias (parcial)
PATCH /api/v1/users/me/preferences
{
"theme": "light",
"notifications": {
"email": { "marketing": false }
}
}
// Reset preferencias
POST /api/v1/users/me/preferences/reset
Aplicacion en Frontend
// Al cambiar tema
useEffect(() => {
document.documentElement.setAttribute('data-theme', preferences.theme);
}, [preferences.theme]);
// Al cambiar idioma
useEffect(() => {
i18n.changeLanguage(preferences.language);
}, [preferences.language]);
Definicion de Done
Estimacion
| Tarea |
Horas |
| Backend: Endpoints |
3h |
| Backend: Deep merge logic |
1h |
| Backend: Tests |
2h |
| Frontend: PreferencesPage |
5h |
| Frontend: Theme/Language context |
3h |
| Frontend: Tests |
2h |
| Total |
16h |
Historial
| Version |
Fecha |
Autor |
Cambios |
| 1.0 |
2025-12-05 |
System |
Creacion inicial |