Media > AI活用ユースケース > 経理 > 支払う前に請求書と発注・契約を突き合わせて、二重払いと過払いを止める

支払う前に請求書と発注・契約を突き合わせて、二重払いと過払いを止める

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

受け取った請求書を、支払データを作る直前に止めて、過去の支払履歴・発注データ・契約の単価表と突き合わせます。3つのルールで判定し、止めるべきものだけを人に回します。全件を目で見る確認がなくなります。

サマリー
利用ツール
AWS Textract/Azure AI/ChatGPT/Claude/Gemini/Google Document AI/Python
対象業界
その他/士業/小売/建設/製造
対象部門
経理/財務
対象業務
内容確認・チェック/比較検討
主な課題
人手が足りない/入力作業が多い/確認ミスが多い
AIで行う処理
読み取り(OCR)
主な効果
入力漏れ削減/品質標準化/工数削減
導入難易度
★★★☆☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
条件付き
現在工数
60h/月
AI導入後
20h/月
想定削減
67%
年間削減
480h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 請求書を受け取る(郵送、メール添付のPDF、メール本文に金額だけ書かれたもの)
  2. 紙はスキャンし、PDFは共有フォルダに保存する
  3. 会計システムに支払データを手入力する
  4. 入力のたびに、過去の支払履歴を取引先名と金額で検索し、同じものが無いか見る
  5. 基幹システムの発注データを開き、単価と数量を照合する
  6. 差異があれば、発注担当者にメールまたは電話で確認する
  7. 確認した内容を請求書の余白または管理表にメモする
  8. 支払データを確定し、支払を実行する
導入後(After)
  1. 請求書を受け取り、スキャンまたは保存する(ここは変わらない)
  2. 自動支払データを作る前段で、請求書の項目と明細を読み取る
  3. 自動過去12か月の支払履歴と、取引先・金額・期間・明細の類似で照合する
  4. 自動基幹システムの発注データと、明細の単価・数量を照合する
  5. 自動契約の単価表・費目マスタと照合し、契約に無い行を洗い出す
  6. 自動3つの結果を合わせて、通す/止める/要確認のいずれかを判定する
  7. 自動止める・要確認と判定した理由を、根拠の数値とともに文章にする
  8. 止める・要確認のものだけを担当者が確認し、解除するか差し戻すかを決める
  9. 解除した理由を記録する
  10. 自動通したものを支払データとして会計システムへ渡す
各工程の詳しい説明を読む
  1. 請求書を受け取る(郵送、メール添付のPDF、メール本文に金額だけ書かれたもの)
  2. 紙はスキャンし、PDFは共有フォルダに保存する
  3. 会計システムに支払データを手入力する
  4. 入力のたびに、過去の支払履歴を取引先名と金額で検索し、同じものが無いか見る
  5. 基幹システムの発注データを開き、単価と数量を照合する
  6. 差異があれば、発注担当者にメールまたは電話で確認する
  7. 確認した内容を請求書の余白または管理表にメモする
  8. 支払データを確定し、支払を実行する

問題は4つあります。

(a)履歴の検索が人の記憶に頼っている。 会計システムは取引先コードと金額で引けますが、再送では金額も明細の書き方も少し変わっていることがあります。 「前に似たものを見た気がする」と思った人だけが深く調べ、思わなかった人は通します。

(b)発注データとの照合が明細単位になっていない。 合計金額が発注額の範囲に収まっていれば通す運用になりがちです。明細の1行ごとに単価を見る時間は、600件分はありません。 結果として、単価の食い違いと契約外の費目が、合計の中に紛れます。

(c)確認の記録が残らない。 余白のメモと担当者の記憶が記録です。同じ取引先で同じ差異が繰り返し起きていても、それが繰り返しだと気づけません。 毎回、初めて見る差異として扱われます。

(d)繁忙期に確認が形だけになる。 締め直後の2日間に600件が集中します。このとき、確認の深さは人によって、日によって変わります。 品質が安定しないこと自体が、この業務の最大の問題です。

  1. 請求書を受け取り、スキャンまたは保存する(ここは変わらない)
  2. 【自動】 支払データを作る前段で、請求書の項目と明細を読み取る
  3. 【自動】 過去12か月の支払履歴と、取引先・金額・期間・明細の類似で照合する
  4. 【自動】 基幹システムの発注データと、明細の単価・数量を照合する
  5. 【自動】 契約の単価表・費目マスタと照合し、契約に無い行を洗い出す
  6. 【自動】 3つの結果を合わせて、通す/止める/要確認のいずれかを判定する
  7. 【自動】 止める・要確認と判定した理由を、根拠の数値とともに文章にする
  8. 【人】 止める・要確認のものだけを担当者が確認し、解除するか差し戻すかを決める
  9. 【人】 解除した理由を記録する
  10. 【自動】 通したものを支払データとして会計システムへ渡す

