3.2 KiB
3.2 KiB
Phase 1 FollowUpTask 与真实再次预约交付证据
日期:2026-08-02
范围:Backend + Admin + Docs/Ontology
状态:Code Complete / Local Gates Passed / Production Not Migrated
1. 交付结果
ReportLead收口为宠主同意与来源事实;新增FollowUpTask作为门店可执行回访对象。- 状态机支持领取、未接通/稍后联系改期、无意向/无效联系方式关闭,以及退订取消。
- Admin
/leads已切换为任务池;同店员工可实际联系、读取真实号源并代客创建预约。 rebooked只由真实 Appointment 保存成功触发;容量、客户归属或状态校验失败时不闭环。- 工作台到期回访改读 FollowUpTask;报告漏斗的回访后预约改读
rebook_created。 - 客户事实时间线新增回访创建/领取/改期/完成/取消/再次预约的低敏投影。
2. 自动化证据
| Gate | 结果 |
|---|---|
| Backend full test | PASS:217 tests,0 failures,0 errors,0 skipped |
| Admin production build | PASS:Vue type-check + Vite,1671 modules transformed |
| Ontology validation | PASS:290 entries,引用完整 |
| Endpoint drift | PASS:70/70 HTTP,code-only=0,ontology-only=0 |
| Entity drift | PASS:16/16 JPA,missing=0,extra=0 |
| Diff whitespace | PASS:backend/admin/docs git diff --check |
关键新增覆盖:FollowUpTaskMigrationTest、FollowUpTaskServiceTest、AdminFollowUpTaskControllerTest,以及 Appointment/BusinessEvent/Workbench/Timeline 的回归用例。反例包含跨店 404、他人领取冲突、未领取关闭拒绝、退订不虚增联系次数、跨店预约拒绝、容量不足不触碰任务。
3. Data Model Review
结论:PASS(代码与迁移层面)。
t_follow_up_task使用随机task_id对外、自增 ID 内部关联、@Version与悲观锁处理竞争。- 生产迁移只回填可靠的历史
pending留资;不猜测其他历史结果。 - 31 项生产只读预检中新增五项,覆盖客户 canonical 范围、状态/领取/回执、开放唯一性、真实 Appointment 与 BusinessEvent 引用。
- 迁移为向前兼容新增表;常规应用回滚不得删除表或覆盖已产生任务/事件。
4. Privacy Review
结论:PASS(静态契约与自动化层面)。
- 完整手机号仅在本店已认证 boss/staff 的开放回访任务中返回,目的限定为实际联系;终态任务只返回脱敏手机号。
- Workbench、CustomerTimeline、BusinessEvent、AuditLog 不保存或返回完整手机号。
- 事件 metadata 白名单不含手机号、token、openid/unionid、IP、备注、媒体 URL 或原始请求。
- 跨店任务使用 404,降低可枚举性;customer 无任务接口权限。
5. 尚未完成的外部证据
- 未在生产或真实试点库执行第八个迁移
20260802_create_follow_up_task.sql。 - 未以最终 production 环境运行 schema validate + 31 项只读预检。
- 未完成 boss/staff/customer 三角色真实环境 smoke,尤其是双员工抢领、退订与无号源再次预约。
- 未在 3~5 家试点门店验证任务领取习惯、接通率、再次预约率和约 200 单完整服务样本。
上述项目进入试点 RC 门禁,不因本地自动化通过而标记为上线完成。