erp-core/docs/03-requerimientos/RF-tenants/INDICE-RF-TENANT.md

272 lines
14 KiB
Markdown

# Indice de Requerimientos Funcionales - MGN-004 Tenants
## Resumen del Modulo
| Campo | Valor |
|-------|-------|
| **Modulo** | MGN-004 |
| **Nombre** | Tenants (Multi-Tenancy) |
| **Descripcion** | Arquitectura multi-tenant con aislamiento de datos |
| **Total RFs** | 4 |
| **Story Points** | 100 |
| **Estado** | Ready |
| **Fecha** | 2025-12-05 |
---
## Lista de Requerimientos
| ID | Nombre | Prioridad | SP | Estado |
|----|--------|-----------|-----|--------|
| [RF-TENANT-001](./RF-TENANT-001.md) | Gestion de Tenants | P0 | 29 | Ready |
| [RF-TENANT-002](./RF-TENANT-002.md) | Configuracion de Tenant | P0 | 19 | Ready |
| [RF-TENANT-003](./RF-TENANT-003.md) | Aislamiento de Datos | P0 | 20 | Ready |
| [RF-TENANT-004](./RF-TENANT-004.md) | Subscripciones y Limites | P1 | 32 | Ready |
---
## Diagrama de Arquitectura Multi-Tenant
```
┌─────────────────────────────────────────────────────────────────┐
│ Platform Layer │
├─────────────────────────────────────────────────────────────────┤
│ Platform Admin UI │ API Gateway │ Auth Service │
│ (Gestion tenants) │ (Routing) │ (JWT + tenant) │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Application Layer │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ TenantGuard │ │ RbacGuard │ │LimitGuard │ │
│ │(Contexto) │ │ (Permisos) │ │(Subscripcion)│ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────┐│
│ │ TenantAwareServices ││
│ │ (Todos los servicios heredan contexto de tenant) ││
│ └─────────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Data Layer │
├─────────────────────────────────────────────────────────────────┤
│ │
│ PostgreSQL Database (Shared) │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Tenant A │ │ Tenant B │ │ Tenant C │ │
│ │ tenant_id │ │ tenant_id │ │ tenant_id │ │
│ │ =uuid-a │ │ =uuid-b │ │ =uuid-c │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ Row Level Security (RLS) - Aislamiento automatico │
│ SET app.current_tenant_id = 'tenant-uuid' │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Flujo de Request Multi-Tenant
```
┌─────────────────────────────────────────────────────────────────┐
│ Request Flow │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 1. Request HTTP │
│ └─> Authorization: Bearer {JWT con tenant_id} │
│ │
│ 2. JwtAuthGuard │
│ └─> Valida token, extrae user + tenant_id │
│ │
│ 3. TenantGuard │
│ └─> Verifica tenant activo │
│ └─> Inyecta tenant en request │
│ │
│ 4. TenantContextMiddleware │
│ └─> SET app.current_tenant_id = :tenantId │
│ │
│ 5. LimitGuard (si aplica) │
│ └─> Verifica limites de subscripcion │
│ │
│ 6. RbacGuard │
│ └─> Valida permisos del usuario │
│ │
│ 7. Controller │
│ └─> Ejecuta logica de negocio │
│ │
│ 8. TenantAwareService │
│ └─> Automaticamente filtra por tenant │
│ │
│ 9. PostgreSQL RLS │
│ └─> Ultima linea de defensa │
│ └─> WHERE tenant_id = current_setting('app.current_tenant_id')│
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Estados del Tenant
```
┌──────────────┐
│ created │
└──────┬───────┘
┌──────────────┐
┌──────────│ trial │──────────┐
│ └──────┬───────┘ │
│ │ │
│ (upgrade) │ (trial expires) │ (convert)
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │trial_expired │ │
│ └──────────────┘ │
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ active │◄────────────────────│ active │
└──────┬───────┘ (reactivate) └──────┬───────┘
│ │
│ (suspend) │
│ │
▼ │
┌──────────────┐ │
│ suspended │────────────────────────────┘
└──────┬───────┘
│ (schedule delete)
┌──────────────────┐
│ pending_deletion │
└────────┬─────────┘
│ (30 days grace)
┌──────────────┐
│ deleted │
└──────────────┘
```
---
## Planes de Subscripcion
| Plan | Usuarios | Storage | Modulos | API Calls | Precio |
|------|----------|---------|---------|-----------|--------|
| **Trial** | 5 | 1 GB | Basicos | 1K/mes | Gratis |
| **Starter** | 10 | 5 GB | Basicos | 10K/mes | $29/mes |
| **Professional** | 50 | 25 GB | Standard | 50K/mes | $99/mes |
| **Enterprise** | ∞ | 100 GB | Premium | 500K/mes | $299/mes |
| **Custom** | Config | Config | Config | Config | Cotizacion |
---
## Tablas de Base de Datos
| Tabla | Descripcion |
|-------|-------------|
| tenants | Tenants registrados |
| tenant_settings | Configuracion de cada tenant (JSONB) |
| subscriptions | Subscripciones activas y pasadas |
| plans | Planes de subscripcion disponibles |
| invoices | Historial de facturacion |
| tenant_modules | Modulos activos por tenant |
---
## Estimacion Total
| Capa | Story Points |
|------|--------------|
| Backend: CRUD Tenants | 12 |
| Backend: Settings | 7 |
| Backend: RLS & Guards | 15 |
| Backend: Subscriptions | 15 |
| Backend: Billing | 10 |
| Backend: Tests | 12 |
| Frontend: Platform Admin | 15 |
| Frontend: Tenant Settings | 8 |
| Frontend: Subscription UI | 8 |
| Frontend: Tests | 6 |
| **Total** | **108 SP** |
> Nota: Los 100 SP indicados en resumen corresponden a la suma de RF individuales.
---
## Definition of Done del Modulo
- [ ] RF-TENANT-001: CRUD de tenants funcional
- [ ] RF-TENANT-002: Settings por tenant operativos
- [ ] RF-TENANT-003: RLS aplicado en TODAS las tablas
- [ ] RF-TENANT-003: Tests de aislamiento pasando
- [ ] RF-TENANT-004: Planes y limites configurados
- [ ] RF-TENANT-004: Enforcement de limites activo
- [ ] Platform Admin UI completa
- [ ] Tests unitarios > 80% coverage
- [ ] Tests de aislamiento exhaustivos
- [ ] Security review de RLS aprobado
- [ ] Performance tests con multiples tenants
---
## Consideraciones de Seguridad
### Aislamiento de Datos
- RLS como ultima linea de defensa
- Validacion en TODAS las capas
- Nunca confiar en input del cliente
- Auditar accesos cross-tenant
### Platform Admin
- Autenticacion separada
- 2FA obligatorio
- Logs de todas las acciones
- Switch de tenant explicito y auditado
### Datos Sensibles
- Encriptar datos sensibles por tenant
- Claves de encriptacion por tenant
- Backups separados (opcional enterprise)
---
## Notas de Implementacion
### Orden Recomendado
1. **Primero**: RF-TENANT-003 (RLS) - Base para todo lo demas
2. **Segundo**: RF-TENANT-001 (CRUD) - Crear tenants
3. **Tercero**: RF-TENANT-002 (Settings) - Configurar tenants
4. **Cuarto**: RF-TENANT-004 (Subscriptions) - Monetizacion
### Migracion de Datos Existentes
Si hay datos sin tenant_id:
1. Crear tenant "default"
2. Asignar todos los datos al default
3. Habilitar RLS
4. Migrar datos a tenants especificos
---
## Historial
| Version | Fecha | Autor | Cambios |
|---------|-------|-------|---------|
| 1.0 | 2025-12-05 | System | Creacion inicial con 4 RFs |