Media > AI活用ユースケース > 生産 > 建設現場で協力会社から届く作業員名簿と資格者証・健康診断の写しを読み取り、入場前に資格と受診日の不足を点検して、差し戻しの連絡を作る

建設現場で協力会社から届く作業員名簿と資格者証・健康診断の写しを読み取り、入場前に資格と受診日の不足を点検して、差し戻しの連絡を作る

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

協力会社から届く作業員名簿と、資格者証・修了証・健康診断の写しを読み取ります。名簿に書かれた作業に必要な資格の写しがあるか、受診日が古すぎないかを作業員1人ずつ点検し、足りないものを差し戻しの連絡にまとめます。

サマリー
生成AI
ChatGPT/Claude/Gemini
AIサービス
Azure AI/Google Document AI
連携・自動化
Python
対象業界
建設/物流/製造
対象部門
生産/総務
対象業務
内容確認・チェック/書類作成
主な課題
入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
AIで行う処理
読み取り(OCR)
主な効果
入力漏れ削減/工数削減/機会損失防止
導入難易度
★★☆☆☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
条件付き
現在工数
60h/月
AI導入後
20h/月
想定削減
67%
年間削減
480h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 協力会社が、作業員名簿と資格者証・修了証・健康診断の写しを現場の提出フォルダに入れる。紙やファックスのものは現場の事務がスキャンする
  2. 担当者が名簿を開き、作業員ごとに「作業の内容」と「保有する資格」の欄を読む
  3. 添付のPDFや写真の中から、その作業員の修了証と健康診断の写しを探す
  4. 写しの氏名・生年月日と名簿の記載が一致しているか、講習の種類が作業に合っているかを見比べる
  5. 健康診断の受診日を読み、受け付ける期間に入っているかを確かめる
  6. 足りないものを付箋か受付簿にメモし、協力会社ごとに電話かメールで差し戻す
  7. そろった作業員を新規入場者の受付簿に登録し、入場日の新規入場者教育に回す
導入後(After)
  1. 人協力会社が名簿と写しを提出フォルダに入れる。紙とファックスは現場の事務がスキャンして同じフォルダへ入れる
  2. 自動30分おきに提出フォルダを見て、新しく届いたファイルを工事・協力会社ごとに束ねる
  3. 自動OCRが全ページの文字と画像の品質を返す。品質の足りないページは撮り直しの候補にする
  4. 自動健康診断の写しのページは、氏名と受診日の欄を除いて結果の欄を覆い隠す
  5. 自動生成AIが、名簿の作業員ごとの行と、写しの種類・氏名・生年月日・講習の種類・受診日を取り出す
  6. 自動スクリプトが、作業の内容から自社の「作業と必要な資格の表」を引き、写しとの対応と受診日からの経過を確かめる
  7. 自動作業員ごとに `ok` / `needs_docs` / `needs_retake` / `needs_human` を付ける
  8. 自動協力会社ごとに、差し戻す作業員と足りない書類を並べた連絡の下書きを作る
  9. 人担当者が `needs_human` と差し戻しの下書きを確かめ、協力会社へ送る
  10. 人`ok` の作業員を受付簿に登録し、入場日の新規入場者教育で本人と資格者証の原本を確かめる
各工程の詳しい説明を読む
  1. 協力会社が、作業員名簿と資格者証・修了証・健康診断の写しを現場の提出フォルダに入れる。紙やファックスのものは現場の事務がスキャンする
  2. 担当者が名簿を開き、作業員ごとに「作業の内容」と「保有する資格」の欄を読む
  3. 添付のPDFや写真の中から、その作業員の修了証と健康診断の写しを探す
  4. 写しの氏名・生年月日と名簿の記載が一致しているか、講習の種類が作業に合っているかを見比べる
  5. 健康診断の受診日を読み、受け付ける期間に入っているかを確かめる
  6. 足りないものを付箋か受付簿にメモし、協力会社ごとに電話かメールで差し戻す
  7. そろった作業員を新規入場者の受付簿に登録し、入場日の新規入場者教育に回す

(a)写しを探すところから始まる。 30人分が1つのPDFにまとめてスキャンされていると、1人の修了証を見つけるのに何ページもめくります。

