合并报表往来核对

几十家子公司报表口径不一,内部往来对不平

规则型 集团企业
输入数据
各主体试算表、科目映射、内部交易明细
核心方法
科目映射 + 内部往来双边匹配
输出物
合并底稿、抵消分录、对不平清单
内部往来核对与抵消

内部往来核对与抵消

工作流文件名:FA11_consolidation

20 个步骤 · 20 条连接 · 20 条判定规则 · 由规格自动渲染,确认后再生成工作流

这个模型解决什么

几十家子公司报表口径不一,同一笔内部交易两边记的科目和金额都对不上,合并前光是核对往来就要几天。

归集和核对是合并报表里最耗时、也最容易出错的部分,而且每期都要重做一遍。把科目映射和往来配对固定下来之后,每期跑一遍几分钟出差异清单,财务只处理真正有问题的那几笔,剩下的对平项可以直接生成抵消依据。

模型编号:FA11领域:财务与内部审计使用频率:每月或每季度谁来用:集团财务、合并报表岗、内审
适用场景
  • 月度或季度合并前的往来核对:先把对不平的找出来,通知双方调账
  • 科目口径体检:找出各主体用了集团科目表里没有对应关系的本地科目
  • 审计底稿:内部交易抵消的依据与差异说明
口径假设
  • 差额绝对值不超过 1,000 元视为对平,可直接抵消
  • 科目对应关系为应收对应付、收入对成本
  • 一方完全没有入账的列为单边挂账,不自动抵消
  • 同一对主体同一科目组合按期间汇总后比较,不逐笔匹配
适用边界
  • 不做会计准则意义上的合并:股权抵消、少数股东权益、商誉、外币折算都不在范围内
  • 不生成抵消分录,只输出可抵消金额与差异清单
  • 不处理跨期差异(本期确认、对方下期确认)的自动跨期匹配
  • 多层持股结构下的逐级合并需另行设计

数据来源

report_data.csv 读取各主体报表数据
主体编码期间本地科目本地科目名称往来主体金额备注
account_mapping.csv 读取科目映射表
主体编码本地科目本地科目名称集团科目集团科目名称
entities.csv 读取合并范围主体
主体编码主体名称记账本位币合并范围

处理步骤

取数 判定 关联与汇总 输出
  • 1. CSV读取器 读取各主体报表数据 上游:—
    • 文件:report_data.csv
  • 2. CSV读取器 读取科目映射表 上游:—
    • 文件:account_mapping.csv
  • 3. CSV读取器 读取合并范围主体 上游:—
    • 文件:entities.csv
  • 10. 表关联 归集:映射到集团科目 上游:1、2
    • 左表关联列:主体编码、本地科目
    • 右表关联列:主体编码、本地科目
    • 排除列:本地科目名称
  • 11. 表关联 找出没有映射关系的科目 上游:1、2
    • 只要未匹配的行(反连接)
    • 保留左表未匹配行
    • 左表关联列:主体编码、本地科目
    • 右表关联列:主体编码、本地科目
  • 12. 规则引擎 标记口径问题 上游:11
    • 新增列:问题类型
    • 规则:TRUE => "本地科目未配置集团科目映射"
  • 13. CSV写入器 写出未映射科目清单 上游:12
    • 文件:result_unmapped.csv
  • 20. 基于规则的行过滤器 只留内部往来 上游:10
    • 规则:MISSING $往来主体$ => FALSE
    • 规则:TRUE => TRUE
  • 21. 分组聚合 按主体+科目+往来对象汇总 上游:20
    • 分组列:主体编码、集团科目、往来主体
    • 聚合列:金额
  • 22. 规则引擎 确定对方应记科目 上游:40
    • 新增列:对方科目
    • 规则:$集团科目$ = 1122 => "2202"
    • 规则:$集团科目$ = 2202 => "1122"
    • 规则:$集团科目$ = 6001 => "6401"
    • 规则:$集团科目$ = 6401 => "6001"
    • 规则:TRUE => "无对应"
  • 23. 表关联 与对方账面两两配对 上游:22、40
    • 保留左表未匹配行
    • 左表关联列:主体编码、往来主体、对方科目
    • 右表关联列:往来主体、主体编码、科目键
  • 24. 数学公式 计算双方差额 上游:23
    • 表达式:$Sum(金额)$ – $Sum(金额) (对方)$
    • 新增列:差额
  • 25. 规则引擎 判定核对状态 上游:24
    • 新增列:核对状态
    • 规则:MISSING $差额$ => "单边挂账:对方未入账"
    • 规则:$差额$ <= 1000 AND $差额$ >= -1000 => "对平:可抵消"
    • 规则:TRUE => "差额待核"
  • 26. 规则引擎 风险等级 上游:25
    • 新增列:风险等级
    • 规则:$核对状态$ = "单边挂账:对方未入账" => "高"
    • 规则:$核对状态$ = "差额待核" => "中"
    • 规则:TRUE => "低"
  • 27. 基于规则的行过滤器 每对只保留一行 上游:26
    • 规则:MISSING $差额$ => TRUE
    • 规则:$主体编码$ < $往来主体$ => TRUE
    • 规则:TRUE => FALSE
  • 28. 数学公式 可抵消金额取两者较小值 上游:27
    • 表达式:if($Sum(金额)$ < $Sum(金额) (对方)$, $Sum(金额)$, $Sum(金额) (对方)$)
    • 新增列:可抵消金额
  • 29. 规则引擎 排序键 上游:28
    • 新增列:排序键
    • 规则:$核对状态$ = "单边挂账:对方未入账" => 1
    • 规则:$核对状态$ = "差额待核" => 2
    • 规则:TRUE => 3
  • 30. 排序器 按状态与主体排序 上游:29
    • 排序列:排序键、主体编码
  • 31. CSV写入器 写出往来核对结果 上游:30
    • 文件:result.csv
  • 40. 字符串处理 集团科目转文本作关联键 上游:21
    • 表达式:string($集团科目$)
    • 新增列:科目键

判定规则汇总

节点所在步骤规则
12标记口径问题TRUE => "本地科目未配置集团科目映射"
20只留内部往来MISSING $往来主体$ => FALSE
20只留内部往来TRUE => TRUE
22确定对方应记科目$集团科目$ = 1122 => "2202"
22确定对方应记科目$集团科目$ = 2202 => "1122"
22确定对方应记科目$集团科目$ = 6001 => "6401"
22确定对方应记科目$集团科目$ = 6401 => "6001"
22确定对方应记科目TRUE => "无对应"
25判定核对状态MISSING $差额$ => "单边挂账:对方未入账"
25判定核对状态$差额$ <= 1000 AND $差额$ >= -1000 => "对平:可抵消"
25判定核对状态TRUE => "差额待核"
26风险等级$核对状态$ = "单边挂账:对方未入账" => "高"
26风险等级$核对状态$ = "差额待核" => "中"
26风险等级TRUE => "低"
27每对只保留一行MISSING $差额$ => TRUE
27每对只保留一行$主体编码$ < $往来主体$ => TRUE
27每对只保留一行TRUE => FALSE
29排序键$核对状态$ = "单边挂账:对方未入账" => 1
29排序键$核对状态$ = "差额待核" => 2
29排序键TRUE => 3

期望结果

示例数据下应得到 7 行,按「主体A」分布如下。运行后与 expected_result.csv 逐行比对。

2C03
2C01
1C05
1C02
1C04
iModel 专属客服
在线留言或电话联系
在线留言

留下您的问题和联系方式,我们会在一个工作日内回复。

手机与邮箱至少填一项

4008568196 拨打此号码联系我们

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码