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

Recurring schedule

Everything that repeats, across every module — the factory's cron board, in human words.

One register for everything that repeats — from daily room cleaning to the annual licence renewal. Backend is a single scheduled_programs table plus the Laravel scheduler (cron): it computes each program's next-due date and queues reminders to the owner's dashboard, escalating to the Factory Manager when a row goes overdue. Staff never see cron syntax — they pick Daily / Weekly / Monthly / Quarterly / Annual.

2

Due today

6

Due this week

3

Overdue

20

Active programs

20 programs · 3 overdue · 6 due within 7 days
Program Module Frequency Owner Last done Next due Status Evidence

Each row is a program, not an occurrence — occurrences are generated by the scheduler and appear on the owner's dashboard and on this board. GMP-critical rows also appear on the GMP maintenance register.

Project Gaia — static mockup in Filament v3 idiom. No backend. Programs and dates mirror the GMP maintenance register; non-GMP recurrences (stocktake, e-invoice run, IT, licences) illustrative.

Recurring schedule — field manifest

Backing table: scheduled_programs — one row per program; the Laravel scheduler generates occurrences and reminders from it.

ColumnFilament componentTypeSourceFK target
idpkstored
factory_idtenant scope (Filament tenancy)FKstored: board is per-factoryfactories.id
moduleSelect + BadgeColumn (color per module)enum: gmp / stock / retail / buy / admin / itstored: which module the program belongs to
nameTextInput / TextColumn with url() to module pagestringstored
categorySelectstringstored: machine / facility / cleaning / vehicle / compliance / finance…
frequencySelect — staff-facing labels, no cron syntaxenum: daily / weekly / monthly / quarterly / annualstored: scheduler translates to next_due_at
owner_type / owner_idMorphToSelectenum: user / contractor + FK idstored: who gets the reminderusers / contractors
evidence_typeSelectenum: form / photo / contractor_cert / system_logstored: what proof completion requires
gmp_criticalToggleboolstored: true → row mirrors onto the GMP register + FM/QA escalation
last_done_atTextColumn::date()datetimederived: auto-stamped when the linked record is completed
next_due_atTextColumn::date() — red when overduedatetimederived: scheduler = last_done_at + frequency
remind_days_beforeTextInput::numeric()intstored: reminder lead time per program
escalate_after_daysTextInput::numeric()intstored: days overdue before FM escalation fires
activeToggle + TernaryFilterboolstored: paused programs stop generating occurrences

Engine notes

  • The Laravel scheduler (cron) runs daily: computes occurrences from frequency + last_done_at, writes reminders to the notifications table → owner's dashboard; overdue past escalate_after_days → Factory Manager notified.
  • Staff never see cron syntax — the form offers Daily / Weekly / Monthly / Quarterly / Annual (plus 6-monthly as a legacy frequency on migrated GMP rows).
  • GMP-critical rows mirror onto the GMP maintenance register (maintenance.html) — same underlying rows, two views; the 3 overdue here are the same 3 overdue there.
  • Completing a linked record — cleaning checklist, stocktake, month-end e-invoice run, calibration log — auto-stamps last_done_at and rolls next_due_at forward; no separate "mark done" step for flows Gaia already records.
  • "+ Program" opens the shared program form spec'd in GAPS.md (maintenance-program-new) — one form serves both the GMP register and this board.