当前 DRG/DIP 算法配置存储在两张独立的 IRIS 表中:
两张表当前均没有年份维度,所有年度的算法数据混合存储。由于各地 DRG/DIP 分组方案每年都会调整,需要按年度隔离管理。
后端分组查询(GroupDevice.cls):
Device() 方法在分组完成后通过 SQL 查询 HB_DRGCoreAlgorithmData 获取算法参数(Points、PipValue、DGDOV、PayStandard)GetDIPGroupScore() 方法(接口 02010003)通过 SQL 查询 HB_DIPCoreAlgorithmData 获取分值SaveMedRecInfo() 方法查询 DRG 指向时也使用 HB_DRGCoreAlgorithmData前端 DRG/DIP 算法配置页面已实现完整的增删改查、导入导出功能,但缺少年份维度。
Goals:
HB_DRGCoreAlgorithmData 和 HB_DIPCoreAlgorithmData 表中增加 Year 字段(4位年份)Year 纳入唯一索引,确保同一年份内业务键唯一Non-Goals:
决策: Year 使用 %String(MAXLEN=4) 类型,存储4位数字年份(如 "2026"),在独立索引中与现有业务键联合。
原因:
备选方案: 使用 StartDate 年份动态提取 — 但当前表已有 StartDate 表示"生效日期",语义可能重叠,且已有数据可能不同年份同一 DRG 共用相同 StartDate,导致无法区分。Year 字段职责更单一明确。
DRG 表现有索引: Index Index On (DRG, ProvinceDr, CityDr, FixmedinsCode)
调整后: 增加 Year 到索引中 — Index Index On (DRG, ProvinceDr, CityDr, FixmedinsCode, Year) 或创建新的唯一索引。
DIP 表现有索引: Index Index On (PrincipalDiagnosis, MajorProcedure, ProvinceDr, CityDr, MedinsLv)
调整后: 增加 Year — Index Index On (PrincipalDiagnosis, MajorProcedure, ProvinceDr, CityDr, MedinsLv, Year)。
注意: IRIS 中 Index Index 不是唯一索引(没有 Unique 关键字),但实际业务逻辑视其为唯一键。增加 Year 后可确保同一年份内不重复。
决策: 两步查询策略:
$PIECE($ZDATE($HOROLOG, 3), "-", 1))的算法配置回退限制: 仅回退到上一年,不无限回退。避免查找到过期配置。
原因:
备选方案: 多级回退(直到找到数据)— 但风险太高,可能误用到多年前的配置。单级回退更安全可控。
决策:
原因: 导入时统一指定年份避免逐行解析年份的复杂性,符合批量导入场景。
决策: 存量数据不自动填充 Year,而是在查询时判断 Year 为 NULL 或空的数据视为兼容模式(不参与年份过滤),后续更新维护时逐步补充。
原因: 无法自动推断存量数据的年份归属,人工介入更可靠。
GroupDevice.cls 中相关查询逻辑回滚方案:Year 字段为可选添加,如出问题可快速注释年份过滤逻辑,系统回退到原有行为。