Table of contents
- OCR受領書類データ管理統合
- 設計思想
- 新規追加したDocumentType
- imported_documents テーブル拡張(DB v27)
- モデル・リポジトリ
- ImportedDocumentモデル(lib/models/imported_document_model.dart)
- ImportedDocumentRepository(lib/services/imported_document_repository.dart)
- 画面構成
- 入口統合
- 自動仕訳
- AutoJournalService(lib/plugins/accounting2/services/auto_journal_service.dart)
- document_preview_page.dart
- データフロー全体図
- 変更対象ファイル一覧
- 今後の拡張候補
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
OCR受領書類データ管理統合
作成日: 2026-07-14 バージョン: v1.4.357 DBバージョン: v27
設計思想
「OCRで取り込んだ請求書・レシートを、受領書類として台帳に変換し、自動仕訳まで一気通貫で行う」
従来はOCR結果が imported_documents テーブルに蓄積されるだけで、伝票(documents テーブル)への変換は手作業でした。本統合により、OCR取り込み → 内容確認 → 受領書類伝票化 → 自動仕訳までのワークフローを一本化します。
【撮影/OCR】 【確認・変換】 【確定・仕訳】
QuickScanScreen ─┐
InvoiceScanScreen ─┼─→ imported_documents ──→ ScanConvertScreen ──→ DocumentPage ──→ AutoJournalService
ReceiptPhotoScreen ─┘ (status: scanned (status: verified) (status: confirmed) (journal_entries)
→ ocr_done
→ verified
→ converted)
新規追加したDocumentType
| タイプ | 名称 | プレフィックス | 用途 |
|---|---|---|---|
receivedInvoice |
受領請求書 | RI | 仕入先から受領した請求書 |
receivedReceipt |
受領領収証 | RR | 支払いの証拠として受領した領収証 |
表示色
| タイプ | ベース色 | バッジ色 |
|---|---|---|
receivedInvoice |
0xFF5C6BC0(インディゴ) |
0xFF5C6BC0 |
receivedReceipt |
0xFF26A69A(ティール) |
0xFF26A69A |
PDF出力
docTypeTitle: 受領請求書 / 受領領収証amountLabel: 御請求金額 / 領収金額totalLabel: 御請求合計 / 領収金額合計documentTitleMessage: 「下記の通り、受領いたしました。」「上記の金額を正に受領いたしました。」
imported_documents テーブル拡張(DB v27)
追加カラム
| カラム | 型 | 用途 |
|---|---|---|
status |
TEXT DEFAULT 'scanned' | ライフサイクル状態 |
verified_at |
TEXT | 内容確認日時 |
converted_document_id |
TEXT | 変換先のDocumentModel ID |
vendor_customer_id |
TEXT | 連携した顧客マスターID |
duplicate_of_id |
TEXT | 重複元のimported_documents ID |
ImportedDocStatus(ステータス遷移)
scanned → ocr_done → verified → converted
↘ rejected
| ステータス | label | 説明 |
|---|---|---|
scanned |
スキャン済 | 撮影済み(OCR未実行) |
ocr_done |
OCR済 | OCR実行済み・パースフィールドあり |
verified |
確認済 | 内容確認済み・変換待ち |
converted |
変換済 | 伝票に変換済み |
rejected |
却下 | 不要と判断 |
マイグレーション
database_migration_v27_v27.dartでsafeAddColumnにより安全に追加- 既存の
processed = 1レコードはstatus = 'ocr_done'に移行 _databaseVersionを 26 → 27 に更新
モデル・リポジトリ
ImportedDocumentモデル(lib/models/imported_document_model.dart)
新カラム対応のため拡張。ImportedDocStatus enumを定義し、fromMap/toMap/copyWith で取り扱い。
ImportedDocumentRepository(lib/services/imported_document_repository.dart)
追加メソッド:
| メソッド | 用途 |
|---|---|
listConvertible() |
変換可能(ocr_done/verified・重複なし)一覧 |
listConverted() |
変換済み一覧 |
updateStatus(id, status, ...) |
ステータス更新(verified_at/converted_document_idも同時更新) |
markDuplicate(id, masterId) |
重複マーク |
findDuplicate(vendor, total, date) |
重複検出(vendor+total+dateの完全一致) |
画面構成
ScanConvertScreen(新規)
lib/plugins/documents/screens/scan_convert_screen.dart
OCR結果を編集フォームで確認し、受領書類伝票に変換する画面。
機能:
- 画像プレビュー
- タイプ切替(受領請求書 / 受領領収証)の SegmentedButton
- 取引先名入力 + 顧客マスターサジェスト(部分一致)
- 日付・金額・消費税・品目編集
- 確定 → DocumentPage を編集モードで開く
- 却下 → status を
rejectedに変更
変換ロジック:
- 品目は1行のサマリー行に統合(
unitPrice = total、includeTax = false) - DocumentPage 保存時に
totalAmountで上書きされるため、subtotal = total になるよう調整 - DocumentPage が返す
saved.idをconverted_document_idに設定
ScanDetailScreen(拡張)
lib/plugins/documents/screens/scan_detail_screen.dart
- ステータスチップ表示(scanned/ocrDone/verified/converted/rejected)
- 「受領書類として伝票へ変換」ボタン追加
- 変換済みの場合は変換先伝票IDを表示
ScanProcessScreen(拡張)
lib/plugins/documents/screens/scan_process_screen.dart
initialDocTypeパラメータ追加(入口統合用)- OCR完了後の登録ダイアログに「伝票へ変換」選択肢を追加(invoice/receiptのみ)
- 保存時の
statusをocr_doneに設定
入口統合
従来4つのOCR入口を統合:
| 画面 | 変更 | 実装 |
|---|---|---|
InvoiceScanScreen |
ScanProcessScreenのエイリアス化 | ScanProcessScreen(initialDocType: DocType.invoice) |
ReceiptPhotoScreen |
ScanProcessScreenのエイリアス化 | ScanProcessScreen(initialDocType: DocType.receipt) |
QuickScanScreen |
既存のまま | — |
ScanProcessScreen |
initialDocType でタイプ事前選択 |
新規パラメータ |
効果: OCR入口のコード重複を解消、保存後の変換ステップを統一。
自動仕訳
AutoJournalService(lib/plugins/accounting2/services/auto_journal_service.dart)
追加メソッド:
createFromReceivedInvoice
受領請求書確定時:
仕入高(501) / 買掛金(201) — 総額を仕入高に計上
注意: 仮払消費税勘定が存在しないため、税抜き分割は行わず総額を仕入高に計上。
createFromReceivedReceipt
受領領収証確定時:
買掛金(201) / 現金(101) — 支払いの事実を記録
document_preview_page.dart
確定フロー(_confirm 内)に受領書類の自動仕訳を追加:
} else if (widget.document.documentType == DocumentType.receivedInvoice) {
await journal.createFromReceivedInvoice(
documentId: widget.document.id,
total: widget.document.total,
date: widget.document.date,
vendorName: widget.document.customerName,
);
} else if (widget.document.documentType == DocumentType.receivedReceipt) {
await journal.createFromReceivedReceipt(
documentId: widget.document.id,
amount: widget.document.total,
date: widget.document.date,
vendorName: widget.document.customerName,
);
}
データフロー全体図
[撮影]
QuickScanScreen / InvoiceScanScreen / ReceiptPhotoScreen
│
▼
ScanProcessScreen
│ OCR実行 (Gemini OCR / ML Kit)
▼
imported_documents テーブル
(status: ocr_done, parsed_vendor/total/date/name 設定)
│
├─ 「伝票へ変換」選択 ──→ ScanConvertScreen
│ │ 顧客マスター連携
│ │ フィールド編集
│ ▼
│ status: verified
│ │
│ ▼
│ DocumentPage (編集モード)
│ │ 保存
│ ▼
│ documents テーブル
│ (documentType: receivedInvoice/receivedReceipt)
│ │ 確定
│ ▼
│ document_preview_page.dart
│ │ 自動仕訳フック
│ ▼
│ AutoJournalService
│ │
│ ▼
│ journal_entries テーブル
│ (仕入高/買掛金 or 買掛金/現金)
│
└─ 「管理画面へ」選択 ──→ ScanListScreen
│
▼
ScanDetailScreen
│ 変換ボタン
▼
ScanConvertScreen (上記フローへ)
変更対象ファイル一覧
新規作成
| ファイル | 用途 |
|---|---|
lib/services/database_migration_v27_v27.dart |
DB v27マイグレーション |
lib/plugins/documents/screens/scan_convert_screen.dart |
OCR→受領書類変換画面 |
変更
| ファイル | 変更内容 |
|---|---|
lib/models/document_type.dart |
receivedInvoice/receivedReceipt enum追加 |
lib/models/document_type_colors.dart |
色・バッジ色追加 |
lib/utils/theme_utils.dart |
AppBar背景色追加 |
lib/models/invoice_helpers.dart |
短縮ラベル・伝票名・プレフィックス追加 |
lib/plugins/documents/logic/document_pdf_common.dart |
PDFラベル・メッセージ追加 |
lib/plugins/documents/explorer/document_explorer_config.dart |
フィルタ選択肢・アイコン追加 |
lib/plugins/documents/services/document_repository.dart |
伝票番号プレフィックス追加 |
lib/plugins/project/widgets/stage_action_card.dart |
アイコン追加 |
lib/plugins/documents/documents_plugin.dart |
CREATE TABLE・safeAddColumn更新 |
lib/services/database_helper.dart |
_databaseVersion 27へ |
lib/services/database_migration_service.dart |
v27ルート追加 |
lib/models/imported_document_model.dart |
新カラム対応・ImportedDocStatus enum |
lib/services/imported_document_repository.dart |
ステータス更新・変換済み一覧・重複検出 |
lib/plugins/documents/screens/scan_detail_screen.dart |
変換ボタン・ステータスチップ |
lib/plugins/documents/screens/scan_process_screen.dart |
initialDocType・変換ステップ追加 |
lib/plugins/documents/screens/invoice_scan_screen.dart |
ScanProcessScreenのエイリアス化 |
lib/plugins/accounting2/screens/receipt_photo_screen.dart |
ScanProcessScreenのエイリアス化 |
lib/plugins/accounting2/services/auto_journal_service.dart |
受領書類用仕訳メソッド追加 |
lib/plugins/documents/explorer/document_preview_page.dart |
確定フローに自動仕訳追加 |
pubspec.yaml |
v1.4.357 |
今後の拡張候補
| 項目 | 優先度 | 概要 |
|---|---|---|
| 仮払消費税勘定の追加 | 中 | 勘定マスターに追加後、税抜き分割仕訳を有効化 |
| 重複検出の自動化 | 中 | OCR保存時に findDuplicate を自動実行し警告 |
| バッチ変換 | 低 | 複数の受領書類を一括変換する機能 |
| 顧客マスター自動新規作成 | 低 | 未連携のvendor名から顧客マスターを自動生成 |
| PDF添付 | 低 | 受領書類伝票にOCR元画像を添付 |