自動化されるのは「探す」「比べる」「差を出す」「理由を書く」の4つです。残るのは「止まったものを人が判断する」ことです。

8番目が、この構成のすべてです。 機械は「発注の単価は1,200円、請求は1,320円、差は120円で10.0%」までしか言えません。その差を認めるかどうかは、値上げの合意があったかどうかの話であり、人にしか分かりません。

02今回想定するシステム構成

構成図
請求書(紙・PDF・メール添付)
   │
   ▼
スキャン/保存
   │
   ▼【トリガー】支払データ作成の前段
   │
   ├──▶ 請求書の項目を読み取る
   │
   ├──▶ 過去12か月の支払履歴と照合
   │
   ├──▶ 発注データと単価・数量を照合
   │
   ├──▶ 契約の単価表と照合
   │
   ▼
判定(通す/止める/要確認)
   │
   ▼
【人が止めるものだけ確認】
   │
   ▼
支払データへ
役割想定する製品代替候補
OCRAzure AI Document Intelligence(事前構築済み請求書モデル)Google Document AI、AWS Textract
生成AIClaude API(突合結果の説明文と論点の整理)OpenAI API、Gemini API
差異計算Python

会計システムと基幹システムは、この表に入れていません。どちらも既にある社内のシステムで、この構成が新しく足すものではないからです。 発注データは基幹システムから読み、判定を通った支払データは会計システムへ渡します。

この構成の土台は、請求書の読み取りです。 Azure AI Document Intelligence の請求書モデルは光学式文字認識(OCR)機能で、売上請求書・公共料金・発注書から主要なフィールドと品目を分析・抽出します。現在27言語の請求書をサポートしています。 サポートされるドキュメントの種類は、請求書、光熱費、販売注文、発注書です。

入力形式はPDFと画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)です。Office形式(DOCX、XLSX、PPTX、HTML)は「読む」「レイアウト」「カスタム分類」で対応し、事前構築済みモデルはPDFと画像が対象です。 請求書がExcelで届く会社は、PDFに変換してから渡す手順を決めておいてください。

PDFとTIFFは最大2,000ページまで処理でき、ファイルサイズは有料(S0)レベルで500MB、Free(F0)レベルで4MBです。Freeレベルでは最初の2ページのみが処理されます。 明細が3ページに及ぶ請求書は珍しくないので、試用で気づかないと「明細が途中で切れる」という結果だけで諦めることになります。

そして、この設計にとっていちばん重要な仕様があります。 JSON出力は3つの部分に分かれます。readResults(認識された全テキストと選択マークを、ページ・行・単語で整理したもの)、pageResults(境界ボックスで抽出されたテーブルとセル、信頼度、readResults 内の行と単語への参照)、documentResults(モデルが検出した請求書固有の値と品目。請求書ID、出荷先、請求先、顧客、合計、明細などを探す場所)です。

pageResults に信頼度が含まれることが、この構成の要です。 読み取りに自信が無いところを機械が自分で申告できるので、低信頼の項目は突合の対象にせず、そのまま人へ回すという設計が取れます。 読み間違いを差異として扱わずに済みます。

03どうやって実装するのか

Step1

処理の起点を決める

支払データを作る処理の前段を起点にします。請求書を受け取った時点ではありません。

理由は2つあります。1つは、受け取った時点では発注データが基幹システムに登録されていないことがあるためです。突き合わせる相手がまだ無い状態で判定すると、全件が「発注データ無し」で止まります。 もう1つは、支払の直前でまとめて判定したほうが、二重払いの検出に有利だからです。同じ締めの中に入っている請求どうしを、同時に比べられます。

支払は月2回なので、締め日の翌営業日に、その回に含める請求書をまとめて処理します。1回あたり約300件です。

Step2

入力データを集める

