Project Summary · PRD v1.0 + ARD v1.0 · 2026

設計
同埋佢底下嘅基建。

i3 FM 混合式平台——一站式設施管理:報修票務、維修工單、定期保養、警報、緊急應變、能源、承辦商評分、合規、日結月報、稽核。呢一頁由產品到數據平面,一次過睇清成個 project 點樣砌出嚟。

18功能頁面IA · 三大群組
20交付 SessionS1–S20 · 20 週
7角色層級RBAC · 管理鏈
19核心數據表單一中央 Postgres
180日稽核保留append-only
01 · Product

一套平台,覆蓋日常營運全部環節。

混合式部署:現場層每 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)嘅痛點,就係平台五個目標嘅來源。

02 · RBAC

七個角色,每層只可管理其下層級。

8 項權限能力 × 7 角色;完整矩陣見 角色與權限架構。site_admin 派唔出 owner/admin、support 全系統唯讀、field 只限指派項目。

developer — 系統開發 · 全系統總管 · 角色定義專屬
support — 全系統唯讀+人事查詢,不可開戶
site_owner — 單 site · 可 invite 同級 co-owner
site_admin — 專責帳戶 · 只可派下級(防自升)
site_staff — 日常操作 · 設備 CRUD · 無 invite
field — 現場維護 · 到場必須報到
technician — in-house · 無 expiry contractor — 有 expiry · 到期自動失效
決策卡一 · Invite link

先揀權限,後發連結

link 鎖定 role+site、7 日過期、用後即棄;受邀者自己設密碼,唔使 admin 代設。

決策卡二 · Field 兩類人

師父同承辦商都要報到

technician 無 expiry;contractor 帳號由 owner/admin 設期限,過期報唔到到。

決策卡三 · site_members

一人可服務多個 site

每個 site 獨立記錄 role/status/expiry,跨站權限互不相撞。

03 · Information Architecture

18 個頁面,三大群組。

以平台總覽(home)做導覽入口;另有 AI 提案兩頁(ai-planai-architecture),標示「提案,未入 PRD/ARD」。

營運中心 · 7 頁

日常營運工作台

平台總覽 · 儀表板(5 KPI+7 日能耗)· 票務池(SLA 達標率)· 維修工單(新單→處理中→待驗收→完成)· 保養計劃(完成率 vs 目標 90%)· 警報中心(自動+手動)· 緊急應變(快照上報中央)

分析與報告 · 5 頁

數據整合

能源分析(峰值/碳排/24h 曲線)· 承辦商評分(排名+評分規則)· 合規(到期追蹤)· 日結(8 項清單+簽署凍結)· 月報(同比+每月 1 日自動生成)

系統與架構 · 6 頁

平台底層

登入(站點/Root 雙模式)· 站點管理(Root 中央控制台)· 用戶與角色(invite link)· 稽核日誌(180 日留痕)· 系統架構圖 · 角色權限架構

04 · Architecture

現場收斂,中央單一數據平面。

唔做 per-site 資料庫。三種現場數據源喺 Site Gateway 統一為 canonical JSON(補 site_idtimestamp)先寫入中央。

現場層 · 每個 Site 一套
感應器(MQTT)溫濕度 · 能耗 · 設備狀態
BMS(BACnet/IP)Points 輪詢 · 點表映射配置化
供應商系統(SOAP)Web Service · 推送優先
Site Gateway:MQTT Broker + BACnet Adapter + SOAP Adapter + Normalize
平台核心 · 雲端單一 Instance
Supabase / PostgresRLS 按 site_id 隔離 · 19 表
API + AuthREST · JWT session refresh · RBAC middleware
排程 Jobsexpiry 每日 · 月報每月 1 日 · audit 180 日封存 · telemetry 13 個月歸檔
TLS(service role 寫入 · 用戶經 RLS 讀取)
前端
Site Web App每 site 獨立部署 · 離線優先 · v1.4.2
Root Console跨站唯讀總覽 · developer/support
例外:站點管理sites 屬中央寫入功能(Root CRUD)

現場設備經三種 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(唯讀)

原則一 單一中央數據平面 原則二 現場分離 Hybrid 原則三 Normalize Once 原則四 授權分層 Defense in Depth 原則五 Manage Downward Only 原則六 可配置而非硬編碼
05 · Integration

三個入口,一種格式。

Gateway 每 site 獨立部署(container);單一寫入管道:service role(bypass RLS)寫 telemetry,所有寫入帶 site_idtimestamp

MQTT · 感應器

Broker 訂閱

Topic i3fm/{site_id}/{device_id}/{metric};payload JSON。QoS≥1、狀態 topic 用 retained、斷線指數退避重連、本地 buffer 補送。

BACnet/IP · BMS

Points 輪詢

Object/Property → canonical metric 映射配置化(每 site 可唔同);關鍵點 30 秒、一般點 5 分鐘;不可達標記離線、單位轉換喺映射層。

SOAP · 供應商

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 }——後端同報表永遠只面對一種格式。

06 · Data Model

19 張核心表,六個域。

所有 site 相關表含 site_id 並受 RLS 控制;詳細 schema 見 ARD §5。

身份 · 5 表

users / roles / permissions

users(全域身份+密碼雜湊)· roles(7 內建角色+level)· permissions(8 項能力)· site_members(一對多 membership+expiry)· invites(一次性 link)

營運 · 4 表

tickets / work orders / plans / attendance

tickets(SLA deadline)· maintenance_work_orders(狀態機+完工 result)· maintenance_plans(頻率+next_due)· field_attendance(check-in/out+expiry 檢查)

