【注意】最后更新于 January 18, 2021,文中内容可能已过时,请谨慎使用。
书接上文,这次分享一下我对工资单,共享帐簿以及医疗帐单,炒币这些常用场景的处理方式。
工资记录
一张工资单上会有很多条目,所以我会单开一个文件来放工资详情,记录税务,保险,401k 和公司福利。
这里比较复杂的是税务的记录。以前我将税务算为负收入,这样在看每月支出时可以比较直观地看到自己的每月花销。但是实际上这不太准确。所以还是将税务其算作支出。另外,由于每年会根据收入以及代扣税费来报税,之后也会补税或退税,所以如果单列一个 Expenses:Tax
会将年末的税务计算复杂化,所以我以财年 (fiscal year) 为单位来记录每张工资单的税务。以下以互利公司的工资单为例,:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
2019-10-31 * "Hooli" "Paycheck"
Income:Hooli:Pay:Salary -7000 USD
Income:Hooli:Pay:Bonus -3000 USD
Expenses:Tax:FY2019:US:Federal +1660 USD
Expenses:Tax:FY2019:US:SocialSecurity +620 USD
Expenses:Tax:FY2019:US:Medicare +145 USD
Expenses:Health:Dental:Insurance +5 USD
Expenses:Health:Medical:Insurance +50 USD
Expenses:Health:Vision:Insurance +5 USD
Assets:Retirement:Roth:Fidelity +500 USD
Assets:US:Chase:Checking +7015 USD
Income:Hooli:Benefits:Match401K -500 USD
Assets:Retirement:T401K:Fidelity +500 USD
Income:Hooli:Benefits:HSA -40 USD
Assets:Health:HSA +40 USD
|
这样每年报税的时候,可以将应付或应收税额记录,在实际补税或退税时予以扣除。
1
2
3
4
5
6
7
|
2019-12-31 * "TurboTax" "Tax Return"
Liabilities:Tax:Payables +2000 USD
Expenses:Tax:FY2019:US:Federal -2000 USD
2020-04-15 * "Federal" "Tax return"
Liabilities:Tax:Payables -2000 USD
Assets:US:Chase:Checking +2000 USD
|
共享帐簿
平时和小伙伴们一起玩耍,总会遇到一人付款事后分帐的情况。这种债务的记录在会计上是应该分为资产和负债的,但是对于个人帐目而言,每个人开两个帐目也挺麻烦,所以我一律记载在负债中,如果说我付钱帮小红同学与我买一份狮子头分着吃,就这么记录:
1
2
3
4
|
2020-01-01 * "X Restaurant" "狮子头"
Liabilities:Receivables:小红 +5 USD
Expenses:Food:Takeout +5 USD
Liabilities:US:Chase:Freedom -10 USD
|
如果小红帮我付钱两人又分了一份狮子头,就这样:
1
2
3
|
2020-01-02 * "X Restaurant" "狮子头"
Expenses:Food:Takeout +5 USD
Liabilities:Receivables:小红 -5 USD
|
以后和小红同学结算的时候就看 Liabilities:Receivables:小红
这个帐户里还有多少钱,如果是正的对方就欠我钱,如果是负的我就需要还对方钱。
不过今年和女票同住,大家的共同花销都记在她的一张信用卡上,再像上面那样一条一条记录,就有些头大了。所以此处我用了两个插件来记录共享和实际支出对象:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
plugin "beancount.plugins.divert_expenses" "{
'tag': 'GF',
'account': 'Liabilities:Receivables:GF'
}"
plugin "beancount_share.share" "{
'mark_name': 'share',
'meta_name': 'shared',
'account_debtors': 'Liabilities:Receivables',
'account_creditors': 'Liabilities:Receivables',
'open_date': None,
'quantize': '0.01'
}"
|
这样,我可以将她信用卡的帐单导入(具体设置见前文),然后通过添加标签的方式设置共享支出,这样如果我们使用女票名下的信用卡帮我俩付钱买狮子头就可以这样记录:
1
2
3
|
2021-01-01 * "X Restaurant" "狮子头" #share-GF
Liabilities:GF:Chase:Freedom -10 USD
Expenses:Food:Takeout
|
如果她使用这张共享的卡给自己买了狮子头却没有和我分(哼),则可以将标签改成 #GF
来改变实际支出对象。
1
2
3
|
2021-01-02 * "X Restaurant" "狮子头" #GF
Liabilities:GF:Chase:Freedom -10 USD
Expenses:Food:Takeout
|
这样在 beancount 后端,这两条记录会变成如下形式:
1
2
3
4
5
6
7
8
|
2021-01-01 * "X Restaurant" "狮子头" #share-GF
Liabilities:GF:Chase:Freedom -10 USD
Expenses:Food:Takeout +5 USD
Liabilities:Receivables:GF +5 USD
2021-01-02 * "X Restaurant" "狮子头" #GF
Liabilities:GF:Chase:Freedom -10 USD
Liabilities:Receivables:GF +10 USD
|
而女票对她信用卡的付款记录则可以移除标签,直接记录,如果不放心的话还可以加个余额的对帐。
1
2
3
4
5
|
2021-01-03 balance Liabilities:GF:Chase:Freedom -20 USD
2021-01-15 * "Automatic Payment - Thank"
Liabilities:GF:Chase:Freedom +20 USD
Liabilities:Receivables:GF -20 USD
|
如此记录,方便简洁,最后一看 Liabilities:Receivables:GF
的余额是 -5,所以我要还她 5 块钱。
医疗帐单
在美国,医保是一项产业,工作之后医保与学生时期的医保相比差了不少,与之相关的帐务记录也变得非常麻烦。我的思路就是在实际发生日,按照医保公司给的帐单进行记录,并对 deductible 按年记付。这样可以方便地看出每年 deductible 额能否用完,日后需不需要更换更合适自己的医保。下面是一个例子:
1
2
3
4
5
|
2020-01-01 * "Premera" "Labcorp Test"
Expenses:Health:Medical:Claims +150 USD
Expenses:Health:Medical:NetworkDiscount -20 USD
Expenses:Health:Medical:PlanPayment -100 USD
Liabilities:Payables:Health:Y2020:Deductible -30 USD
|
而后可以直接用 HSA 帐户付清帐单:
1
2
3
|
2020-02-01 * "HSA" "Reimbursement"
Liabilities:Payables:Health:Y2020:Deductible +30 USD
Assets:Health:HSA -30 USD
|
如果 HSA 帐户里暂时没那么多钱,也可以用信用卡先付清帐单,日后再用 HSA 报销:
1
2
3
4
5
6
7
|
2020-02-01 * "Premera" "Payment"
Liabilities:Payables:Health:Y2020:Deductible -30 USD
Liabilities:US:Chase:Freedom +30 USD
2021-01-01 * "HSA" "Reimbursement"
Assets:Health:HSA -30 USD
Assets:US:Chase:Checking +30 USD
|
RSU
工作以后,会得到一些 RSU,即限制性股票,这一般是作为股票奖励写在 offer 中,按一定比例分四年发放。这在税务记录上会有一些复杂,所幸的是 Beancount 官方文档中给出了很好的示例。由于我还没被 vest,在此先不赘述,以后拿到股票了再补完。
虚拟货币
17 年的时候我有买过一点点比特币,虽然基本上都被不靠谱的我给玩没了,也算交了比小小的学费。由于虚拟货币的特殊性,当时用随手记记录的时候从税务角度来看帐目有一些不清晰。研究了一下发现,beancount 也可以比较好地处理这种场景。
首先是开户,可以使用类似股票的形式开户,并以 FIFO 的形式计算盈余。除了资产以外,还有支出和收入来记录手续费与盈余收入。此外将虚拟货币记录为一种通货。
1
2
3
4
5
6
7
8
9
|
2017-06-01 open Assets:Crypto:Coinbase:Wallet "FIFO"
2017-06-01 open Assets:Crypto:Bittrex:Wallet "FIFO"
2017-06-01 open Expenses:Crypto:Commissions
2017-06-01 open Income:Crypto:PnL
2008-01-01 commodity BTC
export: "BTC"
name: "Bitcoin"
|
在使用美元买进虚拟货币的时候,可以用 {}
表示每一币的持有成本,并用 @@
表示买入总价。
1
2
3
4
|
2017-06-01 * "Coinbase" "BTC"
Assets:Crypto:Coinbase:Wallet +0.03000000 BTC {3000.00 USD} @@ 90 USD
Expenses:Crypto:Commissions +3.00 USD
Liabilities:US:Chase:Freedom -93.00 USD
|
而卖出的时候,由于我对这个钱包采用的是先进先出 (FIFO) 的模式,可以不指明卖出比特币的持有成本,这样 Beancount 会直接以最早买入的比特币的持有成本来计算盈余。卖出时可以用 @ 表示卖出时每币的价格。
1
2
3
4
5
|
2017-07-30 * "Coinbase" "BTC-> USD"
Assets:Crypto:Coinbase:Wallet -0.02000000 BTC {} @ 4500.00 USD
Expenses:Crypto:Commissions +3.00 USD
Income:Crypto:PnL -30.00 USD
Assets:Crypto:Coinbase:Wallet +87.00 USD
|
虽然人们对虚拟货币的货币属性仍有争议,但是对于比特币的转帐行为,交易费用是采用比特币结算的。这就给传统记帐手段带来了问题。对于 Beancount 来说,也比较 tricky,我也是找到这个讨论帖才找到如下这种记录方式。
1
2
3
4
|
2017-08-01 * "Bittrex" "Coinbase -> Bittrex"
Assets:Crypto:Coinbase:Wallet -0.01000000 BTC {}
Assets:Crypto:Bittrex:Wallet +0.00990000 BTC @ BTC
Expenses:Crypto:Commissions +0.00010000 BTC @ USD
|
系列链接