1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

会計ソフトの作成 7 勘定科目

Posted at

仕訳に関わるテーブルが作成され、そのテーブルから参照している定義も既に出て来ているので、勘定科目と補助科目テーブルを作成します。
簿記3級レベルでは、勘定科目は、資産、負債、純資産、収益、費用の5つの要素に所属すること、その5つの要素は借方、貸方のどちらかのポジションを持ち、取引を記録した仕訳の貸借で、本来のポジション側に現れたら増加、逆のポジションに現れたら減少とすれば良いというのが原則で、簡単な条件分岐で、プログラミング言語上も、SQLで処理するにもそれ程難しく無いはず。
なのですが、原則があれば例外はつきもので、簿記3級レベルでも、その原則に従わない勘定科目があります。

1 評価勘定にあたるもの
 貸倒引当金/減価償却累計額
 これらは、資産科目に属するのですが、売掛金や固定資産等の評価を減算させる性質をもっていて、勘定科目の原則とは逆の働きをします

2 売上値引/返品
 これらは、収益科目にあたるのですが、やはり意味は逆の働きをします

3 期末商品棚卸高/仕入戻し高/仕入値引高
 これらは、売上原価を構成する費用科目ですが、意味は逆となります

直接法で減価償却を仕訳していれば、減価償却費累計額は使わないし、売上値引や返品も売上で反対仕訳を行えば良いですが、期末商品棚卸高を使わない(科目名な違うかもしれませんが)とか、貸倒引当金が出てこない決算整理はほぼないと思いますので、
仕訳上の貸借2通り、科目全体の持つポジション2通り、特定の科目が持つポジション2通りの計8通りの組合せがあることになります。このことを勘定科目を表現するテーブルに載っけておかないと困った事になるはずです。

CREATE TABLE kaikei."ma_勘定科目" (
    id integer NOT NULL,
    created_at timestamp without time zone,
    updated_at timestamp without time zone,
    "勘定科目属性" text NOT NULL,
    "勘定科目コード" text NOT NULL,
    "勘定科目名" text NOT NULL,
    ---------------------
    "勘定科目正式名" text NOT NULL,
    "貸借" text NOT NULL,
    "借方税区分コード" text NOT NULL,
    "借方税区分名" text,
    "貸方税区分コード" text,
    "貸方税区分名" text NOT NULL,
    ---------------------
    ---------------------
    ---------------------
    "要素コード" text NOT NULL
);
-- 一部割愛


COMMENT ON COLUMN kaikei."ma_勘定科目"."貸借" IS 'その科目のポジション';
COMMENT ON COLUMN kaikei."ma_勘定科目"."要素コード" IS '五要素へのリンク';

CREATE SEQUENCE kaikei."ma_勘定科目_id_seq"
    AS integer
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

ALTER SEQUENCE kaikei."ma_勘定科目_id_seq" OWNED BY kaikei."ma_勘定科目".id;
ALTER TABLE ONLY kaikei."ma_勘定科目" ALTER COLUMN id SET DEFAULT nextval('kaikei."ma_勘定科目_id_seq"'::regclass);
ALTER TABLE ONLY kaikei."ma_勘定科目"
    ADD CONSTRAINT "ma_勘定科目_pkey" PRIMARY KEY (id);

ALTER TABLE ONLY kaikei."ma_勘定科目"
    ADD CONSTRAINT "u_ma_勘定科目勘定科目コード" UNIQUE ("勘定科目コード");

CREATE UNIQUE INDEX "i_ma_勘定科目勘定科目コード" ON kaikei."ma_勘定科目" USING btree ("勘定科目コード");

ALTER TABLE ONLY kaikei."ma_勘定科目"
    ADD CONSTRAINT "f_ma_勘定科目" FOREIGN KEY ("貸借")
    REFERENCES kaikei."type_貸借"(id) ON UPDATE CASCADE DEFERRABLE;

ALTER TABLE ONLY kaikei."ma_勘定科目"
    ADD CONSTRAINT "f_ma_勘定科目_要素コード" FOREIGN KEY ("要素コード")
    REFERENCES kaikei."type_勘定要素"("要素コード") ON UPDATE CASCADE DEFERRABLE;

ALTER TABLE ONLY kaikei."ma_勘定科目"
    ADD CONSTRAINT "f_ma_勘定科目借方税区分コード" FOREIGN KEY ("借方税区分コード")
    REFERENCES kaikei."type_税区分"("税区分コード") ON UPDATE CASCADE DEFERRABLE;

ALTER TABLE ONLY kaikei."ma_勘定科目"
    ADD CONSTRAINT "f_ma_勘定科目勘定科目属性" FOREIGN KEY ("勘定科目属性")
    REFERENCES kaikei."ma_勘定科目属性"("属性コード") ON UPDATE CASCADE DEFERRABLE;
-- ma_勘定科目属性は、勘定科目をグルーピングするための表となっています。

ALTER TABLE ONLY kaikei."ma_勘定科目"
    ADD CONSTRAINT "f_ma_勘定科目貸方税区分コード" FOREIGN KEY ("貸方税区分コード")
    REFERENCES kaikei."type_税区分"("税区分コード") ON UPDATE CASCADE DEFERRABLE;
 

この定義で、テーブルの定義から8通りの組合せが表現できると思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?