BoostAPI usa MySQL 8 con TypeORM . El esquema se sincroniza automaticamente (synchronize: true), con timezone forzado a UTC.
Entities (Empresas/Tenants)
| +-- Employees (por entidad)
| +-- Zauru Sessions (credenciales cifradas)
| +-- Subscriptions (user/employee + role + entity)
| +-- Permission Overrides (ALLOW/DENY)
| | | +-- Contact Channels
| | +-- Group Assignments (vendedor)
| | +-- Group Purchase Summaries
| +-- Contact Assignments
| +-- Entity Channel Accounts
| +-- Custom Field Groups
| +-- Custom Fields + Options
| +-- Custom Field Values
+-- Opportunities (Kanban)
| +-- Opportunity Funnels
| +-- Quote Lines / Sections / Subsections
| +-- Quote States / Attachments
| +-- Quote Public Decisions
+-- Interactions (Mensajeria)
| +-- Routing (Queues + Filters)
| +-- Communications Config
+-- Notifications + Recipients
Tabla
Descripcion
Relaciones clave
entities
Empresas/tenants. PK = Zauru entity ID
Padre de casi todo
users
Usuarios del CRM
email (unique), bcrypt password, zauru_id
employees
Empleados por entidad
user_id + entity_id
Tabla
Descripcion
roles
Roles por entidad. Flags: seller_role, allow_change_seller, read_chats
subscriptions
Vinculo usuario/empleado + rol + entidad. Unique por user+entity y employee+entity
permissions
Catalogo de permisos (44 codigos)
role_permissions
Permisos asignados a roles
subscription_permission_overrides
Overrides ALLOW/DENY por suscripcion
zauru_user_sessions
Sesiones Zauru cifradas (AES-256-CBC) por user+entity+client_kind
Tabla
Descripcion
groups
Agrupacion de leads. Filtrado por entity_id
leads
Leads/clientes. zauru_id null = lead puro, no-null = cliente sincronizado con Zauru
contacts
Contactos bajo leads
contact_channels
Canales de contacto: telefono, email, WhatsApp
communication_channel_types
Tipos de canal (whatsapp_api, etc.)
entity_channel_accounts
Cuentas de canal de la entidad
group_assignments
Asignacion vendedor -> grupo
lead_assignments
Asignacion vendedor -> lead
contact_assignments
Asignacion vendedor -> contacto
group_purchase_summaries
Cache de datos de compra
Tabla
Descripcion
custom_field_types
Tipos: texto, numero, fecha, select, media, etc.
custom_field_groups
Agrupaciones logicas de campos
custom_fields
Definiciones de campos con configuracion
custom_field_options
Opciones para campos tipo select/multi-select
custom_field_values
Valores guardados por entidad target (group/lead/contact)
Tabla
Descripcion
opportunities
Oportunidades de venta
opportunity_states
Estados del funnel (personalizable por entidad)
opportunity_events
Historial de eventos de cada oportunidad
opportunity_funnels
Definiciones de funnels
opportunity_orders
Vinculacion oportunidad -> pedido
Tabla
Descripcion
quotes
Cotizaciones principales
quote_lines
Lineas de producto de la cotizacion
quote_sections / quote_subsections
Estructura de secciones
quote_states
Estados del ciclo de vida
quote_attachments
Archivos adjuntos (PDF, imagenes, videos, brochures)
quote_rejection_reasons
Razones de rechazo
quote_public_decisions
Decisiones del checkout publico
quote_template_*
5 tablas para el sistema de plantillas
Tabla
Descripcion
orders
Pedidos (se sincronizan con Zauru)
order_lines
Lineas de producto del pedido
automatic_numbers
Numeracion automatica
automatic_number_types
Tipos de numeracion
Tabla
Descripcion
interaction_conversations
Registro principal de conversacion
interaction_event_inbox
Cola de eventos entrantes
interaction_message_index
Indice local de mensajes
interaction_timeline_event
Timeline de la conversacion
interaction_conversation_workspace_note
Notas del vendedor/admin
interaction_conversation_alias
Alias de conversaciones
interaction_conversation_relink
Registros de re-vinculacion
interaction_contact_channel_route
Ruteo contacto -> canal
interaction_communications_config
Config de Communications por entidad
contact_custom_field_assignment
Campos personalizados en contactos de conversacion
contact_required_field_policy
Politicas de campos requeridos
routing_queue
Colas de routing
routing_queue_member
Miembros de colas
routing_filter / routing_filter_rule
Reglas de filtrado
routing_rr_cursor
Cursor round-robin
Tabla
Descripcion
agenda_events
Eventos de calendario
media_uploads
Registros de procesamiento de media (S3)
notifications
Notificaciones
notification_recipients
Destinatarios de notificaciones
global_settings
Definiciones de settings
entity_global_settings
Valores de settings por entidad
external_catalog_caches
Cache de datos de catalogo Zauru
employee_payment_method_assignments
Metodos de pago asignados a empleados
employee_payment_term_assignments
Terminos de pago asignados
employee_supervisor_assignments
Asignaciones de supervisores
No hay migraciones formales. TypeORM synchronize: true crea/actualiza tablas automaticamente. En produccion, esto significa que cambios de esquema se aplican al arrancar.
Los datos de Zauru NO se almacenan localmente (facturas, pagos, productos, stock). Se consultan en tiempo real via GraphQL/REST y se cachean en Pulpito.
Los leads se convierten en clientes cuando se les asigna un zauru_id. Esto significa que el lead se sincronizo con un payee de Zauru.
Las credenciales de Zauru estan cifradas en la tabla zauru_user_sessions usando AES-256-CBC con ZAURU_SESSION_ENCRYPTION_KEY.
Referencia privada: Ver BoostAPI/docs/domain-and-data-model.md para el modelo de datos detallado con diagramas y BoostAPI/src/*/entities/ para las definiciones exactas de TypeORM.