讨论下资金监管系统设计问题
现在要做一个资金监管系统平台,通过和各个银行系统做对接,来支撑业务平台的资金流转。有个问题,就是资金流水的补录问题,补录资金流水时,原先的资金流水记录的交易前金额,和交易后金额要跟着变动吗?不同的 AI 给出的意见不一致。
AI 1:
补录流水时,应该: ║
╠════════════════════════════════════════════════════════╣
║ ║
║ ✅ 改动后续流水的"交易前金额" ║
║ ✅ 改动后续流水的"交易后金额" ║
║ ✅ 保证链条连续性 ║
║ ║
║ 理由: ║
║ - 流水必须是一条连贯的链 ║
║ - 数据一致性是金融系统的根本要求 ║
║ - 不是"改历史",而是"纠正历史" ║
║ - 这个操作必须是原子的、有事务保证的 ║
║ ║
║ 风险控制: ║
║ - 补录时加分布式锁,防并发 ║
║ - 在事务中完成所有更新 ║
║ - 记录详细的审计日志 ║
║ - 补录前后的数据快照要保存
AI 2:修正衍生数据(正确做法)
sql
-- 正确:修正基于时间顺序的计算结果
UPDATE 流水表 SET
交易前余额 = 重新计算的值,
交易后余额 = 重新计算的值
WHERE 账户 ID = 'A' AND 交易时间 > '2024-01-02'
这只是修正计算结果,而原始业务事实(交易时间、金额、对手方)保持不变。
AI 3:
不要去改动历史数据。 你应该:
保持历史流水不动,确保每一行数据一旦写入即为永恒。
新增一笔流水,其“交易前金额” = 账户当前最新余额,“交易后金额” = 交易前金额 + 补录金额。
强化备注和关联,记录这笔补录对应的原始业务日期和补录原因。

不改历史数据应该是金融系统设计的基本原则
所有的操作都需要留痕, 要不后面扯皮很烦的.