一套平台,覆蓋日常營運全部環節。
混合式部署:現場層每 site 獨立部署 Site Gateway 同前端 Web App(離線優先 · 本地實例 v1.4.2),雲端層單一中央 Supabase/Postgres,以 RLS 按 site_id 多租戶隔離。
單一系統營運
報修、派工、保養、警報、應變、能源、合規、報表集中一個平台,取代分散表格。
到場可追蹤
in-house 師父同外判承辦商到場都要系統報到,有冇人到、幾時到,有據可查。
權責分明
developer → support → owner → admin → staff → field 階層,每層只可管理下層。
多站統一
所有站點共用一個中央數據庫;Root Console 跨站唯讀,RLS 確保站點互不可見。
合規可追溯
合規到期管理+稽核全面留痕:不可修改、保留 180 日、可匯出 CSV。
「報修靠電話追蹤、承辦商到場冇紀錄、日日寫唔同表格」——五個 persona(owner/staff/technician/contractor/developer)嘅痛點,就係平台五個目標嘅來源。
七個角色,每層只可管理其下層級。
8 項權限能力 × 7 角色;完整矩陣見 角色與權限架構。site_admin 派唔出 owner/admin、support 全系統唯讀、field 只限指派項目。
先揀權限,後發連結
link 鎖定 role+site、7 日過期、用後即棄;受邀者自己設密碼,唔使 admin 代設。
師父同承辦商都要報到
technician 無 expiry;contractor 帳號由 owner/admin 設期限,過期報唔到到。
一人可服務多個 site
每個 site 獨立記錄 role/status/expiry,跨站權限互不相撞。
18 個頁面,三大群組。
以平台總覽(home)做導覽入口;另有 AI 提案兩頁(ai-plan/ai-architecture),標示「提案,未入 PRD/ARD」。
日常營運工作台
平台總覽 · 儀表板(5 KPI+7 日能耗)· 票務池(SLA 達標率)· 維修工單(新單→處理中→待驗收→完成)· 保養計劃(完成率 vs 目標 90%)· 警報中心(自動+手動)· 緊急應變(快照上報中央)
數據整合
能源分析(峰值/碳排/24h 曲線)· 承辦商評分(排名+評分規則)· 合規(到期追蹤)· 日結(8 項清單+簽署凍結)· 月報(同比+每月 1 日自動生成)
平台底層
登入(站點/Root 雙模式)· 站點管理(Root 中央控制台)· 用戶與角色(invite link)· 稽核日誌(180 日留痕)· 系統架構圖 · 角色權限架構
現場收斂,中央單一數據平面。
唔做 per-site 資料庫。三種現場數據源喺 Site Gateway 統一為 canonical JSON(補 site_id+timestamp)先寫入中央。
現場設備經三種 adapter 進入 Site Gateway
Normalize 層統一為 canonical JSON(site_id、timestamp、source、metric、value、unit、raw)
Gateway 以 service role 寫入中央 telemetry(斷網本地 buffer、恢復補送保留原始 timestamp)
API 層按用戶角色 × site membership 過濾
前端渲染;緊急應變以快照同步上報 Root Console(唯讀)
三個入口,一種格式。
Gateway 每 site 獨立部署(container);單一寫入管道:service role(bypass RLS)寫 telemetry,所有寫入帶 site_id+timestamp。
Broker 訂閱
Topic i3fm/{site_id}/{device_id}/{metric};payload JSON。QoS≥1、狀態 topic 用 retained、斷線指數退避重連、本地 buffer 補送。
Points 輪詢
Object/Property → canonical metric 映射配置化(每 site 可唔同);關鍵點 30 秒、一般點 5 分鐘;不可達標記離線、單位轉換喺映射層。
Web Service
HTTP Basic/WS-Security(以供應商為準);超時 30 秒、重試 3 次(1s/4s/16s 指數退避);連續失敗寫 error 日誌+gateway_health 訊號,唔會拖垮 Gateway。
Normalize 之後一律係:{ site_id, timestamp, source, device_id, metric, value, unit, raw }——後端同報表永遠只面對一種格式。
19 張核心表,六個域。
所有 site 相關表含 site_id 並受 RLS 控制;詳細 schema 見 ARD §5。
users / roles / permissions
users(全域身份+密碼雜湊)· roles(7 內建角色+level)· permissions(8 項能力)· site_members(一對多 membership+expiry)· invites(一次性 link)
tickets / work orders / plans / attendance
tickets(SLA deadline)· maintenance_work_orders(狀態機+完工 result)· maintenance_plans(頻率+next_due)· field_attendance(check-in/out+expiry 檢查)
contractors / vendor_scores
contractors(合約到期)· vendor_scores(回應+完成率+質素加權,規則可設定)
alerts / telemetry
alerts(嚴重/警告/提示 × 六系統 × 自動/手動)· telemetry(canonical JSON;INSERT 僅 service role;13 個月後聚合歸檔)
incidents / compliance_items
incidents(應變等級+動員+快照編號+timeline JSON)· compliance_items(四狀態+風險等級+到期自動標記)
audit_log / daily_close / monthly_reports / sites
audit_log(append-only 180 日)· daily_close(8 項清單+frozen)· monthly_reports(每月 1 日生成)· sites(gateway_config JSON)
三層防線,最後一層喺資料庫。
前端 route guard 只係 UX 輔助;後端先係保安邊界;RLS 係最後防線。
第一層 · 前端 route guard——無權限收埋入口/403,按角色渲染 menu
第二層 · API RBAC middleware——每個 endpoint 檢查角色;site_admin 建立 owner/admin 喺 API 層已經拒絕
第三層 · Postgres RLS——預設 policy「該 site active member」;field SELECT 只限指派、support 全系統零寫入、developer 全權
append-only 留痕
無 UPDATE/DELETE policy+DB trigger 禁改;180 日後封存;匯出 CSV 本身都記 audit。
密碼與 Session
argon2/bcrypt;登入失敗鎖定(5 次鎖 15 分鐘);access 2 小時/refresh 7 日輪換;Root session 帶 console=root claim。
全線 TLS
前端↔後端、Gateway↔中央全部 TLS;MQTT 建議 over TLS;secrets 走環境變數不入版控。
20 個 Session,六個里程碑,20 週。
每個里程碑結束前 demo+驗收簽核;每 session 產出物入版本控制並有對應測試。
基建
設計系統 token · 專案骨架 · CI(S1)
apps/ + infra/ 目錄、共用元件庫、lint/build pipeline
第 1 週身份與權限
登入 Auth · RBAC · Invite · 站點 onboarding(S2–S5)
JWT 簽發、7 角色矩陣、site_members 一對多、Root 開站
第 2–4 週核心營運
儀表板 · 票務池 · 維修工單 · 保養計劃(S6–S9)
KPI 聚合、SLA 引擎、工單狀態機、排程引擎
第 5–8 週現場與整合
現場報到 · 承辦商 expiry · 警報中心 · MQTT/SOAP 接線(S10–S13)
field_attendance、自動停權排程、規則引擎、三 adapter
第 9–12 週分析與應變
能源分析 · 緊急應變 · 合規(S14–S16)
telemetry 聚合、incidents 快照上報、到期提醒
第 13–15 週報表與收尾
稽核日誌 · 日結 · 月報 · UAT 部署培訓上線(S17–S20)
append-only 驗證、簽署凍結、自動生成排程、P0/P1 清零
第 16–20 週快、穩、安全,全部有數得計。
雲端一個實例,現場一site一閘道。
單一中央+現場 Gateway
中央 Supabase(Auth/API/排程)托雲端;每 site 部署 Gateway container+static Web App;immutable build artifact。
gateway_config JSON
MQTT credentials、BACnet 點表、SOAP endpoints、輪詢間隔存 sites.gateway_config;啟動時下載或本地 secret 注入。
中央+Gateway 健康
API latency、DB 連線、job 執行、audit 寫入量;Gateway 心跳(retained topic)、buffer 深度、重連次數、SOAP 失敗率。
每日全量+WAL
每月還原演練;telemetry 歸檔減低備份體積;Gateway buffer 提供斷網復原(保留原始 timestamp)。
向前兼容
中央 DB migration 版本管理;RLS policy 隨 migration 一齊管;UAT 專項測跨 site 洩漏。
8 項全過先開台
RLS 驗證 · 備份監控 · audit 啟動 · expiry 排程 · 月報排程 · P0/P1 清零 · 培訓完成 · 支援窗口。
八項風險登記,五條開放問題。
| 風險 | 影響 | 緩解 |
|---|---|---|
| 現場網絡不穩(MQTT/SOAP 斷線) | 數據缺口、警報延遲 | Gateway buffer+重連重試、retained 狀態、延遲 NFR 監控 |
| 承辦商 expiry 管理失誤 | 過期承辦商仍出現場 | 提前提醒(30/7 日)+自動停權+owner/admin 專屬管理+留痕 |
| site_admin 自升權限 | 越權管理 | API+RLS 雙層禁止派 owner/admin;UAT 防禦性測試 |
| Invite link 洩漏誤用 | 未授權帳號 | 一次性+7 日+鎖定 role/site;啟動後通知邀請人 |
| RLS 誤配致跨站洩漏 | 多租戶資料外洩 | policy 版本管理、migration 審查、UAT 專項測試 |
| 中央 DB 單點瓶頸 | 全平台受影響 | 容量規劃、連線池、讀寫分離、備份還原演練 |
| 感應器數據品質差 | 能源/警報失真 | Normalize 驗證、單位標準化、品質監控 |
| 現場人員唔慣用系統 | 報到記錄不全 | 極簡報到流程、流動友善、培訓+由上而下推動 |
設計已齊,工程未動。
repo 現有 18 個 PRD 頁面+2 個 AI 提案頁+2 個簡報 deck+設計系統 CSS。20 頁合規審查:9 頁 ✅ 跟足/近跟足、9 頁 ⚠️ 有落差、0 頁唔合格;零重複 id、零斷鏈。完整報告:docs/PRD-ARD-compliance-report.md
五個高嚴重度落差
① maintenance 缺「待驗收」狀態+票單轉工單 ② users-roles 邀請流程(link→7日→即棄→自設密碼)完全欠奉 ③ 月報同比做咗環比 ④ login「Root 登入中央控制台」死連結 ⑤ dashboard 行動連結全部失效。
由 S1 開始動工
確認五條開放問題 → 建立 apps/+infra/ 骨架與 CI(S1)→ 按 M1–M6 推進 20 個 Session;設計頁落差喺對應 session 開工前修齊。