供應商 · 2 表

contractors / vendor_scores

contractors(合約到期)· vendor_scores(回應+完成率+質素加權,規則可設定)

監測 · 2 表

alerts / telemetry

alerts(嚴重/警告/提示 × 六系統 × 自動/手動)· telemetry(canonical JSON;INSERT 僅 service role;13 個月後聚合歸檔)

應變合規 · 2 表

incidents / compliance_items

incidents(應變等級+動員+快照編號+timeline JSON)· compliance_items(四狀態+風險等級+到期自動標記)

治理 · 4 表

audit_log / daily_close / monthly_reports / sites

audit_log(append-only 180 日)· daily_close(8 項清單+frozen)· monthly_reports(每月 1 日生成)· sites(gateway_config JSON)

07 · Security

三層防線,最後一層喺資料庫。

前端 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 全權

Audit

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 走環境變數不入版控。

08 · Roadmap

20 個 Session,六個里程碑,20 週。

每個里程碑結束前 demo+驗收簽核;每 session 產出物入版本控制並有對應測試。

M1

基建

設計系統 token · 專案骨架 · CI(S1)

apps/ + infra/ 目錄、共用元件庫、lint/build pipeline

第 1 週
M2

身份與權限

登入 Auth · RBAC · Invite · 站點 onboarding(S2–S5)

JWT 簽發、7 角色矩陣、site_members 一對多、Root 開站

第 2–4 週
M3

核心營運

儀表板 · 票務池 · 維修工單 · 保養計劃(S6–S9)

KPI 聚合、SLA 引擎、工單狀態機、排程引擎

第 5–8 週
M4

現場與整合

現場報到 · 承辦商 expiry · 警報中心 · MQTT/SOAP 接線(S10–S13)

field_attendance、自動停權排程、規則引擎、三 adapter

第 9–12 週
M5

分析與應變

能源分析 · 緊急應變 · 合規(S14–S16)

telemetry 聚合、incidents 快照上報、到期提醒

第 13–15 週
M6

報表與收尾

稽核日誌 · 日結 · 月報 · UAT 部署培訓上線(S17–S20)

append-only 驗證、簽署凍結、自動生成排程、P0/P1 清零

第 16–20 週
09 · NFR

快、穩、安全,全部有數得計。

保安 Security
全線 TLS · RBAC+RLS 雙重隔離 · argon2/bcrypt · append-only audit · invite 一次性+7 日過期
效能 Performance
感應器→DB 端到端 ≤ 10 秒 · 常用聚合 P95 ≤ 2 秒(materialized view/預聚合)· 首屏 LCP ≤ 2.5 秒 · 單 Gateway ≤ 2,000 點/50 msg/s
可用性 Usability
繁中預設+EN 切換 · 桌面優先支援平板 · 狀態色 AA 對比 · SLA 倒數/優先級一眼可判 · 報到流動友善
擴展 Scalability
新站點=新增 site 記錄+部署 Gateway,毋須新資料庫;中央實例以連線池/讀寫分離應對
可維護 Maintainability
migration 向前兼容 · immutable build(v1.4.2)· SLA/警報/評分/碳排係數/保留期全部參數化
數據保留 Retention
audit 180 日後封存 · telemetry 原始 13 個月後聚合歸檔 · 報表永久
10 · Deployment & Monitoring

雲端一個實例,現場一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)。

Migration

向前兼容

中央 DB migration 版本管理;RLS policy 隨 migration 一齊管;UAT 專項測跨 site 洩漏。

上線清單

8 項全過先開台

RLS 驗證 · 備份監控 · audit 啟動 · expiry 排程 · 月報排程 · P0/P1 清零 · 培訓完成 · 支援窗口。

11 · Risks

八項風險登記,五條開放問題。

風險影響緩解
現場網絡不穩(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 驗證、單位標準化、品質監控
現場人員唔慣用系統報到記錄不全極簡報到流程、流動友善、培訓+由上而下推動
開放 1 SOAP/BACnet 實際認證與介面規格 開放 2 中央 Supabase 部署地區/數據主權 開放 3 評分公式加權預設值 開放 4 audit 冷儲存成本與合規取捨 開放 5 踢出站點後 membership 保留策略
12 · Status · 2026-09-10 審查

設計已齊,工程未動。

repo 現有 18 個 PRD 頁面+2 個 AI 提案頁+2 個簡報 deck+設計系統 CSS。20 頁合規審查:9 頁 ✅ 跟足/近跟足、9 頁 ⚠️ 有落差、0 頁唔合格;零重複 id、零斷鏈。完整報告:docs/PRD-ARD-compliance-report.md

18+2設計頁面PRD 18 + AI 提案 2
9頁跟足含 access-control 模範頁
9頁有落差集中權限語義/口徑
2簡報 deckPRD/ARD + 麥肯錫總結
0斷鏈20 頁全數通過
P0 · 建議優先修復

五個高嚴重度落差

① maintenance 缺「待驗收」狀態+票單轉工單 ② users-roles 邀請流程(link→7日→即棄→自設密碼)完全欠奉 ③ 月報同比做咗環比 ④ login「Root 登入中央控制台」死連結 ⑤ dashboard 行動連結全部失效。

Next · 工程化

由 S1 開始動工

確認五條開放問題 → 建立 apps/+infra/ 骨架與 CI(S1)→ 按 M1–M6 推進 20 個 Session;設計頁落差喺對應 session 開工前修齊。