(b)資格の不足が入場当日に分かる。 名簿に「車両系建設機械」と書いてあっても、写しが特別教育の修了証だけということがあります。機体重量3トン以上の機械を運転するには技能講習の修了が必要で、特別教育は3トン未満の機械が対象です。 名簿の文字だけを見ると通ってしまい、当日の朝に気づいて作業の割り当てを組み直すことになります。

(c)受診日の確認が後回しになる。 資格に比べて目立たない項目なので、忙しい週に最初に省かれます。

(d)差し戻しが伝わらない。 「資格の写しがありません」とだけ伝えると、どの作業員の、どの資格かが分からず、同じやり取りを2往復します。

  1. 【人】 協力会社が名簿と写しを提出フォルダに入れる。紙とファックスは現場の事務がスキャンして同じフォルダへ入れる
  2. 【自動】 30分おきに提出フォルダを見て、新しく届いたファイルを工事・協力会社ごとに束ねる
  3. 【自動】 OCRが全ページの文字と画像の品質を返す。品質の足りないページは撮り直しの候補にする
  4. 【自動】 健康診断の写しのページは、氏名と受診日の欄を除いて結果の欄を覆い隠す
  5. 【自動】 生成AIが、名簿の作業員ごとの行と、写しの種類・氏名・生年月日・講習の種類・受診日を取り出す
  6. 【自動】 スクリプトが、作業の内容から自社の「作業と必要な資格の表」を引き、写しとの対応と受診日からの経過を確かめる
  7. 【自動】 作業員ごとに ok / needs_docs / needs_retake / needs_human を付ける
  8. 【自動】 協力会社ごとに、差し戻す作業員と足りない書類を並べた連絡の下書きを作る
  9. 【人】 担当者が needs_human と差し戻しの下書きを確かめ、協力会社へ送る
  10. 【人】 ok の作業員を受付簿に登録し、入場日の新規入場者教育で本人と資格者証の原本を確かめる

9番目が人の仕事の中心です。 担当者は600人分の写しを開くのではなく、判定の付いた一覧と差し戻しの下書きを読みます。

10番目を残すのは、写しが本人のものか、修了証が本物かは写しからは分からないからです。 この構成が減らすのは書類の不足で入場が止まることで、本人と原本の確認は今までどおり現場で行います。

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

構成図
作業員名簿と写し(PDF・写真・スキャン)
   │【トリガー】30分おきの定時実行
   ▼
Python ── 新しいファイルを工事・協力会社ごとに束ねる、HEIC → JPEG
   ▼
Google Document AI(Enterprise Document OCR)
   │   全ページの文字、画像の品質スコアと検出された不具合
   ▼
Python ── 品質不足のページを撮り直しの候補へ、健診の結果欄を覆う
   ▼
Google Document AI(Form Parser)
   │   名簿の表、修了証の欄の名前と値、信頼度
   ▼
Gemini API ── 書類の種類、作業員ごとの行、写しの項目を取り出す(構造化出力)
   ▼
Python ── 作業と必要な資格の表との照合、受診日からの経過、名簿と写しの一致
   ▼
判定(ok / needs_docs / needs_retake / needs_human)
   ▼
【人が一覧と下書きを確認】
   ├──▶ 協力会社への差し戻しの連絡
   └──▶ 新規入場者の受付簿
役割想定する製品代替候補
OCRGoogle Document AI(Enterprise Document OCR、Form Parser)Azure AI Document Intelligence
生成AIGemini API(書類の種類の判定、作業員ごとの項目の取り出し、差し戻しの下書き)Claude API、OpenAI API
差異計算Python(作業と必要な資格の表との照合、受診日からの経過、名簿と写しの突き合わせ)受付簿の関数による照合
連携Python(提出フォルダの監視、画像の変換、結果の一覧への書き出し)既存の連携の仕組み
保管共有ドライブ(名簿と写しの原本)文書管理システム

提出フォルダと受付簿は今のものを使い、受付簿への登録は担当者が確かめてから行います。

OCRに Google Document AI を選ぶのは、日本語で使える2つのプロセッサがそろうからです。 Enterprise Document OCR と Form Parser は、どちらも一般提供(GA)で、対応言語に日本語が含まれ、手書きの検出にも対応しています。

