# US-MGN004-002: Configuracion de Tenant

## Identificacion

| Campo | Valor |
|-------|-------|
| **ID** | US-MGN004-002 |
| **Modulo** | MGN-004 Tenants |
| **RF Relacionado** | RF-TENANT-002 |
| **Prioridad** | P0 - Critica |
| **Story Points** | 8 |
| **Sprint** | TBD |

---

## Historia de Usuario

**Como** Tenant Admin
**Quiero** configurar la informacion de mi organizacion (empresa, branding, regional, seguridad)
**Para** personalizar el sistema segun las necesidades de mi empresa

---

## Criterios de Aceptacion

### AC-001: Ver configuracion actual

```gherkin
Given soy Tenant Admin autenticado
When accedo a GET /api/v1/tenant/settings
Then veo configuracion completa organizada en secciones:
  | company | branding | regional | operational | security |
  And valores propios sobrescriben defaults
  And se indica cuales son valores heredados
```

### AC-002: Actualizar informacion de empresa

```gherkin
Given soy Tenant Admin autenticado
When envio PATCH /api/v1/tenant/settings con:
  | company.companyName | company.taxId |
  | Mi Empresa S.A. | MEMP850101ABC |
Then se actualizan los campos enviados
  And otros campos de company no se modifican
  And se actualiza updated_at y updated_by
```

### AC-003: Personalizar branding

```gherkin
Given soy Tenant Admin autenticado
When actualizo branding con:
  | primaryColor | secondaryColor |
  | #FF5733 | #33FF57 |
Then los colores se guardan
  And la UI refleja los nuevos colores
```

### AC-004: Subir logo

```gherkin
Given soy Tenant Admin autenticado
When envio POST /api/v1/tenant/settings/logo con imagen PNG de 500KB
Then el logo se almacena en storage
  And se genera version thumbnail
  And se actualiza branding.logo con URL
  And el logo aparece en la UI
```

### AC-005: Validar formato y tamano de logo

```gherkin
Given soy Tenant Admin autenticado
When intento subir logo de 10MB
Then el sistema responde con status 400
  And el mensaje indica "Tamano maximo: 5MB"
```

### AC-006: Configurar zona horaria

```gherkin
Given soy Tenant Admin autenticado
When actualizo regional.defaultTimezone a "America/New_York"
Then las fechas se muestran en hora de Nueva York
  And los reportes usan esa zona horaria
```

### AC-007: Configurar politicas de seguridad

```gherkin
Given soy Tenant Admin autenticado
When actualizo security con:
  | passwordMinLength | mfaRequired |
  | 12 | true |
Then nuevos usuarios deben usar password de 12+ caracteres
  And se requiere MFA para todos los usuarios
  And usuarios existentes deben activar MFA en siguiente login
```

### AC-008: Resetear a valores por defecto

```gherkin
Given soy Tenant Admin con branding personalizado
When envio POST /api/v1/tenant/settings/reset con:
  | sections | ["branding"] |
Then branding vuelve a valores por defecto de plataforma
  And otras secciones no se modifican
```

### AC-009: Validacion de campos

```gherkin
Given soy Tenant Admin autenticado
When envio color con formato invalido "#GGG"
Then el sistema responde con status 400
  And el mensaje indica formato invalido
```

### AC-010: Herencia de defaults

```gherkin
Given tenant sin configuracion de dateFormat
  And plataforma tiene default "DD/MM/YYYY"
When consulto settings
Then dateFormat muestra "DD/MM/YYYY"
  And se indica que es valor heredado (_inherited)
```

---

## Tareas Tecnicas

| ID | Tarea | Estimacion |
|----|-------|------------|
| T-001 | Crear entidad TenantSettings | 1 SP |
| T-002 | Implementar TenantSettingsService | 2 SP |
| T-003 | Implementar merge con defaults | 1 SP |
| T-004 | Crear endpoint de upload de logo | 1 SP |
| T-005 | Implementar reset a defaults | 1 SP |
| T-006 | Tests unitarios | 2 SP |
| **Total** | | **8 SP** |

---

## Notas de Implementacion

- Settings se almacenan como JSONB en PostgreSQL
- Merge inteligente: solo sobrescribir campos enviados
- Logo se almacena en storage externo (S3, GCS, etc.)
- Cambios de seguridad aplican en siguiente login

---

## Mockup de Referencia

Ver RF-TENANT-002.md seccion Mockup.

---

## Dependencias

| Tipo | Descripcion |
|------|-------------|
| Backend | Tenant existente (US-MGN004-001) |
| Storage | Servicio de storage configurado |
| Config | Defaults de plataforma definidos |

---

## Definition of Done

- [ ] CRUD de settings funcionando
- [ ] Merge con defaults implementado
- [ ] Upload de logo con validaciones
- [ ] Reset a defaults funcionando
- [ ] Validaciones de DTOs completas
- [ ] Tests unitarios con >80% coverage
