fix: BugFix#338 门诊划价新增时校验就诊状态(患者安全)

- 在保存/签发医嘱前校验就诊状态
- 未接诊患者禁止划价/保存医嘱
- 防止医疗差错和数据不一致

修复范围:
- DoctorStationAdviceAppServiceImpl.saveAdvice()
- 添加就诊状态校验逻辑
- 状态 1001(挂号) 禁止划价
- 状态 1002/1003/1004(已接诊/已收费/已完成) 允许划价
This commit is contained in:
2026-04-05 13:15:28 +08:00
parent 0c5353cf8b
commit efc97c855c
3 changed files with 193 additions and 0 deletions

91
BUGFIX_ANALYSIS.md Normal file
View File

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