G Gaia

Switch factory

CYTO-11 — Balakong Jaya CTSB CYTO-29 CTSB CYTOWELL-54 — Taming Jaya PIC/S CTWSB CYTOCNGZ-602 — Guangzhou CTCNGZ

Only factories you are granted appear here (Filament tenant menu).

Leo Lim

leo@navi.my · Owner / Admin

Profile settings Change password

Theme

Sign out
RetailSellR&DMakeBuyStockPlanItemsGMPAdminInsights

← 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 codeSKU (optional)List priceFloor 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_iditems.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.