データ中身取得元
請求書請求書ID、取引先、日付、合計、明細(品名・数量・単価・金額)スキャン画像とPDF
支払履歴過去12か月の支払済みデータ(取引先、金額、明細、支払日、請求書ID)会計システム
発注データ発注番号、取引先、明細行の品名・数量・単価、納品実績基幹システム
契約の単価表取引先ごとの品目と単価、有効期間基幹システムまたはマスタ管理の表
費目マスタ認めている費目の一覧(諸経費、運賃などの扱い)会計システム
取引先マスタ取引先コード、名称の表記ゆれ、支店・営業所の別基幹システム

この6つのうち、いちばん手間がかかるのは契約の単価表です。 多くの会社で、単価は契約書のPDFの中にしかありません。表として持っていないなら、3つ目のルールは最初から動きません。 全社分をそろえてから始めず、取引金額の上位50社だけを表にして、その範囲でルールを効かせてください。

Step3

データの取得方法を決める

請求書: 紙はスキャナで取り込みます。画像の寸法は50×50ピクセルから10,000×10,000ピクセルの間である必要があります。 抽出するテキストの最小高さは、1024×768の画像で12ピクセル(150dpiで約8ポイントのテキストに相当)です。明細の文字が小さい請求書があるので、スキャンの解像度をここから逆算して決めてください。

パスワードでロックされたPDFは、提出前にロックを解除する必要があります。 請求書にパスワードをかけて送ってくる取引先があるので、受信の窓口で解除してから保存する手順を運用に組み込みます。

支払履歴と発注データ: 基幹システムと会計システムからの取得は、データベースへの参照または日次の抽出ファイルで行います。書き込みはしません。 読むだけなので、権限の申請も通りやすくなります。

メール本文だけの請求: 添付の無い、本文に金額だけ書かれたメールは読み取りの対象外にし、最初から人の処理に回します。無理に機械に入れると、判定の信頼を落とします。

Step4

AIへ渡す前に整形する

  1. 取引先の名寄せ … 請求書の社名を取引先マスタのコードに変換します。「株式会社」の位置、支店名の有無、旧社名で表記が揺れ、ここが合わないと支払履歴の照合がまるごと空振りします
  2. 明細の正規化 … 品名の全角と半角、単位(本・m・式)、数量と単価の桁を整えます。「一式」の行は数量の比較ができないので、金額だけで見る扱いに分けます
  3. 低信頼の項目の切り出しpageResults の信頼度が基準を下回る項目に印を付けます。この項目は差異の判定に使わず、人の確認へ回します
  4. 同一締め内の重複の先出し … 今回の処理対象の中だけで、取引先・金額が一致する組を先に洗います。同じ請求が2通届いているケースが、ここで出ます
  5. 過去12か月への絞り込み … 支払履歴は全期間ではなく12か月に絞ります。それ以前の再送は実務上ほぼ無く、比較の対象を増やすと誤検知が増えます
Step5

AIに処理させる

役割を3つに分けます。ここを混ぜないことが設計の中心です。

担当させること
OCR請求書の項目と明細を、信頼度つきで取り出す
Python履歴・発注・契約との突合と、差額・差率の計算、しきい値の判定
生成AI明細の品名が発注のどの行に当たるかの対応づけと、判定理由の文章化

差額の計算を生成AIにさせません。 金額の判定は必ず同じ答えが出る必要があり、計算はPythonで行います。生成AIに任せるのは、計算ではなく対応づけと説明です。

対応づけが必要なのは、請求書の品名と発注の品名が一致しないからです。発注書の「配管用炭素鋼鋼管 50A」が、請求書では「鋼管50A」と書かれます。この2つが同じ行だと判断するところに、生成AIを使います。

突合のルールは3つです。

見るもの判定の条件出す結果
二重払い同一取引先・同一金額・近接した期間・明細の類似duplicate_suspect
単価・数量発注データとの差分(率と額の両方でしきい値を持つ)price_mismatch / qty_mismatch
契約外の費目契約の単価表・費目マスタに無い行の存在unlisted_item

しきい値を率と額の両方で持つ理由を、はっきりさせておきます。

率だけで持つと、少額の請求で誤検知が増えます。3,000円の請求で単価が300円ずれていれば10.0%ですが、実務上は端数処理の違いで説明が付く範囲です。これを全部止めると、止まる件数が増えすぎて確認が回りません。

額だけで持つと、大口の請求の小さなずれを見逃します。500万円の請求で単価が0.5%ずれていても、額では2万5千円です。額のしきい値が5万円なら通ってしまいますが、これが毎月続けば年間30万円になります。

