Media > AI活用ユースケース > 総務 > 社有車の運転日報と給油伝票を読み取って、車両別の費用と点検期限の台帳にする

社有車の運転日報と給油伝票を読み取って、車両別の費用と点検期限の台帳にする

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

社有車の運転日報と給油伝票を読み取って、車両別の走行距離・燃料費・燃費と、車検や点検の期限を持つ台帳に落とします。読み取った値は機械で検算し、確からしさの低い項目だけを人が直します。

サマリー
利用ツール
AWS Textract/Azure AI/ChatGPT/Claude/Gemini/Google Apps Script/Google Document AI/Make/n8n/Power Automate/Python
対象業界
不動産/医療/士業/建設/製造
対象部門
総務
対象業務
データ入力・転記/台帳・マスタ管理
主な課題
入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
AIで行う処理
読み取り(OCR)
主な効果
入力漏れ削減/品質標準化/工数削減
導入難易度
★★☆☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
条件付き
現在工数
30h/月
AI導入後
10h/月
想定削減
67%
年間削減
240h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 月末に各拠点から届いた束を車両番号ごとに仕分け、日付順に並べ、通し番号を振る
  2. 日報を1枚ずつ読み、台帳の該当シートに日付・運転者・行き先・時刻を入力する
  3. 走行距離計の出発時と帰着時の値を入力し、差を走行距離として入れる
  4. ホチキスで留まっている給油伝票を見て、給油量と金額を入力する
  5. 伝票はあるのに日報の給油欄が空、逆に日報に給油の印はあるのに伝票が無い組み合わせを探す
  6. 日報の「異常」欄の記載を別の一覧に書き写し、整備工場へ依頼するものを選んでメールを書く
  7. 入力した数値をざっと見直す(前の行より距離が減っていないか、桁がおかしくないか)
  8. 車両別の走行距離・燃料費・燃費を集計する
  9. 台帳の期限列を目で確認し、翌月から翌々月に車検や点検が来る車両を拾う
導入後(After)
  1. 拠点で日報と給油伝票をスキャンし、共有フォルダに置く(週1回)
  2. 自動フォルダの監視でファイルの追加を検知し、処理を始める
  3. 自動帳票の種類を分ける(運転日報か、給油伝票か)
  4. 自動帳票ごとのモデルで項目を読み取る。項目ごとに信頼度が返る
  5. 自動車両番号と運転者名をマスタに照合する
  6. 自動距離計の値を、その車両の前回の帰着時の値と比べて検算する
  7. 自動1日の走行距離、燃費、時刻の前後関係を、決めた範囲で検算する
  8. 自動給油伝票と日報の給油記録を、日付と車両番号で突き合わせる
  9. 自動すべて通った行は台帳に登録し、落ちた行と信頼度の低い項目は確認待ちにする
  10. 総務が確認待ちの一覧を開き、元の画像を見ながら直す
  11. 自動「異常」の記述を拾い、部位と緊急度に整理して整備依頼の下書きを作る
  12. 総務が下書きを読み、整備工場へ出すものを選んで送る
  13. 自動車両別の集計と、台帳の値からの車検・点検・保険・リースの期限の計算
  14. 期限が近い車両の一覧から予約を取る
各工程の詳しい説明を読む
  1. 月末に各拠点から届いた束を車両番号ごとに仕分け、日付順に並べ、通し番号を振る
  2. 日報を1枚ずつ読み、台帳の該当シートに日付・運転者・行き先・時刻を入力する
  3. 走行距離計の出発時と帰着時の値を入力し、差を走行距離として入れる
  4. ホチキスで留まっている給油伝票を見て、給油量と金額を入力する
  5. 伝票はあるのに日報の給油欄が空、逆に日報に給油の印はあるのに伝票が無い組み合わせを探す
  6. 日報の「異常」欄の記載を別の一覧に書き写し、整備工場へ依頼するものを選んでメールを書く
  7. 入力した数値をざっと見直す(前の行より距離が減っていないか、桁がおかしくないか)
  8. 車両別の走行距離・燃料費・燃費を集計する
  9. 台帳の期限列を目で確認し、翌月から翌々月に車検や点検が来る車両を拾う

