Releases: voho0000/NHI-FHIR-BRIDGE
NHI-FHIR-Bridge v1.0.3
1.0.3 — 2026-06-22(下載完成的 CTA 改成 chip,不再是藍底線連結)
- 下載完成後那條「至 ④ 查看「醫析 MediPrisma」」原本是藍色底線文字,改成柔藍底圓角 chip + 尾端箭頭(與
.cta-reason同一套--notice-info樣式),看起來像刻意設計的按鈕。文字也縮短(拿掉開頭→與「開啟」)。純樣式,功能不變。
NHI-FHIR-Bridge v1.0.2
1.0.2 — 2026-06-22(popup 標題同步改名)
- popup 視窗內的標題從「NHI-FHIR Bridge」改為「健康懷爾抓抓 NHI-FHIR-BRIDGE」,與 manifest 顯示名稱一致。純文字,功能不變;實測一行放得下。
NHI-FHIR-Bridge v1.0.1
1.0.1 — 2026-06-20(改商店顯示名稱 + 權限提示說明)
- 擴充功能顯示名稱改為「健康懷爾抓抓 NHI-FHIR-BRIDGE」(manifest
name/default_title)。商店網址 slug 不變,只有顯示名稱變。功能完全不變。 - 新增「為什麼安裝時 Chrome 說『讀取以及變更』」說明(給民眾的安全說明 Q5 + 商店描述):那是 Chrome 對所有「能存取網站」的擴充功能的固定字眼,描述權限的最大能力(讀+寫),非實際行為 —— 本工具只讀取、不修改健保署網站任何內容。
NHI-FHIR-Bridge v1.0.0
1.0.0 — 2026-06-17 🎉 首次公開發布(Chrome Web Store 上架)
這是第一個正式對外版本。 功能上與 0.20.18 完全相同 —— 沒有任何程式變動,只是把版號從 0.20.x 升格為 1.0.0,標記「第一個正式、對外承諾穩定的版本」這個里程碑。
走到 1.0.0 之前累積的能力(摘要):
- 資料涵蓋:就醫(門診/急診/住院)、用藥(含慢性處方)、檢驗、影像(報告+JPG)、過敏、手術/處置、預防接種、重大傷病、成人/癌症篩檢 —— 全部轉成 HL7 FHIR R4。
- 隱私優先:Bridge 本身零資料收集、不接 AI/雲端;去識別化預設開啟(姓名/身分證/生日遮罩,病摘與報告內文一併去識別)。
- 兩種用法:純擴充功能(下載 FHIR JSON)/ 擴充功能+自架本機後端(Dashboard+SMART on FHIR)。
- 品質:200+ 條 LOINC 路由規則、就醫精準關聯、多輪安全稽核、CI 全綠。
詳細演進見以下各版條目。
NHI-FHIR-Bridge v0.20.18
0.20.18 重點 — 2026-06-17(修:全新病人影像第一次抓取一直卡「資料準備中」)
問題:從未開啟過「影像清單」頁的全新病人,第一次抓影像時,整批影像列會一直停在「資料準備中」(jpG_STATUS = "-"),橋接抓不到任何影像。
根因(2026-06-17 實機驗證):健保署是「有人真的開啟/渲染 IHKE3408S01 影像清單頁,後端才開始確認那批影像」。橋接原本是在使用者目前的分頁(通常停在基本資料頁)用 API 輪詢影像清單 30 秒 —— 但純打 API 不會觸發 NHI 去確認,所以那些「-」永遠不會變,30 秒空轉後就放棄。(這也說明為何之前「過幾分鐘自己會好」的觀察成立 —— 前提是使用者曾經手動點進影像清單一次。)
實測:同一個全新病人,在基本資料頁時 27 列「-」、0 可抓;把頁面導到影像清單後 → 0 列「-」、11 列可抓 + 20 列無影像。
修法:當影像清單整批還在「資料準備中」時,橋接先用一個隱藏分頁渲染一次 IHKE3408S01(注入 token、等 SPA 載入)來觸發 NHI 確認 —— 不打擾使用者目前的分頁;確認是病人層級的,所以渲染一次後即可輪詢到狀態變化。輪詢預算由 30 秒拉長到約 60 秒(已被觸發、會收斂)。若影像很多、一次同步內還沒全部確認完,維持「過幾分鐘再同步一次」即可補齊(觸發狀態 NHI 端會保留)。
NHI-FHIR-Bridge v0.20.16
0.20.16 重點 — 2026-06-17(去識別化:預設改為開啟+修補病摘/報告內文的生日+病歷號碼)
去識別化預設改為「開啟」(privacy-first):以往預設關閉(為了民眾自用要真實身分證讓 SMART App 比對)。考量本工具要上架公開、處理的是敏感健康資料,改為預設開啟,要保留完整個人備份(真實姓名/身分證/完整生日)的人再自行切到「關閉」。實作:maskNameEnabled 不存在時一律當「開啟」(!== false),只有使用者明確關閉才停用;四個讀取點(isMaskEnabled、popup 載入、backend 查詢 key、sync patientId)+ popup 預設選「開啟」radio + 說明文案全部對齊。既有使用者若從沒動過這個開關,升級後會自動變成開啟。
使用者實測發現:去識別化開啟時,出院病摘(DocumentReference HTML)與病理報告(DiagnosticReport.conclusion)內文裡的「出生日期」「病歷號碼」沒有被遮。Patient.birthDate 結構欄位本來就正確(只留年份),姓名/身分證在敘述裡也有被遮 —— 但生日與病歷號碼從來不在敘述掃描清單裡。
根因:原本敘述去識別化(replaceNameDeep)是「拿使用者填入的姓名/身分證去 match-and-replace」,清單裡只有那兩項;若生日填錯,報告裡的真實生日也不會被掃到。
- 新增
redactDemographicsInText(mapper/helpers)— 標籤錨定(label-anchored)去識別化:認「出生日期:」「病歷號碼:」這種欄位標籤去遮後面的值,不靠比對使用者填的內容 → 即使生日亂填,報告內的真實生日照樣被遮。內文出生日期保留年份、月日遮成 XX(如1960/XX/XX)—— 內文是顯示用、不拿來算年齡,所以不像結構欄位Patient.birthDate那樣補成YYYY-01-01;病歷號碼整段遮掉。 - 就醫/住院/採檢日期(標籤不同)刻意保留 —— 仍屬有限去識別(保留醫院名稱+就醫日期)。
- 同時涵蓋兩種版型:純文字(病理報告,全形斜線)與
<b>標籤:</b>值的病摘 HTML 表格;在 extension byType 階段套用(病摘 HTML 此時仍是 plaintext,document-reference.ts才會 base64 編碼)。本機與後端兩條路徑都過。 - popup 去識別化說明補上「出院病摘/報告內文的生日與病歷號碼一併遮去」。
- 驗證:對一份真實病摘實測,DiagnosticReport.conclusion 2→0、出院病摘 HTML 5→0 外洩,就醫/住院日期 5/5 全保留;新增 5 筆 mapper 單元測試,689 測試全綠。
NHI-FHIR-Bridge v0.20.15
0.20.15 重點 — 2026-06-17(影像清單「資料確認中」時改為後置,不再卡住其他資料的明細)
承 v0.20.14:同步內「確認影像清單」最多等 30s,先前是循序卡在手術/慢箋/用藥明細之前。本版做條件式換位:
- 清單仍「資料確認中」(沒有可用列) → 先跑其他明細(手術/慢箋/用藥),再回頭做影像。NHI 趁那 ~1 分鐘在背景把清單確認完,等我們回來做影像時往往已經 settle、確認等待直接早退,常常同一次同步就抓到圖,而且完全不卡其他資料。
- 清單已 ready(有可觸發/可下載的列) → 維持原本流程:影像觸發+抓取跟其他明細並行,不變。
- 實作:把整段影像鏈(確認→明細→pending→觸發+抓取+sweep)包成一個 closure,依「是否還在確認」決定在其他明細之前或之後呼叫。觸發/抓取/sweep 那段邏輯原封不動,只是換呼叫時機。typecheck + 224 unit tests 全綠。
NHI-FHIR-Bridge v0.20.14
0.20.14 重點 — 2026-06-17(移除影像「備製中」live banner,改成不卡同步的簡單提醒)
源自使用者回饋:popup 的影像備製 live banner(「1/5 張準備中」「0 張無法備齊」那種)count 不準又囉嗦,而且同步內「確認影像清單」一等就 60 秒、把其他資料的明細補強卡住。
- 移除整套 live banner + 背景輪詢:刪
imaging-prep-banner.ts、imaging-prep-poll.ts,以及對應的 popup markup/CSS、IMAGING_PREP_*常數、alarms輪詢、startPrepPolling/stopPrepPolling、banner 專用圖示(共 9 檔)。 - 改成不帶數字的靜態提醒:同步結束若有影像仍在備製/確認/未抓到,摘要只附一句「部分影像仍在健康存摺備製中,請過幾分鐘後再按「取得健康存摺資料」即可補齊」(不再顯示不可靠的即時張數)。
查看明細仍保留「資料確認中 N 筆 / 無影像檔 N 筆」分類(這 count 是同步當下直接數的,準)。 - 同步內「確認影像清單」等待 60s → 30s:仍一偵測到 usable 列就早退;30s 只在清單真的還在確認時才用滿,避免把其他資料明細卡住。慢的(大量影像史)清單靠使用者手動再同步取得(那句提醒會講)。
- 跨同步自動重抓(原本由 banner 的背景輪詢負責)隨之移除 —— 改由使用者依提醒手動再同步。真正的「確認清單與其他明細並行」最佳化列為後續單獨變更。
NHI-FHIR-Bridge v0.20.13
0.20.13 重點 — 2026-06-17(影像「資料確認中」不再被當成無影像漏抓)
實測根因(live 打 NHI API 2026-06-17 確認):大量影像史的病人,首次同步時整份影像清單是 jpG_STATUS = "-"(資料確認中) —— NHI 還在後端確認清單。先前邏輯只認 "A"/"1" 為「有圖」,同步內只等 24 秒等不到翻轉,就把整批當成「無影像檔」報「沒有可下載的圖片」。但 "-" 是暫態,過幾分鐘會自己翻成 "A"(可觸發,真的有圖)或 "2"(真無圖) —— 實測同一位病人那批 "-" 稍後全變 "A"/"2",且對 "A" 列觸發(POST /add)能正常備圖。所以那批是真的漏抓了 X 光/CT 影像。
修正:
- 新增「資料確認中」判定(
imagingRowIsConfirming):狀態非{1,A,2,0}的暫態(以排除法認定,不寫死"-")。 - 同步內等待 24s → ~60s(仍一偵測到 usable 就早退);剩下交給跨同步。
- 文案分流:
"-"資料確認中(顯示「N 筆仍在備製中,稍後再同步即可取得圖片」)≠"2"無影像檔(才說「無影像檔,只取得文字報告」)。不再一律誤報「沒有可下載的圖片」。 - 跨同步續抓:同步結束仍有
"-"→ 啟動既有的「影像備製中」背景輪詢(reuse prep-poll),NHI 把清單確認完(翻成A/1)後提示再同步即可補齊。新終止分支僅在「純資料確認中(本次沒觸發任何列)」情境啟用,完全不動已調好的觸發等待 phantom 防呆。 - CI:
imaging-list-status.test.js加 11 個 case(imagingRowIsConfirming/countImagingConfirming/ 與imagingListNeedsResolve的區別)。
NHI-FHIR-Bridge v0.20.12
0.20.12 重點 — 2026-06-16(提醒元件統一 Phase 2:影像 prep banner 對齊 notice token;用詞統一「健康存摺」)
純 UI / 文案,無 FHIR 資料模型或邏輯變更:
- 影像 prep banner 對齊 notice 配色 + 換 SVG 圖示:先前 banner 自己一套 sky-blue / green / orange 色盤+emoji(🖼️ ✅ ⏱ ℹ️ 🔒)。現在四個狀態對應到共用 token(準備中=info、已備齊=success、逾時=caution、無法提供=neutral),emoji 全換成乾淨 inline SVG(clock / check / alert / info / lock);其中登入逾時的 🔒 改用與登入 chip 同一顆鎖頭 SVG。圖示抽到共用
popup/icons.ts(chip 與 banner 單一來源)。 - 用詞統一為「健康存摺」:popup 與 SW 狀態訊息先前混用「健保署」「健保存摺」「健康存摺」(官方正式名為「健康存摺」)。本次把所有使用者可見文字統一成「健康存摺」(popup 全部 + 影像 banner + SW 進度/逾時訊息)。
nhi-adapters.ts內部開發註解與 docs/README 不在本次範圍。 - 設計取捨:連線狀態 banner(
.conn-banner,即時狀態指示器,含重試/說明)與常駐免責聲明卡(刻意低調的米色)維持原樣,屬刻意的例外。