复式记账的折腾与思考

认真地理了一下时间线,我掉进复式记账这个坑大概十天了,大概的路线图:

  • 过去的记账开始混乱,难以接受
  • 去了解复式记账,觉得适合自己
  • 找记账工具,被无数人异口同声的推荐 Beancount
  • 去理解 Beancount 的设计哲学
  • 搞适合自己的记账工具

我眼里的复式记账

前两条在上一篇 我的复式记账 已经讲了。这里做个极致的简化示例。如果我认为一切皆转账,那么每个交易交易都可以提炼为如下记录:

2023-12-23 "淘宝" "买一大堆零食"
    支付宝        -128.00
    食物          +128.00

时间,平台(收款人),做了什么;哪个账户支出的,消费到了哪个分类(这个分类账户的数值增加)。文本存储的复式记账大概都是类似格式,比如 Beancount 里面:

2023-12-23 * "淘宝" "买一大堆零食"
    支付宝        -128.00 CNY
    食物          +128.00 CNY

多了个星号,表示确定的交易,我记录的所有交易都是确定的,在我看来这跟固定格式差不多了。然后每个数值后面写上货币单位,但我几乎只花人民币,这也跟固定格式差不多了。

好了,够用了,我就一点简单的小账目,这一种格式就足以满足我所有的需求了。

Beancount

太多人给我推荐了,甚至不同时间点反复向我推荐,谢谢大家。我很认真的去学习了,但不能说很适合我。

作者的哲学

把和交易相关的所有事情放在时间轴上,这样在回头阅读的时候,一切都一目了然了。这和时间轴手账的思路非常像。但我好像,并不是很需要,我已经有日记了,账目这边不想再重复记一遍。

但这并不是什么问题,用不到的功能忽略就可以了,讲这点是因为和我后面的客制化有关。

作者的场景

作者是基于账单的输入的,隔一段时间,将各种账户的账单拿来导入进去,然后补充一些备注信息,平一下账,看看报表,了解自己的财务状况。

我是交易一笔记录一笔,我交易很少很少的,可能几天一条,但是有些细碎的我又很想写清楚,比如日后看微信账单向 xxx(人名) 付款,我不认识这个人,我只知道这应该是跟某个小贩购物的付款,但是买什么来着……所以当时记下来才不会忘记。

手机上的需求

按着作者的使用方法,那电脑端足够用了。但按着我的习惯,最好我闲暇时光对着手机就能随手把刚才的花销给记录一下。

也没问题,Beancount 提供了一个 web 服务,fava。启动以后,在电脑或者手机的浏览器里都能查看各种报表和记账。

但我当做 Nas 用的那个上网本……跑不起来,好难过!

我的思路

我需要什么?记流水账,可以看看自己当前账户余额,汇总信息,近期交易,和各种账单对对账(手动)。大概也就这么多,要求不高嘛。

Beancount 如果只用最基础的记账语法,那文件格式也非常简单的。不如我自己写个小工具,满足我在移动端的需求。

Obsidian,就塞这里面吧!这里有一点重要的细节:Beancount 的 fava 并不介意账本文件的后缀,Obsidian 的插件 Dataview 的 dv.io.load 方法也不介意读取的文件后缀。所以我的账本文件可以是任意后缀,bean 或者 md 或者什么其他的都没问题。

然后做了,而且够用,挺满意的。记账的时候可以通过提示快速输入时间、收款人、各种账户、币种、注释,在移动端基本满意了。

其中的纠结

写的时候其实很纠结的,到底对 beancount 的语言支持到什么程度好呢,于是就去读 beancount 的文档,去理解作者的思路。然后碾转反侧一夜,终于想通了——

我要搞的是个我自己用的工具,而不一定非要明确和它之间的关系,不如说我借用了它的某些语法(站在巨人肩膀上),然后解决自己的问题。

于是想通了,所以我写的这个工具就只支持最基本的记账语句。但额外的,可以显示出每个账户变动后面的注释内容,因为我需要这个。

把事情想通,其实比写个好用的工具对我的意义更大,因为以后不会在这个问题上反复纠结了,就畅快。

下一步

如果写嗨了,这个小工具也许放出来,但需要完善的东西还挺多的。

如果人摸了,抱着数据退回到 beancount,完全无痛,因为就是一样的格式。

话说 bean 的读音好像是“笨”,count 大概可以翻译成“数”(三声,动词)……“笨鼠”?!

©2022~2024 稻米鼠. Last build at 2024/3/5 00:00:38