# RF-SETTINGS-001: Configuraciones del Sistema ## Identificacion | Campo | Valor | |-------|-------| | **ID** | RF-SETTINGS-001 | | **Modulo** | MGN-006 Settings | | **Titulo** | Configuraciones del Sistema | | **Prioridad** | P0 - Critica | | **Estado** | Draft | | **Fecha** | 2025-12-05 | --- ## Descripcion El sistema debe permitir gestionar configuraciones globales a nivel de sistema que afectan el comportamiento de la aplicacion para todos los tenants. Estas configuraciones son administradas exclusivamente por super-administradores. --- ## Requisitos Funcionales ### RF-SETTINGS-001.1: Estructura de Configuracion Cada configuracion del sistema tiene la siguiente estructura: | Campo | Tipo | Descripcion | |-------|------|-------------| | id | UUID | Identificador unico | | key | VARCHAR(100) | Clave unica de configuracion | | value | JSONB | Valor de la configuracion | | data_type | ENUM | Tipo de dato (string, number, boolean, json, array) | | category | VARCHAR(50) | Categoria agrupadora | | description | TEXT | Descripcion para UI | | is_public | BOOLEAN | Visible para tenants (solo lectura) | | is_editable | BOOLEAN | Puede ser modificado en runtime | | default_value | JSONB | Valor por defecto | | validation_rules | JSONB | Reglas de validacion | ### RF-SETTINGS-001.2: Categorias de Configuracion Las configuraciones se organizan en categorias: | Categoria | Descripcion | Ejemplo | |-----------|-------------|---------| | `security` | Configuraciones de seguridad | Intentos de login, duracion token | | `email` | Configuracion de correo | SMTP, templates | | `storage` | Almacenamiento | Limites de archivos, paths | | `features` | Feature flags | Habilitar/deshabilitar funciones | | `integrations` | Integraciones externas | API keys, webhooks | | `performance` | Rendimiento | Cache TTL, pagination limits | ### RF-SETTINGS-001.3: Tipos de Datos Soportados ```typescript enum SettingDataType { STRING = 'string', NUMBER = 'number', BOOLEAN = 'boolean', JSON = 'json', ARRAY = 'array', SECRET = 'secret' // Encriptado en BD } ``` **Reglas:** - Tipo `SECRET` se almacena encriptado y nunca se retorna completo - Tipo `JSON` debe cumplir con schema definido en `validation_rules` - Tipo `ARRAY` puede contener elementos de cualquier tipo primitivo ### RF-SETTINGS-001.4: Validacion de Valores Cada configuracion puede tener reglas de validacion: ```typescript interface ValidationRules { required?: boolean; min?: number; // Para numeros max?: number; // Para numeros minLength?: number; // Para strings maxLength?: number; // Para strings pattern?: string; // Regex para strings enum?: any[]; // Valores permitidos schema?: object; // JSON Schema para objetos } ``` ### RF-SETTINGS-001.5: Configuraciones Predefinidas El sistema incluye configuraciones iniciales: ```typescript const SYSTEM_SETTINGS = [ { key: 'security.max_login_attempts', value: 5, dataType: 'number', category: 'security', isEditable: true }, { key: 'security.lockout_duration_minutes', value: 15, dataType: 'number', category: 'security' }, { key: 'security.token_expiry_hours', value: 24, dataType: 'number', category: 'security' }, { key: 'email.smtp_host', value: '', dataType: 'string', category: 'email' }, { key: 'storage.max_file_size_mb', value: 10, dataType: 'number', category: 'storage' }, { key: 'features.enable_oauth', value: true, dataType: 'boolean', category: 'features' } ]; ``` --- ## Operaciones CRUD ### Listar Configuraciones ```typescript GET /api/v1/settings/system?category=security Response: { "data": [ { "key": "security.max_login_attempts", "value": 5, "dataType": "number", "category": "security", "description": "Numero maximo de intentos de login", "isEditable": true } ] } ``` ### Obtener Configuracion ```typescript GET /api/v1/settings/system/:key Response: { "key": "security.max_login_attempts", "value": 5, "dataType": "number", "isEditable": true, "defaultValue": 5, "validationRules": { "min": 1, "max": 10 } } ``` ### Actualizar Configuracion ```typescript PUT /api/v1/settings/system/:key { "value": 3 } Response: { "key": "security.max_login_attempts", "value": 3, "previousValue": 5, "updatedAt": "2025-12-05T10:00:00Z", "updatedBy": "admin-uuid" } ``` ### Restaurar Valor por Defecto ```typescript POST /api/v1/settings/system/:key/reset Response: { "key": "security.max_login_attempts", "value": 5, "restoredFrom": 3 } ``` --- ## Reglas de Negocio | ID | Regla | Severidad | |----|-------|-----------| | BR-001 | Solo super-admin puede modificar configuraciones del sistema | Error | | BR-002 | Configuraciones no editables no pueden modificarse | Error | | BR-003 | Valor debe cumplir reglas de validacion | Error | | BR-004 | Tipo SECRET nunca se retorna completo (solo ****) | Security | | BR-005 | Cambios se registran en audit log | Info | --- ## Criterios de Aceptacion - [ ] CRUD completo de configuraciones del sistema - [ ] Validacion de tipos de datos - [ ] Encriptacion de valores tipo SECRET - [ ] Solo super-admin puede modificar - [ ] Restaurar a valor por defecto - [ ] Agrupacion por categorias en UI - [ ] Audit log de cambios --- ## Historial | Version | Fecha | Autor | Cambios | |---------|-------|-------|---------| | 1.0 | 2025-12-05 | Requirements-Analyst | Creacion inicial |