Files
his/bug444_analysis.md

2.1 KiB
Raw Blame History

Bug #444 分析报告

Bug 描述

【手术管理-门诊手术安排】生成临时医嘱界面,"已引用计费药品"列表未正常显示药品详细名称信息,且错误地带出了非药品类的计费信息(如手术诊疗项目"小腿烧伤扩创交腿皮瓣修复术"、检查项目"心脏彩色多普勒超声")。

根因分析

数据流

  1. 用户点击"医嘱"按钮 → handleMedicalAdvice() → 调用 getPrescriptionList() 获取计费数据
  2. 用户对数据进行过滤后展示在"已引用计费药品"列表
  3. 用户点击"引用计费"按钮 → handleQuoteBilling() → 再次调用 getPrescriptionList() 获取最新计费数据

根因定位

handleQuoteBilling() 方法index.vue:1866-1877缺少非药品关键词过滤逻辑。

handleMedicalAdvice() 中有两层过滤:

  1. adviceType !== 1 过滤(只保留药品类型)
  2. 关键词排除过滤(排除名称中包含"术"、"超声"、"检查"等非药品关键词的项目)

handleQuoteBilling() 中只有第一层过滤(adviceType !== 1缺少关键词排除过滤

当后端返回的计费数据中某些非药品项目被错误标注为 adviceType=1 时:

  • handleMedicalAdvice() 能通过关键词过滤排除这些项目
  • handleQuoteBilling() 无法排除,导致非药品项目出现在"已引用计费药品"列表中

代码对比

过滤条件 handleMedicalAdvice (L1576-1597) handleQuoteBilling (L1866-1877)
encounterId 匹配
adviceType === 1
名称非空
关键词排除 缺失
requestId 过滤

修复方案

handleQuoteBilling() 方法的过滤逻辑中,添加与 handleMedicalAdvice() 一致的关键词排除逻辑:

// 🔧 修复 Bug #444: 排除名称中包含手术/检查/诊疗关键词的非药品项目
const excludedKeywords = ['术', '超声', '多普勒', '检查', '检验', '彩超', 'X线', 'CT', 'MRI', '扫描', '造影'];
if (excludedKeywords.some(kw => medicineName.includes(kw))) return false;