- 07 Jun, 2026 40 commits
-
-
emr_record 的 occurredAt 只到日期(00:00:00),同日多医生(典型:转诊,吴仲恺先诊断+转诊、 刘柳后做正畸评估)在 localeCompare 下打平 → 排序不稳定、先后乱。 修:emr 排序前预计算排序键 = 同次接诊关联事实(diagnosis/treatment,经 source_encounter_external_id
↔ emr_external_id 关联,带真实时分)的最晚时间,fallback emr.occurredAt。 例 王思涵 2021-07-23:吴仲恺 emr(关联08:05)< 刘柳 emr(关联08:58)→ 刘柳正确排为第2次(最近)。 纯前端、渲染期推导,无需重摄。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
用户口径:'召回说应治未治,但牙位事实里看出来已治了' = 误召。逐颗对齐结果: - 牙位级误召 §C2(resolved×recalled t/t 格)= 0 - 全口码误召 §F(新增,K05/K07)= 0 §F 与生产同口径:治疗 occurred_at >= 最新【诊断∪建议】(latestDxOfCode,含 recommendation)才算已治。 规则确认(用户):治疗【之后】又出现诊断/建议(哪怕同日、不同医生)= 新的未治需求 → 应召回,非误召。 例 王思涵:正畸治疗08:05 < 同日正畸建议08:58 → 治疗早于最新发现 → 正确召回(§F 不计)。 结论:召回的'应治未治' 与 牙位/全口事实 完全对齐,真误召 = 0。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
⚠ 复盘:此前我据 §C6 '9_真无法解释=0' 论断'召回完整性可信',危险且过头: 1) §C6b 漏查 cooldown,差点假报翟俊程漏召(他实为28天<30天冷静期,且本人已因K01智齿进召回); 2) 更糟:把 ⑤b未来预约/⑤f近期到诊(患者级代理)算进'已解释'。这俩不证明'这颗牙会被处理' (沈静芳当年正是被科目级⑤d此类代理误挡)。全新1000抽样里 156 颗只靠⑤b被压 (K08种植77 + K03修复34 + K01/K02/...),全是未验证的高价值 gap。 经核实 ⑤b = 纯患者级 blanket(有任何未来预约→压全部gap,不看牙位/科目),比已删的⑤d更粗。 - §C6 bucket 5/6 改标 '
⚠ 软豁免·需人审',加判读 echo:1-4硬解释=真没问题 / 5-6软豁免≠干净 / 9=bug。 - 结论修正:未发现硬bug(9=0),但 ⑤b blanket 掩盖 156 颗未验证高价值gap → 与⑤d同类过度排除,待产品决策。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
用户担忧召回算法,补一层从【页面牙位事实视角】的独立验证(差分测试盲区): 现有 §C 宇宙 vt_diag 预先删了 cooldown、滤了合规闸 → 那些牙不进交叉表,但页面照常展示, '看着该召没召'的牙被静默放过。§C6 从原始事实独立重建'应治未治'全集(口径=人眼读页面: 有结构诊断 + 本牙后续无对应治疗 + 未被更晚诊断取代),不预过滤,逐颗归因。 - §C6 牙位级:全集 vs 召回 + 未召逐层归因(合规/废用乳牙/§E/冷静期/未来预约/近期到诊/9无法解释)。 - §C6b 全口码 K05/K07:同口径(含 cooldown=30 检查)。 - 全新独立 1000 抽样(899患者,与旧样本仅重合9)验证: §A-§C5 全绿(FP 0/0、真·无法解释 FN 0、怪码哨兵净); §C6 应治未治 1762 → 已召 1476 + 全可归因 286(废用63/§E8/冷静期43/未来171/近期1)→ 9_真无法解释=0; §C6b K05/K07 全部已召或冷静期内 → 未召无理由=0。 初判 1 个 K07 疑似(翟俊程)经查 = 诊断28天<30天冷静期,正确不召(非漏召;§C6b 补 cooldown 检查后归零)。 结论:召回算法与牙位事实视角零真不一致 —— 页面上每颗应治未治牙,要么已召、要么有可见的正当排除。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
FeatureTimeSemantics union 无 'window+trend';dev 跑 swc 不查类型一直被掩盖, turbo build(tsc)时暴露并阻断启动。归入既有 combo 桶 'mixed'(RFM 同款), 精确语义(window recency + trend 斜率)留注释。纯描述元数据,无 switch 消费,行为不变。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
↔ - UI 场景标签'启治召回'→'应治未治'(labels.ts 单一源,列表/详情 chip 全跟随;mock fallback 同改)。 - verify-recall §C5:诊断码
↔ 诊断名 语义不符监测('召回了也可能不一致'的守门 — 召回基于码, 码≠名的怪码会召错科目)。命中'异类关键词'且'本码自身关键词缺席'(排多病名拼接噪声)。 DW 全量审计(阈值降到5):唯一系统性怪码 = K07.303 牙体缺损(1083患者),已 recode 修; §C5 现 ~0(仅 1 条多行多病名噪声)→ 哨兵留守,未来新怪码会现形。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
鉴定:K07.303 在中文临床版 ICD 系统性指派给'牙体缺损'(WHO K07=错颌畸形),全院 1083 患者。 PAC substring(0,3) 截成 K07 + coalesce 优先 stdCode 丢掉 message → 误当正畸召回。 这也是'画像=潜在修复 vs 召回=正畸'矛盾的真根因(沈静芳/许龄心)。 - 新增 derive 'recode' op(覆盖表,未命中透传)— 通用的宿主 ICD 怪码纠偏机制。 - manifest B.1:substring 前 recode {K07.303: K03},再截短;其余 K07.3xx(牙列不齐/牙拥挤/异位牙)确是正畸不动。 - 验证(本地 905,重摄重算):K07-牙体缺损残留 0 → K03 牙体缺损 285;沈静芳召回'正畸82'消失、只剩'修复30', 跟画像一致(矛盾从源头解决,年龄门 band-aid 不再需要);ortho 召回降、hard_tissue 升; 交叉测试 FP 0/0、真·无法解释 FN 0,零回归。 - 注:服务器需随部署重摄才生效(reparse)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
差分测试盲区:scanner 与生产用同一套排除规则 → 规则本身太粗(如已废的 ⑤d 按科目误排)会被 '互相印证'成已解释、静默放过(沈静芳 34;43 当年即此)。§C4 换独立视角: '该牙有结构诊断 + 本牙零治疗 + 无任何牙位级硬层(废用/乳牙/§E/更晚诊断)挡', 却仅因患者级代理(⑤b 未来预约 / ⑤f 近期到诊,均不看牙位)而没召 → 列出人审。 - 本地 905:可疑漏召 61(57 ⑤b + 4 ⑤f),多为 K01 阻生/K02 龋齿(有未来预约,患者要来当面处理)/ K00 先天 → 合理但不再静默;真出现'被代理豁免又没人来管'的会现形。 - FP 硬闸 0/0、FP=0、真·无法解释 FN=0 不变。 - ⑤b/⑤f 是可辩护的粗代理(物理到诊=全口机会);⑤d(科目≠牙位)才是坏的,已移除。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
数据验证(905 样本)推翻'全口需要 ⑤d'的假设: - 全口(K05/K07):正在治的治疗都有记录 → resolvedTeeth 已全覆盖(K05挡669/K07挡73); ⑤d 独占多挡仅 0~1 个,且那个无近期预约=stalled(看过没继续)本就该召。'在治没录'风险=0。 - 牙位(K02/K03/K08…):⑤d 按科目(非牙位)误排'同科目别牙在治、这颗没治'(沈静芳 34;43 修复被 25;26 修复预约连带排除)。 → ⑤d 既冗余(全口)又有害(牙位)→ 移除。全口/牙位统一: resolvedTeeth(治疗) + ⑤b(未来预约) + ⑤f(近期到诊)。 '已进入链'的细粒度跟踪留 W5+ 治疗链内召回。 - 顺带删 complaintTexts / APPT_COMPLAINT_TO_CATEGORY import;verify-recall.sql scanner 同步去 ⑤d 桶(oracle 与生产一致)。 - 验证:FP 硬闸 0/0、FP=0、真·无法解释 FN=0;未治→召 1524→1556(+32 合法);沈静芳 34;43 修复召回(分30,image_ai+老→排末尾,不冲高)。 - 注:年龄门(K07>40 不召正畸)按用户决定暂不做 → persona/召回在'正畸'上仍有意保留不一致。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
按反馈: - 身份卡画像标签去掉上方空分割线(border-t),直接贴手机号下。 - 标签 hovercard:① 英文术语全改中文(种植史/正畸史/冠桥贴面嵌体…,去 implant/orthodontic/channel= 等); ② 删'不打标签'等'不显示时'的说明(没标签就没 hover,无意义);③ 精简解释性 note(去 valueTier/ Layer C/snapshot/DW/喂优先级 等内部术语),只留客服有用的。 - 优先级分数:0-100 → 10 分制两位小数(优先用 breakdown.raw 真精度,无则 score/10)。 列表 PriorityBar、两页共用的 PriorityHover(头部 + 总分 + /10)同步。 - web tsc 通过。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
按反馈,详情页去掉给客服看没意义的开发/QA 细节: - RFM:① hover 副标题去掉'→ 八象限'(术语);② 描述去掉 R5F2M1 原始 R/F/M 分 (rfm.feature.ts;R/F/M 仍留 data 供内部/圈人群用)。 - 画像标签:去掉'画像标签 / 详情→'标题行,身份卡里直接列 chip(无标题、无 drawer 入口)。 - 牙位事实抽屉:移除 oracle 召回对账面板 + 每泳道 oracle 徽标 + 子标题'oracle 召回对账' (这是 dev/QA 差分验证,不该给客服看;验证走 verify-recall.sql)。 tooth-timeline 删 ReconPanel/ReconBadge + recall-oracle import;drawer 去 reasons 传参。 - web tsc 通过;本地 905 --force 重算,rfm 描述已无 RxFxMx。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
详情页左栏调整: - 去掉独立'画像标签'卡片,标签云并入左上第一个卡片(IdentityCard)底部(手机号下,带分隔线 + 详情→)。 - 标签 hover:去掉原生 title(避免 title+hovercard 双浮窗);把 title 内容(该患者实际取值) 并入 hovercard 顶部(teal 框)→ 一个浮窗同时看'是什么(取值)+ 怎么算的(规则)'。 PersonaFeatureHover 加 value prop,meta 缺失时也能只显取值。 - 隐藏'治疗链'卡片(链已弃用;chains 仍传 drawer 备用)+ 删未用 ChainSidebar import。 - web tsc 通过(next dev 热更,无需重启)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
⚠ 原只有深度档喂画像。三档对齐: - buildPersonaGuide 加 mode:essential(
⚠ 禁忌/治疗敏感/特别关注 + rfm/生命周期)/ full(再叠切入点)。 - 稳健 + 标准档 → essential:只灌'护栏'类(安全红线 + 语气),不灌切入点(折扣/转介/家庭), 避免轻量填空档被诱导加推销、破坏填空纪律。安全类画像(种植禁忌/看牙恐惧)现三档都见得到。 - 深度档保留 full(default,输出不变 → 无需 bump)。 - bump promptVersion:standard v13 / stable v26(eval 可按版本对比)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
#4 证据链债:多个特征返回 evidence.factIds=[],详情页'为什么贴这标签'无法溯源到 fact(违反 db 原则4)。 - 回填 7 个 fact 派生特征,收集驱动该标签的 fact id: · discount_anchor → 锚点 payment fact · special_attention → 命中的 no_show/迟到 预约 + 不可等候 emr fact(按触发标签收集) · time_preference → 窗口内计入的 appointment fact · lifecycle_stage → 就诊 + 消费 fact(去重) · treatment_sensitivity → 命中关键词的 emr fact(改 per-fact 匹配) · potential_treatment / urgency_level → gap 源 fact(PotentialGap 加 factId:selector SQL 加 sig.id) - 5 个非 fact 派生特征(age/gender/acquisition/family/referral/contraindication)保留空 + 注释说明 (证据=patient 主档/副表立柱/关系边,本就非 fact)。 - 本地 --force 重算 928:fact 派生特征 100% 有证据(discount 338/338、lifecycle 928/928、 potential 771/771、special 88/88、time 601/601、urgency 771/771);age/gender 仍 0(符合预期)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
#1 话术对画像全暗的 bug:fact-block 旧版只 filter key==='value'||'recall_risk'(早被 rfm 取代删除) → 深度档话术拿不到任何 persona 信号。 - 新增 buildPersonaGuide:从 16 特征里按用途挑 + 排序渲染指引块:
⚠ 注意(禁忌/治疗敏感/特别关注)→ 定语气(rfm/生命周期)→ 切入点(治疗史/权益/折扣/转介/家庭/时间偏好)。 - orchestrator 不再 slice(0,5) 任意截断,全量传给 buildPersonaGuide 按白名单挑。 #3 特征接入(原 recommendedAt/Channel 目标已 moot:前端移除了推荐时间展示、免打扰已被池 SQL 硬排除) → 改由更合适的通道收口:time_preference/special_attention 已进①画像标签卡(展示)②话术指引(本次) ③ summary(orchestrator 早已全量传)。不再臆造 moot 的 plan 字段。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
- priority-hover:旧 6 因子表 → v3 三维(急迫×.4/价值×.3/意愿×.3 → ×新鲜度×置信度); 意愿 sub(RFM/主诉/信任)入 hint;breakdown 类型同步(plan-detail-types + mock-data PlanReason)。 - persona-feature-hover ALGORITHMS:原只有 5 个已删 key(value/recall_risk/...) → 重写为现 16 特征 的'怎么算的'说明(rfm/年龄/性别/获客/家庭/转介/生命周期/治疗史/时间/折扣/特别关注/敏感/禁忌/急迫/潜在治疗/权益)。 - 详情页'患者画像'卡片(top4 列表)→ '患者信息·标签'卡片:全部特征做成 chip 标签云, 每个 chip hover 看算法说明(复用 PersonaFeatureHover);列表页优先级 hover 自动随之更新。 - 修详情页两处死 key 读取:value→rfm(累计消费 hint)、recall_risk→lifecycle(久未到诊提示)。 - web tsc 通过。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
- potential-treatment-recall §8.2/8.3:旧 6 因子 scorer 伪码/张志远例 → v3 三维(急迫×.4+价值×.3+意愿×.3) × 新鲜度 × 置信度;例子换 94 分真实 breakdown;UI 明细更新;加 uplift 局限。 - canonical-fact-layer §7.2bis #11:timeWindowFactor → 新鲜度因子(W7 v3 改名,原理不变)。 - §9 PR 实施路径保留(W3 历史里程碑记录)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
- §三 优先级:6 因子加权启发式 → v3.0 三维(急迫×.4+价值×.3+意愿×.3)× 新鲜度 × 置信度; 意愿=RFM依从+主诉行为+信任基础;真实例子换 94 分;加 uplift 局限说明。 - §二 画像:加现状指针(16 标签 v3.0;价值/风险并入 RFM、治疗链降级详情页、免打扰并入特别关注 → persona-design-v2)。 - §六 端到端 + FAQ:6 因素/91分 → 三维 × 因子。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
回应两个缺口: 1. 置信度(影像价值维度):新 v3 漏了信号置信度 → 影像AI诊断(code_source=image_ai,v3.0标70-90%) 与医生诊断(std_code/name_map,100%)同权。补:sourceConfidence(医生1.0/影像0.85/建议0.8/未知0.9), cluster 取 max(最优来源胜出);confidenceFactor(≥0.9→1.0/≥0.7→0.9/<0.7→0.75)乘进综合分。 本地:286条影像AI/建议 ×0.9,1169条医生 ×1.0。 2. 信任加分项 3/3:原只做了同类治疗史+1转介+1,补近1年到诊且履约良好+1 (lifecycle 末诊<365 且 非 special_attention 屡次爽约)。 - 综合 = (急迫×0.4+价值×0.3+意愿×0.3) × 新鲜度 × 置信度。SELECT 加 code_source,merge 算 cluster_confidence。 - 只改分数不改候选集(589 不变)。breakdown 加 confidenceFactor 可解释。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
v3 重做时丢了旧 scorer 的过晚衰减:新模型急迫性按【末诊】算、不看诊断年龄, 导致很多年前的老诊断(末诊也久)反而 urgency=紧急、分还高。而入池无时间上界(W3:缺口不自愈 仍入池),当初就靠 scorer 衰减止损 → 丢了就没人止损了。 - 加 computeFreshness(daysSince, windowDays):黄金窗内 1.0;过窗线性衰减到 2×窗=0.4,地板 0.4。 per-病种(K08窗180/K07窗365 → 慢病衰减慢)。软衰减不硬切(同 W3:止损交 scorer+UI排序+客服自选)。 - 综合 = (急迫×0.4+价值×0.3+意愿×0.3) × 新鲜度。breakdown 加 freshness/base 可解释。 - 本地:58% gap 有衰减(池里大量老诊断);老 missing_tooth base8.5→分42,新鲜的照常高分。 - 注:PAC 无丢单数据(v3.0 靠已丢单止损),新鲜度衰减是 PAC 的止损替代。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
替换旧 6 因子加权启发式(只用 value+risk 2 特征)为业务《画像字典 v3.0》优先级模型: - 急迫性 = urgency_level(紧急10/高7/中4/低1) - 价值性 = 治疗类型+牙数(种植 单颗8/多颗9/半口10 · 正畸7 · 根管6 · 修复5-6 · 牙周5 · 拔3 · 补2) - 意愿度 = RFM依从×0.375 + 主诉行为×0.375 + 信任基础×0.25 · RFM依从 = rfm 八象限分群 · 主诉行为 = 咨询过该类(consultation 意向命中)→8 / 仅诊断→2(触达活跃维度 PAC 无数据,去掉按比例归一) · 信任基础 = lifecycle + 同类治疗史+1 + 转介达人+1 - scorer 用上 6 个画像特征(rfm/urgency/lifecycle/treatment_history/referral + consultation 意向),旧版只用 2 个。 -
⚠ ️ 只改 priorityScore(排序),不改召回候选集(gap 选择独立)→ verify-recall FP/FN 不受影响。 - 本地 928:候选 589(≈旧588 不变),分数 23-94 avg66.6;价值序 种植78>牙周/根管/正畸73>拔/补67>发育62。 - 局限(v3.0 同,记 follow-up):权重人拍(可调);意愿≈倾向性非增益(uplift,需试点对照组); confidence<0.6 降权 + 触达维度 待数据/二次筛选实现。breakdown 保留可解释。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
- 删 do_not_contact_status extractor(免打扰已在 special_attention/CDP D.2.3;合规闸召回读 profile 原始列, 不依赖本特征)。enum 标弃用保留(前端 hover/label 无害)。已故/投诉信号后续补(投诉数据本就缺)。 - lifecycle 潜客(B.1.4):零就诊 → 加 gate「有预约 OR 有咨询」(用上新摄的 consultation_record); 零就诊且无触点 → 兜底新客(不落 lastDays 分支避免 Infinity 误判流失)。 - 本地 928:现役 16 特征(dnc 0),lifecycle 成熟614/新客207/成长104/待激活2/流失1 (样本无零就诊 → 无潜客,全量会出)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
- 违反了 manifest 纪律(SQL 只做朴素导出,形态改造归 transforms):consult_external_id 的 concat 从 SQL 移到 transforms.derive(I 段),SQL 回归 SELECT 列 + WHERE 过滤。 - organization_id IN(过滤无关诊所)+ cohort patient 过滤 保留(合法 WHERE,导出本就按诊所过滤)。 - 审计其他表:均朴素(SELECT 列+WHERE);image_finding_rows 是文档记录的已知例外(影像AI pivot,CH 限制)。 - 重摄验证:5993 facts/0 failed,subject_id 与 concat 版一致。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
- 定义 PAC 咨询主体:一次咨询/初诊事件;intents=患者意向(potential_cure,主观意愿,非诊断)。 区别 diagnosis(医生客观)/recommendation(医生建议)— 意向不进召回,喂 treatment_intent。 - 链路:fact_consult_out 全 144 诊所,过滤到 5 试点(org IN EMR orgs + patient_register_id=patient_id, CH 允许 WHERE 引用别名,同 returnvisit);94.4% 命中。无 id → consult_external_id=(patient,appo,date) concat; 无 updated_date → 不入 per_query,每轮全量按 org+patient 过滤(幂等,同 returnvisit)。 - canonical-codes:CONSULT_INTENT_TO_CATEGORY(种植→implant…拔功能牙→surgical/早期矫正→ortho/美白→cosmetic) + parsePotentialCure(解析 Python list 串)。parser/schema/assembler/manifest 配齐。 - 本地 928:5993 facts,0 未映射,失败0。意向类别:正畸1006/种植733/预防383/充填350/根管316… -
⚠ ️ map 改后需 truncate consult+重摄才生效(reparse 缺口 task #46);部署是干净全摄,自动生效。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
- urgency_level 单标签(取最大):有潜在待转(8 业务标签 gap)且 末诊>90天→紧急/30-90→高/<30→中。 末诊口径同 lifecycle(encounter/actual treatment/挂号 max)。 -
⚠ ️ v1 跳过【已治疗复查路径】(召回未实现复查场景,follow-up)。美学/预防→低(8标签不含,暂不触发)。 - 抽 classifyGapToLabel/ageYearsAt 为共享函数:potential_treatment 出标签 + urgency_level 判待转 共用(单一源)。 - 本地 928:紧急384/高223/中164=771,与 potential_treatment 完全一致。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
- 新建 PotentialTreatmentSelector(clinical-gap):per-patient gap = 召回 gap 核心(共享 buildGapCore) 去时间门/合规门(常态属性);按 active 诊断/建议码剪枝。 - potential_treatment 画像特征:gap → 8 业务标签(种植←K08>18 / 补牙←K02 / 根管←K04 / 牙周←K05,K06 / 正畸←K07>12≤40 / 早矫←K07 3-12 / 修复←K03默认 / 拔牙←K01+K03残根残冠)。多标签。 - 码分组单一源 GAP_PRIMARY_GROUPS:召回 SUB_SCENARIOS 不再内联 dxCodes/recCodes,改引共享。 -
✅ 召回字节等价再验(Phase2 码分组改后 EXCEPT 双向 0 diff,1450 全等)。 - 本地 928:771 患者有潜在治疗(拔牙433/补牙341/修复289/种植184/牙周150/正畸105/根管97/早矫24), 是召回候选超集(无时间门);正畸+早矫129<召回163 因 spec 正畸封顶40岁(符合预期)。 - 置信度=诊断1.0/建议0.8(复用)。非已丢单 PAC 未摄入,省略(follow-up)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
- 新建 modules/clinical-gap/potential-treatment-gap.sql.ts:toothArrSql + buildGapCore (sig 牙位/resolved/remaining 相减 + ⑤a 判定 + 废用牙/先天剔除 + §E flag),Layer 1 facts 消费层(中立)。 - §E gap flag 单一真理源 GAP_FLAGS_BY_PRIMARY(召回 SUB_SCENARIOS 不再内联)。 - 召回 scenario 改 import 共享片段,SQL 逻辑零改动只搬家。 -
✅ 字节等价验证:新旧码召回集合 EXCEPT 双向 0 diff(本地 928,1450 条全等)。 - 目的:Layer 2 潜在治疗画像将复用同一 gap 核心(避免 Layer 2→3 倒置 + 口径漂移)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
- 总览表加 治疗敏感 / 禁忌标签;13→15 标签;多标签 + 稀疏 + 未完整实现(Layer C)说明。 - 审查发现 +2:treatment_sensitivity 关键词精炼排假阳;contraindication 不上规则版(否定泛滥/ 量化无数据/需临床判断 → 仅种植年龄,余留 Layer C)。 - follow-up 加 Layer C(LLM)层标签:禁忌完整版/沟通偏好/意向/家庭社交。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
- contraindication 多标签结构(种植/正畸/麻醉/手术禁忌)。v1 仅实现【种植年龄禁忌:年龄≤18, 骨骼发育未完全】,validUntil=满19岁自动解除(到期重算即不打)。 -
⚠ ️ 其余禁忌不上规则版(会医疗事故):既往史'过敏'97%是'否认过敏'(否定泛滥)、HbA1c全量仅10条 (量化条件无数据)、需控制状态/急性期判断 → 留 Layer C(LLM 抽取)。data 结构已留多标签位。 - 本地 928:种植禁忌 167,validUntil 正确,交叉验证 age_bracket≤18 一致。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
- treatment_sensitivity 多标签:看牙恐惧/晕针/晕血/密闭恐惧。扫 emr_record.content (past_history 既往史/illness_desc/pre_illness/disposal 等)+ profile.notes/tags。 -
⭐ 关键词按全量数据排查精炼:看牙恐惧 恐惧/害怕看牙/牙科焦虑/看牙紧张(❌ 裸紧张=颏肌紧张); 晕针;晕血/见血不适(❌ 裸见血=可见血凝块);幽闭/密闭/长时间张口不适(❌ 裸张口受限=物理受限)。 - 宿主未给 health_profile;EMR 既往史已承载(晕针病史等)。无迁移/无重摄。 - 本地 928:看牙恐惧 2(全量约 177 患者 0.13%,低覆盖高价值安全标记)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
旧版停在早期设计(RFM几何八象限/简化lifecycle/圈人群),跟最终实现对不上。 重写为:画像层定位 + persona schema + 4 数据范式 + 时间语义 + Feature Registry(指向 persona-feature-specs.ts 单一源)+ 13 标签总览表 + 算法审查发现/口径决策(RFM图口径/ lifecycle顺序bug/discount金额非比率/TZ/no_show不在active等)+ follow-up + 部署清单。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
luoqi committed -
- special_attention 多标签:屡次爽约(近1年履约率<50%且决定≥3)/经常迟到(到店>预约+15min≥50% 且≥3)/免打扰(doNotContact)/不可等候(notes/tags/病历关键词)。 -
⚠ ️ 挖出 2 个真问题并处理: ① no_show/cancelled 预约 patient_facts.status≠active/fulfilled,不在 persona ctx → 新增 ctx.appointmentsAll(单独加载全状态预约,排 superseded)给爽约/迟到用。 ② arrived_at(in_time)摄入 TZ bug:比 planned_for 一致早 8h → +8h 补偿(根治修摄入,follow-up)。 - 本地 928:经常迟到86/屡次爽约2(免打扰/不可等候样本无数据,全量会出)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
- DW 无 original_amount;discount_*_rate 实为折扣金额(应收3-dept0.45=实收2.55)→ 折扣率=1-Σ折扣/应收。摄入 payment_record.content.discount_cents + settlement_project(重摄)。 - discount_anchor:取真实治疗最深【部分】折扣 + 日期/项目。 -
⚠ ️ 修 spec 两个 naive 点:① 免费洁牙/检查促销(100%off=0折)会霸占锚点→只看原价≥¥500+ratio>0; ② 保险方付款非诊所折扣→排除 discount_insurance_rate(只算科室/公司/卡)。 - 本地 338 患者:avg 6.4折,样例合理(种植9.4折/修复/促销2.9-5.1折)。 -⚠ ️ 留口径:近免费(>90%off)comp/全保 是否算锚点;¥500 阈值可调。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
- time_preference 多标签:工作日/周末/上午/下午/晚间偏好。近2年预约,北京 TZ。 -
⭐ 数据排查:occurred_at 钟点被搞乱(时区/解析,16-23 乱分布),planned_for +8 才是 干净营业钟形(8-18 峰 9-15)→ 用 planned_for。无新摄入/无迁移。 - 阈值照 spec:工作日≥60%/周末≥50%/各时段≥50%,记录≥2;无命中→不打标签。 - 注册表 spec/enum/label。本地 601 患者:下午368/工作日305/上午289/周末289。 -⚠ ️ follow-up:appointment occurred_at 钟点不可靠(latent bug);TZ 硬编北京,多宿主应读 host TZ。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed -
- treatment_history 多标签:implant→种植史/orthodontic→正畸史/prosthodontic·cosmetic→修复史/ periodontic→牙周治疗史。不标记 surgical/restorative/endodontic 等基础治疗。 -
⭐ spec 用病历/结算关键词匹配(数仓原始文本);PAC canonical 层已归一成 category → 直接读,无关键词/无新摄入/无迁移。canonical 层价值体现。 - 注册表 spec/enum/label。本地 773 患者:牙周596/修复195/正畸165/种植120,多标签生效。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>luoqi committed
-