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

Mockup demo device — one detail page showing both the unchanged domestic MYR pattern and the foreign-currency capability on a China PO. The real Filament ViewRecord renders a single PO.

PO-459

Purchase order · Open
Delivery Partially received Billing Partially billed (3) ›
Print PO
Currency
MYR
Order date
2025-08-12
Expected arrival
2026-03-16
Location
CTSB · 11, Balakong Jaya
Created by
Priya Nair (Purchasing)

Lines

5 lines · purchase UoM kg, stock UoM mg
# Material Ordered Received Outstanding Unit price Tax Line total Expected arrival Status
1 Altilix (Artichoke Extract) / ITS Nutriscience Branded Actives 25 kg 25 kg 0 kg 1,800.00 MYR/kg 5% - Sales Tax 45,000.00 MYR 2025-09-01 Received
2 Apple Fiber / ITS-Sanacel Soluble Fiber 200 kg 100 kg 100 kg 21.50 MYR/kg 5% - Sales Tax 4,300.00 MYR 2026-03-16 Partial
3 Ascorbic Acid / ITS-Luwei Vitamins & Minerals 250 kg 0 kg 250 kg 19.50 MYR/kg 5% - Sales Tax 4,875.00 MYR 2026-03-16 Open
4 Apple Powder / ITS-Italy-Iprona-IPOFL-70020018 Fruit Powder 50 kg 0 kg 50 kg 142.00 MYR/kg 5% - Sales Tax 7,100.00 MYR 2026-03-16 Open
5 Blackcurrant Flavor / ITS-56488/SDH Flavor 25 kg 0 kg 25 kg 115.10 MYR/kg 5% - Sales Tax 2,877.50 MYR 2026-03-16 Open
6 Apple Fiber / ITS-Sanacel Soluble Fiber 100 kg 0 kg 100 kg 21.50 MYR/kg 5% - Sales Tax 2,150.00 MYR 2026-04-26 Open
Total units 550 kg
Subtotal (tax excluded) 64,152.50 MYR = snapshot total (Sum summarizer)
Plus tax (5% - Sales Tax) 3,207.63 MYR
Total 67,360.13 MYR = subtotal + 5% SST

Receive items — GMP receipt

outstanding lines prefilled · one batch record per receipt line
Material Qty received UoM conversion Batch / lot no * Expiry date * CoA received Bin
Apple Fiber / ITS-Sanacel kg 100 kg → 100,000,000 mg (stock UoM)
Ascorbic Acid / ITS-Luwei kg 250 kg → 250,000,000 mg (stock UoM)
Apple Powder / ITS-Italy-Iprona-IPOFL-70020018 kg 50 kg → 50,000,000 mg (stock UoM)
Blackcurrant Flavor / ITS-56488/SDH kg 25 kg → 25,000,000 mg (stock UoM)

On post: receipt posts po_receipt stock movements at landed cost and creates one batch record per line — expiry mandatory for batch-tracked materials; CoA checkbox files against the batch (unchecked ⇒ batch held in Quarantine until QC release).

Conversions are built-in — staff never type units: qty is keyed in the purchase UoM (kg) and posts to stock in mg via the hard-coded factor (1 kg = 1,000,000 mg); the UoM conversion column is display-only.

Previous receipts: PR-459-1 · 2025-09-02 · Altilix 25 kg · batch A2508-1141 exp 2027-08-31 — PR-459-2 · 2025-11-14 · Apple Fiber 50 kg · batch G04112399 exp 2027-10-08 — PR-459-3 · 2026-01-20 · Apple Fiber 50 kg · batch G05120033 exp 2028-01-05. All posted by Priya Nair.

Landed cost

additional costs on this receipt
Cost Amount Allocation
Sea freight — Genoa → Port Klang 850.00 MYR by line value
Customs & clearance agent 420.00 MYR by line value
Fumigation & pallet treatment 180.00 MYR by line value
Total to allocate 1,270.00 MYR
Allocation preview (receipt value 17,002.50 MYR) Line value Allocated Landed unit cost
Apple Fiber 100 kg2,150.00160.5923.11 MYR/kg
Ascorbic Acid 250 kg4,875.00364.1420.96 MYR/kg
Apple Powder 50 kg7,100.00530.33152.61 MYR/kg
Blackcurrant Flavor 25 kg2,877.50214.94123.70 MYR/kg
Moving average: unit_cost_landed = unit price + allocation ÷ qty — this landed cost (not the bill amount) enters the per-location moving average at receipt time.

