協力会社から毎月届く出来高の請求書を読み取り、注文書の契約金額と現場の出来高査定に照らして、出来高率の食い違いと請求の重複を支払い前に見つける
協力会社から毎月届く出来高の請求書を読み取り、注文番号・契約金額・前回までの累計・今回の出来高を照合の形にそろえます。注文書と現場の出来高査定、前月までの支払実績と照らし、出来高率の食い違いと請求の重複を支払い前に出します。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 対象業界
- 不動産/建設
- 対象部門
- 経理/購買
- 対象業務
- 内容確認・チェック/比較検討
- 主な課題
- 人手が足りない/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 協力会社から出来高の請求書が届き、スキャンして現場ごとのフォルダに保存する
- 担当者が請求書を開き、注文番号・契約金額・前回までの累計・今回の出来高・相殺の項目を照合の表に写す
- 原価管理システムで注文を開き、変更契約を含めた契約金額と照らす
- 現場の出来高査定を開き、請求の出来高率と査定の出来高率を照らす
- 支払データの台帳を開き、前月までに支払った累計と、請求書の前回までの累計を照らす
- 合わないものを現場と協力会社に問い合わせ、査定どおりに直した額で支払に回すか、請求書の出し直しを頼む
- 照合を終えたものを会計システムへ入力し、支払に回す
- 人紙の請求書をスキャンし、PDFで届いたものとあわせて受付フォルダに保存する
- 自動保存をきっかけに処理が動き、形式・サイズ・ページ数を確かめる
- 自動Azure AI Document Intelligence のレイアウトモデルが、請求書の文字・表・キーと値の組を信頼度つきで返す
- 自動Azure OpenAI が、書式の違う請求書を同じ項目(注文番号・契約金額・前回累計・今回出来高・相殺)に並べ直す
- 自動プログラムが、原価管理システムの注文・出来高査定と、支払データの累計を引いて、差を計算する
- 自動差のある請求に理由の区分(出来高率の超過・累計の不一致・契約金額の不一致・相殺の違い)を付け、確認の一覧にする
- 人担当者が、差のある請求と信頼度の低い項目だけを原本で確かめる
- 人現場の所長に査定との差を確かめ、支払う額を決める
- 【人/自動】 差の無い請求と、額を決めた請求を会計システムへの入力用ファイルに書き出す
各工程の詳しい説明を読む
- 協力会社から出来高の請求書が届き、スキャンして現場ごとのフォルダに保存する
- 担当者が請求書を開き、注文番号・契約金額・前回までの累計・今回の出来高・相殺の項目を照合の表に写す
- 原価管理システムで注文を開き、変更契約を含めた契約金額と照らす
- 現場の出来高査定を開き、請求の出来高率と査定の出来高率を照らす
- 支払データの台帳を開き、前月までに支払った累計と、請求書の前回までの累計を照らす
- 合わないものを現場と協力会社に問い合わせ、査定どおりに直した額で支払に回すか、請求書の出し直しを頼む
- 照合を終えたものを会計システムへ入力し、支払に回す
(a)1件で4つの画面を行き来する。 請求書、注文、査定、支払実績が、それぞれ別の場所にあります。1件20分のうち、半分近くは画面を開いて探す時間です。
(b)出来高率が査定より高い請求を見落とす。 請求は60%、査定は55%。5ポイントの差は、契約金額が大きい注文ほど大きな金額になります。 急いでいる週は、今回の請求額が前月と近ければ通してしまいます。
(c)前月と同じ出来高が二度請求される。 前回までの累計を書き間違えた、前月の請求が遅れて届いたため今月の請求に前月分を足した。今回の請求額だけ見ていると、合計が契約金額を超えるまで気づきません。
(d)相殺の項目が協力会社ごとに違う。 安全協力会費、産業廃棄物の処理費、支給した資材の代金。どの項目を差し引くかは注文ごとの取り決めで、請求書の書式によって差し引いた後の額で書かれていたり、前の額で書かれていたりします。
- 【人】 紙の請求書をスキャンし、PDFで届いたものとあわせて受付フォルダに保存する
- 【自動】 保存をきっかけに処理が動き、形式・サイズ・ページ数を確かめる
- 【自動】 Azure AI Document Intelligence のレイアウトモデルが、請求書の文字・表・キーと値の組を信頼度つきで返す
- 【自動】 Azure OpenAI が、書式の違う請求書を同じ項目(注文番号・契約金額・前回累計・今回出来高・相殺)に並べ直す
- 【自動】 プログラムが、原価管理システムの注文・出来高査定と、支払データの累計を引いて、差を計算する
- 【自動】 差のある請求に理由の区分(出来高率の超過・累計の不一致・契約金額の不一致・相殺の違い)を付け、確認の一覧にする
- 【人】 担当者が、差のある請求と信頼度の低い項目だけを原本で確かめる
- 【人】 現場の所長に査定との差を確かめ、支払う額を決める
- 【人/自動】 差の無い請求と、額を決めた請求を会計システムへの入力用ファイルに書き出す
7番目と8番目が、この設計の分かれ目です。 差を見つけるのは機械ですが、差をどう扱うかを決めるのは人です。 査定が遅れているだけのこともあれば、協力会社の請求が先走っていることもあります。
5番目の計算をプログラムに置いているのも意図してのことです。 出来高率と累計の差は、数字を引けば決まります。AIに計算させると、桁や丸めの扱いが請求ごとに揺れます。 AIには、書式の違う請求書を同じ項目に並べ直すところだけをさせます。
02今回想定するシステム構成
出来高の請求書(紙をスキャン・PDF) ▼【トリガー】受付フォルダ(Azure Blob Storage のコンテナー)への保存 Azure Functions ── 形式・サイズ・ページ数の確認 ▼ Azure AI Document Intelligence(レイアウトモデル、キーと値の組を有効化) │ 文字・表・キーと値の組・信頼度 ▼ Azure OpenAI ── 請求書の項目への並べ直し(構造化出力) ▼ Azure Functions ── 原価管理システムの注文・査定、支払データの累計と照合して差を計算 ▼ 確認の一覧(差のある請求だけ) ▼ 【担当者と所長が確認】──▶ 会計システムへの入力用ファイル
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence(レイアウトモデル prebuilt-layout) | Google Document AI、AWS Textract(英文の書類に限る) |
| 生成AI | Azure OpenAI(Microsoft Foundry)(書式の違う請求書の項目への並べ直し) | Claude API、Gemini API |
| 連携 | Azure Functions(保存を起点に処理を動かし、照合と差の計算を行う) | Azure Logic Apps |
| 保管 | Azure Blob Storage(請求書の原本と読み取り結果) | 社内のファイルサーバー |
原価管理システムと会計システムは、新しく足すものではありません。 原価管理システムからは注文と査定を読むだけで、会計システムへは照合を終えたものを入力用のファイルで渡します。どちらの入出力の形も製品によって違うため、その部分は利用環境に応じた個別の作りになります。
読み取りの土台は、Azure AI Document Intelligence のレイアウトモデルです。 テキスト、表、選択マーク、文書の構造を抽出し、表は行と列の数、行と列の結合、セルごとの行と列の位置を返します。列の見出しのセルには columnHeader が付きます。出来高の請求書の明細は、工種・契約金額・前回累計・今回・累計・出来高率が横に並ぶ表なので、表として取れることが効きます。
日本語の印刷の文字と手書きの文字を、どちらも読めます。 レイアウトモデルの対応言語には、印刷の文字と手書きの文字の両方に日本語が入っています。協力会社が手書きで出来高率を書き込んだ請求書でも、読み取りの対象になります。 行ごとに手書きかどうかの判定も信頼度つきで返るので、手書きの行だけを人の確認に回せます。
キーと値の組は、レイアウトモデルに features=keyValuePairs を付けて取ります。 請求書の上の欄の「注文番号」「工事名」「請求日」のような項目が、キーと値の組として返ります。
03どうやって実装するのか
処理の起点を決める
受付フォルダにファイルが保存されたことを起点にします。 締め日の直後に集中して届くため、1日1回の定時実行にはしません。 届いた順に照合を進めると、差のある請求の問い合わせを早く始められ、協力会社が出し直す時間が残ります。
受付フォルダは Azure Blob Storage のコンテナーにし、Azure Functions の Blob Storage トリガーで動かします。 トリガーには、遅延の小さいイベントベースの実装が推奨されています。同じファイルの同じ版で関数が二度呼ばれないよう、ランタイムが処理済みの記録(blob receipt)を持ちます。 失敗したファイルは既定で計5回まで再試行され、すべて失敗すると専用のキューに記録されます。そのキューを毎朝見る作業を、運用に入れておきます。
フォルダは1つにし、現場ごとに分けません。 現場ごとに分けると、保存先を間違えた請求書がどこにも照合されずに残ります。現場は、読み取った注文番号から原価管理システムで引きます。
処理が終わったファイルは、処理済みのフォルダへ移します。 移すのは成功したときだけにします。受付フォルダに残っている数が、そのまま未処理の数になります。 締め日の5日後の朝に、受付フォルダに残っている件数と、注文があるのに請求が届いていない協力会社を一覧にします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 出来高の請求書 | 注文番号、工事名、協力会社名、契約金額、前回までの累計、今回の出来高、累計、出来高率、相殺の項目、請求額 | 受付フォルダ |
| 読み取り結果 | 文字・表・キーと値の組と、それぞれの信頼度。行ごとの手書きの判定 | Azure AI Document Intelligence |
| 注文と変更契約 | 注文番号、協力会社、当初の契約金額、変更契約の日付と金額、相殺の取り決め | 原価管理システム |
| 出来高の査定 | 注文ごと・月ごとの査定の出来高率と、査定した日 | 原価管理システム |
| 支払実績 | 注文ごとの、前月までに支払った累計と各月の支払額 | 支払データの台帳 |
| 協力会社ごとの書式の対応表 | その会社の書式で、どの列が前回累計か、相殺が差し引き前か後か | 自社で用意する表 |
質を決めるのは、いちばん下の表です。 「前回迄」「既払」「前月累計」のように、同じ意味の列に協力会社ごとに違う名前が付いています。 取引の多い協力会社から順に、列の名前と意味を1行ずつ書いておくと、並べ直しの迷いが減ります。
支払実績は、請求書の「前回までの累計」と照らす相手です。 ここが無いと、協力会社が自分で書いた累計を、そのまま正しいものとして扱うことになります。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 明細の表 | レイアウトモデルの tables(cells の rowIndex・columnIndex・kind) | 工種ごとの契約金額・前回累計・今回・出来高率 |
| 上の欄の項目 | キーと値の組(features=keyValuePairs) | 注文番号、工事名、請求日、協力会社名 |
| 手書きの行 | styles の isHandwritten と信頼度 | 人が確かめる行の選び出し |
| 単語ごとの信頼度 | words の confidence | 金額の数字の読み取りの確かさ |
| 注文・査定 | 原価管理システムから書き出したファイル | 照合の相手 |
| 支払実績 | 支払データの台帳 | 前回までの累計の照合の相手 |
明細の表は、合計の行と工種の行を分けて扱います。 合計の行だけを見ると、工種ごとの出来高率の差が相殺されて見えなくなります。工種ごとに査定がある注文では、工種ごとに照らします。
表が複数ページにまたがる請求書は、ページをつないでから扱います。 レイアウトモデルの案内でも、表がページをまたぐ場合は分析の後に1つの表にまとめる処理を勧めています。ページの区切りで工種の行が2つに割れたまま照合すると、同じ工種が2回請求されているように見えます。
原価管理システムの注文と査定は、毎朝書き出したファイルを読みます。 照合に要るのは、注文番号、変更契約を反映した契約金額、査定の出来高率と査定した日です。
AIへ渡す前に整形する
- 形式の確認 … PDFと画像(JPEG・PNG・BMP・TIFF・HEIF)であることを確かめます。Excelのまま届いたものは、レイアウトモデルで扱えますが、XLSXの表の分析には対応していないため、PDFに印刷して入れます
- パスワードの確認 … パスワードでロックされたPDFは、提出前に解除する必要があります。協力会社に解除したものを出し直してもらいます
- ページ数とサイズの確認 … PDFとTIFFは最大2,000ページ、有料(S0)レベルで500MBまでです
- 画像の寸法と文字の大きさの確認 … 画像は50×50から10,000×10,000ピクセルの間、文字の最小高さは1024×768の画像で12ピクセル(150dpiで約8ポイント)です。明細の小さな数字は、この下限に近づきます
- 1ファイルに複数の請求書がないかの確認 … 現場事務所でまとめてスキャンされたものは、請求書ごとに分けます
- 同じ請求書の検知 … 同じ注文番号・同じ請求月のものが二度保存されたら、二重の請求の候補として印を付けます
6番目は、この構成の目的そのものです。 郵送とメールの両方で同じ請求書が届くことがあり、それを別の請求として照合すると、支払も2回になります。 同じ注文・同じ月の請求は、内容が違っても必ず人へ回します。
AIに処理させる
させるのは、書式の違う請求書の読み取り結果を、同じ項目へ並べ直すことだけです。
| 項目 | 取り出し元 | 書かれていないときの扱い |
|---|---|---|
| 注文番号 | キーと値の組か本文 | not_stated。工事名から推定しない |
| 請求月 | 請求日か「○月分」の記載 | not_stated |
| 契約金額 | 明細の表の契約金額の列か上の欄 | not_stated |
| 工種ごとの前回累計・今回・累計・出来高率 | 明細の表。書式の対応表に従って列を当てる | 行ごとに not_stated |
| 相殺の項目と額 | 表の下の欄か別の明細 | 空 |
| 相殺が差し引き前か後か | 書式の対応表と、請求額の欄の書き方 | unknown |
| 請求額(税抜・税込) | 表の合計の欄 | not_stated |
| させないこと | 理由 |
|---|---|
| 出来高率や累計を計算して埋める | 書かれていない値は書かれていない。計算はプログラムが行う |
| 査定・支払実績との差を判断する | プログラムが数字を引く |
| どちらの値が正しいかを決める | 現場の所長と担当者が決める |
| 注文番号を工事名や金額から推定する | 誤った注文に紐づくと、照合そのものが誤る |
| 協力会社への連絡文を送る | 送るのは人 |
1行目がいちばん起きやすい失敗です。 前回累計が書かれていない請求書を渡すと、累計から今回を引いて埋めます。埋めた値は計算として正しくても、「前回累計を書いていない」という事実が消え、支払実績と照らす相手が無くなります。
指示内容を固定する
あなたは建設会社の経理部で、協力会社から届いた出来高の請求書を
照合の形にそろえる立場です。
渡すのは Azure AI Document Intelligence のレイアウトモデルが返した
読み取り結果(表・キーと値の組・信頼度)と、この協力会社の書式の対応表です。
読み取り結果に書かれていることだけを使ってください。推測で埋めないでください。
【やること】
- 注文番号、請求月、契約金額、工種ごとの前回累計・今回・累計・出来高率、
相殺の項目と額、請求額を、下の形にそろえてください。
- 明細の表の列は、書式の対応表に従って当ててください。対応表に無い
列名は column_raw にそのまま入れ、当てはめずに status を ambiguous に
してください。
- 金額と出来高率は、書かれた数字をそのまま入れてください。
【厳守事項】
- 計算をしないでください。前回累計・累計・出来高率が書かれていない
ときに、他の値から計算して埋めないでください。not_stated にしてください。
- 注文番号が書かれていなければ not_stated にしてください。工事名や
金額から推定しないでください。
- 相殺が差し引き前の額で書かれているか、差し引き後の額で書かれているかが
決められなければ unknown にしてください。
- 合計の行と工種の行を混ぜないでください。合計の行は row_type を total に
してください。
- 査定や支払実績との比較、どちらが正しいかの判断は書かないでください。
- confidence は読み取り結果の値をそのまま入れてください。
- 出来高の請求書でない書類と判断した場合は、並べ直しをせず
document_type に種類を書いてください。
【読み取り結果】{layout_result}
【書式の対応表】{format_map}
「計算をしない」を最初に書かないと、ほぼ必ず埋めます。 出来高の請求書は数字どうしの関係がはっきりしているため、欠けた値を埋めることがAIにとって自然な仕事に見えるからです。 禁じるのは計算そのものです。
出力形式を固定する
次の形のJSONで受け取ります。
{
"file_id": "",
"document_type": "progress_invoice",
"order_no": "",
"billing_month": "",
"contract_amount": "",
"rows": [
{
"row_type": "item | total",
"work_type": "",
"column_raw": "",
"prev_cumulative": "",
"this_month": "",
"cumulative": "",
"progress_rate": "",
"status": "ok | not_stated | ambiguous | low_confidence",
"handwritten": false,
"confidence": 0
}
],
"offsets": [ { "name": "", "amount": "" } ],
"offset_basis": "before | after | unknown",
"billed_amount_excl_tax": "",
"billed_amount_incl_tax": ""
}
1つ目の理由は、差の計算をプログラムに渡せることです。 次の4つの照合は、AIではなく Azure Functions が数字を引いて決めます。
| 照合 | 比べるもの | 結果の区分 |
|---|---|---|
| 契約金額 | 請求書の契約金額と、変更契約を反映した注文の金額 | match / contract_mismatch |
| 出来高率 | 請求書の工種ごとの出来高率と、現場の査定 | match / over_assessed / under_assessed |
| 前回までの累計 | 請求書の前回累計と、支払実績の累計 | match / cumulative_mismatch |
| 累計と契約金額 | 請求書の累計と、注文の契約金額 | within / exceeds_contract |
2つ目は、status と照合の結果を別の層に置けることです。 読み取りが not_stated の項目は照合に回さず、「書かれていない」として先に人へ渡します。 読み取りの欠けと、数字の食い違いを混ぜません。
金額は文字列で受け取り、数値への変換と桁の確認はプログラムで行います。 構造化出力ではすべてのフィールドを必須にし、オブジェクトに additionalProperties: false を付けます。minimum や maximum のような数値の制約はスキーマで書けないため、金額の範囲の確認は後段で行います。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ(Azure Blob Storage) | Azure Functions の Blob Storage トリガー(イベントベース) | ファイルの保存を検知する |
| Azure AI Document Intelligence | API呼び出し(prebuilt-layout、features=keyValuePairs) | 文字・表・キーと値の組・信頼度を返す |
| Azure OpenAI | API呼び出し(構造化出力) | 請求書の項目への並べ直し |
| 原価管理システム | 毎朝書き出したファイルの読み取り | 注文・変更契約・査定 |
| 支払データの台帳 | 読み取り | 前月までの支払の累計 |
| 確認の一覧 | 書き込み | 差のある請求と、差の区分 |
| 会計システム | 入力用ファイルの書き出し(確認の後) | 照合を終えた請求 |
原価管理システムへは書き込みません。 査定が遅れていても、この構成から査定を直すことはしません。査定を直すのは現場の所長です。
会計システムへも、人が確かめた後のファイルだけを渡します。 書き込みを自動にすると、照合の誤りがそのまま支払まで進みます。
人が確認する
担当者が開くのは、差のある請求と、not_stated / ambiguous / low_confidence のある請求だけです。
- 重複の候補を先に見る … 同じ注文・同じ月の請求が2件ある、
cumulative_mismatchがある。支払が二重になる危険のあるものから見ます - 出来高率の差を所長に確かめる …
over_assessedは、査定が遅れているのか、請求が先走っているのかを現場に聞きます - 契約金額の差を確かめる … 変更契約が原価管理システムに反映されていないことが多い理由です
- 手書きの行を原本で見る … 手書きの判定が付いた行の数字は、信頼度にかかわらず原本を見ます
- 支払う額を決めて書き出す … 査定どおりに直して支払うか、出し直しを頼むかを決めます
2番目を担当者だけで決めないでください。 出来高の判断は現場の仕事です。経理が査定に合わせて減額すると、協力会社との関係を現場の知らないところで損ねます。
目標は、240件をならして1件5分です。 差の無い請求は一覧で流し見て終わり、差のある請求だけに時間を使います。差のある請求が2割を超える月は、査定の入力が遅れているか、書式の対応表が古くなっています。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワードでロックされたPDF | 提出前に解除が必要。協力会社に出し直しを依頼 |
注文番号が not_stated | 照合に回さず担当者へ。工事名から推定しない |
| 注文番号が原価管理システムに無い | 注文の登録漏れか、番号の書き間違い。購買の担当者へ |
| 査定がまだ入っていない | assessment_pending。照合を保留し、所長へ入力を依頼 |
| 表がページをまたいで割れている | ページをつないでから照合。つなげないものは人へ |
相殺の扱いが unknown | 差し引き前か後かを担当者が見て、書式の対応表に書き足す |
| 同じ注文・同じ月の請求が2件 | 内容が違っても重複の候補として人へ |
| 累計が契約金額を超える | exceeds_contract。変更契約の漏れか、過大な請求。 購買と現場へ |
| 読み取りのAPIが応答しない | 受付フォルダに残す。処理済みへ移すのは成功時だけ。 5回失敗したものは専用のキューから拾い直す |
4行目が、締め日の直後にいちばん多く出ます。 所長の査定の入力が請求の到着より遅れることは珍しくなく、査定の無いまま照合すると、すべての請求が over_assessed に見えます。 保留にして、査定が入った時点で照合し直します。
記録を残す
- 元の請求書ファイルと、受け取った日時・経路(紙/PDF)
- レイアウトモデルが返した読み取り結果の全文
- 並べ直したJSONと、そのとき使った書式の対応表の版
- 照合の結果と、そのとき照らした契約金額・査定・支払実績の値
- 担当者と所長が決めた支払額と、その理由
- 協力会社へ出し直しを頼んだ日と、出し直された請求書との対応
- 協力会社ごとの、差のある請求の割合
4つ目で「照らした値」を残すのは、査定と変更契約が後から動くためです。 照合し直すと過去の差が消え、なぜその月に減額して支払ったのかを協力会社に説明できなくなります。
最後の行は、協力会社との話し合いの材料になります。 毎月同じ会社で cumulative_mismatch が出るなら、その会社の書式の累計の書き方が自社の考え方と違っています。 1件ずつ差し戻すより、書式を相談したほうが早く終わります。
04実装レベルの3段階
半自動化で、1件20分が12分程度になります。 写す手間は無くなりますが、注文・査定・支払実績の3つの画面を開く作業が残ります。本格構成で5分になり、この段階が本記事の想定です。 差が大きいのは、3つの画面を開く時間が、照合の時間の大半だったからです。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、列の当て方がずれる書式と、相殺の扱いが unknown になる協力会社が分かります。書式の対応表を整えてから照合を足すほうが、空振りの差が減ります。
05工数削減シミュレーション
導入後 240件 × 5分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 協力会社への支払を出来高払で行い、毎月数百件の出来高の請求書を受け取る建設会社(元請・一次下請)。請求書が自社の指定様式と協力会社ごとの書式で混在して紙やPDFで届き、経理と工事部門の担当者が注文書・出来高査定表・支払実績を開いて1件ずつ見比べている場合。変更契約や相殺の扱いが現場ごとに違い、照合が担当者の経験に頼っている場合。
- 協力会社との請求のやり取りがすでに電子の請求システムでデータ化され、出来高査定と自動で突き合わされている場合。出来高払がなく、竣工払だけの工事が中心の場合。協力会社が数社で、月の請求が数十件に収まる場合。なお、出来高をいくらと査定するか、食い違いのある請求をどう支払うかの判断は、この構成では代替できません。
07最小構成で試す方法
- 先月の出来高の請求書から20件を選ぶ(当時差し戻したものと、指定様式でない書式を半分ずつ入れる)
- 20件について、当時の注文の契約金額、査定の出来高率、前月までの支払の累計を表にしておく
- 手元のAIサービスに請求書のPDFを1件ずつ貼り、「注文番号、契約金額、工種ごとの前回累計・今回・累計・出来高率、相殺、請求額を表にしてください。書かれていない値は『記載なし』とし、計算で埋めないでください」と指示する
- 出てきた表と2番の表を、手で引き算して差を出す
- 当時差し戻した請求で、同じ差が出るかを見る
| 出てきた内容 | 判断 |
|---|---|
| 当時差し戻した請求で同じ差が出た | OCRと照合の連携に進む |
| 書かれていない前回累計を計算で埋めた | 指示の書き方で直る。構成は有効 |
| 列の当て方が書式ごとにずれた | 書式の対応表が要る理由。構成は有効 |
最小構成では、照合を手で行います。 確かめるのは、書式の違う請求書から同じ項目が取れるかです。照合の規則は、取れた後で作ります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 書かれていない前回累計を計算で埋める | 計算を禁じ、not_stated のまま人へ |
| 合計の行だけで照合して工種の差が消える | row_type で分け、工種ごとに照らす |
| 査定の入力が遅れて全件が差ありになる | 査定の無い注文は assessment_pending で保留 |
| 変更契約が反映されていない契約金額で照らす | 原価管理システムの変更契約の登録日を見て、古ければ購買へ |
| 表がページをまたいで同じ工種が2回に見える | ページをつないでから照合する |
| 相殺が差し引き前か後かを取り違える | 書式の対応表に書き、決まらなければ unknown |
| 同じ請求書が郵送とメールで二度届く | 同じ注文・同じ月は内容にかかわらず人へ |
| 手書きの出来高率を読み違える | 手書きの判定が付いた行は原本を見る |
| 経理が査定に合わせて減額してしまう | 出来高の判断は所長が行う |
上の3行が、この構成の失敗のほとんどです。 どれも、「数字が合わない」という見た目の中に、読み取りの欠け・照らし方の誤り・査定の遅れが混ざっているところから出ています。差の区分を分けて出すかどうかで、運用に乗るかが決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 協力会社の名称、注文ごとの契約金額と出来高、相殺の内訳、支払の実績です。個人の情報はほとんど含みませんが、協力会社ごとの契約金額は営業上の秘密です。
- 外部へ渡す範囲を、請求書の読み取り結果に限る … 生成AIに渡すのは請求書1件の読み取り結果と書式の対応表だけです。注文・査定・支払実績の台帳そのものは生成AIへ渡さず、照合はプログラムの側で行います
- 支払を自動で確定させない … 会計システムへは確認の後のファイルだけを渡します。照合の誤りがそのまま支払になる経路を作りません
- 出来高の判断を経理だけで行わない … 査定との差は現場の所長に確かめます。相殺や減額を一方的に行うことは、協力会社との取り決めに反するおそれがあります。 国土交通省の地方整備局の資料でも、赤伝処理(差し引き)には双方の協議・合意と、内容と根拠の明示が要るとされています
- 支払の期限を意識する … 同じ資料では、注文者から出来高払を受けたときは、相応する下請代金を1か月以内に支払うこととされています。差の確認で支払を止めたままにしないよう、保留した請求は毎朝の一覧に出します
- 原本をどれにするかを決める … 紙の請求書、スキャンしたPDF、読み取り結果のどれを原本として残すかを、経理の保存の規程と合わせて先に決めます
誤りが起きた場合のリスクは、過大な請求を見落として払い過ぎることと、正しい請求を差ありとして支払を遅らせることの2つです。 前者は累計の照合で、後者は査定の保留で防ぎます。どちらも、差の区分を人が読めるように出すことで守ります。
10まず何から始めるか
1週目:照合の相手をそろえる
原価管理システムから注文(変更契約を反映した金額)と査定を、支払データの台帳から注文ごとの累計を、注文番号で引ける形で毎朝書き出せるかを確かめます。
2週目:20件で試す
第8章のとおり、先月の20件で請求書の項目を表にさせます。書かれていない前回累計を計算で埋めないかを最優先で見ます。
3週目:書式の対応表を作る
請求の多い協力会社30社について、列の名前と意味、相殺が差し引き前か後かを表にします。この30社で月の請求の大半が埋まります。
4週目:受付フォルダから並べ直しまでをつなぐ
受付フォルダを見張り、レイアウトモデルを呼び、項目を照合の表に書き出すところまで作ります。この時点では照合を作らず、並べ直しの結果だけを見ます。
2か月目: 契約金額・出来高率・累計・契約超過の4つの照合を足し、差のある請求だけを一覧に出します。3か月目以降: 査定の保留と毎朝の一覧を足し、1件20分が何分になったかを実測します。締め日の翌週に、累計の照合を省かずに支払へ回せるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 請負契約書の重要記載事項に「前金払又は出来高払の時期及び方法」が含まれること。注文者から出来高払または竣工払を受けたときは、相応する下請代金を1か月以内に支払うこととされること(建設業法第24条の3第1項)。赤伝処理には元請負人と下請負人双方の協議・合意が必要で、内容と差額等の算定根拠を見積条件や契約書面に明示することとされること。少なくとも労務費相当分は現金で支払うよう求めていること | 国土交通省 中国地方整備局: 建設業法に基づく適正な元請下請取引について(2011年改訂) | 2026-10-06 |
レイアウトモデル(prebuilt-layout)がテキスト・表・選択マーク・文書の構造を抽出し、表の行と列の数・結合・セルの位置と columnHeader を返すこと。行ごとの手書きの判定を信頼度つきで返すこと。PDF・画像・Office形式に対応し、XLSXの表の分析には対応しないこと。表がページをまたぐ場合は分析後に1つにまとめる処理を勧めていること。PDFとTIFFが最大2,000ページ(Freeは2ページ)、S0で500MB、画像が50×50〜10,000×10,000ピクセル、文字の最小高さが1024×768で12ピクセルであること。パスワード付きPDFは解除が必要なこと | Microsoft Learn: ドキュメント レイアウト分析 | 2026-10-06 |
レイアウトモデルの印刷の文字と手書きの文字の対応言語に日本語が含まれること。キーと値の組をレイアウトモデルに features=keyValuePairs を指定して取ること | Microsoft Learn: Language support for Read and Layout | 2026-10-06 |
構造化出力がJSONスキーマに従わせる機能で、すべてのフィールドを必須にし、オブジェクトに additionalProperties: false を付けること。minimum・maximum などの数値の制約と minLength・maxLength などの文字列の制約が使えないこと | Microsoft Learn: Structured outputs (Azure OpenAI in Microsoft Foundry) | 2026-10-06 |
| Blob Storage トリガーが新しいまたは更新されたファイルを検知して関数を起動し、遅延の小さいイベントベースの実装が推奨されること。同じファイルの同じ版で関数が二度呼ばれないよう blob receipt を持つこと。失敗時は既定で計5回再試行し、すべて失敗すると専用のキューに記録されること | Microsoft Learn: Azure Blob storage trigger for Azure Functions | 2026-10-06 |
支払の期日や相殺の扱いは、協力会社との契約と、自社の顧問弁護士・建設業の所管の窓口の案内に従ってください。 本記事は国土交通省の地方整備局の資料で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0460)についてのご相談はこちらから。
