Media > AI活用ユースケース > 経理 > 専門学校の学費(分納)の入金を学生ごとの請求と突き合わせ、名義の違う振込と過不足の理由を見分けて、未納と督促の候補を毎月出す

専門学校の学費(分納)の入金を学生ごとの請求と突き合わせ、名義の違う振込と過不足の理由を見分けて、未納と督促の候補を毎月出す

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

銀行の入出金明細の振込を、学費台帳の分納の請求と突き合わせます。名義や金額で付かない入金はどの学生のどの回かの候補を出し、未納の学生と督促を保留すべき学生を分けた一覧を毎月作ります。

サマリー
生成AI
ChatGPT/Claude
連携・自動化
Google Apps Script/Python
対象業界
教育
対象部門
経理
対象業務
内容確認・チェック/比較検討
主な課題
入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
AIで行う処理
判定
主な効果
入力漏れ削減/工数削減/機会損失防止
導入難易度
★★☆☆☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
条件付き
現在工数
40h/月
AI導入後
10h/月
想定削減
75%
年間削減
360h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 経理の担当が、インターネットバンキングから先月分の入出金明細をCSVで書き出す
  2. 明細を1行ずつ見て、振込人の名義から学生を探す
  3. 学費台帳でその学生の分納の請求を開き、どの回の入金かを決める
  4. 金額が合えば、台帳に入金日と金額を付ける
  5. 金額が合わなければ、2回分か、手数料の差引か、別の学生の分が混ざっているかを考え、分からなければ学生か保護者に問い合わせる
  6. 月末に、期日を過ぎて入金の無い学生を台帳から拾い、督促の一覧を作る
  7. 督促の一覧を学科の担任に回し、備考を見て外すべき学生を外してから連絡する
導入後(After)
  1. 人経理の担当が、月初に先月分の入出金明細のCSVを決まったフォルダに置く
  2. 自動Google Apps Script が、CSVを読み込んで入金の行だけを取り出す
  3. 自動振込人の名義が台帳の届けの名義と一致し、金額がその回の請求と一致するものを、規則で付ける
  4. 自動付かなかった入金について、名義の近い学生と、その学生の未入金の回を候補として集める
  5. 自動Claude API が、候補の中から当てはまる学生と回、過不足の理由を判定する
  6. 自動期日を過ぎて入金の無い回を拾い、Claude API が台帳の備考を読んで督促の保留の候補を見分ける
  7. 自動「照合の確認」と「督促の候補」の2つのシートに書き出す
  8. 人経理の担当が、AIの判定が付いた入金と、督促の保留の候補を確かめる
  9. 人確かめたものを学費台帳に反映し、督促の一覧を担任に回す
各工程の詳しい説明を読む
  1. 経理の担当が、インターネットバンキングから先月分の入出金明細をCSVで書き出す
  2. 明細を1行ずつ見て、振込人の名義から学生を探す
  3. 学費台帳でその学生の分納の請求を開き、どの回の入金かを決める
  4. 金額が合えば、台帳に入金日と金額を付ける
  5. 金額が合わなければ、2回分か、手数料の差引か、別の学生の分が混ざっているかを考え、分からなければ学生か保護者に問い合わせる
  6. 月末に、期日を過ぎて入金の無い学生を台帳から拾い、督促の一覧を作る
  7. 督促の一覧を学科の担任に回し、備考を見て外すべき学生を外してから連絡する

(a)名義から学生を探すのに時間がかかる。 保護者の名義はカナで、姓が学生と違うこともあります。「ヤマダ ハナコ」が誰の保護者なのかを、名簿と台帳を行き来して探します。

(b)金額が合わない理由が分からない。 振込手数料を差し引いて振り込まれた、2回分をまとめて振り込まれた、兄弟の2人分がまとめて振り込まれた。理由によって台帳の付け方が違うため、決めるまで次に進めません。

