@@ -3,31 +3,31 @@
状态口径:每条线同时记录“后端 / 前端 / 验证 / 发布”。`[x]` 只表示该行声明的范围已有仓库证据;`[ ]` 表示仍有实施、前端、人工、延期验证或发布工作。后续七月工作只从本文件领取,不再从分散 `.scratch` 目录直接启动。
- [x] 0.1 `JULY-TECH-FOUNDATION` TECH 七月公共开发基础|来源 `.scratch/tech-public-foundation/` | 状态: 已完成( PRD `completed` , 12/12 Tickets 完成)|主通道 Infrastructure, 辅助 Application/Query| 发布: 本仓公共基础已交付。
- [ ] 0.2 `JULY-TECH-NOTIFICATION` TECH 公共站内通知|来源 `.scratch/tech-inapp-notifications/` ( 8 Tickets) | 状态: 未开始 |主通道简单写 Application, 辅助 Query/Infrastructure| 依赖: 0.1。
- [x ] 0.2 `JULY-TECH-NOTIFICATION` TECH 公共站内通知|来源 `.scratch/tech-inapp-notifications/` ( 8 Tickets) | 状态: 后端代码与跨仓契约完成、验证延期 |主通道简单写 Application, 辅助 Query/Infrastructure| 依赖: 0.1。
- [ ] 0.3 `JULY-UR33` 套餐临期查询、Dashboard 与提醒|来源 `.scratch/ur33-package-expiry-reminder/PRD.md` (由 PRD 直接转任务)|状态:未开始|主通道 Query, 辅助 Application/Infrastructure| 依赖: 0.2、0.9、0.14、0.26。
- [ ] 0.4 `JULY-UR34` 代理在线扫码充值与平台线下代充值|来源 `.scratch/ur34-agent-recharge/PRD.md` |状态:未开始|主通道复杂写,辅助 Query/Payment/WeCom Adapter| 依赖: 0.2、0.7、0.8 。
- [ ] 0.5 `JULY-UR35` 退款企微 审批与整单终结|来源 `.scratch/ur35-refund-wecom-approval/PRD.md` |状态:未开始|主通道复杂写,辅助 Query/WeCom Adapter| 依赖: 0.2、0.7、0.8 。
- [ ] 0.4 `JULY-UR34` 代理在线扫码充值与平台线下代充值|来源 `.scratch/ur34-agent-recharge/PRD.md` |状态:未开始|主通道复杂写,辅助 Query/Payment/Approval Port| 业务核心依赖: 2.8、2.29、2.57、2.9~ 2.12;测试环境开放线下代充入口另依赖 4.W14 。
- [ ] 0.5 `JULY-UR35` 退款审批与整单终结|来源 `.scratch/ur35-refund-wecom-approval/PRD.md` |状态:未开始|主通道复杂写,辅助 Query/Approval Port| 业务核心依赖: 2.8、2.30、2.9~ 2.12;测试环境开放提交入口另依赖 4.W14 。
- [ ] 0.6 `JULY-UR36` 批量订购套餐|来源 `.scratch/ur36-bulk-package-purchase/` ( 11 Tickets) | 状态: 未开始| 主通道 Application/Domain, 辅助 Query/Infrastructure| 依赖: 0.8、0.9。
- [ ] 0.7 `JULY-UR37` 企业微信审批公共能力|来源 `.scratch/ur37-wecom-approval-foundation/` ( 14 Tickets) | 状态: 未开始| 主通道复杂写,辅助 Query/Infrastructure| 依赖: 0.1;首个退款组合依赖 0.5 。
- [ ] 0.8 `JULY-UR38` 代理主钱包信用额度|来源 `.scratch/ur38-agent-main-wallet-credit/` ( 10 Tickets) | 状态: 未开始 |主通道复杂写,辅助简单写/Query| 依赖: 0.1。
- [ ] 0.7 `JULY-UR37` 企业微信审批公共能力|来源 `.scratch/ur37-wecom-approval-foundation/` ( 14 Tickets) | 状态: 未开始| 主通道 Application + Port/Infrastructure Adapter, 辅助 Query| 顺序: 先完成 2.9~ 2.12 渠道无关核心, UR34/UR35 业务核心完成后再执行 4.W1~ 4.W14 WeCom Adapter 与装配 。
- [x ] 0.8 `JULY-UR38` 代理主钱包信用额度|来源 `.scratch/ur38-agent-main-wallet-credit/` ( 10 Tickets) | 状态: 后端代码与测试环境切换契约完成、自动化/真实资金验证延期 |主通道复杂写,辅助简单写/Query| 依赖: 0.1。
- [ ] 0.9 `JULY-UR40` 下架套餐历史用户续费|来源 `.scratch/ur40-off-shelf-package-renewal/` ( 8 Tickets) | 状态: 未开始| 主通道 Domain Policy, 辅助 Query| 依赖: 0.1。
- [ ] 0.10 `JULY-UR42` 统一导出与字段权限|来源 `.scratch/ur42-unified-export-field-permissions/PRD.md` |状态:未开始|主通道 Query/DataSource, 辅助简单写 Application| 依赖: 0.3、0.4、0.5、0.12、0.14。
- [ ] 0.11 `JULY-UR43` 系列套餐批量授权|来源 `.scratch/ur43-series-package-bulk-authorization/` ( 3 Tickets) | 状态: 未开始| 主通道复杂写, 辅助 Query| 依赖: 0.1。
- [ ] 0.12 `JULY-UR44` 列表提交人与审批摘要|来源 `.scratch/ur44-list-submitter-approval-summary/PRD.md` |状态:未开始|主通道 Query, 辅助简单写/迁移|依赖:0.4、0.5、0.7 。
- [ ] 0.13 `JULY-UR45` 换货快照与新旧独立搜索|来源 `.scratch/ur45-exchange-asset-search/` ( 2 Tickets) | 状态: 后端完成、Ticket 元数据待收口; 前端/人工待确认 |主通道复杂写 + Query。
- [ ] 0.14 `JULY-UR46` 预计最终到期时间|来源 `.scratch/ur46-estimated-final-expiry/` ( 4 Tickets) | 状态: 后端完成、前端/人工未完成|主通道 Query| 依赖 0.19 已满足。
- [ ] 0.12 `JULY-UR44` 列表提交人与审批摘要|来源 `.scratch/ur44-list-submitter-approval-summary/PRD.md` |状态:未开始|主通道 Query, 辅助简单写/迁移|依赖:4.6、4.11、2.10、4.W9; 业务列表基础字段不依赖企微专属投影 。
- [x ] 0.13 `JULY-UR45` 换货快照与新旧独立搜索|来源 `.scratch/ur45-exchange-asset-search/` ( 2 Tickets) | 状态: 后端完成、前端/人工待验收 |主通道复杂写 + Query。
- [x ] 0.14 `JULY-UR46` 预计最终到期时间|来源 `.scratch/ur46-estimated-final-expiry/` ( 4 Tickets) | 状态: 后端完成、前端/人工未完成|主通道 Query| 依赖 0.19 已满足。
- [ ] 0.15 `JULY-UR47` 卡片手动限速|来源 `.scratch/ur47-manual-card-speed-limit/` ( 4 Tickets) | 状态: 未开始| 主通道 Application + Port/Adapter, 辅助 Infrastructure| 依赖: 0.1。
- [ ] 0.16 `JULY-UR48` 按资产类型限制支付方式|来源 `.scratch/ur48-asset-payment-methods/` ( 5 Tickets) | 状态: 未开始| 主通道简单写 + 复杂写,辅助 Query| 依赖: 0.1。
- [ ] 0.17 `JULY-UR49` 设备 CSV 批量分配|来源 `.scratch/ur49-device-batch-allocation-csv/` ( 5 Tickets) | 状态: 未开始| 主通道 Application, 辅助 Infrastructure/Query| 依赖: 0.6 的受控上传边界。
- [ ] 0.18 `JULY-UR53` 卡和设备实名状态筛选|来源 `.scratch/ur53-asset-realname-filter/PRD.md` |状态:未开始|主通道 Query, 辅助投影 Application/Infrastructure| 依赖: 0.25。
- [x] 0.19 `JULY-UR55` 套餐生效条件覆盖与购买快照|来源 `.scratch/ur55-package-expiry-base/` | 状态: 5/5 Tickets 已完成; PRD 顶层状态滞后不影响代码完成证据|主通道简单写 + 复杂写。
- [ ] 0.20 `JULY-UR57` 活跃退款资产禁止换货|来源 `.scratch/ur57-block-exchange-active-refund/PRD.md` |状态:未开始|主通道复杂写,辅助批量 Query| 依赖: 0.5。
- [ ] 0.21 `JULY-UR60` 店铺联系电话精确查询|来源 `.scratch/ur60-shop-phone-search/` ( 3 Tickets) | 状态: 后端完成、前端联调/人工验收未完成|主通道旧架构简单 Query。
- [x ] 0.21 `JULY-UR60` 店铺联系电话精确查询|来源 `.scratch/ur60-shop-phone-search/` ( 3 Tickets) | 状态: 后端完成、前端联调/人工验收未完成|主通道旧架构简单 Query。
- [ ] 0.22 `JULY-UR62` H5 购买与实名顺序配置|来源 `.scratch/ur62-h5-realname-order/PRD.md` |状态:未开始|主通道 Domain/Application, 辅助简单写/Query| 依赖: 0.25。
- [ ] 0.23 `JULY-UR73` 按运营商实名能力控制复机|来源 `.scratch/ur73-resume-realname-policy/PRD.md` |状态:未开始|主通道复杂写,辅助 Gateway/Outbox| 依赖: 0.25。
- [ ] 0.24 `JULY-UR86` 资产前代/后代换货链|来源 `.scratch/ur86-asset-exchange-trace/` ( 2 Tickets) | 状态: 后端完成、前端验收与历史抽样未完成| 主通道 Query。
- [x ] 0.24 `JULY-UR86` 资产前代/后代换货链|来源 `.scratch/ur86-asset-exchange-trace/` ( 2 Tickets) | 状态: 后端完成、前端验收与历史抽样未完成| 主通道 Query。
- [ ] 0.25 `JULY-UR94` 卡状态公共写入与运营商回调|来源 `.scratch/ur94-card-state-events-callbacks/` ( 13 Tickets) | 状态: 未开始| 主通道复杂写, 辅助 Adapter/Query| 依赖: 0.1。
- [ ] 0.26 `JULY-UR96` 店铺业务员归属|来源 `.scratch/ur96-shop-business-owner/` ( 6 Tickets) | 状态: 未开始 |主通道简单写,辅助 Query/Port| 依赖: 0.1。
- [x ] 0.26 `JULY-UR96` 店铺业务员归属|来源 `.scratch/ur96-shop-business-owner/` ( 6 Tickets) | 状态: 后端代码完成、验证延期 |主通道简单写,辅助 Query/Port| 依赖: 0.1。
- [ ] 0.27 `JULY-UR97` 钱包低余额预警|来源 `.scratch/ur97-wallet-low-balance-alert/PRD.md` |状态:未开始|主通道复杂写,辅助 Query/Outbox/Notification| 依赖: 0.2、0.8、0.26。
- [ ] 0.28 `JULY-UR98` 换货新资产继承店铺|来源 `.scratch/ur98-exchange-inherit-shop/` ( 4 Tickets) | 状态: 未开始| 主通道复杂写, 辅助 Query/Infrastructure| 依赖: 0.1。
@@ -38,62 +38,52 @@
- [x] 1.1 固化 TECH 公共基础完成证据: 12 张 Ticket、Outbox/Relay、幂等、五态任务、受控配置、Access Log 安全能力、迁移与交接文档;明确它不等于通知、审计或业务消费者已完成。
- [x] 1.2 固化 UR55 后端完成证据:创建/编辑覆盖值、同步购买快照、自动购包快照、激活与排队只消费快照共 5 张 Ticket; 不重复实现后端。
- [x] 1.3 固化 UR45 后端完成证据:统一换货资产快照和新旧资产独立搜索均已有代码/文档/提交;不回填历史快照、不顺带迁移 UR86/UR98。
- [ ] 1.4 收口 UR45 原 PRD/Ticket 元数据并向前端交付新旧资产筛选契约;保持“后端完成、前端/人工待验收”,不得把元数据修正记为重新实现。
- [x ] 1.4 收口 UR45 原 PRD/Ticket 元数据并向前端交付新旧资产筛选契约;保持“后端完成、前端/人工待验收”,不得把元数据修正记为重新实现。
- [x] 1.5 固化 UR46 四个后端 Query 切片完成证据: 后台详情、卡列表、设备列表、C 端资产信息;不写汇总表、不重复计算第二套到期字段。
- [x] 1.6 固化 UR60 后端完成证据:分页校验、联系电话 11 位精确过滤/索引、企业账号路由限制;保留前端与人工任务未完成。
- [x] 1.7 固化 UR86 后端完成证据:前代和后代 Query、权限投影与索引; 不新建换货关系表、不修改换货状态机。
- [x] 1.8 冻结提交 `ff44305` 现有审计 代码:保留 Integration Log 基础、离线 `cmd/audit-coverage` 、Access Log 敏感字段判定复用和无外键迁移 `000167` ; 不装配 Audit Event、不继续开发审计中心,生产恢复见 6.5 。
- [x] 1.8 冻结提交 `ff44305` 现有相关 代码:保留 Integration Log 基础、离线 `cmd/audit-coverage` 、Access Log 敏感字段判定复用和无外键迁移 `000167` ; Audit Event 与审计中心移出本 Change, 不作为测试环境或生产上线门禁, 未来如需恢复另开独立 Change 。
## 2. 第一批:共享核心与独立 frontier
### B1-01 公共站内通知(`JULY-TECH-NOTIFICATION`)
- [ ] 2.1 映射原通知 Ticket 01: 交付后台明确接收账号的通知写入、`event_id + recipient` 幂等、未读查询与单条已读完整纵向切片。【主:简单写 Application; 辅: Query/Infrastructure| 边界: 通知事实与当前账号读取| 不迁移: 业务触发规则、WebSocket| 依赖: 1.1】
- [ ] 2.2 映射原 Ticket 02: 交付后台通知筛选、分类汇总、稳定分页和全部/按分类已读。【主: Query; 辅: 简单写| 边界: 当前接收人数据| 不迁移: 业务列表| 依赖: 2.1】
- [ ] 2.3 映射原 Ticket 03: 交付个人客户通知投递、简化列表与已读 API。【主: 简单写 + Query| 边界: personal_customer 接收人| 不迁移: 后台权限模型| 依赖: 2.1】
- [ ] 2.4 映射原 Ticket 04: 交付店铺主账号、平台业务员及其他动态接收人的 Port/Adapter 解析。【主: Application + Port/Adapter| 边界: 只解析稳定接收人, 不复制业务触发| 不迁移: 店铺层级| 依赖: 2.1、2.63】
- [ ] 2.5 映射原 Ticket 05: 交付受控 `ref_type/ref_id/ref_key` 目标解析、跳转白名单与跳转后二次权限校验。【主: Query| 辅: Application| 边界: 通知目标解析| 不迁移: 任意 URL、业务权限实现| 依赖: 2.1】
- [ ] 2.6 映射原 Ticket 06: 交付通知保留、分批清理、失败可观测与安全日志。【主: Infrastructure| 辅: Query| 边界: 通知记录生命周期| 不迁移: Audit Event、外部消息渠道| 依赖: 2.1】
- [ ] 2.7 映射原 Ticket 07: 冻结后台与 C 端通知页面、30 秒轮询、铃铛/抽屉/中心、加载/空态/失败与受控跳转契约,并更新 OpenAPI/中文文档。【主: Query/API 契约| 不迁移: 前端框架选择| 依赖: 2.2、2.3、2.5】
- [ ] 2.8 映射原 Ticket 08 为测试环境发布检查:完成通知 Handler/路由/文档生成器、Worker/模板注册与生产组合根装配;仅执行本批格式化、必要生成、构建和部署检查,自动化与正式发布门禁转 6.2/6.5 。【主: Infrastructure| 依赖: 2.2-2.7】
- [x ] 2.1 映射原通知 Ticket 01: 交付后台明确接收账号的通知写入、`event_id + recipient` 幂等、未读查询与单条已读完整纵向切片。【主:简单写 Application; 辅: Query/Infrastructure| 边界: 通知事实与当前账号读取| 不迁移: 业务触发规则、WebSocket| 依赖: 1.1】
- [x ] 2.2 映射原 Ticket 02: 交付后台通知筛选、分类汇总、稳定分页和全部/按分类已读。【主: Query; 辅: 简单写| 边界: 当前接收人数据| 不迁移: 业务列表| 依赖: 2.1】
- [x ] 2.3 映射原 Ticket 03: 交付个人客户通知投递、简化列表与已读 API。【主: 简单写 + Query| 边界: personal_customer 接收人| 不迁移: 后台权限模型| 依赖: 2.1】
- [x ] 2.4 映射原 Ticket 04: 交付店铺主账号、平台业务员及其他动态接收人的 Port/Adapter 解析。【主: Application + Port/Adapter| 边界: 只解析稳定接收人, 不复制业务触发| 不迁移: 店铺层级| 依赖: 2.1、2.63】
- [x ] 2.5 映射原 Ticket 05: 交付受控 `ref_type/ref_id/ref_key` 目标解析、跳转白名单与跳转后二次权限校验。【主: Query| 辅: Application| 边界: 通知目标解析| 不迁移: 任意 URL、业务权限实现| 依赖: 2.1】
- [x ] 2.6 映射原 Ticket 06: 交付通知保留、分批清理、失败可观测与安全日志。【主: Infrastructure| 辅: Query| 边界: 通知记录生命周期| 不迁移: Audit Event、外部消息渠道| 依赖: 2.1】
- [x ] 2.7 映射原 Ticket 07: 冻结后台与 C 端通知页面、30 秒轮询、铃铛/抽屉/中心、加载/空态/失败与受控跳转契约,并更新 OpenAPI/中文文档。【主: Query/API 契约| 不迁移: 前端框架选择| 依赖: 2.2、2.3、2.5】
- [x ] 2.8 映射原 Ticket 08 为测试环境发布检查:完成通知 Handler/路由/文档生成器、Worker/模板注册与生产组合根装配;仅执行本批格式化、必要生成、构建和部署检查,真实外部验收转 6.2; Audit Event 不属于本 Change 。【主: Infrastructure| 依赖: 2.2-2.7】
### B1-02 企业微信审批公共能力 ( `JULY-UR37`)
### B1-02 渠道无关审批核心 ( `JULY-UR37` 通用部分 )
- [ ] 2.9 映射原 UR37-01: 交付企微连接状态、Token 缓存/锁、安全 Viper 配置与 WeCom Adapter; 所有外部尝试接入 Integration Log。【主: Infrastructure Adapter| 不迁移: 业务退款/充值 | 依赖: 1.1】
- [ ] 2.10 映射原 UR37-02: 交付平台/超管五分钟扫码绑定会话、本人查询/解绑与超管强制解绑;代理不绑定。【主:复杂写 Application/Domain| 辅: Query| 边界: 账号与 userid 一对一|不迁移:组织模型 | 依赖: 2.9】
- [ ] 2.11 映射原 UR37-03: 交付稳定场景、不可变模板版本、控件映射校验与首次发布。【主: 复杂写| 辅: Adapter/Query| 边界: 模板版本事实| 不迁移: 本地审批节点 | 依赖: 2.9】
- [ ] 2.12 映射原 UR37-04: 交付业务创建前置校验、真实提交人/企微发起身份快照、 审批实例与业务单/ Outbox 同事务 Port。【主: Application + Port| 边界: 公共审批创建事务| 不迁移: 业务金额规则 | 依赖: 2.10 、2.11】
- [ ] 2.13 映射原 UR37-05: 交付本地业务附件权威存储、企微副本上传、异步 `applyevent` 、结果未知状态和 Integration Log。【主: Application/Infrastructure| 边界: 一次审批技术提交| 不迁移: 业务附件权限| 依赖: 2.12】
- [ ] 2.14 映射原 UR37-06: 交付场景暂停、提交租约、模板换版/指纹验证、原子恢复与失效告警。【主: 复杂写| 辅: Scheduled Job| 边界: 新提交开关, 不中断存量实例| 不迁移: 业务终态| 依赖: 2.11、2.13】
- [ ] 2.15 映射原 UR37-07: 交付加密回调验签解密、权威 `getapprovaldetail` 同步、状态条件更新与首次终态 Outbox。【主: 复杂写| 辅: Adapter| 边界: 审批镜像状态| 不迁移: 终态业务处理| 依赖: 2.13】
- [ ] 2.16 映射原 UR37-08: 交付两分钟轮询补偿、回调/轮询共用同步用例、处理租约与终态事件幂等。【主: Application| 辅: Worker| 不迁移: 退款/充值 Worker| 依赖: 2.15】
- [ ] 2.17 映射原 UR37-09: 交付审批运行列表/详情、业务摘要、权限主体投影和稳定分页,代理不得看到审批人/内部意见/附件。【主: Query| 边界: 公共审批读取| 不迁移: 业务列表| 依赖: 2.10、2.11、2.15】
- [ ] 2.18 映射原 UR37-10: 交付提交结果未知的“绑定已有 sp_no”和“确认未创建后重发”受控恢复, 保留每次技术尝试与 Integration Log。【主: 复杂写| 辅: Adapter| 不迁移: 新业务审批申请| 依赖: 2.13、2.15、2.17】
- [ ] 2.19 映射原 UR37-11: 消费首次终态事件并向真实业务提交人发送审批结果通知, 按实例/接收人防重。【主: Application| 辅: Notification Adapter| 不迁移: 业务到账通知| 依赖: 2.8、2.16】
- [ ] 2.20 映射原 UR37-12: 交付存量审批迁移契约、`legacy` 只读投影、平台绑定/代理固定账号前置检查与异常清单。【主: Application/Infrastructure| 辅: Query| 不迁移: 伪造历史企微实例| 依赖: 2.10-2.15】
- [ ] 2.21 映射原 UR37-13: 冻结企微配置页、个人绑定、审批运行/详情/恢复与业务摘要的跨仓契约,补 OpenAPI、文档生成器和中文文档。【主: API/Query 契约| 不迁移: 前端技术栈| 依赖: 2.10、2.11、2.17、2.18】
- [ ] 2.22 完成 UR37 公共能力的测试环境装配:配置模板/回调/轮询 Worker、路由与组合根并执行构建/部署检查;原 UR37-14“退款首个真实企微门禁”整体转 6.2,不阻塞 B3 退款代码实现。【主: Infrastructure| 依赖: 2.9-2.21】
- [x ] 2.9 定义业务侧 Approval Port、通用审批实例与标准决策 `approved/rejected/cancelled/deleted/revoked_after_approved` ;实例只持有业务类型/ID、真实提交人、`provider` 、`external_ref` 、标准状态、请求/决策快照和关联 ID。【主: Application + Port/Domain| 边界: 渠道无关审批事实| 不迁移: 企微 Token、`sp_no` 、模板/控件、节点、审批人、会签/或签 | 依赖: 1.1】
- [x ] 2.10 交付通用审批 Query 和权限投影, 输出稳定业务摘要、提交人、provider、标准状态与处理摘要; 渠道专属节点、意见和附件仅由 Adapter 可选扩展, 代理不得看到内部审批信息。【主: Query| 边界: 通用审批读模型| 不迁移: 业务列表、实时外部查询 | 依赖: 2.9】
- [x ] 2.11 交付渠道回传决策的统一同步用例、状态条件更新、首次终态 Outbox、处理租约与幂等分发; 业务消费者不得 import 企微/钉钉 SDK、DTO、状态码、模板控件 ID 或 `sp_no` 。【主: Application + Outbox| 边界: 标准决策进站和终态分发| 不迁移: 退款/充值终态规则 | 依赖: 2.9】
- [x ] 2.12 交付新审批申请的原子创建契约:业务用例在同一事务固化业务单、通用 审批实例与提交 Outbox;有效 Adapter/场景/发起身份不可用时在上述事实写入前失败关闭。【主: Application + Port| 边界: 申请创建与可用性契约| 不迁移: 金额、钱包、佣金、套餐规则, 不建本地审批流引擎 | 依赖: 2.9 、2.11】
### B1-03 代理主钱包信用额度(`JULY-UR38`)
- [ ] 2.23 映射原 UR38-01: 扩展主钱包信用字段、CHECK/索引/版本与 Wallet Domain 不变量;迁移前核对现有约束和异常数据。【主:复杂写 Domain| 辅: Infrastructure| 不迁移: 员工/佣金/资产钱包| 依赖: 1.1】
- [ ] 2.24 映射原 UR38-02: 交付客户角色“仅新建店铺使用”的默认信用模板、权限与 API/前端契约。【主:简单写 Application| 辅: Query| 不迁移: 已有钱包追溯更新| 依赖: 2.23】
- [ ] 2.25 映射原 UR38-03: 新建店铺事务内原子复制默认角色信用快照到代理主钱包。【主: 复杂写 Application| 边界: 店铺 + 钱包创建事务| 不迁移: 其他店铺创建规则| 依赖: 2.24】
- [ ] 2.26 映射原 UR38-04: 交付平台独立权限调整 店铺实际额度、版本冲突、降低/关闭边界和变更前后投影。【主:复杂写 Domain| 辅: Query| 不迁移:代理自助调额| 依赖: 2.23】
- [ ] 2.27 映射原 UR38-05: 统一代理订单、代购和钱包支付扣款用例, 使用有效信用、版本/锁、唯一流水和同事务事实。【主:复杂写 Domain| 不迁移: 无关订单创建| 依赖: 2.23】
- [ ] 2.28 映射原 UR38-06: 统一代理主钱包冻结/解冻,维持 `balance-frozen+credit>=0` 与幂等流水。【主:复杂写 Domain| 不迁移: 佣金冻结| 依赖: 2.23、2.27】
- [ ] 2.29 映射原 UR38-07: 统一充值入账与人工调整用例, 按唯一业务号、版本和流水幂等; 只提供 UR34 可复用能力。【主:复杂写 Domain| 不迁移: 支付/企微/通知| 依赖: 2.23】
- [ ] 2.30 映射原 UR38-08: 统一代理订单退款回充, 仅按原扣款流水定位原主钱包并幂等回溯。【主: 复杂写 Domain| 不迁移: 渠道退款/资产钱包退款| 依赖: 2.27、2.29】
- [ ] 2.31 映射原 UR38-09: 资金概况 Query 返回信用开关、额度、现金可用、总可用、欠款和版本, 前端不得自行计算。【主: Query| 不迁移: 钱包写入| 依赖: 2.23、2.26】
- [ ] 2.32 映射原 UR38-10 为测试环境停机切换:完成所有主钱包写入口接入、迁移/API/前端契约/组合根装配与本批构建部署检查;并发/真实资金验收转 6.1/6.3。【主: Infrastructure/Application 收口| 依赖: 2.24-2.31】
- [x ] 2.23 映射原 UR38-01: 扩展主钱包信用字段、CHECK/索引/版本与 Wallet Domain 不变量;迁移前核对现有约束和异常数据。【主:复杂写 Domain| 辅: Infrastructure| 不迁移: 员工/佣金/资产钱包| 依赖: 1.1】
- [x ] 2.24 映射原 UR38-02: 交付客户角色“仅新建店铺使用”的默认信用模板、权限与 API/前端契约。【主:简单写 Application| 辅: Query| 不迁移: 已有钱包追溯更新| 依赖: 2.23】
- [x ] 2.25 映射原 UR38-03: 新建店铺事务内原子复制默认角色信用快照到代理主钱包。【主: 复杂写 Application| 边界: 店铺 + 钱包创建事务| 不迁移: 其他店铺创建规则| 依赖: 2.24】
- [x ] 2.26 映射原 UR38-04: 交付既有 店铺实际额度调整 、版本冲突、降低/关闭边界和变更前后投影; `shop:credit-limit:manage` 仅控制前端按钮显示,后端本期不校验该权限或账号类型 。【主:复杂写 Domain| 辅: Query| 依赖: 2.23】
- [x ] 2.27 映射原 UR38-05: 统一代理订单、代购和钱包支付扣款用例, 使用有效信用、版本/锁、唯一流水和同事务事实。【主:复杂写 Domain| 不迁移: 无关订单创建| 依赖: 2.23】
- [x ] 2.28 映射原 UR38-06: 统一代理主钱包冻结/解冻,维持 `balance-frozen+credit>=0` 与幂等流水。【主:复杂写 Domain| 不迁移: 佣金冻结| 依赖: 2.23、2.27】
- [x ] 2.29 映射原 UR38-07: 统一充值入账与人工调整用例, 按唯一业务号、版本和流水幂等; 只提供 UR34 可复用能力。【主:复杂写 Domain| 不迁移: 支付/企微/通知| 依赖: 2.23】
- [x ] 2.30 映射原 UR38-08: 统一代理订单退款回充, 仅按原扣款流水定位原主钱包并幂等回溯。【主: 复杂写 Domain| 不迁移: 渠道退款/资产钱包退款| 依赖: 2.27、2.29】
- [x ] 2.31 映射原 UR38-09: 资金概况 Query 返回信用开关、额度、现金可用、总可用、欠款和版本, 前端不得自行计算。【主: Query| 不迁移: 钱包写入| 依赖: 2.23、2.26】
- [x ] 2.32 映射原 UR38-10 为测试环境停机切换:完成所有主钱包写入口接入、迁移/API/前端契约/组合根装配与本批构建部署检查;并发/真实资金验收转 6.1/6.3。【主: Infrastructure/Application 收口| 依赖: 2.24-2.31】
### B1-04 卡状态公共写入与运营商回调(`JULY-UR94`)
- [ ] 2.33 映射原 UR94-01: 扫描 19 位 ICCID 冲突并交付未删除范围部分唯一索引与发布前异常清单。【主: Infrastructure| 不迁移: ICCID 归一化| 依赖: 1.1】
- [ ] 2.34 映射原 UR94-02: 交付实名观测的唯一 `ApplyCardObservation` 写入闭环、锁/条件更新、领域事实与 Outbox。【主: 复杂写 Domain/Application| 不迁移: 轮询调度| 依赖: 2.33】
- [ ] 2.35 映射原 UR94-03: 将流量观测收口到同一公共写入用例并保持已有周期/资格语义。【主:复杂写 Domain| 不迁移: 套餐轮询| 依赖: 2.34】
- [ ] 2.36 映射原 UR94-04: 将网络状态观测收口到同一用例并保持停复机业务边界。【主: 复杂写 Domain| 不迁移: 复机资格( 由 3.2 负责) | 依赖: 2.34】
- [ ] 2.37 映射原 UR94-05: 一次性切换三个现有轮询结果写入口到公共用例, 保持 PostgreSQL 配置、Redis 分片、间隔、开关和失败重排不变。【主: Application/Infrastructure| 不迁移: 轮询调度| 依赖: 2.34-2.36】
- [x ] 2.33 映射原 UR94-01: 扫描 19 位 ICCID 冲突并交付未删除范围部分唯一索引与发布前异常清单。【主: Infrastructure| 不迁移: ICCID 归一化| 依赖: 1.1】
- [x ] 2.34 映射原 UR94-02: 交付实名观测的唯一 `ApplyCardObservation` 写入闭环、锁/条件更新、领域事实与 Outbox。【主: 复杂写 Domain/Application| 不迁移: 轮询调度| 依赖: 2.33】
- [x ] 2.35 映射原 UR94-03: 将流量观测收口到同一公共写入用例并保持已有周期/资格语义。【主:复杂写 Domain| 不迁移: 套餐轮询| 依赖: 2.34】
- [x ] 2.36 映射原 UR94-04: 将网络状态观测收口到同一用例并保持停复机业务边界。【主: 复杂写 Domain| 不迁移: 复机资格( 由 3.2 负责) | 依赖: 2.34】
- [x ] 2.37 映射原 UR94-05: 一次性切换三个现有轮询结果写入口到公共用例, 保持 PostgreSQL 配置、Redis 分片、间隔、开关和失败重排不变。【主: Application/Infrastructure| 不迁移: 轮询调度| 依赖: 2.34-2.36】
- [ ] 2.38 映射原 UR94-06: 交付同场景可合并的立即/3/5 分钟观测序列、单次请求互斥、最小间隔与 Integration Log。【主: Application| 辅: Asynq/Adapter| 不迁移: 自动退避状态| 依赖: 2.34-2.36】
- [ ] 2.39 映射原 UR94-07: 在查询资产、获取实名链接等成功边界接入观测序列, 不新增显式同步 API。【主: Application Adapter| 不迁移: 读取 Query 业务| 依赖: 2.38】
- [ ] 2.40 映射原 UR94-08: 在停复机、购包和套餐激活成功边界接入观测序列, 仅负责触发不复制业务资格。【主: Application Adapter| 不迁移: UR73/套餐规则| 依赖: 2.38】
@@ -110,19 +100,19 @@
- [ ] 2.48 `JULY-UR43` 映射原 Ticket 03: 交付首次/后续管理前端契约、三类价格语义、OpenAPI/文档生成器与同批切换部署检查。【主: API/Query 契约| 依赖: 2.46、2.47】
- [ ] 2.49 `JULY-UR47` 映射原 Ticket 01: 修复同一设备多当前卡并建立部分唯一约束, 异常数据先入清单。【主: Infrastructure| 不迁移: 绑定历史| 依赖: 1.1】
- [ ] 2.50 `JULY-UR47` 映射原 Ticket 02: 交付语义化 `speed_level` 到账号/运营商渠道 `code` 的 Gateway Adapter、能力校验与 Integration Log。【主: Port/Adapter| 不迁移: 自动限速| 依赖: 2.49】
- [ ] 2.51 `JULY-UR47` 映射原 Ticket 03: 交付统一资产手动限速 API, 设备解析当前卡, 区分不限速与 0kbps, 外部结果未知可恢复; Audit Event 延期到 6.5 。【主: Application| 辅: Adapter| 不迁移: 套餐限速| 依赖: 2.49、2.50】
- [ ] 2.51 `JULY-UR47` 映射原 Ticket 03: 交付统一资产手动限速 API, 设备解析当前卡, 区分不限速与 0kbps, 外部结果未知可恢复; Audit Event 不属于本 Change 且不阻塞上线 。【主: Application| 辅: Adapter| 不迁移: 套餐限速| 依赖: 2.49、2.50】
- [ ] 2.52 `JULY-UR47` 映射原 Ticket 04: 交付卡/设备详情限速能力、固定档位、失败状态、OpenAPI/文档生成器与测试环境配置/构建检查;真实 Gateway 验收转 6.4。【主: Query/API 契约| 依赖: 2.49-2.51】
- [ ] 2.53 `JULY-UR48` 映射原 Ticket 01: 复用受控系统配置读取/更新,向资产展示允许支付方式并提供安全默认值。【主:简单写 + Query| 不迁移: 通用配置中心| 依赖: 1.1】
- [ ] 2.54 `JULY-UR48` 映射原 Ticket 02: 限制普通资产钱包充值为资产允许集合与微信/支付宝交集,钱包不得作为充值渠道。【主:复杂写 Policy| 不迁移: C 端全部充值| 依赖: 2.53】
- [ ] 2.55 `JULY-UR48` 映射原 Ticket 03: 订单创建时必填并固化支付方式快照, 强充按同一方式拉起且钱包不能给自身强充。【主: 复杂写 Domain| 不迁移: 其他订单状态| 依赖: 2.53】
- [ ] 2.56 `JULY-UR48` 映射原 Ticket 04: 支付时只执行订单快照方式并按最新资产配置二次校验, 需要换方式时取消旧单重建。【主: 复杂写 Domain| 不迁移: 支付方式替换接口| 依赖: 2.53、2.55】
- [ ] 2.57 `JULY-UR48` 映射原 Ticket 05: 交付后台配置、C 端支付页/强充/取消重建契约、OpenAPI/文档生成器与测试环境构建部署检查;真实支付验证转 6.3。【主: API/前端契约| 依赖: 2.54-2.56】
- [ ] 2.58 `JULY-UR96` 映射原 Ticket 01: 为店铺增加 nullable 平台业务员字段、索引与启用平台账号约束, 不回填历史。【主: Infrastructure| 不迁移: 店铺层级/分销| 依赖: 1.1】
- [ ] 2.59 `JULY-UR96` 映射原 Ticket 02: 平台创建店铺时显式设置或按规则继承业务员, 并在同一用例保存快照。【主: 简单写 Application| 不迁移: 信用模板( 由 UR38) | 依赖: 2.58】
- [ ] 2.60 `JULY-UR96` 映射原 Ticket 03: 代理创建直属下级店铺时安全继承当前业务员, 不允许代理指定其他平台账号。【主: 简单写| 不迁移: 店铺权限| 依赖: 2.59】
- [ ] 2.61 `JULY-UR96` 映射原 Ticket 04: 交付业务员编辑权限、停用/删除后的历史保留和重绑; Audit Event 延期 6.5 。【主: 简单写| 不迁移: 账号生命周期| 依赖: 2.58】
- [ ] 2.62 `JULY-UR96` 映射原 Ticket 05: 店铺创建/编辑/列表/详情/筛选返回业务员投影、候选账号与手机号摘要。【主: Query| 不迁移: 数据范围| 依赖: 2.58】
- [ ] 2.63 `JULY-UR96` 映射原 Ticket 06: 交付主账号与可用业务员接收人解析 Port、OpenAPI/前端契约与测试环境构建部署检查。【主: Port/Adapter + Query| 不迁移: 通知触发规则| 依赖: 2.59-2.62】
- [x ] 2.58 `JULY-UR96` 映射原 Ticket 01: 为店铺增加 nullable 平台业务员字段、索引与启用平台账号约束, 不回填历史。【主: Infrastructure| 不迁移: 店铺层级/分销| 依赖: 1.1】
- [x ] 2.59 `JULY-UR96` 映射原 Ticket 02: 平台创建店铺时显式设置或按规则继承业务员, 并在同一用例保存快照。【主: 简单写 Application| 不迁移: 信用模板( 由 UR38) | 依赖: 2.58】
- [x ] 2.60 `JULY-UR96` 映射原 Ticket 03: 代理创建直属下级店铺时安全继承当前业务员, 不允许代理指定其他平台账号。【主: 简单写| 不迁移: 店铺权限| 依赖: 2.59】
- [x ] 2.61 `JULY-UR96` 映射原 Ticket 04: 交付业务员编辑权限、停用/删除后的历史保留和重绑; Audit Event 不属于本 Change 且不阻塞上线 。【主: 简单写| 不迁移: 账号生命周期| 依赖: 2.58】
- [x ] 2.62 `JULY-UR96` 映射原 Ticket 05: 店铺创建/编辑/列表/详情/筛选返回业务员投影、候选账号与手机号摘要。【主: Query| 不迁移: 数据范围| 依赖: 2.58】
- [x ] 2.63 `JULY-UR96` 映射原 Ticket 06: 交付主账号与可用业务员接收人解析 Port、OpenAPI/前端契约与测试环境构建部署检查。【主: Port/Adapter + Query| 不迁移: 通知触发规则| 依赖: 2.59-2.62】
- [ ] 2.64 `JULY-UR98` 映射原 Ticket 01: 建立换货分配记录与目标资产归属校正基础, 目标已属其他店铺时拒绝。【主: Infrastructure/Domain| 不迁移: 历史回填| 依赖: 1.1】
- [ ] 2.65 `JULY-UR98` 映射原 Ticket 02: 换货完成事务内让新资产继承旧店铺并保留旧资产归属, 钱包/套餐迁移仍只受 `migrate_data` 控制。【主:复杂写 Domain/Application| 不迁移: 整个换货模块| 依赖: 2.64】
- [ ] 2.66 `JULY-UR98` 映射原 Ticket 03: 创建/发货/完成接口投影继承店铺和只读展示信息, 禁止前端提交目标店铺。【主: Query/API 契约| 依赖: 2.65】
@@ -139,7 +129,7 @@
- [ ] 3.4 映射原 UR40-04: 历史套餐投影按真实使用资格提供续费入口。【主: Query| 依赖: 3.1】
- [ ] 3.5 映射原 UR40-05: C 端订单创建重新校验续费资格、资产所有权和套餐状态。【主:复杂写 Domain/Application| 依赖: 3.1】
- [ ] 3.6 映射原 UR40-06: 后台代购、自动购包等非个人入口统一禁止下架套餐绕过。【主: 复杂写 Policy 接入| 不迁移: 入口其他规则| 依赖: 3.1】
- [ ] 3.7 映射原 UR40-08: 交付跨入口 API/前端契约、OpenAPI/文档生成器与构建部署检查;原 Ticket 07 Audit Event 迁入 6.5,不在本轮实现 。【主: API/发布契约| 依赖: 3.2-3.6】
- [ ] 3.7 映射原 UR40-08: 交付跨入口 API/前端契约、OpenAPI/文档生成器与构建部署检查;原 Ticket 07 Audit Event 移出本 Change, 不阻塞上线 。【主: API/发布契约| 依赖: 3.2-3.6】
### B2-02~ B2-05 卡状态与钱包下游
@@ -179,7 +169,7 @@
- [ ] 3.35 映射原 UR49-05 为测试环境装配: 完成迁移、Handler、Worker、路由、对象存储用途与构建部署检查; 真实链路/自动化门禁转 6.1/6.3。【主: Infrastructure| 依赖: 3.31-3.34】
- [ ] 3.36 第二批批次检查:执行 `gofmt` 、必要代码生成、`go build ./...` , 核对迁移、Handler 文档生成器、Worker/Outbox/Integration Log、配置和跨批依赖; 不新增/运行测试。
## 4. 第三批:复杂业务 与组合 Query
## 4. 第三批:审批业务先行、渠道后置 与组合 Query
### B3-01 UR34 代理充值
@@ -187,32 +177,49 @@
- [ ] 4.2 交付代理当前店铺可用支付方式与在线充值创建: 100 元~ 100 万元、新 request_id 新业务单/支付单、微信 Native/支付宝 PreCreate、结果未知恢复和 qr_content 原样返回。【主:复杂写 + Payment Adapter| 不迁移: 二维码图片/多通道池| 依赖: 2.29、2.57】
- [ ] 4.3 交付支付回调与受控查单共用确认用例:渠道/配置/金额/交易号/业务关联校验,迟到成功优先,支付事实与入账 Outbox 同事务。【主: 复杂写| 辅: Integration Log/Outbox| 不迁移: 前端轮询触发查单| 依赖: 4.2】
- [ ] 4.4 交付钱包入账 Worker: 唯一流水、版本、处理租约、状态恢复和目标主账号/真实提交人到账通知,支付已成功时失败不得回滚收款事实。【主:复杂写 Wallet Application| 不迁移: 人工重复入账| 依赖: 2.29、2.8、4.3】
- [ ] 4.5 交付平台/超管线下代充值创建、1~ 5 付款凭证、固定金额与企微实例;审批通过入账、驳回终结、 撤销分流,旧 offline-pay/reject 停机下线。【主:复杂写| 辅: WeCom/Worker| 不迁移: 本地审批/操作密码| 依赖: 2.22 、4.1、4.4】
- [ ] 4.6 交付充值列表/详情/payment-status、代理店铺层级权限、前端二维码/轮询/审批/处理状态、OpenAPI/文档生成器和测试环境构建部署检查; 真实支付/企微 验收转 6.2/6.3。【主: Query/API 契约| 依赖: 4.2- 4.5】
- [ ] 4.5 交付平台/超管线下代充值业务核心:后端计算固定金额、保存 1~ 5 付款凭证原件和请求快照,通过 Approval Port 创建通用审批实例;消费标准决策完成通过入账、拒绝/删除/撤销终结和通过后 撤销分流,旧 offline-pay/reject 仅在渠道装配可用后 停机下线。【主:复杂写 Application/Domain| 辅: Approval Port/Worker| 边界: 线下代充规则和终态处理| 不迁移: 企微 SDK/DTO/`sp_no` /状态码, 不建本地审批流引擎或操作密码| 依赖: 2.9~ 2.12、2.29 、4.1、4.4】
- [ ] 4.6 交付充值列表/详情/payment-status、代理店铺层级权限、前端二维码/轮询/标准 审批/处理状态、OpenAPI/文档生成器和业务核心构建检查;渠道专属字段仅作可选扩展,线下代充入口在 4.W14 前保持关闭, 真实支付/审批 验收转 6.2/6.3。【主: Query/API 契约| 依赖: 4.2~ 4.5】
### B3-02 UR35 退款
- [ ] 4.7 交付退款固定申请金额、业务凭证、真实提交人、唯一企微实例与 三套状态迁移;创建前校验无其他活跃退款。【主:复杂写|不迁移:本地审批/ 旧原单重提| 依赖: 2.2 2】
- [ ] 4.8 交付退款创建纵向切片:后端读取实收金额、保存 1~ 5 本地凭证和审批快照、写 提交 Outbox; 删除 approve/reject/return/resubmit/manual-complete 路由。【主:复杂写 Application| 不迁移: 渠道自动退款| 依赖: 4.7】
- [ ] 4.9 交付企微首次 终态消费与退款处理租约:拒绝/撤销终结;通过后按支付类型处理资金, 代理主钱包只按原扣款流水回溯,非代理资金由人工退款事实确认。【主:复杂写|不迁移: 资产钱包自动回充| 依赖: 2.30、4.8】
- [ ] 4.7 交付退款固定申请金额、业务凭证、真实提交人、唯一通用审批实例与申请/审批/处理 三套状态迁移;创建前校验无其他活跃退款。【主:复杂写|辅: Approval Port| 边界: 退款申请和审批关联| 不迁移: 企微 SDK/DTO/`sp_no` /状态码,不建本地审批流引擎或 旧原单重提| 依赖: 2.9~ 2.1 2】
- [ ] 4.8 交付退款创建纵向切片:后端读取实收金额、保存 1~ 5 本地权威 凭证和申请快照,通过 Approval Port 原子写通用实例与 提交 Outbox; 删除 approve/reject/return/resubmit/manual-complete 路由。【主:复杂写 Application| 不迁移: 渠道自动退款、外部审批附件权威化 | 依赖: 4.7】
- [ ] 4.9 交付标准审批 终态消费与退款处理租约:`rejected/cancelled/deleted` 终结;`approved` 后按支付类型处理资金;`revoked_after_approved` 按资金事实分流。 代理主钱包只按原扣款流水回溯,非代理资金由人工退款事实确认。【主:复杂写|边界:退款决策和资金处理|不迁移:渠道状态翻译、 资产钱包自动回充| 依赖: 2.11、2. 30、4.8】
- [ ] 4.10 交付整单终结的订单、已发放/未发放佣金、全部有效套餐、下一套餐激活或停止资产的持久化步骤幂等与失败恢复。【主:复杂写 Domain/Application| 不迁移: 未触碰订单/佣金模块| 依赖: 4.9、2.40】
- [ ] 4.11 交付退款列表/详情、店铺层级权限、代理最小审批投影、处理失败摘要和前端只读状态;更新 OpenAPI/文档生成器。【主: Query/API 契约| 依赖: 4.7-4.10】
- [ ] 4.12 完成退款/企微/Worker/迁移测试环境装配和构建部署检查;真实企微、 资金/佣金/套餐人工验收及自动化转 6.1/6.2/6.3。【主: Infrastructure| 依赖: 4.8- 4.11】
- [ ] 4.12 完成退款业务核心、标准决策消费者、Worker/迁移和 API 的构建检查;未装配有效 Adapter 时新提交失败关闭且不写业务单/实例/Outbox, 测试环境开放退款入口另依赖 4.W14; 资金/佣金/套餐人工验收及自动化转 6.1/6.2/6.3。【主: Infrastructure/Application 收口 | 依赖: 4.8~ 4.11】
### B3-03~ B3-06 下游业务
### B3-03 UR37 WeCom Adapter 与首个渠道装配
- [ ] 4.W1 映射原 UR37-01: 在 UR34/UR35 业务核心已可独立构建后, 交付企微连接状态、Token 缓存/锁、安全 Viper 配置与 WeCom Adapter; 所有外部尝试接入 Integration Log。【主: Infrastructure Adapter| 不迁移: Approval Port 与退款/充值规则| 依赖: 1.1、2.9、4.6、4.12】
- [ ] 4.W2 映射原 UR37-02: 交付平台/超管五分钟扫码绑定会话、本人查询/解绑与超管强制解绑;代理不绑定。【主:复杂写 Application/Domain| 辅: Query| 边界: WeCom userid 绑定| 不迁移: 组织模型、通用审批实例| 依赖: 4.W1】
- [ ] 4.W3 映射原 UR37-03: 交付稳定场景、不可变企微模板版本、控件映射校验与首次发布。【主: 复杂写| 辅: Adapter/Query| 边界: WeCom 模板配置事实|不迁移:本地审批节点/审批人/会签或签| 依赖: 4.W1】
- [ ] 4.W4 映射原 UR37-04: 实现 WeCom Adapter 对 Approval Port 的可用性检查和发起身份解析,将企微身份作为渠道快照,不泄漏到业务 Domain/Application。【主: Infrastructure Adapter| 边界: WeCom 发起前置| 不迁移: 业务单创建事务| 依赖: 2.12、4.W2、4.W3】
- [ ] 4.W5 映射原 UR37-05: 保持本地业务附件为权威原件, 交付企微副本上传、异步 `applyevent` 、`external_ref=sp_no` 绑定、结果未知和 Integration Log。【主: Application/Infrastructure Adapter| 边界: 一次 WeCom 技术提交| 不迁移: 业务附件权限与内容| 依赖: 2.12、4.W4】
- [ ] 4.W6 映射原 UR37-06: 交付场景暂停、提交租约、企微模板换版/指纹验证、原子恢复与失效告警; 暂停只阻断新提交, 不中断存量实例。【主: 复杂写| 辅: Scheduled Job| 不迁移: 业务终态| 依赖: 4.W3、4.W5】
- [ ] 4.W7 映射原 UR37-07: 交付企微加密回调验签解密、权威 `getapprovaldetail` 同步和 Translator, 将企微状态翻译为 2.9 标准决策后调用 2.11,不直接执行退款/充值规则。【主: Infrastructure Adapter| 辅: Application| 边界: WeCom 入站防腐层| 不迁移: 终态业务处理| 依赖: 2.11、4.W5】
- [ ] 4.W8 映射原 UR37-08: 交付两分钟轮询补偿, 与回调共用 4.W7 Translator 和 2.11 同步用例, 按至少一次语义恢复。【主: Application/Infrastructure| 辅: Worker| 不迁移: 退款/充值 Worker| 依赖: 4.W7】
- [ ] 4.W9 映射原 UR37-09: 在 2.10 通用 Query 之上交付企微节点、审批人、内部意见和附件的受权扩展投影; 代理仅获取通用最小摘要。【主: Query| 边界: WeCom 详情扩展| 不迁移: 业务列表、实时调企微| 依赖: 2.10、4.W2、4.W3、4.W7】
- [ ] 4.W10 映射原 UR37-10: 交付提交结果未知的“绑定已有 `sp_no` ”和“确认未创建后重发”受控恢复,保留每次技术尝试与 Integration Log。【主: 复杂写| 辅: Adapter/Query| 不迁移: 新业务申请和通用决策| 依赖: 4.W5、4.W7、4.W9】
- [ ] 4.W11 映射原 UR37-11: 消费 2.11 首次标准终态事件,向真实业务提交人发送审批结果通知,按实例/接收人防重。【主: Application| 辅: Notification Adapter| 不迁移: 业务到账通知| 依赖: 2.8、2.11】
- [ ] 4.W12 映射原 UR37-12: 交付存量审批迁移契约、`provider=legacy` 只读投影、平台绑定/代理固定账号前置检查与异常清单, 不伪造历史企微实例。【主: Application/Infrastructure| 辅: Query| 不迁移: 历史业务规则| 依赖: 2.9、4.W2~ 4.W7】
- [ ] 4.W13 映射原 UR37-13: 冻结企微配置页、个人绑定、审批运行/详情/恢复与业务摘要的跨仓契约,明确通用字段和 WeCom 扩展字段,补 OpenAPI、文档生成器和中文文档。【主: API/Query 契约| 不迁移: 前端技术栈与本地流程编排| 依赖: 4.W2、4.W3、4.W9、4.W10】
- [ ] 4.W14 映射原 UR37-14 的测试环境部分:在 4.6/4.12 业务核心已完成后,装配 WeCom Adapter、模板/回调/轮询 Worker、路由和组合根, 使线下代充/退款可用且无效 Adapter 仍失败关闭;执行本批构建/部署检查,真实企微门禁整体转 6.2。【主: Infrastructure 组合根| 边界: 首个渠道接入和入口开放| 不迁移: 业务规则或其他审批渠道| 依赖: 4.6、4.12、4.W1~ 4.W13】
### B3-04~ B3-07 下游业务
- [ ] 4.13 `JULY-UR57` 在换货创建完整用例的任何副作用前,批量判定活跃退款(状态 1/历史 4, 或状态 2 且处理未成功)并以统一禁止错误拒绝;不新增预检查 API、不改退款/换货状态机。【主: 复杂写; 辅: Query| 依赖: 4.7】
- [ ] 4.14 `JULY-UR57` 更新换货 API/前端错误契约、中文文档和构建部署检查;拒绝路径 Audit Event 延期 6.5 。【主: API 契约| 依赖: 4.13】
- [ ] 4.14 `JULY-UR57` 更新换货 API/前端错误契约、中文文档和构建部署检查;拒绝路径 Audit Event 不属于本 Change 且不阻塞上线 。【主: API 契约| 依赖: 4.13】
- [ ] 4.15 `JULY-UR33` 交付复用 UR46 的 0~ 15 天临期 Query、3 天内置顶、列表/Dashboard/C 端/续费投影; 只接受可准确推算事实。【主: Query| 不迁移: 到期算法第二套实现| 依赖: 1.5、3.7、2.63】
- [ ] 4.16 `JULY-UR33` 交付每日扫描、15/7/3 最近节点、防重记录与 Outbox/通知消费; 漏跑不补多条, 站内通知失败不修改套餐事实。【主: Application/Infrastructure| 不迁移: 短信/企微提醒| 依赖: 2.8、4.15】
- [ ] 4.17 `JULY-UR33` 接入 `expiring_asset` 导出输入契约、前端临期页/Dashboard/高亮/续费与 OpenAPI/文档生成器;实际 DataSource 实现在 4.23。【主: Query/API 契约| 依赖: 4.15】
- [ ] 4.18 `JULY-UR33` 完成迁移、定时任务、Worker/模板、路由与测试环境构建部署检查;时间边界/通知真实验证转 6.1/6.6。【主: Infrastructure| 依赖: 4.15-4.17】
- [ ] 4.19 `JULY-UR44` 为退款、充值、换货新增提交人不可变快照和历史回填(含软删除账号,缺失显示未知),新建时同事务冻结。【主:简单写/迁移| 不迁移: 业务状态机| 依赖: 4.1、4.7】
- [ ] 4.20 `JULY-UR44` 扩展三类列表,以本页实例批量投影 approval_source/status/current approver/processing; 代理当前审批人固定为空, 换货固定 none。【主: Query| 不迁移: 实时调用企微| 依赖: 2.17 、4.19】
- [ ] 4.20 `JULY-UR44` 扩展三类列表,以本页通用审批 实例批量投影 approval_source/provider/ status/current_ approver/processing; 业务列表基础字段只依赖 2.10, WeCom 节点摘要是 4.W9 的可选扩展, 代理当前审批人固定为空,换货固定 none。【主: Query| 不迁移: 实时调用企微或将业务列表绑定单一渠道 | 依赖: 2.10、4.W9 、4.19】
- [ ] 4.21 `JULY-UR44` 交付前端列/状态/权限、OpenAPI/文档生成器和构建部署检查。【主: API 契约| 依赖: 4.20】
- [ ] 4.22 `JULY-UR42` 交付代码字段 Registry、角色 Scene 字段授权全量替换、超管全目录、普通账号并集交集和零字段拒绝。【主:简单写 Application| 辅: Query| 不迁移: 菜单/行权限| 依赖: 1.1】
- [ ] 4.23 `JULY-UR42` 创建导出任务时快照字段/表头/过滤/数据范围/脱敏级别,扩展各 Scene DataSource, Count/Fetch 条件一致且无 N+1。【主: Query/DataSource| 辅: Application| 不迁移: 第二套导出框架| 依赖: 4.6、4.11、4.17、4.20、1.5】
- [ ] 4.24 `JULY-UR42` 交付稳定不可枚举 attachment_ref、前端登录恢复落地页和按当前业务权限生成短期下载 URL; 不得输出对象 Key/media_id/预签名 URL。【主: Query/Infrastructure| 不迁移: 公开 Bucket| 依赖: 2.13 、4.23】
- [ ] 4.24 `JULY-UR42` 交付稳定不可枚举 attachment_ref、前端登录恢复落地页和按当前业务权限生成短期下载 URL; 不得输出对象 Key/media_id/预签名 URL,导出只使用本地权威附件,不依赖企微副本 。【主: Query/Infrastructure| 不迁移: 公开 Bucket 或渠道附件权威化| 依赖: 4.5、4.8 、4.23】
- [ ] 4.25 `JULY-UR42` 交付角色字段配置、导出入口/任务/失败/附件页面契约,更新 OpenAPI/文档生成器和中文文档。【主: API/前端契约| 依赖: 4.22-4.24】
- [ ] 4.26 `JULY-UR42` 完成权限表/附件引用迁移、Export Worker/对象存储/配置装配和测试环境构建部署检查;文件内容/性能/权限自动化转 6.1/6.3。【主: Infrastructure| 依赖: 4.22-4.25】
- [ ] 4.27 第三批批次检查:执行 `gofmt` 、必要代码生成、`go build ./...` ,核对资金/审批/支付/导出迁移、Handler 文档生成器、Worker/Outbox/Integration Log、旧路由下线与配置; 不新增/运行测试。
@@ -226,18 +233,18 @@
- [ ] 5.5 联合收口 UR98/UR45/UR86: 确认换货新资产继承店铺、旧资产保留归属、新旧搜索和双向链路契约在同一前后端版本一致。
- [ ] 5.6 冻结测试环境版本、迁移清单、API/Worker/Relay/前端版本、配置样例和回滚负责人; 确认需求16无代码/迁移/入口。
- [ ] 5.7 进入维护模式,停止相关写入与旧 Worker; 执行增量迁移和前置数据清单, 失败时保持维护且不开放访问。
- [ ] 5.8 发布 API、Relay/Worker、匹配前端版本, 装配企微、支付、Gateway、运营商、对象存储与 Redis/Asynq 测试环境配置。
- [ ] 5.8 发布 API、Relay/Worker、匹配前端版本, 装配企微、支付、Gateway、运营商、对象存储与 Redis/Asynq 测试环境配置;线下代充/退款入口仅在 4.W14 完成且 WeCom Adapter/场景/身份配置有效后开放 。
- [ ] 5.9 执行最终允许门禁:`gofmt` 检查、必要代码生成、`go build ./...` 、迁移版本、路由/OpenAPI、Worker 注册、配置就绪和前后端版本一致性检查;不运行 `go test` 或真实依赖自动验收。
- [ ] 5.10 恢复 Worker 与测试环境访问,记录每条线实际状态;只能标记 “测试环境已部署/待人工验收”,不得标记生产验收完成。
- [ ] 5.10 恢复 Worker 与测试环境访问,记录每条线实际状态;未完成 4.W14 时必须继续关闭线下代充/退款新提交入口,且只能标记“后端代码完成”或 “测试环境已部署/待人工验收”,不得标记生产验收完成。
- [ ] 5.11 发布后若产生审批、支付、资金、Outbox、Integration Log、通知或部分成功任务事实, 回滚仅暂停异常入口并前向修复, 不清表、不恢复旧 Writer、不要求重复付款。
## 6. 延期验证与生产发布门禁(本次不得预勾选)
## 6. 延期验证与生产发布门禁
- [ ] 6.1 恢复并完成所有单元、集成、HTTP、业务流程、并发、迁移、权限、性能与回归自动化; 补齐本轮未新增的 `_test.go` ,运行完整 `go test ./...` 并保留最终代码证据。
- [ ] 6.2 完成真实企业微信模板、平台本人绑定、代理固定成员、附件、提交、加密回调、轮询、同意/拒绝/撤销/删除/结果未知恢复,以及退款和线下充值终态验收。
- [ ] 6.3 完成真实 PostgreSQL、Redis/Asynq、对象存储、微信 Native、支付宝 PreCreate/TradeQuery/回调、支付成功未入账恢复与导出文件验收。
- [ ] 6.4 完成真实 Gateway 限速账号/运营商档位、设备当前卡、失败/结果未知,以及移动/联通/电信运营商回调和 19/20 位 ICCID 验收。
- [ ] 6.5 恢复 全局 Audit Event 治理:重新评审 `.scratch/tech-global-audit/` 22 张票,完成 Writer、业务覆盖、历史投影、审计中心、系统配置/Outbox 正式 Adapter 、敏感读取/导出/保留与 一次性发布门禁;不得把测试环境冻结改为永久 N/A 。
- [x ] 6.5 明确 全局 Audit Event 治理移出本 Change: 不实现 Writer、业务覆盖、历史投影、审计中心 、敏感读取/导出/保留或 一次性切换门禁,不阻塞本次实际上线;未来如需建设另开独立 Change 。
- [ ] 6.6 完成后台、代理端、C 端全部页面与真实人工验收矩阵,包括异步部分成功、权限空态、通知、临期、换货历史抽样、余额预警和状态展示。
- [ ] 6.7 完成生产存量数据核对、进行中退款/充值迁移、企微模板与账号准备、支付/Gateway配置、停机发布与回滚演练、性能/安全/Access Log 脱敏门禁。
- [ ] 6.8 只有 6.1~ 6.7 全部具备真实证据后,才可把生产发布和七月迭代验收标记完成;测试环境豁免不得继承到生产。