問題は4つあります。

(a)入力が月末に一気に来る。 1枚3分で月30.0時間、3名で分けても1人あたり10時間が月末に寄り、集計の完了が翌月中旬になる月があります。

(b)手書きの読み間違いに気づけない。 距離計の値は5桁か6桁で、走り書きの「0」と「8」、「1」と「7」、「4」と「9」は取り違えやすい。1桁違うと走行距離が数千キロ変わり、燃費の集計が壊れます。 本人が見直しても、元の字が読みにくいのだから同じように読みます。

(c)給油伝票と日報がずれる。 伝票が日報に留まっていない、別の日に留まっている、伝票だけ後から出てくる。燃料費は上がったのに走行距離は増えていない月が出ますが、原因が突き合わせのずれか本当の変化かは分かりません。

(d)異常の記載が止まる。 書き写す工程が最後にあるため、月末が混むと後回しになります。気づいた人がいたのに、気づかなかったことになります。

  1. 【人】 拠点で日報と給油伝票をスキャンし、共有フォルダに置く(週1回)
  2. 【自動】 フォルダの監視でファイルの追加を検知し、処理を始める
  3. 【自動】 帳票の種類を分ける(運転日報か、給油伝票か)
  4. 【自動】 帳票ごとのモデルで項目を読み取る。項目ごとに信頼度が返る
  5. 【自動】 車両番号と運転者名をマスタに照合する
  6. 【自動】 距離計の値を、その車両の前回の帰着時の値と比べて検算する
  7. 【自動】 1日の走行距離、燃費、時刻の前後関係を、決めた範囲で検算する
  8. 【自動】 給油伝票と日報の給油記録を、日付と車両番号で突き合わせる
  9. 【自動】 すべて通った行は台帳に登録し、落ちた行と信頼度の低い項目は確認待ちにする
  10. 【人】 総務が確認待ちの一覧を開き、元の画像を見ながら直す
  11. 【自動】 「異常」の記述を拾い、部位と緊急度に整理して整備依頼の下書きを作る
  12. 【人】 総務が下書きを読み、整備工場へ出すものを選んで送る
  13. 【自動】 車両別の集計と、台帳の値からの車検・点検・保険・リースの期限の計算
  14. 【人】 期限が近い車両の一覧から予約を取る

自動化されるのは「読む」「照らし合わせる」「検算する」「集計する」「期限を計算する」で、残るのは「直す」「選ぶ」「予約する」です。9番目が設計の要で、検算を通らなかった行と信頼度が低い項目だけを人に回します。 人の目に触れるのは1割から2割です。11番目は(d)を、週1回のスキャンは(a)を解きます。

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

構成図
運転日報(手書き)/ 給油伝票(スタンド発行)
   ▼【人】拠点でスキャンして共有フォルダへ(週1回)
   ▼【トリガー】フォルダへのファイル追加を検知
帳票の種類を分ける
   ├─▶ 運転日報 ─▶ OCR(カスタム抽出モデル)─┐
   └─▶ 給油伝票 ─▶ OCR(請求書モデル)────┤ 項目・値・信頼度
   ▼◀───────────────────────────────────────┘
マスタ照合 ─▶ 検算(距離計の連続性/1日の走行距離の上限/
                  燃費の範囲/時刻の前後/伝票と日報の一致)
   ├─▶ 全部通った ───────▶ 車両別台帳へ登録
   │                              ▲
   └─▶ 落ちた/信頼度が低い       │
        ▼                         │
   確認待ちの一覧 ─▶【総務が画像を見て直す】
   ▼
   ├─▶ 車両別の集計(走行距離・燃料費・燃費)
   ├─▶ 期限の計算(前回実施日 + 区分ごとの間隔)─▶ 期限が近い車両の一覧
   └─▶「異常」の記述 ─▶ 整備依頼の下書き ─▶【総務が読んで整備工場へ出す】
役割想定する製品代替候補
OCRAzure AI Document IntelligenceGoogle Document AI、AWS Textract
集計PythonGoogle Apps Script
生成AIClaude APIOpenAI API、Gemini API
連携Power AutomateMake、n8n

