Qeasy Cloud
Get Started

对完账要不要开票:单据、发票、申报三张表怎么勾稽

· 卢剑航· AI Financial Reconciliation· 28 views· 10 min read
对账与开票发票勾稽纳税义务单据状态机推送幂等

摘要:对完账要不要开票?答案是「不必先开票」。「是否开票」是一个默认是否的字段,跟对账单据解耦,发票号、开票日期、归属部门在单据审核前补录就行。先开票会把纳税义务提前到开票日,但收入确认落在哪个月不会跟着变。这篇把收入确认、纳税义务、开票三条时间轴拆开,再讲单据、发票、申报三张表怎么逐单勾稽,容差是 0。 关键词:对账与开票、发票勾稽、纳税义务、单据状态机、推送幂等

一、先把问题问对:对完账不必先开票

"账对完了,是不是就可以开票?"

这个问题我被问过很多次。背后的直觉很顺:账是账,票是票,账对平了才谈得上开票,票开了才谈得上报税。

这个顺序是错的。

准确的说法是:「是否开票」就是一个是否字段,默认值是否。它跟对账单据是解耦的两件事。发票号、开票日期、归属部门这几个信息,是在单据审核之前补录进去的——不是前置条件,更不是一道闸门。

这里还得补一句最要紧的:开票本身不改变收入金额,也不改变应收金额。 单据本身也不产生分录。分录是单据进了 ERP 之后由账务处理生成的,跟开票没有先后关系。

为什么这么多年大家都觉得"不对完账不能开票"?因为在税务的日常说法里,"开票"这个词同时绑着"发生纳税义务"和"能拿去申报"两件事。听的人自动把它们压成了一个动作,于是"票没开"就等于"账没做完"。

对账和开票可以解耦,但金额不能解耦。 这句话是这一篇的骨架:时间上可以分开,金额上必须咬死。

二、三条时间轴:收入确认、纳税义务、开票

这三件事各有各的触发条件,排序不能混。

时间轴什么时候算发生影响什么会不会改收入金额
收入确认控制权转移——货发了、风险报酬转了利润表的收入和成本决定收入落在哪个月
纳税义务收讫款项、取得凭据、先开票,三者取最早增值税纳税义务发生时间不改,但可能把税提前
开票税务动作,在税控或电子发票平台做税务凭证、进项抵扣依据不改,只产生凭证

看这张表的最后一列:不改。

先开票,税负就提前了,但收入月不会跟着变。

举个例子。一个 13% 的订单,10 月 20 日发货,11 月 15 日平台结款,11 月 20 日你才想起来开票。11 月 20 日开票,增值税纳税义务就落在 11 月。但收入确认看的是控制权转移,10 月 20 日就转了,收入还是 10 月的收入。

常识在这里为什么会失效? 因为日常经验是"票在手上才算数",而税法把"先开票"单列成一条独立的纳税义务发生情形。这一条被多数人听成了"提前确认",其实它提前的只是税,不是收入。

所以三条线要分开记,走到哪里是哪里的事。对完账不等于到了开票点;开完票不等于收入确认过了;两件事都过了,也不等于申报做完了。

三、三张表怎么勾稽:单据、发票、申报

对账做完后,财务手上其实有三张表:

  • 对账单据表——从对账结果转换出来、准备进 ERP 的单据;
  • 发票表——税控或电子发票平台导出的开票明细;
  • 申报表——增值税纳税申报表及其附列资料。

这三张表要逐单勾稽:单据金额 = 发票金额 = 申报金额,容差 0。

容差 0 三个字听着狠,但没得商量。三张表要对得上,差一分钱都要找出来。

勾稽维度单据发票申报
金额口径含税含税;专票另列税额不含税销售额与销项税额分列
一条对应几行一单一勾稽一票一勾稽一票一行
允许偏差000
最常见的断点漏生成、生成失败漏开、错开、红冲未做票开了却没申报

