变更目录:
openspec/changes/report-drg-group-result-verify/后端:新增表类src/User/BSDRGMedInsuGroupResult.cls(BS_DRGMedInsuGroupResult);在既有src/src/DRG/Report.cls追加 5 个方法(号段 02010606~02010610) 前端:新增frontend/src/pages/DRG/DRGGroupResultVerify.tsx(菜单 keyreport-drg-group-verify,路由/report/drg-group-verify) 参考实现:src.DRG.BasicData.ICDInfo(三接口导入)、pages/BasicData/ICDQuery.tsx(导入 Steps 弹窗)、src.DRG.Report(02010601~05)
已确认口径(用户确认,不可擅自更改)
BS_DRGMedInsuMedicalRecord.DRG,不涉及 BS_DRGGroupRecord;MR.MdtrtSn)→ 结算ID(BS_DRGMedInsuSettleMentInfo.SetlId 反查)→ 病案号 + 入院日期(MR.MedcasNo);医保登记流水号、医保结算ID、病案号 不能同时为空;医疗机构编码/医疗机构名称 严格必填,禁止用当前登录机构补全;batchOptions;MR.MdtrtSn 即医保登记流水号且生产库有值BS_DRGMedInsuSettleMentInfo.SetlId 可反查 MdtrtId / HISAdmIDMR.ValiFlag 有效值域与重复流水号情况CB_MapInterface 020106xx 记录的 ClassName='src.DRG.Report' 等取值MR.MedcasNo(病案号)可用且与 AdmDate 组合可唯一定位useHospitalOptions / getSession().hospYBCode 可用src/User/BSDRGMedInsuGroupResult.clsExtends (%Persistent, %XML.Adaptor, src.util.DynamicObject.Adapter) + SqlRowIdName = ID + SqlTableName = BS_DRGMedInsuGroupResult)Parameter %JSONREFERENCE = "ID";DRG、DRGDesc、PsnName、PsnNo、MedcasNo(18)、MdtrtSn、SetlId、FixmedinsCode、FixmedinsName、AdmDate、DscgDate、SetlDate、BatchNo、RowNum、ImportUser、ImportDate、ImportTimeBatchNo(bitmap)、MdtrtSn、SetlId、MedcasNo、FixmedinsCode(bitmap)、DupIdx(BatchNo, MdtrtSn, SetlId)Storage Default 块(^BSDRGMedInsuGroupResultD/I/S,Data 含 %%CLASSNAME 与全部字段)Do $SYSTEM.OBJ.Compile("User.BSDRGMedInsuGroupResult","ck") 无错误src/src/DRG/Report.cls)%GrColumnList():模板 12 列(含 病案号)%GrTrim / %GrNormDrg($ZCVT($TRIM(v),"U"))%GrNormDate(v):日期归一;try/catch 内禁止带参 QUIT,用标志位在块外返回%GrDecodeFile:Base64 三级解码 + 剥离 BOM + 换行统一 + 双引号状态机解析%GrBuildHeaderMap:按列名映射(不做同义别名),缺列写入 missing%GrParseRows:逐行解析 + 校验(必填 6 列、三关键值不能同空、日期、出院≥入院、文件内重复)%GrLoadMr / %GrLoadSetl / %GrLoadMrByCas(缓存键 MedcasNo|AdmDate)%GrPrefetch:登记流水号 / 结算ID / 病案号 批量预取(IN 每批 500)%GrCompareOne:三级判定 + 输出 matchBy / 系统侧字段%GrBuildVerifyWhere:机构 / 批次 / DRG / 姓名 / 病案号 / 日期类型(adm|discharge) + 区间$G() / %Get("xxx")DownloadDRGGroupResultTemplateCode: 02010606)Base64Encode(UTF-8 BOM)catch → ..%HandleError(...)PreviewDRGGroupResultImportinvalid(不补全)ConfirmDRGGroupResultImportBatchNo、写入导入人/时间/行号%Save(),上限 20000 行batchNo / totalCount / successCount / failCount / failedRows[]QueryDRGGroupResultVerifyORDER BY ID,上限 20000)TRIM+大写 比 DRGverifyFlag 过滤%Paginate 分页medcasNo、matchBy 与 batchOptionsDeleteDRGGroupResultBatchdeletedCountReport.cls 末尾成员仍为 ParameterDo $SYSTEM.OBJ.Compile("src.DRG.Report","ck") 无错误db/register_interface_0201060{6,7,8,9,10}.sql(S/S/A/S/D,幂等 + 校验 + 回滚)2026/01/05 / 20260105 归一、出院<入院、重复行verifyFlag、medcasNo、dateType 筛选生效;分页正确frontend/src/api/report.tsGroupResultVerifyItem(含 medcasNo、matchBy)、GroupResultPreviewItem.medcasNo、统计与批次类型VERIFY_FLAG_OPTIONS / VERIFY_FLAG_META,复用 VISIT_DATE_TYPE_OPTIONSdownloadGroupResultTemplate / previewGroupResultImport / confirmGroupResultImport / queryGroupResultVerify / deleteGroupResultBatch)frontend/src/pages/DRG/DRGGroupResultVerify.tsx查询 重置 导入 导出Excel 同一行,行尾右对齐 清空数据;第二行左侧口径说明Steps 弹窗(上传 → 预览校验 → 结果,含下载模板)CustomPagination,无金额列不加合计行tsc --noEmit / lint 无错误routes/menuRoutes.ts:keyToPath / menuTitleMaproutes/menuRouteRegistry.tsx:注册 report-drg-group-verify(路径 pages/DRG/DRGGroupResultVerify)context/MenuContext.tsx:「报表分析」children 兜底db/insert_drg_group_verify_menu.sql(Component='pages/DRG/DRGGroupResultVerify',SeqNo=40,图标 CheckCircleOutlined)dist 到 E:\DRG\dist(nginx 8082),验证 /report/drg-group-verify接口服务说明/09-报表服务.md 追加 02010606~02010610(含病案号、三关键值规则、dateType、medcasNo、matchBy)接口服务说明/00-接口总览.md 清单追加 5 条系统设计/09-报表模块设计.md 追加章节(表结构含 MedcasNo、三级匹配算法、病案号组合键说明)/opsx:archive,确认两个 capability spec 落位