Media > AI活用ユースケース > 経理 > 建設現場で毎日手書きされる協力会社の出面表を読み取り、日付・会社・職種・人数を労務の集計表にそろえて、入場記録との食い違いを拾う

建設現場で毎日手書きされる協力会社の出面表を読み取り、日付・会社・職種・人数を労務の集計表にそろえて、入場記録との食い違いを拾う

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

建設現場で協力会社の職長が毎日手書きする出面表を読み取り、日付・会社・職種・人数を労務の集計表にそろえます。入退場の記録と人数が合わない日と会社を、月末を待たずに経理と工事担当へ出します。

サマリー
生成AI
ChatGPT/Claude/Gemini
AIサービス
Azure AI/Google Document AI
連携・自動化
Google Apps Script/Python
対象業界
建設
対象部門
経理
対象業務
データ入力・転記/内容確認・チェック
主な課題
人手が足りない/入力作業が多い/確認ミスが多い
AIで行う処理
読み取り(OCR)
主な効果
入力漏れ削減/品質標準化/工数削減
導入難易度
★★★☆☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
条件付き
現在工数
50h/月
AI導入後
15h/月
想定削減
70%
年間削減
420h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 現場事務所で、協力会社の職長が出面表に会社名・職種・人数・作業内容を書き、署名する
  2. 工事担当が夕方に出面表を見て、確認の印を押す
  3. 月末に、工事担当が1か月分の出面表をまとめて本社の経理へ送る(郵送または持参)
  4. 経理の担当が1枚ずつ開き、会社名を協力会社マスタで探し、職種と人数を労務の集計表へ打ち直す
  5. 入退場の記録を現場ごとに書き出し、日ごと・会社ごとの人数を出面表と見比べる
  6. 合わない日を工事担当に問い合わせ、返事を待つ
  7. 協力会社から届く常用の人工の請求を、集計表と突き合わせる
導入後(After)
  1. 人工事担当が夕方に出面表を確かめて印を押し、現場事務所の複合機でスキャンする
  2. 自動スキャンの保存をきっかけに Python のプログラムが動き、現場と日付を確かめる
  3. 自動Google Document AI の Form Parser が、上部の欄、協力会社の行の表、読み取りの信頼度を返す
  4. 自動Claude API が、行ごとに会社名・職種をマスタのコードにそろえ、人数を書かれたとおりに写す
  5. 自動Python が人数を数値に直し、入退場の記録の日ごと・会社ごとの人数と比べる
  6. 自動食い違いのある日と会社、マスタに対応しない会社名を、翌朝に工事担当へ知らせる
  7. 人工事担当が職長に確かめ、どちらに合わせるかと理由を記録する
  8. 自動確かめの済んだ行を労務の集計表に入れる
  9. 人月末に経理が、集計表と協力会社の常用の請求を突き合わせる
  10. 人確かめの済んでいない食い違いが残っていれば、経理が工事担当に問い合わせる
各工程の詳しい説明を読む
  1. 現場事務所で、協力会社の職長が出面表に会社名・職種・人数・作業内容を書き、署名する
  2. 工事担当が夕方に出面表を見て、確認の印を押す
  3. 月末に、工事担当が1か月分の出面表をまとめて本社の経理へ送る(郵送または持参)
  4. 経理の担当が1枚ずつ開き、会社名を協力会社マスタで探し、職種と人数を労務の集計表へ打ち直す
  5. 入退場の記録を現場ごとに書き出し、日ごと・会社ごとの人数を出面表と見比べる
  6. 合わない日を工事担当に問い合わせ、返事を待つ
  7. 協力会社から届く常用の人工の請求を、集計表と突き合わせる

(a)月末に打ち直しが集中する。 30現場分、約600枚が月末にまとめて届きます。経理の3名は、そこから請求の締めまでの数日で打ち直しと照合を終えなければなりません。 急ぐほど、照合が省かれます。

(b)会社名と職種の揺れで集計が割れる。 「○○工業」と「(株)○○」を別の会社として打つと、集計表の上で人工が2つに割れます。月末の常用の請求と突き合わせたときに合わず、そこで初めて気づきます。

