食品卸売業者の1週間分の請求書を1つのレポートに一括処理

ほとんどの請求書処理ツールは単一ドキュメントのワークフローを前提としています。1枚の請求書をアップロードし、1セットのデータを抽出し、1つの結果をダウンロードする。しかし、飲食店経営者は請求書を1枚ずつ処理しません。週単位の波で処理します。火曜日の納品日には、6~10の異なる卸売業者から12~25枚の請求書が届き、それぞれフォーマットも商品コードも「鶏むね肉」の定義も異なります。1枚の請求書をうまく処理できるツールでも、さらに15枚の請求書が待っているとボトルネックになりかねません。

手入力をやめよう — AIに読み取らせるだけ
画像やPDFをアップロード — 10秒で構造化データに
今すぐ試す
登録不要 · カード不要 · 10秒で結果
複数の卸売業者からの食品請求書を1つのスプレッドシートに一括処理

単一請求書抽出ツールがバッチ処理で手間を増やす理由

3店舗を展開するレストラングループは、通常の週に8~10社の異なるベンダーから納品を受けます。SyscoやUS Foodsのような広域ディストリビューター(乾物・たんぱく質)、地域の青果卸売業者、専門の精肉業者、乳製品サプライヤー、飲料ディストリビューター、そして焼き菓子や専門食材の小規模サプライヤーなどです。フードサービス流通調査によると、平均的なレストランは週2.6回の納品を受けますが、これはあくまで平均値です。複数店舗を持つレストラングループが複数のベンダーと取引する場合、納品日ごとに10~15枚、週に20~30枚の請求書を処理するのが一般的です。

単一請求書抽出ツールは、これらの書類を1枚ずつ個別に処理します。アップロード、待機、ダウンロード、繰り返し。ツールは機能します。しかし、作業負担はデータ入力からツール操作へと移行します。つまり、アップロード・抽出・ダウンロードのループを15回繰り返し、その後15個の個別スプレッドシートを手動で1つのマスターファイルに結合する必要があります。抽出は自動化されても、集約は自動化されないのです。

このギャップを埋めるのがバッチ処理です。すべての請求書(PDF、スマートフォン写真、スキャン、ベンダーが使用するあらゆる形式)を一度にアップロードし、単一の処理ジョブとして実行します。AIがバッチ内のすべての文書からデータを抽出し、出力を1つの統合スプレッドシートにまとめます。書類ごとのアップロードサイクルも、手動によるスプレッドシートの結合も不要です。ツールが抽出の一部として集約も処理します。

個別の請求書を抜き出して1つのスプレッドシートにまとめる作業を週に20回も行うのは、単に面倒なだけではありません。それはツールの設計上の構造的な欠陥であり、ユーザーのワークフローの問題ではありません。バッチ処理は、単一請求書抽出のパフォーマンス向上ではありません。それはまったく異なる種類の操作です。

10件の請求書を処理するときに初めて現れる3つの問題

単一請求書の抽出では、バッチ規模で避けられなくなる複雑さが隠れています。1つのジョブで複数の文書を処理した瞬間に、3つの構造的な問題が浮上します。

列名のずれ。 単一の請求書を抽出する場合、特定のベンダーの形式に合わせて列名を調整できます。「Sysco請求書番号」はSyscoの請求書には問題なく機能します。しかし、異なる10のベンダーから10件の請求書をアップロードする場合、列はすべての請求書で機能する必要があります。「Sysco請求書番号」という列は、バッチ内のUS Foodsや地元のベンダーの請求書では空白セルを生成します。列の定義は最初からベンダーに依存しないものでなければなりません。

原材料の同一性。 単一ベンダーの抽出では、原材料名の正規化の問題に直面することはありません。Syscoの請求書だけを処理する場合、「BNLS SKNLS CHKN BRST 6OZ IFF」はそのまま鶏むね肉です。しかし、3つの異なるベンダーを含むバッチでは、同じ原材料に対して3つの異なる名前が生成されます。出力ではそれらを1つの一貫したラベルに統合する必要があります。そうしなければ、スプレッドシートは行間の比較に使用できなくなります。

フォーマットの衝突。ある業者は、表形式で明細が記載されたきれいな5ページのPDFを送ってくる。別の業者は、手書きの納品書をスマホで撮影した写真を送る。3社目は、価格が表の列ではなく段落テキストに記載されたPDFをメールで送る。単一請求書ツールは、各フォーマットに個別に調整できる。バッチツールは、業者ごとに個別設定することなく、同じジョブで3つすべてを処理しなければならない。そうでなければ、アップロードで節約した時間が設定に費やされてしまう。

