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の出し分けもできるようになった。