Item Types & Service Catalog — the main screen
drop a screenshot at assets/screenshots/guides/item-type-service-catalog.png to replace this
1. SETTING AN ITEM'S TYPE — STEP BY STEP
- Inventory → Products → Add Item (or open an existing item and Edit). The Item Type selector sits in the Physical Attributes section of the form, alongside weight/dimensions.
- Choose Inventory, Non-Inventory, or Service. The form updates live: choosing Non-Inventory or Service immediately hides opening stock, warehouse/rack, batch tracking, serial tracking, and QC-required — there's nothing to fill in for fields that don't apply.
- Save as normal. The Products list shows Item Type as a real table column (toggleable via the column-visibility control like any other column) and as its own "Filter by Item Type" dropdown option, so a catalog mixing hundreds of physical SKUs with a handful of service lines can be filtered down to just one kind in a click.
graph LR A["New / Edit Item"] --> B["Inventory"] A --> C["Non-Inventory"] A --> D["Service"] B --> E["Stock-tracked, ships"] C --> F["Physical, not stocked"] D --> G["No stock, ever"]
2. WHAT CHANGES ON A SERVICE / NON-INVENTORY ITEM
- Add/Edit Item form: the whole stock-related section — opening stock, rack/warehouse, batch/serial tracking, QC required, dimensions/weight-based shipping fields — hides itself.
- Sales Order fulfillment (the one-click "Mark as Fulfilled" flow, and the equivalent step reached via Convert to Fulfilled from a Quotation or Job — see the Leads & Direct Conversions guide): a Service/Non-Inventory line is still invoiced normally and still appears on the Material Issue/Delivery Order/Invoice paperwork, but it never generates an inventory movement — there's no stock to deduct.
- Approving a Sales Order: a Service/Non-Inventory line is never reserved against stock. Closing or deleting an order correctly never tries to "give back" stock for a line that was never taken from stock to begin with.
- Products list / product detail page: Item Type shows as its own field, filterable and toggleable like any other column.
Worth flagging: this is a different thing entirely from the item's own After-Sales Service section (Warranty/Guarantee + days) elsewhere on the item form — that's a warranty attached to a *physical* product you still stock, not the item's own stock-tracking type.
3. WOOCOMMERCE EXPORT
WooCommerce has no native "service" product type — its own types are simple/grouped/external/variable — so the correct equivalent, and what this feature actually pushes, is a simple product marked `virtual` with stock management turned off. That's what makes WooCommerce hide shipping-related fields for the listing and stop tracking a stock count for it, exactly like this catalog now treats it locally. It applies on both the Products export stage and the periodic Stock sync stage, so a later stock-only sync run doesn't accidentally re-enable stock management on a Service item.
4. HOW IT CONNECTS TO THE REST OF THE SYSTEM
- Sales Orders, Quotations & Jobs — a Service/Non-Inventory line can be added, priced, discounted, and taxed exactly like any other line on any sales document; the only difference is it never touches stock.
- Service & Job Templates — a saved template can freely mix Inventory, Non-Inventory, and Service lines (a "Standard Installation Package" might be one physical part plus one labor line), and starting a Quotation/Job from it carries that type-driven behavior through automatically.
- Bill of Materials & Production — Item Type is independent of the Raw Material/kit flag; a Service item is never a valid BOM component, since there's nothing physical to consume, so it simply doesn't appear in BOM component pickers.
- Reorder Planning & Stock Reports — Service and Non-Inventory items are excluded from reorder-point calculations, available-to-promise, and stock-health reporting, since none of those concepts apply to a line with no physical form.
- WooCommerce / ecommerce integrations — see section 3 above.
5. WHY IT SCALES FROM SMB TO ENTERPRISE
Small business / solo service provider
Every item can just be Service — no stock module to configure, no warehouse to set up, just billable line items.
Growing business
A mixed-catalog business — repair shop, installer, consultancy with deliverables — tags exactly the items that need stock tracking as Inventory and leaves everything else Non-Inventory/Service, with no need to fake a "phantom" stock item just to bill a fee or a labor line.
Enterprise / multi-location
Reorder planning, available-to-promise, and stock reports stay clean and accurate because Service/Non-Inventory noise is excluded at the data model level, not filtered out ad hoc in every single report.
6. SETTINGS
None — Item Type is always available on every item, the same as any other catalog field. There's no separate on/off toggle to turn this feature on for a business.
7. BILL OF MATERIALS / PRODUCTION ORDER ELIGIBILITY (added 2026-08-07)
This is a SEPARATE axis from Item Type — easy to confuse, since both get informally called "item type" in conversation:
no_vendor = 1 -> produced in-house, not bought from a supplier no_vendor = 0 -> sourced from a supplier (purchasable)
It's set via the "Raw material (production item, no supplier)" checkbox on the item's Add/Edit form. This flag, NOT Item Type, is what actually gates whether an item can be manufactured:
- Bill of Materials "what am I building" picker and Production Order's own target picker: only items with no_vendor=1 are selectable, and Item Type must not be Service — a service can't be manufactured.
- Bill of Materials material/component picker and Production Order's own material picker: only items with no_vendor=0 (or unset) are selectable, and Item Type must not be Service — a service can't be a physical input material either.
- The Purchase Order item picker already excludes no_vendor=1 items, since you don't buy from a supplier what you make yourself — this was already correct before 2026-08-07, so no change was needed there.
Before 2026-08-07, the Bill of Materials pickers had no filtering at all — any item, including Service-type or vendor-purchased items, could be added as a BOM target or material — while Production Order's own pickers already had the correct no_vendor filter. BOM now matches Production Order's already-proven pattern.
Item Type = Inventory is not itself required for BOM/Production eligibility (Non-Inventory items with no_vendor=1 are still allowed — an in-house-assembled kit you don't hold as countable stock, say) — only Item Type = Service is excluded, since a service categorically cannot be manufactured or consumed as a material.
8. SERVICE TEMPLATES — DELIBERATELY UNRESTRICTED (added 2026-08-07)
service-template.php's item picker does NOT filter by Item Type, and that's intentional, not a gap: a Service Template legitimately bundles a mix of Service-type labor lines and physical Inventory materials in one reusable package — an "Installation Package" might be 2 hours labor plus 3 mounting brackets. Restricting the picker to Service-only items would break that. Service-type items were already fully pickable here before 2026-08-07 — confirmed no exclusion ever existed.
9. SHOPIFY / BIGCOMMERCE EXPORT (added 2026-08-07)
WooCommerce export already handled Service/Non-Inventory items correctly (manage_stock=false, virtual=true — see section 3). Shopify and BigCommerce had no equivalent handling before 2026-08-07:
- Shopify has no separate "virtual product" flag; instead each variant carries requires_shipping. Export now sets requires_shipping=false on the variant whenever Item Type is Service or Non-Inventory, mirroring WooCommerce's own predicate.
- BigCommerce supports inventory_tracking: 'none' for non-stock items. Export now sends that value — instead of the always-on 'variant'/'product' it sent before — for the same Item Type predicate.
Both changes are export-payload-only: no schema change, no backfill, and they apply to future sync runs only, per the "new entries going forward" scope this pass was done under.
Quick Reference
Set an item's type ........................ Product Add/Edit form >
Physical Attributes > Item Type
(also editable on product.php's
own Edit form as of 2026-08-07)
Filter the Products list by type . Products list > Filter by Item Type
Show/hide the Item Type column .... Products list > column-visibility
control
WooCommerce export behavior ....... Integrations > WooCommerce (applies
automatically, no separate toggle)
Shopify export behavior ........... Integrations > Shopify (applies
automatically, no separate toggle)
BigCommerce export behavior ....... Integrations > BigCommerce (applies
automatically, no separate toggle)
"Produced in-house, no supplier" .. Product Add/Edit form > "Raw material
(production item, no supplier)"
checkbox (sets no_vendor=1) --
this, not Item Type, gates BOM/
Production Order eligibility