派遣・請負のスタッフから毎月届く手書きの交通費精算書と領収書の写真を読み取り、届け出た経路と運賃に照らして精算データを作り、食い違いを拾う
スタッフが手書きした交通費精算書と、バス・駐車場などの領収書の写真を読み取り、1行ずつ日付・区間・金額の精算データにそろえます。届け出た経路と運賃、勤怠の出勤日に照らし、食い違いのある行だけを経理の担当者に回します。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Make/Power Automate/Python/Zapier
- 対象業界
- IT・SaaS/人材/物流
- 対象部門
- 経理
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 人手が足りない/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- スタッフが精算書を紙に書き、写真を撮って提出用のフォルダに上げる。紙で営業所に出す人もいる
- 経理の担当者が写真を開き、1行ずつ日付・区間・金額を表計算に打ち込む
- スタッフ台帳を開き、届けの経路と運賃に合っているかを見る
- 勤怠のシステムを開き、交通費を書いた日に出勤しているかを見る
- 届けの外の行は、領収書の写真を探して金額を見比べ、派遣先の担当の営業に事情を聞く
- 合っている分を給与計算のシステムに取り込む形に直す
- 合わない分は、スタッフに電話かメールで確かめ、直した精算書を出し直してもらう
- 人スタッフが精算書と領収書の写真を、提出用のフォルダに上げる
- 自動ファイルの保存をきっかけにフローが動き、スタッフ番号と対象月をファイル名から取る
- 自動精算書は Azure AI Document Intelligence のレイアウトモデルで、表と手書きの文字を読み取る
- 自動領収書と利用履歴の写しは、レシートモデルで日付・金額・発行元を読み取る
- 自動Azure OpenAI が、読み取った表を1行ずつ日付・区間・往復か片道・金額にそろえる
- 自動プログラムが、届けの経路と運賃、勤怠の出勤日、領収書の金額と照らして、行ごとに印を付ける
- 自動印の無い行は精算データにまとめ、印の付いた行は確認の一覧に載せる
- 人経理の担当者が、確認の一覧の行だけを、精算書の写真と並べて確かめる
- 人事情の分からない行は、派遣先の担当の営業に確かめ、認めるか戻すかを決める
- 自動確定した精算データを、給与計算のシステムの取込の形式で書き出す
各工程の詳しい説明を読む
- スタッフが精算書を紙に書き、写真を撮って提出用のフォルダに上げる。紙で営業所に出す人もいる
- 経理の担当者が写真を開き、1行ずつ日付・区間・金額を表計算に打ち込む
- スタッフ台帳を開き、届けの経路と運賃に合っているかを見る
- 勤怠のシステムを開き、交通費を書いた日に出勤しているかを見る
- 届けの外の行は、領収書の写真を探して金額を見比べ、派遣先の担当の営業に事情を聞く
- 合っている分を給与計算のシステムに取り込む形に直す
- 合わない分は、スタッフに電話かメールで確かめ、直した精算書を出し直してもらう
(a)打ち込みに時間の大半が消える。 2番目の打ち込みは、1枚に20行から40行あります。照合をする前に、写すだけで時間が終わります。 締め日の後の3日間は、照合を簡単にして打ち込みを優先することになります。
(b)届けとの照合が抜ける。 3番目と4番目は、別の画面を開いて見比べる作業です。忙しい月ほど「いつもと同じ金額だから」と省かれ、 派遣先が変わったのに古い経路のまま精算された行が、後から見つかります。
(c)読み違いが混ざる。 手書きの「160」と「180」、「7」と「1」は、写真が小さいと見分けにくい数字です。打ち込んだ人の読み方がそのまま精算額になり、 違っていても誰も気づきません。
(d)出勤していない日の交通費が見つからない。 精算書の日付と勤怠を1日ずつ照らすのは、最も手間のかかる作業です。ここが省かれると、休んだ日の交通費がそのまま払われます。
- 【人】 スタッフが精算書と領収書の写真を、提出用のフォルダに上げる
- 【自動】 ファイルの保存をきっかけにフローが動き、スタッフ番号と対象月をファイル名から取る
- 【自動】 精算書は Azure AI Document Intelligence のレイアウトモデルで、表と手書きの文字を読み取る
- 【自動】 領収書と利用履歴の写しは、レシートモデルで日付・金額・発行元を読み取る
- 【自動】 Azure OpenAI が、読み取った表を1行ずつ日付・区間・往復か片道・金額にそろえる
- 【自動】 プログラムが、届けの経路と運賃、勤怠の出勤日、領収書の金額と照らして、行ごとに印を付ける
- 【自動】 印の無い行は精算データにまとめ、印の付いた行は確認の一覧に載せる
- 【人】 経理の担当者が、確認の一覧の行だけを、精算書の写真と並べて確かめる
- 【人】 事情の分からない行は、派遣先の担当の営業に確かめ、認めるか戻すかを決める
- 【自動】 確定した精算データを、給与計算のシステムの取込の形式で書き出す
8番目が、この設計の分かれ目です。担当者が見るのは600枚の全部ではありません。 印の無い行は精算データのまま通し、印の付いた行だけを写真と並べて見ます。 全行を見直す設計にすると、時間はほとんど減りません。
6番目をAIではなくプログラムで行うのも、意図してのことです。 行のそろえ方はAIにさせますが、届けと合っているか、出勤日か、領収書の金額と同じかは、決まった規則で照らします。 照合の結果を説明できる形で残すためです。
02今回想定するシステム構成
スタッフ(精算書と領収書の写真) │ スマートフォンで撮って提出用のフォルダへ ▼【トリガー】フォルダへのファイルの保存 Power Automate(ファイル名からスタッフ番号と対象月) ▼ Azure AI Document Intelligence ├── レイアウトモデル … 精算書の表と手書きの文字、信頼度 └── レシートモデル … 領収書・利用履歴の写しの日付・金額・発行元 ▼ Azure OpenAI ── 表の行を、日付・区間・往復/片道・金額にそろえる ▼ 照合のプログラム(Azure Functions の Python) │ ① 届けの経路と運賃 ② 勤怠の出勤日 ③ 領収書の金額 ▼ 印の無い行 → 精算データ 印の付いた行 → 確認の一覧 ▼ 【人が確認の一覧だけを確かめる】 ▼ 給与計算のシステムの取込の形式で書き出し
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence(レイアウトモデル・レシートモデル) | Google Document AI(Form Parser)、AWS Textract(英文の書類に限る) |
| 生成AI | Azure OpenAI(Microsoft Foundry)(精算書の行のそろえと確認の連絡の下書き) | Claude API、Gemini API |
| 差異計算 | Python(Azure Functions。届け・勤怠・領収書との照合) | Google Apps Script |
| 連携 | Power Automate(保存の検知と、各処理の呼び出し) | Make、Zapier |
| 保管 | SharePoint のフォルダ(提出・処理済み・確認待ち) | Google ドライブ |
スタッフ台帳、勤怠のシステム、給与計算のシステムは、新しく足すものではありません。 台帳と勤怠からは読むだけで、給与計算には確定した精算データを、いまと同じ取込の形式で渡します。この構成から台帳の届けを書き換えることはしません。
土台になるのは、Azure AI Document Intelligence の2つのモデルです。 読み取りの元になる Read モデルは、手書きの文字の読み取りに対応した言語に日本語(ja)を含んでおり、レイアウトモデルも同じく日本語の手書きに対応しています。 レイアウトモデルは、文字に加えて表、文書の構造、選択マークを取り出します。精算書の「日付・区間・金額」の欄を、表のセルとして受け取れます。
レシートモデル(prebuilt-receipt)は、印字や手書きのレシートから、店名、電話番号、取引の日付、税、合計を取り出し、構造化したJSONで返します。 感熱紙のレシートの対応言語に日本語が含まれています。バスの領収書、駐車場の領収書、券売機で印字した利用履歴の写しを、ここで読みます。
入力できるのは PDF と画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)です。 写真は1枚に1つの書類をはっきり写すのが最もよい結果になるとされ、画像の寸法は50×50から10,000×10,000ピクセルの間、抽出する文字の最小の高さは1024×768の画像で12ピクセルです。スマートフォンの写真で、精算書の全体を遠くから撮ると、手書きの数字がこの下限に近づきます。
03どうやって実装するのか
処理の起点を決める
提出用のフォルダにファイルが保存されたことを起点にします。 提出は締め日の翌日から3日間に集中するため、1日1回の夜間処理にはしません。 届いた順に読み取っておけば、3日間のうちに確認の一覧が少しずつたまり、担当者は締め切りを待たずに確認を始められます。
ファイル名の決まりを、提出の案内で決めておきます。 「スタッフ番号_対象月_種類_連番」の形にし、種類は「精算書」か「領収書」とします。ファイル名が決まりに合わないものは、読み取りに回さず、提出の受付の担当に戻します。 スタッフ番号の取り違えは、他人の精算に金額が載る誤りにつながるためです。
同じスタッフの精算書が二度上がることがあります。後から上がったものを正とし、前のものは処理済みに移して「差し替え」と記録します。 どちらを正とするかを担当者が毎回迷わないよう、規則で決めておきます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 交通費精算書 | 日付・区間(乗車駅と降車駅)・交通機関・往復か片道・金額・備考の手書きの表 | 提出用のフォルダ |
| 領収書・利用履歴の写し | 発行元、日付、金額。バス・駐車場・券売機の印字 | 提出用のフォルダ |
| 届け出た経路 | スタッフごとの区間、経路、片道運賃、届けの有効期間 | スタッフ台帳 |
| 出勤日 | スタッフごと・日ごとの出勤の有無と勤務先 | 勤怠のシステムの書き出し |
| 届けの外の移動の取り決め | 応援・研修・面談で交通費を認める条件と、領収書が要る交通機関 | 経理の取扱いの表 |
質を決めるのは、3行目の届けの有効期間です。 月の途中で派遣先が変わったスタッフは、変わる前と後で届けの経路が違います。有効期間が台帳に無いと、月の後半の行を古い経路で照らし、全部が食い違いとして出ます。 届けを上書きせず、期間付きで残す形に台帳を直すのが最初の準備作業です。
5行目の取り決めは、経理が持っている暗黙の決まりを書き出したものです。 「応援は営業の指示があれば認める」「深夜バスは領収書があれば認める」といった決まりを表にし、照合のプログラムが読めるようにします。
データの取得方法を決める
読み取りは、Power Automate からファイルを Azure AI Document Intelligence に送るだけです。精算書はレイアウトモデル、領収書はレシートモデルと、ファイル名の種類で振り分けます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 表とセル | レイアウトモデルの表 | 日付・区間・金額の欄の値 |
| 手書きの文字と信頼度 | レイアウトモデルの単語と行 | 数字の読み取りに自信があるか |
| キーと値のペア | レイアウトモデルの keyValuePairs のオプション | 氏名・スタッフ番号・対象月の欄 |
| 店名・日付・合計 | レシートモデル | 領収書の金額と日付 |
| 届けと出勤日 | スタッフ台帳と勤怠の書き出し | 照合の相手 |
言語の指定はしません。 公式の説明では、深層学習の汎用モデルが文書の多言語の文字を取り出し、言語を確かめずに指定すると、関係する言語のモデルだけが使われ、不完全で誤った文字が返ることがあるとされています。駅名にアルファベットが混ざる精算書もあるため、自動の判定に任せます。
キーと値のペアは、オプションで有効にします。 v4.0 では、以前の一般文書モデルの役割がレイアウトモデルに加えられ、features=keyValuePairs を指定するとキーと値のペアを取り出せます。精算書の上の欄の氏名やスタッフ番号を、ファイル名の番号と照らすのに使います。
AIへ渡す前に整形する
- ファイル名の確認 … 決まりに合うか、スタッフ番号が台帳にあるかを確かめます
- 形式の確認 … PDF か画像であることを確かめ、それ以外は受付の担当に戻します
- 画像の寸法と向きの確認 … 50×50から10,000×10,000ピクセルの間であること。横向きの写真は向きを直します
- 文字の大きさの確認 … 1024×768の画像で12ピクセルが下限です。精算書の全体を遠くから撮った写真は、数字が小さすぎることがあります
- パスワードの確認 … パスワード付きの PDF は、送る前にロックを外す必要があります
- 1枚に複数の書類が写っていないかの確認 … 精算書と領収書を並べて1枚に撮ったものは、受付の担当に戻して撮り直してもらいます
- 差し替えの確認 … 同じスタッフ・同じ月の精算書が既にあれば、差し替えとして扱います
4番目と6番目を軽く見ないでください。 スマートフォンで撮った精算書は、撮り方で読み取りの精度が大きく変わります。提出の案内に「1枚に1つ」「表の部分が画面いっぱいに入るように」と書くほうが、読み取りの工夫より効きます。
AIに処理させる
させるのは、精算書の表を1行ずつ、決まった項目にそろえることだけです。 届けと合っているかの判定は、照合のプログラムが行います。
| そろえるもの | そろえ方 | 判断できないときの扱い |
|---|---|---|
| 日付 | 対象月の中の日付にする。「同上」「〃」は直前の行の値を写す | 対象月の外なら out_of_month |
| 区間 | 乗車駅と降車駅に分ける。駅名の表記ゆれは届けの駅名の一覧から選ぶ | 一覧に無ければ unknown_station |
| 往復か片道 | 「往復」「片道」「⇔」「→」の書き方から決める | 書かれていなければ unknown |
| 日数のまとめ書き | 「×18日」は18日分の行に広げず、日数として持つ | 日付が書かれていなければ bulk |
| 金額 | 読み取った数字をそのまま入れる | 信頼度が低ければ low_confidence |
右端の列が、人に回す行を決めます。 low_confidence は、手書きの数字の読み取りに自信が無い行です。届けの運賃に合わせて直さず、そのまま人に回します。
| させないこと | 理由 |
|---|---|
| 交通費として認めるかの判断 | 就業規則と取り決めで決まり、経理が判断する |
| 金額の直し | 届けの運賃に寄せると、本当に違う金額が消える |
| 届けに無い経路の運賃の推測 | 運賃は届けか領収書の値だけを使う |
| まとめ書きの日付の割り当て | どの日の分かは勤怠と照らして人が決める |
| 不正の疑いの判断 | 書き間違いが大半で、事情を聞くのは人 |
2行目がいちばん起きやすい失敗です。 読み取った「180」が届けの運賃「160」と違うと、AIは「読み違いだろう」と考えて160に直しがちです。直した瞬間、本当に180円の別の経路を書いた行が、届けどおりに見えます。
指示内容を固定する
あなたは経理部門で、スタッフの交通費精算書を精算データにそろえる立場です。
OCRが返した表の読み取り結果だけを見てそろえてください。推測で埋めないでください。
【1行ごとにそろえる項目】
1. date …… 日付(YYYY-MM-DD)。対象月は {target_month} です
2. from_station / to_station …… 乗車駅と降車駅
3. transport …… 電車/バス/その他
4. trip …… round(往復)/oneway(片道)/unknown
5. days …… 日数。「×18日」のようなまとめ書きは 18。1日1行なら 1
6. amount …… 書かれた金額(数字のまま)
7. note …… 備考欄の文字をそのまま
8. confidence …… 金額の欄について OCR が返した信頼度をそのまま
【厳守事項】
- 金額は読み取った数字をそのまま入れてください。
届けの運賃や他の行の金額に合わせて直さないでください。
- 金額の信頼度が {threshold} 未満の行は flags に low_confidence を入れてください。
- 駅名は【駅名の一覧】から最も近いものを選び、station_raw に書かれた文字をそのまま残してください。
一覧に近いものが無ければ、駅名を作らず flags に unknown_station を入れてください。
- 「同上」「〃」は直前の行の値を写し、flags に copied を入れてください。
- 日付が対象月の外なら flags に out_of_month を入れてください。
- 往復か片道か書かれていなければ trip を unknown にしてください。運賃から決めないでください。
- 交通費として認められるか、届けと合っているかは書かないでください。
- 精算書でない書類と判断した場合は、行を作らず document_type に種類を書いてください。
【OCRの表の読み取り結果】{layout_table}
【駅名の一覧(このスタッフの届けの駅と、取扱いの表にある駅)】{station_list}
「運賃から決めないでください」を書かないと、往復か片道かを金額から逆算します。 届けの片道運賃の2倍の金額なら往復だろう、と考えるためです。往復か片道かが書かれていないという事実が、照合の材料になります。 逆算させると、その材料が消えます。
駅名の一覧を、このスタッフの届けの駅と取扱いの表の駅に絞って渡すのにも意味があります。 全国の駅名を渡すと、手書きの崩れた駅名を似た名前の遠い駅に当てはめます。候補を絞れば、外れたときは unknown_station として出てきます。
出力形式を固定する
精算書1枚ごとに、次の形のJSONで受け取ります。 Azure OpenAI の構造化出力を使い、スキーマに沿った形で返させます。
{
"staff_no": "",
"target_month": "",
"document_type": "commute_expense_form",
"rows": [
{ "row_no": 1, "date": "", "from_station": "", "to_station": "",
"station_raw": "", "transport": "train | bus | other",
"trip": "round | oneway | unknown", "days": 1,
"amount": 0, "note": "", "confidence": 0,
"flags": ["low_confidence | unknown_station | copied | out_of_month | bulk"] }
],
"total_written": null
}
照合のプログラムは、この行に次の印を足します。
| 印 | 付く条件 |
|---|---|
route_ok | 区間と運賃が、その日に有効な届けと合う |
route_mismatch | 区間は届けと同じで、金額が違う |
off_route | 区間が届けに無い。取扱いの表の条件を見る |
no_attendance | その日に勤怠の出勤が無い |
receipt_match / receipt_missing | 領収書が要る交通機関で、同じ日付・金額の領収書があるか |
total_mismatch | 行の合計と、精算書に書かれた合計が違う |
1つ目の理由は、AIのそろえと照合の結果を別の層に置けることです。 flags はAIが付け、照合の印はプログラムが付けます。取扱いの決まりが変わっても、直すのはプログラムの規則だけです。
2つ目は、構造化出力で形が崩れないことです。 構造化出力は、指定した JSON Schema に従うようモデルに求める機能で、有効な JSON を返すだけの JSON モードと違い、スキーマへの厳密な従いを求められます。 すべての項目を必須とし、additionalProperties を false にする必要があるので、total_written のように書かれていないことのある項目は、null を許す形で定義します。
3つ目は、station_raw と confidence で確認が速くなることです。 担当者は写真を開く前に、何が書かれていて、どの程度の自信で読んだかを一覧で見られます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 提出用のフォルダ | Power Automate のトリガー | ファイルの保存を検知する |
| Azure AI Document Intelligence | API呼び出し | 精算書の表と、領収書の値を返す |
| Azure OpenAI | API呼び出し | 行のそろえと、確認の連絡の下書き |
| スタッフ台帳 | 書き出したファイルの読み取り | 届けの経路・運賃・有効期間 |
| 勤怠のシステム | 書き出したファイルの読み取り | 日ごとの出勤の有無 |
| 給与計算のシステム | 既存の取込の形式で書き出し | 確定した精算データ |
給与計算のシステムへは、直接書き込みません。 確定した精算データを取込の形式で書き出し、取り込むのは担当者です。 取り込みを自動にすると、照合の規則の誤りがそのまま支給額になります。
スタッフ台帳も読むだけです。 届けと違う経路が続くスタッフがいても、台帳を書き換えません。届けを出し直してもらうかは、営業とスタッフが話して決めます。
人が確認する
人が見るのは、確認の一覧に載った行だけです。 印が route_ok だけの行は、精算データの合計を流し見て終わりにします。
low_confidenceを先に見る … 写真を開いて数字を読み、正しい金額を入れます。多くは読み違いで、写真を見れば決まりますno_attendanceを見る … 勤怠と精算書の日付を並べます。書き間違いなら直し、事情が分からなければスタッフに確かめますoff_routeとreceipt_missingを見る … 取扱いの表の条件に合うかを見ます。応援や研修の日なら、営業の指示があったかを確かめますroute_mismatchを見る … 届けと金額が違う行です。運賃の改定や経路の変更の可能性があり、続くなら届けの出し直しを営業に頼みます- 直したら理由を書く … どの行を、何から何に直したかを残します
1番目と4番目を混ぜないでください。 low_confidence は読み取りの問題で、route_mismatch は書かれた内容の問題です。読み違いを届けとの違いとして扱うと、スタッフに不要な確認の連絡が飛びます。
スタッフへの確認の連絡は、下書きまでにします。 Azure OpenAI が、確かめたい行と理由を書いた文面を作り、担当者が直してから送ります。 交通費の確認は、スタッフに「疑われている」と受け取られやすい連絡だからです。
例外に対処する
| 起きること | 対応 |
|---|---|
| ファイル名が決まりに合わない | 読み取りに回さず、受付の担当に戻す |
| 写真の文字が小さすぎる | 1024×768の画像で12ピクセルが下限。撮り直しを頼む |
| 精算書と領収書が1枚に写っている | 撮り直しを頼む。分けて撮る案内を出す |
| 表の罫線が無く、表として読めない | 行の文字だけで AI にそろえさせ、全行に low_confidence を付けて人へ |
| 月の途中で派遣先が変わった | 届けの有効期間で照らし分ける。期間が台帳に無ければ全行を人へ |
| まとめ書き(×18日)で日付が無い | bulk として、勤怠の出勤日数と日数を比べる。合わなければ人へ |
| 同じ月の精算書が二度上がる | 後のものを正とし、前のものを差し替えとして記録 |
| 読み取りの API が応答しない | 提出用のフォルダに残す。処理済みへ移すのは成功時だけ |
上から4行目までが大半を占めます。 どれもAIの問題ではなく、提出の仕方の問題です。 提出の案内とファイル名の決まりを整えるほうが、読み取りの精度を上げるより効きます。
記録を残す
- 元の写真と、提出の日時、差し替えの有無
- Document Intelligence が返した JSON の全文(表、単語、信頼度、レシートの値)
- AI がそろえた行と
flags、照合のプログラムが付けた印と、そのとき参照した届けの内容 - 担当者が直した記録 … どの行を、何から何に、なぜ直したか
- スタッフへ確認した日時と、回答の要旨
- スタッフごとの
low_confidenceとroute_mismatchの発生の回数
3つ目で「そのときの届けの内容」を残すのは、届けが後から変わるためです。 経路の届けが出し直されると、過去の照合の意味が変わり、当時の届けが残っていないと、払った額が正しかったかを確かめられません。
最後の行は、提出の案内を直す材料になります。 特定のスタッフだけ low_confidence が続くなら、撮り方か書き方に理由があります。
04実装レベルの3段階
最小構成では、枚数がさばけません。 1枚ずつ画面に貼るので、600枚には使えません。確かめるための段階です。 半自動化で、打ち込みの時間はほぼ無くなります。 ただし、届けと勤怠との照合は、書き出した表を見ながらの手作業で残ります。本格構成で照合も自動になり、この段階が本記事の想定です。 差が大きいのは、照合が1行ずつ別の画面を開いて見比べる作業だからです。 段階を飛ばさないでください。 半自動化の表を1か月見ると、読み取りにくい撮り方と、届けの有効期間が抜けているスタッフが先に分かります。
05工数削減シミュレーション
導入後 600件 × 1分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 派遣・請負のスタッフを数百名抱え、交通費の精算を紙またはスマートフォンで撮った精算書で受けている人材派遣・業務請負の会社。スタッフごとに届け出た通勤経路と運賃の一覧(経路の届け)を持っているのに、照合が目視になっている場合。派遣先の変更や応援で、届けと違う経路の移動が毎月混ざる場合。勤怠のシステムから出勤日の一覧を書き出せる場合。
- スタッフが数十名で、精算書が月に数十枚にとどまる場合。交通費を定額の手当として払っており、実費の精算をしていない場合。交通系ICカードの利用履歴をシステムで直接取り込めており、紙の精算書が無い場合。なお、交通費として払うかどうかの判断、経路の合理性の判断、不正の認定は、この構成では代替できません。
07最小構成で試す方法
- 先月の精算書から30枚を選ぶ(派遣先が変わった人、届けの外の移動がある人、字が崩れている人を必ず入れる)
- 30枚それぞれについて、当時の打ち込みの結果と、確認で見つかった食い違いを用意する
- Document Intelligence Studio で、精算書をレイアウトモデル、領収書をレシートモデルで読ませる
- 読み取った表を手元の生成AIの画面に貼り、「日付・区間・往復か片道・日数・金額にそろえてください。金額は直さないでください。読めない数字はそう書いてください」と指示する
- そろえた行を、当時の打ち込みの結果と1行ずつ突き合わせる
30枚は必ずやってください。 フローを組む前に、「手書きの精算書が表として読めるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 当時の打ち込みとほぼ同じ行が出た | 照合のプログラムとフローの連携に進む |
| 金額を届けの運賃に寄せて直した | 指示の書き方で直る。構成は有効 |
| 表として読めず、行がばらばらになる | 精算書の様式と撮り方が先。 罫線のある様式にする |
3行目が出ることは珍しくありません。 失敗ではなく、打ち込みに時間がかかっていた理由が1つ分かったということです。 罫線のはっきりした様式に変え、表の部分が画面いっぱいに入る撮り方を案内したうえで、同じ30名に翌月分を出してもらい、もう一度比べてください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 読み取った金額を届けの運賃に直してしまう | 金額は直さないと指示し、confidence が低い行は人へ回す |
| 月の後半の行が全部食い違いになる | 届けを上書きせず、有効期間付きで残す |
| 手書きの数字が読めない | 1024×768の画像で12ピクセルが下限。表が画面いっぱいに入る撮り方を案内する |
| 駅名が遠くの似た駅に当てはめられる | 駅名の一覧を、そのスタッフの届けと取扱いの表の駅に絞る |
| 往復か片道かを金額から決めてしまう | 書かれていなければ unknown とし、運賃から決めないと指示する |
| まとめ書きの日数と出勤日数が合わない | どの日の分かは人が決める。AI に日付を割り当てさせない |
| 言語を指定したら読み取りが悪くなった | 言語は指定しない。自動の判定に任せる |
| 精算書と領収書が1枚に写っている | 撮り直しを頼む。1枚に1つの書類を案内する |
| 確認の連絡が自動で飛ぶ | 下書きまでにする。 送るのは担当者 |
| 照合の印が多すぎて一覧が長い | 取扱いの表が足りていない。よく出る off_route の事情を表に足す |
上の2行が、この構成の失敗のほとんどです。 どちらも「届けと違う」という同じ見た目から出発しています。読み取りの違いと書かれた内容の違いを分けてあるかどうかで、運用に乗るかが決まります。
一覧が長すぎるときは、AIではなく取扱いの表を直します。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: スタッフの氏名とスタッフ番号、通勤の区間(自宅の最寄り駅)、出勤日、派遣先の名前、交通費の金額です。自宅の最寄り駅は、住所に近い個人の情報です。
- AI に渡す範囲を、そろえに必要な表までに限る … 氏名やスタッフ番号はファイル名と台帳の側で扱い、Azure OpenAI に渡すのは精算書の表の部分と、駅名の一覧だけにできます
- 届けを AI に丸ごと渡さない … 全スタッフの届けの一覧は、600名分の自宅の最寄り駅の一覧です。照合はプログラムの側で行い、AI に渡すのは対象のスタッフの駅名だけにします
- 確認の連絡を自動で送らない … 出すのは下書きまでです。交通費の確認は、スタッフとの関係に直接ひびきます
- 不正の認定をさせない … 照合の印は「届けや勤怠と違う」という事実だけです。事情を聞いて判断するのは経理と営業で、多くは書き間違いです
- 写真の保存期間を決める … 精算書の写真には、手書きの氏名や派遣先の名前が写っています。精算の根拠として残す期間と、消す時期を先に決めておきます
- 派遣先の情報を外に出さない … 精算書の備考には、派遣先の拠点名や応援の事情が書かれていることがあります。確認の一覧は経理と担当の営業だけが見られる場所に置きます
誤りが起きた場合のリスクは、払うべきでない交通費を払うことと、正しく書いたスタッフに確認の連絡を出すことの2つです。 前者は照合の抜けで起き、後者は読み違いを内容の違いとして扱うと起きます。どちらも、読み取りの自信と照合の結果を別の印にしておくことで、設計の側で守れます。
10まず何から始めるか
1週目:スタッフ台帳の届けに有効期間を足す
スタッフ台帳の届けの経路と運賃に、有効期間の開始日と終了日の列を足します。 届けを上書きしていた分は、直近の派遣先の変更から付け直します。稼働中の600名すべてを一度に直す必要はありません。今月に派遣先が変わった人から始めます。
2週目:30枚で試す
先月の精算書から30枚を選び、Studio で読み取らせ、生成AIの画面で行をそろえさせます。当時の打ち込みの結果と突き合わせ、金額を届けに寄せて直していないかを最優先で見ます。
3週目:取扱いの表を作り、提出の案内を直す
応援・研修・面談・深夜の移動で、どの条件なら交通費を認め、どの交通機関で領収書が要るかを表にします。 あわせて、ファイル名の決まりと「1枚に1つ」「表が画面いっぱい」の撮り方を、スタッフへの提出の案内に書きます。
4週目:フォルダから行のそろえまでをつなぐ
Power Automate で提出用のフォルダを見張り、読み取りと行のそろえを動かして、表に書き出すところまで作ります。この時点では照合の印を出さず、そろえた行の一覧だけを見ます。
2か月目: 照合のプログラムを足し、届け・勤怠・領収書との印を付けて確認の一覧を出します。印の付いた行の数を毎週数えます。3か月目以降: 確認の連絡の下書きと、給与計算の取込の形式での書き出しを足し、1枚4分が何分になったかを実測します。スタッフごとの low_confidence の回数を見て、提出の案内を直し終えた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
レシートモデル(prebuilt-receipt)が、印字や手書きのレシートから店名・電話番号・取引の日付・税・合計を取り出し、構造化した JSON で返すこと。入力が PDF と画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)であること。写真は1枚に1つの書類が最もよいこと。PDF と TIFF は最大2,000ページ(Free は最初の2ページ)、ファイルの大きさは S0 で500MB・F0 で4MB、画像は50×50から10,000×10,000ピクセル、文字の最小の高さは1024×768の画像で12ピクセル(150dpi で約8ポイント)であること。パスワード付きの PDF はロックを外す必要があること | Microsoft Learn: Receipt data extraction | 2026-10-13 |
Read モデルとレイアウトモデルの手書きの文字の対応言語に日本語(ja)が含まれること。レイアウトモデルが文字・表・文書の構造・選択マークを取り出すこと。言語の指定は任意で、確かでないのに指定すると不完全で誤った文字が返ることがあること。v4.0 でキーと値のペアをレイアウトモデルの features=keyValuePairs で取り出すこと | Microsoft Learn: Language support for Read and Layout | 2026-10-13 |
レシートモデルの感熱紙のレシートの対応言語に日本語(ja)が含まれること | Microsoft Learn: Language support for prebuilt models | 2026-10-13 |
構造化出力が、指定した JSON Schema に従うようモデルに求める機能で、有効な JSON を返すだけの JSON モードと違うこと。すべての項目を必須とし、null との組み合わせで省略を表すこと。additionalProperties を false にする必要があること | Microsoft Learn: How to use structured outputs with Azure OpenAI | 2026-10-13 |
どの移動を交通費として認めるかは、就業規則と派遣先との取り決めに従って、経理と営業で決めてください。 本記事は上記の公開資料で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1367)についてのご相談はこちらから。
