high · 已确认 · 已计入完成分未限定 PASSTHROUGH 来源,修复范围会扩大到其他自动来源记录
可能将未获确认范围内的自动或未知来源下机 Kt/V 改为推算值,造成历史透析治疗记录偏差。
证据:scripts/ktv-end-repair/KtvEndRepairDryRun.java:226 String sql = "select e.id, e.record_code, e.data_time, e.data_flag, e.data_xll, e.data_kt_v, "
+ "ifnull(e.is_force_modify_ktv,0), e.ktv_source_type, r.client_code "
+ "from patient_hemo_med_monitor_data e join patient_hemo_med_record r on r.code=e.record_code and r.is_deleted=0 "
+ "where e.data_flag=2 and (e.is_deleted=0 or e.is_deleted is null) and e.data_time>=? and e.data_time<? "
+ "and ifnull(e.is_force_modify_ktv,0)=0 and e.data_kt_v regexp '^[0-9]+(\\\\.[0-9]+)?$' "
建议:在只读筛选、备份核验和最终 UPDATE 条件中均明确限定来源为 PASSTHROUGH;同时核查已执行批次中 AUTO、UNKNOWN 等来源的记录并按备份纠正,补充非 PASSTHROUGH 来源必须跳过的测试。
medium · 已确认 · 已计入完成分执行 SQL 未保护执行期间转为人工来源的记录
试运行后被医护改为人工确认的下机记录仍可能被批量修复覆盖,导致人工确认内容和来源标记丢失。
证据:scripts/ktv-end-repair/gen_repair_sql.py:88 'WHERE b.backed_up_at IS NOT NULL\n'
' AND m.data_kt_v = b.expected_old_ktv\n'
' AND m.data_kt_v = b.old_data_kt_v\n'
' AND m.data_flag = 2\n'
' AND IFNULL(m.is_force_modify_ktv, 0) = 0\n'
' AND (m.is_deleted = 0 OR m.is_deleted IS NULL);\n' % table)
建议:把来源纳入乐观并发条件,同时核对当前来源与备份来源,并只允许仍属于获准自动修复来源的记录更新;增加仅改变来源而不改变数值的并发场景测试。
medium · 已确认 · 已计入完成分回滚只比较 Kt/V 数值,可能覆盖修复后的人工确认
回滚时可能把医护在修复后再次确认的记录恢复为旧值、旧来源和旧快照,导致最新人工确认数据丢失。
证据:scripts/ktv-end-repair/gen_repair_sql.py:99 'WHERE b.backed_up_at IS NOT NULL AND m.data_kt_v = b.new_ktv;\n' % table)
建议:记录本次修复后的版本或应用时间;回滚时同时校验该标识、修复后来源、快照及强制修改状态,任一不符即跳过并输出待人工处理清单。