一次资金操作,由调用方给出身份
示例:租户 T、消费用户 A、资金操作 B1。业务执行身份、是否新开一笔操作和费用策略由调用方决定。
调用方key、用户、分类、H、C、usageBilling预扣、完成、幂等和持久化账户余额、冻结、消费/充值记录
-
调用方提供稳定 key 与 H
prepareOperation 首次创建 B1,固定消费用户 A 并冻结 H。余额不足明确报错;同一 key 重复调用返回原
B1,不再占额。
-
调用方提供最终 C 与 usage
completeOperation 按给定 C 扣款、释放原 H,并保存原 JSON。Billing 不判断费用来源,也不需要 usage
中存在任何字段。
-
Billing 只收尾一次
原单已完成,后续调用返回原终值,不重复扣款或覆盖 usage。新的资金操作应由调用方提供新的 key。
资金金额独立于 usage
即使 usage 没有 token、数量、模型或价格,Billing 仍能按合法 C 完成。C 为 0
时只释放原冻结;这表示零额资金收尾,不表示 Billing 判断了执行失败。
- key · 资金身份
-
operationKey 由调用方提供,BillingOperation.id 是资金记录 ID。Billing 只按 tenantId + operationKey
去重,不制定节点或会话键规则。
- usage · 不透明 JSON
-
内容可以是调用方需要的任意合法 JSON 值。Billing 原样存取,不校验业务
schema,不提取计费字段,不从中计算金额。
- ref · 关联依据
-
消费用户、chargeCode 和来源引用用于归属、分类与关联。调用方决定业务语义,Billing 不沿引用读取执行结果。
会议核对后删掉了哪些额外职责?
删除 estimatedUsage → 价格映射 → 计算金额的流程;金额改为调用方直接传入。删除 usage
的业务字段要求和价格内容禁令;保留一列 JSONB 原样存取。资金表示改为 64 位整数。
worker 的 REST
化、Conductor、轮询、状态保存、重试、停止和用户提示均由调用方接入。当前仅更新设计,尚未实现 Billing。