# 医療費記録

確定申告の医療費控除に使う、家族全員分の医療費記録。

- 場所: クラウドストレージ上のフォルダ 1 つ（例: `iCloud Drive/医療費/`）
- 目的: 領収書の保管の手間を減らしつつ、年末に医療費控除の明細書へそのまま転記できる状態を保つ
- 前提: 集計は自分が LLM と行い、他の家族は領収書のスキャン投入だけで参加する

> **このファイルはテンプレートです。** 氏名・医療機関名・住所・電話番号はすべて記入例で、
> 実在のものではありません。自分の家族構成に合わせて書き換えて使ってください。
> 以下では架空の 4 人家族（北原 健吾 / 北原 沙織 / 北原 悠真 / 北原 芽衣）を例にします。

---

## フォルダ構成

```text
医療費/
  README.md                     ← このファイル
  CLAUDE.md                     ← LLM 向けの入口
  TODO.md                       ← 未処理の作業。取り込みのたびに見直す
  data/                         ← 集計データ
    medical-2026-北原健吾.tsv    ← 年 × 人ごとの集計表
    medical-2026-北原沙織.tsv
    medical-2026-北原悠真.tsv
    medical-2026-北原芽衣.tsv
    income.tsv                  ← 年 × 人の所得。医療費控除の足切り判定に使う
  Inbox/                        ← 家族と共有。スキャンした領収書の投入先。年で分けない
  receipts/2026/北原健吾/        ← 整理・リネーム済みの領収書
  receipts/2026/北原沙織/
  docs/2026/北原悠真/            ← 領収書以外の関連書類（検査報告書・源泉徴収票など）
  trash/                        ← 取り込み済みの元スキャンの置き場。人が定期的に削除する
```

### 読むものと貯まるものを分ける

集計表は年 × 人で増え続ける。4 人家族なら 1 年で 4 ファイル、5 年で 20 ファイルになる。
ルート直下に置くと、年数を重ねるほど README.md や CLAUDE.md といった
「読むファイル」が数字のファイルに埋もれる。
**読むもの（Markdown）と貯まるもの（TSV）を分ける**のが目的。

### docs/ について

領収書ではないが残しておきたい書類の置き場。入るのは 2 種類ある。

- 医療文書（検査報告書、診療計画書、服薬説明書など）
- 所得の裏づけ（源泉徴収票など。`income.tsv` の転記元）

`receipts/` と同じ `YYYY/氏名/` の構造にしてある。
種類の違う書類を同じ場所に置いているのは、**どちらも年に数枚しか増えず、
「人と年で引く」という探し方も同じ**だから。置き場を分けても、
探すときに「どちらだったか」を思い出す手間が増えるだけになる。

ここにある書類は医療費控除の金額そのものには使わないので、
`medical-YYYY-氏名.tsv` には現れない。

### 集計表を年 × 人で分ける理由

医療費控除は人ごとに合算して申告する。集計の単位とファイルの単位を揃えておけば、
年末に `medical-2026-北原健吾.tsv` をそのまま合計するだけで済む。
1 つのファイルに家族分を混ぜると、見るたびに対象者で絞り込む必要があり、目視で確認しづらい。

`data/` の中はファイル名で分ける。名前順に並べれば年順・人順になる。
`person` 列はファイルを取り違えたときに気づけるよう残す。

### receipts と docs だけ年 × 人で掘る理由

`data/` は年に数ファイルしか増えないのでファイル名で足りるが、
領収書は年に数十〜百ファイルになる。`receipts/YYYY/氏名/` と掘り、
集計表と同じ切り口にしておけば、どのファイルがどの集計表に対応するかが構造から分かる。
`docs/` も同じ理由で同じ構造にしてある。

### Inbox を年で分けない理由

投入する側に「今年のフォルダはどれか」を意識させると、年明けに必ず間違える。
入れる場所は常に 1 つに固定し、年の振り分けは日付を見て後から行う。

---

## 記録の運用

### 1. 領収書を撮る（家族全員）

iPhone の **「ファイル」アプリ →「医療費 Inbox」→ 右上の … →「書類をスキャン」**。

