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

Tasks

124,338 pcs Total planned qty (Sum summarizer — task-level, repeats MO qty per operation)
65,163 / 68,640 pcs Total actual / planned qty (dual Sum summarizer over all 36 done tasks in range)
Showing 1–17 of 17 open tasks Showing 1–19 of 36 done tasks (first 19 rows captured)

Project Gaia — static mockup in Filament v3 table idiom. No backend. Sample data: Katana tenant snapshot 2026-04-12, location 11, Balakong Jaya. Done view rows: New2 capture 2026-07-07 ('Completed at: Last 7 days' — 19 of 36 rows captured; totals are the full-range summarizer).

Tasks — field manifest

FieldFilament componentTypeSourceFK target
Checkbox / ⓘautomatic with BulkActions (export / print)uiUI-only bulk select; header ⓘ tooltip slot dropped
ResourceTextColumn::placeholder('—') + SelectFilterstring, nullablestored: task assignment to a production resource/workstation; unset on every captured rowresources.id
MO #TextColumn::searchable(isIndividual: true)->url()stringstored: FK parent MO; format 'SO # / line #' — NVMSB-0309 / 2 and / 3 are sibling MOs of one SOmanufacturing_orders.id
MO deadlineTextColumn::date()->sortable() (default sort asc) + Filter (date range)datederived: parent MO production deadline, repeated on every operation rowmanufacturing_orders.id
Del. deadlineTextColumn::date() + Filter (date range)datederived: linked sales-order delivery deadline; same value across all rows of one MO — Open view onlysales_orders.id
ProductTextColumn::searchable(isIndividual: true)stringderived: parent MO → product variant, 'name / variant'variants.id
Planned qtyTextColumn::numeric()->summarize(Sum)qty + UoMderived: MO planned quantity repeated per operation row (total double-counts by design)
OperationTextColumn::searchable(isIndividual: true)stringstored: operation step from the product's routing (BOM recipe)operations.id
TypeTextColumn::badge()->color(Process: blue, Setup: gray) + SelectFilterenumstored: operation cost type (Katana: Process vs Setup); every visible row = 'Process'
Planned timeTextColumn::placeholder('—')duration, nullablestored: planned duration from the operation definition; unset in this dataset
Assigned toTextColumn::placeholder('Unassigned') + SelectFilterstring, nullablestored: FK operator/team member; 'Unassigned' on every rowusers.id
StatusIconColumn (hollow circle = Not started) + SelectFilterenumstored: task status; Open/Done view tabs partition on it — all 17 open tasks 'Not started'; Open view only
Planned/Actual qty (Done)TextColumn::formatStateUsing('{actual} / {planned} pcs')->summarize(Sum ×2)qty pair + UoMstored: tasks.actual_qty captured at completion; planned derived from parent MO — dual Total 65,163 / 68,640 pcs
Planned/actual time (Done)TextColumn::placeholder('... / ...')duration pair, nullablestored: tasks.actual_time vs planned duration from the operation; both unset on every captured row
Completed at (Done)TextColumn::date()->sortable() (default sort desc) + Filter::make('completed_at') date range, default 'Last 7 days'datetimestored: tasks.completed_at — set when the task is marked done; the header range control scopes the whole view
Completed by (Done)TextColumn::placeholder('Unassigned')FK, nullablestored: tasks.completed_by — user who marked the task done; nullable: every captured done row completed unassignedusers.id

Engine notes

  • Task explosion: each MO generates one task row per operation in the product's routing — NVMSB-0309 / 2 (Double Root Coffee) yields 5 rows, NVMSB-0309 / 3 (JuicyPop) 6, YGMSB-260401 / 7 (Yes Global Sunrise) 6 = 17 tasks.
  • MO # encodes provenance: 'SO number / SO row number' — MOs auto-created per sales-order line share the SO prefix.
  • Total 124338 pcs = Σ Planned qty over task rows (16800×5 + 5917×6 + 806×6) — it sums the same MO qty once per operation, i.e. a task-level not MO-level total.
  • MO deadline, Del. deadline, Product and Planned qty are denormalized from the parent MO / linked SO onto every operation row.
  • Default sort is MO deadline ascending, keeping each MO's operations contiguous and in routing order (Prepare → Packing → … → Cartoning).
  • List is scoped to the selected location (11, Balakong Jaya); switching location swaps the dataset.
  • Operation names and Type come from the product's production operations (recipe/BOM routing); Planned time would flow from operation duration but is unset here.
  • Done view swaps the column set: Del. deadline, Assigned to and Status drop; Planned/Actual qty, Planned/actual time, Completed at and Completed by appear. Default sort flips to Completed at descending and the 'Completed at' date-range control (default Last 7 days) scopes the list — 36 tasks in range.
  • Dual-sum Total 65,163 / 68,640 pcs = Σ actual / Σ planned over all 36 done tasks in the range; actual short of planned = yield loss (e.g. 2,947 / 3,000 on NVMSB-260629 / 1, 1,860 / 2,600 on YGMSB-260624 / 4).
  • A task can complete while unassigned — completed_by is nullable and every captured done row shows 'Unassigned'; completion is recorded on the task, not an operator assignment.
  • Katana allows Del. deadline earlier than MO deadline with no warning (open capture: NVMSB-260623 / 1 delivers 2026-07-07, production deadline 2026-07-14) — candidate Gaia late-risk badge.