文档(计费): 补充升级报价数值入参自检说明

- 在领域数据结构 §3 记录 quote_runtime_profile_membership_upgrade 的防御式自检与 invalid_quote_input 拒绝

Co-authored-by: Junie <junie@jetbrains.com>
This commit is contained in:
2026-10-02 19:58:39 +08:00
parent 83dbd0cc77
commit 3eaae417ba
@@ -272,6 +272,9 @@ pub struct RuntimeProfileMembershipUpgradeQuote {
- `quote_runtime_profile_membership_upgrade(input) -> Result<quote, rejection>`:
入参 `RuntimeProfileMembershipUpgradeQuoteInput`(当前档位 / 周期、目标档位 / 周期、期序号 / 期总数、
本期窗口、当前月度余额、`now`);金额向上取到分、补点向下取整;月付 / 年付分支见 §6;年价取目录 `year_price_cents`。
- 报价函数对数值入参做防御式自检:`1 <= cycle_index <= cycle_count`、`cycle_started_at <= now`、
`cycle_started_at <= cycle_resets_at`,越界返回 `invalid_quote_input`(`InvalidQuoteInput`),
不再被 `saturating_sub` 静默夹取;生产入口从会员行构造的入参恒满足这些不变量。
- `check_runtime_profile_membership_upgrade_allowed(...) -> Result<(), rejection>`:
§3.4 允许操作矩阵的唯一实现(非会员不可升级 / 不支持月转年与年转月 / 同档与降档拒绝 / 目标不可购买拒绝)。
- `membership_cycle_remaining_ratio_ppm(cycle_started_at, cycle_resets_at, now) -> u32`:本期剩余比例(ppm,向下取整)。