だから、率が基準を超えるか、額が基準を超えるかのどちらかで止めます。 両方を満たしたときだけ止める設計にしないでください。逆になります。

Step6

指示内容を固定する

あなたは、受け取った請求書の明細を、発注データの明細行に
対応づける作業を支援する立場です。
金額の計算と、支払を止めるかどうかの判断はしません。
対応づけと、差異の説明だけを行ってください。

【厳守事項】
- 請求書と発注データに書かれていないことを補わないでください。
  「おそらく同じ品目だろう」という推測で対応づけないでください。
- 対応づけの根拠を必ず示してください。品名のどの部分が一致したか、
  数量または単位がどう対応するかを matched_on に書いてください。
- 対応する発注の行が特定できない場合は po_line_ref を null にし、
  reason に「特定できない」と書いてください。
  近そうな行を無理に選ばないでください。
- 請求書に記載がない項目は unknown_fields に項目名を入れ、
  値は null にしてください。記載がなければ不明とします。
  発注データの値で埋めないでください。
- 読み取りの信頼度が低いと印が付いた項目は、対応づけの根拠に
  使わないでください。low_confidence_used に項目名を残してください。
- 「一式」「まとめて」のように数量が数えられない行は、
  quantity_comparable を false にしてください。
- 金額、差額、差率を自分で計算しないでください。
  与えられた数値をそのまま参照してください。
- 支払を止めるべきかどうかの結論を書かないでください。

【請求書の読み取り結果(信頼度つき)】
{invoice_json}

【この取引先の発注データ(明細行)】
{purchase_order_lines}

【この取引先の契約の単価表】
{contract_price_list}

【認めている費目の一覧】
{expense_categories}

「金額を自分で計算しないでください」という指示が、この構成でいちばん重要です。 生成AIに計算させると、答えが毎回同じになる保証がありません。支払の可否に関わる数値は、必ず同じ答えが出る方法で求めます。

「近そうな行を無理に選ばない」も必須です。 対応づけを無理に作ると、本来は発注に無い行(つまり unlisted_item)が、既存の行に吸収されて消えます。検出したいものが、対応づけの親切さで消えるのがいちばん危ない失敗です。

Step7

出力形式を固定する

{
  "invoice": {
    "invoice_id": "",
    "vendor_code": "",
    "issue_date": "",
    "total": 0,
    "source_file": "",
    "low_confidence_fields": []
  },
  "lines": [
    {
      "no": 1,
      "description": "",
      "qty": 0,
      "unit_price": 0,
      "amount": 0,
      "po_line_ref": null,
      "matched_on": "",
      "quantity_comparable": true
    }
  ],
  "checks": [
    {
      "rule": "duplicate_suspect",
      "hit": true,
      "evidence": {
        "matched_payment_id": "",
        "days_apart": 0,
        "amount_diff": 0,
        "line_similarity": 0.0
      },
      "reason": ""
    }
  ],
  "decision": "pass",
  "severity": "block",
  "unknown_fields": []
}

構造化する理由は、判定の根拠を後から再現できるようにするためです。 支払を止めた判断は、取引先への支払遅延につながります。「なぜ止めたのか」を聞かれたときに、evidence の中身をそのまま示せる状態にしておきます。

evidence に数値をそのまま残します。「二重払いの疑いがあります」という文章だけでは、確認する人は結局もとのデータを開き直します。「同じ取引先へ18日前に同額の支払があり、明細の一致度は0.92」まで出ていれば、開かずに判断できます。

decisionseverity を分けるのは、「止める」と「後で見る」を区別するためです。 同じ duplicate_suspect でも、明細まで一致していれば止め、金額だけの一致なら後で見る、という運用ができます。

Step8

システムへ連携する

つなぎ先方式内容
OCRサービスAPI請求書の読み取り
生成AIサービスAPI明細の対応づけと説明文の生成
基幹システム参照発注データ、契約の単価表、取引先マスタ
会計システム参照過去12か月の支払履歴、費目マスタ
会計システム書き込み判定を通った支払データ
確認画面社内アプリ止まったものの一覧と解除操作

会計システムへの書き込みは、人の解除を経たものだけにします。 止まったものは人が解除するまで渡しません。「自動で渡さない」ことを仕組みで保証してください。 運用の約束にすると、繁忙期に崩れます。

