很久以前流传着一些类似脑筋急转弯的数学题,帮一个生意人算账,看看他到底是赔了还是赚了。往往大家会持不同意见,即使最后公布了答案,很多人还会转不过弯来,只好自嘲一句做生意太难了!那么,使用 Beancount 记账来解决这些问题,会不会更清晰明了呢?

赔本生意收假币(钻石戒指交易)

王师傅是卖鱼的,一公斤鱼进价46元。现市场价大甩卖35元一公斤。顾客买了一公斤,给了王师傅100元假钱,王师傅没零钱,于是找邻居换了100元。事后邻居存钱过程中发现钱是假的,被银行没收了,王师傅又赔了邻居100元。 请问王师傅一共亏了多少?

option "operating_currency" "CNY"

1948-12-01 commodity CNY
1948-12-01 commodity CNY.FAKE
1970-01-01 commodity FISH
  name: "鱼/公斤"

1948-12-01 price CNY.FAKE 0 CNY

1970-01-01 open Assets:Cash ;现金
1970-01-01 open Assets:Fish FISH ;鱼的库存
1970-01-01 open Liabilities:Payable ;债务
1970-01-01 open Income:Sales

1970-01-01 * "进货一公斤鱼"
  Assets:Cash                                           -46 CNY @@ 1 FISH
  Assets:Fish

1970-01-01 * "顾客" "收款" ^sale
  Assets:Cash                                           100 CNY.FAKE ;收100元假币
  Liabilities:Payable

1970-01-01 * "邻居" "换零钱"
  Assets:Cash                                          -100 CNY.FAKE ;交给邻居
  Liabilities:Payable                                   100 CNY.FAKE ;邻居收下假币
  Liabilities:Payable                                  -100 CNY ;邻居交出真币
  Assets:Cash                                           100 CNY ;拿到零钱

1970-01-01 * "顾客" "找零及交付" ^sale
  Assets:Cash                                           -65 CNY ;找零
  Assets:Fish                                            -1 FISH @@ 35 CNY
  Liabilities:Payable

1970-01-01 * "邻居" "索赔"
  Assets:Cash                                          -100 CNY ;赔偿
  Liabilities:Payable

1970-01-01 * "顾客" "顾客已逃跑,债权作废"
  Liabilities:Payable                                  -100 CNY
  Income:Sales

或者完全忽略假币,不记录任何 CNY.FAKE 的交易。

最终我们来看看资产负债表:

CNYOther
Assets-111-0 FISH
__Cash-111
__Fish-0 FISH
CNYOther
Liabilities
__Payable
CNYOther
Equity1110 FISH
__Conversions110 FISH
____Current110 FISH
__Earnings100
____Current100
123456
10.1
123 456
1 0.1 0.2

结果很直观,现金由进货前的 0 元,变成了 -111 元;其中转换(倒卖鱼)损失 11 元,其他交易损失 100 元,共计损失 111 元。

邻居和银行的最终资产变化是 0,所以完全不记录这二位的换钱、没收过程,也不影响最终结果。

如果顾客自己也有一个账本,那么他用一张无价值的假币,换到了 65 元和 1 公斤鱼。鱼原价 46 元,共计收入 111 元。为什么不是按鱼的售价 35 元来计算,进而得出收入 100 元呢?因为正常买鱼的人,就已经白赚 11 元了,最后结果还是 111 元。或者我们只说,他收入的只是 65 元和 1 公斤鱼;如果他将赃物鱼转手出售,则会有额外的盈亏,也就是另一个问题了。

买入卖出(买马交易)

一个人花9块钱买了一只鸡,然后10块钱卖掉了,之后他觉得不划算,又花11块钱买回来了,12块钱卖给另一个人,问他赚了多少钱?

option "operating_currency" "CNY"

1948-12-01 commodity CNY
1970-01-01 commodity CHICKEN
  name: "鸡/只"

1970-01-01 open Assets:Cash ;现金
1970-01-01 open Assets:Chicken ;鸡库存

1970-01-01 * "买鸡"
  Assets:Cash                                            -9 CNY @@ 1 CHICKEN
  Assets:Chicken

1970-01-01 * "卖鸡"
  Assets:Chicken                                         -1 CHICKEN @@ 10 CNY
  Assets:Cash

1970-01-01 * "买鸡"
  Assets:Cash                                           -11 CNY @@ 1 CHICKEN
  Assets:Chicken

1970-01-01 * "卖鸡"
  Assets:Chicken                                         -1 CHICKEN @@ 12 CNY
  Assets:Cash

几乎不用贴表了。两次买入卖出各赚1元,一共2元。如果拒绝了别人的12元出价,选择不卖鸡,那么他手里剩下一只鸡,成本为 910+11=109-10+11=10 元。所以认为是10元买入,若最终还是选择12元卖出,则赚了2元,也说得通。

这也意味着,无论价格多高,只要有人以更高的价格接盘,那么你总是会赚钱的。

消失的一元钱(少了的法郎)

有3个人去投宿,一晚30元。三个人每人掏了10元,凑够30元交给了老板。后来老板说今天优惠只要25元就够了,拿出5元命令服务生退还给他们, 服务生偷偷藏起了2元, 然后把剩下的3元钱分给了那三个人,每人分到1元。这样,一开始每人掏了10元,现在又退回1元,也就是 10-1=9,每人只花了9元钱,3个人每人9元,3 X 9 = 27 元,加上服务生藏起的2元等于29元,还有一元钱去了哪里?请给合理解释!

option "operating_currency" "CNY"

1948-12-01 commodity CNY

1970-01-01 open Assets:Cash:A ;现金
1970-01-01 open Assets:Cash:B ;现金
1970-01-01 open Assets:Cash:C ;现金
1970-01-01 open Expenses:Hotel
1970-01-01 open Income:Rebate
1970-01-01 open Equity:UFO

1970-01-01 * "老板" "支付费用"
  Assets:Cash:A                                         -10 CNY
  Assets:Cash:B                                         -10 CNY
  Assets:Cash:C                                         -10 CNY
  Expenses:Hotel

1970-01-01 * "老板" "退回费用"
  Income:Rebate                                          -5 CNY
  Assets:Cash:A                                           1 CNY
  Assets:Cash:B                                           1 CNY
  Assets:Cash:C                                           1 CNY
  Equity:UFO

资产负债表:

CNYOther
Assets-27
__Cash-111
____A-9
____B-9
____C-9
CNYOther
Equity27
__Earnings25
____Current25
__UFO2

可以明显发现,三人消费 27 元,其中 25 元交给了老板,2 元被服务生贪污。问题中「加上服务生藏起的2元」是一句误导。

怎么样,找到生意头脑了吗,快把 Beancount 用起来吧!

PS:以上的数学问题原始版本为 测试你有没有经理头脑