Empresas
Multi-tenencia con jerarquía, configuración de empresa e impersonación
El módulo de empresas implementa la multi-tenencia real de TunoCommerce: cada empresa es un tenant aislado con su propio catálogo, clientes, configuración y permisos. Las empresas pueden organizarse en jerarquías padre-hijo para escenarios de distribuidoras, franquicias o corporativos.
Multi-tenencia jerárquica
Estructura de empresas
Las empresas se organizan en una jerarquía de hasta 4 niveles de profundidad utilizando rutas materializadas (materialized path) para consultas eficientes.
Corporativo (nivel 0)
├── Distribuidora Norte (nivel 1)
│ ├── Sucursal Monterrey (nivel 2)
│ └── Sucursal Guadalajara (nivel 2)
└── Distribuidora Sur (nivel 1)
└── Sucursal Mérida (nivel 2)Empresa master vs. subsidiarias
| Característica | Empresa Master | Subsidiaria |
|---|---|---|
| Gestión de catálogo | CRUD completo | Solo lectura |
| Visibilidad de catálogo | Ve todo | Solo lo asignado |
| Creación de subsidiarias | Sí | Según configuración |
| Modificación de datos propios | Sí | Sí |
Aislamiento de datos
Cada consulta se filtra por alcance de empresa a través del scope resolver:
- La empresa master puede consultar datos de todas las empresas activas o filtrar por una específica.
- Las subsidiarias solo acceden a sus propios datos.
- Nunca se exponen datos entre empresas no relacionadas jerárquicamente.
Configuración de empresa
Datos generales
Cada empresa tiene su propio perfil con:
- Identidad: Nombre, slug (único global), idioma por defecto.
- Estado:
activeoinactive. - Datos de contacto: Dirección completa, teléfono, sitio web.
- Branding: Logo (base64), colores primario y secundario.
Configuración heredable
Las configuraciones se almacenan como pares clave-valor (JSON) y cascadean de padre a hijo:
- Si una subsidiaria no define un valor, se hereda del padre.
- Si el padre no lo tiene, se busca en el abuelo, y así hasta la raíz.
- Aplica tanto para configuración operativa como para branding visual.
Ejemplos de configuración:
- SMTP para envío de correos.
- Métodos de autenticación habilitados.
- Días de expiración de cotizaciones.
- Límites de rondas de negociación.
- Máximo de storefronts permitidos.
Impersonación
La empresa master puede impersonar subsidiarias para gestionar sus datos como si fuera la subsidiaria misma. Esto se usa para:
- Soporte técnico y resolución de problemas.
- Configuración inicial de nuevas subsidiarias.
- Gestión centralizada cuando es necesario.
La impersonación queda registrada en el log de auditoría con el campo impersonatedBy para trazabilidad completa.
Direcciones de empresa
Cada empresa puede gestionar múltiples direcciones de envío y facturación:
- Campos: Etiqueta descriptiva, datos de contacto, dirección completa.
- Tipos: Envío, facturación o ambas.
- Predeterminadas: Una dirección predeterminada de envío y una de facturación por empresa, con cambio automático de defaults.
- Uso en cotizaciones: Las cotizaciones pueden referenciar una dirección de envío de la empresa.
Datos del modelo
| Campo | Descripción |
|---|---|
| Nombre | Nombre de la empresa |
| Slug | Identificador único para URLs |
| Estado | active / inactive |
| Idioma | es-MX / en-US |
| Es master | Flag que identifica a la empresa principal |
| Parent ID | Referencia al padre en la jerarquía |
| Root Tenant ID | Referencia a la raíz del árbol |
| Depth | Nivel en la jerarquía (0-3) |
| Path | Ruta materializada para consultas jerárquicas |