recall-summary-future-visit.spec.ts
12 KB
-
feat(recall): 历史联系摘要突出「最近一次」+ 抽屉标注最近一次/未到期 · f634f274
业务可用性测试 Issue 2「历史联系记录缺具体内容」(患者余同学 BJ0L028292): [被测者]「说了常规的提醒没有特殊的」 [主持人]「那就是暂时没有办法详细的看到具体一次沟通什么内容」 ## 先查源:PAC 没有藏数据,源侧确实只有标签 DW 直查 fact_returnvisit_out(customer_id=1683102 brand=瑞尔),该患者 5 条: 2026-05-20 常规回访 未回访/未完成 内容「复查洁牙」 结果 null 2026-02-25 常规回访 未回访/未完成 内容「方案跟进」 结果 null 2026-02-23 常规回访 已回访/已预约 内容 null 结果「复查」 2025-11-16 常规回访 未回访/未完成 内容「半年复查」 结果 null 2025-08-17 常规回访 已回访/已完成 内容 null 结果「复查」 PAC 库里 5 条一条不差,7 个业务字段全部已在抽屉展示 —— **没有少展示任何东西**。
⚠ ️ 排查中的一个坑,顺手确认了不是 bug:DW 直查会返回 15 条,多出的 10 条 brand=瑞泰。 patient_id 跨品牌复用(374 万 id 中 196 万重号),1683102 在瑞尔=余继来(9岁, BJ0L028292)、在瑞泰=宋可超(33岁,QD0D020738),是两个人。摄入按 (patient_id, brand) 复合键切分,各归各家,正确。 全库口径(生产 165.2 万条回访): follow_content 填充 51.0%(均 12.4 字)· return_visit_result 填充 67.4%(均 9.1 字) 取值 TOP:「种植潜客」8.6万「提醒洗牙」3.9万「无不适」8.2万「已约」3.5万「未接」1.2万 即业务想要的三样东西,源里的实际情况是: · 沟通结论 / 患者态度 → **只有粗粒度标签**(无不适/已约/未接/挂断/拒接),没有原话 · 下次建议联系时间 → **完全没有**(个别混在 result 自由文本里,如「7月份再联系」) · 逐字沟通内容 → **没有**;dw_group 全库只有 fact_returnvisit_out 一张联系表 → 结论:摘要说「常规的提醒」是**如实转述**,不是 PAC 概括丢了信息。PAC 不造数据。 ## 再改:业务关心「最近一次」这条建议成立,采纳 列表按日期倒序时头部常是**还没到日子的排程**,客服最想知道的"上次聊到哪儿了" 反而被埋在中间 —— 这是真问题,跟"源里没内容"是两回事。 摘要侧(promptVersion → @2026-07-26-f): · orchestrator 程序判定 isLatestPast(第一条有日期且已到期的),同 isFuture 的纪律 —— 哪条是"最近一次"是排序问题,不交给 LLM 比日期 · prompt 渲染【最近一次·已发生】标记 + 要求摘要开头交代它(时间+事由+结果) · 新增「数据边界」硬约束段:明写源里只有标签、没有原话和下次时间, 没记的一个字都不许补,禁止输出"患者表示…"这类原话式表述 · 最近一次那条正文预算 40 → 160 字(源里偶有几百字的方案沟通记录, 一刀切 40 字会把唯一一条有信息量的记录砍没) · 它没记结果时显式渲染「结果:未记录」—— 不写模型会拿别条的结果脑补这条 抽屉侧:最近一次加 teal 角标 + 底色,未到期的加「未到期」灰标; 最近一次没结果时明写「结果:宿主未记录」(空着会被当成 PAC 没展示,正是这次的误会来源)。 顺带两个同源 bug: · fallback()(LLM 失败时给客服看的兜底句)还在拿 items[0] 当"最近一次", 等于把 2026-07 那次未来排程事故在兜底路径上原样复刻 → 改走 isLatestPast · returnVisits 的 orderBy taskDate desc 在 Postgres 默认 NULLS FIRST, 无日期的记录会顶到列表最前冒充"最近一次",还吃掉 take 名额 → nulls:'last' (摘要 take:12 与聚合 take:100 两处都改,口径一致) ## 本地验证 - 469 单测通过(本文件 13 → 24,新增「最近一次」13 例,含余同学生产原始形态回放) - service / web tsc 干净 - 吕学文(BJ0U017795,4 条历史 + 1 条 2026-10-09 未来排程)清缓存连跑 3 次稳定: 「最近一次4月4日治疗后回访已完成;此前种植咨询未回访,已排10月9日复查洁牙邀约。」 李石明(BJ0U017487,最近一次无结果)同样 3 次稳定: 「最近一次4月种植咨询回访未执行、未留结果;此前3次常规回访均已约到诊复查…」 —— 开头讲最近一次、没记结果如实说、未来排程仍说"已排"不说"漏做",三个方向都对 - 抽屉截图确认:2026-10-09 带「未到期」灰标,2026-04-04 带「最近一次」角标+底色 ## 待定(本次不做,需业务决定) - DW 有两列我们没摄:task_director(回访负责人姓名,「上次是谁跟的」)、 appointment_id(该次回访是否真开出预约 —— 比 result 文本硬的结果证据)。 加这两列要 migration + 165 万行 reparse,先记着。 - fact_complain_out(8.15 万条投诉)整张表未摄入,是目前唯一没用的患者态度硬信号。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>luoqi committed