# Backlog MGN-004: Multi-Tenancy

## Resumen del Modulo

| Campo | Valor |
|-------|-------|
| **Modulo** | MGN-004 |
| **Nombre** | Multi-Tenancy |
| **Total User Stories** | 4 |
| **Total Story Points** | 47 |
| **Estado** | Ready for Development |
| **Fecha** | 2025-12-05 |

---

## User Stories

| ID | Nombre | Prioridad | SP | Estado |
|----|--------|-----------|-----|--------|
| [US-MGN004-001](./US-MGN004-001.md) | Gestion de Tenants | P0 | 13 | Ready |
| [US-MGN004-002](./US-MGN004-002.md) | Configuracion de Tenant | P0 | 8 | Ready |
| [US-MGN004-003](./US-MGN004-003.md) | Aislamiento de Datos | P0 | 13 | Ready |
| [US-MGN004-004](./US-MGN004-004.md) | Subscripciones y Limites | P1 | 13 | Ready |

---

## Arquitectura Multi-Tenant

```
┌─────────────────────────────────────────────────────────────────┐
│                      Request Flow                                │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. HTTP Request                                                 │
│     └─> Authorization: Bearer {JWT}                             │
│                                                                  │
│  2. JwtAuthGuard                                                │
│     └─> Valida token, extrae user + tenant_id                   │
│                                                                  │
│  3. TenantGuard (US-MGN004-003)                                 │
│     └─> Verifica tenant activo                                  │
│     └─> Inyecta tenant en request                               │
│                                                                  │
│  4. TenantContextMiddleware (US-MGN004-003)                     │
│     └─> SET app.current_tenant_id = :tenantId                   │
│                                                                  │
│  5. LimitGuard (US-MGN004-004)                                  │
│     └─> Verifica limites de subscripcion                        │
│                                                                  │
│  6. ModuleGuard (US-MGN004-004)                                 │
│     └─> Verifica acceso al modulo                               │
│                                                                  │
│  7. RbacGuard (MGN-003)                                         │
│     └─> Valida permisos del usuario                             │
│                                                                  │
│  8. Controller -> Service -> Repository                         │
│                                                                  │
│  9. PostgreSQL RLS (US-MGN004-003)                              │
│     └─> WHERE tenant_id = current_tenant_id()                   │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘
```

---

## Estados del Tenant

```
                         ┌──────────────┐
                         │   created    │
                         └──────┬───────┘
                                │ (start trial)
                                ▼
                         ┌──────────────┐
             ┌──────────│    trial     │──────────┐
             │          └──────┬───────┘          │
             │                 │                   │
             │ (pay)           │ (expire)         │ (convert)
             │                 │                   │
             │                 ▼                   │
             │          ┌──────────────┐          │
             │          │trial_expired │          │
             │          └──────────────┘          │
             │                                     │
             ▼                                     ▼
      ┌──────────────┐                     ┌──────────────┐
      │    active    │◄────────────────────│   active     │
      └──────┬───────┘    (reactivate)     └──────┬───────┘
             │                                     │
             │ (suspend)                           │
             ▼                                     │
      ┌──────────────┐                            │
      │  suspended   │────────────────────────────┘
      └──────┬───────┘
             │ (schedule delete)
             ▼
      ┌──────────────────┐
      │ pending_deletion │
      └────────┬─────────┘
               │ (30 days)
               ▼
      ┌──────────────┐
      │   deleted    │
      └──────────────┘
```

---

## Planes de Subscripcion

| Plan | Usuarios | Storage | Precio |
|------|----------|---------|--------|
| Trial | 5 | 1 GB | Gratis (14 dias) |
| Starter | 10 | 5 GB | $29/mes |
| Professional | 50 | 25 GB | $99/mes |
| Enterprise | Ilimitado | 100 GB | $299/mes |

---

## Distribucion de Story Points

```
US-MGN004-001 (Gestion Tenants):     ████████████████████████████  13 SP (28%)
US-MGN004-002 (Configuracion):       █████████████████             8 SP (17%)
US-MGN004-003 (Aislamiento RLS):     ████████████████████████████  13 SP (28%)
US-MGN004-004 (Subscripciones):      ████████████████████████████  13 SP (28%)
                                     ─────────────────────────────
                                     Total: 47 SP
```

---

## Orden de Implementacion Recomendado

1. **US-MGN004-003** - Aislamiento de Datos (Base para todo)
   - RLS policies
   - TenantGuard
   - TenantContextMiddleware
   - TenantBaseEntity

2. **US-MGN004-001** - Gestion de Tenants (CRUD basico)
   - Entidad Tenant
   - TenantsService
   - Platform Admin endpoints

3. **US-MGN004-002** - Configuracion de Tenant
   - TenantSettings
   - Upload de logos
   - Merge con defaults

4. **US-MGN004-004** - Subscripciones y Limites (Monetizacion)
   - Plans, Subscriptions
   - LimitGuard, ModuleGuard
   - Billing integration

---

## Dependencias con Otros Modulos

| Modulo | Dependencia |
|--------|-------------|
| MGN-001 Auth | JWT debe incluir tenant_id claim |
| MGN-002 Users | Users deben tener tenant_id |
| MGN-003 RBAC | Roles son per-tenant, permisos de platform admin |

---

## Riesgos Identificados

| Riesgo | Mitigacion |
|--------|------------|
| RLS mal configurado expone datos | Tests exhaustivos de aislamiento |
| Performance con muchos tenants | Indices compuestos, caching |
| Migracion de datos existentes | Script de migracion con tenant default |
| Complejidad de billing | Integracion con Stripe (proven) |

---

## Definition of Done del Modulo

- [ ] US-MGN004-001: CRUD de tenants completo
- [ ] US-MGN004-002: Settings funcionando con merge
- [ ] US-MGN004-003: RLS aplicado en TODAS las tablas
- [ ] US-MGN004-003: Tests de aislamiento pasando
- [ ] US-MGN004-004: Planes y limites configurados
- [ ] US-MGN004-004: LimitGuard y ModuleGuard activos
- [ ] Tests unitarios > 80% coverage
- [ ] Tests de aislamiento exhaustivos
- [ ] Security review de RLS aprobado
- [ ] Performance tests con multiples tenants
- [ ] Documentacion Swagger completa

---

## Metricas de Exito

| Metrica | Objetivo |
|---------|----------|
| Tiempo de respuesta (con RLS) | < 100ms p95 |
| Tests de aislamiento | 100% pass |
| Cobertura de tests | > 80% |
| Vulnerabilidades cross-tenant | 0 |

---

## Historial

| Version | Fecha | Autor | Cambios |
|---------|-------|-------|---------|
| 1.0 | 2025-12-05 | System | Creacion inicial con 4 US |
