Field ReferenceInventory
Batch-firstTTB-awareRev. 2026.06
Manual / Core / Inventory

Inventory

Inventory is what you have on hand right now — every drum of base, every case of bottles in the packaging room, every drop in a tank. vestl tracks inventory by lot so you always know which specific receipt or production run a unit came from.

Inventory vs. Materials

These are two views of the same thing, not two separate systems.

  • Materials is the catalog — the definition of each thing you buy or hold: its SKU, owner (vendor or house), unit of measure, and MRP planning rules. One row per material, whether you have any in stock or not.
  • Inventory is the stock — the actual lots of those materials on hand right now, by location and quantity, that decrement as production consumes them.

A material with zero on-hand still exists in Materials; it just has no inventory yet. When you receive a purchase order, you’re not creating a new material — you’re adding inventory (lots) against a material that already exists.


Core concepts

Lot. A specific receipt or production run of a product. Lots have a lot number, received date, quantity, location, and remaining quantity. Two batches of the same SKU received on different days are two separate lots.

Location. Where the inventory physically lives inside a facility. Locations are typed through the location registry: room, rack, shelf, bin, tank, zone, or a custom storage spot.

On-hand. The sum of remaining quantity across all available lots of a product. Different from “received” because production batches consume from lots and decrement remaining.

Status. Each lot is Available, On hold, Quarantine, Consumed, or Expired. Only Available lots are pickable for production. On hold and Quarantine lots are visible but blocked from being consumed.


Where inventory comes from

A lot is created in three ways, and the lot type field records which:

  • Purchased — created by a purchase receipt. The receipt line that created the lot is linked back so you can audit “where did this lot come from” with one click.
  • Produced — created when a production batch packages out. The batch’s order, recipe, vessel BOM, and case BOM are locked to the lot, so traceability flows forward to the finished case.
  • Adjusted — created by a manual inventory adjustment (cycle-count discoveries, found inventory, write-ons). Adjusted lots require a reason note.

Most lots are Purchased or Produced. Adjusted lots are an exception path and should be rare.


Inventory pages

On-hand by product

The main inventory landing page. Shows one row per product with the on-hand quantity rolled up across all available lots. Click into a row to see the lots that make up that on-hand number.

Filters: location, product type (finished goods only / raw materials only), low-stock (below reorder point — see the reorder dashboard).

Lots

The lot-level view. Use this when you need to find a specific lot — debugging traceability, looking up a lot that was flagged in QC, hunting for an expired lot to write off. Sortable by received date, expiry date, status.

Printing lot labels

Every lot can be printed as a physical label to affix to the drum, tote, pallet, or shelf tag. Labels are sized for Avery 5163 stock (2″ × 4″, ten labels per US-Letter sheet) and print black-on-white so the lot number stays legible on the floor.

Each label shows the lot number (large, so it reads across a room), a Code 128 barcode, the product name and SKU, remaining quantity with its unit, the received date, the expiry date (when the lot has one), and the storage location. The barcode encodes VESTL:LOT:<lot UUID>; that stable identifier avoids ambiguity when two suppliers reuse a human lot number.

Two ways to print:

  • A single lot — from that lot’s detail page, choose Print label.
  • A batch of lots — from the Lots page, filter or search down to the set you want (for example, everything received on one purchase order, or everything in one location), then choose Print labels. Every lot currently shown is printed, in the order listed.

Either action opens a print-ready sheet with a Print / Save as PDF button. Set your printer to Actual size / 100% — not “fit to page” — so the labels register to the pre-cut stock. You can also Save as PDF to keep or email the sheet before printing.

On Lots, place the cursor in Scan or enter a lot and scan with a USB or Bluetooth barcode scanner. Scanners that behave like a keyboard submit immediately. You may also paste the encoded identifier, a lot UUID, or a human lot number. Available lots open directly; held, quarantined, expired, and consumed lots stop on a warning so an operator cannot move or consume them without reviewing the status. From the lot detail, continue to Transfer, Adjustment, or Batch consumption.

Lot status and holds

