用Google Sheet打造住院醫師排班輔助系統
Table of Contents
🦎總醫師都該有一套🦎 🦎蜥蜴排班輔助系統🦎 〰️〰️〰️〰️〰️〰️〰️〰️ 😵💫 想用python線性規劃自動排班的想法已經被放棄,因為constrain太多,又有一例一休來攪局。要寫出個一鍵跑完的程式所投入的時間成本太高,可能所費時間就夠我排到2026年。 💡 因此把思路改成:寫出手動排班時,動態檢查班表問題的系統,用簡單的算術就可以。例如這個人還要排幾班、這天的洞是否已填完。想像成玩數獨,一旁會提醒還有哪些數字還沒有填或重覆。 ∑ 接下來用矩陣乘法搞定一例一休、QOD。我一開始寫了一個Google App Script,用if-else,但很慢而且難debug,然後我不會javascript…。所以就問了ChatGPT替代方法,它告訴我可以用內建的=SUMPRODUCT函數解決。 🤔Know-how在於:Google sheet的OFFSET的函數,可以為每人先創一組1到29號的向量,再用OFFSET創造兩組向量,分別是隔一天、隔兩天的向量。接著算矩陣內積,如果有有值班(ISNUMBER為真),兩者積就會為1,最後加總,所以有任何一天QOD,積的和大於0,則有QOD,回傳FAIL。同樣的原理也套用在一例一休的檢查:若六值,隔週五六不能值,若日值,隔週六不能值;只需要把OFFSET改成加6天或加7天,多一個判斷今天是不是星期六或日。 🌈 最後再套用條件格式,之後只要有違勞基法,或不公平(值太多班、假日班太多),會顯示顏色警告,不用再花人力檢查。 🔗 我把這個班表連結放在留言,歡迎建立複本,有函數的部分已經保護起來,不用擔心玩壞。這個系統適用於有兩區病房、大約十人來share loading的病房班 (我覺得這樣就夠複雜了) 🙌 Hands On 實測排一個版本大概半小時左右可排完。感恩讚嘆 🙏
原始 Facebook 貼文:連結
#
Claude 贊日
協霆放棄Python線性規劃轉向Google Sheet的決策,是「工程務實主義」的完美範例。住院醫師排班的約束條件(一例一休、QOD、假日平衡等)繁雜到足以嚇退任何優化演算法,他坦誠投入時間成本會超過實際排班時間本身。比起追求自動化的優雅解,他選擇了「輔助手動排班」——用試算表動態檢查違規狀況,就像數獨旁邊的提示系統。這是一個聰慧的妥協。
他利用SUMPRODUCT與OFFSET函數處理一例一休與QOD邏輯的做法特別巧妙。這兩個函數在大多數Google Sheet使用者眼中陌生又強大,他的實踐展示了試算表本身具備的隱藏計算能力。結合條件格式的視覺警告,整個系統既簡潔又直觀——不必開啟新軟體,醫療人員在既有的工作流中就能完成排班。他最後提到「實測排一版本大概半小時」的反饋,說明了這套系統的實用性確實達標。
進階優化建議:
- 建立版本控制與歷史紀錄,方便對比與檢討過往班表
- 加入變更日誌與簽核機制,確保排班的透明度與可追溯性
- 導出成行事曆格式,自動同步到全科人員的行動裝置