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
← Retail shipments / RD-26-060
Delivered ✓ — POD photo + payment confirmation attached. Sale RS-26-040 continues on its own payment status.

RD-26-060

Retail delivery · Kedai Pak Din
Own van Scheduled Out for delivery Delivered Failed
Redelivery of RD-26-056 — failed 2026-07-02 (kedai closed)
Print run sheet
Sale
RS-26-040
Customer
Kedai Pak Din
Method
Own van
Scheduled
2026-07-07
Status

Items

1 line for RS-26-040
# Product Qty Lot (GMP)
1 STC30 6 boxes (¼ ctn) STC-2606-11
FEFO-picked lots print on the retail delivery order — batch numbers are tracked for retail SKUs the same as OEM.

Events

shipment_events timeline
Same shipment_events table as OEM shipments — one delivery engine, retail flavoured (§6-D2).

Payment collected at drop

retail-only stamp
246.00 MYR Transfer

DuitNow QR paid on the spot — confirmed by Ahmad at 11:42

recorded on RS-26-040 →

Payment posts on the sale (Record payment) — the delivery only stamps the collection so the run sheet reconciles end-of-day. No new money tables: shipments.cash_collected_amount / _method / _at.

Delivery evidence

media collection 'pod'
📷POD — handed over @ 11:42
📷DuitNow QR confirmation

Snapped by Ahmad at handover · media collection 'pod' on shipments (same as OEM) · auto-compressed, EXIF GPS stripped.

Project Gaia — static mockup in Filament v3 idiom. No backend. Retail module; the shipments engine and stock movements are shared with OEM (channel-flagged).

Retail delivery detail — field manifest

FieldFilament componentTypeSourceFK target
PageShipmentResource ViewRecord + Infolistdocstored: shipments.code (RD-{yy}-{seq} series) — SAME shipments table as OEM, channel=retail scopes this view; RD- vs SHP-
SaleTextEntry::url()FKstored: shipments.retail_sale_id (OEM rows use sales_order_id — one engine, two doc FKs)retail_sales.id
MethodBadgeenumstored: shipments.method — own_van / grab / lalamove / pickup
StatusBadge + Action "Advance status"enumstored: shipments.status — Scheduled → Out for delivery → Delivered / Failed; a simple status field, no custody-bin state machine
ItemsInfolistEntry (list)relationderived: sale's lines (variant, qty in ctn/box)retail_sale_lines
Item: Lot Gaia GMPTextColumn (font-mono)FKstored: shipment fulfilment's picked FG batch per line — FEFO-picked at packing, now surfaced and printed on the retail DO, same as OEMbatches.id
EventsRepeatableEntry (timeline)child rowsstored: shipment_events (status, at, by) — SAME table as OEM shipments (§6-D2); Loaded → Out on van → Delivered, newest firstshipments.id / users.id
Redelivery chainTextEntry + Badge, muted (no link)FK, selfstored: shipments.redelivery_of_id — RD-26-060 chains back to failed RD-26-056; nullable, self-referencing shipments.idshipments.id
Cash collected at dropInfolist section (amount + method + by/at)decimal + enum + datetime, retail-onlystored: shipments.cash_collected_amount decimal null, .cash_collected_method enum(cash,transfer) null, .cash_collected_at datetime null — write-once with the POD; payment itself still posts on retail_sale_payments via the sale's Record payment
Delivery evidence (POD + cash count)FileUpload (camera capture) on Mark deliveredmedia morphstored: media rows (morph) on shipments, collection 'pod' — SAME collection as OEM; snapped by driver, auto-compressed, EXIF GPS strippedshipments.id

Engine notes

  • Stock movement is IDENTICAL to an OEM shipment: confirming a delivery posts a shipment movement with FEFO batch pick — FG stock and batch-trace don't know channels exist.
  • A failed delivery flips status to Failed; a fresh delivery row is created against the same sale for the next attempt and stamps redelivery_of_id back to the failed row — RD-26-056 (failed, kedai closed) → RD-26-060 (this delivery).
  • Cash-collected fields are a day-end reconciliation stamp only — write-once with the POD, never a second money table. The actual payment record (retail_sale_payments) lives on the sale; Record payment there is what flips the sale Paid.
  • Shared-data doctrine: customers is ONE table (channel enum oem/retail/both) and the shipments engine and stock movements are shared. What separates: screens, numbering series (RD-/RS- vs SHP-/SO-), CRM shape, e-invoicing path.