Skip to content

Audience

Catalog, Procurement, Sales

Products and units

A product (SKU) is the catalog record every order, receipt, and count points to. Each product has one base unit, and can have package conversions that say how a case, master case, dozen, or pallet relates to that base unit. This chapter explains SKU Management, the product form, Manage UOM, what changes when a factor changes, pack prices, and labels and barcodes.


1. The short version

  1. SKU Management (Catalog) lists every product. Product 360 (Inventory > Products) is the read-only view of one product.
  2. New products are born DRAFT. Activate after save. A DRAFT product cannot sell.
  3. Base unit is PCS by default and is fixed after creation. Package conversions (CASE, MASTER_CASE, DOZEN, and others) convert to base pieces.
  4. Changing a CASE or MASTER_CASE factor folds existing stock, pallets, and draft documents into pieces at the old factor. Open documents with case quantities block the change.
  5. Pack prices are wholesale prices by unit. The pricing chapter explains how they resolve.
  6. Labels print from the SKU or a barcode. Barcodes are unique across the company.

2. SKU Management

Open Catalog > SKU Management. The context label reads “Catalog Master Data”, the heading “SKU Management”, and the intro “Create, edit, import, activate, and discontinue SKUs. Product Detail remains read-only Product 360.”

The list columns are Image, SKU, Vendor code, Description, Status, Brand, Base UOM, Retail, Wholesale, Standard Cost, Available, Actions.

  • Buttons: New variant group, New kit, Create SKU. Menu: Export CSV, Download template, Import CSV.
  • Search placeholder: “Search by SKU, item number, description, barcode, vendor item…”
  • A scanner button reads “Scan barcode or QR code”. A scan fills the search box.
  • Status filter: All statuses, Draft, Active, Discontinued.
  • Row actions: Print labels, View 360, Edit, View variant group (if the product has a family), Activate (DRAFT or DISCONTINUED), Discontinue (ACTIVE), Delete (destructive).
  • Delete asks: Are you sure you want to delete “{description}”? On success: Product “{description}” deleted. Delete is a soft delete.

Product 360 is read-only. It shows Basic Info, Marketplaces, Stock Overview, a Locations/LPN tab, and tabs for details, movements, sales orders, purchase orders, and receiving. The details tab shows Package Conversions, Category & Brand, Location, Dimensions & Weight, Pallet Config, Pricing, and Dates & Origin. An edit link reads “Edit in SKU Management →”.


3. Create and edit a product

Create SKU opens the form titled “New Product”, subtitle “Initialize a new catalog SKU draft.” Edit opens “Edit Product”, subtitle “Update SKU attributes, package conversions, and catalog metadata.” After create, the app shows the edit page. After edit, it shows Product 360. Save messages: “Product created” (create), “Product updated” (edit), “Product saved, but image upload failed” (image failed).

SKU & Identification

  • SKU (required), Item Code (required), status chips.
  • “New SKUs are born DRAFT. Activate after save from this chip or SKU Management.”
  • Vendor item codes: “One code per supplier. Codes are unique across this tenant.” Add flow: supplier select, “Supplier item code”, “Add code”, “Cancel”.
  • Legacy banner: “Assign a supplier to keep this code. The loose field is then cleared.” Without Procurement view: “Supplier list is visible to purchasing roles.”

Codes & Scan Identifiers

Alternate barcodes: “Extra doors (FNSKU, relabel). Scanning them identifies this SKU. Unique across this tenant.” Unsaved product: “Save the product first, then add scan identifiers.” Button ”+ Add barcode” with fields “Alternate barcode”, type (FNSKU, RELABEL, VENDOR, LEGACY, OTHER), Active/Inactive, “Deactivate” / “Reactivate”.

Brand, category, material

“Brand Name”, “Sub Brand Name”, “Main Category”, “Subcategory”, “Material Type”.

Description, price, tax

“Description *” (required), “Retail Price *” (with a per-unit select “Per {base}”), “Taxable” checkbox.

Cost (cost holders only)

