# Day 3 - 预算占用、释放、核销服务 ## 目标 把预算变化统一收敛到预算服务,申请、报销、付款都只能通过预算服务改变预算状态。 ## 服务能力 预算检查: - 校验预算归属是否存在。 - 校验预算是否被冻结。 - 校验可用余额是否充足。 - 返回超预算金额和处理建议。 预算预占: - 用于费用申请提交。 - 写入 `reserve` 交易。 - 记录来源单据。 预算释放: - 用于申请撤回、退回、驳回、取消。 - 写入 `release` 交易。 - 必须找到原始预占来源。 预算核销: - 用于报销审批通过。 - 写入 `consume` 交易。 - 如果来源申请已有预占,应先释放预占或转换为核销,不能重复占用。 预算回滚: - 用于报销退回或撤销审批。 - 写入 `rollback` 交易。 ## 关键防错 - 同一来源单据不能重复预占。 - 同一报销单不能重复核销。 - 释放金额不能超过原预占金额。 - 核销金额不能超过可用余额加当前来源预占余额。 - 所有预算交易必须有来源单据和操作人。 ## 验收 - [ ] 预算预占后可用余额减少。 - [ ] 预算释放后可用余额恢复。 - [ ] 预算核销后已核销金额增加。 - [ ] 重复预占会被阻断。 - [ ] 重复核销会被阻断。 - [ ] 台账能解释每一次余额变化。