Every lot carries a status: Available, On Hold, Quarantine, Consumed, or Expired. Only Available lots participate in operations:

  • Batch consumption rejects any lot that is not Available, with a clear error naming the lot and its status.
  • FEFO pick suggestions and sales-order fulfillment suggestions never offer a held or quarantined lot.
  • Sales fulfillment cannot ship from a held or quarantined lot.

You can place a lot On Hold or in Quarantine from the lot detail page (Quarantine requires a reason). Releasing it back to Available restores it to all of the above.

When a QC inspection against a lot — or against a purchase receipt — completes as failed, every affected lot is automatically quarantined with the inspection recorded as the reason. A later passing inspection releases only the holds it placed; manual holds survive. Every hold and release is written to the QC hold log and the audit trail, and an Inventory hold exception appears in the Exceptions inbox until the lot is released or consumed. After a re-inspection clears the material, release the quarantined lot manually from its lot detail page — that is the standard release workflow.

Receive raw materials

Used for raw material receipts (finished goods are received by closing a production batch, not through this page). Two flows:

  1. PO-anchored receive — you have an open purchase order; pick the PO line and confirm quantity, lot, and location. Most receipts go this way.
  2. Unplanned receive — material arrived without a PO (samples, returns, vendor errors). Requires a reason note in the lot’s notes — operators want to know why later.

Adjustments

Manual quantity changes outside the receive / produce / consume flow. Cycle-count discrepancies, write-offs, found inventory. Every adjustment requires a reason and is audit-logged.

From a lot, choose Return to supplier when material physically goes back to its vendor, or Scrap / write off when it is disposed of. Enter the physical quantity as a positive number; vestl. records the negative stock movement, lot cost, operator, and reason. Depletion-only reasons can never add stock. Use a count correction when a physical count discovers a gain.

Transfers

Move inventory between locations. Common case: a tank has been emptied and the remainder was siphoned into a different tank — record the transfer so the lot’s location stays accurate.

Cycle counts

Periodic physical counts. The page generates a count sheet for a location, you fill it in, and the system records adjustments for any variance.

If stock moves after a count was entered, posting stops before any adjustment is written. The conflict panel compares the balance originally reviewed, the current ledger balance, and the physical count. Choose Use current balances to refresh the variance basis without changing the physical count, review the new variance, and then post.

Financial valuation includes owned stock that is Available, On hold, or Quarantine. Holds control whether material can be used; they do not remove owned material from inventory value. Customer-owned material remains zero-value.

Reorder dashboard

Surfaces products whose projected availability is below their reorder point. The reorder dashboard fires on projected quantity — not raw on-hand — so products that already have a sent purchase order in-flight are automatically suppressed.

Projected qty = on-hand + incoming − committed

  • On-hand — available lots only. Held, quarantined, and expired lots are excluded.
  • Incoming POs — open PO line balances on sent or partial purchase orders. Draft POs do not count (no vendor commitment yet) — send the PO to clear the alert.
  • Committed — net open batch material requirements (scheduled and in-progress manufacturing orders) plus unfulfilled confirmed sales order lines.

Rules scoped to a single location compare on-hand at that location instead of the projected quantity — purchase orders and batch commitments aren’t location-specific, so a projected number scoped to one room would be misleading.

Reorder point is set per-product on the material master. When projected drops below it, an alert fires and the row appears here.

Suggested order qty is calculated as: bring projected back up to 1.5× the reorder point, then round up to the vendor’s MOQ (minimum order quantity) and order multiple if either is set on the sourcing record.

Order multiple (vendor commercial term): if a supplier requires you to buy in packs of N, vestl rounds the suggested qty up to the next whole multiple. For example, a base need of 110 units with MOQ 500 and order multiple 48 → 528 (11 × 48, the first whole multiple ≥ 500).

“Generate POs from suggestions” groups all visible rows by preferred vendor and drafts one purchase order per vendor. POs land in Purchasing as Draft for review before sending.

Expiry report

Lots that are within N days of their expiry date. Filter by lookahead window (7 / 30 / 90 days). Used for FEFO (first-expiry-first-out) picking and to prevent compliance issues with aged stock.

