16
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「Z世代、お前の前にいるのは、三十年以上生きたエンジニアだ」

タイトル回収は以上です。


メリークリスマス🎄
この記事は、本番環境などでやらかしちゃった人 Advent Calendar 2023の25日目、最終日の記事です。

消費税対応

業務系のシステムやECをやってた人なら聞き覚えがあるかもしれません。
人によってはトラウマワードかもしれません。

消費税は平成元年に導入されこれまで3回引き上げられています。

日付 税率
1989年(平成元年)4月1日 3%
1997年(平成9年)4月1日 5%
2014年(平成26年)4月1日 8%
2019年(令和元年)10月1日 標準税率10%
軽減税率8%

販売などの要素があるシステムでは消費税をプログラムで計算することになります。

私が観測したのは8%以降なので、エルフ(先輩おじさんSE)からの伝え聞きですが、3%や5%のころはまだ設計が未熟でマジックナンバーやグローバル定数で消費税率を定義して、消費税額を求めているプログラムがよくあったそうです。

マジックナンバーで定義してしまうと消費税率が変更になったときすべてのプログラムを洗い出して変更しなければいけません。
グローバル定数で定義した場合も新しい消費税率の適用開始日を考慮して変更をかける必要があります。
未来の注文には未来の消費税率を適用しなければいけないからです。

8%の時代はそういった設計を見直し、適用日を持った消費税率テーブルなどを設けて、そこを参照して税率適用を行うような改修をほとんどのシステムが行ったと思います。

それも束の間、今度は軽減税率対応が必要になり適用日だけでは管理できなくなるという辛い仕打ちを受けるのですが…。

消費税対応は多かれ少なかれシステムに改修がかかるのと、対象となるシステムも多いためベンダーによっては特需のような扱いになるとともに、しわ寄せでデスマーチになる案件が多かったと聞いています。

そんな消費税対応に関するやらかしを…。

消費税対応完了

消費税対応が終わり無事リリースできました。
テストも問題なく完了し設定した日に応じて新税率が適用されることをしっかり確認できました。

後は新税率の適用日をドキドキしながら待つのみで、しばらく何事もなく運用を続けていましたがある日…。

あれ、金額がおかしい…?

請求書を仮発行したら金額がおかしいとの問合せを受けました。
確認するとまだ適用日前なのに、新しい税率で消費税計算がされてしまっています。

まずはプログラムのバグを疑いますがおかしいところは見当たりません。

どうしてこうなった

その原因は消費税率テーブルにありました。

リリース時に初期セットした税率テーブルが、あろうことか適用日が仮データのままセットされていました。
開発当初は税率適用日がまだ確定していなかったので、仮値で入れたものをそのまま本番に持ってきてしまったのです。

そして、そのまま本当の適用日より早い状態で新税率が適用されてしまいました。
皮肉にもプログラムには何の問題もないことが本番環境で証明されたのです。

請求書発行前に確認するプロセスがあったので気づけたのは不幸中の幸いですが、もし請求書が送付されたり口座から引き落とされていたら大変なことになっていたでしょう。

まとめと教訓

  • 本番環境の初期データや移行データはその対象や中身をしっかり確認する
  • プログラムが正しくてもデータが狂うと結果も狂う
  • ゾルトラークのように歴史の中で設計やプログラミング手法は一般化していく

おまけ

関連記事として、拙作のこちらの記事もよければどうぞ。

16
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?