Products (Commerce)
Vista extendida del Catálogo unificado. Aquí gestionas productos físicos con inventario, mano de obra, ítems digitales y bundles (paquetes). Forma parte del addon Commerce.
Cómo usarlo
- Nuevo ítem — define tipo (physical, labor, digital, bundle), nombre, precio, SKU y stock inicial (si aplica).
- Filtrar por tipo — usa los tabs/filtros para ver solo productos físicos, servicios, bundles, etc.
- Bundle Editor — abre desde un ítem
kind=bundlepara definir sus componentes y cantidades. - Inventario — desde un producto físico, ve movimientos históricos (compras, ventas, ajustes).
Tipos (kind)
- physical — descuenta stock al venderse en POS u Orders.
- labor — mano de obra para órdenes de taller (no descuenta stock).
- digital — entregable sin inventario.
- service — servicio facturable (también visible desde el módulo Servicios).
- bundle — paquete; se descompone automáticamente en sus componentes al vender.
Campos importantes
- SKU — código único del producto (opcional pero recomendado para inventario).
- Stock — cantidad disponible. Se actualiza vía
inventory_movements(ventas, compras, ajustes). - Precio — en DOP. Sin ITBIS.
- Tipo (
kind) — define cómo se comporta al venderse (ver arriba).
Variantes (desde 2026-04-21)
Un producto físico puede tener variantes: ejes configurables (talla, color, material, sabor…) donde cada combinación es una fila vendible con su propio SKU, precio, costo y stock.
Casos típicos:
- Calzado → Talla × Color
- Ropa → Talla × Color × Material
- Pintura → Color × Tamaño (1gal / 5gal)
- Tornillos (ferretería) → Diámetro × Largo
Casos que NO son variantes (son productos separados):
- Farmacia: Paracetamol 500mg vs 1g (cada uno con registro sanitario propio → productos distintos)
- Cable por metro (es unidad de medida, no variante — abre modal de metros en POS)
Cómo configurar
- Crea el producto padre (
kind=physical) con categoría, impuesto y precio base. - Guárdalo.
- Abre la sección Variantes en el form y pulsa Configurar variantes.
- En el editor:
- Agrega atributos (talla, color…) de tu registro de tenant, o crea uno nuevo inline.
- Por atributo, agrega valores (chips:
S, M, L, XL/Rojo, Azul, Negro). - Define plantilla SKU opcional:
TEN-{talla}-{color}→ se expande aTEN-M-Rojopor variante. - La matriz se genera automáticamente; edita SKU, precio, costo y stock inicial por fila.
- Desmarca combinaciones que no aplican.
- Guarda. El sistema:
- Actualiza el
variant_schemaysku_patterndel padre. - Inserta variantes nuevas (como filas hijas con
parent_id= padre). - Actualiza variantes existentes si editaste sus valores.
- Desactiva (
active=false) variantes que ya no aparecen en la matriz. - Crea movimientos
initialeninventory_movementspara el stock inicial de cada variante nueva.
Herencia padre → variante
- Copia al crear: categoría, impuesto, unidad, track_inventory.
- Dinámica en read-time: imágenes (variante sin foto hereda las del padre).
- Propias de cada variante: SKU, barcode,
unit_price,cost_price, stock.
Si cambias el impuesto del padre después de crear variantes, las variantes no se actualizan automáticamente. Edítalas manualmente o elimínalas y regenéralas.
En el POS
- Variante con SKU/barcode escaneado → directo al carrito (salta cualquier modal).
- Tap en tarjeta del padre → se abrirá modal de selección talla/color (próxima fase).
- Padres no se venden directos: el padre está excluido de la búsqueda por SKU y del grid de POS por defecto.
En facturas / e-CF
La línea referencia el id de la variante (no del padre). El nombre auto-compone "Producto — Talla: M, Color: Rojo". El snapshot DGII captura el SKU y nombre de la variante al postear.
Restricciones
- Solo productos
kind=physicalpueden tener variantes. - No hay anidamiento: una variante no puede tener sus propias variantes.
- Cada combinación de atributos es única por padre (la DB lo fuerza).
Cómo funcionan los bundles
Vende un bundle en POS u Orders y el trigger trg_order_completed:
- Inserta movimientos de venta (
inventory_movements) por cada componente físico. - Registra ejecuciones (
service_executions) por cada componente de servicio.
Los componentes y cantidades se editan en Bundle Editor.
Permisos
- commerce:view — ver Products, Inventory, Orders.
- commerce:create / edit — crear y modificar ítems.
Preguntas frecuentes
¿Diferencia entre Products y Servicios?
Es la misma tabla (catalog_items). Servicios filtra a kind=service; Products muestra todo. Con Commerce activo, Servicios se oculta por defecto.
¿Si cambio un precio aquí, se actualiza en facturas?
En facturas/cotizaciones nuevas, sí (se refresca al abrir el form). Las facturas existentes conservan el precio histórico de la línea.