← 回主控台
業餘 → 專業賽事平台:底層對齊規劃
2026-07-15 拍板。前提:先走業餘平台,再慢慢往專業靠。本頁回答:哪些
底層現在就要鋪(不鋪以後大改)、UI 現在只露業餘需要的一小角、以及明確
現在不要做的清單。搭配
SOP 差距分析(業界怎麼做)與
三賽事流程圖(我們現在怎麼做)。
判斷標準(整份規劃只有這一條):UI 隨時能改、能藏、能收合 — 便宜;資料模型、寫入鏈、身分權限一旦跑了真資料,以後要改 = 遷移+回填+全 reader 重寫 — 貴。所以「以後要專業」的東西,現在只做三件事:表開對、鏈拆對、權限入口收攏成一個 Gate;UI 用預設值+收合把複雜度藏起來,業餘用戶完全無感。
一、五大核心組別 → 平台角色模型(這是最重要的一塊地基)
Gemini 的五組架構值得採用,但業餘賽事常常「一人分飾五角」。做法:底層開一張賽事職務表,權限檢查收攏成單一 Gate;業餘 UI 只顯示「+ 加工作人員」(預設=競賽組全權),專業版才把五組下拉展開。這樣未來加任何組別/細權限都只是加 enum 值,不用重寫散落各處的權限判斷。
| 組別(Gemini SOP) | 職責 | ArenaMate 現況 | 底層動作(現在) | 業餘 UI 露出 |
| 大會總幹事 | 總控/跨組協調 | = 主辦館 owner/admin(有) | 職務表 role=director,主辦 owner 自動入座 | 不顯示(就是建賽的人) |
| 競賽組 | 賽制/抽籤/賽程/裁判/紀錄台/計分 | 大部分有(精靈/排程器/裁判);裁判長角色 v2 進場 | role=competition;裁判長=head_referee(v2 批) | 「+ 工作人員」預設此組 |
| 場務器材組 | 場地/器材/劃線/清潔 | 借場地 venue_request 有;器材 checklist 無 | role=venue_ops 先佔位 | 不顯示(P2 才有功能) |
| 行政公關組 | 報名收費/文宣/獎盃/開幕頒獎 | 報名費帳本有、banner 有;頒獎無 | role=admin_pr 先佔位;帳本權限改走職務 Gate | 不顯示 |
| 醫護安全組 | 醫護/急救箱/送醫動線 | 無 | role=medical 先佔位;安全資訊 jsonb(見 G7) | 精靈收合段「安全與保險(選填)」 |
表:arena_tournament_staff(tournament_id, profile_id, role, created_by);Gate:tournamentCan(profileId, tid, capability) — 所有「我能不能管這場」從此只走這一個入口,現有 canManageGym 判斷收進去。
二、「現在不做、以後大改」地基清單(G1–G7)
G1 賽事職務表 + 權限單一 Gate 批2
不做的後果權限判斷現在散在各 View 用「是不是館幹部」判;等專業版要分組分權時,每一處都要重找重改(全 codebase 手術)。
現在最小做法一張表+一個 Gate+把現有判斷收進 Gate(行為完全不變)。
業餘 UI賽事管理頁一行「工作人員 +」,加人=競賽組全權。五組下拉先不出現。
G2 成績兩段式寫回(確認窗口) 批1·裁判v2
不做的後果現在比分一寫回就立刻進 SLP/Elo/晉級/榮譽,錯了無法矯正;以後要加「申訴 30 分鐘窗口/隊長簽名確認」= 重寫整條結算鏈。這是最典型的地基。
現在最小做法寫回 orchestrator 拆成 record(記分)→ commit(結算)兩段,中間窗口可設;業餘預設窗口=0 分鐘(立即 commit,行為跟現在一模一樣)。窗口內可發異議→凍結待裁決。
業餘 UI零變化。賽事設定多一個收合開關「成績確認窗口」,預設關。
G3 per-match 裁判指派表(含報酬+簽核欄位) 批1·裁判v2
不做的後果v2 反正要開這張表;若欄位沒一次留好(每場費率快照 fee_snapshot、裁判長簽核 signed_off_by/at),之後補=回填已完賽資料,而且執法履歷/裁判費結算兩個功能都卡在它上面。
現在最小做法v2 的指派表直接帶 fee_snapshot、signed_off_by/at、source(invited/temp/handover)欄位。裁判單場報酬現在就做:賽事設定「裁判 $X/場、線審 $Y/場」→ 結算頁自動算應領(記帳,金流先 mock,同報名費帳本模式)。
業餘 UI費率欄留空=義務裁判(不顯示錢);有填才出現結算區。
G4 競賽規程快照 + 報名同意版本化 批2
不做的後果規程是「參賽契約」。現在報名沒有「同意了哪一版規則」的紀錄;以後出退費/資格爭議無憑據,補做要動整條報名鏈+歷史資料無法回溯。
現在最小做法賽事表加 regulations jsonb(從精靈既有設定自動組裝:資格/賽制/截止/退費/棄權/申訴條款模板,主辦零額外輸入);報名寫入 agreed_regulations_at + 版本 hash。
業餘 UI精靈末頁多一頁自動生成的「競賽規程」預覽;報名 flow 多一個勾選「我已閱讀並同意」。
G5 種子基準日(strength 快照) 批2
不做的後果種子用「當下」實力分,抽籤後分數變動會被質疑;歷史賽事無法回答「當時憑什麼排他第一種子」。事後補=無法回填。
現在最小做法定案(maybeAutoDraw / 手動產表)時把每個參賽者的 entrantStrength 快照存進 bracket_data.seeds,顯示「以 X/X 實力分為準」。約十行。
業餘 UI對戰圖角落一行小字。
G6 排程約束:同人不重疊 + 最低休息 批1·裁判v2
不做的後果planRoundBatchSchedule 的呼叫介面會被越來越多地方用(三賽事+倒排期);約束參數晚加=每個呼叫端重談。而且這是選手最有感的排程 bug(兼項/跨隊撞場)。
現在最小做法排程 Gate 加兩條純規則:同 user_profile_id 兩場不重疊、間隔 ≥ minRestMinutes(預設 30);裁判指派也吃同一條(裁判自己的比賽/執法不重疊)。
業餘 UI零變化(排程器自動遵守);衝突時紅字提示。
G7 安全/保險/雨備 資訊欄位 批2
不做的後果後果小(jsonb 隨時能加),但便宜到不做可惜;而且「延期 vs 取消」的雨備條款要跟 G4 規程一起長,分開做會做兩次。
現在最小做法賽事表 safety jsonb:保單號/AED 位置/緊急聯絡人/雨備方案(延期或取消)。條款文字進 G4 規程模板。
業餘 UI精靈收合段「安全與保險(選填)」,全空也能建賽。
三、現在就做的小功能(業餘也直接受益)
- 裁判單場報酬(老闆點名)— 進批 1,見 G3。台灣有公定行情表可當預設參考值。
- 競賽規程自動生成 — 進批 2,見 G4。主辦零額外輸入,專業感+法務保護立刻到位。
- 候補名單擴到館間賽/選拔賽 — 區域聯賽已有 waitlist,擴過去是複用不是新做。
- 大會螢幕模式 — 唯讀輪播頁(場地×比分×next-up),web 已能 build,場館電視直接開。批 3。
四、三批 Roadmap
| 批 | 內容 | 狀態 |
| 批 1 裁判 v2+結算地基 | per-match 指派(G3 含報酬/簽核欄位)、長名單多選含段位、部份出席+順位遞補、N=3 天未回自動棄權、x=2 天未定通知主辦、臨時裁判/轉交、50km 邀請池、球員不可兼正式裁判 Gate、G2 兩段式寫回(窗口預設 0)、G6 排程約束、接線 decideFriendlyStart 降級賽制 | 任務卡已開,規格已存 memory |
| 批 2 賽事治理地基 | G1 職務表+權限單一 Gate(五組模型)、G4 規程快照+報名同意、G5 種子基準日、G7 安全欄位;順帶:候補名單擴賽制 | 規劃完成,待批 1 落地後開 |
| 批 3 營運便利 | 整賽延期 flow(颱風季)、大會螢幕、Next-up 叫場推播、秩序冊/成績 PDF、執法履歷簽核+匯出、頒獎 run-of-show、賽後問卷 | 照 SOP 頁 P1→P2 依序 |
五、明確「現在不要做」(避免過度工程)
- 協會證照登錄與考核系統(等裁判池有量再說;先用平台段位)
- 裁判費真金流撥款(先記帳,綠界接上再說 — 跟報名費同節奏)
- FIBA 式紀錄台四人組角色(業餘一個計分員就夠,G1 的 role enum 留得下)
- 直播抽籤/可驗證亂數(先做 G5 基準日就夠回應公平性)
- 電子獎狀/頒獎典禮流程、傷害通報表單、本人證件驗證(P2)
- 五組權限的細粒度矩陣 UI(表先開,UI 等專業版)
一句話:批 1 把「裁判+結算」的骨架換對,批 2 把「權限+規程」的骨架換對 — 這兩批做完,之後從業餘長成專業平台都是加 UI 和開開關,不再動骨頭。
拍板紀錄:x=2 天、N=3 天(2026-07-15)。本頁與 /arena-sop-gap.html、裁判 v2 任務卡互相引用。