371 lines
12 KiB
Markdown
371 lines
12 KiB
Markdown
# 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 |
|