PLAT-02-012 多资源权益与旧用户承接
积分、周期额度、生成次数的统一政策、本地实现与sub2api迁移门槛
运营配置需求补充:新增需求见统一运营后台 PRD §5:管理员组合积分、限定/不限模型图片次数、视频次数和视频秒数,以及存储容量;免费容量目标默认 1 GB,订阅容量可配置。秒数计量、容量组合、团队归属及存量过渡在配套 FS 定稿后同步本模块,不能以现有只支持次数为由降低需求;既有先到期分配、可信成功输出、原资源返还及旧快照继续保持。
2026-10-07用户明确要求:活动赠送的限时图片/视频次数(可限定模型)、活动积分、邀请返利积分、订阅周/月积分限额及附带图片/视频次数,系统须承接旧sub2api用户全部数据和订阅权益。关联PL-020、PL-005/017/019、PL-016/PL-N05,T-12及既有资金/媒体/页面/迁移任务。状态:共享权益引擎、两端界面、订阅模板/购买履约和受控导入工具已本地实现,列明范围通过真实隔离PostgreSQL;正式客户迁移及完整旧客户运营恢复未完成,T-12/AC-15仍进行中。
本页为新增权益规则与设计的唯一细则;用户结果以总PRD为入口,普通资金、价格、支付与恢复继续引用钱包与计费,迁移顺序引用迁移与切换。用户按本轮提出的策略要求继续完成,PD-15/16已据此确定下述分配、计量、跨期与退款政策;旧资产兑换和旧价保护的实际范围/系数仍须PD-12显式批次政策,不由字段名或测试比例决定。
1. 区分资源、来源和限制
PL-021进一步区分商品/活动运营归属、销售入口、权益适用范围与实际消费产品,具体规则见全域记录与产品运营。现有AllProducts/Products只表示资源消费范围,不能用作商品owner或购买入口。产品可以运营本域套餐/活动,但原订单、订阅、grant与窗口仍由本平台统一持有;各端读取同一资源与来源,不建立产品独立权益账。2026-10-10商品编辑默认与整体方案已更新,既有grant快照保持。
| 资源 | 来源例子 | 实际可消费内容 | 必须保留的约束 |
|---|---|---|---|
| 通用钱包积分 | 充值、永久通用赠送、已领取积分返利、旧余额承接 | 精确积分支出 | 原来源/订单、一次到账、单位与价格快照 |
| 限时或限定用途积分 | 活动赠送、迁移补偿 | 匹配规则且未到期的积分 | 生效/到期、模型/规格/产品范围,不与通用余额重复计资 |
| 订阅周期额度 | 周/月订阅 | 同一订阅下可覆盖的消费 | 同时生效的周/月等上限、各窗口已用和原重置点、订阅有效期 |
| 图片次数或张数 | 活动、订阅附赠 | 规则定义的图片生成计量 | 张/请求单位、模型、尺寸/画质、数量、期限和周期 |
| 视频次数 | 活动、订阅附赠 | 规则定义的视频生成计量 | 模型、时长/清晰度/声音/输出数、期限和周期 |
| 待领取或审核奖励 | 邀请活动 | 尚不可消费 | 待生效/可领取/审核中/取消/已到账及原奖励关联 |
| 旧货币返利 | 旧sub2api充值返利 | 原货币下的存量权益 | 币种、可用/冻结/历史、解冻时点及抵扣/提现事实;不能默认改积分 |
资源类型不等于来源:同一活动或订阅可发多个不同资源,但单位不同不能相加。“限定模型”限制福利覆盖本次消费的范围,不恢复Key模型白名单、不解锁模型、不改用户组、角色或供应路由;其他已开放模型仍按独立授权及合法支付策略调用。
普通永久通用积分继续一次入现有唯一钱包;限时/限定用途积分和次数在同一资金/权益服务下按具体grant分配,不能先加普通余额、再作为额外grant供用户重复使用。所有子账归同一个用户的钱包和原operation,不在活动、订阅或媒体服务再建可独立扣减的钱包。订阅“剩余”是周期上限的时点值,不自动兑换成普通余额。
2. 同一订阅的周限和月限
周/月上限约束同一笔已确认消费与内部预留,而非两份库存。例:周限100、本周已用20;月限300、本月已用270,当前此订阅最多覆盖30积分。不得显示为余额110或总额度400。同一次覆盖D同时计入所有适用窗口,但库存若存在只扣D一次。
服务端判定每个有效窗口的 已确认用量 + 原操作占用 + 本次预留 <= 上限,并独立检查库存(如有)、有效期及适用范围。用户界面只展示已用/上限、当前剩余和重置时间,内部预留不暴露为冻结钱包。
周期定义必须版本化:自然周/月、购买时刻固定周期、首次使用激活、滚动窗口不是同一规则。旧sub2api为24小时/7天/30天及原窗口锚点,含短期试用一次性日额度例外;迁移不能按新自然月补满或清空旧用量。新授予以具体grant分别记库存/窗口,同一调用可在匹配资源间分摊,各grant的全部适用上限分别核对;不同grant不合并为新的共同上限。资源顺序按§4冻结。旧平台预算另为限制,日/周按Asia/Shanghai自然日/周,不能误作订阅滚动24小时/7天;旧平台月预算按原30天窗口保存。
3. 规则版本与用户权益
在既有Go/Gin/GORM平台、PostgreSQL和同一记账事务中使用下列对象,不建立第二运行服务:
| 对象 | 责任 |
|---|---|
| 权益规则版本 | 资源/精度/计量、来源、领取与发布条件、适用模型和规格、周期/到期/核销/失败/回退政策;发布后不可改写 |
| 用户grant | 本人实际获授的资源、规则版本、来源对象、总量(库存型)、生效到期及历史来源映射;活动/订单/迁移唯一去重 |
| 周期limit/window | 同一订阅或共享scope的各上限、已用、内部占用、原锚点与算法;旧窗口保留历史,不把行覆盖为0 |
| 原操作allocation/hold | 原operation的资源分配、数量/预留、原窗口、价格/权益/权限/付费上限快照;恢复只读原分配 |
| 核销与冲销事件 | 可信实际结果下的资源使用/释放/退款、原operation和allocation、原任务与审计;改规则不能重算历史 |
| 迁移映射与快照 | source_instance/table/id、批次、旧单位/原小数、目标对象、兑换版本及差异;重跑不重复资产 |
库存型grant守恒:授予总量 = 当前可用 + 原操作占用 + 已消耗 + 已过期 + 已撤销,冲销关联原事件。普通钱包账与权益账不能把同一份积分双重记为可消费资产;逐资源守恒不依赖把次数估值成积分。积分采用精确最小单位/定点运算,次数为整数;旧10位小数与现行最小单位不一致时须显式处理精度与逐户差额,不能float截断。
聚合接口必须从全部本人有效权益读取,不从历史分页的前5条推断账户全部额度。概览按资源/scope分组;不兼容范围不合计成“任何模型可用”的总次数或总积分。数据加载/失败/未知不填零,切号与撤权仍须重校验。
4. 请求前分配与原任务恢复
调用先独立核适用的身份或委托、Key路径的有效性/额度/并发、可信产品、目录与规格开放、有效价格,再按服务端匹配资源与适用付费策略创建一次原操作分配。普通单次调用与 API Key 保留已授权付费策略,Run 按下方专节自动处理,不虚构个人 Key。零钱包余额但有适用次数/订阅额度可以获得对应资源预留;不能通过把销售价改0并继续要求普通余额预留1来模拟免费权益。
同一事务保护原操作、权益库存、所有适用周期占用和必要钱包/Key变化,固定锁序与唯一键拒绝冲突;结算与释放竞争一个互斥终态,后续获准退款作为关联原消费的幂等冲销记录,不改写原结算事实。计量来自可信实际结果,不接受客户自报输出数量、时长或成本绕过核销。次数按可信成功输出的图片张数/视频条数核销,部分成功只消耗已确认成功输出,未成功部分释放原占用。请求发出或客户端自报成功不作为次数依据;视频缺结果/缺用量和提交未知保留原占用待核对。规则保存模型、尺寸、画质、时长、声音、产品及输出数适用范围,相应供给和可信结果计量未经验证时关闭该资源消费。
可信实际用量超出原allocation、有效窗口上限或钱包授权上限时,保留实际用量事实、原分配与待核对账务,进入原operation的异常核对;不能自动扩大grant、改原窗口、从另一资源补扣或转为未经授权的钱包消费,也不能因约束失败丢失原使用记录。授权范围内的补充分配仍走原操作、同一事务和幂等规则。
付款来源和模型价格分开:使用赠送次数的实际钱包费用可以为0,原标准价/可信输出和权益核销仍可解释。Key以原标准价等值独立记额度,覆盖次数/订阅/限时积分和钱包的整体调用;实际普通钱包支出另记,零钱包费用不能绕过Key预算。旧平台预算只累计实际普通钱包部分,混合消费不得把订阅覆盖部分误计入平台预算。使用明细可显示“活动图片1次、钱包3积分”,不能把一次生成伪装成积分消费。
先筛选匹配且生效的资源,再跨积分/次数按较早到期排序,同到期使用稳定资源标识排序;订阅不凭来源名称压过更早到期的活动资源。普通单次调用与 API Key 的普通余额为明确授权的后备付款来源:生成前显示将使用的资源和最高钱包支出;“仅使用权益”禁止普通钱包回退,不足必须拒绝。选择权益加钱包时服务端保存明确的钱包支出上限,资源不足或实际用量超过授权上限不能隐式扩大扣款。已授权的钱包调用和API可用服务端计费偏好/上限表达,无须每次再弹技术确认;超出原授权才需重新授权。Run 的资源来源由系统按同一分配规则自动选择,不展示上述付费偏好或 Run 金额上限控件。模型/规格不匹配不自动扩大活动范围。
按执行授权开始绑定资源及窗口:到期前合法开始的任务沿原分配完成,旧窗口结算与新窗口新调用并存;到期后不能新预留或扩大执行。未占用的限时库存到期进入已过期,不结转为新周期或普通余额。未知/已执行/缺用量不能因租约超时自动释放后重用权益;只查询原任务,保存失败只恢复读取/保存。明确失败或获准全额使用退款回原资源、原grant和原窗口;已到期的库存返还进入已过期,窗口返还冲销原窗口用量,不能补满当前新窗口或复活为永久余额。部分现金/充值退款与已领取邀请返利另按原交易核对,不由通用使用退款自动处理。
Run 逐次分配与不足暂停(P2 待实现交接)
Run 的资源选择和可用性判断由 Platform 在系统内部自动处理,用户有适用余额或权益即可发起,不填写、确认或追加 Run 预算。Platform 在启动及每次收费调用核验当前模型、规格、产品范围、资源有效性、库存与周期上限,按既有先到期、稳定标识和可信输出分摊规则选择权益及必要钱包;自动选择不改变 grant 适用范围、计量单位或每个原 operation 的价格与分配快照。
按次原子预留及结算,不预先冻结整 Run,不把启动余额或权益固定为 Run 的库存,不新增隐藏 Run 金额上限。余额或权益不足须说明原因;运行中不足暂停并保留结果及未决原调用占用。补足后由用户在当前会话显式继续原 Run,下一收费调用重新核验当时的适用资源;UNKNOWN 只恢复原 operation,不能重发或将其占用另用。已预留调用的跨期、结算、失败与原资源返还仍按上方规则。
Console 展示实际费用与核销资源来源、暂停原因和停止入口,不提供 Run 预算编辑或追加 UI。该目标依赖 P2 正式实现交接,现有单次调用、Key 独立预算、旧平台预算及既有付费偏好不因本次 Run 决定改写。
5. Console与Admin
钱包首屏以“我的权益”组织,普通余额为次级:
- 订阅:每份套餐的有效期、周/月份额与重置点,两条紧凑进度;附带图片/视频次数直接列在该订阅内。
- 限时资源:图片/视频及限时积分按来源、到期、适用模型/规格分组,最近到期在前;只合计同单位和兼容范围,可用展开查看。
- 积分:通用钱包余额、活动可用积分(若受限则独立资源项)与待领取邀请奖励分别呈现,不计算跨资源总资产。
- 记录:获取/使用/到期/冲销和普通资金流水按原operation关联,未确认状态不显示已扣0。
活动中心负责规则、获取与邀请领取,钱包负责本人当前资源,生成表单负责本次可适用资源;三处读取同一权威,不各维护余额。订阅、权益记录保留详情与历史入口,首页不堆砌规则全文。旧货币返利使用独立币种历史/待处理视图,不能塞入积分统计。
管理端同等完整:活动多资源版本、订阅并行周期与次数配置、用户grant/周期用量/原操作核销、发放回收与退款、迁移差异和审计;读/写/发布/发放/回收/恢复分别授权,未知保存查原回执。修改模板不改历史用户权益;缺单位/范围/周期/计量/到期政策或未通过资金恢复验收的资源不得启用。UI-A10/11/16/12/15成对回读,不凭配置页结项。
6. 旧sub2api承接的事实与边界
源码审计基线为用户指定目录 /Users/wangzihao/Projects/sub2api-0.1.137-clean;文件夹名不是实际版本,已知HEAD为0df306995、工作树有修改。线上la-vps2为同前缀定制镜像;实际表/迁移/配置须在切换快照核对,不能由最高迁移编号或估计表行数判断同版。审计证据在平台docs/verification/T-12/entitlements-legacy-audit-20261007/。
balance与*_usd沿用旧命名;旧UI直接显示积分,不能按美元兑人民币自动换。付款币种、到账积分、订阅上限、Key预算和旧返利货币分别保留来源单位。- 旧周/月消费同时累计,原订阅未内嵌限额而读取可变group;截止时须抓有效group/价格/倍率/范围快照、每个窗口start和usage,不只复制当前套餐名称。
- 旧余额混有已领取赠金/兑换码/首次调用奖励;历史记录迁入审计但不重发grant。保留旧混合余额批次,不凭历史发放额倒推未消费赠金。
- 旧充值返利有可用/冻结/提现/购买抵扣及CNY显示,又有原数值转余额行为;须保留原币种和事实,存量承接不自动推出新现金功能或强制积分转换。
user_platform_quotas为分平台消费限制,非资产;NULL不限、0禁用,日/周为Asia/Shanghai自然日/周,月按原30天窗口。group订阅限额0/NULL却表示不限;相同字段值不能共用错误转换。默认provider赠送表是去重标记,实际资产已落其他表。usage_logs.image_count/video_count是已发生计量,不是剩余免费次数。旧没有通用grant账时不能从使用日志补造次数权益。- 单次图片会话/提示词/结果存用户浏览器IndexedDB,服务端DB迁移不自动覆盖;需要旧域受控导出或同域过渡。批量任务另有对象存储与冻结,已删Sora历史须核备份,不宣称自动完整恢复。
- 身份绑定保留provider/channel作用域,不能按邮箱自动串号;密码哈希兼容、TOTP重新加密或受控兼容、旧Key保密映射与约束/客户端协议须隔离验证。旧短期会话不默认永久续用。
全部数据承接应覆盖活跃数据和可查询历史归档,不把历史充值/返利/额度总额再发成当前资产。负余额债务、冻结、未结任务、支付/退款、奖励待审及去重事实都要原样保留;供应凭据和运维配置受控归档不进前端,项目/素材仍归产品。
购买力判定:旧余额B与模型/规格旧价P_old,新余额B_new与新价P_new,需满足约定的 B_new/P_new = B/P_old。只有各模型新旧价格比例一致时,一次全局系数才可能守恒;否则需旧价兼容权益或具名补偿/转换政策。周/月limit和usage按同规则一起转换,原付款金额/现金返利/媒体次数不能全表乘相同系数。当前40元=100积分不是旧资产兑换事实;旧保护模型/期限与舍入见PD-12。
7. 本地实现与开放门槛
2026-10-07在用户“按照这个逻辑继续完成”的授权下,原方案已接入真实平台实现:版本化规则/grant/窗口/原操作分配、本人全量权益概览与记录、员工发放/回收及原回执、订阅模板CAS/发布/暂停、人民币订阅订单与原购买快照履约、媒体/文本/非模型消费、原使用退款和安全旧历史查询。共享规则与消费仍走用户锁及同一资金事务,不新建可独立消费的钱包。普通已到账邀请积分沿既有钱包入账,新赠送资源不重复入账;通用活动的完整自动资格/领取与反作弊运营仍须分别验收,不能用员工手工发放替代。
同模板续期从原到期点接续覆盖期限,旧grant及旧窗口用量不改写;新订单保存其原版本与资源快照,新覆盖段不在购买当刻重置当前周期。发布或暂停模板只影响新购买许可,已付款原订单按原快照幂等履约,购买未知沿原单查询。未配置支付、未发布资源或未验供给保持关闭。
本地真实隔离PostgreSQL证据:消费87项、规则与模板13项、订阅恢复11项、受控迁移9项,均无跳过;正式HTTP综合1项覆盖18个路由/会话/CSRF/独立员工权限及旧Key鉴权场景通过,最终分项范围以平台 docs/verification/T-12/entitlements-implementation-20261007/report.md为准。该证据只支持列明的本地夹具范围,不等于真实商户/供应验证、生产发布、客户资产转换或T-12/AC-15整体结项。
迁移工具按全域表/列清单受控加密封存历史,再分别标记可运营映射、仅归档和阻断对象。具名源实例/表/ID/原行哈希与批次唯一,完整快照和后续完整增量快照可重跑;重复批次不重复开账、已到账赠金或订阅授予。逐户差异、冻结/负债、原窗口、身份/Key约束、全量历史、安全查询及本地单写/回退保护已隔离演练;工具不执行远端停写或真实切换。
生产开放仍须核对实际兑换/旧价待遇、源版本/schema/时区和源切点;TOTP受控重加密/重置、身份渠道与特殊权限的运营映射、CNY邀请返利存量/负债、未决冻结媒体任务、浏览器历史归属与新产品可读映射、对象和已删除Sora备份、Redis缓存失效及真实增量追平尚未完成。私密原档可保存不代表旧功能可继续运营;有未决项的账户保持禁用并列入差异,不能把负债夹成0后放行。单次生图历史已有全量受控导出/封存导入工具片段,未执行客户浏览器导出,也未证明丢失数据可恢复。
至少保留以下验收:最后一次权益并发竞争、周够/月不足、匹配范围与钱包上限、Key标准价预算、到期/窗口后的迟到成功/失败/UNKNOWN、部分可信输出、原资源退款、改价/撤权后的原恢复、邀请领取竞争、旧混合余额不重发、预算NULL/0/原时区、负债/冻结、币种与身份Key对象去重、重复导入和中断、回退不得覆盖新支付消费。资金、权限和恢复使用真实隔离PostgreSQL与本地夹具,不调用收费模型,不以文档构建或截图代替业务通过。
8. 2026-10-10:新商品的首期构建默认
用户已认可通用充值+有限共享用量订阅+按需专项商品,产品功能资格分别定义,端到端体验见整体方案。以下为新商品的实现默认;已有订单、grant、7/30天并行窗口与迁移待遇按原快照保留,不因新编辑器简化而修改。
- 周期:新简单通用订阅默认一个固定30天覆盖段与有限额度,界面写“30天套餐”及准确起止。首次购买从成功提交资源交付、用户实际可用的持久生效时刻起算,分别保留可信付款与实际交付时间。7/30天并行限制保留为高级配置;多个限制约束同一消费。自然月、滚动窗口和首次使用激活仍须独立规则版本,不由“月套餐”文案推断。
- 购买关系:新商品配置稳定商品族和档位,同用户同族当前覆盖段只生效一档;普通充值、产品专项包、其他商品族和活动资源可按各自规则并存。该关系限制新售覆盖段,不合并既有不同grant或抹掉已购资源。
- 续购与换档:同档续购和不同档换档统一从同族仍保留的全部已付覆盖段最末结束点追加;不存在未来保留段且原期限已过时,从实际成功交付点开始。已取消且退款处理完成的段不单独阻塞追加,但中间退款形成的日期空档不自动填补、后续已付段不覆盖或移动。例如当前0~30天、中间30~60天已退款、60~90天仍已付,新购统一追加至90天之后;若后段也已完成退款,起点重新按仍保留段及实际交付时刻计算。按用户/商品族并发保护一次履约和覆盖段排序,保留每份原订单、版本、grant与窗口。
- 生效解释:续期不立即补满本期额度。钱包补量或立即生效专项包承担本期追加用量;购买页必须提前显示新段生效时刻。原周期锚点、已用、占用及未决原任务保持,不能为新付费清零旧窗口。
- 交付延迟:未来续购段在排期前完成交付,沿原排期开始;若故障导致排期已开始仍无可用资源,保留付款/约定/实际时间与原案件,进入人工补时或退款核对,不自动按过去日期消耗客户不可用天数,也不自动平移其他已付段。所选补时/退款方案与结果必须可查;商品开放前验收这一异常入口。
- 用户记录:逻辑订阅关联全部购买覆盖段,当前、待生效、到期与售后状态分别可查;一份续期订单不是第二份并发有效订阅。未收款或未履约不能展示可用资源,已收款待履约单独反馈。
- 功能资格:产品功能权益使用独立定义和访问控制,数量型资源继续用本引擎;功能会员不改变客户Key全部开放模型、员工权限或个人标准模型价。缺真实功能与控制验收时不能上架空会员。
- 范围及分配:商品默认与跨产品发布授权引用产品运营;现行PD-16跨资源先到期、稳定ID排序保持,普通单次调用与 API Key 的明确钱包上限保持,Run 使用§4逐次自动分配,不新增“订阅优先”或“次数必定优先”。
实现差距(静态核查):service/platform_entitlements_allocations.go当前先尝试次数覆盖整请求,不足时使用积分及钱包;没有实现次数覆盖部分可信输出、积分/钱包覆盖其余的广义分摊。需沿PD-16补齐可验证输出项与费用维度、统一原allocation和部分结果结算,禁止将次数任意折现或以旧整单测试改低需求。消费预检目前也未完整返回本次匹配资源,须只读同源匹配并在真正预留时事务复审。新增行为按T-12及PL-021.R11/AC-16.A11单独取证,旧87项消费证据不能证明这一新范围通过。
次数混合的技术构建约束:一次次数覆盖一个完整匹配输出项,不能覆盖同一输出剩余半份价格;积分可以组合支付未被次数覆盖的完整输出。先寻找权益能完整覆盖输出的可行分配,再在满足单位守恒、可核验费用项的方案内按到期排序,普通钱包只补权益未能覆盖输出的剩余金额。单张标准价10、早到期积分5、晚到期图片次数1且无其他积分时,使用次数1、钱包0,积分5保持;即使已授权钱包补足,也不能选择积分5+钱包5而跳过能完整覆盖的次数。若早到期积分足10,先用积分10、保留次数。两张各价10且有早到期次数1、积分5时,可一次覆盖一张,另一张用积分5及获准钱包5;仅权益模式不足拒绝。输出稳定ID或受控序号在原预留中绑定费用项与allocation,部分成功按原项核销,失败/退款回原项资源,不能事后任意把成功输出移到不同期限或不同付款来源。供应无法证明项级身份/价格或固定请求附加费拆分时,相应混合组合保持关闭并说明原因,不估算折现。
自动续费、即时升降级补差、按比例结转和未明确的部分现金折算不在上述默认中;人工现金售后另按钱包与计费,不用使用冲销替代。