Enterprise Document OCR を先に通すのは、画像の品質スコアのためです。 読みやすさを0から1で評価し、0.5を下回ると、ぼけ、ノイズ、暗さ、薄さ、文字が小さすぎる、書類の切れ、文字の切れ、反射の8種類から理由が返ります。 現場の詰所で撮った修了証の写真で起きることが、ほぼそのまま並んでいます。

Form Parser は、欄の名前と値の組、表、チェック欄を取り出します。 表は行や列をまたぐセルの無い単純な表が対象で、見出しが2段に結合された名簿は取れないことがあります。そのページはOCRの全文を生成AIに渡します。 Custom Extractor の生成AIによる抽出は正式な対応が英語だけのため、使いません。

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

Step1

処理の起点を決める

30分おきの定時実行にします。 協力会社は名簿と写しを何回かに分けて入れることが多く、ファイルが入るたびに動かすと、写しがまだ届いていないだけの作業員を「不足」として差し戻してしまいます。

そこで、最後のファイルが入ってから30分以上たった協力会社の束だけを対象にします。 途中でファイルが増えた束は次の回に回します。

入場予定日の前々日の夕方には、未処理の束をまとめて流す回を足します。 処理済みの印は、判定と下書きまで作れたときだけ付けます。

Step2

入力データを集める

データ中身取得元
名簿と写しのファイルPDF、写真(JPEG・HEIC)、スキャン。工事名、協力会社名、提出日時提出フォルダ
入場の予定工事、協力会社、入場予定日、予定の作業期間の終わり新規入場者の受付簿
読み取り結果全ページの文字、品質スコアと不具合、欄の名前と値、表、信頼度Google Document AI
作業と必要な資格の表作業の区分ごとの、必要な免許・技能講習・特別教育の種類と、機械の大きさの境目自社の安全管理の部署が作る表
受診日の基準定期の健康診断と、特定の業務に就く人の健康診断の、受け付ける期間自社の安全衛生の規程

質を決めるのは、作業と必要な資格の表です。 労働局の「資格が必要な業務(免許・技能講習)一覧表」では、たとえば車両系建設機械(整地・運搬・積込用、掘削用)は機体重量3トン以上が技能講習、3トン未満は特別教育、玉掛けは1トン以上が技能講習、高所作業車は作業床の高さ10メートル以上が技能講習とされています。この境目を自社の表に写し、名簿の「作業の内容」の書き方とつなぎます。

名簿の作業の書き方は協力会社によって違い、「バックホウ」「ユンボ」「重機オペ」が同じ作業を指していることがあります。表には、現場で使われている呼び方の一覧も持たせます。

健康診断は、定期のものが1年以内ごとに1回、特定の業務に就く人は6か月以内ごとに1回の実施とされています。 どちらの基準で見るかは、作業の内容から規則で決めます。

Step3

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

Enterprise Document OCR には、次の2つを指定して送ります。

指定設定理由
enableImageQualityScorestrueページごとの品質スコアと不具合を受け取る
hints.languageHints["ja"]推定させず、日本語として読ませる

Form Parser からは、次の3つを取ります。

取るもの場所使い方
欄の名前と値pages[].formFields の fieldName と fieldValue、confidence修了証の氏名・生年月日・講習の種類・交付日、健診の氏名と受診日
表pages[].tables の headerRows と bodyRows名簿の作業員ごとの行
チェック欄valueType の filled_checkbox / unfilled_checkbox名簿の「特別教育」「職長教育」などの印

表のセルには rowSpan と colSpan が付き、単純な表では常に1です。 名簿のページで表が1つも返らないか、行の数が名簿の人数より明らかに少ないときは、表として取れなかったとみなし、OCRの全文を生成AIに渡します。

スキャンは最低200dpi、できれば300dpi以上で取ります(Document AI の案内)。現場の複合機の既定の設定を最初に確かめてください。

Step4

