【Vue.js】福岡市以外の地域へ対応するためにやったこと【所得税・住民税・事業税・国保計算シミュレーション】
年始から3月まで仕事・プライベートと忙しくなかなか作業ができなかったですが、GWに時間ができたので所得税・住民税・事業税・国保計算シミュレーションをバージョンアップしました。
福岡県福岡市の計算にしか対応してませんでしたが、他の地域への対応をするため、手始めに福岡県春日市と東京都千代田区の住民税と国保の計算もできるようにしました。その際にやったことのまとめです。
他地域に対応するためにやったこと
大きく分けると以下4つです。
- Atomicデザインの組み込み
- Vuexのモジュール化
- 各地域の税率をマスタ化
- Axiosを使ったAPIの呼び出し
Atomicデザインの組み込み
Vue.jsを使った開発に慣れていなかったのもあり、コンポーネント分けが全然できておらず、1つの改修するにしても大変になってきており、このまま進めても破綻することが目に見えてました。
Vue.jsでデザインパターンを調べると、Atomicデザインが良く使われてるみたいなのでこちらを採用することにし、各機能をコンポーネントに分けました。
Atomicデザインは他のサイトに詳しく書かれてるので、良かった点・悪かった点を。
Atomicデザイン導入でよかった点・感想
- ソースが構造化され、メンテナンス性が上がった
- 入力コントロール(~万円入力するためのテキストボックスなど)も1コンポーネントにしたので処理やデザイン調整がらくになった
- ロジックとレイアウト部が分離できたので、ロジックに集中できるようになった。
Atomicデザイン導入で悪かった点・いまいちと感じた点
- 一番のきもとなるatoms,molecules,organisms,templatesの分け方がピンとこない
- 構造化にデザインセンスが問われるので、自分のセンスのなさに愕然とした
何回も作り直しました。。いまだにもっと言い分け方あるんじゃなかろうかと思います。
Vuexのモジュール化
モジュール化の目的
- Atomicデザイン組み込みで、各コンポーネント間の値のやり取りが増え煩雑になってきた
- localStorageに保存する入力値と計算結果などを明確に分けておきたい
- API経由で取得する各種税率の保持場所
もともとVuexは入力内容を保持し、最終的にlocalStorageへ保存する為だけに使用してました。ただ、Atomicデザインを組み込んでいくうちに各コンポーネントが分離され、その共通となる値や計算結果などをPropsやemitを用いてやりとりしていくのに限界を感じたので。結果的にやって大正解。こちらはDBと同じように考えれたのでAtomicデザインより楽でしたね!
1つ悪い点を挙げるなら、モジュール化するとgetterの呼び出しとかが文字列で階層をしていするので、入力補完が効かなくなることくらい。
各地域の税率をマスタ化
春日市は対応することが決まってたので、他のパターンとして東京都から千代田区をピックアップ。東京の23特別区以外は国保に資産割があるのでそちらの対応もできるような構造にしつつ、まずは福岡市と似たような計算式の地方自治体を選択しました。
現在以下4種の金額を計算できます
- 所得税
- 住民税
- 事業税
- 国民健康保険料
所得税は国税、事業税は地方税ですが地方自治体で税率は変わらないようなので、住民税と国民健康保険料が各地方自治体で計算が変わってきます。特に国民健康保険料は、ほぼすべての地域で違うので個々の持ち方をマスタ化できればOKでした。
ちなみに、マスタ化をするのであればデータをサーバサイドに持たせそれを取得するようにしないといけませんが、データベースを用意しサーバサイドのシステムを作りたくなかったので、Google SpreadSheetをデータベース代わりに利用してます。
これで税率の違いだけの地方自治体は、Google SpreadSheetをメンテナンスするだけで対応できるように!速度は遅いですが、都道府県・地方自治体を一回選んでしまえばいいだけなので、まだ許容範囲かな。スプレッドシート側にデータがどんどん増えてくるなら、本格的にサーバサイド考えないといけないけど。
Axiosを使ったAPIの呼び出し
各地域の税率をマスタ化をGoogle SpreadSheet側に用意したので、そのAPIをコールするためにAxiosを導入しただけ。ただそれだけ。 Promiseは完全に把握まではいかなかったけど、前よりは理解度深まったかなぁ。
まとめ
Atomicデザインはいいけど、Vue.js(JSフレームワーク)初心者が最初から組み込もうとするとはまるので後からでもいい。
逆にVuexは、使うなら最初からモジュール化しといた方が構造がきれいになる。
自分用で作ったサービスなので、自由に構造考えなおせるので楽しいですね。
ディスカッション
コメント一覧
ざっと自営業の税額計算をしてみたかったので色々webでシミュレータを拝見していたのですが、kawadeblogさんのものが一番見やすくてよかったです。
うちは事業税の税率が違うのですが、計算式が入っていて読み替えは簡単なので問題なしでした!
ふるさと納税の限度額も気になる所だったのでついでにわかって嬉しかったです。
利用させていただきありがとうございました。頑張ってください!
追伸:このページの「東京の24特別区」というのは、東京23区のことでしょうかね??
kiwa様
シミュレータを使ってのご感想ありがとうございます!
一番見やすいと言っていただき、とてもうれしかったです。
事業税の税率は、私が5%なのでそのまま固定にしてました。この機会に3~5%から選択できるようにバージョンアップしましたので、ぜひ今後も使用していただけると嬉しいです。
> 追伸:このページの「東京の24特別区」というのは、東京23区のことでしょうかね??
これはご指摘通り「東京23区」の事ですね。。間違いのご指摘ありがとうございます。 記事修正させていただきました~
税率を可変にしていただいたんですね!
4、3%は超少数派なのにありがとうございます。
ぜひ使わせていただきます!
こちらこそ、使っていただきありがとうございます!
先日来た住民税通知書と見比べていてひとつ気づいたのですが、住宅借入金等特別税額控除について。
http://www.soumu.go.jp/main_sosiki/jichi_zeisei/czaisei/czaisei_seido/090929.html
所得税から引ききれなかった分を住民税がから引く(ただし限度額あり)、という制度になっているようです。
(控除額より所得税額が低い場合のみ、住民税からの控除が発生)
計算式を拝見したら、所得税からも住民税からも同額引かれているような?
仮に住宅ローンでの控除が最高額の50万で、所得税を50万以上収めているとすると、
シミュレーション上、住民税が総額50万円低く表示されてしまいます。
…税制、ややこしいですよね。
失礼いたしました!
確かにご指摘の通り、住宅借入金等特別税額控除が2重で控除されてしまいますね。。
総務省の説明ページのリンクまで貼っていただきありがとうございます。
税額控除に関しては、再度見直しする必要がありそうです。税制はほんとーにややこしいですね。。。
バグなので、今週中にでも改修いたします。
コメントありがとうございました。大変助かりました!
住宅借入金特別控除で住民税からも同額引かれてしまうバグを修正いたしました。
ただ、限度額に関しては正確に対応しようとすると住宅を取得した時の消費税もかかわり入力項目が増えてきしまうので、簡易的ではありますが消費税8%固定で計算するようにしてます。(申し訳ございませんが、計算結果の計算式表示部に所得税から差し引けなかった額の表示を追加してますので、消費税5%の場合に取得した住宅はこちらを参考にしていただけると助かります。。)
また、このご指摘にあわせて税額控除を再度確認しましたところ、住宅耐震改修特別控除・住宅特定改修特別税額控除・認定住宅新築等特別税額控除に関しても所得税からのみ控除可能で住民税から控除するのは誤りとわかりました。(住宅借入金等特別税額控除のみ控除できない分を住民税から控除することが可能)
税額控除は直接税額から引かれる金額なので、ここにバグがあると誤差がすごいことに。。
この度はご指摘ありがとうございました。これに懲りず今後も使用していただけるとうれしいです!
どんどん改良されていって、こちらこそとても助かります。
無料で使っているのに申し訳ないくらいです。
(近所なら何かご馳走したいところですが当方千代田区なもので 笑)
個人事業主の場合、税率や控除のパターンを全て詰め込むのは込み入り過ぎてしまうから
細かくわかるようなシミュレータがあまりweb上で見当たらないのですね。
そんな中、kawadevさんのシミュレータは貴重です。
ご対応ありがとうございました!
システムを使っていただけるのがシステムエンジニアとしては一番うれしいので、これからもどんどん使ってください!
当シミュレーションは、私が欲しかったのとスキルアップのために個人で作成しているので、バグのご報告やご意見は大変助かっています。特に住宅借入金特別控除等は自分が対象でないのもあり、調査が不完全でしたので。。
個人で公開しているのですべての機能やパターンを対応することは出来ないですが、それでもなるべく使いやすいシステムにしたいと考えています。
これからもデザインの変更や実験的な機能もいれていく予定なので、使いづらくなったとかがあれば、ご意見をいただけると嬉しいです。
東京に遊びにいったら~ゴチになりますヽ(・∀・)ノワーイ