复式借贷记账法 Beancount (3) - 房产

房产可能是一个家庭一生中最大额度的经济活动,至于房产到底是资产还是负债的讨论,有很多种看法,就不在这里讨论。
本文介绍在Beancount中如何对房产建模,我是把房产建模成资产了,并且把房子的增值建模成一种未实现的收益(unrealized gain),再加上房贷建模成负债(liabilities),然后利息当做是一种花费(expense).

假设 A君 在2020年1月1日 以 100万的价格购入 位于 123 ABC Street, XYZ City, CA, 12345的豪宅
利率是 3.0%, 首付是20%, 贷款额度是 80万。

我试用了 mortgagecalculator

Item Amount
Mortgage Amount 800,000
Interest Rate 3%
Mortgage Period 30 years
Total Cost of Mortgage 1,478,219.62
Montly Payments 4,106.17
Home Insurance 1,300 per year (39,000 total)
Property Tax 7,500 per year (225,000 total)
Loan Payoff 2049 Dec
Total Interest Paid 414,219.62

mortgage-detail

开户

首先, 我们将房子当作Asset,既然要把房子放在Asset中,那么需要给一个单位。这里的单位其实数量只有一,不太可能会有多个,而且就算是第n套房,我们也希望记录在一个单独的Asset中,也就是说一个房子对应一个Asset,这个Asset有一个特殊的单位,其数值只可能为1.

1
2
3
4
5
2019-12-31 commodity HOUSE.ABC
name: "123 ABC Street, XYZ City, CA, 12345"

2019-12-31 open Assets:Property:US:CA:123ABC HOUSE.ABC
2019-12-31 open Liabilities:Bank:US:SomeBank:Mortgage:Loan USD

这里第一行,我们定义了一个商品单位代表这个房子
第四行,我们定义了一个Asset账户,这个账户里面存放商品单位为之前定义的房子
第五行,我们定义了一个贷款银行的账户,因为是负债所以是liabilities

购入

有了上面的账户,买房的行为就相当于

1
borrow money (debt) + spending money (down payment) =  1 house in asset

房产购入最重要的就是参考应该就是 Buyer‘s Settlement Statement 这里可以很清楚的看到钱的流向

1
2
3
4
5
6
7
2020-01-01 * "Buying the house"
Assets:Property:US:CA:123ABC 1 HOUSE.ABC {1,000,000 USD}
Assets:Bank:US:SomeBankA -100,000 USD
Assets:Bank:US:SomeBankB -101,000 USD
Liabilities:Bank:US:SomeBank:Mortgage:Loan -800,000.00 USD
Expenses:Home:Insurance 1,000 USD
Expenses:Home:Mortgage:Loan:ClosingCost

一些希望跟踪到的花费,比如 Borrower Credit,Agent Credit,都可以通过单独的 income或者expense在这里体现出来,
比如,我在这里就单独记录的 home insurance的支出。

这里其实还有各种各样的费用,就笼统的归纳到了ClosingCost这么一个Expenses账户

还贷

根据上面的购入记录,我们目前负债80W美金,由于利息的关系,加上美国这边贷款都是等额本息,所以每个月付款
是一部分还利息,一部分还本金,早期的时候,利息占了大多数。

要记录还贷,只需要在你的贷款银行的Statement中去查看即可,只需要知道每个月还的本金是多少,剩下的就是利息了。
利息算做Expense

1
2
3
4
2020-02-01 * "Mortage payment"
Assets:Bank:US:SomeBank:Saving:Joint -3,372.83 USD
Liabilities:Bank:US:SomeBank:Mortgage:Loan 1,376.26 USD
Expenses:Home:Mortgage:Loan:Interest

记录房产增值

如果对房产的增值想做记录,有的人的做法是创建一个另外的账户[1],只记录对当前房产的增值的部分。
考虑到房子的价值可能增长,也可以缩水,这个增值可能是负值。
这样的好处是,你的总资产,在汇总的时候会纳入这两个账户,一个是房子交易时候的价值,一个是当前时刻房子的增值,就能时刻体现出房子的实时价格。

