# DeID｜醫療資料去識別化

> 以醫療資料為主要情境、支援通用文件的開源工作站。辨識採規則與必要文字模型，PDF 視覺為選配，下載前須人工覆核。不是零外傳或離線網站。

- 網址：https://medical-deidentification-57229660377.asia-east1.run.app/
- 完整說明：https://medical-deidentification-57229660377.asia-east1.run.app/llms-full.txt
- 原始碼：https://github.com/gemini960114/medical-deidentification
- 原始工具作者：Dean Lin；專案採 MIT 授權
- 語言：繁體中文（台灣）

## 適用情境

- 醫療：出院摘要、照護紀錄、回診追蹤、病患總表。
- 通用：合約、報價單、客戶名冊、客服信件、會議紀錄、掃描文件。
- 首頁提供六份醫療與六份通用原始範例，全部使用程式產生的虛構資料。

## 操作流程

1. 在首頁頂部填管理者提供的服務存取碼，選擇模型與可選的 PDF 視覺功能。
2. 全幅上傳區接受 PDF、DOCX、XLSX、TXT、Markdown 或貼上文字；每批最多 10 份、原始檔每份最多 100 MB。
3. 瀏覽器解析與 OCR；文字經同源後端送至設定的模型。勾選視覺時另傳 PDF 頁面影像。
4. 合併規則與模型結果後人工覆核；無法定位的模型發現只列提醒，不代表已遮蔽。
5. 選擇部分保留、全部隱藏或自訂；標記方式選編碼、類別或圓圈佔位。
6. 結果頁可下載文件與對應 CSV；編碼標記才可用編碼表還原。
7. 到還原頁上傳成對文件與 CSV，還原已替換文字，不呼叫模型。

## 編碼與規則

- 使用編碼標記時產生 .deid 文件與 .mapping.csv；結果頁有獨立的「下載對應編碼表 CSV」。
- 編碼表包含原始敏感內容，應限制存取，不與公開文件一起交付。
- 跨批次沿用：先匯入既有編碼表再處理新文件，下載合併編碼表供下次使用；完全相同值與同類別才沿用，不做身分比對。
- 分頁關閉或重新整理後，沒有伺服器備份可找回遺失的編碼表。
- 18 類內建規則涵蓋姓名、證號、聯絡方式、公司、病歷號與日期等；自訂規則可儲存在同瀏覽器、同網站來源的 localStorage，不跨裝置同步。
- 規則停用不會停用文字模型。改規則會重套用規則並保留原模型結果。

## 限制與資料安全

- 模型金鑰只在後端，Cloud Run 透過 Secret Manager 注入；服務存取碼不是供應商金鑰；可由使用者按「儲存」記在同瀏覽器、同網站來源，下次自動帶入，亦可清除。
- 文字模型為必要流程，失敗時不能當作成功的只有規則結果下載。
- 視覺只適用 PDF，且須選管理者開放的視覺模型。Word／Excel 內嵌圖片不做視覺辨識；網頁不直接接受 JPG／PNG。
- 視覺辨識不會自動抹除照片、簽名或所有影像內個資；無法對應文字的位置必須人工處理。
- Word 註解、修訂紀錄、圖片與其他未解析封裝內容不保證清除。Excel 數值、公式、工作表名稱、註解與圖片不在完整覆蓋範圍。
- PDF 為內容重建，不保證原字型、圖形與版面保真；掃描 PDF 還原只還原辨識出的文字。
- 後端限制文字十萬字元、JSON 24 MB；PDF 視覺預設最多 20 頁。原始檔上限不保證所有文件都能在模型限制內完成。
- 文件與編碼表不主動寫入本服務資料庫或內容日誌；供應商端保存依其政策。
- 可還原編碼、部分保留與有限樣本測試，不代表不可逆匿名化或所有真實文件零漏抓。

## 執行方式

網站與 Node 後端一起運作。npm ci 後設定 .env，執行 npm run build、npm start；開發前端另跑 npm run dev。GitHub workflow 僅做 CI，不發布 Pages、不自動部署 Cloud Run。本機修改不會自動同步至線上。
