Modelo de datos TRIVASADB

Resumen del esquema del ERP MPRO/ERIX que corre Trivasa. El dump completo (todas las tablas por dominio, con PK/FK/columnas) vive en docs/trivasadb_context.md en la raíz del repo trivasa-bi-dev — esta página es la versión condensada, orientada a orientarse rápido, no un reemplazo del dump.

Convenciones

  • Filtro obligatorio de negocio: casi toda consulta debe incluir Em_Cve_Empresa o Sc_Cve_Sucursal según el dominio.
  • Nombres de columna Xx_Cve_Tabla son FK a la tabla Tabla (mismo nombre de columna en ambos lados).
  • Estado activo vía Es_Cve_Estado — la convención general es 'ACTI', pero no es universal: Consumo_Interno usa 'AC'/'CA' en vez de 'ACTI'. Validar siempre con SELECT Es_Cve_Estado, COUNT(*) FROM <tabla> GROUP BY Es_Cve_Estado antes de asumir el valor.
  • Columnas de auditoría presentes en casi todas las tablas, no son de negocio: Oper_Alta/Fecha_Alta, Oper_Ult_Modif/Fecha_Ult_Modif, Oper_Baja/Fecha_Baja, Es_Cve_Estado.
  • Conteos de filas en el dump son un snapshot sin fecha registrada — no confiar en ellos como tamaño actual. Para tamaño vigente de lo ya replicado a Postgres, ver Warehouse Postgres.
  • 1,609 tablas vacías — módulos no usados por Trivasa (clínica, hotel, Rappi, Shopify, etc.). Ignorar en cualquier análisis.

Tablas más grandes (top 10 de ~50 documentadas)

TablaFilas (snapshot)
Poliza_Detalle14.1M
Poliza_Control6.1M
Pre_Nomina4.6M
Movimiento4.4M
Precio_Minimo2.8M
Poliza_Detalle_Comprobante2.8M
Entrega_Documento2.7M
opc_MOVIMIENTO2.4M
Gasto_Registro_Control2.2M
Nomina1.8M

Dominios cubiertos en el dump completo

VENTAS (Venta, Remision, Pedido, Factura, Cotizacion), CXC (Cuenta_X_Cobrar, Pago_CXC, Anticipo_Cxc, Recibo_Pago), CXP (Cuenta_X_Pagar, Pago_CXP, Gasto_Registro y su cadena de control/documento), COMPRAS (Compra, Compra_Encabezado, Orden_Compra, Comprobante_Digital), INVENTARIO (Movimiento, Traspaso, Transferencia, Consumo_Interno, Existencia, Producto), LOGISTICA (Viaje, Orden_Entrega, Complemento_Carta_Porte y sus 4 tablas satélite del CFDI de carta porte), PRODUCCION (Orden_Produccion y materiales), CONTABILIDAD (Poliza, Poliza_Control, Poliza_Detalle, Poliza_Detalle_Comprobante, Banco_Movimiento), NOMINA (Nomina, Pre_Nomina, Control_Asistencia), CATALOGOS (Cliente, Proveedor, Empleado, Producto), SERVICIOS (Orden_Servicio).

Detalle exacto de PK/FK/columnas por tabla: docs/trivasadb_context.md en el repo.

Cadena Gastos → Contabilidad (la más recorrida por los reportes de BI)

Gasto_Registro (folio) → Gasto_Registro_Documento (Grd_ID, moneda original, no MXN) → Gasto_Registro_Control (Grc_ID — no identifica un documento, identifica una sub-línea dentro del mismo documento+centro de costo, hay que colapsar antes de usarlo) → Poliza_Control/Poliza/Poliza_Detalle (Pd_Referencia solo llega a nivel folio, nunca a Grd_ID). Este hallazgo se repite en varios reportes — ver Layout de Gastos — modelo de datos para el recorrido más exhaustivo, incluida la confirmación de que Poliza_Detalle_Comprobante liga UUIDs de complemento de pago, no el CFDI original de registro, y por eso no sirve para atribución Cargo/Abono.

Gotchas de calidad de dato

  • Reorden: PK compuesta de 6 columnas (sc_cve_sucursal, al_cve_almacen, re_tipo, re_tipo_valor, re_talla, re_color) confirmada sin colisiones, pero algunos productos traen registros duplicados — una fila con talla/color vacíos y otra con '00'/'00'. Es dato sucio real del ERP, no error de carga; la normalización se maneja en dbt/consumo, no en el origen.
  • Consumo_Interno: Es_Cve_Estado usa 'AC'/'CA' (no 'ACTI'); mismo patrón dirty de talla/color '00'/'00' que Reorden.
  • Comprobante_Digital: Fecha_Ult_Modif confirmado idéntico a Fecha_Alta en muestreo — el registro se crea ya con el UUID timbrado y nunca se actualiza después. Válido como cursor de incrementalidad para esta tabla en particular; no asumir que aplica igual en otras donde Fecha_Ult_Modif sí cambia post-creación.

Joins frecuentes

-- Ventas con cliente y sucursal
SELECT ve.*, cl.Cl_Nombre, sc.Sc_Nombre
FROM Venta_Encabezado ve
JOIN Cliente cl ON ve.Cl_Cve_Cliente = cl.Cl_Cve_Cliente
JOIN Sucursal sc ON ve.Sc_Cve_Sucursal = sc.Sc_Cve_Sucursal
WHERE ve.Es_Cve_Estado = 'ACTI'
 
-- CXP con proveedor
SELECT cxp.*, pv.Pv_Nombre
FROM Cuenta_X_Pagar cxp
JOIN Proveedor pv ON cxp.Pv_Cve_Proveedor = pv.Pv_Cve_Proveedor
WHERE cxp.Es_Cve_Estado = 'ACTI'

Véase también