(c)食い違いの問い合わせが1か月遅れる。 経理が出面表と入場記録の食い違いに気づくのは月末で、工事担当に問い合わせても、3週間前のある日に誰が来ていたかは覚えていません。 職長に確かめても同じです。結局、出面表の人数のまま集計されます。

(d)二次の協力会社が見えない。 一次の会社名の行に、二次の会社の人数をまとめて書く職長がいます。入場記録は技能者ごとに所属が分かれているので、出面表と入場記録で会社の単位が合わず、照合のたびに担当が頭の中で組み替えています。

  1. 【人】 工事担当が夕方に出面表を確かめて印を押し、現場事務所の複合機でスキャンする
  2. 【自動】 スキャンの保存をきっかけに Python のプログラムが動き、現場と日付を確かめる
  3. 【自動】 Google Document AI の Form Parser が、上部の欄、協力会社の行の表、読み取りの信頼度を返す
  4. 【自動】 Claude API が、行ごとに会社名・職種をマスタのコードにそろえ、人数を書かれたとおりに写す
  5. 【自動】 Python が人数を数値に直し、入退場の記録の日ごと・会社ごとの人数と比べる
  6. 【自動】 食い違いのある日と会社、マスタに対応しない会社名を、翌朝に工事担当へ知らせる
  7. 【人】 工事担当が職長に確かめ、どちらに合わせるかと理由を記録する
  8. 【自動】 確かめの済んだ行を労務の集計表に入れる
  9. 【人】 月末に経理が、集計表と協力会社の常用の請求を突き合わせる
  10. 【人】 確かめの済んでいない食い違いが残っていれば、経理が工事担当に問い合わせる

7番目が、この設計の分かれ目です。 食い違いを確かめるのは翌朝の工事担当で、月末の経理ではありません。前日の出来事なら、職長も工事担当も覚えています。 経理が月末に見るのは、確かめの済んだ集計表と、確かめの済んでいない少数の行だけになります。

6番目で翌朝に知らせるのは、(c)の失敗が「遅れ」から来ているからです。 毎日の処理にしても、月末にまとめて知らせるのでは意味がありません。

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

構成図
出面表(現場ごと1日1枚)
   │  夕方に工事担当がスキャン
   ▼【トリガー】共有フォルダへの保存
Python ── 現場と日付の確認
   ▼
Google Document AI(Form Parser)
   │   上部の欄、協力会社の行の表、信頼度を返す
   ▼
Claude API ── 会社名・職種をマスタのコードにそろえる、人数を写す
   ▼
Python ── 人数を数値に直し、入退場の記録と日ごと・会社ごとに比べる
   ├──▶ 食い違い・マスタに無い会社名 ── 翌朝に工事担当へ
   ▼
【工事担当が職長に確かめて記録】
   ▼
労務の集計表 ── 月末に経理が常用の請求と突き合わせる
役割想定する製品代替候補
OCRGoogle Document AI(Form Parser)Azure AI Document Intelligence
生成AIClaude API(会社名・職種のコードへの対応付け)OpenAI API、Gemini API
連携Python(フォルダの監視、集計表への書き込み、通知)Google Apps Script
集計Python(入退場の記録との比較と月次の集計)Google Apps Script
保管社内のファイルサーバーGoogle ドライブ

新しく作るのは、協力会社マスタの「呼び名」の列と、職種のコード表の2つです。 マスタには正式な会社名しかないので、現場で使われている略称や屋号を、会社ごとに並べて持たせます。 職種も、自社の原価の区分に合わせたコード表を作ります。

土台は Document AI の Form Parser です。 公式のプロセッサ一覧では、OCRのテキストに加えてキーと値のペア、チェックボックス、表を抽出するとされ、言語の一覧で日本語(ja)は手書きに対応する言語として示されています。上部の「現場名」「日付」はキーと値のペアとして、協力会社の行は表として読めます。

