From bcb5fbe3249d9fcfe8efab90b09dc47f1d0b5f3a Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期四, 17 九月 2026 13:42:22 +0800
Subject: [PATCH] docs(scratch): 补人工验收步骤与开发库样本

---
 .scratch/merchant-capability-visibility/spec.md |   71 +++++++++++++++++++++++++++++++++++
 1 files changed, 71 insertions(+), 0 deletions(-)

diff --git a/.scratch/merchant-capability-visibility/spec.md b/.scratch/merchant-capability-visibility/spec.md
index eb90d79..bca3c70 100644
--- a/.scratch/merchant-capability-visibility/spec.md
+++ b/.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 小时窗口、下单前实时校验、提高定时核实频率。

--
Gitblit v1.7.1