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&DMakeBuyStockPlanItemsGMPOpsAdminInsights
← Sales orders / NVMSB-0309

NVMSB-0309

Sales order · Open · Rank 10
Sales items Not available Ingredients Expected 2026-05-09 Production Make… Invoice Invoiced Delivery Not shipped
Print confirmation
Customer
NatusVincere Marketing Sdn Bhd
Entity / series
NVMSB (NVMSB-{seq})
Created date
2026-03-09 by Kevin Wong
Delivery deadline
2026-05-08
Location
11, Balakong Jaya · CTSB
Currency
MYR
Invoice status
Invoiced flag only — accounting lives in QuickBooks, no invoice documents in Gaia
Customer ref #
PO-NV-2317 printed on confirmation & packing slip
Bill to
NatusVincere Marketing Sdn Bhd 23, Jalan PJU 5/11, Kota Damansara, 47810 Petaling Jaya, Selangor
Ship to
Same as billing address printed on the packing slip

Lines

5 lines (4 products + 1 service) · availability computed at 11, Balakong Jaya
# Product Qty Unit price Disc % Tax Line total Availability Production
1 Apple Fiber / 2025-01 End Product 1,120 pcs 9.45 MYR 0% SST 0% 10,584.00 MYR In stock — from stock
2 [2024-02] Double Root Coffee / 2024-02 End Product 16,800 pcs 7.50 MYR 0% SST 0% 126,000.00 MYR Not available NVMSB-0309 / 2 · WIP
3 [2024-04-Hologram] JuicyPop / 2024-04-Hologram End Product 5,917 pcs 4.32 MYR 0% SST 0% 25,561.44 MYR Not available NVMSB-0309 / 3 · WIP
4 Aiternanthere Sessillis Tea Bag End Product 1,000 pcs 2.80 MYR 0% SST 0% 2,800.00 MYR Not available
5 Manufacturing / tolling fee Service 1 8,500.00 MYR 0% SST 0% 8,500.00 MYR — no stock — revenue only
Total units 24,837 pcs
Subtotal — incl. 8,500.00 service (revenue, zero COGS) 173,445.44 MYR
Shipping fee — own fleet, delivery included 0.00 MYR
Tax (SST 0% — supplements exempt) 0.00 MYR
Total 173,445.44 MYR = Σ(qty × price × (1 − disc)) + shipping + tax

Delivery

1 shipment All shipments →
Shipment # Route Carrier Tracking # Packages Status Shipped
SHP-26040Packing slip ↗ Balakong → KL DC Own van — own fleet 8 / 96 In delivery 2026-07-07

Pack flow: "Pack & deliver" picks finished-goods batches (FEFO suggested) for each line — the chosen lot numbers print on the packing slip and post so_fulfillment movements. COGS is booked at that moment from the FG moving-average cost.

SHP-26040 is a Gaia demo shipment created after the snapshot (SO chip still "Not shipped" as of 2026-04-12).

Demand chain

