# LicenseManager 私有化软件授权平台 - 产品需求文档 (RDP)

| 项目 | 内容 |
| --- | --- |
| 文档版本 | **v1.0.1** |
| 文档类型 | 产品需求文档 RDP(Requirements Definition Plan) |
| 状态 | 正式发布(Release) |
| 基础组件 | [LSXPrime/Aegis](https://github.com/LSXPrime/Aegis) v1.4.0(经重命名为 **LicenseManager.Core**) |
| 对标产品 | LicenseSpring v3.258 · Cryptlex 3.83.0 · Reprise RLM 16.0 · Nalpeiron Zentitle2 · Thales Sentinel RMS · 10Duke Enterprise |
| 部署形态 | 私有化 / On-Premise(主);云托管服务(可选) |
| 文档日期 | 2026-07-23 |

---

## 0. 修订历史

| 版本 | 日期 | 修订内容 |
| --- | --- | --- |
| v0.1-draft | 2026-07-23 | 初稿:基于 Aegis 设计的 18 个功能模块(M1–M18) |
| v0.2-draft | 2026-07-23 | 对标 LicenseSpring/Cryptlex/CodeMeter/Zentitle,补 M19–M28 |
| v0.3-draft | 2026-07-23 | 商业化补全 M29–M42(含 Web 应用矩阵与 Web 端通用要求) |
| v0.9-rc | 2026-07-23 | 整合 + 重构文档为 RDP 结构 + 增 LicenseManager.Core 项目要求 |
| **v1.0** | **2026-07-23** | **正式发布:增 M43–M57(对标 RLM 16.0 / Cryptlex 3.83 / LicenseSpring v3.258),补 Named User / Floating Server v2 / Subscription Policy / Entitlement Sets / OIDC SSO / Mobile SDK / Custom Fields / Token Licensing / EULA Use Types 等关键能力;完成完整性审查** |
| **v1.0.1** | **2026-07-23** | **增 M58 支付网关/PSP 集成(82 条目,M59 支付 Webhook 18 条目),M60 整合说明;补充 Stripe/PayPal/Adyen/Alipay/WeChat Pay 等 10+ PSP 适配** |
| v1.0.2 | 2026-08-05 | 新增"4.43 高级模块实现范围界定",将 M43–M57 标记为已实现/部分实现/路线图,界定 OIDC SDK 流、移动端 SDK、独立 Floating Server 为路线图/超出范围 |
| v1.0.3 | 2026-08-05 | 实现补齐:M53.3 Token 计费报表(`GET /token-consumption/report`,按功能聚合,支持许可证/时间过滤)与 M47.6 Feature 基准值 `BaseValues`;同步更新 §4.43 状态表 |
| v1.0.4 | 2026-08-05 | 实现补齐:M45 Lease 策略(冷却期 `LeaseCooldown` + `AllowLeaseExtension`/`AllowLeaseRelease` 控制);复核 M54 签署流与 M55 全量事件目录已落地,同步更新 §4.43 状态表 |
| v1.0.5 | 2026-08-05 | 实现补齐:M48.6 客户账户用户组(`LicenseUserGroup`/`LicenseUserGroupMember` 实体 + `LicenseUserGroupService` + 管理端点 + 测试);同步更新 §4.43 状态表 |
| v1.0.6 | 2026-08-05 | 实现补齐:M57.3 激活证书续期(`RenewActivationCertificateAsync`)+ `LocalLicenseServerAdminController`(generate/validate/renew 端点);同步更新 §4.43 状态表 |
| v1.0.7 | 2026-09-05 | 竞品痛点优化落地:①「验证+激活」合一端点 `POST /v1/customer/licenses/checkout`;②单机多用户节点锁定(`UserLocked`/`MaxUsersPerDevice`/`UserAccount` + `UserLockValidationRule`);③SSO JIT Named User 开通(`SsoProvider.EnableJitProvisioning`);④EntitlementSet Tier 继承/覆盖(`ResolveEffectiveAsync`);⑤Lease 时长/refresh 参数细化(`DefaultLeaseDuration`/`LeaseRefreshInterval`);⑥Floating Server 新增 `GET /v1/leases` 状态端点;⑦新增 Go/Rust SDK(`sdk/go`、`sdk/rust`);同步更新 §4.43 状态表 |
| v1.0.8 | 2026-09 | 按代码实测同步:§3.2 解决方案结构删除未创建的 `LicenseManager.Admin/Portal/Sdk/Sdk.Native`(.NET SDK 位于 `sdk/csharp`,Admin/Portal 为 `web/` 下静态 SPA);§3.3 去除 `LicenseManager.Core.Extensions` 子命名空间提法(实际以 partial class 扩展);M55.1 补 `license.issued`(签发发布事件,目录与发布已一致,实现目录共 46 条);Partner Portal / Sandbox 标注为规划中(后端为空数据存根:GET 返回空、写操作 501 `feature_unavailable`) |
| v1.0.9 | 2026-09 | 按第四轮审查(见审查报告 R4-C)修正文档承诺缺口:M55 事件目录状态改为"部分实现"(46 条目录中 31 条 `(planned)` 无实际发布点,实际发布 15 种),M59 补实现现状注记(22 条目录仅 5 种有发布点);§4.8 M8 Bundle、§4.11 M11 环境检测补"未实现"注记;§4.43 新增"路线图债务披露"小节,显式列出 MVP P0 未实现项(M30.1/M30.3/M30.4、M34.1、M36.14、M39) |
| v1.0.11 | 2026-10-08 | 商业化裁剪:移除/标注资金流相关内容(§4.18/4.19/4.20/4.26/4.37/4.58 各节、M59 支付事件、§7 billing 端点、品牌/数据驻留/报价/订单里程碑等),移交外部销售系统;保留订阅续期(每小时自动扫描 + `POST /v1/admin/subscriptions/renewal/execute`,出站事件 `subscription.renewed` / `subscription.payment_failed`),事件目录收敛为 37 条 |
| v1.0.10 | 2026-09-24 | 离线/吊销能力落地同步:新增 `GET /v1/keys`(签名公钥分发,匿名公开)、`GET /v1/customer/licenses/revocations`、`POST /v1/customer/licenses/{licenseId}/airgap-sync`、`POST /v1/portal/offline/airgap-activate` + `upload-req`;§7 端点表修正 airgap-decode 实际归属(客户命名空间);五 SDK(csharp/go/nodejs/python/rust)补本地 RSA 验签 + 浮动租约 + 上述 airgap 配套方法与各语言测试;§4.12 补实现现状注记 |

---

## 1. 概述

### 1.1 背景
Aegis 1.4.0 是一个 .NET 8 授权库,提供 6 种许可证模型、RSA/AES 签名、在线/离线验证、`FeatureManager` 特性管理与 `Aegis.Server` 浮动/并发后端。本项目以 Aegis 为核心组件,通过**重命名为 `LicenseManager.Core` 并在其上构建完整的授权管理平台**,提供产品/客户/设备/审计/控制台/门户/SDK 等许可管理能力(订单等商业能力已随商业化裁剪移除,资金流移交外部销售系统)。

### 1.2 目标
1. **基础库重命名与增强**:将 Aegis 源码重命名为 `LicenseManager.Core`,提供 NuGet 包与 API 文档。
2. **平台层**:在 `LicenseManager.Core` 之上构建管理控制台、客户门户、管理 API、客户 API。
3. **端到端授权能力**:产品/特性/模板、客户、激活/吊销/转移、设备管理、浮动并发、用量计量、合规、迁移、运营(订单/白标等商业能力已随商业化裁剪移除)。
4. **私有化部署**:支持离线安装、密钥初始化、备份、HA、气隙激活。

### 1.3 范围与非范围
**范围内**:LicenseManager.Core 重构、平台业务功能、控制台/门户、API/SDK、私有化部署、商业化必备能力。
**非范围**:第三方支付网关直连(由外部订单系统驱动)、反盗版法庭取证工具、具体前端技术栈选型。

### 1.4 名词约定
- **LMC** = LicenseManager.Core(原 Aegis 重命名后的库)
- **LM Platform** = LicenseManager 平台层(本项目主体)
- **P0/P1/P2** = 优先级:MVP / V1.0 / V1.x
- **RDP** = 本需求文档

---

## 2. 角色与权限模型

| 角色 | 权限 |
| --- | --- |
| Super Admin | 全部权限,含密钥管理与系统配置 |
| Product Manager | 产品/版本/特性/模板 CRUD |
| Sales / Operations | 客户、订单、激活码发放与转移 |
| Support Agent | 工单处理、客户协助 |
| Auditor | 只读全部数据与审计日志 |
| Customer Admin | 本企业用户、设备、授权管理 |
| Customer User | 查看授权、申请离线激活、提工单 |
| Reseller | 渠道售卖与开通 |
| SDK / API Caller | 经 API Key 激活/验证 |
| CSM | 客户健康度跟踪、续费沟通 |

权限模型:**RBAC + 资源范围**;权限点详见 [§4.13](#413-身份认证与访问控制)。

> 商业化裁剪注(2026-10-08):Sales / Operations、Reseller、CSM 等涉及订单/售卖/催收的职责已移交外部销售系统。

---

## 3. 总体架构

### 3.1 架构分层

```
┌────────────────────────────────────────────────────────┐
│  客户端 SDK          │  管理控制台  │  客户自助门户  │  文档站  │
└────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────┐
│  API 网关 / BFF: 管理 API · 客户 API · 开发者 API        │
├────────────────────────────────────────────────────────┤
│  平台业务层(应用服务)                                       │
│   产品/模板 · 客户/订单 · 授权生命周期 · 设备 · 浮动        │
│   特性门控 · 用量计量 · 审计 · 通知 · 商业化 · 产品运营       │
├────────────────────────────────────────────────────────┤
│  LicenseManager.Core(原 Aegis)                          │
│   LicenseGenerator · LicenseManager · FeatureManager    │
│   IValidationRule · HardwareUtils · LicenseUtils       │
│   Aegis.Server(浮动/并发/心跳)  ·  AegisDbContext         │
├────────────────────────────────────────────────────────┤
│  基础设施: DB · 缓存 · 消息队列 · 对象存储 · KMS/HSM       │
└────────────────────────────────────────────────────────┘
```

> 商业化裁剪注(2026-10-08):平台业务层中订单/商业化相关模块已移除,资金流由外部销售系统承接。

### 3.2 解决方案项目结构

```
LicenseManager/
├── src/
│   ├── LicenseManager.Core/            # ★ 原 Aegis 重命名(详见 §3.3)
│   ├── LicenseManager.Core.Abstractions/  # 接口、DTO、事件契约
│   ├── LicenseManager.Server/          # 浮动/并发后端(原 Aegis.Server 扩展)
│   ├── LicenseManager.Platform/        # 平台业务层(应用服务)
│   ├── LicenseManager.Infrastructure/  # EF Core、Redis(可选)、外部集成
│   ├── LicenseManager.Api/             # ASP.NET Core 统一 API 入口
│   └── LicenseManager.Tools/           # 密钥初始化、迁移、CLI
├── sdk/                                # 客户端 SDK(独立目录,非 src/ 项目)
│   ├── csharp/  ├── nodejs/  ├── python/  ├── go/  └── rust/
├── web/                                # 前端应用(静态 SPA,非独立后端项目)
│   ├── admin/  ├── portal/  ├── partner/  ├── sandbox/  ├── status/  └── ...
├── samples/
│   ├── LicenseManager.Sample.Basic/
│   ├── LicenseManager.Sample.Floating/     # 规划中,未创建
│   └── LicenseManager.Sample.AirGapped/    # 规划中,未创建
├── tests/
│   ├── LicenseManager.Core.Tests/
│   ├── LicenseManager.Platform.Tests/
│   ├── LicenseManager.Infrastructure.Tests/
│   ├── LicenseManager.Server.Tests/
│   ├── LicenseManager.Api.Tests/
│   └── e2e/
├── deploy/                                 # 规划中;当前为根目录 Dockerfile / docker-compose.prod.yml
│   ├── docker/
│   ├── helm/
│   └── offline-installer/
└── docs/
```

> 注:早期规划中的 `LicenseManager.Admin` / `LicenseManager.Portal`(独立 BFF 后端)、`LicenseManager.Sdk` / `LicenseManager.Sdk.Native`(src 下 SDK 项目)**未创建**——Admin/Portal 以 `web/` 静态 SPA 实现、统一调用 `LicenseManager.Api`;SDK 以 `sdk/` 五语言目录提供。以解决方案文件(`.sln`)为准。

### 3.3 LicenseManager.Core 项目要求 ★ 新增

> **目标**:将 Aegis v1.4.0 源码 1:1 重构为 `LicenseManager.Core`,作为整个平台的"内核"。

| 维度 | 要求 |
| --- | --- |
| **源码来源** | 取自 [LSXPrime/Aegis](https://github.com/LSXPrime/Aegis) `master` 分支 v1.4.0 |
| **项目命名** | `LicenseManager.Core`(.NET 8 类库) |
| **命名空间映射** | `Aegis` → `LicenseManager.Core`;`Aegis.Models` → `LicenseManager.Core.Models`;`Aegis.Enums` → `LicenseManager.Core.Enums`;`Aegis.Exceptions` → `LicenseManager.Core.Exceptions`;`Aegis.Server` → `LicenseManager.Server`;`Aegis.Server.Data` → `LicenseManager.Server.Data`;`Aegis.Server.Services` → `LicenseManager.Server.Services` |
| **程序集** | `LicenseManager.Core.dll`;NuGet 包 ID `LicenseManager.Core`(原 `Aegis`) |
| **包元数据** | `Title=LicenseManager.Core`,`Version=1.0.0-lmc.1`,`PackageTags=license,key,licensing,protect,license-manager`;License 沿用 MIT(原 Aegis) |
| **内部类型保留** | `LicenseGenerator` / `LicenseBuilder` / `LicenseManager` / `FeatureManager` / `License` / `Feature` / `IValidationRule` / `IValidationRuleGroup` / `HardwareUtils` / `LicenseUtils` / `AegisDbContext` |
| **公开 API** | 保持向后兼容(原 Aegis 调用方不感知重命名,只需改 using 与包 ID) |
| **测试** | 完整迁移 `tests/Aegis.Tests` → `tests/LicenseManager.Core.Tests`,覆盖所有原 Aegis 测试用例 |
| **文档** | 替换 README 中所有 `Aegis` 引用为 `LicenseManager.Core`;补充"从 Aegis 升级到 LicenseManager.Core"指南 |
| **CI** | 原 `.github/workflows` 迁移并调整项目名 |
| **LICENSE** | 保留 MIT + 在 NOTICE 中注明"本项目基于 LSXPrime/Aegis(https://github.com/LSXPrime/Aegis),Copyright (c) 2024 LSXPrime" |

**LicenseManager.Core 与平台层接口**:
- 平台层不直接 `new` 任何 `LicenseManager.Core` 内部类;
- 平台通过 `LicenseManager.Core.Abstractions` 中的接口(`ILicenseGenerator` / `ILicenseManager` / `IFeatureManager`)注入;
- `LicenseManager.Core` 的扩展(消费型、Bundle、Refresh)以 partial class 实现,不破坏原 API(早期设想的 `LicenseManager.Core.Extensions` 子命名空间未采用)。

**LMC 版本与 Aegis 同步策略**:
- 持续跟踪 Aegis 上游;每 2 周合入一次;
- 合入冲突优先保留 LMC 命名与平台接口契约,必要时反向回馈上游。

### 3.4 Web 应用矩阵

整个平台包含 **4 个核心 Web 应用 + 4 个配套 Web 资产 + 1 类嵌入组件**,统一在 §15 共享前端技术栈与通用要求。

| 类型 | 名称 | 受众 | 后端入口 | 模块 |
| --- | --- | --- | --- | --- |
| 核心 | **管理控制台(Admin Console)** | 内部 Super Admin / PM / Sales / Support / Auditor / CSM | `web/admin`(静态 SPA)→ `LicenseManager.Api` | §4.22 |
| 核心 | **客户自助门户(Customer Portal)** | 外部 Customer Admin / Customer User | `web/portal`(静态 SPA)→ `LicenseManager.Api`(`/v1/portal/*`) | §4.23 |
| 核心 | **营销/产品官网(Marketing & Product Site)** | 潜在客户 / 市场 / 媒体 / 招聘 | 静态 + Headless CMS | §4.36(新增) |
| 核心 | **合作伙伴门户(Partner Portal)** | Reseller / 集成商 / 渠道 | `web/partner`;**规划中**——后端 `/v1/partner/*` 为空数据存根(GET 返回空、写操作 501 `feature_unavailable`),功能未上线 | §4.40(新增) |
| 资产 | **文档站(Documentation Site)** | 所有用户 | 静态站 / Docusaurus | §4.39(新增) |
| 资产 | **状态页(Status Page)** | 所有用户 / 客户运维 | statuspage.io 风格 | §4.38(新增) |
| 资产 | **Demo / Trial 沙箱(Sandbox)** | 潜在客户(自助试用) | `web/sandbox`;**规划中**——后端 `/v1/sandbox/*` 为空数据存根(同 Partner),前端演示数据需显式标注 | §4.37(新增) |
| 资产 | **信任中心(Trust Center)** | 潜在客户 / 合规审计 | 静态站 | M35.3 / M34.9 |
| 嵌入 | **Web 组件 / Widget(Embed)** | 客户在其官网/管理后台中嵌入 | IFrame / Web Component | §15.10 |

---

## 4. 功能需求

> 编号沿用 M1–M36(原 M19–M28 / M29–M36 已合并到 4.x 节);优先级沿用 P0/P1/P2。

### 4.1 产品与授权定义管理

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M1.1 | 产品管理 | 创建/编辑/停用产品(代码、版本规则、业务线);停用后不可发放新授权,但历史授权可继续验证 | P0 |
| M1.2 | 版本管理 | 维护版本号、SDK 最低版本;版本可关联不同特性集 | P1 |
| M1.3 | 特性定义 | 维护特性目录(名称、类型 Bool/Int/Float/String/DateTime/ByteArray、默认值、描述) | P0 |
| M1.4 | 授权模板 | 预设许可证类型、有效期、最大设备数、特性集、`IValidationRule`;发放时实例化 | P0 |
| M1.5 | 自定义验证规则库 | 模板挂载 `IValidationRule` / `IValidationRuleGroup`;支持 UI 编排与版本管理 | P1 |
| M1.6 | 产品策略 | 设备转移上限、并发上限、激活码格式、防回拨容差、VM/容器策略(联动 M4.27) | P1 |
| M1.7 | 模板版本与克隆 | 模板可派生与归档;归档 product code 可被新模板复用 | P1 |

### 4.2 客户与组织管理

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M2.1 | 客户(企业)管理 | 创建/编辑/停用客户;支持外部 CRM ID 关联 | P0 |
| M2.2 | 多级组织层级 | ≥5 级层级(总部→区域→分公司→部门→子部门),每级可独立配额与管理员 | P1 |
| M2.3 | 客户用户 | 客户管理员可创建本企业用户、分配角色、重置密码 | P0 |
| M2.4 | Reseller 渠道 | Reseller 可售卖/开通/转移授权;支持 Deal Registration | P2 |
| M2.5 | 客户配额 | 单客户授权数/设备数上限;超限拒绝发放 | P1 |
| M2.6 | 数据隔离 | 单实例下按组织/品牌/客户隔离数据读/写范围 | P1 |

### 4.3 授权生命周期

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M3.1 | 授权生成 | 基于模板生成 license,经 `LicenseGenerator` 签名;支持单条与批量(原"基于订单生成"部分已随商业化裁剪移除) | P0 |
| M3.2 | 激活码生成 | 人类可读激活码(段数/字符集/校验位/防猜测);支持批量生成与导入 | P0 |
| M3.3 | 在线激活 | 终端提交激活码+硬件 ID,服务端校验后返回签名 license;成功写入设备 | P0 |
| M3.4 | 离线激活(文件) | 终端生成 `.req`,经介质传到门户/管理员,返回 `.resp`,终端离线加载 | P0 |
| M3.5 | 在线验证 | 终端周期调用验证;服务端可下发吊销/过期/特性变更;支持状态 `Not Activated` | P0 |
| M3.6 | 离线验证 | 终端使用本地缓存 license,经签名验证 + 时钟防回拨 | P0 |
| M3.7 | 授权吊销 | 吊销立即生效(在线);离线下次同步/到期失效;记录原因 | P0 |
| M3.8 | 设备迁移 | 客户/管理员迁移授权至新设备,受 M1.6 限额约束,写入审计 | P0 |
| M3.9 | 授权续期 | 订阅型续期后下发新过期时间签名;续期由后台每小时自动扫描执行(亦可经 `POST /v1/admin/subscriptions/renewal/execute` 手动触发;原"外部订单触发"部分已随商业化裁剪移交外部销售系统) | P0 |
| M3.10 | 挂起 / 恢复 | 临时挂起授权,恢复后继续可用;在线验证返回 `Suspended` | P1 |
| M3.11 | 借用(Borrow) | 浮动/并发授权借出到离线环境 N 时长,占席位,到期归还 | P1 |
| M3.12 | 自动续期订阅 | 订阅周期自动延期规则 | P2 |
| ~~M3.13~~ | ~~试用授权~~ | ~~首次激活起计时,不可重置,到期后无法再激活试用;支持一次性手动 sync~~(已裁剪:试用模块随商业化移除) | P0 |
| M3.14 | 永久授权 | Perpetual 许可证 | P0 |
| M3.15 | 过期宽限期 | 到期后 N 小时(可配)仍可运行;用于时钟漂移与宽限场景 | P1 |
| M3.16 | 状态枚举 | 至少包含 `Not Activated` / `Active` / `Inactive` / `Disabled` / `Suspended` / `Expired` | P0 |

### 4.4 设备与硬件绑定

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M4.1 | 硬件指纹 | `HardwareUtils.GetHardwareId()` 跨重启稳定 | P0 |
| M4.2 | 设备注册 | 激活时自动注册(hwId、主机名、OS、IP、SDK 版本、首/末见) | P0 |
| M4.3 | 设备授权管理 | 客户管理员在门户查看/禁用/删除设备;删除后下次在线验证失效 | P0 |
| M4.4 | 设备转移限额 | 最大设备数 + 转移次数上限;超限需审批 | P0 |
| M4.5 | 设备黑名单 | 黑名单设备上所有授权失效 | P1 |
| M4.6 | 设备分组 | 客户对设备分组,授权可绑定到组 | P2 |

### 4.5 浮动与并发授权

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M5.1 | 浮动席位池 | 服务端维护席位池,原子扣减,跨实例共享存储 | P0 |
| M5.2 | 心跳与会话 | 终端周期心跳;超时自动释放席位;空闲断开策略可配 | P0 |
| M5.3 | 心跳配置 | 按产品配置心跳间隔与超时;`SetHeartbeatInterval` 同步 | P0 |
| M5.4 | 借用 | 浮动席位借出,离线可用,到期归还(详见 M3.11) | P1 |
| M5.5 | 排队 / 预约 | 席位满时支持排队或预约 | P2 |
| M5.6 | 共享密钥加密 | 浮动服务端 Shared Key 加密存储 | P1 |

### 4.6 特性门控(Entitlement)

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M6.1 | 特性启用判断 | `FeatureManager.IsFeatureEnabled` | P0 |
| M6.2 | 特性值读取 | `GetFeatureInt/String/...` 控制配额/限额 | P0 |
| M6.3 | 强制拦截 | `ThrowIfNotAllowed` 抛 `FeatureNotLicensedException` | P0 |
| M6.4 | 运行时动态更新 | 在线验证时服务端可下发特性变更,SDK 缓存刷新 | P1 |
| M6.5 | 特性版本兼容 | 不同 SDK 版本有不同特性集,服务端按版本下发 | P1 |
| M6.6 | 特性灰度 | 按客户/设备开启 A/B | P2 |

### 4.7 消费型(Consumption)/ 用量计量

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M7.1 | Consumption 许可证类型 | 新增许可证类型 `Consumption` | P0 |
| M7.2 | 计量特性 | 特性标记 `consumption`,配 `max_consumption` / `max_overages` / `allow_unlimited` / `allow_negative` | P0 |
| M7.3 | 周期与重置 | `daily/weekly/monthly/annually`;`reset_consumption` 周期归零;UTC 对齐 | P0 |
| M7.4 | 用量上报 | `UpdateFeatureConsumption(feature, delta, persistLocal)`;本地+服务端双计数 | P0 |
| M7.5 | 本地/全局计数 | local / total 双模式;`SyncFeatureConsumption` | P0 |
| M7.6 | 超量/透支 | 软限 overage / 硬透支 / 阈值预警 | P1 |
| M7.7 | 用量审计 | 每次 `UpdateFeatureConsumption` 写不可变日志 | P1 |
| M7.8 | 用量报表 | 按特性/客户/产品聚合,周期用量/剩余/趋势 | P1 |
| M7.9 | 用量限流 push | 服务端向 SDK push 阈值变更 | P2 |

### 4.8 产品组合(Bundle)

> **实现现状(2026-09 第四轮审查):未实现。** 当前代码库仅在枚举层面存在相关取值,无 Bundle 实体、服务或 API 端点;下表为目标形态,不作为当前交付验收项(见 §4.43.1 路线图债务披露)。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M8.1 | Bundle 定义 | 多产品/模板组合为 Bundle,定义子许可策略 | P1 |
| M8.2 | 组合授权 | 单 license 包含多产品特性,SDK 可逐产品查询 | P1 |
| M8.3 | 子授权管理 | 单独查看/吊销/迁移 Bundle 内子授权 | P1 |
| M8.4 | Bundle 浮动 | Bundle 内子产品可标记 floating/cloud,共享席位 | P1 |
| M8.5 | Bundle 升级/减项 | 增删子产品触发特性 diff 与签名重发 | P2 |
| M8.6 | Bundle Refresh | Bundle license 离线 refresh 文件生成 | P2 |

### 4.9 软件发布与升级通道

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M9.1 | Release 管理 | 版本号 `$MAJOR.$MINOR.$PATCH.$BUILD` + 平台 + 渠道(stable/beta/rc) | P1 |
| M9.2 | 发布包托管 | 平台私有存储(支持离线/气隙);支持外部 URL | P1 |
| M9.3 | 升级检查 API | `GET /releases/update?productId&platform&channel&version&key`,返回 200/204 | P1 |
| M9.4 | SDK 检查升级 | `CheckReleaseUpdate(callback)` 回调 `AVAILABLE/NOT_AVAILABLE/NOT_ALLOWED` | P1 |
| M9.5 | 受控升级 | 按授权/产品控制可升级到的最低/最高版本 | P1 |
| M9.6 | 多平台分发 | 同版本多平台文件分别托管 | P2 |
| M9.7 | 灰度/渠道 | 按客户/区域/授权开放不同渠道 | P2 |
| M9.8 | 升级与许可联动 | 升级触发 license 刷新(M10),写入审计 | P2 |

### 4.10 离线 Refresh / Air-gap 字符串

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M10.1 | Refresh 文件 | 生成 `license_refresh.bin`(更新过期/特性/状态),客户端重载 | P1 |
| M10.2 | Bundle Refresh | Bundle 子授权可单独刷新 | P2 |
| M10.3 | Air-gap 字符串 | 文件交换不可行时,激活/反激活用 Base32/Base64 字符串 | P0 |
| M10.4 | 短码校验位 | 含 Luhn 校验位 | P2 |
| M10.5 | Refresh 审计 | 每次 refresh 写不可变日志,关联源 license | P1 |
| M10.6 | 浮动静默刷新 | 浮动服务端定期 sync 拉取 refresh 并自动应用 | P1 |

### 4.11 运行时环境检测

> **实现现状(2026-09 第四轮审查):未实现。** VM/WSL/容器检测、反调试、二进制完整性校验当前零代码;下表为目标形态,不作为当前交付验收项(见 §4.43.1 路线图债务披露)。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M11.1 | VM 检测 | 检测 VMware/Hyper-V/VirtualBox/QEMU,按策略阻断 | P1 |
| M11.2 | WSL/容器检测 | 检测 WSL/Docker/K8s,按策略允许/标记 | P1 |
| M11.3 | 反调试 | 检测调试器附加,触发吊销/锁定/降级 | P1 |
| M11.4 | 二进制完整性 | 校验 SDK 自身哈希,被 patch 触发告警 | P1 |
| M11.5 | 环境标签上送 | 检测结果元数据上送,控制台按环境筛选 | P2 |

### 4.12 SDK 与客户端集成

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M12.1 | .NET SDK | 封装 LMC,统一初始化、激活、验证、特性门控 API | P0 |
| M12.2 | 离线许可证缓存 | 本地缓存 license,断网可用,联网自动同步 | P0 |
| M12.3 | 网络降级 | 在线失败时按策略降级为离线缓存,记录待上报事件 | P0 |
| M12.4 | 防篡改/反调试 | 关键路径加壳/混淆,检测调试器与时间篡改 | P1 |
| M12.5 | 时钟防回拨 | 离线记录最后已知时间,检测系统时钟回拨 | P0 |
| M12.6 | Java SDK | JNI 或 HTTP 适配 | P2 |
| M12.7 | C++ SDK | 原生 C++ SDK,适用于桌面/嵌入式 | P2 |
| M12.8 | Python/Go SDK | 轻量 Python/Go SDK | P2 |
| M12.9 | SDK 版本管理 | SDK 内置版本号,服务端可拒绝过旧版本并提示升级 | P1 |
| M12.10 | SDK 遥测上报 | SDK 使用情况(开关可控)匿名上报(联动 M27.4) | P1 |

> **实现现状(2026-09-24):** 五语言 SDK 已交付于 `sdk/csharp`、`sdk/go`、`sdk/nodejs`、`sdk/python`、`sdk/rust`,均具备:**本地 RSA-SHA256 验签**(经 `GET /v1/keys` 拉取并缓存公钥,按 `SignedLicense.KeyVersion` 选钥,支持 SPKI/PKCS#1 PEM 与裸 DER 三种公钥格式)、**浮动租约客户端**(LeaseService:`/v1/leases/checkout|heartbeat|release` + `GET /v1/leases`,独立浮动服务器仅 `X-Api-Key` 认证)、**气隙配套方法**(`AirgapActivate`/`AirgapDecode`/`Revocations`/`AirgapSync`)与 Webhook 签名验签;各 SDK 均带测试(go `go test ./...`、nodejs `npm test`、python `pytest`、rust `cargo test`、csharp 契约测试程序 `sdk/csharp-tests/ContractTests`)。M12.4 防篡改/反调试与 M12.5 时钟防回拨仍未实现(见 §4.11 注记);M12.6/M12.7 Java/C++ SDK 为路线图。

### 4.13 身份认证与访问控制

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M13.1 | 内部用户管理 | 内部用户 CRUD、启停、密码策略 | P0 |
| M13.2 | RBAC | 角色绑定权限点,覆盖所有模块的读/写/审批 | P0 |
| M13.3 | SSO | OIDC / SAML 2.0 对接企业 IdP | P1 |
| M13.4 | MFA | 关键角色强制 MFA(TOTP/WebAuthn) | P1 |
| M13.5 | 多租户/部门隔离 | 按部门/业务线/品牌/客户隔离数据 | P1 |
| M13.6 | 登录安全 | 失败锁定、IP 白名单、会话超时、密码策略 | P0 |
| M13.7 | API Key 权限范围 | scope 限定 + 有效期;支持 label | P0 |
| M13.8 | API Key 加密 | API Key 存储使用 KMS 加密 | P1 |

### 4.14 审计与合规

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M14.1 | 操作审计日志 | 记录所有写操作(谁、何时、何对象、前后值),不可篡改 | P0 |
| M14.2 | 授权变更历史 | 每个授权的完整变更链可追溯 | P0 |
| M14.3 | 不可变 actor 快照 | 审计记录 actor 写入快照,用户变更不影响历史 | P1 |
| M14.4 | 留存策略 | 日志/审计按策略归档清理,冷存储 | P1 |
| M14.5 | 客户自助导出 | 客户可导出本企业数据(GDPR/合规) | P1 |
| M14.6 | 审计报表 | 按角色/对象/时间检索与导出 | P1 |
| M14.7 | 数据主体请求(DSR) | 导出/删除/更正客户数据,带审计 | P1 |

### 4.15 通知与提醒

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M15.1 | 邮件通知 | SMTP 配置;激活成功、即将到期、吊销等邮件 | P0 |
| M15.2 | 到期提醒 | 订阅到期前 T-60/30/7 天提醒(试用到期提醒部分已随商业化裁剪移除) | P0 |
| M15.3 | 异常告警 | 异常激活/席位耗尽/心跳丢失触发告警(邮件/Webhook) | P1 |
| M15.4 | 模板管理 | 邮件/Webhook 模板可编辑,支持变量插值(原"按品牌渲染"部分已随商业化裁剪移除) | P1 |
| M15.5 | 多通道 | 短信/IM(Webhook)通道扩展 | P2 |
| M15.6 | 通知偏好 | 用户配置邮件通知开关与接收人 | P1 |

### 4.16 部署与运维(私有化)

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M16.1 | 离线安装包/镜像 | 离线安装包与 Docker 镜像,无外网依赖 | P0 |
| M16.2 | 密钥初始化向导 | 首次部署引导生成 `signature.bin`、JWT Secret、管理员账号 | P0 |
| M16.3 | 数据库初始化与迁移 | Schema 初始化脚本与版本化迁移工具(沿用 `AegisDbContext`) | P0 |
| M16.4 | 备份与恢复 | DB 与密钥的备份/恢复脚本与文档 | P0 |
| M16.5 | 升级与回滚 | 滚动升级与回滚,迁移可重入 | P1 |
| M16.6 | 健康检查与监控 | `/healthz`、Prometheus 指标、告警规则模板 | P1 |
| M16.7 | 气隙激活文件 | 适配气隙环境的导入导出工具与短码模式 | P0 |
| M16.8 | 配置热更新 | 限流/心跳/提醒配置热更 | P2 |
| M16.9 | HA 部署 | 多实例,会话/席位状态外置到共享存储;RTO/RPO 公开 | P1 |
| M16.10 | 灾备演练记录 | 脱敏演练记录公开 | P1 |

### 4.17 维护与支持策略(Maintenance)

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M17.1 | 维护期配置 | 模板配 `Maintenance period`(首次激活后起算 N 月) | P1 |
| M17.2 | 维护续期 | 延长维护截止日,触发 license 签名刷新 | P1 |
| M17.3 | 维护内/外区分 | SDK 区分"维护期内可升级"与"期外仅可激活旧版本" | P1 |
| M17.4 | LTS 分支 | LTS 仅安全补丁;维护期内允许任意 channel 升级 | P2 |
| M17.5 | EOL 策略 | 维护/支持/安全更新分别配置到期日,到期提醒 | P2 |
| M17.6 | 维护到期矩阵 | 维护报表(产品 × 客户),辅助续费 | P2 |

### 4.18 订单与销售

> **(本节已随商业化裁剪移除,订单/退款/CRM 对接移交外部销售系统;里程碑 ID 保留备查。)**

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M18.1 | 订单管理 | 创建订单(客户、产品、数量、模板、有效期),审核后批量生成激活码 | P1 |
| M18.2 | 自动激活工作流 | 订单审核通过后自动生成激活码,邮件/Webhook 下发 | P1 |
| M18.3 | 续费提醒 | 订阅到期前 N 天提醒(联动 M15.2) | P1 |
| M18.4 | 退货/退款回收 | 退货触发授权吊销与设备清理 | P1 |
| M18.5 | CRM/ERP 对接 | 外部订单导入;外部 ID 双向关联 | P1 |

### 4.19 外部订阅对接(Stripe/HubSpot 等)

> **(本节已随商业化裁剪移除,外部支付适配/对账/税率透传移交外部销售系统;本系统保留订阅续期语义,见 §4.59 注。里程碑 ID 保留备查。)**

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M19.1 | 外部订阅同步 | Webhook/轮询拉取外部订阅状态,映射 license 状态 | P1 |
| M19.2 | 支付适配器 | 抽象 Stripe/HubSpot/FastSpring 适配器,config 启用 | P1 |
| M19.3 | 多支付通道 | 单实例配置多套通道,按产品路由 | P2 |
| M19.4 | 订阅映射 | license ↔ subscription_id/customer_id 双向绑定 | P0 |
| M19.5 | 状态冲突 | 冲突时优先级策略可配(默认以外部为准) | P1 |
| M19.6 | 退款/取消联动 | 外部退款/取消触发 license 吊销 + 设备清理 | P1 |
| M19.7 | 对账报表 | 周期对账,标识差异 | P2 |
| M19.8 | 价格/税率透传 | 平台不存价表,只透传外部计算结果 | P2 |

### 4.20 白标 / 多品牌

> **(本节已随商业化裁剪移除,品牌配置/多品牌白标移交外部销售系统;里程碑 ID 保留备查。)**

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M20.1 | 品牌 Profile | 多品牌档案(Logo、主色、主题、法律链接、域名、版权) | P1 |
| M20.2 | 自定义域名 | 客户门户支持 CNAME/子域 | P2 |
| M20.3 | 邮件品牌 | 邮件模板按品牌渲染(Logo/footer) | P1 |
| M20.4 | 主题切换 | 深/浅色 + 强调色 | P2 |
| M20.5 | 品牌作用域 | API/SDK 调用可指定 brand,日志/审计按品牌隔离 | P2 |
| M20.6 | 多语言+品牌 | 同一品牌支持多语言切换 | P2 |

### 4.21 多语言与本地化

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M21.1 | 控制台多语言 | 中/英双语(可扩展) | P1 |
| M21.2 | 时区与日期 | 用户可设时区,所有时间按用户时区展示 | P1 |
| M21.3 | 错误码本地化 | 错误码字典多语言,SDK 可获取本地化文案 | P2 |
| M21.4 | 官网/产品页多语言 | 中/英/日 | P1 |

### 4.22 管理控制台

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M22.1 | 仪表盘 | 平台总览:授权数、激活数、并发数、到期预警、异常告警 | P1 |
| M22.2 | 产品/客户/授权 CRUD | 列表/详情/编辑/筛选/批量操作;分页/排序/列自定义 | P0 |
| M22.3 | 批量操作 | 批量生成激活码、批量吊销、批量导出 | P0 |
| M22.4 | 搜索与筛选 | 多维检索 | P0 |
| M22.5 | 导入导出 | CSV/Excel 导入导出,字段映射向导(M34.4) | P1 |
| M22.6 | 操作向导 | 关键操作(发放/吊销/迁移)向导式表单 | P0 |
| M22.7 | 客户视角预览 | 模拟客户门户 | P2 |
| ~~M22.8~~ | ~~账户与套餐~~ | ~~我的订阅、发票、付款(S-18)~~(已裁剪,移交外部销售系统) | P0 |

### 4.23 客户自助门户

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M23.1 | 登录与账户 | 自助登录、改密、忘记密码 | P0 |
| M23.2 | 授权查看 | 列出本企业所有授权及状态、有效期、设备数 | P0 |
| M23.3 | 设备管理 | 查看/禁用/迁移设备,显示最后心跳 | P0 |
| M23.4 | 离线激活 | 上传 `.req` 生成 `.resp` 下载 | P0 |
| M23.5 | 激活码查询 | 按码查询状态与归属 | P0 |
| M23.6 | 工单/支持 | 提交工单;查知识库;查看 SLA | P0 |
| ~~M23.7~~ | ~~我的合同~~ | ~~查看合约、发票、续费日~~(已裁剪,移交外部销售系统) | P0 |
| M23.8 | 通知偏好 | 配置邮件开关与接收人 | P1 |

### 4.24 API 与集成

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M24.1 | 管理 API | 产品/客户/授权/设备 CRUD + 发放/吊销/转移 | P0 |
| M24.2 | 客户 API | 激活/验证/心跳/特性查询 | P0 |
| M24.3 | 开发者 API | 公开 API,版本化 | P0 |
| M24.4 | OpenAPI/Swagger | 自动生成,交互式 UI | P0 |
| M24.5 | 速率限制 | 按 API Key/IP/接口维度限流;配额与套餐挂钩 | P0 |
| M24.6 | API 版本控制 | URI 前缀 `/v1/`;保证向后兼容策略 | P1 |
| M24.7 | 幂等性 | 写接口支持 `Idempotency-Key` | P1 |
| M24.8 | 错误码字典 | 统一错误码 + 文档 | P0 |

### 4.25 Webhook

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M25.1 | 事件订阅 | 支持订阅事件(激活/吊销/过期/续期/迁移/心跳丢失) | P1 |
| M25.2 | 重试与挂起 | 失败改为"挂起重试"而非直接禁用,事件日志继续记录 | P1 |
| M25.3 | 签名校验 | 携带 HMAC 签名,接收方可验证 | P1 |
| M25.4 | 事件过滤 | 按事件类型/目标产品过滤 | P1 |

### 4.26 商业包装与定价

> **(本节已随商业化裁剪移除,套餐售卖/报价/发票/自动续费等移交外部销售系统;里程碑 ID 保留备查。)**

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M26.1 | 套餐定义 | Free/Pro/Business/Enterprise,绑定功能集/配额/SLA/价格 | P0 |
| M26.2 | 套餐与功能位绑定 | "功能位→套餐"映射;超限引导升级 | P0 |
| M26.3 | 用量计量计费 | 跟踪活跃授权、激活调用、席位、SDK QPS,阶梯计费 | P0 |
| M26.4 | 自助购买/续费 | 信用卡/对公转账/PO 流程,生成发票 | P1 |
| M26.5 | 报价与折扣 | 销售可创建报价单,折扣/审批流 | P1 |
| M26.6 | 账期与发票 | 月/季/年结,合并开票,增值税发票 | P1 |
| M26.7 | 续费提醒与自动续费 | T-60/30/7 提醒;可选自动续费 | P1 |
| M26.8 | 超额策略 | 硬阻断/软警告/按用量计费 | P1 |
| M26.9 | OEM/嵌入式报价 | 按设备/按 SKU 报价模型 | P2 |
| M26.10 | 公允价格说明 | 开源/学生/Startup 折扣公开规则 | P1 |

### 4.27 安全与密钥管理

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M27.1 | RSA 密钥生成与轮换 | 复用 `LicenseUtils.GenerateLicensingSecrets`;密钥版本号,新旧并行验证 | P0 |
| M27.2 | 私钥存储 | KMS/HSM/Vault 适配;支持 AES 加密文件 | P0 |
| M27.3 | 签名验证 | 所有 license 与 refresh 文件由 RSA 签名,SDK 验签后信任 | P0 |
| M27.4 | 防重放 | 激活请求携带 nonce + 时间戳,服务端去重 | P0 |
| M27.5 | 传输安全 | 全部接口强制 TLS,可选 mTLS | P0 |
| M27.6 | 敏感操作二次确认 | 吊销/密钥轮换/客户停用需 MFA | P1 |
| M27.7 | FIPS 140 兼容 | 关键算法采用 FIPS 140-2/3 批准的 AES/RSA | P2 |

### 4.28 客户成功与支持

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M28.1 | 工单系统 | 优先级/状态机/SLA 计时/转交/合并/内部备注 | P0 |
| M28.2 | 支持等级 | Community/Standard/Professional/Enterprise;响应时间 24h/8h/2h/30min | P0 |
| M28.3 | 知识库 | 公开 KB,搜索/标签/版本,SEO 友好 | P0 |
| M28.4 | 客户健康度评分 | 综合活跃度、用量增长、错误率、工单频率 | P1 |
| M28.5 | CSM 分配 | Enterprise 客户分配 CSM,工单自动路由 | P1 |
| M28.6 | Onboarding 工作流 | 模板化引导(初始化→集成→上线验收) | P1 |
| M28.7 | 健康检查服务 | 定期自动巡检(密钥/证书/版本/容量) | P1 |
| M28.8 | QBR | 每季度自动生成 QBR | P2 |
| M28.9 | 流失预警 | 健康度持续下降时触发 CSM 介入 | P2 |

### 4.29 法律、合规与合同

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M29.1 | EULA/MSA | 多版本协议,按区域/套餐展示,在线签署 | P0 |
| M29.2 | 隐私政策与 Cookie | 平台展示 + 同意管理 | P0 |
| M29.3 | DPA | 符合 GDPR/个保法,在线签署 + 子处理者清单 | P0 |
| M29.4 | 子处理者列表 | 公开维护,变更通知 + 30 天反对期 | P0 |
| M29.5 | AUP | 禁止滥用条款,纳入 MSA | P1 |
| M29.6 | SLA 条款 | 99.9% 可用性、计划维护窗口、违约金(credits) | P0 |
| ~~M29.7~~ | ~~数据地域~~ | ~~EU/US/AP/自定义区域,数据驻留约束~~(已裁剪:数据驻留能力随商业化移除) | P1 |
| M29.8 | 出口管制 | 验证客户是否在制裁清单 | P1 |
| M29.9 | 第三方声明 | 自动生成 third-party notice | P1 |

### 4.30 销售与营销赋能

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M30.1 | 竞品对比 | LicenseSpring/Cryptlex/CodeMeter/Zentitle 维度对比 | P0 |
| ~~M30.2~~ | ~~ROI 计算器~~ | ~~输入"授权数/年/客户"输出 TCO 与节省,生成 PDF~~(已裁剪,移交外部销售系统) | P1 |
| ~~M30.3~~ | ~~公共 Demo~~ | ~~多租户沙箱,30 分钟自助试用~~(已裁剪:试用/沙箱模块随商业化移除) | P0 |
| ~~M30.4~~ | ~~Trial/POC~~ | ~~自动签发受限 license,14/30 天倒计时,转销售线索~~(已裁剪:试用模块随商业化移除) | P0 |
| M30.5 | 客户案例库 | 案例研究/视频/Logo 墙,按行业筛选 | P1 |
| M30.6 | 集成市场 | 官方与社区集成列表 | P1 |
| ~~M30.7~~ | ~~销售线索评分~~ | ~~Trial 行为打分,推送给销售~~(已裁剪:依赖已删的试用模块) | P2 |
| M30.8 | Webhook→CRM | 行为推送到 Salesforce/HubSpot | P2 |
| ~~M30.9~~ | ~~合作伙伴门户~~ | ~~Reseller 申请、报价、培训、Deal Registration~~(已裁剪:报价/商机部分移交外部销售系统) | P2 |
| M30.10 | 营销内容 | 白皮书/Webinar 回放/技术博客 RSS | P2 |

### 4.31 文档、培训与认证

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M31.1 | 文档站 | 独立 docs 站,多版本/搜索/版本切换 | P0 |
| M31.2 | 用户指南 | 安装、配置、使用 walkthrough,带截图 | P0 |
| M31.3 | 管理员指南 | 平台运维、备份、灾备、调优、监控 | P0 |
| M31.4 | API 参考 | OpenAPI/AsyncAPI,含错误码字典 | P0 |
| M31.5 | SDK 集成教程 | 各语言快速上手 + 最佳实践 | P0 |
| M31.6 | 视频库 | 录屏教程,可嵌入 KB | P1 |
| M31.7 | 认证体系 | 管理员/开发者认证,在线考试+实操 | P2 |
| M31.8 | 合作伙伴培训 | Reseller/集成商培训 | P2 |
| M31.9 | 示例与模板库 | 各 SDK 示例项目、邮件/Webhook 模板(订单模板部分已随商业化裁剪移除) | P1 |
| M31.10 | 文档反馈 | "这篇文章有用吗"反馈入口 | P2 |

### 4.32 竞品迁移与共存

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M32.1 | LicenseSpring 迁移 | 读取 LicenseSpring 管理 API,导入产品/客户/授权/激活码映射 | P1 |
| M32.2 | Cryptlex 迁移 | 解析 Cryptlex 导出 JSON,映射 | P1 |
| M32.3 | CodeMeter 迁移 | 解析 CodeMeter 导出格式 | P2 |
| M32.4 | 通用 CSV 导入 | 通用字段映射向导 | P0 |
| M32.5 | 共存模式 | 同时跑老平台与新平台,逐步切量 | P1 |
| M32.6 | 双写验证期 | 双平台并行,定期 diff 一致性报告 | P2 |
| M32.7 | 迁移服务 | 官方"白手套"迁移服务,纳入 Professional 支持 | P1 |
| M32.8 | 迁移回滚 | 一键回退,保留 30 天数据快照 | P1 |

### 4.33 产品运营与可观测性

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M33.1 | 公共状态页 | 显示平台与依赖服务状态,90 天历史 | P0 |
| M33.2 | 计划维护窗口 | 提前 7 天公告,自动暂停 SLA 计时 | P0 |
| M33.3 | 事故复盘 | 重大事故 5 工作日内发布公开 RCA | P0 |
| M33.4 | 匿名遥测 | 可选匿名使用统计(开关可控,默认关闭) | P1 |
| M33.5 | 产品分析 | Funnel:集成→上线→续费(原"试用"环节已随商业化裁剪移除) | P1 |
| M33.6 | 客户反馈 | 客户可提 Feature Request,公开投票 | P1 |
| M33.7 | NPS/CSAT | 季度调研,自动触发,低分回访 | P2 |
| M33.8 | 流失分析 | 流失原因标签化,根因分析 | P2 |
| M33.9 | 内部 SLO 看板 | 错误预算、核心 API P95、心跳丢失率 | P1 |
| M33.10 | 计费用量遥测 | 套餐用量配额预警、续费风险 | P1 |

### 4.34 发布、生命周期与可信承诺

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M34.1 | 公开路线图 | 已规划/进行中/已完成三态,客户可订阅变更 | P0 |
| M34.2 | 版本节奏 | 每年 2 主版本 + 月度补丁;LTS 18 个月 | P0 |
| M34.3 | LTS 分支 | 提供 LTS,仅安全补丁 | P0 |
| M34.4 | API 稳定承诺 | `/v1` 至少 24 个月不破坏性;v2 提前 12 个月公告 | P0 |
| M34.5 | 弃用策略 | 功能/接口弃用提前 6 个月通知 | P0 |
| M34.6 | 兼容性矩阵 | 公布各组件兼容版本 | P0 |
| M34.7 | CVE 披露 | security.txt + 公开安全公告页;订阅 | P0 |
| M34.8 | 漏洞奖励 | 公开规则与奖励梯度 | P1 |
| M34.9 | 信任中心 | 集中展示 ISO27001/SOC2/pen test | P1 |
| M34.10 | 灾备声明 | RTO/RPO 公开,演练记录脱敏 | P1 |

### 4.35 安全与合规认证(平台自身)

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M35.1 | SDLC | 平台声明:威胁建模、代码审计、依赖扫描、SBOM | P0 |
| M35.2 | 渗透测试 | 每次大版本提供渗透测试报告 | P1 |
| M35.3 | ISO 27001 规划 | 私有化部署包提供满足 ISO 27001 控制的物料 | P1 |
| M35.4 | GDPR | 数据脱敏、按主体导出/删除、跨境声明 | P1 |
| M35.5 | SOC2 控制项 | 提供控制项矩阵 | P2 |
| M35.6 | FIPS 140 | 关键算法采用 FIPS 140-2/3 | P2 |
| M35.7 | SBOM | 镜像与 SDK 随附 SBOM | P2 |
| M35.8 | CVE 跟踪与披露 | 公开披露策略、订阅 | P1 |

### 4.36 营销/产品官网(M36)

> 平台对外"门面",承担获客、SEO、品牌、招聘职能,与控制台/门户完全解耦。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M36.1 | 首页 | Hero + 价值主张 + 客户 Logo 墙 + CTA(联系销售 / 试用部分已随商业化裁剪移交外部销售系统) | P0 |
| M36.2 | 产品介绍 | 按角色(产品/工程/合规)分路径;图文+视频;对比 LicenseSpring/Cryptlex | P0 |
| ~~M36.3~~ | ~~定价页~~ | ~~套餐矩阵 + FAQ + 自助估算(从 M30.2 嵌入)~~(已裁剪,移交外部销售系统) | P0 |
| M36.4 | 客户案例 | 案例研究列表/详情;按行业/规模/场景筛选;Logo 墙(M30.5) | P0 |
| M36.5 | 博客/资源中心 | 博客(技术/案例/产品);RSS;按标签/作者/时间 | P0 |
| M36.6 | 文档入口 | 链接到文档站(§4.39) | P0 |
| M36.7 | 联系销售 | 表单 + 验证码;提交后自动转 CRM(M30.8) | P0 |
| ~~M36.8~~ | ~~Trial 注册~~ | ~~链接到 §4.37 沙箱~~(已裁剪:试用模块随商业化移除) | P0 |
| M36.9 | 多语言 | 中/英(可扩展);URL 路径 `/{lang}/...`;hreflang 完整 | P0 |
| M36.10 | SEO | 元数据 / sitemap / robots.txt / 结构化数据(JSON-LD);Core Web Vitals 达标 | P0 |
| M36.11 | 性能 | LCP < 2.5s / FID < 100ms / CLS < 0.1;静态化 + CDN | P0 |
| M36.12 | 内容管理 | Headless CMS(Strapi / Sanity / Contentful);编辑工作流与预览 | P0 |
| M36.13 | A/B 测试 | 关键页(首页/定价)支持 A/B 实验与漏斗分析 | P2 |
| M36.14 | Cookie 同意 | 区域化(GDPR);默认拒绝非必要 Cookie | P0 |
| M36.15 | 法务页面 | EULA / Privacy / DPA / Cookie / AUP / Subprocessor 链接(退款政策部分已随商业化裁剪移交外部销售系统) | P0 |
| M36.16 | 招聘页 | 岗位列表(从 ATS 拉取,可选) | P2 |
| M36.17 | 新闻/媒体 | 新闻稿、媒体资源(Logo 包下载) | P2 |
| M36.18 | 安全披露页 | security.txt + 漏洞报告入口(M34.7) | P1 |
| M36.19 | 系统状态指示 | 主页/页脚链接到状态页(§4.38) | P1 |
| M36.20 | 暗色模式 | 适配 | P2 |

### 4.37 Demo / Trial 沙箱(M37)

> **(本节已随商业化裁剪移除,试用/沙箱模块下线,转付费引导移交外部销售系统;里程碑 ID 保留备查。)**
>
> 潜在客户自助体验,降低销售介入门槛。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M37.1 | 一键试用入口 | 官网/CTA 触达,邮箱注册,30 秒内开通 | P0 |
| M37.2 | 自动种子数据 | 创建示例产品/客户/订单/授权/设备,可即时体验所有主流程 | P0 |
| M37.3 | 多租户隔离 | 每次试用一个独立租户,数据完全隔离;到期自动清理 | P0 |
| M37.4 | 试用倒计时 | 14/30 天(可配),倒计时提示 + 到期策略(锁定/删除) | P0 |
| M37.5 | 用量与功能限制 | 限制授权数、用户数、调用 QPS;UI 标注"试用版" | P0 |
| M37.6 | 数据重置 | 用户可一键重置回种子数据 | P1 |
| M37.7 | 转付费引导 | 到期前引导"导出数据/转付费/删除",内嵌报价单 | P0 |
| M37.8 | 行为埋点 | 试用行为打点 → 销售线索评分(M30.7) | P1 |
| M37.9 | 试用 SDK 体验 | 沙箱内提供示例代码(各语言) + 沙箱专属 API Key | P0 |
| M37.10 | 试用 API Key | 自动签发,绑定租户,可重启/吊销 | P0 |
| M37.11 | 防滥用 | 同一邮箱/手机/卡号/IP 限频;可疑行为标记 | P1 |
| M37.12 | Demo 数据集选择 | 至少 3 个行业场景(游戏/工业/通用 SaaS),可切换 | P2 |
| M37.13 | 试用 Webhook | 沙箱可订阅自身事件,演示完整集成 | P2 |
| M37.14 | 与产品页/文档站打通 | "在沙箱中试试"按钮嵌入文档与产品页 | P1 |

### 4.38 公开状态页(M38)

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M38.1 | 组件级状态 | API / 控制台 / 门户 / SDK CDN / License 验证 / Webhook / 文档站 | P0 |
| M38.2 | 实时状态指示 | Operational / Degraded / Partial Outage / Major Outage | P0 |
| M38.3 | 历史事件 | 90 天事件列表,起止时间、影响范围、状态 | P0 |
| M38.4 | 计划维护 | 提前 7 天公告,自动暂停 SLA 计时(M33.2) | P0 |
| M38.5 | 订阅通知 | 邮件 / Webhook / RSS / Slack 集成 | P0 |
| M38.6 | 公开 API | `GET /v1/status.json` 给上游监控使用 | P1 |
| M38.7 | SLA credits 计算 | 事件 → 自动计算客户 credits 额度 | P1 |
| M38.8 | 多区域 | 至少 3 区域(US/EU/AP)独立展示 | P2 |
| M38.9 | 多语言 | 中/英 | P1 |
| M38.10 | 私有化部署 | 私有化版本提供"自托管状态页"组件 | P1 |

### 4.39 文档站(M39)

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M39.1 | 站点框架 | Docusaurus(默认) / MkDocs(可选) | P0 |
| M39.2 | 内容结构 | 入门 / 安装 / 使用指南 / 管理员指南 / API 参考 / SDK 集成 / 部署 / 安全 / 商业化 | P0 |
| M39.3 | 多版本 | 与产品版本对应;支持 LTS | P0 |
| M39.4 | 搜索 | Algolia DocSearch / 本地检索;支持中/英 | P0 |
| M39.5 | API 自动生成 | OpenAPI → 文档;含"在线试调" | P0 |
| M39.6 | SDK 示例 | 各语言示例项目;在线运行(Sandpack/StackBlitz) | P0 |
| M39.7 | 反馈与编辑 | 每页"这篇文章有用吗";PR/Issue 入口 | P0 |
| M39.8 | 国际化 | 中/英(可扩展);按路径切换 | P0 |
| M39.9 | 版本弃用横幅 | 文档页顶部横幅提示文档版本已弃用(M34.5) | P1 |
| M39.10 | 文档与版本对齐 | 文档版本必须对应产品版本,工具链验证 | P1 |
| M39.11 | 嵌入示例 | 沙箱/Demo 入口(联动 M37.14) | P1 |
| M39.12 | PDF 导出 | 每章可导出 PDF(供离线分发) | P2 |
| M39.13 | SEO | sitemap / 结构化数据;与官网(§4.36)统一品牌 | P1 |

### 4.40 合作伙伴门户(M40)

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M40.1 | Reseller 注册 | 表单 + 资质审核;通过后开通账号 | P1 |
| M40.2 | Deal Registration | Reseller 提交商机,防冲突(同客户 90 天锁) | P1 |
| ~~M40.3~~ | ~~报价生成~~ | ~~基于产品/数量/折扣生成报价单;审批流~~(已裁剪,移交外部销售系统) | P1 |
| M40.4 | 培训与认证 | 在线课程;学习进度;颁发证书 | P2 |
| M40.5 | 资料下载 | Logo 包、白皮书、案例、技术文档 | P1 |
| M40.6 | 销售线索 | 提交线索 → 销售跟进;状态可见 | P1 |
| ~~M40.7~~ | ~~结算与返佣~~ | ~~月度结算报表;返佣规则;账单导出~~(已裁剪,移交外部销售系统) | P2 |
| M40.8 | 集成商目录 | 集成商可在官网展示(白标联动 M20) | P2 |
| ~~M40.9~~ | ~~API 与 SDK~~ | ~~提供 Reseller 专用 API(下订单/查授权)~~(已裁剪:下订单部分移交外部销售系统) | P2 |
| M40.10 | 多层级 | Tiered(Authorized / Gold / Platinum)不同权益 | P2 |

### 4.41 管理控制台(Web 端)补全(M22 扩展)

> §4.22 已列出后端能力,此处补齐前端具体页面与组件要求。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M22W.1 | 全局布局 | 顶栏(用户/品牌/语言/帮助/状态) + 侧边导航 + 面包屑 + 内容区 | P0 |
| M22W.2 | 工作台 | 我的待办、最近访问、关键指标卡片 | P1 |
| M22W.3 | 数据列表通用组件 | 服务端分页 / 列选择 / 列排序 / 列过滤 / 列固定 / 行选择 / 批量操作 | P0 |
| M22W.4 | 表单向导 | 复杂表单(创建授权/转移/吊销)分步向导 + 草稿 + 校验 + 预览 | P0 |
| M22W.5 | 高级筛选 | 嵌套条件 / 保存为视图 / 视图共享 | P1 |
| M22W.6 | 图表与可视化 | 折线 / 柱 / 饼 / 热力 / 漏斗;导出 PNG/CSV | P1 |
| M22W.7 | 文件上传 | 离线激活 `.req` / CSV 导入;拖拽 + 进度 + 错误行下载 | P0 |
| M22W.8 | 通知中心 | 站内通知;红点;Web Push(可选) | P1 |
| M22W.9 | 命令面板 | `Ctrl+K` 快速跳转/执行操作 | P2 |
| M22W.10 | 暗色模式 | 切换 / 跟随系统 | P1 |
| M22W.11 | 响应式 | 桌面端 1280+ 为主;适配平板 | P1 |
| M22W.12 | 无障碍 | 键盘可达 / 焦点环 / ARIA | P1 |
| M22W.13 | 错误边界 | 局部失败不崩;可恢复 | P0 |
| M22W.14 | 引导与教学 | 首次进入 onboarding;功能 tooltip;视频教程 | P1 |

### 4.42 客户自助门户(Web 端)补全(M23 扩展)

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M23W.1 | 极简布局 | 顶栏 + 内容区;无侧边栏(品牌可定制) | P0 |
| M23W.2 | 授权卡片 | 卡片化展示授权状态/到期/设备数;到期色阶 | P0 |
| M23W.3 | 设备管理 | 设备表格 + 转移/禁用/移除 + 设备详情弹层 | P0 |
| M23W.4 | 离线激活向导 | 5 步:下载 SDK → 生成 `.req` → 上传 → 接收 `.resp` → 部署 | P0 |
| M23W.5 | 工单提交 | 模板化表单;附件;优先级;SLA 提示 | P0 |
| M23W.6 | 集成 SDK | 嵌入式代码片段(curl / Python / Java / C# / JS) | P0 |
| M23W.7 | 暗色模式 | 切换 / 跟随系统 | P1 |
| M23W.8 | 移动端适配 | 移动端 H5 适配(管理员移动审批) | P1 |
| M23W.9 | 客户端下载 | 各平台 SDK / 工具下载;带版本号 | P0 |

### 4.43 高级模块实现范围界定(请先阅读)

> 本节(M43–M57)描述了**目标能力集**。其中部分模块在当前代码库中已实现或部分实现,其余为**路线图/超出当前版本范围**。
> 已实现模块以实际代码为准(控制器:`src/LicenseManager.Api/Controllers/*.cs`;服务:`src/LicenseManager.Platform/Services/*.cs`;实体:`src/LicenseManager.Platform/Domain/*.cs`)。
> 标注为路线图的条目**不作为当前交付验收项**,避免被误判为遗漏。

| ID | 模块 | 状态 | 说明 |
| --- | --- | --- | --- |
| M43 | Named User / 身份型授权 | ✅ 部分实现 | `NamedUserAssignment` 实体 + `NamedUserService` + 控制台管理;JIT/OIDC 联动见 M50 |
| M44 | Floating Server v2 自托管 | 🟡 部分实现 | 独立 `LicenseManager.Server` 已实现 checkout/heartbeat/release 语义 + `GET /v1/leases` 状态端点 + ApiKey 认证;SQLite/PostgreSQL 持久化与 React UI 仍为路线图 |
| M45 | Lease / Cooldown / Grace | ✅ 已实现 | `Lease` 实体 + `LeaseService` + `/leases` 端点;含**冷却期 + allowLeaseExtension/allowLeaseRelease**;已细化 **DefaultLeaseDuration / LeaseRefreshInterval** 参数 |
| M46 | Subscription Policy | ⚠️ 已随商业化裁剪移除 | 原 `SubscriptionPolicy` 实体/服务/端点已删除;本系统保留**订阅续期**语义(后台每小时自动扫描 + `POST /v1/admin/subscriptions/renewal/execute` 手动触发,出站事件 `subscription.renewed` / `subscription.payment_failed`) |
| M47 | Entitlement Sets / Tier | ✅ 已实现 | `EntitlementSet` / `LicenseEntitlement` 实体 + `EntitlementSetService`;含 `BaseValues` 基准值与 **Tier 层级继承/覆盖规则**（`ResolveEffectiveAsync`） |
| M48 | License Manager / User | ✅ 部分实现 | `LicenseUser` 实体 + `LicenseUserService`(含 manager_removed Webhook)+ **客户账户用户组** `LicenseUserGroup`/`LicenseUserGroupMember` + `LicenseUserGroupService`(M48.6);Manager 邮件分发(M48.3)待完善 |
| M49 | 移动端 SDK(Android/iOS) | 🚫 超出当前仓库范围 | 移动端 SDK 为独立交付物,不在本仓库实现 |
| M50 | OIDC SSO 端到端 | 🟡 部分实现 | 管理端已完成(`SsoProvider` / `SsoUserBinding` + `SsoService` + 配置);已实现 **JIT Named User 开通**（`EnableJitProvisioning`）；SDK 端 OIDC 认证流仍为路线图 |
| M51 | Custom Fields | ✅ 已实现 | `CustomFieldDefinition` / `CustomFieldValue` + `CustomFieldsService` + 管理端点 |
| M52 | Personal Access Token | ✅ 已实现 | `PersonalAccessToken` 实体 + `PersonalAccessTokenService` + 管理端点 |
| M53 | Token-Based Licensing | ✅ 部分实现 | `TokenPool` / `TokenConsumptionLog` 实体 + `TokenLicensingService`;含**计费报表** `GET /token-consumption/report`(按功能聚合);软/硬上限已生效 |
| M54 | EULA Use Types | ✅ 部分实现 | `Eula` / `EulaAcceptance` + `EulaUseType` 枚举 + `EulaService`;含客户在线签署流(`AcceptAsync`);用途类型枚举/使用限制已落地 |
| M55 | Webhook 事件目录 | 🟡 部分实现 | (2026-10 商业化裁剪后目录收敛为 **37 条**,资金流事件已移除,见 §4.59 注)`WebhookEventCatalogService` 目录覆盖 M55.1–M55.25 并扩展至 **46 条**;但其中 **31 条带 `(planned)` 标注、无任何实际发布点**(`license.activated`/`license.expires`/`trial.*`/`device.*` 等),实际发布的仅 **15 种**(`license.issued`/`.updated`/`.suspended`/`.resumed`/`.revoked`/`.renewed`/`.extended`/`.consumption.reset`/`.feature.added`、`subscription.created`/`.canceled`/`.renewed`/`.payment_failed`、`payment.refunded`、`order.license_user.manager_removed`);此前"目录与发布事件名一致"的表述不准确,以 `WebhookEventCatalogService.cs` 为准 |
| M56 | 集成与第三方生态 | 🟡 部分实现 | `Integration` / `IntegrationSyncLog` 实体 + `IntegrationService`(同步框架/连通性测试)+ `TelemetryExportService`(M56.6 OpenTelemetry);(原 Stripe 支付适配器已随商业化裁剪移除);HubSpot 等 CRM/生态集成适配器为路线图 |
| M57 | Local License / Local License Server | ✅ 部分实现 | `LocalLicenseServerService`(激活证书生成/校验/**续期** M57.3)+ `LocalLicenseServerAdminController`(generate/validate/renew);独立本地 server 部署为路线图 |

#### 4.43.1 路线图债务披露(MVP P0 未实现项)

> 以下条目在对应章节中标为 P0(MVP 承诺),但当前代码库**未实现或仅为存根**。为避免被误判为已交付,在此集中披露(依据:第四轮审查报告 R4-C);修复进度以审查报告与后续修订为准。

| ID | 功能 | 当前状态 |
| --- | --- | --- |
| M8.1–M8.6 | 产品组合(Bundle) | **未实现**:仅 `LicenseType`/相关枚举中存在取值,无 Bundle 实体/服务/端点(见 §4.8 注记) |
| M11.1–M11.5 | 运行时环境检测(VM/WSL/反调试/完整性) | **未实现**:零代码(见 §4.11 注记) |
| M30.1 | 竞品对比页 | **未实现**:官网无对比页 |
| M30.3 | 公共 Demo 沙箱 | **存根**:`web/sandbox` 后端为空数据存根(GET 返回空、写操作 501 `feature_unavailable`) |
| M30.4 | Trial/POC 自动签发 | **未实现**:无到期自动签发受限 license 的链路 |
| M34.1 | 公开路线图(三态+订阅) | **未实现**:无公开路线图页 |
| M36.14 | Cookie 同意管理(GDPR) | **未实现**:官网无 Cookie 同意组件 |
| M39.1–M39.13 | 文档站 | **存根**:`web/docs` 仅一个静态 `index.html`,无版本化/搜索/API 自动生成 |

> 其他非 P0 缺口(验证规则库编排 UI、组织层级、Reseller、浮动排队、灰度、竞品迁移工具、NPM/PyPI 发布管线等)详见审查报告第四轮 R4-C 与各章节既有"规划中"标注。

---

### 4.44 Named User / 身份型授权(M43)

> 来源:Cryptlex Identity-based licensing、Adobe Named User、TeamViewer Named User、ArcGIS Named User、Sentinel RMS Named User。
> 当前 RDP 仅覆盖 Node-Locked / Floating,缺 Named User。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M43.1 | Named User 许可证类型 | 新增 `NamedUser` 类型;绑定到具体自然人,可跨多设备使用 | P0 |
| M43.2 | 用户身份 | 用户由 email/IdP 标识;支持 Federation / JIT 自动开通 | P0 |
| M43.3 | 用户-授权绑定 | 一张 license 可绑定 N 个 Named User;每用户独立设备数 | P0 |
| M43.4 | 用户重分配限制 | 同一 Named User 一年/期内可重分配次数上限(防滥用) | P1 |
| M43.5 | 共享设备 vs Named User | 客户可选择"绑用户"或"绑设备"(Sentinel SDL 模式);模板可配置 | P1 |
| M43.6 | Named User 报表 | 控制台按用户聚合(使用率、最后活跃、设备列表) | P1 |
| M43.7 | 用户自助管理 | 客户用户登录后可激活/迁移自己的设备 | P1 |
| M43.8 | Named User + OIDC | 通过 IdP 用户身份自动激活(联动 M50) | P0 |

### 4.44 Floating Server v2 自托管(M44)

> 来源:LicenseSpring Floating Server v2(React UI + Swagger + SQLite/PostgreSQL);Reprise RLM on-prem Server。
> 当前 RDP 仅 M5 简述,缺独立子模块。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M44.1 | 独立分发 | `LicenseManager.FloatingServer` 独立服务,可与主平台分离部署 | P0 |
| M44.2 | 存储后端 | 支持 SQLite(单机)与 PostgreSQL(集群);配置项切换 | P0 |
| M44.3 | 自带管理 UI | React 实现的轻量管理界面,带 Swagger | P0 |
| M44.4 | 自动配置生成 | 管理员在主平台生成 `config.yaml` + 证书链,下载即用 | P0 |
| M44.5 | 多 Floating Server | 主平台可同时管理多个 Floating Server 实例(Multi-tenant ISV 场景) | P2 |
| M44.6 | 同步策略 | 周期同步 + 按需同步;`serverSyncInterval` 最小 180s 强制下限 | P0 |
| M44.7 | 报告日志 | RLM 风格明文 report log,便于审计与三方监控集成 | P1 |
| M44.8 | LAN 自动发现 | 局域网内 RLM 风格自动发现 license server(可选) | P2 |
| M44.9 | 冗余 / Standby | 多 server 冗余,failover 模式;lease 状态共享 | P1 |
| M44.10 | 签名验证 | 浮动 license 支持 RSA 签名验证(FSv1 不支持,FSv2 支持) | P0 |

### 4.45 浮动态生命周期:Lease / Cooldown / Grace(M45)

> 来源:Cryptlex `leaseDuration` / `serverSyncGracePeriod` / `allowedActivations`;10Duke `LeaseTimeBehavior` 详细模型。
> 当前 RDP 仅 M5 简述,缺完整语义。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M45.1 | Lease Duration | 浮动席位借出有效期;`leaseTimeCheckOut`(离线)与 `leaseTimeCache`(在线)分离 | P0 |
| M45.2 | Refresh Interval | 推荐 token 刷新时间;`refreshTimeCheckOut` / `refreshTimeCache` | P0 |
| M45.3 | Cooldown Time | 释放后冷却期;冷却期内同设备同指纹不可重借,新设备可立即借 | P1 |
| M45.4 | Server Sync Grace Period | 浮动/托管浮动下,网络中断后的最大容忍期 | P0 |
| M45.5 | `-1` 表示无限制 | `allowedActivations` / `allowedDeactivations` / `allowedFloatingClients` / `leaseDuration` 等字段支持 `-1` 语义 | P0 |
| M45.6 | Allow Client Lease Duration | 允许客户端在租借时指定 lease duration(覆盖 license 策略) | P1 |
| M45.7 | Lease 续期 | `allowLeaseExtension` 控制是否允许续期 | P1 |
| M45.8 | Lease 立即释放 | `allowLeaseRelease` 控制是否允许提前释放 | P1 |
| M45.9 | 个人 lease 时长 | 同 license 支持多种 lease 时长(短租 / 长借) | P2 |
| M45.10 | Lease 过期事件 | 触发 `activation.lease-expired` Webhook(M25 扩展) | P0 |

### 4.47 Subscription Policy 订阅策略(M46)

> 来源:Cryptlex 3.78.0 引入 `SubscriptionInterval` / `SusbcriptionStartTrigger`,废止 `Validity` / `ExpirationStrategy`。
> 当前 RDP 的订阅语义沿用旧 Validity 模型,需要切换。
>
> **(2026-10 商业化裁剪:Subscription Policy 订阅策略模块已移除;本系统保留订阅续期——后台每小时自动扫描 + `POST /v1/admin/subscriptions/renewal/execute` 手动触发,续期成功延长许可证有效期并发 `subscription.renewed` 事件,失败发 `subscription.payment_failed`。)**

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M46.1 | SubscriptionInterval | 配置订阅周期(月/季/年)与续费触发(到期前/到期日) | P0 |
| M46.2 | SusbcriptionStartTrigger | 订阅起算点(立即 / 首次激活 / 指定日期) | P0 |
| M46.3 | 订阅到期自动延期 | 按 SubscriptionInterval 自动延期,可被外部支付拦截(M19) | P0 |
| M46.4 | 订阅续费/升级/降级 | 通过 API 修改 `SubscriptionInterval`,license 重新签名 | P1 |
| M46.5 | 维护期与订阅联动 | Maintenance Policy 支持 `SubscriptionInterval` 字段(取代旧 `Validity`) | P1 |
| M46.6 | 订阅日志 | 记录订阅变更(续期/到期更新/interval 修改)的不可变日志 | P0 |
| M46.7 | 直接修改 expires_at | 提供 `PATCH /v1/licenses/{id}/expires-at` 接口,跳过 extend 流程 | P0 |
| M46.8 | 弃用旧字段 | 不再使用 `Validity` / `ExpirationStrategy`,迁移工具支持旧 license 升级 | P1 |

### 4.47 Entitlement Sets / Tier 型权利集(M47)

> 来源:Cryptlex 3.78.0 引入 `Entitlement Sets` + tier,废止 `Product Versions` 与 `Feature Flags`。
> 当前 RDP 的"产品版本"与"Feature 标记"模型需升级。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M47.1 | Entitlement Set 定义 | 一组相关 Feature 的集合(如 Standard / Pro / Enterprise 三档) | P0 |
| M47.2 | Tier | Set 内的具体档位,绑定具体 Feature 集合 + base value | P0 |
| M47.3 | License 引用 Entitlement Set | License 引用 Set,SDK 可获取当前 tier | P0 |
| M47.4 | License 级 Feature 覆盖 | License 可在继承的 Set 之上覆盖/添加 Feature | P0 |
| M47.5 | Feature 过期 | Feature Entitement 可独立 `ExpiresAt` | P0 |
| M47.6 | base value | Feature 可定义 base value(SDK 可读取,用于降级提示) | P1 |
| M47.7 | 弃用旧模型 | `Product Version` 与 `Feature Flag` 概念废止,迁移至 Entitlement Set | P1 |
| M47.8 | 报告日志 | 报告日志按 Tier 维度统计 | P2 |

### 4.48 License Manager / License User(M48)

> 来源:LicenseSpring v3.252+ 区分 License Manager(管理者)与 License User(使用者);支持 Manager 移除事件。
> 当前 RDP 的 Customer Admin/User 模型未覆盖此细粒度。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M48.1 | 角色定义 | 每 license 可关联多个 License Manager(管理员)与多个 License User(使用者) | P0 |
| M48.2 | Manager 权限 | 单独管理 license(转移/吊销/续期),与 User 隔离 | P0 |
| M48.3 | 邮件通知分发 | License 事件可按角色分发邮件(Manager 收吊销/到期,User 收激活) | P0 |
| M48.4 | Manager 移除事件 | 触发 `order.license_user.manager_removed` Webhook | P0 |
| M48.5 | 客户账户 SSO 默认重定向 URI | 多个 redirect URI 默认值可配 | P1 |
| M48.6 | 客户账户用户组 | Manager 角色可按用户组管理 | P0 |
| M48.7 | 用户组权限 | 新增 `Manage customer accounts` / `Manage user groups` 权限点 | P0 |

### 4.50 移动端 SDK(M49)

> 当前 RDP 仅 M12.1 (.NET) 与 M12.6–M12.8(Java/C++/Python/Go)覆盖服务端集成,缺移动端。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M49.1 | Android SDK | Kotlin/Java,封装 LMC;支持节点锁定/试用/激活验证 | P1 |
| M49.2 | iOS SDK | Swift/Objective-C;支持 App Attest + 节点锁定 | P1 |
| M49.3 | Android 大内存页 | SDK 支持 Android 12+ 16KB 页大小 | P1 |
| M49.4 | Activation scope 迁移 | 激活数据支持从 user 范围迁移到 system-wide 范围(macOS/Windows) | P1 |
| M49.5 | 移动端离线激活 | 移动 SDK 支持离线激活/反激活 | P1 |
| M49.6 | 移动端 Release 通道 | iOS/Android 端可走 Release Channel 升级检查(M9) | P2 |

### 4.50 OIDC SSO 端到端(M50)

> 来源:Cryptlex `AuthenticateUserWithIdToken`(LexActivator 3.24.0+);LicenseSpring Customer Account SSO。
> 当前 RDP 仅 M13.3(内部 SSO),缺客户端激活时的 OIDC 用户身份认证。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M50.1 | SDK 端 OIDC 认证 | `AuthenticateUserWithIdToken(idToken)` 接收 IdP token 验证用户身份 | P0 |
| M50.2 | 端到端登录流 | 终端应用完成与 IdP 的 OAuth/OIDC 流程,SDK 接收 ID token | P0 |
| M50.3 | JIT 用户开通 | 首次登录时按 IdP claim 自动创建 Named User(联动 M43) | P0 |
| M50.4 | IdP 多角色 | 接收 IdP 返回的多角色 claim,映射为平台多个权限点 | P1 |
| M50.5 | IdP 配置 | Client ID / 附加 Client ID / Issuer URL / Default Role / Name&Email&Role Claim 配置 | P0 |
| M50.6 | 失败与重试 | IdP 不可达时降级到本地缓存激活,记录待同步事件 | P1 |

### 4.51 License / Product Custom Fields(M51)

> 来源:Cryptlex ViewPermissions / Allowed Values / Default Value 机制;LicenseSpring Custom Fields UX 增强(v3.243)。
> 当前 RDP 仅有 A-03 散点提及,需独立模块。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M51.1 | Product Custom Field | 产品级自定义字段,所有 license 继承 | P0 |
| M51.2 | License Custom Field | license 级自定义字段,可覆盖产品默认值 | P0 |
| M51.3 | 字段类型 | 文本 / 数字 / 日期 / 布尔 / 下拉(Allowed Values) | P0 |
| M51.4 | Allowed Values | 下拉字段可定义可选值;default 必须包含在 allowed 中 | P0 |
| M51.5 | 重置为产品默认值 | license 字段可一键重置回产品默认值 | P0 |
| M51.6 | ViewPermissions | 字段按角色控制可见性(只对特定角色可见) | P1 |
| M51.7 | 字段上限 | License metadata 上限 50(防滥用) | P0 |
| M51.8 | UI 区分 | 控制台明确区分 Product vs License Custom Fields 区域 | P0 |

### 4.52 Personal Access Token (PAT)(M52)

> 来源:Cryptlex Personal Access Token(LastUsedAt / 续登)。
> 当前 RDP 未覆盖。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M52.1 | PAT 创建 | 用户生成长期 API token,带 scope + 过期时间 | P0 |
| M52.2 | PAT 撤销 | 用户可主动撤销;支持撤销原因 | P0 |
| M52.3 | Last Used 跟踪 | 服务端记录 `lastUsedAt`,UI 可见 | P0 |
| M52.4 | Refresh Token | 登录支持 refresh token(短期 + 长期双 token)。**现状：未实现**——当前 JWT 有效期 8 小时、无 refresh 机制(见 TAD §8.1) | P0 |
| M52.5 | PAT 列表 | 用户可看本账号所有 PAT,含状态、scope、最后使用 | P0 |
| M52.6 | 过期与提醒 | PAT 临近过期 T-7 提醒 | P1 |

### 4.53 Token-Based Licensing(M53)

> 来源:Reprise RLM Token-based licensing;团队/多模块场景。
> 当前 RDP 的"token"未单独建模。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M53.1 | Token 池 | License 池中以 token 为单位,每功能消耗不同 token 数 | P1 |
| M53.2 | 动态借/还 | 一次会话消耗可变 token;模块越多消耗越多 | P1 |
| M53.3 | Token 计费报表 | 按产品/客户聚合 token 消耗 | P2 |
| M53.4 | 软/硬上限 | token 池支持 soft limit 警告 / hard limit 阻断 | P1 |
| M53.5 | 与浮动席位转换 | token 池可配置为"1 席位 = N token"换算 | P2 |

### 4.55 EULA Use Types(M54)

> 来源:Adobe EULA、LALAL.AI EULA、TeamViewer EULA 体系。
> 商业 EULA 必须区分许可用途。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M54.1 | 用途类型枚举 | 至少定义:Workstation / Server / Cloud / Enterprise / OEM / SDK / CLI | P0 |
| M54.2 | Workstation | 单人交互设备(桌面/笔记本);多人/服务端运行需升级 | P0 |
| M54.3 | Server | 多用户访问、headless、orchestration、CI/CD 自动化场景 | P0 |
| M54.4 | Enterprise/Server Use | 任何在 Server 上或多用户访问的场景,需企业授权 | P0 |
| M54.5 | OEM Use | 嵌入/捆绑/预装/再分发;需独立 OEM 协议 | P0 |
| M54.6 | CLI Use | 非交互命令行/脚本使用;按 EULA 子条款 | P1 |
| M54.7 | SDK/Plugin Use | 作为开发组件嵌入第三方产品;按 EULA 子条款 | P1 |
| M54.8 | Workstation 限额 | EULA 限制单 Named User 可激活 N 台 Workstation(如 3) | P1 |
| M54.9 | 服务禁令条款 | 明令禁止 service bureau / SaaS hosting / 公开 relay / 自动化 relay | P0 |
| M54.10 | 客户签署 | 客户在线选择用途并签署对应 EULA 版本 | P0 |

### 4.56 Webhook 事件目录(M55)

> 来源:Cryptlex Web API 全量事件;LicenseSpring v3.243–v3.258 事件。
> 当前 RDP M25 仅列 4 类事件,严重不足,需补全目录。

| ID | 事件 | 触发条件 | 优先级 |
| --- | --- | --- | --- |
| M55.1 | `license.created` / `license.issued` / `.updated` / `.deleted` | license CRUD(签发发布 `license.issued`) | P0 |
| M55.2 | `license.activated` | 首次激活 | P0 |
| M55.3 | `license.first-activated` | **首次**激活(区别于普通激活) | P0 |
| M55.4 | `license.deactivated` | 反激活 | P0 |
| M55.5 | `license.expires` | 到期 | P0 |
| M55.6 | `license.expiresAt.updated` | 过期时间被修改 | P0 |
| M55.7 | `license.suspended` / `.resumed` | 挂起/恢复 | P0 |
| M55.8 | `license.revoked` | 吊销 | P0 |
| M55.9 | `license.subscription.updated` | 订阅属性变更 | P0 |
| M55.10 | `license.subscription.expired` | 订阅到期 | P0 |
| M55.11 | `activation.created` / `.deleted` | 激活 CRUD | P0 |
| M55.12 | `activation.lease-expired` | 浮动 lease 过期未续 | P0 |
| M55.13 | `license.activation.limit-reached` | 达到最大激活数 | P0 |
| ~~M55.14~~ | ~~`trial.created` / `.expired` / `.extended` / `.updated`~~ | ~~试用生命周期~~(已裁剪:试用模块随商业化移除) | P0 |
| ~~M55.15~~ | ~~`account.trial.expired`~~ | ~~账户试用到期~~(已裁剪) | P0 |
| M55.16 | `customer.created` / `.updated` | 客户 CRUD | P1 |
| ~~M55.17~~ | ~~`order.created` / `.completed`~~ | ~~订单~~(已裁剪,移交外部销售系统) | P1 |
| M55.18 | `order.license_user.manager_removed` | license 管理者被移除 | P0 |
| M55.19 | `organization.user.created` | 组织用户创建 | P1 |
| M55.20 | `reseller.user.created` | Reseller 用户创建 | P1 |
| M55.21 | `webhook.failure.suspended` | Webhook 失败被挂起 | P0 |
| M55.22 | `feature.consumed` | 消费型特性使用 | P1 |
| M55.23 | `feature.expired` | Feature entitlement 独立到期 | P0 |
| M55.24 | `device.registered` / `.deactivated` | 设备生命周期 | P1 |
| M55.25 | `release.published` | 新发布 | P2 |

> **实现现状(2026-09 第四轮审查修正;2026-10 商业化裁剪后目录收敛为 37 条,资金流事件已移除,见 §4.59 注)**:服务端事件目录(`WebhookEventCatalogService`)共 **46 条**——在 M55.1–M55.25 基础上新增 `license.issued`、`license.renewed`、`license.extended`、`license.consumption.reset`、`license.feature.added`、`subscription.created`、`subscription.cancelled` / `subscription.canceled`、`subscription.renewed`、`subscription.payment_failed`、`payment.refunded` 等。**但目录与发布并不完全一致**:46 条中 **31 条描述带 `(planned)` 标注、无任何代码路径实际发布**(含 `license.activated`、`license.expires`、`trial.*`、`device.*`、`feature.consumed`、`customer.*`、`order.created`/`.completed` 等);实际有发布点的仅 **15 种**(`license.issued`/`.updated`/`.suspended`/`.resumed`/`.revoked`/`.renewed`/`.extended`/`.consumption.reset`/`.feature.added`、`subscription.created`/`.canceled`/`.renewed`/`.payment_failed`、`payment.refunded`、`order.license_user.manager_removed`)。订阅方不应依赖 `(planned)` 事件;以 `WebhookEventCatalogService.cs` 中的 `(planned)` 标注为准。

### 4.56 集成与第三方生态(M56)

> 来源:LicenseSpring 与 Cryptlex 的官方集成矩阵。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| ~~M56.1~~ | ~~Stripe~~ | ~~多 Stripe 账户配置;Webhook 双向同步~~(已裁剪,移交外部销售系统) | P0 |
| M56.2 | HubSpot | CRM 同步(客户/线索;订单部分已随商业化裁剪移交外部销售系统) | P0 |
| ~~M56.3~~ | ~~FastSpring~~ | ~~电商订单导入~~(已裁剪,移交外部销售系统) | P1 |
| M56.4 | Salesforce | CRM 同步(线索;订单部分已随商业化裁剪移交外部销售系统) | P1 |
| ~~M56.5~~ | ~~Shopify~~ | ~~电商订单导入~~(已裁剪,移交外部销售系统) | P1 |
| M56.6 | OpenTelemetry | 平台导出 traces / metrics,接入第三方 APM | P0 |
| M56.7 | Zapier / Webhook | 通用 Zapier 集成 | P2 |
| M56.8 | SSO IdP | Azure AD / Okta / Auth0 / Keycloak / Google Workspace(联动 M13.3) | P0 |

### 4.57 Local License & Local License Server(M57)

> 来源:LicenseSpring v3.251 - Local Licenses & Local License Servers。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M57.1 | 本地 License 文件 | 终端不连服务端,使用本地签名 license 文件 | P1 |
| M57.2 | 本地 License Server | 客户内网部署的轻量 server,服务一组本地 license | P1 |
| M57.3 | 周期同步 | 本地 server 周期回连主平台更新/续期 | P1 |
| M57.4 | 断网运行 | 完全断网可继续运行 N 天(由 grace period 决定) | P1 |
| M57.5 | 与 Floating Server 关系 | 与 M44 Floating Server 协同,FSv2 是 M57 的特殊形态 | P1 |

### 4.58 支付网关 / PSP 集成(M58)

> 来源:Stripe / PayPal / Adyen / Alipay / WeChat Pay / Chargebee / Recurly / Zuora / Avalara。
> 当前 RDP 仅有 M19(订阅对接)+ M56(集成)粗略覆盖,缺支付网关能力域专项。
> **本模块是商业产品 GA 的硬性前置**。
>
> **(2026-10 商业化裁剪:M58 支付网关/PSP 集成整章已随商业化下线,资金流由外部销售系统承接;仅订阅续期语义保留(见 §4.58.7 注与 §4.59 注)。各小节注记如下,里程碑 ID 保留备查。)**

#### 4.58.1 PSP 适配器与基础设施

> **(本节已随商业化裁剪移除,PSP 适配器/配置中心/入站 Webhook 等基础设施移交外部销售系统;里程碑 ID 保留备查。)**

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- | --- |
| M58.1 | `IPaymentProvider` 抽象适配器 | 统一支付接口:订阅/扣款/退款/查询/Webhook;支持热插拔 PSP 实现 | P0 |
| M58.2 | PSP 配置中心 | 控制台为每个 PSP 维护多套配置(凭证、Webhook 密钥、模式 test/live) | P0 |
| M58.3 | PSP 健康度 | 心跳探测 PSP API;异常告警;自动禁用不可用 PSP | P0 |
| M58.4 | Test / Sandbox 模式 | 每个 PSP 独立 test + live 凭据,租户级隔离 | P0 |
| M58.5 | 凭证加密存储 | PSP API Key / Secret 使用 KMS 加密;UI 录入时仅返回末位 | P0 |
| M58.6 | 多 PSP 并行 | 同一平台可同时配置多个 PSP,按产品/区域路由 | P1 |
| M58.7 | PSP 切换 / 迁移 | 一键将订阅从 PSP A 迁到 PSP B,保留业务连续性 | P2 |
| M58.8 | Webhook 端点 | `/v1/webhooks/payment/{provider}` 统一入口 + 签名验证 | P0 |
| M58.9 | 幂等性 | 所有写操作支持 `Idempotency-Key`,防重复扣款 | P0 |
| M58.10 | 重试与死信 | 失败按指数退避重试;最终失败入死信队列;手动重放 | P0 |

#### 4.58.2 PSP 矩阵(优先级排序)

> **(本节已随商业化裁剪移除,各 PSP 收款渠道适配移交外部销售系统;M58.21–M58.25 已标注作废,其余里程碑 ID 保留备查。)**

| ID | PSP | 优先级 | 集成范围 |
| --- | --- | --- | --- |
| M58.11 | **Stripe** | P0 | Checkout / Billing / Tax / Invoicing / Customer Portal |
| M58.12 | **PayPal** | P1 | Checkout / Subscriptions / Webhooks |
| M58.13 | **Adyen** | P2 | for Platforms / 多币种 / 全球收单 |
| M58.14 | **Braintree** | P2 | PayPal + Credit Card 统一 |
| M58.15 | **Alipay / 支付宝** | P1 | 当面付 / App / 手机网站 / 电脑网站 / 周期扣款 |
| M58.16 | **WeChat Pay / 微信支付** | P1 | JSAPI / Native / H5 / App / 委托代扣 |
| M58.17 | **UnionPay / 银联** | P2 | 网关支付 / 二维码 |
| M58.18 | **Razorpay** | P2 | 印度/东南亚市场 |
| M58.19 | **Mercado Pago** | P2 | 拉美市场 |
| M58.20 | **Lemon Squeezy** | P2 | 数字商品 / 简化集成 |

#### 4.58.3 订阅与计费平台

> **注（2026-10 商业化裁剪）**：资金流能力（计费平台对接、优惠券、Dunning、发票、税务、支付事件等）已整体移交外部销售系统，本节及 4.58.9、M59 中相关里程碑作废（删除线标注）；本系统仅保留订阅续期与出站事件通知。

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| ~~M58.21~~ | ~~Chargebee~~ | ~~抽象层适配;订阅/优惠券/计费周期~~（已裁剪，移交外部销售系统） | P1 |
| ~~M58.22~~ | ~~Recurly~~ | ~~抽象层适配~~（已裁剪） | P2 |
| ~~M58.23~~ | ~~Zuora~~ | ~~抽象层适配(企业级)~~（已裁剪） | P2 |
| ~~M58.24~~ | ~~Stripe Billing~~ | ~~通过 Stripe 适配器(M58.11)间接支持~~（已裁剪） | P0 |
| ~~M58.25~~ | ~~FastSpring~~ | ~~数字商品 + 全球税务一体化(联动 M56.3)~~（已裁剪） | P1 |
| M58.26 | 抽象订阅模型 | 平台不直接依赖任一 PSP,内部订阅模型与 PSP 解耦 | P0 |

#### 4.58.4 税务与发票

> **(本节已随商业化裁剪移除,税务/发票移交外部销售系统;里程碑 ID 保留备查。)**

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M58.27 | 税务计算 | 自动按地区计算 VAT / 销售税 / 增值税 | P0 |
| M58.28 | Stripe Tax | 通过 M58.11 间接集成 | P0 |
| M58.29 | Avalara AvaTax | 全球税务计算 | P1 |
| M58.30 | TaxJar | 美国销售税 | P2 |
| M58.31 | 反向征税 | B2B 跨境 VAT 反向征税(欧盟) | P0 |
| M58.32 | 税号校验 | VIES(欧盟 VAT 号)、EIN(美国)、中国税号 | P0 |
| M58.33 | 发票模板 | 按地区语言生成合规发票(中/英/德/日) | P0 |
| M58.34 | 电子发票 | 中国电子发票(增值税电子普通发票/专用发票) | P1 |
| M58.35 | 发票存档 | 不可变存档 ≥ 10 年(各国法规) | P0 |

#### 4.58.5 安全与合规

> **(本节已随商业化裁剪移除:PCI/3DS/反欺诈/PSP Webhook 验签等随支付下线,M58.39 数据驻留亦已裁剪;里程碑 ID 保留备查。)**

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M58.36 | PCI DSS SAQ-A | 不接触卡号,通过 PSP iframe / redirect 收单 | P0 |
| M58.37 | 3D Secure / SCA | 欧盟 PSD2 强客户认证,Stripe `paymentIntent` 强制 | P0 |
| M58.38 | 反欺诈 | 接入 PSP 反欺诈(Stripe Radar / Adyen Risk);高风险订单人工审核 | P0 |
| M58.39 | 数据驻留 | 按客户要求将账单数据驻留在特定区域 | P0 |
| M58.40 | 凭证轮换 | PSP Secret 周期性轮换;支持零停机轮换 | P1 |
| M58.41 | Webhook 签名验证 | 各 PSP 签名机制;时间戳容差;重放保护 | P0 |
| M58.42 | Webhook 死信 | 多次验证失败的 webhook 入死信,人工重放 | P0 |
| M58.43 | 审计 | 每次扣款/退款/订阅变更写不可变审计;含 actor 快照 | P0 |

#### 4.58.6 支付方式与货币

> **(本节已随商业化裁剪移除,多币种/本地支付方式/汇率等移交外部销售系统;里程碑 ID 保留备查。)**

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M58.44 | 多币种支持 | 按 ISO 4217;按客户/区域自动选择 | P0 |
| M58.45 | 实时汇率 | 通过 PSP 锁定汇率(Stripe 当时汇率) | P0 |
| M58.46 | 本地支付方式 | iDEAL(NL)/ SOFORT(DE)/ Klarna / Afterpay / Boleto(BR) | P1 |
| M58.47 | 加密货币 | BTC / ETH / USDC(可选,需法务审核) | P2 |
| M58.48 | 银行转账 | SEPA / ACH / 线下对公转账,人工对账 | P1 |
| M58.49 | 信用账户 | 平台 B2B 信用额度(账期),非 PSP 实现 | P1 |

#### 4.58.7 订阅生命周期

> **(2026-10 商业化裁剪:支付/扣款相关条目作废,移交外部销售系统;本系统保留订阅续期——后台每小时自动扫描 + `POST /v1/admin/subscriptions/renewal/execute` 手动触发。)**

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| ~~M58.50~~ | ~~订阅创建~~ | ~~客户选择套餐 → 引导支付 → 创建 license(联动 M46)~~(已裁剪,移交外部销售系统) | P0 |
| ~~M58.51~~ | ~~试用转付费~~ | ~~试用结束自动尝试扣款;成功转付费,失败降级~~(已裁剪:试用与支付均已移除) | P0 |
| M58.52 | 续费 | 订阅续期由后台每小时自动扫描执行,亦可经 `POST /v1/admin/subscriptions/renewal/execute` 手动触发;成功延长 license 有效期并发 `subscription.renewed`,失败发 `subscription.payment_failed`(原基于 `SubscriptionInterval` 的自动扣款续费已随商业化裁剪移除) | P0 |
| ~~M58.53~~ | ~~续费失败 Dunning~~ | ~~智能重试(1/3/5/7 天);邮件通知;最终失败吊销~~（已裁剪，催收移交外部销售系统；本系统保留订阅续期自动重试） | P0 |
| M58.54 | 续费提醒 | T-7/3/1 通知;可关闭 | P0 |
| ~~M58.55~~ | ~~升降级 Proration~~ | ~~升级立即生效按比例扣款;降级下次周期生效~~(已裁剪,移交外部销售系统) | P1 |
| M58.56 | 暂停 / 恢复 | 客户主动暂停订阅,期间 license 仍可用 | P1 |
| M58.57 | 取消 | 立即取消 / 周期末取消;取消后 grace period | P0 |
| M58.58 | 重新激活 | 取消后 N 天内可恢复,保留历史数据 | P1 |
| M58.59 | 订阅日志 | 记录所有订阅变更(创建/续费/失败/取消/恢复) | P0 |

#### 4.58.8 退款与争议

> **(本节已随商业化裁剪移除,退款/争议处理移交外部销售系统;里程碑 ID 保留备查。)**

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M58.60 | 全额退款 | 触发 license 吊销 + 设备清理 + 退款记录 | P0 |
| M58.61 | 部分退款 | 按订单项部分退款,license 同步缩减 | P1 |
| M58.62 | 按比例退款 | 客户主动取消时按已使用天数扣留 | P1 |
| M58.63 | 退款审批流 | 大额退款需 Sales Manager 审批 | P1 |
| M58.64 | 退款原因 | 必填原因,标签化(不满意/重复购买/欺诈/其它) | P0 |
| M58.65 | 争议 / Chargeback | PSP 争议 webhook 触发内部告警 + 标记客户 | P0 |
| M58.66 | 争议处理 | 收集证据,提交 PSP,跟踪结果 | P1 |

#### 4.58.9 优惠与营销（整节已随商业化裁剪作废）

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| ~~M58.67~~ | ~~优惠券~~ | ~~折扣码;百分比 / 固定金额;有效期;使用上限~~（已裁剪） | P0 |
| ~~M58.68~~ | ~~首次优惠~~ | ~~客户首次购买自动应用首单折扣~~（已裁剪） | P1 |
| ~~M58.69~~ | ~~试用延长~~ | ~~营销活动批量延长试用~~（已裁剪） | P1 |
| ~~M58.70~~ | ~~推荐奖励~~ | ~~推荐人/被推荐人双向奖励;基于 PSP 信用余额~~（已裁剪） | P2 |
| ~~M58.71~~ | ~~套餐升级券~~ | ~~限定升级使用的折扣~~（已裁剪） | P2 |

#### 4.58.10 报表与对账

> **(本节已随商业化裁剪移除,对账/营收分析移交外部销售系统;里程碑 ID 保留备查。)**

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M58.72 | 每日对账 | 平台交易 vs PSP 交易,差异告警 | P0 |
| M58.73 | 月度对账 | 月度账单核对;异常项标记 | P0 |
| M58.74 | 营收分析 | MRR / ARR / Churn / LTV / ARPU | P1 |
| M58.75 | 退款分析 | 退款率、原因分布、趋势 | P1 |
| M58.76 | 失败率监控 | PSP 失败率;按错误码分析 | P1 |
| M58.77 | 现金流水 | 按区域/币种/产品的现金流入报表 | P1 |
| M58.78 | 导出 | 财务报表导出 CSV / Excel / 与 ERP 同步 | P1 |

#### 4.58.11 私有化与自托管考虑

> **(本节已随商业化裁剪移除,私有化 PSP 配置/账单导出移交外部销售系统;里程碑 ID 保留备查。)**

| ID | 功能 | 验收标准 | 优先级 |
| --- | --- | --- |
| M58.79 | 私有化 PSP 配置 | 私有化部署客户可使用自己 PSP 凭证,平台不接触 | P0 |
| M58.80 | PSP 凭证不外传 | 私有化环境下,平台不上送任何 PSP 凭证到厂商云 | P0 |
| M58.81 | 私有化账单导出 | 私有化部署支持完整账单导出,自托管存档 | P0 |
| M58.82 | PSP 模拟器 | 提供本地 PSP 模拟服务,用于私有化冒烟测试 | P2 |

### 4.59 支付相关 Webhook 事件(M59)

| ID | 事件 | 触发条件 | 优先级 |
| --- | --- | --- | --- |
| ~~M59.1~~ | ~~`payment.succeeded`~~ | ~~扣款成功~~(已裁剪,移交外部销售系统) | P0 |
| ~~M59.2~~ | ~~`payment.failed`~~ | ~~扣款失败~~(已裁剪,移交外部销售系统) | P0 |
| ~~M59.3~~ | ~~`payment.refunded`~~ | ~~退款成功~~(已裁剪,移交外部销售系统) | P0 |
| ~~M59.4~~ | ~~`payment.partial_refunded`~~ | ~~部分退款~~(已裁剪,移交外部销售系统) | P1 |
| ~~M59.5~~ | ~~`payment.dispute.created`~~ | ~~客户发起争议~~(已裁剪,移交外部销售系统) | P0 |
| ~~M59.6~~ | ~~`payment.dispute.closed`~~ | ~~争议关闭~~(已裁剪,移交外部销售系统) | P0 |
| M59.7 | `subscription.created` | 订阅创建 | P0 |
| M59.8 | `subscription.activated` | 首次扣款成功 | P0 |
| M59.9 | `subscription.renewed` | 续费成功 | P0 |
| M59.10 | `subscription.payment_failed` | 续费失败 | P0 |
| M59.11 | `subscription.canceled` | 取消订阅 | P0 |
| M59.12 | `subscription.paused` / `.resumed` | 暂停 / 恢复 | P1 |
| M59.13 | `subscription.upgraded` / `.downgraded` | 升降级 | P1 |
| ~~M59.14~~ | ~~`invoice.created` / `.paid` / `.void`~~ | ~~发票生命周期~~（已裁剪） | P0 |
| ~~M59.15~~ | ~~`coupon.applied`~~ | ~~优惠码应用~~（已裁剪） | P2 |
| ~~M59.16~~ | ~~`tax.calculated`~~ | ~~税务计算结果~~（已裁剪） | P2 |
| ~~M59.17~~ | ~~`payout.paid`~~ | ~~PSP 打款到账(用于核对)~~（已裁剪） | P1 |
| ~~M59.18~~ | ~~`webhook.psp.signature_failed`~~ | ~~PSP webhook 签名校验失败(防欺诈)~~（已裁剪） | P0 |

> **实现现状(2026-10 商业化裁剪后)**:出站 Webhook 事件目录已收敛为许可/订阅语义事件(37 条);资金流相关事件(`payment.*` / `invoice.*` / `coupon.applied` / `tax.calculated` / `payout.paid` / `webhook.psp.signature_failed` 等)已随支付模块下线移除。订阅续期由后台每小时自动扫描执行(亦可经 `POST /v1/admin/subscriptions/renewal/execute` 手动触发),成功后自动延长关联许可证有效期并发 `subscription.renewed` 事件;失败发 `subscription.payment_failed`。订单/支付/催收由外部销售系统承接。

### 4.60 M19 / M56 与 M58 关系说明

> 避免重复与冲突,做如下整合:

| 旧条目 | 整合到 | 说明 |
| --- | --- | --- |
| M19 外部订阅对接(原 P0) | **M58** 全部 | M19 的 8 个条目并入 M58.50–M58.59;M19 标"已合并到 M58" |
| M56.1 Stripe | **M58.11** | 同主题,M58.11 更细 |
| M56.3 FastSpring | **M58.25** | 完整化为独立适配器 |
| M19.7 对账报表 | **M58.72–M58.78** | 拆为多个细粒度 |
| M19.6 退款/取消联动 | **M58.60–M58.66** | 拆为多个细粒度 |
| M19.8 价格/税率透传 | **M58.27–M58.35** | 拆为税务专项 |

> **修订**:M19 / M56 的相关条目在 v1.0 终稿中保留条目编号但**链接到 M58 对应子条目**,以保证追溯完整。
>
> **(2026-10 商业化裁剪:M19/M56/M58 中的资金流相关条目均已随商业化下线或移交外部销售系统,见各节注记。)**

---

## 5. 非功能需求

| 维度 | 要求 |
| --- | --- |
| 性能 | 在线验证 P95 < 100ms(单实例、10w 活跃授权);激活 P95 < 300ms |
| 可用性 | 单实例 99.5%;HA 99.9% |
| 扩展性 | 水平扩展无状态;席位状态外置;读写分离 |
| 安全 | TLS 全链路;私钥 KMS/HSM;签名密钥 12 个月轮换;CVE 跟踪 |
| 可观测 | 结构化日志、Prometheus、分布式追踪、操作审计 |
| 兼容性 | 客户端 SDK 向后兼容 1 主版本 |
| 私有化 | 全功能离线安装,无外网依赖,支持气隙 |
| 数据规模 | 单实例 100w 授权、1000w 审计、1000 并发验证/秒 |
| 浏览器 | 主流最近 2 版本 |

---

## 6. 数据模型(高阶 ER)

```
Tenant ─┬─ User ─── Role ─── Permission
        ├─ Organization (层级树) ── Reseller
        ├─ Product ─┬─ ProductVersion
        │           ├─ Feature
        │           ├─ LicenseTemplate ── ValidationRule
        │           └─ Bundle ── BundleItem
        ├─ License ─┬─ LicenseFeature (含 consumption 元数据)
        │           ├─ Activation
        │           ├─ Device ── Heartbeat
        │           ├─ ConsumptionLog
        │           ├─ RefreshToken
        │           └─ LicenseEvent (状态变更链)
        ├─ Order ── Invoice ── Payment   (已随商业化裁剪移除)
        ├─ CustomerSubscription (外部对接)   (已随商业化裁剪移除)
        ├─ BrandProfile (白标)   (已随商业化裁剪移除)
        ├─ Release ── ReleaseFile ── Channel
        ├─ ApiKey ── Scope
        ├─ AuditLog (不可变,actor 快照)
        ├─ WebhookEndpoint ── WebhookDelivery
        ├─ Ticket ── TicketEvent
        ├─ Plan ── Subscription (商业;Plan 保留为许可配额语义,商业订阅部分已裁剪)
        └─ SystemKey (RSA 密钥版本)
```

---

## 7. API 概览(主要端点)

| 模块 | 端点示例 |
| --- | --- |
| 管理 API | `POST /v1/admin/products` `POST /v1/admin/licenses/{id}/suspend` |
| 客户 API | `POST /v1/customer/licenses/activate` `POST /v1/customer/licenses/heartbeat` |
| 用量 API | `POST /v1/customer/licenses/{id}/features/{code}/consume` |
| 离线 | `POST /v1/customer/licenses/refresh-file` `POST /v1/customer/licenses/airgap-activate` `POST /v1/customer/licenses/airgap-decode` `POST /v1/customer/licenses/{licenseId}/airgap-sync` `POST /v1/portal/offline/airgap-activate` `POST /v1/portal/offline/upload-req` |
| 公钥/吊销 | `GET /v1/keys`(匿名公开,签名公钥全版本分发) `GET /v1/customer/licenses/revocations`(客户 JWT) |
| 浮动 | `POST /v1/leases/checkout` `POST /v1/leases/heartbeat` `POST /v1/leases/release` `GET /v1/leases`(独立浮动服务器,仅 `X-Api-Key` 认证) |
| 升级 | `GET /v1/releases/update?productId&platform&version&key` |
| 公开 | `GET /v1/healthz` `GET /v1/status` `GET /v1/error-codes`(不存在 `GET /v1/openapi.json`;OpenAPI 仅 Development 挂 `/swagger/v1/swagger.json`) |
| 订阅续期 | `POST /v1/admin/subscriptions/renewal/execute`(手动触发,后台每小时自动扫描;原 `POST /v1/billing/*` 商业端点已随商业化裁剪移除) |
| Webhook | 出站投递重放走管理端 `POST /v1/admin/webhooks/deliveries/{id}/replay`(返回 200);原 PSP 入站 `POST /v1/webhooks/payment/{provider}` 已随商业化裁剪移除 |

详细契约:OpenAPI 3.1 文档(发布到 `docs.openapi.yaml`)。

---

## 8. 部署形态

| 形态 | 场景 | 关键能力 |
| --- | --- | --- |
| On-Premise(主) | 客户自有服务器 | 离线安装、密钥本地化、备份/恢复、HA |
| Air-gapped | 完全物理隔离 | 文件/字符串模式;离线激活/refresh |
| Cloud Hosted(可选) | 厂商运营 | 多区域、KMS、SOC2、状态页 |

部署产物:
- Docker Compose / Helm Chart / 离线安装包
- OVA / QCOW2 镜像(可选)
- CLI 工具:`lmcli hardware-id | keygen`(`src/LicenseManager.Tools`,仅硬件标识与 RSA 密钥对生成;init/backup/restore/migrate 为路线图)

---

## 9. 安全与合规

详见 M27 与 M35。要点:
- 数据分类与脱敏
- 加密:传输 TLS 1.2+,静态 AES-256,密钥 KMS/HSM
- 审计:actor 不可变快照
- 漏洞:内部 SCA + 外部 Pen Test + Bug Bounty
- 隐私:DSR、同意管理(数据驻留已随商业化裁剪移除)
- 合规:ISO 27001 路径、SOC2 控制项映射、GDPR/个保法

---

## 10. 商业化要求(摘要)

> **(2026-10 商业化裁剪:本摘要中资金流相关要求(计费/套餐售卖/退款策略等)已移交外部销售系统;本平台聚焦许可签发/激活/设备/用量与订阅续期语义。)**

| 维度 | 要求 |
| --- | --- |
| 售卖形态 | 本地 License + 可选云托管 |
| 计费维度 | 被管理授权数 + 浮动席位 + SDK 调用量 |
| 套餐 | Free / Pro / Business / Enterprise |
| 售卖工具 | 竞品对比、ROI 计算器、Demo、Trial、迁移工具 |
| 法律 | EULA / DPA / Privacy / AUP / SLA / Subprocessor |
| 客户成功 | 工单 / 支持等级 / CSM / Onboarding / QBR / NPS |
| 营销 | 案例 / Whitepaper / Webinar / 集成市场 / 合作伙伴门户 |
| 文档 | 文档站 / 用户指南 / 管理员指南 / API Ref / SDK 教程 |
| 培训 | 学习路径 / 实验环境 / 认证 |
| 运营 | 状态页 / 路线图 / 公开 Changelog / 漏洞奖励 / 信任中心 |

**GA 评审 checklist(GRB)**:状态页 + SLA + 文档站 + 信任中心 + CVE 披露 + Demo + 商业 license 维度的计费可用(退款策略/Demo/Trial/计费相关项已随商业化裁剪移交外部销售系统或下线)。

**"鸡生蛋"原则**:本平台用本平台自许可(自洽演示)。

---

## 11. 里程碑

> **(2026-10 商业化裁剪注:下列里程碑列表中 M18(订单)、M19(外部订阅对接)、M20(品牌)、M22.8、M23.7、M26(计费/报价)、M30.2/M30.4/M30.7/M30.9(报价/试用/商机)、M36.3/M36.8、M37(沙箱)、M40(报价/结算)、M46(订阅策略,保留续期语义)等资金流/商业相关条目已随商业化裁剪移除或移交外部销售系统;列表原文保留以便追溯。)**

### MVP v1.0
M1.1/M1.3/M1.4、M2.1/M2.3/M2.6、M3.1–M3.9/M3.13–M3.16、M4.1–M4.4、M5.1–M5.3/M5.6、M6.1–M6.3、M7.1–M7.5、M10.3、M12.1–M12.3/M12.5、M13.1/M13.2/M13.6/M13.7、M14.1/M14.2、M15.1/M15.2、M16.1–M16.4/M16.7/M16.9、M22.2–M22.4/M22.6/M22.8、M23.1–M23.7、M24.1–M24.5/M24.8、M26.1–M26.3、M27.1–M27.5、M28.1–M28.3、M29.1–M29.6、M30.1/M30.3/M30.4、M31.1–M31.5、M32.4、M33.1–M33.3、M34.1–M34.7、M35.1/M35.4/M35.8

### v1.1(V1.0 之后)
M1.2/M1.5/M1.6/M1.7、M2.2/M2.5、M3.10/M3.11/M3.15、M4.5、M5.4/M5.6、M6.4/M6.5、M7.6–M7.8、M8.1–M8.4、M9.1–M9.5、M10.1/M10.5/M10.6、M11.1–M11.4、M12.4/M12.9/M12.10、M13.3–M13.5/M13.8、M14.3/M14.5/M14.6、M15.3/M15.4/M15.6、M16.5/M16.6/M16.10、M17.1–M17.3、M18.1–M18.5、M19.1–M19.6、M20.1/M20.3、M21.1–M21.4、M22.1/M22.5、M24.6/M24.7、M25.1–M25.4、M26.4–M26.8/M26.10、M27.6/M27.7、M28.4–M28.7、M30.2/M30.5/M30.6、M31.6/M31.9、M32.1/M32.2/M32.5/M32.7/M32.8、M33.4–M33.6/M33.9/M33.10、M34.8–M34.10、M35.2/M35.3

### v1.2(V1.1 之后)
M3.12、M4.6、M5.5、M6.6、M7.9、M8.5/M8.6、M9.6–M9.8、M10.2/M10.4、M11.5、M17.4–M17.6、M19.3/M19.7/M19.8、M20.2/M20.4–M20.6、M21.3、M22.7、M26.9、M28.8/M28.9、M30.7–M30.10、M31.7/M31.8/M31.10、M32.3/M32.6、M33.7/M33.8、M35.5–M35.7

### v1.0 同步发布(对标 v1.0 新能力)
- **M43 Named User** + **M50 OIDC SSO** + **M47 Entitlement Sets** + **M48 License Manager/User** + **M46 Subscription Policy** + **M44 Floating Server v2** + **M45 Lease 生命周期** + **M55 Webhook 事件目录** + **M56 OpenTelemetry 与 CRM 集成** + **M51 Custom Fields** + **M52 PAT** + **M54 EULA Use Types** — 与 v1.0 同期 GA,作为商业级 EULA/合规的硬性前置

---

## 12. 验收标准

| 类别 | 验收项 |
| --- | --- |
| LicenseManager.Core | 1:1 命名重构,无功能变更;全部原 Aegis 测试通过;NuGet 包发布;升级指南 |
| 功能 | MVP 所有 P0 模块通过功能验收用例 |
| 性能 | 性能指标在 5 节达标 |
| 安全 | 渗透测试通过;密钥管理规范;审计不可篡改 |
| 私有化 | 离线安装成功;气隙激活/refresh 闭环;备份恢复演练通过 |
| 商业 GA | GRB 全部勾选 |
| 文档 | 13 节文档清单全部就绪 |
| 合规 | ISO 27001 / GDPR 路径清晰;CVE 披露页上线 |

---

## 13. 开放问题

1. 跨语言 SDK(M12.6–M12.8)目标语言优先级?
2. SSO 对接的具体 IdP(Azure AD / Okta / Keycloak)?
3. 数据库选型(PostgreSQL / SQL Server / MySQL)?
4. HA 部署目标 RTO/RPO?
5. 文档站框架(MkDocs / Docusaurus / 自研)?
6. ~~计费引擎自研或对接 Chargebee/Stripe Billing?~~(已随商业化裁剪作废,资金流由外部销售系统承接)
7. ~~OEM/嵌入式报价模型细节?~~(已随商业化裁剪作废,报价移交外部销售系统)
8. Bug Bounty 平台(HackerOne / OpenBugBounty)?

---

## 15. Web 前端通用要求(适用于所有 Web 应用与资产)

> §3.4 列出的所有 Web 应用与资产必须遵守本节横切要求。

### 15.1 技术栈(建议与替代)

| 层 | 推荐 | 替代 | 适用 |
| --- | --- | --- | --- |
| 框架 | **Vue 3 + Vite + TypeScript** | React 18 + Vite / SvelteKit | 管理控制台、门户、合作伙伴 |
| UI 库 | **Element Plus** | Ant Design / Naive UI / shadcn-vue | 控制台、门户 |
| 状态 | **Pinia** | Vuex 4 / TanStack Query | 控制台、门户 |
| 路由 | Vue Router 4 | - | 控制台、门户 |
| 样式 | **UnoCSS / SCSS 变量** | Tailwind | 全部 |
| 国际化 | **vue-i18n** | react-intl | 全部 |
| 数据 | **Axios + OpenAPI 客户端生成** | - | 全部 |
| 图表 | ECharts | Chart.js / Recharts | 控制台 |
| 富文本 | TipTap | ProseMirror | 文档站、博客 |
| 文档站 | **Docusaurus** | MkDocs / VitePress | §4.39 |
| 营销站 | **Astro / Nuxt 3** | Next.js + 静态导出 | §4.36 |
| 测试 | **Vitest + Playwright** | Jest + Cypress | 全部 |
| 监控 | **Sentry** + Web Vitals | DataDog RUM | 全部 |

> 强制项:TypeScript、ESLint + Prettier、Conventional Commits、语义化版本。

### 15.2 主题与多品牌

- **设计令牌**(Design Tokens)统一:颜色、间距、字体、圆角、阴影 → 编译期生成 CSS 变量。
- **多品牌白标**:`Brand Profile` 驱动(联动 M20),租户级覆盖 logo/主色/favicon/legal 链接。(品牌配置已随商业化裁剪移除,仅保留单品牌主题/暗色模式能力)
- **暗色模式**:CSS 变量切换;跟随系统;持久化偏好。
- **可访问性对比度**:WCAG AA(正文 4.5:1,大字号 3:1)。
- **主题预览**:管理员可在控制台预览品牌主题。

### 15.3 国际化(i18n)

- **支持语言**:中(zh-CN)、英(en-US)MVP,可扩展日(ja-JP)、德(de-DE)。
- **URL 策略**:`/{lang}/path`;默认语言无前缀;hreflang 完整。
- **语言包**:`./locales/{lang}.json`;支持运行时热加载;CI 校验缺译。
- **数字/日期/货币**:使用 `Intl.*` API;按用户时区。
- **复数/性别**:ICU MessageFormat。
- **RTL 预留**(可选):`dir="rtl"` 工具类。
- **文档/官网/控制台/门户/状态页统一语言切换**;同一品牌下可独立设置。

### 15.4 响应式

| 应用 | 断点 |
| --- | --- |
| 管理控制台 | ≥1280 桌面,≥768 平板(简化侧栏) |
| 客户门户 | ≥1024 桌面,≥768 平板,≥375 移动(只读 + 关键操作) |
| 合作伙伴门户 | ≥1280 桌面,≥768 平板 |
| 营销站 | 移动优先(≥320 移动,≥768 平板,≥1024 桌面) |
| 文档站 | ≥1024 桌面,≥768 平板,≥375 移动 |
| 状态页 | ≥320 移动,≥1024 桌面 |

### 15.5 无障碍(A11y)

- **WCAG 2.1 AA** 达标,目标 AAA。
- 键盘可达:全部交互元素 Tab 顺序合理,焦点环明显。
- 屏幕阅读器:ARIA 标签、live region。
- 颜色对比:文本/背景/交互态。
- 动效:`prefers-reduced-motion` 友好。
- 表单:label/错误/说明三段式。
- **审计工具**:Axe / Lighthouse CI 接入,PR 必须通过。

### 15.6 性能预算

| 指标 | 控制台/门户 | 营销站 | 文档站 |
| --- | --- | --- | --- |
| 首屏 LCP | < 2.0s | **< 2.5s** | < 2.5s |
| FID/INP | < 100ms | < 100ms | < 100ms |
| CLS | < 0.1 | < 0.1 | < 0.1 |
| 初始 JS | < 400KB gz | < 150KB gz | < 200KB gz |
| 路由切换 | < 300ms | - | < 300ms |

- 路由级代码分割、CDN 缓存、HTTP/3、Service Worker(可选)。
- 资源:`<link rel="preload">` 关键字体与图标。
- Lighthouse CI 卡阈值,不达标不发版。

### 15.7 安全(CSP、XSS、CSRF、依赖)

- **CSP**:`default-src 'self'` + 白名单;严格 nonce;禁用 `unsafe-eval`。
- **Trusted Types**(可选);**XSS** 防御:Vue 模板默认转义,禁止 `v-html` 直渲用户输入。
- **CSRF**:同源 token 或 `SameSite=Lax` Cookie + 自定义头。
- **依赖扫描**:`npm audit` / `snyk` / `osv-scanner`;CI 卡高危 CVE。
- **第三方脚本**:仅允许白名单;通过 `<iframe sandbox>` 隔离。
- **SRI**:外部资源 `integrity` 必填。
- **点击劫持**:`X-Frame-Options: DENY`(营销站允许自域名白名单)。
- **登录态**:`HttpOnly` + `Secure` + `SameSite=Lax` Cookie;JWT(短时)+ Refresh(长时)。
- **MFA**:关键角色强制 TOTP/WebAuthn(联动 M13.4)。

### 15.8 错误处理与可观测

- 全局 Error Boundary;局部失败不崩;用户可重试/上报。
- 上报:Sentry(JS + 源码 map);RUM(Web Vitals / 长任务 / API 失败)。
- 日志:`console.*` 由构建去除;线上仅 error/warn。
- 链接监控:`/healthz` / `/readyz`;前端用轻量心跳上报存活。
- 行为埋点:统一 SDK(产品分析,联动 M30.7)。

### 15.9 SEO(营销站/文档站/状态页/官网)

- SSR / 静态预渲染;`sitemap.xml` / `robots.txt`。
- 结构化数据(JSON-LD):`Organization` / `Product` / `FAQ` / `Article` / `BreadcrumbList`。
- Open Graph + Twitter Card。
- Canonical URL;hreflang 完整。
- 图像:`<img alt>` + 懒加载 + `srcset` + WebP/AVIF。

### 15.10 嵌入与 Widget

- 提供 **Web Component**(Custom Element)版关键组件:
  - `<lm-license-activator>`:激活码输入与状态
  - `<lm-license-status>`:实时状态徽章
  - `<lm-feature-check>`:特性门控开关
  - `<lm-device-manager>`:设备管理
- **分发方式**:ESM CDN(可选)、`<script type="module">`、NPM 包 `@license-manager/embed`。
- **隔离**:Shadow DOM + `postMessage` 桥;样式 token 化注入。
- **授权**:域名白名单;`apiKey` 显式传入;使用方提供 nonce 校验。
- **Iframe 备选**:沙箱 + `postMessage` + 高度自适应。
- **使用方文档**:嵌入指南(§4.39 文档站托管)+ 演示页面。
- **限频**:每 IP/QPS 限流,公开统计看板(嵌入方可见)。

### 15.11 浏览器兼容

| 应用 | 兼容 |
| --- | --- |
| 控制台/门户 | Chrome / Edge / Firefox / Safari 最近 2 主版本;不支持 IE |
| 营销站/文档站 | 同上 + 移动浏览器(iOS Safari 15+,Android Chrome 100+) |
| 嵌入组件 | 同上 + ES2020 polyfill 自动按需 |

### 15.12 CI/CD 与质量门

- **CI**:lint、type-check、单测、E2E、Lighthouse、依赖扫描、SBOM 生成。
- **CD**:`main` → 自动构建 → 内部 preview 环境 → 生产。
- **PR 合并门**:
  - 单测覆盖率 ≥ 80%(控制台/门户),≥ 70%(营销/文档/状态页)
  - Lighthouse 分数 ≥ 90(营销/文档)
  - 0 个高危 CVE
  - Axe 0 个 critical issue
- **预览环境**:每 PR 一份,带过期时间(7 天)。

### 15.13 移动端与原生(后续)

- 官网/门户做 H5 响应式适配(已完成)。
- **可选后续**:管理控制台原生 App(React Native / Flutter);不在 MVP 范围。

### 15.14 第三方服务依赖(管理面/营销面)

| 用途 | 推荐 | 备选 | 替代降级 |
| --- | --- | --- | --- |
| 文档搜索 | Algolia DocSearch | 本地 MiniSearch | - |
| 分析 | Plausible / Umami | GA4 | 本地 |
| 错误监控 | Sentry | GlitchTip | 自托管 Sentry |
| 反馈 | Canny | Productboard | 简易表单 |
| 邮件 | Postmark | SendGrid | SMTP |
| CMS | Strapi / Sanity | Contentful | Markdown + Git |
| 状态页 | Better Uptime | Atlassian Statuspage | 自托管 status-page |
| Webhook 测试 | webhook.site | RequestBin | 本地 |
| 设计 | Figma | Sketch | - |

所有第三方依赖列入 M29.4 Subprocessor 列表;私有化部署需提供"断网 fallback"或自托管方案。

---

## 16. 术语表

| 术语 | 含义 |
| --- | --- |
| LMC | LicenseManager.Core(原 Aegis 重命名) |
| License | 授权凭证,经 LMC 签名 |
| Activation Key | 人类可读激活码,用于换取 license |
| License Template | 授权模板,预设许可证类型/有效期/特性 |
| Entitlement | 权利,客户在产品上拥有的特性集合 |
| Node-Locked | 节点锁定,绑定硬件 |
| Floating / Concurrent | 浮动/并发,服务端席位池共享 |
| Borrow | 借用,把浮动席位借出到离线环境 |
| HW ID | 硬件指纹 |
| Activation Request/Response | 离线激活请求/响应文件 |
| Air-gap Activation | 气隙激活,以字符串代替文件 |
| Refresh File | 离线 license 刷新文件 |
| Heartbeat | 心跳 |
| Consumption | 消费型/计量型授权 |
| Bundle | 产品组合,一张 license 包含多产品 |
| Channel | 发布渠道(stable/beta/rc) |
| Release | 软件发布(版本+平台+渠道+产物) |
| Maintenance Period | 维护期 |
| SA | Software Assurance |
| LTS | 长期支持分支 |
| EOL | End of Life |
| Reseller | 渠道商 |
| Brand Profile | 品牌档案,白标 |
| KMS/HSM | 密钥管理服务/硬件安全模块 |
| RBAC | 基于角色的访问控制 |
| On-Premise | 私有化部署 |
| SBOM | 软件物料清单 |
| ISO 27001 | 信息安全管理体系 |
| FIPS 140 | 加密模块安全标准 |
| GDPR | 欧盟通用数据保护条例 |
| CSM | Customer Success Manager |
| GRB | Go-to-market Readiness Board(GA 评审) |

---

## 附录 A. 散点需求清单(跨模块合并)

| ID | 描述 | 关联模块 |
| --- | --- | --- |
| A-01 | API Key 与 Shared Key 加密存储 | M13.8 / M5.6 |
| A-02 | 客户/授权列表分页(后端游标/总数;订单部分已随商业化裁剪移除) | M22.2 |
| A-03 | 自定义字段(产品/授权/客户) | M1.4 / M2.1 / M18.1 |
| A-04 | Webhook 失败"挂起重试"而非禁用 | M25.2 |
| A-05 | 审计 actor 不可变快照 | M14.3 |
| A-06 | 试用/激活可一次性手动 sync | M3.13 |
| A-07 | API Key 支持 label 显示 | M13.7 |
| A-08 | 客户门户 URL Token(单点访问) | M23.1 |
| A-09 | License `Not Activated` 状态 | M3.16 |
| A-10 | License 离线防回拨时钟 | M12.5 |
| ~~A-11~~ | ~~客户/订单导入外部 ID 双向关联~~(已随商业化裁剪移除) | M18.5 |
| A-12 | Webhook 订阅按事件类型/产品过滤 | M25.4 |
| A-13 | 控制台"以客户视角预览" | M22.7 |
| A-14 | 本平台自许可(自洽演示) | §10 |
| A-15 | "Platform of Platforms":多产品统一治理 | 战略 |
| ~~A-16~~ | ~~集成市场计费分成~~(已随商业化裁剪移除) | M30.6 |
| ~~A-17~~ | ~~试用到期后引导(导出/转付费/删除)~~(已随商业化裁剪移除) | M30.4 |
| ~~A-18~~ | ~~客户在控制台看合约/发票/续费日~~(已随商业化裁剪移除) | M22.8 |
| A-19 | 公开月度 changelog | M34.1 |
| ~~A-20~~ | ~~主流电商/分发平台对接~~(已随商业化裁剪移交外部销售系统) | M18.5 |
| A-21 | 客户 Logo 展示遵守品牌指南 | M30.5 |
| A-22 | "什么是 LicenseSpring / 我们不同"对比页 | M30.1 |

---

## 附录 B. 商业化文档清单(发布物)

| 类别 | 必需文档 |
| --- | --- |
| 法务 | EULA/MSA · Privacy Policy · Cookie Policy · DPA · Subprocessor List · AUP · ~~Refund Policy~~(退款政策已随商业化裁剪移交外部销售系统) |
| 产品 | Product Brochure · Feature Comparison · ROI Calculator · Release Notes · Roadmap · Changelog · Security Advisories |
| 技术 | 用户指南 · 管理员指南 · API Reference · SDK 集成指南 · FAQ · KB · Troubleshooting Runbook · Backup & DR Guide · Hardening Guide |
| 合规 | ISO 27001 证书 · SOC2 Type II · Pen Test Summary · SBOM · Compatibility Matrix · Deprecation Policy · API Stability Charter |
| 运营 | SLA · Status Page · Onboarding Guide · Support Policy · CSM Playbook · Renewal Playbook · Incident Response Plan |
| 营销 | 竞品对比 · 案例研究 · Whitepaper · Webinar · 视频库 · Logo 墙 · Partner Program |
| 培训 | 学习路径 · 课程大纲 · 实验环境 · 认证考试 |

---

## 附录 C. 参考资料

- [LSXPrime/Aegis](https://github.com/LSXPrime/Aegis) — LicenseManager.Core 上游
- [LicenseSpring](https://docs.licensespring.com) — 平台对标
- [Cryptlex](https://cryptlex.com) — 平台对标
- [Wibu-Systems CodeMeter](https://www.wibu.com) — 平台对标
- [Nalpeiron Zentitle2](https://docs.nalpeiron.com) — 平台对标
- [NetLicensing](https://netlicensing.io) — 白标参考
- [NVIDIA DLS Lifecycle Policy](https://docs.nvidia.com/license-system) — 维护/支持策略参考

---

## 附录 D. v1.0 完整性审查报告

### D.1 文档结构完整性

| 章节 | 内容 | 状态 |
| --- | --- | --- |
| §0 修订历史 | 含 5 个版本(v0.1→v1.0) | ✅ |
| §1 概述 | 背景 / 目标 / 范围 / 名词 | ✅ |
| §2 角色 | 10 类角色 + RBAC | ✅ |
| §3 架构 | 分层 + 项目结构 + LMC 要求 + Web 应用矩阵 | ✅ |
| §4 功能需求 | M1–M57 共 57 个模块,300+ 条功能项 | ✅ |
| §5 非功能需求 | 性能 / 可用性 / 扩展 / 安全 / 可观测 / 兼容 | ✅ |
| §6 数据模型 | 高阶 ER(17 实体) | ✅ |
| §7 API 概览 | 8 类端点 | ✅ |
| §8 部署 | On-Prem / Air-gap / Cloud Hosted | ✅ |
| §9 安全合规 | 要点 + 联动 M27/M35 | ✅ |
| §10 商业化 | 包装 / 计费 / GA 评审 | ✅ |
| §11 里程碑 | v1.0 / v1.1 / v1.2 / 同步发布 | ✅ |
| §12 验收标准 | 7 类验收 | ✅ |
| §13 开放问题 | 8 个待确认项 | ✅ |
| §15 Web 前端通用要求 | 14 小节 | ✅ |
| §16 术语表 | 28+ 术语 | ✅ |
| 附录 A–B | 散点 / 文档清单 | ✅ |
| 附录 C | 参考资料 | ✅ |
| **附录 D** | **完整性审查(本节)** | ✅ |

### D.2 对标完整性矩阵

| 能力域 | LicenseSpring v3.258 | Cryptlex 3.83.0 | Reprise RLM 16.0 | 10Duke | Adobe / Sentinel | 当前 RDP |
| --- | --- | --- | --- | --- | --- | --- |
| Node-Locked | ✅ | ✅ | ✅ | ✅ | ✅ | M4 |
| **Named User / Identity** | ⚠️ | ✅ | ✅(Personal) | ✅ | ✅(Adobe) | **M43** |
| Floating 浮动 | ✅ | ✅ | ✅ | ✅ | ✅ | M5 / M44 |
| **Lease / Cooldown / Grace** | ✅ | ✅ | ✅ | ✅(详细) | ✅ | **M45** |
| **Floating Server v2 自托管** | ✅(React UI) | ✅ | ✅ | ✅ | ✅ | **M44** |
| Consumption 计量 | ✅ | ✅ | ✅(meter) | ✅(Aggregate) | ✅ | M7 |
| **Entitlement Sets / Tier** | ✅ | ✅(3.78) | ✅(feature) | ✅(constraints) | ✅ | M6 / **M47** |
| **Subscription Policy** | ✅ | ✅(3.78) | ✅ | ✅(interval) | ✅ | **M46** |
| **License Manager vs User** | ✅(3.252) | ✅ | ✅ | ✅ | ✅ | **M48** |
| Trial Activation 管理 | ✅ | ✅(独立) | ✅ | ✅ | ✅ | M3.13 + M55.14 |
| **Local License & Server** | ✅(v3.251) | ⚠️ | ✅ | ✅ | ✅ | **M57** |
| **移动 SDK (iOS/Android)** | ✅ | ✅ | ⚠️ | ✅ | ✅ | **M49** |
| **端到端 OIDC SSO** | ✅ | ✅(`AuthenticateUserWithIdToken`) | ⚠️ | ✅(Identity) | ✅ | **M50** |
| **Token-based Licensing** | ⚠️ | ⚠️ | ✅ | ✅(token) | ⚠️ | **M53** |
| **OpenTelemetry** | ⚠️ | ✅(3.76) | ⚠️ | ⚠️ | ⚠️ | **M56.6** |
| **EULA Use Types** | ✅ | ✅ | ✅ | ✅ | ✅(Adobe) | **M54** |
| **Custom Fields(ViewPermissions)** | ✅(3.243) | ✅ | ⚠️ | ✅ | ✅ | **M51** |
| **Personal Access Token** | ✅ | ✅(LastUsedAt) | ⚠️ | ✅(OAuth) | ✅ | **M52** |
| **Webhook 事件目录** | ✅(20+) | ✅(30+) | ⚠️ | ✅ | ⚠️ | **M55**(25 类) |
| **CRM/电商集成** | ✅ | ✅ | ⚠️ | ✅ | ⚠️ | **M56.1–M56.5** |
| RLM 风格明文 report log | ⚠️ | ⚠️ | ✅(开源格式) | ⚠️ | ⚠️ | M44.7 |
| LAN 自动发现 | ⚠️ | ⚠️ | ✅ | ⚠️ | ⚠️ | M44.8(P2) |

**结论**:v1.0 已对商业级授权平台 22 个核心能力域全覆盖,对 LicenseSpring v3.258 / Cryptlex 3.83.0 / Reprise RLM 16.0 / 10Duke Enterprise 当前"必含"能力具备 1:1 对应。

### D.3 文档规模统计

| 项目 | 数量 |
| --- | --- |
| 功能模块 | **57**(M1–M57) |
| 功能验收项 | **300+**(P0 ~170 / P1 ~100 / P2 ~30) |
| Web 应用 / 资产 | **10 个 + 1 类嵌入** |
| Webhook 事件 | **25 类** |
| 第三方集成 | **9 类** |
| 术语 | **28+** |
| 散点需求 | A-01 ~ A-22 |
| 开放问题 | 8 |
| 必出文档 | 7 类 30+ 份 |

### D.4 已知留白(后续版本)

- **P2 长尾项**(约 30 条)→ v1.1 / v1.2
- **AI 增强**:License 风险评分 / 异常检测未列入,作为独立后续模块
- **国密合规(SM2/SM3/SM4)**:未列入,客户要求时独立模块化扩展
- **Block Chain / NFT License**:未列入,技术尚未成熟
- **更多 CRM 集成**:HubSpot/Stripe 已 P0,其他按需扩展

### D.5 必读章节(对实施团队)

| 角色 | 必读章节 |
| --- | --- |
| 实施 Lead | §3 + §4 总览 + §11 + §12 |
| 后端开发 | §3.2/3.3 + §4 M1–M35 + §6 + §7 |
| 前端开发 | §3.4 + §15 + §4 M36–M42 |
| LMC 重构 | §3.3 |
| 运维 / SRE | §8 + §4 M16 + M33/M34 |
| 安全 / 合规 | §9 + §4 M27 / M35 / M54 |
| 产品 / PM | §1 + §2 + §4 + §10 + §11 |
| 销售 / CS | §4 M30 + M28 + M29 |
| 法务 | §4 M54 + M29 + 附录 B |

### D.6 v1.0 文档"完整性"自检结论

✅ **结构完整**:18 个主要章节 + 4 个附录,无缺失
✅ **覆盖完整**:22 个能力域对标无缺口(均为 1:1 对应)
✅ **优先级完整**:P0 / P1 / P2 全标注,排期清晰
✅ **文档化完整**:7 类必出文档、开放问题、术语表齐备
✅ **可实施**:M1–M57 验收项可拆解为 Story / Task
✅ **可发布**:满足商业产品 GA 评审(GRB)的最低要求

**v1.0 文档可作为正式 RDP 冻结发布。**
