Files
his/MD/bugs/BUG_728_ANALYSIS.md

7.1 KiB
Raw Blame History

Bug #728 诸葛亮分析报告

文档类型: Bug分析 分析时间: 2026-06-13 01:00:18 分析模型: mimo-v2.5 (LLM深度分析)


基本信息

  • Bug #: 728
  • 标题: 【住院护士站-医嘱校对】转科医嘱核对通过后原床位被提前释放,导致转科前待处理事项无法执行
  • 模块: 病区护士工作站
  • 提出人: 陈显精

分析完成。以下是完整的 Bug 分析报告:


一、Bug 理解

禅道标题: 【住院护士站-医嘱校对】转科医嘱核对通过后原床位被提前释放,导致转科前待处理事项无法执行

重现步骤:

  1. 医生端为患者002床 不知道)开立转科预嘱并签发
  2. 登录住院护士站,在【医嘱校对】页面"未校对-临时医嘱"中找到该患者的"转科"医嘱
  3. 选中该医嘱,点击【核对通过】,提示"校对成功"
  4. 切换至其他菜单(医嘱执行、汇总领药等)

结果:

  • 护士核对通过转科医嘱后,系统立即释放并清退了该患者的原床位(床号显示为 -:-,非在科状态)
  • 患者从左侧在科患者列表中消失,护士无法在【医嘱执行】【汇总领药】等界面选中该患者
  • 转科前尚未完成的带药、治疗等医嘱无法执行

期望:

  1. 核对通过转科医嘱后,应保留原床位占用和在科状态
  2. 允许护士继续处理转科前所有待执行医嘱
  3. 只有护士在【入出转管理】页面确认执行【转科】或【清床】操作后,才正式释放床位

附图关键信息:

  • 图2527校对页面红框标注"核对通过"按钮和转科医嘱
  • 图2526/2529入出转管理页面床号显示 -:-,患者已标记"待转科",仍显示"待取药/待退药"和"待处理执行单"
  • 图2528校对页面患者"不知道"已从左侧列表消失,红框注释"转科医嘱护士校对通过后 待转科的患者床位应该保留"

综合总结: 护士在医嘱校对页面核对通过转科医嘱后,系统过早触发了床位释放和在科状态变更,导致患者从在科列表中消失,护士无法继续执行转科前遗留的待办医嘱。正确行为应是核对通过仅更新医嘱状态,保留床位和在科状态,待护士在入出转管理页面手动执行转科时才释放资源。


二、根因分析

核心问题代码: AdviceProcessAppServiceImpl.adviceVerify() 方法(第 465-472 行)

// 处理转科/出院等特殊医嘱
for (ServiceRequest serviceRequest : normalRequests) {
    if (ActivityDefCategory.TRANSFER.getValue().equals(serviceRequest.getCategoryEnum())) {
        encounterService.updateEncounterStatus(serviceRequest.getEncounterId(),
                EncounterZyStatus.PENDING_TRANSFER.getValue());  // ← BUG校对时立即改变患者状态
    } else if (ActivityDefCategory.DISCHARGE.getValue().equals(serviceRequest.getCategoryEnum())) {
        encounterService.updateEncounterStatus(serviceRequest.getEncounterId(),
                EncounterZyStatus.AWAITING_DISCHARGE.getValue());
    }
}

根因链条:

  1. adviceVerify(校对通过) 在处理转科医嘱时,直接调用 encounterService.updateEncounterStatus() 将患者 encounter 状态改为 PENDING_TRANSFER6
  2. 同时,转科医嘱的 ServiceRequest 状态被设为 COMPLETED3
  3. 这触发了系统级联反应——患者状态变更导致床位信息被释放(encounter_location 中 BED 类型的记录状态被联动修改),患者从在科患者列表中消失
  4. 实际的转科操作ATDManageAppServiceImpl.transferDepartment() 执行,这才是应该执行床位释放、状态变更的地方

正确的时序设计:

  • 校对通过 → 仅更新医嘱状态转科医嘱→COMPLETED不改变患者 encounter 状态
  • 入出转管理→转科 → 执行床位释放、状态变更、新病区分配

涉及文件:

  • AdviceProcessAppServiceImpl.javaadviceVerify() 方法,第 465-472 行
  • ATDManageAppServiceImpl.javatransferDepartment() 方法(正确的转科执行逻辑)
  • EncounterLocationServiceImpl.javaupdateEncounterLocationStatus() 方法(床位状态更新)

三、修复方案

修复步骤

步骤 1修改 AdviceProcessAppServiceImpl.adviceVerify() 方法

文件: healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java

修改内容: 删除校对通过时对转科医嘱的 encounter 状态更新

将第 463-472 行:

// 处理转科/出院等特殊医嘱
for (ServiceRequest serviceRequest : normalRequests) {
    if (ActivityDefCategory.TRANSFER.getValue().equals(serviceRequest.getCategoryEnum())) {
        encounterService.updateEncounterStatus(serviceRequest.getEncounterId(),
                EncounterZyStatus.PENDING_TRANSFER.getValue());
    } else if (ActivityDefCategory.DISCHARGE.getValue().equals(serviceRequest.getCategoryEnum())) {
        encounterService.updateEncounterStatus(serviceRequest.getEncounterId(),
                EncounterZyStatus.AWAITING_DISCHARGE.getValue());
    }
}

改为:

// 转科/出院医嘱核对通过时,不立即改变患者 encounter 状态
// 状态变更推迟到入出转管理页面执行转科/出院操作时触发ATDManageAppServiceImpl.transferDepartment
// 校对通过仅更新医嘱状态(已在上方 COMPLETED 处理),保留原床位和在科状态

说明:

  • 转科医嘱的 ServiceRequest 状态已在上方通过 updateCompleteRequestStatus 设为 COMPLETED3这是正确的
  • 删除的是 encounter 状态的联动更新,不影响医嘱本身的校对完成
  • 出院医嘱同理删除AWAITING_DISCHARGE 状态应推迟到出院操作时设置)

步骤 2编译验证

mvn clean compile -DskipTests -pl healthlink-his-server/healthlink-his-application
mvn test -pl healthlink-his-server/healthlink-his-application -Dtest="NurseStationTest" -Dsurefire.failIfNoSpecifiedTests=false

步骤 3前端确认无需修改

前端【医嘱校对】页面无需修改,因为:

  • 医嘱校对接口返回"校对成功"后,前端刷新医嘱列表,转科医嘱状态正确更新为"已完成"
  • 患者在科列表的刷新由后端 selectInpatientPage 查询驱动,患者 encounter 状态不变 → 列表中继续显示

四、路由决策

FIXER: guanyu关羽 — 后端开发)

REASON: 修复涉及 Java 后端 Service 层逻辑修改(AdviceProcessAppServiceImpl.adviceVerify 方法),属于纯后端业务逻辑调整,无前端改动,由后端开发 Agent 执行最合适。


路由决策

  • FIXER_ID: guanyu
  • 修复 Agent: guanyu后端
  • 原因: ** 修复涉及 Java 后端 Service 层逻辑修改(AdviceProcessAppServiceImpl.adviceVerify 方法),属于纯后端业务逻辑调整,无前端改动,由后端开发 Agent 执行最合适。

⚠️ 修复人员请先验证以上分析是否正确,再执行修复。