written: 2020-08-01 .. 2023-01-19
個人的に青色申告による複式簿記が必要なので、そのための必要十分なシステムを構築する。
(市販の会計ソフトは決して「必要十分」ではなく、単なる「十分」(つまり不必要な余計な要素を過剰に備えている)ので、論外。)
おおまかなイメージとしては:
具体的には:
データベースのスキーマは以下のような設計にする:
凡例:表名(列1の名前,列2の名前,……)
(※実線は主キーを表し、破線は外部キーを表す)
仕訳(id,伝票id,年月日,金額,借方科目,貸方科目,備考)
CREATE TABLE Journal (
id INTEGER PRIMARY KEY,
voucher_id INTEGER,
date TEXT,
amount INTEGER,
debit TEXT,
credit TEXT,
note TEXT
);
伝票id は、一連の複合仕訳を識別するためのもので、データの入力時に、先頭のエントリーの id と同じ値を利用する(UI 機能として実装する)。値は特にそう(先頭エントリーの id)である必然性はないのだが、伝票id の列において、ある複合仕訳に所属する一連の仕訳のエントリーを他の複合仕訳から区別できることが担保されていればよい。単一仕訳の場合の伝票id の値は NULL
とする。
また、複合仕訳の場合、それに所属する各エントリーの仕訳の相手方勘定科目は、「諸口」になる。
各勘定科目毎の元帳は、次のようにする:
元帳(id,年月日,摘要,仕訳id,金額,備考)
CREATE TABLE [勘定科目名] (
id INTEGER PRIMARY KEY,
date TEXT,
particulars TEXT,
journal_reference INTEGER,
amount INTEGER,
note TEXT,
FOREIGN KEY (journal_reference) REFERENCES Journal (id) ON DELETE CASCADE ON UPDATE CASCADE
);
借方、貸方の別は、金額の値に ± の区別をつけることで、+(借方)、−(貸方)ということにする。
E-R 図は次のようになる:
基本的には以上だが、減価償却資産は、扱いがやや特別なので、次のように別個のものを用意する:
減価償却資産(名称,取得年月日,取得価額,耐用年数,償却率,本年中の償却月数,本年分の普通償却費,事業専用割合,本年分の必要経費算入額,未償却残高,摘要)
CREATE TABLE Depreciable_Asset (
name TEXT PRIMARY KEY,
date TEXT,
acquisition_cost INTEGER,
useful_life INTEGER,
depreciation_rate REAL,
months_of_use_in_this_year INTEGER,
gross_depreciation_amount INTEGER,
business_usage_proportion REAL,
net_depreciation_amount INTEGER,
residual_value INTEGER,
particulars TEXT
);
仕訳帳と違って適宜更新するようなものではないので、Google Spreadsheets にする必要もなく、直接 TSV を作っても違いはない。
この表を基にして、その年度での減価償却費用を算出し、決算整理仕訳の処理の一環として組み込めばいいわけだ(👉 実装完了済)。
確定申告的には、上の処理は国税庁側のシステムが行うので、自前で用意したとしても二度手間になり、どうしても必要というほどのものでもないかもしれない。
上記プロトタイプで、各処理を確立できたので、最終的に、accounting.py のみで TSV のプリプロセス以降(2 ~ 5)の処理を一挙に行えるようにコーディングし直して、一応の完成を見た。
つまり、現時点(2021-02-13)において、残っている課題は Google SpreadSheets からのダウンロード作業(1 の部分)もプログラムに組み込むことくらいしか残っていない。(👉 2023-01-19 の時点でこれも実装し、さらにすべての処理を accounting.py に集約した)
<SQL>