User.BSHISPatAdm类(SqlTableName = BS_HIS_PatAdm,患者就诊主表)。字段:AdmID(%String,主键)、PatID(%String)、PatName(%String)、PatSexCode(%String)、PatSexDesc(%String)、PatNo(%String)、PatMedicalNo(%String,索引)、AdmDocDesc(%String)、AdmNurDesc(%String)、AdmDateTime(%TimeStamp,索引)、AdmInDays(%Integer)、AdmDiag(%String)、InLocDesc(%String)、InWardDesc(%String)、CreateDate(%Date)、CreateTime(%Time)、UpdateDate(%Date)、UpdateTime(%Time)、Deleted(%Integer,默认0)。继承src.util.DynamicObject.Adapter,遵循CB表必填字段规范。User.BSHISDRGParams类(SqlTableName = BS_HIS_DRGParams,DRG分组参数表)。字段:AdmDr(%String,主键/外键→User.BSHISPatAdm)、PsnNo(%String)、InsuranceAreaCode(%String)、MdtrtareaAreaCode(%String)、InsuType(%String)、DiagnosisCode(%String)、DiagnosisName(%String)、GroupStage(%Integer)、DiaTypeCode(%String)、UnionOprnFlag(%Integer)、MainDiagnosisCode(%String)、MainOperationCode(%String)、Sex(%String)、Age(%Integer)、AgeGroupDays(%String)、NewbornFlag(%String)、RespiratorTime(%String)、EcmoFlag(%String)、TransplantFlag(%String)、MarrowTransplantFlag(%String)、HivFlag(%String)、TraumaLevel(%String)、Department(%String)、DepartmentDesc(%String)、DischargeType(%String)、HospitalDays(%Integer)、TotalCost(%Numeric)、MedicalRecordID(%String)、HisAdmId(%String)、PatientName(%String)、DeptCode(%String)、DeptName(%String)、DoctorCode(%String)、DoctorName(%String)、TotalFee(%Numeric)、MedicalRecordDr(%String)、FixmedinsCode(%String)、FixmedinsName(%String)、DrgParamsStatusCode(%String,默认"0")、CreateDate(%Date)、CreateTime(%Time)。User.BSHISOprnInfo类(SqlTableName = BS_HIS_OprnInfo,手术信息表)。字段:AdmDr(%String,联合主键/外键→User.BSHISPatAdm)、OprnSn(%Integer,联合主键)、MainFlag(%String)、OprnCode(%String)、OprnName(%String)、OprnDate(%String)、CreateDate(%Date)、CreateTime(%Time)。User.BSHISSyncLog类(SqlTableName = BS_HIS_SyncLog,同步日志表)。字段:ID(%Integer,主键自增)、TaskName(%String)、SyncType(%String)、StartTime(%TimeStamp)、EndTime(%TimeStamp)、StatusCode(%String)、TotalCount(%Integer)、SuccessCount(%Integer)、FailedCount(%Integer)、ErrorMessage(%String,MAXLEN=2000)、CreateDate(%Date)、CreateTime(%Time)。索引:CreateDate。HBModuleConfigType和HBModuleConfig全局变量中配置HIS连接参数(HisIP=172.16.1.6、HisPort=、HisURL=bdhealth/、Authorization=Basic cHJoaXA6cHJoaXBAMjAyMA==),使用src.Config.ModuleConfig.GetConfigByCode("HisIP",HospID)等方式读取src.DRG.HISData.ConfigService类,实现SaveHisServiceConfig(jsonObj)和GetHisServiceConfig(jsonObj)方法,通过src.Config.ModuleConfig读写HIS连接配置;方法遵循try-catch、后置条件无空格等规范frontend/src/pages/HIS/HISServiceConfig.tsx),支持配置HIS服务地址(IP/端口/URL)和Authorization,调用src.DRG.HISData.ConfigService保存;后续可扩展其他系统服务配置src.DRG.HISData.HisDataService类,方法GetInpatientData(pStartDate, pEndDate, pSessionObj):内部调用##class(src.External.Service).HisService(pInputData)(复用现有模式),传入code=05900014、params=[{stDate, endDate}]、session;返回解析后的%DynamicArray结果src.DRG.HISData.HisDataService中实现BuildSession(pHospID)方法:从src.Config.ModuleConfig.GetConfigByCode读取locID、hospID、fixmedinsCode、sessionID等,构建session对象;校验必填字段,缺失则返回错误%Statussrc.DRG.HISData.HisDataService中实现CallInterface(pInputObj)方法:构建完整请求体,通过##class(src.External.Service).HisService()发送请求;HTTP超时默认30秒;网络超时自动重试3次(间隔5秒);错误处理遵循现有模式src.DRG.HISData.DataMapper类,方法MapAndSave(pResultArray):遍历HIS接口返回的result数组,对每条记录调用映射和存储逻辑MapPatAdm(pResultItem)方法:将result顶层字段映射为User.BSHISPatAdm对象;admDateTime字符串转%TimeStamp;调用##class(src.util.operatable).Insert/Update持久化MapDRGParams(pAdmID, pDrgParams)方法:将drgParams.result映射为User.BSHISDRGParams对象;若drgParams.errorCode != "0"则标记DrgParamsStatusCode="error";调用公共Insert/Update方法持久化MapOprnInfo(pAdmID, pOprnInfoArray)方法:将oprnInfo数组逐条映射为User.BSHISOprnInfo对象并持久化ValidateRequired(pResultItem)方法:校验admID、patID、patMedicalNo非空;失败则返回错误%Status并记录日志src.DRG.HISData.SyncEngine类,方法IncrementalSync(pHospID, pLookbackDays):计算时间窗口(stDate = 最后同步时间 - lookbackDays,endDate = 当前时间);调用GetInpatientData();逐条MapAndSave;记录同步日志;更新最后同步时间FullSync(pHospID, pStartDate, pEndDate)方法:按7天分段调用GetInpatientData();每段独立try-catch;综合判断最终状态(全部成功→success,部分失败→partial)GetLastSyncTime(pHospID)和UpdateLastSyncTime(pHospID, pTime)方法:通过全局变量^BSHISSync("LastSyncTime", HospID)读写最后同步时间SaveSyncLog(pLogObj)方法:向User.BSHISSyncLog表写入同步日志;使用##class(src.util.operatable).Insert持久化src.DRG.HISData.SyncEngine中增加定时同步能力:读取全局变量^BSHISSync("Schedule", HospID)中的间隔分钟数;通过IRIS Task Manager或%SYS.Task类注册定时任务GET /api/his-sync/config 和 POST /api/his-sync/config,分别调用src.DRG.HISData.ConfigService.GetHisServiceConfig和SaveHisServiceConfigPOST /api/his-sync/incremental,触发增量同步;POST /api/his-sync/full,触发全量同步(接收startDate/endDate参数)GET /api/his-sync/logs,查询User.BSHISSyncLog表,支持按SyncType/StatusCode/CreateDate筛选,返回分页结果GET /api/his-sync/patients,查询User.BSHISPatAdm联表User.BSHISDRGParams,支持按PatName/PatMedicalNo/AdmDateTime筛选,返回分页结果(供MedicalRecords.tsx使用)frontend/src/api/hisSync.js,封装6.1-6.4的所有API调用函数frontend/src/pages/HIS/HISServiceConfig.tsx(HIS服务配置页面):表单输入HIS服务IP、端口、URL、Authorization;调用/api/his-sync/config读写;菜单入口挂在系统配置下frontend/src/pages/HIS/DataSync.tsx:替换模拟数据,调用POST /api/his-sync/incremental和/full触发同步;调用/api/his-sync/logs展示日志;同步任务状态实时刷新(running时每5秒刷新)frontend/src/pages/HIS/MedicalRecords.tsx:调用GET /api/his-sync/patients获取已同步的患者病案数据;替换模拟数据接口示例/HIS住院患者就诊数据.txt)中的真实数据,测试src.DRG.HISData.HisDataService.GetInpatientData的调用和解析逻辑User.BSHISSyncLog、如何手动触发同步、如何配置定时任务