通用关联交易(集团内部交易)核对
用途
对集团关联交易核对表做勾稽校验:同一笔关联交易由两个公司分别填列(本方 vs 对方),需确认双方金额一致。
何时使用
- 用户发来或指向一份"关联交易核对表""关联往来核对""内部交易抵消底稿"等 xlsx。
- 要求"核对关联交易是否相符""校验校验列/ L 列""找出不符项""重做校验公式"。
- 涉及"序号、公司主体、对方公司、报表类型、余额、累计发生、校验"等列。
- 要求"生成空白关联交易核对表模板""做个示例模板教大家怎么填"。
核心判定逻辑(务必理解,这是技能关键)
- 分组:按"序号"列(默认 A)相同的值归为一组,每组即一笔关联交易。
- 分侧:按"公司主体"列(默认 B)把组内行分为"本方"(与本行 B 相同)与"对方"(与本行 B 不同)。只按 B 列切分,不依赖对方公司名(C 列),因此对方公司名称写成别名也不会漏配对。
- 取数:组内每一行按自己的"报表类型"列(默认 D)取数——D="资产负债表"取"余额"列(默认 H),否则取"累计发生"列(默认 J)。这样跨报表类型(一侧在资产负债表、一侧在利润表)也能正确汇总。
- 汇总比对:本方合计、对方合计各自求和后,比较绝对值
|本方| = |对方|(四舍五入到分)。
- 用绝对值兼容借贷反向:同一笔内部交易,一方记资产/收入(正),另一方记负债/成本(负),二者互为相反数仍属相符(如示例序号 52、78、83)。这正是"剔除反号影响"的设计。 - 空行:序号为空的行返回空白,不出脏值。
> 关键取舍:默认把"金额同值反向"判为相符。若用户要求"必须同向相等才算相符",去掉公式中的 ABS(...)(改为两侧直接相减等于 0)即可。
工作流程(每次执行都按此顺序)
- 备份:改动前先把原文件复制一份带时间戳的备份到同目录或草稿目录。
- 识别工作表与列:调用本技能
scripts/verify.py的detect_sheet/detect_columns(以数据内容驱动,抗表头错位)。若自动识别不准,用--seq/--own/--report_type/--balance/--accumulated/--check手动指定列字母。 - 先独立核算(不写文件):运行
python scripts/verify.py --file <路径>,查看列映射、各组 TRUE/FALSE 与差异清单,确认逻辑符合预期。 - 写入公式并重算:
python scripts/verify.py --file <路径> --write。脚本会:
- 在"校验"列写入整列引用的 SUMIFS 公式(便于后续加行直接下拉);
- 用本机 Excel 真实重算(win32comCalculateFull)并缓存结果;
- 若本机无 Excel/pywin32,提示公式已写入、需手动重算。 - 汇报:给出总组数、TRUE/FALSE 数;若有 FALSE,列出序号、行号范围、差额与各方金额,提示人工复核(真实差额 vs 名称/取数问题)。
生成模板(一键空白 / 示例)
当用户需要一份可直接下发的空白核对表,或想看一份带典型样本的示例表时,运行 scripts/make_template.py:
- 空白模板:
python scripts/make_template.py --output 空白核对表.xlsx [--rows 200] - 生成 12 列表头(A–L,与
references/column_structure.md一致)+ 数据区预留--rows行;L 列已预填校验公式(空行 A 为空时公式返回空白,不出脏值),各集团打开照填即可。 - 示例模板:
python scripts/make_template.py --output 示例核对表.xlsx --sample - 在空白模板基础上填入 5 组典型样本:① 同号相符 ② 借贷反向相符(剔除反号)③ 跨报表类型相符 ④ 对方公司别名免疫 ⑤ 一条故意不符(演示差异清单);示例表 L 列公式会调用本机 Excel 真实重算并缓存结果。
生成的模板与核对工具同源:表头布局、build_formula、列识别完全一致。因此空白表填完数据后,直接调用 verify.py 即可核对,无需任何手工改公式。
技能自带样例:examples/示例核对表.xlsx(已用 Excel 重算,可直接打开查看 5 组典型勾稽效果)。
写入校验列的公式形态(行号为 r)
=IF($A{r}="","",IF(ROUND(ABS(SUMIFS(H:H,$A:$A,$A{r},$B:$B,$B{r},$D:$D,"资产负债表")+SUMIFS(J:J,$A:$A,$A{r},$B:$B,$B{r},$D:$D,"<>资产负债表"))-ABS(SUMIFS(H:H,$A:$A,$A{r},$B:$B,"<>"&$B{r},$D:$D,"资产负债表")+SUMIFS(J:J,$A:$A,$A{r},$B:$B,"<>"&$B{r},$D:$D,"<>资产负债表")),2)=0,TRUE,FALSE))
(列字母按实际识别结果替换。)
列结构与识别说明
详见 references/column_structure.md。
注意事项
- 金额单位为"元",四舍五入位数可用
--round调整(默认 2)。 - "资产负债表"字样为余额列判定关键字,可用
--balance-report-type改成实际用词(如"合并资产负债表")。 - 数据列(H/J)应为数值;若本身是公式,确保已计算。
- 校验列公式用整列引用,新增数据行后把公式下拉即可,无需改脚本。
- 本技能只读取/改写"校验"列,不改其他列;列识别以数据驱动为主、表头为辅。
脚本参数速查(scripts/verify.py)
--file <xlsx>(必填)--sheet <表名>(可选,默认自动识别关联交易核对表)--write(可选,写入公式 + Excel 重算;不带则仅核算并打印报告)--balance-report-type 资产负债表--seq/--own/--other/--report_type/--balance/--accumulated/--check <字母>手动覆盖列--round 2
脚本参数速查(scripts/make_template.py)
--output <xlsx>(必填,输出路径)--sample(可选,生成示例模板;不带则生成空白模板)--rows 200(空白模板预留数据行数,默认 200)