🏪 Sistema de Compras · Back of House

Journey completo del proceso de requisición → stock → comparación de precios → pedido final. 4 etapas, 4 pantallas principales.

Módulo de Compras · Arquitectura v1.0
1 Requisición Interna
2 Verificación de Stock
3 Comparación de Precios
4 Pedido Final
Etapa 01 · Solicitud
Requisición Interna
Cada área del restaurante genera un pedido de insumos hacia almacén/compras. El sistema reemplaza los cuadernos, los mensajes de WhatsApp y los Google Forms, manteniendo todo trazado y con usuario propio.
Actores involucrados
🍳
Jefe de Cocina
Solicita insumos de cocina caliente/fría
🍸
Jefe de Bar
Solicita bebidas, licores, insumos bar
🪑
Capitán de Sala
Artículos de servicio, limpieza, menaje
💼
Administración
Útiles de oficina, insumos generales
Datos que genera
Output de esta etapa
Área solicitante
Lista de ítems + cantidades
Nivel de urgencia
Fecha/hora de solicitud
Usuario que solicitó
Notas adicionales
Login por área: Cada área tiene un usuario simple (ej: cocina / pin4). Sin contraseñas complejas. Acceso por QR en la pared del área → abre directo el formulario.
Pantallas de requisición Vista del jefe de área
restaurante.pe / login-area
🍳
Cocina
Solicitud de insumos
PIN del área
● ● ● ●
📱 Escanea el QR en tu área para acceder directo
Nueva Requisición · Cocina
Urgencia
Ítems solicitados
Aceite de oliva
5 L 🗑️
Harina sin preparar
10 kg 🗑️
+ Agregar ítem...
Nota para almacén
Para el servicio de mañana 8am
Catálogo rápido · Cocina
Ítems frecuentes del área
Toca un ítem para agregarlo a la solicitud →
Mis solicitudes recientes
Solicitud #47
Hoy 09:15 · 5 ítems
Aprobada
Solicitud #46
Ayer 16:30 · 3 ítems
Entregada
Solicitud #45
Lun 11:00 · 8 ítems
En proceso
⚙️ Implementación técnica · Etapa 1
Auth por área
Supabase Auth con roles personalizados. PIN de 4 dígitos por área. QR genera URL con área pre-seleccionada (?area=cocina)
Catálogo rápido
tabla area_catalog_items — ítems frecuentes por área, configurable por el admin del restaurante
Notificación
Al enviar → Supabase Realtime notifica al dashboard de almacén instantáneamente + WhatsApp al encargado de compras
Estado tracking
requisition_status: pending → reviewed → approved → ordered → delivered
Etapa 02 · Almacén
Verificación de Stock
El área de almacén/compras recibe la requisición y la cruza contra el inventario actual. Ítems disponibles se despachan internamente. Los que no hay → pasan a compras externas.
Actor principal
📦
Almacenero / Jefe de Compras
Revisa stock, aprueba, despacha o compra
Lógica de decisión
📋 Llega requisición del área
🔍 Sistema cruza contra stock actual
✅ Hay stock
Despachar a área solicitante → marcar como entregado
❌ Stock insuficiente
Pasar a Etapa 3: Comparación de precios
Auto-cruce: Si el inventario está actualizado (food cost activo), el sistema marca automáticamente qué ítems hay y cuáles no, sin que el almacenero tenga que buscar uno por uno.
Panel de Almacén / Compras Vista del encargado
Bandeja de Solicitudes
Cocina · #47
Hace 3 min · 5 ítems
🔴 Urgente
Bar · #46
Hace 1h · 3 ítems
Normal
Sala · #45
Hace 2h · 2 ítems
Normal
Cocina #47 — Cruce de stock
Aceite de oliva · 5L ✓ Stock: 8L
Harina sin prep. · 10kg ⚠ Stock: 2kg
Mantequilla · 2kg ✗ Stock: 0
Limones · 30 un ✓ Stock: 50
Inventario Almacén
Aceite de oliva
8L
Harina sin preparar
2kg ⚠
Mantequilla
0 ✗
Limones
50 un
Resumen hoy
Solicitudes recibidas 8
Atendidas con stock 5
Necesitan compra 3
Urgentes pendientes 1
📊 Alertas automáticas activadas para stock crítico
⚙️ Implementación técnica · Etapa 2
Auto-cruce
JOIN entre requisition_items y ingredients (stock_current). Retorna status: "available" | "partial" | "out_of_stock" por ítem
Stock mínimo
Cada ingrediente tiene min_stock. Si stock_current < min_stock → alerta automática + WhatsApp al encargado
Despacho interno
Al marcar "despachar" → crea stock_movement tipo "internal_dispatch" → resta del inventario → marca ítem de requisición como "fulfilled"
Realtime
Supabase Realtime: el panel de almacén se actualiza automáticamente al llegar nuevas solicitudes, sin refrescar la página
Etapa 03 · Compras
Comparación de Precios
La misma tecnología de Cocina Semanal aplicada al abastecimiento profesional. Compara precios en tiempo real entre supermercados (VTEX) y los proveedores habituales del restaurante. Elige por ítem, no por proveedor.
Fuentes de precios
🛒
Wong / Metro / Plaza Vea
API VTEX — precios en tiempo real
🏭
Makro / Costco
API VTEX o scraping periódico
🚚
Proveedores propios
Lista de precios manual, actualizada por el restaurante
Lógica de comparación
Cómo funciona el matching
Ítem genérico "Harina 1kg" → busca en catálogos
Fuzzy matching por nombre/categoría
Normaliza precios por unidad comparable
Marca el precio más bajo
Permite split: ítem A de Wong, ítem B del proveedor
Diferencial clave: Los supermercados → VTEX API en tiempo real. Los proveedores propios → lista de precios que el restaurante actualiza manualmente (o que el proveedor actualiza vía link especial).
Comparador de Precios Vista del encargado de compras
Comparación de precios — Lista de compra
3 ítems a comprar · Cocina #47 + Bar #46 consolidado
Ítem Cant. 🟡 Wong 🔵 Metro 🔴 Plaza Vea 🏭 Proveedor ABC Mejor opción
Harina sin prep. 8 kg S/4.90/kg S/5.10/kg S/5.50/kg S/4.20/kg ★ Proveedor ABC
Mantequilla 2 kg S/12.90/kg ★ S/13.50/kg S/13.20/kg S/15.00/kg Wong
Ron oscuro 2 bot. S/38.90 S/42.00 S/39.50 S/35.00 ★ Proveedor ABC
Total estimado comprando al mejor precio: S/142.60 vs S/168.40 al precio más alto
Ahorro: S/25.80 (15.3%)
Precios de Proveedores Propios
Lista actualizable manualmente · Último update: hace 2 días
Proveedor ABC — Distribuidora Central
📞 987-654-321 · WhatsApp activo
Makro Mayorista
🌐 Precios via scraping · Auto
+ Agregar nuevo proveedor
⚙️ Implementación técnica · Etapa 3
VTEX API
Wong/Metro/Plaza Vea — mismo endpoint que Cocina Semanal. GET /api/catalog_system/pub/products/search?fq=productName:{query}
Fuzzy matching
Ítem genérico → catálogo VTEX con Levenshtein distance o embeddings semánticos (Claude API). "Harina sin preparar" → "Harina Blanca Nicolini 1kg"
Proveedores propios
tabla suppliers + supplier_prices. El encargado actualiza precios o puede invitar al proveedor a actualizar via link especial
Caché de precios
Precios VTEX cacheados 6h en Supabase. Para compras urgentes → fetch en tiempo real. Para planificación → cache suficiente
Etapa 04 · Ejecución
Pedido Final
Con la lista optimizada y los proveedores elegidos, el sistema ejecuta el pedido por el canal más apropiado: carrito directo en el supermercado, PDF profesional por email, o mensaje de WhatsApp al proveedor habitual.
Canales de salida
🛒
Carrito VTEX directo
Wong / Metro / Plaza Vea → abre carrito pre-llenado
📄
Orden de compra PDF
Documento profesional para enviar a proveedor
📱
WhatsApp Business
Mensaje con lista formateada + PDF adjunto
✉️
Email
Correo con PDF de orden de compra
Split inteligente: Si la mejor opción es Wong para 2 ítems y el Proveedor ABC para 3, el sistema genera automáticamente 2 pedidos separados — uno con el carrito VTEX y otro como PDF/WhatsApp al proveedor.
Post-pedido
Trazabilidad completa
Pedido marcado como "enviado" con timestamp
Encargado confirma recepción en almacén
Stock se actualiza automáticamente
Requisición original marcada como "atendida"
Área solicitante recibe notificación de llegada
Ejecución del Pedido Vista del encargado de compras
Resumen del pedido
Pedido dividido en 2 destinos
🟡 Wong · S/25.80
Mantequilla 2kgS/25.80
🚚 Proveedor ABC · S/116.80
Harina 8kgS/33.60
Ron oscuro x2S/70.00
Total: S/142.60
Ejecutar pedido
Elige cómo enviar cada pedido:
🟡 Wong (Mantequilla)
🚚 Proveedor ABC
Preview — Orden de Compra PDF
Jr. Las Flores 245, Miraflores · Lima
ORDEN DE COMPRA #OC-2024-047
Fecha: 12 Mayo 2024
Válida hasta: 14 Mayo 2024
PARA:
Distribuidora ABC SAC
RUC: 20512345678 · Contacto: Sr. Ramírez · 987-654-321
#ProductoUnidadCantidadP. Unit.Total
1Harina sin preparar Blanca Florkg8S/4.20S/33.60
2Ron oscuro Cartaviobot. 750ml2S/35.00S/70.00
Subtotal:S/103.60
IGV (18%):S/13.20
TOTAL:S/116.80
Autorizado por: Administración · Entrega requerida: 13 Mayo 2024 antes de las 8:00am · Favor confirmar recepción de este pedido.
⚙️ Implementación técnica · Etapa 4
Carrito VTEX
Igual que Cocina Semanal: construir URL con orderForm API o link de búsqueda. Wong: /checkout/?orderFormId=.... Metro similar.
PDF Generation
jsPDF (cliente) o Puppeteer en Edge Function (server). Template HTML → PDF con logo, datos del restaurante, tabla de ítems, firmas.
WhatsApp API
Meta WhatsApp Business API → mensaje template con lista de ítems + PDF como documento adjunto al número del proveedor guardado
Email
Resend (email API) → PDF adjunto + cuerpo HTML profesional → al email del proveedor registrado en la plataforma
Trazabilidad
tabla purchase_orders → status: draft | sent | confirmed | received. Al confirmar recepción → actualiza stock automáticamente
🗄️ Modelo de datos — Módulo de Compras

Las tablas nuevas que este módulo añade a la base de datos existente del sistema.

requisitions
id uuid
restaurant_id fk
area enum
requested_by fk users
urgency enum
status enum
notes text
created_at ts
requisition_items
id uuid
requisition_id fk
ingredient_id fk
qty_requested decimal
qty_fulfilled decimal
status enum
fulfillment_type enum
suppliers
id uuid
restaurant_id fk
name text
type enum
whatsapp text
email text
ruc text
is_active bool
purchase_orders
id uuid
restaurant_id fk
supplier_id fk
total_amount decimal
status enum
sent_via enum
sent_at ts
received_at ts