我并没有采用这样一种方法,主要是如下考虑

  1. 房子当前的价值,只能是估值,用来做参考,没有使用价值。通常我只能去Redfin或者Zillow去得到这些网站上对房产的估值,个人觉得参考价值不高。也没有考虑想把这些增值实时的纳入到总资产。
  2. 个人觉得在没还清贷款之前,如果房子上的现金流为负值的话,某种程度上讲,房产还是负债,所以将其过早的纳入资产会给你一种资产充实而且有增值的假象,我个人是想避免这种假象的。

我记录房产增值的是方法[2],这个方法在稍后将如何对RSU建模也会讲到。
这里的方法就是使用一个虚拟的货币单位,假如你的本币是USD,那么我们就可以用一个USD.UNVEST (这里好像不用为这个新建Commondity)
表示这个资产是用一种特殊的货币计算的,这种资产的增长或者缩减都不会记入到USD。这样就可以达到我的最初目的,即记录了房子的增值,这个增值也不会计入到最终的资产负债表格 (Balance Sheet).

1
2
2020-01-01 price HOUSE.ABC                          1,000,000 USD
2025-01-01 price HOUSE.ABC 1,400,000 USD.UNVEST

只需要将你的房产对USD.UNVEST定期做一个定价就可以了。

这样在Fava的Commondity页面,你可以跟踪房子参考价格的走势,而在Balance Sheet页面,房子的价格还是房子交易时候的。也就是说你的总资产里还是你当时的首付钱,加上你不停还掉的本金。这个资产的最终的改变,应该只会发生在你买房的时候。

fave-property-price

我记录房产的方式是出于自己的偏好,如果你有更好的方法,请在twitter上和我交流!

出售

因为还没有出售过房产, 不清楚中间的各项杂费,所以这里是一个假设的场景,

假设,在 2025年1月1日,房产增值到 $1,400,000, 一些参考数据如下

Item Amount
Balance 709,656.20
Agent fee (6%) 72,000
Other Closing Fee 10,000

A君决定出售房产, 最终房子出售价格为 $1,300,000

1
2
3
4
5
6
7
2025-01-01 * "Selling the house"
Assets:Property:US:CA:123ABC -1 HOUSE.ABC {1,300,000 USD}
Liabilities:Bank:US:SomeBank:Mortgage:Loan 709,656.20 USD
Expenses:Home:Agent:Fee 72,000 USD
Expenses:Home:ClosingCost 10,000 USD
Expenses:Home:Tax 90,000 USD
Assets:Bank:US:SomeBankA

这里假设5年内有两年自住,所以增值50万不需要缴税, 我这里随便乱算了一个数字
最终进入A君账户的钱是 $418,343.8, 其中有20万是当时的首付,还支付了
大概10万的利息,所以最终A君在这个上面账面收益是10万左右。
需要注意的是,我这个计算并不公平,毕竟A君这5年节省了租房支出, 然后在房屋上可能还有一些别的支出,比如维护,装修等等。

为了让资产负债表也体现这个,可以加入这个定价即可。

1
2025-01-01 price HOUSE.ABC                          1,300,000 USD

Reference

  1. https://groups.google.com/forum/#!topic/beancount/Z_wXwbhRhGw
  2. https://beancount.github.io/docs/stock_vesting_in_beancount.html
  3. https://www.mortgagecalculator.org/

系列介绍

准备用一个系列的文章来介绍这个工具和一些技巧。
这些技巧有一些是我从已有的模版中找出来,也有一些是在Google Group里看到大家的推荐,自己又尝试出来的方法。

  1. 先导 复式借贷记账法 Beancount (0) - 先导
  2. 基础知识 复式借贷记账法 Beancount (1) - 基础知识
  3. 环境设置 复式借贷记账法 Beancount (2) - 环境设置
  4. 如何对房产建模 复式借贷记账法 Beancount (3) - 房产
  5. 如何对RSU建模
  6. 如何对ESPP建模
  7. 自动化导入
  8. 安全

希望快速得到新文章的通知?请关注作者的微信公众号

wechat-qrcode