由会计师开发的开源会计软件

GoDBledger 是一款直观且高效的开源会计软件。
133 位读者喜欢这篇文章。
Person using a laptop

在过去的六个月里,我一直在开发 GoDBLedger,这是一个开源会计系统,我认为它解决了当前会计软件解决方案中存在的一些问题。即使在我作为应届会计师的第一年,这些软件也让我感到沮丧,因为我已经看到了优秀的软件是什么样的,以及它能多大程度地提高您的工作效率。

“优秀软件”的一个很好的例子是软件开发人员的 编辑器/IDE。开发人员喜欢他们的编辑器,并且有大量的编辑器可供选择,它们高度可定制,并允许实现无缝的编码体验。该领域优秀软件存在的主要影响因素之一是开发人员本身就是最终用户——他们解决自己的痛点,并对自己的设计有即时的反馈。

开发人员和他们的编辑器之间的关系非常有趣,因为编辑器的工作是促进开发人员的想法有效地转移到代码库中。

作为一名在业余时间喜欢编程的会计师,我可以看到会计行业和软件开发之间的相似之处。您可以将总账(一个巨大的财务交易列表)想象成会计师使用的“代码库”,会计师的工作是导航和编辑总账,然后将其编译成最终用户使用的各种报告——例如财务报表和纳税申报表。这类似于例如开发人员维护 Red Hat Enterprise Linux 代码库,然后将其正式发布为 RHEL 和 CentOS 到全世界的方式。

不幸的是,当比较这两个行业之间的软件时,我发现导航和编辑总账并不顺畅,至少与我编程时的体验相比是这样。此外,编译速度很慢,需要大量的人工才能完成;最终,它可能与编辑总账本身一样困难。

那么,考虑到会计师和程序员的流程之间的相似之处,为什么会计行业没有开发出像 IDE 编辑代码库一样高效地编辑总账的软件呢?为什么从总账编译一套财务报表不像将代码推送到生产环境那样自动化呢?

我注意到了两个影响因素。

第一个是驱动会计师和会计软件开发人员的利润动机。货币化可能会导致软件效率低下,因为最有效率的最终用户并不总是利润最高的。一个利润最大化的实体可以通过采取行动来控制用户的数据、创建围墙花园并使用户难以更换他们的软件,从而从用户那里提取更多价值。

会计软件一直存在于付费软件领域。因为它在企业中扮演着如此重要的角色,所以它一直很容易货币化。这对希望盈利的软件开发人员来说是件好事,但不幸的是,这意味着开源原则对软件的形状和设计几乎没有影响。

第二个影响因素是对作为数据结构的总账缺乏理解。简而言之,总账只是一种格式化财务交易数据库的方式。这种数据结构是在 17 世纪设计的,在实体书中效果很好。在那个时候,使用总账意味着根据需要在书中更改书面文本,而会计师是维护此数据库的专业人员。然而,当关系数据库被创建时,该结构并没有真正标准化和数字化。软件包在其自己的专有数据库结构中实现了总账,会计师失去了直接编辑数据库的能力。软件只允许会计师进行受限访问,而不是直接管理总账。

结果

在 TCP/IP 标准化之前,像 AOL 这样的公司正在创建自己的专有环境,并将用户锁定在他们的围墙花园中。幸运的是,对于互联网来说,他们衰落为一个免费的标准通信协议。不幸的是,会计行业没有这样做,我们被困在了“美国在线”。

想象一下,如果软件行业由少数几个大型 IDE 软件集团统治,这些集团决定最大化他们的利润而不是最大化开发人员的效率。您的编辑器不再将代码保存为文本;相反,它被保存为专有数据格式。您无法轻松地将代码库复制到另一个 IDE 中,如果您确实更换了编辑器,那么可以肯定的是,保存在以前系统中的代码库会丢失。

这就是今天可用的会计软件的状态。

那么会计软件开发人员可以从开源社区学到什么呢?

开源意味着您可以站在巨人的肩膀上,并使用其他项目的代码库来影响和直接帮助您自己的项目的发展。如果您专注于会计师编辑总账的效率,您可以查看其他软件并复制有效的部分,忽略无效的部分。就我而言,我很幸运能够利用其他会计软件(如 GNU CashLedger-CLI)的优秀代码库,但还有一个有趣的领域可以做出很多贡献——管理加密货币节点的开源服务器。

会计行业一直在努力从实体账簿过渡到计算机,但值得庆幸的是,加密货币社区已经开发了许多用于维护交易数据库的开源软件。

总账是记录财务交易的数据结构——就像区块链一样。

这意味着

我的会计系统深受 Geth (Go Ethereum)Prysmatic LabsPrysm 的影响,因为有很多才华横溢的开发人员在从事这些项目。它们为管理财务交易的服务器提供了基础。将其与深受 GNU Cash 影响的数据库架构相结合,意味着设计会计系统的大量工作已经完成。

结果就是 GoDBLedger,源代码可在 github.com/darcys22/godbledger 上找到。

它也是用 Golang 编写的,以利用该领域已有的良好代码,并且因为 Golang 往往适用于这种性质的服务器。

