会计模式
2006年1月24日
这是我在2000年代中期进行的企业应用架构进一步发展写作的一部分。遗憾的是,此后太多其他事情吸引了我的注意力,所以我没有时间进一步研究它们,在可预见的未来我也没有时间。因此,这些材料非常草稿,我不会进行任何更正或更新,直到我有时间再次处理它们。
虽然我知道没有调查能弄清楚这一点,但我相信世界上很大一部分计算机系统都在跟踪资金。如果别无他法,我想这意味着金钱是有价值的。事实上,它如此有价值,以至于人类已经痴迷于跟踪资金数百年,甚至有一个相当大的职业(会计)专门从事它。(作为一项测试,你可以通过比较一个组织拥有的其他跟踪器的数量与会计师的数量来判断它是否比金钱更关心其他东西。)
会计中最基本的概念之一是复式记账,它是在中世纪发展起来的,并于1494年由意大利修士卢卡·帕乔利首次记录。其基本原理是通过仔细跟踪资金的每一次流动来跟踪各种资金池。
资金池是账户。每个账户都有一个余额,即其当前价值,以及一个会计分录列表,这些分录代表对账户的每一次更改。 账户的价值或余额是所有会计分录的总和。余额可以计算为现在,但通常余额是在一段时间内计算的,在这种情况下,它会将该时间段内过账的分录的价值加起来。
图1:账户、分录和交易的基本模型。
会计交易通过将参与转账的会计分录链接在一起,更明确地捕获了账户之间的转账。
虽然我已经将这些列为一组常见的对象,但其中许多是可选的。我见过一些系统使用会计分录而没有账户或会计交易。本质上,账户充当分类会计交易的描述符;因此,可以使用其他对象作为描述符。同样,如果您不太关心仔细跟踪转账,则可以删除会计交易,因为会计分录。
进行调整
账户跟踪事件的货币后果,这意味着它们与事件溯源配合得很好。当处理领域事件时,它可以生成一组会计交易。如果所有会计交易都是从处理领域事件生成的,那么会计交易使用事件溯源,即使应用程序的其他部分没有使用事件溯源。
在这种情况下,会计交易自然适合使用追溯事件自动修复错误。为此,您需要找到由错误事件生成的会计交易,确定应该生成的会计交易,然后进行调整以将错误的集合更改为正确的集合。有三种方法可以进行这种调整。
- 替换调整删除不正确的会计交易并创建正确的集合。这是一种简单的方法,但意味着您会丢失会计框架内会计交易的历史。(您仍然可以使用并行模型重建它,但这并不直接。)
- 使用反转调整,您会保留不正确的会计交易,但对于每个交易,您都会发布一个相反的会计分录来抵消它。然后,您发布正确的会计交易以将事物提升到新价值。这非常简单,保留历史,但会导致大量相互抵消的分录。
- 差异调整也保留不正确的分录,但发布新的分录,这些分录代表不正确分录和正确分录之间的差异。您可以通过在并行模型中执行其他调整之一并发布代表账户余额差异的分录来做到这一点。这保留历史,最大限度地减少会计交易的数量,但执行起来更复杂。
我在这里集中讨论了使用追溯事件进行自动更正,但当然,您可以使用相同的调整方法来记录手动更改的结果。
重大修订
2006年1月24日:初稿