Ingresar

Volver al inicio

Flujo de Stock en Bakerfy

Ciclo de vida del inventario vendible: desde la producción en cocina hasta la venta en POS, con lógica de la aplicación.

Resumen

Bakerfy maneja stock de productos terminados y, aparte, lotes de insumos/subproductos:

  • Producto no expirable: stock del mismo día (recibido − ventas − cortesía − merma).
  • Producto expirable: lotes por día de producción, acumulados hasta vencer; el POS suma lotes vigentes.
  • Insumo / subproducto con vida útil: lotes desde la recepción o elaboración; vencen a los N días. Vacío = no vence.
  • Insumo en vitrina: se vende en POS/web como ítem (no descuenta receta del día).

El inventario vive en ubicaciones dentro de cada sucursal (Principal, Refrigerador, Freezer). El POS de una tienda suma todas las ubicaciones de esa sucursal. En Producción Diario se elige la ubicación de inventario al registrar Terminado (cocinado) (Freezer 1, Refrigerador Z, etc.) y luego se despacha a tiendas u otras ubicaciones desde Cocina Resultado Día. Si no se elige ubicación y ninguna tiene “Recibe producción”, el flujo sigue siendo cocina → camión → tienda.

Ver también Flujo de Operación (7 pasos).

Ubicaciones (seco / refrigerador / freezer)

No son sucursales extra: son bins dentro de una sucursal. Se editan en la ficha de la sucursal (Sucursales).

  • Tipos: Seco, Refrigerador, Freezer. La sucursal sigue teniendo el flag grueso de refrigeración; las advertencias de cadena de frío usan el tipo de la ubicación cuando se conoce.
  • Hay exactamente una ubicación Principal por sucursal (se crea sola). No se elimina si es la última o si tiene stock.
  • Insumos, productos terminados y subproductos se guardan en una ubicación. Si la pantalla no elige una, se usa Principal.
  • Recepción OC: selector de ubicación (de la sucursal de la OC, o de la cocina si la línea no es vitrina).
  • Consumo de receta: FIFO en todas las ubicaciones de esa cocina (la mantequilla del freezer se usa si es más antigua).
  • POS: stock disponible = suma de las ubicaciones de la tienda. Una cámara de cocina no se vende ahí.
  • Conteo de ubicaciones: conteo por pestaña y traslado intra-sucursal (misma sucursal, otra ubicación).

Cámara y despacho a tiendas

Al registrar Terminado (cocinado) en Producción Diario, el operador elige la ubicación de inventario (Principal, Freezer 1, Refrigerador Z). El lote (o el recibido de no expirables) queda en ese bin de la cocina, no en las tiendas. “Recibe producción” sigue siendo el valor por defecto del selector, no un requisito.

  1. Terminado (cocinado) — se setea la cantidad y la ubicación; el inventario entra a ese bin.
  2. Por entregar — se sigue calculando como sugerencia de despacho según el plan semanal.
  3. Despacho desde cámaraProducción → Cocina Resultado Día: pestañas por ubicación de cocina. Cantidad por tienda (precargada desde por entregar) u otra ubicación. Mueve de ese bin a la Principal de la tienda (anota entregado) o a otra cámara.
  4. Recibido — la tienda confirma en Control de Stock para activar venta (igual que hoy).

El plan semanal y el camión siguen siendo por sucursal de venta. El despacho entre sucursales y el traslado freezer ↔ vitrina usan el mismo servicio de traslado.

Producto no expirable

  1. PlanificaciónRecipeDay.planned_amount por sucursal y fecha.
  2. Producción — cocina registra salida_cocina (kitchen, branch_id nil).
  3. Sin cámara: se calcula por_entregar por sucursal. Con cámara: el recibido queda en la sucursal cocina (bodega) hasta el despacho; por_entregar es solo sugerencia.
  4. Logística / despacho — camión registra entregado, o Cocina Resultado Día copia cantidad a por_entregar / entregado de la tienda.
  5. Recepción — sucursal registra recibido en Control de Stock.
  6. POSProduct#stock_available = recibido − ventas_tienda − cortesía − merma (mismo día), en la sucursal de venta.
  7. VentaSale#deduct_stock_from_branch incrementa ventas_tienda.

Producto expirable

