- Configure workspace Git repository with comprehensive .gitignore - Add Odoo as submodule for ERP reference code - Include documentation: SETUP.md, GIT-STRUCTURE.md - Add gitignore templates for projects (backend, frontend, database) - Structure supports independent repos per project/subproject level Workspace includes: - core/ - Reusable patterns, modules, orchestration system - projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.) - knowledge-base/ - Reference code and patterns (includes Odoo submodule) - devtools/ - Development tools and templates - customers/ - Client implementations template 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
6.3 KiB
RF-SYS-001: Sistema de Configuración Global
ID: RF-SYS-001 Título: Sistema de Configuración Global Prioridad: Alta Estado: ✅ Implementado Fase: 1 - Alcance Inicial Épica: EAI-006 - Configuración del Sistema
📋 Descripción
La plataforma GAMILIT debe contar con un sistema centralizado de configuración que permita almacenar y gestionar parámetros del sistema de forma flexible, segura y auditable.
🎯 Objetivos
- Permitir configurar parámetros del sistema sin necesidad de modificar código
- Soportar diferentes tipos de datos (string, number, boolean, JSON, arrays)
- Categorizar configuraciones para facilitar su organización
- Implementar validaciones y restricciones de valores
- Auditar cambios en configuraciones
- Soportar multi-tenancy (configuraciones por organización)
📊 Requerimientos Funcionales
REQ-001: Almacenamiento de Configuraciones
Como administrador del sistema Quiero almacenar configuraciones clave-valor Para tener parámetros configurables sin modificar código
Criterios de Aceptación:
- ✅ Cada configuración tiene una clave única (
setting_key) - ✅ Soporta valores de tipo: string, number, boolean, JSON, array
- ✅ Cada configuración puede tener un valor por defecto
- ✅ Soporta configuraciones globales y por tenant
REQ-002: Categorización
Como administrador Quiero organizar configuraciones por categorías Para facilitar su gestión y búsqueda
Categorías soportadas:
general- Configuraciones generales de la plataformagamification- Parámetros de gamificaciónsecurity- Configuraciones de seguridademail- Configuraciones de correostorage- Configuraciones de almacenamientoanalytics- Configuraciones de analíticasintegrations- Configuraciones de integraciones
REQ-003: Validación de Valores
Como sistema Quiero validar valores de configuración Para prevenir configuraciones inválidas
Validaciones soportadas:
- Tipo de dato (string, number, boolean, JSON, array)
- Valores permitidos (lista de opciones)
- Rangos numéricos (min_value, max_value)
- Reglas de validación personalizadas (validation_rules JSONB)
REQ-004: Configuraciones de Solo Lectura
Como sistema Quiero marcar configuraciones como readonly Para prevenir modificaciones accidentales de configuraciones críticas
Criterios:
- ✅ Configuraciones marcadas como
is_readonly = trueno se pueden modificar por API - ✅ Configuraciones de sistema (
is_system = true) son críticas - ✅ Algunas configuraciones requieren reinicio (
requires_restart = true)
REQ-005: Visibilidad Pública
Como desarrollador frontend Quiero acceder a configuraciones públicas sin autenticación Para configurar comportamiento de la aplicación cliente
Criterios:
- ✅ Configuraciones marcadas como
is_public = trueson accesibles públicamente - ✅ Configuraciones privadas requieren autenticación de admin
REQ-006: Auditoría
Como administrador Quiero saber quién modificó configuraciones y cuándo Para tener trazabilidad de cambios
Criterios:
- ✅ Se registra
created_byyupdated_by(UUID del usuario) - ✅ Se registra
created_atyupdated_at
🔧 Especificaciones Técnicas
Tabla: system_configuration.system_settings
Columnas principales:
id- UUID (PK)tenant_id- UUID (nullable para configuraciones globales)setting_key- TEXT (UNIQUE)setting_category- TEXT (categoría)setting_subcategory- TEXT (subcategoría opcional)setting_value- TEXT (valor actual)value_type- TEXT (string|number|boolean|json|array)default_value- TEXT (valor por defecto)display_name- TEXT (nombre para mostrar)description- TEXT (descripción)help_text- TEXT (ayuda para el usuario)is_public- BOOLEAN (accesible sin auth)is_readonly- BOOLEAN (no modificable)is_system- BOOLEAN (configuración de sistema)requires_restart- BOOLEAN (requiere reinicio)validation_rules- JSONB (reglas de validación)allowed_values- TEXT[] (valores permitidos)min_value- NUMERIC (mínimo para números)max_value- NUMERIC (máximo para números)metadata- JSONB (metadatos adicionales)
📝 Ejemplos de Uso
Ejemplo 1: Configuración de tiempo de sesión
{
"setting_key": "session_timeout_minutes",
"setting_category": "security",
"setting_value": "30",
"value_type": "number",
"default_value": "30",
"display_name": "Tiempo de Sesión (minutos)",
"description": "Tiempo de inactividad antes de cerrar sesión automáticamente",
"min_value": 5,
"max_value": 1440,
"is_public": false,
"is_readonly": false,
"requires_restart": false
}
Ejemplo 2: ML Coins por ejercicio completado
{
"setting_key": "ml_coins_per_exercise",
"setting_category": "gamification",
"setting_value": "10",
"value_type": "number",
"default_value": "10",
"display_name": "ML Coins por Ejercicio",
"description": "Cantidad de ML Coins otorgados al completar un ejercicio",
"min_value": 1,
"max_value": 100,
"is_public": true,
"is_readonly": false
}
Ejemplo 3: Nombre de la plataforma
{
"setting_key": "platform_name",
"setting_category": "general",
"setting_value": "GAMILIT",
"value_type": "string",
"default_value": "GAMILIT",
"display_name": "Nombre de la Plataforma",
"is_public": true,
"is_readonly": true,
"is_system": true
}
🔗 Referencias
- Especificación Técnica: ET-SYS-001
- Implementación: apps/database/ddl/schemas/system_configuration/tables/01-system_settings.sql
- API: apps/backend/src/modules/config/
✅ Criterios de Aceptación
- Tabla
system_settingscreada con todas las columnas - Constraints de validación implementados
- Índices de performance creados
- Trigger de updated_at implementado
- RLS policies para seguridad implementadas
- API CRUD de configuraciones (pendiente documentar)
- Panel de administración (pendiente documentar)
- Tests unitarios (pendiente documentar)
Creado: 2025-11-08 Última actualización: 2025-11-08 Responsable: Tech Lead / DBA Estado: ✅ Implementado (documentación retroactiva)