(c)督促してはいけない学生に連絡が行く。 延納の相談は担任が受けていて、台帳の備考に書かれますが、督促の一覧を作るときに備考まで読み切れません。 相談済みの学生に督促が行くと、学生と保護者の信頼を損ねます。

(d)担当者によって付け方が違う。 2回分のまとめ払いを、1回目に全額を付ける担当者と、2回に分けて付ける担当者がいます。台帳の見え方が変わり、未納の拾い方まで変わります。

(e)未納に気づくのが遅れる。 照合が終わらないうちに月末になると、付けられなかった入金と未納の区別がつかないまま督促の一覧を作ることになります。

  1. 【人】 経理の担当が、月初に先月分の入出金明細のCSVを決まったフォルダに置く
  2. 【自動】 Google Apps Script が、CSVを読み込んで入金の行だけを取り出す
  3. 【自動】 振込人の名義が台帳の届けの名義と一致し、金額がその回の請求と一致するものを、規則で付ける
  4. 【自動】 付かなかった入金について、名義の近い学生と、その学生の未入金の回を候補として集める
  5. 【自動】 Claude API が、候補の中から当てはまる学生と回、過不足の理由を判定する
  6. 【自動】 期日を過ぎて入金の無い回を拾い、Claude API が台帳の備考を読んで督促の保留の候補を見分ける
  7. 【自動】 「照合の確認」と「督促の候補」の2つのシートに書き出す
  8. 【人】 経理の担当が、AIの判定が付いた入金と、督促の保留の候補を確かめる
  9. 【人】 確かめたものを学費台帳に反映し、督促の一覧を担任に回す

3番目が、この設計の土台です。 規則で付けられる入金を先に付けてしまえば、AIと人が見るのは残りだけになります。 規則で付いた入金も「照合の確認」のシートに出ますが、件数を見て流します。

8番目で、AIが付けた入金を人が確かめるのは、お金の記録だからです。 別の学生に付けてしまうと、一方は未納のまま督促され、もう一方は二重に入金したように見えます。 AIの判定は候補として出し、台帳に付けるのは人が確かめてからにします。

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

構成図
インターネットバンキング
   │  先月分の入出金明細を CSV で書き出す
   ▼
決まったフォルダ(Google ドライブ)
   ▼【トリガー】毎月3日 9時台の時間主導型トリガー(+手動実行)
Google Apps Script
   ├─ CSV の読み込み(文字コードを指定)
   ├─ 規則での照合(届けの名義 × その回の請求額)
   ├─ 付かない入金の候補集め(名義の近さ・未入金の回)
   ▼
Claude API ── 候補からの判定、過不足の理由、督促の保留の候補
   ▼
Google Apps Script ── 判定の検査、シートへの書き出し
   ▼
「照合の確認」シート / 「督促の候補」シート
   ▼
【経理の担当が確かめて学費台帳へ反映】→ 督促の一覧を担任へ
役割想定する製品代替候補
実行環境Google Apps ScriptPython
生成AIClaude API(付かない入金の判定と督促の保留の見分け)OpenAI API
差異計算Google Apps Script(請求と入金の差額の計算)Python
保管Google ドライブ(明細のCSVと実行の記録)校内のファイルサーバー

新しく足すのは、2つの確認用のシートと、台帳の列の追加だけです。 学費台帳とインターネットバンキングは今あるものを使います。

Google Apps Script を実行環境にしているのは、学費台帳がすでに Google のスプレッドシートにあるからです。 台帳を別の仕組みに移さずに、読み書きと照合を同じ場所で行えます。Claude API は、Apps Script の UrlFetchApp から呼びます。

生徒が18歳未満の高等課程は、この構成の対象から外します。 専門課程の学生だけを扱い、学生の名前と振込人の名前を外部の API に渡すことを、学校の個人情報の取扱いの規程と照らしてから始めます(第13章)。

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

Step1

処理の起点を決める

