プレーンテキストファイルで「複式」家計簿(9)

2019年10月1日から消費税が(一部)10%に増税になりました。ボクは経済学が専門ではありませんが、不況下で増税するのはどういう理屈なんでしょうか?不況には 減税 するものと思っていました。経済の専門家のみなさんはオッケーなんですかね?

ま、それはともかくとして、庶民としてはなんとか対応しなければならないわけです。その一つが家計簿などの帳簿でどうやって仕訳するか、です(小さいなぁ〜w)。

物品やサービスごとに税率が8%だったり10%だったりするだけならば、帳簿書きは簡単。ですが、今回は増税に同期して キャッシュレス還元 という不思議な仕掛けが始まりました。ここでは、とりあえずそれへの対応を紹介します。

キャッシュレス還元が始まった

これが 増税 とペアになって始まったこと、それから8ヶ月後には終わりになることなど、とても イミフ な状況ですが、今日(10月3日)、増税後はじめてセブンイレブンで買い物をしてレシートをもらいました。次のような内容でした:

  領 収 書
こしあんぱん	108
サンドイッチ	268
赤ワイン 	880
-----------------------
小計(税抜 8%)	376
 消費税等	 30
小計(税抜10%)	880
 消費税等	 88
-----------------------
合計	      1,374

(税率 8%対象	406)
(税率10%対象	968)
(内消費税等 8%	 30)
(内消費税等10%	 88)
キャッシュレス還元額  -27

nanaco支払い	1,374

ははは、本当に変な領収書・明細書ですね。それはさておき問題はこれをどう仕訳するかです。

このシリーズ(7) で、ETCの還元ポイントを捉えるために 仮想アカウント [Income:還元Point:ETC] を使いました。今回もそれにならって、キャッシュレス還元を Income:還元Point:キャッシュレス に収納してみました。ただし仮想アカウントではなくて real なアカウントとしてです。次のような感じです:

2019/10/03   セブンイレブン
    Expenses:Grocery:Liquor                      968 JPY
    Expenses:Meals:Lunch                         406 JPY
    Income:還元Point:キャッシュレス              -27 JPY
    Assets:nanaco

これでbal/regレポートを見ると:

$ led bal 還元
	  -3,027 JPY  Income:還元Point
	  -3,000 JPY    ETC
	     -27 JPY    キャッシュレス
--------------------
	  -3,027 JPY

$ led reg 還元
2019/08/20 ETCマイレージサービス [Income:還元Point:ETC]   -3,000 JPY   -3,000 JP
2019/10/03 セブンイレブン       Income:還元Point:キャッシュレス  -27 JPY  -3,027 JPY

また当然ですが、支出金額、nanacoからの振り出しとか全ての点でつじつまが合っています:

$ led bal -p today
	  -1,347 JPY  Assets:nanaco
	   1,374 JPY  Expenses
	     968 JPY    Grocery:Liquor
	     406 JPY    Meals:Lunch
	     -27 JPY  Income:還元Point:キャッシュレス
--------------------
		   0

要するに、キャッシュレス還元を 雑収入 としてに扱ったというわけです。キャッシュレス還元については、このようにrealなアカウントとして扱っても大きな問題は起きません。

real か virtualか

シリーズ(8) では、ETCの還元ポイントはvirtualなアカウントにしました。なぜ、今回のキャッシュレスはrealなアカウントにしたのでしょうか?

今回のキャッシュレス還元は(少なくともnanacoでは)、トランザクションの当日にリアルタイムに一定の金額が明示的に還元されます。どの支出に対して、どれだけの還元があったかが一目瞭然です。しかし先のETCの場合には、還元額がわかるのが1ヶ月以上も後になってからです。この タイムラグ と、それからユーザ側にはどの支出に対してポイントを適用するかを決める 自由 がありません。

キャッシュレス還元ポイントは、実際のお金のようにそのポイントをいつ、何を購入するときに使うかをユーザが決めることができます。なので Income として扱うことに何の矛盾も生じません。他にもありますが、主にこれらの点から、ETCはrealなアカウントで把握するのが難しかったわけです。

便利なコマンド・オプションたち

帳簿に紛れ込むミスやエラーをできるだけ少なくするために便利な機能をまとめてみました。元帳管理のための必須の機能と言っても良いでしょう。

accountsコマンド

長期間 Ledgerを使っていると、アカウントの構造に混乱が生じます。タイプミスも混入します。そんな場合に便利なのが accounts コマンドです。

$ led accounts

これで自分のLedgerファイルで使われているすべてのアカウント名がリストされます。結果を上から順番にながめるだけでも、タイプミスとか「表記のゆらぎ」とか色々とみつかります。

accounts の後ろに正規表現を入力すれば、それにマッチするアカウントがリストされます:

$ led accounts liab

これで Liabilities に属するアカウントのリストが得られます。

accounts コマンドでは --count オプションがおすすめです。これをつけると、すべてのアカウントについてそれが使われた 回数 も併せて表示されます。回数が少ないアカウントは別のアカウントと合併させるとか、いろいろな対策を考えることができます。

Ledgerファイルのメンテナンスには必須の機能だと思います。

payeesコマンド

payees コマンドは指定した正規表現に一致するトランザクションの支払先 payee をリストにして表示します。これも支払先の名称のタイプミスや表記ゆらぎを修正するのに便利です。 payees コマンドに -count オプションをつけると、 accounts コマンドと同じように、出現した頻度が行頭に表示されます:

$ led payees eatout --count
2 Gratia
1 えびす鯛 新潟駅前店
1 幡多バル
3 楽々
2 鼎泰豊

