Files
his/BUGFIX_ANALYSIS.md
华佗 (HIS 医疗专家) efc97c855c fix: BugFix#338 门诊划价新增时校验就诊状态(患者安全)
- 在保存/签发医嘱前校验就诊状态
- 未接诊患者禁止划价/保存医嘱
- 防止医疗差错和数据不一致

修复范围:
- DoctorStationAdviceAppServiceImpl.saveAdvice()
- 添加就诊状态校验逻辑
- 状态 1001(挂号) 禁止划价
- 状态 1002/1003/1004(已接诊/已收费/已完成) 允许划价
2026-04-05 13:15:28 +08:00

2.8 KiB
Raw Blame History

Bug 根因分析与修复方案

Bug 335 - 门诊医生站开立药品医嘱保存报错

问题分析

根据代码分析,DoctorStationAdviceAppServiceImpl.saveAdvice() 方法处理药品医嘱保存时可能报错的原因:

  1. patientId/encounterId 为 null - 删除操作时前端可能未传
  2. accountId 为 null - 患者账户信息未正确获取
  3. definitionId/definitionDetailId 为 null - 定价信息缺失
  4. 库存校验失败 - 药品库存不足

修复方案

已部分修复(见代码中的 BugFix 注释)

  • 已添加 patientId/encounterId 自动补全逻辑
  • 已添加 accountId 自动创建逻辑
  • 需要进一步验证 definitionId 的处理

Bug 336 - 门诊医生站开立诊疗项目保存报错

问题分析

诊疗项目保存与药品类似,但有以下特殊点:

  1. 必须选择执行科室 - 代码中有校验 throw new ServiceException("诊疗项目必须选择执行科室")
  2. 活动绑定设备处理 - 需要处理 handService() 中的设备绑定逻辑
  3. 库存校验 - 诊疗项目可能关联耗材

修复方案

  • 确保前端传递 executeDeptId执行科室
  • 检查 handService() 方法中的异常处理
  • 添加更详细的错误日志

Bug 338 - 门诊划价新增时未校验就诊记录及诊断记录

问题分析

这是患者安全问题! 未接诊患者也可新增划价项目可能导致:

  • 收费错误
  • 医疗纠纷
  • 数据不一致

当前代码问题:

  • OutpatientPricingAppServiceImpl.getAdviceBaseInfo() 仅查询医嘱,未校验就诊状态
  • 前端划价保存接口未找到(可能在其他地方)

修复方案

  1. 在划价查询时增加就诊状态校验
  2. 在划价保存时增加诊断记录校验
  3. 未接诊患者禁止划价

Bug 339 - 药房筛选条件失效

问题分析

查询结果中包含非选中药房的数据,可能原因:

  • SQL WHERE 条件未正确应用 locationId
  • 多表关联时过滤条件丢失

修复方案

  • 检查 DoctorStationAdviceAppMapper.getAdviceBaseInfo() 的 SQL
  • 确保 locationId 条件正确应用

修复优先级

  1. Bug 338 - 患者安全问题,最高优先级
  2. Bug 335/336 - 核心功能阻断,高优先级
  3. Bug 339 - 数据准确性问题,中优先级

测试用例

Bug 338 测试

  1. 选择未接诊患者,尝试划价 → 应禁止
  2. 选择已接诊但无诊断的患者,尝试划价 → 应提示补充诊断
  3. 选择正常接诊患者,划价 → 应成功

Bug 335/336 测试

  1. 门诊医生站开立药品医嘱 → 应成功保存
  2. 门诊医生站开立诊疗项目 → 应成功保存
  3. 签发医嘱 → 应成功

Bug 339 测试

  1. 选择"西药房"筛选 → 结果应仅包含西药房数据
  2. 选择"中药房"筛选 → 结果应仅包含中药房数据