Help
System Overview
Workshop Inventory is a self-hosted inventory and light manufacturing system for products, serialized items, and bulk stock lots.
It helps you answer: what you own, where it is, how much is available, what you can build now, and what your historical cost/profit is.
Inventory quantity is ledger-based (from stock movements) and planning respects reservations, BOM structure, and procurement rules.
Quick Navigation
- Create or Add Products
- Create a Bill of Materials (BOM)
- Create Work Orders
- Create Requisitions
- Create Purchase Orders
- Inventory Math and Planning Formulas
- Serialized vs Bulk Decision Guide
- Status Lifecycle Reference
- How Scan Resolution Works
- Reservations and Availability
- BOM Behaviors and Versions
- Receiving, Acquire, and Idempotency
- Location Behavior
- Glossary
- Frequently Asked Questions
Create or Add Products
- Open New Product.
- Enter product basics such as title, manufacturer, and MPN.
- Add identifiers (UPC, EAN, SKU, serial, or internal code) so scans resolve quickly.
- Save the product, then add inventory as serialized items or stock lots from product detail.
- Use header scan to open an existing product or start a new create flow if not found.
Create a Bill of Materials (BOM)
- Open BOMs and create a BOM for a finished product.
- Add component lines with required quantity per build unit.
- Mark each component as
makeorbuyplanning behavior. - Set or activate the correct BOM version when you have alternatives.
- Use BOM details to confirm required components before planning work.
Create Work Orders
- Open Work Orders and select New Work Order.
- Choose the finished product and BOM version to build.
- Enter target quantity and run requirements planning.
- Review shortages:
buyitems become requisitions,makeitems can create child work orders. - Execute the work order to consume components and produce finished stock with cost snapshots.
Create Requisitions
- Open Requisitions.
- Most requisitions are generated automatically from work-order shortages for
buycomponents. - Filter by status or source work order to review open demand.
- Select open requisitions and convert them into a purchase order batch.
- Track each requisition through open, converted, and fulfilled lifecycle states.
Create Purchase Orders
- Open Purchase Orders and create a new PO, or convert from requisitions.
- Set supplier details and expected dates.
- Add or verify PO lines and unit prices.
- Receive lines to create stock lots and record cost at receipt time.
- Use PO detail history to audit what was ordered and received.
Inventory Math and Planning Formulas
On-hand = SUM(stock_movements.delta_qty)
Available = On-hand - Reserved
MRP Net Available = On-hand - Reserved + Incoming Confirmed
Incoming confirmed means remaining quantity on POs in ordered or
partially_received status.
Serialized vs Bulk Decision Guide
Use Serialized Items when:
- Each unit has a unique identity (serial number, individual condition, separate test history).
- You need resale/testing history per unit.
- You track status transitions like
in_stock -> listed -> sold.
Use Stock Lots when:
- Units are fungible (resistors, connectors, screws, thermal pads).
- You manage quantity through the stock movement ledger.
- You consume by quantity for manufacturing and kitting.
Status Lifecycle Reference
Item statuses (common UI lifecycle)
in_stock,listed,defective,sold,scrapped
Work order statuses
planned,ready,partial,completed,cancelled
Requisition statuses
open,converted,cancelled
Purchase order statuses
open,ordered,partially_received,received,cancelled
How Scan Resolution Works
- If a QR code matches a location label (
LOC-001,LOC-0001, etc.), you are sent to that location edit page. - If the code matches a known item identifier, you are sent to that item.
- If it matches a known product identifier, you are sent to that product.
- If unknown, the system routes to new-product create with prefilled identifier/scheme.
- QR scans may fall back to UPC/EAN or MusicBrainz release id when patterns match.
Reservations and Availability
- Reservations reduce available quantity but do not reduce on-hand quantity.
- Work-order reservation checks are lock-based to avoid oversubscription.
- If a reservation exists for a reference, new planning reflects that reserved quantity.
- Buildability checks use availability, not raw on-hand.
BOM Behaviors and Versions
- Only one BOM revision should be active for production planning at a time.
- Optional lines are excluded from mandatory shortage calculations.
- BOM explosion recursively expands component requirements.
- BOM cycles are blocked to prevent invalid recursive plans.
Receiving, Acquire, and Idempotency
- PO receiving uses idempotency keys to prevent duplicate receipt from retries.
- Acquire flows also use idempotency to avoid double-creating inventory records.
- If a request is retried with the same key, the stored response is returned.
Location Behavior
Locations page
- Use the Locations page for location management.
- Locations are hierarchical (room/rack/shelf/bin/container patterns).
- Location is operational metadata and does not change financial correctness.
- A stock lot has one active location assignment at a time.
- The All Locations table shows leaf locations only (parents with children are hidden).
- Use the live Search Paths box to filter by any path element and paginate large lists.
- Each path segment is clickable so you can jump directly to that path element's edit page.
Location codes, paths, and scanning
- Location labels use
LOC-with at least 3 digits (LOC-001and up). - Digit length automatically expands beyond 3 digits as location ids grow.
- On Locations page scan, you can scan or enter either a location code or an exact location path.
- The header scan box also resolves location QR labels and opens the location edit page.
Edit location page
- Editing is page-based (not a popup), which avoids modal overlap on mobile and desktop.
- Set default location from the edit page with the Set as default location checkbox.
- Download the location QR label from the edit page.
- Location type is selected from a sorted dropdown (with Other for custom types).
Add Product To This Location
- Select a product and targets auto-load immediately (no extra load button).
- You can also scan an item/product code to pre-load assignment targets.
- Update selected serialized items and/or stock lots to this location.
- If needed, use Move all serialized items for this product to bulk move active serialized inventory.
Glossary
- BOM
- Bill of Materials. The structured list of components required to build one unit of a product.
- BOM Explosion
- Process of expanding a BOM into all required components and quantities for a target build quantity. Read full guide.
- On-hand
- Total quantity from stock ledger movements before reservations are subtracted.
- Reserved Quantity
- Quantity committed to references (for example work orders), unavailable for new allocation.
- Available Quantity
- Quantity that can still be allocated now: on-hand minus reserved.
- Net Available (MRP)
- Planning quantity: on-hand minus reserved plus confirmed incoming from active POs.
- Stock Movement
- Append-only ledger entry that changes lot quantity by delta amount.
- Stock Reservation
- Allocation record that protects quantity for a specific reference without mutating stock counters.
- Procurement Type
buymeans source externally;makemeans plan internal build.- Incoming Confirmed
- Remaining PO quantity expected from
ordered/partially_receivedpurchase orders. - Idempotency Key
- Client-generated key used to safely retry operations like receive/acquire without double posting.
- Work Order
- Manufacturing instruction to build a quantity of a finished product using a chosen BOM. Read full guide.
- Work Order Execution
- A specific build run that records quantity built, production output, and component consumptions.
- Requisition
- Internal demand record that requests purchasing for missing
buycomponents. - Purchase Order (PO)
- Supplier-facing order that tracks what you intend to buy, price, and receiving status.
- PO Receive Event
- Idempotent receive transaction record tied to a purchase order receipt payload and response.
- Item Status Event
- Historical log entry recording item status transitions over time.
Frequently Asked Questions
What are requisitions?
Requisitions capture purchasing demand for shortages, usually created during work-order planning for buy parts.
How do BOM versions work?
A product can have multiple BOM versions. Use versions to model alternates or revisions, and choose the intended version when creating a work order.
What is BOM explosion used for?
It calculates exact component demand from planned build quantity, so the system can detect shortages and trigger downstream requisitions or child work orders.
Why does available quantity differ from on-hand?
Because available subtracts active reservations, while on-hand is the raw ledger quantity.
Why did planning create requisitions for some parts but child work orders for others?
Shortage handling follows procurement type: buy creates requisitions, make creates child work orders.
Why can I fail a build even when stock exists?
Stock may be reserved elsewhere, requirements may include mandatory non-optional lines, or the selected BOM/version may differ from expectation.
What happens if I click Receive twice?
Receive endpoints use idempotency keys so retried requests return a safe prior response instead of double-receiving.
Can two products share the same identifier?
No. Identifier scheme/value pairs are unique in the product catalog.
Why is a requisition still open after creating a PO?
Open quantity can remain when requisition demand is only partially ordered or when conversion was not completed for that requisition.
Why are quantities ledger-based?
On-hand quantity is derived from stock movements, which preserves audit history and prevents silent counter drift.