Apps Script の時間主導型トリガーで、毎月3日の9時台に動かします。 公式ページでは、時間主導型トリガーは1分ごとから月1回まで設定でき、毎日9時のように決めた場合、実際の時刻は9時から10時の間で決まり、その後は同じ時刻に動くとされています。

月初の3日にしているのは、月末の入金を取り込むためです。 月末が土日に当たると、振込の記帳が翌月にずれることがあります。経理の担当が先月分のCSVをフォルダに置いたのを確かめてから動くよう、CSVが無ければ何もせずに担当者に知らせて終わる作りにします。

手動でも動かせるようにします。 期日の直後に未納を早めに確かめたい月や、CSVを置き直した月は、担当者がメニューから実行します。同時に2つ動くと台帳の確認用シートが二重に書かれるため、LockService のスクリプトロックで、同時に1つしか動かないようにします。公式ページでは、getScriptLock() はどのユーザーからもコードの区間を同時に実行させないロックを返すとされています。

Step2

入力データを集める

データ中身取得元
入出金明細日付、入金額、振込人の名義(カナ)、摘要インターネットバンキングの CSV
学費台帳学生番号、学科、学年、分納の回ごとの期日と請求額、入金日と入金額学費台帳のシート
振込人の届け学生ごとに届け出た振込人の名義(複数可)学費台帳に列を足す
学生名簿学生の氏名(カナ)、保護者の氏名(カナ)、兄弟の在籍学生名簿
備考延納の相談、奨学金の振込予定、保護者との連絡の記録学費台帳の備考の列
規則の表振込手数料として許す差額の範囲、まとめ払いとして扱う回数の上限経理が決めるシート

質を決めるのは、振込人の届けの列です。 1人の学生に、本人・保護者・祖父母の名義を複数持たせておけば、規則で付く入金が増え、AIに回る入金が減ります。 AIで名義が判明した入金は、確かめた後に届けの列へ足していきます。

備考は、日付と書いた人を付けて書く決まりにします。 「9/25 担任〇〇:保護者より10月10日入金予定と連絡」のように書かれていれば、督促の保留の判定がその日付と比べられます。 日付の無い備考は、いつの話か分からないので、保留の根拠になりません。

Step3

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

CSVはフォルダから読み、文字コードを指定して文字列にします。 銀行の明細のCSVは Shift_JIS で書き出されることがあり、そのまま読むと名義のカナが文字化けします。公式ページでは、Blob の getDataAsString(charset) は指定した文字コードで中身を文字列として返すとされています。読んだ文字列は Utilities.parseCsv() で2次元の配列にします。

取るものどこから何に使うか
入金の行CSV の入出金の区分照合の対象
振込人の名義CSV の名義の列届けの名義との照合、名義の近さ
未入金の回学費台帳候補の回
名義の候補振込人の届け、学生名簿の本人・保護者のカナ付かない入金の候補の学生
備考学費台帳督促の保留の見分け

付かない入金の候補集めは、Apps Script で行います。 振込人のカナの姓が一致する学生、保護者のカナが一致する学生、入金額がその学生の未入金の回の請求額の合計や、手数料を引いた額に近い学生を、多くて5人まで集めます。AIに台帳全体を渡さず、候補だけを渡すための段です。

Step4

AIへ渡す前に整形する

  1. カナをそろえる … 半角・全角、小さい文字(ャ・ュ・ョ)の表記、姓と名の間の空白を、届けの名義と明細でそろえます
  2. 法人名などを外す … 奨学金の振込や、入金の区分で学費でないもの(返金の戻りなど)を、摘要と名義で先に分けます
  3. 規則で付ける … 届けの名義が一致し、金額がその回の請求額と一致するものを先に付けます
  4. 差額を計算する … 付かない入金について、候補の学生の未入金の回ごとの請求額との差を Apps Script で計算します
  5. 候補を絞る … 1件の入金につき候補は5人まで、学生ごとの未入金の回まで含めて渡します
  6. 督促の対象を拾う … 期日を過ぎて入金の無い回を規則で拾い、備考の付いているものだけをAIに回します

