plan-detail-app.tsx
101 KB
-
feat(recall): 已完成治疗改永久抑制 + 未认领只能看不能操作 · 435cd818
两项业务反馈驱动的改动。 ## 1. 「已完成治疗」抑制期 14d → 永久 原 14d(WEAK_SIGNAL_SUPPRESS_DAYS)押的注是「等一个 DW 同步周期 + 排除闸 接手」,生产实测证伪:缺牙召回两例(吕学文 DW 无义齿完成记录、李石明义齿 在上颌而召回在下颌)排除闸都接不住,到期只会原样弹回来再挨一次投诉。 档位本身也不自洽 —— 「已在外院治疗」早就是永久,在别家做完永久闭嘴、 在自己家做完两周后再问,说不通。 误判不会把患者封死:抑制是**信号级**的(key=scenario|subKey,subKey 含 牙位)且带时间锚,结案后新发的同类信号照常放行。 WEAK_SIGNAL_SUPPRESS_DAYS 现仅剩「机会识别不准确」使用(算法问题,修好 规则后本就该重新召回)。 ## 2. 认领闸 —— 未认领只能看,不能操作 submitExecution 原先只校验 status、**完全没看 assignee**,生产上因此 出现两条 plan 在 assignee IS NULL 时被直接关闭。危害不止撞单: execution.service 特意保留 assigneeUserId 作业绩归属(清了会让 「我的已完成」/ 转化率永远为 0),未认领就提交 = 这条执行没有归属人, 统计里直接蒸发 —— 前端提示替代不了服务端约束。 新增 plan/claim-guard.ts,两种拒绝态分码(20504 未认领 / 20505 他人认领, 文案必须分开,否则组员以为自己没点对)。 过闸:提交通话结果 / 关闭机会、重生成话术(含 SSE)、话术反馈、召回反馈 不过闸: · assign(认领本身是入口,过闸会死锁) · recycle(PLAN_RECYCLE 是 leader 独占「回收 staff 已认领的单」, 按"必须自己认领"拦会把组长回收功能整个废掉) · recompute(ops 工具) · 只读端点 + 「潜在」(查看类)+ 刷新(拉数据,不改业务态) 前端同步:详情页按钮**不禁用**,点了才讲原因(禁用会让客服不知道为什么 点不动);顶栏未认领显「认领」按钮(闸的唯一出口)、他人认领显「仅查看」。 ## 验证 - 314 个单测通过(新增 claim-guard 5 例 + treated 永久 2 例) - 本地端到端:未认领 3 个入口全返 20504;他人认领返 20505 带占用人; 自己认领后放行;treated 关闭落库 snoozed_until = 36500 天(99.9 年) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>luoqi committed