Pre-assembled inventory
Pre-assembled inventoryPre-Assembled InventoryStock of finished sub-assemblies and BOM items that have already been built and are sitting on the shelf. When a work order needs a sub-assembly, it draws from pre-assembled inventory first and only builds fresh ones if the shelf comes up short. Read more → is your shelf of already-built finished goods. When a customer orders the BOM’s variant, Assemblified consumes from this shelf first — only the remainder pulls from raw materials. This decouples your inventory display from your build cadence: build ahead in batches, ship instantly when an order arrives.
This is one of the most powerful BOM features. It also has a few non-obvious mechanics. This page explains them all.
On this page
Section titled “On this page”- What pre-assembled stock is, conceptually
- How it’s consumed at order time (with worked examples)
- Manual adjustment — when and how
- Per-location pre-assembled
- Interaction with the Only sell pre-assembled mode
- Restoration on cancel/refund (briefly — full coverage in the refunds page)
What it is
Section titled “What it is”Pre-assembled stock is finished-good inventory you’ve already built. You can have any quantity of it at any number of locations.
It’s stored as:
- A per-BOM number (the aggregate
preAssembledQuantity). - Per-location entries (the source of truth for multi-location stores).
Every BOM starts with preAssembledQuantity = 0 — empty shelf. You populate it manually when you build batches ahead of orders. You can also seed it at the moment you flip on Only sell pre-assembled quantities (see below).
Sub-assemblies have their own pre-assembled shelves with the same mechanics — see Sub-Assemblies → Pre-assembled stock.
How it’s consumed
Section titled “How it’s consumed”When an order for N units arrives:
- Pre-assembled is consumed first. Up to
min(available, N)come off the shelf. - The remainder pulls from raws. If
N > available, the extra is sourced from sub-assemblies and raw materials normally. - The shelf decrement is logged in
preAssembledConsumption[]on the execution log row.
Worked examples
Section titled “Worked examples”Here’s how it plays out for different combinations:
| Order qty | Pre-assembled before | Consumed from shelf | Remainder from raws | Pre-assembled after |
|---|---|---|---|---|
| 3 | 10 | 3 | 0 | 7 |
| 5 | 5 | 5 | 0 | 0 |
| 15 | 10 | 10 | 5 | 0 |
| 4 | 0 | 0 | 4 | 0 |
The key behavior: raws are only touched for the remainder. If your shelf can fully cover the order, no raw-material inventory is decremented at all.
Multi-line orders share the shelf
Section titled “Multi-line orders share the shelf”If a customer’s order has two line items of the same BOM (e.g., 3 of variant A and 4 of variant A), they share the shelf. Internal bookkeeping prevents double-spending: the first line item decrements; the second sees the new balance.
Manual adjustment
Section titled “Manual adjustment”You’ll adjust pre-assembled stock manually when:
- You finished a build batch and want to record it.
- You scrapped or audited inventory and need to reconcile.
- You’re enabling Only sell pre-assembled quantities and want to seed the shelf to match Shopify.
Two surfaces:
- From the BOM list page — click the pre-assembled value next to any BOM to open a reconcile popover. Per-location adjustments. Step-by-step in Reconcile pre-assembled stock.
- From the BOM detail page — the “Only Sell Preassembled Quantities” toggle dialog also exposes per-location values.
- In bulk — when many BOMs are off, Reconcile inventory (bulk) shows a discrepancy preview and lets you fix everything in one pass.
Both write to the per-location table and update the per-BOM aggregate atomically.
Per-location pre-assembled
Section titled “Per-location pre-assembled”Pre-assembled stock is always per-location under the hood. The single number on the BOM list is just the sum across locations.
If you have multi-location inventory:
- Set pre-assembled per location when batches are built and stored at specific warehouses.
- Orders consume from the location resolved by the order’s fulfillment + your component-reference locations (see Execution model → Multi-location).
- The “Only sell pre-assembled quantities” dialog shows per-location Shopify-vs-pre-assembled side by side so you can seed each location individually.
Only sell pre-assembled quantities mode
Section titled “Only sell pre-assembled quantities mode”When this Enhanced setting is on:
- Shopify-displayed availability follows pre-assembled stock only. Component-derived buildable capacity is hidden.
- The customer can only buy what’s physically built and on the shelf.
This is a powerful mode for sellers who don’t want to over-promise. Pair it with build-cadence batch production, and your storefront perfectly reflects what’s available right now.
When you flip it on, a confirmation dialog shows per-location Shopify-vs-pre-assembled values. Two options:
- Set to Shopify Values — set pre-assembled per-location to match current Shopify-displayed inventory. Use this if you have N units displayed and want the storefront to keep showing N (without dropping to zero overnight as the dynamic adjustment recomputes).
- Keep Current — let pre-assembled stay where it is. Storefront will drop to whatever your current pre-assembled is.
See Settings → Only sell pre-assembled quantities.
Restoration on cancel/refund
Section titled “Restoration on cancel/refund”Briefly: when an order is cancelled or refunded, what happens to pre-assembled depends on the Keep Assembled on Return setting:
- If on: the cancelled units restore to the BOM’s pre-assembled shelf. Raws are not touched.
- If off: the cancelled units break back down — pre-assembled stays where it is, and raws come back to inventory. (With nuance: nested sub-assemblies have their own flag.)
Full coverage in Refunds & cancellations.
Edge cases & gotchas
Section titled “Edge cases & gotchas”- The shelf can never go negative. Consumption clamps at zero and the remainder pulls from raws. Restoration also clamps — you can’t drive pre-assembled below zero with a botched refund.
- Decimal pre-assembled is supported per-location but the aggregate per-BOM number is integer. For fractional cases, trust the per-location table.
- Failed Shopify writes don’t roll back the shelf decrement. If a Shopify call rejects (rate limit, bad location), the shelf has already moved. Recovery is via manual reconcile or Synchronize with Raw Materials.
- Sub-assembly pre-assembled is separate. A BOM has its own shelf; each sub-assembly inside it has its own. They’re consumed at different layers of the recursive expansion. See Sub-Assemblies → Nesting & execution.
Where to next
Section titled “Where to next”- Refunds & cancellations — what happens when an order goes the other way.
- Settings reference — tie pre-assembled to other toggles.
- Sub-Assemblies → Pre-assembled stock — the same mechanics, one layer deeper.