4番目の差額を、AIに計算させないのが要です。 「請求額との差」はAIに聞くと答えますが、桁の多い金額の引き算をAIに任せる理由はありません。 Apps Script で計算した差額を渡し、AIにはその差額が何の理由で生まれたかだけを判定させます。

6番目で、備考の無い未納はAIに回しません。 備考が無ければ保留の理由も無く、規則のまま督促の候補になります。

Step5

AIに処理させる

付かない入金と、備考の付いた未納について、判定をさせます。

判定すること中身決められないときの扱い
入金の学生と回候補の中から当てはまる学生と回unmatched
過不足の理由手数料の差引、まとめ払い、兄弟の合算、前倒し、一部入金、不明unknown
督促の保留備考から、延納の相談中・入金予定の連絡あり・奨学金待ち・その他check
させないこと理由
差額の計算Apps Script で計算した値を渡す
候補にない学生への付け替え候補の外を推測すると、誤った付け方を見分けられない
督促するかどうかの決定担当者と担任が決める
延納や減免を認めるかどうか学校の規程による判断
入金日の予想備考に書かれた日付を写すだけ

2行目を守らせるのが、いちばん大事です。 候補に当てはまる学生がいないとき、AIは名義の似た「どこかの学生」を挙げがちです。候補の外を挙げることを禁じ、当てはまらなければ unmatched にさせます。 判定の後に、返ってきた学生番号が候補の中にあるかを Apps Script で検査します。

Step6

指示内容を固定する

あなたは専門学校の経理の担当として、学費の入金がどの学生のどの回のものかを判定します。

【入金】
日付:{date} 金額:{amount}円 振込人名義:{payer_kana} 摘要:{memo}

【候補の学生(最大5人)】
{candidates}
(学生番号、学生のカナ、保護者のカナ、届けの名義、
 未入金の回ごとの期日・請求額・入金額との差額)

【許す差額の範囲】振込手数料として {fee_min}〜{fee_max} 円の不足

【判定のしかた】
1. 候補の中から、この入金に当てはまる学生と回を選んでください。
   2回分のまとめ払い、兄弟の合算のように、複数の学生・回に当たることがあります。
2. 差額の理由を次から選んでください。
   fee_deducted / combined_installments / siblings_combined /
   paid_early / partial / unknown
3. 判定の根拠を、名義と金額のどこが一致したかで短く書いてください。

【厳守事項】
- 候補にない学生を選ばないでください。当てはまらなければ status を unmatched に
  してください。
- 差額を計算し直さないでください。示した差額をそのまま使ってください。
- 名義が似ているだけで金額の説明がつかないときは、選ばずに unmatched にしてください。
- 迷ったときに matched にしないでください。

督促の保留の見分けは、別の呼び出しにします。

次の学生は、学費の分納の期日を過ぎて入金がありません。
備考を読み、督促を保留すべき理由が書かれているかを判定してください。

【期日と未入金額】{due_date} {unpaid}円
【備考】{notes}(日付と書いた人付き)
【今日の日付】{today}

- 理由を deferral_requested / payment_promised / scholarship_pending / other / none
  から選んでください。
- 入金予定の日付が書かれていれば、その文字列をそのまま写してください。
  計算や推測で日付を作らないでください。
- 入金予定の日付が今日より前なら、約束の日を過ぎていることを明記してください。
- 督促するべきかどうかは書かないでください。

「迷ったときに matched にしない」を書くのは、AIが選びたがるからです。 候補が並んでいると、どれかを選ぶのが求められている答えだと受け取ります。unmatched は失敗ではなく、人が見る入金だということを指示で伝えます。