“Standard Cost” (per-unit select), “Use as standard cost”, “Cost basis history”, “Current cost basis {total} / {base}”, “No receipts yet: margin uses standard cost”. Changing Standard Cost needs Catalog cost_manage. Changing any other field needs Catalog edit.

Lot Tracking

“Require batch number and expiry on every receive confirm. Existing stock is not rewritten.” Warning when untagged stock exists: “Existing stock stays untagged; only new receives are gated.”

Measuring, weight, pallet

  • Length, Width, Height, Meas Type (Inches, cm, m). Volume is auto-computed.
  • Weight, Weight Type (lb, kg).
  • Pallet Configuration: “PLT Type” (“Manage types in Catalog → Pallet Types.”), “Tall (in)”, “Pallet Weight” (placeholder “Empty pallet / tare”), total “(Total Cs / PLT × Weight) + Pallet Weight”, Load Volume (“PLT Type × Tall”), “Cases / Layer (TI)”, “Num of Layers (HI)”, “Stacking Pattern” (“Manage patterns in Catalog → Stacking Patterns.”). “Catalog Pallet Configuration below sets Total Cs / PLT for Sales Orders and shipping estimates. Per-LPN physical build at palletize can still override dimensions on that LPN.”

Marketplaces, image

Marketplaces: “Sold on” (Live / Planned pills). Without Marketplace view: “Channel connections are visible to marketplace roles.” Image: “Select product image”.

Status rules

  • Status transitions: DRAFT to ACTIVE, ACTIVE to DISCONTINUED, DISCONTINUED to ACTIVE.
  • Activation requires an active base unit plus at least one scannable code. A product saved through the app always has one, because the SKU itself counts.
  • DISCONTINUED is read-only: “Discontinued products are read-only. Re-activate from SKU Management first.” Kind cannot change after creation.
  • Discontinue with open purchase orders warns but does not block.
  • A DISCONTINUED product can still sell what is left. It cannot be replenished: no new purchase order, ASN, or receipt.
  • Product kind: STANDARD (stocked) or KIT (sales bundle).
  • Create with a duplicate SKU or item code answers 409 “SKU or itemCode already exists”. SKU, itemCode, and vendor codes are also checked against aliases. Barcodes must be available.
  • Changing price, description, or cost never rewrites existing order lines. A case factor change is different: see section 5. Saved lines keep their price.

4. Base unit and package conversions

Unit codes: PCS, EACH, INNER, PACK, CASE, MASTER_CASE, PALLET, DOZEN. Default base unit is PCS.

Manage UOM opens from Edit Product (“Manage UOM”) and from the banner “Configure UOM” when only the base is set. The banner reads “Configure UOM before activation” / “Only the base unit is set up. Add package conversions so purchasing, sales, ATP display and label printing work correctly.”

The dialog lists UOM, Qty in Base, Label, Barcode, Active, Actions. Help: “Conversions define how package units convert to base inventory UOM. Example: CASE = 24 PCS.” Base-only help: “Use Edit Product to add CASE, INNER, PACK, MASTER_CASE, PALLET, or DOZEN conversions.” Row label format: “CASE (label) = 24 PCS” or “CASE = 24 PCS”.

  • Add: UOM Code dropdown (only unconfigured codes), Qty in Base (minimum 0.0001, defaults 24), Label, Barcode, Barcode Symbology (AUTO, UPC_A, EAN_13, CODE128), Active. Buttons “Add Conversion”, “Save Changes”, “Saving…”, “Cancel”.
  • Edit: UOM code is not changeable. Base-row quantity is locked to 1. Non-base rows can toggle Active. Inactive note: “Check Active to re-enable this UOM, or clear/delete it to free its barcode for another UOM.”
  • Success: “UOM conversion added”, “UOM conversion updated”, “{UOM} conversion deleted”.
  • Errors: “Qty in base must be greater than 0”; “UOM code already exists for this product”; “Base UOM conversion must have qtyInBase = 1”; “Cannot deactivate the base UOM conversion”; “Cannot delete the base UOM conversion”.
  • Delete asks: “Delete {UOM} conversion? This frees its barcode for reuse on another UOM.”