これらの問題は、1枚の請求書を1回ずつ処理するときには見えない。1週間分の納品日の請求書を1回のパスで処理しようとしたときに初めて現れる。

10種類の異なる業者フォーマットで通用する列名の設計

バッチ処理における最も効果的な決定は、列リストである。一度正しく設定すれば、残りの年間、すべての業者とすべての請求書で機能する。間違えると(業者固有すぎる、狭すぎる、または曖昧すぎる)、抽出で節約した時間よりも、出力の編集に多くの時間を費やすことになる。

ImageToTable.aiは列名抽出を使用する。フィールドの周りにボックスを描いたり、業者ごとにテンプレートをトレーニングしたりする代わりに、必要なフィールド名(「請求日」「業者名」「品目名」)を入力するだけで、AIがページ上のどこにあっても、その意味を理解して各値を特定する。これは、固定位置で抽出し、レイアウトが異なる場合に業者ごとの設定が必要なテンプレートベースのOCRとは根本的に異なる。

以下は、食品流通業者の請求書向けのバッチ対応列リストであり、ブロードライン業者(Sysco、US Foods)、地域の青果卸売業者、地元の手書き納品書に対応するように設計されている。

仕入先名  |  請求書番号  |  請求日
品目名(印字通り)  |  品目SKU / 製品コード
パックサイズ  |  単位(lb / ケース / 個 / ガロン)
注文数量  |  単価
行合計  |  単位原価(行合計 ÷ パックサイズ、小数点以下2桁)

このリストの3つの列は、一見しただけではわかりにくい役割を果たしています。

  • "単位(lb / ケース / 個 / ガロン)" — 括弧内の例は、AIの出力語彙を制限します。これがないと、ある仕入先の"CS"(ケース)が別の仕入先の"case"と並び、ラベルが不統一になって並べ替えやフィルタリングが機能しなくなります。これらの例により、バッチ内の全仕入先で出力形式が統一されます。
  • "単位原価(行合計 ÷ パックサイズ、小数点以下2桁)" — これは計算列です。AIが抽出時に計算を実行するため、後でExcelで行う必要はありません。40ポンドの鶏むね肉ケースが112.80ドルの場合、単位原価は自動的に1ポンドあたり2.82ドルになります。計算列は、算術演算、行をまたいだ集計、条件ロジック、固定パラメータ参照をサポートしており、これらはすべて列名または別のルール形式定義内で平文で定義されます。
  • "品目名(印字通り)" — 括弧内の"印字通り"は、AIに仕入先の正確な表記を保持するよう指示します。これは監査に有用で、各行を元の請求書に遡ることができます。ただし、その結果、仕入先間で品目名が統一されなくなるため、次のセクションで対応します。

この列リストは、初回使用後にプリセットとして保存され、以降すべてのバッチのテンプレートとなります。新しいベンダーが追加されても同じ列。フォーマットが変わっても同じ列。投資は前倒しです。一度5分かけて列を定義すれば、以降のバッチはすべてドラッグ&ドロップで完了します。

AIが「BNLS SKNLS CHKN BRST」と「Chicken Breast」をバッチ規模でどのように照合するか

これはバッチ食品請求書処理における最も難しい問題であり、テンプレートベースのOCRツールが最も顕著に失敗する箇所です。従来のOCRシステムがSyscoの請求書で「BNLS SKNLS CHKN BRST 6OZ IFF」を読み取り、US Foodsの請求書で「CHICKEN BREAST BONELESS SKINLESS 6 OZ」を読み取った場合、これらが同じ製品を説明していることを認識する仕組みがありません。文字列に重複はありません。OCRは異なるラベルが付いた2つの異なる行を出力し、必要な比較(ベンダー間の単価の横並び)は実現しません。

ビジョン大規模モデルはこれに異なるアプローチを取ります。文字を一致させるのではなく、意味を読み取ります。「Chicken Breast」という列を定義すると、AIは各請求書内で、略語、大文字小文字、製品コード形式、ページ上の位置に関係なく、骨なし皮なしの鶏むね肉を説明する明細項目を検索します。「BNLS SKNLS CHKN BRST」「Chicken Breast Boneless」、手書きの「chx breast」はすべて同じ列にマッピングされます。AIが同じ原材料を指していると理解するからです。

この意味論的アプローチにより、テンプレートベースのツールに必要なベンダーごとのマッピング手順が不要になります。Syscoの請求書では鶏むね肉が2ページ目の4列目、製品コード472819の下にあり、US Foodsの請求書では3ページ目の2列目、「Poultry — Fresh」の下にある、とシステムに教える必要はありません。1つの列名でバッチ内のすべてのベンダーを処理できます。

