财务数据有两只钟:审核日期管"什么时候进数据池",账单归属月管"算进哪一期报表"。混用它们,是所有漏记、重记、倒改历史的总根源。
只决定「这条单子何时进入数据池」——它是取数闸门,不是分期依据。
只决定「这笔收入算进哪一期报表」——它是分期依据,不受审核时点干扰。
时间口径:
核心原则: >-
审核日期(transaction time)只决定"何时进入数据池",
账单归属月(valid time)只决定"算进哪一期报表"。
审核月封闭:
系统事实: 反审核只能在审核当月内进行,跨月不可反审核
推论: 审核月一旦结束,该月已审核记录永久冻结
铁律: 只取已完整结束的审核月,绝不取当月进行中数据
收益: 池中每条记录均为不可变最终态,无需任何历史修正机制
每条清洗规则回答三个问题:怎么做、为什么、怎么验证。剔除不是删除,是分流——被剔除的记录必须落盘留痕。
清洗规则:
- 名称: 金额转数值
背景: 源数据86%的金额存为字符串
校验: 价税合计 = 不含税金额 + 税额,全量平衡,0条不一致
- 名称: 红冲即负数项目收入
规则: 负数单据不剔除、不特殊处理,按自身审核月与归属月正常参与分期
理由: >-
原单在其所属期已计入,红冲在其所属期计为负数,
两期各自成立——无需追溯原单
剔除规则:
原则: 剔除不是删除,是分流。剔除记录必须落盘留痕,不得静默丢弃
匹配方式: 按项目编码精确匹配(不用名称模糊匹配,名称可能变更)
守恒校验: 主营业务收入 + 剔除明细金额 = 全量金额(每期必须成立)
兜底规则: >-
凡出现匹配失败的新编码,脚本必须报警提示人工判断,
不允许自动归入,也不允许自动剔除
每笔收入都要回答"归哪个部门"。链路全程只认一条归属主线,不存在双算,因此不需要任何去重逻辑。
归属链路:
主干原则: 全程只认一个部门归属,不存在双算,不需要任何去重逻辑
兜底顺序: 项目经理工号优先;查无时改用签约销售工号
工号规范化规则:
背景: HR系统工号补零3-4位,业务系统不补零,格式不一致
规则: 两侧工号统一去前导零后比对
冲突前提: 已验证不存在"去零后同值的不同工号",无需冲突拦截
一笔单据到底算哪个月?答案是一个公式、两个桶、零自由度——每条单据偏移量唯一,必然落进且只落进一期。
报表期分桶:
核心公式: 偏移 = 审核月 - 归属月
分配规则:
- 条件: 偏移 <= 1(含负数,即未来期间)
报表期: 归属月
桶: A 当期收入
- 条件: 偏移 >= 2
报表期: 审核月 - 1
桶: B 以前期间调整
不漏不重保证: 每条单据偏移唯一,必然落进且只落进一期(数学上封闭)
B桶呈现要求: >-
以前期间调整必须在报表中作为独立行展示,
不混入当期经营性收入,不倒改已发出的历史报表
实测结论: 19个月全量验证,约83%的单据审核晚1个月,
T+1 业务节奏在全周期内稳定成立
六道断言内置于流水线,任何一环失守都会当场拒绝出具报表,而不是带着错误数字上线。
校验:
- 名称: 金额守恒
断言: 保留金额 + 剔除金额 = 全量金额
- 名称: 分桶互斥
断言: 各桶记录无重叠,每条记录恰好分配到一期
- 名称: 全域不漏不重
断言: 各报表期L1加总 = 累积池金额
- 名称: 出具条件阻断
断言: 报表期T所需的审核月T+1数据不完整时,拒绝出具报表