取引先から届く支払通知書を読み取り、支払額・振込手数料・相殺の内訳を入金予定の台帳にそろえて、消込の前に請求との差額を理由付きで出す
得意先から届く支払通知書を読み取り、請求書番号・支払額・振込手数料・相殺の内訳を入金予定の台帳の列にそろえます。請求額との差額には、通知書に書かれた理由を付けて、消込の前に一覧にします。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- 商社/建設/製造
- 対象部門
- 経理/財務
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/判断に時間がかかる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/判断支援/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 届いた支払通知書を、紙はスキャン、FAXは複合機からPDFにして共有フォルダに入れる
- 担当者が1枚ずつ開き、得意先名、支払日、支払額の合計を確かめる
- 通知書の明細から請求書番号を拾い、入金予定の台帳で該当する行を探す
- 請求書番号が書かれていない通知書は、金額と検収月から当たりを付けて行を探す
- 請求額と支払額の差を電卓で出し、通知書の「控除」「相殺」「手数料」などの欄と見比べて内訳を書き込む
- 差額が内訳で説明できないものは、営業担当に照会のメモを送る
- 内訳が埋まった行に印を付け、銀行の入金明細と突き合わせる消込に回す
- 人紙とFAXの通知書をPDFにして、メール添付のものとあわせて取込フォルダに入れる
- 自動Google Apps Script が数分おきに取込フォルダを見て、新しいファイルを拾う
- 自動Document AI の Form Parser が、項目名と値の組、表、信頼度を返す
- 自動得意先の様式メモ(どの欄に何が書かれるか)を引き、読み取り結果とあわせて Gemini API に渡す
- 自動Gemini API が、通知書の各行を `payment` / `fee` / `offset` / `discount` / `other` に仕分け、請求書番号と金額を転記する
- 自動Apps Script が入金予定の台帳で該当する行を探し、請求額との差額と、内訳の合計で説明できるかを計算する
- 自動行ごとに `explained` / `unexplained` / `unmatched` / `needs_review` を付けて台帳に書き込む
- 人担当者が `explained` 以外の行と、金額の大きい行だけを開いて確かめる
- 人`unexplained` の行について、営業担当への照会文の下書きを直して送る
- 【人/自動】 確認済みの行を消込に回す
各工程の詳しい説明を読む
- 届いた支払通知書を、紙はスキャン、FAXは複合機からPDFにして共有フォルダに入れる
- 担当者が1枚ずつ開き、得意先名、支払日、支払額の合計を確かめる
- 通知書の明細から請求書番号を拾い、入金予定の台帳で該当する行を探す
- 請求書番号が書かれていない通知書は、金額と検収月から当たりを付けて行を探す
- 請求額と支払額の差を電卓で出し、通知書の「控除」「相殺」「手数料」などの欄と見比べて内訳を書き込む
- 差額が内訳で説明できないものは、営業担当に照会のメモを送る
- 内訳が埋まった行に印を付け、銀行の入金明細と突き合わせる消込に回す
(a)得意先によって、見る場所が違う。 請求書番号を「貴社伝票番号」と書く得意先、自社の検収番号しか書かない得意先、相殺を明細の最後の行にマイナスで書く得意先、別紙の「控除明細」にまとめる得意先があります。3番目と5番目は、様式を覚えている人でないと時間が倍かかります。
(b)差額の理由を、担当者が推し量っている。 3,850円の差を見て、「この得意先はいつも手数料を引くから」と手数料として処理することがあります。通知書にそう書かれているかを確かめないまま理由が付くと、別の理由の差額が埋もれます。
(c)一部だけの支払と合算の支払が見分けにくい。 請求3件分をまとめて1回で支払う得意先と、1件の請求を2回に分けて支払う得意先があります。4番目の当たり付けで行を取り違えると、消込の段階まで誤りが残ります。
(d)月初に集中する。 通知書の大半は月末の支払日の前後に届き、消込を月次の締めに間に合わせるには数日で300枚を処理しなければなりません。
- 【人】 紙とFAXの通知書をPDFにして、メール添付のものとあわせて取込フォルダに入れる
- 【自動】 Google Apps Script が数分おきに取込フォルダを見て、新しいファイルを拾う
- 【自動】 Document AI の Form Parser が、項目名と値の組、表、信頼度を返す
- 【自動】 得意先の様式メモ(どの欄に何が書かれるか)を引き、読み取り結果とあわせて Gemini API に渡す
- 【自動】 Gemini API が、通知書の各行を
payment/fee/offset/discount/otherに仕分け、請求書番号と金額を転記する - 【自動】 Apps Script が入金予定の台帳で該当する行を探し、請求額との差額と、内訳の合計で説明できるかを計算する
- 【自動】 行ごとに
explained/unexplained/unmatched/needs_reviewを付けて台帳に書き込む - 【人】 担当者が
explained以外の行と、金額の大きい行だけを開いて確かめる - 【人】
unexplainedの行について、営業担当への照会文の下書きを直して送る - 【人/自動】 確認済みの行を消込に回す
8番目が、この設計の分かれ目です。 内訳がそろって差額が説明しきれたものは一覧で流し見て終わりにし、理由のない差額と、台帳の行が見つからないものだけに時間を使います。 全件を開く設計にすると、60.0時間はほとんど減りません。
6番目をAIの外に出しているのも、意図してのことです。 差額を出す計算と、それが内訳で説明しきれるかの判定は、足し算と引き算で決まることです。 AIに任せると、説明しきれない差額を「その他」の行で埋めて辻褄を合わせることがあります。
02今回想定するシステム構成
支払通知書(紙・PDF・FAX) │ 紙とFAXはPDFにして取込フォルダへ ▼【トリガー】Google Apps Script の時間主導型トリガー(数分おき) Google Apps Script ── 形式・ページ数の確認、得意先の推定 ▼ Google Document AI(Form Parser) │ 項目名と値の組・表・信頼度を返す ▼ Gemini API ── 通知書の各行を仕分けて転記 │ 支払 payment/手数料 fee/相殺 offset/値引 discount/その他 other ▼ Google Apps Script ── 台帳の行を探す、差額の計算、状態の付与 │ explained/unexplained/unmatched/needs_review ├──▶ 入金予定の台帳(スプレッドシート)へ内訳と理由 └──▶ 営業担当への照会文の下書き ▼ 【人が explained 以外と高額の行だけ確認】──▶ 消込へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | Azure AI Document Intelligence |
| 生成AI | Gemini API(通知書の各行の仕分けと照会文の下書き) | Claude API、OpenAI API |
| 連携 | Google Apps Script(取込フォルダの監視、差額の計算、台帳への書き込み) | Python |
| 保管 | Google ドライブ、Google スプレッドシート | 既存の販売管理システム |
販売管理システムと入金予定の台帳は、新しく足すものではありません。 新しく作るのは、得意先ごとの様式メモです。「この得意先は請求書番号を『貴社伝票No.』の欄に書く」「相殺は別紙の控除明細に載る」といった、担当者が頭の中に持っている癖を1社1行で書き出します。
土台は Document AI の Form Parser です。 公式のプロセッサ一覧では、OCRのテキストに加えて、キーと値のペア(エンティティとチェックボックス)、表、一般的なエンティティを抽出するとされ、200を超える言語に対応します。言語の一覧には日本語(ja)があります。ページの上限は同期処理で15ページ、バッチ処理で100ページです。
Form Parser は事前学習済みで、追加で学習させることはできないとされています。様式ごとに学習させない代わりに、どの様式でも項目名と値の組を返すので、得意先120社分の様式を前提にしても準備が重くなりません。返ってくる項目名は文書に書かれている文字そのもので、「支払金額」「お支払額」「振込金額」は別のキーとして返ります。そろえるのは後段の仕事です。
Invoice Parser を使わない理由も書いておきます。 請求書番号、仕入先名、請求金額、税額、請求日、支払期日などを抽出する請求書向けのプロセッサで、支払通知書は請求書と項目の並びが違います。 相殺や控除の行を拾う前提がないため、汎用の Form Parser で読み、仕分けを後段に置きます。
表の読み取りには限りがあります。 Form Parser の表の抽出は、行や列をまたぐセルのない単純な表が対象とされています。支払通知書には「控除」の見出しが3行にまたがるような結合セルがよくあるので、表として取れなかった部分は、全文のテキストから行を拾い直します(第7章)。
03どうやって実装するのか
処理の起点を決める
Google Apps Script の時間主導型トリガーで、数分おきに取込フォルダを見ます。 時間主導型のトリガーは、毎分から月1回までの間隔で動かせるとされています。通知書は月末の支払日の前後に集中して届くため、1日1回の定時実行にはしません。 まとめて処理すると、説明できない差額が見つかるのが締めの直前になり、営業担当が得意先に問い合わせる時間が残りません。
入る経路は3つです。郵送の紙をスキャンしたもの、メールに付いたPDF、FAXを複合機でPDFにしたものです。メールのPDFは、経理の共有アドレスに届いたものを Gmail のラベルで分け、Apps Script が添付を取込フォルダへ移します。どの経路も同じフォルダに入れ、そこから先は区別しません。
1回の実行で処理する枚数に上限を置きます。 Apps Script の1回の実行は6分までとされています。Document AI と Gemini API を1枚ずつ呼ぶと1枚に数十秒かかることがあるため、1回に5枚までとし、残りは次の実行に回します。 処理が終わったファイルは処理済みフォルダへ移し、移すのは台帳への書き込みまで成功したときだけにします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 支払通知書のファイル | PDFまたは画像。受け取った日時と経路 | 取込フォルダ |
| 読み取り結果 | 項目名と値の組、表のセル、全文のテキスト、項目ごとの信頼度 | Document AI(Form Parser) |
| 入金予定の台帳 | 請求書番号、得意先コード、請求額、入金予定日、消込の状態 | Google スプレッドシート |
| 得意先の様式メモ | 請求書番号を書く欄の名前、相殺の載り方、手数料の扱い、過去に出た差額の理由 | 自社で用意する一覧 |
| 仕分けの区分表 | payment/fee/offset/discount/other と、それぞれに当たる語の例 | 自社で用意する一覧 |
質を決めるのは、下の2つです。 様式メモがなければ、「貴社伝票No.」が自社の請求書番号なのか得意先の検収番号なのかを、AIが毎回推し量ることになります。区分表がなければ、「協力会費」「安全協力費」「有償支給材」がどこに入るかが通知書ごとに揺れます。
過去に出た差額の理由は、照会の材料として持ちます。 ただし、過去の理由を今回の差額の理由として使うことはしません。 「この得意先はいつも手数料を引く」を根拠に、書かれていない差額に手数料と付けるのは、第3章の(b)をそのまま機械にやらせることになります。
データの取得方法を決める
読み取りは、Apps Script から Document AI の処理のAPIを呼ぶだけです。ファイルを渡すと、Document という形の応答が返ります。
| 取るもの | 応答のどこから | 何に使うか |
|---|---|---|
| 項目名と値の組 | pages[].formFields[] の fieldName と fieldValue | 支払日、支払額の合計、得意先名などのヘッダー |
| 表 | pages[].tables[] の headerRows と bodyRows | 請求ごとの明細の行 |
| 全文のテキスト | text と、各要素の textAnchor | 表として取れなかった控除の行を拾い直す |
| 信頼度 | 各要素の layout の confidence | 金額と請求書番号の読み取りが確かかの判定 |
金額は、信頼度とあわせて取ります。 「38,500」と「36,500」の違いは、差額の理由をまるごと変えます。信頼度の低い金額は、その行を needs_review にして人に回します。
台帳はスプレッドシートを読むだけで足ります。 引く順は、請求書番号が先、得意先コードと金額が後です。番号が書かれていない通知書に限り、得意先・請求額・検収月の組で候補を出します。候補が2つ以上あれば選ばず、unmatched にします。
AIへ渡す前に整形する
- 形式の確認 … Form Parser の対象は PDF、GIF、TIFF、JPEG、PNG、BMP、WebP です。それ以外は PDF にします
- ページ数の確認 … 同期処理は15ページまでです。別紙の控除明細を含めて15ページを超えるものは、バッチ処理に回します
- 解像度の確認 … 公式には、OCRの精度のためにスキャンは最低200dpiが望ましいとされています。FAXは200dpiを下回ることが多いので、受信時の設定を確かめます
- 圧縮の確認 … JPEG のような非可逆の形式は、強く圧縮すると精度が落ちることがあるとされています。複合機の保存形式は PDF にします
- 得意先の推定 … メールの送信元や、ファイル名、1ページ目の見出しから得意先を推定し、様式メモを引きます
- 別紙の結合 … 本紙と控除明細が別のファイルで届いた得意先は、同じ支払日のものを1組にします
- 重複の検知 … 同じ得意先・支払日・支払額のものが直近にあれば、既処理として印を付けます
3番目と6番目を軽く見ないでください。 FAXの数字はつぶれやすく、「8」と「6」と「0」の読み違いが差額に直結します。別紙を本紙と組にしないと、控除の内訳がそっくり抜け、すべての差額が unexplained になります。
AIに処理させる
させるのは、通知書の各行を区分に仕分けし、書かれた金額と請求書番号を転記することだけです。
| 行の区分 | 当たるものの例 | 判断できないときの扱い |
|---|---|---|
payment | 請求ごとの支払額。「お支払金額」「支払額」 | 請求書番号が読めなければ番号を空にして needs_review |
fee | 「振込手数料」「送金手数料」と明記された控除 | 手数料と書かれていなければ fee にしない |
offset | 有償支給材の代金、買掛金との相殺、立替金の精算 | 相殺の相手の明細がなければ other |
discount | 値引、返品、検収時の数量減、品質不良による控除 | 理由の記載がなければ other |
other | 協力会費、安全協力費など、上のどれにも当たらないもの | 原文の語をそのまま label に残す |
右端の列が、この構成でいちばん大事な区別です。 金額だけがマイナスで書かれ、何の控除か書かれていない行を、fee や discount に入れさせません。other に入れて原文の語を残し、人が見ます。
| させないこと | 理由 |
|---|---|
| 請求額との差額の計算 | 足し算と引き算で決まる。Apps Script が行う |
| 書かれていない差額への理由付け | 回収すべき金額が手数料として消える |
| 請求書番号の補完 | 似た番号に寄せると、別の請求に消し込まれる |
| 金額の書き換え | 合計に合わせて明細を直すと、読み違いが隠れる |
| 差額を値引として認めるかの判断 | 営業と経理が得意先との取り決めで決める |
2行目がいちばん起きやすい失敗です。 差額が3,850円で、通知書に何も書かれていないと、AIは「振込手数料と思われる」と書いて fee を作ります。その瞬間、照会すべき差額が消えます。
指示内容を固定する
あなたは経理部門で、得意先から届いた支払通知書を読み、
入金予定の台帳に転記するための下書きを作る立場です。
OCRが返した読み取り結果だけを見てください。推測で埋めないでください。
【やること】
通知書に書かれている行を1行ずつ、次の区分に仕分けてください。
- payment ... 請求ごとの支払額
- fee ....... 「振込手数料」「送金手数料」と明記された控除
- offset .... 相殺(有償支給材の代金、買掛金との相殺、立替金の精算)
- discount .. 値引、返品、数量減、品質不良による控除
- other ..... 上のどれにも当たらないもの、または何の控除か書かれていないもの
迷ったときは other を選んでください。
【厳守事項】
- 金額は通知書に書かれた数字をそのまま amount に入れてください。
合計に合わせて明細を直すこと、計算して埋めることをしないでください。
- 請求額との差額を計算しないでください。差額の理由を推測しないでください。
- 「手数料」と書かれていない控除を fee にしないでください。
金額が手数料らしく見えても、書かれていなければ other です。
- 請求書番号は読み取った文字列をそのまま invoice_ref に入れてください。
桁を補う、似た番号に直すことをしないでください。読めなければ空にします。
- 控除や相殺の行には、通知書の原文の語を label にそのまま写してください。
- 得意先の様式メモは、どの欄を見ればよいかの手がかりとしてだけ使ってください。
過去に出た差額の理由を、今回の行の区分の根拠にしないでください。
- 支払通知書でない書類(請求書、納品書、案内文)と判断した場合は、
仕分けをせず document_type に種類を書いてください。
【読み取り結果】{ocr_result}
【得意先の様式メモ】{vendor_note}
【区分表】{category_table}
「差額の理由を推測しない」と「手数料と書かれていなければ other」を両方書いているのは、片方だけでは止まらないからです。 前者だけだと、理由は書かないまま行の区分を fee にします。後者だけだと、区分は other にしても note に「手数料と思われる」と書きます。禁じるのは、書かれていないことを根拠にした仕分けそのものです。
出力形式を固定する
Gemini API の構造化出力で、次の形のJSONに固定して受け取ります。 公式には、指定したJSONスキーマに従う応答を生成させられるとされ、enum で値の候補を限り、required で必須の項目を決められます。
{
"document_type": "payment_advice",
"customer_name": "",
"payment_date": "",
"total_paid": 0,
"lines": [
{ "category": "payment | fee | offset | discount | other",
"invoice_ref": "", "label": "", "amount": 0,
"confidence": 0, "evidence": "" }
]
}
1つ目の理由は、AIの仕事と計算の仕事を別の層に置けることです。 lines はAIが埋め、差額と状態は Apps Script が計算して付けます。
| 状態 | 付ける条件(Apps Script が決める) |
|---|---|
explained | 台帳の行が1つに決まり、請求額 -(支払額+fee+offset+discount)= 0 |
unexplained | 台帳の行は決まったが、差が0にならない。または other の行がある |
unmatched | 請求書番号で行が見つからない、または候補が2つ以上ある |
needs_review | 金額か請求書番号の信頼度が基準を下回る |
2つ目の理由は、スキーマに合っていても値が正しいとは限らないことです。 公式にも、出力は構文として正しいJSONでも、値はアプリケーションの側で必ず検証するよう書かれています。Apps Script では、lines の payment の合計が total_paid と一致するかを最初に確かめ、一致しなければ全行を needs_review にします。
3つ目は、label と evidence で確認が速くなることです。 other の行に「安全協力費」と原文が残っていれば、画像を開く前に何の控除かが分かります。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 取込フォルダ | Apps Script の時間主導型トリガー | 新しいファイルを拾う |
| Document AI | API呼び出し | 項目名と値の組・表・信頼度を返す |
| Gemini API | API呼び出し(構造化出力) | 各行の仕分けと転記、照会文の下書き |
| 入金予定の台帳 | スプレッドシートへの書き込み | 内訳の列、差額、状態、根拠の文字列 |
| 販売管理システム | 書き込まない | 消込は既存の手順で行う |
台帳に書き込むのは、内訳と状態の列だけです。 請求額や入金予定日の列には触れません。消込の印を付けるのも人です。 この構成が出すのは消込の材料までで、販売管理システムの売掛金を動かすのは既存の手順に任せます。
照会文の下書きは、unexplained の行にだけ作ります。 宛先は得意先ではなく自社の営業担当です。得意先に直接問い合わせるかどうかは、取引の関係を知っている営業担当が決めます。
人が確認する
人が開くのは explained 以外の行と、金額の大きい行だけです。 explained のものは一覧で件数と得意先を流し見ます。全件を開く設計にすると、第10章の20.0時間には収まりません。
needs_reviewを先に見る … 金額と請求書番号を画像で確かめて直します。多くはFAXの読み違いですunmatchedの行を台帳と照らす … 合算の支払か、分割の支払かを見て、行を手で結びますunexplainedの差額を見る …otherの行の原文を読み、区分を直すか、照会に回すかを決めます- 高額の行を抜き取りで見る …
explainedでも、1行の支払額が基準を超えるものは画像と突き合わせます - 区分を直したら記録する … どの行を、どの区分からどの区分へ変えたかを残します
3番目を省かないでください。 unexplained の差額は、回収すべきお金か、得意先との取り決めの食い違いのどちらかです。 手数料として処理すれば一覧からは消えますが、問題は残ります。
目標は、300枚をならして1枚4分です。 開くのは3割前後という想定で、それより多い月は、様式メモが古くなっているか、FAXの解像度が下がっています。
例外に対処する
| 起きること | 対応 |
|---|---|
| 15ページを超える通知書 | 同期処理の上限。バッチ処理(100ページまで)に回す |
| 表が結合セルで取れない | 単純な表が対象。全文のテキストから行を拾い直し、needs_review を付ける |
| FAXの数字がつぶれている | 信頼度で needs_review。得意先にPDFでの送付を頼む材料にする |
| 本紙と別紙が別に届く | 同じ得意先・支払日で組にする。片方しかなければ待つ |
| 請求書番号が書かれていない | 得意先・金額・検収月で候補を出し、1つに決まらなければ選ばない |
| 支払通知書でない書類が混ざる | document_type を見て、仕分けをせず担当者へ戻す |
JSONの合計が total_paid と合わない | 全行を needs_review にする |
| 同じ通知書が二度届く | 得意先・支払日・支払額で照合し、二重に書き込まない |
| APIが応答しない、6分を超える | 取込フォルダに残す。処理済みへ移すのは書き込み成功時だけ |
上から3行目までが大半を占めます。 どれもAIの問題ではなく、紙の様式と受け取り方の問題です。 得意先にPDFでの送付を頼むほうが、読み取りの精度を上げるより効きます。
記録を残す
- 元の通知書のファイルと、受け取った日時・経路(紙/PDF/FAX)
- Document AI が返した
DocumentのJSONの全文 - Gemini API に渡した様式メモと区分表の版、返ってきた
lines - Apps Script が計算した差額と状態、そのとき照合した台帳の行
- 人が区分や行の結び付けを直した記録
- 照会文を送った日時と、営業担当からの回答
区分を直した記録は、様式メモを育てる材料になります。 同じ得意先で other から offset に直す行が毎月出るなら、その語を区分表に足すか、様式メモに書き足します。
04実装レベルの3段階
最小構成では枚数がさばけません。 確かめるための段階です。 半自動化で、1枚12分が7分程度になります。 読み取りと仕分けは自動になりますが、台帳の行を探す作業と差額の計算が残ります。本格構成で4分になり、この段階が本記事の想定です。 差が大きいのは、台帳の行探しと差額の計算が、1枚ずつの手作業だからです。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、other に落ちる語と、FAXで届く得意先が先に分かります。様式メモと区分表をそこで直してから本格構成に進むほうが、unexplained の空振りが減ります。
05工数削減シミュレーション
導入後 300件 × 4分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 大手の得意先に部品や資材を納めており、得意先ごとに様式の違う支払通知書(支払明細書)が紙・PDF・FAXで毎月届く製造業・商社・建設業。振込額が請求額と一致しないことが多く、振込手数料・相殺・値引のどれで差が出たのかを通知書から読み解いてから消込をしている場合。Google Workspace を使っており、入金予定の台帳をスプレッドシートで持っている場合。
- 得意先の大半から支払の明細をCSVなどの電子データで受け取れている場合(読み取りは不要で、取り込みだけで足ります)。得意先が数社で、通知書が月に数十枚の場合。差額の扱い(手数料を誰が負担するか、相殺を認めるか)が社内で決まっておらず、理由を付けても処理が決まらない場合。なお、差額を値引として認めるか、得意先に請求し直すかの判断はこの構成では代替できません。
07最小構成で試す方法
- 先月届いた支払通知書から、差額のあった得意先を中心に20枚を選ぶ
- その20枚について、台帳の担当者が当時どう内訳を付けたかを書き出す
- 20枚を1枚ずつ手元のAIサービスの画面に貼り付ける
- 「この支払通知書の各行を、支払・振込手数料・相殺・値引・その他に仕分け、書かれた金額と請求書番号を表にしてください。何の控除か書かれていない行はその他にし、原文の語を残してください。差額の理由を推測しないでください」と指示する
- 出てきた表を、担当者の書き出しと突き合わせる
差額のあった得意先を選ぶのが要です。 差額のない通知書は誰が読んでも同じ結果になり、試す意味がありません。
| 出てきた内容 | 判断 |
|---|---|
| 担当者と同じ仕分けになった | OCRとワークフローの連携に進む |
| 書かれていない控除を手数料にした | 指示の書き方で直る。構成は有効 |
| FAXの数字が読めない枚数が多い | 受け取り方が先。 AIの問題ではない |
2行目が出たら、それが一番の収穫です。 担当者も同じ推し量りをしていた可能性があり、消込の前に照会すべき差額がいくつあったかが分かります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
書かれていない控除が fee になる | 「手数料と書かれていなければ other」を指示に明記する |
| 結合セルの表が崩れる | 単純な表が対象。全文のテキストから拾い直す |
| 項目名が得意先ごとに違う | キーは文書の文字そのもの。様式メモで対応を持つ |
| FAXの数字を読み違える | 信頼度で人へ回す。200dpi以上で受ける |
| 別紙の控除明細が抜ける | 同じ支払日で組にしてから読む |
| 合算・分割の支払で行を取り違える | 候補が2つ以上なら選ばず unmatched |
| JSONは正しいが合計が合わない | 値はアプリケーションで検証する。 合計の一致を最初に見る |
| 6分で処理が止まる | 1回の実行の枚数を絞り、残りを次に回す |
| 過去の理由を今回に当てはめる | 様式メモは「見る場所」だけに使わせる |
| 差額の扱いが決まっていない | 手数料・相殺を認めるかは営業と経理で先に決める |
上の3行が、この構成の失敗のほとんどです。 どれも「書かれていることを読む」と「推し量る」の境目から出ています。区分の根拠を、通知書の原文の語に置いてあるかどうかで、運用に乗るかが決まります。
最後の行は、構成の外の問題です。 手数料の差し引きを認めるか、相殺に同意しているかが決まっていないと、explained と付いても処理が決まりません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 得意先との取引の金額、請求書番号、相殺や値引の内訳、そして通知書に印刷されている振込先の口座情報です。個人の情報はほとんど含みませんが、得意先との取引条件がそのまま読める書類です。
- 有料の利用区分で使う … Gemini API の追加利用規約では、有料のサービスではプロンプトと応答を製品の改善に使わないとされ、無料のサービスでは改善に使われ、人が読むことがあるとされています。無料のサービスには機密の情報を送らないよう書かれています
- AIに渡す範囲を絞る … 仕分けに口座番号は要りません。読み取り結果から、口座の欄を除いてから渡す設計にできます
- 差額の扱いを自動で決めない …
unexplainedの差額を値引として認めるか、得意先に問い合わせるかは、取引の関係を知っている人が決めることです - 差し引かれた手数料が取引の条件に合っているかは、法務と確かめる … 公正取引委員会の取適法のQ&Aでは、合意の有無にかかわらず、代金を中小受託事業者の口座へ振り込む際の手数料を中小受託事業者に負担させ、代金から差し引くことは本法違反として問題となるとされています。自社がその立場に当たるかは取引ごとに違うため、この構成は
feeの行を一覧にするところまでにし、当否の判断は法務に回します - 様式メモを外部へ出さない … 得意先ごとの控除の癖がまとまった一覧で、取引条件の集まりです。 手がかりとして必要な欄だけを渡します
誤りが起きた場合のリスクは、理由のない差額を説明済みとして消し込むことと、正しい支払を差額ありとして照会することの2つです。 前者は書かれていない控除を fee にすると起き、後者は読み違いを needs_review に回さないと起きます。
10まず何から始めるか
1週目:様式メモと区分表を作る
枚数の多い上位30社について、請求書番号を書く欄の名前、相殺と控除の載り方、別紙の有無を1社1行で書き出します。あわせて、payment/fee/offset/discount/other の区分表に、通知書で見かける語を並べます。
2週目:20枚で試す
差額のあった得意先を中心に20枚を選び、手元のAIサービスに仕分けをさせます。書かれていない控除を手数料にしていないかを最優先で見ます。
3週目:差額の扱いを決める
手数料の差し引き、相殺、値引のそれぞれを、どう処理し誰が判断するかを営業と経理で決めます。 ここが決まらないうちに組むと、状態は出るのに処理が進みません。
4週目:取込フォルダから仕分けの一覧までをつなぐ
Apps Script で取込フォルダを見張り、Document AI と Gemini API を呼び、仕分けの結果をスプレッドシートに書き出すところまで作ります。この時点では台帳に書き込まず、一覧だけを見ます。
2か月目: 台帳の行の照合と差額の計算を足し、状態を付けます。unexplained と needs_review の件数を毎週数えます。3か月目以降: 照会文の下書きを足し、1枚12分が何分になったかを実測します。FAXで届く得意先にPDFでの送付を頼み、様式メモの書き足しが止まった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Form Parser がOCRのテキストに加えてキーと値のペア(エンティティとチェックボックス)、表、一般的なエンティティを抽出し、200を超える言語に対応すること。言語の一覧に日本語があること。ページ上限が同期15、バッチ100であること。Invoice Parser が請求書番号・仕入先名・請求金額・税額・請求日・支払期日などを抽出すること | Google Cloud: Processor list | 2026-10-06 |
| Form Parser が事前学習済みで追加の学習ができないこと。表の抽出が行や列をまたぐセルのない単純な表を対象とすること | Google Cloud: Form Parser | 2026-10-06 |
formFields が fieldName と fieldValue を持ち、キーが文書に書かれた文字そのものであること。表が headerRows と bodyRows で返ること。text と textAnchor の関係 | Google Cloud: Handle the processing response | 2026-10-06 |
| 対応形式が PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などであること。スキャンは最低200dpiが望ましいこと。非可逆の圧縮で精度が落ちうること | Google Cloud: Supported files | 2026-10-06 |
指定したJSONスキーマに従う応答を生成させられ、enum と required を使えること。構文として正しいJSONでも値はアプリケーションで検証すべきこと | Gemini API: Structured outputs | 2026-10-06 |
| 有料サービスではプロンプトと応答を製品の改善に使わず、無料サービスでは改善に使われ人が読むことがあり、機密の情報を送らないよう求めていること | Gemini API 追加利用規約 | 2026-10-06 |
| Apps Script の1回の実行が6分までであること | Apps Script: Quotas for Google Services | 2026-10-06 |
| 時間主導型のトリガーが毎分から月1回までの間隔で動かせること | Apps Script: Installable triggers | 2026-10-06 |
| 合意の有無にかかわらず、振込手数料を中小受託事業者に負担させ代金から差し引くことが本法違反として問題となること | 公正取引委員会: よくある質問コーナー(取適法) | 2026-10-06 |
差し引かれた手数料や相殺が取引の条件に合っているかは、法務と営業で確かめてください。 本記事は公的機関と各製品の公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0454)についてのご相談はこちらから。
