NPO法人会計に準拠した財務諸表をLedger-cliで書く

イントロ

ここでは:

Ledger-cliを使ってNPO法人会計に準拠した「活動計算書」と「貸借対照表」を書いてみます

そのためのシェルスクリプト( financial-statements.sh )を紹介します。

Ledger-cli はオープンソースの 複式簿記 会計処理システムです。UNIXのコマンドラインベースで動き、元帳などすべてのデータはプレインテキストです。

Ledgerにはユニークで優れた特徴がたくさんありますが、その最たるものは、複式簿記のいわゆる 貸方/借方 (debit/credit)の概念をスルーできるということ1

これから Ledgerで経理処理を始めてみようという方は、下の図1 に書かれている4つの基本勘定科目( Income, Assets, Liabilities, Expenses )とそれらの間の相互関係を抑えておくだけでOKです。

図1: 4つの基本勘定科目(accounts) (出典: GnuCash Tutorial and Concepts Guide)

図1: 4つの基本勘定科目(accounts) (出典: GnuCash Tutorial and Concepts Guide)

あとはトランザクションの書き方、ポスティングの書き方の 具体例 を見ながら実際に使って見れば、複式簿記概念に基づく基本的な会計処理が可能になります。

サンプル出力

さっそくですが、図2 financial-statements.sh を起動したときに得られる「 活動計算書 」と「 貸借対象表 」の出力例です。まだ 試作品 レベルです。おいおい少しずつ手をいれて行く予定です。なおこの計算の元となった仮想的なLedgerのポスティングデータはこちらからダウンロードできます。

図2: Ledger-cliで作った活動計算書と貸借対照表

図2: Ledger-cliで作った活動計算書と貸借対照表

補足説明

  • 上の2表では、金額がゼロの勘定科目は書かれていません。Ledgerのオプション --empty を効かせてあるからです。もし金額ゼロの科目も表に含めたいときには、このオプションを外します。
  • ちなみにサンプルデータのポスティング数は120ほどですが、この「活動計算書」と「貸借対照表」出力を得るために要する時間は 330msecです2

修正履歴

  • 2024/01/21 : Ledgerオプションの --sort account--sort -account に変更(accountの前にマイナス記号を付加)して勘定科目名の表示順を逆にして、「その他XXXXX」が先頭に来ないようにした。

Ledger関係ファイルの配置

この記事では、Ledger関係のファイルが図3のように配置されていることを前提としています。

図3: NPO法人会計のためのLedger関係ファイルの構造

図3: NPO法人会計のためのLedger関係ファイルの構造

Ledger-dir配下のファイル

financial-statements.sh

2を出力するためのスクリプト。まだ 試作品 というかベータ版レベルですがソースコードは こちらからダウンロードできます。

  • Ledger-cliをインストールした後、関係ファイルを図3のような形に配置し、Ledgerデータファイル( sample-npo-data.ledger )、それから config/ ディレクトリ内にこの下に説明した5個のデータファイルを作成すれば動きます。

sample-npo-data.ledger

これはこの記事のために作った架空のLedgerファイルです。 こちら からダウンロードできます。

configsディレクトリ配下の設定ファイル

accounts-npo.dat

この設定ファイルには全ての 勘定科目名 が次のような形式でリストされています。ダウンロードはこちら から。

;; 勘定科目構造   Time-stamp: <>

account Opening Balance
account Equity:Adjustments
;;;;;;;;;;;;;;;;;
;; I 経常収益の部
;;;;;;;;;;;;;;;;;
account 経常収益
	;;  I-1. 受取入会金
account 経常収益:受取入会金
account	経常収益:受取入会金:正会員受取入会金
account 経常収益:受取入会金:学生会員受取入会金
	;;  I-2. 受取会費
 :

commodities-npo.dat

使用する 通貨記号 (など)が格納されています[^footnore_comm]。中身は(当面)これだけです。

commodity JPY
commodity USD
commodity EUR
commodity hour

init-npo.dat

Ledgerの設定ファイルの中で一番重要なファイルです。デフォルトだとホームディレクトリ内の /.ledgerrc がinit-file になります。今回は configs/ 配下に init-npo.dat という名前にしています。内容は次のようになっています:

--file  PATH/sample-npo-data.ledger
--color
--check-payees
--date-format %Y/%m/%d
--pager /usr/bin/less
--sort date
--pedantic
--explicit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;  Aliases
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
alias income=経常収益
alias expns=経常費用
alias assets=資産
alias liab=負債
alias cash=資産:流動資産:現金預金:現金
alias ufj=資産:流動資産:現金預金:UFJ

この中で大事なのは --pedantic , --explicit のふたつ。これを指定することでトランザクション内に タイプミス があれば、Ledgerはエラーを出して処理を停止してくれます。エラーメッセージが沢山でてくるのでドキッとしますが、元帳ledger内のタイプミスを完全に抑止するためにこの機能はとても有効です。

