RF-SETTINGS-003: Preferencias de Usuario
Identificacion
| Campo |
Valor |
| ID |
RF-SETTINGS-003 |
| Modulo |
MGN-006 Settings |
| Titulo |
Preferencias de Usuario |
| Prioridad |
P1 - Alta |
| Estado |
Draft |
| Fecha |
2025-12-05 |
Descripcion
El sistema debe permitir que cada usuario configure preferencias personales que afectan su experiencia en la aplicacion, como tema visual, idioma, notificaciones y configuraciones de UI.
Requisitos Funcionales
RF-SETTINGS-003.1: Estructura de Preferencias
| Campo |
Tipo |
Descripcion |
| id |
UUID |
Identificador unico |
| user_id |
UUID |
FK al usuario |
| key |
VARCHAR(100) |
Clave de preferencia |
| value |
JSONB |
Valor de la preferencia |
| synced_at |
TIMESTAMPTZ |
Ultima sincronizacion |
RF-SETTINGS-003.2: Herencia de Preferencias
Las preferencias heredan del tenant si el usuario no las define:
TENANT (base)
│
└── USER (personalizado)
RF-SETTINGS-003.3: Preferencias de Apariencia
| Key |
Tipo |
Default |
Descripcion |
ui.theme |
string |
light |
Tema (light, dark, system) |
ui.density |
string |
normal |
Densidad (compact, normal, comfortable) |
ui.sidebar_collapsed |
boolean |
false |
Sidebar colapsado |
ui.font_size |
string |
medium |
Tamano de fuente |
ui.accent_color |
string |
null |
Color de acento personal |
RF-SETTINGS-003.4: Preferencias de Idioma y Formato
| Key |
Tipo |
Default |
Descripcion |
locale.language |
string |
inherit |
Idioma (inherit = del tenant) |
locale.date_format |
string |
inherit |
Formato fecha |
locale.number_format |
string |
inherit |
Formato numeros |
locale.first_day_of_week |
number |
inherit |
Primer dia semana |
RF-SETTINGS-003.5: Preferencias de Notificaciones
| Key |
Tipo |
Default |
Descripcion |
notifications.email_enabled |
boolean |
true |
Recibir por email |
notifications.push_enabled |
boolean |
true |
Push notifications |
notifications.sound_enabled |
boolean |
true |
Sonido notificaciones |
notifications.digest_frequency |
string |
daily |
Resumen (none, daily, weekly) |
RF-SETTINGS-003.6: Preferencias de Modulos
Cada modulo puede tener preferencias especificas:
// Dashboard
{
'dashboard.default_view': 'overview' | 'analytics' | 'tasks',
'dashboard.widgets': ['sales', 'inventory', 'tasks'],
'dashboard.refresh_interval': 60 // segundos
}
// Listas
{
'lists.default_page_size': 20,
'lists.default_sort': { field: 'created_at', order: 'desc' }
}
// Editor
{
'editor.autosave': true,
'editor.autosave_interval': 30
}
RF-SETTINGS-003.7: Sincronizacion entre Dispositivos
Las preferencias se sincronizan automaticamente:
- Al hacer login, se cargan preferencias del servidor
- Cambios locales se sincronizan al servidor
- Conflictos se resuelven por timestamp (ultima escritura gana)
Operaciones CRUD
Obtener Todas las Preferencias
GET /api/v1/settings/user
Response:
{
"ui": {
"theme": "dark",
"density": "compact"
},
"notifications": {
"emailEnabled": true,
"pushEnabled": false
}
}
Actualizar Preferencia
PATCH /api/v1/settings/user
{
"ui.theme": "dark",
"notifications.pushEnabled": false
}
Response:
{
"updated": ["ui.theme", "notifications.pushEnabled"],
"syncedAt": "2025-12-05T10:00:00Z"
}
Restaurar Preferencias por Defecto
POST /api/v1/settings/user/reset
{
"keys": ["ui.theme", "ui.density"] // o vacío para resetear todo
}
Exportar Preferencias
GET /api/v1/settings/user/export
Response:
{
"version": "1.0",
"exportedAt": "2025-12-05T10:00:00Z",
"preferences": { ... }
}
Importar Preferencias
POST /api/v1/settings/user/import
{
"version": "1.0",
"preferences": { ... }
}
Reglas de Negocio
| ID |
Regla |
Severidad |
| BR-001 |
Usuario solo modifica sus propias preferencias |
Error |
| BR-002 |
Preferencias se guardan en localStorage para offline |
Info |
| BR-003 |
Sincronizacion al reconectar si hay cambios offline |
Info |
| BR-004 |
Theme 'system' sigue preferencia del OS |
Info |
| BR-005 |
Import solo acepta formato valido |
Error |
Criterios de Aceptacion
Historial
| Version |
Fecha |
Autor |
Cambios |
| 1.0 |
2025-12-05 |
Requirements-Analyst |
Creacion inicial |