Bills

Partially billed (3) View in Done →
Bill ref Date Amount Note
ITS-INV-25089 2025-09-02 45,000.00 MYR Altilix 25 kg
ITS-INV-25411 2025-11-14 1,075.00 MYR Apple Fiber 50 kg
ITS-INV-26033 2026-01-20 1,075.00 MYR Apple Fiber 50 kg
ITS-INV-26102 2026-04-12 5,118.75 MYR Ascorbic Acid 250 kg
Billed to date 47,150.00 MYR of 67,360.13 incl. tax
Reference only: the bill lives in QuickBooks — Gaia stores number, date and amount to derive the billing chip (Not billed → Partially billed (n) → Billed). Billing is independent of receipt. Bill amounts are tax-inclusive and net against the tax-inclusive order total (67,360.13 MYR), so the chip flips to Billed only when the 5% SST is covered too.

Additional info

supplier-facing — printed on the PO PDF

Please ship the remaining lines together where possible and email CoA + halal certificate per batch to qa@navi.my before dispatch. Mark every carton with our PO number and the batch/lot number.

Delivery hours Mon–Fri 9:00–16:30, unloading bay 2 (11, Balakong Jaya). Pallet height max 1.6 m.

Project Gaia — static mockup in Filament v3 table idiom. No backend. Sample data: Katana tenant snapshot 2026-04-12, factory CTSB. PO header, supplier, dates, statuses and 64,152.50 MYR total are real; line-level quantities, prices, receipts, landed costs and bill refs are illustrative, consistent with the captured totals.

PO-561

Purchase order · Open · import
Currency CNY · ¥1 = RM 0.62 Alipay wallet (CNY) Delivery Not received Billing Not billed
Supplier
Xi'an Greenland Bio-Tech · China
Currency
CNY ¥
Exchange rate
¥1 = RM 0.62
Payment method
Alipay
Settlement account
Alipay wallet (CNY)
Order date
2026-03-20
Expected arrival
2026-05-24
Location
CTSB · 11, Balakong Jaya
Created by
Priya Nair (Purchasing)

Lines

4 lines · purchase UoM kg, stock UoM mg · priced in CNY (¥) MYR equivalent at ¥1 = RM 0.62
# Material Ordered Unit price Line total Expected arrival Status
1 Green Tea Extract (EGCG 50%) / Xi'an Greenland Branded Actives 200 kg ¥240.00 CNY/kg
¥48,000.00
≈ RM 29,760.00
2026-05-24 Open
2 Turmeric Extract (95% Curcumin) / Xi'an Greenland Branded Actives 100 kg ¥520.00 CNY/kg
¥52,000.00
≈ RM 32,240.00
2026-05-24 Open
3 Rhodiola Rosea Extract (3% Rosavins) / Xi'an Greenland Branded Actives 50 kg ¥1,150.00 CNY/kg
¥57,500.00
≈ RM 35,650.00
2026-05-24 Open
4 Astragalus Extract (10:1) / Xi'an Greenland Branded Actives 300 kg ¥95.00 CNY/kg
¥28,500.00
≈ RM 17,670.00
2026-05-24 Open
Total units 650 kg
Subtotal
¥186,000.00
≈ RM 115,320.00
= Σ CNY line totals
Import — no SST at PO duty / import GST ride landed cost at receipt
Total
¥186,000.00
≈ RM 115,320.00
MYR at ¥1 = RM 0.62
Foreign currency: line prices and totals are the supplier-facing CNY amounts. The exchange rate ¥1 = RM 0.62 is a snapshot captured on the PO; on Receive items stock and costing post in the entity base (MYR) via this snapshot rate — the per-location moving average is always MYR. Payment settles from the Alipay wallet (CNY). MYR equivalent of this order: RM 115,320.00.

