使用Beancount管理家庭财务

使用Beancount管理家庭财务 今年春节的时候,由于感受到了使用近9年的记账App挖财可能无法长期使用了,我便花了11小时将其迁移到了强大的 纯文本复式记账 软件 Beancount 上,代价就是历史数据无法迁移过来。为了能够将历史数据导出做个备份,在支付了挖财50元VIP季会员费后我拿到了9年的Excel账本,转投Beancount的怀抱,希望能继续花一生记录财富慢慢增值的过程。 对于我的记账史见这篇 我的财务管理方案 文章。放弃使用9年多的工具是挺难的,尤其是历史数据的迁移,但有多种原因促使我不得不选择新的工具: 从一些挖财App深度用户得知挖财可能要无法使用; 挖财的数据导出需要VIP权限; 个人长期的数据托管到商业化的公司手里不仅有可持续使用的问题,还有严重的隐私问题; 已经被很多人推荐过复式记账神器Beancount的强大; Beancount是开源且本地的工具,满足可持续使用与隐私安全的需求。 选择了Beancount后我便开始了数据迁移与适应新工具的过程了。目前已经使用Beancount近10个月,我的感受是记账类App虽然让我们能更便捷的利用手机记账,但是却让我们失去了记账的乐趣。用复式记账虽然初次使用需要学习一些知识,但是一旦掌握后可长期使用,性价比其实挺高的。 不过我需要提醒的是,如果你只是想简单记账,或者是想培养记账的习惯,那选择一个记账App也可以,但是如果你看重隐私和可持续使用,那Beancount就是最好的选择。 这篇文章我并不想写成Beancount的教程类文章,所以对Beancount的入门介绍我推荐看这篇 记账神器Beancount教程 。之后可以看byvoid的进阶版教程: Beancount复式记账(一):为什么 Beancount复式记账(二):借贷记账法 Beancount复式记账(三):结余与资产 当看完这些教程后,相信你已经知道怎么用Beancount记账了。接下来我想分享的是我是如何使用Beancount记账以及如何解决一些特殊记账的场景。 使用Beancount的心理建设 不少人畏惧使用命令行(CLI)和纯文本来记账,尤其是非程序员的群体,但这些只是习惯问题。Beancount的记账是很简单的,比如我们用记账App记录一笔中午吃饭的帐是这样的: 而用Beancount记账是这样的: 2021-10-01 * "请客吃饭" Liabilities:CreditCard:CN:PINGAN-6467 -83.0 CNY Expenses:Food:Lunch 看起来用手机记账更直观一些,而且Beancount很难在手机上操作,一般都用电脑来记账。但纯文本的优势在于编辑和存储方便,不需要特定的软件即可编辑内容,尤其是有很多笔账要记录的时候,电脑编辑纯文本效率也更高。 手机App记账的时间点一般都是随时记录,但Beancount的话我一般是一天一记录,有的人是一周或者一月一记录。看起来用手机随时记录很方便,但用电脑记账的话,需要先在手机上暂存,之后在电脑上统一记录。现在大多人用手机支付都有消费提醒,只需要在晚上记账的时候查看下当天的消费记录就可以记录了。 我个人感觉手机记账方便只是一个习惯问题,当我切换到电脑记账的时候不适感也就一周,之后感觉和手机记账差不多,就是时间点的不同而已。所以手机记账方便只是一个习惯问题,并不具备啥优势,时间成本也差不多。 所以说手机记账App和Beancount的差异主要是命令行、纯文本和移动端的差异。这些差异并不是说手机App记账有优势,更主要的是习惯的问题,而习惯的切换成本不过一周时间。带来的好处却是: 数据掌控在自己手里,隐私不会泄露; 更灵活的记账方式; 摆脱手机App流水式记账,使用复式记账法专业记账; 长期可持续的记账方式。 我的Beancount记账流程 我的账本结构包括记账的工具都是参考 记账神器Beancount教程 这篇文章。 账本建立 在accounts这个目录里存放着: . ├── assets.bean # 资产账户,包括银行卡、信用卡、投资组合、房产、车、加密币钱包、RSU 等账户 ├── liabilities.bean # 负债账户 ├── income.bean # 收入类别 ├── expenses.bean # 支出类别 ├── equity.bean # 通过 pad 和 balance 初始化资产账户 └── price.bean # 自定义货币价格,这是 Beancount 最神奇的地方,可以自定义货币价格,比如美元和人民币的价格,这样在记账的时候就可以自由的记录货币的价格,而不用担心记账的时候货币价格变动的问题。 assets.bean liabilities.bean ;房贷 2021-02-11 open Liabilities:Bank:CN:BOC:Mortgage:Loan CNY ;中国银行 ;信用卡 2021-02-11 open Liabilities:CreditCard:CN:CMB CNY, USD ;招商信用卡双币VISA卡 2021-02-11 open Liabilities:CreditCard:CN:ZFB-HB CNY ;支付宝花呗 ;应付款 2021-02-11 open Liabilities:Payable:Friends:XYZ CNY ;朋友的应付款 income.bean ;主动收入 2021-02-11 open Income:CN:Salary:XYZ CNY ;上班公司收入 ;被动收入 2021-02-11 open Income:PassiveIncome:Project CNY, USD ;项目被动收入 2021-02-11 open Income:PassiveIncome:Invest CNY, USD ;投资被动收入 2021-02-11 open Income:PassiveIncome:Other CNY, USD ;其他被动收入 ;奖金 2021-02-11 open Income:CN:Bonus:XYZ CNY ;公司奖金 ;赔付款 2021-02-11 open Income:CN:Compensation CNY ;影响力:咨询、打赏等 2021-02-11 open Income:CN:Extra CNY ;退款返款 2021-02-11 open Income:CN:Rebate CNY ;红包 2021-02-11 open Income:CN:RedEnvelope CNY ;投资 2021-02-11 open Income:CN:Invest CNY ;薅羊毛 2021-02-11 open Income:CN:CreditCard:Point CNY ;信用卡积分 2021-02-11 open Income:CN:CreditCard:Discount CNY ;信用卡折扣 2021-02-11 open Income:CN:CreditCard:Other CNY ;其他 2021-02-11 open Income:CN:Other CNY, BTC, ETH, BNB, XMR expenses.bean ;居家 2021-02-11 open Expenses:Home:Phone ;手机电话 2021-02-11 open Expenses:Home:Mortgage:Loan:Interest ;房贷利息 2021-02-11 open Expenses:Home:Insurance:ZJX ;重疾险 2021-02-11 open Expenses:Home:Insurance:SX:MDW ;寿险 2021-02-11 open Expenses:Home:Insurance:YWX:MDW ;意外险 2021-02-11 open Expenses:Home:Insurance:YLX:ZFB ;医疗险 2021-02-11 open Expenses:Home:Insurance:CCX ;财产险 2021-02-11 open Expenses:Home:SDRQ ;水电燃气 2021-02-11 open Expenses:Home:WYF ;物业费 2021-02-11 open Expenses:Home:Delivery ;快递费 2021-02-11 open Expenses:Home:Haircut ;理发费 2021-02-11 open Expenses:Home:Omission ;漏记款 2021-02-11 open Expenses:Home:Other ;其他 ;人情 2021-02-11 open Expenses:Relationship:Gift ;礼物 2021-02-11 open Expenses:Relationship:Relative ;礼金 2021-02-11 open Expenses:Relationship:PrePayment ;代付款 2021-02-11 open Expenses:Relationship:FilialPiety ;孝敬 2021-02-11 open Expenses:Relationship:RedEnvelope ;红包 2021-02-11 open Expenses:Relationship:Other ;其他 ;购物 2021-02-11 open Expenses:Shopping:Clothing ;服饰鞋包 2021-02-11 open Expenses:Shopping:Digital ;电子数码 2021-02-11 open Expenses:Shopping:Home ;家居百货 2021-02-11 open Expenses:Shopping:Book ;买书 2021-02-11 open Expenses:Shopping:Makeup ;化妆护肤 2021-02-11 open Expenses:Shopping:Other ;其他 ;餐饮 2021-02-11 open Expenses:Food:Breakfast ;早餐 2021-02-11 open Expenses:Food:Lunch ;午餐 2021-02-11 open Expenses:Food:Dinner ;晚餐 2021-02-11 open Expenses:Food:DrinkFruit ;饮料水果 2021-02-11 open Expenses:Food:Vegetables ;买菜原料 2021-02-11 open Expenses:Food:Invite ;请客吃饭 2021-02-11 open Expenses:Food:Omission ;漏记款 2021-02-11 open Expenses:Food:Other ;其他 ;医疗健康 2021-02-11 open Expenses:Health:Outpatient ;门诊 2021-02-11 open Expenses:Health:Medical ;药品 2021-02-11 open Expenses:Health:Examination ;体检 2021-02-11 open Expenses:Health:Other ;其他 ;娱乐 2021-02-11 open Expenses:Entertainment:Movie ;电影 2021-02-11 open Expenses:Entertainment:Travel ;旅游度假 2021-02-11 open Expenses:Entertainment:Hotel ;酒店住宿 2021-02-11 open Expenses:Entertainment:Media ;网络流媒体服务 2021-02-11 open Expenses:Entertainment:Show ;演出门票 2021-02-11 open Expenses:Entertainment:Other ;交通 2021-02-11 open Expenses:Transport:Airline ;飞机 2021-02-11 open Expenses:Transport:Railway ;火车 2021-02-11 open Expenses:Transport:TAXI ;打车 2021-02-11 open Expenses:Transport:GJDT ;公交地铁 2021-02-11 open Expenses:Transport:Car:Oil ;加油 2021-02-11 open Expenses:Transport:Car:Tolls ;过路过桥 2021-02-11 open Expenses:Transport:Car:Maintenance ;保养维修 2021-02-11 open Expenses:Transport:Car:Insurance ;车险 2021-02-11 open Expenses:Transport:Car:Parking ;停车费 2021-02-11 open Expenses:Transport:Car:Wash ;洗车 2021-02-11 open Expenses:Transport:Other ;其他 ;五险一金 2021-02-11 open Expenses:Government:Pension ; 养老保险 2021-02-11 open Expenses:Government:Unemployment ; 失业保险 2021-02-11 open Expenses:Government:Medical ; 医疗保险 2021-02-11 open Expenses:Government:Injury ; 工伤保险 2021-02-11 open Expenses:Government:Maternity ; 生育保险 ;个人税 2021-02-11 open Expenses:Government:IncomeTax 2021-02-11 open Expenses:Government:Customs ; 关税 ;投资 2021-02-11 open Expenses:Invest:Dev ;技术基础设施费用 2021-02-11 open Expenses:Invest:Study ;学习费用 2021-02-11 open Expenses:Invest:Portfolio:Interest ;利息支出 2021-02-11 open Expenses:Invest:Cost ;手续费 2021-02-11 open Expenses:Invest:Other ;其他 equity.bean ;权益账户 2021-02-11 open Equity:Opening-Balances ;初始化资产 ;;💰 2021-02-12 pad Assets:Current:Bank:CN:CMB Equity:Opening-Balances 2021-02-13 balance Assets:Current:Bank:CN:CMB 1234567.0 CNY ;;🏠 2021-02-12 pad Assets:Property:CN:XA:XYZ Equity:Opening-Balances 2021-02-13 balance Assets:Property:CN:XA:XYZ 1 HOUSE.XYZ ;;🚗 2021-02-12 pad Assets:Car:XYZ Equity:Opening-Balances 2021-02-13 balance Assets:Car:XYZ 1 CAR.XYZ ;;💹 2021-02-12 pad Assets:Current:Invest:Portfolio:CN Equity:Opening-Balances 2021-02-13 balance Assets:Current:Invest:Portfolio:CN 12345678.9 BDSR ;初始化负债 ;;房贷 2021-02-12 pad Liabilities:Bank:CN:BOC:Mortgage:Loan Equity:Opening-Balances 2021-02-13 balance Liabilities:Bank:CN:BOC:Mortgage:Loan -123456.7 CNY ;;信用卡 2021-02-12 pad Liabilities:CreditCard:CN:CMB Equity:Opening-Balances 2021-02-13 balance Liabilities:CreditCard:CN:CMB -12345.6 CNY price.bean ;Commodity Price ;🏠 ;;自住房产 2016-09-04 price HOUSE.XYZ 123456 CNY ;买入成本 2016-09-04 price HOUSE.XYZ 123456 CNY.UNVEST ;估值 2021-02-13 price HOUSE.XYZ 1234567 CNY.UNVEST 2021-09-20 price HOUSE.XYZ 2345678 CNY.UNVEST ;🚗 2021-02-14 price CAR.XYZ 200000 CNY ;💹 2021-01-31 price BDSR 1.1 CNY 2021-05-31 price BDSR 1.2 CNY 2021-09-20 price BDSR 1.3 CNY ;₿ 2021-02-14 price BTC 305528 CNY 2021-02-14 price BNB 838 CNY 2021-02-14 price ETH 11725 CNY 2021-02-20 price BTC 372575.75 CNY 2021-02-20 price BNB 1888 CNY 2021-02-20 price ETH 13140 CNY 2021-04-17 price BTC 405702 CNY 2021-04-17 price BNB 3519 CNY 2021-04-17 price ETH 16354.95 CNY ;💲 2021-02-14 price USD 6.46 CNY 2021-02-20 price USD 6.49 CNY 2021-05-15 price USD 6.44 CNY 2021-09-20 price USD 6.47 CNY 初始数据建立 由于很难将挖财的历史数据转换成Beancount的格式,所以我使用pad和balance命令来初始化账户。这些初始化账目都放在equity.bean这个文件中。如果你没有历史数据,那就不需要考虑这个问题,直接开始记账吧。 ...

