erp-core/docs/01-fase-foundation/MGN-002-users/historias-usuario/US-MGN002-004.md

7.8 KiB

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

  • Endpoint GET /api/v1/users/me/preferences
  • Endpoint PATCH /api/v1/users/me/preferences
  • Endpoint POST /api/v1/users/me/preferences/reset
  • Deep merge para actualizaciones parciales
  • Frontend: PreferencesPage con todas las secciones
  • Frontend: Aplicacion inmediata de cambios (tema, idioma)
  • Frontend: PreferencesContext para estado global
  • Tests unitarios
  • Code review aprobado

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