Search Posts

Visits: 151

Nobuyuki SAMBUICHI

ISO/TC295 Audit data services/SG1 Semantic model Convener

1. 仕訳日記帳の正規化

こちらの記事 『デジタル会計帳簿の Tidy data (整頓されたデータ)アプローチ』で紹介したTidy dataについて例を用いて解説します。

2024年4月3日、〇〇商店から用紙を1,500円で購入しました。標準税率でしたので、消費税10%です。合計で1650円を法人カードで支払いました。
この仕訳は次の表で表現されますが、重複したデータが繰り返されています。

仕訳番号

行番号

日付

摘要

借方金額

貸方金額

科目番号

科目名

補助科目名

補助科目番号

補助科目

943-8-477

1

2024-04-03

〇〇商店 用紙

1,500

754

事務用消耗品費

部門

D10

札幌

943-8-477

2

2024-04-03

〇〇商店 用紙

150

250

仮払消費税等

部門

D10

札幌

943-8-477

2

2024-04-03

〇〇商店 用紙

250

仮払消費税等

税区分

S

標準税率

943-8-477

3

2024-04-03

〇〇商店 用紙

1,650

111

未払金

部門

D00

共通部門

943-8-477

3

2024-04-03

〇〇商店 用紙

111

未払金

カード

F02

AAカード

通常こうしたデータを整理するには、Codd博士の正規化を行います。

仕訳入力の入力単位のデータと明細行のデータを分けることから始めます。

取引の仕訳入力の操作単位は「〇〇商店 用紙」に関する2024-04-03の取引ですので、このデータを取り出して別の表として定義します。

Table 1. 仕分け

仕訳番号(PK)

日付

摘要

943-8-477

2024-04-03

〇〇商店 用紙

詳細が記載された明細行には、参照先の仕訳入力と付き合わせるために仕訳番号だけを残して、その他の重複データの欄を削除します。
このテーブルの主キーは、仕訳番号 + 行番号です。

仕訳番号(PK)

行番号(PK)

借方金額

貸方金額

科目番号

科目名

補助科目名

補助科目番号

補助科目

943-8-477

1

1,500

754

事務用消耗品費

部門

D10

札幌

943-8-477

2

150

250

仮払消費税等

部門

D10

札幌

943-8-477

2

250

仮払消費税等

税区分

S

標準税率

943-8-477

3

1,650

111

未払金

部門

D00

共通部門

943-8-477

3

111

未払金

カード

F02

AAカード

明細行の表にはまだ勘定科目の重複が残っていますので、これを重複がない形にするため、科目と金額を含んだ表と明細行に対応した補助科目を記載している表に分けます。

Table 2. 仕分け明細

仕訳番号(PK)

行番号(PK)

借方金額

貸方金額

科目番号

科目名

943-8-477

1

1,500

754

事務用消耗品費

943-8-477

2

150

250

仮払消費税等

943-8-477

3

1,650

111

未払金

明細行ごとに定義されている補助科目には、異なった情報源からのコードが混在しています。

仕訳番号(PK)

行番号(PK)

補助科目名

補助科目番号(PK)

補助科目

943-8-477

1

部門

D10

札幌

943-8-477

2

部門

D10

札幌

943-8-477

2

税区分

S

標準税率

943-8-477

3

部門

D00

共通部門

943-8-477

3

カード

F02

AAカード

この表をそれぞれの情報源に対応した形に整理します。

明細行の仕分けと原価部門を管理するための表

Table 3. 原価部門

仕訳番号(PK)

行番号(PK)

補助科目名

補助科目番号(PK)

補助科目

943-8-477

1

部門

D10

札幌

943-8-477

2

部門

D10

札幌

943-8-477

3

部門

D00

共通部門

課税区分毎に仮払消費税を整理するための表

Table 4. 消費税

仕訳番号(PK)

行番号(PK)

補助科目名

補助科目番号(PK)

補助科目

943-8-477

2

税区分

S

標準税率

カード会社毎に未払金を管理するための表

Table 5. 未払金

仕訳番号(PK)

行番号(PK)

補助科目名

補助科目番号(PK)

補助科目

943-8-477

3

カード

F02

AAカード

こうして、リレーショナルテーブルで定義する複数の表として、次の表が定義でき、プログラム操作の対象にすることができるようになります。

  • Table1 仕分け

  • Table2 仕分け明細

  • Table3 原価部門

  • Table4 消費税

  • Table5 未払金

用途別の表から取引金額や取引先を確認するには、リレーショナルテーブルの複数の表をそれぞれの表のキーを利用して結合操作します。

例えば、仮払消費税の集計計算をした際に、2024年4月3日、〇〇商店から用紙を購入した取引を確認しようとすると、 Table1 仕分け テーブルを検索して、2024年4月3日、〇〇商店から用紙を購入した取引を検索します。

仕訳番号(PK)

日付

摘要

943-8-477

2024-04-03

〇〇商店 用紙

仕分け番号が 943-8-477 だと分かりますので、この仕分け番号をキーとして、Table2から2行目の仕分け明細、およびそこに記載されている行番号2からTable4の2行目に記載されている消費税を検索すると、

仕訳番号(PK)

行番号(PK)

借方金額

貸方金額

科目番号

科目名

943-8-477

2

150

250

仮払消費税等

仕訳番号(PK)

行番号(PK)

補助科目名

