人财事物信息化 - deferred_revenue.py
该文件是ERPNext中处理递延收入/费用的核心模块,主要实现以下功能:
- func
validate_service_stop_date
- func
build_conditions
- func
convert_deferred_expense_to_expense
- func
convert_deferred_revenue_to_income
- func
get_booking_dates
- func
calculate_monthly_amount
- func
calculate_amount
- func
get_already_booked_amount
- func
book_deferred_income_or_expense
- func
process_deferred_accounting
- func
make_gl_entries
- func
send_mail
- func
book_revenue_via_journal_entry
- func
get_deferred_booking_accounts
- 数据验证
validate_service_stop_date()
:验证服务停止日期- 确保停止日期不早于开始日期
- 确保停止日期不晚于结束日期
- 禁止修改已存在的停止日期
- 条件构建
build_conditions()
:动态构建SQL查询条件- 根据处理类型(收入/费用)选择递延科目
- 支持按公司和账户过滤
- 递延处理核心逻辑
convert_deferred_expense_to_expense()
:递延费用转实际费用convert_deferred_revenue_to_income()
:递延收入转实际收入- 查询符合时间范围的销售/采购发票
- 调用
book_deferred_income_or_expense()
进行账务处理
- 日期计算
get_booking_dates()
:计算入账期间- 考虑历史GL条目日期
- 处理服务中断日期
- 支持跨月/跨年期间的智能分割
- 金额计算
calculate_monthly_amount()
:按月平均分摊计算- 处理非整月情况下的按比例分摊
calculate_amount()
:按实际天数计算- 精确到每日分摊金额
- 账务处理
make_gl_entries()
:直接生成总账分录- 创建借贷方GL条目
- 处理多币种场景
book_revenue_via_journal_entry()
:通过日记账处理- 支持科目维度(成本中心等)
- 可选择自动提交日记账
- 辅助功能
process_deferred_accounting()
:月末自动处理- 后台定时任务实现
- 生成"Process Deferred Accounting"记录
- 错误处理机制:
send_mail()
给系统管理员- 事务回滚机制
- 错误日志记录
- 特色功能
- 支持两种分摊方式:
- 按月平均分摊
- 按实际天数分摊
- 支持两种记账方式:
- 直接GL记账
- 通过日记账记账
- 冻结账户处理:
- 自动调整过账日期避开冻结期
- 多维度核算:
- 处理成本中心等核算维度
- 服务中断处理:
- 支持中途停止服务场景
- 安全机制
- 会计期间冻结检查
- 金额精度控制
- 文档状态验证(仅处理已提交单据)
- 多层级错误处理(事务回滚+邮件通知)
该模块实现了完整的递延收入/费用处理流程,从数据验证、日期计算、金额分摊到账务处理,支持灵活的配置选项和自动化运行,确保符合会计准则要求的同时提供高度可定制化的解决方案。