讨论下资金监管系统设计问题

15 条回复
67 次浏览

现在要做一个资金监管系统平台,通过和各个银行系统做对接,来支撑业务平台的资金流转。有个问题,就是资金流水的补录问题,补录资金流水时,原先的资金流水记录的交易前金额,和交易后金额要跟着变动吗?不同的 AI 给出的意见不一致。
AI 1:
补录流水时,应该: ║
╠════════════════════════════════════════════════════════╣
║ ║
║ ✅ 改动后续流水的"交易前金额" ║
║ ✅ 改动后续流水的"交易后金额" ║
║ ✅ 保证链条连续性 ║
║ ║
║ 理由: ║
║ - 流水必须是一条连贯的链 ║
║ - 数据一致性是金融系统的根本要求 ║
║ - 不是"改历史",而是"纠正历史" ║
║ - 这个操作必须是原子的、有事务保证的 ║
║ ║
║ 风险控制: ║
║ - 补录时加分布式锁,防并发 ║
║ - 在事务中完成所有更新 ║
║ - 记录详细的审计日志 ║
║ - 补录前后的数据快照要保存

AI 2:修正衍生数据(正确做法)
sql
-- 正确:修正基于时间顺序的计算结果
UPDATE 流水表 SET
交易前余额 = 重新计算的值,
交易后余额 = 重新计算的值
WHERE 账户 ID = 'A' AND 交易时间 > '2024-01-02'
这只是修正计算结果,而原始业务事实(交易时间、金额、对手方)保持不变。

AI 3:
不要去改动历史数据。 你应该:

保持历史流水不动,确保每一行数据一旦写入即为永恒。

新增一笔流水,其“交易前金额” = 账户当前最新余额,“交易后金额” = 交易前金额 + 补录金额。

强化备注和关联,记录这笔补录对应的原始业务日期和补录原因。

前排打手
Guardian

不改历史数据应该是金融系统设计的基本原则

所有的操作都需要留痕, 要不后面扯皮很烦的.

种子用户

+1,这应该是最基本常识,甚至属于通识,我很奇怪这么多人这都不知道。

前排打手
Guardian

展示的话 就随你怎么处理了, 可以用视图或者用其他的手段给前端来展示, 但是一定要有地方查原始数据

引路者
OP

补录流水时,流水的原始业务事实(交易时间、金额、对手方)肯定是不改的。交易前余额、交易后余额这两个衍生数据如何处理,目前有些纠结。新增一笔补录流水,目前 2 种方案,一种是:其“交易前金额” = 账户当前最新余额,“交易后金额” = 交易前金额 + 补录金额。另外一种是,其“交易前金额” = 回溯至业务时间点的余额,“交易后金额” = 交易前金额 + 补录金额,该时间点后的流水中的交易前后数据统一修改。

引路者
OP

在金融系统中,“余额”是“入库顺序”的属性,而不是“业务时间”的属性。要保持流水链条的一致性,还是衍生数据的不可变。各有利弊,没想好如何取舍。问了 AI 后,感觉更乱了。facepalm

前排打手

不是改, 新增一条记录, 一笔流水就行

而且这玩意不是很严格的一套流程么,没产品吗?你拍板?

引路者
OP

不是改原先的流水原始业务事实,原先流水的交易金额和对方账户肯定是不变的,是交易前余额、交易后余额这 2 个衍生数据。

前排打手

我不是专业的,但是你补了一条的话,金额变化的话, 这两个数据肯定会变吧,

类似于 冲平 我理解

引路者
OP

现在的问题是新增的一条记录,新记录里的交易前余额,是在目前余额的基础上,还是回溯至当时的余额基础上。

种子用户

历史数据不可有任何变更属于金融甚至商科的基本常识,但是我很奇怪为啥 AI 能想出不同意见来。

引路者
OP

Gemini:不允许变更,即使是衍生数据。
DeepSeek:允许变更衍生数据。
Codebuddy:允许变更衍生数据。

发表一个评论

R保持