erp-core/docs/08-epicas/EPIC-MGN-004-tenants.md

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
WhatsApp No No Si
AI Agents No No Si
Soporte Email 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