アルファベット表記された支払先では、大文字小文字の混乱がよく見られます。日本語表記された支払先名の前後に 全角スペース が混入して、それらが別の支払先として扱われているケースもありました。

accountspayees を使わないでLedgerファイルをクリーニングしろと言われたら、死んだほうがましです(誇張ですw)。

--by-payee-P )オプション

支払先 Payee でグルーピングして支出等を確認することは家計のみならずさまざまな組織・団体でもしばしば必要とされます。

この -P オプションは、regレポートする際に、正規表現にマッチするトランザクションを支払先 payee の名前でグルーピングして表示するオプションです。次の例は、 eatout というアカウント(外食)について、外食先を金額の大きい順にソートした結果の抜粋です(日付、金額は当てずっぽうです):

$ led reg eatout -P -S -amount
2019/05/05 寿司おとわ           Expenses:教養娯楽費:Eatout   41,600 JPY   41,600 JPY
2019/09/25 おばんざい木村       Expenses:教養娯楽費:Eatout   18,040 JPY   59,000 JPY
2019/06/29 鼎泰豊               Expenses:教養娯楽費:Eatout   17,954 JPY   68,754 JPY

-S オプションは --sort の略です。その後ろの -amount は、金額の大きい順(降順)にソートすることを意味します。昇順のソートだとマイナス記号なしに -S amount とします。

xactコマンド

転記作業の大半は以前のトランザクションの繰り返しです。繰り返し率は80%を超えるとも言われています。これをその都度、毎回入力をするのは時間とエネルギーの無駄です。

それを回避するために用意されているのがこの xact コマンドです。たとえば次のようなトランザクションが既に(直前のショッピングとして)存在しているとしましょう:

05/20  Costco
    Expenses:Food                      8930 JPY
    Liabilites:OricoCard

その後、05/29にCostcoで食料品を4,500円購入したときには、 xact コマンドを使って次のようにします:

$ led xact Costco food 4500
2019/07/20 Costco
    Expenses:Food                          7,654 JPY
    Liabilites:OricoCard

$ led xact は単に標準出力に結果を表示するだけなので、リダイレクションを使用して次のようにすれば、自動的にファイル末尾に追記されます:

$ led xact Costco food 4500 >> your-ledgerfile.ledger

Ledger3の公式マニュアルには、 xact の指定の仕方のバリエーションがいくつか挙げてあります。マニュアルの Payee をRestaurantに変更したものを下に示します:

$ ledger xact 4/9 Restaurant 11.50
$ ledger xact 4/9 Restaurant 11.50 checking # (from `checking')
$ ledger xact 4/9 Restaurant food 11.50 tips 8
$ ledger xact 4/9 Restaurant food 11.50 tips 8 cash
$ ledger xact 4/9 Restaurant food $11.50 tips $8 cash
$ ledger xact 4/9 Restaurant dining "DM 11.50"

上の例で、 日付 は新規トランザクションの日付が使われ、省略すると今日の日付が使われます。 Expenses の下の階層に Toys という新しいアカウントを付け加えたい場合には次のようにします:

$ led xact costco Expenses:Toys "500 JPY"
2019/07/20 Costco
    expenses:toys                            500 JPY
    Liabilites:Visa

さらに、クレジットカードをVisaからMasterに変えた場合には:

$ led xact costco food 450  "Liabilities:Master"
2019/07/20 Costco
    Expenses:Food                            450 JPY
    Liabilities:Master

などなど、ほんとうによくできています。一度使うとクセになりますねw

ただ一つだけ気をつけなければいけないのは、リダイレクションでLedgerファイルに追記するときに、まちがって >>> にすると、大事なファイルがひどいことになります。実際にこれをやって冷や汗をかいた経験があります。

おまけ – suicaの残高をPCで確認する

令和の 増税(キャッシュレス還元)記念 で、おまけを一つ(笑)

suicaの残高

帳簿への仕訳作業をしていると、suicaなどのプリペイドカード系の残高が合わなくなることがよく起こります。個人の家計のレベルでは誤差範囲で無視できますが、大量に使っている企業や団体では、チリも積もれば無視し得ない金額になります。

プリペイドカードの中でも、たとえばnanacoなどは使用後のレシートに毎回残高が記録されていますし、nanaco-netにログインすれば、それほど困ることはありませんが、問題はsuica(特に無記名のsuica)。

suicaは、残高を印刷されたレシートから得るチャンスが少ないというか、ほとんど無いし、最近は改札口のディスプレイにも残高が表示されないことが多くなりました。そのため何回も使った後、 記憶 にもとづいて仕訳・転記の作業をやる他なくなります。

しかし 記憶 ほどもろいものはありません、特にボクら 准高齢者 にはきびしい。困り果てて 増税記念 にPaSoRi RC-S380/P(SONY)を購入しました。2,500円ほどの出費でした。

PaSoRiを使って残高確認

図1:  PaSoRiを使ってsuica残高確認

図1: PaSoRiを使ってsuica残高確認

Windows10では、SONYのHP を見ながらやれば簡単にできますが、ubuntuではちょっとだけ余分な手数が必要です。

これだけですが、JRとか小田急とかはちゃんと乗車・降車駅が表示されていますけど、路線バスだと、なぜか「車載端末」と区分され次のように表示されます:

出線区: JR西日本-山陰本線
出駅順: 鳥取

山陰本線 鳥取 で出たことになっているのが不思議?ボクだけかしら?

Windows10で公式アプリとドライバをインストールして見ましたが、バスなどの入駅・出駅場所は表示してくれません。要するに交通系とはいえ、電車などに限定している気味?あと、お店や自販機で購入した支出は、「物販」とか使用後の残高だけ表示されます。しかし日付と残高はちゃんと表示されるので重宝しています。

Acknowledgement