車両台帳と共有フォルダはすでに使っているもので、足すのはOCR、集計、生成AI、連携の4つです。

この構成の土台は、Azure AI Document Intelligence が項目ごとに信頼度を返すことです。 レイアウトモデルでは単語ごとに contentconfidence が出力され、行が手書きかどうかの分類も信頼度スコアとともに stylesisHandwritten として返ります。確からしさが機械で読める形で返るので、人に回す項目を機械で選べます。

運転日報は自社の様式なので、カスタム抽出モデルを作ります。同じフォームまたはドキュメントの種類の例が5つあれば作り始められます。 種類はテンプレートとニューラルの2つで、テンプレートは一貫した見た目に依存し、トレーニング時間は1分から5分、ニューラルは構造化・半構造化・非構造化のいずれからも項目を取れて既定のトレーニング時間は30分です。公式の案内では、まずニューラルを試すことが勧められています。 給油伝票は既製の様式なので、現在27言語の請求書をサポートする請求書モデルをまず試します。対象の帳票には請求書・光熱費・販売注文・発注書が挙げられており、キーと値のペアの返却は既定では無効です。

入力の条件は共通です。PDFとTIFFは最大2,000ページ、ファイルサイズは有料(S0)レベルで500MB、無料(F0)レベルで4MB、画像の寸法は50ピクセル四方から10,000ピクセル四方の間である必要があります。抽出するテキストの最小の高さは、1024ピクセル × 768ピクセルの画像で12ピクセルで、これが拠点のスキャナの解像度を決める根拠になります。

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

Step1

処理の起点を決める

共有フォルダへのファイル追加を起点にします。 スキャンしたPDFが置かれた時点で処理が始まり、週1回の運用を想定します。

月末の一括処理にしない理由は2つあります。1つ目は(a)の集中をなくすためで、週ごとなら確認待ちは1回20枚から30枚です。2つ目は、距離計の検算が「前回の値」を必要とするためです。 同じ車両の日報を日付順に処理するので、取り込み時に車両番号と日付で並べ替えてから検算に回してください。取り込み・登録・確認待ちの枚数を毎回記録し、合計が合わない回を検知します。

Step2

入力データを集める

データ中身取得元
運転日報日付、車両番号、運転者、出発と帰着の時刻、距離計の出発時と帰着時の値、行き先、給油の有無、異常の記載拠点でスキャンしたPDF
給油伝票発行日、スタンド名、車両番号または登録番号、油種、給油量、単価、金額同上
車両・社員マスタ車両番号、登録番号、車種、燃料の種類、想定燃費の範囲、用途区分、所属拠点/氏名、社員番号車両台帳と人事名簿
前月の実績と期限車両ごとの最終の距離計の値と最終運行日、用途区分ごとの点検間隔(月数)、車検・保険・リースの満了日車両台帳と契約書

この構成の質を決めるのは、車両マスタの整備です。 車両番号だけでは足りず、燃料の種類と想定燃費の範囲を車種ごとに持つことが前提で、無いと燃費の検算ができません。期限の設定表も、運行管理や整備の担当者が先に記入します。 AIに埋めさせると、法令の解釈を機械に肩代わりさせます。

Step3

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

日報と伝票: 拠点のスキャナで、1運行につき1枚のPDFとして出力します。ホチキスで留まった伝票は、別ページとして同じPDFに入れてかまいません。ファイル名に拠点コードとスキャン日を入れ、元のファイルは処理後も残します。 確認待ちの一覧から画像を開くためです。

マスタ類: 表計算ソフトの別シートから読みます。車両の入れ替えは年に何度も起きるので、スクリプトに車両の一覧を書かないでください。

前月までの実績: 台帳から、車両ごとの最終の距離計の値と最終運行日を取ります。これが検算の基準になるので、1枚処理するごとに更新してください。 なお車検の満了日は車検証の日付を人が入力します。日報に車検の情報は無いので、OCRからは取りません。

Step4