Project Gaia — static mockup in Filament v3 idiom. No backend. PO-561 (Xi'an Greenland Bio-Tech, China) is an illustrative foreign-currency PO demonstrating the multi-currency capability: CNY line prices with MYR equivalents at ¥1 = RM 0.62, consolidating to RM 115,320.00 in the entity base. Domestic MYR POs (e.g. PO-459) are unchanged.

Post receipt PR-459-4?

Posts 4 po_receipt stock movements at landed cost (425 kg → CTSB stock) and creates one batch record per line: G05122588 (Apple Fiber, exp 2027-11-30), LW2603-0114 (Ascorbic Acid, exp 2029-02-28), IPR26L0417 (Apple Powder, exp 2027-09-15 — CoA missing ⇒ held in Quarantine until QC release), 56488-2604-08 (Blackcurrant Flavor, exp 2027-04-30). Landed costs of 1,270.00 MYR allocate by line value; landed unit costs enter the per-location moving average. Batch + expiry are mandatory (GMP) — posting is blocked if any batch-tracked line is missing either.

Receipt PR-459-4 posted

4 batches created · 1 held in Quarantine (CoA pending) · delivery status recalculating

View movements → View batch →

Add bill ref

Reference only — the bill document lives in QuickBooks. Amounts are tax-inclusive and net against the 67,360.13 MYR order total.

billed to date 47,150.00 of 67,360.13 — 20,210.13 remaining

Add landed cost

Allocated across the receipt lines — the landed unit cost (price + allocation ÷ qty), not the bill amount, enters the per-location moving average at receipt time.

Add line to PO-459

Adds a po_lines row — no stock effect until Receive items (batch + expiry captured at receipt, per GMP).

Select scoped to purchasable variants; purchase UoM kg from the variant (kg → mg stock factor)

kg

100 kg → 100,000,000 mg (stock UoM)

MYR/kg

autofills from last purchase price on this supplier

defaults from PO header

Purchase order detail — field manifest

Filament PurchaseOrderResource ViewRecord page: Infolist (key facts) + header Actions (Receive items = Action::form modal, mocked open) + RelationManagers: LinesRelationManager (po_lines), ReceiptsRelationManager (po_receipts), LandedCostsRelationManager, BillsRelationManager.

FieldFilament componentTypeSourceFK target
Order #TextEntry (title)string PO-{seq}stored: purchase_orders.number (Gaia warns on duplicates)
SupplierTextEntry::url()FKstored: purchase_orders.supplier_idsuppliers.id
CurrencyTextEntry / Select on editstringstored: purchase_orders.currency — Select, default supplier currency else base MYR (shown in the key-facts card); PO-561 = CNY
Exchange rateTextEntry (foreign POs)decimal(20,10)stored: purchase_orders.exchange_rate — currency → MYR base (PO-561: ¥1 = RM 0.62); domestic MYR = 1. Line prices/totals show in CNY with the MYR equivalent; stock/costing post in entity base MYR via this snapshot rate at receipt
Payment methodTextEntry::badge() / Select on editenum: bank_transfer | alipay | wechat | cashstored: purchase_orders.payment_method — default from supplier (PO-561: Alipay)
Settlement accountTextEntry / Select on editFKstored: purchase_orders.settlement_account_id — wallet/bank the PO settles from (PO-561: Alipay wallet (CNY)); default from suppliersettlement_accounts.id
Order date / created byTextEntry::date()date + FKstored: purchase_orders.created_at, created_byusers.id
Expected arrivalTextEntry::date()->color(fn) red when overduedatestored: purchase_orders.expected_arrival; red = past date + not fully received
Location / factoryTextEntryFK (tenant scope)stored: purchase_orders.location_id — factory CTSB tenantlocations.id
Delivery statusTextEntry::badge()derived chipderived: received vs ordered qty across lines (Not received / Partially received / fully → Done tab)po_receipt_lines
Billing statusTextEntry::badge()derived chipderived: Σ bill refs vs order value (Not billed / Partially billed (n) / Billed)po_bills
Line: MaterialTextColumn::url()FKstored: po_lines.variant_idvariants.id
Line: OrderedTextColumn::numeric()qty, purchase UoM (kg)stored: po_lines.quantity + po_lines.purchase_uom_id → admin-locked units list (kg → mg factor hard-coded in units, never keyed)
Line: ReceivedTextColumn::numeric()qtyderived: Σ po_receipt_lines.qty per linepo_receipt_lines
Line: OutstandingTextColumn::numeric()qtyderived: ordered − received
Line: Unit priceTextColumn::numeric()money MYR / purchase UoMstored: po_lines.unit_price
Line: TaxTextColumnFKstored: po_lines.tax_rate_id ('5% - Sales Tax' — same tax_rates table as SO / quotes)tax_rates.id
Line: Line totalTextColumn::numeric()->summarize(Sum)money MYRderived: qty × unit_price (tax excluded); Σ = 64,152.50 subtotal + 3,207.63 tax (5%) = 67,360.13 total
Line: Expected arrivalTextColumn::date()->color(fn)date, per linestored: po_lines.expected_arrival (defaults from header)
Line: StatusTextColumn::badge()derived chipderived: Received (green) / Partial (amber) / Open (gray)
Receipt: Qty + UoM conversionTextInput::numeric() + placeholder textqtystored: po_receipt_lines.qty (purchase UoM) → posted in stock UoM (mg base unit) via the hard-coded kg→mg factor (units table); conversion display-only
Receipt: Batch / lot noTextInput::required() (batch-tracked)stringcreates: batches.batch_number — po_receipt_lines.batch_id FKbatches.id
Receipt: Expiry dateDatePicker::required() (batch-tracked)datestored: batches.expiry_date — mandatory for batch-tracked materials (GMP)
Receipt: CoA receivedCheckboxboolstored: batches.coa_received — unchecked ⇒ batch status Quarantine until QC release (new in Gaia)
Receipt: BinSelect::options()FKstored: po_receipt_lines.bin_id (Raw Mat Room 1 / 2)storage_bins.id
Receipt: unit_cost_landedTextColumn::numeric() (read-only)decimal(20,10)derived: unit price + landed-cost allocation ÷ qty; posted on po_receipt movementstock_movements
Landed cost rowsLandedCostsRelationManager (type, amount)money MYRstored: landed_costs.po_receipt_id — allocated across receipt lines by line valuepo_receipts.id
Bill refsBillsRelationManager (number, date, amount)string/date/moneystored: po_bills — reference only, bill document lives in QuickBooks; amounts net against the tax-inclusive total
Additional infoTextarea / RichEditor (Infolist section)rich text, nullablestored: purchase_orders.additional_info — supplier-facing note, printed on the PO PDF

Engine notes (from buy-list capture)

  • Billing status is computed by netting attached bills against the tax-inclusive order total (Subtotal 64,152.50 + 5% Sales Tax 3,207.63 = 67,360.13): none → Not billed, some → Partially billed (n) where n = number of bills, fully covered → Billed. Billing is independent of receipt.
  • Delivery status is computed from received vs ordered quantities: Not received / Partially received; fully received orders move to the Done tab.
  • Overdue logic: expected arrival renders red when the date has passed and the order is not fully received.
  • Receipt posts po_receipt movements at landed cost — the landed unit cost (price + allocated freight/customs) enters the per-location moving average at receipt time.
  • Batch record per receipt line: batch number + expiry are mandatory for batch-tracked materials; CoA flag gates QC release (GMP addition in Gaia, not in Katana).
  • 0 MYR POs exist for customer-supplied packaging (all "NatusVincere Marketing Sdn Bhd (Supplier)"); status chips on the list are inline receive/bill entry points.
  • Foreign-currency POs (e.g. PO-561, Xi'an Greenland Bio-Tech, CNY / Alipay): line prices and totals display in the order currency (¥) with the MYR equivalent alongside. The exchange rate is captured on the PO as a snapshot; stock and costing are posted in the entity base (MYR) via that snapshot rate at receipt, so the moving average, landed cost and billing all stay in MYR. Domestic MYR POs are unaffected — no currency/rate controls appear.
  • Post receipt = Action::requiresConfirmation(): validates batch/expiry present on every batch-tracked line before posting; posting flips line statuses, recomputes the Delivery chip and (when all lines complete) moves the PO to Done.
  • Add bill ref = Action::form modal on BillsRelationManager — po_bills(number, date, amount, note); chip recomputes on save; flips to Billed only when Σ bills ≥ 67,360.13 (tax-inclusive).
  • Add cost = CreateAction on LandedCostsRelationManager (landed_costs.po_receipt_id); allocation recomputes the preview live before the receipt posts.
  • Add line = CreateAction on LinesRelationManager; header + list totals are Sum summarizers so they recompute; new lines default expected arrival from the header and start at status Open.