fix(plan): 客服姓名改从回访表取,不再读 mock 花名册
产品指出:姓名本来就在 `patient_return_visits.task_director_name` 里。
原实现去读了 `data/jvs-dw/users.json` —— 那份是 mock 登录用的**派生物、只在 dev 存在**,
拿它当生产功能的姓名源等于让线上依赖一个开发态文件。而它本身就是从这张回访表派生的,
兜不住任何回访表查不到的人。
## 但不能直接取:id→姓名是**时间性的**
本地实测 `task_director_id` 有 101 个、`task_director_name` 100% 有值,
可**同一个 id 会对到多个姓名**:
```
4090 → 李宇琦 601 条 2021-06 ~ 2024-12 ← 现任
赵惠 32 条 2021-01 ~ 2021-07
杨柳 4 条 / 刘博学 1 条
```
DW 侧这个 id 被换过人。取错会让界面写着"赵惠"、实际派给了"李宇琦" ——
比不显示姓名更糟。按**最近一次**取之后干净了:101 个 id → 97 个名(剩下是真重名)。
⇒ 用 `DISTINCT ON` 而不是 groupBy:Prisma 的 groupBy 表达不了
「取 max(时间) 那一行的另一列」。顺带把原来的两次查询(名册 + 姓名)合成一次。
## 名册外被点名的人也要有名字
主管点名的客服可能只是**本诊所近 12 月**没回访(在别的诊所、或更早),
回访表里查得到。不兜这层,他点的人在确认单上就是一片空白。
加一次跨诊所、不限时间窗的兜底查询(只在确有人未解析时才发)。
实测:`4090` → 李宇琦(inRoster=false 如实标着);真不存在的 `99999` 仍是 null,不编。
## 批次跟踪的两处姓名也接上同一个源
`AssignmentBrief.createdByName` 与 `agentStats[].name` 原来硬编码 null(留了 P4.3 的 TODO),
现在同源解析。⚠ ️ 这里是**读时解析不是快照**:批次跟踪看的是"这个 id 现在是谁",
换人极罕见且不会发生在一个批次的几天窗口内,不为它再立一列。
## 顺带修一条把 URL 写错的注释
端点实际是 `GET /pac/v1/plans/assignments/agents`(控制器前缀 `plans/assignments`),
注释里写成了 `/plans/agents` —— 那个路径归 PlanController,会被它的裸 `@Get(':id')`
当成 planId='agents',报出来是 Prisma 的 uuid 解析错,看不出是路由问题。实测踩过。
877 单测通过。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Showing
Please
register
or
sign in
to comment