Batches
A batch is a single physical run of liquid through your equipment — the tank of mash, the kettle of beer, the blender of liqueur. It is the primary traceability entity in vestl: every Certificate of Analysis, every production record, every yield report, and every lot of finished cases hangs off a batch.
Vocabulary check. A Manufacturing Order is the plan — what you intend to produce. A Batch is the physical run — what actually happened on the floor. One manufacturing order can spawn one or more batches, set by the number of batches field at order creation.
The lifecycle
Manufacturing orders move through five statuses, shown left-to-right on the Batches board:
| Status | What it means | What advances it |
|---|---|---|
| Draft | Order is being authored. Quantity, formula, vessel BOM, and case BOM are being picked. | Schedule the order — sets a start date and locks the formula and BOM versions. |
| Scheduled | Versions locked, work center reserved, ready to run when the slot opens. | Operator starts the run on the floor. |
| In progress | Liquid is on a tank or line right now. Lot genealogy is being recorded as ingredients are consumed. | Package the run. |
| Fulfilled | Liquid is in bottles, cases are built and palletized. Awaiting QC and compliance sign-off. | Close the order. |
| Closed | All artifacts signed off, costs posted, lot genealogy frozen. Read-only forever. | — |
Cancelled is a sixth status reachable from Draft or Scheduled only. Once a run starts you cannot cancel without writing a deviation report.
The board enforces these transitions — drag a card from Draft to Scheduled works; drag from Draft straight to In progress does not.
Close readiness
Before an order can move from Fulfilled to Closed, vestl evaluates a structured close-readiness checklist and surfaces explicit blockers.
On the batch detail page, the close-readiness panel shows the current readiness state and lists any blocking codes inline.
Shared blockers for every batch:
missing_tasks— one or more required work-order tasks are still incomplete.missing_consumption— required ingredient consumption has not been recorded.missing_genealogy— the batch does not have the lot-to-lot traceability evidence needed for audit or recall work.missing_output_evidence— required completion evidence for the produced output is incomplete.
Additional blockers for products whose compliance regime is TTB:
missing_ttb_record— the batch’s production record is still missing or incomplete.missing_coa— the batch does not yet have the COA evidence needed for regulated close readiness.
The Close Order button stays disabled while any blocker remains. The button also surfaces the first blocking reason so the operator can see why close is gated before attempting the transition.
Pages
Batches board (kanban)
The default landing surface. Five columns matching the five statuses, with a horizon filter (this week / this and next week / this quarter / all). Drag cards between columns to advance them.
Reading the board at a glance. Each column carries a coloured strip at the top — slate, blue, amber, terracotta, sage — and every card on that column has a left edge in the same colour. The progression from slate (Draft) to sage (Closed) reads as movement through the lifecycle, so you can scan column-to-column without reading status labels. Amber stays the action colour everywhere else (buttons, hover, drop targets) — it is not the same as the in-progress column tone.
Empty-column hints:
- Draft — Orders start here. Set quantity, pick formula and BOM, schedule to advance.
- Scheduled — Ready to run when the work center opens up.
- In progress — Currently on a tank or line. Lot genealogy is being recorded.
- Fulfilled — Liquid in bottles, cases built. Awaiting compliance sign-off.
- Closed — All artifacts signed off. Costs posted. Lot genealogy frozen.
New manufacturing order
Wizard-style. Walk through:
- What are you making? — finished good (line-anchored or standalone)
- How many? — planned output cases, number of physical batches
- Which formula and BOM? — pick the formula and the vessel/case BOM; vestl resolves the latest published version of each at submit.
- When? — scheduled start and end, plus work center assignment
Submitting creates a Draft order. Schedule it from the detail page or by dragging on the board.
Manufacturing order detail
The full view: planned output, locked formula / vessel BOM / case BOM versions, scheduled vs. actual times, the underlying physical batches, work-order tasks (routing steps), and the next-action button derived from current status.
The right rail clarifies the order vs. batch distinction — the order on top, the physical batches it spawned underneath. Each batch has its own consumption records, yield, and linked compliance artifacts such as the Certificate of Analysis and production record when required.
Field reference (manufacturing order)
Order number
Auto-generated, format MO-NNNN. Stable for the life of the order. Appears on every downstream artifact (consumption records, COAs, production records).
Name
Free-text label so operators can recognize a run at a glance (“Maybel’s Cream Liqueur — Spring 2026 batch”). Doesn’t replace the order number; it’s a human handle.
Target type
Formula or Vessel BOM. Determines whether the order produces bulk liquid (formula) or finished cases (formula → vessel BOM → case BOM chain). Most orders target a vessel BOM so the run yields packaged cases directly.
Planned output cases
How many cases of the finished good you intend to produce. Drives MRP material requirements and scheduling. Actual yield is recorded per-batch on completion.
Number of batches
How many physical batches this order will spawn. A 10,000-case order might be split across 5 fermenter loads (5 batches) depending on tank capacity. Each batch gets its own batch number and its own COA.
Status
See “The lifecycle” above. Status drives which actions are available, which compliance records are required, and whether the row is editable.
Scheduled start / end
The window the order is reserved on its work center. Drives the calendar view on the Schedule page and is checked for conflicts. Set when the order moves from Draft to Scheduled.
Actual start / end
The real start and end stamps recorded on the floor. Set when the operator transitions In progress → Fulfilled. Used by yield variance, cycle-time, and labor-cost reports.
Locked versions (formula / vessel BOM / case BOM)
The exact versions this order is bound to. Resolved when the order is scheduled and frozen when status hits In progress or later. Even if the recipe is forked and a new version published mid-run, this order keeps its original lock so the batch record matches what was actually produced.
Assigned to
The operator or production manager responsible for executing the order. Optional — orders without an assignee show up in the unassigned queue on the dashboard.
Notes
Free-text. Use this for the things that don’t fit a field: the substitution authorized for an out-of-stock ingredient, the deviation note from a deviation report, the customer-facing context for a one-off run.
Field reference (production batch)
Batch number
Auto-generated, format B-NNNN. The batch number is what shows on bottles (via the lot it produces), on COAs, and on production records — it is the customer-facing identifier of a specific physical run.
Status
Planned, In progress, Complete, or Rejected. Distinct from the parent order’s status — an order can be In progress while its underlying batch is still Planned (e.g. order opened, materials staged, but liquid hasn’t actually been pumped into the tank yet).
A Rejected batch is one that failed QC or compliance and was destroyed or reworked. Rejected batches stay on the books for traceability; their lot genealogy still resolves.
Actual yield
What you actually produced — usually in gallons of liquid or cases of finished product. Compared to the planned output (from the parent order, divided by the per-batch share) for yield variance reporting.
Completed at
Timestamp the batch was marked Complete. Drives compliance deadlines (TTB report cutoffs) and inventory-availability dates for downstream manufacturing orders.
Work-order tasks (routing)
Each manufacturing order is broken into a list of work-order tasks corresponding to the formula’s process steps (mash, ferment, distill, blend, bottle, case). The task table on the manufacturing order detail page shows:
- The step’s sequence number, name, and assigned work center
- Status: Pending, In progress, Complete, or Skipped
- Optionally, an actual temperature reading (°F) and gravity reading at completion — these flow into the COA
- The user who completed the task and when
Tasks unblock in sequence. You cannot start step 5 until steps 1–4 are complete (or explicitly skipped with a reason).
Consumption records (lot genealogy)
Operators record ingredient usage inline from the batch detail page while the manufacturing order is In progress. Once the order reaches Fulfilled, the close-readiness panel stays visible but new consumption entries are blocked until the operator moves back into a production state. For each consumption entry, they:
- Select the ingredient line being consumed
- Enter a lot number, or click Suggest (FEFO) to accept the first-expiring eligible lot suggestion
- Enter the actual consumed quantity and UOM
- Submit the record and resolve any field errors shown inline on the form
Once recorded, the consumption table shows:
- The consumed lot and product
- Planned quantity vs. actual quantity (with a computed variance %)
- Lot-reference details and lot status when that data is available
- The user who recorded the consumption and when
- An optional note for deviation context
These records are the legal traceability chain for TTB. From a finished bottle’s lot, you can walk back through the producing batch to every consumption record to every input lot to every supplier lot. vestl never deletes a consumption record — they are kept indefinitely.
How batches connect to other surfaces
| You’re looking at | …it links to |
|---|---|
| Manufacturing order detail | The locked formula version, vessel BOM version, and case BOM version |
| Consumption record | The source lot in inventory |
| Closed batch | The Certificate of Analysis and the production record |
| Sales order line | The manufacturing order that fulfills the line (assigned by MRP) |
| Finished case | The lot it shipped from, and the batch that produced it |
The detail page has direct links for each of these — you should never need to copy or paste an ID between surfaces.
Compliance overlay
For products whose compliance regime is TTB:
- Close readiness adds regulated blockers on top of the shared workflow:
missing_ttb_recordfor a missing or incomplete production record, andmissing_coafor missing COA evidence. - The production record references the formula’s TTB Formula Number and proof-gallon math.
- The audit trail captures every status transition, every consumption, every task completion, and is append-only — no edits, no deletes.
For products whose compliance regime is None:
- No production record is required.
- COA may still be required by the client or QA policy, but it does not add a regulated close blocker.
The regime is set on the product, inherited by the batch, and frozen at batch creation. You cannot change a batch’s regime mid-run.