yeg
2026-09-12 6e3033a58b834cf7c6c816fda526269fc375a043
docs(merchant): 记录工单 01 的验证说明

补充说明收款能力判定规则、后台能力查询/刷新接口与测试运行方式,并将工单标记为
待人工完成沙盒验证。
1个文件已修改
20 ■■■■■ 已修改文件
.scratch/automatic-withdrawal/issues/01-merchant-readiness.md 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.scratch/automatic-withdrawal/issues/01-merchant-readiness.md
@@ -18,8 +18,9 @@
- 新增 `MerchantPaymentReadinessService`:唯一“能否收款”判定。要求存在最新 `approved` 进件、
  该进件名下有带 `provider_token_no` 的 `approved` 银行卡、`merchant_stat = NORMAL`、
  `settle_status = 0`(自动结算已关闭)、取现 `switch_state = 1`。快照未确认时按需调用斗拱查询,
  查询失败/被拒时保持“未就绪”而不是猜测通过。
  `settle_status = 0`(自动结算已关闭)、取现 `switch_state = 1`。快照未确认时不放行,也不在
  支付链路上调用斗拱:由进件完成、定时任务或后台手动刷新补齐,避免支付/回调事务里等待 HTTP。
  斗拱查询一律在 `PROPAGATION_NOT_SUPPORTED` 中执行,不占用数据库事务与行锁。
- 新增 `HuifuMerchantCapabilityGateway`(`POST /v2/merchant/basicdata/query`,SDK
  `V2MerchantBasicdataQueryRequest`),把子商户状态、结算开关、取现开关与到账类型写入
  `merchant_onboarding_application`(V130 迁移 + `MerchantOnboardingSchemaInitializer` 兜底加列)。
@@ -29,9 +30,14 @@
  的银行卡写 token;绑定回调对已决卡片直接返回,晚到通知与重复通知都不再覆盖终态。
- 后台:`GET/POST /api/admin/management/merchant-settlement/onboardings/{id}/payment-capability[/refresh]`
  查看与刷新能力快照;`MerchantPaymentCapabilityScheduler` 定时刷新超过
  `app.payment.huifu.capability-refresh.stale-hours`(默认 6 小时)的快照。
  `app.payment.huifu.capability-refresh.stale-hours`(默认 6 小时)的快照,每个商户独立事务、互不影响。
测试(`MerchantPaymentReadinessServiceTests` 10 项、`MerchantSettlementCallbackIdempotencyTests` 5 项、
`AppOrderPortalServiceTests` 6 项)全部通过;三种失败组合、提供方查询失败与超时、晚到/重复回调均已覆盖。
注意:仓库的 H2 测试库无法解析 V77 等 MySQL 专用迁移,Spring 测试需按
`talent-card-server/docs/huifu-payment-integration.md` 的说明指向 MySQL 才能加载上下文。
测试(`MerchantPaymentReadinessServiceTests` 11 项、`MerchantSettlementCallbackIdempotencyTests` 5 项、
`AppOrderPortalServiceTests` 6 项)在 MySQL 上全部通过;自动结算未关、取现不可用、子商户冻结、
提供方拒绝/超时、快照未确认、晚到/重复回调均已覆盖。整套 100 项测试的其余 3 个失败与 HEAD 基线
完全一致(V77 的 H2 语法、`TalentAuthServiceTests` 的 `dateadd`、`MerchantSettlementStatisticsMapperTests`
的持久化断言),非本次改动引入。注意:仓库 H2 测试库无法解析 V77 等 MySQL 专用迁移,Spring 测试需按
`talent-card-server/docs/huifu-payment-integration.md` 的说明用 `TEST_DATASOURCE_*` 指向 MySQL。
遗留(不在本 ticket 范围):`AppOrderCreateRequest` 不携带门店,订单也不写 `store_id`,因此能力校验
只能到商户维度;多门店商户与按门店结算的对账将在后续 ticket 处理。