September 16, 2023 · Yancey

Beancount复式记账

Beancount 复式记账 一 、为什么 我在在 Google 的这四年(三)这篇文章中提到了一个「秘密武器」Beancount 以及「复式记账」的概念。我说过我要专门写一篇文章来分享我的经验,这篇文章就是我承诺的兑现了。 如何实现财务自由 这个章节标题有点吸引人眼球,像是成功学教程。但是我保证我下面说的内容都是严肃,而且有明确定义和方法的。 为什么要记账,我来用一句话总结就是为了提升对自我的认识。记账是个人理财的基础,更是通往财务自由的必经之路。财务自由这件事情固然是根本需要赚钱来实现,但并不是只有一夜暴富才能实现的。财务自由其实并不是一件虚无缥缈的事情,而是每个人都可以努力达到的一种状态,换句话说就是「退休」,只不是有人能在三十多岁退休,有人要六十岁,有人则要到八十岁。 财务自由的一般定义是由资产产生的收入不少于生活开销。如果不知道自己有多少开销,甚至不知道自己有多少资产、收入,即便是一夜暴富,财务自由是一件不可能的事情。 接下来我来解释为什么财务自由是可以实现的,而且应该是每个人的目标。首先需要强调的概念是**资产(Assets)和净资产(Net Assets)**的区别,虽然我之后还会详细解释,但是这里需要记住,财务自由并非对个人净资产的要求,这也就是为什么不需要暴富就能实现。像所有投资都有期限一样,个人的寿命也是有期限的。每当我想到我总有一天会死,都会觉得有些忧伤,但这是无法改变的自然规律。只要在预期的寿命之内资产(而不是净资产)产生现金流能够满足生活所需的开销,这就是财务自由。我对资产产生现金流的定义较为宽泛,不仅包括利息、分红、租金、版税这类收入,还包括了直接通过资产折现的收入,即净资产减少。 要想达到财务自由,需要三点要求:对支出的预期、对资产和收入的了解、对寿命的期望。这三点都是说起来容易,做起来难的,但是记账可以帮助你很大程度上解决至少前两个问题。至于第三个问题,才是财务自由的根本困难所在,不过这个问题的解决方案已经超出了本文探讨的内容了。 为什么要复式记账 记账这件事是那种容易让人因为一时冲动开始,但是很快就放弃的事情。每个记过账人都有不同的原因和契机,但能坚持下来的则凤毛麟角。记账的好处是提升对自己的了解,解决那种不知道自己赚的钱都到哪里去了的问题。但记账的困难也显而易见,那就是麻烦,还容易遗漏、错误。一般来说普通人对记账的理解就是每笔消费都干什么了,所以就是每一笔消费都有一个金额和类别就可以了。这种记账方式一开始简单,但能带来的价值有限,只是开支记录而已,长期看来难以说服自己为了这些价值而忍受麻烦的记账过程。 相比普通的流水账,复式记账的核心理念是账户之间的进出关系,要求所有的记录全部入账,它可以保证账目的完整性和一致性。复式记账可以提供除了开支记录之外的损益表、资产负债表、现金流量表、试算平衡表等报表。复式记账还可以把投资和消费轻易区分,譬如购入电脑、手机,可以作为资产项目入账并定期折旧。同理对各种代金券、点数积分的购入一样要算入资产而不是消费。 虽然有各种各样的手机应用号称可以简化记账,它们把用户交互做得更加简单友善,有的还可以从银行账户、信用卡公司直接抓取数据,降低心理障碍,但与此同时它们却带来了另一个问题,就是数据所有权、安全性和持久性的疑虑。这些工具大多都是把数据存储在云端的,泄漏隐私的可能性不言而喻。更麻烦的是,它们几乎都是自己的专有格式,无法导出保存,或者哪怕可以导出也难以使用。这也意味着你不得不一直用一个产品,直到有一天倒闭或者服务关闭为止。这对我来说是不可接受的,因为在互联网时代能活过十年的产品非常稀少,无论是像 Google 这样随意关闭服务的大公司,还是随时有可能倒闭的小公司。复式记账的价值在于数据的完整性,我对其数据寿命的要求是二十年以上。 复式记账是一种划时代的发明,这个发明被认为是源于中世纪的地中海城邦(意大利或者埃及犹太人)。复式记账技术成为中世纪至大航海时代复杂贸易的支柱性工具,使得复杂的合约、信贷成为可能。后世会计学、金融学的许多概念都来自于复式记账,可以说体系化的资本主义是从复式记账的实践中诞生的。 如何复式记账 网上对于复式记账的文章也是汗牛充栋了,但各种晦涩难懂的名词可能会吓跑人。我不打算在这里介绍什么是复式记账,因为很难一句话说清楚,说得复杂了又没有意义。其实你并不需要懂很多才能开始复式记账,只需要一些最基本的概念就可以了。这个概念就是会计恒等式。 会计恒等式 作为会计学的核心,复式记账是一种实践中诞生的技术。除了最基本的会计恒等式之外,复式记账只有规范,没有对错。那么什么是会计恒等式呢?最基本的形式就是: 资产 = 负债 + 权益(净资产) 这个等式对于没有接触过会计学的人来说可能不太容易理解,但是记账实践过马上会明白的。理解的难点在于,会计学上的「资产(Assets)」和一般人对一个人富有程度的理解不太一样,因为资产是负债和权益的总和,负债(Liabilities)也是资产的一部分。 更容易理解的部分其实是权益(Equity),在个人理财的上下文中,又和净资产(Net Assets)是等价的,也就是经常说的「个人净值」。净资产需要由总资产排除负债,一个人到底是否富有,看的是净资产,而不是资产。 举例说明,一个人首付 20 万美元,贷款 80 万美元,买了价格为 100 万美元的房产。假设这个人没有别的资产和负债,那么他的资产就是 100 万美元,负债是 80 万美元,而净资产是 20 万美元。在房价没有变化的情况下,买房对一个人的净资产没有什么影响(忽略手续费的话),而他的资产和负债都暴增,也就是所谓的「扩大资产负债表」。 如果你理解了会计恒等式,那么复式记账的一切知识障碍已经扫除了。 使用 Beancount 再说一遍,复式记账在于实践,在开始实践之前学很多艰深的会计学概念没有任何意义。要开始实践,就要有工具上手了。在众多工具中我推荐使用 Beancount,原因如下: Beancount 是一个开源工具,用 Python 实现的,可以本地运行。 账本是一套基于文本的语法,方便存储和管理,个人拥有全部的数据,还可以使用 Git 管理。 账本的语法很规范,也具备灵活度,像编程语言一样可以嵌套引入,也有语法高亮和代码检查工具。 有完整的命令行工具链和可视化工具 fava,还有基于 SQL 的查询和报表生成。 没有预先定义的类别、货币等现实世界概念,可以轻松实现多币种记账,包括各种点数、虚拟货币。 除了 Beancount,Plain Text Accounting网站还列出了其他的开源工具比较,类似的具有竞争力的开源工具还有 Ledger 和 hledger,其中 Ledger 是这类工具的开创者。无论使用里面介绍的哪个工具,其基本理念都差不多,即记录账户之间的资金流动。最重要的是,你是账本的所有者,如果不喜欢一个工具了,可以轻易转换到另一个工具。虽然它们语法有些许区别,但写一个脚本来转换不难。 ...