トレードオフは現実に存在し、実務上重要です。「鶏むね肉」を列名として定義した場合、AIが異なる請求書で「CHICKEN BREAST BONELESS SKINLESS 6 OZ」と「CHICKEN BREAST BONE-IN 8 OZ」の両方を検出すると、どちらも鶏むね肉の明細であるため、同じ列にマッピングされる可能性があります。正確なSKUレベルでの比較を行うには、原材料名と併せて製品コードまたはパックサイズの列を含め、出力スプレッドシートでそれらを完全一致に使用してください。上記のバッチ列テンプレートには、まさにこの理由から「品目名」と「品目SKU/製品コード」の両方が含まれています。

手入力をやめよう — AIに読み取らせるだけ
画像やPDFをアップロード — 10秒で構造化データに
今すぐ試す
登録不要 · カード不要 · 10秒で結果

PDF、スマホ写真、手書きメモが混在するバッチ — ベンダーごとの設定不要

実際の火曜日の納品日には、テンプレートベースのシステムでは文書タイプごとに個別設定なしでは対応できないフォーマットの混在が発生します。

  • Sysco: 明細が表形式で記載された5ページの印刷PDF。製品コードは専用列、価格は右揃えで小数点以下2桁
  • US Foods: 異なる列レイアウトのメール添付PDF。明細説明が製品コードの前にあり、パックサイズは専用列ではなく品目説明フィールドに埋め込まれている
  • 地元の青果業者: 手書きの納品メモをスマホで撮影した写真。ボールペンで書かれた明細、小数点なしの価格(「12」は12.00ドルを意味)、明示的なパックサイズがない品目あり(「各」と解釈)
  • 飲料販売業者: ケース価格とデポジット料金が別途記載された2ページのPDF。ほとんどの食品請求書にはない醸造日専用フィールドあり

このバッチでは、テンプレートベースのOCRにベンダーごとに4つの個別設定が必要です。地元の青果ベンダーが毎週手書きのスタイルやフォーマットを変えると、テンプレートは機能しなくなります。新しいベンダーが増えるたびに設定コストが積み上がり、メンテナンス自体が定期的なタスクになります。

ビジョンモデルは、位置ではなく意味で各文書を読み取るため、この混在を1回のバッチアップロードで処理します。「請求日」をSyscoのPDFではヘッダーに、US FoodsのPDFでは右上に、手書きのメモでは上部に scribbled に見つけます。それは、各文書のどこを見るべきかを指示したからではなく、請求日がどこに現れてもそれが何かを理解しているからです。

この位置非依存性こそが、ベンダーごとの設定なしで混在フォーマットのバッチ処理を可能にします。同じ列名リストが、印刷された表、手書きのメモ、フォーマットされたPDFからデータを抽出し、同じジョブ内で同じ出力スプレッドシートに行を生成します。特定のベンダーの請求書にフィールドが少ない場合(手書きのメモには製品コードや税の内訳がほとんどありません)、一部のセルは空白になる可能性がありますが、列構造はすべての行で維持されます。

手書きが密集している、または画像品質が低い文書の場合、抽出インターフェースで利用可能な手動精度トグルであるPrecision+を有効にすると、AIが追加の推論パスを実行してフィールド認識を向上させます。トレードオフは1ページあたり2~3秒の追加時間です。主要なディストリビューターからのクリーンなPDFの場合はオフにしてください。青果ベンダーの鉛筆書きメモのスマホ写真の場合はオンにします。

バッチスケールでの計算列:単価、原価率、ベンダー比較 — 抽出中にすべて実行

バッチ処理の真価は、抽出を高速化することではありません。抽出処理そのものに計算を組み込める点にあります。しかも、その計算はバッチ内のすべてのドキュメントに自動で適用されます。

3つの計算列により、バッチ出力はデータの羅列から、分析可能な週次レポートへと変わります。

単価(ライン合計÷パックサイズ)は、異なる単位で販売するベンダー間の価格を標準化します。Syscoは鶏むね肉を40ポンドケースで112.80ドル、US Foodsは50ポンドケースで135.00ドルで販売しています。標準化しなければ、金額の大きい方が割高に見えます。計算された単価(2.82ドル/ポンド対2.70ドル/ポンド)は、その逆を示します。この列により、バッチ内のすべてのベンダー間で、すべてのラインアイテムを直接比較できます。

