Commit 707325e2 by luoqi

test(recall): §F 全口码误召检查(召了但已对症治疗)— 按生产口径,应=0

用户口径:'召回说应治未治,但牙位事实里看出来已治了' = 误召。逐颗对齐结果:
- 牙位级误召 §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>
parent ef71b12a
......@@ -320,3 +320,26 @@ LEFT JOIN wm_tx tx ON tx.patient_id=dx.patient_id AND tx.cat=CASE dx.code WHEN '
LEFT JOIN wm_rec rec ON rec.patient_id=dx.patient_id AND rec.sub=CASE dx.code WHEN 'K05' THEN 'perio_no_srp' ELSE 'ortho_no_consult' END
WHERE tx.patient_id IS NULL
GROUP BY dx.code;
-- ════════════════════════════════════════════════════════════════════════
-- §F 误召检查:召了"应治未治",但事实上已对症治疗(= 用户口径"召回说没治、事实治了")
-- 口径与生产一致:治疗 occurred_at >= 最新【诊断 ∪ 建议】(latestDxOfCode)才算已治。
-- ⚠ 规则:治疗【之后】又出现诊断/建议(哪怕同日、不同医生)= 新的未治需求 → 应召回,非误召。
-- (王思涵:正畸治疗08:05 < 同日正畸建议08:58 → 治疗早于最新发现 → 正确召回,不计误召)
-- 牙位级误召见 §C2(resolved×recalled 的 t/t 格,应0);本层补【全口码 K05/K07】。
-- ════════════════════════════════════════════════════════════════════════
\echo '════════ §F 全口码误召(召了但 最新诊断/建议后 已对症治疗;应=空)════════'
WITH cfg(code, sub, cat, allcodes) AS (VALUES
('K05','perio_no_srp','periodontic', ARRAY['K05','SRP_RECOMMENDED']),
('K07','ortho_no_consult','orthodontic', ARRAY['K07','ORTHO_CONSULT_RECOMMENDED'])),
rec AS (SELECT fp.patient_id, pr.signals->>'subKey' sub FROM plan_reasons pr JOIN followup_plans fp ON fp.id=pr.plan_id
WHERE fp.status IN('active','assigned') AND pr.signals->>'subKey' IN('perio_no_srp','ortho_no_consult') GROUP BY 1,2),
latest AS (SELECT d.patient_id, c.code, c.sub, c.cat, max(COALESCE(d.occurred_at,d.planned_for)) last_finding
FROM patient_facts d JOIN cfg c ON d.content->>'code' = ANY(c.allcodes)
WHERE d.status='active' AND d.type IN('diagnosis_record','recommendation_record') GROUP BY 1,2,3,4)
SELECT l.code, count(*) AS 误召_全口
FROM latest l JOIN rec r ON r.patient_id=l.patient_id AND r.sub=l.sub
WHERE EXISTS(SELECT 1 FROM patient_facts t WHERE t.patient_id=l.patient_id AND t.type='treatment_record'
AND t.kind='actual' AND t.status IN('active','fulfilled') AND t.content->>'category'=l.cat
AND t.occurred_at >= l.last_finding)
GROUP BY 1;
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