企业 贷款

Odoo 企业版贷款为什么不是“导个摊销表就完了”:计算向导、Skip Until 与提前关闭边界讲透

基于 account_loans,讲清贷款从计算、导入、跳过历史分录到提前关闭时,Odoo 如何保持余额、期间与自动分录的一致性。

企业 会计
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 4 阅读

很多人第一次看 account_loans,会以为它只是“把银行给的摊销表导进来,然后每月自动过账”。但企业版真正要解决的是另一件事:你到底是从零开始建贷款,还是半路接管历史贷款;历史期间是否已经人工入账;贷款提前结清后,后续草稿分录怎么处理。

核心入口:

  • enterprise/account_loans/models/account_loan.py
  • enterprise/account_loans/models/account_loan_line.py
  • enterprise/account_loans/wizard/account_loan_compute_wizard.py
  • enterprise/account_loans/wizard/account_loan_close_wizard.py

一、贷款并不是只有“导入 Excel”一种起点

企业版提供两条起步路线:

  1. 上传现成的摊销表,走 action_upload_amortization_schedule()
  2. 打开 account.loan.compute.wizard,让系统按金额、利率、贷款期限、首付日期和计息方法直接计算计划。

account_loan_compute_wizard.py 里最值得注意的是:它不是只算一个月供数字,而是把以下参数全部显式化:

  • payment_end_of_month:月底付还是周年日付;
  • compounding_method:30E/360、A/365F、A/A ISDA 等不同计息约定;
  • loan_type:有利率时走 annuity,无利率时走 linear。

这意味着 Odoo 不是把贷款当成“固定模板会计分录”,而是把它当成一个需要金融参数才能展开的期间计划。

二、为什么 skip_until_date 特别重要

account.loan 上的 skip_until_date 很容易被忽略,但它是企业接手存量贷款时最关键的字段之一。

action_confirm()_compute_outstanding_balance() 里都能看到它的影响:

  • 确认贷款时,早于这个日期的还款行不再生成自动分录;
  • 计算 outstanding balance 时,这些已跳过的历史 principal 也会被视为已经处理过。

换句话说,skip_until_date 不是“少生成几笔草稿”这么简单,而是告诉系统:

这部分历史期间,虽然在贷款计划里存在,但会计现实里已经由别的方式入账过了。

如果没有这个字段,很多中途上线企业会面临两种坏结果:

  • 要么重复生成历史还本付息与重分类分录;
  • 要么账上余额和系统余额永远对不上。

三、确认贷款时,系统一次性生成的不只是 payment move

action_confirm() 里真正生成了三组对象:

  1. 每期本息支付分录;
  2. 长期转短期重分类分录;
  3. 重分类的次月冲回分录。

而且重分类不是笼统按“剩余全部余额”做,而是每个月取未来 12 个月 principal 汇总,生成一笔 LT→ST,再在次月第一天自动冲回。

这说明企业版贷款模块关注的不是“每月付多少钱”而已,还要兼顾报表口径:

  • 当月损益里利息怎么进费用;
  • 负债里未来一年内到期部分如何转为短期;
  • 下个月如何回到可继续滚动计算的状态。

四、提前关闭为什么只是删未来 draft move,而不是重写整张计划

account_loan_close_wizard.pyaction_save() 非常克制:

  • 只删除关闭日期之后、且仍是 draft 的生成分录;
  • 把贷款状态改成 closed
  • 在 chatter 记一条关闭日志。

它没有试图自动重算“实际提前结清后的新摊销表”,也不会回头重写已经 posted 的历史分录。

这背后的设计非常现实:

  • 历史过账是会计事实,不能轻易回写;
  • 提前结清往往伴随银行罚息、手续费、人工调整分录;
  • 系统负责停掉未来自动化,不替代财务判断剩余结清细节。

五、最容易误解的点

1. “导入计划后金额不对,确认时系统会帮我修正”

不会。action_confirm() 先校验 amount_borrowed_differenceinterest_differenceduration_difference,不一致直接报错。Odoo 假设贷款计划必须先自洽,再生成会计动作。

2. “关闭贷款会自动冲销所有未来逻辑”

只会清未来 draft move。已经 posted 的分录,要么保留,要么按正常会计流程冲销,不会因为点了 close 就神奇消失。

3. “Outstanding Balance 等于所有未到期 principal 之和”

也不完全对。源码里它依赖已过账 payment move 和 skip_until_date,所以它反映的是系统认可为已处理后的剩余本金,不是单纯数学剩余表。

六、实战建议

  • 存量贷款切入时,先决定要走“导入计划”还是“系统计算”,不要两边混着补。
  • skip_until_date 要和首个自动化月份一起设计,否则最容易重复出历史分录。
  • 提前结清场景一定要把银行手续费、一次性利息调整与关闭动作分开处理。
  • 如果需要和资产组联动,先核对 asset_group_id 关系,再谈折旧与贷款联查报表。

七、结论

Odoo 企业版贷款模块的重点不是“帮你记月供”,而是在金融计划、历史接管、自动分录和提前关闭之间维持一致口径。真正难的地方,从来不是导入,而是边界。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。