Most Powerful Open Source ERP

ERP5の消費税8%対応方法を紹介

  • Last Update:2021-09-28
  • Version:001
  • Language:ja

2014年4月1日に消費税が5%から8%に上がります。おそらく世の中の様々なコンピュータシステムが新しい消費税率に対応するためのアップデートをしているだろうと思います。この記事ではERP5で消費税8%に対応するために行ったプログラムの実装の具体例について紹介します。

消費税5%だったころの機能

ERP5はカスタマイズして使うことが前提になっているソフトウェアです。カスタマイズされていない素のERP5はERPシステムを作るためのフレームワークです。これだけでは何もできません。ですから日本の消費税そのものを表す機能も素のERP5には存在しません。その代わりに入力された何かを元にして計算を行い別の何かを作り出す機能が存在します。この機能をTrade Model Lineといいます。日本で消費税を扱う必要のある現場でERP5が使われるときにはこの機能を使って消費税を計算する機能を作ることになります。

Trade Model Lineの基本的な仕組みを説明します。Trade Model LineはAmountを入力値として計算を行い別のAmountを出力します。Amountには量と単価というプロパティがあります。これでモノの数量や金額、お金そのものの量などを表します。そしてAmountはbase_contributionとbase_applicationというカテゴリーを持ちます。base_contributionはAmountが何に対して貢献するか、言い換えると何の計算に対して用いられるかを表します。base_applicationはその逆で貢献した結果、何の計算に対して用いられたかを表します。Trade Model Lineは関数のようなものでTrade Model Lineひとつひとつが独自の計算ルーチンを持ち、さらにbase_contributionとbase_applicationというカテゴリーを持ちます。Trade Model Lineのbase_applicationはTrade Model LineがどんなAmountを入力値として使うかを表します。Trade Model Lineのbase_applicationと一致するbase_contributionを持つAmountがそのTrade Model Lineの入力値になります。そしてTrade Model Lineのbase_contributionはTrade Model Lineの計算結果が何に貢献するかを表し、言い換えるとそのTrade Model Lineが計算して作り出す新しいAmountが持つbase_contributionの値となります。もしTrade Model Lineが作り出した新しいAmountのbase_contributionがあるTrade Model Lineのbase_applicationに一致すればさらに計算が続きます。AmountとTrade Model Lineがbase_contributionとbase_applicationのカテゴリーを使って計算を連鎖させることができます。Trade Model Lineに入力されるAmountは単数複数どちらでも可能です。

これを図にすると次のようになります。

この仕組みを消費税5%の計算に使うと次のようになります。このようにして消費税5%を計算する仕組みになっていました。

将来を見据えて消費税8%に対応する

消費税8%に対応するための前提条件として二つのことを考えました。一つは2014年4月前後に消費税5%になるか8%になるか判断が付かないデータが存在し得ることです。例えば受注したときは消費税5%だったけれど出荷のタイミングなどの関係で実際に売上を計上するときには2014年4月1日を過ぎていて消費税8%になっているかもしれません。そうなるとERP5のユーザーは注文を入力するときに消費税が5%になるか8%になるか事前に決められません。この問題に対処するには日付を基準にして税率を自動で決める必要があります。もう一つは将来税率が再び変わる可能性が高いことです。既に10%になることが予定されています。ですからそれを考慮した仕組みにしなければいけません。

これを踏まえて消費税を表すカテゴリーを作り変えました。今まではvatというカテゴリーが一つだけありました。消費税は5%しかありませんでしたからこの唯一のカテゴリーが2つの意味を表していて、それは消費税の課税対象であるという意味と税率が5%であるという意味でした。しかし税率が変わりますからvatカテゴリーを同じ意味のままで使い続けることができません。そこでvatは5%の消費税を表すものとして残しておいて、消費税8%を表すvat008、日付に応じて税率を決めるvatautoを追加しました。これで過去のvatカテゴリーを使っているデータは消費税率5%の課税対象であったものという意味を持ちつづけることができるので矛盾は生じません。

Trade Model Lineは今まではvatカテゴリー付きのAmountだけを入力値としていましたが、これからはvatauto,vat008,vatの3つのカテゴリーのどれかが付いているAmountを入力値として受け付けるようにしました。そしてTrade Model Lineは入力されたAmountのカテゴリーに応じて税率を変えて計算をするようにしました。vatautoなら入力値のAmountの日付に応じた税率(2014年4月1日以降なら8%、それより前なら5%)、vat008なら8%、vatなら5%を使って消費税額を求めます。こうすることで一つのTrade Model Lineが複数の税率に対応するようにできました。消費税10%が登場するときにもし単純に税率が上がるだけであれば、vat010カテゴリーを追加してTrade Model Lineの計算式にvat010のときの分岐条件を加えるだけで消費税10%に対応できます。下の図はこの新しい仕組みを表しています。

このようにして消費税8%に対応しました。実際にはもう少し細かい話があって例えば受注や出荷予定の段階ではvatautoで自動的に税率を求めるものの出荷が終わって請求書を送る前に税率5%か8%のどちらになるのか確定したところでデータのカテゴリーがvatautoからvatかvat008に変化させるといったこともしているのですが説明が非常に長くなってしまいますので今回は一番肝心などうやって消費税額を計算するのかというところを紹介しました。

読んでいただきありがとうございました。