# PJ2026-010505 账单后台

## 修改历史

| 版本 | 对应 commit id | 更新日期 | 变更说明 |
| --- | --- | --- | --- |

当前正文仍在规格治理草稿中；未定稿前不新增版本号，不为单次编辑追加 `待提交` 版本。

## 正文

## PJ2026-010505 账单后台需求规格

## 1. 文档控制

| 字段 | 内容 |
| --- | --- |
| 编号 | PJ2026-010505 |
| 短名 | 账单后台 |
| 层级 | L2 课题 |
| 状态 | 已生效 |
| 需求规格模板 | [ISO/IEC/IEEE 29148 需求规格模板](../../templates/iso-iec-ieee-29148-requirements-spec-template.md) |
| 上级规格 | [PJ2026-0105 用户管理](PJ2026-0105-user-management.md) |
| 规格治理索引 | [规格治理](spec-governance.md) |

本文采用 ISO/IEC/IEEE 29148 需求规格模板的项目裁剪版：正文只保留账单后台的稳定使命、范围、术语、系统边界、内部分工和原子需求。

## 2. 目的和范围

### 2.1 目的

账单后台负责把用户管理的余额、usage、ledger、plan、entitlement、admin 调账、兑换和支付/订阅状态以用户和管理员可操作的方式暴露出来，使 HWLAB 能从内测账号运营演进到可审计的多用户云服务运营。

D601 v0.3 当前已具备用户 billing summary、admin usage/ledger filter、CSV export、manual credit audit、redeem code 管理、用户兑换和 payment/subscription `unconfigured` 占位；本课题在该基线上定义真实支付 provider、订阅和增长活动接入前后的边界。

### 2.2 范围内

- 用户 billing summary、余额、plan、entitlement、reservation、usage 和 ledger 摘要。
- admin usage/ledger 查询、过滤、分页、导出和运营对账。
- admin credit adjust、operator、reason、idempotency、before/after 和审计显示。
- redeem code 创建、list、disable、redemption 查询和兑换入账。
- subscription/payment provider-agnostic 占位、真实 provider 接入边界、订单和回调状态的账本落点。

### 2.3 范围外

- 余额、reservation、usage 和 ledger 真相归 [PJ2026-010504 计量账本](PJ2026-010504-metering-ledger.md)。
- plan、entitlement 和 quota 解释归 [PJ2026-010503 权限配额](PJ2026-010503-access-quota.md)。
- 页面布局、筛选控件和下载交互归 [客户端](PJ2026-0104-client.md)。
- 真实 payment provider 的 Secret 同步、回调公开入口和运行支撑归 [平台运维](PJ2026-0106-platform-ops.md)。

## 3. 术语表

| 术语 | 定义 |
| --- | --- |
| billing summary | 用户可见的余额、plan、quota、usage、ledger 和 reservation 摘要。 |
| admin usage | 管理员按用户、服务、资源、API key、时间和状态查询的 usage 视图。 |
| admin ledger | 管理员按用户、来源、动作、状态和幂等 key 查询的 credit ledger 视图。 |
| redeem code | 管理员生成、用户兑换、可限制次数和状态的充值凭证。 |
| payment placeholder | 没有真实 provider 配置时明确返回的未配置支付状态。 |
| operator audit | 管理员写操作的操作人、原因、幂等、前后余额和时间摘要。 |

## 4. 系统边界和接口

本规格把账单后台作为用户管理的运营视图和操作层看待；本章只描述输入、输出和责任边界。

| 边界项 | 内容 |
| --- | --- |
| 外部使用者 | 普通用户、平台管理员、运营人员、Cloud Web、CLI、HTTP API。 |
| 外部输入 | billing summary 查询、admin usage/ledger filter、credit adjust 请求、redeem code 管理、redeem 请求、payment/subscription 状态请求。 |
| 受控资源 | billing summary、admin usage view、admin ledger view、CSV export、redeem code、redemption、manual adjust 和 payment/subscription 状态摘要。 |
| 外部输出 | 用户账单摘要、运营过滤结果、导出文件、调账结果、兑换结果、redemption/ledger 关联和 provider 未配置状态。 |
| 用户接口 | Cloud Web billing/admin billing 页面、HTTP API、`hwlab-cli` 管理命令。 |
| 系统边界 | 账单后台负责运营查询和受控写操作入口；不创建第二账本，不直连内部数据库替代 user-billing authority。 |

