Ledger — 給与・年金の仕訳

今日は Ledge-cli を使って給与・年金を仕訳してみます1

お題は:

サラリーマン、年金受給者は 家計簿で
給与、年金をどのように仕訳できるか

Ledger-cliの主な特長を箇条書きにすると次のとおりです。

  • 複式簿記
  • 会計データはプレーンテキストファイル
  • コマンドライン
  • フリーソフト

対応しているプラットフォームは GNU/linux, Windows, Mac OS X, BSDなどです。テキストファイルが編集できるエディター2なら基本的には何でもOKです。

まずは給与明細

伝統的な複式簿記の 借方・貸方 方式でも もちろん仕訳できます。けれども一般人にはとてもハードルが高いです(注3)。

では Ledger でサラリーマンの給与を仕訳してみましょう。

次の例は Micorosoft 365 サイトの給与管理表 (明細書付き) にあげられている数値を使って Ledger向けのトランザクションを書いたものです。

2021/10/24 * (株) XYZ
    Income:基本給                         -250,000 JPY
    Income:諸手当                          -20,000 JPY
    ;
    Expenses:社会保険:健康保険                15,000 JPY
    Expenses:社会保険:厚生年金                28,000 JPY
    Expenses:社会保険:雇用保険                 3,000 JPY
    Expenses:社会保険:生命保険                 1,000 JPY
    ;
    Expenses:その他:組合費                      700 JPY
    Expenses:その他:その他                        0 JPY
    ;
    Expenses:租税公課:所得税                   6,500 JPY
    Expenses:租税公課:住民税                  15,000 JPY
    ;
    Assets:積立                              8,000 JPY
    ;
    Assets:ABC銀行
ソースコード 1: Ledgerによる給与の仕訳例

同じ数字が2回書かれることもなく、見た目からしてシンプルですよね 😄

テキストエディタでこれを書いて保存するだけ、です。

補足説明:

  • Ledgerでは、借方・貸方の概念を前提とせず4アカウント (account; 勘定科目)ベースで複式簿記の 原理 を具現化しています。
  • アカウントの第1レベルである Income, Expenses, Assets… などは収入、経費、資産などのように 日本語 にしても全然 問題ありません。
  • 最終行の Assets:ABC銀行 の行に 金額 が入っていませんが、Ledgerでは一つのトランザクション中の1アカウントだけは金額を ブランク にすることが許容されます。そこはLedgerが自動的に補完してくれます。
  • Ledgerでは1トランザクション内に複数の通貨(JPY, $, € など)を混在させることができます。当日の通貨の交換レートを為替レートデータベース(ディフォルトでは .prices.db ファイル)から読み込んで換算してくれます。そのためトランザクション内では 通貨単位 (上の例では JPY )は 必須 です5

上の内容を myledger.dat ファイルに保存して、 ledger reg を実行すると次のようになります6

$ ledger reg  -f myledger.dat
2021/10/24 (株) XYZ   Income:基本給             -250,000 JPY   -250,000 JPY
                      Income:諸手当              -20,000 JPY   -270,000 JPY
                      Expenses:社会保険:健康保険    15,000 JPY   -255,000 JPY
                      Expenses:社会保険:厚生年金    28,000 JPY   -227,000 JPY
                      Expenses:社会保険:雇用保険    3,000 JPY   -224,000 JPY
                      Expenses:社会保険:生命保険    1,000 JPY   -223,000 JPY
                      Expenses:その他:組合費         700 JPY   -222,300 JPY
                      Expenses:その他:その他               0   -222,300 JPY
                      Expenses:租税公課:所得税      6,500 JPY   -215,800 JPY
                      Expenses:租税公課:住民税     15,000 JPY   -200,800 JPY
                      Assets:積立                 8,000 JPY   -192,800 JPY
                      Assets:ABC銀行             192,800 JPY            0

ABC銀行への振込額(192,800円)が補完されています。

つぎは年金

つぎにLedgerで年金を仕訳した例をあげます。金額はあてずっぽうです。

2021/10/15 * 国民年金
   Income:国民年金             (-100,000 JPY /2) ; [2021/08/15]
   Income:国民年金             (-100,000 JPY /2) ; [2021/09/15]
   ;
   Expenses:社会保険:介護保険     (15,000 JPY /2) ; [2021/08/15]
   Expenses:社会保険:介護保険     (15,000 JPY /2) ; [2021/09/15]
   ;
   Expenses:租税公課:地方税       (20,000 JPY /2) ; [2021/08/15]
   Expenses:租税公課:地方税       (20,000 JPY /2) ; [2021/09/15]
   ;
   Assets:ABC銀行
ソースコード 2: 複式簿記による国民年金の仕訳

こちらは金額欄と行末の日付欄などが一見「何?」という感じですね。

補足説明:

  • 年金は2ヶ月に1回、偶数月の15日に、その前の 2ヶ月分 が支給されます。各行の右端の [ ] カッコ内の日付がそれを表現しています。支給日は10月15日ですが、実際には8月分と9月分の収入となることをLedger風に表現しています。
  • ( ) で囲まれた金額欄内には2で割る が書かれています。
  • 2ヶ月分の支給額が2で割り切れない時には、たとえば (floor (100,451 JPY / 2)) とすれば、小数点以下が 切り捨て られます。ちなみに 切り上げは ceiling(), 四捨五入は round() です。

このLedgerファイルの reg コマンド出力は次のようになります。ちゃんと年金額と控除金額が8月分と9月分に振り分けられています。

