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

Settings

Values below are the real ones from the Katana settings capture (2026-07-07) — with Gaia's cleanup plan where the data is messy.

General — captured from Katana
Base currencyMYR · multi-currency in use (base locked) — per-entity base in Gaia
Default SO delivery time calendar days
Default PO lead time calendar days · per-item lead times live on the item card (Supply details)
Manufacturing policies — Katana toggles → Gaia policy
Units of measure cleanup required

Katana's real list has 21 entries: pcs ×8, psc ×2, kg + KG, g + gg, "5", cm, l, m, mg, ml, mm. Gaia migrates through an alias map to a canonical set:

CanonicalAbsorbs (aliases)Used for
pcspcs ×8, psc ×2finished goods, packaging
mgraw materials (stock base)
g / kggg, KGpurchase UoM → converts to mg
ml / LmL, lliquids (ml is the volume stock base)
mm / cm / mpackaging dimensions
5junk entrydrop on migration

Gaia: units table is admin-locked — staff pick from the list, never type units. That is how you got psc. Conversion factors are hard-coded system knowledge — 1 kg = 1,000 g = 1,000,000 mg · 1 L = 1,000 ml — not editable even by admin; only per-item pack conversions (e.g. 1 carton = 24 pcs, 1 bag = 25 kg) are item data.

Item defaults — for new items only

Products

Usability: Sell Buy Make

Tracking: Batch/lot — default ON in Gaia (Katana default: none — GMP says otherwise)

UoM: pcs

Materials

Usability: Buy

Tracking: Batch/lot — default ON in Gaia

UoM: mg · purchase UoM kg (1 kg = 1,000,000 mg)

Categories — 5 groups · 22 categories grouped

Actives & Botanicals

  • Actives
  • Branded Actives
  • Plant Extract
  • Vitamins & Minerals

Sweeteners

  • Sweetener
  • Sugar Alcohol

Flavor & Acids

  • Flavor
  • Acid

Functional aids

  • Additives
  • Anti-caking Agent
  • Filler
  • Soluble Fiber

Base powders

  • Cocoa Powder
  • Coffee Powder
  • Tea Powder
  • Tea Leaves
  • Fruit Powder
  • Oil Powder
  • Protein Powder
  • Milk Powder
  • Creamer
  • Cereals

The old 32 Katana values collapse into this. The (China) * prefixes moved to a per-material Origin field; End Product / Carton Box / Packaging(*) moved to a separate item_type field (raw material / packaging / finished good / consumable); customer-paid packaging is now a customer_supplied flag. Admin-locked — staff select, never type.

Operations library — the real 13 routing steps
  • 1Prepare Ingredients & Mixing
  • 2Sachet Packing
  • 3Tablet Making
  • 4Shrink Wrap
  • 5Pack into End Product
  • 6Cartoning
  • 7Insert Silica Gel
  • 8Print Expiry Date on Box/Pouch/Sachet
  • 9Pouch Packing
  • 10Sealing
  • 11Filter Paper Packing
  • 12Capsule Packing
  • 13Bottle Filling

Order here = dropdown order in routings. Gaia adds per-operation: default machine/type, standard time per unit, cost rate — that is what prices the Operations part of the BOM roll-up.