看第一行。三张表在"含税还是不含税"上并不统一:单据和发票都是含税列示,申报表是拆开的——不含税销售额一栏、销项税额一栏。可这两栏加起来,还是同一个含税金额。这就是容差能取 0 的前提:先把口径折到同一个数上,再逐单比。

还要提醒一句:发票有开票日期,申报有所属期,单据有账期,三个时间还不在同一条轴上。三张表勾稽的是金额,不是时间;时间上的对应关系归另一张表管。

那"逐单"在系统里怎么落地?在轻易云的单据上,这条规则是落成字段的:「是否开票」默认否,发票号、开票日期、归属部门三个位子在单据审核前补录,审核不因为票还没到就卡住。审核时按单据号一单一勾稽,对不上的挂差异原因,金额不允许就地改平。

四、票种和金额口径:专票、普票、数电票、红字票

三张表能勾稽,前提是大家说的是同一个口径。票和金额最容易出岔子的就在这儿。

票种能不能抵进项形式电商里常见的主体
增值税专用发票能纸质或电子B2B 采购方、一般纳税人
增值税普通发票不能纸质或电子B2C 消费者、个人客户
数电票(全面数字化的电子发票)按票种判定电子平台与企业之间开票
红字发票冲减原蓝票纸质或电子退款、折让、开票有误

这张表里有四句话要记住。

第一,专票能抵进项,普票不能。这是票种之间最硬的差别。B2C 零售通常开普票或电子票,B2B 批量销售通常开专票——不是开票人心情好,是购买方能不能抵决定了票种。

第二,纸质和电子,法律效力相同。数电票跟纸质票一样,不用因为"是电子的就打个折"。

第三,金额口径三条:单据和发票都含税列示;专票另列税额;红字发票金额为负。负号很重要,勾稽的时候不能取绝对值。

第四,开票不改变收入金额。这一句前面已经说过两遍了,还得再说——它是这一篇最容易被丢掉的一句。票面金额是价税合计,账上的收入是另一个口径下的数,两个数用途不同,不要互相替代。

具体某个客户该开专票还是普票、什么时候开票,这类没有统一答案,要由财务负责人拍板并写进核算政策。

五、单据怎么进 ERP:状态机、幂等、回读校验

勾稽台账里的"单据号"是从这一步来的,所以这节跟发票没关系,但跟台账能不能长期活着有关系。

单据状态机只有四个状态:草稿 → 已确认 → 推送中 → 已推送 / 推送失败。有个细节别忽略:只有已确认能推。草稿推不出去,这是设计,不是故障。

集成转换完整流程图,五个阶段依次是对账结果、生成批次、集成转换沙箱、整体确认和推送 ERP,推送侧标出提交、补录发票字段、提交、审核四步

这张流程图分五段:对账结果(已确认)→ 生成批次 → 集成转换沙箱 → 整体确认 → 推送 ERP。推送侧还有一条四步链:提交、补录发票字段、提交、审核。

其中**"补录发票字段"就挂在第二步**——第三节说的开票信息补录,落在流程上就是这里。它既不在最后一步,也不是开完票才回填,而是在单据进 ERP 的中途就能补进去。图上还标了金额禁改和推送后的外部单号回写,这两样都是为了让"这张单据在 ERP 里是哪一张"能被认准。

然后是最容易出事的一处:幂等。

  • 推送型(财务应收下推)天然幂等。同一个来源推两次,ERP 侧按来源匹配,不会多出第二张单。
  • 保存型——费用应收、费用应付、销售收款、银行转账这四类——没有幂等拦截。重推一次,就是多一张单。

区别在语义:推送型是"更新已有单据",保存型是"新建单据"。新建没有天然的主键约束,重推自然就重复。

保存型怎么防重?靠表头传一个防重字段:「轻易云单据编号」= 平台枚举码 + 推送时刻。平台枚举码区分来源,推送时刻区分批次,两者拼在一起,重复推送也认得出来。

集成中心集成方案页的 handler 全字段明细视图,逐条列出方向、ERP 产品、场景、调度窗口与偏移等参数

