年末に忘れがちな医療費控除の計算用に！ 医療費の記録をする自分用LINE Botを作った話


こんにちは、 **医療費控除の申請** ってしてますか？

**年間で10万円を超える医療費** の自己負担があった場合に控除されるんですよね。毎年1月1日~12月31日までの計算になるので年の瀬の今頃に怪しい年は計算し直しています。

> ![スクリーンショット 2021-12-21 9.18.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/847236f2-e990-e698-95c6-d53e6efbc9e4.png "スクリーンショット 2021-12-21 9.18.28.png")

## 年内に治療するか、年明けに治療するか

色々な条件下で例外もあったりはしますが、基本は10万円って感じだと思います。
あと社会保険で割引後の **自己負担額** っていうのもポイントです。

> 参考: [医療費控除は医療費が10万円以下でも申請できる？5つの注意点も紹介します](https://sure-i.co.jp/journal/tax/entry-156.html)

現状超えてなくても、この支払いをしたら超えるかもしれない。どうしよう。

僕の場合、 **歯医者** がそんな感じでした。
定期検診に行ったら虫歯があってそこを埋めるための素材をどうするか？みたいな話題が上がりました。

そして **保険適用外の素材もあるみたいでけっこうお値段する**んですよね。

どう足掻いても年内の計算が10万円に届かないなら翌年の可能性にかけて、年明けの治療にしたいなと思いました。

## 領収書は捨てないようにしてるけど、いざとなると計算はだるい

10万円を超えるかどうかというよりも、 **現状の年間医療費の合計って中々記録してないと分からない**と思います。

> ![スクリーンショット 2021-12-21 9.20.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/8abd416d-40b1-d386-9cb1-d16deff41575.png "スクリーンショット 2021-12-21 9.20.35.png")

マイナンバーカードとかで見れるといいんですけどねぇ。

## LINEにレシート送るだけで計算してくれるものを作りました。

ざっくりと概要説明すると、 **病院の領収書の写真を撮ってLINEに送るだけで医療費計算してくれるLINE Bot**を作りました。

以下の動画はOCR（写真からテキスト抽出）周りのデモだけの動画ですが、イメージはこんな感じです。

https://www.youtube.com/watch?v=0WFR1-5-vGQ


- LINEに送った写真はGoogleドライブにも保存
- 医療費はGoogleスプレッドシートに記録されていく

といった機能があります。

## 基本ノーコードな実装

Integromatを使ってノーコード実装となっています。

書いてて気づきましたが、フローの後半のOCR部分はGASも使ってるので完全ノーコードではないです


> ![スクリーンショット 2021-12-20 20.44.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/523a7fcb-e315-bf7a-9964-5a29672cf43a.png "スクリーンショット 2021-12-20 20.44.59.png")

### LINE Bot部分

IntegromatのLINEモジュールは専用のWebhookを作成することができます。 この辺は`#LINEDC`のイベントで発表してきました。

> ![スクリーンショット 2021-12-21 10.29.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/027706b1-58ae-d067-d586-994bf440ba94.png "スクリーンショット 2021-12-21 10.29.37.png")
> https://speakerdeck.com/n0bisuke2/ipaasdekodowoshu-kazuni-tiyantoline-bot-wozuo-ru-number-linedc


### Google DriveのOCR

他にもOCR系のライブラリを試してみましたが、Google DriveのOCRが無料で手軽でした。

https://zenn.dev/harachan/articles/d910ef8b89720b

こちらの記事を参考に... というかロジックそのままでgetTextByFileId関数を作って結果を返すようにしています。GASがJavaScriptな感じになってきて嬉しいですね。

```js
function getTextByFileId(fileId) {

  const resource = {
    title: "test" // ここは途中で生成されるファイル名の指定です（ファイルを消すのでなんでもいいです）
  };

  const option = {
    "ocr": true,// OCRを行うかの設定です
    "ocrLanguage": "ja",// OCRを行う言語の設定です
  }

  const image = Drive.Files.copy(resource, fileId, option)

  const text = DocumentApp.openById(image.id).getBody().getText();

  Drive.Files.remove(image.id);

  // console.log(text);

  return text;
}
```

ここに来て思いましたが、全てがノーコードではなかったですね苦笑

> ![スクリーンショット 2021-12-21 10.32.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/9cc880ed-36d3-4b56-8142-0192b332944e.png "スクリーンショット 2021-12-21 10.32.11.png")


Integromatで設定してGoogle Driveにバックアップ的に画像が保存もされてます。

### スプレッドシート

最後にOCR読み込みしたテキストもスプレッドシートに保存しておきます。

> ![スクリーンショット 2021-12-25 23.26.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/3922f5ab-ecd4-dad0-ef7f-c244f3c0082f.png "スクリーンショット 2021-12-25 23.26.57.png")

## 所感

先日書いた記事で試したtesseract.jsのOCRも日本語対応してましたが、

https://qiita.com/n0bisuke/items/6aa2b7a3cadfa08a22aa


精度はけっこう微妙だった印象です。そこと比較するとGoogle DriveのOCRはかなり優秀な印象です。

GASを使うので完全ノーコードではなかったですが（この辺り書いてて気づいた）、LINE Botを作るくらいだと完全にノーコードでやれる時代になったんだなと実感させられます。

OCR入れてもちょっとのGASコードを書くくらいで、ほぼコードを書かずにこれくらいの仕組みを作れるのはかなり衝撃的です。


医療費の計算もスプレッドシート上で出来てめちゃめちゃ楽できるようになりました。

実用的なものがこれくらいの労力で実装出来るようになってきたという事例ですね。

来年はOCR含めて完全にノーコードになるかもしれませんね。
来年が楽しみです！


ということで皆さん良いお年を！