ARQUITECTURA¶
Matriz Integral de Relaciones DBML: Plataforma SIGFA Pro¶
Este documento consolida la arquitectura y todas las relaciones de integridad referencial entre los microservicios y esquemas de las tres bases de datos principales (core, crm, erp), aplicando el estándar estricto de Multi-Tenancy con Claves Foráneas Compuestas (empresa_id, <fk_id>) y Correlación Lógica por UUID Cross-Database.
1. Diagrama de Relaciones DBML¶
// =============================================================================
// BASE DE DATOS: core | ESQUEMA: identidad
// =============================================================================
// Jerarquía Geográfica y Catálogos
Ref: identidad.cat_provincias.(empresa_id, pais_id) > identidad.cat_paises.(empresa_id, id) [delete: restrict]
Ref: identidad.cat_ciudades.(empresa_id, provincia_id) > identidad.cat_provincias.(empresa_id, id) [delete: restrict]
// Maestros de Identidad y Accesos
Ref: identidad.mae_personas.(empresa_id, tipo_identificacion_id) > identidad.cat_tipos_identificacion.(empresa_id, id) [delete: restrict]
Ref: identidad.mae_personas.(empresa_id, ciudad_id) > identidad.cat_ciudades.(empresa_id, id) [delete: restrict]
Ref: identidad.mae_personas.(empresa_id, nacionalidad_pais_id) > identidad.cat_paises.(empresa_id, id) [delete: restrict]
Ref: identidad.mae_sucursales.(empresa_id, ciudad_id) > identidad.cat_ciudades.(empresa_id, id) [delete: restrict]
Ref: identidad.mae_sucursales.(empresa_id, moneda_id) > identidad.cat_monedas.(empresa_id, id) [delete: restrict]
Ref: identidad.mae_usuarios.(empresa_id, entidad_id) > identidad.mae_entidades.(empresa_id, id) [delete: restrict]
Ref: identidad.mae_usuarios.(empresa_id, tipo_usuario_id) > identidad.cat_tipos_usuario.(empresa_id, id) [delete: restrict]
Ref: identidad.mae_personas.(empresa_id, id) > identidad.mae_entidades.(empresa_id, id) [delete: cascade]
Ref: identidad.mae_personas_juridicas.(empresa_id, id) > identidad.mae_entidades.(empresa_id, id) [delete: cascade]
// =============================================================================
// BASE DE DATOS: crm | ESQUEMA: clientes (Relaciones Internas de Catálogos)
// =============================================================================
Ref: clientes.cat_tipos_canal_comercial.(empresa_id, canal_id) > clientes.cat_canales_comerciales.(empresa_id, id)
Ref: clientes.cat_encuesta_opciones.(empresa_id, pregunta_id) > clientes.cat_encuesta_preguntas.(empresa_id, id) [delete: cascade]
// =============================================================================
// BASE DE DATOS: crm | ESQUEMA: clientes (Tablas Maestras)
// =============================================================================
Ref: clientes.mae_clientes.(empresa_id, tipo_cliente_id) > clientes.cat_tipos_clientes.(empresa_id, id)
Ref: clientes.mae_clientes.(empresa_id, prospecto_id) > clientes.mae_prospectos.(empresa_id, id)
Ref: clientes.mae_clientes.(empresa_id, canal_id) > clientes.cat_canales_comerciales.(empresa_id, id)
Ref: clientes.mae_clientes.(empresa_id, tipo_canal_id) > clientes.cat_tipos_canal_comercial.(empresa_id, id)
Ref: clientes.mae_clientes.(empresa_id, clase_cliente_id) > clientes.cat_clases_cliente.(empresa_id, id)
Ref: clientes.mae_clientes.(empresa_id, grupo_economico_id) > clientes.cat_grupos_economicos.(empresa_id, id)
Ref: clientes.mae_clientes.(empresa_id, modelo_comercial_id) > clientes.cat_modelos_comerciales.(empresa_id, id)
Ref: clientes.mae_clientes.(empresa_id, estado_cliente_id) > clientes.cat_estados_cliente.(empresa_id, id)
Ref: clientes.mae_documentos_cliente.(empresa_id, cliente_id) > clientes.mae_clientes.(empresa_id, id) [delete: cascade]
Ref: clientes.mae_locales_cliente.(empresa_id, cliente_id) > clientes.mae_clientes.(empresa_id, id) [delete: cascade]
Ref: clientes.mae_prospectos.(empresa_id, promotor_captador_id) > fuerza_ventas.mae_promotores.(empresa_id, id)
Ref: clientes.mae_prospectos.(empresa_id, estado_prospecto_id) > clientes.cat_estados_prospecto.(empresa_id, id)
// =============================================================================
// BASE DE DATOS: crm | ESQUEMA: fuerza_ventas (Tablas Maestras)
// =============================================================================
Ref: fuerza_ventas.mae_promotores.(empresa_id, modalidad_pago_comision_id) > fuerza_ventas.cat_modalidades_pago_comision.(empresa_id, id) [delete: restrict]
Ref: fuerza_ventas.mae_agencias.(empresa_id, supervisor_responsable_id) > fuerza_ventas.mae_promotores.(empresa_id, id)
Ref: fuerza_ventas.mae_equipos_consignacion.(empresa_id, cliente_id) > clientes.mae_clientes.(empresa_id, id)
Ref: fuerza_ventas.mae_equipos_consignacion.(empresa_id, local_id) > clientes.mae_locales_cliente.(empresa_id, id)
Ref: fuerza_ventas.mae_equipos_consignacion.(empresa_id, promotor_id) > fuerza_ventas.mae_promotores.(empresa_id, id)
Ref: fuerza_ventas.mae_metas_promotores.(empresa_id, promotor_id) > fuerza_ventas.mae_promotores.(empresa_id, id) [delete: cascade]
Ref: fuerza_ventas.mae_presupuestos_cliente.(empresa_id, cliente_id) > clientes.mae_clientes.(empresa_id, id) [delete: cascade]
Ref: fuerza_ventas.mae_presupuestos_cliente.(empresa_id, promotor_id) > fuerza_ventas.mae_promotores.(empresa_id, id) [delete: cascade]
// =============================================================================
// BASE DE DATOS: crm | ESQUEMA: fuerza_ventas (Transaccionales: Visitas y Requerimientos)
// =============================================================================
Ref: fuerza_ventas.trx_visitas.(empresa_id, promotor_id) > fuerza_ventas.mae_promotores.(empresa_id, id)
Ref: fuerza_ventas.trx_visitas.(empresa_id, cliente_id) > clientes.mae_clientes.(empresa_id, id)
Ref: fuerza_ventas.trx_visitas.(empresa_id, local_id) > clientes.mae_locales_cliente.(empresa_id, id)
Ref: fuerza_ventas.trx_visitas.(empresa_id, prospecto_id) > clientes.mae_prospectos.(empresa_id, id)
Ref: fuerza_ventas.trx_visitas.(empresa_id, tipo_actividad_id) > clientes.cat_tipos_actividad.(empresa_id, id)
Ref: fuerza_ventas.trx_visitas.(empresa_id, estado_visita_id) > clientes.cat_estados_visita.(empresa_id, id)
Ref: fuerza_ventas.trx_visitas_requerimientos.(empresa_id, visita_id) > fuerza_ventas.trx_visitas.(empresa_id, id) [delete: cascade]
Ref: fuerza_ventas.trx_visitas_requerimientos.(empresa_id, tipo_requerimiento_id) > fuerza_ventas.cat_tipos_requerimiento_visita.(empresa_id, id) [delete: restrict]
Ref: fuerza_ventas.trx_visitas_documentos.(empresa_id, visita_id) > fuerza_ventas.trx_visitas.(empresa_id, id) [delete: cascade]
// =============================================================================
// BASE DE DATOS: crm | ESQUEMA: clientes (Transaccionales: Encuestas y Respuestas)
// =============================================================================
Ref: clientes.trx_encuestas_cliente.(empresa_id, cliente_id) > clientes.mae_clientes.(empresa_id, id)
Ref: clientes.trx_encuestas_cliente.(empresa_id, prospecto_id) > clientes.mae_prospectos.(empresa_id, id)
Ref: clientes.trx_encuestas_cliente.(empresa_id, promotor_id) > fuerza_ventas.mae_promotores.(empresa_id, id)
Ref: clientes.trx_encuestas_cliente.(empresa_id, visita_id) > fuerza_ventas.trx_visitas.(empresa_id, id)
Ref: clientes.trx_encuestas_cliente_detalle.(empresa_id, encuesta_id) > clientes.trx_encuestas_cliente.(empresa_id, id) [delete: cascade]
Ref: clientes.trx_encuestas_cliente_detalle.(empresa_id, pregunta_id) > clientes.cat_encuesta_preguntas.(empresa_id, id)
Ref: clientes.trx_encuestas_cliente_detalle.(empresa_id, opcion_id) > clientes.cat_encuesta_opciones.(empresa_id, id)
// =============================================================================
// BASE DE DATOS: crm | ESQUEMA: fuerza_ventas (Transaccionales: Avisos de Cobro)
// =============================================================================
Ref: fuerza_ventas.trx_avisos_cobro.(empresa_id, promotor_id) > fuerza_ventas.mae_promotores.(empresa_id, id)
Ref: fuerza_ventas.trx_avisos_cobro.(empresa_id, cliente_id) > clientes.mae_clientes.(empresa_id, id)
Ref: fuerza_ventas.trx_avisos_cobro.(empresa_id, estado_cobro_id) > fuerza_ventas.cat_estados_cobro.(empresa_id, id)
Ref: fuerza_ventas.trx_avisos_cobro_detalle.(empresa_id, aviso_cobro_id) > fuerza_ventas.trx_avisos_cobro.(empresa_id, id) [delete: cascade]
// =============================================================================
// BASE DE DATOS: crm | Tablas de Relación N:M y Logs
// =============================================================================
Ref: fuerza_ventas.rel_promotores_supervisores.(empresa_id, promotor_id) > fuerza_ventas.mae_promotores.(empresa_id, id) [delete: cascade]
Ref: fuerza_ventas.rel_promotores_supervisores.(empresa_id, supervisor_id) > fuerza_ventas.mae_promotores.(empresa_id, id)
Ref: fuerza_ventas.rel_promotores_sucursales.(empresa_id, promotor_id) > fuerza_ventas.mae_promotores.(empresa_id, id) [delete: cascade]
Ref: fuerza_ventas.rel_promotores_paises.(empresa_id, promotor_id) > fuerza_ventas.mae_promotores.(empresa_id, id) [delete: cascade]
Ref: clientes.rel_clientes_promotores.(empresa_id, cliente_id) > clientes.mae_clientes.(empresa_id, id) [delete: cascade]
Ref: clientes.rel_clientes_promotores.(empresa_id, promotor_id) > fuerza_ventas.mae_promotores.(empresa_id, id) [delete: cascade]
Ref: clientes.rel_clientes_contactos.(empresa_id, cliente_id) > clientes.mae_clientes.(empresa_id, id) [delete: cascade]
Ref: clientes.rel_clientes_contactos.(empresa_id, contacto_id) > clientes.mae_contactos_cliente.(empresa_id, id) [delete: cascade]
Ref: fuerza_ventas.rel_agencias_sucursales.(empresa_id, agencia_id) > fuerza_ventas.mae_agencias.(empresa_id, id) [delete: cascade]
Ref: fuerza_ventas.rel_promotores_agencias.(empresa_id, promotor_id) > fuerza_ventas.mae_promotores.(empresa_id, id) [delete: cascade]
Ref: fuerza_ventas.rel_promotores_agencias.(empresa_id, agencia_id) > fuerza_ventas.mae_agencias.(empresa_id, id) [delete: cascade]
Ref: clientes.rel_unidades_comerciales_sucursales.(empresa_id, unidad_comercial_id) > clientes.cat_unidades_comerciales.(empresa_id, id) [delete: cascade]
Ref: clientes.rel_canal_tipo_empresa.(empresa_id, canal_id) > clientes.cat_canales_comerciales.(empresa_id, id) [delete: cascade]
Ref: clientes.rel_canal_tipo_empresa.(empresa_id, tipo_canal_id) > clientes.cat_tipos_canal_comercial.(empresa_id, id) [delete: cascade]
Ref: fuerza_ventas.log_ubicaciones_promotores.(empresa_id, promotor_id) > fuerza_ventas.mae_promotores.(empresa_id, id) [delete: restrict]
Ref: clientes.log_cambios_cliente.(empresa_id, cliente_id) > clientes.mae_clientes.(empresa_id, id) [delete: restrict]
Ref: clientes.log_cambios_cliente.(empresa_id, promotor_id) > fuerza_ventas.mae_promotores.(empresa_id, id) [delete: restrict]
// =============================================================================
// BASE DE DATOS: erp | ESQUEMAS: contable y pedidos
// =============================================================================
// Esquema pedidos
Ref: pedidos.trx_pedidos_detalle.(empresa_id, pedido_id) > pedidos.trx_pedidos.(empresa_id, id) [delete: cascade]
Ref: pedidos.trx_pedidos_planificaciones.(empresa_id, pedido_id) > pedidos.trx_pedidos.(empresa_id, id) [delete: cascade]
Ref: pedidos.trx_pedidos_planificaciones.(empresa_id, pedido_detalle_id) > pedidos.trx_pedidos_detalle.(empresa_id, id) [delete: cascade]
// Esquema contable (Cobros en Campo)
Ref: contable.trx_cobros_campo.(empresa_id, metodo_pago_id) > contable.cat_metodos_pago.(empresa_id, id) [delete: restrict]
Ref: contable.trx_cobros_campo.(empresa_id, banco_id) > contable.cat_bancos.(empresa_id, id) [delete: restrict]
Ref: contable.trx_cobros_campo.(empresa_id, estado_cobro_id) > contable.cat_estados_cobro.(empresa_id, id) [delete: restrict]
Ref: contable.trx_cobros_campo_imputaciones.(empresa_id, cobro_campo_id) > contable.trx_cobros_campo.(empresa_id, id) [delete: cascade]
2. Diagramas de Arquitectura Entidad-Relación (Mermaid)¶
2.1 Base de Datos core (svc-identidad)¶
erDiagram
cat_paises ||--o{ cat_provincias : "pais_id"
cat_paises ||--o{ mae_personas : "nacionalidad_pais_id"
cat_provincias ||--o{ cat_ciudades : "provincia_id"
cat_ciudades ||--o{ mae_personas : "ciudad_id"
cat_ciudades ||--o{ mae_sucursales : "ciudad_id"
cat_monedas ||--o{ mae_sucursales : "moneda_id"
cat_tipos_identificacion ||--o{ mae_personas : "tipo_identificacion_id"
cat_tipos_usuario ||--o{ mae_usuarios : "tipo_usuario_id"
mae_entidades ||--|| mae_personas : "es"
mae_entidades ||--|| mae_personas_juridicas : "es"
mae_entidades ||--o{ mae_usuarios : "entidad_id"
2.2 Base de Datos crm (svc-clientes & svc-fuerza_ventas)¶
erDiagram
%% ESQUEMA clientes - Catálogos
cat_canales_comerciales ||--o{ cat_tipos_canal_comercial : "canal_id"
cat_canales_comerciales ||--o{ mae_clientes : "canal_id"
cat_canales_comerciales ||--o{ rel_canal_tipo_empresa : "canal_id"
cat_tipos_canal_comercial ||--o{ mae_clientes : "tipo_canal_id"
cat_tipos_canal_comercial ||--o{ rel_canal_tipo_empresa : "tipo_canal_id"
cat_clases_cliente ||--o{ mae_clientes : "clase_cliente_id"
cat_grupos_economicos ||--o{ mae_clientes : "grupo_economico_id"
cat_modelos_comerciales ||--o{ mae_clientes : "modelo_comercial_id"
cat_estados_cliente ||--o{ mae_clientes : "estado_cliente_id"
cat_tipos_clientes ||--o{ mae_clientes : "tipo_cliente_id"
cat_estados_prospecto ||--o{ mae_prospectos : "estado_prospecto_id"
cat_estados_visita ||--o{ trx_visitas : "estado_visita_id"
cat_tipos_actividad ||--o{ trx_visitas : "tipo_actividad_id"
cat_encuesta_preguntas ||--o{ cat_encuesta_opciones : "pregunta_id"
cat_encuesta_preguntas ||--o{ trx_encuestas_cliente_detalle : "pregunta_id"
cat_encuesta_opciones ||--o{ trx_encuestas_cliente_detalle : "opcion_id"
cat_unidades_comerciales ||--o{ rel_unidades_comerciales_sucursales : "unidad_comercial_id"
%% ESQUEMA fuerza_ventas - Catálogos
cat_modalidades_pago_comision ||--o{ mae_promotores : "modalidad_pago_comision_id"
cat_estados_cobro ||--o{ trx_avisos_cobro : "estado_cobro_id"
cat_tipos_requerimiento_visita ||--o{ trx_visitas_requerimientos : "tipo_requerimiento_id"
%% ESQUEMA clientes - Maestros
mae_prospectos ||--o{ mae_clientes : "prospecto_id"
mae_clientes ||--o{ mae_documentos_cliente : "cliente_id"
mae_clientes ||--o{ mae_locales_cliente : "cliente_id"
mae_clientes ||--o{ mae_equipos_consignacion : "cliente_id"
mae_clientes ||--o{ mae_presupuestos_cliente : "cliente_id"
mae_clientes ||--o{ trx_visitas : "cliente_id"
mae_clientes ||--o{ trx_encuestas_cliente : "cliente_id"
mae_clientes ||--o{ trx_avisos_cobro : "cliente_id"
mae_clientes ||--o{ rel_clientes_promotores : "cliente_id"
mae_clientes ||--o{ rel_clientes_contactos : "cliente_id"
mae_contactos_cliente ||--o{ rel_clientes_contactos : "contacto_id"
mae_clientes ||--o{ log_cambios_cliente : "cliente_id"
mae_locales_cliente ||--o{ mae_equipos_consignacion : "local_id"
mae_locales_cliente ||--o{ trx_visitas : "local_id"
mae_prospectos ||--o{ trx_visitas : "prospecto_id"
mae_prospectos ||--o{ trx_encuestas_cliente : "prospecto_id"
%% ESQUEMA fuerza_ventas - Maestros
mae_promotores ||--o{ mae_prospectos : "promotor_captador_id"
mae_promotores ||--o{ mae_agencias : "supervisor_responsable_id"
mae_promotores ||--o{ mae_equipos_consignacion : "promotor_id"
mae_promotores ||--o{ mae_metas_promotores : "promotor_id"
mae_promotores ||--o{ mae_presupuestos_cliente : "promotor_id"
mae_promotores ||--o{ trx_visitas : "promotor_id"
mae_promotores ||--o{ trx_encuestas_cliente : "promotor_id"
mae_promotores ||--o{ trx_avisos_cobro : "promotor_id"
mae_promotores ||--o{ rel_promotores_supervisores : "promotor_id / supervisor_id"
mae_promotores ||--o{ rel_promotores_sucursales : "promotor_id"
mae_promotores ||--o{ rel_promotores_paises : "promotor_id"
mae_promotores ||--o{ rel_clientes_promotores : "promotor_id"
mae_promotores ||--o{ rel_promotores_agencias : "promotor_id"
mae_promotores ||--o{ log_ubicaciones_promotores : "promotor_id"
mae_promotores ||--o{ log_cambios_cliente : "promotor_id"
mae_agencias ||--o{ rel_agencias_sucursales : "agencia_id"
mae_agencias ||--o{ rel_promotores_agencias : "agencia_id"
%% Transaccionales CRM
trx_visitas ||--o{ trx_visitas_requerimientos : "visita_id"
trx_visitas ||--o{ trx_visitas_documentos : "visita_id"
trx_visitas ||--o{ trx_encuestas_cliente : "visita_id"
trx_encuestas_cliente ||--o{ trx_encuestas_cliente_detalle : "encuesta_id"
trx_avisos_cobro ||--o{ trx_avisos_cobro_detalle : "aviso_cobro_id"
2.3 Base de Datos erp (svc-pedidos & svc-contable)¶
erDiagram
%% ESQUEMA pedidos
trx_pedidos ||--o{ trx_pedidos_detalle : "pedido_id"
trx_pedidos ||--o{ trx_pedidos_planificaciones : "pedido_id"
trx_pedidos_detalle ||--o{ trx_pedidos_planificaciones : "pedido_detalle_id"
%% ESQUEMA contable
cat_metodos_pago ||--o{ trx_cobros_campo : "metodo_pago_id"
cat_bancos ||--o{ trx_cobros_campo : "banco_id"
cat_estados_cobro ||--o{ trx_cobros_campo : "estado_cobro_id"
trx_cobros_campo ||--o{ trx_cobros_campo_imputaciones : "cobro_campo_id"