gitlabのロゴ
読みこみ中

会計データをデータベースで表現する

電卓とお金の流れを書いた紙Illustration by pixaday

直近の案件で、航空券の予約を管理し、その請求書を発行するWebサイトの開発をおこないました。 そこで調べた会計の仕組み(予約、請求、仕訳)と、その構造を表現するデータベース設計について説明します。

会計とは何か

商品を販売したら、その商品の代金について請求をおこない、代金の支払いを確認し、そのお金の流れをどこかに記録しなければいけません。 そうしたデータは、確定申告で税額を計算する際や、会社の業績を表示するために使用されます。

上記のようにお金の流れを記録して、どこかに報告するまでの処理を会計と言います。

データベースに会計データを保存するには、会計データの構造を考えてテーブル定義として 表現できるようなモデルを考える必要があります。

取り扱う会計データの範囲について

会計情報として最低限必要なのは、お金の流れに関する情報だけです。この情報は仕訳と呼ばれます。 ただ、実際の運用では何の商品でその仕訳が発生したか、お金の受け渡しについてどんな取り決めをしたのか、 といった情報も紐づけて管理することが多いと思います。

なので、今回作成したデータベースでは、以下の3つの情報を取り扱います。

  • 商品購入により作成される予約情報
  • 代金の支払いについての取り決めを書いた請求書
  • お金の流れを表現する仕訳

予約のデータ構造について

予約のER図

商品が購入されたら、予約を生成します。予約ではなく直接購入されるような商品も存在しますが、 それらは「予約直後に実行される予約」と考えれば予約として取り扱うことができます(汎化)。

上記のテーブル構造では、あらゆるサービスの予約を一つのテーブルで取り扱います。 サービスごとの固有の予約情報は予約詳細テーブルとして別のに保存します

共通の予約情報については、予約名や金額、予約日などを入れます。

予約詳細について、私の担当した案件では航空券の予約とサブスクリプションサービスの利用券の予約がありましたが、 航空券の予約詳細では出発日や乗客、サブスクリプションサービスの予約では 適用期間などの情報を入れていました。

請求書のデータ構造について

請求書のER図

予約後の代金支払いの取り決めは、請求書によっておこなわれます。

請求書は請求書カバーと請求項目から構成されます。

請求書カバーには、請求書を発行するのに必要な情報を入れます。 請求書番号や請求書発行日、請求先コードなどが含まれます。

請求項目は木構造で表現します。木構造の一番上の請求項目が請求書の合計金額を表します。 単一の請求項目は、請求書上での表示名と金額情報を含みます。 木構造は、Closure Tableと呼ばれるパターンで表現することができます。

仕訳項目のデータ構造について

仕訳のER図

仕訳の書き方はあらかじめ決められています。複式簿記と呼ばれる書き方では、 一つの取引を借方と貸方の2つに分けて書きます。

複式簿記の書き方に則ると、単一の仕訳項目は、複数の借方と貸方からなります。 借方・貸方は勘定科目コードと金額情報を含みます。 勘定科目コードとそのコードに対応した意味は、マスターの勘定科目テーブルとして作成します。

複式簿記は、もともとは債権・債務を管理するための記録方法を、あらゆる財産の変動要因を 表せるように拡張して生まれたものだそうです。 借方に何を書いて貸方に何を書くのかについては、なかなか複雑なルールがあるのですが、 データベース構造を考えるだけなら知らなくても問題ないので割愛します。 (私もよくわかっていないので、そのうち調べて別の記事にするかもしれません。)

最終的なデータベースの構造について

会計管理のER図

予約、請求書、売上のテーブルをつなぎ合わせると、上図のようなER図の構造になります。

商品が購入されると予約が生成されます。その代金の支払い方法は請求書によって定義されるので、 請求項目の一つを予約と紐づけることができます。

請求書には代金支払いの取り決めについて書かれているので、 これをもとにお金の流れの予定(売掛金の仕訳項目)を作成できます。 つまり、請求項目の一つを仕訳項目と紐づけることができます。

ちなみに、後で入金を確認したら、その入金自体もお金の流れとして別に仕訳に計上することになります。 請求書発行時に作成した売掛金の仕訳項目に対応する入金の仕訳項目がどれなのか探す作業を入金消込と呼びます。

まとめ

会計とはお金の流れを記録しどこかに報告するまでの処理のことです。 本記事ではお金の流れに加え、どの商品によるお金の流れなのか、どんな支払い方法なのかといった 情報も合わせて管理できるようなデータベースの構造について説明しました。

個人事業主は確定申告を自分でやる必要があるため、会計についての知識も必要になります。 本記事の内容がお役に立てば幸いです。