単なる写真ではなく必ずスキャン機能を使う。理由:

- 紙の輪郭を自動検出して切り抜き・台形補正するため、斜めから撮っても正面の形になる
- コントラストが整い、後の読み取り精度が上がる（金額の誤読が減る）
- 複数枚を 1 つの PDF にまとめられる（領収書＋診療明細など）

**ファイル名と日付は気にしない。** 自動命名（`スキャン 2026-08-22 10.30.pdf`）のままでよい。
リネームは後工程で行う。投入する側の手数は少ないほど続く。

保存形式は PDF のままでよい。複数枚を 1 ファイルにまとめられる分むしろ好都合。

### 2. 取り込む（LLM に依頼）

月末など、区切りのよいタイミングで LLM に依頼する。

> Inbox の新しいスキャンを読んで、集計表に追記して、receipts/ にリネームして移して。

LLM 側の処理:

1. `Inbox/` の未処理ファイルを読み、日付・医療機関・金額・対象者・区分を抽出する
2. `data/medical-YYYY-氏名.tsv` に追記する（日付順）
3. `YYYY-MM-DD_医療機関名_対象者_金額.pdf` にリネームし、`receipts/YYYY/氏名/` へ移動する
4. 元のスキャンファイルを `trash/` へ移す
5. 読み取れなかった項目、対象者が判別できないものは報告して確認を取る（推測で埋めない）

複数の領収書を 1 つの PDF にまとめてスキャンした場合は、領収書ごと
（対応する明細書があれば同じファイル）に分割してから `receipts/YYYY/氏名/` へ入れる。

### 取り込み済みを trash/ へ移す理由

**LLM は手元の Mac のファイルを削除できない。** 仕組みとして禁止されており
（`rm` は `Operation not permitted` になる）、できるのは移動・リネーム・上書きまで。
一方 `Inbox/` は「未処理のものだけが入っている」状態を保ちたい。

そこで取り込み済みの元スキャンは `trash/` へ移す。実際の削除は人がまとめて行う。
取り込みミスに気づいたときに戻せるという利点もある。紙の原本は 5 年保存するので、
`trash/` は数か月で空にしてよい。

### 読み取りの手順（LLM 向け）

スキャン PDF はテキスト層を持たない画像なので、そのままでは文字を取り出せない。
画像として書き出し、コントラストを整えてから読む。

```sh
# 1. ページの画像を元の解像度のまま取り出す（poppler-utils）
#    ページごとに /tmp/i-000.jpg, /tmp/i-001.jpg … と並ぶ
pdfimages -j スキャンした書類.pdf /tmp/i
```

```python
# 2. 見る用に縮小・コントラスト調整（Python + Pillow）
from PIL import Image, ImageOps

im = Image.open("/tmp/i-000.jpg")
im = ImageOps.autocontrast(im, cutoff=0.5)   # 薄い紙面が読めるようになる
w, h = im.size
im = im.resize((1150, round(h * 1150 / w)))  # 元のままでは大きすぎて扱えない
im.save("/tmp/view-000.png")
```

`pdftoppm` でも書き出せるが、高解像度のスキャンでは非常に遅い。
`pdfimages` は埋め込み画像をそのまま取り出すので速い。

複数枚を 1 つにまとめた PDF の分割は Python の `pypdf` で行う。
領収書と対応する明細書は 1 つのファイルにまとめる。

```python
import pypdf

r = pypdf.PdfReader("Inbox/スキャン 2026-02-03 20.41.pdf")
w = pypdf.PdfWriter()
for p in [2, 3]:            # 領収証 + 明細書（1 始まりのページ番号）
    w.add_page(r.pages[p - 1])
with open("receipts/2026/北原沙織/2026-02-03_かえで調剤薬局_沙織_3200.pdf", "wb") as f:
    w.write(f)
```

#### 作業環境と Mac は別のコンピュータ

**これらのツールが動くのは LLM の作業環境であって、手元の Mac の上ではない。**