AIへ渡す前に整形する

  1. 形式をそろえる … Document AI が受け付ける画像は PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などで、HEIC は対応形式に含まれていません。 スマートフォンの HEIC の写真は JPEG に変えます
  2. むやみに圧縮しない … 非可逆の形式でファイルを小さくすると、画像の品質と読み取りの精度が落ちるとされています。変換は1回だけにします
  3. ページ数で分ける … 同期の処理は1回に15ページまでです。数十ページのまとめスキャンは、15ページずつに分けて送ります
  4. 品質の足りないページを分ける … qualityScore が0.5を下回ったページは、不具合の種類とともに撮り直しの候補にし、後段に送りません
  5. 健診の結果の欄を覆う … 健康診断の写しと分かったページは、氏名・受診日・実施機関の欄の位置だけを残し、ほかの領域を塗りつぶした画像を作り直してから Form Parser に送ります
  6. 同じ写しの重複を落とす … 前回の入場で出された写しが、また入っていることがあります。画像の近さで重複を見つけます

5番目は、OCRの文字の位置で行います。 「受診日」「氏名」の語が見つかった行の周りだけを残し、見つからなかったページは needs_human に回します。 結果の欄が生成AIに渡る経路を残さないためです。

4番目で送らないのは、読めないページの値を使わないためです。 反射で「技能講習」の文字が取れなかった修了証を特別教育の修了証と扱うと、不要な差し戻しになります。

Step5

AIに処理させる

生成AIにさせるのは、書類の種類の判定と、決まった項目の取り出しだけです。

取り出すもの取り出し方取り出せないとき
書類の種類名簿/修了証・免許証/健康診断の写し/それ以外other。項目を取り出さない
名簿の行作業員ごとの氏名、生年月日、作業の内容、名簿に書かれた資格行が読めなければ unreadable
写しの氏名と生年月日書かれたとおりの文字列missing
講習・免許の種類証に印字された名称を書かれたとおりmissing。複数あればすべて並べる
交付日と有効期限証に印字された日付。期限の欄が無い証は空期限の欄があって読めなければ unreadable
健診の受診日受診日・実施日の欄の日付missing。日付が複数あれば ambiguous

表の右端が、この構成で大事な区別です。 missing は読めたうえで書かれていないこと、unreadable は品質不足のページにあったか、値として確定できないことです。前者は写しの出し直し、後者は撮り直しに回ります。

させないこと理由
その作業に要る資格の判断自社の表をスクリプトが引く。推測させると、もっともらしい資格が返る
講習名の言い換え「車両系建設機械運転技能講習」を短い名前や別の講習に直さない
機械の大きさの推定「0.45」のような書き方から機体重量を推測しない
受診日からの経過の計算日付の差はスクリプトが計算する
写しが本人のものかの結論氏名と生年月日の一致を並べるまで。結論は人
就業させてよいかの判断現場の責任者が決める

いちばん起きやすい失敗は、表の3行目です。 名簿に「バックホウ 0.45」とあると、生成AIは容量から機械の大きさを推測し、「技能講習が必要」と書きたがります。大きさは協力会社か現場の機械の一覧で確かめる情報で、名簿から分からなければ分からないまま人に渡します。

Step6

指示内容を固定する

あなたは建設会社の安全書類の受付で、協力会社から届いた
作業員名簿と添付の写しを読む担当です。
渡された読み取り結果だけを見て、項目を取り出してください。
判断や計算はしないでください。

【書類の種類】
- roster       : 作業員名簿
- certificate  : 技能講習修了証、特別教育の修了証、免許証などの資格の証
- health_check : 健康診断の写し(結果の欄は覆い隠されています)
- other        : それ以外
other の書類からは項目を取り出さないでください。

【取り出す項目】
roster ……… 作業員ごとに、氏名、生年月日、作業の内容、名簿に書かれた資格
certificate … 氏名、生年月日、講習・免許の種類、交付日、有効期限
health_check  氏名、受診日、実施機関

【status の選び方】
- ok ......... 値が読み取れている
- missing .... 読み取り結果の中に、その項目が無い
- unreadable . その項目があるはずのページが「品質不足」と印の付いたページ、
               または文字はあるが値として確定できない
- ambiguous .. 候補が複数あり、1つに決められない
迷ったときに ok を選ばないでください。

【厳守事項】
- 記載がなければ status を missing にしてください。推測で埋めないでください。
- 講習・免許の種類は、証に印字された名称をそのまま写してください。
  短い名前や、別の講習の名前に言い換えないでください。
