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

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

92 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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. 选择"中药房"筛选 → 结果应仅包含中药房数据