复式借贷记账法 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 |
开户
首先, 我们将房子当作Asset,既然要把房子放在Asset中,那么需要给一个单位。这里的单位其实数量只有一,不太可能会有多个,而且就算是第n套房,我们也希望记录在一个单独的Asset中,也就是说一个房子对应一个Asset,这个Asset有一个特殊的单位,其数值只可能为1.
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
购入
有了上面的账户,买房的行为就相当于
borrow money (debt) + spending money (down payment) = 1 house in asset
房产购入最重要的就是参考应该就是 Buyer‘s Settlement Statement 这里可以很清楚的看到钱的流向
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
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],只记录对当前房产的增值的部分。 考虑到房子的价值可能增长,也可以缩水,这个增值可能是负值。 这样的好处是,你的总资产,在汇总的时候会纳入这两个账户,一个是房子交易时候的价值,一个是当前时刻房子的增值,就能时刻体现出房子的实时价格。
我并没有采用这样一种方法,主要是如下考虑
- 房子当前的价值,只能是估值,用来做参考,没有实用价值。通常我只能去Redfin或者Zillow去得到这些网站上对房产的估值,个人觉得参考价值不高。也没有考虑想把这些增值实时的纳入到总资产。
- 个人觉得在没还清贷款之前,如果房子上的现金流为负值的话,某种程度上讲,房产还是负债,所以将其过早的纳入资产会给你一种资产充实而且有增值的假象,我个人是想避免这种假象的。
我记录房产增值的是方法[2],这个方法在稍后将如何对RSU建模也会讲到。 这里的方法就是使用一个虚拟的货币单位,假如你的本币是USD,那么我们就可以用一个USD.UNVEST (这里好像不用为这个新建Commondity) 表示这个资产是用一种特殊的货币计算的,这种资产的增长或者缩减都不会记入到USD。这样就可以达到我的最初目的,即记录了房子的增值,这个增值也不会计入到最终的资产负债表格 (Balance Sheet).
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页面,房子的价格还是房子交易时候的。也就是说你的总资产里还是你当时的首付钱,加上你不停还掉的本金。这个资产的最终的改变,应该只会发生在你买房的时候。
我记录房产的方式是出于自己的偏好,如果你有更好的方法,请在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
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年节省了租房支出, 然后在房屋上可能还有一些别的支出,比如维护,装修等等。
为了让资产负债表也体现这个,可以加入这个定价即可。
2025-01-01 price HOUSE.ABC 1,300,000 USD
Reference
- https://groups.google.com/forum/#!topic/beancount/Z_wXwbhRhGw
- https://beancount.github.io/docs/stock_vesting_in_beancount.html
- https://www.mortgagecalculator.org/
系列介绍
准备用一个系列的文章来介绍这个工具和一些技巧。 这些技巧有一些是我从已有的模版中找出来,也有一些是在Google Group里看到大家的推荐,自己又尝试出来的方法。