AIへ渡す前に整形する

  1. 帳票の種類の判別 … 1つのPDFに日報と伝票が混ざるので、ページごとに分けます。段落のロール(titlesectionHeading など)と様式の固定文言の有無で判別できます。 判別できないページは確認待ちに回します
  2. 向きとサイズの確認pages の回転角で補正します。 寸法とファイルサイズが条件を外れたファイルはOCRに投げず、拠点にやり直しを依頼します
  3. 車両番号と運転者名の照合1文字違いの候補が複数あるときは確定させずに確認待ちにします。台帳に書き込むのは社員番号で、氏名を台帳の行に持たなければ外部に渡る範囲を絞れます
  4. 前回の基準値の取得 … その車両の最終の距離計の値を台帳から取ります。値が無い車両(新車、初回)は検算をせず、全項目を確認待ちにします
Step5

AIに処理させる

この構成には性質の違う2つのAI処理が入ります。混ぜないでください。1つ目はOCRで、画像から項目と値と信頼度を取ります。読むことだけをさせ、値の正しさは判断させません。2つ目は生成AIで、「異常」欄の自由記述を部位・症状・緊急度に整理し、整備依頼の下書きと申し送り文を作ります。検算はどちらにもさせず、集計側で行います。

判定誰がやるか理由
距離計が前回より減っていないか集計処理比較するだけ。AIに渡すと、たまに違う答えを返す
1日の走行距離の上限と燃費の範囲集計処理引き算・割り算と範囲の判定。境界値と車種ごとの範囲を設定表で固定したい
給油伝票と日報の突き合わせ集計処理日付と車両番号の一致。曖昧さが無い
点検・車検の期限集計処理前回実施日に区分ごとの間隔を足すだけ。法令の解釈はさせない
異常の記述の整理と下書き生成AI自由記述を決まった区分に寄せ、人が読む文を組み立てる

表の4行目が「AIに法定の期限を判断させない」です。 点検の間隔は車両の用途と使われ方で決まります。AIに聞けばもっともらしい月数が返りますが、自社の車両に当てはまるかは別です。 設定表に無い区分が出たら、計算せずに止めて人に聞いてください。なお緊急度の区分(即時/今週中/次回点検時/記録のみ)は整備の可否判断ではなく、人が読む順番を決める印です。

Step6

指示内容を固定する

あなたは社有車の運転日報を読む車両管理担当者を支援する立場です。
日報の「異常」欄に書かれた記述と、その車両の情報を渡します。
記述を整理し、整備工場へ出す依頼文の下書きを作ってください。
この下書きは担当者が読んで、出すかどうかを判断したうえで送信します。

【厳守事項】
- 記述に書かれていない症状、部位、原因を足さないでください。
  「エンジン音が大きい」から「エンジンオイルの不足の可能性」を導かないでください。
  原因の推定は、整備工場が現物を見て行うことです。
- quoted_text には日報の記述をそのまま引いてください。
  言い換え、要約、誤字の修正をせず、読めない文字は □ で残してください。
- 渡した数値以外の数を書かないでください。
  走行距離、車両番号、日付は、渡した値をそのまま使ってください。
- urgency は、記述に書かれた内容だけから決めてください。
  走行に直接かかわる記述(走行中に異音、ブレーキの効きが悪い)は即時、
  断定されていない記述(気がする、たまに)は今週中、
  走行にかかわらない記述(外装の傷、内装の汚れ)は次回点検時、
  「特になし」と同等の記述は記録のみ としてください。
  迷う場合は、緊急度を下げずに needs_human_attention を true にしてください。
- 整備の要否、部品の交換の要否、費用の見込み、車検や点検の時期を書かないでください。
  依頼文は「この記述があったので見てほしい」までにとどめてください。
- 運転者名を依頼文に書かないでください。渡していませんし、伝える必要もありません。

【車両情報】{vehicle}
【運行情報(日付・走行距離)】{trip}
【異常欄の記述(OCRの結果)】{defect_text}
【記述の読み取りの信頼度】{defect_confidence}

「原因を導かない」がいちばん効く制約です。 原因の推定が入ると、整備工場がそこから見始めます。ドライバーが書いたのは症状であって診断ではありません。 「読めない文字を □ で残す」も必要で、欠けた部分を生成AIが補うと、書かれていない症状が依頼文に載ります。

