前払費用と未払費用の計上漏れを、契約と支払データから毎月洗い出す
毎月の支払明細を契約書と突き合わせ、支払った期間と役務を受ける期間がずれている取引を拾い出して、前払費用・未払費用の計上が要りそうな契約の一覧を作ります。仕訳を起こすかどうかは経理が決めます。
- 利用ツール
- ChatGPT/Claude/Gemini/Google Apps Script/Make/n8n/Python/Zapier
- 対象業界
- IT・SaaS/その他/不動産/商社/士業
- 対象部門
- 経理/財務
- 対象業務
- 内容確認・チェック/集計・分析
- 主な課題
- 属人化している/情報が見つからない/確認ミスが多い
- AIで行う処理
- 判定
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 月次の締めで、会計システムから前月の支払明細を出力する
- 勘定科目と摘要を見て、経過勘定の対象になりそうな支払を目で拾う
- 拾った支払について、契約書を法務のファイルサーバーで探す
- 契約書を開き、有効期間と支払条件の条項を読む
- 前月の計上一覧を開き、その契約が既に計上済みかを確かめる
- 期間と金額から、按分額を電卓か表計算で計算する
- 重要性の観点から計上するかを判断し、計上するものだけ仕訳を起こす
- 決算期には、同じ作業を年間の全契約についてやり直す
- 自動月次の締めの翌営業日、会計システムから前月の支払明細を取得する
- 自動購買システムから発注データを、契約台帳から契約の一覧を取得する
- 自動支払明細から継続的な支払の候補を絞り、取引先名の書き方をそろえる
- 自動契約番号・発注番号・取引先名で、契約書のファイルを引き当てる
- 【AI】 契約書から役務の提供期間、支払のタイミング、自動更新、中途解約の条項を読み取り、条番号と原文を添えて返す
- 自動読み取った日付と支払額から、期間按分の概算額を計算する
- 自動社内の重要性のしきい値表を当て、計上候補・対象外・要確認に分ける
- 自動契約書の無い支払と、支払の無い契約を、別の一覧に出す
- 人経理が根拠(条番号と原文)を見て、計上するかどうかを決める
- 人経理が会計システムで仕訳を起票する
各工程の詳しい説明を読む
- 月次の締めで、会計システムから前月の支払明細を出力する
- 勘定科目と摘要を見て、経過勘定の対象になりそうな支払を目で拾う
- 拾った支払について、契約書を法務のファイルサーバーで探す
- 契約書を開き、有効期間と支払条件の条項を読む
- 前月の計上一覧を開き、その契約が既に計上済みかを確かめる
- 期間と金額から、按分額を電卓か表計算で計算する
- 重要性の観点から計上するかを判断し、計上するものだけ仕訳を起こす
- 決算期には、同じ作業を年間の全契約についてやり直す
問題は6つあります。
(a)拾う段階が記憶に頼っている。 勘定科目と摘要だけでは、継続的な役務の対価なのか、その月限りの支払なのかが分かりません。「支払手数料」で処理された年会費は、摘要に会の名前が無ければ見分けられません。
(b)契約書を探す時間が読み取る時間より長い。 取引先名でファイルサーバーを検索すると、見積書、注文書、覚書、更新前の旧契約が一緒に出てきます。どれが今有効な契約かを判断するところから始まります。
(c)契約書が見つからない支払がある。 部署がカードで契約したサブスクリプションや、発注書だけで始まった業務委託です。期間が分からないため、そのまま費用として流れます。
(d)支払が無い契約に気づけない。 後払の契約で請求書がまだ届いていない場合、支払明細には何も出ません。支払明細を起点に作業しているため、未払費用の側は構造的に漏れます。
(e)自動更新された契約の期間が分からない。 契約書に書かれているのは初回の期間だけです。更新されて3年目に入っている契約でも、契約書の日付は3年前のままです。
(f)決算期に負荷が集中する。 月次で拾いきれていないため、期末に240本の契約を一度に見直すことになります。他の締め作業と重なる時期に、もっとも時間のかかる作業が来ます。
- 【自動】 月次の締めの翌営業日、会計システムから前月の支払明細を取得する
- 【自動】 購買システムから発注データを、契約台帳から契約の一覧を取得する
- 【自動】 支払明細から継続的な支払の候補を絞り、取引先名の書き方をそろえる
- 【自動】 契約番号・発注番号・取引先名で、契約書のファイルを引き当てる
- 【AI】 契約書から役務の提供期間、支払のタイミング、自動更新、中途解約の条項を読み取り、条番号と原文を添えて返す
- 【自動】 読み取った日付と支払額から、期間按分の概算額を計算する
- 【自動】 社内の重要性のしきい値表を当て、計上候補・対象外・要確認に分ける
- 【自動】 契約書の無い支払と、支払の無い契約を、別の一覧に出す
- 【人】 経理が根拠(条番号と原文)を見て、計上するかどうかを決める
- 【人】 経理が会計システムで仕訳を起票する
自動化されるのは「候補を絞る」「契約書を引き当てる」「期間を読み取る」「按分額を計算する」「しきい値を当てる」「突き合わせの漏れを出す」の6つです。残るのは、会計処理として計上するかどうかの判断と、仕訳の起票です。
仕訳の起票はさせません。 出すのは「計上が要りそうな契約と、その根拠と概算額」までです。どの勘定科目で、どの部門に、いくらで計上するかは、会社ごとの基準と過去の処理との継続性で決まります。会計システムへの書き込み権限を、この仕組みに与えない設計にします。
重要性の判断もAIにさせません。 金額の小さいものを計上しないという扱いは、会社ごとに基準が決まっているはずのものです。その基準を表として持ち、機械が当てます。 AIに聞くと、同じ契約でも月によって答えが変わります。
02今回想定するシステム構成
契約書PDF(法務のファイルサーバー) 支払明細(会計システム)/ 発注データ(購買システム) 重要性のしきい値表・会計期間カレンダー(経理の表計算) │ ▼【トリガー】毎月 第3営業日 7:00(Make のスケジュール) Make のシナリオ │ ├──▶ 会計システムから前月の支払明細を取得(API または CSV) ├──▶ 購買システムから発注データを取得 │ ├──▶ Python ── 継続的な支払の候補を絞る │ 取引先名の書き方をそろえる │ 契約番号・発注番号で契約書のファイルを引き当てる │ ├──▶ Gemini API ── 契約書PDFから │ 役務の提供期間 / 支払のタイミングと周期 │ 自動更新条項 / 中途解約条項 │ + 条番号と原文の引用(JSON) │ ├──▶ Python ── 期間按分の概算額を計算する │ しきい値表を当てて 計上候補/対象外/要確認 に分ける │ 契約書の無い支払 / 支払の無い契約 を出す │ └──▶ 経過勘定の計上候補一覧(表計算)へ書き出し → 経理へ通知 │ ▼ 経理が条番号と原文を見て、計上するかを決める ──【人】 │ ▼ 仕訳の起票は経理が会計システムで行う ──【人】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理 | Gemini API | Claude API、OpenAI API |
| 差異計算 | Python | Google Apps Script |
| 連携 | Make | Zapier、n8n |
契約書の保管先、会計システム、購買システム、通知先のチャットツールは、既にあるものをそのまま使います。新しく用意するのは、契約書を読む処理と、按分としきい値を当てる処理と、それをつなぐシナリオの3つだけです。
Gemini API を置いているのは、契約書のPDFをそのまま渡せるためです。 公式のドキュメントでは、PDFは50MBまたは1,000ページまで扱え、各ページは258トークンに相当すると説明されています。小さいファイルはリクエストに直接埋め込み、大きいファイルや何度も使うファイルは Files API へアップロードする方法が案内されており、アップロードしたファイルは48時間保存され、この保管は無料とされています。
契約書を何十本もまとめて1回のリクエストに入れる設計にはしません。 公式のドキュメントでは、Gemini のモデルは100万トークン以上のコンテキストを扱えるとされる一方、探す情報が複数ある場合は、単一の情報を探すときと同じ精度では動かないと明記されています。1回に1契約、必要な覚書だけを添える形にします。
Python を差異計算に置いているのは、期間按分としきい値の判定を、誰が見ても同じ結果になる形で書くためです。 端数処理を1か所にまとめたいので、表計算の関数ではなくスクリプトにします。
Make はスケジュールでの起動と、システム間の受け渡しに使います。 公式のヘルプでは、シナリオの実行間隔は既定で15分ごとであり、「At regular intervals」「Once daily」「Weekdays (Mon-Fri)」「Weekly」「Monthly」「Specified dates」「On demand」「Immediately」から選べると説明されています。月次で回すので「Monthly」か「Specified dates」を選びます。
03どうやって実装するのか
処理の起点を決める
毎月の締めが終わった翌営業日の朝を起点にします。支払明細が確定していない状態で走らせると、月の後半の支払が入っていない一覧ができあがり、翌月にもう一度同じ契約を見ることになります。
Make のシナリオのスケジュールで「Monthly」を選び、実行する日と時刻を指定します。既定では15分ごとに実行される設定になっているため、必ず変更してください。 月次の処理が15分おきに走ると、同じ契約書を何度もAPIへ送ることになります。
シナリオを有効化しないと動きません。 公式のヘルプでは、停止しているシナリオは手動で起動しない限り実行されないと説明されています。作っただけで安心して、1か月後に何も出ていないことに気づく、という取りこぼしが起きやすい部分です。「show advanced settings」で開始日と終了日を指定できるので、試験運用の期間を区切るときはここを使います。
2つ目の起点として、契約書のフォルダに新しいPDFが入ったときを置きます。最初の支払が起きる前に期間を読み取っておけば、初回の支払のときには既に期間が分かっています。3つ目として、期末月に、期首からの全契約を対象に走らせる経路を用意します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 支払明細 | 支払日、取引先名、金額、消費税、勘定科目、部門、摘要、請求書番号、発注番号 | 会計システム |
| 発注データ | 発注番号、取引先、発注日、対象期間の記載、契約番号 | 購買システム |
| 契約書PDF | 本体契約、覚書、変更契約、注文請書 | 法務のファイルサーバー |
| 契約台帳 | 契約番号、取引先、契約名、担当部署、解約の有無 | 法務が持つ表(無ければ作る) |
| 前月までの計上一覧 | 契約番号、対象期間、計上額、計上した月 | 経理の表計算 |
| 重要性のしきい値表 | 区分ごとのしきい値と取り扱い | 経理が持つ社内基準の表 |
| 会計期間カレンダー | 月次の締め日、期首、期末 | 経理の表計算 |
しきい値表を入力データとして持つことが、この構成の要です。 表の形は次のようにします。この数値は例であり、自社で決まっている基準に置き換えてください。
| 区分 | しきい値 | 取り扱い |
|---|---|---|
| 1件あたりの按分額 | 5万円未満 | 計上しない |
| 同一取引先の月間合計 | 20万円未満 | 計上しない |
| 役務の提供期間 | 1か月以内 | 計上しない |
| 期をまたぐ賃借料・保険料 | 金額を問わない | 金額にかかわらず一覧に出す |
しきい値が決まっていない場合は、この仕組みを作る前に経理と会計士で決めてください。 決めずに始めると、AIか担当者のどちらかがその場で判断することになり、月ごとに扱いが変わります。
データの取得方法を決める
支払明細: 会計システムにAPIがあれば前月分を日付で絞って取得し、APIが無い製品では月次で出力するCSVを共有フォルダに置いて Make のシナリオで読みます。どちらの場合も、取得する期間を「前月1日から前月末日まで」と固定してください。 締めのやり直しで支払日が動くことがあるため、実行のたびに前月分を取り直す作りにします。
発注データ: 購買システムから、契約番号を持つ発注を取得します。支払明細と契約書をつなぐ鍵が、発注番号であることが多いためです。
契約書PDF: 法務のファイルサーバーから、契約番号のフォルダ単位で取得します。契約番号でフォルダが切られていない環境では、まずそこを整えるほうが先です。 ファイル名だけで本体契約と覚書を見分けるのは、どの会社でも失敗します。
取得したPDFは Gemini API へ渡します。公式のドキュメントでは、PDF以外にも、TXT、Markdown、HTML、XML などは文字として扱えるが、図やレイアウトは失われると説明されています。契約書がWordのまま保管されている場合は、PDFに書き出してから渡します。
契約台帳: 法務が契約台帳を持っていない場合は、契約番号と取引先と解約の有無だけの表を経理が作ります。解約したかどうかは契約書には書かれていないため、この列だけは人が更新します。
AIへ渡す前に整形する
- 継続的な支払の候補を絞る … 勘定科目(賃借料、保険料、支払手数料、通信費など)、摘要に含まれる語(保守、ライセンス、利用料、年会費、顧問料、賃料)、同じ取引先への支払が過去12か月で3回以上あること、の3つで絞ります
- 取引先名をそろえる … 「株式会社」の前後、全角と半角、カッコの種類、英字の大文字小文字をそろえます。表示用には元の文字列を残します
- 契約書を引き当てる … 契約番号があればそれで、無ければ発注番号から、それも無ければ取引先名で候補を出します。候補が複数あるときは、AIに選ばせず、全部を1回のリクエストに添えて「どれを見たか」を返させます
- ファイルの大きさを確かめる … 50MBまたは1,000ページを超えるファイルはそのままでは渡せません。契約書本体と別紙を分け、期間と支払条件が書かれた部分だけを渡します
- 前月の計上一覧と照合する … 同じ契約番号と同じ対象期間の計上が既にあれば、AIへ渡さずに「計上済み」として分けます
- しきい値の前さばき … 支払額そのものが1件あたりのしきい値を大きく下回る支払は、按分すればさらに小さくなります。この段階でAIへ渡さないことで、読み取りの回数を減らせます
5番目と6番目で、AIへ渡す件数が大きく減ります。 契約書を読み直す必要があるのは、新しい契約と、期間が今月で切り替わる契約と、初めて出てきた取引先の分だけです。前月と同じ契約の同じ周期の支払は、読み取りの結果を使い回せます。
AIに処理させる
機械(Python)にさせること:
| 処理 | 内容 |
|---|---|
| 候補の絞り込み | 勘定科目、摘要の語、支払の反復性 |
| 契約書の引き当て | 契約番号・発注番号・取引先名での突き合わせ |
| 期間按分の計算 | 読み取った日付と支払額から、当月末時点の前払分・未払分を計算する |
| 日数と月数の計算 | 期首・期末・締め日との比較、残りの期間の算出 |
| しきい値の判定 | しきい値表を当てて、計上候補と対象外に分ける |
| 突き合わせの漏れ | 契約書の無い支払、支払の無い契約の抽出 |
| 前月との差分 | 新しく出てきた契約、消えた契約、金額が変わった契約 |
生成AI(Gemini API)にさせること:
| 処理 | 内容 |
|---|---|
| 役務の提供期間の読み取り | 開始日と終了日、それが契約書のどの記述から決まるか |
| 支払のタイミングの読み取り | 前払か後払か、周期、支払期日の定め |
| 自動更新条項の読み取り | 自動更新の有無、予告の期限、更新後の期間の定め |
| 中途解約条項の読み取り | 予告期間、既に払った分の精算の扱い |
| 期間のずれの指摘 | 「契約は4月1日から」だが「保守は検収日の翌日から」のような食い違い |
| 根拠の引用 | 上の各項目について、条番号とその条文の原文 |
| 読み取れないことの申告 | 書かれていない項目を null にし、理由を返す |
金額の計算は一切させません。 AIが返すのは、契約書に書かれている金額の文字列(「月額金330,000円(税込)」など)をそのまま写したものだけです。その文字列から数値を取り出すのも、按分するのも、機械が行います。
重要性の判断もさせません。 「この金額は少額だから計上不要」という文をAIが書くと、一覧の中で根拠が2種類混ざります。しきい値表を当てた結果だけが、対象外の理由になる作りにします。
仕訳も書かせません。 それらしい仕訳が並んでいると、経理はそれを確認する側に回ってしまい、自分で判断する場面が減ります。
指示内容を固定する
あなたは契約書から、会計処理に必要な期間の情報を読み取る担当者です。
下の契約書から、役務の提供を受ける期間と、代金を支払うタイミングを読み取ってください。
【厳守事項】
- 金額の計算をしないでください。按分、日割り、月割り、合計のいずれも行いません。
金額は契約書に書かれている文字列をそのまま period_amount_text に写してください。
- 読み取った項目には必ず、根拠になった条番号と、その条文の原文を evidence に入れてください。
原文は契約書から一字一句そのまま写し、要約や言い換えをしないでください。
- 契約書に書かれていない期間や日付を推測しないでください。
書かれていなければ、その項目を null にし、unknown_reason に理由を書いてください。
- 「重要かどうか」「計上すべきかどうか」を判断しないでください。
- 仕訳、勘定科目、借方・貸方、税区分を書かないでください。
- 契約期間と、役務の提供期間が違う場合は、両方を返してください。
例:契約の有効期間は4月1日からだが、保守の開始は検収日の翌日から、など。
- 自動更新の条項があれば auto_renewal に、予告の期限と更新後の期間を入れてください。
更新後の具体的な日付を計算しないでください。条文の定めをそのまま写します。
- 中途解約の条項があれば mid_term_termination に、予告期間と、
既に支払った分の精算についての定めを入れてください。
- 覚書、変更契約、注文請書が一緒に与えられている場合は、日付の新しいものを優先し、
どのファイルのどの条項を見たかを amendments に書いてください。
- 与えられたファイルのうち、この契約に関係しないものは used_files から外し、
その理由を書いてください。
【読み取る項目】
service_period_start / service_period_end ... 役務の提供を受ける期間
period_basis ... その期間が契約書のどの記述から決まるか(日付が直接書かれている、
検収日を起点とする、初回支払日を起点とする、など)
contract_period_start / contract_period_end ... 契約そのものの有効期間
payment_timing ... 前払 / 後払 / 都度 / 不明
payment_cycle ... 一括 / 月次 / 四半期 / 半期 / 年次 / 不定
payment_due ... 支払期日の定め(「請求書受領後30日以内」など、書かれたまま)
period_amount_text ... 期間に対応する金額の記載(文字列のまま。計算しない)
auto_renewal ... 自動更新の有無、予告の期限、更新後の期間の定め
mid_term_termination ... 中途解約の予告期間、既払分の精算の定め
evidence ... 上の各項目の根拠(条番号と原文)
【契約の情報】
契約番号:{contract_id} / 取引先:{vendor_name} / 与えたファイル:{file_list}
【この契約に紐づく支払明細】
{payment_rows}
支払明細は、契約書のどの条項に対応する支払かを見分けるためだけに使ってください。
支払明細の金額から期間を逆算しないでください。
「金額の計算をしないでください」を先頭に置いています。 契約書と支払明細を一緒に渡すと、指示が無ければ按分額まで書いてきます。
「原文を一字一句そのまま写す」が、確認を速くする部分です。 引用が契約書のテキストと一致するかは、後段の処理で機械的に確かめられます。一致しない引用は、契約書に無い文である可能性が高いので、一覧に出す前に「要確認」へ回します。
「更新後の具体的な日付を計算しないでください」も必要です。 自動更新の契約で「更新後の期間は2027年4月1日から」と日付を書かれると、それが契約書に書かれた日付なのか、AIが1年足した日付なのかが区別できません。開始日に期間を足す計算は機械が行います。
「関係しないファイルを外す理由を書かせる」は、引き当てが外れたときに効きます。 取引先名だけで候補を出すと別の案件の契約書が混ざり、AIがそれを無理に使うと、まったく別の期間が読み取られます。
出力形式を固定する
{
"contract_id": "",
"vendor_name": "",
"used_files": [],
"service_period_start": "2026-04-01",
"service_period_end": "2027-03-31",
"period_basis": "",
"contract_period_start": "2026-04-01",
"contract_period_end": "2027-03-31",
"payment_timing": "前払 | 後払 | 都度 | 不明",
"payment_cycle": "一括 | 月次 | 四半期 | 半期 | 年次 | 不定",
"payment_due": "",
"period_amount_text": "",
"auto_renewal": {
"exists": true,
"notice_deadline": "",
"renewed_term": ""
},
"mid_term_termination": {
"exists": true,
"notice_period": "",
"refund_treatment": ""
},
"amendments": [],
"evidence": [
{ "field": "service_period_start", "article": "第3条第1項", "quote": "" }
],
"unknown_reason": null
}
Gemini API では、response_format に type と mime_type と schema を渡すことで、応答をJSONスキーマに沿った形にできます。公式のドキュメントには次の形が示されています。
"response_format": {
"type": "text",
"mime_type": "application/json",
"schema": {
"type": "object",
"properties": { },
"required": [ ]
}
}
スキーマで使える型は string number integer boolean object array null です。payment_timing と payment_cycle は enum で固定します。 日付の項目は format に date を指定できます。ただし、すべてのJSONスキーマの機能が使えるわけではなく、非常に大きい、あるいは深く入れ子になったスキーマは拒否されることがあると明記されています。項目は上の程度に収めます。
evidence を必須項目にしてください。 ここが空で返ってくる読み取りは根拠を示せていないので、そのまま「要確認」へ回します。経理が見るのは、この条番号と原文です。
unknown_reason も必要です。 これが無いと、期間が書かれていない契約書でも、それらしい日付が入ってきます。「検収日を起点とすると書かれているが、検収日が契約書に無い」という申告が返るほうが、確認は速くなります。
システムへ連携する
読み取りと計算の結果を、3つの一覧に分けて書き出します。
一覧1:計上候補
| 列 | 中身 |
|---|---|
| 契約番号 / 取引先 / 契約名 | 基本情報 |
| 支払日 / 支払額 / 勘定科目 / 部門 | 支払明細から |
| 役務の提供期間 / 支払のタイミング | AIの読み取り |
| 根拠 | 条番号と原文の引用 |
| 区分 | 前払費用の候補/未払費用の候補 |
| 概算額 | 機械が計算した按分額(概算であることを列名に入れる) |
| 按分の方法 | 日数按分か月数按分か、計算に使った日数 |
| しきい値の判定 | 計上候補/対象外(理由としきい値の値) |
| 前月の計上 | 前月に計上した額、差額 |
| 経理の判断 | 人が入れる(計上する/しない/要確認) |
一覧2:契約書の見つからない支払
支払はあるが、契約書を引き当てられなかったものです。部署がカードで契約したサブスクリプションが、ここに集まります。 取引先名、金額、摘要、過去12か月の支払回数を並べ、部門コードから推定した担当部署を添えます。
一覧3:支払の無い契約
契約台帳にあるが、今月の支払明細に出てこなかった契約です。後払の契約で請求書がまだ届いていない場合、未払費用の候補になります。 前回の支払日、支払周期、次に来るはずだった支払日、経過している日数を並べます。
一覧3は、Before では構造的に作れなかったものです。 支払明細を起点にしている限り、支払が起きていない契約は視界に入りません。契約の側から見に行く経路を作ることが、未払費用の漏れを減らす部分です。
会計システムへは書き戻しません。 この仕組みが持つのは、支払明細と契約書と契約台帳への読み取り権限だけです。通知は、一覧が更新された時点で経理のチャットへ1通だけ送り、3つの一覧の件数とリンクだけにします。1件ずつ通知すると、月初に180件の通知が届きます。
人が確認する
全件を経理が確認します。 経過勘定の計上は金額が確定する処理なので、AIの読み取りをそのまま使う場面はありません。確認するのは「AIが読み取った期間が正しいか」だけです。 按分額は機械の計算なので、計算式が正しければ全件で正しくなります。
確認の深さを分けます。
- 前月と同じ契約・同じ周期・同じ金額 … 差額が0であることを見るだけ。ここが件数の大半を占めます
- 新しく出てきた契約 … 条番号と原文を読み、契約書を開いて確かめる
- 期間が今月で切り替わる契約 … 更新されたのか、終わったのかを確かめる
unknown_reasonが入っているもの … 契約書を開く。期間が書かれていない契約は、法務か担当部署に確認する- 引用が契約書のテキストと一致しなかったもの … 契約書を開く
- 中途解約・変更のあった契約 … 覚書を確かめる。按分の起点が変わります
確認を速くするための設計が効きます。
- 条番号と原文を、一覧の行の中に直接表示する(別のシートに飛ばさない)
- 契約書のファイルへのリンクを、同じ行に置く
- 前月の計上額との差額を、金額の隣に置く
- 前月「計上しない」とした契約には、その理由を表示する
- 前月と同じ内容の行を、折りたたんで表示する
4番目が効きます。 「この年会費は毎年、重要性の観点から計上していない」という判断は、毎月同じ行に出てきます。理由が見えていれば、開くのは新しい行だけになります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 契約書に期間が書かれていない | unknown_reason で申告させ、要確認へ。法務か担当部署に確認する |
| 検収日を起点とする契約で、検収日が分からない | 要確認へ。検収書か発注データから検収日を引く経路を後で足す |
| 自動更新で、契約書の日付が何年も前 | 開始日に更新後の期間を足す計算を機械で行う。解約通知を出していないことを契約台帳で確かめる |
| 中途解約された契約 | 契約台帳の解約欄を見て、解約日以降を按分の対象から外す。必ず人が見る印を付ける |
| 覚書で金額や期間が変わっている | 同じ契約番号のファイルをまとめて渡し、日付の新しいものを優先させる |
| 契約書が見つからない支払 | 一覧2へ。担当部署に契約書の提出を依頼する |
| 支払明細に出てこない契約 | 一覧3へ。請求書の未着か、役務の終了かを確かめる |
| 同じ取引先で複数の契約がある | 契約番号か発注番号で分ける。分けられなければ要確認へ |
| 引用が契約書のテキストと一致しない | 一覧に出さず、要確認へ。件数だけ記録する |
| PDFが50MBまたは1,000ページを超える | 期間と支払条件の条項がある部分だけを切り出して渡す |
| 契約書が画像だけのPDFで文字が取れない | 要確認へ。読み取りの精度を人が確かめてから使う |
| 外貨建ての契約 | 按分の対象から外し、要確認へ。為替の扱いは会社の基準による |
記録を残す
この記録は、翌月と来期の作業を軽くする材料になります。
- 月ごとの対象件数、AIへ渡した件数、読み取りが成功した件数
- 契約ごとの読み取り結果(期間、支払のタイミング、条番号と原文)と、読み取った日
- 経理の判断(計上する/しない/要確認)と、その理由
unknown_reasonの内容と、その後どう解決したか。引用が契約書と一致しなかった件数- 契約書の見つからない支払の件数と、その後の契約書の回収状況
- 支払の無い契約の件数と、そのうち未払費用として計上したもの
読み取り結果を契約番号ごとに残しておくことが、いちばん効きます。 契約書のファイルの更新日時を見て、変わっていない契約は保存した結果を使う作りにすれば、同じ契約書を毎月読み直さずに済みます。
「契約書の見つからない支払」の件数の推移も見てください。 減らないなら、部署がカードで契約したサブスクリプションが、契約書を法務へ渡さずに増え続けているということです。点検で拾うより、契約の手続きを変えるほうが安く済みます。
経理の判断の理由も必ず残してください。 「重要性の観点から計上しない」とした契約が、来期に金額が上がって基準を超えることがあります。理由が残っていれば、しきい値表を見直す根拠になります。
04実装レベルの3段階
半自動化の時点で、9分が4分程度になります。 契約書を探す4分と、対象かを判断する2分が消えるためです。本格構成で3分になりますが、減るのは前月との照合と、支払の無い契約を探す手間です。 半自動化から始めることをおすすめします。 契約台帳が整っていない会社が多く、一覧3(支払の無い契約)は台帳が無いと作れません。支払明細を起点にした側だけなら、契約台帳が無くても動きます。 本格構成の「支払の無い契約」には、時間削減とは別の価値があります。 後払の契約で請求書が届いていないものが見えるため、未払費用の計上だけでなく、請求書の督促の材料にもなります。 半年請求が来ていない契約が見つかることもあります。
05工数削減シミュレーション
導入後 180件 × 3分 ÷ 60 = 9 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 保守契約、サブスクリプション、賃借料、保険料、年会費のように、支払った期間と役務を受ける期間がずれる継続契約が100本以上ある企業。契約書が法務のフォルダ、支払が会計システム、発注が購買システムと別々にあり、経理が記憶と前期の仕訳を頼りに経過勘定を拾っている場合。決算期に前払費用と未払費用の洗い出しが集中し、他の締め作業を圧迫している場合。
- 継続契約が数十本で、経理担当が全部の期間を覚えている場合。契約書が紙でしか残っておらず、PDFが揃っていない場合(まずPDF化と契約番号の採番が先)。会計システムか契約管理システムに役務提供期間を入力する運用が既にあり、そこから期間按分が自動で出ている場合。
07最小構成で試す方法
- 前月の支払明細から、継続的な支払と思われるものを20件選ぶ
- その20件に対応する契約書PDFを、法務から受け取る
- 生成AIのチャット画面に、契約書1本と上のプロンプトを貼り付ける
- 返ってきた期間と条番号・原文を、契約書と見比べる
- 読み取った日付を表計算に写し、按分額を表計算の式で計算する
見るのは次の3点です。
| 見る点 | 判断 |
|---|---|
| 読み取った期間が契約書と合っていた割合 | 8割を下回るなら、契約書の書き方に癖がある。プロンプトに例外を足す |
| 引用した原文が契約書にそのまま存在したか | 1本でも作られた文があれば、機械での照合を必ず入れる |
| 指示に反して金額の計算をしていないか | してくるなら、制約の位置を先頭に移す |
2番目を必ず確かめてください。 条番号は合っているのに原文が少し違う、という返り方があります。経理は原文を見て判断するので、ここが信用できないと仕組み全体が使えません。
あわせて、前期の決算で見つかった計上漏れで答え合わせをしてください。 監査や残高確認で指摘された契約があれば、その契約書をこの読み取りにかけます。当時の月次でこの仕組みが動いていたら拾えたかを確かめます。
ワークフローを作らずに、ここまでは試せます。所要は1〜2日です。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| AIが按分額まで計算して返してくる | 「金額の計算をしない」をプロンプトの先頭に置き、出力形式にも金額の数値項目を持たせない |
| 引用した条文が契約書に存在しない | 引用が契約書のテキストに含まれるかを機械で照合し、外れたものは要確認へ |
| 取引先名が支払明細と契約書で違う | 表記をそろえる処理を前処理に入れ、それでも当たらないものは契約番号か発注番号で引く |
| 覚書を見ずに本体契約だけで読み取る | 同じ契約番号のファイルをまとめて渡し、日付の新しいものを優先させる |
| 自動更新の契約で期間が古いまま | 開始日に更新後の期間を足す計算を機械で行い、解約の有無を契約台帳で確かめる |
| 少額の契約が一覧を埋める | しきい値表を前処理で当て、下回るものはAIへ渡さない |
| 月ごとに計上の扱いが変わる | しきい値と按分の方法(日数か月数か)を表で固定し、その場で判断しない |
| 契約書の無い支払が毎月同じ顔ぶれで出る | 一覧2を担当部署別に分け、契約書の回収を依頼する経路を作る |
| シナリオが15分ごとに走っていた | Make のスケジュールを「Monthly」に変更し、有効化の状態を確かめる |
| 締めのやり直しで一覧が古くなる | 実行のたびに前月分を取り直す作りにし、一覧は上書きする |
| 画像だけのPDFで文字が取れない | 要確認へ回す。読み取りの精度を人が確かめてから使う |
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 契約書の本文、取引先名、契約金額、支払の実績、部門コード。取引条件は、取引先との秘密保持の対象になっていることが多い情報です。
- 契約書を外部AIへ送ること … 契約書には、取引先と合意した単価や値引きの条件が入っています。送る前に、秘密保持契約で第三者への開示が制限されていないかを法務と確認してください
- 有料の利用形態を選ぶこと … Gemini API の利用規約では、無償の利用形態について、Googleが送信した内容を製品の改善に使い、人間のレビュアーが入力と出力を読み、注釈を付け、処理することがあると明記されています。同時に「機微な情報、秘密情報、個人情報を無償のサービスに送信しないでください」とされています。有料の利用形態については、プロンプト(システム指示、キャッシュされたコンテンツ、画像や動画や文書などのファイルを含む)と応答を製品の改善には使わないと明記されています。契約書を扱う以上、有料の利用形態を選んでください
- 渡す範囲を絞ること … 期間と支払条件が書かれた条項と、覚書の該当部分だけに絞れば、外へ出る情報は減ります
- 権限は読み取りだけにすること … 法務のフォルダにも会計システムにも書き込み権限を与えません。金額を動かす処理を自動化しない設計にします
- アップロードしたファイルの扱い … Files API のファイルは48時間保存されると説明されています。不要になった時点で削除する処理を入れてください
- 会計処理の判断は人が行うこと … どの科目で、いくらで計上するか、そもそも計上するかどうかの判断は、経理と会計士が行います
- しきい値の決め方 … 重要性の基準は、会社が決めて継続して適用するものです。この仕組みは表から引くだけで、基準そのものを決めません
- 取引先ごとの条件を社内に広げないこと … 閲覧できる範囲を経理と財務に限ってください
- 自動実行してよい範囲 … 支払明細の取得、契約書の引き当て、期間の読み取り、按分の計算、しきい値の判定、一覧の作成までです。計上の判断、仕訳の起票、契約書や契約台帳の更新は人が行います
誤りが起きた場合のリスクは、契約条件の外部への流出、読み取った期間の誤りによる計上額の誤り、そして計上漏れが見つからないまま決算に進むことです。3番目は、この仕組みを入れる前から起きている状態ですが、一覧が出ているから大丈夫だと思い込むと、かえって見落としが増えます。 一覧3(支払の無い契約)が空になる月が続いたら、契約台帳の側が古い可能性を疑ってください。
10まず何から始めるか
1週目:しきい値表と按分の方法を決める
重要性のしきい値が社内で決まっているかを確認します。決まっていなければ、経理と会計士で決めて表にします。 あわせて、按分を日数で行うか月数で行うかを1つに決めます。ここが決まっていないと、あとの工程が全部やり直しになります。
2週目:契約書20本で読み取りを試す
前月の支払明細から継続的な支払を20件選び、対応する契約書で最小構成を試します。読み取った期間が契約書と合っているか、引用した原文がそのまま存在するかを、1本ずつ確かめます。 自社の契約書に特有の書き方(「検収日の翌日から」など)が見つかったら、プロンプトに例外として書き足します。
3週目:契約書の整理の状態を確かめる
契約番号でフォルダが切られているか、覚書が本体契約と同じ場所にあるか、PDFになっていない契約がどれだけあるかを数えます。あわせて、契約台帳があるかを法務に確認します。
4週目以降: Make と Python で半自動化を作り、2か月運用します。最初の2か月は、これまでどおりの方法と並行して回し、結果を突き合わせてください。 拾えていない契約が見つかるはずです。
3か月目以降: 契約台帳との突き合わせを足し、「支払の無い契約」の一覧を作ります。読み取り結果の使い回しもこの時点で入れると、呼び出しの回数が大きく減ります。
期末を1度越えたら: 期末の一括見直しで新しく見つかった計上漏れを数えます。契約書が無かったのか、契約台帳に載っていなかったのか、しきい値で落としていたのか、読み取りが外れたのかで、次に直す場所が決まります。ここまで来ると、この仕組みは計上漏れを見つける道具から、計上漏れが起きない契約の管理の形を決める道具になります。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
構造化出力で response_format に type mime_type schema を渡すと、応答をJSONスキーマに沿った形にできること。使える型が string・number・integer・boolean・object・array・null であること。enum と format(date-time/date/time)が使えること。すべてのJSONスキーマの機能が使えるわけではなく、非常に大きい、または深く入れ子になったスキーマは拒否されることがあること | Gemini API docs: Structured output | 2026-09-24 |
| 文書入力で、PDFを50MBまたは1,000ページまで扱えること。各ページが258トークンに相当すること。小さいファイルはリクエストに直接含め、大きいファイルや繰り返し使うファイルは Files API 経由が推奨されること。アップロードしたファイルは48時間保存され、この保管は無料であること。TXT・Markdown・HTML・XML なども受け付けるが、文字として扱われ図やレイアウトは失われること | Gemini API docs: Document understanding | 2026-09-24 |
| Gemini のモデルが100万トークン以上のコンテキストを扱えること。単一の情報を探す評価では高い性能を示す一方、探す情報が複数ある場合は同じ精度では動かないと明記されていること | Gemini API docs: Long context | 2026-09-24 |
| 無償の利用形態では送信した内容が製品の改善に使われ、人間のレビュアーが入力と出力を読み、注釈を付け、処理することがあると明記されていること。無償のサービスに機微な情報・秘密情報・個人情報を送信しないよう求めていること。有料の利用形態では、プロンプト(システム指示、キャッシュされたコンテンツ、画像・動画・文書などのファイルを含む)と応答を製品の改善に使わないと明記されていること | Gemini API Additional Terms of Service | 2026-09-24 |
| シナリオのスケジュールが既定で15分ごとであること。「At regular intervals」「Once daily」「Weekdays (Mon-Fri)」「Weekly」「Monthly」「Specified dates」「On demand」「Immediately」から選べること。「show advanced settings」で開始日と終了日を指定できること。停止しているシナリオは手動で起動しない限り実行されないこと | Make Help Center: Schedule a scenario | 2026-09-24 |
会計システムと購買システムからのデータ取得の方法、契約書の保管の形、契約台帳の有無は、利用している製品と社内の運用によって異なります。この部分は利用環境に応じた個別確認が必要です。 契約書を外部のサービスへ送ってよいかは、法務に確認してください。前払費用・未払費用として計上するかどうか、重要性のしきい値をいくらに置くか、日数按分と月数按分のどちらを採るかは、会計処理の判断です。経理と会計士が決めるものであり、この記事はその当否について述べていません。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0213)についてのご相談はこちらから。