这是集成中心的方案明细页。9 个 handler 逐条摊开,一行一条。实施顾问看这张表,重点看两列:方向(这批数据是往里拉还是往外推)和场景(对应哪张单据类型)。判断某个单据类型重推会不会多出一张单,先在这里确认它走的是推送还是保存。

集成中心方案页的全景列表,9 个 handler 按健康检查、拉取、推送等方向排列,右侧标注对应的金蝶云星空单据类型

这是同一套方案清单的全景视图,把 9 个 handler 按方向和场景排在一起。往里拉的是健康检查和那类从 ERP 取数的单据,往外推的是银行转账、收款单、应收、财务应收这些。同一个页面上能同时看到拉和推,是因为勾稽要闭环:往回拉的凭证和往外挂的单据得对得上,才谈得上容差 0。

推送之后必须回读校验——分录行数与金额合计,容差 0.005。行数必须对得上;金额合计允许 0.005 以内的偏差,那是分位舍入的余量,超过这个数,推送就不能算成功。

实证:亚马逊美国的一个批次,12 张单据合计 480,111.67 元,其中已推送 11 张、含异常体行 1 张。那 1 张含异常体行的,就是回读校验该拦下来的。

六、三个坑,和一张台账怎么落地

坑一:把「是否开票」当收入确认的条件。单据卡在"等发票",账就做不下去;最后为了赶进度先把票开了,收入确认月和开票月混成一团。

坑二:用发票金额替代对账金额。发票是价税合计,对账金额是按核算项目归集出来的数,两个数不是一回事。拿发票去倒推差异,差异就永远查不出来。

坑三:单据和发票金额长期不一致,却没人核对。不核对不等于没问题,只等于问题被推迟到申报那天。

坑还有一个,属于机制问题不是口径问题:三方勾稽要有台账。在轻易云的做法里,这张台账的字段直接落在单据上——「是否开票」、发票号、开票日期、归属部门,和单据号、含税金额放在一张单里;对账结果和开票信息天然对齐,账期和申报所属期的对应关系也跟着落在这张单上,三方勾稽不用另外维护一张映射表。

台账字段大致就是这些:

台账字段谁填什么时候填勾稽时看什么
账期财务对账确认时三方是否落在同一期
单据号系统转换出单时是否一单一号
发票号财务开票后回填是否一票一单
含税金额系统 / 财务确认与开票时三方是否相等,差 0
票种财务开票后回填专票还是普票,能否抵进项
开票日期财务开票后回填是否早于申报所属期
申报所属期财务申报时这张票本期申报了没有
差异原因财务发现差异时差异归到哪一类,怎么收口

这张表的价值不在字段本身,在于它把"差一分钱"变成一个有名字、有责任人、有收口方式的东西。没有台账,差异就散在三个人的表格里,永远对不齐。

业务价值金字塔图,自下而上分为自动化、标准化、智能化、精细化核算、战略决策支持五层

这张金字塔自下而上五层:自动化、标准化、智能化、精细化核算、战略决策支持。财务待得最久的通常是底下两层——自动化是"单据自动推送、金额自动回读校验",标准化是"一单一号、一票一单、台账口径统一"。勾稽台账属于标准化那一层的事,它本身不产生决策价值,它只是让上面几层不用天天替它兜底。


三条今天就能做的动作

第一,挑一个已经关掉的账期,把三张表拉出来按单据号逐条对:单据含税金额、发票价税合计、申报的不含税销售额加销项税额,允许差 0。先做一个账期,把差额和差异原因列出来,不追求一次全平。

第二,检查自己系统里"开票信息"是在哪个环节补的。如果现在是"票没到就不能确认单据",把它改成"确认前补录",单据审核不等票。

第三,给自己列一张推送型、保存型的单据清单,把费用应收、费用应付、销售收款、银行转账这四类标上"重推会重复",下次推送前先确认是不是真的失败,而不是没翻日志。

Original content. Please credit the source when reposting: https://www.qeasy.cloud/insights/reconciliation/16-7-invoice-billing-reconciliation

Comments