これを有効活用するためには、新しい勘定科目名、支払先、通貨記号などを転記する際に、それを accounts.dat, payees.dat, commodities.dat などのデータファイルに追記することが必要です。その手間は、元帳内でタイプミスを見つける作業の大変さに比べるとごくささやかなものです。

payees-npo.dat

トランザクション中で、日付の後ろに記述されている payees (支払先名)のリストです。ダウンロードはこちらから。

payee 相模原花子
payee 担当事務職
payee 岩波書店
payee いとうや
payee 東京太郎
payee ○○大学図書館
  :

このデータファイルもとても大事。日々、数多くのトランザクションを書いていると、かならずタイプミスが起こります。とくに「支払先」名は綴りがちょっと違うだけで大きな問題になります。上で書いた --pedantic, --explicit オプションを忘れずにinit-file内に書いておきましょう。

tags-npo.dat

次のような内容のタグのリストが格納されます。

tag ID
tag 会員番号
tag Receipt

Ledgerのtagについては、過去に何回か触れていますのでここでは省略します。

Tipsと今後の課題

  • スクリプトは大急ぎで書いたコードなのであちこちツギハギです(恥)
  • シェルスクリプトで帳票の列揃えをするのはちょっと苦しいですが、まぁこの程度ならなんとか付き合っていけますね(汗)
  • Ledgerの –balance-format 部はデフォルトのformatを左右入れ替えただけです。書き方が微妙で完全には理解していません。もっと良い方法があるかと思います。
  • わが国のNPO法人会計で推奨されている勘定科目名の中には、ちょっと馴染みが無いものもあって、スクリプト内の変数名を決めるのがたいへんでした3
  • あと「財務諸表」を2種の書類に分けて「 正味財産 」を表示するところでコードの行数をくいました。そのへんで、とてもアグリーuglyなコードになりました。基本4勘定科目のバランスシートだけならコードは3分の1で済んだかなぁ(汗)
  • 標準的な「勘定科目」からさらに 深度の深い勘定科目 を設定した方が、将来のデータ分析には便利なように思われます。そのときにはLedgerの --depth オプションの値を起動時に引数で渡すようにします。
  • このような財務諸表を 書くだけ なら、エクセルとかネット上のサービスを使えば書けるのでしょうが、過去のデータを可視化したり今後のトレンドを予測したりするときにはLedgerの優位性は圧倒的です。次の記事では可視化例をアップしてみようと思います。
  • NPO法人会計に準拠した トランザクションの書き方 の解説を先にデプロイすべきだったかも知れません。 実は下書きはできていますが、 まずは財務諸表をLedgerでなんとか書けることを紹介した方が良いだろうということで、急遽方針転換して、こちらを先にデプロイしました。 あしからず・・・。 遅ればせながら本日(2024/01/25)「小規模学会のためのLedgerポスティング例 — NPO法人会計基準に準拠しながら」をデプロイしました。
  • 正味財産が負になると、金額の前に△ではなくマイナス符号がつきます4

Appendix: NPO法人会計関係記事一覧

タイトル 日付
Ledger-cliでNPO法人会計 – 勘定科目にエリアスを使う 2024/02/22
Ledger-cliによるNPO法人会計注記 – 使途制約のある寄付等 2024/02/15
Ledger-cliによるNPO法人会計注記 – 役員及びその近親者との取引 2024/02/02
Ledger-cliでNPO法人会計の可視化 — かんたん折れ線グラフ 2024/01/29
小規模学会のためのLedgerポスティング例 — NPO法人会計基準に準拠しながら 2024/01/25
NPO法人会計に準拠した財務諸表をLedger-cliで書く 2024/01/21

Footnotes:


  1. 詳細は公式マニュアルなどをみてください。 ↩︎

  2. 環境はThinkPad X230, Ubuntu 20.04 です。Ledgerのバージョンは 3.1.3-20190331。現在、スクリプトはまだ未整理なのでもう少し高速化できると思いますし、最新の高性能PCならほとんど瞬時に終わると思います。 ↩︎

  3. NPO法人会計の勘定科目名には、たとえば「人件費」や「その他経費」など、同じ科目名が「事業費」にも「管理費」にも含まれるという構造になっています。こうした構造だと、Ledgerでのクエリの際に「事業費:人件費」などと上位カテゴリの科目名をつけることが必要になります。もし勘定科目名ツリーを構成する科目名がどのレベルでもユニークだったら、検索の際の文字入力数はずっと少なくて済みます。ま、そもそも一つずつの科目名をできるだけ短くしたいという意図で作られた科目名構造ではないので仕方ないかとは思いますが・・・。 ↩︎

  4. マイナス記号は他の勘定科目でもつくことがあります。たとえば誰かが立替払いした「立替金」も締め日までに精算していない場合には 立替金 -2,200 JPY と表示されます。 ↩︎