Form Parser の注意書きのうち、この題材で効くのは表の制限です。 公式のページでは、行や列をまたぐセルの無い、単純な表から抽出するとされています。会社名のセルを2行にまたがせ、職種ごとに人数を書かせる書式は、そのままでは行がずれます。 出面表の書式を「1行1会社1職種」にそろえるのが、最初の準備作業です。

入退場の記録の取り出し方は、現場で使っている仕組みによります。 国土交通省の資料では、入退場のデバイスとしてカードリーダー、顔認証、スマートフォンなどがあり、API連携の認定システムを通じてCCUSと連携する形が示されています。この構成では、その仕組みから日ごと・会社ごとの人数を書き出したファイルを受け取ることを前提にし、書き出しの方法は製品ごとに確かめます。

処理する場所は、リージョンの一覧から選びます。 マルチリージョンの us と eu、シンガポール(asia-southeast1)などの単一リージョンがあり、日本のリージョンはありません。 出面表には会社名と人数、職長の署名が書かれているので、国外で処理してよいかを社内で確かめます。

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

Step1

処理の起点を決める

共有フォルダにスキャンが保存されたことを起点にします。 工事担当が夕方に確認の印を押した後、現場事務所の複合機でスキャンします。印を押す前の出面表はスキャンしません。 職長が後から書き足すことがあるためです。

保存先は現場ごとに分け、ファイル名に現場コードと日付を付けます。 複合機の宛先を現場ごとに登録しておけば、工事担当が手で名前を付ける必要はありません。

Python のプログラムは、毎日21時に1日分をまとめて処理し、翌朝7時に食い違いを知らせます。出面表は夕方に集中して届き、照らす相手の入退場の記録もその日の退場が終わらないとそろわないので、1枚ずつの即時処理にはしません。 処理が終わったファイルは処理済みのフォルダへ移し、移すのは成功したときだけにします。

Step2

入力データを集める

データ中身取得元
出面表のスキャンPDF。現場コード、日付共有フォルダ
読み取り結果上部の欄のキーと値、協力会社の行の表、セルごとの信頼度Google Document AI
協力会社マスタ会社コード、正式な会社名、現場での呼び名の一覧、一次・二次の別、一次の会社協力会社マスタ(呼び名の列を足す)
職種のコード表職種コード、名称、揺れのある書き方の一覧新しく作る
現場の施工体制その現場に入っている協力会社の一覧施工体制台帳
入退場の記録日ごと・会社ごとの入場した人数入退場の仕組みから書き出したファイル

質を決めるのは、現場の施工体制の一覧です。 出面表の会社名をマスタ全体から探すと、略称の似た別の会社に当たることがあります。その現場に入っている会社の中から探せば、候補は10社前後に絞られます。

一次の会社の列は、(d)の失敗のために持ちます。 入退場の記録が二次の会社ごとに分かれていて、出面表が一次の会社でまとめて書かれていれば、二次の人数を一次に合算してから比べます。

Step3

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

読み取りは、Python から Form Parser のプロセッサを呼ぶだけです。オンラインの処理は1回の要求で最大15ページで、出面表は1枚ずつ送るので上限に届きません。

取るものどこから何に使うか
上部の欄各ページの formFields(fieldName/fieldValue)現場名、日付
協力会社の行各ページの tables(headerRows/bodyRows)会社名、職種、人数、作業内容
信頼度各要素の layout の confidence人数のセルが確かに読めたかの区別
位置layout の boundingPoly確認の画面で、出面表の該当行に枠を出す

現場名と日付は、読み取った値よりファイル名を優先します。 手書きの日付は書き損じがあり、読み違いもあります。ファイル名の日付と読み取った日付が違えば、知らせに載せて工事担当に確かめます。

入退場の記録は、現場で使っている仕組みから日ごと・会社ごとの人数を書き出したCSVを、毎日決まったフォルダに置く形にします。書き出しを自動にできる仕組みもあれば、工事担当が画面から書き出す必要がある仕組みもあります。どちらにするかは、現場で使っている製品の機能を確かめて決めます。

Step4

