税金計算の計算スクリプト作ってみた

法人を作ったので、税金計算のスクリプトを作ってみました。

## 収入と報酬と税金と

### 法人の収入にかかってくる費用は以下の通り
1. 社会保険料（健康保険、厚生年金保険、介護保険、雇用保険、労災保険）
    1. 健康保険は支払う給与の9%を給与所得者と半分ずつ負担
    2. 厚生年金保険は支払う給与の18.3%を給与所得者と半分ずつ負担
    3. 雇用保険は支払う給与の9%を法人が全額負担
    4. 労災保険は支払う給与の2.5%を法人が全額負担
    5. 介護保険は、自分の場合は該当しなかったので未調査
2. 収入-（上記の保険料 +  役員報酬 + 給料） * 37.4%

### 個人の収入にかかってくる費用は以下の通り
1. 住民税
2. 所得税
3. 社会保険料（健康保険、厚生年金保険）

#### 住民税の計算式
（所得 - 控除※） * 10 / 100
※33万円

#### 所得税の計算式
課税所得によって決まってくる。
<img width="718" alt="スクリーンショット 2019-05-01 16.56.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146508/9a7b31af-a794-9ba0-5d53-fccd6095522c.png">
[国税庁HPより](https://www.nta.go.jp/taxes/shiraberu/taxanswer/shotoku/2260.htm)


##### 課税所得の決まり方
課税所得 = 所得 - 社会保険料 - 基礎控除(※1) - 所得控除(※2)
(※1)３８万円
(※2)の決まり方

給与収入額|所得控除額
-|-
360万円以下|給与収入 * 30 / 100 + 18万円
660万円以下|給与収入 * 20 / 100 + 54万円
1000万円以下|給与収入 * 10 / 100 + 120万円
それ以上|220万円


### スクリプトにしてみた。
- 入力
    - 収入額と、役員数、役員一人あたりの報酬額を指定
    - calc(収入額, 役員数, 役員一人あたり報酬額)
- 出力
    -  指定された役員一人あたりの報酬額を10万円ずつ繰り上げて、それぞれの場合の `総資産, 法人の収入, 役員一人あたりの報酬額, 役員の税引き後収入`を出力する。
    - カンマ区切りの値が以下のように出力されます。
```
revenue is 2000
総資産,法人の収入,個人の額面収入,個人の税引き後収入
1262.70608,406.38668000000007,360,285.4398
1261.65186,383.54080999999996,370,292.70368333333334
1258.51564,359.44294,380,299.6909
1256.8354199999999,335.97106999999994,390,306.95478333333335
1253.6992,311.8732,400,313.942
1252.64498,289.02733,410,321.2058833333333
1250.96476,265.55546000000004,420,328.46976666666666
1247.82854,241.45759000000004,430,335.4569833333333
1246.7743200000002,218.61172000000002,440,342.72086666666667
1245.0940999999998,195.13985000000002,450,349.98474999999996
1241.95788,171.04198000000002,460,356.9719666666667
1240.6638100000002,148.19611,470,364.15590000000003
1238.72104,124.72424000000001,480,371.33226666666667
1235.33227,100.62637000000001,490,378.23530000000005
1233.3895000000002,77.1545,500,385.4116666666667
```


```
def calc(revenue, manager_num, compensation)
  return if revenue < manager_num * compensation

  total_compensation = manager_num * compensation
  kenpo = total_compensation * 9 / 100
  nenkin = total_compensation * 18.3 / 100
  koyou_hoken = total_compensation * 9 / 100
  rousai = total_compensation * 2.5 / 100

  tax_for_comp = (kenpo / 2) + (nenkin / 2) + koyou_hoken + rousai
  tax_for_individual = (kenpo / 2) + (nenkin / 2)

  rev_for_comp = revenue - total_compensation - tax_for_comp
  tax_for_comp = rev_for_comp * 37.4 / 100
  rev_for_comp -= tax_for_comp

  compensation_after_social_tax = compensation - (tax_for_individual / manager_num)
  jumin_tax = (compensation_after_social_tax - 33) * 10 / 100

  kazei_shotoku = (compensation_after_social_tax -38)
  shotoku_koujo = if kazei_shotoku <= 360
                    kazei_shotoku * 0.3 + 18
                  elsif kazei_shotoku <= 660
                    kazei_shotoku * 0.2 + 54
                  elsif kazei_shotoku <= 1000
                    kazei_shotoku * 0.1 + 120
                  else
                    220
                  end
  kazei_shotoku -= shotoku_koujo

  shotoku_tax = if kazei_shotoku <= 330
                  ((kazei_shotoku - 195) * 0.1 + (195 * 0.05) - 9.75)
                elsif kazei_shotoku <= 695
                  ((kazei_shotoku - 330) * 0.2 + (300 * 0.1) + (195 * 0.05) - 42.75)
                elsif kazei_shotoku <= 900
                  ((kazei_shotoku - 695) * 0.23 + (695 - 330) * 0.2 + (300 * 0.1) + (195 * 0.05) - 63.6)
                elsif kazei_shotoku <= 1800
                  ((kazei_shotoku - 900) * 0.33 + (900 - 695) * 0.23 + (695 - 330) * 0.2 + (300 * 0.1) + (195 * 0.05) - 153.6)
                elsif kazei_shotoku <= 4000
                  ((kazei_shotoku - 1800) * 0.4 + (1800 - 900) * 0.33 + (900 - 695) * 0.23 + (695 - 330) * 0.2 + (300 * 0.1) + (195 * 0.05) - 153.6)
                else
                  ((kazei_shotoku - 4000) * 0.45 + (4000 - 1800) * 0.4 + (1800 - 900) * 0.33 + (900 - 695) * 0.23 + (695 - 330) * 0.2 + (300 * 0.1) + (195 * 0.05) - 153.6)
                end

  compensation_after_tax = compensation_after_social_tax - (jumin_tax + shotoku_tax)
  puts "#{rev_for_comp + (compensation_after_tax * manager_num)},#{rev_for_comp},#{compensation},#{compensation_after_tax}"

  calc(revenue, manager_num, compensation + 10)
end

puts "総資産,法人の収入,個人の額面収入,個人の税引き後収入"
calc(2000, 1, 360)
```