Each row also shows the lot’s Removal and Alert dates and flags lots past their removal date. Loading the report runs the automatic expiry check, so any lot now past its expiration date shows as Expired the moment you open the page.

Raw material turnover

Turnover ratio per raw material over a selected period:

Turnover = Period COGS / Average inventory value

Higher means faster-moving — the material is being consumed and replenished frequently. Lower means it’s sitting. The Days on hand column converts the ratio into a more concrete number (“at this consumption rate, current stock lasts N days”).

Pick a date range (defaults to last 90 days) and optionally narrow by vendor. The table shows one row per raw-material product with COGS for the window, average inventory value, turnover, and days on hand.

Mechanics:

  • Period COGS comes from finalized batch cost records — only batches whose costs have been closed contribute, so in-progress batches don’t skew the number.
  • Average inventory value is reconstructed from the ledger at the start and end of the window and averaged. Lots held at each boundary are valued at their unit cost.
  • A product with no consumption in the window but a non-zero inventory balance shows up with turnover and days on hand (the math is undefined).

Batch cost headers, ingredient cost lines, and Manufacturing Order cost snapshots belong to the active organization. vestl derives that organization from your session and checks it against the batch, order, consumption, product, and lot behind each cost. Organization ownership is read-only metadata; another workspace’s cost record is treated as not found and never contributes to your variance or turnover reports.

Finished-goods turnover isn’t here yet — it requires a sales fulfillment ledger to know when FG actually left inventory. Tracked separately.

Dead stock

Lots with on-hand quantity that haven’t moved in the lookback window (30 / 60 / 90 / 180 days). “Moved” means any ledger activity — receipt, batch consumption, transfer, adjustment, cycle count. A lot whose last activity is older than the window shows up here.

The page splits results into two buckets:

  • Dead — no movement and no open production batch claims the lot. These are candidates for write-off or redeployment to another product.
  • Reserved by stale batch — the lot is linked to a production batch that’s still planned, in progress, or ready, but the batch itself hasn’t closed in a long time. Inventory looks stagnant from the ledger but is actually waiting on a stalled manufacturing order. Chase the open batch before writing the inventory off.

Quarantined and on-hold lots appear with a badge so you can tell intentional holds apart from neglect.


Shelf life & expiration

vestl models expiration with three per-product settings and three per-lot dates, adapted from the four-date model most ERPs use. Configure the settings on the material form (raw materials) or in the product wizard (finished goods). All three are optional — leave them blank for products that don’t expire.

Product settings

  • Shelf life (days) — how long the product stays usable after receipt or production. When a lot is received or produced without an explicit expiration date, vestl sets the lot’s expiration to the receipt (or production) date plus this many days. If the label on received goods shows a different date, enter that date on the receipt line — an explicit date always wins, and the removal and alert dates are recomputed from it.
  • Removal lead (days before expiration) — how many days before expiration a lot should stop being picked. Pick suggestions (FEFO) are ordered by removal date, so stock leaves this many days ahead of its printed expiration — useful when customers need remaining shelf life on delivery. A lot past its removal date is still pickable, but flagged, so you can deliberately clear it rather than strand sellable stock.
  • Expiration alert (days before) — how far ahead of expiration to warn. When a lot’s alert date arrives and the lot still has stock, vestl raises a Lot expiring item in the inbox for the receiving team. The item resolves itself when the lot is consumed, expires, or passes its removal date.

Lot dates

Each lot carries up to three dates, visible on the lot list and lot detail:

  • Expiration date — entered on the receipt line, or derived from shelf life.
  • Removal date — expiration − removal lead. Drives FEFO pick order.
  • Alert date — expiration − alert offset. Drives the inbox warning.

What happens at expiration

A scheduled check (and every load of the Expiry report) automatically moves lots past their expiration date to Expired status, with the change recorded in the audit log. Expired lots are excluded from picking, consumption, and planning availability — and are never deleted; they stay on the books for traceability.


Field reference (lot detail)

Lot number

The identifier for this specific lot. For purchased lots, you can match it to your vendor’s lot or batch number; for produced lots, it is auto-generated from the batch ID.