Step7

出力形式を固定する

生成AIの出力は構造化出力で固定します。Claude API では output_configformattype: "json_schema" とスキーマを指定します。

{ "type": "object", "additionalProperties": false,
  "required": ["report_id","vehicle_no","trip_date","defect_items",
               "request_draft","needs_human_attention"],
  "properties": {
    "report_id":   { "type": "string" },
    "vehicle_no":  { "type": "string" },
    "trip_date":   { "type": "string", "format": "date" },
    "defect_items": { "type": "array", "minItems": 0,
      "items": { "type": "object", "additionalProperties": false,
        "required": ["part","symptom","quoted_text","urgency"],
        "properties": {
          "part":    { "type": "string",
            "enum": ["タイヤ","ブレーキ","エンジン","電装","車体","内装","その他"] },
          "symptom": { "type": "string" },
          "quoted_text": { "type": "string" },
          "urgency": { "type": "string", "enum": ["即時","今週中","次回点検時","記録のみ"] } } } },
    "request_draft": { "type": "string" },
    "needs_human_attention": { "type": "object", "additionalProperties": false,
      "required": ["flag","reason"],
      "properties": { "flag": {"type":"boolean"}, "reason": {"type":"string"} } } } }

返るJSONがスキーマに一致するため、スキーマ違反による再実行が要りません。 また enum で語彙を固定できるので、「右前タイヤ」「フロントタイヤ」「前輪」が混ざらず、部位ごとの件数が数えられます。

ただし、スキーマで書けないことがあります。 数値の制約(minimummaximummultipleOf)と文字列の長さの制約はサポートされていません。配列の minItems は0か1だけ、再帰的なスキーマと外部の $ref も使えません。この制限は、この構成にはむしろ好都合です。 「距離計の値は前回以上であること」をスキーマに書けないということは、検算をスキーマに任せられないということで、集計側で行うという設計がそのまま正解になります。

なお、文法のコンパイルは最初の要求で時間がかかり、24時間キャッシュされます。 構造を変えると無効になるので、スキーマを毎回作り直す組み方をしないでください。

OCRの側は fields(項目名・値・confidence・手書きの判定)と checks(ルール名と pass / fail / skip)を分けて持ち、確認待ちの一覧では2つを並べます。 「信頼度0.98だが検算に落ちた」と「信頼度0.42で検算していない」では、直し方が変わるためです。

Step8

システムへ連携する

つなぎ先方式内容
共有フォルダPower Automate の監視スキャンPDFの検知と取り込み
OCRサービスAPI帳票からの項目と信頼度の取得
集計処理Pythonマスタ照合、検算、突合、期限計算
生成AIサービスAPI異常の記述の整理と依頼文の下書き
車両台帳表計算ソフトへの書き込み登録、確認待ち、期限の一覧
会計ソフト月次CSVの取り込み車両別の燃料費

台帳に書き込むのは、検算を通った行だけです。 確認待ちを先に入れると直し忘れが集計に混ざります。

Step9

人が確認する

人が見るのは、検算に落ちた行と、信頼度が低い項目だけです。 全600枚を見るなら手入力と変わりません。確認待ちに回す条件は次の3つです。

  1. 検算のいずれかが fail になった行
  2. 項目の信頼度が、決めたしきい値を下回った項目
  3. 車両番号または運転者名がマスタと照合できなかった行、帳票の種類を判別できなかったページ

確認は、距離計の検算に落ちた行、給油伝票と合わない行、信頼度が低い項目、needs_human_attention が真のもの、の順です。作業は元の画像を開いて、その項目だけを読み直すことです。レイアウトモデルは項目ごとに境界のポリゴン座標を返すので、その座標で切り出した画像を確認画面に出せます。しきい値は最初の1か月の実測で引き直してください。

Step10

例外に対処する

