“银行同步”听起来像一个外部接口问题,但 account_online_synchronization 真正难的是会计一致性:第一次同步怎么开账、重复流水怎么识别、导入量太大时怎么拆批处理,都会直接影响后续对账质量。
主要参考入口:
enterprise/account_online_synchronization/models/account_online.pyenterprise/account_online_synchronization/models/account_bank_statement.pyenterprise/account_online_synchronization/models/account_journal.py
一、首次同步不是简单从最新交易开始拉
源码里专门处理 opening statement。原因很现实:如果银行当前余额和已拉回的交易总额不完全一致,系统需要补一张“首次同步开账”来对齐起点。否则账上会出现一段无法解释的历史差额。
二、重复交易检测不是只靠 transaction id
account_journal.py 里能看到两类思路:既检查在线交易标识,也检查金额 + 日期 + 账户组合,甚至还会识别 provider 标记的 duplicated 记录。这说明企业版默认假设:银行侧、连接侧、用户侧都可能制造重复流水,所以去重要多层兜底。
三、批量导入和异步补抓是为了避免“前台卡死 + 后台导重”
在 account_online.py 和 account_bank_statement.py 中,大批量交易不会一次性全塞进前台流程,而是先导一部分、剩余交给 cron 或等待同步任务继续处理。源码里甚至会在关键点显式提交,目的就是避免多线程 / 多请求并发时重复导入。
四、缺失流水与重复流水要分开看
很多财务看见余额不对,就怀疑“是不是有重复”。但系统其实把这两个问题拆开:有缺失流水时,可打开 pending / missing transaction 相关动作;怀疑重复时,则走 duplicate transaction wizard。它们解决的不是同一类错误。
五、实施注意事项
- 首次上线时先确认历史对账截止日,不要让系统从一个模糊起点开始。
- 银行连接改绑、重连或更换 provider 后,优先检查 duplicate wizard。
- 大量流水导入时,不要把“前台没全显示”误判成“没导入成功”,先看等待同步任务是否仍在推进。
六、结论
企业版银行同步的重点,不是“把接口打通”,而是让流水进入会计系统时仍然保持唯一、连续、可追溯。真正成熟的同步,永远同时处理开账、去重和异步补抓。
DISCUSSION
评论区