This commit is contained in:
2026-09-14 20:03:25 +08:00
parent ee5e83104c
commit 6e5f7c71eb
6 changed files with 73 additions and 4 deletions
@@ -133,3 +133,12 @@ Firstleg Outbox 发布采用至少一次投递:指数退避(建议 10s、30s
成本与资金动作分离:同一来源版本按 `sourceSystem + sourceType + sourceFeeId + sourceVersion` 只识别一次成本。DIRECT_PAID 来源唯一物化为 `fin_cost` 已付成本事实;ON_ACCOUNT 成本仍由来源事实识别,正式 AP 仅承载负债、到期日和付款,不重复确认成本。总成本等于有效 ON_ACCOUNT 来源成本加有效 DIRECT_PAID 成本事实;待付金额只来自非作废正式 AP 的 `outstanding_amount`;已付金额等于 AP `paid_amount` 加 DIRECT_PAID 金额。旧来源版本被替代或作废时,对应 DIRECT_PAID 成本事实同步失效。
主要剩余风险:测试环境尚未完成 Firstleg Relay → Finance Inbox → `fin_fee_source` 的真实 HTTP 冒烟。产品已确认无历史财务数据,不需要历史事件回放方案。
## 国内拖车离仓应付来源
- 国内拖车由 `TruckAppointmentCompletionService` 消费同库真实离仓事实:订舱全部柜型要求数量必须关联齐全,每个有效货柜的装柜计划已完成,且柜内每个入仓绑定均已确认国内离仓。多柜订舱只在最后一个柜确认后完成;创建、编辑、提交或改约重新核验,覆盖先离仓后提交。
- `TruckAppointmentFeeService` 将拖车总额按已完成装柜明细的体积归属到真实客户、订单、入仓和货柜;重复订单明细先汇总体积,按最大余数分配到分,合计严格等于总额,零分摊不生成来源。零总额不生成费用,缺失有效体积或归属直接拒绝,不均分或丢弃金额。
- 使用现有 `FEE_TYPE_108` 拖车费项目、拖车单承运商(重新校验 ACTIVE/TRUCKING)、`PAYABLE + ON_ACCOUNT`、人民币(拖车单 RMB,来源 CNY);按柜创建分摊组并由系统确认发布。柜次费用备注记录拖车业务编号与原始总额,后续调整/作废沿现有柜次分摊组与来源版本流程。
- 完成状态、`AUTO_COMPLETE` 历史、柜次费用、不可变费用快照与 `FIRSTLEG_FEE_PUBLISHED` Outbox 同事务保存。Finance 复用 `CONTAINER_FEE` 接口和幂等消费,将各来源纳入应付候选,财务按现有应付结算与付款流程处理;不自动登记付款或伪造已付。
- 订舱行锁串行化并发离仓和拖车写入,完成单不再次发布;已完成拖车的订舱不得再创建另一张自动收费单。取消、异常预约不被自动恢复。手工 DEPART/COMPLETE 动作和 USD 拖车费用已移除。