AIへ渡す前に整形する

  1. 形式の確認 … 公式の対応形式は PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などです。複合機の保存は PDF にします
  2. 解像度の確認 … 公式のページでは、スキャンは最低200dpiが望ましく、300dpi以上が一般に最もよいとされています。人数の数字が小さく書かれることが多いので、300dpiに設定します
  3. 1ファイル1枚にそろえる … 数日分をまとめてスキャンしたものは、ページで分け、ページごとに日付を確かめます
  4. 現場と日付の確認 … ファイル名の現場コードがマスタに無ければ処理を止めます
  5. 出面表が無い日の確認 … 入退場の記録があるのに出面表が届いていない日を拾います
  6. 同じ日の出面表が2枚ある場合 … 両方を工事担当に回し、どちらかを捨てない

5番目は、この構成で初めて見えるものです。 入場記録はあるのに出面表が無い日は、出面表を書き忘れたのか、スキャンを忘れたのかのどちらかです。月末に気づくと、どちらだったかを確かめようがありません。

6番目で両方を回すのは、書き直しの可能性があるからです。 職長が書き損じて新しい用紙に書き直し、古いほうも現場事務所の机に残ってスキャンされることがあります。どちらが現場で合意した人数かは、印を押した工事担当にしか分かりません。 新しいほうを機械的に選ぶと、印の無い下書きを集計に入れることがあります。

Step5

AIに処理させる

させるのは、出面表の各行を、会社コード・職種コード・人数(書かれたとおり)・作業内容にそろえることです。 人数の比較も、集計も、Python が行います。

させること中身判断できないときの扱い
会社の対応付け書かれた会社名を、その現場の施工体制にある会社のコードに対応させる決まらなければ unmatched
職種の対応付け書かれた職種を、職種のコード表に対応させる決まらなければ unmatched
人数の写し人数の欄を書かれたとおりに文字列で写す(「4+1」もそのまま)読めなければ unreadable
作業内容の写し作業内容を原文のまま写す空欄なら空
署名の有無職長の署名欄に記入があるか空欄なら missing

人数は、計算させずに写させます。 「4+1」を5にするのは Python です。AIが足すと、「4+1」が見習い1人を分けて書いたものなのか、別の会社の1人を書き足したものなのかという情報が消えます。 写した文字列を残しておけば、工事担当が確かめるときに元の書き方が分かります。

させないこと理由
人数の計算・補正「4+1」の内訳の情報が消える。計算は Python で行う
入退場の記録との比較Python が日ごと・会社ごとに比べる
どちらの人数が正しいかの判断工事担当が職長に確かめて決める
施工体制に無い会社の推測似た会社に寄せない。unmatched で人に回す
常用の人工の単価や金額の計算支払に関わる。契約に沿って経理が行う

4行目がいちばん起きやすい失敗です。 施工体制に無い会社の名前が書かれていると、AIは似た名前の会社に寄せたくなります。その現場に施工体制の登録の無い会社が入っていた、という事実は、元請にとって大事な知らせです。寄せた瞬間に消えます。

Step6

指示内容を固定する

あなたは建設会社の経理部で、現場の出面表の読み取り結果を
労務の集計の形にそろえる立場です。OCRが返した結果だけを見て、
協力会社の行を1つずつ写してください。推測で埋めないでください。

【やること】
1. 各行の会社名を、下の「この現場の協力会社の一覧」の会社コードに対応させる
2. 各行の職種を、下の「職種のコード表」の職種コードに対応させる
3. 人数の欄を、書かれたとおりの文字列で写す
4. 作業内容を原文のまま写す
5. 職長の署名欄に記入があるかを写す

【厳守事項】
- 会社名は、一覧の正式な名前か呼び名に一致するときだけ対応させてください。
  一覧に無い会社名は company_code を unmatched にし、
  written_company に書かれたとおりに写してください。
  似た名前の会社に寄せないでください。
- 人数は計算しないでください。「4+1」「4(1)」は、そのまま写してください。
- 人数の欄が空欄なら status を blank、文字はあるが読めなければ
  unreadable にしてください。空欄と読めない欄を混ぜないでください。
