Ir al contenido

Crear Producto/Servicio

Registra un nuevo producto físico o servicio en tu catálogo con precios, impuestos y control de stock.

  1. Clic en ”+ Nuevo Producto” (botón superior derecha) — se abre el Sheet de formulario.
  2. Completa la pestaña “General” con datos obligatorios (ver tabla abajo).
  3. Completa la pestaña “Precios” con precio unitario y tasa de IVA.
  4. (Opcional - Solo productos físicos) Pestaña “Stock” — configura niveles de inventario.
  5. Clic en “Guardar” — producto creado.
CampoReglaDescripciónEjemplo
NombreNombre descriptivo del productoCamiseta Básica Algodón
TipoProducto (físico) o ServicioProducto
UnidadUnidad de medidaund, kg, m, hora
CampoDescripciónEjemplo
DescripciónDescripción detallada del productoCamiseta 100% algodón, cuello redondo
SKUCódigo único de productoCAM-BAS-001
CategoríaCategoría del productoRopa
EstadoActivo/InactivoActivo
CampoReglaDescripciónEjemplo
Precio UnitarioPrecio de venta sin IVA15.00 €
Tasa de IVAPorcentaje de IVA aplicable21%
CampoDescripciónEjemplo
Precio de CostePrecio de compra o fabricación8.50 €

Campos opcionales — Pestaña Stock (solo productos físicos)

Sección titulada «Campos opcionales — Pestaña Stock (solo productos físicos)»
CampoDescripciónValor por defecto
Seguir inventarioActivar control de stockNo
Stock actualCantidad disponible0
Stock mínimoNivel de alerta0
Stock máximoCapacidad máxima0
Punto de reposiciónNivel que dispara reorden0
  • El producto aparece en la lista principal con estado Activo.
  • Toast de confirmación: “Producto creado correctamente”.
  • Puedes buscar el producto por nombre o SKU.
MensajeCausaSolución
”El nombre es requerido”Campo vacíoIntroduce nombre del producto
”El precio debe ser mayor o igual a 0”Precio negativoIntroduce precio válido ≥ 0
”El IVA debe ser mayor o igual a 0”IVA negativoIntroduce tasa de IVA válida (0-100)
“El IVA no puede exceder 100%“IVA > 100Reduce la tasa de IVA
”SKU duplicado”SKU ya existe en el negocioCambia el código SKU por uno único
🔧 Detalles Técnicos — Crear Producto/Servicio

Validaciones:

CódigoRegla
VAL-01name NOT NULL, min 1 char, max 200 chars
VAL-02product_type IN (‘product’, ‘service’)
VAL-03unit_price >= 0, max 999999.99
VAL-04cost_price >= 0, max 999999.99 (opcional)
VAL-05tax_rate >= 0, max 100
VAL-06description max 1000 chars (opcional)
VAL-07sku max 50 chars, único por business_id (opcional)
VAL-08unit max 20 chars (opcional)
VAL-09category max 100 chars (opcional)
VAL-10current_stock >= 0, max 999999 (opcional)
VAL-11minimum_stock >= 0, max 999999 (opcional)
VAL-12maximum_stock >= 0, max 999999 (opcional)
VAL-13reorder_point >= 0, max 999999 (opcional)

Tablas involucradas:

TablaColumnas claveFK
productsid, business_id, name, description, sku, product_type, unit_price, cost_price, tax_rate, unit, category, is_active, track_stock, stock_quantity, min_stock_level, max_stock_level, reorder_pointbusinesses

Schema Zod:

  • Ubicación: /src/schemas/validation.ts (líneas 98-149)
  • productSchema — Validación completa de productos

Componente:

  • Formulario: ProductFormSheet.tsx
  • Usa FormSheet como template estándar
  • 3 pestañas: General, Precios, Stock (condicional)

Adapter:

  • Archivo: /src/features/products/api/product-adapter.ts
  • Método: create(data: ProductCreateData): Promise<Product>
  • Transforma datos del formulario a formato de BD mediante formDataToProductCreate()

Eventos:

  • productCreatedEvent — Publicado tras inserción exitosa
  • Payload: { productId, productName, sku }

Queries de diagnóstico:

-- Producto recién creado
SELECT * FROM products
WHERE business_id = '<business_id>'
ORDER BY created_at DESC LIMIT 1;
-- Verificar duplicados por SKU
SELECT id, name, sku, product_type
FROM products
WHERE business_id = '<business_id>'
AND sku = '<sku>';