とある事情で簿記資格(3級)を取得した際、この3級(中小企業の会計を管理)レベルの簿記の仕組みは自分で実装できるのでは?中小どころか零細部類なんだしと気づきました。今更ですが。
市販のソフトの機能に不足はないのですが、
- クラウドにデータを持つ関係でレスポンスが今ひとつ。データはクラウドにあるのに、アプリはデスクトップ版で、結構な頻度でアップデートが生じ、その度に管理者パスワードなんてのも必要。会計の仕組み、税法、会社法、税率が変化しないと基本変化しないのに。なにゆえのアップデートなんだろう?
- 簿記、会計の仕組みがそうなので仕方ないことでしょうが、期をまたいだデータの取得ができない。決算期日に関わらず、ある日を起点にし、ある日を終点とした試算表等の計算ができると、なにかと便利だと思うのだが
- 以上の理由で、会計ソフトの内製化を試みて検討中
- 手順は、市販ソフトから汎用データを落として自社内のDB(postgresql)に保存。そのDBから、試算表もどきが出力できるまでが当面の目標
- 内製化して外に出すものでもないので、スキーマなど、適当と考える部分は日本語で。postgresql内外で、それで困った事が無いのだし。(テーブル名や、列名等に大文字使ってしまった時の方が不具合度高かった)
最初の一歩として、5要素を示すテーブルを作成。5要素8取引は、簿記の学習で最初に来る話で、勘定科目以前の大前提だと覚えましたが、当然過ぎてか、その実装をあまり見かけないと思います。
CREATE TABLE kaikei."type_勘定要素" (
id integer NOT NULL,
"要素コード" text NOT NULL,
"要素名" text NOT NULL,
"貸借" text NOT NULL,
"並び順" integer
);
ALTER TABLE kaikei."type_勘定要素" OWNER TO postgres;
COMMENT ON TABLE kaikei."type_勘定要素" IS '勘定5要素とその本来のポジションを持つ';
COMMENT ON COLUMN kaikei."type_勘定要素"."要素コード" IS '参照される時のプライマリーキー';
CREATE SEQUENCE kaikei."type_勘定要素_id_seq"
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE kaikei."type_勘定要素_id_seq" OWNER TO postgres;
ALTER SEQUENCE kaikei."type_勘定要素_id_seq" OWNED BY kaikei."type_勘定要素".id;
ALTER TABLE ONLY kaikei."type_勘定要素" ALTER COLUMN id SET DEFAULT nextval('kaikei."type_勘定要素_id_seq"'::regclass);
INSERT INTO kaikei."type_勘定要素" VALUES (1, '1', '資産', '借方', 1);
INSERT INTO kaikei."type_勘定要素" VALUES (2, '2', '費用', '借方', 2);
INSERT INTO kaikei."type_勘定要素" VALUES (3, '3', '負債', '貸方', 3);
INSERT INTO kaikei."type_勘定要素" VALUES (4, '5', '収益', '貸方', 4);
INSERT INTO kaikei."type_勘定要素" VALUES (5, '4', '資本', '貸方', 5);
INSERT INTO kaikei."type_勘定要素" VALUES (6, 'X', '', '不定', 100);
SELECT pg_catalog.setval('kaikei."type_勘定要素_id_seq"', 6, true);
ALTER TABLE ONLY kaikei."type_勘定要素"
ADD CONSTRAINT "type_勘定要素_pkey" PRIMARY KEY (id);
ALTER TABLE ONLY kaikei."type_勘定要素"
ADD CONSTRAINT "u_type_勘定要素コード" UNIQUE ("要素コード");
id列は、Laravelであれ、その他のフレームワークであれ必須であるので作りますが、要素コードという別の列を持ち、それにもUNIQUE制約をつけているのは、経験上の工夫。PostgreSQLでは、UNIQUE制約がある列は、被参照列として動作するし、id列をserialで無い実装を行うより楽。
並び順という列は、例えば貸借対照表を作成する場合、借方で資産、費用、どちらを先に帳票に乗せるか、計算上は別段意味がないのだけど、現実には決められた並びで表示されないとだめで、そのための順序。RDB使い出した頃は、RDBの各行に順序は存在しないという原則、そしてそれは正しいのだけど、それを遵守していたものだが、現実世界には並び順というのがあって、大抵それはそれなりの意味を持っている。
以上で、5要素を示すテーブル作成の終了。次は、資産、負債、資本、収益、費用、各要素に入る勘定の検討。