Esquema completo, módulos, flujo de cotización y arquitectura de datos para construir un agente cotizador con IA.
PostgreSQL 16.13 · Django Backend
~110 tablas · Multi-empresa
Preparado para: Felipe
Marzo 2026
| ID | Nombre | Ciudad | País | Moneda |
|---|---|---|---|---|
| 1 | IprintPOS | Dallas, Texas | USA | USD |
| 2 | Area 862 | Ciudad 862 | USA | Moneda 5 |
| 3 | Empresa ABC | Ciudad EmpresaABC | USA | USD |
| 4 | Empresa A | Ciudad Empresa A | USA | USD |
| 7–9 | Empresa 3, 4, 5 | Varias | USA | USD |
Nota: Los datos actuales son mayormente de prueba/demo (~8 clientes, ~40 productos). La estructura está lista para producción con datos reales.
El sistema se organiza en módulos Django independientes. Cada prefijo de tabla corresponde a un módulo.
La tabla product_product es el corazón del catálogo. Cada producto define cómo se calcula su precio.
Precio fijo simple. Se multiplica por cantidad. Ejemplo: "Producto 1" → $9.00
Calculado con fórmula matemática usando dimensiones. Ejemplo: Vinyl → precio × (ancho × alto)
Tabla de precios por rangos (cantidad vs tamaño). Ejemplo: Tarjetas de presentación
Las fórmulas se almacenan como array de tokens PostgreSQL: varchar(30)[]. Variables: var_1=precio, var_2=ancho, var_3=alto, var_4=horas, var_5=minutos, var_6=separación, var_7-9=variantes.
Para productos tipo matrix, los precios se organizan en tablas bidimensionales (ej: cantidad × tamaño).
• Vinculada al producto vía product_id
• matrix_type: tipo de datos
• rows_title[]: títulos de filas (array PG)
• deep: profundidad de la matriz
• Opcionalmente por nivel y detalle
• row_name: nombre de la fila
• col_title[]: encabezados columna
• values[]: array numérico de precios
• item_value: datos extra (jsonb)
• matrix_id: FK a la matriz padre
El nivel del cliente determina qué precio se usa de product_productprices.
• name, code — Producto en la orden
• price, quantity, subtotal, total, tax
• dimensions — jsonb con medidas
• quoteSelect — opción de cotización
• status_id — FK → orderstatus
• product_id — FK → producto
• price — Precio del proceso
• priceString — Expresión legible
• dimensions — jsonb con medidas
• detail_id — FK → productiondetails
• subdetail_id — FK → subdetails
• subOrder_id — FK → orderproduct
• code — Número de cotización
• products — jsonb con snapshot
• state — Estado actual
• order_id — FK → orden asociada
• customer_id, salesman_id
• date, mail_date
• supplier_supplier — nombre, email, teléfono, tax, activo
• supplier_supplieraddress — direcciones
• supplier_suppliercontact — contactos
• supplier_suppliercredit — límite de crédito + plazo
• globaltax — Impuestos por empresa (nombre + %)
• level — Niveles de precio
• term — Plazos de crédito (días)
• soldby — Unidades: Box, ft, in, m, cm, mm, Unit
• origins — Origen de clientes
• productiondepartment — Deptos + equipo
El flujo que debe replicar el agente cotizador, mapeado a las tablas de la DB.
Buscar por nombre/teléfono/email. Obtener su level_id (Mayoreo/Menudeo) y si tax=true. Si es nuevo, crear registro.
Buscar en catálogo activo. Identificar price_type (base/formula/matrix) y can_be=SALE.
base → Buscar precio en productprices por level_id del cliente
formula → Pedir dimensiones, evaluar fórmula con precio del nivel
matrix → Pedir cantidad/tamaño, buscar en matrixvalue el rango correcto
Preproducción (Diseño), Producción (Colores, Coating), Postproducción (Entrega), Extras (Montaje). Cada uno suma costo.
subtotal = (precio_base × cantidad) + procesos + extras
tax = subtotal × % impuesto (si cliente.tax AND producto.tax)
total = subtotal + tax − descuento + envío
Crear registro con snapshot de productos (jsonb), vincular a orden, asignar código secuencial.
1. ¿Quién eres? (cliente)
2. ¿Qué producto necesitas?
3. ¿Dimensiones? (ancho × alto)
4. ¿Cantidad?
5. ¿Qué acabados? (procesos)
6. ¿Necesitas envío?
Esquema completo, módulos, flujo de cotización y arquitectura de datos para construir un agente cotizador con IA.
PostgreSQL 16.13 · Django Backend
~110 tablas · Multi-empresa
Preparado para: Felipe
Marzo 2026
| ID | Nombre | Ciudad | País | Moneda |
|---|---|---|---|---|
| 1 | IprintPOS | Dallas, Texas | USA | USD |
| 2 | Area 862 | Ciudad 862 | USA | Moneda 5 |
| 3 | Empresa ABC | Ciudad EmpresaABC | USA | USD |
| 4 | Empresa A | Ciudad Empresa A | USA | USD |
| 7–9 | Empresa 3, 4, 5 | Varias | USA | USD |
Nota: Los datos actuales son mayormente de prueba/demo (~8 clientes, ~40 productos). La estructura está lista para producción con datos reales.
El sistema se organiza en módulos Django independientes. Cada prefijo de tabla corresponde a un módulo.
La tabla product_product es el corazón del catálogo. Cada producto define cómo se calcula su precio.
Precio fijo simple. Se multiplica por cantidad. Ejemplo: "Producto 1" → $9.00
Calculado con fórmula matemática usando dimensiones. Ejemplo: Vinyl → precio × (ancho × alto)
Tabla de precios por rangos (cantidad vs tamaño). Ejemplo: Tarjetas de presentación
Las fórmulas se almacenan como array de tokens PostgreSQL: varchar(30)[]. Variables: var_1=precio, var_2=ancho, var_3=alto, var_4=horas, var_5=minutos, var_6=separación, var_7-9=variantes.
Para productos tipo matrix, los precios se organizan en tablas bidimensionales (ej: cantidad × tamaño).
• Vinculada al producto vía product_id
• matrix_type: tipo de datos
• rows_title[]: títulos de filas (array PG)
• deep: profundidad de la matriz
• Opcionalmente por nivel y detalle
• row_name: nombre de la fila
• col_title[]: encabezados columna
• values[]: array numérico de precios
• item_value: datos extra (jsonb)
• matrix_id: FK a la matriz padre
El nivel del cliente determina qué precio se usa de product_productprices.
• name, code — Producto en la orden
• price, quantity, subtotal, total, tax
• dimensions — jsonb con medidas
• quoteSelect — opción de cotización
• status_id — FK → orderstatus
• product_id — FK → producto
• price — Precio del proceso
• priceString — Expresión legible
• dimensions — jsonb con medidas
• detail_id — FK → productiondetails
• subdetail_id — FK → subdetails
• subOrder_id — FK → orderproduct
• code — Número de cotización
• products — jsonb con snapshot
• state — Estado actual
• order_id — FK → orden asociada
• customer_id, salesman_id
• date, mail_date
• supplier_supplier — nombre, email, teléfono, tax, activo
• supplier_supplieraddress — direcciones
• supplier_suppliercontact — contactos
• supplier_suppliercredit — límite de crédito + plazo
• globaltax — Impuestos por empresa (nombre + %)
• level — Niveles de precio
• term — Plazos de crédito (días)
• soldby — Unidades: Box, ft, in, m, cm, mm, Unit
• origins — Origen de clientes
• productiondepartment — Deptos + equipo
El flujo que debe replicar el agente cotizador, mapeado a las tablas de la DB.
Buscar por nombre/teléfono/email. Obtener su level_id (Mayoreo/Menudeo) y si tax=true. Si es nuevo, crear registro.
Buscar en catálogo activo. Identificar price_type (base/formula/matrix) y can_be=SALE.
base → Buscar precio en productprices por level_id del cliente
formula → Pedir dimensiones, evaluar fórmula con precio del nivel
matrix → Pedir cantidad/tamaño, buscar en matrixvalue el rango correcto
Preproducción (Diseño), Producción (Colores, Coating), Postproducción (Entrega), Extras (Montaje). Cada uno suma costo.
subtotal = (precio_base × cantidad) + procesos + extras
tax = subtotal × % impuesto (si cliente.tax AND producto.tax)
total = subtotal + tax − descuento + envío
Crear registro con snapshot de productos (jsonb), vincular a orden, asignar código secuencial.
1. ¿Quién eres? (cliente)
2. ¿Qué producto necesitas?
3. ¿Dimensiones? (ancho × alto)
4. ¿Cantidad?
5. ¿Qué acabados? (procesos)
6. ¿Necesitas envío?