建設現場で協力会社から届く手書きの持込機械等使用届を読み取り、機械・点検・運転者の資格を入場管理の台帳にそろえて、点検の期限切れと資格の記載漏れを拾う
協力会社から届く手書きの持込機械等使用届を読み取り、機械の種類・管理番号・点検の日付・運転者の資格を入場管理の台帳にそろえます。持込期間中に定期自主検査の期限が切れるものと、資格の記載漏れを持込の前に拾います。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- 建設/物流/製造
- 対象部門
- 生産/総務
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/工数削減/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 協力会社の職長が届を手書きし、現場の職員に渡す
- 現場の職員がスキャンして、支店の共有フォルダに入れる
- 支店の担当が1件ずつ開き、機械・管理番号・持込期間・検査の日付・運転者・資格を台帳に書き写す
- 年次と月例の検査の日付が、今日の時点で1年・1か月以内かを目で見る
- 機械の区分を一覧表で引き、運転者の資格がそれに合うかを見る
- 足りないところがあれば、現場の職員に電話で伝え、協力会社に書き直しを頼んでもらう
- 問題のないものは、現場に「受付済み」と返す
- 人現場の職員が届をスキャンして、今までどおり支店の取込フォルダに入れる
- 自動Python のスクリプトが30分ごとに取込フォルダを見て、Document AI の Form Parser に渡す
- 自動Form Parser が、届の項目名と値の組、表、信頼度を返す
- 自動Claude API が、機械・管理番号・機体重量・持込期間・検査の日付・運転者と資格を台帳の項目にそろえる
- 自動Python が、持込期間の終わりの日で検査の期限を数え、機械の区分と資格を一覧表で照らし、台帳に書き込む
- 自動同じ管理番号の機械が別の現場で受け付けられていれば、その記録と照らす
- 自動印の付いた届の一覧を、30分ごとに支店の担当と現場の職員に送る
- 人支店の担当が印の付いた届を見て、現場を通じて協力会社に書き直しを頼む。問題のないものに受付済みを返す
各工程の詳しい説明を読む
- 協力会社の職長が届を手書きし、現場の職員に渡す
- 現場の職員がスキャンして、支店の共有フォルダに入れる
- 支店の担当が1件ずつ開き、機械・管理番号・持込期間・検査の日付・運転者・資格を台帳に書き写す
- 年次と月例の検査の日付が、今日の時点で1年・1か月以内かを目で見る
- 機械の区分を一覧表で引き、運転者の資格がそれに合うかを見る
- 足りないところがあれば、現場の職員に電話で伝え、協力会社に書き直しを頼んでもらう
- 問題のないものは、現場に「受付済み」と返す
(a)期限を「今日」で見てしまう。 4番は受付の日の時点で見ています。持込期間が3か月の届なら、その途中で年次の検査が1年を過ぎることがあります。 現場は「受付済み」の機械を使い続け、期限が切れたことに誰も気づきません。
(b)機体重量の欄が空いていても、資格の欄で安心する。 「車両系建設機械運転技能講習」と書いてあれば足りるように見えますが、機械が3トン未満なら特別教育でもよく、3トン以上なら技能講習等が要ります。 機体重量の欄が空いた届では、資格が合っているかは判断できないのに、資格の欄が埋まっていると受付に回ってしまいます。
(c)書き写しに時間を取られる。 1件の届に日付が4つ以上あり、管理番号は英数字の混ざった長い番号です。書き写して確かめる作業の大半は、写すほうに使われています。
(d)同じ機械の届が現場をまたいで出てくる。 協力会社は同じバックホウを別の現場にも持ち込みます。前の現場で書き直しを頼んだ届と同じ誤りが、別の現場でまた出てきます。 台帳が現場ごとに分かれていると、それに気づけません。
- 【人】 現場の職員が届をスキャンして、今までどおり支店の取込フォルダに入れる
- 【自動】 Python のスクリプトが30分ごとに取込フォルダを見て、Document AI の Form Parser に渡す
- 【自動】 Form Parser が、届の項目名と値の組、表、信頼度を返す
- 【自動】 Claude API が、機械・管理番号・機体重量・持込期間・検査の日付・運転者と資格を台帳の項目にそろえる
- 【自動】 Python が、持込期間の終わりの日で検査の期限を数え、機械の区分と資格を一覧表で照らし、台帳に書き込む
- 【自動】 同じ管理番号の機械が別の現場で受け付けられていれば、その記録と照らす
- 【自動】 印の付いた届の一覧を、30分ごとに支店の担当と現場の職員に送る
- 【人】 支店の担当が印の付いた届を見て、現場を通じて協力会社に書き直しを頼む。問題のないものに受付済みを返す
5番目が、この設計の分かれ目です。 期限を数える基準の日を、受付の日ではなく持込期間の終わりの日にします。持込期間の途中で期限が来るものには、「◯月◯日に年次の期限」と日付を付けて出します。現場は、その日までに検査を受けた機械に入れ替えるか、持込期間を区切るかを選べます。
8番目の「受付済み」を人が返すのは、機械を現場に入れてよいかを決めるのが元請の責任だからです。 印の無い届でも、受付済みを自動では返しません。 一覧で件数と協力会社を流し見て、まとめて返します。
02今回想定するシステム構成
持込機械等使用届(1台1枚、協力会社の職長が手書き) │ 現場の職員がスキャン ▼【トリガー】Python のスクリプト(30分ごと、社内のサーバーで定時実行) Python ── 形式・画質・ページの確認 ▼ Google Document AI(Form Parser) │ 項目名と値の組、表、信頼度 ▼ Claude API ── 構造化出力で台帳の項目にそろえる │ 機械/管理番号/機体重量/持込期間/年次・月例の検査日/運転者と資格 ▼ Python ── 期限の計算(持込期間の終わりで数える) │ 機械の区分×資格の対応表で照合 │ 同じ管理番号の他現場の記録と照合 ▼ 入場管理の台帳 ── 印の付いた届の一覧 ▼ 【支店の担当が確かめ、現場を通じて書き直しを依頼/受付済みを返す】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | Azure AI Document Intelligence |
| 生成AI | Claude API(届の項目を台帳の形にそろえる) | OpenAI API、Gemini API |
| 連携 | Python(フォルダの監視、台帳への書き込み、他現場の記録との照合) | Google Apps Script |
| 集計 | Python(期限の計算と印の付いた届の一覧) | Google Apps Script |
| 保管 | 社内のファイルサーバー | Google ドライブ |
新しく作るのは、機械の区分と資格の対応表を機械で読める形にすることと、台帳の列の追加です。 安全環境部の一覧表は人が読むための表なので、機械の区分、機体重量の境目、要る資格の名称と、その資格として届に書かれうる表記を1行ずつに並べ直します。台帳には、年次・月例の次の期限と、印の列を足します。
土台は Document AI の Form Parser です。 公式のプロセッサ一覧では、OCRのテキストに加えて、キーと値のペア、チェックボックス、表を抽出するとされ、言語の一覧で日本語(ja)は手書きに対応する言語として示されています。届は「機械名」「管理番号」「年次点検実施日」などの印字の欄に手書きで書き込む書式なので、キーと値のペアとして読めます。 持込時の点検の結果の欄は、チェックボックスか表として返ります。
Form Parser の注意書きのうち、この題材で効くのは2つです。 1つは値の入っていないキーと値の組を確実には読み取れないこと、もう1つはチェックボックスのモデルがラジオボタンに対応しないことです。機体重量の欄が空の届は、「欄があって値が無い」形で返ってこないことがあります。欄が返ってこないことを、空欄と決めつけない設計にします(第7章)。
処理する場所は、リージョンの一覧から選びます。 マルチリージョンの us と eu、シンガポール(asia-southeast1)などの単一リージョンがあり、日本のリージョンはありません。 届には運転者の氏名と資格の修了証の番号が書かれるので、国外で処理することは社内で確かめておきます。
03どうやって実装するのか
処理の起点を決める
現場の職員が届をスキャンして、支店の取込フォルダに保存することを起点にします。 今までの共有フォルダを、そのまま取込フォルダにします。ファイル名に現場の記号と受け取った日付を入れる設定を、各現場の複合機に入れます。
Python のスクリプトを、社内のサーバーで30分ごとに定時実行します。 持込は「明日の朝から」という届も多く、受け付けた日のうちに書き直しを頼めないと、機械が先に現場へ着きます。 取込フォルダの新しいPDFを順に処理し、台帳への書き込みまで成功したものだけを処理済みのフォルダへ移します。
期限の再計算は、別のスクリプトで毎朝7時に行います。 持込中の機械は、届を受け付けた後も日が進みます。持込期間の途中で年次・月例の期限を迎える機械を、期限の14日前から一覧に出し続けます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 届のPDF | 1台1枚。現場と受け取った日(ファイル名) | 取込フォルダ |
| 読み取り結果 | 項目名と値の組、表、チェックボックス、要素ごとの信頼度 | Document AI(Form Parser) |
| 区分と資格の対応表 | 機械の区分、機体重量の境目、要る資格、資格の表記の揺れ | 安全環境部で用意する表 |
| 入場管理の台帳 | 現場、協力会社、管理番号、持込期間、検査の日付、運転者、印 | 社内のファイルサーバー |
| 協力会社の一覧 | 会社名と、届に書かれうる略称 | 工事部で用意する一覧 |
質を決めるのは、区分と資格の対応表です。 労働安全衛生法施行令の第20条では、機体重量が三トン以上の建設機械の運転のほか、つり上げ荷重が一トン以上の移動式クレーンの運転、作業床の高さが十メートル以上の高所作業車の運転などが、就業制限の業務として並んでいます。どの機械にどの資格が要るかの読み方は、安全環境部が決めて表にします。 AIにも Python にも、法令を解釈させません。
資格の表記の揺れは、必ず集めます。 届には「車両系建設機械運転技能講習」「車両系(整地)」「車建技能」のように、同じ資格がさまざまに略して書かれます。表記の一覧が無いと、正しい資格がすべて「不明」になります。
データの取得方法を決める
読み取りは、Python から Document AI の処理の API を呼ぶだけです。公式のページには Python のクライアントライブラリで応答を扱う例が載っています。返ってきた Document から次のものを取ります。
| 取るもの | 応答のどこから | 何に使うか |
|---|---|---|
| 項目名と値の組 | pages[].formFields[] の fieldName と fieldValue | 機械名、規格、管理番号、機体重量、持込期間、検査の日付、運転者、資格 |
| チェックボックス | formFields の valueType(filled_checkbox/unfilled_checkbox) | 持込時の点検の結果の欄 |
| 表 | pages[].tables[] の headerRows と bodyRows | 運転者が複数いるときの一覧 |
| 信頼度 | 各要素の layout の confidence | 日付と番号が確かに読めているかの判定 |
管理番号は、同じ機械を現場をまたいで追う鍵です。 読み取った番号で台帳を引き、完全に一致する機械があれば、前の現場で付いた印と検査の日付を並べて出します。 前の届と検査の日付が違えば、その間に検査を受けたのか、どちらかの書き誤りかを担当者が確かめます。
運転者が2人以上いる届は、表として読みます。 氏名・資格・修了証の番号が行で並ぶ書式なら、bodyRows の行ごとに1人です。表として崩れた場合は、運転者の欄を not_found にして人に回します。
AIへ渡す前に整形する
- 形式の確認 … Document AI の対象は PDF や画像です。現場の複合機のPDFはそのまま入れられます
- 画質の確認 … 公式には、スキャンは最低200dpiが望ましく、300dpi以上が一般に最もよい結果になるとされています。現場の複合機の設定を300dpi以上に固定します
- 届と添付の分け方 … 検査の記録や修了証の写しが後ろに付いていることがあります。1ページ目を届として読み、2ページ目以降は添付として件数だけ数えます
- ページ数 … オンラインの処理は1回の要求で最大15ページです。超えるものは届の部分だけを切り出します
- 受け取った日と現場の確認 … ファイル名に無いものは処理を止めて、取込フォルダの担当に知らせます
- 重複の検知 … 同じ現場・同じ管理番号・同じ持込期間のものが届いたら、新しいほうを書き直し後の届として扱います
3番目は、運用で決めておきます。 添付まで読み取ると、検査の記録に書かれた日付と届の日付が混ざります。届に書かれた値だけを台帳に入れ、添付は人が見るためのものとして残します。
AIに処理させる
させるのは、届の値を台帳の項目にそろえ、値ごとに状態を付けることだけです。 期限の計算と、区分と資格の照合は Python が行います。
| 取り出すもの | 取り出し方 | 判断できないときの扱い |
|---|---|---|
| 機械名と規格 | 欄の文字をそのまま | 読めなければ unreadable |
| 管理番号 | 英数字をそのまま | 1字でも読めなければ空にして unreadable |
| 機体重量・つり上げ荷重など | 数字と単位をそのまま | 欄に値が無ければ missing |
| 持込期間 | 開始日と終了日 | 終了日が無ければ missing |
| 年次・月例の検査の日付 | 欄の日付をそのまま。和暦は和暦のまま写し、Python で直す | 読めなければ unreadable |
| 運転者と資格 | 氏名、資格の名称、修了証の番号 | 資格の欄に値が無ければ missing |
Python が比べる規則は次のとおりです。
| 比べること | 規則 |
|---|---|
| 年次の期限 | 年次の検査日から1年後が、持込期間の終わりより前に来るか |
| 月例の期限 | 月例の検査日から1か月後が、持込期間の終わりより前に来るか |
| 区分と資格 | 対応表で機械の区分と機体重量から要る資格を引き、届の資格の表記がそれに当たるか |
| 機体重量の書き漏れ | 機体重量で要る資格が分かれる区分なのに、機体重量が missing か |
| 他現場との食い違い | 同じ管理番号の前の届と、検査の日付が違うか |
月例の期限は、持込期間が1か月を超える届のほぼすべてで出ます。 月例は持込中も毎月受けるものなので、これは誤りではなく「次はいつまでに月例を受ける」という予定です。 一覧では年次の期限切れと分けて、予定として出します。
| させないこと | 理由 |
|---|---|
| 機体重量を機械名や規格から推す | 「0.25㎥級」から重さを推すと、資格の照合が推測の上に乗る |
| 資格の表記を、要る資格に寄せる | 足りない資格が足りているように見える |
| 読めない日付の補完 | 期限の計算そのものがずれる |
| 機械を入れてよいかの判断 | 元請の現場の責任者が決める |
| 法令の解釈 | 安全環境部が対応表で決める |
1行目がいちばん起きやすい失敗です。 バックホウの規格は「0.45㎥」のようにバケットの容量で書かれることが多く、AIはそこから機体重量を推そうとします。推した重量で資格の照合が通ると、機体重量の書き漏れという印そのものが消えます。
指示内容を固定する
あなたは建設会社の支店で、協力会社から届く持込機械等使用届を
入場管理の台帳に記録する担当です。
渡すのは、届1枚の読み取り結果です。
書かれている文字だけを使って、台帳の項目に値を並べてください。
推測で埋めないでください。
【やること】
1. machine_name、spec:機械名と規格の欄をそのまま写す
2. control_no:管理番号の欄の英数字をそのまま写す
3. weight、weight_unit:機体重量の欄の数字と単位をそのまま
(つり上げ荷重・作業床の高さの欄があれば同じように写す)
4. period_from、period_to:持込期間の開始日と終了日
5. annual_inspection、monthly_inspection:
年次と月例の検査の実施日。和暦なら和暦のまま写す
6. operators:運転者ごとに氏名、資格の名称、修了証の番号
7. 項目ごとに status を付ける
read(読めた)/missing(欄に値が無い)/
unreadable(文字はあるが読めない)/not_found(欄が見当たらない)
8. evidence に、根拠にした文字列をそのまま写す
【厳守事項】
- 機体重量を、機械名・規格・バケット容量から推さないでください。
欄に値が無ければ missing です。
- 資格の名称を、別の資格の名称に言い換えないでください。
書かれた表記のまま返してください。
- 読めない日付を、他の日付から推して埋めないでください。
- 管理番号の桁を補ったり、似た番号に直したりしないでください。
- 欄の項目名だけがあって値が空なら missing、
欄そのものが見当たらなければ not_found とし、note に書いてください。
- 機械を入れてよいか、資格が足りているかは書かないでください。
【協力会社の一覧】{companies}
【読み取り結果】{ocr_result}
「資格が足りているかは書かない」を明記しないと、AIは照合まで始めます。 機械名と資格の名称が並んでいると、一般的な知識で「足りている」と書き添えます。その判断の基準は対応表にあり、AIの知識ではありません。
missing と not_found を分けているのは、Form Parser の注意書きのためです。 値の入っていない欄は、欄として返ってこないことがあります。「欄はあったが空だった」と「欄が見つからなかった」を同じにすると、読み取りの取りこぼしを書き漏れとして協力会社に戻してしまいます。
出力形式を固定する
Claude API の構造化出力を使い、次の形のJSONで受け取ります。 output_config.format に JSON スキーマを渡すと、応答がそのスキーマに沿った形になります。
{
"file": "S07_20261008_031.pdf",
"site": "S07",
"company": "○○重機",
"fields": [
{ "name": "control_no", "value": "BH-0452", "status": "read",
"confidence": 0.94, "evidence": "BH-0452", "note": "" },
{ "name": "weight", "value": "", "status": "missing",
"confidence": 0.0, "evidence": "機体重量( )", "note": "" },
{ "name": "period_to", "value": "R8.12.25", "status": "read",
"confidence": 0.90, "evidence": "R8.12.25", "note": "" },
{ "name": "annual_inspection", "value": "R7.11.20", "status": "read",
"confidence": 0.86, "evidence": "R7.11.20", "note": "" }
],
"operators": [
{ "name": "山田 一郎", "license": "車両系(整地)技能講習",
"license_no": "", "status": "read", "evidence": "車両系(整地)技能講習" }
],
"attachments_pages": 2
}
1つ目の理由は、期限と資格の照合をAIの外に出せることです。 対応表や持込期間が変わっても、AIを呼び直さずに Python の計算だけをやり直せます。 上の例では、年次の検査日から1年後が持込期間の終わりより前に来るので、Python が期限の印を付けます。
2つ目は、status で協力会社に戻すものと、支店で読み直すものを分けられることです。 missing は書き直しの候補、unreadable と not_found は画像を見直す候補です。この2つを混ぜると、読めなかっただけの届を協力会社に突き返すことになります。
3つ目は、evidence を残すことです。 上の例の機体重量は、欄の括弧が空のまま写されています。担当者は画像を開く前に、空欄であることを一覧の上で確かめられます。
公式のページでは、列挙の値の大文字・小文字までは保証されないとされているので、status は Python で正規化してから使います。stop_reason が max_tokens のときは出力が途中で切れているので、台帳に書かずに呼び直します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 取込フォルダ | Python で定時に読む | 新しいPDFを処理し、成功したものを処理済みへ移す |
| Document AI | Python のクライアントライブラリから処理の API を呼ぶ | 項目名と値の組、表、信頼度 |
| Claude API | Python から呼ぶ | 届の項目を台帳の形にそろえる |
| 区分と資格の対応表 | Python で読む | 要る資格と、資格の表記の揺れ |
| 入場管理の台帳 | Python で行を足し、印を書き込む | 届の値、期限、印 |
| 一覧 | 30分ごとのファイルとメール | 支店の担当と、その届の現場の職員へ |
台帳への書き込みは、新しい行と印の列だけにします。 前の届の行は書き換えません。書き直された届は新しい行として足し、前の行に「差し替え済み」の印を付けます。 どの届で何が直ったかを後から追えるようにするためです。
現場への「受付済み」の連絡は、この構成からは送りません。 送るのは支店の担当です。
人が確認する
- 期限切れの印を先に見る … 持込期間の途中で年次の期限を迎えるものは、その日付を添えて現場に伝え、入れ替えか持込期間の見直しを協力会社と決めてもらいます
- 資格と機体重量の印を見る … 機体重量の書き漏れは、協力会社に書き直しを頼みます。資格の表記が対応表に当たらないものは、表記の揺れなのか、資格が違うのかを修了証の写しで確かめます
- 他現場との食い違いを見る … 検査の日付が前の届と違う機械は、協力会社に検査の記録を確かめます
- 受付済みを返す … 印の無いものは一覧で件数と協力会社を流し見て、まとめて返します
2番目で、表記の揺れと分かったものは対応表に足します。 足すのは安全環境部の担当です。運用が進むほど、表記で止まる届は減ります。
目標は、400件をならして1件3分です。 印の付く届が3割前後という想定で、それより多い月は、対応表の表記が足りていないか、特定の協力会社の書き方に偏りがあります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 機体重量の欄が見当たらない | not_found。画像で欄を確かめ、空なら書き直しを頼む |
| 資格の表記が対応表に無い | 修了証の写しで確かめる。表記の揺れなら対応表に足す |
| 年次の検査日が持込期間の開始より後 | 日付の書き誤りの可能性。協力会社に確かめる |
| 持込期間の終わりが無い | missing。終わりが決まらないと期限を数えられない |
| 同じ管理番号で機械名が違う | 番号の書き誤りか、協力会社の番号の付け方の問題。確かめる |
| 届でない書類が混ざる | 機械名と管理番号の欄が無いものは、届として扱わず担当者へ |
| 運転者の表が崩れる | 運転者の欄を not_found にし、人が入力する |
| Document AI か Claude API が応答しない | PDFを取込フォルダに残し、次の実行で拾い直す |
3行目は、和暦と西暦の取り違えで起きることが多い例外です。 「R7」と「7年」と「2025」が同じ届に混ざると、Python で直すときにどれかがずれます。日付の直し方は1か所の関数にまとめ、直した前後の値を両方残します。
記録を残す
- スキャンしたPDFと、現場・受け取った日(紙の原本は、今までどおり現場の書類として保管する)
- Document AI が返したJSONの全文
- Claude API に渡した入力と、返ってきたJSON
- 台帳に書き込んだ値と印、そのとき使った対応表の版
- 書き直しを頼んだ日と、書き直された届との対応
- 受付済みを返した日と、返した担当
対応表の版を残すのは、表を直したときに過去の印の意味が変わるからです。 表記を1つ足すと、それまで止まっていた届が通るようになります。いつの時点の表で受け付けたかが分からないと、後から受付の妥当性を説明できません。
04実装レベルの3段階
最小構成では件数がさばけません。 確かめるための段階です。 半自動化で、1件9分が5分程度になります。 書き写しはなくなりますが、期限と資格を一覧表で照らすのはまだ人です。本格構成で3分になり、この段階が本記事の想定です。 差が大きいのは、対応表を開いて機械の区分を探す作業がなくなるからです。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、届に書かれる資格の表記の揺れが集まります。 それを対応表に入れてから照合を足すほうが、表記で止まる届が少なくて済みます。
05工数削減シミュレーション
導入後 400件 × 3分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 同時に10を超える現場を持ち、協力会社からバックホウ・移動式クレーン・高所作業車などの持込機械等使用届を紙やスキャンで毎月数百件受け取っている元請の建設会社。届の点検の日付と運転者の資格を、現場の職員や支店の担当が1件ずつ目で見ている場合。持ち込んだ後に、年次の検査の期限が切れていたと分かったことがある場合。社内にPythonを動かせるサーバーか常時起動のPCがある場合。
- 持込機械の届出をすでに入退場管理のシステムで受け付けており、紙の届がほとんど無い場合。現場が1〜2か所で、所長が全部の届を目で見て足りる場合。協力会社ごとに届の書式がまったく違い、様式をそろえられない場合。なお、機械を現場に入れてよいか、運転させてよいかの判断は、この構成では代替できません。
07最小構成で試す方法
- 先月受け付けた届から30件を選ぶ(持込期間の長いもの、運転者が複数のもの、書き直しを頼んだものを入れる)
- 30件のPDFを、手元のAIサービスの画面に1件ずつ貼り付ける
- 「この届から、機械名、規格、管理番号、機体重量、持込期間、年次と月例の検査日、運転者と資格を書き出してください。空欄は空欄のまま、推測で埋めないでください」と指示する
- 書き出された値を、台帳に書き写した値と比べる
- あわせて、30件について、年次の検査日から1年後が持込期間の終わりより前に来るものを、表計算ソフトの式で数える
5番目はAIを使いません。 台帳の日付だけで数えられます。この数が0でなければ、読み取りより先に、期限を持込期間の終わりで数える運用を始める価値があります。
| 出てきた内容 | 判断 |
|---|---|
| 台帳に書き写した値とほぼ同じになった | Document AI と Python のつなぎに進む |
| 機体重量を規格から推して埋めた | 指示の書き方で直る。構成は有効 |
| 手書きの日付が多く読めない | スキャンの設定が先。 AIの問題ではない |
| 持込期間中に期限を迎える機械が見つかった | 読み取りの前に、期限の数え方を変える |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 期限を受付の日で数えてしまう | 持込期間の終わりの日で数える。 途中で期限が来るものは日付を付けて出す |
| 機体重量を規格から推して埋める | 指示で禁じ、missing の件数が急に0になった週を疑う |
| 資格の表記が対応表に当たらない | 表記の揺れを集めて足す。安全環境部が管理する |
| 欄が返ってこないものを書き漏れとする | not_found と missing を分ける |
| 和暦と西暦が混ざって期限がずれる | 日付の直し方を1か所にまとめ、直す前の値も残す |
| 月例の期限が毎回出て一覧が埋まる | 年次の期限切れと分け、予定として出す |
| 添付の日付が届の値に混ざる | 1ページ目だけを届として読む |
| 同じ機械の誤りが別の現場で繰り返される | 管理番号で他現場の記録と照らす |
| 受付済みを自動で返す | 返すのは支店の担当。 印が無くても自動では返さない |
| 対応表を法令の読み方の議論のまま止める | まず自社の一覧表を写し、運用しながら直す |
| 国外で処理することを確かめていない | 日本のリージョンが無い。導入前に社内で確かめる |
上の2行が、この構成の失敗のほとんどです。 どちらも「受け付けた時点では問題が無いように見える」という同じ形をしています。期限を数える日と、空欄を空欄のまま残すこと。 この2つは設計で守ります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 協力会社の名称、機械の管理番号と検査の日付、運転者の氏名と資格の修了証の番号です。
- 国外で処理することを確かめる … Document AI のリージョンの一覧に日本はありません。運転者の氏名と修了証の番号を国外のリージョンで処理してよいかを、社内で確かめます
- 資格の判断をAIに任せない … AIが返すのは届に書かれた表記までです。要る資格の判断は対応表、つまり安全環境部の判断に置きます
- 機械を入れてよいかを一覧に任せない … 印の無い届でも、受付済みを返すのは人です。元請として機械を受け入れる責任は、この構成では移りません
- 修了証の写しの扱いを決める … 添付の修了証の写しは個人の情報です。保管する場所と期間を決め、台帳には番号だけを残します
- 協力会社への伝え方に気を付ける … 期限の印は「その日までに入れ替えが要る」という予定です。協力会社を責める連絡にせず、日付と根拠の欄を添えて伝えます
誤りが起きた場合のリスクは、期限の切れた機械や、資格の足りない運転者を現場に入れてしまうことです。 前者は期限を受付の日で数えると起き、後者は機体重量を推して埋めると起きます。どちらも「書かれていない値を作らない」「数える日を間違えない」という2つの規則で防ぎます。
10まず何から始めるか
1週目:期限を持込期間の終わりで数え直す
いま持込中の機械について、台帳の年次の検査日から1年後が持込期間の終わりより前に来るものを、表計算ソフトの式で数えます。AIを使わずにできる作業で、この構成が何を拾うためのものかが、数字で分かります。
2週目:30件で試す
先月の届から30件を選び、手元のAIサービスに貼り付けて値を書き出させます。機体重量を推して埋めていないかを最優先で見ます。
3週目:区分と資格の対応表を作る
安全環境部の一覧表を、1行ずつの対応表に並べ直します。 30件で出てきた資格の表記を、揺れの列に入れます。
4週目:取込フォルダから一覧までをつなぐ
Python で取込フォルダを見張り、Document AI と Claude API を呼び、値を一覧に書き出すところまで作ります。この時点では照合をせず、読み取りの精度だけを見ます。
2か月目: 期限の計算と資格の照合を足し、一覧を現場にも送ります。3か月目以降: 他現場の記録との照合を足し、1件9分が何分になったかを実測します。表記で止まる届が月に数件まで減った時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 車両系建設機械について一年以内ごとに一回(第167条)、一月以内ごとに一回(第168条)定期に自主検査を行うこと。年次の自主検査の記録を三年間保存すること(第169条)。その日の作業を開始する前にブレーキ及びクラッチの機能を点検すること(第170条)。機体重量が三トン未満の建設機械の運転が特別の教育を要する業務であること(第36条第9号) | e-Gov 法令API: 労働安全衛生規則 | 2026-10-08 |
| 機体重量が三トン以上の建設機械の運転、つり上げ荷重が一トン以上の移動式クレーンの運転、作業床の高さが十メートル以上の高所作業車の運転などが就業制限の業務であること(第20条) | e-Gov 法令API: 労働安全衛生法施行令 | 2026-10-08 |
Form Parser がOCRのテキストに加えてキーと値のペア、チェックボックス、表を抽出すること。言語の一覧で日本語(ja)が手書きに対応する言語として示されていること。オンラインの処理が1回の要求で最大15ページであること | Google Cloud: Processor list | 2026-10-08 |
| チェックボックスのモデルがラジオボタンに対応しないこと。値の入っていないキーと値の組を確実には読み取れないこと | Google Cloud: Form Parser | 2026-10-08 |
項目名と値の組が formFields の fieldName/fieldValue で、チェックボックスが valueType の filled_checkbox/unfilled_checkbox で、表が headerRows/bodyRows で返ること | Google Cloud: Handle the processing response | 2026-10-08 |
| 対応形式に PDF や画像が含まれること。スキャンは最低200dpiが望ましく300dpi以上が一般に最もよいこと | Google Cloud: Supported files | 2026-10-08 |
マルチリージョンが us と eu で、単一リージョンにシンガポール(asia-southeast1)などがあり、日本のリージョンが一覧に無いこと | Google Cloud: Regional and multi-regional support | 2026-10-08 |
output_config.format に JSON スキーマを渡して応答の形を固定できること。列挙の値の大文字・小文字は保証されないこと。max_tokens で打ち切られたときはスキーマに合わない出力になりうること | Claude API: Structured outputs | 2026-10-08 |
どの機械にどの資格が要るか、機械を現場に入れてよいかは、自社の安全環境部と現場の責任者が決めてください。 本記事は各製品の公式ページと法令の条文で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0891)についてのご相談はこちらから。
