parser-pipeline.service.ts
9.84 KB
-
feat(push): 存量/增量同一通道 —— 归一统一 / 乱序裁决 / stub 自建 / 并发闸 + 断流告警 · 33a826e7
把 push(形态 A/C)打磨成宿主唯一接入通道,存量=按批重放的增量: 摄入一致性(消除同源分叉): - 形态 C 复用 normalizeCanonical(金额元→分 / 无时区时间补 offset),含 envelope occurredAt/updatedAt —— 与形态 A/pull 同一转,宿主用自己系统的格式发,不做转换。 - 业务事件先于患者主档到达 → dispatcher stub 自建空壳患者(对齐 form A),主档后到补全 同一行,不双人;push 跨批顺序无关。 幂等/乱序: - patient_facts 加 source_updated_at,fact-writer 按它裁决:更旧版本晚到 → stale_skipped 跳过,不旧覆新。关掉"补推快照 vs 实时推送并发交错"的乱序窗口。 体制/性能: - 限批 500(A 从 2000 对齐 C);persona 入队去抖(5min 桶去重,存量批次合并重算)。 - 同 host 并发闸(信号量,PAC_PUSH_CONCURRENCY 默认 4;幂等+裁决保证并发语义=串行)。 - 单飞锁索引收窄 WHERE direction='pull' —— 原索引把并发 push 批次拦成 P2002/500。 异常/可观测: - 整批全失败 → 拒收 30802 + SyncLog FAILED;失败率/疑似改表 → 告警。 - 未知 source → 10001(非 90000,避免宿主对永久错误无限重试)。 - push 断流监控(超 26h 无 push 告警);form A 响应透出 mappingMisses/suspectFields 供自检。 文档 channel-push 按宿主视角重写(subjectType 单一口径、金额时间统一"原样发 PAC 归一")。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
luoqi committed