6.2 KiB
6.2 KiB
EPICA: EPIC-MGN-004 - Multi-Tenancy
Metadata
| Campo | Valor |
|---|---|
| ID | EPIC-MGN-004 |
| Nombre | Multi-Tenancy |
| Modulo | tenants |
| Fase | Fase 1 - Foundation |
| Prioridad | P0 (Critico) |
| Estado | Ready |
| Story Points | 21 |
| Sprint(s) | Sprint 4 (multi-tenancy) |
| Plan Detalle | SPRINT-PLAN-FASE-1.md |
Descripcion
Sistema de multi-tenancy que permite aislar datos entre diferentes organizaciones (tenants) usando Row-Level Security (RLS) en PostgreSQL. Incluye creacion de tenants, configuracion por tenant, feature flags, limites/quotas y aislamiento completo de datos.
Es la base arquitectonica para ofrecer el sistema como SaaS multi-cliente.
Objetivo de Negocio
Implementar arquitectura multi-tenant que:
- Aisle completamente los datos entre clientes
- Permita personalizacion por cliente (branding, features)
- Soporte diferentes planes de suscripcion
- Escale a miles de tenants
- Facilite el onboarding de nuevos clientes
Stakeholders
| Rol | Nombre/Equipo | Responsabilidad |
|---|---|---|
| Product Owner | Equipo Producto | Definicion de features por plan |
| Tech Lead | Equipo Backend | Implementacion de RLS |
| Operaciones | Equipo Infra | Monitoreo y escalabilidad |
| Clientes | Tenant admins | Feedback de gestion |
Historias de Usuario
| ID | Historia | Prioridad | SP | Estado |
|---|---|---|---|---|
| US-MGN004-001 | Como superadmin, quiero crear tenants para dar de alta nuevos clientes | P0 | 5 | Ready |
| US-MGN004-002 | Como tenant admin, quiero configurar mi organizacion (nombre, logo, colores) | P0 | 3 | Ready |
| US-MGN004-003 | Como superadmin, quiero habilitar/deshabilitar features por tenant | P0 | 5 | Ready |
| US-MGN004-004 | Como sistema, quiero aislar datos automaticamente por tenant usando RLS | P0 | 5 | Ready |
| US-MGN004-005 | Como superadmin, quiero definir limites y quotas por tenant | P1 | 3 | Ready |
Total Story Points: 21 SP
Criterios de Aceptacion de la Epica
Funcionales:
- CRUD de tenants con datos de organizacion
- Configuracion personalizada por tenant (branding)
- Feature flags activables por tenant
- Aislamiento de datos via RLS
- Limites configurables (usuarios, storage, etc.)
- Dashboard de tenant para admins
No Funcionales:
- Performance: Overhead de RLS < 5%
- Seguridad: Imposible acceder a datos de otro tenant
- Escalabilidad: Soporte 10,000+ tenants
Tecnicos:
- RLS policies en todas las tablas
- Contexto de tenant via
app.current_tenant_id - Cobertura de tests > 90%
- Tests de seguridad (penetration tests)
Dependencias
Esta epica depende de:
| Epica/Modulo | Estado | Bloqueante |
|---|---|---|
| EPIC-MGN-001 Auth | Ready | Si |
| PostgreSQL con RLS | Ready | Si |
Esta epica bloquea:
| Epica/Modulo | Razon |
|---|---|
| EPIC-MGN-005 Catalogs | Requiere tenant para aislar datos |
| EPIC-MGN-016 Billing | Facturacion por tenant |
| Todos los modulos | Aislamiento de datos |
Desglose Tecnico
Database:
- Schema:
core_system - Tablas: 3 (tenants, tenant_settings, tenant_features)
- Funciones: 3 (set_tenant_context, get_current_tenant, validar_tenant)
- RLS Policies: Todas las tablas del sistema
- Triggers: auto-set tenant_id on insert
Backend:
- Modulo:
tenants - Entities: 3 (Tenant, TenantSetting, TenantFeature)
- Middleware: TenantContextMiddleware
- Interceptor: TenantInjector
- Endpoints: 8 (CRUD + config + features + stats)
- Tests: 25+
Frontend:
- Paginas: 3 (TenantsList, TenantConfig, TenantFeatures)
- Componentes: 6 (TenantForm, TenantCard, FeatureToggle, etc.)
- Stores: 1 (tenantStore)
- Context: CurrentTenantProvider
Arquitectura RLS
-- Politica base para todas las tablas
CREATE POLICY tenant_isolation ON {tabla}
USING (tenant_id = current_setting('app.current_tenant_id')::uuid);
-- Funcion para establecer contexto
CREATE FUNCTION set_tenant_context(p_tenant_id UUID)
RETURNS VOID AS $$
BEGIN
PERFORM set_config('app.current_tenant_id', p_tenant_id::text, false);
END;
$$ LANGUAGE plpgsql;
Feature Flags por Plan:
| Feature | Starter | Growth | Enterprise |
|---|---|---|---|
| Usuarios max | 5 | 25 | Ilimitados |
| Storage | 1GB | 10GB | 100GB |
| Reportes | Basicos | Avanzados | Personalizados |
| API Access | No | Si | Si |
| No | No | Si | |
| AI Agents | No | No | Si |
| Soporte | Chat | Dedicado |
Riesgos
| Riesgo | Probabilidad | Impacto | Mitigacion |
|---|---|---|---|
| Fuga de datos entre tenants | Baja | Critico | Tests exhaustivos, auditorias |
| Performance con RLS | Media | Alto | Indices optimizados, benchmarks |
| Complejidad de migraciones | Media | Medio | Migraciones por tenant |
Definition of Ready (DoR)
- Historias de usuario definidas
- Criterios de aceptacion claros
- Dependencias identificadas
- Estimacion completada
- Arquitectura RLS aprobada
- Sin bloqueadores activos
Definition of Done (DoD)
- Codigo implementado y revisado
- RLS policies en todas las tablas
- Tests de aislamiento pasando
- Tests de penetracion ejecutados
- Documentacion actualizada
- Demo realizada
- Security review aprobado
Documentacion Relacionada
- Requerimientos:
docs/03-requerimientos/RF-tenants/ - Especificaciones:
docs/04-modelado/especificaciones-tecnicas/ET-tenants-*.md - User Stories:
docs/05-user-stories/MGN-004/ - DDL Spec:
docs/04-modelado/database-design/DDL-SPEC-core_tenants.md - ADR:
docs/97-adr/ADR-003-multi-tenancy.md
Historial
| Fecha | Cambio | Autor |
|---|---|---|
| 2025-12-05 | Creacion de epica | Requirements-Analyst |
Creada por: Requirements-Analyst Fecha: 2025-12-05 Ultima actualizacion: 2025-12-05