取引銀行から毎月届く返済のお知らせと利息の計算書を読み取り、借入金の台帳と照らして、元金・利息・適用金利の食い違いを財務担当へ出す
取引銀行から届く返済のお知らせと利息の計算書を読み取り、借入金の台帳の予定と突き合わせます。元金・利息・適用金利のどれが食い違っているかを、借入ごとに財務担当へ出します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- 不動産/商社/建設/製造
- 対象部門
- 経理/財務
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/属人化している/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/属人化解消/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 郵送の書類をスキャンし、PDFで届いたものとあわせて共有フォルダに保存する
- 1通ずつ開き、どの借入の書類かを借入番号(口座番号)と金額から特定する
- 返済日・元金・利息・適用金利・残高を、台帳の該当月の行の横に書き写す
- 台帳の予定額と比べ、利息は残高×金利×日数÷年日数を電卓で検算する
- 合わないものは、金利の見直しを見落としていないか、日数の数え方が違わないかを契約書で確かめる
- 理由が分からないものは、メモを付けて銀行の担当者に電話かメールで聞く
- 合ったものは会計システムの支払利息と借入金の仕訳に回す
- 人郵送の書類をスキャンし、インターネットバンキングのPDFとあわせて取込フォルダに保存する
- 自動Apps Script が数分おきに取込フォルダを見て、新しいファイルを拾う
- 自動Document AI が書類を読み、項目名と値の組・表・信頼度を返す
- 自動Gemini API が書類の種類を見分け、借入番号・返済日・元金・利息・適用金利・利息の期間・残高を決まった形にそろえる
- 自動Apps Script が借入番号で台帳の行を引き、借入ごとの条件(日数の数え方、年日数、端数の扱い)を読む
- 自動Apps Script が元金と残高を比べ、利息を台帳の条件で検算し、適用金利を台帳の金利と比べる
- 自動食い違いの要素ごとに理由の区分を付け、照合結果のシートに書き込む
- 人財務担当が `match` 以外の行だけを開き、照会するか台帳を直すかを決める
- 人金利変更のお知らせは、内容を確かめてから台帳の金利を直す
- 【人/自動】 合ったものは会計システムへの仕訳に回す
各工程の詳しい説明を読む
- 郵送の書類をスキャンし、PDFで届いたものとあわせて共有フォルダに保存する
- 1通ずつ開き、どの借入の書類かを借入番号(口座番号)と金額から特定する
- 返済日・元金・利息・適用金利・残高を、台帳の該当月の行の横に書き写す
- 台帳の予定額と比べ、利息は残高×金利×日数÷年日数を電卓で検算する
- 合わないものは、金利の見直しを見落としていないか、日数の数え方が違わないかを契約書で確かめる
- 理由が分からないものは、メモを付けて銀行の担当者に電話かメールで聞く
- 合ったものは会計システムの支払利息と借入金の仕訳に回す
(a)利息の検算が人によって違う。 日数を返済日の翌日から数えるのか当日から数えるのか、年365日で割るのか、うるう年をどうするのか。借入ごとに契約で決まっていますが、台帳には書かれていません。 担当者は「この銀行はこう」という覚え方で検算していて、覚えていない人が数えると、正しい利息でも合わないことになります。
(b)金利の見直しが台帳に入らない。 変動金利の借入では、基準金利が動くと「適用金利変更のお知らせ」が届きます。この1通を見落とすと、台帳は古い金利のまま翌月以降の予定を作り続けます。 気づくのは、利息の計算書と台帳の差が何か月か続いてからです。
(c)書類の種類を見分けるだけで時間を取る。 どれが返済前の予告でどれが返済後の確定かを、書式に慣れていないと読み分けられません。予告の額を確定の額として写す取り違えが起きます。
(d)月90件を全部丁寧に見ることは続かない。 合ったものまで同じ手間で見ているので、本当に見るべき食い違いに時間が残りません。
- 【人】 郵送の書類をスキャンし、インターネットバンキングのPDFとあわせて取込フォルダに保存する
- 【自動】 Apps Script が数分おきに取込フォルダを見て、新しいファイルを拾う
- 【自動】 Document AI が書類を読み、項目名と値の組・表・信頼度を返す
- 【自動】 Gemini API が書類の種類を見分け、借入番号・返済日・元金・利息・適用金利・利息の期間・残高を決まった形にそろえる
- 【自動】 Apps Script が借入番号で台帳の行を引き、借入ごとの条件(日数の数え方、年日数、端数の扱い)を読む
- 【自動】 Apps Script が元金と残高を比べ、利息を台帳の条件で検算し、適用金利を台帳の金利と比べる
- 【自動】 食い違いの要素ごとに理由の区分を付け、照合結果のシートに書き込む
- 【人】 財務担当が
match以外の行だけを開き、照会するか台帳を直すかを決める - 【人】 金利変更のお知らせは、内容を確かめてから台帳の金利を直す
- 【人/自動】 合ったものは会計システムへの仕訳に回す
8番目が、この設計の分かれ目です。人が見るのは全件ではありません。 合ったものは一覧で件数を流し見て終わりにし、食い違いと出たものと、読み取りに自信のないものだけに時間を使います。
9番目で台帳を自動で直さないのも、意図してのことです。 読み違えて書き換えると、以後のすべての照合が誤った金利を基準に動きます。
02今回想定するシステム構成
返済のお知らせ・利息の計算書・返済予定表・金利変更のお知らせ(紙・PDF) │ 紙はスキャンして取込フォルダへ ▼【トリガー】Google Apps Script の時間主導型トリガー(数分おき) Google Apps Script ── 形式・ページ数の確認、銀行の推定 ▼ Google Document AI(Form Parser) │ 項目名と値の組・表・信頼度を返す ▼ Gemini API ── 書類の種類の判定と、項目の対応付け │ notice(返済前の予告)/statement(返済後の確定)/schedule/rate_change ▼ Google Apps Script ── 台帳の行を引き、元金・利息・適用金利を検算 │ match/principal_diff/interest_diff/rate_diff/unmatched/needs_review ├──▶ 照合結果のシートへ、要素ごとの差と理由 └──▶ 銀行への照会メモの下書き ▼ 【人が match 以外だけ確認】──▶ 台帳の修正・仕訳へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | Azure AI Document Intelligence |
| 生成AI | Gemini API(書類の種類の判定と、台帳の項目への対応付け) | Claude API、OpenAI API |
| 差異計算 | Google Apps Script(利息の検算、元金・残高・適用金利の突き合わせ) | Python |
| 連携 | Google Apps Script(取込フォルダの監視、台帳の読み取り、結果の書き込み) | Python |
| 保管 | Google ドライブ、Google スプレッドシート | 既存の資金管理システム |
新しく作るのは、台帳に足す借入ごとの条件の列です。 日数の数え方(片端か両端か)、年日数、利息の端数の扱い、返済日が休日のときの扱い。どれも契約書にあり、担当者の頭の中にしか無かったものです。
土台は Document AI の Form Parser です。 公式のプロセッサ一覧では、OCRのテキストに加えて、キーと値のペア(エンティティとチェックボックス)、表、一般的なエンティティを抽出するとされ、200を超える言語に対応します。言語の一覧には日本語(ja)があります。ページの上限は同期処理で15ページ、バッチ処理で100ページです。
Form Parser は事前学習済みで、追加で学習させることはできないとされています。銀行ごとに学習させない代わりに、どの書式でも項目名と値の組を返します。 返ってくる項目名は書類に書かれている文字そのもので、「約定返済元金」「ご返済元金」「元金」は別のキーとして返ります。そろえるのは後段の Gemini API の仕事です。
一覧には銀行の取引明細書向けの Bank Statement Parser もありますが、使いません。 名義・口座・取引などを抽出するとされていますが、対応言語は英語だけです。日本の銀行の書類は、汎用の Form Parser で読みます。
表の読み取りには限りがあります。 Form Parser の表の抽出は、行や列をまたぐセルのない単純な表が対象とされています。見出しが2段の返済予定表は、全文のテキストから行を拾い直します(第7章)。
03どうやって実装するのか
処理の起点を決める
Google Apps Script の時間主導型トリガーで、数分おきに取込フォルダを見ます。 時間主導型のトリガーは、毎分から月1回までの間隔で動かせるとされています。返済日は銀行と借入ごとに散らばっているため、月末にまとめて処理しません。 返済の前に届くお知らせの段階で食い違いを見つければ、引き落としの前に銀行に確かめられます。
入る経路は2つです。郵送の紙をスキャンしたものと、インターネットバンキングからダウンロードしたPDFです。どちらも同じ取込フォルダに入れ、そこから先は区別しません。ダウンロードは人が行います(第13章)。
1回の実行で処理する件数に上限を置きます。 Apps Script の1回の実行は6分までとされています。1回に5件までとし、残りは次の実行に回します。 処理済みフォルダへ移すのは、照合結果のシートへの書き込みまで成功したときだけにします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 銀行の書類 | PDFまたは画像。受け取った日時と経路 | 取込フォルダ |
| 読み取り結果 | 項目名と値の組、表のセル、全文のテキスト、項目ごとの信頼度 | Document AI(Form Parser) |
| 借入金の台帳 | 借入番号、銀行、返済日、約定の元金、予定の残高、適用金利 | Google スプレッドシート |
| 借入ごとの条件 | 日数の数え方、年日数、利息の端数の扱い、休日の扱い、金利の種別と見直し日 | 台帳に足す列 |
| 銀行の書式メモ | 借入番号が書かれる欄の名前、予告と確定の見分け方、利息の期間の書き方 | 自社で用意する一覧 |
| 営業日カレンダー | 土日・祝日・年末年始の銀行休業日 | 自社で用意する一覧 |
質を決めるのは、借入ごとの条件の列です。 片端と両端の違いだけで1日分の利息が変わります。 差が銀行の誤りか自社の数え方の誤りかを分けるには、条件を台帳に書いておくしかありません。
営業日カレンダーは、返済日のずれを説明するために持ちます。 返済日が休日で翌営業日にずれると、利息の日数が伸びます。理由として付けられないと、毎月同じ食い違いが人に回ってきます。
データの取得方法を決める
読み取りは、Apps Script から Document AI の処理のAPIを呼ぶだけです。ファイルを渡すと、Document という形の応答が返ります。
| 取るもの | 応答のどこから | 何に使うか |
|---|---|---|
| 項目名と値の組 | pages[].formFields[] の fieldName と fieldValue | 借入番号、返済日、元金、利息、適用金利、残高 |
| 表 | pages[].tables[] の headerRows と bodyRows | 返済予定表の各回の行 |
| 全文のテキスト | text と、各要素の textAnchor | 表として取れなかった行、利息の期間の記載を拾い直す |
| 信頼度 | 各要素の layout の confidence | 金額・金利・日付の読み取りが確かかの判定 |
金利は、信頼度とあわせて取ります。 「1.875%」と「1.375%」の違いは、利息の額をまるごと変えます。信頼度の低い金利や金額は、その書類を needs_review にして人に回します。
台帳はスプレッドシートを読むだけで足ります。 引く順は借入番号が先で、番号が無い書類に限り銀行・返済日・元金の組で候補を出します。候補が2つ以上あれば選ばず、unmatched にします。
AIへ渡す前に整形する
- 形式の確認 … Form Parser の対象は PDF、GIF、TIFF、JPEG、PNG、BMP、WebP です。それ以外は PDF にします
- ページ数の確認 … 同期処理は15ページまでです。期間の長い返済予定表で15ページを超えるものは、バッチ処理に回します
- 解像度の確認 … 公式には、OCRの精度のためにスキャンは最低200dpiが望ましいとされ、300dpi以上が一般に最もよい結果になるとされています。複合機の既定の設定を確かめます
- 圧縮の確認 … JPEG のような非可逆の形式は、ファイルを小さくすると精度が落ちることがあるとされています。保存形式は PDF にします
- 銀行の推定 … ファイル名、1ページ目の銀行名とロゴの近くの文字から銀行を推定し、書式メモを引きます
- 1ファイルに複数の書類がないかの確認 … 同じ封筒の「お知らせ」と「計算書」をまとめてスキャンしたものは、ページで分けます
- 重複の検知 … 同じ借入番号・返済日・書類の種類のものが直近にあれば、既処理として印を付けます
6番目を軽く見ないでください。 予告と確定が1つのファイルにあると、2つの数字が混ざります。返済日がずれると予告と確定の利息は違う額になるので、混ざると理由が付けられません。
AIに処理させる
させるのは、書類の種類を見分け、書かれた数字を決まった項目に写すことだけです。 計算はさせません。
| 写す項目 | 当たるものの例 | 判断できないときの扱い |
|---|---|---|
| 書類の種類 | 返済前の「ご返済のお知らせ」、返済後の「利息計算書」、返済予定表、金利変更のお知らせ | 予告か確定か書かれていなければ unknown |
| 借入番号 | 「お借入番号」「口座番号」「融資番号」 | 読めなければ空にして needs_review |
| 返済日 | 「ご返済日」「約定日」「お取引日」 | 複数の日付があり決められなければ空 |
| 元金・利息・合計 | 「ご返済元金」「お利息」「ご返済額合計」 | 合計しか書かれていなければ元金と利息は空 |
| 適用金利 | 「適用利率」「ご融資利率」。基準金利とスプレッドが分けて書かれていれば両方 | 書かれていなければ空。台帳の金利で埋めない |
| 利息の期間と日数 | 「利息計算期間 4月25日〜5月26日(31日)」 | 期間だけで日数が無ければ日数は空 |
| 残高 | 「返済後残高」「お借入残高」 | 返済前か返済後か書かれていなければ balance_basis を unknown |
右端の列が、この構成でいちばん大事な区別です。 書かれていない項目を、台帳の値や計算で埋めさせません。特に適用金利と日数は、書かれていなければ空のままにします。
| させないこと | 理由 |
|---|---|
| 利息の計算・検算 | 掛け算と割り算で決まる。Apps Script が台帳の条件で行う |
| 書かれていない金利や日数の補完 | 台帳の値で埋めると、食い違いが必ず「一致」になる |
| 予告の額を確定の額として扱うこと | 返済日のずれで額が変わる。種類は書かれた語で決める |
| 借入番号の補完 | 似た番号に寄せると、別の借入の台帳と照合される |
| 食い違いの原因の推測 | 理由の区分は Apps Script が要素ごとの差から付ける |
2行目がいちばん起きやすい失敗です。 適用金利が書かれていない計算書を渡すと、AIは利息と残高から金利を逆算して埋めます。その瞬間、金利の見直しの見落としが「一致」にすり替わります。
指示内容を固定する
あなたは財務部門で、取引銀行から届いた借入金の書類を読み、
借入金の台帳と照合するための下書きを作る立場です。
OCRが返した読み取り結果だけを見てください。推測で埋めないでください。
【やること】
1. 書類の種類を次から1つ選んでください。
- notice ...... 返済日より前に届く予告(「ご返済のお知らせ」「ご返済予定額」など)
- statement ... 返済後の確定(「利息計算書」「ご返済明細」「お取引明細」など)
- schedule .... 返済予定表(複数回分の返済日・元金・利息・残高の表)
- rate_change . 適用金利の変更のお知らせ
- unknown ..... 上のどれか決められない
2. 書類に書かれている数字を、指定の項目に写してください。
返済予定表のときは、表の各回を1行ずつ installments に入れてください。
【厳守事項】
- 数字は書類に書かれたものをそのまま入れてください。
桁区切りや「円」「%」は外してかまいませんが、値は変えないでください。
- 計算をしないでください。適用金利が書かれていないときに、
利息と残高から逆算して埋めないでください。書かれていなければ空にします。
- 利息の日数が書かれていないときに、期間から数えて埋めないでください。
- 元金と利息の合計しか書かれていないときに、元金と利息に分けないでください。
- 借入番号は読み取った文字列をそのまま loan_ref に入れてください。
桁を補う、似た番号に直すことをしないでください。読めなければ空にします。
- 「予定」「お知らせ」と書かれた額を、確定した額として扱わないでください。
予告か確定かは、書類に書かれた語で決めてください。
- 残高が返済前の残高か返済後の残高か書かれていなければ、
balance_basis を unknown にしてください。
- 食い違いの原因や、台帳との比較について書かないでください。
- evidence には、各値の根拠にした文字列をそのまま写してください。
- 借入の書類でないもの(預金の明細、手数料の案内など)と判断した場合は、
写さずに document_type を other にしてください。
【読み取り結果】{ocr_result}
【この銀行の書式メモ】{bank_note}
「逆算して埋めない」と「期間から数えて埋めない」を分けて書くのは、片方だけでは止まらないからです。 金利の逆算だけを禁じると日数を数えて埋め、銀行が片端と両端のどちらで数えたかという情報が消えます。
出力形式を固定する
Gemini API の構造化出力で、次の形のJSONに固定して受け取ります。 公式には、指定したJSONスキーマに従う応答を生成させられるとされ、enum で値の候補を限り、required で必須の項目を決められます。
{
"document_type": "notice | statement | schedule | rate_change | unknown | other",
"bank_name": "",
"loan_ref": "",
"payment_date": "",
"principal": null,
"interest": null,
"total_payment": null,
"rate": { "applied": null, "base": null, "spread": null, "effective_from": "" },
"interest_period": { "from": "", "to": "", "days": null },
"balance": null,
"balance_basis": "after | before | unknown",
"installments": [],
"evidence": [{ "field": "", "text": "", "confidence": 0 }]
}
1つ目の理由は、AIの仕事と計算の仕事を別の層に置けることです。 JSONはAIが埋め、検算と判定は Apps Script が台帳の条件で行います。
| 状態 | 付ける条件(Apps Script が決める) |
|---|---|
match | 元金・残高が台帳と一致し、利息が台帳の条件で検算した額と端数の範囲で一致し、適用金利が台帳と一致 |
principal_diff | 元金または残高が台帳の予定と違う |
interest_diff | 元金は合うが、利息が検算の額と違う |
rate_diff | 書類の適用金利が台帳の金利と違う |
unmatched | 借入番号で台帳の行が見つからない、または候補が2つ以上ある |
needs_review | 金額・金利・日付の信頼度が基準を下回る、または種類が unknown |
interest_diff には、要素ごとの理由を付けます。 Apps Script は、書類の日数と台帳の日数、書類の金利と台帳の金利を別々に比べ、どれが違うのかを reason に入れます。
reason | 意味 |
|---|---|
days_holiday_shift | 返済日が休日で翌営業日にずれ、日数が伸びた。営業日カレンダーで説明がつく |
days_count_method | 日数の数え方(片端・両端)が台帳の条件と違う |
rate_not_updated | 書類の金利が台帳と違う。台帳の金利の更新漏れが疑われる |
rounding | 差が端数の範囲。台帳の端数の扱いと違う |
unexplained | 上のどれでも説明できない |
2つ目の理由は、スキーマに合っていても値が正しいとは限らないことです。 公式にも、値はアプリケーションの側で検証するよう書かれています。元金と利息の和が total_payment と合わなければ needs_review にします。
3つ目は、evidence で確認が速くなることです。 利息の期間の原文が残っていれば、画像を開く前に銀行の数え方が分かります。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 取込フォルダ | Apps Script の時間主導型トリガー | 新しいファイルを拾う |
| Document AI | API呼び出し | 項目名と値の組・表・信頼度を返す |
| Gemini API | API呼び出し(構造化出力) | 書類の種類の判定と、項目への対応付け |
| 借入金の台帳 | スプレッドシートの読み取り | 予定の元金・残高・金利と、借入ごとの条件 |
| 照合結果のシート | スプレッドシートへの書き込み | 要素ごとの差、状態、理由、根拠の文字列 |
| 会計システム | 書き込まない | 仕訳は既存の手順で行う |
借入金の台帳には書き込みません。 書き込むのは別シートの照合結果だけです。金利変更のお知らせを読んだときも、台帳の金利は直しません。 照合結果に「rate_change を受け取った。台帳の金利は未更新」と出し、人が直します。
銀行への照会メモの下書きは、unexplained と rate_diff にだけ作ります。 宛先は銀行の担当者ですが、送るのは財務担当です。 下書きには借入番号、返済日、書類の値、自社の検算の値、どの要素が違うかを並べ、銀行の担当者が自分の計算と比べやすい形にします。
人が確認する
人が開くのは match 以外の行だけです。 match のものは一覧で件数と銀行を流し見ます。全件を開く設計にすると、第10章の9.0時間には収まりません。
needs_reviewを先に見る … 金額・金利・日付を画像で確かめて直しますrate_diffを見る … 金利変更のお知らせが届いていないか、取込フォルダと照合結果を探します。届いていれば台帳を直し、届いていなければ銀行に確かめますinterest_diffのreasonを読む …days_holiday_shiftとroundingは説明がつくものとして流し、days_count_methodは契約書で確かめますunexplainedとprincipal_diffを照会に回す … 下書きを直して銀行へ送ります- 判断を記録する … 台帳を直したか、銀行の誤りか、照会中かを残します
2番目を省かないでください。 適用金利の食い違いは、放っておくと翌月以降の全部の予定に乗ります。
目標は、90件をならして1件6分です。 開くのは3割前後という想定で、それより多い月は、台帳の条件の列が埋まっていない借入があります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 返済予定表が15ページを超える | 同期処理の上限。バッチ処理(100ページまで)に回す |
| 表が2段の見出しで取れない | 単純な表が対象。全文のテキストから行を拾い直し、needs_review を付ける |
| 予告と確定が1ファイルに入っている | ページで分割して再投入。分けられなければ needs_review |
| 繰上返済・条件変更の直後 | 台帳の予定が古い。新しい返済予定表が届くまで、その借入は needs_review |
| 書類に適用金利が書かれていない | 金利の照合は「書類からは確かめられない」として、利息の検算だけ行う |
| 借入番号が読めない | 銀行・返済日・元金で候補を出し、1つに決まらなければ選ばない |
| 借入の書類でないものが混ざる | document_type が other。照合せず担当者へ戻す |
| 元金と利息の和が合計と合わない | needs_review にする |
| APIが応答しない、6分を超える | 取込フォルダに残す。処理済みへ移すのは書き込み成功時だけ |
4行目がいちばん手間のかかる例外です。 作り直した返済予定表が届くまでの書類は、古い予定と比べると全部食い違いになります。繰上返済を実行したら、その借入に「予定表待ち」の印を付けておきます。
記録を残す
- 元の書類のファイルと、受け取った日時・経路(郵送/インターネットバンキング)
- Document AI が返した
DocumentのJSONの全文 - Gemini API に渡した書式メモの版と、返ってきたJSON
- Apps Script が検算した値、状態、理由、そのとき照合した台帳の行と借入ごとの条件
- 人が状態を覆した記録と、台帳を直した記録
- 銀行に照会した日時と、銀行からの回答
4つ目で「そのときの条件」を残すのは、条件が後から直るためです。 当時どの条件で検算したかが残っていないと、どの月の結果をやり直せばよいかが決まりません。
04実装レベルの3段階
最小構成では件数がさばけません。 確かめるための段階です。 半自動化で、1件20分が12分程度になります。 書き写しは自動になりますが、台帳の行を探す作業と利息の検算が残ります。本格構成で6分になり、この段階が本記事の想定です。 差が大きいのは、利息の検算が1件ずつの電卓の作業だからです。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、利息の期間を書かない銀行が先に分かります。書式メモをそこで埋めてから進むほうが、空振りが減ります。
05工数削減シミュレーション
導入後 90件 × 6分 ÷ 60 = 9 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 複数の取引銀行から証書貸付で借入をしており、返済のお知らせや利息の計算書が紙・PDFで毎月数十通届く製造業・商社・建設業・不動産業。変動金利の借入が混ざり、適用金利と利息の額が予定どおりかを担当者が電卓で検算している場合。借入金の台帳をスプレッドシートで持ち、Google Workspace を使っている場合。
- 借入が数本で、返済のお知らせが月に数通しか届かない場合。銀行の法人向けサービスから返済と利息の明細をデータで受け取り、台帳へ取り込めている場合。借入ごとの日数の数え方や端数の扱いを契約書で確かめておらず、台帳に条件を書けない場合。なお、食い違いを銀行にどう照会するか、契約の条件をどう読むかの判断はこの構成では代替できません。
07最小構成で試す方法
- 先月届いた書類から、変動金利の借入と、返済日が休日にずれた借入を中心に15件を選ぶ
- その15件について、担当者が当時どう検算し、合わなかったものをどう片付けたかを聞き取る
- 15件を1件ずつ手元のAIサービスの画面に貼り付ける
- 「この書類の種類(返済前の予告/返済後の確定/返済予定表/金利変更のお知らせ)を答え、借入番号・返済日・元金・利息・適用金利・利息の期間と日数・残高を表にしてください。書かれていない項目は空にし、計算で埋めないでください」と指示する
- 出てきた表を使って、台帳の条件で利息を手で検算し、当時の担当者の結果と突き合わせる
| 出てきた内容 | 判断 |
|---|---|
| 書類の値が正しく写り、検算で当時と同じ結論になった | OCRとワークフローの連携に進む |
| 書かれていない金利や日数を計算で埋めた | 指示の書き方で直る。構成は有効 |
| 台帳の条件が分からず検算できない借入が多い | 契約書の読み直しが先。 AIの問題ではない |
3行目が出ることは珍しくありません。 失敗ではなく、検算が担当者の記憶に頼っていたことが分かったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 書かれていない金利を逆算して埋める | 逆算を禁じ、金利が空のときは金利の照合をしないと規則に書く |
| 予告の額と確定の額が混ざる | 種類を先に決めさせ、種類ごとに比べる台帳の列を切り替える |
| 正しい利息が日数の数え方で合わない | 借入ごとの条件を台帳に書く。 担当者の記憶に頼らない |
| 返済日が休日にずれて毎月食い違う | 営業日カレンダーで days_holiday_shift を付けて流す |
| 金利変更のお知らせを読んで台帳を自動で直す | 台帳は人が直す。 物差しを機械に触らせない |
| 繰上返済の直後に全部食い違う | 「予定表待ち」の印を付け、新しい予定表が届くまで needs_review |
| 借入番号の書き方が銀行ごとに違う | 書式メモに欄の名前と桁の形を書く |
| 同じ日に同じ元金の借入が2本ある | 候補が2つ以上なら選ばない。借入番号で引けるようにする |
| 返済予定表の2段の見出しが取れない | 全文のテキストから行を拾い直す |
| 食い違いを全部銀行に問い合わせる | reason を読んでから。説明がつくものは照会しない |
上の2行が、この構成の失敗のほとんどです。 どちらも「合ってしまう」方向の誤りで、一覧からは誰も気づきません。
3行目と5行目は、運用が始まってから効いてきます。 条件が書かれていないと、正しい利息が毎月 interest_diff に出て、担当者は一覧を信用しなくなります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 取引銀行の名前、借入の本数と残高、適用金利、返済の予定です。会社の資金繰りと銀行との取引条件そのもので、社外に知られれば取引の交渉にも響きます。
- Gemini API は有料の枠で使う … 公式の利用規約では、有料のサービスではプロンプトと応答を製品の改善に使わないとされる一方、無料のサービスでは改善に使われ、人が読むことがあるとされ、機密の情報を送らないよう求めています。請求先のアカウントを付けたプロジェクトから呼びます
- AIに渡すのは書類1件分だけにする … 借入金の台帳の全体をAIへ渡しません。台帳との照合は Apps Script の側で行い、AIには書類の読み取り結果と書式メモだけを渡します
- 銀行のサイトへ自動でログインしない … インターネットバンキングのIDとパスワードを Apps Script に持たせる設計にしません。ダウンロードは人が行い、取込フォルダに置きます
- 照会の連絡を自動で送らない … 出すのは下書きまでです。銀行の担当者との関係と、照会の言い方は財務担当が決めます
- 取込フォルダと照合結果の権限を絞る … 財務部の3名と、仕訳を回す経理の担当だけが見られるようにします
- この構成は契約の解釈を代替しない … 日数の数え方や端数の扱いをどう読むかは、契約書と銀行の説明で決めることです。 この構成が出すのは、書類の数字が台帳の条件と合ったかどうかという事実だけです
誤りが起きた場合のリスクは、食い違いの見落としと、正しい書類の誤った照会の2つです。 前者は指示で、後者は台帳の条件の整備で防ぎます。
10まず何から始めるか
1週目:借入ごとの条件を書き出す
借入金の台帳に、日数の数え方・年日数・端数の扱い・休日の扱いの4つの列を足します。36本すべてを一度に埋める必要はありません。変動金利の14本から埋めます。 食い違いが出やすいのはこちらです。
2週目:15件で試す
先月の書類から15件を選び、手元のAIサービスで種類と数字を表にさせます。書かれていない金利や日数を計算で埋めていないかを最優先で見ます。
3週目:営業日カレンダーと書式メモを作る
銀行の休業日の一覧と、8行分の書式メモを作ります。書式メモには、借入番号の欄の名前と、予告と確定の見分け方を必ず書きます。
4週目:取込フォルダから照合結果までをつなぐ
Apps Script で取込フォルダを見張り、Document AI と Gemini API を呼び、結果をシートに書き出すところまで作ります。この時点では検算をせず、写した数字の一覧だけを見ます。
2か月目: 台帳の行の引き当てと利息の検算を足し、状態と理由を出します。match 以外の件数を毎週数えます。3か月目以降: 照会メモの下書きを足し、1件20分が何分になったかを実測します。金利の見直しを1回またいで、rate_diff が最初の計算書で出ることを確かめた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Form Parser がOCRのテキストに加えてキーと値のペア(エンティティとチェックボックス)、表、一般的なエンティティを抽出し、200を超える言語に対応すること。言語の一覧に日本語があること。ページ上限が同期15、バッチ100であること。Bank Statement 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が望ましく300dpi以上が一般に最もよいこと。非可逆の圧縮で精度が落ちうること | 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 |
利息の日数の数え方や端数の扱いは、借入ごとの契約書と銀行の説明で確かめてください。 本記事は各製品の公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0530)についてのご相談はこちらから。