- **作業環境** … クラウド上に、その会話専用に用意される Linux 環境。
  Mac とは別のコンピュータで、会話が終われば破棄される。Python が入っていて、
  ファイルの読み書き・削除は自由。ただし最初はこちらのファイルが 1 つも無い
- **Mac** … 実際のファイル（この `医療費` フォルダ）がある場所。デスクトップアプリ経由で
  接続フォルダの中だけを触れる。移動・リネーム・上書きはできるが、**削除はできない**

したがって PDF の読み取りは「Mac からファイルを作業環境へコピー → そこで画像化・分割 →
結果を Mac へ書き戻す」という往復になる。`trash/` が要るのも、消せないのが Mac 側だからで、
作業環境側のファイルは放っておいても会話終了時に消える。

**poppler-utils や Pillow を Mac に入れる必要はない。** 要るのは作業環境の側で、
入っていなければその会話の中で入れる。会話ごとに作り直される環境なので、
一度入れても次の会話には残らない。

```sh
apt-get install -y poppler-utils    # pdfimages / pdftoppm
pip install pillow pypdf
```

### 3. 取り込み結果を確かめる（人）

取り込みが終わったら、集計表と領収書を人の目で突き合わせる。
LLM は読み取れなかった項目を報告してくるが、**読み違えたことには気づけない**（金額の桁、
似た日付、対象者の取り違え）。ここだけは人が見る。