起きること対応
距離計の帰着時の値が、前回の帰着時より小さい確認待ちにする。推測で補わない。 桁の読み違いか、日報の日付の前後が典型
距離計の値が空欄で書かれていない確認待ちにし、拠点に記入の徹底を依頼する。前後の値から補間しない
1日の走行距離が上限を超えた長距離の出張で実際に超えるので、確認のうえ例外として通せる操作を用意する
燃費が判定の範囲を外れた給油量と走行距離の両方を確認待ちにする。どちらが誤りかは機械には分からない
給油伝票と日報の給油記録が食い違う機械が発行した伝票を正とし、日報の側を確認待ちにする。 伝票が無い側は、拠点に提出を依頼する一覧に載せる
車両番号または運転者名がマスタと照合できない登録せずに止める。似た番号や氏名を自動で当てない
異常欄の記述が読めない読めた部分と □ を残す。「異常なし」として処理しない
期限の設定表に用途区分が無い、または車検の満了日が台帳に無い期限を計算せず「未登録」として一覧に出す。既定値を当てない。空欄を「期限が遠い」として扱わない
スキャンの品質が低くOCRが通らない、応答が返らない再実行し、駄目なら未処理として残して拠点にやり直しを依頼する。未処理の枚数を記録する
同じ日報が二重に取り込まれた拠点コード・車両番号・日付・距離計の値で重複を判定し、後から来たほうを止める

最初の2行がいちばん大事です。 距離計の値が読めなかったとき前後から埋めたくなりますが、埋めた瞬間に「検算を通った正しい値」として台帳に入ります。 給油伝票の行も先に決めておく必要があります。伝票は機械が印字したもの、日報は人が手で書いたもので、どちらを正とするかが決まっていないと月ごとに扱いが変わります。

Step11

