Files
his/md/bug-analysis/bug444-analysis.md

1.8 KiB
Raw Blame History

Bug #444 分析报告

Bug 描述

生成临时医嘱界面,"已引用计费药品"列表未正常显示药品详细名称信息。具体表现为:

  • 列表中出现了"小腿烧伤扩创交腿皮瓣修复术"(属于手术诊疗项目)
  • 列表中出现了"心脏彩色多普勒超声"(属于检查/诊疗项目)
  • 非药品类计费信息错误地混入"已引用计费药品"列表

根因定位

文件: openhis-ui-vue3/src/views/surgicalschedule/index.vue 行号: 1580 (handleMedicalAdvice), 1864 (handleQuoteBilling), 1850 (handleTemporaryMedicalRefresh)

三处过滤逻辑均使用:

if (item.adviceType !== 1) return false;

问题1主因: adviceType 字段命名兼容不完整。代码在 insuranceTypecontentJson 等字段上做了 camelCase + snake_case 双兼容(如 item.insuranceType || item.insurance_type),但 adviceType 只检查了 camelCase。若后端返回 snake_case 数据(advice_typeitem.adviceTypeundefinedundefined !== 1true,导致所有非药品项目全部放行。

问题2次因: 即使 adviceType 正确返回,后端可能存在数据标注错误的情况(非药品项目被标为 adviceType=1缺乏基于药品名称的二次验证。

修复方案

  1. adviceType 检查增加 snake_case 回退:const at = item.adviceType ?? item.advice_type; if (at !== 1) return false;
  2. 增加药品名称关键字二次过滤:排除名称中包含"术"、"检查"、"超声"、"多普勒"等关键词的非药品项目

验收标准

  1. "已引用计费药品"列表中只显示药品类项目
  2. 不显示手术诊疗项目(如"小腿烧伤扩创交腿皮瓣修复术"
  3. 不显示检查项目(如"心脏彩色多普勒超声"
  4. 药品名称正常显示