病歷可以貼給 AI 嗎:往外送的順序只有一種,本機模型優先、院內部署次之、外部商業模型最後;別送遮過的原文,送重寫過的臨床問題

病歷可以貼給 AI 嗎?我把台灣的規範查了一輪

先講結論,五句話: 用腳本自動化批次抓病歷,不是灰色地帶。只在臨床照護必要範圍、只碰自己照護的病人、用完不留存,跨過這條線,法規要求醫院留得下每一筆存取與複製紀錄。 台灣沒有 HIPAA 十八項那種清單。我們的標準是「無從辨識特定個人」這個結果,刪滿十八項不等於完成去識別化。 只要還原用的代號對照表還在你電腦裡,你手上那份遮完的病歷就不能當匿名資料看,它仍有間接識別的可能,屬於假名化而不是匿名化。 往外送的順序只有一種:本機模型優先,院內部署次之,境外商業模型最後,而且送之前要先看自己醫院的規範。 真的要往外送,別送「遮過的病歷原文」,送「重寫過的臨床問題」。讓一段紀錄被還原的不是欄位,是敘述的唯一性。 下面把推論過程攤開。 這篇的起點,是上一篇 chart-scrub(病歷去識別化工具)發文後,黃祥瑋醫師在留言提了兩件很重要的事:一是自動化把病歷抓下來收集通常是違規的,只是看醫院有沒有在抓;二是即便符合 HIPAA 十八項,他個人還是不會把資料送到雲端或境外。 這兩句都站得住,而且背後都有具體的法源。我把條文一條一條查回全國法規資料庫核對現行版本,順著「抓病歷、遮病歷、送病歷」這條動線整理在下面。 一、抓病歷:法律看的不是工具,是範圍 用 AutoHotkey 複製跟手動 Ctrl+C 複製,在法條上沒有分野。法律真正在意的是範圍:你抓的是不是自己照護的病人、是不是照護必要、抓完有沒有留下來累積。 先講最實際的一層:這件事留得下紀錄。醫療機構電子病歷製作及管理辦法(111 年 7 月 18 日修正)第 13 條要求,病歷的存取、增刪、查閱、複製,連同執行人員、時間、內容,都要保存完整紀錄;第 4 條還要求系統要有異常使用的因應措施。誰在什麼時間複製了哪些內容,法規要求院方必須留得下來。至於院方實際能看到多細、能不能直接算出你複製了幾筆,要看各院 HIS 與稽核設定,條文不保證這件事。祥瑋說的「看醫院有沒有在抓」,制度上就是這個意思:痕跡一定在,抓不抓是各院的執行。 而且實務上最先找上門的,通常是自己醫院,法院排在很後面。醫院這幾年一直被要求把資安做起來(醫院屬於資通安全管理法的「緊急救援與醫院」關鍵基礎設施領域,個別醫院可經衛福部指定為關鍵基礎設施提供者,被指定的要提出資安維護計畫),端點監控與異常告警愈做愈普遍。醫院也有義務管人:醫院個人資料檔案安全維護計畫實施辦法要求總床數一百床以上的醫院(公立醫院準用)依業務需要設定存取權限、跟所屬人員約定保密義務、把個資使用紀錄至少留存六個月。批次抓病歷最可能的劇本,是資安告警、約談、院內懲處,一路都還沒碰到刑法。 那刑法呢?大家最常聽到的是刑法第 359 條,這條值得把構成要件講完整,因為它常被簡化成「用腳本抓就是犯罪」,那不是條文寫的。它要同時滿足三件事才成立。第一是「無故」:取得紀錄欠缺正當理由。臨床照護必要範圍內調自己病人的病歷,是有授權的;超出照護必要、碰到不是自己照護的病人,授權基礎才會被質疑。第二是取得的要是「他人」電腦系統的電磁紀錄:帳號是你的,不代表資料是你的,你對那批資料有沒有處分權限要個案認定。第三是「致生損害於公眾或他人」:這個獨立要件最常被漏掉,成立與否要能說明損害是什麼,複製了不等於當然有損害。所以用自己的帳號不等於免責,大量複製也不等於當然犯罪,中間那片灰色地帶,不值得拿職業生涯去測試。我沒有找到醫師用本人 HIS 帳號批次下載病歷的公開判決,這裡只能講風險方向,不能講定論。 最後一層是個資法。病歷是個資法第 6 條的「特種個資」,原則禁止蒐集、處理、利用,只有六款例外能開門(例外長什麼樣,第四節講研究的時候會攤開)。臨床照護本身有法源,這不是問題;問題出在「抓下來累積成一個資料集」的那一刻:複製、儲存、輸出在個資法上都算「處理」,從那一刻起你就需要一個答得出來的例外,而「我自己想研究」不在清單裡。 所以抓病歷的安全範圍就是一句話:只在臨床照護必要範圍、只碰自己照護的病人、用完不留存。自動化只是把這件事做快,沒有改變它的性質;範圍守得住,工具隨你選。 二、什麼才算「去識別化」 台灣看結果,不看清單 先介紹 HIPAA 十八項。HIPAA 是美國 1996 年的《健康保險可攜性與責任法案》,它的 Safe Harbor 規則列了一張清單:姓名、比州更小的地理區域、跟個人有關的日期、電話、Email、身分證號、病歷號、保險號、帳號、證照號碼、車牌、裝置序號、網址、IP、生物特徵、臉部照片、其他任何唯一識別碼,十八類刪乾淨,再加一個常被忘記的第二條件:機構沒有實際知情,認為剩下的資訊單獨或與其他資料結合仍能辨識個人。兩個都滿足,法律上就「視為」完成去識別化(地理與日期各有細節例外,這裡不展開)。它最大的好處是可操作:照清單做完,大部分情況就有明確依據,不用逐案猜。 台灣沒有這張清單。我們的門檻在個人資料保護法施行細則第 17 條,寫的是「以代碼、匿名、隱藏部分資料或其他方式,無從辨識該特定個人」。那是結果標準,不是清單標準:法律不管你刪了幾個欄位,只問最後那段文字指不指得回一個人。刪滿十八項,不等於在台灣已經完成去識別化。 復健科的人對這件事要特別有感。罕見診斷,加上特定術式,加上就診年月,加上哪一家醫院,四項湊起來常常就足以回推到一個人,而這四項沒有一項在十八項清單裡。真正把人認出來的,常常是整段敘述的唯一性,而不是某個特定字串。 這個結果標準的天花板,是憲法法庭 111 年憲判字第 13 號,就是 2022 年 8 月的健保資料庫案。它講的去識別化標準,理由第 54 段的原文是「使一般人採取當時存在技術與合理成本,在不使用額外資訊時,不能識別特定當事人」。要注意這份判決審查的對象:它處理的是個資法第 6 條第 1 項但書第 4 款下的健保資料庫利用,所以才會一併要求限定醫療衛生目的、限定主體(公務機關或學術研究機構)、統計或學術研究的必要性,以及獨立監督機制。這是那個案子的整組理由,不是任何人把病歷去識別化之後都要打勾的通用條件。不過放在那個脈絡下讀,方向仍然很清楚:去識別化本身不是免死金牌,它是跟目的限制、監督機制包在一起才站得住的。個人把去識別化的資料丟給境外商業模型,這兩個配套剛好都是零。 ...

