mike、mikeなるままに…

プログラムに関してぬるま湯のような記事を書きます

プログラマーのための会計知識・用語 - (2)

普通のエンタープライズ系プログラマーであれば、会計用語はちゃんと英語で覚えているものですよね(白目

僕はにも言ったとおりに、

出来損ないのエンタープライズ系プログラマーなので、

アメリカの中学生向けの会計の簡単な本で勉強しています。

この本の第二章に書かれていることをまとめてみます。

会計の基本用語

  • 勘定 : Account
  • 勘定科目 : Account Titile
  • 借方 : Debit
  • 貸方 : Credit
  • 総勘定元帳 : Ledger
  • 勘定科目一覧 : The Chart of Accounts
  • 仕訳 : Journal
  • 複式簿記 : Double-Entry Bookkeeping
  • 試算表 : Trial balance

前回の復習

  • 資産 : Assets
  • 負債 : Liabilities
  • 資本 : Capital

借方と貸方の決まり事 (Convention)

エンタープライズ系プログラマーなら当然わかっていると思いますが…

勘定科目(Account Title)は借方科目なのか貸方科目なのか決まっていますね。

借方系の勘定 (The Account to be debited)

  • 資産(Asset)の増加
  • 費用(Expense)の増加
  • 負債(Liabilities)の減少
  • 資本(Capital)の減少
  • 収入(Income)の減少

借方系の勘定 (The Account to be credited)

  • 負債(Liabilities)の増加
  • 資本(Capital)の増加
  • 収入(Income)の増加
  • 資産(Asset)の減少
  • 費用(Expense)の減少

会計のドメインモデルを作ってみる

ここまで来たら、もう会計のドメインモデル作れますね。

勘定

Account.groovy
1
2
3
4
5
@Cannonical
class Account {
    String title
    AccountChart accountChart
}

取引

Transaction.groovy
1
2
3
4
5
6
7
8
@Cannonical
class Transaction {
    long id
    Date date
    Debit debit
    Credit credit
    String memo
}

借方

Debit.groovy
1
2
3
4
5
6
@ToString
class Debit {
    Account item
    int value
    String memo
}

貸方

Credit.groovy
1
2
3
4
5
6
@ToString
class Credit {
    Account item
    int value
    String memo
}

借方と貸方でクラスの構造が全く同じなので、

訓練されたSIer諸氏に於いては同じクラスを使おうと言い出すとおもいます。

しかし、java-ja.dddで増田さんがおっしゃっていたとおり、

借方と貸方は別物なので、別のクラスにします。

java-ja.dddのまとめについてはこちら

勘定科目

AccountChart.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
enum AccountChart {
    ASSET{
        AccountConvention increase() {AccountConvention.DEBIT}
        AccountConvention decrease() {AccountConvention.CREDIT}
    }, EXPENSE{
        AccountConvention increase() {AccountConvention.DEBIT}
        AccountConvention decrease() {AccountConvention.CREDIT}
    }, LIABILITIES{
        AccountConvention increase() {AccountConvention.CREDIT}
        AccountConvention decrease() {AccountConvention.DEBIT}
    }, CAPITAL{
        AccountConvention increase() {AccountConvention.CREDIT}
        AccountConvention decrease() {AccountConvention.DEBIT}
    }, INCOME{
        AccountConvention increase() {AccountConvention.CREDIT}
        AccountConvention decrease() {AccountConvention.DEBIT}
    }
}

勘定の決まりごと

AccountConveintion.groovy
1
2
3
enum AccountConvention {
    DEBIT, CREDIT
}

この二つのクラスを書いていて、DebitとかCreditのクラスを生成するメソッドはこのあたりにあるといいなと思ってきた。

例えば、費用が増加した場合

1
2
3
4
AccountChart.EXPENSE
        .increase()
        .by('売上原価', '商品が売れた')
        .for(item.asCredit())

という感じで書きたいですね。

そうすると、AccountChart.groovyを少し直さないといけないですね…

以下、宿題

Rearrange the following list of accounts and produce a trial balance.

  • Accounts Payable(900)
  • Accounts Receivable(1,400)
  • Capital(3,200)
  • Cash(2,000)
  • Drawing(400)
  • Equipment(1,800)
  • Fees income(2,600)
  • General expense(100)
  • Notes Payable(1,100)
  • Rent expense(500)
  • Salaries expense(800)
  • Supplies(600)
  • Supplies expense(200)