督促の側で「督促するべきか書かない」を明記するのも同じ理由です。 備考に延納の相談が書かれていると、AIは「督促は控えるべき」と書きます。控えるかどうかは担任と経理が決めることで、AIが返すのは理由の種類と日付だけです。

Step7

出力形式を固定する

Claude API の構造化出力で、次の形の JSON を受け取ります。 公式ページでは、output_config.format に type: "json_schema" とスキーマを渡し、オブジェクトには additionalProperties: false が必要とされています。

{
  "deposit_id": "",
  "status": "matched | unmatched",
  "allocations": [
    { "student_no": "", "installment_no": 0 }
  ],
  "reason": "fee_deducted | combined_installments | siblings_combined | paid_early | partial | unknown",
  "basis": ""
}
{
  "student_no": "",
  "installment_no": 0,
  "hold_reason": "deferral_requested | payment_promised | scholarship_pending | other | none",
  "promised_date_text": "",
  "promise_passed": false,
  "basis_note": ""
}

1つ目の理由は、allocations を配列にして、まとめ払いと兄弟の合算を表せることです。 1件の入金を複数の学生・回に割り当てる形を、最初から持たせます。割り当てた回の請求額の合計と入金額の差は、Apps Script がもう一度計算して、reason と矛盾しないかを見ます。

2つ目は、Apps Script の検査を通しやすいことです。 公式ページでは、構造化出力のスキーマで数値の制約(minimum・maximum など)は使えないとされています。学生番号が候補の中にあるか、回の番号が未入金の回かは、スキーマではなく Apps Script で確かめます。

3つ目は、promised_date_text を文字列のまま持てることです。 日付として正規化させると、「月末」「来週中」がAIの解釈で日付に変わります。原文の書き方のまま経理の担当に見せます。

書き出すシートは次のとおりです。

シート列
照合の確認入金日、金額、名義、照合の方法(規則/AI)、学生番号、回、差額、理由、根拠、確認の印
督促の候補学生番号、学科、回、期日、未入金額、保留の理由、入金予定の記載、約束の日を過ぎたか、担任
Step8

システムへ連携する

つなぎ先方式内容
Google ドライブのフォルダDriveApp明細のCSVを読む
学費台帳・学生名簿SpreadsheetApp請求・届け・備考を読む。入金は人が確かめた後に付ける
Claude APIUrlFetchApp(POST)判定の呼び出し
確認用のシートSpreadsheetApp照合の確認と督促の候補を書く
経理の担当メール実行の終了と件数を知らせる

Claude API の呼び出しは、UrlFetchApp の fetch で行います。 公式ページでは、method に post、payload に本文、headers に任意のヘッダーを渡せ、muteHttpExceptions を真にすると、失敗の応答でも例外を投げずに応答を返すとされています。応答のコードを見て、やり直すか人に回すかを決めます。

API キーは、スクリプトのプロパティに置きます。 公式ページでは、スクリプトのプロパティはスクリプトのすべての利用者で共有されるキーと値の保存先とされています。コードの中に書かないことと、スクリプトを編集できる人を経理の担当に限ることを合わせて守ります。

学費台帳への入金の書き込みは、確認の印が付いた行だけにします。 経理の担当が「照合の確認」で印を付けた行を、別のメニューから台帳に反映します。AIの判定がそのまま台帳に入る経路を作りません。

実行時間に気をつけます。 公式ページでは、スクリプトの実行は1回6分までです。付かない入金が多い月は、1回の実行で判定する件数を区切り、残りは続きとして次の実行に回します。 処理済みの入金は印を付けておきます。

Step9

人が確認する

経理の担当が見るのは、AIが判定した入金と、督促の候補です。 規則で付いた入金は、件数と合計額を見て流します。

  1. unmatched を先に見る … 名簿を引いても分からなければ、振込人に問い合わせます。分かったら、その名義を届けの列に足します
  2. AIが matched にした入金を確かめる … 根拠と差額を見て、学生と回が合っているかを確かめます。まとめ払いと兄弟の合算は、台帳の付け方を特に確かめます
  3. 督促の候補を担任と確かめる … 保留の理由が付いた学生は、担任に状況を確かめます。約束の日を過ぎている学生は、保留ではなく連絡の対象です
  4. 台帳に反映する … 確かめた行に印を付け、反映のメニューを実行します

