專案

一般

配置概況

動作

Feature #421

進行中
SC

ICD 出碼管線重構:來源分區(確定/待確認/AI補充)+ 時序防護 + 吸收規則(v0.8.0)

Feature #421: ICD 出碼管線重構:來源分區(確定/待確認/AI補充)+ 時序防護 + 吸收規則(v0.8.0)

是由 Sashiba Chou 於 約 2 個月 前加入.

狀態:
New
優先權:
Normal
被分派者:
-
開始日期:
2026-08-06
完成日期:
完成比例:

0%

預估工時:

概述

ICD 出碼管線重構:來源分區(確定/待確認/AI補充)+ 時序防護 + 吸收規則(v0.8.0)

背景

實測發現三個互相糾纏的問題(2026-08-03~06 與使用者多輪討論定案):

  1. 快手時序 race:背景查詢與手動「AI 擷取」互不知情、都整批覆蓋結果 ——
    手動擷取完成後,較晚回來的背景查詢會把結果(含確定碼)整批蓋掉
  2. 同傷兩套碼:檢傷文字的背景 AI 與圖上標記的查表對同一傷各自出碼
    (實例:頭部挫傷 → 查表 S00.93XA 確定 vs AI 猜 S00.03/S00.83/S00.33/S10.0)
  3. 兩引擎不同步:圖上建議(引擎A查表)與檢視頁碼(引擎B AI)是兩份不完全重合的
    清單,醫師要自己心算差集;醫師手標/修正傷情後檢視頁不會跟著動

變更內容

時序防護(lib/triage-icd-query.ts)

  • 世代計數器:每次發起查詢遞增;結果回來時世代已過 → 直接丟棄
  • abortTriageIcd():手動「AI 擷取」按下即中止背景查詢(手動永遠優先)
  • lib/icd-extract.ts 加 signal 支援(AbortSignal 貫穿兩段式)

背景查詢改單一兩段式管線

  • 完整建議(引擎A)→ structured_injuries 查表毫秒出碼,前端重標
    confidence: certain → table(「確定」only 屬於圖上標記,建議碼掛「待確認」)
  • AI 只抽查表未涵蓋的文字(backend 既有不重複邏輯生效)→ 同傷兩套碼在源頭消失
  • 查表段結果先行送達(progressive),AI 補完再更新
  • 觸發點擴充:① 手動貼上(原有)② 外掛開窗套 context 有機轉文字、無 pre_icd
    (backend 現抓路徑必然如此;預跑上線後 pre_icd 已備 → 不觸發、零等待)

檢視頁來源分區(ReviewTab)

依信任度三區,live 派生、傷情變動 debounce 350ms 自動查表刷新(零 LLM):

  • 確定 — 圖上標記查表直出;標記增刪即時同步,免重按擷取
  • 待確認 — 尚未採用/忽略的檢傷建議;於軟組織/骨骼頁採用後升級為確定
  • AI 補充(圖上未標記) — 預設摺疊(顯示筆數,點擊展開;無其他分區時自動展開),
    附提示「若屬實請至人體圖補標記」

合併/吸收規則(lib/icd-merge.ts,純函式可測試;涵蓋性優先、絕不真刪):

  • 吸收:AI 組任一候選碼 = 確定/待確認碼,或其來源文字經引擎A解析出的 partId
    命中圖上標記 → 不再顯示(已有更高信任替身)
  • 變灰:來源文字部位屬「被醫師忽略的建議」→ 弱化顯示+註記「相關建議已被忽略」
  • 判不準 → 保留在 AI 補充區(寧多勿漏)

帶回勾選邏輯(外掛模式)

  • 預設勾選改「確定優先」:原始結果含 certain → 只預勾這些;含 table(未確認)→
    不預勾;純 AI(舊路徑)→ 維持預勾首選(相容既有習慣)
  • live 確定碼變動 → 勾選自動同步(新標記自動勾、刪標記自動退)
  • 主診斷防禦:程式化增刪後 primaryCode 落在勾選外 → 帶回時自動回退為第一個勾選

測試安全網(frontend/tests/triage-suggestions.test.ts 新檔)

建議引擎 + 合併層迴歸測試 34 項:解析 10 組語句(含 5 反例)、雙側展開、
「手背」不被「背」搶走、pending 消化/忽略、structured 對映(joint 去前綴、
Burn 缺程度排除)、relabel、吸收×3路徑、變灰、不誤殺、certain/table 排除。
執行:cd frontend && npx -y tsx tests/triage-suggestions.test.ts。
維護規約:改詞條表或合併規則必須同票更新本檔案例(詞條擴充的安全網)。

其他

  • version.ts → v0.8.0 + CHANGELOG

驗收標準

  • 迴歸測試 34 項全 PASS
  • tsc --noEmit 過;ESLint 零新增(僅剩既有 6 項舊問題);npm run build 過
  • smoke test 全 PASS(backend 零改動;table_only + 空 text 實測正常出碼)
  • 時序:手動擷取中止背景查詢;世代過期結果被丟棄(程式碼路徑)
  • 人工情境驗證(dev 3001,請使用者實測):
  • 貼檢傷單 → 檢視頁先出「待確認」碼(毫秒)、AI 補充稍後抵達
  • 圖上採用建議 → 檢視頁該碼由待確認升級確定、自動勾選
  • 手標 AI 已出碼的傷 → AI 組被吸收,只剩確定碼一列
  • 忽略建議 → 對應 AI 組變灰註記
  • 快手:AI 未回前按「AI 擷取」→ 背景被中止,結果不被蓋掉
  • 刪除標記 → 確定碼與勾選同步消失

相關

  • 設計討論:#413/#418 之後的三輪討論(合併規則 2026-08-06 定案)
  • 待辦(另票):幽靈右鍵忽略、帶回按鈕群(全部帶回+部分帶回+醫令)、
    兩圖快查帶回 ICD、移除主診斷 radio、詞條擴充(等語料)

沒有任何資料可供顯示

動作

匯出至 PDF Atom