皆さん、確定申告の医療費控除って、どうやって集計していますか。
封筒にためた領収書を年明けに全部出して、電卓を叩いて、Excelに打ち込む。私は毎年これをやっていました。面倒なうえに、普通に間違えます。
「マイナポータル連携があるでしょう」と言われそうですが、我が家ではそれで取れたのは金額の4割ほどでした。残りは結局、手で数えるしかありません。
なので、自宅のミニPCで動かしているAIエージェントの会社に任せることにしました。うまくいった部分と、あえて自動化しなかった部分の両方を書きます。
TL;DR
- 領収書を撮ってWeb画面から依頼するだけで、医療費控除の明細書ができます。
- 作った理由はマイナポータル連携で取れるのは金額の約4割だけだったから。
- 読み取りは全部ローカル(
qwen2.5vl:7b)。医療情報は外に出しません。 - 山場は**「AIの読み取りをそのまま確定させない」設計**。人が確認して初めて記録します。
- おまけ:「成功率」を測ろうとしたら、測れていなかった話を最後に書きます。
1. なぜ作ったか
医療費控除は、ただ合計すればいいわけではありません。誰の分か・何の費用かで分けて書く様式になっています。
そして枚数が地味に効いてきます。我が家は家族3人分で、今年はここまでで約80枚。年末まではまだ4か月あります。
さらに厄介なのが、これは税務署に出す書類だということです。合計が合わない、区分が違う、去年の領収書が紛れている——後から気づいても遡って直すのが大変です。
面倒だから自動化したい。でも間違えたくない。 この2つを同時に満たすのが目標でした。
2. 「マイナポータル連携があるじゃないか」——足りませんでした
冒頭で触れた「4割」の話です。ここが自作した一番の理由なので、先に書いておきます。
確定申告にはマイナポータル連携という仕組みがあります。マイナンバーカードを健康保険証として登録しておくと、1年分の医療費情報を自動で取り込めます。便利です。
ただし、すべての医療費が入ってくるわけではありません。
公式のFAQには、含まれないものとしてこう書かれています。
ドラックストアで購入したお薬の費用、高額療養費、立て替え払いをしたときの療養費、はり・きゅう、あんま・マッサージ・指圧の施術費用、整骨院・接骨院で受けたときの柔道整復療養費、保険適用外の費用(自由診療や差額ベッド代など)
(出典:マイナポータルよくあるご質問)
そして我が家の場合、もっと大きな穴がありました。介護です。
医療費控除には、介護保険制度下での居宅サービス等の対価も含められます。デイケアや訪問介護の自己負担分です。しかし介護保険は公的医療保険とは別の制度なので、医療費通知情報には出てきません。実際に連携してみても、介護分は取り込まれませんでした。
実際の内訳を数えてみた
そのうち現在集計中の44件を、連携で取れるか取れないかで分けたのがこちらです(年度の途中なので、確定値ではありません)。
| 区分 | 件数 | 金額の構成比 | 連携 |
|---|---|---|---|
| 介護保険サービス | 16 | 51.3% | ❌ |
| 医薬品購入(介護用・障害者用) | 3 | 11.5% | ❌ |
| 取り込めない小計 | 19 | 62.9% | |
| 診療・治療 | 17 | 23.8% | ⭕ |
| 医薬品購入(処方箋の調剤) | 8 | 13.4% | ⭕ |
| 取り込める小計 | 25 | 37.1% |
連携で自動取得できるのは、金額ベースで37.1%。残る約63%は自分で集計するしかありません。
介護サービスだけで過半を占めています。加えて、同じ「薬局で買った薬」でも、処方箋に基づく調剤なら連携されますが、介護用品や障害者向けの購入は対象外です。
「一部だけ自動」が、いちばん厄介
もし全部が自動なら何もしなくていい。全部が手作業なら黙って数えればいい。**一番面倒なのは「一部だけ自動」**です。
- どれが取り込み済みで、どれが未処理なのか突き合わせないといけない
- 二重計上していないか確認しないといけない
- 結局全部の領収書を一度は見ることになる
それなら、最初から全部自分で読み取って、ひとつの表で持つ方が確実です。そう判断しました。
3. 作ったもの
やることは3つだけです。
- 領収書をスマホで撮る
- 写真アプリから、決まったフォルダにアップロードする
- 秘書UI(社内向けのWeb画面)から「医療費の写真を処理して」と依頼する
3つ目が少し独特かもしれません。私のAI会社では、依頼はチャットではなくWeb画面のフォームから出します。入力すると担当エージェントが自動で振り分けられ、処理が始まります。
そして後述しますが、確認・承認も同じ画面で行います。依頼を出す場所と、結果を確定させる場所が同じなので、「あれはどこで承認するんだっけ」と迷いません。
前回の記事とは、あえて逆にしています
前回書いた議事録の仕組みでは、依頼文を書きません。録音ファイルをフォルダに置いた瞬間に処理が始まります。「毎回同じことしかしない仕事に、毎回同じ依頼文を書くのは無駄だ」という理屈でした。
同じAI会社の中なのに、医療費ではわざわざ依頼を出させています。矛盾しているようですが、判断の基準は一つです。
| 議事録 | 医療費 | |
|---|---|---|
| 起動 | フォルダに置いた瞬間(依頼文なし) | 画面から依頼する |
| 扱うもの | 会議の録音 | 家族の通院履歴 |
| 間違えたとき | 逐語録を直せばいい | 税務署に出す書類が狂う |
「勝手に始まっていい仕事」と「始めるかどうかを人が決める仕事」を分けている、というだけです。医療費は、いつ処理するかも、何を確定するかも、人が決める側に置きました。
「全部自動が正義」ではなく、どこを自動にしないかを選ぶ——このあと5章で書く話も、根っこは同じです。
| # | 処理 | 使っているもの |
|---|---|---|
| 1 | 依頼を受けて担当を振り分ける | 秘書UI(Streamlit) |
| 2 | 写真から項目を読み取る | qwen2.5vl:7b(ローカル) |
| 3 | 誰の領収書かを判定する | 家族3名への照合 |
| 4 | 写真を本人のフォルダへ移動 | — |
| 5 | 人が確認・修正して承認する | 秘書UI(同じ画面) |
| 6 | Excelの明細書を更新 | openpyxl |
読み取るのは氏名・支払先・金額・日付・区分の5項目です。区分は「診療・治療/医薬品購入/介護保険サービス/その他」の4つで、これは医療費控除の明細書の様式に合わせています。最初から提出する形で集計しておく、という考えです。
出力はExcelの3シート構成にしました。
- 全領収書一覧:1件ずつの明細
- カテゴリ別内訳:区分ごとの集計
- 医療費控除明細書:提出用の合計欄
4. なぜローカルで読ませているか
領収書には、誰がいつどこの病院にかかったかが書いてあります。家族の通院履歴そのものです。
なので読み取りは自宅のPCの中だけで完結させています。qwen2.5vl:7bという画像を読めるモデルをローカルで動かしていて、写真を外部のサービスに送っていません。
代償として遅いです。1枚あたり数分かかります。ただ、これは年に1回の作業で、しかも寝ている間に走らせても構わない処理です。速度より、外に出さないことを優先しました。
5. 山場:AIの読み取りを、そのままExcelに書かせない
ここが今回いちばん考えたところです。
きっかけになった誤読
実際にこういうことが起きました。
A薬局・3,610円 の領収書を、Bクリニック・1,510円 と読み取った
施設名も金額も、両方まとめて間違えています。しかも「読めませんでした」と言ってくれるわけではなく、それらしい別の値を自信満々で返してきます。
これが確定申告の書類に、そのまま入ってしまったらどうなるか。金額が違えば控除額が変わります。税務署に出す書類として、これは通せません。
「自動化した」の意味を分けた
最初の実装では、読み取ったらそのままExcelに書き込んでいました。これをやめました。
いまはこうなっています。
写真を読み取る(AI)
↓
読み取り結果をチケットに記録するだけ ← Excelにはまだ書かない
↓
秘書UIに一覧表示 ← 人が見る(依頼を出したのと同じ画面)
↓
間違っていれば直す ← 人が直す
↓
「承認してExcelに記録する」を押す ← 人が決める
↓
Excelを更新
AIがやるのは「読む」まで。「確定させる」のは人。 ここを分けました。
実際の画面がこちらです(氏名・施設名・金額はダミーに差し替えています)。
[秘書UIの画面。依頼を出し、OCR結果を確認し、承認してExcelに記録するまでの3段階]