- 作業の内容は、名簿に書かれた文字列をそのまま写してください。
  機械の大きさや能力を、型式や容量の数字から推測しないでください。
- その作業にどの資格が必要か、資格が足りているかを書かないでください。
- 有効期限の欄が無い証は、有効期限を空にしてください。
  期限が無いと判断したとは書かないでください。
- 日付は西暦(YYYY-MM-DD)に直してください。元の表記は evidence に残してください。
- 健康診断の写しについて、覆い隠されていない部分に結果の数値や所見が
  見えても、取り出さないでください。
- evidence には、根拠にした文字列をそのまま写してください。

【読み取り結果(ページごと、品質不足のページには印)】{pages}
【この束の工事名と協力会社名】{batch_info}

「機械の大きさを推測しない」を入れないと、資格の判断まで進みます。 結論がたまたま正しくても、根拠が名簿に無い以上、点検としては使えません。 「期限が無いと判断したとは書かない」も、空の欄の意味を「期限の欄が無かった」という事実の1つにそろえるためです。

Step7

出力形式を固定する

Gemini API の構造化出力で、次の形のJSONを受け取ります。 要求の response_format に、mime_type を application/json、schema にJSONスキーマを指定します。

{
  "batch_id": "",
  "documents": [
    {
      "page_refs": [3],
      "doc_type": "roster | certificate | health_check | other",
      "workers": [
        { "name": "", "birth_date": "", "work": "", "listed_qualifications": [],
          "status": "ok | missing | unreadable | ambiguous", "evidence": "" }
      ],
      "fields": [
        { "item": "holder_name", "status": "ok | missing | unreadable | ambiguous",
          "value": "", "evidence": "" }
      ]
    }
  ]
}

workers は名簿のページだけで使います。fields の item は holder_name / holder_birth_date / qualification_name / issue_date / expiry_date / exam_date / exam_facility です。

スキーマでは doc_type と status を enum で固定し、日付の項目には format の date を指定します。 ただし、構文として正しいJSONが返っても、値はアプリケーションの側で確かめるよう案内されています。 スクリプトは、日付が実在するか、page_refs が束の中のページかを確かめます。

受け取ったあと、スクリプトが作業員ごとの判定を足します。

{
  "worker_key": "",
  "required": [ { "rule_id": "", "qualification": "", "matched_doc": 0 } ],
  "exam": { "date": "", "basis": "annual | six_months", "within": true },
  "identity": "matched | name_only | mismatch",
  "retake_pages": [ { "page": 0, "defects": [] } ],
  "missing_docs": [],
  "verdict": "ok | needs_docs | needs_retake | needs_human"
}
verdict条件
needs_retakeその作業員の写しがあるはずのページが retake_pages に入っている
needs_docs必要な資格に対応する写しが無い、受診日が基準の期間を外れる、健診の写しが無い
needs_human作業の内容が表のどの区分にも当たらない、機械の大きさで資格が分かれるのに大きさが書かれていない、identity が mismatch、ambiguous がある
ok上のどれにも当たらない

status と verdict を別の層に置くのが要点です。 取り出しは生成AI、判定は自社の表と規則です。表の境目や受診日の基準が変わっても、直すのはスクリプトの表だけです。

Step8

システムへ連携する

つなぎ先方式内容
提出フォルダファイルの一覧と取得新しく届いた名簿と写しを、協力会社ごとに受け取る
Google Document AIAPI呼び出し(同期の処理)Enterprise Document OCR、Form Parser の順に送る
Gemini APIAPI呼び出し書類の種類と項目の取り出し(構造化出力)、差し戻しの下書き
新規入場者の受付簿読み取りと、判定の一覧の書き出し入場予定日を読み、作業員ごとの判定を別の一覧に書く
協力会社への連絡既存のメール差し戻しの下書きを担当者が確かめて送る

受付簿の登録の欄には書き込みません。 機械の判定がそのまま「入場可」に見える状態を作らないためです。

差し戻しの下書きは、協力会社ごとに1通にまとめます。 作業員の氏名、足りない書類、撮り直しが要るページと不具合の種類(「反射で講習の種類が読めません」)を並べ、何を出し直せばよいかが1通で分かる形にします。

