准备工作¶
- 一部装有
beancount
、fava
以及 double-entry-generator
的 Mac 或 PC。 - 一部 iPhone 或 Android 手机。
- 本地存储个人
my-bookkeepings
账本最新内容。
开始工作!¶
Balance CheatSheet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| ; wechat pay balance
0000-00-00 document Assets:Digital:Wechat:Cash "./path/to/your_wechat_bills.csv"
0000-00-01 balance Assets:Digital:Wechat:Cash <balance_value> ~ 0.00 CNY
; alipay balance
0000-00-00 document Assets:Digital:Alipay:Cash "./path/to/your_alipay_bills.csv"
0000-00-01 balance Assets:Digital:Alipay:Cash <balance_value> ~ 0.00 CNY
; bank balance
0000-00-01 balance Assets:Bank:CN:ICBC:Savings <balance_value> ~ 0.00 CNY
0000-00-01 balance Assets:Bank:CN:ICBC:SocialSecurity <balance_value> ~ 0.00 CNY
0000-00-01 balance Assets:Bank:CN:BOCOM:Savings <balance_value> ~ 0.00 CNY
0000-00-01 balance Assets:Bank:CN:BOC:Savings <balance_value> ~ 0.00 CNY
0000-00-01 balance Liabilities:CreditCard:CN:ICBC <balance_value> ~ 0.00 CNY
1111-11-19 balance Liabilities:CreditCard:CN:CMB <balance_value> ~ 0.00 CNY
1111-11-20 balance Liabilities:CreditCard:CN:BOCOM <balance_value> ~ 0.00 CNY
|
导入微信支付账单¶
先查看上月微信 beancount 账单,确定最后导入日。
在「微信」中导出从最后导入日至今日的微信支付账单。
使用如下命令生成账单:
1
2
3
4
5
| double-entry-generator translate \
--config ./config/double-entry-generator/wechat.yaml \
--provider wechat \
--output tmp-wechat.beancount \
your_wechat_bills.csv
|
修改相关 FIXME
账户交易(posting)。
在当月 index.beancount
中添加微信支付的相关 balance
和 document
语句,例:
1
2
| 0000-00-00 document Assets:Digital:Wechat:Cash "./path/to/your_wechat_bills.csv"
0000-00-01 balance Assets:Digital:Wechat:Cash <balance_value> ~ 0.00 CNY
|
balance
日期必须为 T+1
,否则语句会忽略今日交易,导致对账失败。
若对账失败,特别是小额差异,极有可能是「零钱通」发放利息所致。值得注意的是,微信「零钱通」的利息发放并不包括在微信导出的账单当中。
值得注意的是,从「理财通」转入至「银行卡」的交易,微信支付是没有记录的,见这里。
导入支付宝账单¶
先查看上月支付宝 beancount 账单,确定最后导入日。
在「支付宝」导出从最后导入日至今日的支付宝账单。
使用如下命令生成账单:
1
2
3
4
5
| double-entry-generator translate \
--config ./config/double-entry-generator/alipay.yaml \
--provider alipay \
--output tmp-alipay.beancount \
your_alipay_bills.csv
|
修改相关 FIXME
账户交易(posting)。
在当月 index.beancount
中添加支付宝的相关 balance
和 document
语句,例:
1
2
| 0000-00-00 document Assets:Digital:Alipay:Cash "./path/to/your_alipay_bills.csv"
0000-00-01 balance Assets:Digital:Alipay:Cash <balance_value> ~ 0.00 CNY
|
balance
日期必须为 T+1
,否则语句会忽略今日交易,导致对账失败。
导入火币账单¶
(可选,依据月度是否有火币交易)
先查看上月火币 beancount 账单,确定最后导入日。
在「火币」导出从最后导入日至今日的火币账单。
使用如下命令生成账单:
1
2
3
4
5
| double-entry-generator translate \
--config ./config/double-entry-generator/huobi.yaml \
--provider huobi \
--output tmp-huobi.beancount \
your_huobi_bills.csv
|
修改相关 FIXME
账户交易(posting)。
导入中国工商银行账单¶
先查看上月工商银行 beancount 账单,确定最后导入日。
在「中国工商银行」导出从最后导入日至今日中国工商银行的借记卡和信用卡账单。
使用如下命令生成账单:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # 生成贷记卡账单
double-entry-generator translate \
--config ./config/double-entry-generator/icbc-1120-5595.yaml \
--provider icbc \
--output tmp-icbc-1120-5595.beancount \
your_icbc_1120_5595_bills.csv
# 生成借记卡账单
double-entry-generator translate \
--config ./config/double-entry-generator/icbc-9855.yaml \
--provider icbc \
--output tmp-icbc-9855.beancount \
your_icbc_9855_bills.csv
double-entry-generator translate \
--config ./config/double-entry-generator/icbc-5868.yaml \
--provider icbc \
--output tmp-icbc-5868.beancount \
your_icbc_5868_bills.csv
|
修改相关 FIXME
账户交易(posting)。
在当月 index.beancount
中添加中国工商银行的相关 balance
和 document
语句,例:
1
2
3
4
| 0000-00-00 document Assets:Bank:CN:ICBC:Savings "./path/to/your_icbc_debit_bills.csv"
0000-00-00 document Liabilities:CreditCard:CN:ICBC "./path/to/your_icbc_credit_bills.csv"
0000-00-01 balance Assets:Bank:CN:ICBC:Savings <balance_value> ~ 0.00 CNY
0000-00-01 balance Liabilities:CreditCard:CN:ICBC <balance_value> ~ 0.00 CNY
|
导入其他银行卡账单¶
double-entry-generator
目前仅支持中国工商银行账单的转换,鉴于个人使用银行卡的交易较少(<10 笔/月),可以直接使用手动记账。
打开:
先写一个 T+1
的 balance
对账语句,对相关的账户进行断言。
1
2
3
4
5
6
7
| 0000-00-01 balance Assets:Bank:CN:ICBC:Savings <balance_value> ~ 0.00 CNY
0000-00-01 balance Assets:Bank:CN:ICBC:SocialSecurity <balance_value> ~ 0.00 CNY
0000-00-01 balance Assets:Bank:CN:BOCOM:Savings <balance_value> ~ 0.00 CNY
0000-00-01 balance Assets:Bank:CN:BOC:Savings <balance_value> ~ 0.00 CNY
0000-00-01 balance Liabilities:CreditCard:CN:ICBC <balance_value> ~ 0.00 CNY
1111-11-19 balance Liabilities:CreditCard:CN:CMB <balance_value> ~ 0.00 CNY
1111-11-20 balance Liabilities:CreditCard:CN:BOCOM <balance_value> ~ 0.00 CNY
|
笔者的信用卡账单分别是每月 1 日和 19 日出账,故将信用卡断言的日期设为当月 1 日以及 19 日。
工商银行信用卡可以看到实时余额,而招行和交行的只能在出账当天才可获得余额。因此工行信用卡可以直接断言当日余额,而招行、交行银行卡需要断言出账日与余额。
一般 0000-00-01
为记账当日 T+1
,而 1111-11
一般为记账当月的月份。🌰:若记账时间为 2023-01-25
,则 0000-00-01
应改为 2023-01-26
,1111-11
应改为 2023-01
。
查找当月相关银行卡账单,手动记录在当月的 index.beancount
中。
以月为粒度,微信、支付宝账单基本都能够正常转换,整个工作流下来需要花费的时间成本在二十分钟以内。
使用 double-entry-generator
能够基本实现个人记账期望,可以考虑固化该工作流,以长期使用。
相关链接¶
- beancount/beancounthttps://github.com/beancount/beancount
- beancount/favahttps://github.com/beancount/fava
- deb-sig/double-entry-generatorhttps://github.com/deb-sig/double-entry-generator
- 多种支付账户的账单导出及查看方法汇总https://blog.triplez.cn/posts/bills-export-methods/
本作品采用
知识共享署名-相同方式共享 4.0 国际许可协议进行许可。