August 20, 2026 · 2 分鐘 · 397 字 · 陳柏威 Po-Wei Chen
chart-scrub 去識別化前後對照:左邊是含姓名、病歷號、生日、電話、地址的原始紀錄,右邊同一筆變成 PT-0001 代號與遮罩標記,主訴與理學檢查完全保留

病歷不能就這樣貼給 AI:我怎麼先把身分拿掉

門診遇到一個有意思的個案,想查一下教科書怎麼講、想跟 AI 對一對自己的鑑別診斷有沒有漏掉什麼。這件事我幾乎每週都在做。 但病歷不能就這樣貼上去。 這跟「我信不信任那家 AI 公司」是兩回事。資料一旦離開這台電腦,它去了哪裡、留多久、被誰看過,就不再是我能決定的事。所以我想要的不是一個更好的承諾,是一個機械上的動作:在資料離開之前,先把身分拿掉。 我把自己在用的那套整理乾淨、開源了,叫 chart-scrub。 程式碼:github.com/drpwchen/chart-scrub 線上試用:drpwchen.github.io/chart-scrub(整頁在你的瀏覽器裡跑,什麼都不會上傳) 它做什麼 一筆門診紀錄丟進去: 病歷號碼:1234567 姓名:王大明 出生:1971/03/05 主訴:右肩痛三個月,夜間痛醒。王大明表示上個月在李阿嬤介紹的推拿館推過。 電話 0912-345-678,住新北市板橋區文化路一段100號5樓。 出來變成: [代號 PT-0001,55歲] 病歷號碼:PT-0001 姓名:PT-0001 出生:[55歲] 主訴:右肩痛三個月,夜間痛醒。PT-0001表示上個月在[稱謂]介紹的推拿館推過。 電話 [電話],住[地址]。 臨床內容一個字沒動,身分不見了。 為什麼不是直接遮成「[姓名]」就好 這是整件事我最先想通的地方。 如果只是把名字換成 [姓名],那同一個病人下次回診、下下次回診,三筆紀錄之間就沒有任何東西把他們串起來了。可是「這個人三個月前打過針、當時有效、這次又痛回來」,這種前後對照本來就是臨床判斷的一部分,弄丟了,剩下的資料就沒什麼討論價值。 所以第一層做的是定向抽換:這個人變成 PT-0001,下次回診他還是 PT-0001。代號對回真名的那張表,只存在我自己電腦上的一個 SQLite 檔,不進雲端、不進筆記庫、也不會給任何 AI 讀。 生日也一樣:直接刪掉可惜,換算成年齡剛好。臨床要的是「55 歲」,不是那個日期。 第二層:一張寧可多遮的網子 定向抽換只能處理「我知道他是誰」的那個人。紀錄裡還會有一堆我事先不知道的東西:電話、身分證、地址、順口提到的其他人。 第二層就是一組正規表示式規則,把這些東西通通遮掉。設計取向很單純:寧可多遮。偶爾誤遮一個醫學名詞,代價是我重看一次;漏掉一個名字,代價大得多。 有一個順序上的細節,是實作時才想清楚的:定向抽換一定要在通用規則之前跑。反過來的話,名字已經先被遮成 [姓名] 了,代號就再也接不上去,跨次就診的那條線也就斷了。 機器自己驗自己 寫完之後我最不放心的是:它到底有沒有真的遮乾淨? 所以最後一步是殘留檢查:程式跑完,拿它自己知道的每一個真名、每一個病歷號,回頭搜自己剛產出的那份輸出。只要有一個活著,這筆就判定失敗、離開碼給 2,我不會拿去用。 另外還有兩個訊號是抓「漏網」的形狀:一個中文姓名黏在已經被遮掉的身分證旁邊、以及長得像身分證卻沒被遮的字串。這兩種都不是「我知道他叫什麼」,而是「這個位置本來就該有東西被處理掉」。 這件事的通則 自動化最怕的不是失敗,是安靜地成功。所以每一段自動化的最後,都值得補一個「回頭檢查自己」的動作,而且要讓它有辦法大聲喊失敗。 開源的過程中,抓到自己三個 bug 這部分我覺得比工具本身有意思。為了公開,我補了測試、逐條檢查,結果揪出三個原本在用的版本就有的問題,而且三個都是那種不會報錯的失敗。 第一個:我習慣的手寫格式是「身分證號+姓名」擠在同一行。但實際的紀錄常常長這樣: 陪同者 A123456789 李小華 程式抓到的姓名是 「陪同者」,不是李小華。因為規則寫成「身分證號旁邊的 2 到 4 個中文字」,而「陪同者」剛好也是三個中文字,還排在前面。結果就是:一個角色詞被登記成病人,真正的名字反而漏掉。修法是要求姓名的第一個字必須是常見姓氏。 第二個:醫院系統匯出的文字檔編碼很雜,UTF-8、UTF-16、Big5 都遇過,所以程式會一個一個試。問題是一個 Big5 檔用 UTF-16 去解,不會出錯,會解出一堆亂碼。而亂碼不會命中任何一條規則,所以程式一路跑到底、印出「全數通過」,實際上它什麼都沒遮到。修法是:只有在檔案真的帶著 UTF-16 的標記時才用 UTF-16 去解。 ...

August 14, 2026 · 1 分鐘 · 130 字 · 陳柏威 Po-Wei Chen