Bug #399
進行中修正主圖高亮漏認「骨盆(未指定)」+ 父子表改自動推導杜絕同類漏失
0%
概述
修正主圖高亮漏認「骨盆(未指定)」+ 改為自動推導,杜絕同類漏失¶
背景¶
使用者實測回報:在骨盆特寫圖點「未指定」記錄一筆傷之後,主圖的骨盆區域不會變成紅色,但同樣做法在頭部/手/腳都會正常高亮。
主圖高亮靠 SoftTissueTab.tsx 的 PARENT_CHILDREN(父部位 → 子部位清單)判定:子部位有傷 → 父部位一起變紅。這張表是手工列舉的,而特寫圖的「未指定」按鈕是 makeUnspecifiedPart() 動態產生的虛擬部位(<zoom>_unspecified),不存在於任何 zone 陣列裡 —— 頭、口腔、左右手、左右腳六個都有手動補上,唯獨骨盆漏了。
這與 #397 抓到的「對照表漏 7 個動態虛擬部位」是完全相同的根因:凡是手工維護的清單,遲早會漏掉動態產生的部位。所以本票不只補那一行,而是把它改成結構上漏不掉的形式。
全表稽核結果:14 個父部位中,只有 pelvis_front 一個有問題,其餘完整。
變更內容¶
1 自動推導取代手寫清單(SoftTissueTab.tsx)¶
新增 helper,每個有特寫的父部位一律經由它帶入自己的「未指定」子部位:
function withUnspecified(zooms: (ZoomTarget | "mouth")[], ids: string[]): string[] {
return [...ids, ...zooms.map((z) => `${z}_unspecified`)];
}
-
HEAD_CHILD_IDS/MOUTH_CHILD_IDS/pelvis_front/ 手腳六條全部改走 helper - 手腳原本重複四次的
[...map(...), "hand_left_unspecified"]收斂成handChildren(side)/footChildren(side) - 程式碼裡不再出現任何手寫的
"xxx_unspecified"字串
2 測試選取器(data-part-id)¶
軟組織 SVG path 補上 data-part-id(骨骼圖本來就有 data-bone-id),讓 e2e 能穩定選到區域並讀取高亮狀態。不影響任何行為。
3 靜態稽核(directmap_coverage_audit.py 新增第二段)¶
14 個父部位逐一檢查:必須走 withUnspecified 路徑,或明文列出對應的 _unspecified 字串。追一層識別字定義鏈(常數名/helper 呼叫都追得到)。
另外單獨驗 helper 本身確實有接上 `${zoom}_unspecified` —— 否則整段檢查會變成空轉的假綠(#397 的側別稽核踩過同一個坑)。
4 待辦紀錄(docs/icd10-directmap-design.md 新增 §7)¶
把使用者另一個提問「為什麼選右側肩胛骨 Closed fracture 出移位碼 S42.111A,而不是未移位 S42.114A」的釐清與解法寫成待辦:
- UI 其實有
Nondisplaced鈕,點下去就是S42.114A(已實測) -
Closed fracture的語意是「閉鎖性,未註明移位與否」;未註明時編 displaced 是 ICD-10-CM 官方準則 I.C.19.c.1 的明文規定,不是本專案偏好 - 這些骨的碼家族只有 displaced / nondisplaced 兩種,沒有「移位未明」的第三種,必須二選一
-
待辦解法:(1) 帶
USE_DISPLACEDflag 的碼在結果列附註「未註明移位,依 ICD 準則編為 displaced」;(2) 按鈕文案改為「閉鎖性(未註明移位)」
同節收攏另兩項待辦(_score() 具名部位護欄、票 E 330 案回歸)。
驗收標準¶
| 項目 | 結果 |
|---|---|
| e2e:記錄「骨盆(未指定)挫傷」→ 主圖骨盆變紅 | 4 PASS(含頭部對照組) |
| 覆蓋率稽核 + 新增父子表稽核 | 1,987/1,987 出碼、14 父部位全數認領 |
| smoke_test | 53 PASS / 0 FAIL |
| typecheck / lint | 乾淨 |
兩個新測試都做過反向驗證¶
把 pelvis_front 改回舊寫法後重跑,確認兩者都會 FAIL(靜態稽核報「未帶入 pelvis_unspecified」、e2e 第 2 項紅),再還原 —— 確認不是假綠才採信。
測試維護規約¶
-
directmap_coverage_audit.py的職責擴充為「圖上點得到的部位,系統要正確反映」兩件事:出碼覆蓋 + 主圖高亮父子表;前端圖層變更時必跑 - 日後若有人把
PARENT_CHILDREN改回手寫清單,稽核會擋下
沒有任何資料可供顯示