LoginSignup
1
1

More than 5 years have passed since last update.

[Perl]日本の消費税と源泉徴収を自動計算するモジュール作った

Last updated at Posted at 2019-03-31

先ほどCPANにリリースしたモジュールを紹介します。
このモジュールは日本における消費税と源泉徴収のややこしい計算を自動化します。

Business::Tax::Withholding::JP(Github)
Business::Tax::Withholding::JP(metacpan)

経緯

自前で作っているWebサービス(αテスト中のためリンク貼りません)で、フリーランスの方(最初はライターさん)のために請求・受注の自動化を目指しており、請求書のテンプレートを作成していたところ、表題のような計算が必要になりました。

通常、源泉徴収は100万円以下10%、それ以上は約20%1なのですが、特別復興所得税なるものが震災のために課税されており、一定期間2.1%増税された状態であることがわかりました。

でもロジックは単純でした。100万円を越えるかどうかを判定し、増税期間を自動で検知する機構があれば十分自動計算可能なように思いました。

実装

で、どうしようかな、って思ってたらできちゃいました。おおよそ6時間です。Mooseってクソ便利ですね。

use Business::Tax::Withholding::JP;
my $tax = Business::Tax::Withholding::JP->new();
$tax->price(10000);    # 10000 を代入
$tax->net();           # 非課税額は 10000
$tax->tax();           # 税額は 800
$tax->full();          # 総額は 10800
$tax->withholding();   # 源泉徴収額は 1021
$tax->total();         # 源泉徴収済み税込み金額は 9779

こんだけです。

更新(2019/04/01)

使ってみたら、源泉徴収をする・しないの選択肢がある場合に色々条件つけるのが面倒臭かった。最初から源泉徴収など無視した計算がしたくなったので更新した

$tax = Business::Tax::Withholding::JP->new( no_wh => 1 );
$tax->price(10000);
$tax->tax();           # 800
$tax->withholding();   # 0
$tax->total();         # 10800

これにより、ただ消費税を加えるだけの時との場合分けが可能になった。

更新(2019/04/03)

  • amount()というプロパティを加えてデフォルトを1に。
  • subtotal()というアクセサメソッドを加えて小計の取得に対応。
use Business::Tax::Withholding::JP;
my $calc = Business::Tax::Withholding::JP->new();
$calc->price(10000);    # 価格に10000を代入
$calc->amount(2);       # 数量に2を代入
$calc->subtotal();      # 小計は 20000
$calc->net();           # 非課税単価は 10000
$calc->tax();           # 税額は 1600
$calc->full();          # 税込総額は 21600
$calc->withholding();   # 源泉徴収額は 2042
$calc->total();         # 源泉徴収済み税込支払い額は 19558

より経理っぽくなりました

最後に

経理の方々の中にPerl使いがどれだけいるかわかりませんが、Perlならそれ自動化できますよ2ってことでEnjoy!


  1. 正確には100万円以下を10%で計算した上で超過分を20%で計算する 

  2. javascriptで自動計算を謳うフォームはいくつか確認できるが、モジュールという概念で配布されているものは執筆時点で発見できなかった。 

1
1
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
1
1