February 03, 2021
我翻了翻 GitHub 上面的项目记录,从2019年的2月开始初始化了记账项目的代码库,到现在2021年的近2月,也该是时候说一说我这两年来设计到的记账心路历程。
关于记账这件事早就已经是一篇红海,做的人很多,死的更多。无数项目突然涌现出来而后又死得消无声息。这篇文章会从几个方面来细数为什么我们那么喜欢记账而又坚持不下来:流水账与复式记账、趣味性与专业性、自动入账与手动入账。
流水账是指只记录了「花了多少钱在什么事情上」,比如「今天吃饭AA了100块」。看起来似乎确实满足了记账最简单的几个点:什么时候花的钱;为什么花了钱;花了多少钱。但是在对账的时候却很难定位到账单与记账的关联。
为了能更清晰地阐述流水账与复式记账的区别,我会根据「AA吃饭」这个例子给出一个更加具体的场景。
1月1号,你跟 A 先生与 B 先生出去吃了一顿饭,一共300块,AA下来每人100块,于是你先用微信支付了300块。
1月3号,A 先生转了100块到你的支付宝账户。
B 先生作为一个老赖,「无意」地忘记了还你钱,同时把你拉黑了。
那么对于流水账来说你可能记录了两笔账:
那么随即而来会有几个比较明显的问题:
总结下来流水账的弱点出现在资产流动不明确与资产占比不明确上,复式记账比较好地解决了这几个问题。
在会计学中,复式簿记(又称为复式记账法)是商业及其他组织上记录金融交易的标准系统。
该系统之所以称为复式簿记,是因为每笔交易都至少记录在两个不同的账户当中。每笔交易的结果至少被记录在一个借方和一个贷方的账户,且该笔交易的借贷双方总额相等,即“有借必有贷,借贷必相等”。
例如,如果A企业向B企业销售商品,B企业用即期支票向A企业支付货款,那么A企业的会计就应该在贷方记为“销售收入”,在借方记为“现金”。相反地,B企业的会计应该在借方记为“进货”,并在贷方记为“银行存款”。
借方项目通常记在左边,贷方则记在右边,空白账簿看起来像个T字,故账户也被称为T字帐。
复式记账来自于会计行业的专业术语,简单来说我们要记录每一次交易的来源与去向(在会计学中称之为 credit 和 debit)。那么我们通过这种方式来分析刚刚举的AA吃饭例子。
1月1号,你跟 A 先生与 B 先生出去吃了一顿饭,一共300块,AA下来每人100块,于是你先用微信支付了300块。
300块看起来是从「微信账户」流转到了「消费:吃饭」账户,但是实际并不是,因为对于账户所有人来说,只花了100在「消费:吃饭」上,剩下的200块实际上是用一种类似信贷的方式由你借给了A先生和B先生。所以对于复式记账来讲,这里要拆开三条记录:
自此我们解决了上述说得第一个问题「为什么我这个月吃饭怎么花了那么多钱」。复式记账的好处之一就体验出来了:你可以把一笔交易拆成很多细小的组成部分。如果要举另外一个例子的话可以是工资收入,你的3000月薪实际上是从「公司」账户流转到了「银行卡」「公积金」「医疗保险」「养老金」等数个账户,这也能统计出来你为国家交了多少税。
1月3号,A 先生转了100块到你的支付宝账户。
对于这一条记录,很简单就是从「借款:A先生」流转到「支付宝账户」。自此 「借款:A先生」的余额从「100.00」抹平到「0.00」,意味着 A 先生不再欠你的钱。
B 先生作为一个老赖,「无意」地忘记了还你钱,同时把你拉黑了。
对于这位老赖并没有产生任何在记账上的记录,但是不要忘记了在第一笔的记录中,「借款:B先生」是被记录成了 「100.00」 的,那么这个情况,它再也不会消失。
依靠 「微信账户」「支付宝账户」「消费:吃饭」「借款:A先生」「借款:B先生」这几个账户的变动,我们可以成功的算平我们的收入与支出:
得出来的总计是0.00,证明我们的记账流程并没有出现差错
这里可能有人比较纠结每个账户上面的正负是什么意思,这就是ledger-like app的优势,相比于传统的复式记账,一笔账需要在两个账户中同时记下一笔交易,ledger-like 使用了正负来代表了credit 方和 debit 方,一条记录就完成了传统的两次记录的复杂模式,也让交易更加人类易读。
上部分介绍了流水账和复式记账的区别与复式记账相较于流水账的优势,这里会直击问题的本质:你真的那么需要复式记账吗?答案可能是否定的。在长时间的记账之后,统计发现,在绝大部分时间的交易都是简单地从一个账户到另外一个账户的划转(这里把消费也当做了一个独立的账户),那么复式记账其实会更加麻烦,因为现在的流水账软件也能够新建各种账户,所以复式记账的分账户记录也不再是一个比较突出的优势了。
对于例如工资收入、购房贷款、分期购物等一些在时间跨度上比较长的交易,在流水账的APP上也有类似的循环交易与拆分交易的功能。
同时流水账的APP普遍都做的比专业软件更加适合用户使用。记账是一件很枯燥很无赖也很费事的时间,APP就会抓住这个痛点:简化日常记账流程、美化记账界面、增加趣味功能。对于趣味性,有的APP把记账设计成是跟一个 IDOL 聊天,有的把界面设计成一个养成系游戏(记账城市的思路大赞)。很明显这些设计有很有效,确实抓住了一部分人的痛点。
相比于 ledger 和 beancount 的文字编辑型的记账模式,一来需要学习它特有的写法,二来没有比较用户友善的界面,三来没有APP。APP真的是当代的一个超级大的痛点,没有APP意味着你不能随时随地地在手机上记账,需要找一个专门的时间来记账,这会击退绝大部分的普通用户。
但是无论流水账的趣味性做的再好也能难撼动以 beancount 在部分注重资产流转的用户的地位。主要的原因有几:
一,对账功能真的是让复式记账的门槛再次降低,它指的是你可以对某一个时间点把账户的金额抹成一个你指定的数。这用于少记了某几笔金额极小的交易,账户日常派息等无法感知的情况。 这对于流水账APP来说是一个难以解决的问题,就会经常出现记着记着就发现软件上的账户余额跟真实的账户余额对不上,也很少人愿意一笔一笔地往下一笔一笔的核对,导致最后流水账软件上的信息不正确,这也是流水账用户“弃坑“的原因之一。
二,复杂而专业的查询与报表功能。绝大部分APP都无法针对性地定制自己的报表,只能给你一个账户消费占比,月度余额波动图等比较笼统而无用的报表,如果想做到「某几天因某原因在某地的消费总额」就需要使用beancount 中的查询功能,这也是这一类软件比较强化的点,分析为主。
自动入账在国内巨头垄断的局面下基本是不太可能的事情,市面上唯一一款能直接对接支付宝和银行卡账单的记账软件「网易有钱」也凭仗着自己也是巨头而做到了其他小型开发商做不到的事情。
想比如国外的信用卡广泛使用的场景不同,国内的消费习惯都是走第三方交易的,简单来说就是由于电子交易的普及,大家都习惯于用支付宝和微信支付,而在使用这两种支付方式的时候也是通过绑定银行卡来实现金额划转的。那么在银行卡的账单系统中就只能记录下从「银行卡」到「支付宝」的账面信息,这对记账是没有任何意义的,因为你不知道支付宝到底支付了什么东西,而真的交易信息存在了不怎么开放的支付宝里面,微信也是同理。
即便采用了账单导出的功能,那么银行卡账单于支付宝账单去重也是一件极其复杂和麻烦的事情。市面上也有不少半自动的从支付宝手动下载账单然后脚本导入的模式,但是本质上并没有解决这一个痛点。
对于我个人来说,Beancount这款复式记账软件已经够用了,也极大的降低了复式记账的复杂度。但是我这段时间还在模仿beancount造一个记账软件出来的意义,对于其他人来说可能不是痛点,但是对于我来说缺难以忍受。
我个人是有攒小票的习惯的,那么不能在交易上把小票等信息关联起来就是一个难以接受的事情,所以我为交易增加了一个附件的功能,它可以关联各种形式的文件,我现在用来关联购物小票,购物发票,借款声明等等。但是目前还没有办法把关联的图片直接显示出来,只能通过下载查看,这是一个比较大的问题。
上述说到日常的90%交易都是点对点的账户交易,beancount并没有优化这种交易的记录模式,我也是为了解决这个痛点,让日常记账更加容易和易读。
beancount中是有tag系统的,可以为交易挂上各种标签,比如说这些交易都是发送在某次旅行中的,但是这个「挂标签」的动作是每次交易都需要手动加上,所以我就自己写了一个事件系统,可以开始某个事件结束事件,在事件中记录软件会自动加上事件定义的标签,从而解决通过标签分类账单的问题。
为了可以延续beancount的生态,导出成beancount的文件,从而接入beancount强大查询功能也是在计划当中。
如果你对记账感兴趣,而且有空,那么可以联系我,缺UX!缺前端!(如果能有人糊一个APP出来就更好了