Skip to content

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.

  • 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)

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.

When an order for N units arrives:

  1. Pre-assembled is consumed first. Up to min(available, N) come off the shelf.
  2. The remainder pulls from raws. If N > available, the extra is sourced from sub-assemblies and raw materials normally.
  3. The shelf decrement is logged in preAssembledConsumption[] on the execution log row.

Here’s how it plays out for different combinations:

Order qtyPre-assembled beforeConsumed from shelfRemainder from rawsPre-assembled after
310307
55500
15101050
40040

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.

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.

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.

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.

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.

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.

  • 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.