- 1つの行に2つの職種が書かれているときは、行を分けずに
  trade_code を multiple にし、written_trade に原文を写してください。
- どちらの人数が正しいか、入場の記録と合っているかを書かないでください。
- 単価や金額を書かないでください。
- 出面表ではない書類と判断した場合は、document_type に種類を書いてください。

【読み取り結果】{ocr_result}
【この現場の協力会社の一覧(コード、正式名、呼び名)】{site_contractors}
【職種のコード表(コード、名称、揺れのある書き方)】{trade_codes}

「似た名前の会社に寄せない」を2度にわたって書いているのは、書かないと必ず寄せるからです。 一覧を渡されたAIは、その中から最も近いものを選ぼうとします。選ばないという選択肢を、明示しておく必要があります。

行を分けさせないのは、人数の内訳が分からないからです。 「鉄筋・型枠 6」を2行に分けると、AIは3人ずつに割るか、片方に6人を入れます。どちらも書かれていない情報です。

Step7

出力形式を固定する

次の形のJSONで受け取ります。 Claude API の構造化出力(output_config.format に JSON スキーマを渡す方式)を使い、形を固定します。

{
  "site_code": "",
  "work_date": "",
  "document_type": "attendance_sheet",
  "rows": [
    {
      "company_code": "",
      "written_company": "",
      "trade_code": "",
      "written_trade": "",
      "headcount_text": "",
      "status": "read | blank | unreadable",
      "work_description": "",
      "foreman_signature": "present | missing",
      "row_ref": ""
    }
  ]
}

1つ目の理由は、書かれたままの値とコードを並べて持てることです。 written_company と company_code が並んでいれば、工事担当はAIがどの書き方をどの会社に対応させたかを1行で確かめられます。呼び名の一覧に足すべき書き方も、ここから拾えます。

2つ目は、比較を Python の規則で行えることです。

条件扱い
出面表の人数 > 入場記録の人数over(カードのかざし忘れか、多く書いたかを確かめる)
出面表の人数 < 入場記録の人数under(出面表への書き漏れか、別の現場の人の混入かを確かめる)
入場記録にあって出面表に行が無い会社missing_row
出面表にあって施工体制に無い会社(unmatched)unregistered
人数が unreadable、または署名が missingcheck_sheet

over と under を分けるのは、確かめる相手が違うからです。 over なら職長と技能者に入場の仕方を、under なら出面表の書き方を確かめます。どちらも、確かめた結果と理由を記録してから集計表に入れます。

3つ目は、unregistered が施工体制の点検にもなることです。 施工体制の登録の無い会社が出面表に出てくれば、登録の漏れか、届け出の無い再下請かを工事担当が確かめる必要があります。

公式のページでは、列挙の値の大文字・小文字までは保証されないとされているので、status などは Python で小文字にそろえてから使います。stop_reason が max_tokens のときは出力が途中で切れているので、集計表に書かずに呼び直します。

Step8

システムへ連携する

つなぎ先方式内容
共有フォルダPython で毎日21時に処理その日の出面表と入退場の記録のファイルを読む
Google Document AIAPI呼び出し上部の欄、協力会社の行の表、信頼度を返す
Claude APIAPI呼び出し会社名・職種のコードへの対応付け
協力会社マスタ・施工体制スプレッドシートの読み取り呼び名、一次・二次の別、現場の協力会社
労務の集計表スプレッドシートへの追記確かめの済んだ行だけを入れる
通知社内のチャットまたはメール翌朝7時に、現場ごとの食い違いを工事担当へ

工事原価の管理ソフトへは書き込みません。 労務の集計表から原価の管理ソフトへの取り込みは、月末に経理がこれまでの手順で行います。 確かめの済んでいない行が原価に入ると、後から直す手間が増えます。

入退場の仕組みにも書き込みません。 食い違いの理由がカードのかざし忘れであっても、入退場の記録を直すかどうかは、その仕組みの運用の決まりに沿って工事担当が判断します。

Step9

人が確認する

