討論 #1462
是由 陳國瑋 於 28 天 前更新
## 背景
主需求:#1422。
原始 mockup 在「案場即時負載」中,將 A17 三個 Charge Group 的 contractCapacity(各 99 kW)直接相加為 297 kW,並據此顯示案場契約容量利用率與剩餘容量。
經現有程式碼與 A17 read-only 資料確認:
- contractCapacity 是 Charge Group 層級欄位,現有 SlotCalculator 使用它計算該群組可配置的 slots。
- 系統目前沒有獨立的 building/site 層級上游契約容量欄位。
- 系統也沒有描述各 Charge Group 是否共用上游容量、是否可加總的電力拓撲資料。
- 因此直接相加只得到群組排程上限合計,不能可靠宣稱為案場對台電的契約容量或剩餘容量。
本票只定義 Dashboard 的唯讀顯示與 read model,不修改任何充電、輪轉或容量配置邏輯。
## LOAD-DEC-001:V1 不推算案場層級契約容量
**狀態:已確認(2026-09-03,Ken)**
### 使用者需要知道的資訊
「案場即時負載」回答:
- 全案場目前合計使用多少充電功率。
- 即時功率資料是否仍為最新、可以信任。
- 功率隨時間的變化。
「群組容量與 Slots」則分別回答每一個 Charge Group 的:
- 目前功率。
- 該群組自己的 contract capacity/allocated power。
- occupied/reserved/available slots 與既有 queue 狀態。
兩者不得混成一個未經資料模型證明的案場契約容量。
### V1 顯示規則
- 保留案場即時總功率 currentPowerKw 與負載圖表。
- 保留 latestMeterAt、freshness/source status,使使用者知道即時數字是否過期。
- 移除案場層級的「契約容量」、「契約容量利用率」與「剩餘容量/餘裕」。
- 不得以 SUM(group.contractCapacity) 產生 buildingContractCapacityKw。
- 各 Charge Group 區塊仍可顯示該群組自己的 currentPowerKw/contractCapacityKw 與 slots。
- 群組百分比若顯示,分母只能是該群組自己的 contractCapacity;label/位置必須讓使用者清楚它是群組值。
- currentPowerKw 未知時顯示「—」與對應資料狀態,不得以 0 冒充。
- 本決策適用所有 building;不得硬編碼 A17 或固定群組數量。
### Frontend 要開發的內容
- 「案場即時負載」主數字只顯示 Backend 回傳的 currentPowerKw。
- 說明文字改為「各充電群組目前充電功率合計」及資料 freshness 語意。
- 移除 site-level contractCapacityKw、utilizationPercent、remainingCapacityKw 的 label、數值、進度條與前端計算。
- 不從 Charge Group 陣列自行加總契約容量。
- 群組列表仍逐組顯示該組容量/slots,並適應不同群組數量。
- Loading、null、Partial、Stale、Error 不得退回假資料或把未知顯示為 0。
### Backend/API 要開發的內容
- Live Load 的 REST/WebSocket read model 回傳 currentPowerKw、latestMeterAt 與 freshness/source status。
- currentPowerKw 延用 #1424 DEC-004:只彙整 Backend 判定未 stale、enabled Connector 的最新有效 Power value。
- V1 的 building-level Live Load DTO/event 不回傳由 Charge Group 容量相加而來的 contractCapacityKw、utilizationPercent、remainingCapacityKw。
- Group Capacity read model 仍逐組回傳既有 group contract capacity、allocated power、reserved/occupied/available slots。
- 不新增案場契約容量設定欄位、資料表、管理 API 或電力拓撲模型。
- 不修改 SlotCalculator、rotation dispatch、queue lifecycle、OCPP/Modbus 指令或任何業務資料。
### A17 驗證基線(不是跨案場規則)
查詢日期:2026-09-03。
- A17 有 B1、B2、B3 三個 Charge Group,各自 contractCapacity = 99 kW。
- 三組欄位數值相加為 297 kW,但只能視為群組排程上限的算術合計。
- A17 有 4 個 Charge Point、12 個 Connector,皆已指派群組。
- 現有資料無法證明三個群組使用三個完全獨立的上游契約,或可用 297 kW 計算案場餘裕。
A17 數字只用來揭露原 mockup 的假設與驗證通用設計,不作為其他案場的固定值。
## LOAD-DEC-002:V1 保留即時/今日/7 日三種負載檢視
**狀態:已確認(2026-09-03,Ken)**
- 「案場即時負載」保留「即時」、「今日」與「7 日」三個檢視,不移除 7 日。
- 7 日負載呈現的是功率(kW)隨時間的變化,與「30 日充電用量」呈現的能量(kWh)/Sessions 不同,兩者不互相取代。
- 三個按鈕只切換 read-only 圖表資料,不改變 MeterValue 回報頻率、充電控制、queue、rotation 或 WebSocket 連線。
- 本決策先確認三種檢視必須存在;每種檢視的 X 軸時間範圍、bucket 粒度、tick label,以及 Y 軸採瞬時值/平均值/峰值的定義,列為下一項需求決策。
- 在軸線定義確認前,mockup 的折線與座標文字仍屬假資料,不可當成 API contract 或驗收基準。
## V1 明確不開發
- 案場層級契約容量設定/維護頁。
- Charge Group 上游配電拓撲或可加總旗標。
- 案場契約容量利用率、剩餘容量或其告警門檻。
- 因 Dashboard 顯示而調整群組容量、slots、queue 或 rotation。
- 根據 mockup 假資料執行任何營運判斷。
若未來確實需要案場契約容量 KPI,應另案定義 authoritative site capacity、共用/獨立上游拓撲、有效期間及權限;不能恢復以群組容量直接相加。
## Acceptance Criteria
- [ ] 案場即時負載不顯示或回傳由 group contract capacity 加總產生的案場契約容量。
- [ ] UI 不顯示案場契約容量利用率或剩餘容量。
- [ ] currentPowerKw、latestMeterAt 與 freshness/source status 可獨立正常呈現。
- [ ] 各 Charge Group 自己的 contract capacity 與 slots 仍可閱讀,且不被標示為案場總契約容量。
- [ ] 1 個、2 個或多個 Charge Group 均不需要 FE 硬編碼。
- [ ] currentPowerKw 為 null/stale/error 時有明確狀態,不顯示假 0。
- [ ] Backend 與 FE 都不自行推導 site-level capacity、utilization 或 remaining capacity。
- [ ] 本需求只有唯讀查詢與呈現,不改變既有作業邏輯。
## Mock/文件同步
- Working mock:documents/dashboard-mockup/a17-operations-dashboard.html。
- 本次確認後立即移除案場層級 297 kW、7.4% 與 275.16 kW 餘裕文案。
- 各群組自己的 99 kW 與群組內比例保留。
- Redmine attachment #1110 保留為初始設計基準;全部需求確認後再上傳整併後的最終 HTML/PDF。
## 需求管理狀態
- Parent:#1422
- Related:#1424(REST/WebSocket 資料分工與事件契約)
- Requirement status:**LOAD-DEC-001/002 已確認;Live status:**本決策已確認,其他 Live Load X/Y 軸與 bucket 規則仍逐項確認** 圖表/範圍細節仍逐項確認**
- Final specification:全部 Dashboard 區塊確認後整併至 #1422 v1.0 文件
- Implementation tickets:需求鎖定後才建立 FE/BE/QA child issues
返回