-
fix(召回): 抑制改为「全有或全无」—— 处置是计划级的,抑制就不能逐条 · 1284675e
陆雪 TS0K090243: 08-23 客服点一次「已完成治疗」→ 该 plan 名下 4 条理由(缺牙种植 / 牙周 / 影像AI缺牙 / 残根)全部被压,treated 的 suppressDays = 36500 天(永久) 08-26 我们的残根→K03 改判把 subKey 从 missing_tooth@17 换成 hard_tissue_damage@17,它不在抑制集里 → **只有它一条**复活 结果卡片上:病历三类应治未治、画像标签也写着「种植/牙周/拔牙三类待跟进」, 召回理由却只剩一条 —— 读的人只能以为算法漏了。而那次「已完成治疗」本身是错的 (该患者信号后只做过 OHI),等于把两条正确召回永久埋掉。 ── 根因:两个粒度对不上 ── 处置是**计划级**的(schema PlanExecution.inaccurateTreatments 注释写明:客服勾 "只有种植不准"也不会只放过根管那条 —— 业务 2026-07-30 明确),抑制却是**逐 hit** 过滤的。于是产生"部分抑制"这种中间态:一部分理由回来了、另一部分还压着。 而且这一条复活还是**靠巧合** —— 走的是 `if (!anchor) return true`(键查不到就放行), 不是设计好的时间锚逃逸。生产实测:2026-08-01 以来 4 例结案后复活,时间锚逃逸 0 例, 改判逃逸 4 例(王丽芳/孙海燕/吴梅英/陆雪,全部是残根→K03),同一条诊断 subject 未变。 ── 新规则 ── 缺口开没开由**事实**说了算,抑制只是人为覆盖,不改写事实: · 一条都逃不出去 → 整个 plan 不生成(一起抑制) · 有任意一条逃得出去 → 本轮**全部** hit 都进 plan(一起生效) 真治好了的缺口会被 gap 计算自己消掉,轮不到抑制来盖;抑制盖住的从来只是 ①数据没摄到 或 ②人标错了 —— 这两种都不该永久。 改动本身只有一处:逃逸判定的结果从"过滤后的 hits"改成"要不要整体放行"的开关, 放行后用全量 hits。旧的时间锚逃逸口径原样保留。 测试:新增 2 例(部分逃逸→全部复活 / 全不逃逸→整体抑制), 既有 suppressed 用例不变仍绿。96 suites / 1638 tests,tsc 0 error。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>luoqi committed
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| scenarios | Loading commit data... | |
| chain-composer.service.ts | Loading commit data... | |
| plan-engine.service.ts | Loading commit data... | |
| priority-scorer.ts | Loading commit data... | |
| reason-refresh.ts | Loading commit data... | |
| scenario.interface.ts | Loading commit data... |