工事担当が見るのは、自分の現場の食い違いの知らせだけです。 食い違いの無い日は、知らせが来ません。

  1. unregistered を先に見る … 施工体制に無い会社です。登録の漏れか、届け出の無い再下請かを、その日のうちに確かめます
  2. over と under を見る … 出面表の該当行に枠が出るので、そこだけを見て、職長に確かめます
  3. 確かめた結果を記録する … どちらの人数に合わせたか、理由(かざし忘れ、書き漏れ、別現場の混入など)を選びます
  4. check_sheet を見る … 読めなかった人数、署名の無い行です。出面表の原本で確かめます

3番目の理由は、選択肢から選ぶ形にします。 自由に書かせると、月末に経理が集計できません。理由ごとの件数が見えると、カードのかざし忘れが多い現場や会社が分かります。

経理が見るのは月末です。 確かめの済んだ集計表と、協力会社の常用の請求を突き合わせます。目標は、600枚をならして1枚1.5分です。 内訳は、工事担当の確かめと経理の月末の突き合わせの合計です。

Step10

例外に対処する

起きること対応
入退場の記録のファイルが届いていない比較をせず、読み取りと対応付けだけを行う。翌朝の知らせに「比較できず」と載せる
ファイル名の日付と、出面表の日付が違う工事担当に確かめる。どちらかに寄せない
行や列がずれて読まれた表を集計表に入れず、原本から工事担当が確かめる。書式の見直しの候補にする
1行に2つの職種(multiple)工事担当が職長に内訳を確かめる
人数が「4+1」Python が5として比べ、元の書き方を残す
二次の会社が一次の行にまとめて書かれているマスタの一次の会社の列で合算して比べる
出面表以外の書類が混ざるdocument_type を見て処理しない
OCR・AIが応答しないフォルダに残し、翌日の処理で再実行。処理済みへ移すのは成功時だけ

1行目は、導入の初めに多く起きます。 入退場の記録の書き出しが工事担当の手作業になっている現場では、書き出しを忘れた日は比較ができません。 その日の分は、翌日の処理でまとめて比べます。

Step11

記録を残す

  • 元のスキャンと、スキャン日時・現場・スキャンした工事担当
  • OCRが返したJSONの全文と、Claude API の応答の全文
  • 比較に使った入退場の記録のファイルと、その書き出し日時
  • 比較の結果(over、under など)と、工事担当が確かめた結果と理由
  • 協力会社マスタと施工体制の、そのときの内容
  • 会社ごと・現場ごとの食い違いの発生率と理由の内訳

4つ目が、この構成で最も大事な記録です。 常用の人工の請求で協力会社と金額が合わないとき、どの日のどの食い違いを、誰が、どういう理由でどちらに合わせたかをたどれます。

最後の行は、現場の運用を見直す材料になります。 かざし忘れが多い現場なら、入退場の機器の置き場所に理由があることがあります。

04実装レベルの3段階

最小構成:スキャンを手でAIの画面に貼り、行を会社・職種・人数にそろえさせる / 1枚ごとの読み取りと対応付け
半自動化:上記+OCRのAPIを呼び、そろえた行を集計表の確認前のシートに書き出す / 読み取りと集計
本格構成:上記+毎日の処理で入退場の記録と比べ、食い違いを翌朝に工事担当へ知らせ、確かめの結果を記録する / 集計と照合の全体

最小構成は確かめるための段階です。 1枚ずつ貼り付けるので、600枚には使えません。 半自動化で、1枚5分が2.5分程度になります。 打ち直しは無くなりますが、入退場の記録との照合と問い合わせは月末に経理が行うままです。本格構成で1.5分になり、この段階が本記事の想定です。 差が大きいのは、照合が毎日の処理に移り、問い合わせが翌朝の工事担当の確かめに置き換わるためです。 段階を飛ばさないでください。 半自動化のシートを1か月見ると、どの会社名が unmatched になりやすいかが分かります。それを呼び名の一覧に足してから照合を始めるほうが、工事担当への知らせが空振りしません。

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

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

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

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

AI活用について相談する

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