September 16, 2023 · Yancey

记账神器Beancount教程

记账神器 Beancount 教程 记了几年账,工具用过随手记、Excel 甚至 Evernote。通常只记收支,不记收支对应的账户变化。其实知道这种方式很粗浅,容易错记、漏记,并且只能分析收支,无法跟踪个人财务现状。结果则是,虽然记了几年,却很少分析,个人财务状态也没有实质改善。 几个月前看到 byvoid 分享 Beancount,发现是一款记账神器。我从 7 月 1 日正式使用,如今也有 3 个多月,分享一些经验心得。 一、普通记账 vs 复式记账 Beancount 记账方法叫复式记账。 把只记录收支的方法称为普通记账(估计是多数人在用的方法)。那么复式记账,除了记录收支,还需记录账户(支付宝、银行卡等)的变动。以一个最简单的例子感受二者的区别: 假设:7 月 1 日,打车花费 30 元,使用银行卡支付。 普通记账一般包括日期、收支分类和金额,如下: 2019-08-28: 交通-打车 -200元 复式记账把账户变化也一并记账,如下: 2019-08-28: 交通-打车 200元 银行卡 -200元 复式记账会记录每笔交易的资金流动,各账户变化「有正有负,正负相等」。这便是复式记账的基本原理,称之为「会计恒等式」。这种方式能够保证记账准确无误,也能提供更详细的财务分析。 这句话中的账户是广义的,也可理解为分类,「银行卡」和「交通 - 打车」都是账户。下文中出现账户,若无特别说明,均指广义的账户。 二、Beancount 入门 复式记账是方法论,而 Beancount 则是支持复式记账的工具,Beancount 有以下三个优点: 完整个人财务数据比较敏感,Beancount 本地存储,不用担心数据泄露。 纯文本账本,不依赖特定软件,便于数据迁移。 Beancount 是开源软件。 接下来介绍 Beancount 的基础使用。 安装 beancount 是个 Python 项目,安装好 python 后,执行: pip install beancount pip install fava Fava 是关联软件,为 Beancount 提供一个更漂亮的 Web 界面(如图 1/2/3),建议同时安装。 ...

September 16, 2023 · Yancey