The base unit code is fixed after creation: the form has no base-unit selector. Only the base row’s label and barcode are editable.

Unit barcodes are unique across the company. Deleting a conversion frees its barcode. Reusing a barcode on another unit releases it from inactive conversions.


5. What changes when a factor changes

The safety net applies only to CASE and MASTER_CASE.

  • Non-whole-number factor is refused: “Cannot change the pack conversion for {sku}: the case factor is not a whole number of pieces.”
  • The change is blocked by open documents holding case quantities: purchase order lines on ISSUED or PARTIALLY_RECEIVED purchase orders; CONFIRMED ASN lines; non-DRAFT sales order lines; DRAFT receipt lines; open pick, pack, or ship task lines; open return lines; open wave lines; open channel-return lines (OPEN or RECEIVING); pending inventory movements. Message: “Cannot change the pack conversion for {sku}: {docs}.”
  • If there is no current factor and stock or pallets hold cases: “Cannot change the pack conversion for {sku}: {buckets} hold cases and there is no current case factor to fold them. Count those cases into pieces first.”
  • Otherwise the change folds: stock buckets, pallet lines, DRAFT purchase orders, DRAFT ASNs, DRAFT sales orders (plus their allocations), open transfers (DRAFT or RELEASED), and open cycle counts. Cases convert to pieces at the OLD factor. Case counts are set to 0.

Other units (DOZEN, INNER, PACK, PALLET, EACH) get no folding and no blocking.


6. Pack prices

The “Wholesale prices by unit” section: “The first row is the catalog wholesale price. A pack price is the wholesale price for that unit. The sales line uses it when the unit matches. Retail stays the catalog price in Basic information.”

  • First row: catalog wholesale (amount + unit select “Per {base}”).
  • Pack rows: UOM, Rule (Fixed / Percent off catalog / Cost plus percent), Percent + Ending (None / .99 / .49) for formulas, Price for fixed, Minimum quantity (minimum 1, default 1), Valid from, Valid to (“No end date”), “Add row”, “Save”, “Cancel”, “Show ended prices” / “Hide ended prices”. Ended rows show “Ended”.
  • A pack price needs an active conversion: “No active {uomCode} conversion for {sku}”.
  • Editing pack prices in the app needs Sales price_edit (OWNER, ADMIN, SALES_MANAGER). The “Cost plus percent” option shows only with Catalog cost_view (OWNER, ADMIN, ACCOUNTING_MANAGER, PROCUREMENT_MANAGER). A cost-plus write needs Catalog cost_manage, else 403 “A cost plus price requires cost manage”. Net effect in the app: cost-plus rows are Owner and Admin (need both Sales price_edit and Catalog cost_manage).
  • Without cost_view, a cost-plus row shows as “Formula (restricted)”, read-only.
  • Replace: overlapping open price prompts “Replace the open price with this formula from {date}?” (formula) or the fixed-price replace prompt. Replace / Cancel. Success: “Wholesale price replaced”, “Wholesale price added”, “Wholesale price saved”, “Wholesale price ended”.
  • Every pack-price change is recorded in the audit log. If that record fails, the change is refused: “Price change was not recorded in the audit log”.

How a pack price resolves on a sales line (resolution order, minimum quantity, formula rules, endings, fixed beats formula, saved lines keep price) is in the pricing chapter. This chapter does not repeat it.


7. Labels and barcodes

Alternate barcodes

Alternate barcodes identify the SKU when scanned. They are unique across the company. A barcode linked to a unit must be an active conversion on the product. SKU, itemCode, and vendor codes are also checked against aliases.

