Units of Measurement
Every raw materialRaw materialThe atomic component of a BOM or sub-assembly. Two flavors: a Shopify-linked variant (inventory tracked in Shopify) or a virtual material (DO-side inventory only). Both kinds appear in the same component picker and are consumed identically when a BOM fires — except virtual materials never trigger a Shopify call.
Read more →
has a unit — the label that appears next to its quantity in BOMs, work orders, picklists, and execution logs. Assemblified ships with 15 common units (pcs, kg, m, L, m2, …) and lets you define your own when those don’t fit.
The unit field is cosmetic for the math — the rollup, inventory, and execution code work the same regardless of label. But it’s the first thing operators see on a picklist, so picking the right one matters.
On this page
Section titled “On this page”- The built-in unit list
- Adding a custom unit
- System units vs custom units (what you can hide vs delete)
- Categories — what they’re for today and tomorrow
- Common gotchas
Built-in units
Section titled “Built-in units”Fifteen units are seeded automatically the first time you launch Assemblified:
| Category | Units |
|---|---|
| Count | pcs |
| Weight | kg, g, mg, lb, oz |
| Length | m, cm, ft, in, yd |
| Volume | L, mL, m3 |
| Area | m2 |
Each built-in unit ships with translations for all five app languages (English, German, Spanish, French, Hindi). The dropdown label adapts to the operator’s language preference automatically — pcs reads as “Pieces”, “Stück”, “Piezas”, “Pièces”, “टुकड़े”.
Adding a custom unit
Section titled “Adding a custom unit”When the built-in list doesn’t cover what you need — boxes of 12, rolls, bobbins, hours of labour, sheets, batches — define your own.
- Go to Settings → Units in the app sidebar.
- Click Add Unit.
- Fill in:
- Symbol (required, max 16 chars) — what shows in the dropdown and on rows. e.g.
box,roll,hours. - Name (required) — the human-readable label. e.g.
Box of 12,Roll,Operator hours. - Category (optional) — see Categories below.
- Symbol (required, max 16 chars) — what shows in the dropdown and on rows. e.g.
- Save. The new unit appears in the dropdown immediately, alongside the built-ins.
Custom units have no translations — they always render as the Name you entered, regardless of the operator’s language. If you need a multilingual custom unit, name it neutrally (e.g. just Box rather than Box of 12).
Creating units during raw-material import
Section titled “Creating units during raw-material import”You can also create custom units in-flight when importing raw materials. If your uploaded CSV or XLSX contains unit symbols Assemblified doesn’t recognise, the upload preview surfaces a “Create missing units of measure during import” checkbox listing the unknown symbols. Tick it and submit — the symbols are created as custom units before the materials are saved, so the upload doesn’t have to be re-done after stopping to add units manually.
System units vs custom units
Section titled “System units vs custom units”The two row types behave differently when you try to delete or rename them:
| System unit (built-in) | Custom unit | |
|---|---|---|
| Hard-delete | Never. Hidden (isActive=0) only. | Yes, if no raw material references it. |
| Soft-delete (hide) | Yes. Removes from dropdown; keeps the row for historical references. | Yes, if any raw material still uses it. |
| Rename the symbol | Allowed if not in use. Blocked with a 409 if any raw material references the current symbol. | Same. |
| Rename the display name | Always allowed. | Same. |
In practice: if you delete a unit that’s still on raw materials somewhere, it gets hidden instead of removed — so historical execution logs and rows referencing it continue to render correctly. You can re-activate it later by editing the row and toggling Active back on.
Categories
Section titled “Categories”Each unit has a category: weight, length, volume, area, count, temperature, or custom. Custom units default to custom.
Today the category is purely a grouping field — it appears as a badge in the table and doesn’t affect any execution math. It’s there so a future feature can validate dimensional sanity for unit conversions (no kg → m).
The unit_conversions table stores multiplicative factors (1 kg = 1000 g) between units. Today these factors do one job: when you change a referenced material’s unit, Assemblified uses the factor to convert that material’s existing recipe quantities — see Unit conversions for the full flow and where to define them. You can add a missing factor inline the moment a unit change needs one. They are not applied while you enter recipe quantities or at execution time — a quantity you type is taken at face value in the material’s current unit. So if a BOM consumes 0.5 kg of a material stocked in grams, still model it as 500 g directly.
Where the symbol shows up
Section titled “Where the symbol shows up”After you pick a unit on a raw material, its symbol appears in:
- Raw material list / detail page — next to unit cost (“$10 / kg”).
- BOM composition — beside each component’s required quantity.
- Work order picklist — the operator-facing print/PDF.
- Material requirements panel on execution logs.
- Build runs — actual-consumed entries.
Changing the unit on a raw material re-renders all of these. When the material is referenced by at least one BOM or sub-assembly, Assemblified asks how to apply the change before saving:
- Convert recipe quantities (default) — every recipe quantity is recalculated by the conversion factor, so
250 cmbecomes2.5 mand the physical requirement is preserved. - Convert unit cost (optional, editable-cost materials only) — recalculates the unit cost for the new unit so the total cost stays put.
- Change unit only — the display-only escape hatch: relabels without touching any number.
If no multiplicative conversion exists for the old → new pair, the dialog blocks Convert and offers to add the conversion inline (or fall back to Change unit only). The 1000× footgun only bites if you deliberately pick Change unit only on a kg → g switch without also multiplying the quantities yourself.
→ Full walkthrough — defining conversions, the bulk-edit path, and the import (convert-else-fail) behavior: Unit conversions.
Common gotchas
Section titled “Common gotchas”- The symbol is the stable identifier. Internally, raw materials store the unit as a plain string (
"kg","box"). Keep symbols short, lowercase-ish, and stable. Reserve the Name field for the friendly description. - Conversions apply on unit change, not at execution. When you change a referenced material’s unit, Assemblified offers to convert its recipe quantities by the stored factor. But a quantity you type into a recipe is still taken at face value in the material’s current unit — there’s no live execution-time conversion. Keep recipe quantities in the same unit as the raw material.
- Deleting a system unit just hides it. That’s intentional — historical execution logs reference unit symbols by string, and yanking
kgwould mangle every old log that mentions it. - Custom unit translations don’t exist. If your shop runs in multiple languages, a custom
Box of 12will read asBox of 12in the German UI as well. Only the 15 system units have built-in translations. - Existing data isn’t touched. When you upgrade to a version that has this feature, every raw material already using
kg/pcs/ etc. continues to work — those values match the seeded system units’ symbols exactly.
Where to next
Section titled “Where to next”- Virtual materials — units are most often picked when creating a virtual material.
- Unit conversions — define conversion factors and safely change a referenced material’s unit (convert quantities + cost instead of relabelling).
- Weight — the
weight-category units in action, plus the calculated BOM / sub-assembly weight roll-up. - Track building cost — using a custom
hoursunit (orpcsas a stand-in) for labour modelling. - Raw materials overview — back to the section root.