# 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 1. Instalación limpia del sistema 2. Configuración de ambiente: `DEPLOYMENT_MODE=single_tenant` 3. Script de inicialización ejecutado ## Flujo Principal - Inicialización Single-Tenant 1. Administrador ejecuta script de setup inicial 2. Sistema detecta modo single-tenant en configuración 3. Sistema crea: - Tenant único con configuración especial - Suscripción con plan "single_tenant" (sin vencimiento) - Usuario administrador inicial 4. Sistema deshabilita: - Registro público de nuevos tenants - Página de precios/planes - Módulos de billing para usuarios finales 5. Sistema habilita: - Todas las funcionalidades del ERP - Usuarios ilimitados - Empresas ilimitadas ## Flujos Alternativos ### FA-1: Personalización de Marca 1. Administrador accede a configuración de sistema 2. Puede personalizar: logo, colores, nombre 3. Sistema aplica branding personalizado 4. No aparece referencia a plataforma SaaS original ### FA-2: Actualizaciones 1. Sistema puede recibir actualizaciones 2. Actualizaciones de billing se ignoran/minimizan 3. Funcionalidades de ERP se actualizan normalmente ### FA-3: Migración a SaaS 1. Cliente desea migrar de single-tenant a SaaS 2. Administrador exporta datos del tenant 3. Se importan a instancia SaaS como nuevo tenant 4. 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 # .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 ```json { "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 ```bash # 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 <