## 5. 内部分工与规格索引

| 编号 | 模块或课题 | 规格文档 | 主责边界 | 上游依赖 | 下游支撑 |
| --- | --- | --- | --- | --- | --- |
| PJ2026-01050501 | 用户账单 | 本规格 6.1 | 用户 billing summary 和 quota/ledger 摘要 | 计量账本、权限配额 | 客户端、CLI |
| PJ2026-01050502 | 管理查询 | 本规格 6.2 | admin usage/ledger filter/export | 计量账本、账号权限 | 运营对账 |
| PJ2026-01050503 | 调账兑换 | 本规格 6.3 | manual adjust、redeem code 和 redemption | 计量账本、admin 权限 | 用户充值、运营支持 |
| PJ2026-01050504 | 支付订阅 | 本规格 6.4 | payment/subscription placeholder 和真实 provider 边界 | 平台配置、计量账本 | 后续商业化 |

## 6. 原子需求

### 6.1 USER-BILL-REQ-001 用户账单摘要

| 编号 | 短名 | 主责模块 | 关联模块 |
| --- | --- | --- | --- |
| USER-BILL-REQ-001 | 用户账单 | PJ2026-01050501 用户账单 | [计量账本](PJ2026-010504-metering-ledger.md)、[权限配额](PJ2026-010503-access-quota.md)、[客户端](PJ2026-0104-client.md) |

账单后台应提供用户账单摘要，使用户能查看余额、保留额度、plan、entitlement、quota、usage、ledger 和 reservation 状态。

用户账单摘要只聚合用户管理事实，不在客户端或 Cloud API 中创建平行余额、quota 或 ledger。

账单后台是 canonical principal 之后的业务消费面，不是 Web 登录态的来源。浏览器身份是否成立由账号会话和 `/auth/session` 证明；账单后台只能基于后端传入的 principal 查询或返回 billing capability、summary 和 blocker。`billing=unlinked`、`billing=unavailable`、provider 未配置或 user-billing 暂时不可达时，应返回结构化业务状态，不得要求前端补 user-billing token、API key 或 cookie prefix 来重新定义登录。

### 6.2 USER-BILL-REQ-002 管理查询与导出

| 编号 | 短名 | 主责模块 | 关联模块 |
| --- | --- | --- | --- |
| USER-BILL-REQ-002 | 管理查询 | PJ2026-01050502 管理查询 | [计量账本](PJ2026-010504-metering-ledger.md)、[租户隔离](PJ2026-010506-tenant-isolation.md) |

账单后台应提供 admin usage 和 ledger 的过滤、分页和导出能力，使管理员可以按时间、用户、服务、资源、API key、状态、来源和幂等关系做运营对账。

导出内容必须与当前 filter 一致，并排除 session token、API key secret、password hash、DB DSN 和 provider token 等敏感值。

### 6.3 USER-BILL-REQ-003 调账与兑换

| 编号 | 短名 | 主责模块 | 关联模块 |
| --- | --- | --- | --- |
| USER-BILL-REQ-003 | 调账兑换 | PJ2026-01050503 调账兑换 | [计量账本](PJ2026-010504-metering-ledger.md)、[APIKey](PJ2026-010502-api-key.md) |

账单后台应提供 admin credit adjust、redeem code 管理和用户 redeem 能力，使人工充值、运营补偿和兑换码入账可以进入同一 ledger。

调账和兑换必须保留 operator、reason、idempotency、before/after、redemption 或 code 摘要，并防止一次性 code 或重复幂等 key 产生重复入账。

### 6.4 USER-BILL-REQ-004 支付与订阅边界

| 编号 | 短名 | 主责模块 | 关联模块 |
| --- | --- | --- | --- |
| USER-BILL-REQ-004 | 支付订阅 | PJ2026-01050504 支付订阅 | [平台运维](PJ2026-0106-platform-ops.md)、[计量账本](PJ2026-010504-metering-ledger.md) |

账单后台应在没有真实 provider 配置时明确返回 payment/subscription `unconfigured` 状态，并在 provider 配置齐备后承接订单、回调、订阅状态和 ledger 入账。

真实 payment provider 只能通过受控 YAML/sourceRef/Secret sync 和端到端回调验证接入。不得硬编码 provider、手工写 Secret、临时 SQL 入账或在 Cloud API 中维护平行 payment ledger。
