理論とアーキテクチャ
会計理論と歴史をしばらく掘り下げると、「ドキュメント」がソースドキュメント(発注書、請求書、小切手など)である必要があることがわかります。会計記録は、通常は人間が読める形式のソースドキュメントの標準化された要約です。会計トランザクションは、借方と貸方のバランスが取れた、2つ以上のアカウントにヒットする2つ以上のレコードです。口座残高、貸借対照表や損益計算書などのレポートなどは、これらの取引の要約にすぎません。
これを階層化アーキテクチャと考えてください。最下層である基盤がソースドキュメントです。ソースが電子的である場合、それは会計システムのドキュメントストレージレイヤーに入ります-これはnosqlデータベースが役立つかもしれない場所です。ソースが一枚の紙である場合は、それを画像化するか、インデックス番号を付けてファイルし、会計システムのドキュメントレイヤーに保存します。次の層は、それらのドキュメントを要約したデジタルレコードです。各ドキュメントは、1つ以上の不均衡なトランザクションレッグによって要約されます。次の層はバランスの取れたトランザクションです。各トランザクションは、これらの不均衡なレッグの2つ以上で構成されます。最上位層は、これらのバランスの取れたトランザクションを要約した財務諸表です。
ソースドキュメントと外部アプリケーション
ソースドキュメントは「信頼できる唯一の情報源」であり、それらを説明するレコードではありません。ソースドキュメントからデータベース全体をいつでも再構築できるはずです。ある意味で、dbはそもそもソースドキュメントへの単なるインデックスです。あまりにも多くの人がこれを忘れて、取引自体が真実の源であると考えられる会計ソフトウェアを書きます。これにより、ソースドキュメント自体のための別のストレージおよびワークフローシステム全体が必要になり、典型的な現代の企業の混乱に陥ります。
これはすべて、会計システムに書き込むアプリケーションは、ソースドキュメントのみを作成し、それらをその最下層に追加する必要があることを意味します。ただし、実際には、これは常にバイパスされ、アプリケーションが直接トランザクションを作成します。これは、会計システムではなく、ソースドキュメントが、トランザクションを作成したアプリケーションの向こう側にあることを意味します。それは壊れやすいです。
イベント、ワークフロー、およびデジタル化
If you're working with some sort of event model, then the right place to use an event is to attach a source document to it. The event then triggers that document getting parsed into the right accounting records. That parsing can be done programatically if the source document is already digital, or manually if the source is a piece of paper or an unformatted message -- sounds like the beginnings of a workflow system, right? You still want to keep that original source document around somewhere though. A document db does seem like a good idea for that, particularly if it supports a schema where you can tie the source documents to their resulting parsed and balanced records and vice versa.