# `tb_system_config` 调研结论

## 结论

`tb_system_config` **确实是已确认的七月迭代公共基础需求**，不是 UR#48 临时假定或需要重新发明的能力；但它在当前工作区仍是**已规划、已拆票、未实现**状态。

UR#48 应依赖公共基础的第 07、08 号票，不应复制系统配置表、注册表、缓存、超管权限、通用列表/更新 API 或审计壳层。UR#48 自己负责注册两个支付 Key、其值域与钱包不可移除规则，以及资产展示、下单、支付、充值等支付业务校验。

## 已确认的七月迭代设计

- 标准评审稿将系统配置列为“跨需求基础设施”，目标是把支付方式等受控配置从代码迁移到数据库；数据模型和首批两个支付 Key 均已明确：[7月迭代技术方案-标准评审稿.md:162](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/7月迭代技术方案-标准评审稿.md:162)、[同文件:170](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/7月迭代技术方案-标准评审稿.md:170)、[同文件:184](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/7月迭代技术方案-标准评审稿.md:184)。
- 该稿冻结了更新后删缓存、默认缓存五分钟、未知 Key 不可写、异常回退安全默认值，以及“受控控件而非 JSON 文本框”的规则：[同文件:201](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/7月迭代技术方案-标准评审稿.md:201)、[同文件:209](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/7月迭代技术方案-标准评审稿.md:209)。管理接口也已约定为 `GET /api/admin/system/config?module=` 和 `PUT /api/admin/system/config/{config_key}`：[同文件:215](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/7月迭代技术方案-标准评审稿.md:215)。
- 需求 09 明确卡/设备支付方式读取系统配置、钱包恒定允许、C 端仅展示接口返回集合、订单创建固化方式且支付时再次校验：[同文件:761](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/7月迭代技术方案-标准评审稿.md:761)。
- 独立系统配置方案提供了 `tb_system_config` DDL、两个 `c2b.payment` 初始化值和唯一 Key 约束：[系统配置.md:35](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/基础规范/系统配置.md:35)、[同文件:54](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/基础规范/系统配置.md:54)。它还定义了 Model、Store、五分钟 Redis 读取辅助能力和管理 API 形态：[同文件:65](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/基础规范/系统配置.md:65)、[同文件:90](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/基础规范/系统配置.md:90)、[同文件:107](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/基础规范/系统配置.md:107)、[同文件:138](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/基础规范/系统配置.md:138)。
- 原始需求 09 也显式声明依赖系统配置，并规定 C 端消费 `allowed_payment_methods`、后台用钱包不可取消的复选框：[需求09-C端支付限制配置化.md:1](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/原需求/需求09-C端支付限制配置化.md:1)、[同文件:116](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/原需求/需求09-C端支付限制配置化.md:116)、[同文件:133](/data/zoujin/xj02/junhong_cmp_fiber/docs/7月迭代/独立方案/原需求/需求09-C端支付限制配置化.md:133)。

## 已有公共基础 PRD 与票据

公共基础 PRD 已将“受控系统配置壳层”纳入交付范围，并明确当前 `tb_system_config` 尚未落地：[tech-public-foundation/PRD.md:7](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:7)、[同文件:25](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:25)。

- 公共基础是 `tb_system_config` 和其公共索引、约束、必要初始化数据的唯一迁移所有者：[tech-public-foundation/PRD.md:84](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:84)。
- 公共壳层的责任包括受控注册表、超级管理员查询/更新、GORM 事务、Audit 接缝、五分钟 Redis 缓存与安全回退：[同文件:154](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:154)。其中明确划分：UR#48 负责具体支付 Key、支付值域和启停校验；公共基础只负责存储、注册、权限、缓存、API 和审计壳层：[同文件:165](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:165)。
- 当前仓库“没有公共 Outbox 和受控系统配置实现”的状态被 PRD 再次明确记录：[同文件:259](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:259)。
- 下游依赖表将 UR#48 明确列为受 `tb_system_config`、受控 Key 注册、缓存、权限、API 和审计壳层阻塞；并禁止下游复制临时配置中心：[同文件:267](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:267)、[同文件:283](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:283)、[同文件:285](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/PRD.md:285)。

对应票据已存在、均为 `ready-for-agent`，但尚未勾选完成：

1. **07 — 交付受控系统配置注册与查询闭环**：被 01 号公共迁移门禁阻塞；只交付系统配置表、注册、缓存读取和超级管理员列表 API，明确不注册支付具体 Key。[07-controlled-system-config-read.md:1](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/issues/07-controlled-system-config-read.md:1)、[同文件:5](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/issues/07-controlled-system-config-read.md:5)、[同文件:11](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/issues/07-controlled-system-config-read.md:11)。
2. **08 — 交付系统配置更新、权限和审计闭环**：被 07 号票阻塞；交付单 Key 更新、授权、校验、事务、缓存失效和审计接缝。[08-controlled-system-config-update.md:1](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/issues/08-controlled-system-config-update.md:1)、[同文件:5](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/issues/08-controlled-system-config-update.md:5)、[同文件:11](/data/zoujin/xj02/junhong_cmp_fiber/.scratch/tech-public-foundation/issues/08-controlled-system-config-update.md:11)。

因此，UR#48 在真实执行顺序上至少依赖：**公共基础 01 → 07 → 08**；UR#48 可在公共契约稳定后并行实现其支付领域部分，但不可先行落一套替代基础设施。

## 当前实现核查

截至当前 `HEAD`，仓库没有 `SystemConfig` 模型、`tb_system_config` 迁移、对应 PostgreSQL Store、通用系统配置 Handler/Route 或 `pkg/sysconfig` 读取包。作为对照，现存 `internal/model/system.go` 只定义 `DevCapabilityConfig` 等旧模型，其表名是 `tb_dev_capability_config`，不是 `tb_system_config`：[internal/model/system.go:9](/data/zoujin/xj02/junhong_cmp_fiber/internal/model/system.go:9)、[同文件:23](/data/zoujin/xj02/junhong_cmp_fiber/internal/model/system.go:23)。

迁移目录中也没有包含 `tb_system_config` 或 `c2b.payment` 的 SQL 文件；清理脚本列出的现有“系统配置表”保留集合同样未包含 `tb_system_config`：[scripts/cleanup/main.go:38](/data/zoujin/xj02/junhong_cmp_fiber/scripts/cleanup/main.go:38)。这与公共 PRD 的“尚未落地”状态一致。

## Git 历史

- 七月迭代标准方案在提交 `d022cc8788999c9e5426063907d6fe3c569bd22c`（2026-07-17，`迭代方案确认`）中确认。
- 公共基础 PRD 与票据在提交 `21702da413979970989a0026ee0e5cbba248e47b`（2026-07-22，`创建相关issues`）中加入；该提交新增第 07、08 号系统配置票据。
- 对所有分支的 Git 历史及当前 Go、迁移、路由和 Store 路径检索，未发现将 `tb_system_config` 实现提交到仓库的证据；命中均为上述规划/票据/文档，或与通用系统配置无关的旧模型。

## 对 UR#48 拆票的影响

UR#48 不应再包含“建立公共系统配置能力”票。其首张业务票应改为“在公共基础 07、08 完成后，注册 `c2b.payment.card_allowed_methods` 和 `c2b.payment.device_allowed_methods`，并交付支付许可读取/安全默认/资产展示契约”；后续再按订单创建、固定方式支付与取消等完整业务纵向切片拆分。