Step9

人が確認する

担当者は、判定の一覧を verdict の順に読みます。

  1. needs_human を先に見る … 作業の内容が表に無いもの、機械の大きさが書かれていないもの。協力会社か現場の機械の一覧に確かめます
  2. needs_docs の根拠を確かめる … evidence を読み、必要な写しが本当に束の中に無いかを、束のページの一覧で見ます
  3. 差し戻しの下書きを直して送る … 送るのは担当者です
  4. ok の作業員を受付簿に登録する … 一覧で氏名と作業を流し見て登録します
  5. 判定を覆したら記録する … どの作業員の、どの判定を、どちらに変えたか

2番目を省かないでください。 写しが別の協力会社の束に紛れ込んでいることがあり、不足として差し戻すと、協力会社は出したはずの写しを探し直すことになります。 一方で ok の写しは開きません。全員分を開き直すと、第10章の2分には収まりません。

Step10

例外に対処する

起きること対応
HEIC など対応していない形式JPEG に変えて投入。変えられないものは撮り直しの依頼
品質スコアが0.5を下回る不具合の種類とともに retake_pages へ。後段に送らない
1回の送信が15ページを超える15ページずつに分けて送る
名簿の表が取れない見出しが結合された表。OCRの全文を生成AIに渡す
健診の写しで受診日の欄が見つからない覆い隠しができないため、生成AIに渡さず needs_human
作業の内容が表に無いneeds_human。表に呼び方を足すかは安全管理の部署が決める
名簿と写しで氏名の字が違う旧字体や婚姻による変更がある。name_only または mismatch で人へ
Document AI や Gemini API が応答しない処理済みの印を付けず、次の回にやり直す

件数として多いのは、上の2行目と6行目です。 写真の反射と、表に無い作業の書き方で、どちらもAIではなく撮り方と表の整備の問題です。

Step11

記録を残す

  • 協力会社の束ごとの、名簿と写しの原本と、変換後・覆い隠した後の画像
  • Document AI が返した結果の全文(品質スコア、欄の名前と値、表)
  • 生成AIに渡した読み取り結果と、返ったJSON
  • スクリプトが足した判定と、そのとき使った作業と必要な資格の表の版、受診日の基準の版
  • 担当者が判定を覆した記録と、その理由
  • 差し戻しを送った日時と、出し直された写しとの対応
  • 協力会社ごとの撮り直しと差し戻しの件数

表の版を残すのは、境目や基準が後から変わるためです。 当時の版が残っていないと、過去の判定のどれをやり直すかが決まりません。 最後の件数は、撮り方の案内を協力会社に送る材料になります。

04実装レベルの3段階

最小構成:名簿と写しを手でAIの画面に貼り、作業員ごとの表を作らせる / 写しの項目の書き出し
半自動化:上記+OCRのAPIを呼び、作業と必要な資格の表で照合した一覧を書き出す / 読み取りと、資格・受診日の照合
本格構成:上記+提出フォルダを起点に自動で動かし、品質の判定、健診の欄の覆い隠し、差し戻しの下書きまで出す / 点検の全体と、差し戻しの連絡の準備

最小構成は、表の下書きを固めるための段階です。 1社ずつ貼り付けるので、600人分には使えません。 半自動化で、1人分6分が3〜4分程度になります。 撮り直しの見分けと差し戻しの文面が手作業で残るためです。本格構成で2分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、表に無い呼び方と撮り直しの多い協力会社が先に分かり、そこを直してから下書きを足すほうが空振りの差し戻しが減ります。

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

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

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

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

AI活用について相談する

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

向いている
  1. 複数の現場を同時に動かし、協力会社から毎月数百人分の作業員名簿と資格者証・修了証・健康診断の写しを受け取っている総合建設業・設備工事業。重機や玉掛け、高所作業車など資格の要る作業が多く、入場前の書類の点検を現場の工事担当や事務が目視で行っている場合。工場の構内工事や物流倉庫の設備更新で、外部の作業者を定期的に受け入れる製造業・物流業にも当てはまる。
