系统 SHALL 在处理某个就诊的费用明细前,一次性查询该就诊在 BS_HISFeeDetail 中已有的 (FeedetlSn, ID) 并载入内存映射;对每一条明细 SHALL 通过该映射在内存中判定插入或更新,不得对每条明细发起独立的存在性 SQL 查询。
(FeedetlSn, ID) 预加载查询feedetl_sn 已存在于映射中feedetl_sn 不存在于映射中时,系统应执行插入并在映射中登记新 ID系统 SHALL 使用 %SQL.Statement 预编译参数化的 INSERT 与 UPDATE 语句,并在循环中重复 %Execute 完成落库;不得对每行费用明细调用 src.util.operatetable.Insert/Update。
%Prepare 一次%Execute系统 SHALL 将费用明细落库包裹在显式事务中,并按固定行数(默认 500 行,可配置)分段 TCOMMIT 与 TSTART,不得让每行成为独立事务。
系统 SHALL 仅在执行插入时序列化 feeItem.%ToJSON() 并写入 FeeDetailJson;执行更新时 SHALL 沿用库中已有的 FeeDetailJson 值,不得重复序列化。当序列化结果超过字段长度上限时 SHALL 截断并记录告警。
feeItem.%ToJSON() 结果写入 FeeDetailJsonfeeItem.%ToJSON()FeeDetailJson 值LogSyncError 记录一条告警系统 SHALL 保持以 (AdmDr, FeedetlSn) 为业务唯一键的增量 Upsert 语义:已存在则更新易变字段、不存在则插入,且不得对就诊做整体删除重建。SaveInpatientFeeData 的返回结构 SHALL 保持既有字段不变(admCount、totalCount、insertCount、updateCount、failedCount、skippedCount、details)。
(AdmDr, FeedetlSn) 执行更新BS_HISFeeDetail 中该就诊的明细行数不得增加SaveInpatientFeeDataresult 应包含 admCount、totalCount、insertCount、updateCount、failedCount、skippedCount、details02010068 与 02010067 的既有调用方无需修改BS_HISPatAdm 中不存在该 AdmIDskippedCount 并通过 LogSyncError 记录