補助科目番号(PK)

補助科目

943-8-477

2

税区分

S

標準税率

仮払消費税150円が標準税率で支払われたことが確認できます。

2. 正規化された表の問題点

取引を正規化した表には、そのコードを定義しているマスター表があります。

税区分 S が標準税率10%であることを登録している税区分マスターと付き合わせて初めて、その内容が確認できます。 業務ソフトで日々の業務を遂行している時にはこれで問題ないのですが、保存された過去のデータを確認し検証しようとすると次のような問題に直面します。

税区分マスターを例にとると、消費税が 8% から10%に改訂されたのは、平成31年(2019年)10月1日からです。それ以前の記録を確認する際には標準税率は 8%と解釈しなければいけません。

記録データとしては、その時点のマシターデータを復元することなく、その時点の情報がそのデータだけで詳細に確認することができることが重要です。

部門コードや取引先コードなども時とともに変遷を重ねていますので、確認に必要な情報は、他のマスターを参照することなくそのデータだけで確認できることが不可欠です。

3. Tidy data

Wickham[1] は、表に表示される値の基本的なセマンティクスを記述するTidy data(整頓されたデータ)を定義しています。

Tidy data(整頓されたデータ)では:
— 各 変数 が列を形成します。
— 各 観測 値が行を形成します。
— 観測 の種類ごとに表が形成されます。

Tidy data形式のxBRL-CSVでは、変数をデータの次元を定義する主キーを定義する変数と、観測対象となる変数に分けて定義することから始めます。

表名称

表の主キー

Table1

仕分け

d仕訳番号

Table2

仕分け明細

d行番号

Table3

原価部門

d原価部門1 ⇐ 補助科目番号

Table4

消費税

d税区分 ⇐ 補助科目番号

Table5

未払金

dカード会社 ⇐ 補助科目番号

補助科目番号欄には、異なる種類のマスターのコードが記載されていますので種類別に主キーを再定義します。

次に、変数を取り出します。補助科目名の欄には、異なる意味の情報が混在していますので、こちらも種類毎に再定義します。

  • 日付

  • 摘要

  • 借方金額

  • 貸方金額

  • 科目番号

  • 科目名

  • 原価部門名 ⇐ 補助科目名

  • 税区分名 ⇐ 補助科目名

  • カード会社名 ⇐ 補助科目名

4. 論理モデルの階層構造での定義

XMLなどでお馴染みの階層構造で定義するとこの表は次のような形です。

#

階層

繰り返し

項目名

1

0

0…​n

仕分け

2

1

1..1

⚪︎ 仕訳番号(PK)

3

1

1..n

⚪︎ 明細行

4

2

1..1

⚪︎⚪︎ 行番号(PK)

5

2

1..1

⚪︎⚪︎ 借方金額

6

2

1..1

⚪︎⚪︎ 貸方金額

7

2

1..1

⚪︎⚪︎ 勘定科目

8

3

1..1

⚪︎⚪︎⚪︎ 科目番号

9

3

1..1

⚪︎⚪︎⚪︎ 科目名

10

2

1..1

⚪︎⚪︎ 部門

11

3

1..1

⚪︎⚪︎⚪︎ 原価部門ID

12

3

1..1

⚪︎⚪︎⚪︎ 原価部門名

13

2

1..1

⚪︎⚪︎ 税区分

14

3

1..1

⚪︎⚪︎⚪︎ 課税区分ID

15

3

1..1

⚪︎⚪︎⚪︎ 課税区分名

16

2

1..1

⚪︎⚪︎ カード

17

3

1..1

⚪︎⚪︎⚪︎ カード会社ID

18

3

1..1

⚪︎⚪︎⚪︎ カード会社名

5. Tidy data形式のxBRL-CSV

xBRL-CSVでは、2.で求めた変数を使用して、対応する箇所にデータを埋め込みます。次元を記載する変数には、先頭に d をつけて区別しています。

Table 6. Tidy data xBRL-CSV

d仕訳番号

d行番号

d原価部門

d税区分

dカード会社

日付

摘要

借方金額

貸方金額

科目番号

科目名

原価部門名

税区分名

カード会社名

943-8-477

2024-04-03

〇〇商店 用紙

943-8-477

1

1,500

754

事務用消耗品費

943-8-477

1

D10

札幌

943-8-477

2

150

250

仮払消費税等

943-8-477

2

D10

札幌

943-8-477

2

S

標準税率

943-8-477

3

1,650

111

未払金

943-8-477

3

F02

AAカード

この表は、見慣れない形で違和感を持たれるかもしれませんが、XBRLタクソノミでディメンション(次元)を定義し、表示リンクで表示順を定義しておくと階層構造に復元できます。

XMLで表現された立体を折鶴に例えてみます。

折鶴

外側から見えている箇所を黒く塗りつぶし


折鶴

元の折り紙に広げてみると色のついた箇所が散らばっていることがお分かりだと思います。

折紙

Tidy data xBRL-CSVは、見慣れない形ですがXBRLタクソノミで折りたたむと元の形に復元でき、XBRLフォーミュラを使用したデータの検証や報告データへの集約計算も可能です。

この形式のCSVをXBRL-GLの次世代型として、xBRL Glanurar Data, XBRL-GDと名付けています。


1. Headley Wickham, Tidy Data Journal of Statistical Software August 2014 Volume 59 Issue 10