フードコスト率は、標準化をさらに一歩進めます。メニュー価格を固定パラメータとして埋め込むことで(「フードコスト率(単価÷メニュー価格×100;鶏むね肉=28、サーモン=42、牛肉=65)」)、AIは抽出された各食材を実際の販売価格と比較し、パーセンテージを出力します。31%と表示されれば、目標の28~35%の範囲内です。109%と表示されれば、現在の価格設定ではその料理が赤字であることを示します。この計算は、スプレッドシートの数式に触れることなく、バッチ内のすべての請求書で実行されます。フードコスト計算の詳細な手順(列名方式とルール形式アプローチの両方を含む)については、サプライヤー請求書の写真から直接フードコスト率を計算するガイドをご参照ください。

仕入先価格比較は、出力構造から自然に生成されます。バッチモードでは、すべての行に仕入先名の列が含まれた単一のスプレッドシートが作成されます。品目名で並べ替えると、同じ原材料のすべての仕入先の価格が隣接する行に表示されます。フードコスト率で並べ替えると、最も早急な対応が必要な原材料が上位に表示されます。仕入先間の価格追跡(サプライヤーによる予告なしの週次値上げを検出する方法を含む)に特化したガイドについては、AIを使って請求書から食品仕入先価格を比較する方法をご覧ください。

3社の仕入先。1回のアップロードバッチ。単価の正規化、フードコスト率の計算、仕入先比較の横並び表示 — すべて抽出処理内で、すべて1つのスプレッドシートに。

週次バッチワークフロー:火曜日の納品書から金曜日のフードコストレポートまで

以下は、3拠点・8~10社の仕入先を持つレストラングループ向けの、週次のエンドツーエンドワークフローです。手作業による2~3時間のデータ入力を、週10分のルーティンに短縮します。

ステップ1 — 週の間に請求書を収集する。火曜日の納品日が最も多くの書類を生み出します:シスコ、USフーズ、青果、乳製品。2回目の納品日(木曜日または金曜日)には、肉類、魚介類、飲料の請求書が加わります。すべての請求書(メールで転送されたPDF、裏口で撮影した紙の請求書の写真)を1つのフォルダに集めます。AIはファイル名ではなく内容を読み取るため、命名規則は厳密である必要はありません。ただし、一貫したプレフィックスを付けると、ご自身の整理に役立ちます:「Sysco_0515.pdf」「USFoods_0515.pdf」「ProduceLocal_0515.jpg」など。

ステップ2 — 1週間分のバッチをアップロードします。15~25の異なる形式のファイルすべてをアップロードエリアにドラッグ&ドロップします。AIはこれらを1つのジョブとして処理し、セットアップ時に保存した同じ列名テンプレートを使用してすべての文書からデータを抽出します。ベンダーごとの設定や、書類ごとのアップロード作業は不要です。

ステップ3 — すべての行ではなく、外れ値を確認します。バッチ出力には、各行の出典を示す「ベンダー名」列が含まれています。ベンダーごとに1~2行をスポットチェックします。Syscoの鶏むね肉の行に正しい単価が表示されているか、手書きの青果メモでにじんだ価格が誤読されていないかを確認します。25枚の請求書(200行以上)のバッチの場合、確認には約3分かかります。異常値を見つけることが目的であり、すべてのセルを再確認する必要はありません。

ステップ4 — ダウンロードして分析します。出力は1つのExcelファイルです。「品目名」と「単価」で並べ替えると、ベンダー間の価格比較ができます。「フードコスト率」で並べ替えると、価格調整が必要な料理を特定できます。「カテゴリ」(たんぱく質、乳製品、青果、乾物)でグループ化したピボットテーブルを作成すると、先週から変動したコストカテゴリを確認できます。ファイルは週の日付を付けて保存します。列構造は毎週一貫しているため、各週の出力を保存するだけで価格履歴を積み重ねられます。

複数の拠点を運営するグループの場合、抽出テンプレートに「拠点」列を追加するか(または拠点ごとに別のフォルダを使用する)、同じワークフローを3倍のボリュームで、拠点ごとの追加設定なしで適用できます。さらに大量の請求書を処理する事業者向けには、専用のバッチ請求書からExcelへのアップロードフローが用意されており、一括処理が可能です。

単一の請求書ワークフロー(1つのサプライヤー文書からデータを抽出する必要がある場合)は、一般的な請求書データ抽出ページで、標準のアップロードフローと完全なテンプレートシステムをご利用いただけます。

よくある質問

1回のバッチで処理できる請求書の数は?