**②の時点では、まだExcelに何も書かれていません。**画面にも「未反映(WebUI で確認・承認時に反映)」と出ています。③で承認ボタンを押して、初めて記録されます。
一見すると手間が増えたように見えます。でも実際にやってみると、画面に並んだ5項目を目で追うだけなので、領収書の束から金額を拾って打ち込むのとは比べものになりません。面倒な部分(転記)は消えて、大事な部分(確認)だけが残ったという感覚です。
なぜ全自動にしなかったか
「精度が上がれば全自動にできるのでは」と考えたこともあります。でもやめました。
間違いに気づけるかどうかが違うからです。
- 金額を読み落としたなら、空欄になるので気づきます
- でも別の金額として読んだら、表は完成した顔をしています
前者は事故として見えますが、後者は正しい書類に見えてしまう。年に一度しか触らない書類で、去年の数字を覚えている人はいません。確認する機会は、確定するその瞬間しかないんです。
だから、その1回を仕組みとして残しました。
6. 泥臭い割り切り
きれいな設計の話ばかりでは嘘になるので、現実的にどう処理しているかも書きます。
対象人物は3名で固定しています。汎用的に「誰の領収書でも判定する」ことは狙っていません。3人のうち誰か、を選ぶだけなら精度が桁違いに上がります。
さらに、よくある誤読はパターンとして持たせています。姓の漢字が似た字に化ける、名前の一文字が別の字になる——同じ誤り方を何度もするので、辞書で直す方が早いという割り切りです。
これは前回の記事(議事録パイプライン)で書いた「辞書は知っている化け方しか直せない」という話と、まさに同じ構造です。知らない化け方は直せない。だから最後は人が見る。
7. 正直な話:「成功率」を測れていませんでした
この記事を書くにあたって、「実際どのくらい成功しているのか」を出そうと思いました。処理のたびにチケットに記録が残っているので、集計すれば出るはずです。
やってみました。
15回の処理・26件・失敗0件
成功率100%。——嘘です。
会話の記録を遡ると、失敗しています。氏名が姓しか読めなくて照合できなかった件。3枚処理したはずが、チケットには2枚しか記録されず1枚が消えていた件。画面で修正した名前がExcelに反映されなかった件。
では、なぜ記録上は失敗0件なのか。
チケットに書かれる「処理件数◯件/失敗◯件」は、処理を実行したAI自身が報告した数字だからです。しかも、最後まで走りきった実行の分しか残りません。つまり:
- 失敗して、直して、もう一度動かしたものは → 「成功」として記録される
- 途中で黙って落ちた1枚は → そもそも分母に入らない
存在しなかったことになる。 これでは失敗率が0%になるのは当たり前です。
皮肉な話です。読み取った金額は疑ったのに、「失敗0件」という報告は疑いませんでした。 5章であれだけ「AIの出力をそのまま確定させるな」と書いておきながら、成績表だけは本人の自己申告を信じていたわけです。
何が間違っていたか
計測の設計です。「処理したもののうち何件失敗したか」を数えていたのが誤りでした。正しくは、「投入した枚数」を分母に置き、出力された件数と突き合わせるべきです。そうすれば、消えた1枚が差分として出てきます。
これは前回のさくらのAI Engineの検証記事で書いた「自分で作ったテストデータでは、自分が想定した失敗しか測れない」という話と、同じ穴です。あのときは検証データが本番と違った。今回は計測の仕組み自体が、都合のいい数字しか拾わない形になっていた。
自分の作ったもので、二度同じ構造の失敗をしています。
幸いだったこと
救いがあるとすれば、この仕組みは「AIが正しいこと」を前提にしていないことです。
成功率が実際には100%でなくても、最後に人が全件見て承認する設計なので、間違ったままExcelに入ることはありません。5章で書いた「AIに確定させない」判断が、結果的に計測ミスの保険にもなっていました。
とはいえ、測れていなかったという事実は残ります。分母を取り直す実装は、これからです。
まとめ
- 確定申告の医療費集計を自動化した。領収書を撮ってアップロードし、Web画面から依頼するだけで、人物別・区分別の明細書ができる。
- 作った理由はマイナポータル連携では足りなかったから。我が家では連携で取れるのは金額の約4割、介護分を中心に6割超が対象外だった。「一部だけ自動」は突き合わせが増えて、かえって面倒。
- 医療情報なので読み取りは全部ローカル。1枚数分かかるが、年1回の作業なので速度より秘匿性を優先した。
- 山場は**「AIに確定させない」**こと。施設名と金額を両方誤読した実例があり、読むのはAI・決めるのは人に分けた。読み落としは気づけるが、別の値として読まれると正しい書類に見えてしまうから。
- そして成功率を測れていなかった。記録上は失敗0件だが実際は失敗していた。原因はAI自身が報告した数字をそのまま数えていたこと。分母を先に決めていなかった。読み取りは疑ったのに、成績表は疑っていなかったわけです。
医療費控除のような年に一度しか触らない書類は、間違えても気づく機会がありません。だからこそ「全部おまかせ」にせず、確認する1回を仕組みの中に残すのが現実的だと思っています。
最初の問いに戻ります。皆さんは、医療費控除の集計をどうやっていますか。
紙のまま電卓で? 家計簿アプリで? それとも税理士さんに丸投げでしょうか。**もっと賢いやり方があれば、ぜひ教えてください。**特に「介護分をどう扱っているか」は、同じ悩みを持つ方が多いはずなので知りたいところです。
質問・ツッコミ歓迎です。