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&DMakeBuyStockPlanItemsGMPAdminInsights

Formulations

8 formulations
Code Formulation Ver Target product Key materials (shared raw-mat pool) Serving Est. cost/serving Trials Status Owner Updated

Project Gaia — static mockup in Filament v3 idiom. No backend. Key materials reference real raw materials from the shared inventory pool; formulations/costs are illustrative.

Formulation

F-0014 — Turmeric Latte Sachet

Not saved

Series F-{seq} — next after F-0013.

Every edit after the first trial creates a new version (GMP traceability).

FK items.id, nullable until the product exists.

Units locked to the admin units list — staff never type units; conversions hard-coded.

Confirmed request + Approved formulation = Promote to BOM.

Workflow: Draft → Lab trial → Stability → Approved → Promoted to BOM / Archived.

Materials per serving

# Material same variants pool as production BOMs Qty per serving UoM Avg cost MYR / uom · read-only Cost per serving

Est. cost / serving: MYR

Creates formulations + formulation_versions v1 + formulation_lines. No stock impact — costing rides the live moving-average.

Formulations — field manifest

FieldFilament componentTypeSourceFK target
CodeTextColumn (series F-{seq})stringstored: formulations.code
Formulation / VerTextColumn; versions as related rowsstring + intstored: formulations.name, formulation_versions.version — every edit after first trial creates a new version (GMP traceability)formulation_versions
Target productSelectColumn → itemsFK nullablestored: formulations.target_item_iditems.id
Key materialsTextColumn (derived from lines)relationstored: formulation_lines (variant_id, qty_per_serving, uom) — SAME variants table as production BOMsvariants.id
Est. cost/servingTextColumn::numeric()moneyderived: Σ line qty × current moving-average cost — live from the inventory engine
TrialsTextColumn::counts() → trials listintderived: lab_trials where formulation_version_idlab_trials
StatusTextColumn badge + workflow Actionsenumstored: Draft → Lab trial → Stability → Approved → Promoted to BOM / Archived
Create formulation (slide-over)CreateAction::slideOver()actionstored: formulations (code, name, target_item_id nullable, serving_qty, serving_uom, owner_user_id, rnd_request_id nullable, status enum default Draft) + formulation_versions (version=1) + formulation_lines (variant_id nullable / free_text, qty_per_serving, uom FK → admin-locked units list)items.id · rnd_requests.id · variants.id · units

Engine notes

  • Promote to BOM = copy formulation_lines → recipe rows on the target product variant, scaled from per-serving to per-unit. Formulation stays immutable as the R&D record; the BOM lives its own life after.
  • R&D uses the same variants + item pool as production for costing: estimates ride the live moving-average. Trial consumption itself is not stock-tracked — quantities are noted in the R&D request progress log (founder decision; see Lab trials screen).
  • Version on every post-trial edit — NPRA/GMP wants the trail even when the paper BMR is the official record.