食品卸売業者の請求書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つの構造的な問題が浮上します。

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

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

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

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

10種類の異なるサプライヤーフォーマットで通用する列名の設計

バッチ処理において最も効果の高い判断は、列リストです。一度正しく設定すれば、残りの年間を通じてすべてのサプライヤーとすべての請求書で機能します。間違った設定(ベンダー固有すぎる、狭すぎる、または曖昧すぎる)をすると、抽出で節約した時間よりも、出力の編集に多くの時間を費やすことになります。

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

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

ベンダー名  |  請求書番号  |  請求日
品目名(印刷通り)  |  品目SKU / 製品コード
パックサイズ  |  単位(lb / case / each / gallon)
注文数量  |  単価
明細合計  |  単価(明細合計 ÷ パックサイズ、小数点以下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つの異なる行を出力し、必要な比較(仕入先間の単価の横比較)は実現しません。

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

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

ただし、実際には重要なトレードオフがあります。「Chicken Breast」を列名として定義し、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ドルを意味)、パックサイズが明示されていない品目あり(「each」と暗黙的に解釈)。
  • 飲料卸売業者: ケース価格とデポジット料金が別々に記載された2ページのPDF。ほとんどの食品請求書にはない、醸造日専用のフィールドあり。

テンプレートベースOCRでは、このバッチを処理するために仕入先ごとに4つの個別設定が必要です。地元の青果業者が週ごとに筆記スタイルやフォーマットを変えた場合、テンプレートは機能しなくなります。新しい仕入先が増えるごとに設定コストは増大し、メンテナンス自体が定期的なタスクとなります。

ビジョンモデルは、このような混在フォーマットを1回のバッチアップロードで処理します。各文書を位置ではなく意味で読み取るからです。「請求日」をSyscoのPDFではヘッダーに、US FoodsのPDFでは右上隅に、手書きメモでは上部に走り書きされた場所に見つけ出します。それは、各文書のどこを見るべきかを事前に指示したからではなく、請求日がどこに表示されていても認識できるからです。

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

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

バッチ規模での計算列:単価、原価率、仕入先比較 — 抽出中にすべて実行

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

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

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

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

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

3つの仕入先。1つのアップロード済みバッチ。単価は標準化され、原価率は計算され、仕入先比較は横並びで表示 — すべて抽出パス内で、すべて1つのスプレッドシートで完了します。

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

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

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

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

ステップ3 — すべての行ではなく、外れ値を確認します。バッチ出力には、各行のソースを特定する「仕入先名」列が含まれています。仕入先ごとに1~2品目をスポットチェックします。Syscoの鶏むね肉の行に正しい単価が表示されているか、手書きの青果メモで汚れた価格が誤読されていないかを確認します。25件の請求書(200行以上の明細)のレビューには約3分かかります。すべてのセルを再確認するのではなく、異常値に注目します。

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

複数拠点を運営するグループの場合、抽出テンプレートに「拠点」列を追加するか(または拠点ごとに別のフォルダを使用する)、同じワークフローを3倍のボリュームで、拠点ごとの追加設定なしで適用できます。さらに大量の請求書を処理する事業者向けには、専用のバッチ請求書のExcel変換アップロードフローが、一括請求書処理のために用意されています。毎週同じフォルダに納品書、領収書、その他の非請求書文書も含まれている場合は、より広範な混在文書セット向けバッチデータ抽出ワークフローの方が適切なハブとなります。

単票抽出ワークフロー(1つの仕入先文書からデータを抽出する必要がある場合)については、一般請求書データ抽出ページで、完全なテンプレートシステムを備えた標準のアップロードフローを提供しています。

よくある質問

1回のバッチで何枚の請求書を処理できますか?

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

バッチ内の1枚の請求書のフォーマットが他と完全に異なる場合はどうなりますか?

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

通常の請求書とクレジットメモや調整伝票が混在していても、AIは処理できますか?

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

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

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

ベンダー間で原材料名が一致しない場合、AIはどのように処理しますか?

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

発注番号や納品日など、ベンダーごとに異なる形式で記載される特定の請求書フィールドを抽出する必要がある場合はどうすればよいですか?

そのフィールドをテンプレートに列として追加してください。「発注番号」は、ベンダーが「PO#」「Purchase Order」「Order Ref」「Reference Number」のいずれでラベル付けしていても、発注番号を見つけ出します。AIはこれらが同じ概念を指すことを理解し、同じ列にマッピングします。特定のベンダーの請求書に発注番号が含まれていない場合、その行のセルは空白になります。バッチの残りの部分は中断することなく抽出を続行します。請求書から明細全体ではなく特定のデータポイントのみを抽出する、焦点を絞ったフィールド抽出には、請求書フィールド抽出ツールが、対象を絞った請求書データポイント用に最適化されたテンプレートを提供します。

バッチ抽出の精度は、請求書を1枚ずつ処理する場合と比べてどうですか?

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

火曜日の納品スタックをアップロードして、1つのスプレッドシートを取得 — 10枚のスプレッドシートではありません。

バッチ処理を試す

単一ドキュメントのワークフローについては、一般的な請求書処理ページからもご利用いただけます。

📮 contact email: [email protected]