← Products / New
New item
General
A service is a sell-only item — a price with no stock, no recipe/BOM and no FEFO. Books revenue at zero COGS.
House prefix SVC- for service items — stored as variants.sku.
Optional list price; leave blank to price the service live on each quote / SO line.
Services fall under SST (services) — a separate scope from the goods SST on product lines.
Mandatory master classification — separate from the sell/make Type above.
Admin-locked 5-group tree → ~22 categories. Origin is its own field, not baked into the name.
Authoritative country of origin (NPRA) — inherited by every BOM line that uses this material.
Admin-locked units list (pcs, mg, g, kg, ml, L) — staff pick, never type.
Conversions are built-in — staff never type units. 1 kg = 1,000 g = 1,000,000 mg · 1 L = 1,000 ml (hard-coded, not editable even by admin).
Variants
House convention: batch-year codes (2026-01) for products; supplier codes for materials.
| Variant code | SKU (optional) | List price | Floor price (owner) | |
|---|---|---|---|---|
Stock defaults
Project Gaia — static mockup in Filament v3 idiom. No backend. Filament CreateRecord with variants Repeater; on save: items row + one variants row per repeater line; success Notification then redirect to index (Create) or to the record's Recipe tab (Create & add recipe). Floor price column is owner-role-only (floor-price lock: sales below floor need owner approval).
Item classification writes four fields: items.item_type (raw_material | packaging | finished_good | consumable, mandatory) · items.category_group_id → items.category_id via the grouped, admin-locked Select (<optgroup> = the 5 groups, options = the ~22 categories) · items.origin_country (NPRA country of origin, inherited by BOM lines) · items.customer_supplied (bool, shown only when item_type = packaging — customer-paid, RM0 cost). UoM stays admin-locked (units picked, never typed; conversions hard-coded).
Service branch: when Type = Service the form writes items.type = service and collapses to name + code (variants.sku, SVC- prefix) + optional default price + tax scope (SST — services) + description. No stock/BOM path: the item_type / category / origin / UoM pickers, batch-tracking, the Variants repeater and Stock defaults are all suppressed. With no stock movements there is no derived cost — variants.default_cost (usually 0) stands in, so service lines book revenue at zero COGS. Opening this form as product-new.html?type=service preselects the Service segment via the x-data init() hook, and Create redirects to the Services list.