SO line → MO → PO (when materials are short)
Line 1 · Apple Fiber × 1,120 In stock — FG batch picked at packing
Line 4 · Sessillis Tea Bag × 1,000
MOs auto-number as {SO#} / {line}. The header "Ingredients — Expected 2026-05-09" chip is the latest expected-arrival date across the open POs covering MO shortages — one day after the 2026-05-08 deadline, which is why the deadline renders red.

Order journey

enquiry → delivered · one stamped step at a time Running days · in

Every step is stamped as it happens — this just stitches them together so you can see where the order is and how long each stage took.

Cycle so far: days enquiry 2026-02-24 → today · still open — running days · in Derived read-model — no new data entry.

Customer messages (portal)

Vincent Yap · Yes Global · order thread 1 unread
Any update on the shipping window for the 20k run? Our promo starts Aug 1.

Vincent Yap (customer) · 2026-07-06

Materials landed — production resumes this week. Realistic dispatch 24-26 Jul.

📷 line-fl01-run.jpg

Kevin — Sales · 2026-07-07

Noted, thanks. Please prioritise the 500mg variant.

Vincent Yap (customer) · 2026-07-07

Confirmed — 500mg first off the line. Journey rail above will tick as it moves.

Kevin — Sales · 2026-07-08

🙏

Vincent Yap (customer) · 2026-07-08 · unread

We usually reply within 1 business day.
Customer sees this thread at love.navibio.tech · text is always escaped · never paste prices or internal notes — the thread is customer-visible by definition.

Notes

additional info — printed on the order confirmation

Deliver lines 1–3 together to KL DC; line 4 may follow separately. Include halal certs and CoA per FG batch with the shipment documents.

Customer PO PO-NV-2317 covers all four lines — quote this reference on the confirmation, packing slip and correspondence.

Project Gaia — static mockup in Filament v3 table idiom. No backend. Sample data: Katana tenant snapshot 2026-04-12, location 11, Balakong Jaya. Order header, MO links and total are real; line quantities for lines 2–3 are real MO quantities; unit prices and lines 1/4 detail are illustrative, consistent with the captured 164,945.44 MYR product subtotal. Line 5 (Manufacturing / tolling fee, 8,500.00) is an illustrative service line — revenue at zero COGS, no stock movement — bringing the total to 173,445.44 MYR.

Sales order detail — field manifest

Filament SalesOrderResource ViewRecord page: Infolist (key facts) + header Actions + RelationManagers: LinesRelationManager (so_lines), ShipmentsRelationManager (shipments), demand-chain ViewEntry.

FieldFilament componentTypeSourceFK target
Order #TextEntry (title) / TextInput on editstring, user-editable series NVMSB-{seq}stored: sales_orders.number
CustomerTextEntry::url() / Select::relationship on editFKstored: sales_orders.customer_idcustomers.id
Customer ref #TextEntry / TextInput on editstring, nullablestored: sales_orders.customer_reference — printed on the order confirmation and packing slip
Bill to / Ship toTextEntry ×2 / Select::relationship on editFK ×2, nullablestored: sales_orders.billing_address_id / shipping_address_id — Ship to falls back to billing ("Same as billing address"); the packing slip prints Ship tocustomer_addresses.id
Created date / byTextEntry::date()date + FKstored: sales_orders.created_at, created_byusers.id
Delivery deadlineTextEntry::date()->color(fn) red when at riskdatestored: sales_orders.delivery_deadline; red = ingredients ETA > deadline or overdue
LocationTextEntryFKstored: sales_orders.location_id (scopes availability)locations.id
CurrencyTextEntrystringstored: sales_orders.currency (MYR)
RankTextEntry; reorderable() on listintstored: sales_orders.rank — manual stock-allocation priority
Invoice statusTextEntry::badge() + Action (toggle)enum Not invoiced / Invoicedstored FLAG ONLY: sales_orders.invoice_status — accounting in QuickBooks, Gaia stores no invoice rows
Delivery statusTextEntry::badge() + Action dropdownenumstored: sales_orders.delivery_status (Not shipped / Ready for packing / Packed / Partially delivered)
Line: Product / serviceTextColumn::url() / badge (relation manager)FK — one of twostored: so_lines.variant_id (product line — stock movement + COGS) OR so_lines.service_item_id (service line — Service badge, no movement, revenue only); exactly one set per linevariants.id / service_items.id
Line: ServiceTextColumn + Service badgeFK, mutually exclusive with variant_idso_lines.service_item_id (Manufacturing / tolling fee · R&D / formulation development) — no lot / FEFO, no Availability chip, no Production / MO; never writes to stock_movements; qty × unit price books revenue at ZERO COGS (row 5 = 8,500.00 here)service_items.id
Line: QtyTextColumn::numeric()qty + variant UoM (pcs)stored: so_lines.quantity
Line: Unit priceTextColumn::numeric()money MYRstored: so_lines.unit_price
Line: Disc %TextColumn::numeric()numeric, default 0stored: so_lines.discount_percent — net unit price after discount must still respect the floor price
Line: TaxTextColumnFKstored: so_lines.tax_rate_id — tax_rates seeded with SST 0% and '5% - Sales Tax', tenant-configurable default (SST 0% across this snapshot)tax_rates.id
Line: Line totalTextColumn::numeric()->summarize(Sum)money MYRderived: qty × unit_price × (1 − disc) — for products and services alike; order Total = Σ line totals + shipping fee + tax = 173,445.44 (164,945.44 products + 8,500.00 service)
Shipping feeTextInput group (tfoot row)string / money / FKstored: sales_orders.shipping_fee_description / shipping_fee_amount / shipping_fee_tax_rate_id (0.00 here — own fleet, delivery included)tax_rates.id
NotesTextarea / RichEditor (Infolist section)rich text, nullablestored: sales_orders.notes — additional info printed on the order confirmation
Line: AvailabilityTextColumn::badge()derived chipderived: line qty vs FG in-stock at location (In stock / Not available). Service lines have NO availability chip (— no stock) — a service never touches the stock ledger / FEFOstock_movements
Line: ProductionTextColumn::badge()->url() or Action "+ Make"FK, nullablestored: so_lines.mo_id; "+ Make" creates MO numbered {SO#} / {line}. Service lines have no MO (— revenue only) — nothing to producemos.id
Add line (CreateAction)LinesRelationManager CreateAction modal (2-col form)so_lines insertstored: so_lines(variant_id, quantity, unit_price ≥ floor after discount, discount_percent, tax_rate_id); availability chip recomputes vs FG at location; a new line with no stock surfaces a "+ Make" action numbered NVMSB-0309 / 5variants.id / tax_rates.id → mos.id
ShipmentsShipmentsRelationManager tablerowsstored: shipments.so_id; packing picks FG batch_ids → lot numbers on packing slip; shipments.tracking_number nullable ("— own fleet" when self-delivered)shipments / shipment_lines
Order journeyInfolist timeline ViewEntry (read-only rail)DERIVED read-modelDERIVED — no new table: unions deal_activities (enquiry) + quotes.sent_at + sales_orders.created_at / confirmed_at + mos + bmr status + shipment_events + sales_orders.invoice_status into one ordered rail; per-hop "days" = elapsed days between consecutive hop timestamps; total = enquiry → delivered; pending hops render faded until their event firesreads across deals / quotes / sales_orders / mos / shipments
Customer messages (portal)ViewEntry thread + reply Action (decorative)R/W — append-onlystored: portal_messages(sales_order_id, sender enum customer|staff, customer_user_id / user_id — exactly one set, body text max 2000, read_at, created_at); staff reply here is the R/W side of the portal's one write path; new customer message → bell to the SO salesperson; staff reply → Mailgun email to the customer ("You have a reply — sign in at love.navibio.tech", no message content in the email)sales_orders.id

Engine notes (from sales-list capture)

  • Five derived chips: Sales items = aggregate FG availability of order lines vs inventory (In stock / Not available); Ingredients = material availability for making the items — Picked (allocated to MO) / In stock / Expected <date> (from linked PO arrival) / Not available; Production = derived from linked MOs (Done / Make…); Invoice and Delivery are stored, inline-editable statuses.
  • Status cascade: "In stock" rows show Ingredients Picked + Production Done; "Not available" rows surface raw-material availability + a Make… call-to-action.
  • "Expected 2026-05-09" implies linkage to an open PO's expected arrival — one day after the 2026-05-08 deadline, hence the red deadline (risk highlight, not simple past-date).
  • Rank + drag handles = manual priority ordering that drives stock allocation.
  • COGS posts at fulfillment (pack & deliver) from FG moving-average cost — not at invoicing; invoicing itself lives in QuickBooks, Gaia keeps only the flag.
  • Pack & deliver is an Action::requiresConfirmation() gate in front of shipment-pack: partial packing is allowed when only some lines have FG (here line 1 only, FEFO lot APF-2605-01); confirming posts so_fulfillment movements per lot and flips Delivery to Partially delivered.
  • Order total is derived: Total = Σ(qty × price × (1 − disc)) + shipping fee + tax; 0.00 MYR orders allowed (customer-paid packaging flows).
  • Service lines: a line is either a product (variant_id — Availability chip, Make…/MO, so_fulfillment stock movement, COGS at pack) or a service (service_item_id — Manufacturing / tolling fee, R&D / formulation development). A service line (row 5, 8,500.00) shows a Service badge, no lot / FEFO / Availability / Production, never writes to the stock ledger, and books revenue at ZERO COGS. Its total adds to the order subtotal like any revenue line.
  • "+ Add line" opens the LinesRelationManager CreateAction modal: unit price auto-fills from the last paid price and is validated against the variant price band/floor — a below-floor net price (after discount) flips the input red, disables Add, and raises an owner approval request (same hard lock as so-new and Retail). On save the availability chip recomputes vs FG at the order location; a line with no stock offers a "+ Make" numbered NVMSB-0309 / 5.
  • Order journey is a derived timeline (same doctrine as the R&D status history — read-only, derived): it aggregates events already stamped as each stage happens — deal opened, quote sent, SO created / confirmed, MOs booked→done + BMR, shipment packed→delivered, invoice flag — with no new data entry. Per-hop "▲ N days" is the elapsed days between consecutive hop timestamps; total cycle time is enquiry → delivered (running while still open); pending hops render faded until their event fires.