理论与建筑
如果您深入研究会计理论和历史,您会发现“文件”应该是源文件——采购订单、发票、支票等。会计记录是那些通常人类可读的源文件的标准化摘要。会计交易是两个或更多记录,涉及两个或多个帐户,绑定在一起,借方和贷方平衡。账户余额、资产负债表或损益表等报告只是这些交易的摘要。
把它想象成一个分层的架构——底层,基础,是源文档。如果源是电子的,那么它会进入会计系统的文档存储层——这就是 nosql db 可能有用的地方。如果来源是一张纸,则将其成像和/或使用索引号归档,然后将其存储在会计系统的文档层中。下一层是总结这些文件的数字记录;每份文件都由一个或多个不平衡交易分支进行汇总。下一层是平衡交易;每笔交易都由两个或多个不平衡腿组成。顶层是总结这些平衡交易的财务报表。
源文档和外部应用程序
源文件是“唯一的事实来源”——而不是描述它们的记录。您应该始终能够从源文档重建整个数据库。在某种程度上,数据库首先只是源文档的索引。太多人忘记了这一点,并编写了将交易本身视为事实来源的会计软件。这导致需要一个完整的“另一个源文档本身的存储和工作流系统”,而您最终会遇到典型的现代企业混乱。
这一切都意味着任何写入会计系统的应用程序都应该只创建源文档,将它们添加到底层。但在实践中,这一直被绕过,应用程序直接创建事务。这意味着源文档,而不是在会计系统中,现在在创建交易的应用程序中;那是脆弱的。
事件、工作流程和数字化
如果您正在使用某种事件模型,那么使用事件的正确位置是将源文档附加到它。然后该事件触发该文档被解析为正确的会计记录。如果源文档已经是数字化的,则可以以编程方式进行解析,如果源是一张纸或未格式化的消息,则可以手动完成——听起来像是工作流系统的开始,对吧?不过,您仍然希望将原始源文档保留在某个地方。文档数据库似乎确实是一个好主意,特别是如果它支持一种模式,您可以将源文档与它们生成的已解析和平衡记录联系起来,反之亦然。