“Print Unit Labels” opens from the Edit Product button, the list row action “Print labels”, and bulk “Print selected”. The dialog is titled “Print Unit Labels”.

  • Rows: SKU, active alternate barcodes (type label), active unit conversions with a barcode (DOZEN shown as “Dz”). Rows without a barcode show “(no barcode)” with tooltip “Barcode required for unit labels”.
  • Copies per row (minimum 1), Label size select, “Open Print Sheet”.
  • Empty: “Select at least one SKU to print labels.”

The SKU row encodes the SKU verbatim as Code 128. Alternate and unit rows encode the stored barcode verbatim.

The label sheet: header “{n} label(s) · {size}”; Size select; “Print Labels” / “Rendering codes…”; note “Opens the print dialog directly. Use Scale 100%, Margins None, paper 100×75 mm.” Each label shows SKU, description, “QTY: {qtyText}”, the barcode image, and the human-readable barcode.

Scanning

The list scanner fills the search box. Alternate barcodes: “Scanning them identifies this SKU”.


8. Who can do what on the product screen

The permission registry is the authority for this table.

RoleCan openCan do
OWNERSKU Management, Product 360, create and edit forms, all sections including costview, create, edit, delete, import, export, admin, cost_view, cost_manage; cost-plus rows (via Sales price_edit + Catalog cost_manage)
ADMINSame as OWNERSame as OWNER
MANAGERSKU Management, Product 360, create and edit forms; no cost sectionview, create, edit, import, export; cannot touch cost; cannot edit pack prices (no Sales price_edit)
PROCUREMENT_MANAGERSKU Management, Product 360, create and edit forms, cost sectionview, create, edit, import, export, cost_view, cost_manage; can change Standard Cost; cannot edit pack prices (no Sales price_edit); cannot write cost-plus rows in the app (no Sales price_edit)
ACCOUNTING_MANAGERNo Catalog section; SKU opens only by direct link; cost section visiblecost_view, cost_manage only; can change Standard Cost; cannot edit other fields (no Catalog edit); cannot edit pack prices (no Sales price_edit)
SALES_MANAGERSKU Management, Product 360; form opens read-only for pricesview only on Catalog; CAN edit pack prices via Sales price_edit; cannot see the Cost plus option (no cost_view); cannot change Standard Cost
READ_ONLYSKU Management, Product 360view only
WAREHOUSE_SUPERVISORNo Catalog section, no accessNone on Catalog
WAREHOUSE_OPERATORNo Catalog section, no accessNone on Catalog
INVENTORY_CLERKNo Catalog section, no accessNone on Catalog
MARKETPLACE_MANAGERNo Catalog section, no accessNone on Catalog
ANALYSTNo Catalog section, no accessNone on Catalog

Field-level gates (backend): changing Standard Cost needs Catalog cost_manage, else 403 “Standard cost requires cost manage”. Changing any other field needs Catalog edit, else 403 “Catalog edit is required to change fields other than standard cost”.


9. Quick answers

I cannot open SKU Management. SKU Management needs Catalog view. Warehouse, inventory, marketplace, and analyst roles have no Catalog access. Ask an admin.

I cannot change the base unit. The base unit code is fixed after creation. The form has no base-unit selector. Only the base row’s label and barcode are editable.

I changed a case factor and nothing changed. A factor change folds stock, pallets, and draft documents into pieces at the old factor. Case counts go to 0.

The factor change was blocked. An open document holds case quantities: a purchase order, ASN, sales order, receipt, pick/pack/ship task, return, wave, channel return, or pending movement. Close or finish it, then retry.

I cannot add a pack price for a unit. The unit needs an active conversion first: “No active {uomCode} conversion for {sku}”. Add the conversion in Manage UOM, then add the price.

I cannot see the Cost plus option. Cost plus needs Catalog cost_view. It shows for Owner, Admin, Accounting Manager, and Procurement Manager. Writing one needs cost_manage plus Sales price_edit, so in the app cost-plus rows are Owner and Admin.

The barcode is already used. Barcodes are unique across the company. Delete the conversion that holds it, or reuse it on another unit (which releases it from inactive conversions).

I deleted a SKU by mistake. Delete is a soft delete. The app has no restore.