バッチアップロードのファイル数に厳密な上限はありません。実質的な制約は総ページ数です。平均3ページの請求書25件(計75ページ)のバッチは1ジョブで処理できます。非常に大きなバッチ(50件以上の複数ページPDF)の場合は、ブロードライン業者と専門サプライヤーなど、仕入先カテゴリ別に2回に分けてアップロードすると、処理時間が管理しやすくなり、レビューも容易になります。

バッチ内の1件の請求書だけ、他のものとフォーマットがまったく異なる場合はどうなりますか?

問題は発生しません。列名の抽出は位置ではなく意味に基づいて行われます。手書きの青果メモとフォーマットされたSysco PDFのどちらにも「請求日」「仕入先名」「明細」「金額」が含まれていますが、表示方法が異なるだけです。AIはページ上の位置に関係なく各データ項目を見つけ出します。手書きメモの出力行はSysco PDFの出力行と同じ列を持ちます。手書きの請求書に項目が少ない場合(商品コードや税額明細がないなど)、一部のセルは空白になりますが、列構造はバッチ内の全行で維持されます。

通常の請求書に混ざってクレジットメモや調整伝票があってもAIは処理できますか?

はい、適切な列定義があれば可能です。テンプレートに「書類種別」や「取引種別」などの列を含めると、AIは文書の内容に基づいて各行を「請求書」「クレジットメモ」「調整」とラベル付けします。クレジットメモは明細合計列にマイナス値として表示されます。買掛金照合の際は、支払実行前に書類種別で出力を並べ替えて、クレジットと請求を分けてください。

仕入先ごとに個別のテンプレートを作成する必要がありますか?

いいえ。単一の列名テンプレートは、バッチ内のすべての仕入先で機能します。これが、テンプレートベースのツール(固定位置で抽出するため仕入先ごとのマッピングが必要)と、列名抽出(意味でデータを見つける)の根本的な違いです。「品目名」という列は、Syscoの請求書、US Foodsの請求書、手書きの青果メモ、飲料卸業者のPDFで、それぞれ個別に設定しなくても品目名を見つけ出します。これにより、新しい仕入先を追加するたびに設定コストが増大することなく、バッチ処理が実現可能になります。

仕入先間で材料名が一致しない場合、AIはどのように処理しますか?

AIは材料名を文字の一致ではなく、意味で読み取ります。「BNLS SKNLS CHKN BRST 6OZ」「Chicken Breast Boneless」、手書きの「chx breast」はすべて、同じ材料を表しているとモデルが理解するため、同じ列にマッピングされます。仕入先間での正確な比較には、「品目名」列と「製品コード」列の両方を含めてください。品目名は正規化された材料を、製品コードは必要に応じて正確に一致させるための仕入先固有の識別子を提供します。

発注番号や納品日など、請求書の特定の項目を抽出する必要がある場合、各仕入先の請求書で表示が異なるとどうなりますか?

テンプレートにフィールドを列として追加します。「PO番号」は、ベンダーが「PO#」「発注書」「注文参照」「参照番号」などと表記していても、AIがこれらを同一概念と理解し、同じ列にマッピングします。特定のベンダーの請求書にPO番号がない場合、その行のセルは空白になります。バッチの残りの処理は中断なく続行されます。請求書から特定のデータポイントのみを抽出する(明細全体ではなく)場合は、請求書フィールド抽出ツールが対象データに最適化されたテンプレートを提供します。

バッチ抽出と1件ずつの処理では、精度にどのような違いがありますか?

ドキュメントごとの精度は同じです。AIはバッチ内の各ドキュメントに、単一アップロード時と同じ抽出処理を適用します。実用的な違いは、バッチモードではレビューステップが追加されることです。すべての行を検査する必要はありませんが、ベンダーごとに2~3明細をスポットチェックしてください。主要な仕入先からの印刷された表データの場合、認識精度は最大99%に達します。手書きメモや低品質のスマートフォン写真の場合、精度は判読性に依存します。きれいに書かれた納品書の鮮明な写真は確実に抽出できますが、斜めに書かれた色あせたカーボンコピーには欠落が生じます。推奨事項は単一請求書処理と同じです。平らな面で良好な光の下で鮮明な写真を撮影し、難しいドキュメントにはPrecision+を有効にし、手書きや低品質の入力については抽出値を元の画像と照合して確認してください。

火曜納品分のスタックをアップロードすれば、10枚のスプレッドシートは1枚に。

一括処理を試す

一般請求書処理ページから単一書類のワークフローもご利用いただけます。

📮 contact email: [email protected]