我已经谈了很多关于会计师应该能够像程序员处理他们的代码库一样无缝地处理总账。我真诚地期待着有一天我可以像使用我选择的文本编辑器导航和编辑代码一样高效地创建和编辑日记账分录。GoDBLedger 是我朝着实现这一目标迈出的第一步。下一步将是开发这个与 GoDBLedger 及其底层数据库通信的“IDE”。对我来说幸运的是,已经有很多优秀的开源数据库项目,我将能够利用它们来实现这一点。

如何使用 GoDBLedger

GoDBLedger 今天就可以使用!您可以启动一个服务器来维护您的财务交易数据库,对于任何以前运行过加密货币节点的人来说,它看起来和感觉都会很熟悉。

最终目标是使其充当接收财务交易并将其存储在数据库中的中央服务器。它在后台运行,始终运行,以便其他系统可以根据需要将财务数据传输给它。

GoDBledger operational flow chart

目前,如果您熟悉命令行和使用 RPC 与系统通信的脚本,那么您可以试用 GoDBLedger,体验比所有其他软件都低级别的复式记账(并且仅略高于直接操作 SQL 数据库)。

例如,在 GoDBLedger 运行的情况下,您可以在 ledger-cli 的交互模式下添加条目

$ ~/godbledger/ledger_cli journal
Journal Entry Wizard
--------------------
Enter the date (yyyy-mm-dd): 2019-06-30
Enter the Journal Descripion: Get Money Get Paid!

Line item #1
Enter the line Descripion: Income is good yo 
Enter the Account: Revenue:Sales
Enter the Amount: -1000
Would you like to enter more line items? (n to stop): 

Line item #2
Enter the line Descripion: Cash is better
Enter the Account: Asset:Cash
Enter the Amount: 1000
Would you like to enter more line items? (n to stop): n


&{Get Money Get Paid!
 2019-06-30 00:00:00 +0000 UTC [{Revenue:Sales
 Income is good yo
 -1000/1} {Asset:Cash
 Cash is better
 1000/1}] stuff}

但是,可以使用 JSON 进行相同的条目

$ ~/godbledger/ledger_cli jsonjournal '{"Payee":"Darcy Financial","Date":"2019-06-30T00:00:00Z","AccountChanges":[{"Name":"Asset:Cash","Description":"Cash is better","Currency":"USD","Balance":"100"},{"Name":"Revenue:Sales","Description":"Income is good yo","Currency":"USD","Balance":"-100"}],"Signature":"anythingHereCurrently"}'

您可以使用 reporter 命令查看报告

$ ~/godbledger/reporter trialbalance

   ACCOUNT    | BALANCE AT 20 FEBRUARY 2020
--------------+----------------------------
Asset:Cash    |                        1000
              |
Revenue:Sales |                       -1000
              |

阅读 Github Wiki 上的快速入门 以获取更多信息。我还开发了一些 使用 Python 的示例脚本,以展示如何从您自己的软件发送交易。此外,我制作了一个 示例“交易机器人”,它将它做的每笔交易保存到 GoDBLedger。

如果您对程序化系统来跟踪您的帐户感兴趣,请尝试 GoDBLedger。

接下来阅读什么
标签
User profile image.
我是一名澳大利亚会计师,喜欢构建网站和编程。我在一般税务合规、BAS 和 IAS 申报表的编制、工资单、小型企业组建和咨询、数据分析、加密货币和财务流程自动化方面拥有经验和知识。在业余时间,我构建税务和财务工具。

5 条评论

问题是每个国家和每个州的税收制度都不同,因此每个国家和每个州都必须为各个州修改或创建附加组件。

但是,这不能用(虽然非常大的)配置文件来处理吗?可以为每个(几千个??)独特的法律管辖区创建一个标准化的配置文件。

我并不是说这很简单,但这并不比财务报告中任何其他政府特定方面更难。

使用商定的标准配置文件,它可以用于许多金融领域,而不仅仅是用于账本。

回复 ,作者:mitradranirban

但是,这不能用(虽然非常大的)配置文件来处理吗?可以为每个(几千个??)独特的法律管辖区创建一个标准化的配置文件。

我并不是说这很简单,但这并不比财务报告中任何其他政府特定方面更难。

使用商定的标准配置文件,它可以用于许多金融领域,而不仅仅是用于账本。

回复 ,作者:mitradranirban

这是一篇很棒的文章,您提出了一些很好的观点,真的很喜欢将会计和账本像程序员对待代码一样对待的比喻。但是,为了继续这种思路,GL 是所有其他内容都从中编译出来的低级原始数据。GL 应该被认为更像 git。它提供了时间点的快照,您可以从中编译财务数据。

但是日常工作中,您不会在 git 考虑的级别上工作,而是在更高级别的编程语言中工作。

因此,您应该考虑更高级别的东西,而不是操作 GL 级别,即通过交易进行更正,即应付账款、应收账款等。这是会计师在其“ide”中应该工作的流利程度。直接轻松地操作 GL 的能力可能会导致类似于更改 git 历史记录的问题。那么,什么是您的真实来源,可以信任它吗?

在 GL 层工作,您如何解决类型错误、用于审计目的的交易历史记录,类似于区块链的分布式共识账本?

发人深省。来自一位前会计师,他已成为一名专业程序员,现在在这些专有软件公司之一工作 ☺️

“一个利润最大化的实体可以通过采取行动来控制用户的数据、创建围墙花园并使用户难以更换他们的软件,从而从用户那里提取更多价值。”

很棒的文章,赞一个。上面的文字可以概括为一个词:MICROSOFT。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.