消費税について考える [その他]
2014年4月1日から、消費税が8%に引き上げられることが正式に決まったようです。
売上や仕入れなどを扱うシステムでは、消費税を考慮しなければならないことが多いと思います。
最初に、消費税率の変遷を。
1989/4/1 消費税3%施行
1997/4/1 消費税5%施行
2014/4/1 消費税8%施行
現在の5%は、16年前に施行されたもので、長期にわたって固定されていたと思います。
私が経験したシステムでは、消費税率がころころ変わることを前提としたシステム、と言うものは無かったと思います。
どこかのマスタに、5%と言う数字を持たせておいて、消費税計算の時はその値を持ってきて計算すればOK程度でした。
(そもそも、そんな重大なシステムは無かったので)
今後のことを考えると、日付によって、その日での消費税率を持ってこれる仕組みをちゃんと持っておくことが必要になってくると思います。
固定値で計算させるだけでは、役不足になりそうです。
そんなわけで、消費税率をちゃんと判定する仕組みの例を考えてみました。
最初に、消費税率を管理するためマスタです。
税率と、それに対応する期間を登録したテーブルです。
0%の期間も登録しているのは、SQLで処理を行う場合に、アンマッチになる期間があると、面倒くさいかと思って入れてみました。
実際にそう言う処理を作ったことがないので、これについて実際役に立つかは未検証です。
売上などを管理するシステムで保持するデータは、長くて10年程度なんじゃないかと思うので、さほど過去は心配しなくてもいいかもしれません。
次に、消費税を参照する処理ですが、ここでは税率を返す関数を考えようと思います。
日付をパラメタで渡すと、その日付に対応する税率を返す関数です。
Public Function fncSZei(datP As Date) As Currency '消費税率取得関数 Dim Cn As New ADODB.Connection Dim recA As New ADODB.Recordset fncSZei = 0 Set Cn = CurrentProject.Connection recA.Open "SELECT * FROM TM消費税 WHERE 開始日 <= #" & Format(datP, "yyyy/mm/dd") & "# AND 終了日 >= #" & Format(datP, "yyyy/mm/dd") & "#", Cn, adOpenForwardOnly, adLockReadOnly If recA.EOF = True Then MsgBox "消費税率の取得に失敗しました。", vbCritical Else fncSZei = recA!消費税率 End If recA.Close End Function
こんな感じで、消費税率が必要なときは、この関数で取得することができます。
以下蛇足ですが、こういう消費税率マスタのような、変更する事が極端に少ないマスタについて、メンテ画面を作成するかと言えば、しない事の方が多いかと思います。
変更の必要がある場合は、担当SEがテーブルを直接書き換えれば済むことなので、使わないかも知れない画面は作成の優先順位がとても低いのです。時間もお金もかかりますので。
また、消費税はすべての商品に適応されるわけではなく、たばこや有料ゴミ袋などは、非課税(消費税は0%)です。
そう言った商品を扱う可能性がある場合は、一律に計算されてしまう設計では不都合が起こります。
商品マスタなどの設計の話になりますが、商品毎に課税・非課税を設定できるように考えておいた方が良いかもしれません。
さらに蛇足ですが、今現在の消費税は、一律5%(今後8%)となっていますが、ニュースでは今後商品の種類によって、税率が変わる制度なども検討されているとも報じられています。
そうなると、消費税関連の処理は、さらにめんどくさくなりそうです。
コメント 0