先说结论
很多人第一次看 Odoo 银行对账模型,会把它理解成自动生成分录的模板。
这个理解不能说全错,但不够深。
account.reconcile.model 真正在做的事情是:
根据银行流水特征,判断这条流水该不该触发某种建议、映射或自动对账动作。
所以它的核心不是模板本身,而是:
- 匹配条件
- 触发方式
- 生成的对账建议或分录结构
- 自动化边界
为什么它不是普通模板
如果只是普通模板,系统根本不需要那么多 match_* 字段。
官方模型里你会看到:
match_journal_idsmatch_amountmatch_amount_min/maxmatch_labelmatch_label_parammatch_partner_idstrigger
这说明对账模型关注的第一件事,不是记什么账,而是:
这条银行流水是否长得像我应该接管的那一类。
也就是说,它先是匹配器,然后才是动作模板。
trigger 为什么特别关键
源码里 trigger 有两个核心取值:
manualauto_reconcile
这两个值背后的业务语义差别非常大:
manual:系统给你建议,但人来确认auto_reconcile:满足规则时,系统允许自动完成
所以很多实施项目里,对账模型不是会不会配的问题,而是敢让它自动到什么程度的问题。
match_label 和 regex 为什么这么有用
银行流水里的信息,经常不是整整齐齐结构化字段,而是:
- 备注
- 摘要
- 交易说明
- 渠道返回文本
所以官方提供:
- contains
- not_contains
- match_regex
甚至在模型行里,金额还支持 regex 从 label 中提取数值。
这说明 Odoo 对现实世界的理解很务实:银行流水很多时候不是靠完美结构字段匹配,而是靠半结构化文本识别。
为什么 can_be_proposed 很能说明设计思想
源码会根据匹配条件和触发方式去计算 can_be_proposed。
它说明对账模型不是永远硬执行,而是分成:
- 能不能在当前场景提出建议
- 能不能进一步走自动处理
所以 Odoo 在这块的设计其实比很多人想的谨慎:既追求自动化,也保留人工判断空间。
一句话记忆法
它不是自动记账模板,而是先识别哪类银行流水值得接管,再决定怎么建议或自动对账的规则引擎。
DISCUSSION
评论区