2番目を省かないでください。 AIの判定が誤っていると、別の学生が未納のまま督促されます。 根拠の列で名義と金額のどこが一致したかを読めば、1件あたり1分前後で確かめられます。

目標は、600件をならして1件1分です。 AIに回る入金が1〜2割、督促の候補が月に数十件という想定で、それより多い月は、届けの名義の列が育っていないか、分納の期日が台帳に入っていません。

Step10

例外に対処する

起きること対応
CSV がフォルダに無い何もせずに担当者へ知らせる
名義のカナが文字化けする文字コードの指定を確かめて読み直す
学費でない入金が混ざる摘要と名義で先に分ける。分からないものは unmatched
AIが候補の外の学生を返した検査で弾き、unmatched として人へ
割り当ての合計と入金額の差が理由と合わない検査で弾き、人へ
返金・二重入金の疑い割り当てた後に入金額が請求を超える回は、partial ではなく過入金として人へ
応答が失敗のコードで返る1回だけやり直し、だめなら人へ
1回の実行が6分に近づく区切って続きを次の実行に回す
2つの実行が重なるスクリプトロックで後から来た実行を止める

上から4行目と5行目が、AIの判定の誤りを止める場所です。 どちらも規則で検査でき、AIの判定を信じるかどうかを、人の勘ではなく検査に任せられます。

Step11

記録を残す

  • 読み込んだ明細のCSVと、読み込んだ日時
  • 入金ごとの照合の方法(規則/AI)と、AIに渡した候補、AIの応答の全文
  • 検査で弾いた判定と、弾いた理由
  • 経理の担当が確かめた結果と、判定を直した記録(直す前と後)
  • 督促の候補と、保留の理由、担任に確かめた結果、実際に連絡したかどうか
  • 届けの列に足した名義と、足した日

4つ目を残すのは、学費の記録を後から説明するためです。 学生や保護者から「払ったはずだ」と言われたときに、どの入金をどの回に付けたか、誰が確かめたかを示せるようにします。

5つ目は、督促の運用を見直す材料になります。 保留した学生のうち、約束の日を過ぎても入金の無い学生が多ければ、保留の扱いを規程で決め直す時期です。

04実装レベルの3段階

最小構成:付かない入金と候補を手で生成AIの画面に貼って聞く / 1件ごとの判定
半自動化:上記+Apps Script で CSV を読み、規則で付けて、残りの候補をシートに書き出す / 規則での照合と候補集め
本格構成:上記+Claude API での判定、検査、督促の候補、台帳への反映のメニュー / 照合から督促の候補まで

最小構成では件数がさばけません。 確かめるための段階です。 半自動化で、1件4分が2分程度になります。 規則で付く入金の手作業は無くなりますが、付かない入金の判断と督促の一覧づくりが残ります。本格構成で1分になり、この段階が本記事の想定です。 差が大きいのは、付かない入金の1件ごとの判断が、候補と根拠を読んで確かめる作業に変わるからです。 段階を飛ばさないでください。 半自動化を1〜2か月回すと、届けの名義の列が育ち、規則で付く入金の割合が上がります。AIに回る入金が減ってから判定を足すほうが、確かめる件数が少なく済みます。

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

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

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

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

AI活用について相談する

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

向いている
  1. 学生数が数百名以上の専門学校で、学費を年2〜4回や毎月の分納で受け取り、保護者・本人・奨学金の振込など名義の違う入金が混ざる学校。経理の担当が銀行の明細を1行ずつ見て学費台帳に入金を付けており、振込人の名義から学生を探す作業と、金額が合わない理由の確認に時間がかかっている場合。延納の相談を受けている学生にまで督促の連絡が行ってしまったことがある場合。