向いていない
  1. 協力会社が数社に限られ、入場する作業員がほぼ固定している場合。建設キャリアアップシステムなどで作業員の資格と健康診断の情報がすでにデータとしてそろい、紙や写しを読む必要がない場合。その作業に必要な資格が何か、就業させてよいかという安全衛生上の判断そのものを自動化したい場合、この構成では代替できません。

07最小構成で試す方法

  1. 先月受け付けた名簿から、5社・30人分を選ぶ(うち数人は、写しの不足や差し戻しがあった作業員を入れる)
  2. その30人について、当時どの写しを見て、何を差し戻したかを担当者に聞き取る
  3. 作業と必要な資格の表の下書きを作る。最初は、現場で多い作業の10区分ほどで足りる
  4. 名簿と写しのPDFを手元のAIサービスの画面に貼り付け、「作業員ごとに、氏名、作業の内容、写しにある講習の種類、健康診断の受診日を表にしてください。書かれていないものは空欄にし、推測で埋めないでください」と指示する
  5. 出てきた表を、手で作った資格の表と突き合わせ、当時の差し戻しと同じ不足が出るかを見る

健康診断の写しは、この段階では結果の欄を紙で隠してからスキャンしてください。 試す段階でも、結果の中身を外部のサービスに渡さないためです。

出てきた内容判断
当時の差し戻しと同じ不足が出たOCRとスクリプトの連携に進む
講習の名前を言い換えて表にした指示の書き方で直る。構成は有効
作業の内容から資格の要否まで書いた指示に「判断しない」を足す。判断は表の側に置く
写真の反射で読めない写しが多い撮り方の案内が先。 AIの問題ではない

3行目はほぼ必ず出ます。 判断を表に移す理由が見えたということです。

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

問題対策
生成AIが作業の内容から資格の要否を書く判断は表の側。 指示で禁じ、verdict は規則で決める
「0.45」から機械の大きさを推測する推測を禁じ、大きさが書かれていなければ needs_human
写しの不足と読めないページが混ざる品質スコアで分ける。混ぜると不要な差し戻しが出る
名簿の表が取れない見出しの結合で単純な表にならない。OCRの全文に切り替える
HEIC の写真で止まる対応形式に含まれない。JPEG に変えてから送る
健診の結果が生成AIに渡る受診日の欄が見つからないページは覆わずに進めない
届きかけの束を差し戻す最後のファイルから30分待つ。入場予定日の前々日にまとめて流す
作業の呼び方が表に無い1〜2か月は needs_human が多い。呼び方を表に足していく
判定が受付簿の「入場可」に直結する判定は別の一覧に書き、登録は人が行う

上の2行が、この構成の失敗のほとんどです。 どちらも生成AIが親切に判断まで進むことから起き、判断を自社の表に置いてあるかで運用に乗るかが決まります。 健診の覆い隠しも最初から入れてください。後から足しても、渡した分は取り消せません。

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

この構成で扱うデータ: 作業員の氏名、生年月日、保有する資格、そして健康診断の写しです。健康診断の写しには、受診日のほかに検査の結果と医師の所見が載っています。

  1. 健診の結果の欄を処理の外に置く … 点検に要るのは氏名と受診日だけです。覆い隠した画像だけを Form Parser と生成AIに渡し、覆う前の画像は原本として共有ドライブに残すだけにします
  2. 処理する地域を先に決める … Document AI は us、eu、asia-southeast1 などの地域で処理できます。作業員の個人情報をどこで処理してよいかを、社内の規程と合わせて決めます
  3. この構成は就業の可否を決めない … 必要な資格の区分は労働局の一覧表をもとにした自社の表で決め、就業させてよいかは現場の責任者が判断します。 この構成が出すのは、書類がそろっているかという事実だけです
  4. 写しの真偽は確かめられない … 写しが本人のものか、証が本物かは写しから分かりません。新規入場者教育で本人と原本を確かめる工程を残します
  5. 差し戻しを自動で送らない … 下書きまでにします。誤った差し戻しは、その協力会社の作業員の入場を止めます

誤りが起きた場合のリスクは、不足を見落として入場させることと、そろっている作業員を差し戻すことの2つです。 どちらも「無い」と「読めない」の区別から出ているので、そこは設計で守り、最後の確かめは原本を見る工程に残します。