確認画面は作る価値があります。 止まったものの一覧に evidence と請求書の画像を並べておけば、1件の確認が1分から2分で終わります。基幹システムと会計システムを行き来させないことが、削減効果の大部分を作ります。

Step9

人が確認する

確認するのは、止まったものと要確認のものだけです。通ったものは見ません。

600件を全部見る運用を続けるなら、機械を入れる意味はありません。ただし、見ないと決めた以上、見なかったものが後で問題にならないかを測る必要があります(第13章)。

確認を速くするための設計を並べます。

  • 止まったものを severity の順に並べる(block を上に)
  • 1件の画面に、請求書の画像・読み取り結果・突合の相手(履歴または発注行)を横に並べて置く
  • evidence の数値を、文章より先に見える位置に出す
  • 低信頼の項目に印を付け、読み間違いの可能性を先に疑えるようにする
  • 解除するときに、理由を選択肢から選ばせる(値上げの合意済み/発注の登録漏れ/端数処理/その他)
  • 同じ取引先で過去に同じ理由で解除した件数を、その場に表示する

最後の1つが効きます。「この取引先は先月も同じ理由で3件解除している」と見えれば、それは個別の例外ではなく、発注データの登録が遅れているという業務の問題です。

Step10

例外に対処する

起きること対応
発注データが登録されていないpass にせず、unmatched_po として人へ回す。発注が無いまま払わない
契約の単価表が無い取引先3つ目のルールを適用せず、その旨を判定結果に明記する。無言で通さない
取引先名が名寄せできない支払履歴の照合が空振りするため、必ず人へ回す
読み取りの信頼度が低い差異の判定に使わず、低信頼の項目として人へ回す
明細が2,000ページを超える処理の上限を超えるため、分割して読み取る運用にする
請求書がOffice形式で届く事前構築済みモデルはPDFと画像が対象。PDFに変換してから渡す
パスワード付きPDF受信の窓口でロックを解除してから保存する
メール本文だけの請求読み取りの対象外。最初から人の処理に回す
「一式」で数量が比較できないquantity_comparable を false にし、金額だけで判定する
端数処理の違いで差額が出る額のしきい値を下回るものは通す。率だけで止めない
同じ締めの中に同一請求が2通前処理の段階で組にして、両方を人へ回す
値引きの戻しがマイナス行で来る費目マスタに登録し、unlisted_item にしない
支払を止めたが取引先に非が無かった解除の理由を記録し、支払遅延の連絡を人が行う
判定処理が締めの当日に失敗した全件を人の確認に回す。判定なしで自動で通さない
Step11

