特許事務所から届く請求書を、料金の取り決めと案件台帳に照らして支払う前に検算する
特許事務所から届く請求書を明細の1行ずつに分け、事務所と取り決めた料金表と社内の案件台帳に照らして検算します。行ごとに「一致」「差異あり」「根拠なし」を付け、人は差異と根拠なしの行だけを確かめてから支払に回します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Make/Power Automate/Zapier
- 対象業界
- IT・SaaS/製造
- 対象部門
- 知財/経理
- 対象業務
- 内容確認・チェック/比較検討
- 主な課題
- 人手が足りない/属人化している/確認ミスが多い
- AIで行う処理
- 判定
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- ノーコード連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 事務所からメールでPDFの請求書が届き、知財部の事務担当が共有フォルダに保存する
- 明細を1行ずつ読み、事務所の整理番号から案件台帳で自社の管理番号を引く
- 「意見書作成」「補正書作成」などの記載から作業区分を読み取り、その事務所の料金表の手数料と比べる
- 案件台帳で、その案件にその作業が実際に発生したか(通知を受けて応答を指示したか)を確かめる
- 外国代理人の費用は、外貨の金額と請求書の換算レートを電卓で掛け、円の金額と合うかを見る
- 差異があれば事務所に問い合わせ、なければ経理部へ回す
- 経理部の支払担当が金額と振込先を確かめ、支払の手続きをする
- 人届いた請求書のPDFを受領フォルダに保存する
- 自動保存をきっかけにワークフローが動き、OCRが請求書の項目と明細を返す
- 自動明細を1行ずつに分け、AIが案件番号・作業区分・手数料・実費・外国代理人費用に振り分ける
- 自動整理番号を案件台帳で自社の管理番号に読み替え、その作業が台帳にあるかを確かめる
- 自動請求日に有効な版の料金表を引き、手数料の差額と換算の差額を計算する
- 自動過去の判定済み明細と照らし、同じ案件・同じ作業の二重請求を探す
- 自動行ごとに `match` / `diff` / `no_basis` を付け、請求書単位の結果を一覧に書き出す
- 人知財部の事務担当が `diff` と `no_basis` の行だけを開き、事務所に問い合わせるかを決める
- 人すべての行が片付いた請求書を経理部へ回す
各工程の詳しい説明を読む
- 事務所からメールでPDFの請求書が届き、知財部の事務担当が共有フォルダに保存する
- 明細を1行ずつ読み、事務所の整理番号から案件台帳で自社の管理番号を引く
- 「意見書作成」「補正書作成」などの記載から作業区分を読み取り、その事務所の料金表の手数料と比べる
- 案件台帳で、その案件にその作業が実際に発生したか(通知を受けて応答を指示したか)を確かめる
- 外国代理人の費用は、外貨の金額と請求書の換算レートを電卓で掛け、円の金額と合うかを見る
- 差異があれば事務所に問い合わせ、なければ経理部へ回す
- 経理部の支払担当が金額と振込先を確かめ、支払の手続きをする
(a)料金表の版を取り違える。 改定の前後に届いた請求書は、どちらの表で見るかで結論が逆になります。古い表で「一致」とした請求が、実は改定前の安い料金のままだった、ということも起きます。
(b)台帳の確認が省かれる。 3番までで金額が合うと、4番を飛ばしがちです。同じ年金納付が2か月続けて請求されても、金額は料金表どおりなので目に留まりません。
(c)換算の確認が1件ごとに重い。 外貨の金額、レート、円の金額を1行ずつ電卓で追うのは時間がかかり、換算日が取り決めと違っていても気づけません。
- 【人】 届いた請求書のPDFを受領フォルダに保存する
- 【自動】 保存をきっかけにワークフローが動き、OCRが請求書の項目と明細を返す
- 【自動】 明細を1行ずつに分け、AIが案件番号・作業区分・手数料・実費・外国代理人費用に振り分ける
- 【自動】 整理番号を案件台帳で自社の管理番号に読み替え、その作業が台帳にあるかを確かめる
- 【自動】 請求日に有効な版の料金表を引き、手数料の差額と換算の差額を計算する
- 【自動】 過去の判定済み明細と照らし、同じ案件・同じ作業の二重請求を探す
- 【自動】 行ごとに
match/diff/no_basisを付け、請求書単位の結果を一覧に書き出す - 【人】 知財部の事務担当が
diffとno_basisの行だけを開き、事務所に問い合わせるかを決める - 【人】 すべての行が片付いた請求書を経理部へ回す
AIがするのは3番目の振り分けだけです。 差額の計算も、一致かどうかの判定も、ワークフローの計算で行います。金額の比較をAIに任せると、桁や税の扱いを「解釈」して一致にしてしまうからです。
02今回想定するシステム構成
特許事務所の請求書(PDF)
▼【トリガー】受領フォルダへの保存
Make
▼
Azure AI Document Intelligence(事前構築済み請求書モデル)
│ 請求書の項目・明細(Items)・信頼度を返す
▼
Make ── Iterator で明細を1行ずつに分ける
▼
Claude API ── 1行ずつ振り分ける
│ 事務所の整理番号/作業区分/手数料/実費/外国代理人費用と為替
▼
Make ── 案件台帳を引く(管理番号への読み替え、作業の記録)
── 料金表を引く(請求日に有効な版)
── 差額を計算する(手数料、換算)
── データストアで二重請求を探す
▼
Make ── Aggregator で請求書単位にまとめる
▼
判定一覧(match / diff / no_basis)
▼
【人が diff と no_basis の行だけ確認】 ──▶ 経理部へ| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| ワークフロー | Make | Zapier、Power Automate |
| OCR | Azure AI Document Intelligence | Google Document AI、AWS Textract |
| 生成AI | Claude API | OpenAI API、Gemini API |
| 差異計算 | Make | Power Automate、Zapier |
案件台帳・料金表・会計システムは新しく足すものではありません。 この構成は台帳と料金表を読むだけで、書き込みません。最初の準備は、料金表に「適用開始日」の列と作業区分のコードを足すことです。
読み取りの土台は、Azure AI Document Intelligence の事前構築済み請求書モデルです。 OCRで売上請求書などから主要なフィールドと品目を抽出し、構造化されたJSONを返します。現在27言語の請求書をサポートしており、入力はPDFと画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)です。
明細は Items という配列で返ります。 公開されているスキーマでは、1行ごとに Description(明細の説明)、Amount(金額)、Quantity、UnitPrice、Date、ProductCode、Tax、TaxRate などを持ちます。請求書全体では InvoiceId、VendorName、InvoiceDate、SubTotal、TotalTax、InvoiceTotal などが取れます。事務所の整理番号や作業区分という欄はありません。 それらは Description の文字列の中にあり、そこを読み分けるのがAIの役目です。
Make では、配列を1行ずつに分けるのが Iterator です。 配列を一連のバンドルに変換し、各アイテムを個別のバンドルとして出力します。逆にまとめ直すのが Aggregator で、Source module から始まった複数のバンドルを1つにまとめます。
03どうやって実装するのか
処理の起点を決める
受領フォルダにPDFが保存されたことを起点にします。 事務所の請求は月末に集中しがちですが、1日1回にまとめると問い合わせの返事が支払日に間に合いません。届いた順に1枚ずつ処理します。
処理が終わったファイルは処理済みフォルダへ移します。移すのは判定一覧への書き出しが成功したときだけです。 受領フォルダに残っている数が、そのまま未処理の数になります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 請求書PDF | 事務所名、請求日、明細、合計 | 受領フォルダ |
| 読み取り結果 | 請求書の項目、Items の各行、信頼度 | Azure AI Document Intelligence |
| 案件台帳 | 事務所の整理番号、自社の管理番号、国、作業の記録(指示日・完了日) | 表計算の台帳 |
| 料金表 | 事務所、作業区分コード、手数料、適用開始日、換算の取り決め | 事務所ごとの表 |
| 判定済み明細 | 過去に判定した行(案件、作業区分、請求日、金額) | Make のデータストア |
質を決めるのは料金表の2つの列です。 適用開始日が無ければ改定の前後で版を選べず、作業区分コードが無ければAIが読み分けた区分を表に当てられません。料金表の作業区分を、AIに選ばせる選択肢そのものにします。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 請求書全体の項目 | 請求書モデルの documentResults | 事務所名、請求日、合計の照合 |
| 明細の各行 | Items の配列 | 1行ずつの振り分けの入力 |
| 行の信頼度 | 抽出結果の信頼度 | 読み取りが怪しい行を人へ回す |
| 管理番号と作業の記録 | 案件台帳 | 読み替えと発生の確認 |
| 有効な版の手数料 | 料金表 | 差額の計算 |
明細は documentResults の中にあります。 請求書モデルのJSONは readResults(認識した全テキスト)、pageResults(テーブルとセル、信頼度)、documentResults(請求書固有の値と品目)の3つに分かれ、明細を探すのは3つ目です。
明細の行が1つにつながって返ることがあります。 事務所の書式によっては、1つの案件の手数料と実費が1行の Description にまとめて書かれています。その場合は、AIに1行を複数の行へ分けて返させます(次の「AIに何をさせるのか」の表の1行目)。
料金表は、請求日以前で最も新しい適用開始日の版を引きます。事務所と作業区分コードで絞り、適用開始日で並べて1件目を取ります。
AIへ渡す前に整形する
- 形式の確認 … 事前構築済みモデルの入力はPDFと画像です。Word や Excel で届いたものはPDFにします
- パスワードの解除 … パスワードでロックされたPDFは、提出前に解除する必要があります
- ページ数とサイズ … PDFとTIFFは最大2,000ページ、有料(S0)レベルで500MBまでです
- 合計の照合 …
ItemsのAmountの合計とSubTotalを比べます。合わなければ明細の取りこぼしを疑い、人へ回します - 整理番号の正規化 … 全角・半角、ハイフンの有無をそろえてから台帳を引きます
4番目を省かないでください。 明細が1行読み落とされていても、残りの行は全部「一致」になります。行ごとの判定がすべて一致でも、合計が合わない請求書は通しません。
AIに処理させる
させるのは、明細の1行を検算できる形に分けることだけです。
| 振り分ける項目 | 中身 | 判断できないとき |
|---|---|---|
| 行の分割 | 1行に手数料と実費が混ざっていれば、別の行に分ける | 分け方が決まらなければ needs_human |
| 事務所の整理番号 | Description から写す | 見つからなければ空 |
| 自社の管理番号 | 請求書に書かれていれば写す | 書かれていなければ空 |
| 作業区分コード | 料金表の区分から1つ選ぶ | 当てはまらなければ unknown |
| 費用の種別 | 事務所手数料/庁費用などの実費/外国代理人費用 | 決まらなければ unknown |
| 外国代理人費用 | 外貨の金額、通貨、請求書に書かれたレートと換算日 | 書かれていない項目は空 |
| させないこと | 理由 |
|---|---|
| 手数料が正しいかの判定 | 料金表との比較はワークフローの計算で行う |
| 庁費用の金額の正誤 | 料金表の外にある。 この構成では確かめない |
| 為替レートの推測 | 書かれていないレートを補うと、差異が消える |
| 管理番号の推測 | 似た番号に寄せると、台帳に無い案件が見えなくなる |
2行目が、この題材でいちばん起きやすい誤りです。 「出願料」と書かれた行を見ると、AIは知っている金額と比べて意見を書こうとします。金額の正誤を言わせないことを、指示にも出力の形にも組み込みます。
指示内容を固定する
あなたは知財部で、特許事務所の請求明細を検算できる形に整える担当です。
渡された明細の1行を読み、下の項目に振り分けてください。
金額が正しいかどうかは判断しないでください。
【作業区分コード(この中から1つだけ選ぶ)】
{fee_codes}
例:APP_JP(国内出願) / OA_RESP(中間応答) / ANNUITY(年金納付手続)
/ FOREIGN_FILING(外国出願手続) / OTHER(上記以外)
当てはまらなければ unknown を選んでください。似た区分に寄せないでください。
【費用の種別】
- office_fee ....... 事務所の手数料
- official_fee ..... 庁に納める費用など、事務所が立て替えた実費
- foreign_agent .... 外国代理人の費用
- unknown .......... 決められない
【厳守事項】
- 1行に手数料と実費が混ざっていれば、lines を複数に分けてください。
分け方が決まらなければ needs_human を true にしてください。
- 庁に納める費用の金額が正しいかは、書かないでください。
知っている金額と比べないでください。
- 事務所の整理番号と自社の管理番号は、書かれた文字列をそのまま写してください。
似た番号に直さないでください。書かれていなければ空にしてください。
- 外国代理人費用の為替レートと換算日は、請求書に書かれているものだけを写してください。
書かれていなければ空にしてください。推測しないでください。
- 金額の計算をしないでください。合計から逆算して埋めないでください。
- evidence には、振り分けの根拠にした文字列をそのまま写してください。
【請求書の情報】事務所:{vendor_name} 請求日:{invoice_date}
【明細の1行】{item_json}
作業区分を選択肢で渡すのが要です。 自由に書かせると「意見書・補正書作成」「応答書類作成」のように事務所の言葉のまま返り、料金表に当たりません。料金表のコードそのものを選ばせ、当てはまらないときの逃げ道として unknown を用意します。
出力形式を固定する
Claude API の構造化出力(structured outputs)で、次の形のJSONを返させます。 output_config.format にJSONスキーマを渡すと、応答がそのスキーマに沿うよう制約されます。
{
"lines": [
{
"office_ref": "",
"company_ref": "",
"fee_code": "APP_JP | OA_RESP | ANNUITY | FOREIGN_FILING | OTHER | unknown",
"cost_type": "office_fee | official_fee | foreign_agent | unknown",
"amount_jpy": 0,
"foreign": { "currency": "", "amount": 0, "rate": 0, "rate_date": "" },
"evidence": ""
}
],
"needs_human": false
}
構造化出力を使う理由は、後段が計算だからです。 fee_code が1文字でも違えば料金表を引けず、amount_jpy が文字列なら差額を計算できません。fee_code と cost_type は enum で縛ります。 enum は文字列などの単純な値に使え、応答はスキーマで指定した大文字・小文字と一致する必要があります。
スキーマを書くときの注意は3つです。
- すべてのオブジェクトに
additionalProperties: falseが必要です minimumやmaximumなどの数値の制約は使えません。 金額が0以上かは Make の側で確かめますmax_tokensに達すると、出力が途中で切れます。 スキーマに沿うことが保証されるのは完了した応答だけです。明細の多い行を分割させるときは余裕を持たせます
1行がどう分かれるかの例です。 明細に「P24-0312 米国出願 現地代理人費用 USD 1,200(レート 150.00、2026年8月29日) 180,000円/当所手数料 30,000円」と1行で書かれていたとします(金額は説明のための架空の値)。AIはこれを2行に分け、1行目を foreign_agent(外貨1,200、通貨USD、レート150.00、換算日2026-08-29、円180,000)、2行目を office_fee(FOREIGN_FILING、円30,000)として返します。
その先の計算は Make が行います。 1行目は、外貨の金額とレートの積が円の金額と合うか、換算日が取り決めの日(たとえば請求日)と同じかを見ます。2行目は、請求日に有効な版の料金表で FOREIGN_FILING の手数料を引き、差額を出します。AIは読み分けただけで、合っているかどうかには一言も触れていません。
判定は、このJSONを受け取った Make が付けます。
| 判定 | 条件 |
|---|---|
match | 台帳に作業の記録があり、有効な版の料金表の手数料と差額0 |
diff | 台帳に記録はあるが、手数料または換算に差額がある |
no_basis | 台帳に案件か作業の記録が無い、料金表に区分が無い、または二重請求の疑い |
out_of_scope | official_fee の行。金額は判定しない |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受領フォルダ | Make のトリガー | PDFの保存を検知する |
| Azure AI Document Intelligence | API呼び出し | 請求書の項目と Items を返す |
| Make の Iterator | モジュール | Items を1行ずつのバンドルに分ける |
| Claude API | API呼び出し | 1行ずつ振り分け、JSONで返す |
| 案件台帳・料金表 | 表の読み取り | 管理番号、作業の記録、有効な版の手数料を引く |
| Make のデータストア | Search records / Add/replace a record | 判定済み明細を探し、判定後に書き足す |
| Make の Aggregator | モジュール | 行の結果を請求書単位にまとめる |
| 判定一覧 | 表への書き出し | 請求書ごとに行の判定と差額を並べる |
Aggregator には1つ落とし穴があります。 Source module から Aggregator までの間のモジュールのデータは、Aggregator の設定で明示的に含めない限り、後段から参照できません。 行ごとの判定と差額を集約する項目に入れておかないと、請求書単位の一覧で消えます。Group by を使うと、指定した値ごとに分けてまとめられます。1ファイルに複数の請求書がある場合は、請求書番号でまとめます。
会計システムへは書き込みません。 支払の手続きは、人が経理部へ回した請求書だけが対象です。
人が確認する
知財部の事務担当が開くのは diff と no_basis の行だけです。 match の行は件数と合計を一覧で見て終わりにし、out_of_scope の実費は事務所の報告書と金額を目で合わせます。
no_basisを先に見る … 台帳の記録漏れか、請求の誤りかを分けます。台帳の更新忘れであることが多いので、事務所に問い合わせる前に台帳側を確かめますdiffの差額を見る … どの版の料金表を引いたかを確かめ、取り決めの読み違いでなければ事務所に問い合わせます- 問い合わせの結果を記録する … 事務所の説明で解消したか、訂正の請求書が来たかを残します
- 全行が片付いたら経理部へ回す
問い合わせのメールは人が書いて送ります。 事務所との関係は長く続くもので、誤った指摘の1通が次の案件の進め方にまで響きます。
例外に対処する
| 起きること | 対応 |
|---|---|
| 外国代理人費用の換算日が取り決めと違う | 換算の差額として diff。どちらの日のレートが正しいかは人が事務所と確かめる |
| 同じ案件・同じ作業が二度請求されている | データストアで照合し no_basis。分納や再手続の可能性もあるので、自動で差し戻さない |
| 台帳に無い案件番号 | no_basis。台帳の登録漏れを先に疑う |
作業区分が unknown | 料金表に無い作業。人が区分を決め、必要なら料金表に区分を足す |
明細の合計が SubTotal と合わない | 行の読み落としを疑い、請求書ごと人へ |
| 行の信頼度が低い | その行を needs_human にして人へ |
| パスワード付きPDF | 解除できなければ事務所に再送を依頼 |
| AIの応答が途中で切れた | スキーマの保証が無いため、その行を再実行。2回続けば人へ |
上の2行が、この題材に固有の例外です。 どちらも「請求が誤っている」とは限りません。差異として拾い上げるところまでを機械が行い、誤りかどうかは人が事務所と決めます。
記録を残す
- 元のPDFと、OCRが返したJSONの全文
- 行ごとのAIの出力(
linesとevidence) - 判定(
match/diff/no_basis/out_of_scope)と差額、そのとき引いた料金表の版(適用開始日) - 判定済み明細(データストア)… 案件、作業区分、請求日、金額
- 人が判定を覆した記録と、事務所への問い合わせの結果
料金表の版を残すのは、改定の前後で判定をやり直せるようにするためです。 事務所から「改定は先月からの適用」と言われたとき、どの請求書をどの版で見たかが分かれば、見直す範囲がすぐ決まります。
04実装レベルの3段階
推すのは半自動化です。 1枚15分のうち表を行き来する時間がほぼ消え、人の手元に残るのは差異の確認だけになります。本記事の工数試算もこの段階を想定しています。 本格構成は、台帳の更新が別の仕組みで自動化されてからにします。 台帳の作業記録を請求書の側から書き足すと、請求にある作業は必ず台帳にもある状態になり、no_basis が出なくなります。 検算の物差しを、検算される側から作らないでください。 最小構成から半自動化へ進む目安は、作業区分の読み分けが20枚でほぼ揃うことです。 揃わないうちにワークフローを組むと、unknown と no_basis が一覧を埋め、確認の時間がかえって増えます。
05工数削減シミュレーション
導入後 80件 × 4.5分 ÷ 60 = 6 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 国内外の出願と権利維持を複数の特許事務所に依頼しており、月に数十枚の請求書が届く製造業・IT企業。事務所ごとに手数料の取り決めがあるのに、請求額が取り決めどおりかを知財部の担当者が記憶と表計算で確かめている場合。案件台帳(整理番号、自社の管理番号、作業の履歴)を表形式で持っている場合。
- 依頼先が1事務所で、請求が月に数枚の場合。事務所との料金の取り決めが文書になっておらず、照らす先の料金表を作れない場合。庁に納める費用の金額そのものが正しいかを確かめたい場合は、この構成の対象外です。
07最小構成で試す方法
- 先月までの請求書から20枚を選ぶ(差異があったと分かっているものを数枚入れる)
- 事務所ごとの料金表から、作業区分の一覧をテキストにする
- 手元のAIサービスに請求書のPDFと作業区分の一覧を渡し、「明細の1行ずつについて、整理番号、作業区分(一覧から1つ)、費用の種別、金額を表にしてください。庁の費用の金額が正しいかは書かないでください」と指示する
- 出てきた表を表計算に貼り、料金表と台帳を検索関数で引いて差額を出す
- 当時の確認の結果と突き合わせる
| 出てきた内容 | 判断 |
|---|---|
| 当時見つけた差異が表のうえでも出た | ワークフローの連携に進む |
| 作業区分の読み分けが揃わない | 料金表の区分の名前が事務所の言葉とずれている。区分の説明を足す |
| 庁の費用に意見を書いてくる | 指示の書き方で直る。構成は有効 |
2行目が出たら、それは料金表の整備の課題です。 AIの精度を上げるより、区分の説明に事務所の言い回しの例を足すほうが効きます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 作業区分が事務所の言葉のまま返る | 料金表のコードを enum にして選ばせる。当てはまらなければ unknown |
| 庁の費用に「金額が違う」と書く | 金額の正誤を言わせない指示を置き、official_fee は判定から外す |
| 改定前の料金表で判定する | 適用開始日の列を持たせ、請求日以前で最も新しい版を引く |
| 1行に手数料と実費が混ざる | AIに行を分けさせ、分けられなければ人へ |
| 明細の読み落としに気づかない | Items の合計と SubTotal を照合する |
| 換算日の違いが見えない | レートと換算日を写させ、取り決めの日と比べる |
| 整理番号の表記ゆれで台帳を引けない | 全角・半角とハイフンをそろえてから引く |
| 請求書単位の一覧で判定が消える | Aggregator の集約する項目に、行の判定と差額を含める |
| 二重請求の検知が誤検出だらけになる | 案件・作業区分・請求日の組で照合し、分納は人が判断する |
| スキーマの設定で拒否される | 全オブジェクトに additionalProperties: false。数値の制約は Make 側へ |
| 請求書側から台帳を書き足してしまう | 台帳は読み取りだけにする。更新は別の経路で |
上の2行が、この題材の失敗のほとんどです。 どちらも、AIに「選ぶ」以上のことをさせたときに起きます。区分は選ばせ、金額は比べさせないという線を守れば、残りは表の整備の問題です。
3行目と下から3行目は、運用を始めて数か月たってから効いてきます。 料金表の改定は年に一度あるかないかで、最初の月には起きません。二重請求の誤検出も、分納や再手続が出てくる時期まで見えません。適用開始日の列と照合の組は、最初から作っておきます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 出願前の発明を含む案件の整理番号と作業の内容、外国出願の国、事務所との料金の取り決め、振込先の口座情報です。
- 明細の文字列に発明の中身が載ることがある … 「〇〇装置に関する出願」のように、明細に発明の名称が書かれている事務所があります。出願前の発明の名称は営業秘密です。 AIに渡すのは明細の行だけにし、外部サービスのデータの扱い(学習に使われないか、保存期間)を契約前に確かめます
- 料金の取り決めを外に出さない … 料金表そのものはAIに渡しません。渡すのは作業区分コードの一覧だけで、金額の比較はワークフローの中で行います
- 口座情報はこの構成で使わない … 検算に振込先は要りません。振込先の確認は経理部の支払の手続きで行います
- 問い合わせと支払の判断は人が行う …
diffやno_basisは「確かめる必要がある」という印で、請求が誤っているという結論ではありません。 差し戻しや減額の連絡を自動で送らないでください - 庁費用の正誤は別に確かめる … この構成は庁に納める費用の金額を確かめません。必要な場合は、庁の公表する料金を知財部が別に確認します
誤りが起きた場合のリスクは、過払いを見逃すことと、正しい請求を疑って事務所との関係を損ねることの2つです。 前者は台帳の確認の省略で、後者は no_basis をそのまま差し戻すことで起きます。
10まず何から始めるか
1週目:料金表に2つの列を足す
事務所ごとの料金表に、作業区分コードと適用開始日の列を足します。まず請求の多い2所から始めます。作業区分は10前後に絞り、当てはまらないものは OTHER にまとめます。
2週目:20枚で試す
過去の請求書20枚を手元のAIサービスに渡し、明細の振り分けをさせます。作業区分の読み分けが揃うかと、庁の費用に意見を書かないかを最優先で見ます。
3週目:Make で振り分けまでをつなぐ
受領フォルダを見張り、OCRを呼び、Iterator で明細を分けて Claude API で振り分け、一覧に書き出すところまで作ります。この時点では判定を出さず、振り分けの結果だけを見ます。
4週目:台帳と料金表の照合を足す
台帳の読み替え、有効な版の料金表、差額の計算、データストアでの二重請求の検知を足し、判定を出します。diff と no_basis の件数を毎週数えます。
2か月目以降: 残りの4所の料金表をそろえ、1枚15分が何分になったかを実測します。no_basis の多くが台帳の更新漏れだと分かったら、台帳の更新の手順を見直した時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
請求書モデルがOCRで主要なフィールドと品目を抽出し、構造化JSONを返すこと。27言語をサポート。入力はPDFと画像。PDFとTIFFは最大2,000ページ(Freeは最初の2ページ)、S0で500MB。パスワード付きPDFは解除が必要。JSONが readResults/pageResults(信頼度)/documentResults に分かれること | Microsoft Learn: 請求書モデル | 2026-09-28 |
InvoiceId・VendorName・InvoiceDate・SubTotal・TotalTax・InvoiceTotal と、Items の Amount・Description・Quantity・UnitPrice・Date・ProductCode・Tax・TaxRate | GitHub: invoice モデルスキーマ(2024-11-30 GA) | 2026-09-28 |
| Iterator が配列を一連のバンドルに変換し、各アイテムを個別のバンドルとして出力すること | Make Help Center: Iterator | 2026-09-28 |
| Aggregator が Source module から始まるバンドルを1つにまとめること。Group by で値ごとに分けられること。間のモジュールのデータは集約の設定に含めない限り後段で参照できないこと | Make Help Center: Aggregator | 2026-09-28 |
| データストアがシナリオをまたいでデータを保存する組み込みの仕組みで、Search records/Get a record/Add/replace a record のモジュールがあること | Make Help Center: Data stores | 2026-09-28 |
output_config.format でJSONスキーマに沿った出力に制約できること(GA)。全オブジェクトに additionalProperties: false が必要。enum は単純な値のみで大文字・小文字の一致が必要。minimum・maximum などは非対応。max_tokens で途中終了した応答は保証の外 | Claude Docs: Structured outputs | 2026-09-28 |
庁に納める費用の金額は、本記事では扱っていません。 実費の正誤を確かめる場合は、庁の公表する料金を別に確認してください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0264)についてのご相談はこちらから。
