Files
junhong_cmp_fiber/openspec/specs/order-commission-snapshot/spec.md
huang d977000a66
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m40s
feat: 归档佣金计算触发和快照变更,同步规范文档
- 归档 OpenSpec 变更到 archive 目录
- 创建 2 个新的主规范文件:commission-trigger 和 order-commission-snapshot
- 实现订单佣金快照字段和支付自动触发
- 确保事务一致性,所有佣金操作在同一事务内完成
- 提取成本价计算为公共工具函数
2026-01-29 14:58:35 +08:00

63 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# order-commission-snapshot Specification
## Purpose
TBD - created by archiving change fix-commission-calculation-trigger-and-snapshot. Update Purpose after archive.
## Requirements
### Requirement: 订单创建时填充佣金快照字段
系统 SHALL 在订单创建时填充佣金计算所需的关键字段快照,确保后续佣金计算不受配置变更影响。
**快照字段**
- `series_id`:套餐系列 ID
- `seller_shop_id`:售卖/收益归属店铺 ID
- `seller_cost_price`:卖家成本价(用于成本价差佣金计算)
**字段来源**:基于购买校验结果(`PurchaseValidationResult`
- `series_id``allocation.SeriesID`
- `seller_shop_id``allocation.ShopID`
- `seller_cost_price` ← 根据 allocation 的基础返佣规则从订单金额推导
#### Scenario: 订单创建时写入佣金快照
- **WHEN** 用户购买套餐,订单创建成功,购买校验返回 `allocation` 数据
- **THEN** 订单表中 `series_id``seller_shop_id``seller_cost_price` 字段已正确填充
- **AND** 字段值来源于购买校验结果,而非订单提交参数
#### Scenario: 缺少 allocation 数据时的处理
- **WHEN** 订单创建时购买校验结果中缺少 `allocation` 数据
- **THEN** 系统记录警告日志,订单佣金快照字段保持 NULL 或默认值
- **AND** 订单 `commission_status` 标记为 `pending`(待计算),允许后续补偿
#### Scenario: 后续佣金计算使用快照字段
- **WHEN** 佣金计算任务执行时读取订单数据
- **THEN** 系统使用订单表中的快照字段(`series_id``seller_shop_id``seller_cost_price`
- **AND** 不再实时查询套餐配置或返佣规则,避免配置变更影响历史订单
---
### Requirement: 成本价推导方法复用
系统 SHALL 提供统一的成本价推导方法,确保订单创建和佣金计算使用相同的计算口径。
**方法职责**
- 输入订单金额、allocation 数据(包含返佣规则)
- 输出卖家成本价seller_cost_price
- 逻辑:与"成本价差佣金"计算保持一致
#### Scenario: 订单创建时调用成本价推导
- **WHEN** 订单创建服务填充 `seller_cost_price` 字段
- **THEN** 系统调用统一的成本价推导方法,基于订单金额和 allocation 数据计算
- **AND** 推导结果写入订单表 `seller_cost_price` 字段
#### Scenario: 佣金计算时复用相同逻辑
- **WHEN** 佣金计算服务执行成本价差计算
- **THEN** 系统使用订单快照中的 `seller_cost_price`(已在创建时推导)
- **AND** 避免重复推导,确保计算口径一致
---