1
0
forked from erp-dev/erp

feat: BalanceChangeRecord

This commit is contained in:
2025-12-01 15:22:59 +08:00
parent 9acc4e14fc
commit a3b4af2602
8 changed files with 359 additions and 14 deletions

View File

@@ -40,6 +40,7 @@
- **PaymentOrder**(付款单):`direction=-1``counterparty=supplier`,仅金额字段,不触发库存。
- **ReceiptOrder**(收款单):`direction=-1``counterparty=customer`,仅金额字段,不触发库存。
- **SupplierBalance / CustomerBalance**:实时维护供应商应付、客户应收余额,所有审批通过的带金额单据都会写入,供查询接口和报表使用。
- **BalanceChangeRecord**(余额变动记录):仿照 `stock.StockSnapshot` 的“流水 + 快照”模式,记录每一次余额写入的来源、方向、前后余额与可能的冲抵关系,为财务审计与未来的红冲能力提供依据。
通过 mixin所有单据都具备
- 统一的金额聚合与方向计算(资金/库存可共用 `get_signed_total_amount()`
@@ -57,7 +58,8 @@
1. **新增单据**:若未来出现调拨单、退货单或更多资金类单据,优先复用 `OrderDirectionMixin + OrderCounterpartyMixin`(如有明细再叠加 `OrderItemsAggregationMixin`),仅通过 `get_direction()` / `get_counterparty_field_name()` 区别方向与主体,减少重复实现。
2. **审批/状态机**:采购与销售如需共享状态流转,可提炼状态机或 service 层 mixin而无需在模型层合并。
3. **统计与报表**:财务/库存统计应依赖 `get_signed_total_amount()` / `get_direction()`,确保采购/销售、退货/正向都能通过统一接口处理。
4. **文档同步**新增单据或服务时必须更新本文件,描述新增模型如何复用 mixin、如何影响下游模块保持设计透明
4. **余额审计**任何会写入 Supplier/CustomerBalance 的流程必须通过 `BalanceService`,以便自动生成 `BalanceChangeRecord`。审批通过后禁止作废,若未来需要冲销,必须新建红冲记录并维护 `offset_to/offset_id` 链路
5. **文档同步**:新增单据或服务时必须更新本文件,描述新增模型如何复用 mixin、如何影响下游模块保持设计透明。
以上约定的目标是:**保持各类业务单据的独立性,同时通过 mixin/服务层抽象复用绝大多数公共逻辑**。如需变更此架构,请在评估后更新本文件,说明原因与迁移方案。