[befold](https://befold.degino.com/) で開くと、この確認が 1 つのウィンドウで済む。

```sh
befold data/medical-2026-北原健吾.tsv
```

- **TSV がそのまま表になる。** 表計算ソフトで開かずに済むので、書式が変わる事故が起きない
  （後述「編集のルール」）
- **サイドバーから領収書の PDF をそのまま開ける。** 集計表の `receipt` 列に書かれた
  ファイルを `receipts/YYYY/氏名/` に見に行き、金額と日付を突き合わせる
- **ファイルの変更が自動で反映される。** LLM に直しを依頼すると、その場で表示が更新される。
  開き直す必要はない

確認するのは次の 3 点。

1. 追記された行数が、投入したスキャンの枚数と合っているか
2. 金額と日付が領収書のとおりか（特に桁）
3. 対象者が合っているか（家族が複数だと最も間違えやすい）

### 4. 原本を保管する（重要）

**スキャンしても紙の領収書は捨てない。** → 後述「領収書の保存義務」

年ごとに封筒か箱を 1 つ用意し、スキャン後は日付順に並べず放り込むだけ。
整理はしない。5 年経ったら封筒ごと処分する。

---

## data/medical-YYYY-氏名.tsv の仕様

タブ区切り。1 行目がヘッダ。

| 列 | 内容 | 形式 |
|---|---|---|
| `date` | 支払日 | `YYYY-MM-DD` 固定 |
| `person` | 対象者 | 氏名 |
| `provider` | 支払先（医療機関・薬局） | |
| `category` | 区分 | `診療` / `医薬品` / `介護` / `その他` |
| `amount` | 支払額 | 桁区切りなしの整数 |
| `reimbursed` | 保険等で補填される額 | 桁区切りなしの整数。無ければ `0` |
| `receipt` | 領収書ファイル名 | `receipts/YYYY/氏名/` 内のファイル名 |
| `note` | 備考 | 空でよい |

例（以下は記入例で、医療機関名は実在しません）。
**列の区切りは実際のタブ文字**で、下のブロックはそのまま貼り付けられる:

<!-- markdownlint-disable MD010 -->

```text
date	person	provider	category	amount	reimbursed	receipt	note
2026-08-22	北原 沙織	〇〇クリニック	診療	3200	0	2026-08-22_〇〇クリニック_沙織_3200.pdf
```

<!-- markdownlint-enable MD010 -->

<!-- 上の 2 行の HTML コメントは Markdown の校正ツール向け。TSV の例はタブ文字が
     本質なので、タブを禁止するルールをこのブロックだけ外している。表示には現れない。 -->

なお `note` が空の行は、末尾のタブを打っても打たなくてもよい（列数はタブの数で決まるため、
最後の列が空なら末尾タブは省略できる）。

### TSV を選ぶ理由

- CSV だと医療機関名に含まれる `,` のためにクォートとエスケープが必要になる。
  TSV ならフィールドにタブが入ることはまずないので `awk -F'\t'` や `cut -f` がそのまま使える
- テキストなので差分が読める。LLM が直接読み書きできる
- いざという時は表計算ソフトでも開ける

### 列の設計意図

`category` は医療費控除の明細書の 4 区分（診療・治療／医薬品購入／介護保険サービス／
その他の医療費）に対応させてある。年末にそのまま e-Tax へ転記できる。

### 通院交通費の書き方

公共交通機関の運賃は医療費控除の対象。領収書が無くても、日付・経路・金額の記録があれば計上できる。
集計表に通常の行として書く。

- `provider` … `公共交通機関`（経路は `note` に書く）
- `category` … `その他`
- `receipt` … 空

タクシー代は原則対象外（歩行困難などの事情がある場合のみ）。
自家用車のガソリン代・駐車場代は対象外。

### 氏名の書き方

同じ人を指すのに 3 通りの書き方が混在するので、それぞれ用途を固定する。

| 場所 | 書き方 | 例 |
|---|---|---|
| `person` 列 | 姓名を空白で区切る | `北原 健吾` |
| ファイル名・フォルダ名 | 空白なし | `medical-2026-北原健吾.tsv`、`receipts/2026/北原健吾/` |
| 領収書のファイル名 | 名のみ | `2026-01-10_〇〇内科クリニック_芽衣_1080.pdf` |

領収書のファイル名だけ名のみなのは、姓が全員同じで区別に寄与せず、名前が長くなるため。
`receipts/YYYY/氏名/` の下にあるので姓は文脈から分かる。

**家族に同じ名の人がいる場合はこの規約が成立しない。** その場合は領収書のファイル名も
姓名にする（4 人分の名がすべて異なることが前提の省略なので、前提が崩れたら省略をやめる）。

### 編集のルール

- **見るのはビューア、直すのは LLM に依頼する。** 表計算ソフトで開いて保存し直すと
  書式（先頭ゼロ、日付形式）が変わることがあり、そのファイルを次に読むのは LLM なので
  黙って壊れる。直す必要があればビューアで場所を特定し、「この行の金額を 3200 に直して」と
  依頼する。仕様（列・区分・形式）を知っているのは LLM の側で、そこを通せば形式は崩れない
- 金額は桁区切りを入れない。日付は `YYYY-MM-DD` 以外の形式を使わない

---

## data/income.tsv の仕様

医療費控除の足切りは**10 万円 または 総所得金額等の 5% の低い方**で決まる。
所得が少ない人は足切りが下がるため、家族の誰が申告するかの判断に所得の額が要る。
年に 1 回しか更新しないので、年をまたぐファイルとして 1 つだけ置く。

| 列 | 内容 |
|---|---|
| `year` | 対象年（西暦） |
| `person` | 氏名 |
| `kind` | 所得の種類（`給与` など） |
| `revenue` | 収入金額。給与なら源泉徴収票の「支払金額」 |
| `income` | 所得金額。給与なら「給与所得控除後の金額」 |
| `withheld` | 源泉徴収税額 |
| `note` | 備考 |

`revenue` と `income` は混同しやすいので両方持つ。足切りの判定に使うのは `income` のほう。

### 値の出どころ（給与所得の場合）

源泉徴収票の次の欄をそのまま写す。

| 源泉徴収票の欄 | 入れる列 |
|---|---|
| 支払金額 | `revenue` |
| 給与所得控除後の金額 | `income` |
| 源泉徴収税額 | `withheld` |

`kind` は `給与` とする。

### 給与以外の所得がある場合

- **事業所得** … 確定申告書の「所得金額等」の該当欄。`kind` は `事業`
- **公的年金** … 公的年金等の源泉徴収票。ただし**この書類に所得金額は印字されていない**。
  「支払金額」から公的年金等控除を引いた額が所得なので、確定申告書等作成コーナーで
  計算した結果を使う。`kind` は `年金`
- 1 人に複数の所得があれば `kind` ごとに行を分ける。足切りの判定はその人の合計で見る

**分からない額は空欄のままにする。** 推測で埋めると足切りの判定が静かに狂う。

### 入れ方

年に 1 回、源泉徴収票を受け取ったら（多くは 12 月〜1 月）次を行う。

1. スキャンして `docs/YYYY/氏名/` に置く。ファイル名は `YYYY_源泉徴収票_氏名.pdf`
2. LLM に「`docs/2026/北原健吾/` の源泉徴収票を読んで `income.tsv` に追記して」と依頼する
3. 読み取れなかった欄は報告してもらい、確認してから入れる（推測で埋めない）

**領収書と違って `Inbox/` を経由しない。** 理由は 2 つある。

- 投入するのは集計する本人で、`Inbox/` が引き受けている「投入する側の手数を減らす」という
  役目が当てはまらない
- `Inbox/` は家族と共有している。所得の書類をそこに置くと、家族全員の年収が
  他の家族から見える状態が一時的にできる。`data/` と `docs/` は共有していないので、
  そちらへ直接置けばその状態を作らずに済む

### 忘れても気づける

年 1 回の作業なので忘れやすいが、`TODO.md` に書いて思い出す仕組みには**しない**。
確定申告の準備を始めた時点で `income.tsv` にその年の行が無ければ、
足切りの判定も「誰が申告するか」の比較もできず、必ずそこで気づく。

### 所得の情報は医療費より機微

このファイルには家族全員の年収が並ぶ。共有フォルダの設定を変えるときは、
`Inbox/` だけを共有し、`data/` と `docs/` は共有範囲に入れないこと。

### 誰が申告するか

医療費控除は**生計を一にする家族の分をまとめて 1 人が申告できる**。
所得が低い人は足切りが下がるが、そもそも課税所得が残らなければ還付は出ない。
所得が高い人にまとめた方が、控除額も税率も大きく、還付が増えることが多い。
毎年、両方のパターンで計算して比べる。

---

## 領収書の保存義務

医療費控除では、平成 29 年分から**領収書の提出・提示は不要**になった。
代わりに「医療費控除の明細書」を提出する。

ただし、**領収書は自宅で 5 年間保存する義務がある**。税務署から提示を求められることがある。

電子帳簿保存法の「スキャナ保存」で原本を破棄できるのは事業者の帳簿書類の話であり、
給与所得者の医療費控除の領収書はその枠組みの対象外。
**スキャンしたから原本を捨ててよいとは言い切れない。**

したがって:

- スキャン画像 = 検索・集計・LLM に読ませるためのもの
- 紙の原本 = 5 年間の保存義務を満たすためのもの

両方を持つ。整理の手間はスキャン側で解決し、原本保管は「封筒に入れるだけ」に退化させる。

参考:

- [No.1119 医療費控除に関する手続について｜国税庁](https://www.nta.go.jp/taxes/shiraberu/taxanswer/shotoku/1119_qa.htm)
- [医療費控除の明細書｜国税庁](https://www.nta.go.jp/taxes/shiraberu/shinkoku/tebiki/2025/06/6_01.htm)

最終的な取り扱いは国税庁の情報を確認し、判断に迷うものは税務署に問い合わせること。

---

## 家族に渡す説明（これだけ）

> 病院や薬局の領収書をもらったら、iPhone の「ファイル」アプリで「医療費 Inbox」を開いて、
> 右上の … から「書類をスキャン」。撮って保存するだけ。
> 名前も日付も気にしなくていいし、あとで整理しなくていい。

---

## 入力フォームを作らない理由

入力フォームは入力する側の負担になる。家族に継続的に依頼する性質のものは、
手数が多いと続かないことが最大のリスク。写真 1 枚なら続く。
領収書画像からの読み取りは実用レベルにあり、人手入力より速く、誤りも突き合わせで見つかる。

将来「写真だけでは足りない情報がある」と分かってから作っても遅くない。