記録を残す

  • 請求書の画像・PDFの原本と、読み取りの結果(信頼度を含む)
  • 突合に使った支払履歴・発注データ・単価表の、その時点の値
  • 3つのルールそれぞれの判定結果と evidence
  • 人が解除した件と、選んだ理由
  • 人が差し戻した件と、その後どうなったか
  • 通した件の判定結果(人が見ていないものも全部残す

4つ目と6つ目が、改善の材料になります。 解除の理由が「発注の登録漏れ」に偏っているなら、直すのは判定のしきい値ではなく、発注の登録の運用です。機械の精度の問題に見えるものが、業務の問題であることは珍しくありません。

6つ目を必ず残してください。 人が見なかったものを残しておかないと、後から「見逃しがあったか」を確かめる方法がなくなります。

突合に使った相手のデータも、その時点の値で残します。 発注データは後から修正されるので、半年後に「なぜこれを通したのか」を調べるとき、現在の値を見ても再現できません。

04実装レベルの3段階

最小構成:支払履歴からの二重払い候補の抽出のみ(表計算) / 履歴の検索
半自動化:上記+OCRでの読み取り+発注データとの単価・数量の照合 / 履歴の検索と単価の照合
本格構成:上記+契約の単価表との照合+確認画面+会計システムへの引き渡し / 解除の判断以外

最小構成だけでも、1件6分が4分程度になります。 履歴の検索という、いちばん当てのない作業が消えるためです。 半自動化で4分から3分程度になります。 発注データを開いて明細を目で追う作業が消えます。ただし、基幹システムと会計システムを人が行き来する形は残ります。 本格構成にして初めて2分になります。 確認画面に必要なものが集まり、止まったものだけを見る形になるからです。月600件という件数では、本格構成まで作らないと効果が出にくい点に注意してください。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
4 名
月間件数
600 件
1件あたり現在時間
6 分
1件あたり導入後時間
2 分
現在  600件 × 6分 ÷ 60 = 60 時間/月
導入後 600件 × 2分 ÷ 60 = 20 時間/月
月間削減時間
40h
削減率
67%
年間削減時間
480h
年間金額換算(時間単価3,500円)
168万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 月に数百枚の請求書を受け取り、支払を月2回程度にまとめて実行している企業。同じ取引先から紙・PDF・メール本文と複数の経路で請求が届き、再送なのか新規の請求なのかの区別が付きにくい場合。発注データが基幹システムに入っており、請求と突き合わせる相手のデータがそろっている場合。
向いていない
  1. 請求書が月に数十枚で、担当者が取引ごとの経緯を全部覚えていられる規模の場合。発注をシステムで管理しておらず、請求と突き合わせる相手のデータがそろわない場合。請求がすべて定額の契約で毎月の金額が動かず、単価や数量の食い違いも契約外の費目もそもそも起きない場合。

07最小構成で試す方法

  1. 先月支払った請求書のうち、金額の大きい順に30件を選ぶ
  2. 対応する発注データを表にして手元にそろえる
  3. 請求書のPDFをOCRに通し、明細を取り出す
  4. 表計算ソフトで、単価と数量の差額・差率を出す
  5. 差が出た行を、発注担当者に確認する

この5番目までを、機械を作らずにやってください。 目的は、差異が実際に何件出るのかを知ることです。

判断の目安は次のとおりです。

30件で差異が出た件数判断
5件以上突合の効果が大きい。3つのルールをすべて作る価値がある
1件から4件単価・数量のルールから作る。契約の単価表の整備は後回しでよい
0件二重払いのルールだけを作る。過払いは起きていない可能性が高い

0件なら、この構成を作らないという判断も正しい結論です。 発注の管理が機能しているということで、残る問題は二重払いだけになります。 二重払いのルールは支払履歴だけで作れるので、はるかに軽く済みます。

08実装時につまずきやすいポイント

問題対策
キーと値のペアが取れないキーと値のペアの返却は既定では無効。 オプションで有効にする
キーだけが出て値が無い仕様上、キーが存在しても関連付けられた値が無い場合がある。値が無いことを不明として扱い、埋めない
どのフィールドが取れるか分からない抽出フィールドの一覧は、サンプルリポジトリの「invoice モデル スキーマ」のページで確認する
明細の文字が小さくて読めない最小の文字高さは1024×768の画像で12ピクセル。 スキャンの解像度をここから決める
3ページ目以降が読まれないFreeレベルは最初の2ページのみ。 明細の長い請求書は有料のレベルで処理する
請求書がExcelで届く事前構築済みモデルはPDFと画像が対象。PDFに変換する手順を決める
取引先名が一致しない名寄せのマスタを先に作る。支店・営業所ごとにコードが分かれている場合に注意
止まる件数が多すぎるしきい値を額と率の両方で持ち、額の下限を上げる。率だけで止めない
止まる件数が少なすぎる大口の請求で率の基準を下げる。額だけで止めない
契約の単価表が存在しない取引金額の上位の取引先から表にする。全社分をそろえてから始めない
品名が対応づかず全部が契約外になる対応づけの根拠を出力させ、精度を測ってからルールを効かせる
発注の登録が支払に間に合わないunmatched_po として人へ回す。発注が無いまま自動で通さない
解除が形だけになる解除の理由を選択肢にし、同じ理由の過去の件数を画面に出す

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 取引先名、取引金額、単価、発注内容、支払口座の情報。取引先との契約単価は、外部に出ると取引条件そのものが漏れる情報です。

  1. 外部AIへの入力範囲 … 請求書には取引先の単価と、自社の発注内容が含まれます。入力を学習に使わないことが契約で保証されるサービスを選んでください。 口座番号のように突合に不要な項目は、渡す前に落とします
  2. アクセス権限 … 契約の単価表を見られる範囲を、支払担当者と購買部門に限定します。この表は全取引先の価格が1か所に集まったものになります
  3. 書き込みの権限 … 会計システムへの支払データの書き込みは、判定を通ったものに限ります。止まったものを機械が書き込める設計にしないでください
  4. 判定の記録 … 通した件も含めて、判定結果を全件保存します。監査で「なぜこれを人が見なかったのか」を問われる可能性があります
  5. 自動実行してよい範囲支払を止める判定を、自動で確定させません。「止める」は人が解除します。 機械が止めた支払が、機械の判断だけで取引先への遅延になることがあってはいけません
  6. 「通す」の自動化を急がない … 通す側を自動にしてよいかは、別の論点です。初期は全件の判定結果を記録し、人が見なかったものが後で問題にならないかを3か月測ってください。 測った結果を見てから、自動で通す範囲を広げます

6番目を飛ばさないでください。この構成の効果は「人が見ない件を作る」ことから来ています。 見ないと決めたものが本当に見なくてよかったのかは、3か月分の実績でしか確かめられません。 支払が済んだ後に取引先から指摘があった件と、決算の過程で見つかった差異を、機械の判定結果と突き合わせます。

誤りが起きた場合のリスクは2方向あります。通すべきものを止めれば支払の遅延になり、止めるべきものを通せば二重払いか過払いになります。 前者は連絡で回復できますが、後者は回収に手間がかかります。しきい値は、最初は止まる側に寄せて設定し、実績を見ながら緩めてください。

10まず何から始めるか

1週目:過去の支払データで二重払いを探す

過去12か月の支払データから、同一取引先・同一金額・90日以内の組を抽出します。表計算ソフトで出せます。 出てきた組を1件ずつ確かめてください。ここで実際の二重払いが1件でも見つかれば、この構成を作る理由が数字で示せます。

2週目:30件で差異を測る

先月の請求書から金額の大きい順に30件を選び、発注データと単価・数量を突き合わせます。手作業で構いません。 差異が何件出るかを数え、第8章の表で判断してください。

3週目:契約の単価表を作る

取引金額の上位50社について、品目と単価の表を作ります。全社分をそろえようとしないでください。 上位から始め、効果を見て広げます。

4週目以降: OCRの読み取りを試し、明細がどこまで正しく取れるかを確かめます。スキャンの解像度と、ページ数の上限に注意してください。 同時に、しきい値の候補を過去データで試し、止まる件数を見ます。

2か月目: 単価・数量のルールだけを動かし、判定結果を記録します。この段階では自動で通さず、全件を人が見ます。 機械の判定と人の判断がどれだけ一致するかを測るためです。

3か月目以降: 一致率が十分なら、通す側の自動化を始めます。通した件の判定結果は引き続き全件残し、3か月測ってから範囲を広げてください。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-09-22/最終更新:2026-09-22
確認した内容情報源確認日
請求書モデルが光学式文字認識(OCR)機能で、売上請求書・公共料金・発注書から主要なフィールドと品目を分析・抽出すること。現在27言語の請求書をサポートすること。サポートされるドキュメントの種類が請求書、光熱費、販売注文、発注書であること。入力形式がPDFと画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)で、Office形式(DOCX、XLSX、PPTX、HTML)は「読む」「レイアウト」「カスタム分類」で対応し、事前構築済みモデルはPDFと画像が対象であること。PDFとTIFFが最大2,000ページまで処理でき、Freeレベルは最初の2ページのみであること。ファイルサイズが有料(S0)レベルで500MB、Free(F0)レベルで4MBであること。画像の寸法が50×50ピクセルから10,000×10,000ピクセルの間である必要があること。抽出するテキストの最小高さが1024×768の画像で12ピクセル(150dpiで約8ポイントのテキストに相当)であること。パスワードでロックされたPDFは提出前にロックを解除する必要があること。JSON出力が readResultspageResultsdocumentResults の3つに分かれ、pageResults に信頼度が含まれ、documentResults に請求書ID・出荷先・請求先・顧客・合計・明細が含まれること。キーと値のペアの返却が既定では無効で、オプションで有効にできること。キーが存在しても関連付けられた値が無い場合があること。抽出フィールドの一覧がサンプルリポジトリの「invoice モデル スキーマ」のページにあることMicrosoft Learn: ドキュメント インテリジェンスの請求書モデル2026-09-22

支払を止める判断は、取引先との契約内容と商慣行に依存します。しきい値の設定と、止めたときの連絡の手順は、自社の購買部門と取引先との取り決めに合わせて決めてください。 本記事は突合の仕組みを示したものであり、個別の取引についての支払可否の判断を代替するものではありません。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-0156)についてのご相談はこちらから。

AI活用について相談する
目次