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 sales

+ Sale
e-Invoicing handled once a month, not per sale: counter sales consolidate into one summary e-invoice at month end (LHDN-permitted for B2C) — Shopee is excluded, since the marketplace issues its own e-invoice and its monthly figures are entered separately below.

Cash today

240.00 MYR

1 sale · 2026-07-09

Transfer today

246.00 MYR

1 sale · 2026-07-09

Unpaid total (owing)

1,337.40 MYR

2 customers — see Retail → CRM

Shopee — monthly channel entry

July (MTD): STC30 240 boxes · Double Root Coffee 96 pcs

Revenue

9,240.00 MYR

+ Channel entry
5 sales this month · 3,846.50 MYR · July consolidation: open
Sale # Date Customer Items Total Payment e-Invoice
July sales shown above awaiting month-end consolidation (excl. B2B — own e-invoice) 998.00 MYR Preview July consolidated summary

Project Gaia — static mockup in Filament v3 idiom. No backend. Retail module; customer data shared with OEM underneath (channel-flagged), screens separated. Stock ships FEFO from FG with lots, same engine as OEM sales; the Double Root RM 5–8 band is the founder's real example.

Retail sales — field manifest

FieldFilament componentTypeSourceFK target
Sale # / linesRetailSaleResource + Repeaterdoc + linesstored: retail_sales, retail_sale_lines (variant, qty, price, batch_id FEFO-picked); own RS- numbering series, separate from OEM SO seriesvariants / batches
CustomerSelect (scoped) or Walk-inFK nullablestored: customers — ONE table shared with OEM, channel enum (oem / retail / both); this select is scoped to channel ∈ {retail, both}customers
PaymentBadge + Actionenum Cash/Transfer/Unpaidstored: retail_sales.payment_status, .due_date
e-InvoiceBadge, derivedenumopen → "{month} consolidated ✓" once the month-end consolidation run is posted; B2B flag exports that sale individuallyconsolidation_runs
Price memory / floorshared with Retail > Price lists & Sell > Price listsderived + storedSAME variant_prices + sale-history tables — retail and OEM share one memory and one floorvariant_prices
Today strip (Cash / Transfer / Unpaid)StatsOverview widget, derivedaggregateCash / Transfer: sum of today's retail_sales by payment_status; Unpaid total: the running AR balance across ALL unpaid retail_sales (not just today) — same figure as Retail > CRM "Owing" and Insights > Retailretail_sales
Shopee — monthly channel entryCard + stub Actionform (not built)writes: channel_entries (month, channel='shopee', per-SKU qty, one revenue figure) → posts one channel_sale stock movement per SKU per month. No customer FK — marketplace buyers aren't tracked as retail customers. Excluded from the monthly consolidated e-invoice since the marketplace issues its own. Spec: GAPS.md retail-channel-entrychannel_entries

Engine notes

  • Shared-data doctrine: ONE customers table (channel enum oem / retail / both) and ONE variant_prices table — data shared, views scoped. What separates Retail from Sell: screens, numbering series (RS- vs SO-), CRM shape (book vs pipeline), e-invoicing path (consolidated vs per-order).
  • Retail sale posts a retail_sale stock movement (FEFO batch pick) — same ledger, so FG stock and batch trace stay truthful.
  • Month-end consolidation: one summary document per month per entity → single consolidated B2C e-invoice in QBO/MyInvois (LHDN-permitted). Gaia never talks to MyInvois directly; QBO stays the accounting system.
  • Floor enforcement in retail is a soft floor: below-floor lines complete immediately and notify the owner (see Retail > Price lists). OEM sales in Sell keep the hard lock.
  • Channel entries (Shopee etc.): monthly, per-SKU, one consolidated qty + one revenue figure — NOT itemized sales, NO customer records. Posts channel_sale stock movements only, kept out of the B2C consolidation batch since the marketplace already issues its own e-invoice.