$ ledger reg -f myledger.dat
2021/08/15 国民年金  Income:国民年金            -50,000 JPY    -50,000 JPY
				    Expenses:社会保険:介護保険    7,500 JPY    -42,500 JPY
				    Expenses:租税公課:地方税      10,000 JPY   -32,500 JPY
2021/09/15 国民年金   Income:国民年金            -50,000 JPY    -82,500 JPY
				     Expenses:社会保険:介護保険    7,500 JPY    -75,000 JPY
				     Expenses:租税公課:地方税     10,000 JPY    -65,000 JPY
2021/10/15 国民年金   Assets:ABC銀行              65,000 JPY

最終行の Assets:ABC銀行 の日付は、銀行振込みの日付=10月15日になっています。

メリット・デメリット

このように家計簿で給料や年金の 振込金額 だけではなく、その 明細 も仕訳することのメリット・デメリットは何でしょうか。

最大のメリットは、 税金保険料 あるいは 積立預金 などを分析して正確に理解できるようになることです。

税金について言えば、 特別徴収 される以外の税金も合わせて計算できます。消費税も含めたいならそれもできますし、 悪名高い ガソリン税や酒税、入湯税、入場税なども1円単位でおさえることができます。それらの 納税金額 をワンラインのコマンドで、任意の期間、任意の組み合わせで簡単・正確に得ることができます。

国だけでなく多くの 税金専門家 も、これらの税金は「仕訳する必要が無い」と言ってますが、きちんと仕訳してデータ化し可視化して悪いわけではありません。都合が悪いのは 徴税する主体 の方だけです 😄


デメリットとして考えられるのは、仕訳に余計な 手間 がかかるのでは、ということです。しかしLedgerの 自動転記機能 (automated transactions)や 定期的トランザクション (scheduled transactions)の機能(付録参照)を使えば、日常的な仕訳・転記に手間が増えることはほとんどありません。

一番 深刻なデメリットは、分析して税額がはっきりすると、その金額の大きさに 絶望 して 心理的 に落ち込む可能性があることでしょうか 😉


付録:トランザクションのスケジューリング

毎回、長たらしいトランザクションを手入力するのはヤボです。もし、Emacsのユーザならば、 ~/ledger-schedule.ledger ファイルに次のようなエントリを書いておきましょう7

第1行目の [*/E/15] は毎偶数月(even)の15日を意味します。

[*/E/15] 国民年金
    Income:国民年金      (-100,000 JPY /2) ; [2021/xx/15]
    Income:国民年金      (-100,866 JPY /2) ; [2021/yy/15]
    ;
    Expenses:社会保険:介護保険 (15,000 JPY /2) ; [2021/xx/15]
    Expenses:社会保険:介護保険 (12,700 JPY /2) ; [2021/yy/15]
    ;
    Expenses:租税公課:地方税   (20,000 JPY /2) ; [2021/xx/15]
    Expenses:租税公課:地方税   (20,000 JPY /2) ; [2021/yy/15]
    ;
    Assets:ABC銀行

こうしておいて、Emacs でLedgerファイルを開いている時に C-c, u を叩きます。年金支払い日が近いと [*/E/15] のところに具体的な日付が入ったトランザクション例が表示されます。それをそのままコピペして修正が必要な箇所だけを直せばよいわけです。

ちなみに毎月25日は [*/*/25], 奇数月の1日は [*/O/01], 毎年4月1日なら [*/04/01] のように指定します。

Footnotes:


  1. わが国では給与(や年金)から、ありとあらゆる(考えられないような)天引き控除(中には 特別徴収 というジョークのような名目の控除もあります)がなされています。LedgerのドキュメントやGoogle Groupでの議論を見ても、天引きされる税金や社会保険費の扱い例を見ることはほとんどありません。給与は原則として雇用主が雇い人にまるまる支払うものとなっているからです(公務員などは例外ですが)。 ↩︎

  2. EmacsやVIMを使うヒトが多いようです。個人的にはEmacsが最適だと思いますが・・・。 ↩︎

  3. 給与を 借方・貸方 方式で家計簿にまとめる方法については、「給与収入の仕訳は手取り金額と法定外控除分の二本立て」(中川勉社会保険労務士事務所)でわかりやすく説明されています(図1)。

    図1: 「給与収入の仕訳は手取り金額と法定外控除分の二本立て」より

    図1: 「給与収入の仕訳は手取り金額と法定外控除分の二本立て」より

    このサイトは、天引きされる 保険料税金 は自分でコントロールできないので、家計簿には「記入する必要はありません」という立場です。 ↩︎

  4. 概念を前提としないだけでなく、Ledgerでは借方・貸方の 用語 すら必要としません。しかし --dc オプションを使うとLedgerの出力を借方・貸方のフォーマットに変換して表示することができます。 ↩︎

  5. Ledgerの出力の通貨単位を JPY ではなくて にしたいときは、 Income:基本給 -250,000 円 と書けます。 $ マークは金額の前に書けますが ¥ マークはどうやって書けばよいか良く分かりません。 ↩︎

  6. 日本語を含むLedgerの出力は、残念ながら列がきれいに揃わないことがあります。出力の 列崩壊 が許容されない場合には、ちょっとした小技を必要とします。それについては後日、別の記事にして紹介します。 ↩︎

  7. これはEmacsの Ledger-mode 内のみの機能です。他にもたくさんの機能があります。詳しくはLedger-mode manual を見てください。 ↩︎