管工事の会社が職人の手書きの作業日報を読み取り、現場ごとの工数と材料の使用の台帳を作る
職人が毎日手書きする作業日報を読み取り、現場と工事番号ごとの作業時間と、管・継手・弁などの材料の使用数を、工事台帳に取り込める2つの台帳にそろえます。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- その他/不動産/建設
- 対象部門
- 経理
- 対象業務
- データ入力・転記/台帳・マスタ管理
- 主な課題
- データ分析に時間がかかる/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/判断支援/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 職人が作業の終わりに日報を書き、職長に渡す
- 職長が週に1回、班の日報を事務所に持ってくる
- 事務の担当者が日報を日付の順に並べ、1枚ずつ見る
- 作業の表の現場の名前から、工事台帳の工事番号を探す
- 工事番号のシートの労務費の欄に、職人の名前と時間を打ち込む
- 材料の表の品名と口径から、単価表の品番を探し、材料費の欄に打ち込む
- 月末に、工事番号ごとの合計を会計ソフトの部門の別に入れる
- 人職人が作業の終わりに日報を書き、職長に渡す(様式は第7章のとおり少し直す)
- 人職長がその日のうちに、班の日報をスマートフォンで撮り、共有フォルダの受付の場所に保存する
- 自動毎晩決まった時刻に Python の処理が動き、受付の日報を Document AI で読み取る
- 自動作業の表と材料の表を行に分け、時刻の書式と1日の時間の合計を規則で確かめる
- 自動現場の名前を、いま動いている工事番号の一覧に当てる。決まらない行には印を付ける
- 自動生成AIが材料の書き方を、材料の品番の一覧の候補に当てる。作業の内容を工種に分ける
- 自動工数の台帳と材料の使用の台帳に、工事番号の付いた行を足す。印の付いた行は確認の一覧に出す
- 人事務の担当者が毎朝、確認の一覧だけを見て、必要なら職長に確かめて直す
- 自動週に1回、工事番号ごとの工数と材料の合計を、工事台帳の取込み用のファイルに書き出す
- 人事務の担当者が取込み用のファイルを工事台帳に取り込み、現場の管理が途中の原価を見る
各工程の詳しい説明を読む
- 職人が作業の終わりに日報を書き、職長に渡す
- 職長が週に1回、班の日報を事務所に持ってくる
- 事務の担当者が日報を日付の順に並べ、1枚ずつ見る
- 作業の表の現場の名前から、工事台帳の工事番号を探す
- 工事番号のシートの労務費の欄に、職人の名前と時間を打ち込む
- 材料の表の品名と口径から、単価表の品番を探し、材料費の欄に打ち込む
- 月末に、工事番号ごとの合計を会計ソフトの部門の別に入れる
(a)月末に打ち込みが集中する。 2番で週に1回届くはずの日報が、班によっては月末にまとめて届きます。540枚のうち半分近くが最後の1週間に重なり、 事務の担当者2名が締めの作業と並べて打ち込むことになります。
(b)現場の名前から工事番号を探すのに手間がかかる。 4番で、日報の「〇〇ビル」が新築の工事なのか、同じビルの別の修繕なのかを見分けます。同じ建物で工事番号が2つ3つ動いていることがあり、 そのたびに職長に電話で聞きます。
(c)材料の書き方がそろわない。 「VP25」「塩ビ25」「25VP」は同じ管ですが、「HIVP25」は別の管です。「エルボ」とだけあって口径が無い行や、「3/4」と書かれて呼び径の20Aのことだと読み替える行もあります。6番で単価表の品番に当てるのが、1枚の中でいちばん時間のかかる作業です。
(d)時間の写し違いと合計の食い違い。 開始と終了の時刻から時間を出し、休憩を引いて打ち込みます。「8:00〜17:30」を「8:00〜15:30」と写すと、その現場の労務費が2時間減ります。 1日に2つの現場を回った日は、移動の時間をどちらに付けるかも人によって違います。
(e)原価の差が分かるのが翌月になる。 締めの後でしか台帳が埋まらないので、見積より手間がかかっている現場に、工事の途中で気づけません。
- 【人】 職人が作業の終わりに日報を書き、職長に渡す(様式は第7章のとおり少し直す)
- 【人】 職長がその日のうちに、班の日報をスマートフォンで撮り、共有フォルダの受付の場所に保存する
- 【自動】 毎晩決まった時刻に Python の処理が動き、受付の日報を Document AI で読み取る
- 【自動】 作業の表と材料の表を行に分け、時刻の書式と1日の時間の合計を規則で確かめる
- 【自動】 現場の名前を、いま動いている工事番号の一覧に当てる。決まらない行には印を付ける
- 【自動】 生成AIが材料の書き方を、材料の品番の一覧の候補に当てる。作業の内容を工種に分ける
- 【自動】 工数の台帳と材料の使用の台帳に、工事番号の付いた行を足す。印の付いた行は確認の一覧に出す
- 【人】 事務の担当者が毎朝、確認の一覧だけを見て、必要なら職長に確かめて直す
- 【自動】 週に1回、工事番号ごとの工数と材料の合計を、工事台帳の取込み用のファイルに書き出す
- 【人】 事務の担当者が取込み用のファイルを工事台帳に取り込み、現場の管理が途中の原価を見る
8番目が、この設計の分かれ目です。 事務の担当者が見るのは全行ではなく、工事番号の決まらない行、時間の合わない日報、品番の決まらない材料の行だけです。印の無い行は、読み取った値がそのまま台帳に入ります。
2番目で、日報が届くのを毎日にします。 紙の日報は今までどおり週に1回届きますが、撮った画像が当日に届くので、台帳が毎日埋まっていきます。 紙はあとで照らし合わせる元の記録として残します。
02今回想定するシステム構成
作業日報(A4・1人1日1枚。手書きの作業の表と材料の表) │ 職長がその日のうちにスマートフォンで撮る ▼【トリガー】毎晩21時に Python の処理が動く Python(取り込みの処理) ├──▶ 1枚1ファイル、向き、ピンぼけの確認 ▼ Google Document AI(Form Parser) │ 上の欄のキーと値、作業の表と材料の表の行とセル、区分のチェック ▼ Python ── 時刻の書式と1日の合計、工事番号の一覧への当てはめ ▼ Claude API(構造化出力)── 材料の書き方を品番の候補に当てる、作業の内容を工種に分ける ▼ Python ── 工数の台帳・材料の使用の台帳への追記、確認の一覧 ▼ 【事務の担当者が印の付いた行だけ確かめる】 ▼ Python ── 週に1回、工事台帳の取込み用のファイル
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | Azure AI Document Intelligence(レイアウト モデル)、AWS Textract(英文の書類に限る。日本語の日報には使えない) |
| 生成AI | Claude API(材料の書き方の当て方と工種の分け方。構造化出力) | OpenAI API、Gemini API |
| 連携 | Python(読み取りの呼び出し、工事番号の一覧と品番の一覧の参照、台帳への追記) | Google Apps Script |
| 集計 | Python(工事番号ごとの工数と材料の合計) | Google Apps Script |
| 保管 | 社内の共有フォルダ(日報の画像、2つの台帳、取込み用のファイル) | Google ドライブ |
工事台帳と単価表は、いま使っているものです。 足すのは3つの表です。動いている工事番号の一覧(工事番号、現場の名前、よく呼ばれる呼び方、住所、担当の職長、工期)、材料の品番の一覧(品番、品名、口径、よく書かれる略し方)、職人の一覧(氏名、所属の班)です。1つ目が現場の名前から工事番号を引く元になり、2つ目が材料の書き方を品番に当てる元になります。
土台は Document AI の Form Parser です。 公式の説明では、Form Parser はキーと値のペア、表、チェックボックスを取り出し、学習済みで追加の学習はできないとされています。公式のプロセッサ一覧では、日本語(ja)は手書きに対応する言語に入っています。日報の上の欄はキーと値のペア、作業の表と材料の表は表、持ち出しか現場受けかの区分はチェックボックスとして読みます。
処理する場所に、日本のリージョンはありません。 Form Parser の対応リージョンは us・eu と、シンガポール(asia-southeast1)、ムンバイ(asia-south1)などです。日報には職人の氏名と現場の名前が載り、改修の現場では住まいの住所や居住者の名前が書かれることもあります。国外で処理することを会社の個人情報の扱いの決まりで整理し、 元請けや管理会社との取り決めにも照らします。
★2にしているのは、表を3つ整えるのに手間がかかるからです。 仕組みそのものは毎晩動く Python の処理1つで、工事台帳には取込み用のファイルを渡すだけです。工事台帳を直接書き換えることはしません。
03どうやって実装するのか
処理の起点を決める
毎晩21時に、Python の処理が動きます。 動かす先は事務所のパソコンでも、社内の小さなサーバーでも構いません。Windows のタスクスケジューラのような、決まった時刻に処理を呼び出す仕組みで足ります。職長が撮った日報は、その日の夜のうちに読み取られ、翌朝には確認の一覧ができています。
日報を撮って置くのは、職長の仕事にします。作業の終わりに班の日報を集め、1枚ずつスマートフォンで撮り、共有フォルダの受付の場所に保存します。 ファイル名の先頭に日付と班の名前を付けます。ピンぼけと影の入った画像は読み取りに響くので、撮り方を最初に職長と取り決めます。
処理の終わった画像は月ごとのフォルダへ移し、移すのは台帳に行を足し終えたときだけにします。 受付の場所に残っている画像が、そのまま台帳に入っていない日報です。
週に1回の工事台帳への書き出しは、月曜の朝に別の処理で動かします。 前の週の行のうち、確認の済んだものだけが対象です。印の残っている行は、次の週に回ります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 日報の画像 | 日付、氏名、天気。作業の表(現場の名前、開始・終了の時刻、休憩、作業の内容)。材料の表(品名、口径・規格、数量、単位、持ち出しか現場受けか)。備考 | 受付の場所 |
| 読み取り結果 | キーと値のペア、表の行とセル、チェックボックスの状態、文字の位置 | Document AI |
| 工事番号の一覧 | 工事番号、現場の名前、呼び方、住所、担当の職長、工期 | 現場の管理が作る表 |
| 材料の品番の一覧 | 品番、品名、口径、略し方、単位 | 事務の担当者が単価表から作る表 |
| 職人の一覧 | 氏名、所属の班、日報に書く略した名前 | 事務の担当者の表 |
| 会社の決まり | 定時と休憩の時間、移動の時間の付け方 | 就業の決まりから写す |
質を決めるのは、工事番号の一覧の「呼び方」の列です。 職人が日報に書く現場の名前は、正式な工事名ではなく現場で呼ばれている名前です。「〇〇ビル」「〇〇さん」「駅前の店」といった呼び方を一覧に入れておくと、多くの行が生成AIに頼らずに工事番号に決まります。 同じ建物で工事が2つ動いているときは、呼び方の列に「〇〇ビル 給水」「〇〇ビル 空調」と分けて書きます。
工期の列も、当てはめに使います。 日報の日付が工期の外なら、その工事番号には当てません。終わった工事の呼び方が、新しい工事の呼び方と同じになることがあるからです。 同じビルの去年の修繕と今年の改修を、日付で分けられます。
生成AIに渡すのは、材料の行と作業の内容の文だけです。 職人の氏名や現場の住所は渡しません。材料の当て方に要るのは、書き方と品番の一覧だけです。
データの取得方法を決める
読み取りは、Python から Document AI の REST の process のメソッドを呼びます。公式の説明では、https://LOCATION-documentai.googleapis.com/v1/projects/.../processors/PROCESSOR_ID:process に、画像を base64 にした内容と MIME タイプを付けて送ります。版を固定したいときは、processorVersions の下の :process に送ります。 版を変えると読み取りの結果が変わりうるので、版を変える前に第8章の30枚で読み比べます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 日付・氏名 | pages[].formFields の fieldName と fieldValue | 行の日付と職人 |
| 作業の行 | pages[].tables[] の headerRows と bodyRows | 現場の名前・時刻・作業の内容 |
| 材料の行 | 2つ目の表の bodyRows | 品名・口径・数量・単位 |
| 持ち出しか現場受けか | 表の中のセルの ✓ と ☐ | 材料の出どころ |
| 文字の位置 | textAnchor の startIndex と endIndex | 疑いのあるセルの画像の切り出し |
どちらの表かは、見出しの行で見分けます。 作業の表の見出しには「現場」「開始」「終了」、材料の表には「品名」「数量」が入っています。表の順番で決めると、職人が材料の表だけ書いて作業の表を空けた日に入れ違います。 見出しの行の文字で、どちらの表かを決めます。
区分の欄は、表の中のチェックボックスとして読みます。 公式の説明では、表の中のチェックボックスは ✓(印あり)や ☐(印なし)のような文字で表されます。持ち出しと現場受けの両方に印があれば、決めずに確認に回します。材料費をどこから積むかが変わるので、どちらかに寄せることはしません。
表はセルを結合しない様式にします。 公式の説明では、Form Parser の表の取り出しは行や列をまたぐセルの無い表が対象で、rowSpan と colSpan は常に1になります。いまの日報で、同じ現場の行を縦に1つのセルでまとめていれば、行ごとに現場の名前を書くか「〃」と書く形に変えます。
空いたセルは、空として扱います。 公式の説明では、Form Parser は値の入っていないキーと値のペアを確実には読めないとされています。休憩の欄が空のときは、休憩を取らなかったとは見なさず、会社の決まりの休憩の時間を仮に置いて、置いたことを行に残します。
AIへ渡す前に整形する
- 1枚1ファイルの確認 … 公式のプロセッサ一覧では、Form Parser の同期の処理は1回15ページまでです。日報は1枚1ファイルにし、2ページ以上のファイルは分けます
- 向きと傾きの確認 … 横向きや斜めに撮られた画像は、向きを直してから送ります
- ピンぼけの確認 … 画像の鋭さを測り、一定より低いものは読み取りに送らず、職長に撮り直しを頼みます
- 「〃」の引き継ぎ … 現場の名前と品名の「〃」は、上の行の値で埋め、埋めたことを行に残します
- 時刻の書式の確かめ … 「8:00」「8時」「800」を時刻にそろえ、開始より終了が前の行に印を付けます
- 1日の合計の確かめ … 作業の行の時間を足し、休憩を引いた合計が、会社の決めた範囲に入るかを見ます
- 数量と単位の確かめ … 数量が数字として読め、単位が品番の一覧の単位(本・個・m)と合うかを見ます
6番目が、写し違いと読み違いを拾う確かめです。 1日の合計が極端に短いか長い日報は、時刻のどれかを読み違えているか、作業の行が1つ抜けています。合計が合わないときは、どの行が違うかを決めずに、日報ごと確認に回します。
時刻を規則で直すことはしません。 「15:30」を定時に合わせて「17:30」にすると、本当に早く上がった日の労務費が増えます。 疑いの印を付け、職長に確かめます。
AIに処理させる
時刻の計算、1日の合計、工事番号の当てはめ、集計は、Python の規則で行います。 生成AIには、品番の一覧の略し方で決まらなかった材料の書き方を候補に当てる仕事と、作業の内容の文を工種に分ける仕事だけを渡します。
| 規則で見るもの | 印を付ける条件 |
|---|---|
| 工事番号 | 呼び方の列で1つに決まらない、または工期の外 |
| 時刻 | 開始より終了が前、または書式として読めない |
| 1日の合計 | 休憩を引いた合計が会社の決めた範囲の外 |
| 現場の数 | 1日に3つ以上の現場の行がある |
| 材料の品番 | 略し方の一覧でも生成AIの候補でも1つに決まらない |
| 数量と単位 | 単位が品番と合わない、または数量が一覧の上限を超える |
| 区分 | 持ち出しと現場受けの両方に印、または両方に印が無い |
| 生成AIにさせること | 中身 |
|---|---|
| 材料の書き方の当て方 | 品番の一覧から候補を最大3つ、根拠にした語とともに返す |
| 決まったかの区別 | 候補が1つで、品名と口径の両方が一覧の語と同じときだけ matched |
| 作業の内容の分け方 | 配管・器具の取り付け・試験・撤去・移動・その他に分け、根拠の語を写す |
口径の読み替えは、一覧の略し方の列に書いた分だけにします。 「3/4」を20Aと読むのは、一覧に「3/4」が20Aの略し方として載っているときだけです。一覧に無い読み替えを生成AIにさせると、インチと呼び径の対応を思い込みで埋めます。 載っていなければ候補にとどめ、事務の担当者が職長に確かめます。
| させないこと | 理由 |
|---|---|
| 工事番号の決めつけ | 似た呼び方の現場が並ぶ。決まらなければ人へ |
| 時刻と時間の補正 | 疑いの印を付け、職長に確かめる |
| 単価と金額の計算 | 単価表から Python が出す |
| 移動の時間の振り分け | 会社の決まりで Python が付ける |
| 原価の良し悪しの評価 | 現場の管理と社長が台帳を見て決める |
1行目が起きやすい失敗です。 生成AIに現場の名前を渡して工事番号を選ばせると、「〇〇ビル」の工事が2つあっても、もっともらしいほうを1つ選びます。 工事番号は生成AIに渡さず、規則で決まらなければそのまま人に回します。
指示内容を固定する
あなたは管工事の会社の事務の補助です。
作業日報に書かれた材料の行を、材料の品番の一覧に当ててください。
あわせて、作業の内容の文を工種に分けてください。
【渡すもの】
- 材料の行:品名の欄、口径・規格の欄、数量、単位の文字
- 品番の一覧:品番、品名、口径、略し方、単位
- 作業の内容の文
【材料の当て方】
- 品名と口径の両方が、一覧の品名か略し方と同じ語で書かれていて、
候補が1つなら status を matched に。
- 候補が2つ以上、または口径が書かれていなければ status を candidates にし、
候補を最大3つ返す。
- 口径の読み替え(インチと呼び径など)は、一覧の略し方に載っているものだけ使う。
載っていない読み替えをしない。
- 管の材質の違い(VP と HIVP、VP と VU など)を同じものとして扱わない。
- 候補ごとに、根拠にした語を evidence に写す。
【作業の内容の分け方】
- piping(配管)、fixture(器具の取り付け)、test(試験)、removal(撤去)、
travel(移動)、other に分ける。1つの文に複数あれば複数返す。
- 時間を割り振らない。根拠にした語を evidence に写す。
【厳守事項】
- 一覧に無い品番を返さない。書かれていない口径を補わない。
- 数量と単位を書き換えない。読めない文字は「?」のまま残す。
- 現場や工事番号について何も書かない。
【材料の行】{material_rows}
【品番の一覧】{material_master}
【作業の内容】{work_text}
「材質の違いを同じものとして扱わない」を明記しないと、VP と HIVP を同じ管にします。 書き方の違いは1文字でも、単価も使う場所も違う管です。 一覧の品名に近いほうへ寄せてしまうと、材料費が現場ごとにずれていきます。
構造化出力で、答えの形を固定します。 公式の説明では、Claude API の構造化出力は output_config.format に type: "json_schema" でスキーマを渡し、オブジェクトには additionalProperties: false が要ります。status と工種は enum で決まった値に限ります。候補の数の上限は、スキーマではなく Python の側で確かめます。 公式の説明では、配列の minItems は0か1しか使えず、数の制約はそれ以上かけられません。
出力形式を固定する
{
"materials": [
{
"row": 1,
"status": "candidates",
"candidates": [
{ "code": "P-VP25", "name": "硬質塩ビ管 VP 25", "evidence": "VP25" },
{ "code": "P-VU25", "name": "硬質塩ビ管 VU 25", "evidence": "塩ビ25" }
]
},
{
"row": 2,
"status": "matched",
"candidates": [
{ "code": "F-EL20", "name": "エルボ 20A", "evidence": "エルボ20" }
]
}
],
"work": [
{ "kind": "piping", "evidence": "2F 給水管 更新" },
{ "kind": "test", "evidence": "水圧試験" }
]
}
Python は、この JSON と規則の結果を合わせて、2つの台帳の行を作ります。
| 台帳 | 列 | 出どころ |
|---|---|---|
| 工数の台帳 | 日付、職人、工事番号、開始・終了・休憩、時間、工種、確認の印 | 読み取り、Python、プロンプト |
| 材料の使用の台帳 | 日付、職人、工事番号、品番、品名、数量、単位、持ち出しか現場受けか、確認の印 | 読み取り、一覧、プロンプト |
工事台帳の取込み用のファイルは、2つの台帳を工事番号ごとに足し上げて作ります。
【工事台帳 取込み】 期間:10月20日〜10月26日
工事番号 K-2026-118(〇〇ビル 給水管更新)
労務:延べ 41.5時間(配管 33.0/試験 4.0/撤去 4.5)
材料:P-VP25 12本、F-EL20 18個、V-GV20 2個(持ち出し)
工事番号 K-2026-131(駅前店舗 改装 配管付替)
労務:延べ 16.0時間(配管 12.5/器具 3.5)
材料:P-HI20 6本(現場受け)
確認待ち:3行(工事番号未定 1、品番未定 2)→ 次週に繰越し システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付の場所 | 毎晩の処理が読む | 未処理の日報の画像を集める |
| Document AI | REST の process | 日報を読み取る |
| 工事番号・品番・職人の一覧 | ファイルの読み取り | 当てはめの元 |
| Claude API | REST | 材料の当て方と工種の分け方 |
| 工数の台帳・材料の使用の台帳 | ファイルへの追記 | 日々の行 |
| 工事台帳 | 取込み用のファイルを人が取り込む | 週ごとの合計 |
工事台帳には、仕組みから直接書き込みません。 取込み用のファイルを作り、事務の担当者が中身を見てから取り込みます。台帳は見積と原価の元の記録で、社長と現場の管理が見ています。 書き込みの誤りがそのまま原価の判断に入るのを避けます。
倉庫の在庫の控えは、読むだけにします。 持ち出しの材料の合計が在庫の控えの減りと大きく違えば、週の取込みの末尾に件数だけ書きます。どちらが正しいかを決めるのは、倉庫の担当と事務の担当者です。
人が確認する
事務の担当者は、毎朝の確認の一覧だけを見ます。
- 工事番号の決まらない行を先に見る … 候補が2つあれば職長に聞きます。呼び方が一覧に無ければ、工事番号の一覧に足します
- 時間の合わない日報を見る … 切り出したセルの画像を見て、読み違いか書き違いかを確かめます。書き違いなら職長に聞きます
- 品番の決まらない材料の行を見る … 候補から選ぶか、職長に聞きます。新しい書き方なら、品番の一覧の略し方に足します
- 区分の両方に印がある行を見る … 倉庫の持ち出しの記録と見比べます
直したときは、直した人と理由を台帳の行に残します。 日報の画像はそのまま残し、どの値を何から何に直したかが後から追えるようにします。
目標は、540枚をならして1枚1分です。 印の付く行が1日に数行という想定で、それより多い週は、日報の書き方か一覧の呼び方・略し方を職長と見直します。
例外に対処する
| 起きること | 対応 |
|---|---|
| 画像がピンぼけ・影で読めない | 読み取りに送らず、職長に撮り直しを頼む |
| 作業の表と材料の表の見出しが読めない | 表を当てはめずに日報ごと確認に回す |
| 「〃」が読めない | 上の行の値で埋めず、空として確認に回す |
| 工事番号の一覧に無い現場 | 新しい現場か、呼び方が足りないかを現場の管理に確かめる |
| 同じ職人の同じ日の日報が2枚 | 片方を保留にし、書き直しか重複かを職長に確かめる |
| 品番の一覧に無い材料 | 候補を返さず、事務の担当者が一覧に足してから台帳に入れる |
| Document AI が応答しない | 受付の場所に残し、翌晩に再び読む |
5行目は、撮り直しのときに起きます。 職長が撮り直した画像を、元の画像を消さずに置くと、同じ日報が2回台帳に入ります。 職人と日付が同じ日報は、自動では足さずに必ず止めます。
4行目と6行目は、表を育てる機会です。 一覧に無い現場や材料が出るたびに足していくと、数か月で、印の付く行が減っていきます。
記録を残す
- 日報の画像と、撮った日時・撮った職長
- Document AI が返した JSON の全文と、使ったプロセッサの版
- 規則の結果、生成AIの当て方と分け方、そのとき参照した3つの一覧の版
- 事務の担当者が直した記録 … どの値を、何から何に、なぜ直したか
- 週ごとの取込み用のファイルと、工事台帳に取り込んだ日
- 紙の日報が事務所に届いた日と、画像との照らし合わせの結果
3つ目で一覧の版を残すのは、呼び方と略し方が増えていくためです。 後から「この行はなぜこの工事番号になったのか」と聞かれたとき、当時の一覧が残っていないと説明できません。
04実装レベルの3段階
半自動化で、1枚5分が1分になります。この段階が本記事の想定です。 工事番号を探す作業、時間の計算と打ち込み、材料の品番の当て方が無くなり、事務の担当者は印の付いた行を見るだけになります。 本格構成は、工事台帳の形がそろってからにします。 工事番号ごとのシートの作り方が工事によって違ううちは、取込みを自動にしても、結局は事務の担当者がシートを直すことになります。 半自動化の間に、2つの数を毎週数えておきます。 工事番号が決まらずに人へ回った行の数と、品番が決まらずに人へ回った行の数です。前者が減らなければ工事番号の一覧の呼び方が足りず、後者が減らなければ品番の一覧の略し方が足りません。 どちらも仕組みではなく一覧を直すことで減ります。この2つが落ち着いてから本格構成に進むと、見積との差の知らせが空振りしません。
05工数削減シミュレーション
導入後 540件 × 1分 ÷ 60 = 9 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 新築の設備工事と、マンション・店舗の改修や修繕の配管工事を並行して請け負い、職人が紙の作業日報に現場・時間・使った材料を書き、事務の担当者が月末にまとめて表計算の工事台帳へ打ち込んでいる管工事の会社。現場が月に数十件あり、どの現場にどれだけの手間と材料がかかったかが月末の締めまで分からない場合。材料を会社の倉庫から持ち出すことが多く、現場ごとの材料費を日報の記載から起こしている場合。
- 職人が数名で現場も月に数件に限られ、月末の打ち込みが数時間で終わる会社。作業の記録をすでに現場でスマートフォンのアプリに入れ、工事台帳へ自動で流れている会社。材料をすべて現場へ直送させ、材料費を仕入先の請求書だけで現場に振り分けられている会社。なお、工事の原価の配分の決め方、見積との差の評価、職人の働き方の良し悪しの判断は、この構成では代替できません。
07最小構成で試す方法
- 先月の日報から30枚を選ぶ(1日に2つの現場を回った日報と、材料の書き方が人によって違う日報を入れる)
- その30枚について、当時工事台帳に打ち込んだ行を出しておく
- 日報の画像から職人の氏名を黒く塗り、手元のAIサービスの画面に1枚ずつ貼り付ける
- 「この日報の作業の表を、現場・開始・終了・休憩・作業の内容の列で、材料の表を品名・口径・数量・単位・区分の列で書き出してください。材料は次の品番の一覧から候補を選び、決まらなければ候補を並べてください。一覧に無い品番を作らないでください」と指示し、品番の一覧も貼る
- 出てきた表を、当時の工事台帳の行と1行ずつ突き合わせる
30枚は必ずやってください。 組む前に、「手書きの時刻と材料の行が表として読めるか」と「材料の書き方を一覧に当てられるか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 時刻と材料が当時の台帳と合った | Form Parser と一覧の連携に進む |
| VP と HIVP を同じ品番にした | 指示の書き方で直る。構成は有効 |
| 作業の表と材料の表の行が混ざる | 様式が先。 2つの表の間を空け、見出しをはっきりさせる |
3行目は失敗ではありません。 いまの日報の様式が、人には読めても読み取りには向かないことが分かったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 作業の表と材料の表が入れ違う | 表の順番ではなく見出しの行の文字で見分ける |
| 同じ現場の行を1つのセルでまとめている | 結合したセルは読めない。 行ごとに書くか「〃」にする |
| 空いた休憩の欄が0分になる | 決まりの休憩を仮に置き、置いたことを残す |
| 時刻を定時に合わせて直す | 直さない。 疑いの印を付けて聞く |
| 撮り直しで同じ日報が2回入る | 職人と日付が同じ日報は自動で足さない |
| 似た呼び方の現場に寄せる | 工事番号は生成AIに選ばせない。工期でも絞る |
| VP と HIVP が同じ品番になる | 材質の違いを同じに扱わないと指示に書く |
| 一覧に無い口径の読み替えをする | 略し方の列に書いた読み替えだけ使う |
上の5行が、この構成の失敗のほとんどです。 どれも、日報の様式と撮り方が読み取りに合っていないことから出ています。 直すのは仕組みより先に、日報です。
下の3行は、会社の決まりごとが表になっていないことから出ています。 現場の呼び方、材料の略し方、インチと呼び径の読み替えは、いまは古くからいる事務の担当者と職長の頭の中にあります。表にすると、担当者が替わっても同じ台帳になります。 仕組みを入れる効果の一部は、この表づくりそのものにあります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 職人の氏名と働いた時間、現場の名前と住所、改修の現場の居住者の名前、使った材料と数量です。
- 国外のリージョンで処理することを整理する … Form Parser の対応リージョンに日本はありません。会社の個人情報の扱いの決まりと、元請けや管理会社との取り決めに照らしてから本番の日報を回します
- 生成AIに渡す範囲を絞る … 材料の行と作業の内容の文、品番の一覧だけを渡し、職人の氏名、現場の名前と住所は渡しません
- 工数の台帳を職人の評価に使わない … この台帳は現場の原価を見るためのものです。誰が速い・遅いを比べる材料にすると、職人が日報に正直に書かなくなります
- 工事番号と金額を仕組みで決めきらない … 決まらない行は人に回し、金額は単価表から出します
- 紙の日報を元の記録として残す … 直しは台帳の行の側で行い、日報の画像と紙と直した記録を残します
誤りが起きた場合のリスクは、別の現場に手間や材料を付けることと、時間を写し違えることの2つです。 前者は工事番号を決めつけると起き、後者は時刻を直すと起きます。どちらも、決まらないものを決めずに事務の担当者へ回すことで防ぎます。
10まず何から始めるか
1週目:様式を直す
日報の作業の表と材料の表の間を空け、見出しをはっきりさせます。持ち出しと現場受けを四角のチェック欄にし、セルの結合を無くします。職長と、撮り方(明るい場所で真上から)を取り決めます。
2週目:30枚で試し、一覧を作る
先月の日報を30枚選び、氏名を塗ったうえで手元のAIサービスで読み取りと材料の当て方をさせます。VP と HIVP のような材質の違いを混ぜていないかを最優先で見ます。 あわせて、30枚に出てきた材料の書き方を品番の一覧の略し方に入れます。
3週目:工事番号の一覧を作る
いま動いている工事番号について、現場の管理と職長に現場で何と呼んでいるかを聞き、呼び方と工期の列を作ります。国外で処理することの扱いも、この週に決めます。
4週目:毎晩の処理から台帳までをつなぐ
Python で受付の場所を読み、Form Parser を呼び、2つの台帳に行を足すところまで作ります。この時点では事務の担当者のいまの打ち込みと並べ、工事番号ごとの合計が合うかを見ます。
2か月目: 週ごとの取込み用のファイルを足し、工事台帳に取り込み始めます。3か月目以降: 1枚5分が何分になったかを実測します。現場の管理が月の途中で工事台帳を見て、見積との差を話題にするようになった時点で、この構成は運用に乗ったと言えます。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Form Parser と Enterprise Document OCR の言語の表で、日本語(ja)が手書きに対応とされていること。Form Parser の同期の処理が15ページまで、一括の処理が100ページまでであること。対応リージョンが us・eu・asia-southeast1・asia-south1 などで、日本が含まれないこと | Google Cloud: Processor list | 2026-10-28 |
| Form Parser がキーと値のペア・表・チェックボックスを取り出し、学習済みで追加の学習ができないこと。表の取り出しが行や列をまたぐセルの無い表に限られること。値の入っていないキーと値のペアを確実には読めないこと | Google Cloud: Form Parser | 2026-10-28 |
フォームの項目が formFields の fieldName と fieldValue で返ること。表が headerRows と bodyRows で表され、rowSpan と colSpan が常に1であること。表の中のチェックボックスが ✓ や ☐ の文字で表されること。文字の位置が textAnchor の startIndex と endIndex で示されること | Google Cloud: Handle the processing response | 2026-10-28 |
オンラインの処理を processors/PROCESSOR_ID:process に送り、画像を base64 にした内容を渡すこと。プロセッサの版の processorVersions の :process に送れること | Google Cloud: Send a processing request | 2026-10-28 |
Claude API の構造化出力を output_config.format に type: "json_schema" で指定すること。オブジェクトに additionalProperties: false が要ること。配列の minItems が0と1しか使えないこと | Claude Platform Docs: Structured outputs | 2026-10-28 |
労務費の単価、材料の単価、工事の原価への配分の仕方は、自社の決まりと顧問の税理士に確かめてください。 本記事は上の公式の情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2162)についてのご相談はこちらから。
