5.9 KiB
5.9 KiB
RF-MGN-015-006: Modo Single-Tenant
Módulo: MGN-015 - Billing y Suscripciones Prioridad: P1 Story Points: 5 Estado: Definido Fecha: 2025-11-24
Descripción
El sistema debe soportar un modo de operación "single-tenant" para instalaciones on-premise donde un cliente adquiere el sistema completo para uso exclusivo. En este modo, el sistema de billing se simplifica: existe un único tenant con plan especial que tiene todas las funcionalidades habilitadas y sin límites.
Actores
- Actor Principal: Administrador de Sistema (on-premise)
- Actores Secundarios: Usuario Final (sin interacción con billing)
Precondiciones
- Instalación limpia del sistema
- Configuración de ambiente:
DEPLOYMENT_MODE=single_tenant - Script de inicialización ejecutado
Flujo Principal - Inicialización Single-Tenant
- Administrador ejecuta script de setup inicial
- Sistema detecta modo single-tenant en configuración
- Sistema crea:
- Tenant único con configuración especial
- Suscripción con plan "single_tenant" (sin vencimiento)
- Usuario administrador inicial
- Sistema deshabilita:
- Registro público de nuevos tenants
- Página de precios/planes
- Módulos de billing para usuarios finales
- Sistema habilita:
- Todas las funcionalidades del ERP
- Usuarios ilimitados
- Empresas ilimitadas
Flujos Alternativos
FA-1: Personalización de Marca
- Administrador accede a configuración de sistema
- Puede personalizar: logo, colores, nombre
- Sistema aplica branding personalizado
- No aparece referencia a plataforma SaaS original
FA-2: Actualizaciones
- Sistema puede recibir actualizaciones
- Actualizaciones de billing se ignoran/minimizan
- Funcionalidades de ERP se actualizan normalmente
FA-3: Migración a SaaS
- Cliente desea migrar de single-tenant a SaaS
- Administrador exporta datos del tenant
- Se importan a instancia SaaS como nuevo tenant
- Se configura plan y billing normalmente
Reglas de Negocio
- RN-1: Solo existe un tenant en modo single-tenant
- RN-2: Plan "single_tenant" no tiene límites (max_users = NULL)
- RN-3: Suscripción no tiene fecha de vencimiento
- RN-4: No se muestran opciones de upgrade/billing
- RN-5: Registro de nuevos tenants está deshabilitado
- RN-6: Todas las features están habilitadas
- RN-7: No hay integración con gateway de pagos
Criterios de Aceptación
- Sistema se puede instalar en modo single-tenant
- Plan single_tenant tiene todas las features habilitadas
- No hay límites de usuarios ni empresas
- Suscripción no tiene fecha de vencimiento
- UI no muestra opciones de billing a usuarios
- Registro público de tenants está deshabilitado
- Administrador puede personalizar branding
- Sistema funciona sin conexión a internet
Entidades Involucradas
- Principales:
- billing.subscription_plans (plan "single_tenant")
- billing.subscriptions (suscripción permanente)
- Relacionadas:
- auth.tenants (tenant único)
- Sistema de configuración (DEPLOYMENT_MODE)
Configuración
# .env para modo single-tenant
DEPLOYMENT_MODE=single_tenant
DISABLE_PUBLIC_REGISTRATION=true
DISABLE_BILLING_UI=true
# Personalización de marca
BRAND_NAME=Mi Empresa ERP
BRAND_LOGO_URL=/assets/custom-logo.png
BRAND_PRIMARY_COLOR=#1a365d
Plan Single-Tenant
{
"code": "single_tenant",
"name": "Licencia Empresarial",
"price_monthly": 0,
"price_yearly": 0,
"max_users": null,
"max_companies": null,
"max_storage_gb": null,
"features": {
"inventory": true,
"sales": true,
"purchase": true,
"financial": true,
"crm": true,
"projects": true,
"hr": true,
"manufacturing": true,
"reports_basic": true,
"reports_advanced": true,
"api_access": true,
"white_label": true,
"custom_domain": true,
"sso": true,
"audit_log": true,
"data_export": true
},
"is_public": false,
"is_active": true
}
Diferencias SaaS vs Single-Tenant
| Aspecto | SaaS Multi-Tenant | Single-Tenant |
|---|---|---|
| Tenants | Múltiples | Uno |
| Registro | Público/Abierto | Deshabilitado |
| Billing | Activo | Oculto |
| Límites | Según plan | Sin límites |
| Pagos | Automáticos | N/A |
| Actualizaciones | Automáticas | Manuales |
| Personalización | Limitada | Completa |
| Infraestructura | Compartida | Dedicada |
Script de Inicialización
# setup-single-tenant.sh
#!/bin/bash
# Verificar modo
if [ "$DEPLOYMENT_MODE" != "single_tenant" ]; then
echo "Error: DEPLOYMENT_MODE must be 'single_tenant'"
exit 1
fi
# Crear tenant único
psql $DATABASE_URL <<EOF
-- Crear tenant
INSERT INTO auth.tenants (id, name, subdomain, plan, settings)
VALUES (
'00000000-0000-0000-0000-000000000001',
'Sistema ERP',
'main',
'single_tenant',
'{"mode": "single_tenant", "white_label": true}'::jsonb
);
-- Crear suscripción permanente
INSERT INTO billing.subscriptions (
tenant_id, plan_id, status, billing_cycle,
current_period_start, current_period_end
)
SELECT
'00000000-0000-0000-0000-000000000001',
id,
'active',
'yearly',
NOW(),
'2099-12-31'::timestamp
FROM billing.subscription_plans
WHERE code = 'single_tenant';
EOF
echo "Single-tenant setup complete!"
Referencias
- RF-MGN-015-001 - Plan single_tenant
- Guía de Instalación On-Premise
Notas Técnicas
- Variable de entorno:
DEPLOYMENT_MODE=single_tenant - Plan especial:
single_tenantconis_public = false - Fecha fin:
2099-12-31(efectivamente sin vencimiento) - Middleware: Oculta rutas de billing si es single-tenant
- UI: Componente detecta modo y oculta elementos de billing
Dependencias
- RF Requeridos: RF-MGN-015-001 (Plan single_tenant debe existir)
- Independiente de: RF-MGN-015-002, 003, 004, 005 (no aplican)