Supplier lot number

The vendor’s own lot or batch identifier from their packaging or COA. Optional, but strongly recommended for raw materials — TTB traceability requires being able to walk from a finished bottle back to the supplier lot of every ingredient.

Received date

The date the lot was actually received (not the PO date, not the day someone got around to entering it). Drives FEFO and aging reports.

Expiry date

When the lot becomes unusable. Optional for non-perishable materials. The expiry report flags lots within a configurable lookahead window.

Removal date

The date this lot should stop being picked: expiration minus the product’s removal lead. FEFO pick suggestions are ordered by removal date (falling back to expiration when no removal lead is set). Past-removal lots remain pickable but are flagged — removal is advisory, not blocking.

Alert date

The date the Lot expiring inbox warning fires for this lot: expiration minus the product’s alert offset. Blank when the product has no alert offset.

Quantity / Remaining quantity

Quantity is what you received; remaining quantity is what’s left after consumption. Production batches and adjustments decrement remaining; you cannot edit it directly.

Unit cost

The cost per unit at the time of receipt. Used by inventory valuation reports and batch costing. Pulled from the PO line for purchased lots; computed from input costs for produced lots.

Location

Where the lot physically lives. Move it via the Transfers page.

Lot status

  • Available — pickable for production. Default.
  • On hold — visible but blocked from consumption. Use this when QC has flagged the lot pending an investigation.
  • Quarantine — segregated for a compliance reason (failed QC, recall, regulatory hold). Requires a quarantine reason note. Cannot be consumed without manual unblock.
  • Consumed — fully drawn down to zero remaining.
  • Expired — past expiry date, blocked from consumption.

Quarantine reason

Required when status is Quarantine. Free-text, but should be specific enough to audit later (“Failed micro test 2026-04-12, retain for retest”). Visible in the audit trail.

Notes

Free-text. Especially useful for unplanned receives (“Vendor sent extra by mistake — kept per email with rep on 2026-04-15”).


Locations

Locations are configured under Settings → Locations. The default type registry includes:

  • Tank — has capacity. Used for liquid in process (mash tuns, fermenters, blending tanks). When capacity is set, the system warns if a transfer would exceed it.
  • Room — a bounded space inside a facility, such as receiving, cold storage, packaging staging, or a bonded vault.
  • Rack / Shelf / Bin / Zone — nested addressable storage spots used for dry goods, packaging, or finished cases.

A location can be flagged to allow negative on-hand if you want to permit it for that location (rare; usually only for transit or virtual locations).

Client-owned stock at an off-site warehouse

Ownership, custody, planning availability, and valuation are separate decisions:

  • Set the material owner to the client. Client-owned material is customer-provided inventory: vestl tracks quantity and genealogy but assigns it zero Brella inventory value and never creates a supplier purchase order for it.
  • Create a virtual location for the client warehouse, set that client as Custodian, and turn off Available to MRP. The stock remains visible without being promised to plant production.
  • When the material arrives at the plant, post a Transfer into a facility location. The transfer is the audit trail for the custody change; once it reaches a planning-enabled location, MRP may count the available lot.

Leave Available to MRP on for ordinary plant storage. A location with no custodian is treated as Brella/facility custody.


Inventory and production

A production batch reads inventory the same way you would: it picks Available lots of each ingredient and decrements remaining quantity as it consumes them. Lot selection follows FEFO by default — earliest-expiring lot first — but operators can override during batch creation if they need to clear a specific lot.

When a batch packages out, vestl creates a new Produced lot for each finished SKU at the configured packaging location. The new lot’s traceability chain links forward through the manufacturing order → batch → recipe / vessel BOM / case BOM, and backward through every consumed input lot.


Inventory and compliance

For TTB-regulated products, lot traceability is legally required. vestl never deletes a lot — Consumed and Expired lots stay on the books indefinitely so the trail from finished bottle to source ingredient can be reconstructed years later.

Quarantine status and quarantine reasons are also part of the audit trail. If a lot was held for a compliance reason and then released, the audit log shows the hold, the reason, the release, and who released it.