Document numbering — one series per entity per document type
EntityDocumentFormatNext number
NVMSBSales order / Retail saleNVMSB-{seq} · RS-{yy}-{seq}NVMSB-0312 · RS-26-042
CTSBMO / PO / Quote{SO#}/{line} · PO-{seq} · Q-{yyyy}-{seq}MO-0489 · PO-561 · Q-2026-036
CTWSBSA / ST / STK / SHP / BMRSA- · ST- · STK- · SHP-{yy}{seq} · BMR-{yy}-{seq}SA-527 · ST-16 · STK-64 · SHP-26042 · BMR-26-032
CTSB / CTWSBR&D / Returns / Maint WOF- · TRL- · RET- · RRET- · MWO-F-0014 · TRL-26-016 · RET-26-009 · MWO-26-035
CTCNGZShipmentSHPCN-{yy}{seq}SHPCN-26001
Approvals & thresholds — when a document needs an Owner decision
Stock-adjustment approval thresholdRM adjustments above this need Owner approval · settings.stock_adj_approval_threshold
OEM floor policyHard lock below floor = hard lock + owner approval — house rule · settings.oem_floor_policy
Retail floor policyNotify below floor = completes + notifies owner — house rule · settings.retail_floor_policy
Quote validity days days · settings.quote_validity_days
Books & period lock — V1.1 D37, finally gets a UI
Books locked through · settings.books_locked_through
Retail consolidation day month-end · settings.retail_consolidation_day
Shopee entry reminder day of the month · settings.shopee_entry_reminder_day

Staff writes on documents dated within a locked period are rejected; Owner override is a logged void-and-reissue, never a silent edit — complements (does not replace) the append-only ledger doctrine (V1.1 D37).

Notifications — NotificationRouter channels
Mailgun sender address · settings.mailgun_sender
Telegram bot chat ID
· settings.telegram_chat_id

Notify matrix — event → channel · settings.notify_matrix

EventBellEmailTelegram
Below-floor approval
Machine down
BMR awaiting release
Overdue job cards
New portal message
Staff reply to customer

Bell is always on (locked) — Mailgun formal, Telegram urgent, per D36. Portal-message routing maps from D39.

Portal — love.navibio.tech, client-facing
Panel domainlove.navibio.tech read-only
Reply-SLA text shown to customers on the portal message thread · settings.portal_reply_sla_text
Production updates client-visible by default
Portal password resetsSelf-service ✓ locked ON, rate-limited, Mailgun — contrast with staff (admin-only, D44)
Retail & delivery — vans, drivers, delivery methods

Vans · settings.vans

WXX 1234Van 1

Drivers are users with the Driver role — manage in Users & access (Ahmad exists).

Delivery methods enabled

Own van ✓ Grab ✓ Lalamove ✓ Pickup ✓
Localization & security — language default, staff auth house rules
Default language per-user override on Profile · settings.default_locale — en | ms | zh | my
Staff 2FARequired TOTP required for all staff — house rule
Staff password reset policyAdmin-only no self-service on staff login — resets issued from Users & access (D44)
Print templates — Katana groups + Gaia additions

From the capture: Quote · Sales order · Manufacturing order · Consolidated pick list · Task list · Purchase order.

Gaia adds BMR (9-section) · Packing slip with lot numbers · Delivery order (retail) · Machine logbook · Mock-recall report · Consolidated e-invoice summary

Tax rates & currencies — QuickBooks owns accounting
SST — sales tax10%MY entities, taxable goods
SST — service tax8%services
Zero-rated / exempt0%exports, exempt goods

Currencies — current rate to base

CurrencyRate to baseUsed by
MYRbase · 1.00Malaysian entities
CNY1.00 → MYRGuangzhou base = CNY
USD1.00 → MYRimports
SGD1.00 → MYRimports

A document (PO/SO) snapshots the rate at issue; this current rate only DEFAULTS onto new foreign-currency documents so nobody retypes it. Base currency is per-entity (Guangzhou/CTCNGZ = CNY; Malaysian entities = MYR).

Payment accounts — settlement_accounts · suppliers paid from these
NameTypeCurrency
Maybank CurrentbankMYR
CIMB CurrentbankMYR
Alipay walletalipayCNY
WeChat PaywechatCNY
Petty cashcashMYR

A purchase order tags which account settled it — lets Buy/Insights split China-Alipay spend from Malaysia-bank spend. Settlement itself lives in QuickBooks; Gaia only tags.

Project Gaia — static mockup in Filament v3 idiom. No backend. Categories, units, operations, locations, item defaults, manufacturing toggles and multi-currency are the REAL values from the Katana settings capture (Katana Reference/New/, 2026-07-07).

Document numbering

New series

Not saved

One series per entity per document type — per-entity numbering is the house rule (NVMSB-, YGMSB- SO series already in the Katana snapshot).

Tokens: {seq} zero-padded counter · {yy} / {yyyy} year · anything else is literal.

Settings — field manifest

TableKey columnsNotes
settings (general)per-entity: base_currency, so_delivery_days, po_lead_daysdefaults only; overridable per order/item
settings (approvals & thresholds)stock_adj_approval_threshold decimal default 5000 · oem_floor_policy enum(hard_lock) locked · retail_floor_policy enum(notify) locked · quote_validity_days int default 30read by ApprovalService (stock-adjustment approvals) and PricingService (OEM/retail floor checks, quote expiry); floor policy enums are house rules, not tenant-editable
settings (books & period lock)books_locked_through date (V1.1) · retail_consolidation_day tinyint default 31 · shopee_entry_reminder_day tinyint default 5books_locked_through read by every posting screen (writes on locked-period dates rejected; Owner override = logged void-and-reissue, V1.1 D37); consolidation_day read by ConsolidationService; reminder_day drives the Shopee entry reminder on dash-accounting.html
settings (notifications)mailgun_sender string null · telegram_chat_id string null · notify_matrix json (event→channel toggles, D36 defaults)read by NotificationRouter — bell always on, Mailgun formal, Telegram urgent; notify_matrix shown as the mini-table on this page
settings (portal)portal_reply_sla_text string default "We usually reply within 1 business day" · portal client-visible default (off) · portal self-service reset (locked ON)reply-SLA text renders on the portal message thread; client-visible default read by JourneyReadModel's portal filter; panel domain (love.navibio.tech) is fixed config, not a settings row; self-service reset is Mailgun + rate-limited — contrasts with staff (admin-only, D44)
settings (retail & delivery)vans json (plate + label list) · delivery methods enabled (own_van/grab/lalamove/pickup)vans read by retail-shipments.html / retail-delivery-detail.html van pickers; drivers are NOT a settings column — they are users with role Driver (Ahmad exists), managed in Users & access
settings (localization & security)default_locale enum(en,ms,zh,my) default enper-user override on Profile; staff 2FA-required and staff password-reset-is-admin-only are house rules enforced in code (not settings columns) — shown here as locked rows for visibility, D44
unitscode, base_unit_id, factor (hard-coded seed: kg→g→mg, L→ml — immutable, even for admin), aliases jsonalias map cleans the Katana import (psc→pcs, KG→kg, gg→g, "5" dropped); admin-locked list — qty stored in base units (mg / ml / pcs), display auto-scales
category_groupsname, sort5 parent groups (Actives & Botanicals, Sweeteners, Flavor & Acids, Functional aids, Base powders)
categoriesname, group_id FK → category_groups, sort22 canonical values under 5 groups; the old 32 Katana values collapsed — (China) prefix → material Origin, End Product / Carton Box / Packaging → item_type, customer-paid → customer_supplied flag; admin-only create
operationsname, sort, default_machine_type, std_time_per_unit, cost_rateseeded with the real 13; prices the BOM operations roll-up
item_defaultsper type: usability flags, tracking, uomGaia flips batch-tracking default to ON (GMP)
mfg_policiespicking_required, ask_consumed, ask_finished, show_deadlinesall ON; picking_required is hard policy (BMR depends on it)
number_seriesfactory_id, doc_type, format, next_sequnique per entity+doc_type; counters are transactional (no gaps/dupes under concurrency); changing format never renumbers issued documents
currenciescode, rate_to_base, is_base (per-entity base)rate_to_base is the current default only — it seeds new foreign-currency docs; each document snapshots its own rate at issue; QuickBooks owns the ledger
settlement_accountsname, type (bank / alipay / wechat / cash), currencya PO tags settled_account_id → Buy/Insights split Alipay (CN) vs bank (MY) spend; settlement itself lives in QuickBooks, Gaia only tags
print_templates / tax_ratesas beforetemplates per doc type with per-entity letterhead

Engine notes

  • Locations from the capture are now in Factories & locations: CYTO-11 and CYTO-29 under CTSB, CYTOWELL-54 under CTWSB, NVMSB office at Sunway Velocity; CYTOCNGZ-602 is Gaia-new (not in Katana).
  • The messy UoM/category lists are the strongest argument for admin-locked reference tables — staff select, never type.
  • Insights re-captures remain BI-iframe chrome only; reporting stays out of scope until the operational core ships.