Nordlet

← 文档 / 术语表

什么是不可变总账?审计线索与为什么删除分录是一个 Bug

为什么已过账的会计分录绝不能被修改或删除、只增不减(append-only)总账中的更正如何运作、以及期间锁定和审计日志究竟能保证什么。

不可变总账(immutable ledger)是指已过账的分录永远不会被修改或删除的总账。更正通过添加冲销或调整旧分录的新分录来进行,因此账簿的历史本身就是账簿的一部分。

这并非技术偏好。正是这一点,让会计记录成为了证据,而不是对过去的临时观点——这也是为什么“为日记账分录添加删除按钮”是一个应当被拒绝的请求。

为什么编辑和删除会破坏一切

审计线索就是产品。 复式记账法(double-entry bookkeeping)的宗旨在于,每一个余额都可以分解为生成该余额的分录。如果分录可以被悄悄篡改,这种分解就没有任何证明力:审计线索显示的只是某人最近认为它应该显示的内容。

已申报数据与账簿不符。 3月份提交的增值税申报表引用的是3月份的数字。如果在6月份编辑3月份的发票,你的总账将不再与已经提交给税务机关的文件保持一致。直到对账时才会有人发现,而到了那时,问题根源已经掩藏在几个月前的交易之下了。

欺诈变得无形。 检测操纵行为依赖于能够看出发生了更改。在可以就地编辑分录的地方,什么也看不出来——这正是欧盟各地的税务机关要求会计记录必须具备防篡改(tamper-evident)能力的原因,也是几个国家专门针对这一特性对计费软件进行认证的原因。

分布式状态产生分歧。 如果一张发票已发送给客户、导出为银行文件、传输至电子发票平台并被合作伙伴 API 读取,那么编辑你手中的副本并不会改变对方手中的内容。你并没有纠正错误,而是制造了一个差异。

更正实际是如何运作的

每一个合法的更正都是一次添加:

情况 正确的机制
错误的日记账分录 登记其冲销分录,然后登记正确的过账
发票金额错误 开具红字发票(credit note),如有必要再开具新发票
期间错误 在当前开放期间登记,日期为更正发生时的日期
估计值被替代 冲销应计项目,登记实际发生额——参见应收收入

其结果读起来就像是一个叙事:这是我们当时的设想,这是我们发现情况并非如此的时间,这是更正内容。审计人员询问“发票 S-1041 发生了什么?”时,得到的将是一个完整的答案,而不是一个似乎从一开始就是这个数字的数值。

这样做的代价是,总账将永远包含错误。这正是关键所在——账簿中没有显示任何更正的公司,要么极其幸运,要么一直在编辑账簿。

不可变性并非什么

  • 并非“什么都不能修”。 任何事情都可以更正;更正的方法是添加,而不是覆盖。
  • 并非区块链。 密码学链条是实现防篡改的一种实现方式;带有强制约束和审计日志的只增不减关系型总账,无需分布式共识的累赘即可为你提供所需的会计属性。
  • 不等于审计日志。 审计日志记录的是谁做了什么。不可变性意味着会计数据本身不会改变。这两者你都需要,它们回答的是不同的问题。
  • 不适用于草稿。 草稿发票是工作文档,可以自由编辑。不可变性始于开具——即该文件对其他人产生法律效力的那一刻。

Nordlet 如何强制执行这一点

通过三种机制,全部属于结构性而非惯例性机制:

已过账分录只增不减。 日记账分录是一次性写入的。没有任何端点可以编辑或删除已过账的交易,并且 POST /v1/ledger/ledger/journal/transactions/create 会在写入前进行验证——借方必须等于贷方、账户必须存在且允许过账、期间必须处于开放状态。不平衡的总账是数据库无法表示的状态。

期间锁定。 POST /v1/ledger/periods/lock 会关闭一个月份,任何日期落在已锁定期间内的交易都会被拒绝——无论它是来自手动分录、发票、银行导入还是自动化确认运行。锁定是使已申报报表与账簿永久保持一致的关键,而解锁本身也是一项经过审计的操作。accounting-period 文章涵盖了相关工作流。

一切均可审计。 改变状态的操作会写入审计日志,记录操作主体、操作行为、实体以及差异(diff)——包括自动化操作,它们会记录系统主体,而不是假装是人类做的。当跨公司镜像创建发票时,两家公司的日志都会显示这一点。

遵循相同的规则:开具销售发票会从无间隙序列(gapless series)中分配一个编号并过账;事后更正意味着开具红字发票,绝非直接编辑。原始发票、红字发票以及由此产生的余额都将在客户历史记录中保持可见。

草稿文档保持完全可编辑状态,删除则是软删除(soft delete)——即通过一个 deletedAt 时间戳将记录从活动查询中隐藏,同时予以保留。

FAQ

什么是不可变总账?

这是一种会计总账,其中已过账的分录永远不会被修改或删除。更正通过添加冲销或调整分录来进行,因此完整的历史记录(包括错误及其更正)仍然是记录的一部分。

为什么我不能直接删除错误的日记账分录?

因为该分录可能已经反映在已提交的纳税申报表、发送给客户的文件或其他系统的记录中。删除它会使你的账簿与所有这些内容产生无声的冲突。通过冲销来更正数字,同时保留了事件经过的证据。

不可变总账需要区块链吗?

不需要。区块链是使记录防篡改的一种方法。采用强制余额约束、期间锁定和审计日志的只增不减数据库设计,无需分布式共识即可实现关乎紧要的会计属性。

我可以编辑草稿发票吗?

可以。不可变性从发票开具、对其他人产生效力的那一刻起生效。草稿属于工作文档,可以自由更改或删除。

如何更正已关闭期间的分录?

在当前开放的期间登记更正,日期设定为更正实际发生时的日期。如果已关闭期间报告的数字存在重大错误,另一种选择是故意重新打开该期间、进行更正、重新报告并重新锁定——这是一项经过审计的操作,也是重述财务数据的诚实方式。