会計のパターン
2006年1月24日
これは、私が2000年代半ばに行っていたエンタープライズアプリケーションアーキテクチャのさらなる開発に関する執筆の一部です。残念ながら、それ以来、他の多くのことに注意を奪われてしまい、それ以上取り組む時間がありません。また、近い将来も取り組む時間はあまりないでしょう。そのため、この資料はほぼドラフト版であり、再び取り組む時間が見つかるまで、修正や更新は行いません。
調査で明らかになったわけではありませんが、世界のコンピュータシステムの大部分がお金を追跡していると私は信じています。少なくとも、これがお金が価値あるものであることを意味しているのでしょう。実際、お金は非常に価値があるため、人間は何百年もの間お金の追跡に執着しており、それ専門の職業(会計士)さえ存在します。(組織がお金よりも何かを重視しているかどうかを判断するには、会計士の数と比較して、その何かを追跡する担当者の数を比較すればわかります。)
会計における最も基本的な概念の1つは、中世に開発され、1494年にイタリアの修道士ルカ・パチョーリによって初めて記録された複式簿記です。これの基本は、お金の動きを注意深く追跡することで、さまざまな資金の「壺」を追跡することです。
資金の「壺」は勘定です。各勘定には、現在の価値である残高と、勘定へのすべての変更を表す会計エントリのリストがあります。勘定の値、つまり残高は、すべての会計エントリの合計として導き出されます。残高は現在の時点に対して計算できますが、一般的には残高は特定の期間に対して計算され、その期間内に投稿されたエントリの値が合計されます。

図1:勘定、エントリ、およびトランザクションの基本モデル。
会計トランザクションは、転送に関与する会計エントリを相互にリンクすることにより、勘定間の転送をより明示的に捉えます。
私はこれらを一般的なオブジェクトグループとしてリストしましたが、これらの多くはオプションです。私は勘定や会計トランザクションなしで会計エントリを使用するシステムを見てきました。基本的に勘定は会計トランザクションを分類するための記述子として機能します。したがって、他のオブジェクトを記述子として使用することも可能です。同様に、会計エントリとして転送を注意深く追跡することに関心が低い場合は、会計トランザクションを削除できます。
調整を行う
勘定はイベントの金銭的影響を追跡するため、イベントソーシングとの相性が非常に良いです。ドメインイベントが処理されると、会計トランザクションのセットを生成できます。すべての会計トランザクションがドメインイベントの処理から生成される場合、アプリケーションの他の部分がイベントソース化されていなくても、会計トランザクションはイベントソーシングを使用します。
このような状況では、会計トランザクションは、遡及的イベントを使用したエラーの自動修正に自然に役立ちます。これを行うには、誤ったイベントによって生成された会計トランザクションを見つけ、生成されるべき会計トランザクションを決定し、誤ったセットを正しいセットに変更するための調整を実行する必要があります。この調整を行うには3つの方法があります。
- 置換調整は、誤った会計トランザクションを削除し、正しいセットを作成します。これは単純なアプローチですが、会計フレームワーク内の会計トランザクションの履歴が失われることを意味します。(パラレルモデルを使用すれば再構成できますが、直接的ではありません。)
- 取消調整では、誤った会計トランザクションをそのまま残しますが、それぞれに対して、それを打ち消すための反対の会計エントリを投稿します。その後、正しい会計トランザクションを投稿して、新しい値に近づけます。これは非常に簡単で、履歴を保持しますが、互いに打ち消し合うエントリが多くなります。
- 差額調整も、誤ったエントリをそのまま残しますが、誤ったエントリと正しいエントリの差を表す新しいエントリを投稿します。パラレルモデルで他のいずれかの調整を実行し、勘定残高の差を表すエントリを投稿することで、これを行うことができます。これにより履歴が保持され、会計トランザクションの量が最小限に抑えられますが、実行するのがより複雑になります。
ここでは、遡及的イベントを使用した自動修正に焦点を当ててきましたが、もちろん、これらの同じ調整アプローチを使用して、手動変更の結果を記録することもできます。
重要な修正
2006年1月24日:初稿