Google Cloud Functions で源泉所得税と社会保険料（協会けんぽ、東京）をJSONで取得するAPIを作ってみた(gistリンク付き)

**2018/01/26編集：** gistにソースコードをアップロードしました。
**2018/09/19編集：** gistにソースコードをアップロードしました。(社会保険平成30年4月分以降)
**2018/11/02編集：** 平成31年度源泉徴収税額表に変更がないため、「平成31年」と各箇所に追記しました
**2019/12/09編集：** 令和2年度源泉徴収所得税表に対応したAPIを追記しました
**2020/03/25編集：** 令和2年3月分からの社会保険料額一覧に対応したAPIを追記しました
**2020/09/25編集：** 令和2年9月分からの社会保険料額一覧に対応したAPIを追記しました

# 概要

- 総務兼エンジニア的な立ち位置
- 総務の仕事の楽したいね
- ひと様のお役に立つプログラムを書きたいな
- そうだ、給与計算のための源泉所得税と社会保険料を取得するAPI作ってみよう
- サーバ立てるの面倒だから、Google Cloud Functions でやればいいじゃん
- Excelに埋め込んで使いたいときは、[こちらの記事](https://qiita.com/tbtbt/items/b0afdaea38db542fc2a8)を参考にしてください（手前味噌ってやつだ）

# 実装

**2018/01/26編集：** それぞれ gist にアップロードしました。
**2018/09/19編集：** 社会保険料@協会けんぽ、東京(平成30年4月分以降) を gist にアップロードしました。
**2019/12/09編集：** 令和2年源泉所得税APIのソースコードを gist にアップロードしました。

- [令和2年源泉所得税](https://gist.github.com/tbtbt/18a6c91f31bde1b409b232956d929e60)
- [平成30年(&31年)源泉所得税](https://gist.github.com/tbtbt/691125149751df403b43712185a938cc)
- [社会保険料@協会けんぽ、東京](https://gist.github.com/tbtbt/9fbf8867f34c78cacc28e8bed45f1052)
- [社会保険料@協会けんぽ、東京(平成30年4月分以降)](https://gist.github.com/tbtbt/24aa8975a39c39d2e56b4b632aec56cc)


# 社会保険料（協会けんぽ）算出API

- [社会保険料額表＠協会けんぽ（平成29年9月以降分）](https://www.kyoukaikenpo.or.jp/~/media/Files/shared/hokenryouritu/h29/ippan9gatu/h290913tokyo.pdf) よりデータを抽出
- [社会保険料額表＠協会けんぽ（平成30年4月以降分）](https://www.kyoukaikenpo.or.jp/~/media/Files/shared/hokenryouritu/h30/ippan4gatu_2/h30ippan4.xlsx) よりデータを抽出(EXCELありました..)
- [社会保険料額表＠協会けんぽ（令和2年3月以降分）]
(https://www.kyoukaikenpo.or.jp/~/media/Files/shared/hokenryouritu/r2/ippan/r2ippan3.xlsx) よりデータを抽出 

## API概要

公開してますので、叩いて頂いても問題ないです。　＃無保証です. 

```
# 2017年9月以降
https://us-central1-tsunagi-192005.cloudfunctions.net/getSocialInsurance201709?salary={{salary}}&kaigo=0
# 令和2年3月分(4月納付分)からは以下
https://asia-northeast1-tsunagi-all.cloudfunctions.net/getSocialInsurance202003?salary={{salary}}&kaigo=0
# 令和2年9月分(10月納付分)からは以下
https://asia-northeast1-tsunagi-all.cloudfunctions.net/getSocialInsurance202009?salary={{salary}}&kaigo=0
```

パラメータの説明。

- salary: 給与月額(額面の給与)
- kaigo: 0=「介護保険第２号被保険者に該当【しない】」, 1=「介護保険第２号被保険者に該当【する】」

レスポンスはこんな感じ。　＃英語で書いてみたけど微妙だな

```js
GET https://us-central1-tsunagi-192005.cloudfunctions.net/getSocialInsurance201709?salary=550000&kaigo=0

{
    "standardRemuneration": 560000, // 標準報酬月額
    "insurance": { // 健康保険データ
        "grade": 32, // 健康保険の標準報酬等級
        "payment": 27748 // 健康保険支払額（従業員負担分）
    },
    "pension": {
        "grade": 29, // 厚生年金の標準報酬等級
        "payment": 51240 // 厚生年金支払額（従業員負担分）
    }
}
```

# 源泉所得税額算出API

- [平成30年分 給与所得の源泉徴収税額表（月額表）](https://www.nta.go.jp/shiraberu/ippanjoho/pamph/gensen/zeigakuhyo2017/data/01-07.pdf) よりデータを抽出
- この記事を書いてるときに、[EXCEL版](https://www.nta.go.jp/shiraberu/ippanjoho/pamph/gensen/zeigakuhyo2017/data/01-07.xls) の存在に気付く。。データ作るの、もっと楽できたやん。。
- 平成31年分の源泉徴収税額表も変更がないため、修正なしで同じAPIを使えます
- 令和2年の源泉徴収所得税額表(EXCEL版)は[こちら](https://www.nta.go.jp/publication/pamph/gensen/zeigakuhyo2019/data/01-07.xls)　※給与所得控除額の変更に伴って税額表が変更されました

## API概要

公開してますので、叩いて頂いても問題ないです。　＃当然ですが、無保証です

令和２年(2020年)のAPIはこちら。※リージョンなどが変わってますのでご注意ください

```
GET https://asia-northeast1-tsunagi-all.cloudfunctions.net/getIncomeTax2020?salary=471012&numberOfDependents=0&type=a
```

平成30年、31年のAPIはこちら。

```
GET https://us-central1-tsunagi-192005.cloudfunctions.net/getIncomeTax2018?salary=471012&numberOfDependents=0&type=a
```

パラメータの説明。

- salary: 社会保険料控除後の給与等の額
- numberOfDependents: 被扶養親族等の数
- type: a=甲(その年の扶養控除等申告書を提出している人), b=乙(その年の扶養控除等申告書を提出していない人)


レスポンスはこんな感じ。　＃英語で書いてみたけど微妙だな

```js
GET https://us-central1-tsunagi-192005.cloudfunctions.net/getIncomeTax2018?salary=471012&numberOfDependents=0&type=a

{
    "basic": 24990, // 基本分(テーブルで額が定まる分)
    "additional": 0, // 加算分(上記に加算する額、または計算式により算出される額)
    "deduction": 0, // 8人以上被扶養者がいる場合の控除額
    "total": 24990  // 源泉徴収所得税額
}
```

totalだけ見れば十分です。

# Cloud Functions 

Google Cloud Functions の開発の流れに関しては、別途記事を上げようかと思います。
他の方の秀逸なチュートリアルを参照いただくのが望ましいかもしれませんが。。

## 実装について

配列化および関数化したデータを金額などの条件で引っ張ってきて計算する感じで実装しました。
実際のコードはgistをご確認ください。

## デバッグ方法

[Cloud Functions Local emulator](https://cloud.google.com/functions/docs/emulator) という便利なものが存在していました。助かりました。
`npm install -g` でグローバルにインストールしなくても、ローカルに入れて `$ ./node_modules/.bin/functions start` 的に叩けば何とかなりました。プロジェクトごとに `npm install` するのがおすすめっぽいが、面倒だったのでふたつとも同じディレクトリで書いた。

## デプロイ方法

今回はコピペ。次はCloud SDKあたりでやりたいな。

# 使い道

- Google Apps Script を使って Google SpreadSheet にデータを引っ張る(JSONパースして使うにはこれしかない？)
- EXCELで取得して（同上
- pythonなどでデータを取得して給与明細を自動で作成(やりたい)
- マッシュアップ(無保証だが...)

# まとめ

以上、実装したAPIのご紹介でした。サーバレスの Google Cloud Functions ですが、まだまだ色々なことが出来そうなので、ぼちぼち試してみたいと思います。botのアクセスポイント実装なんて最適かもなぁ。