10まず何から始めるか

1週目:作業と必要な資格の表を作る

安全管理の部署と、現場で多い作業の区分を10ほど挙げ、必要な免許・技能講習・特別教育と機械の大きさの境目を書きます。境目の数字は労働局の一覧表から写します。

2週目:30人分で試す

先月の名簿から5社・30人分を選び、健診の結果の欄を紙で隠してから、手元のAIサービスで作業員ごとの表を作らせます。当時の差し戻しと突き合わせ、資格の要否を勝手に書いていないかを最優先で見ます。

3週目:受診日の基準と差し戻しの書き方を決める

受診日をいつまで受け付けるか、どの作業を6か月以内の基準で見るかを、安全衛生の担当と決めます。 差し戻しの連絡のひな形も作ります。

4週目:提出フォルダから判定の一覧までをつなぐ

1つの現場の提出フォルダを対象に、OCR、取り出し、表との照合を一覧に書き出すところまで作ります。この時点では差し戻しの下書きを出さず、一覧だけを担当者が見ます。

2か月目: 健診の欄の覆い隠しと品質による撮り直しの判定を足し、対象の現場を広げます。表に無い作業の呼び方を毎週足します。3か月目以降: 差し戻しの下書きを足し、1人分6分が何分になったかを実測します。表に無い作業の needs_human が週に数件まで減った時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-10-06/最終更新:2026-10-06
確認した内容情報源確認日
Enterprise Document OCR と Form Parser が一般提供(GA)で、対応言語に日本語が含まれること。同期の処理のページの上限が15、バッチ処理では Enterprise Document OCR が500、Form Parser が100であること。Custom Extractor の生成AIによる抽出は正式な対応が英語のみであることGoogle Cloud: Processor list2026-10-06
画像の品質スコアが enableImageQualityScores で有効になり、0から1(1が完全な品質)で返ること。0.5を下回ると、ぼけ・ノイズ・暗さ・薄さ・文字が小さすぎる・書類の切れ・文字の切れ・反射の8種類の不具合が検出されること。languageHints に BCP-47 の言語コードを指定できること。手書きの検出に対応することGoogle Cloud: Enterprise Document OCR2026-10-06
Form Parser がキーと値のペア、一般的な項目、表、選択マーク(チェック欄)を取り出すこと。表は行や列をまたぐセルの無い単純な表が対象であること。事前学習済みで追加の学習ができないことGoogle Cloud: Form Parser2026-10-06
欄が formFields の fieldName と fieldValue で返り、confidence が付くこと。表が headerRows と bodyRows で返り、セルに rowSpan と colSpan が付き、通常の表では1であること。チェック欄が filled_checkbox / unfilled_checkbox で返ることGoogle Cloud: Handle the processing response2026-10-06
対応する画像の形式が PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などで、HEIC が含まれないこと。非可逆の形式でファイルを小さくすると画像の品質と結果の精度が落ちうること。スキャンは最低200dpi、300dpi以上が一般に最も良い結果になるとされていることGoogle Cloud: Supported files2026-10-06
Gemini API の構造化出力が response_format に mime_type(application/json)とJSONスキーマを指定して使い、enum、required、format(date など)をサポートすること。構文として正しいJSONが返っても、値はアプリケーションの側で確かめるよう案内されていることGoogle AI for Developers: Structured output2026-10-06
車両系建設機械が機体重量3トン以上で技能講習、3トン未満が特別教育であること。玉掛けが1トン以上、高所作業車が作業床の高さ10メートル以上で技能講習であること静岡労働局: 資格が必要な業務(免許・技能講習)一覧表2026-10-06
雇入時の健康診断(安衛則第43条)、定期の健康診断が1年以内ごとに1回(同第44条)、特定業務従事者の健康診断が6か月以内ごとに1回(同第45条)であること。健康診断個人票を5年間保存する必要があること高知労働局: 健康診断2026-10-06

作業に必要な資格の区分、健康診断の受診日の受け付ける期間、就業させてよいかの判断は、法令と自社の安全衛生の規程、現場の責任者の判断に従ってください。 本記事は Google Cloud、Google AI for Developers、都道府県労働局のページで確認できた範囲だけを扱っています。

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

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

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

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