# RF-TENANT-002: Configuracion de Tenant ## Identificacion | Campo | Valor | |-------|-------| | **ID** | RF-TENANT-002 | | **Modulo** | MGN-004 Tenants | | **Prioridad** | P0 - Critica | | **Estado** | Ready | | **Fecha** | 2025-12-05 | --- ## Descripcion El sistema debe permitir a los administradores de cada tenant personalizar la configuracion de su organizacion, incluyendo informacion de la empresa, branding, configuraciones regionales, y parametros operativos. Esta configuracion afecta el comportamiento del sistema para todos los usuarios del tenant. --- ## Actores | Actor | Descripcion | |-------|-------------| | Tenant Admin | Administrador del tenant que configura | | Platform Admin | Puede modificar configuracion de cualquier tenant | --- ## Precondiciones 1. Usuario autenticado con permiso `tenants:update` o `settings:update` 2. Tenant activo --- ## Categorias de Configuracion ### 1. Informacion de la Empresa | Campo | Descripcion | Ejemplo | |-------|-------------|---------| | companyName | Nombre legal | Empresa ABC S.A. de C.V. | | tradeName | Nombre comercial | ABC Corp | | taxId | RFC/NIT/RUC | EABC850101ABC | | address | Direccion fiscal | Av. Principal #123 | | city | Ciudad | Ciudad de Mexico | | state | Estado/Provincia | CDMX | | country | Pais | MX | | postalCode | Codigo postal | 06600 | | phone | Telefono principal | +52 55 1234 5678 | | email | Email de contacto | contacto@empresaabc.com | | website | Sitio web | https://empresaabc.com | ### 2. Branding | Campo | Descripcion | Ejemplo | |-------|-------------|---------| | logo | Logo principal | URL/base64 | | logoSmall | Logo pequeno/icono | URL/base64 | | favicon | Favicon | URL/base64 | | primaryColor | Color primario | #3B82F6 | | secondaryColor | Color secundario | #10B981 | | accentColor | Color de acento | #F59E0B | ### 3. Configuracion Regional | Campo | Descripcion | Ejemplo | |-------|-------------|---------| | defaultLanguage | Idioma por defecto | es | | defaultTimezone | Zona horaria | America/Mexico_City | | defaultCurrency | Moneda por defecto | MXN | | dateFormat | Formato de fecha | DD/MM/YYYY | | timeFormat | Formato de hora | 24h | | numberFormat | Formato numerico | es-MX | | firstDayOfWeek | Primer dia semana | 1 (Lunes) | ### 4. Configuracion Operativa | Campo | Descripcion | Ejemplo | |-------|-------------|---------| | fiscalYearStart | Inicio ano fiscal | 01-01 | | workingDays | Dias laborables | [1,2,3,4,5] | | businessHoursStart | Inicio horario | 09:00 | | businessHoursEnd | Fin horario | 18:00 | | defaultTaxRate | Tasa impuesto default | 16 | | invoicePrefix | Prefijo facturas | FAC- | | invoiceNextNumber | Siguiente numero | 1001 | ### 5. Configuracion de Seguridad | Campo | Descripcion | Ejemplo | |-------|-------------|---------| | passwordMinLength | Longitud minima pass | 8 | | passwordRequireSpecial | Requerir especiales | true | | sessionTimeout | Timeout sesion (min) | 30 | | maxLoginAttempts | Intentos maximos | 5 | | lockoutDuration | Duracion bloqueo (min) | 15 | | mfaRequired | MFA obligatorio | false | | ipWhitelist | IPs permitidas | [] | --- ## Flujo Principal ### Ver Configuracion ``` 1. Tenant Admin accede a Configuracion > Empresa 2. Sistema muestra configuracion actual organizada en tabs: - Informacion General - Branding - Regional - Operaciones - Seguridad 3. Admin puede navegar entre tabs ``` ### Actualizar Configuracion ``` 1. Admin modifica campos deseados 2. Sistema valida en tiempo real 3. Admin click en "Guardar Cambios" 4. Sistema valida todos los campos 5. Sistema guarda configuracion 6. Sistema aplica cambios (algunos requieren recarga) 7. Sistema muestra confirmacion ``` ### Subir Logo ``` 1. Admin click en "Cambiar Logo" 2. Sistema muestra modal de upload 3. Admin selecciona imagen 4. Sistema valida formato y tamano 5. Sistema genera versiones (original, thumbnail) 6. Sistema actualiza logo 7. Cambio visible inmediatamente en UI ``` --- ## Reglas de Negocio | ID | Regla | |----|-------| | RN-001 | Configuracion se hereda de defaults de plataforma | | RN-002 | Tenant puede sobrescribir cualquier default | | RN-003 | Algunos campos requieren validacion especial (taxId por pais) | | RN-004 | Logo: max 5MB, formatos JPG/PNG/SVG | | RN-005 | Colores deben ser hex validos | | RN-006 | Cambios de seguridad aplican en siguiente login | | RN-007 | IP Whitelist vacia = sin restriccion | --- ## Criterios de Aceptacion ### Escenario 1: Ver configuracion actual ```gherkin Given un Tenant Admin autenticado When accede a GET /api/v1/tenant/settings Then el sistema retorna configuracion completa And incluye valores del tenant And incluye defaults de plataforma donde no hay override ``` ### Escenario 2: Actualizar informacion de empresa ```gherkin Given un Tenant Admin autenticado When actualiza companyName a "Nueva Empresa S.A." Then el sistema guarda el cambio And retorna configuracion actualizada And el nombre aparece en toda la UI del tenant ``` ### Escenario 3: Personalizar branding ```gherkin Given un Tenant Admin con configuracion default When sube un logo y cambia primaryColor a "#FF5733" Then el sistema guarda el logo en storage And actualiza el color primario And la UI refleja los cambios de branding ``` ### Escenario 4: Configuracion de seguridad ```gherkin Given configuracion de seguridad actual When Tenant Admin establece passwordMinLength=12 Then el sistema guarda la configuracion And nuevas contrasenas deben tener minimo 12 caracteres And usuarios existentes no son afectados hasta cambio de pass ``` ### Escenario 5: Herencia de defaults ```gherkin Given tenant sin configuracion de timezone And plataforma con default "America/Mexico_City" When se consulta configuracion del tenant Then timezone muestra "America/Mexico_City" And se indica que es valor heredado (no override) ``` --- ## Mockup / Wireframe ``` +------------------------------------------------------------------+ | [Logo] Configuracion de Empresa | +------------------------------------------------------------------+ | [General] [Branding] [Regional] [Operaciones] [Seguridad] | +------------------------------------------------------------------+ | | | Tab: General | | ┌─────────────────────────────────────────────────────────────┐ | | │ INFORMACION LEGAL │ | | │ │ | | │ Razon Social [Empresa ABC S.A. de C.V. ] │ | | │ Nombre Comercial [ABC Corp ] │ | | │ RFC [EABC850101ABC ] │ | | │ │ | | │ DIRECCION FISCAL │ | | │ │ | | │ Direccion [Av. Principal #123 ] │ | | │ Ciudad [Ciudad de Mexico ] │ | | │ Estado [CDMX ▼] │ | | │ Codigo Postal [06600 ] │ | | │ Pais [Mexico ▼] │ | | │ │ | | │ CONTACTO │ | | │ │ | | │ Telefono [+52 55 1234 5678 ] │ | | │ Email [contacto@empresaabc.com ] │ | | │ Sitio Web [https://empresaabc.com ] │ | | └─────────────────────────────────────────────────────────────┘ | | | | [ Cancelar ] [ Guardar Cambios ] | +------------------------------------------------------------------+ Tab: Branding ┌─────────────────────────────────────────────────────────────────┐ │ LOGOS │ │ │ │ +-------------+ +-------+ │ │ | | | | │ │ | LOGO | | ICON | [Cambiar Logo] [Cambiar Icono] │ │ | | | | │ │ +-------------+ +-------+ │ │ │ │ COLORES │ │ │ │ Primario [#3B82F6] ████████ │ │ Secundario [#10B981] ████████ │ │ Acento [#F59E0B] ████████ │ │ │ │ [Vista previa] │ └─────────────────────────────────────────────────────────────────┘ ``` --- ## Notas Tecnicas ### API Endpoints ```typescript // Obtener configuracion completa GET /api/v1/tenant/settings // Response 200 { "company": { "companyName": "Empresa ABC S.A. de C.V.", "tradeName": "ABC Corp", "taxId": "EABC850101ABC", // ... "_inherited": false }, "branding": { "logo": "https://storage.../logo.png", "primaryColor": "#3B82F6", // ... "_inherited": ["secondaryColor"] // campos heredados }, "regional": { "defaultLanguage": "es", "defaultTimezone": "America/Mexico_City", // ... }, "operational": { ... }, "security": { ... } } // Actualizar configuracion (parcial) PATCH /api/v1/tenant/settings { "company": { "companyName": "Nueva Empresa S.A." }, "branding": { "primaryColor": "#FF5733" } } // Subir logo POST /api/v1/tenant/settings/logo Content-Type: multipart/form-data logo: [file] type: "main" | "small" | "favicon" // Reset a defaults POST /api/v1/tenant/settings/reset { "sections": ["branding"] } // o "all" ``` ### Estructura de Settings ```typescript interface TenantSettings { company: CompanySettings; branding: BrandingSettings; regional: RegionalSettings; operational: OperationalSettings; security: SecuritySettings; } // Se guarda como JSONB en la tabla tenant_settings // con merge inteligente con defaults ``` --- ## Dependencias | ID | Descripcion | |----|-------------| | RF-TENANT-001 | Tenant debe existir | | Storage | Para logos e imagenes | | Cache | Para settings frecuentes | --- ## Estimacion | Tarea | Puntos | |-------|--------| | Backend: Settings endpoints | 3 | | Backend: Logo upload | 2 | | Backend: Merge con defaults | 2 | | Backend: Tests | 2 | | Frontend: SettingsPage (5 tabs) | 6 | | Frontend: BrandingPreview | 2 | | Frontend: Tests | 2 | | **Total** | **19 SP** | --- ## Historial | Version | Fecha | Autor | Cambios | |---------|-------|-------|---------| | 1.0 | 2025-12-05 | System | Creacion inicial |