向いていない
  1. 学費を学生ごとの振込先の口座(バーチャル口座など)か口座振替で受け取っており、名義から学生を探す作業がほとんど無い場合。学生が数十名で、入金が月に数十件の場合。18歳未満の生徒が在籍する高等課程の学費(この構成の対象から外す)。なお、督促するかどうか、延納や減免を認めるかどうかは学校の規程と担当者の判断によるもので、この構成では代替できません。

07最小構成で試す方法

  1. 先月の明細から、規則で付かなかった入金を30件選ぶ
  2. それぞれについて、候補になりそうな学生を名簿と台帳から3〜5人書き出し、未入金の回と差額を表にする
  3. 手元の生成AIの画面に、入金1件と候補の表を貼り、「どの学生のどの回か、差額の理由は何か。候補の外は選ばず、当てはまらなければ当てはまらないと答えてください」と聞く
  4. 当時、経理の担当が付けた結果と突き合わせる
  5. 備考の付いた未納の学生10人で、督促の保留の理由が読み取れるかも試す

30件は必ずやってください。 仕組みを作る前に、「候補を絞って渡せば判定できるのか」を確かめます。

出てきた内容判断
当時の付け方と合い、分からないものは分からないと答えるApps Script で組む段に進む
候補の外の学生を挙げる指示と検査で直る。構成は有効
名義だけで選び、金額の説明がつかない差額を表に入れて渡す。差額の計算は Apps Script の仕事

3行目は、差額を渡さずに聞いたときに出やすい形です。 失敗ではなく、差額を計算して渡す前処理が要るということが分かったということです。

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

問題対策
AIが候補の外の学生を挙げる禁じたうえで、返った学生番号が候補にあるかを検査する
迷った入金が matched になるunmatched を人が見る入金として指示で伝える
差額をAIが計算し直して食い違う差額は Apps Script で計算して渡し、計算し直しを禁じる
名義のカナが文字化けする文字コードを指定して読む
半角・全角のカナで規則が外れる前処理で表記をそろえる
まとめ払いを1回分として付けてしまう割り当てを配列で受け、合計と入金額を検査する
延納の相談中の学生に督促が行く備考を読ませて保留の候補を出し、担任と確かめる
約束の日を過ぎても保留のままpromise_passed で分け、連絡の対象に戻す
実行が6分で止まる件数を区切って続きを次の実行に回す
手動と定時の実行が重なるスクリプトロックをかける
AIの判定がそのまま台帳に入る確認の印の付いた行だけを反映する
まとめ払いの付け方が担当者で違う割り当ての配列のとおりに回ごとに付ける決まりにする
届けの名義が増えず、AIに回る入金が減らない確かめた名義を届けの列に足す操作を、反映のメニューに入れる
高等課程の生徒の学費が混ざる学科と課程で対象を分け、専門課程だけを扱う

上の3行が、この構成の失敗のほとんどです。 どれも「AIに選ばせる・計算させる」範囲を広げすぎると起きます。選ぶ範囲は候補に、計算は Apps Script に閉じておけば、誤りは検査で止まります。

督促の2行も、早いうちに効いてきます。 保留の候補を出すだけでは、保留がいつまでも続く学生が出ます。 約束の日を過ぎたら連絡の対象に戻す流れを、最初から入れておきます。

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

