-
feat(sync): 回访摄入带上执行客服 —— 按诊所反推客服名册供主管指派 · e3d4b3ef
主管指派工单要选人,而 host **不提供「客服归属诊所」字段**,只能按行为反推 「该诊所近 N 月有过回访记录的客服」。DW fact_returnvisit_out 一直带 task_director_id/name, PAC 侧此前没映射 —— 花名册只能靠离线快照 data/jvs-dw/users.json(已陈旧、无刷新机制, 之前排查生产操作人时 10 个 id 有 8 个查不到姓名就是这个原因)。 【与「专属客服」是两回事,刻意不合并】 patients.preferences.dedicatedCs ← fact_client_out.current_task_director(患者挂谁名下) patient_return_visits.task_director_* ← 本次回访是谁做的 两者可以是不同人;口径差 2.7 倍(回访表 5,110 个 distinct 客服 vs 患者表 1,865 个)—— 回访是操作留痕,覆盖更全,97.2% 的专属客服在此出现过。合并成一列会让名册少掉大半人。 改动(三层,通用代码零改动): - manifest query 补 SELECT 两列(漏了则映射静默失效 → 落 null) - assembler 映射 taskDirectorId / taskDirectorName - canonical 加两字段(id 用 z.coerce.string:host 是 Int64,PAC 的 external 标识一律字符串) - schema + migration:可空两列(166.7 万存量加列不重写表)+ 名册复合索引 (host, tenant, clinic, task_director, task_date desc) —— 单列不够,clinic 基数仅 64 - upsert 落库经 emptyToNull:空串 / "0" 归 null,否则名册会多出假的"无名客服"分组 【存量怎么补(本次不含)】reparse **无效** —— 回访是 upsert 资源、不进 transaction, 没有 rawPayload 可重放;整表重摄又会连带重摄这批患者的病历/结算/预约(2026-08-01 实测 那条路把测试服磁盘写满)。存量走一次性 DW 回填:按 external_id 批量 UPDATE 两列。 测试 806 项(+7),锁住"两处客服字段不互相挪用"与源 query 必须选这两列。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>luoqi committed
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| src | Loading commit data... | |
| package.json | Loading commit data... | |
| tsconfig.json | Loading commit data... |