2020年1月17日金曜日

複式簿記システムの構築 1

個人的に青色申告による複式簿記が必要なので、そのための必要十分なシステムを構築する。
(市販の会計ソフトは決して「必要十分」ではなく、単なる「十分」(つまり不必要な余計な要素を過剰に備えている)ので、論外。)

おおまかなイメージとしては:

  • 逐次発生する会計イベントは人手によって「仕訳」してデータを入力し、1 年を通じてデータベース(仕訳帳)に蓄積する
  • 年間の蓄積された仕訳帳に基く年度末の「総勘定元帳の集計」と「決算整理仕訳」と「損益計算書の作成」は、Python プログラムで自動化する。

具体的には:

  • 仕訳帳は Google SpreadSheets を利用して家族で共有
  • 集計・決算整理・損益計算は、Google SpreadSheets から TSV をダウンロードして、SQLite にインポートし、Python で SQL を駆動してそれらの定型化された作業を行い、結果を複数の TSV としてアウトプットする。最後にそれら TSV を単一の .xlsx ファイルにマージして一つの総勘定元帳として得る。

仕訳帳のスキーマ(Google SpreadSheets)

create table Journal (
 id integer primary key,
 parent_id integer,
 date date,
 amount integer,
 debit text,
 credit text,
 description text
);

ID は Google SpreadSheets 上では、単に「行番号+1」の計算式を使っただけのもの。

親IDは、借方 or 貸方が諸口(複数科目)となる場合の「一対多」または「多対多」の仕訳のために用意した要素。グルーピングするエントリーのIDを親ID として指し示す。

通常の一対一の仕訳
「ID」「日付」「金額」「借方科目」「貸方科目」を示し、「親ID」は NULL
一対多(または多対多)の仕訳の親エントリー
「ID」「日付」を示し、「親ID」は NULL
「金額」「借方科目」「貸方科目」は両方とも「諸口」の場合は NULL だが、片方が単一の場合は、そのままその科目と金額を使い、一方だけ諸口とすればよい。
一対多(または多対多)の仕訳の子エントリー
「ID」「親ID」「金額」「借方科目」「貸方科目」のみを示し、「日付」は NULL

プロトタイプ

  1. Google SpreadSheets からは手動で journal.tsv をダウンロードする。
  2. pptsv.py で TSV をプリプロセスする(日付や金額のフォーマットの修正)。
  3. macOS 標準の sqlite3 コマンドを使って、accounting.sqlite ファイルに table を新規作成し、プリプロセスした journal.pp.tsv をインポートする。
    .mode tabs
    .import journal.pp.tsv Journal
  4. Python 経由で上記データベースを処理して、決算整理仕分けを行ってデータベースをアップデートし、各勘定科目に分け、.tsv でエクスポートする(accounting.py)。
  5. 勘定科目別にエクスポートされた .tsv を merge2xlsx.py で単一の 総勘定元帳.xls にマージする。

このプロトタイプで、各処理を確立できたので、最終的に、accounting.py のみで TSV のプリプロセス以降の処理を一挙に行えるようにコーディングし直して、一応の完成を見た。


今後の課題

毎年の確定申告に困らない程度のシステムの構築には至ったが、損益計算書までであり、資産に関する処理(貸借対照表)は未対応である。特に減価償却費が自動化できていないと、損益計算書も本当の意味で完成したとは言えないので、せめて減価償却資産については、対応できるようにしておきたい。

複式簿記システムの構築 2

0 件のコメント:

コメントを投稿