En ficha de producto: expirable + expirable_days (días de vigencia desde la producción).

  1. Terminado (cocinado) — al guardar salida_cocina, se recalcula por_entregar (sugerencia de despacho).
  2. Lote asignado — sin cámara: un lote por tienda con quantity_initial = por_entregar. Con cámara: un lote en esa ubicación, quantity_initial = salida ajustada; las tiendas aún no tienen lote.
  3. Despacho (solo con cámara) — mueve cantidad a la Principal de la tienda. El lote en tienda nace sin stock vendible hasta el recibido.
  4. Recibido activa venta — al confirmar recibido, se setea quantity_sellable y quantity_remaining.
  5. POS — stock = suma de quantity_remaining vendible en lotes no vencidos de todas las ubicaciones de esa tienda.
  6. Ventas / merma / cortesía — descuentan lotes FIFO (expires_on, luego production_date).
  7. Vencimiento — tarea product_stock_lots:expire_due da de baja lotes vencidos y registra movimiento expiry.

Insumos y subproductos

En la ficha: Vida útil (días). Vacío = el lote no vence.

  • Insumo: al recibir una OC eliges la ubicación; se crea un lote ahí. Vence = fecha de recepción + vida útil. La cocina consume FIFO en todas sus ubicaciones al registrar hitos / Terminado (cocinado).
  • Traslado interno: al marcar entregado en una solicitud, los gramos se mueven de la Principal (o ubicación elegida) del emisor a la ubicación de destino (si el insumo pide frío, prefiere refrigerador / freezer).
  • Subproducto: vence desde la elaboración; el conteo y el ajuste son por ubicación de la cocina.
  • Los vencidos dejan de estar disponibles; la tarea diaria puede darlos de baja.

No confundir con el flag expirable del producto terminado (lotes de venta en sucursal).

Tabla de campos

RecipeDay (sucursal)ProductStockLot / Location
planned_amount — plan semanallocation_id — bin dentro de la sucursal
por_entregar — asignado o sugerido de despachoquantity_initial — por_entregar (sin cámara) o salida (con cámara)
entregado — camión o despacho desde bodega— (informativo; recibido activa lote)
recibido — inventario inicial día (o hold de no expirable en cocina)quantity_sellable — activado al recibir
ventas_tienda — ventas POSquantity_remaining — disponible en lote
merma / cortesiamovimientos merma / cortesia / transfer
expires_on — fecha límite de venta

Pantallas del sistema

Producción diariaProducción Diario
Panel cocinaPanel hoy
Stock entre hitosStock hitos
Insumos del díaInsumos día
Insumos del mesInsumos mes
Asignación y despacho (cámara → tiendas / ubicaciones)Cocina Resultado Día
Ubicaciones de la sucursalSucursales → ficha → Ubicaciones
Control de stockControl de Stock
Conteo y traslado intra-sucursalConteo de ubicaciones
Cierre sucursalCierre Sucursal
POSPunto de Venta
AnálisisAnálisis Stock

Integraciones

  • WooCommerce push: envía stock disponible (lotes vigentes si el producto es expirable).
  • WooCommerce inbound: expirables ajustan lotes; no expirables ajustan recibido.
  • Shopify: el pedido pagado descuenta stock en la sucursal de la tienda; no hay sync de inventario con Shopify.
  • Portal B2B: el stock se descuenta al confirmar el pedido, no al crearlo.
  • Lioren: emite DTE; no mueve stock.

Preguntas frecuentes

¿Por qué el POS muestra 0 si ya hubo Terminado (cocinado)?
En expirables falta confirmar recibido en Control de Stock. Si la cocina usa cámara, además hay que despachar a la tienda: el stock de la cámara no se vende en el POS.

¿Qué pasa al vencimiento?
El lote deja de contar en POS; la tarea diaria registra baja por vencimiento y puede incrementar merma del día.

¿Puedo vender más de lo recibido hoy?
Sí, en expirables el stock acumula lotes de varios días de producción mientras no hayan vencido (todas las ubicaciones de esa tienda).

¿El Panel hoy o Stock hitos cambian el inventario de sucursal?
No. Solo muestran avance de cocina. El stock vendible aparece después de salida → (cámara + despacho, si aplica) → entrega → recibido.

¿Cómo entra stock a un freezer si no es Principal?
En la recepción de la OC elige esa ubicación, o usa un traslado intra-sucursal en Conteo de ubicaciones.

¿El traslado interno de insumos mueve lotes?
Sí, al aumentar lo entregado de la solicitud. Si no marcas entregado, los gramos no se mueven. El aviso de refrigeración mira el tipo de la ubicación de destino.