この構成で扱うデータ: 学生と保護者の氏名(カナ)、学生番号、学費の請求額と入金額、そして延納の相談や家庭の事情が書かれうる備考です。

  1. 外部へ渡す範囲を、判定に要る分に限る … Claude API に渡すのは、入金1件と候補の学生5人まで、督促の側は該当する学生の備考だけです。学費台帳や名簿をまるごと渡しません
  2. 備考に書く内容を決めておく … 家庭の事情や健康のことまで備考に書かれていると、それが外部に渡ります。備考には、延納の相談の有無と入金予定の日付だけを書く決まりにします
  3. 外部の API に渡すことを、学校の規程と照らす … 学生と保護者の情報を国外の事業者の API で処理することになります。個人情報の取扱いの規程と、必要な手続きを確かめてから始めます
  4. API キーを守る … スクリプトのプロパティに置き、スクリプトを編集できる人を限ります
  5. この構成は督促を決めない … 督促するかどうか、延納や減免を認めるかどうかは、学校の規程と担当者が決めます。督促の連絡そのものを、この構成から送りません
  6. 高等課程の生徒は対象外にする … 18歳未満の生徒の情報は、この構成で扱いません

誤りが起きた場合のリスクは、入金を別の学生に付けることと、督促してはいけない学生に督促することの2つです。 前者は候補の外を選ばせないことと検査で、後者は備考の読み取りと担任の確認で防ぎます。どちらも、最後に台帳と督促を動かすのは人だという線を守ります。

10まず何から始めるか

1週目:学費台帳の列をそろえる

分納の回ごとの期日と請求額、振込人の届けの名義(複数可)の列を、学費台帳にそろえます。備考を日付と書いた人付きで書く決まりを、担任と決めます。

2週目:30件で試す

先月の規則で付かなかった入金から30件を選び、候補の表を作って手元の生成AIの画面で判定させます。候補の外の学生を挙げないか、迷ったものを unmatched にするかを最優先で見ます。

3週目:規則での照合を Apps Script で作る

CSV を文字コードを指定して読み、届けの名義と請求額で規則の照合をして、「照合の確認」のシートに書き出すところまで作ります。この時点では Claude API を呼ばず、規則で付く割合を確かめます。

4週目:候補集めと判定をつなぐ

付かない入金の候補集めと差額の計算を足し、Claude API の判定と検査をつなぎます。判定は確認のシートに出すだけで、台帳には反映しません。

2か月目: 督促の保留の見分けを足し、担任と督促の候補を確かめます。3か月目以降: 台帳への反映のメニューを足し、1件4分が何分になったかを実測します。届けの名義の列が育ち、AIに回る入金が1割前後に下がった時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-10-13/最終更新:2026-10-14
確認した内容情報源確認日
学則に、授業料・入学料その他の費用徴収に関する事項を記載すること(学校教育法施行規則第4条第1項第7号)e-Gov法令API: 学校教育法施行規則 第4条2026-10-13
時間主導型トリガーが1分ごとから月1回まで設定でき、毎日9時と決めた場合は9時から10時の間で時刻が決まり、その後は同じ時刻に動くことApps Script: Installable triggers2026-10-13
スクリプトの実行時間が1回6分までであることApps Script: Quotas2026-10-13
fetch の method・payload・headers、muteHttpExceptions を真にすると失敗の応答でも例外を投げずに応答を返すことApps Script: Class UrlFetchApp2026-10-13
parseCsv() が CSV の文字列を2次元の配列で返すことApps Script: Class Utilities2026-10-13
getDataAsString(charset) が指定した文字コードで中身を文字列として返すことApps Script: Class Blob2026-10-13
スクリプトのプロパティがスクリプトのすべての利用者で共有されるキーと値の保存先であることApps Script: Properties Service2026-10-13
getScriptLock() がどのユーザーからもコードの区間を同時に実行させないロックを返すことApps Script: Class LockService2026-10-13
output_config.format に json_schema を渡すこと。additionalProperties: false が必要なこと。数値の制約(minimum・maximum など)が使えないことClaude API: Structured outputs2026-10-13

督促するかどうか、延納や減免を認めるかどうかは、学校の学則・学費の規程と担当者の判断で決めてください。 本記事は法令と各製品の公開ページで確認できた範囲だけを扱っています。

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

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

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

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