向いている
  1. 同時に20〜40の現場を動かし、現場事務所で協力会社の職長が毎日の出面(人数)を紙の出面表に書いている建設会社。月末に経理や工事課が出面表を集めて労務の集計表へ打ち直し、常用の人工の請求と突き合わせている場合。入退場をカードリーダーや顔認証で記録しているのに、出面表と照らす作業は手で行っている場合。
向いていない
  1. 出面の記録をすでに入退場の仕組みや現場管理のアプリに一本化しており、手書きの出面表が無い場合。現場が数か所で、工事担当が毎日人数を目で確かめて足りる場合。入退場を記録する仕組みが現場に無く、照らす相手のデータが無い場合(読み取りと集計までは使えます)。なお、協力会社への支払額の決定は、この構成では代替できません。

07最小構成で試す方法

  1. 先月の出面表から、3現場・各5日分の計15枚を選ぶ(会社名の揺れが多い現場と、二次の会社が入っている現場を必ず入れる)
  2. その15枚について、集計表に打ち直した内容と、入退場の記録を用意する
  3. スキャンを手元のAIサービスの画面に1枚ずつ貼り付け、その現場の協力会社の一覧と職種の一覧も貼る
  4. 「この出面表の各行を、会社・職種・人数・作業内容の表にしてください。会社名と職種は一覧のどれに当たるかを示し、一覧に無いものは『該当なし』としてください。人数は書かれたとおりに写し、計算しないでください」と指示する
  5. 出てきた表を、打ち直した内容と突き合わせ、人数を手で入場記録と比べる
出てきた内容判断
打ち直しとほぼ一致した。会社の対応付けも合っていたOCRとプログラムの連携に進む
一覧に無い会社を似た会社に寄せた指示の書き方で直る。構成は有効
行がずれて会社と人数が入れ替わった書式の見直しが先。 結合セルを探す
人数の数字が読めない枚数が多いスキャンの設定が先。 AIの問題ではない

手で入場記録と比べる5番目の作業も、省かないでください。 15枚分の食い違いの件数と理由が、この構成で工事担当に毎日届く知らせの量の見積もりになります。

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

問題対策
一覧に無い会社を似た会社に寄せるunmatched を許し、寄せないことを指示に明記する
「4+1」をAIが足す・割る人数は文字列で写させ、計算は Python で行う
会社のセルが結合されて行がずれるForm Parser は単純な表が対象。1行1会社1職種にする
二次の会社で人数が合わないマスタに一次の会社の列を持ち、合算してから比べる
入退場の記録が届かない日がある比較せずに「比較できず」と知らせる。翌日にまとめて比べる
食い違いの理由が自由記述でばらばら選択肢から選ぶ形にする
知らせが多すぎて読まれない呼び名の一覧を育ててから照合を始める
確かめの前の行が原価に入る集計表には確かめの済んだ行だけを入れる
日付の書き損じファイル名の日付を優先し、食い違いは確かめに回す
国外での処理を確かめていない日本のリージョンが無い。導入前に社内で確かめる

上の2行が、この構成の失敗のほとんどです。 どちらも、AIが書かれていない情報を足してしまうという同じ型の失敗です。会社を寄せることも人数を割ることも、AIにとっては親切ですが、元請にとっては事実が消えることです。

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

この構成で扱うデータ: 協力会社の名前、現場ごとの日々の人数と作業内容、職長の署名です。入退場の記録には技能者ごとの入場の時刻が含まれることがありますが、この構成では日ごと・会社ごとの人数だけを使います。

  1. 国外で処理することを確かめる … Document AI のリージョンの一覧に日本はありません。出面表の内容を国外のリージョンで処理してよいかを、社内の情報管理の決まりで確かめます
  2. 技能者ごとの記録をAIに渡さない … 入退場の記録は Python が日ごと・会社ごとの人数に集計してから比べます。技能者の名前や入場の時刻は、AIにも知らせにも出しません
  3. 支払額を決めさせない … この構成が出すのは人数の食い違いと確かめの結果までです。常用の人工の単価や支払額は、契約に沿って経理が決めます
  4. 協力会社を責める材料にしない … 食い違いの理由の内訳は、運用の見直しの材料です。特定の会社の請求を疑う根拠として一方的に使うと、現場の協力関係が崩れます
  5. 元の出面表を残す … 現場での合意の記録は、職長が書き工事担当が印を押した紙です。スキャンと原本を残し、AIが整えたデータを原本の代わりにしません

