manifest.schema.ts
15.4 KB
-
fix(clinic-names): 取现名而不是 any() 随手抓的旧名 —— 80% 的诊所改过名 · 3a0b7c63
`refresh-clinic-names` 用 `any(organization_name)` 从源表派生诊所名。ClickHouse 的 `any()` 是**任取一个**,不是"取唯一的那个" —— 而诊所会改名,源表里同一个 id 存着历次名字。 2026-09-03 生产 DW 实测(fact_emr_treatment_out,66 家): 273393edd04e4aa4afe9347bb8a2da21 「正大诊所」 91,053 行 2016-07 ~ 2022-08 ← any() 抓到的 「花旗医院」 3,096 行 2023-06 ~ 2023-09 「瑞尔齿科上海花旗诊所」 42,646 行 2023-09 ~ 至今 ← 现名(宿主花名册也是这个) · **66 家里 53 家(80%)有多个名字**,不是个案 · 旧名用了六七年,**行数往往碾压现名** → 换成"取最高频"一样错 · c59bfc52…(华贸)有 6 个名字,其中两个带前导 `\t` 按最高频/任取都会把停用多年的旧名当成现名下发给前端。改为按 time_field 取最新: argMax(trimBoth(name), ifNull(toString(time), '')) `trimBoth` 同时用在取值和 notEmpty 判定上 —— 只用在取值上的话,纯 `\t` 的行仍会被 当作有效名参与比较。 改动: · 新增 clinic-directory.ts:buildClinicNameQuery / pickLatestNames 两个纯函数 (CLI 底部是 `void main()`,逻辑留在里面没法单测,故抽出) · 文件源分支同口径 —— 原来是"遍历行、后者覆盖前者",行序即文件顺序,等于随机取名 · manifest schema 加 time_field;jvs-dw 配 updated_date,friday 配 updated_gmt_at · 缺 time_field 时退化成字典序最大(只保证确定性,不保证是现名)并告警,不再 any() 生产 DW 实跑新 SQL 验证(只读,未写库):66 家全部派生成功, 273393ed… → 瑞尔齿科上海花旗诊所✅ c18cadf2… → 江苏瑞泰通善口腔学前街医院✅ 仍带空白/空名的:0⚠ ️ 生产 host.clinic_names 目前是空的({}),本次**不含**任何生产写入 —— 要不要跑这个 CLI 单独决策。另注:前端真实显示的诊所名以宿主换票传的 dictionary.clinics 为准(auth.controller 里它覆盖服务端派生值), 服务端这份只是打底,不能据此断言前端现在显示的是 GUID。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>luoqi committed