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

该模块实现了完整的递延收入/费用处理流程,从数据验证、日期计算、金额分摊到账务处理,支持灵活的配置选项和自动化运行,确保符合会计准则要求的同时提供高度可定制化的解决方案。

Discard
Save
Review Changes ← Back to Content
Message Status Space Raised By Last update on