Commit 2c4471a4 by luoqi

revert(ingest): 撤回回访 org 白名单的删除 —— 生产范围内并无数据损失

上一提交(33dcecb6)基于错误的范围假设删了 fact_returnvisit_out 的 org 白名单,
现予撤回。摘要侧的修复保留不动。

## 为什么撤回

生产的数据范围是**瑞尔 + 起始 2025-01-01**(存量 cold-import 圈定),瑞泰不在范围内。
按品牌重新切分后:

  被该白名单丢掉的【瑞尔】记录 = 7,212 条,organization_id **全部为 NULL**,
  时间跨度 2016-08 ~ 2021-01 —— 全早于 2025-01-01 起始线。

即:**在生产真实范围内,这个过滤造成的有效数据损失为零。** 之前那个"丢 98.8%"
是瑞泰的数字,而瑞泰患者本不该在库里(见下)。删掉白名单反而有两个副作用:
把不该进的瑞泰回访放进来 + 增量每轮拉取量 336 万 → 1,340 万(该表无游标)。

## 顺带确认的两个事实(排查副产品)

1. **一个患者的回访确实跨多诊所**:瑞尔患者里 14.6% 跨 2 家、2.9% 跨 3 家,
   最多 16 家(张学军跨 4 家)。所以过滤条件按 org 收窄确实有风险 —— 只是
   实际被收窄掉的都是 NULL org 的老数据,没伤到有效数据。
2. **跨品牌同号不是同一个人**:196 万个跨品牌重号 id 里,姓名+生日都相同的
   仅 10 个。manifest 顶部原有的"同号不同品牌=不同人"注释是对的。

## 真正的问题在别处(本提交不处理,单独跟进)

瑞泰患者是**增量漏进来的**:07-15 存量跑当天瑞泰 0 人;07-16 起增量每天带入,
07-21 单日进 32,586 人(比当天瑞尔的 12,718 还多),累计 62,992 人。
根因是增量路径没有继承 cold-import 的 `--clinics` / `--since` 范围限定。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
parent 33dcecb6
......@@ -236,23 +236,15 @@ sql_source:
WHERE tooth != ''
# ── 诊所回访任务(fact_returnvisit_out)→ patient_return_visit upsert(展示用)──
# customer_id AS patient_id(让 cohort 过滤生效);非召回信号,详情页「历史联系」块展示。
#
# ⭐ 2026-07:**删除原 org 白名单** `WHERE organization_id IN (SELECT ... FROM fact_emr_treatment_out)`。
# 原意是"与核心数据同范围",但 fact_emr_treatment_out 里 **瑞尔 63 家 / 瑞泰只有 2 家**,
# 而回访表瑞泰有 98 家 → 生产实测该条件把 **瑞泰回访丢掉 98.8%**(瑞尔只丢 0.2%):
# PAC 的 6.3 万瑞泰患者里仅 5.4% 有回访记录(瑞尔 78.9%),等于瑞泰患者的历史联系整体空白。
# 回访是纯展示数据、不进召回信号,没有理由绑定 EMR 的诊所集合。
#
# 范围由 cohort `(patient_id, brand)` 复合键兜住(见下方 cohort 段)—— 这也是**必须带 brand** 的原因:
# DW 的 patient_id **跨品牌复用**(374 万 id 中 196 万重号,如 708971 在瑞尔=张学军、瑞泰=余盼盼)。
# 摄入侧 sourceUnit 取自本行 brand、按 `brand#patient_id` 索引患者(cold-import.service),
# 所以跨品牌行天然落到各自品牌的患者名下,不会串号;患者不在 PAC 的行在解析时直接 skip。
# customer_id AS patient_id(让 cohort 过滤生效);WHERE org ∈ EMR 表出现的所有诊所
# (随 DW 全量,当前 64 家,非 5 家)—— 与核心数据同范围。
# 非召回信号,详情页"回访记录"块展示(常规/术后/咨询回访)。
fact_returnvisit_out: |
SELECT id, customer_id AS patient_id, brand, organization_id, task_date,
return_visit_type_name, return_visit_status_name, task_status_name,
treatment_items, treatment_items_two, follow_content, return_visit_result
FROM dw_group.fact_returnvisit_out
WHERE organization_id IN (SELECT DISTINCT organization_id FROM dw_group.fact_emr_treatment_out)
# ── 咨询主体(fact_consult_out)→ consultation_record(意向源)──
# patient_register_id = patient_id(试点期实测 94.4% 命中;CH 允许 WHERE 引用别名,同 returnvisit)。
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment