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.
Correcting a closed batch
A closed batch and its compliance evidence remain read-only. When a posted consumption or yield quantity is wrong, create a post-close amendment; do not edit the original floor entry.
Choose the physical batch and original stock movement, enter a corrected quantity when a replacement is needed, and provide a reason. Preview shows the entered unit, base-unit quantity change, and valuation change before anything posts. Confirming the amendment creates an offsetting stock movement and, when needed, a replacement movement through the same inventory ledger used by production. The original movement, yield, genealogy, quality results, and compliance record remain unchanged.
The amendment permanently records the operator, reason, original movement, offset movement, replacement movement, and quantity and value effects. vestl blocks amendments against open orders, movements from another physical batch, already-reversed movements, and corrections that would violate current stock rules. A retried confirmation is safe and cannot move inventory twice.
Amendment reason: Explain what was found, why the original entry was wrong, and what evidence authorized the correction. This becomes part of the permanent audit trail.
Pages
Finding older production
The Manufacturing Orders and Batches lists load 50 records at a time. Search, status, client, and date filters run against the full production history, not just the 50 records currently visible. Use Next and Previous below either list to move through older or newer matching records. Your filters stay in place while you move between pages and when you use the browser’s Back and Forward buttons.
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.
New batch
A flat form — pick the case BOM, the quantity, optionally a tank and a start date. Two panels help you decide the quantity rather than assuming you already know it.
Open demand. Once you pick a case BOM, vestl shows what’s actually waiting on that product: confirmed sales-order lines with the order number, client, and due date, plus any active forecast. Use N cs fills the quantity field with the total.
The sales-order figures are net of what has already shipped, and they exclude lines already attached to a manufacturing order — those are being made, and counting them again would have you produce the same cases twice.
Ingredient availability. As you type a quantity, vestl checks whether the ingredients are on hand and lists anything short, with the amount and unit. It reports two different things, and the difference matters:
| What you see | What it means |
|---|---|
| Short N ingredients | The requirement was calculated and there isn’t enough on hand. |
| Can’t check N ingredients | The requirement couldn’t be converted into the ingredient’s unit — usually a liquid missing a density. Availability is unknown, not zero. |
Fix a “can’t check” by setting the material’s density; until then vestl won’t guess.
Neither panel blocks you. You can create a batch that is short — purchasing and receiving may well cover it before the start date, and planning ahead of stock is normal. The panels tell you what you’re committing to.
Tank capacity is not checked on this form yet. Choosing a tank and a start date books it on the schedule, and an overflow surfaces later as a schedule exception rather than a warning here.
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.
Printing a batch sheet
Print / PDF on the order header opens a printable batch sheet — the shop-floor document for the run: the order header (planned output, batches, status, scheduled start), the pinned formula and version, its ingredient lines and process steps, and the run’s batches with their status and actual yield. Print it or Save as PDF from your browser’s print dialog. (This is separate from the TTB Production Record, which is a compliance artifact printed per batch from the compliance surface.)
Promise Date Chain
The Promise Date Chain panel appears below the pinned kernel chain on the manufacturing order detail page. It shows how the batch’s scheduled start relates to the date it must start to hit the client’s requested delivery date.
Key fields:
| Field | What it means |
|---|---|
| Client requested | The requested date from the linked sales order |
| Order must start by | Latest start date to still hit the client’s requested date (requested date minus production lead time days) |
| Order scheduled start | The date assigned to this order in the planning calendar |
| Production lead time | Days configured on the product (or the workspace default) |
| Earliest completion | Soonest this order could finish if you acted today: today plus the longest shortage-material procurement path (supplier lead time plus receiving buffer) plus the production lead time |
If the Late Risk badge appears, one or more conditions triggered:
- The chain is already infeasible — even ordering every shortage material today, the earliest completion lands after the requested date
- The scheduled start is after the order must-start-by date
- A linked purchase order arrives after the order start (the scheduled start, or the must-start-by date if not yet scheduled)
The Material Timing section shows each short material’s PO send-by date — the latest date a PO would need to be sent assuming the supplier’s lead time and a receiving buffer. If the send-by date has already passed, it appears in amber.
The Linked Purchase Orders section lists POs tied to this order, their expected arrival dates, and whether each arrives in time for production to start.
See Schedule Exceptions for how to respond to a late-risk alert.
Consumption tolerance
Each formula ingredient line can carry a tolerance percentage. When you record actual consumption that deviates from the planned quantity by more than the line’s tolerance:
- TTB regime batches are blocked until you supply an explicit override reason. The reason, the acting user, and the variance are stored on the consumption record and written to the audit log — this is part of the batch’s compliance record.
- Non-regulated batches post immediately with a warning so the variance is visible but does not interrupt the floor.
Lines with a tolerance of 0% are never gated.
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.
Yield, process-loss evidence, and recovered by-products inherit the organization of the batch. Operators never choose an organization for these records, and a recovered product or output lot from another workspace is treated as nonexistent. This keeps yield reporting, traceability, and allocated cost inside the plant that performed the run.
Planned by-product yield
Yield recording loads secondary outputs from the published formula version. The product, unit, expected quantity, producing operation, and cost share are frozen plan values. Choose the location where each output was placed and enter the recovered quantity only when it differs from plan. vestl creates a produced lot and posts the output through the stock ledger, preserving the link among the formula plan, physical Batch, lot, movement, and allocated value.
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 from the published formula’s Prerequisites, not from sequence number alone. One task may wait for several named steps, while independent tasks may run in parallel when resources are available. Each physical Batch gets its own copy of these links, so a later formula revision cannot silently change work already released to the floor. A prerequisite is satisfied when its task is complete or explicitly skipped with a reason.
Completing, splitting, and backordering physical batches
Use Order corrections when the physical runs no longer match the original aggregate plan. Select the affected Batch identities, review the impact preview, and enter a reason before posting.
- Partial completion completes only the selected ready Batches.
- Short close completes the selected ready Batches and cancels unfinished Batches, releasing unused reservations.
- Split order moves selected planned Batches, their tasks, demand allocations, and schedule links onto a new Manufacturing Order.
- Create backorder performs the same identity-preserving move for deferred work.
Retries keep one idempotency identity, so a lost response cannot apply an operation twice. The Batch operations and actual labor section enforces the same prerequisite links used by production. Log time records an immutable actual work window; vestl calculates minutes and operating cost from the Tank / Vessel rate frozen for that task.
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
- Search available source lots by vestl lot number or supplier lot number. Results stay scoped to the selected ingredient, and unavailable or empty lots are excluded.
- 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.