先ほど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!