# Day 3 - 预算占用、释放、核销服务

## 目标

把预算变化统一收敛到预算服务，申请、报销、付款都只能通过预算服务改变预算状态。

## 服务能力

预算检查：

- 校验预算归属是否存在。
- 校验预算是否被冻结。
- 校验可用余额是否充足。
- 返回超预算金额和处理建议。

预算预占：

- 用于费用申请提交。
- 写入 `reserve` 交易。
- 记录来源单据。

预算释放：

- 用于申请撤回、退回、驳回、取消。
- 写入 `release` 交易。
- 必须找到原始预占来源。

预算核销：

- 用于报销审批通过。
- 写入 `consume` 交易。
- 如果来源申请已有预占，应先释放预占或转换为核销，不能重复占用。

预算回滚：

- 用于报销退回或撤销审批。
- 写入 `rollback` 交易。

## 关键防错

- 同一来源单据不能重复预占。
- 同一报销单不能重复核销。
- 释放金额不能超过原预占金额。
- 核销金额不能超过可用余额加当前来源预占余额。
- 所有预算交易必须有来源单据和操作人。

## 验收

- [ ] 预算预占后可用余额减少。
- [ ] 预算释放后可用余额恢复。
- [ ] 预算核销后已核销金额增加。
- [ ] 重复预占会被阻断。
- [ ] 重复核销会被阻断。
- [ ] 台账能解释每一次余额变化。