記録を残す

  • 取り込んだPDFの原本(確認待ちから開ける)
  • OCRが返した項目・値・信頼度・手書きの判定と、検算の結果(pass / fail / skip
  • 人が直した項目と、直す前の値と直した後の値
  • 生成AIに渡した記述と下書き。実際に送った整備依頼と、送らなかったもの
  • 月ごとの枚数(取り込み、登録、確認待ち、未処理)

4つ目が、この構成を良くしていく記録です。 「帰着時の距離計だけが直されている」なら、直すのは紙です。

04実装レベルの3段階

最小構成:スキャンした日報をAIの画面に貼り、読み取り結果を手で台帳に写す / 項目の読み取り
半自動化:上記+カスタムモデルでの読み取り+検算+突き合わせ+台帳への自動登録 / 読み取り、検算、突き合わせ、登録、確認待ちの振り分け
本格構成:上記+異常の記述からの整備依頼の下書き+期限の自動計算+会計ソフトへの連携 / 上記+整備依頼の起点と期限管理

最小構成だけでは、3分が2.5分程度にしかなりません。 読み取り結果を手で写す工程が残るためで、ここで止めると効果はほとんど出ません。半自動化で3分が1分程度になります。 登録と突き合わせと検算が消え、人が触るのは確認待ちの1割から2割だけだからです。本記事が想定するのもここです。 本格構成では工数はそれ以上下がりませんが、(d)と期限の抜けが解けます。

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

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

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

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

AI活用について相談する

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

向いている
  1. 社有車を20台以上持ち、ドライバーが紙の運転日報を書いていて、給油はスタンドの伝票で精算している企業。日報の様式が全社で1種類か2種類に決まっていて、月に数百枚の手入力が総務に集まっている場合。車検・法定点検・保険・リースの期限を表計算ソフトの台帳で管理していて、期限の抜けを指摘されることがある場合。
向いていない
  1. 車両が数台で、月の伝票が数十枚に収まっている場合。デジタルタコグラフや車載端末が入っていて走行距離と給油が自動で記録されている場合は、読み取りよりそのデータの活用が先です。日報の様式が営業所ごとにばらばらな場合も、まず様式を1つに寄せる作業が先に要ります。

07最小構成で試す方法

  1. 同じ車両の運転日報を、連続した10日分だけ手で選ぶ
  2. そのうち給油のあった日を2日から3日、異常欄に記載のある日報を1枚から2枚含める
  3. 10枚をスキャンして、AIの画面に1枚ずつ貼り付け、次のように指示する
  4. 「この画像から、日付・車両番号・運転者・出発と帰着の時刻・出発時と帰着時の距離計・行き先・給油の有無・異常の記載を読み取って表にしてください。読めない文字は □ で残してください」
  5. 10日分の帰着時の距離計を表計算ソフトに並べ、前の日より減っている日が無いかを目で見る
  6. 減っている日があれば、その日の元の画像を開いて、何が読み違えられたかを見る

5番目と6番目が目的です。 OCRの精度ではなく、「検算で何件見つかるか」を見ます。

試した結果判断
距離計がすべて正しく読め、検算にも引っかからない読み取りの自動化が効く。カスタムモデルの作成に進む
読み違いがあり、検算で見つかったこの構成がいちばん効く状態。 検算のルールを先に固める
読み違いがあるが、検算では見つからない検算のルールが足りない。 燃費、時刻、走行距離の上限を足す
そもそも字が読めない枚数が多いスキャンの設定か、日報の様式が先。AIの問題ではない

この段階でカスタムモデルは作りません。 4行目が出たら、欄を広げた様式を配るのが先です。

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

問題対策
距離計の値が1桁ずれて読まれる前回の値との連続性で検算する。 桁が増減したら確認待ちにし、推測で直さない
距離計が前回より減っているのに検算が通る日付順に処理していない。車両番号と日付で並べ替えてから検算する
燃費の判定範囲が車種に合っていない車両マスタに車種ごとの下限と上限を持つ。全車一律では必ず外れる
給油伝票に車両番号が印字されない給油カードの番号と車両の対応表を先に作る
手書きの数字がかすれる、欄からはみ出す最小の文字の高さから逆算して解像度を決める。 OCR側で吸収せず紙の様式を直す
カスタムモデルの精度が上がらないテンプレートは一貫した見た目に依存する。 様式ごとにモデルを分ける
しきい値が決まらない最初の1か月は低めにし、直した項目の信頼度の分布を見て引き直す
点検の期限がずれる前回実施日と区分ごとの間隔から計算する。AIに間隔を答えさせない。 車検の満了日が空欄の車両は「期限が遠い」と扱わず「未登録」として一覧に出す
構造化出力に数値の範囲を書こうとするminimummaximum は使えない。判定は集計処理で行う
生成AIが原因を推定して書くプロンプトで縛り、quoted_text と原文の一致を機械で突き合わせる

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

この構成で扱うデータ: 運転者の氏名、運行の日時、行き先、走行の記録、車両の情報、燃料費。この3つがそろうと、特定の個人がいつどこにいたかの記録になります。

  1. 運転者名の扱いを、工程ごとに分ける … OCRには日報の画像を渡すので、運転者名がサービス側に渡ることは避けられません。 データの所在地と、入力を学習に使わない契約かを確認してください。一方、生成AIには運転者名を渡しません。 整備依頼に必要なのは車両と症状だけです
  2. 台帳に持つのは社員番号にする … 氏名は照合用の対応表にだけ持ち、台帳の行には社員番号を書きます。 台帳は経費の按分で他部門も見るため、分けておくと共有の範囲を広げられます
  3. 行き先には取引先の情報が入る … 営業車の行き先は顧客名そのもので、送迎車では利用者の氏名や施設名が書かれることもあります。 集計に使わないなら、読み取りの対象から外す選択もあります
  4. 異常の記述を人事評価に転用しない … 「誰の運転のときに異常が書かれたか」は台帳から結び付きますが、この構成の目的は整備であって運転者の評価ではありません。 転用されると分かった時点で、異常欄に何も書かれなくなります
  5. 法定の期限をAIに判断させない … 点検の間隔も車検の満了日も台帳と設定表の値から計算し、AIに「この車の点検は何か月ごとか」を聞かない設計にしてください。 もっともらしい答えが返りますが、自社の車両に当てはまる保証がありません
  6. 検算の上書きを記録する … 検算に落ちても正しい行があるので、例外として通す操作を用意し、誰がいつ通したかを記録してください
  7. 原本と保持期間 … スキャンしたPDFと紙の原本をいつまで残すかを決めます。運行の記録の保存は事業の形態によって異なるため、運行管理の担当と法務への確認が必要です

誤りが起きた場合のリスクは、間違った値が「検算を通った正しい値」として台帳に残ることです。 自動で入った値は、手入力より疑われにくくなります。検算のルールと、直した記録を残す仕組みで受けます。

10まず何から始めるか

1週目:日報の様式と台帳の列を点検する

日報の記入欄が読み取れる大きさか、拠点ごとに様式が違わないかを見ます。同時に、車両マスタに燃料の種類と想定燃費の範囲があるか、期限の設定表に用途区分ごとの間隔があるかも見ます。無い列は埋める計画を立てます。 AIはまだ使いません。

2週目:同じ車両の10日分で試す

連続した10日分の日報をスキャンし、手元のAIの画面で読み取らせます。帰着時の距離計を並べて、前の日より減っている日を探してください。 見つかったら元の画像を開いて何を読み違えたかを見ます。ここで検算のルールの原型ができます。

3週目:検算のルールと期限の設定表を固める

距離計の連続性、1日の走行距離の上限、燃費の範囲、時刻の前後、伝票との突き合わせ。5つのルールを、しきい値を入れた形で文章にします。 用途区分ごとの点検の間隔は運行管理の担当に記入してもらいます。人が決める部分です。

4週目:カスタムモデルを作る

様式ごとに、同じ様式の例を5つ以上用意してラベルを付けます。まずニューラルモデルを試してください。

2か月目: 1つの拠点だけでフローを回し、取り込みから登録までをつないで確認待ちの割合を実測します。 1割から2割に収まらないなら、しきい値か検算のルールを見直します。人が直した項目と、直す前後の値を必ず記録してください。

3か月目以降: 4拠点に広げ、整備依頼の下書きと期限の自動計算を足します。「異常欄に書かれたことがその週のうちに下書きになっている」状態で完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-09-22/最終更新:2026-09-22
確認した内容情報源確認日
印刷と手書きのテキストが行と単語として抽出され、単語ごとに contentconfidence が返ること。各行が手書きかどうかの分類と信頼度スコアが stylesisHandwritten として入ること。テーブルの各セルに行と列のインデックスと境界のポリゴン座標が入ること。pages にページの回転を示す角度と幅と高さが入ること。段落に title sectionHeading などの論理ロールが付くことMicrosoft Learn: ドキュメント レイアウト分析2026-09-22
請求書モデルが現在27言語の請求書をサポートし、対象の帳票として請求書・光熱費・販売注文・発注書が挙げられていること。キーと値のペアの返却が既定では無効であること。PDFとTIFFで最大2,000ページを処理でき、無料レベルでは最初の2ページのみが処理されること。ファイルサイズが有料(S0)レベルで500MB、無料(F0)レベルで4MBであること。画像の寸法が50ピクセル四方から10,000ピクセル四方の間であること。抽出するテキストの最小の高さが1024ピクセル × 768ピクセルの画像で12ピクセルであることMicrosoft Learn: 請求書データの抽出2026-09-22
カスタム抽出モデルが、同じフォームまたはドキュメントの種類の例が5つあれば作り始められること。テンプレートとニューラルの2種類があり、テンプレートは一貫したビジュアルテンプレートに依存すること。トレーニング時間がテンプレートで1分から5分、ニューラルで30分から12時間(既定は30分)であること。まずニューラルを試すことが勧められていること。Studio でのモデル作成にストレージアカウントとBLOBコンテナーが要ることMicrosoft Learn: カスタム ドキュメント モデル2026-09-22
構造化出力が output_configformattype: "json_schema" とスキーマを指定して有効になること。基本型と enum const anyOf allOf $ref がサポートされ、オブジェクトに requiredadditionalProperties: false が要ること。配列の minItems が0か1だけサポートされること。数値の制約、文字列の長さの制約、再帰的なスキーマ、外部の $ref がサポートされないこと。返るJSONがスキーマに一致することが保証されること。文法のコンパイルが24時間キャッシュされること。ベータヘッダーが不要であることClaude Docs: Structured outputs2026-09-22

車検(継続検査)と法定点検の期限、運行記録の保存の要否と期間は、車両の用途区分と事業の形態によって定めが異なります。この部分は自社の運行管理・整備管理の担当と法務への確認が必要です。

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

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

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

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