誤りが起きた場合のリスクは、協力会社に払うべき人工を払わないことと、払わなくてよい人工を払うことの2つです。 どちらも、AIの対応付けの誤りが確かめを経ずに集計に入ると起きます。確かめの済んだ行だけを集計表に入れる設計は、外さないでください。

10まず何から始めるか

1週目:呼び名と職種のコードを集める

先月の出面表を3現場分めくり、会社名の書き方と職種の書き方を全部書き出します。 それを協力会社マスタの呼び名の列と、職種のコード表にします。

2週目:15枚で試す

3現場・各5日分の出面表を手元のAIサービスに貼り付け、行をそろえさせます。一覧に無い会社を寄せていないか、人数を計算していないかを最優先で見ます。 手で入場記録と比べ、食い違いの件数を数えます。

3週目:入退場の記録の書き出しを確かめる

現場で使っている入退場の仕組みごとに、日ごと・会社ごとの人数を書き出せるか、自動で書き出せるかを確かめます。あわせて、出面表の書式を「1行1会社1職種」に直します。

4週目:フォルダから集計表までをつなぐ

Python で毎日の処理を作り、OCRを呼び、そろえた行を確認前のシートに書き出すところまで作ります。この時点では入退場の記録との比較を出さず、経理がこれまでどおり打ち直した内容と見比べます。

2か月目: 入退場の記録との比較を足し、3現場で工事担当への翌朝の知らせを始めます。3か月目以降: 全現場に広げ、1枚5分が何分になったかを実測します。食い違いの理由の内訳が毎月見えるようになり、月末の常用の請求の突き合わせで問い合わせが残らなくなった時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-10-08/最終更新:2026-10-08
確認した内容情報源確認日
CCUSの就業履歴が技能者のカードタッチにより日々登録されること。元請・下請で就業履歴(月別カレンダー)を相互に確認できる機能があること。入退場のデバイスにカードリーダー、顔認証、スマートフォンなどがあり、API連携の認定システムを通じてCCUSと連携する形が示されていること(2021年10月の資料)国土交通省: 建設キャリアアップシステムについて(現場運用)2026-10-08
Form Parser がOCRのテキストに加えてキーと値のペア、チェックボックス、表を抽出すること。言語の一覧で日本語(ja)が手書きに対応する言語として示されていること。オンラインの処理が1回の要求で最大15ページであることGoogle Cloud: Processor list2026-10-08
表の抽出が行や列をまたぐセルの無い単純な表を対象にすることGoogle Cloud: Form Parser2026-10-08
項目名と値の組が formFields の fieldName/fieldValue で、表が headerRows/bodyRows で返ること。信頼度と位置が各要素の layout に入ることGoogle Cloud: Handle the processing response2026-10-08
対応形式が PDF、GIF、TIFF、JPEG、PNG、BMP、WebP などであること。スキャンは最低200dpiが望ましく300dpi以上が一般に最もよいことGoogle Cloud: Supported files2026-10-08
マルチリージョンが us と eu で、単一リージョンにシンガポール(asia-southeast1)などがあり、日本のリージョンが一覧に無いことGoogle Cloud: Regional and multi-regional support2026-10-08
output_config.format に JSON スキーマを渡して応答の形を固定できること。列挙の値の大文字・小文字は保証されないこと。max_tokens で打ち切られたときはスキーマに合わない出力になりうることClaude API: Structured outputs2026-10-08

どちらの人数に合わせるか、常用の人工をいくら支払うかは、工事担当と経理が協力会社との契約に沿って決めてください。 本記事は各製品の公式ページと国土交通省の資料で確認できた範囲だけを扱っています。

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

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

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

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