• #tax-assistant
  • #OCR
  • #医療費明細
  • #帳票管理
  • #論理削除
  • #Claude Code
開発tax-assistantメモ

tax-assistant: 医療費明細対応と帳票設定改善

帳票タイプの設定まわりを集中的に整備した。医療費明細の追加、クライアント別の帳票表示制御、OCRスキーマエディタのバグ修正、そしてレシートのOCR処理まで。午後の3セッションで一気に進めた。

セッション1: 帳票タイプ設定のバグ修正と医療費明細追加

OcrSchemaEditorのヘッダー未送信バグ

OcrSchemaEditor画面で帳票タイプの一覧を取得する$fetchに、X-Client-Idヘッダーが含まれていなかった。このヘッダーがないとAPI側でどのクライアントのDBを参照すべきか判定できず、別クライアントのデータが返ってくる。

原因を追うと、あるクライアントのDBではレシートの帳票タイプがID 6、別のクライアントではID 7で登録されていて、ヘッダーなしだとデフォルトクライアントのIDで引いてしまう問題だった。$fetchにヘッダーを追加して解決。

医療費明細のOCRスキーマ追加

確定申告に必要な医療費明細の帳票タイプを追加した。medical_receipt.jsonとしてOCRスキーマを定義し、OcrSchemaEditorで正常に表示されることを確認。

ただし、確定申告系の帳票では「デフォルト勘定科目」の概念が不要だった。通常の経費帳票(レシートやカード明細)では借方・貸方の勘定科目をデフォルトで設定するが、医療費明細は仕訳を切る対象ではない。

対処として:

  • medical_receipt.jsonからデフォルト勘定科目フィールドを削除
  • 確定申告カテゴリの帳票では「デフォルト勘定科目」セクション自体を非表示にするUI分岐を追加

変更は内容別に3つのコミットに分けた。OCRスキーマの修正、UI表示の分岐、バグ修正をそれぞれ独立させている。

セッション2: 帳票タイプの論理削除とUI反映

クライアント別の帳票管理

あるクライアントでは売上伝票やスクエア明細を使うが、別のクライアントでは不要、というケースに対応する必要があった。使わない帳票タイプをis_active = 0で論理削除することで、クライアントごとに表示する帳票を制御できるようにした。

物理削除(DELETEで行ごと消す)ではなく論理削除を選んだ理由:

  • 過去にその帳票タイプで処理した伝票が外部キーで参照している可能性がある
  • 復活が容易(フラグを戻すだけ)
  • 削除の履歴が残る

読取一覧のドロップダウン改善

読取一覧画面(vouchers.vue)の帳票種別フィルタがハードコードされていた。例えば帳票タイプを追加しても、フィルタのドロップダウンには手動でコードを追加しないと反映されない状態だった。

これをAPIから動的に取得するよう変更。is_active = 1の帳票タイプだけがドロップダウンに出る形になり、論理削除した帳票はフィルタからも消える。

あわせて、BatchDocumentTypeListコンポーネントのパネル幅を調整。長い帳票名が見切れていた問題を修正した。

セッション3: インポートスクリプト改善とOCR処理

インポートスクリプトの改善

import_receipts等のインポートスクリプトに、サブディレクトリを引数で指定できる機能を追加した。これまではスクリプト内のパスを直接編集する必要があったが、import_receipts 2026-02/week2のように実行できるようになった。

スラッシュコマンドの定義ファイルも更新し、引数の説明を追加。

25件のレシートOCR処理

画像14件、PDF 11件の計25件をOCR処理した。処理後のバリデーションは3つのサブエージェントに分散して並列実行した。

バリデーション結果で信頼度スコアが低かった7件に対しては、セマンティックマッチングで評価を行った。金額や日付など重要フィールドの整合性を確認し、OCR結果を修正するか承認するかを判断した。

まとめ

作業内容
バグ修正OcrSchemaEditorのX-Client-Idヘッダー未送信
機能追加医療費明細の帳票タイプ・OCRスキーマ
UI改善確定申告帳票でのデフォルト勘定科目セクション非表示
データ管理帳票タイプの論理削除(is_activeフラグ)
UI改善読取一覧の帳票種別をAPI動的取得に変更
DX改善インポートスクリプトのサブディレクトリ引数対応
OCR処理25件のレシート処理(並列バリデーション)

帳票タイプまわりの基盤が整った。クライアントごとに使う帳票を柔軟に制御でき、確定申告系と通常経費系でUIの出し分けもできるようになった。