yeg
2026-09-17 bcb5fbe3249d9fcfe8efab90b09dc47f1d0b5f3a
docs(scratch): 补人工验收步骤与开发库样本

把可直接照做的验收清单写进 spec:四条场景(进件页矛盾态、收款能力自查、手动核实与冷却、
页面文案与下单被拒逐字一致)各配造数 SQL,用的是开发库上校对过的样本
(yangye134/632/application 452 等),并写明改库还原语句。
1个文件已修改
71 ■■■■■ 已修改文件
.scratch/merchant-capability-visibility/spec.md 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.scratch/merchant-capability-visibility/spec.md
@@ -55,6 +55,77 @@
- 跑测试用 `talent-card-server/scripts/run-server-tests.ps1`,遵守 `docs/agents/testing.md`(已执行迁移只追加、不 `drop database`、同一 checkout 一次只跑一个 Maven 构建、3 项基线失败不重复验证)。
- 人工验收:改测试库把 `merchant_stat` 从 `NORMAL` 改成别的值(以及改回),走 `GET /api/merchant/onboarding/status`、商户中心自查页、以及一次扫码下单,确认三处口径一致。
## 人工验收(在共享开发库上,样本值 2026-09-17 校对)
前置:后端重启到含本轮改动的版本;商户端在 HBuilderX 重新编译运行(开发者工具默认连
`http://192.168.110.26:8080`,与共享开发库 `192.168.110.13:3306/talent_card` 配套)。改库前记下原值,
验完按最后一节还原。
可用样本(`merchant_operator.account` → 申请):
| 账号 | merchant / store | 申请 | 当前状态 |
| --- | --- | --- | --- |
| `yangye134`(个人进件验证商户) | 632 / 573 | `application 452` | approved,能力快照 NORMAL/取现 1/自动结算 1,六项阶段全 confirmed → 收款就绪 |
| `verify_merchant`(存量商户验证专用) | 631 / 572 | `application 448` | approved 且快照正常,但**没有进度记录** → 卡在微信开通与实名 |
| `onboarde001`(企业进件验证商户) | 633 / 574 | `application 449` | pending(`wechat=missing`)→ 用于"进件未通过"那一类 |
### A. 进件页不再自相矛盾(票 01、04)
```sql
update merchant_onboarding_progress
   set stages_json = json_set(stages_json, '$.merchantNormal', false, '$.merchantStat', 'CLOSED')
 where application_id = 452;
```
用 `yangye134` 打开商户中心 →「商户进件」,应看到:标题「进件办理中」(原来是「收款能力开通中」);
六项阶段仍全部「已确认」;多出一段「完成条件核实」,其中「通道商户状态」是「失败」+
「斗拱子商户状态异常(CLOSED),请联系汇付或后台处理」;顶部说明是「进件阶段已全部确认,但通道商户
状态未通过核实…」,**不再**是「请按待办理项补齐缺失能力」。把 `$.bank` 改成 `false` 可看到
「结算银行卡核实」那一条。
注意:此时点页面上的「刷新进度」会真去查通道、把 `merchantNormal` 写回真实值,这一页就恢复成
approved——想看这个场景就别点刷新,或看完再点(那也是"以通道为准"的正常表现)。
### B. 收款能力自查(票 02、05)
`yangye134` 打开商户中心 →「收款能力」:显示「现在可以收款」+ 最近核实时间。
- **只读验证**:记下 `capability_verified_at`,反复进出这个页面,该值不应变化(加载不查通道、不写库)。
- `verify_merchant`:显示「暂时无法收款 · 微信收款能力未就绪:微信支付业务开通、微信实名与授权,暂时无法收款」,
  按钮仍是可点的「立即核实」(它缺的是微信开通与实名,不是通道侧的事,所以允许重新核实)。
- `onboarde001`:显示「暂时无法收款 · 商户进件尚未审核通过,暂时无法收款」,按钮是「**暂不可核实**」,
  且没有「下次可核实」那一行——没有冷却,只是没有可核实的对象。
### C. 手动核实与冷却(票 03)
`yangye134`:
1. 点「立即核实」→ 后端日志出现一次汇付能力查询,最近核实时间刷新,`capability_verified_at` 更新。
2. 立刻再点:按钮变成「4:5x 后可再次核实」并逐秒递减;此时强点会提示「刚核实过,请稍后再试」。
3. **留在页面上**等倒计时归零:按钮应自己变回「立即核实」(本轮新加的行为,不必退出重进)。
4. 不想等:`update merchant_onboarding_application set capability_sync_until = date_sub(now(), interval 1 minute) where id = 452;`
   再点一次即可再查。
### D. 页面文案 == 下单被拒文案(票 02 的核心)
```sql
update merchant_onboarding_application set merchant_stat = 'CLOSED' where id = 452;
```
1. 「收款能力」页应显示「暂时无法收款 · 斗拱子商户状态异常(CLOSED),暂时无法收款」。
2. 用同一商户在商户端扫码下一笔到店消费单(首页扫码 → 提交):被拒的 toast 应与上面那句**逐字一致**。
   (等价性另有集成测试 `merchantViewReusesTheGateMessage` 直接拿闸门抛出的异常消息比对,人工这步是端到端确认。)
3. 再点一次「立即核实」:汇付侧其实没关这家商户,快照会被真实查询纠正回 `NORMAL`,页面回到可收款。
### E. 还原
```sql
update merchant_onboarding_application set merchant_stat = 'NORMAL', capability_sync_until = null where id = 452;
update merchant_onboarding_progress
   set stages_json = json_remove(json_set(stages_json, '$.merchantNormal', true), '$.merchantStat')
 where application_id = 452;
```
## Out of Scope
- 缩短能力快照 6 小时窗口、下单前实时校验、提高定时核实频率。