顧問先から届く通帳の写しを読み取って、会計ソフトに取り込む仕訳の候補にする
顧問先から届く通帳の写しを読み取り、日付・摘要・出金・入金・残高を行ごとのデータにします。残高で検算してから勘定科目の候補を付け、会計ソフトに取り込むCSVにします。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- 士業
- 対象部門
- 経理
- 対象業務
- データ入力・転記/分類・仕分け
- 主な課題
- 人手が足りない/入力作業が多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 顧問先から通帳の写しを受け取り、共有ドライブの顧問先フォルダに保存する。紙で届いたものはスキャンする
- 写しを画面に開き、会計ソフトの入力画面に日付・摘要・金額を1行ずつ打ち込む
- 摘要を見て、過去の仕訳を思い出しながら勘定科目を付ける。分からない取引はメモに残す
- 月末の残高を、会計ソフトの預金残高と突き合わせる
- 合わなければ、写しと入力を1行ずつ見比べて打ち間違いを探す
- メモに残した取引を顧問先へ問い合わせ、回答が来たら科目を直す
- 人通帳の写しを顧問先フォルダの受付用フォルダに保存する(顧問先がアップロードしてもよい)
- 自動定時実行のスクリプトが新しいファイルを見つけ、形式と解像度を確かめる
- 自動Google Document AI の Form Parser が写しの表を読み、行・セル・信頼度を返す
- 自動スクリプトが表を日付・摘要・出金・入金・残高の行データに直す
- 自動前の行の残高+入金−出金=この行の残高 を1行ずつ検算し、合わない行に印を付ける
- 自動検算を通った行の摘要を、顧問先ごとの対応表と突き合わせる。完全に一致したものは対応表の科目を付ける
- 自動一致しなかった行だけを Claude API に渡し、勘定科目の候補と理由を付けさせる
- 自動会計ソフトの取り込み形式に合わせたCSVと、確認用の一覧を作る
- 人担当者が、検算の合わない行と、科目が候補止まりの行だけを確かめる
- 人確認を終えたCSVを会計ソフトへ取り込み、不明な取引を顧問先へ問い合わせる
各工程の詳しい説明を読む
- 顧問先から通帳の写しを受け取り、共有ドライブの顧問先フォルダに保存する。紙で届いたものはスキャンする
- 写しを画面に開き、会計ソフトの入力画面に日付・摘要・金額を1行ずつ打ち込む
- 摘要を見て、過去の仕訳を思い出しながら勘定科目を付ける。分からない取引はメモに残す
- 月末の残高を、会計ソフトの預金残高と突き合わせる
- 合わなければ、写しと入力を1行ずつ見比べて打ち間違いを探す
- メモに残した取引を顧問先へ問い合わせ、回答が来たら科目を直す
(a)打ち間違いは月末まで分からない。 残高を突き合わせるのは4番目で、ずれが出てから、どの行で間違えたかを探し始めます。 1桁の打ち間違いを十数ページから探す作業は、打ち込みより長くかかることがあります。
(b)写しが読みにくい。 スマートフォンの写真は斜めで影が入り、コピーはかすれています。「3」と「8」、「1」と「7」を見間違えるのは、たいてい読みにくい写しです。 人も見間違えるので、機械に読ませても同じ所で間違えます。
(c)科目の付け方がそろわない。 同じ顧問先の同じ振込先でも、先月の担当者は「外注費」、今月の担当者は「支払手数料」と付けることがあります。過去の仕訳は会計ソフトに残っていますが、打ち込みの最中に引き直す余裕がありません。
(d)打ち込みそのものが仕事の大半を占める。 45分のうち、判断が要るのは科目を付ける所と、分からない取引を拾う所だけです。残りは、写しの数字を画面へ移しているだけです。
- 【人】 通帳の写しを顧問先フォルダの受付用フォルダに保存する(顧問先がアップロードしてもよい)
- 【自動】 定時実行のスクリプトが新しいファイルを見つけ、形式と解像度を確かめる
- 【自動】 Google Document AI の Form Parser が写しの表を読み、行・セル・信頼度を返す
- 【自動】 スクリプトが表を日付・摘要・出金・入金・残高の行データに直す
- 【自動】 前の行の残高+入金−出金=この行の残高 を1行ずつ検算し、合わない行に印を付ける
- 【自動】 検算を通った行の摘要を、顧問先ごとの対応表と突き合わせる。完全に一致したものは対応表の科目を付ける
- 【自動】 一致しなかった行だけを Claude API に渡し、勘定科目の候補と理由を付けさせる
- 【自動】 会計ソフトの取り込み形式に合わせたCSVと、確認用の一覧を作る
- 【人】 担当者が、検算の合わない行と、科目が候補止まりの行だけを確かめる
- 【人】 確認を終えたCSVを会計ソフトへ取り込み、不明な取引を顧問先へ問い合わせる
5番目が、この設計の分かれ目です。 読み取りを信用するかどうかを、AIの自信ではなく通帳に印字された残高という、外にある数字で決めます。検算を通った行は、金額について人が見直す必要がありません。
6番目と7番目を分けているのも意図してのことです。 対応表で引けるものはスクリプトで引き、AIに渡すのは初めて出てきた摘要だけにします。 外へ渡すデータが減り、付け方も前月とそろいます。
02今回想定するシステム構成
通帳の写し(スキャンのPDF・スマートフォンの写真) │ 顧問先フォルダの受付用フォルダに保存 ▼【トリガー】定時実行で新しいファイルを検知 Google Apps Script ── 形式・解像度・ページ数の確認 ▼ Google Document AI(Form Parser) │ 表の行・セル・信頼度を返す ▼ Google Apps Script ── 行データに整形(日付・摘要・出金・入金・残高) ▼ Google Apps Script ── 残高の検算 │ 前行の残高+入金−出金=この行の残高? ├──▶ 合わない行 ──▶【人が写しと並べて確認】 ▼ Google Apps Script ── 対応表で摘要を引く(完全一致) ├──▶ 一致しない行 ──▶ Claude API ── 勘定科目の候補と理由 ▼ Google Apps Script ── 取り込み用CSVと確認用の一覧 ▼ 【人が候補と不一致の行を確認】──▶ 会計ソフトへ取り込み
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | AWS Textract、Azure AI Document Intelligence |
| 生成AI | Claude API(勘定科目の候補と理由) | OpenAI API、Gemini API |
| 差異計算 | Google Apps Script(残高の検算) | Python、Microsoft Excel(数式) |
| 連携 | Google Apps Script(対応表の照合、取り込み用CSVの作成) | Python |
| 保管 | Google ドライブ(顧問先フォルダ) | Microsoft SharePoint |
会計ソフトは新しく足すものではありません。 この構成は取り込み用のCSVを作るまでで、会計ソフトへの取り込みは担当者が行います。 対応表は、会計ソフトから過去の仕訳を書き出して作ります。
OCRに Form Parser を選ぶのは、専用のプロセッサが日本語の通帳に対応していないためです。 Document AI のプロセッサ一覧には銀行の取引明細書を読む Bank Statement Parser がありますが、対応言語は英語だけで、対応地域も eu と us です。日本語の通帳に使う前提にはしません。
Form Parser は、キーと値のペア、表、チェックボックス、一般的なエンティティを取り出す汎用のプロセッサです。対応言語の一覧に日本語が含まれています。表は、行や列をまたぐセルの無い単純な表から取り出すとされており、通帳の明細はちょうどこの形です。
ページ数の上限は、同期処理で15ページ、非同期のバッチ処理で100ページです。 1束が15ページを超えるときは分けて送るか、バッチ処理にします。対応地域は asia-south1 asia-southeast1 australia-southeast1 eu europe-west2 europe-west3 northamerica-northeast1 us の8つです。どこでデータを処理させるかは第13章で扱います。
検算と整形をAIにさせないことが、この構成の要です。 足し算と引き算はスクリプトなら必ず同じ答えになり、なぜ合わないのかを行と列で示せます。
03どうやって実装するのか
処理の起点を決める
受付用フォルダを定時実行で見に行き、新しいファイルがあれば処理します。 事務所の業務時間中に1時間おき程度を想定します。通帳の写しは月初にまとまって届きますが、急ぎの仕事ではないので、保存した瞬間に動かす必要はありません。
処理の単位は「顧問先・口座・月」の1束です。 スマートフォンの写真は1ページ1ファイルで届くので、受付用フォルダの下に束ごとのフォルダを切り、その中のファイルをまとめて1束として扱います。 フォルダ名に顧問先コード、口座の識別名、対象月を入れる決まりにします。
処理が終わった束は処理済みフォルダへ移します。 移すのは最後まで成功したときだけです。受付用フォルダに残っている束の数が、そのまま未処理の数になります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 通帳の写し | PDFまたは画像。束のフォルダ名(顧問先コード・口座・対象月) | 受付用フォルダ |
| 読み取り結果 | 表の行・セル・本文テキスト、読み取りの信頼度 | Google Document AI |
| 前月の最終残高 | 同じ口座の前月末の残高 | 前月の処理結果 |
| 摘要の対応表 | 顧問先ごとの摘要のパターン、勘定科目、補助科目、税区分 | 会計ソフトから書き出した過去の仕訳 |
| 科目の一覧 | その顧問先で使っている勘定科目の名前 | 会計ソフトの科目設定 |
質を決めるのは、下の3つです。 前月の最終残高が無いと、束の最初の行を検算できません。対応表が無いと、すべての行がAIに渡り、付け方が前月とそろわなくなります。
科目の一覧を渡すのは、存在しない科目を作らせないためです。 顧問先によって「支払手数料」を「振込手数料」として分けていることがあり、一覧の外の名前が出ると、会計ソフトの取り込みで止まります。
データの取得方法を決める
読み取りは、スクリプトから Form Parser を呼ぶだけです。 返ってくる結果の中から、次のものを取ります。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 表の見出し行 | ページごとの tables の headerRows | 列が日付・摘要・出金・入金・残高のどれかを決める |
| 表の明細行 | 同じく bodyRows の cells | 1行ずつの値 |
| セルの位置と文字 | 各セルの layout と textAnchor | 本文テキストから値を切り出す |
| 信頼度 | layout の confidence | 読み取りに自信の無いセルを見分ける |
セルの文字は、そのまま入っているわけではありません。 textAnchor の textSegments が startIndex と endIndex で文書全体の本文を指しているので、その範囲を本文から切り出して値にします。 Form Parser の表は行や列をまたぐセルを認識しないため、rowSpan と colSpan は常に1です。
列の意味は、見出し行の文字で決めます。 銀行によって「お支払金額」「お引出し」「出金」と呼び方が違い、列の順番も違います。見出しの呼び方を列の意味に対応させる一覧を、銀行ごとに持ちます。 見出し行の無いページは、前のページの列の並びを引き継ぎます。
前月の最終残高は、前月の処理結果として保存しておいたものを読みます。初めての口座は、担当者が前月末の残高を手で入れます。
AIへ渡す前に整形する
- 形式の確認 … PDF、TIFF、GIF、JPEG、PNG、BMP、WebP のいずれかであることを確かめます。iPhone の写真で多いHEICは一覧に無いため、JPEGに変換してから送ります
- 解像度の確認 … スキャンは最低200dpi、300dpi以上が一般に最も良い結果になるとされています。下回るものは読み取りに進まず、撮り直しを頼む一覧に入れます
- ページの並べ替え … 写真のファイル名や撮影日時の順に並べます。順番は後の検算で確かめ直すので、ここでは仮の順番で構いません
- ページ数の確認 … 同期処理は15ページまでです。超える束は15ページごとに分けて送ります
- 表の整形 … 金額から「円」「¥」「*」「,」を取り除き、数字だけにします。日付は和暦の略記(06-07-12 など)を西暦の日付に直します
- 行の種類の判定 … 「繰越」「前ページより」「合計」「おまとめ記帳」を含む行に印を付けます。これらは取引ではないので、仕訳にはしません
- 重複の検知 … 同じ口座・同じ月の束が二度届いていないかを確かめます
2番目を軽く見ないでください。 スマートフォンの写真は画素数が多くても、通帳の1行の文字は小さく写ります。解像度が足りない写しは、検算が合わない行を大量に出し、人の確認を増やすだけです。
6番目の「おまとめ記帳」は、特に注意が要ります。 通帳の記帳をしばらくしないと、未記帳の取引が合計1行にまとめて印字されることがあります。検算は合いますが、中身の取引が分かりません。 仕訳にせず、明細を顧問先へ頼む一覧に入れます。
AIに処理させる
させるのは、対応表で引けなかった摘要について、勘定科目の候補とその理由を書くことだけです。 読み取りと検算は、AIより前に終わっています。
| 見るもの | させること | 判断できないときの扱い |
|---|---|---|
| 摘要 | 対応表の中から、近い摘要のものを探す | 近いものが無ければ no_match |
| 出金か入金か | 預金の相手側に来る科目の候補を選ぶ | どちらとも決まらなければ unknown |
| 金額と日付 | 候補を絞る材料にする(毎月同じ額なら家賃など) | 材料にならなければ使わない |
| 科目の一覧 | 候補を一覧の中からだけ選ぶ | 一覧に無ければ空欄 |
預金の側の科目は、スクリプトが決めます。 出金なら貸方が普通預金、入金なら借方が普通預金です。AIが選ぶのは相手側の1つだけなので、借方と貸方を取り違える失敗が起きません。
match_type を3つに分けるのが大事な区別です。 対応表に近い摘要があったか、摘要から推し量ったか、手がかりが無いかで、担当者の確認の重さが変わります。
| させないこと | 理由 |
|---|---|
| 金額・残高の修正 | 検算の意味が無くなる。合わない事実が消える |
| 勘定科目の確定 | 最終判断は担当者。顧問先の事情で付け方が変わる |
| 税区分の判断 | 対応表にあるものを写すだけ。無ければ空欄にする |
| 取引先名の補完 | 「カ)ヤマダ」を正式な社名に直さない |
| 一覧に無い科目の作成 | 会計ソフトの取り込みで止まる |
1行目がいちばん起きやすい失敗です。 検算が合わない行をAIに渡して「直して」と頼むと、残高が合うように数字を書き換え、それらしい理由まで付けて返します。 読み間違いは消えず、見つけにくくなるだけです。だから、合わない行はAIに渡しません。
指示内容を固定する
あなたは税理士事務所で、顧問先の通帳の明細に勘定科目の候補を付ける立場です。
渡された明細はすべて、残高の検算を通って金額が確定したものです。
あなたが決めるのは、普通預金の相手側に来る勘定科目の「候補」だけです。
【渡すもの】
- 明細:行番号、日付、摘要、出金額、入金額
- 対応表:この顧問先の過去の仕訳から作った「摘要 → 勘定科目・補助科目・税区分」
- 科目の一覧:この顧問先が使っている勘定科目の名前
【match_type の選び方】
- table_similar … 対応表に、表記の違いを除いて同じ相手と読める摘要がある
- inferred ...... 対応表には無いが、摘要の内容から科目を推し量れる
- no_match ...... 手がかりが無く、候補を出せない
迷ったときに table_similar を選ばないでください。
【厳守事項】
- 金額・日付・摘要を書き換えないでください。渡された値をそのまま返してください。
- 勘定科目は「科目の一覧」の中からだけ選んでください。
一覧に無い科目を作らないでください。選べなければ空欄にしてください。
- 税区分は、table_similar のときに対応表の値を写すだけにしてください。
inferred と no_match のときは空欄にしてください。
- 摘要に書かれていない取引先名や取引の内容を補わないでください。
「カ)ヤマダ」を正式な社名に直さないでください。
- reason には、判断の根拠を一文で書いてください。
table_similar のときは、根拠にした対応表の摘要をそのまま写してください。
- 確定した科目として書かないでください。すべて候補です。
- 1つの明細に候補を2つ以上付けないでください。
- 取引ではない行(繰越・合計など)が混ざっていたら、
科目を付けず note に「取引ではない行」と書いてください。
【明細】{rows}
【対応表】{mapping_table}
【科目の一覧】{account_list}
「金額を書き換えない」を最初に置いているのは、検算を通った値を守るためです。 摘要の読み取りに違和感があると、AIは金額のほうを疑って直そうとすることがあります。直した瞬間に、検算を通ったという事実が意味を失います。
「迷ったときに table_similar を選ばない」も必要です。 対応表に近い摘要があると言われれば、担当者は確認を軽くします。確認を軽くしてよいかどうかの判断を、AIの側に楽観させないための一文です。
税区分を table_similar のときだけに限っているのも同じ理由です。 推し量った科目に税区分まで付くと、候補が一式そろって見え、確認が素通りになります。
出力形式を固定する
次の形のJSONで受け取ります。 Claude API の構造化出力を使い、output_config.format に type: "json_schema" とスキーマを渡します。スキーマに従った、解析できるJSONが返ることが保証されます。
{
"bundle_id": "C023-main-2026-08",
"rows": [
{
"row_no": 0,
"date": "2026-08-05",
"description": "",
"withdrawal": 0,
"deposit": 0,
"direction": "withdrawal | deposit",
"account_candidate": "",
"sub_account": "",
"tax_category": "",
"match_type": "table_similar | inferred | no_match",
"reason": "",
"note": ""
}
]
}
ただし、金額の範囲はスキーマで縛れません。 構造化出力は minimum や maximum といった数値の制約をサポートしていません。返ってきた金額が渡した値と同じかは、スクリプトが行番号で突き合わせて確かめます。 1つでも違えば、その束の結果を使いません。
スキーマの中のオブジェクトには additionalProperties: false を付けます。 構造化出力ではこれが必須です。余計な項目が返らないので、CSVの列との対応が崩れません。
AIの出力とは別に、検算の結果をスクリプトが行ごとに持ちます。
| 項目 | 値 | 意味 |
|---|---|---|
balance_check | ok | 前の行の残高+入金−出金が、この行の残高と一致 |
mismatch | 一致しない。読み取りの誤りとして人へ | |
skipped | 繰越・合計など、取引ではない行 | |
low_confidence | true / false | 金額のセルの信頼度が決めた値を下回る |
row_status | ready | 検算が合い、科目も対応表で決まった |
needs_account | 検算は合ったが、科目が候補止まり | |
needs_reread | 検算が合わない。写しと並べて人が読む |
mismatch の並び方で、どのセルを読み違えたかの見当が付きます。 1行だけ合わなければ、その行の出金か入金の読み違いです。続く2行が合わなければ、1行目の残高を読み違えていることが多く、確認する場所が絞れます。
束の最後には、全体の検算を1回します。 前月の最終残高+入金の合計−出金の合計が、束の最後の残高と一致するかです。行ごとの検算がすべて合っていても、ページが1枚抜けていればここで分かります。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付用フォルダ | Apps Script の定時実行 | 新しい束のフォルダを見つける |
| Google Document AI | API呼び出し | 表の行・セル・信頼度を返す |
| 対応表・科目の一覧 | スプレッドシートの読み取り | 顧問先ごとの摘要と科目の対応を引く |
| Claude API | API呼び出し(構造化出力) | 対応表で引けなかった行に科目の候補を付ける |
| 確認用の一覧 | スプレッドシートへの書き込み | 行ごとの検算結果と候補を並べる |
| 会計ソフト | 担当者が取り込み用CSVを取り込む | 確認を終えた行だけ |
会計ソフトへは書き込みません。 この構成が出すのは取り込み用のCSVまでです。取り込みを自動にすると、検算が合わない行が混ざったまま帳簿に入る経路ができます。
取り込み用CSVには ready の行と、担当者が確認を終えた行だけを入れます。 列の並びは、使っている会計ソフトの取り込み形式に合わせます。
対応表は読み取りだけです。 担当者が候補を採用しても、対応表には自動で足しません。月に1回、採用した候補をまとめて見直し、足すものを人が決めます。
人が確認する
人が開くのは needs_reread と needs_account の行だけです。 ready の行は一覧で件数を流し見ます。全行を開く設計にすると、第10章の16.0時間には収まりません。
needs_rereadを先に見る … 確認用の一覧に、その行の写しの切り抜きを並べます。写しを見て正しい金額を打ち直し、検算が通るかをもう一度確かめます- 束の全体の検算を見る … 合わなければ、ページの抜けか順番の入れ違いです。顧問先に写しの撮り直しを頼みます
needs_accountの候補を確かめる …no_matchから、inferred、table_similarの順に見ます。no_matchの多くは、顧問先への問い合わせになります- 候補を覆したら記録する … どの摘要に、どの科目を付けたかを残します。対応表の見直しの材料です
1番目で、AIに読み直させないでください。 同じ写しを同じ仕組みで読めば、同じ所で間違えます。読み直しは、写しを見る人の仕事です。
目標は、80束をならして1束12分です。 検算の合わない行が1束に数行、科目が候補止まりの行が十数行という想定です。それより多い月は、写しの解像度が落ちているか、対応表が古くなっています。
例外に対処する
| 起きること | 対応 |
|---|---|
| HEICの写真が届く | 対応形式の一覧に無い。JPEGに変換してから送る |
| 解像度が200dpiを下回る | 読み取りに進まず、撮り直しを頼む一覧へ |
| 束が15ページを超える | 15ページごとに分けて同期処理で送るか、バッチ処理にする |
| 列の見出しが一覧に無い銀行 | 列の意味を決められない。束ごと人へ回し、見出しの一覧に足す |
| 検算が合わない行がある | needs_reread。AIに渡さない |
| 束の全体の検算が合わない | ページの抜けか順番の入れ違い。顧問先に撮り直しを頼む |
| おまとめ記帳の行がある | 仕訳にせず、明細を顧問先へ頼む一覧へ |
| 前月の最終残高が無い | 束の最初の行を検算できない。担当者が手で入れる |
| 返ってきた金額が渡した値と違う | その束のAIの結果を使わず、人へ回す |
| 一覧に無い科目が返る | 空欄として扱い、needs_account にする |
| APIが応答しない | 受付用フォルダに残す。処理済みへ移すのは成功時だけ |
上から3行目までが大半を占めます。 どれもAIの問題ではなく、写しの受け取り方の問題です。 顧問先に撮り方の案内を1枚渡すほうが、仕組みを直すより効きます。
記録を残す
- 元の写しのファイルと、受け取った日時・経路(郵送のスキャン/PDF/写真)
- Document AI が返した結果の全文
- 行データ、検算の結果(
balance_check、row_status)、束の全体の検算 - AIに渡した行と、返ってきたJSONの全文。そのとき使った対応表の版
- 人が金額を打ち直した記録と、候補を覆した記録
- 会計ソフトへ取り込んだCSVと、取り込んだ日時
- 顧問先ごとの
needs_rereadの発生率
4つ目で「対応表の版」を残すのは、対応表が月ごとに育つためです。 後から科目の付け方を問われたとき、当時の対応表が残っていないと、なぜその候補になったかを説明できません。
最後の行は、顧問先との相談の材料になります。 特定の顧問先だけ読み直しが続くなら、撮り方か紙の状態に理由があります。
04実装レベルの3段階
最小構成では束の数がさばけません。 1ページずつ貼り付けるので、80束には使えません。確かめるための段階です。 半自動化で、①の打ち込みがほぼ無くなります。 ただし科目は担当者が付けたままなので、③の時間は残ります。本格構成で③が候補の確認に変わり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の検算結果を1か月見ると、読み直しの多い顧問先と、見出しの一覧に無い銀行が先に分かります。そこを直してから本格構成に進むほうが、確認の手間が減ります。
05工数削減シミュレーション
導入後 80件 × 12分 ÷ 60 = 16 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 記帳代行を請け負う顧問先が多く、通帳の写しがスキャン・スマートフォンの写真・コピーの束とばらばらの形で毎月届く税理士事務所・会計事務所。通帳の明細を担当者が会計ソフトへ手で打ち込んでおり、打ち間違いを残高の照合で後から探している場合。顧問先ごとに過去の仕訳が会計ソフトに残っていて、摘要と勘定科目の対応表を作れる場合。
- 顧問先の大半が銀行の明細データ(CSVや口座連携)を出せ、通帳の写しを使う必要がない場合。記帳代行の件数が月に数件で、手入力で足りる場合。なお、勘定科目や税区分の最終判断、顧問先への確認が要る取引の扱いは、この構成では代替できません。
07最小構成で試す方法
- 先月処理した束から5束を選ぶ(うち1束は、スマートフォンの写真で届いた読みにくいものを入れる)
- 手元のAIサービスの画面に、写しの画像を1ページずつ貼り付ける
- 「この通帳の明細を、日付・摘要・出金・入金・残高の表にしてください。読めない文字は推測せず『?』にしてください」と指示する
- 出てきた表を表計算ソフトに貼り、前の行の残高+入金−出金=この行の残高 の式を自分で入れる
- 式が合わない行を、先月の手入力の結果と見比べる
4番目は必ず自分の手でやってください。 AIに検算まで頼むと、合わない所をAIが自分で直した表が返ってくることがあります。 試したいのは、検算で読み取りの誤りが拾えるかどうかです。
| 出てきた内容 | 判断 |
|---|---|
| 式が合わない行と、読み間違いの行が一致した | OCRのAPIとスクリプトの連携に進む |
| 式が合わない行が多すぎる | 写しの解像度が先。 撮り方を変えて取り直す |
| 読めない文字を推測で埋めた | 指示の書き方で直る。構成は有効 |
2行目が出ることは珍しくありません。 失敗ではなく、これまで打ち間違いの探索に時間がかかっていた理由が1つ分かったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 検算が合わない行をAIが直してしまう | 合わない行はAIに渡さない。 返った金額も行番号で突き合わせる |
| 専用プロセッサで日本の通帳を読もうとする | Bank Statement Parser は英語だけ。Form Parser で表を取る |
| HEICの写真で止まる | 対応形式の一覧に無い。JPEGに変換する |
| 読み直しの行が多すぎる | スキャンは最低200dpi。撮り方の案内を顧問先に渡す |
| 列の意味を取り違える | 銀行ごとに見出しの呼び方が違う。見出しの一覧で決める |
| ページの抜けに気付かない | 束の全体の検算を必ず行う |
| おまとめ記帳の行を仕訳にしてしまう | 行の種類を前処理で判定し、明細を顧問先へ頼む |
| 一覧に無い科目が出て取り込みで止まる | 科目の一覧を渡し、一覧の外は空欄として扱う |
| 候補がそろって見え、確認が素通りになる | 税区分は table_similar のときだけ写す |
| 対応表に候補を自動で足してしまう | 月に1回、人が見直して足す |
上の2行が、この構成の失敗のほとんどです。 どちらも「読み取った数字を、確かめずに信用する」という同じ所から出ています。確かめる物差しを通帳の残高に置いてあるかどうかで、運用に乗るかが決まります。
下の2行も、同じくらい早く効いてきます。 候補が一式そろって見えると、担当者は確認を軽くし、その候補が対応表に入って翌月から「過去の仕訳」になります。 誤った付け方が、正しい付け方として育ってしまいます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 顧問先の口座番号、銀行名と支店名、取引の日付と金額、そして摘要に印字された取引先の名前や個人の名前です。
- 外部へ渡す範囲を段階ごとに絞る … OCRには写しの全体が渡りますが、生成AIに渡すのは対応表で引けなかった行の日付・摘要・金額だけです。口座番号や残高は科目の判断に要らないので、渡しません
- データを処理する地域を決める … Form Parser の対応地域は第6章の8つで、東京を含む日本の地域は一覧にありません。どの地域でプロセッサを作るかを事務所として決め、顧問先に説明できるようにしておきます
- 顧問契約で取り扱いを明示する … 通帳の写しを外部のサービスで読み取ることを、顧問契約書か業務の説明書に書き、顧問先の了解を得ておきます。 了解の無い顧問先の束は、この構成に流さず手入力のままにします
- 保存期間を決める … 写しの画像、OCRの結果、AIとのやり取りを、それぞれいつまで残すかを決めます。 帳簿に関わる記録は、自社の規程と所管のガイドラインに従って保存します。途中の結果を無期限に残さないでください
- この構成は税務上の判断を代替しません … 勘定科目と税区分の最終判断、顧問先への確認が要る取引の扱いは、担当者と所長が決めることです。 この構成が出すのは、検算を通った明細と科目の候補だけです
- 対応表を外部へまとめて出さない … 顧問先ごとの取引先と科目の対応がまとまった一覧です。照合はスクリプトの側で行い、AIへは近い摘要を探すのに要る行だけを渡します
- 顧問先フォルダの権限を分ける … 受付用フォルダにアップロードできるのはその顧問先と担当者だけにし、ほかの顧問先の写しが見えないようにします
誤りが起きた場合のリスクは、読み間違いのまま帳簿に入ることと、誤った科目が定着することの2つです。 前者は検算の合わない行をAIに直させると起き、後者は候補を確かめずに対応表へ足すと起きます。どちらも「AIの出力を事実として扱う」ことから出ているので、そこだけは設計で守ります。
10まず何から始めるか
1週目:対応表を1社分作る
記帳代行の件数が多い顧問先を1社選び、会計ソフトから過去1年分の仕訳を書き出して、摘要と科目の対応表を作ります。 同じ摘要に違う科目が付いているものが見つかったら、それが第3章の(c)です。担当者で付け方をそろえます。
2週目:5束で試す
第8章のとおり、手元のAIサービスで写しを表にし、検算の式を自分で入れて、合わない行が読み間違いの行と一致するかを確かめます。あわせて、読みにくい写しの割合を数えます。
3週目:顧問先に撮り方を案内する
写しの受け取り方を決めます。スキャンは200dpi以上、写真は真上から1ページずつ、ファイルは束ごとのフォルダに、という案内を1枚にまとめて渡します。顧問契約での取り扱いの説明もここで済ませます。
4週目:読み取りから検算までをつなぐ
Apps Script で受付用フォルダを見に行き、Form Parser を呼び、行データにして検算するところまで作ります。この時点では科目の候補を出さず、balance_check の一覧だけを見ます。
2か月目: 対応表の照合と Claude API の候補を足し、取り込み用CSVを出します。needs_reread と needs_account の行数を毎週数えます。3か月目以降: 対象の顧問先を広げ、1束45分が何分になったかを実測します。顧問先ごとの needs_reread の発生率を見て、撮り方の案内と対応表を見直した時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Document AI のプロセッサに Enterprise Document OCR、Form Parser、Layout Parser、Bank Statement Parser などがあること。Bank Statement Parser の対応言語が英語だけで、対応地域が eu と us であること。Form Parser がキーと値のペア、表、チェックボックス、一般的なエンティティを取り出し、対応言語に日本語が含まれること。Form Parser のページ上限が同期処理で15、バッチ処理で100であること。Form Parser の対応地域が asia-south1 asia-southeast1 australia-southeast1 eu europe-west2 europe-west3 northamerica-northeast1 us であること | Google Cloud: Processor list | 2026-09-29 |
処理結果の pages に tables があり、表が headerRows と bodyRows、その中の cells で表されること。セルが layout と textAnchor を持ち、textSegments の startIndex と endIndex で本文を指すこと。Form Parser の表は行や列をまたぐセルを認識せず、rowSpan と colSpan が常に1であること。layout に confidence が付くこと | Google Cloud: Handle the processing response | 2026-09-29 |
| 対応するファイル形式が PDF、TIFF、GIF、JPEG、PNG、BMP、WebP などで、HEICが一覧に無いこと。スキャンは最低200dpi、300dpi以上が一般に最も良い結果になるとされていること | Google Cloud: Supported files | 2026-09-29 |
構造化出力が output_config.format に type: "json_schema" とスキーマを渡して使い、スキーマに従った解析できるJSONを返すこと。オブジェクトには additionalProperties: false が必要なこと。minimum や maximum などの数値の制約がサポートされないこと | Claude Docs: Structured outputs | 2026-09-29 |
勘定科目と税区分の最終判断は、担当者と所長で行ってください。 本記事は Google Cloud と Claude の公式ドキュメントで確認できた範囲だけを扱っています。日本の通帳を読み取る専用のプロセッサは、確認した範囲では見当たりませんでした。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0289)についてのご相談はこちらから。
