警備会社で警備員が施設ごとに手書きする巡回記録と警備日誌を読み取り、巡回時刻・異常の有無・引継ぎ事項を契約先への月次報告書にそろえて、巡回の抜けを拾う
警備員が施設ごとに手書きする巡回記録表と警備日誌をスキャンして読み取り、巡回時刻・異常の有無・引継ぎ事項を項目に分けます。巡回計画と突き合わせて抜けを拾い、契約先への月次報告書の下書きにそろえます。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Make/n8n/Power Automate/Python
- 対象業界
- その他/不動産/宿泊
- 対象部門
- 営業/総務
- 対象業務
- データ入力・転記/書類作成
- 主な課題
- 入力作業が多い/書類作成に時間がかかる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 各現場の隊長が、1か月分の巡回記録表と警備日誌の綴りを月初めに本社へ送る
- 業務課の担当が、施設ごとに1日分ずつ綴りをめくり、巡回の回ごとの出発・帰着の時刻を集計用のスプレッドシートに転記する
- 巡回計画のスプレッドシートを開き、計画の回数と時刻に対して、回っていない回や大きく遅れた回がないかを目で比べる
- 警備日誌を読み、設備の異常、不審事案、鍵の貸出、来訪者、引継ぎ事項に当たる記述を探して、報告書の原稿に書き写す
- 読めない字や記入のない欄があれば、隊長に電話で確かめる
- 月次報告書を書式に流し込み、営業担当の確認を経て契約先へ送る
- 人各現場の隊長が、その日の巡回記録表と警備日誌を勤務明けに複合機でスキャンし、施設ごとのフォルダに保存する
- 自動保存をきっかけにワークフローが動き、ファイルの形式・ページ数・画像の大きさを確かめる
- 自動OCR(レイアウトモデル)が、表のセル、手書きの文字、チェックの印、それぞれの読み取りの信頼度を返す
- 自動プログラムが、巡回記録表の表から回ごとの出発・帰着の時刻とチェックポイントの印を取り出す
- 自動巡回計画と突き合わせ、回ごとに `done` / `late` / `not_recorded` / `unreadable` を付ける
- 自動生成AIが、警備日誌の文章から異常・対応・引継ぎを項目に分けて取り出す
- 自動施設ごとに日別の一覧を更新し、`not_recorded` と `unreadable` があった日は翌朝に隊長と業務課へ知らせる
- 人隊長が、知らせのあった日について、巡回していなかったのか、書き忘れたのか、読めなかっただけなのかを答える
- 自動月末に、1か月分の一覧から月次報告書の下書きを作る
- 人業務課が下書きを読み、異常の記述と件数を確かめ、営業担当の確認を経て契約先へ送る
各工程の詳しい説明を読む
- 各現場の隊長が、1か月分の巡回記録表と警備日誌の綴りを月初めに本社へ送る
- 業務課の担当が、施設ごとに1日分ずつ綴りをめくり、巡回の回ごとの出発・帰着の時刻を集計用のスプレッドシートに転記する
- 巡回計画のスプレッドシートを開き、計画の回数と時刻に対して、回っていない回や大きく遅れた回がないかを目で比べる
- 警備日誌を読み、設備の異常、不審事案、鍵の貸出、来訪者、引継ぎ事項に当たる記述を探して、報告書の原稿に書き写す
- 読めない字や記入のない欄があれば、隊長に電話で確かめる
- 月次報告書を書式に流し込み、営業担当の確認を経て契約先へ送る
(a)抜けに気づくのが月末より後になる。 綴りが届くのは翌月の初めです。夜間の1回が抜けていた日があっても、本社が知るのは早くて翌月の第1週で、そのときには当の勤務者の記憶も薄れています。契約先から「先月のあの日、巡回はあったのか」と聞かれて初めて調べることもあります。
(b)時刻の比較が目で行われている。 30施設で巡回の回数と時刻が違うため、担当者は施設ごとに計画を頭に入れ直して綴りを見ます。2時間おきの施設で1回分の記入が無い日は、30日分の中で簡単に見落とします。
(c)異常の記述が、欄の外にある。 警備日誌の「特記事項」の欄が狭く、「3F男子トイレ水漏れ、設備担当へ連絡済」が余白に小さく書かれていることがあります。報告書に載るかどうかは、その余白に担当者が気づくかで決まります。
(d)報告書の書きぶりがそろわない。 同じ水漏れでも、ある担当は「設備異常1件」、別の担当は日時と場所と対応まで書きます。契約先が施設を複数持っていると、施設ごとの報告書の粒度の違いがそのまま見えます。
- 【人】 各現場の隊長が、その日の巡回記録表と警備日誌を勤務明けに複合機でスキャンし、施設ごとのフォルダに保存する
- 【自動】 保存をきっかけにワークフローが動き、ファイルの形式・ページ数・画像の大きさを確かめる
- 【自動】 OCR(レイアウトモデル)が、表のセル、手書きの文字、チェックの印、それぞれの読み取りの信頼度を返す
- 【自動】 プログラムが、巡回記録表の表から回ごとの出発・帰着の時刻とチェックポイントの印を取り出す
- 【自動】 巡回計画と突き合わせ、回ごとに
done/late/not_recorded/unreadableを付ける - 【自動】 生成AIが、警備日誌の文章から異常・対応・引継ぎを項目に分けて取り出す
- 【自動】 施設ごとに日別の一覧を更新し、
not_recordedとunreadableがあった日は翌朝に隊長と業務課へ知らせる - 【人】 隊長が、知らせのあった日について、巡回していなかったのか、書き忘れたのか、読めなかっただけなのかを答える
- 【自動】 月末に、1か月分の一覧から月次報告書の下書きを作る
- 【人】 業務課が下書きを読み、異常の記述と件数を確かめ、営業担当の確認を経て契約先へ送る
1番目を「月初めにまとめて」から「勤務明けに毎日」へ変えるのが、この構成のいちばん大きな変更です。 読み取りが自動になると、本社に届くのを待つ理由がなくなります。抜けに気づくのが翌月から翌朝に縮みます。
8番目で、抜けの理由を人が答えるのも意図してのことです。 プログラムが出せるのは「計画の回に対応する記録が無い」という事実までです。それが巡回をしなかったのか、記入を忘れたのかは、現場にしか分かりません。 報告書に何と書くかは、その答えで決まります。
02今回想定するシステム構成
巡回記録表・警備日誌(紙・手書き) │ 勤務明けに現場の複合機でスキャン ▼【トリガー】施設ごとのフォルダへの保存 Power Automate ── 形式・ページ数・画像の大きさの確認 ▼ Azure AI Document Intelligence(レイアウトモデル) │ 表のセル/手書きの行/チェックの印/信頼度 ▼ Python ── 巡回計画(施設ごとの回と時刻)との突き合わせ │ done / late / not_recorded / unreadable ▼ Claude API ── 警備日誌の文章から異常・対応・引継ぎを取り出す ▼ 施設ごとの日別一覧(翌朝に抜けと読めない日を通知) ▼ 【隊長が抜けの理由を答える】 ▼ 月末に月次報告書の下書き ──▶ 【業務課と営業が確認】──▶ 契約先へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence(レイアウトモデル) | Google Document AI(Form Parser) |
| 集計 | Python(巡回計画との突き合わせ、抜けと遅れの判定、月次の件数) | Google Apps Script |
| 生成AI | Claude API(警備日誌の文章から異常と引継ぎを取り出す、報告書の下書き) | OpenAI API、Gemini API |
| 連携 | Power Automate(フォルダの監視、OCRの呼び出し、通知) | Make、n8n |
| 保管 | SharePoint(施設ごとのフォルダ、日別一覧、報告書の下書き) | 社内のファイルサーバー |
巡回計画と報告書の書式は、新しく足すものではありません。 すでに施設ごとに持っている巡回計画を、「回の番号・予定の出発時刻・許す遅れの幅・チェックポイントの一覧」の列を持つ表にそろえるのが最初の準備作業です。
土台になるのは、Azure AI Document Intelligence のレイアウトモデル(prebuilt-layout)です。 現行の v4.0(2024-11-30 GA)では、テキスト、表、選択マーク、段落、ドキュメントの構造を取り出します。読み取りとレイアウトの言語サポートの表では、日本語(ja)が手書きのテキストの対象に入っています。 巡回記録表の時刻も、警備日誌の文章も、ほとんどが手書きです。
この構成で効くのは、3つの返却です。 1つ目は表で、セルごとに行と列の番号と内容が返ります。巡回記録表の「回」と「チェックポイント」の格子をそのまま受け取れます。2つ目は選択マークで、selected / unselected の状態と信頼度が返ります。チェックポイントの□に付けた印を読むのに使います。3つ目は単語ごとの信頼度と、行ごとに手書きかどうかを示す styles です。「読めなかった」を数値で判定する根拠は、この信頼度に置きます。
03どうやって実装するのか
処理の起点を決める
施設ごとのフォルダにファイルが保存されたことを起点にします。 隊長が勤務明けにスキャンし、その日のうちに読み取りまで終わらせます。月初めにまとめて流す形にはしません。 まとめると、抜けに気づくのが翌月になるという今の問題がそのまま残ります。
フォルダは施設ごとに分け、ファイル名は「施設コード_日付」に決めておきます。 施設を読み取り結果から推定させると、同じ書式を使う施設どうしで取り違えます。施設と日付はファイルの置き場所と名前から決め、OCRには中身だけを読ませます。
処理が終わったファイルは処理済みのフォルダへ移します。移すのは成功したときだけです。 施設のフォルダに残っている数が、そのまま未処理の数になります。月次報告書の下書きは、毎月1日の朝に前月分をまとめて作る定時の処理にします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 巡回記録表 | 回ごとの出発・帰着の時刻、チェックポイントごとの確認の印、巡回者の名前 | 施設ごとのフォルダ(スキャンしたPDF) |
| 警備日誌 | 時刻と出来事の記述、特記事項、引継ぎ事項、勤務者 | 同上 |
| 読み取り結果 | 表のセル、選択マークの状態、単語と行、読み取りの信頼度、手書きかどうか | Azure AI Document Intelligence |
| 巡回計画 | 施設ごとの回の番号、予定の出発時刻、許す遅れの幅、チェックポイントの一覧 | 巡回計画の表 |
| 施設の情報 | 施設コード、契約先、報告書の書式、報告に載せる事項の種類 | 施設マスタ |
質を決めるのは、巡回計画の表です。 計画が「夜間3回程度」のような文章のままだと、何をもって抜けとするかが決まりません。回ごとに予定の時刻と許す遅れの幅(たとえば30分)を数字で持たせます。 契約先と取り決めた幅がなければ、そこから決める必要があります。
チェックポイントの一覧は、巡回記録表の行の並びと同じ順にします。 表の何行目がどのチェックポイントかを、書式ごとに対応表で持ちます。現場ごとに書式が違うため、書式の種類ごとに1つずつ対応表を作ります。
データの取得方法を決める
読み取りは、ワークフローからレイアウトモデルを呼ぶだけです。PDFを送ると、ページごとの結果が返ります。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 表とセル | tables(行と列の番号、内容、結合の幅) | 巡回記録表の「回 × チェックポイント」と時刻の欄 |
| 選択マーク | 各ページの selectionMarks(state と confidence) | チェックポイントの□の印 |
| 単語と行 | 各ページの words(confidence)と lines | 時刻の数字と、日誌の文章 |
| 手書きかどうか | styles の isHandwritten と信頼度 | 印刷の見出しと、手書きの記入を分ける |
| 段落 | paragraphs | 警備日誌の文章のまとまり、余白の書き込み |
時刻は、表のセルの内容と単語の信頼度を両方見ます。 セルの内容が「22:05」でも、その数字の単語の信頼度が低ければ「2:05」や「22:55」の読み違いかもしれません。セルの内容だけを使うと、信頼度の情報が落ちます。
警備日誌は、Markdown 形式の出力を使うと読みやすくなります。 outputContentFormat=markdown を指定すると、表は HTML の表として、段落は段落として並びます。結合されたセルもそのまま表せます。生成AIへ渡すのはこの Markdown にします。 座標の情報を落とした分だけ、渡す量が減ります。
巡回計画と施設マスタは、表を読むだけで足ります。参照するのは、その日の時点で有効だった計画です。 計画を途中で変えた月は、変更日をまたいで2つの計画を使い分けます。
AIへ渡す前に整形する
- 形式の確認 … PDFまたは画像(JPEG、PNG、BMP、TIFF、HEIF)であることを確かめます
- ページ数とサイズの確認 … PDFとTIFFは最大2,000ページ、有料(S0)レベルで500MBまでです。1日分の綴りなら十分に収まります
- 画像の寸法の確認 … 50×50ピクセルから10,000×10,000ピクセルの間である必要があります
- 解像度の確認 … 抽出するテキストの最小の高さは、1024×768の画像で12ピクセル(150dpiで約8ポイント)です。巡回記録表の欄は狭く、時刻を小さく書く人の字は、この下限に近づきます
- ページの種類の振り分け … 綴りの中の巡回記録表と警備日誌を、表の有無と見出しの文字で分けます
- パスワードの解除 … 複合機の設定でPDFにパスワードが付く場合は、提出前にロックを解除する必要があります
- 同じ日の重複の検知 … 同じ施設・同じ日付のファイルが2つあれば、後のものを差し替えとして扱い、前の結果を残します
4番目は、スキャンの設定で決まります。 複合機の既定のまま白黒・低い解像度でスキャンすると、鉛筆で書いた時刻がかすれます。現場の複合機の設定を、最初に一度そろえてください。
AIに処理させる
生成AIにさせるのは、警備日誌の文章を項目に分けることだけです。 巡回記録表の時刻の比較は、前処理の後でプログラムが行います。
| 取り出すもの | 中身 | 判断できないときの扱い |
|---|---|---|
| 異常 | 設備の故障・水漏れ・警報の作動・施錠の不備など。日時、場所、内容 | 場所が書かれていなければ location を 不明 |
| 不審事案 | 不審な人・車・物、立ち入りの制止 | 内容があいまいなら category を 要確認 |
| 対応 | 誰に連絡したか、何をしたか、いつ終わったか | 書かれていなければ 不明。対応済みと推測しない |
| 鍵と来訪 | 鍵の貸出と返却、時間外の来訪者 | 返却の記述が無ければ 未返却の記載なし |
| 引継ぎ事項 | 次の勤務者や翌日への申し送り | 余白の書き込みも対象にする |
| 読めない箇所 | 文字として確定できなかった部分 | 該当の文字列をそのまま unreadable_spans へ |
右端の列でいちばん大事なのは、「対応済みと推測しない」です。 日誌に「水漏れ発見、設備担当へ連絡」とあっても、直ったとは書いていません。報告書に「対応済み」と載せるかどうかは、書かれていることだけで決めます。
| させないこと | 理由 |
|---|---|
| 巡回の抜けの判定 | 時刻の比較はプログラムで行う。AIは「おおむね計画どおり」と丸める |
| 抜けの理由の推測 | 巡回しなかったのか書き忘れたのかは、現場にしか分からない |
| 事案の重さの評価 | 契約先へどう説明するかは、営業と業務課が決める |
| 読めない字の補完 | 前後の文脈で「それらしい」語に直すと、事実が変わる |
| 人名の書き出し | 来訪者や不審者の名前は報告書に要らない。役割(来訪者・業者)で書く |
指示内容を固定する
あなたは警備会社の本社で、現場の警備日誌を読んで
契約先への報告の材料を整理する担当です。
以下はOCRで読み取った1日分の警備日誌です。書かれていることだけを使い、
推測で補わないでください。
【取り出す項目】
1. 異常(設備の故障、水漏れ、警報の作動、施錠の不備など)
2. 不審事案(不審な人・車・物、立ち入りの制止)
3. 対応(誰に連絡したか、何をしたか、いつ終わったか)
4. 鍵の貸出と返却、時間外の来訪
5. 引継ぎ事項(次の勤務者や翌日への申し送り)
【厳守事項】
- 日時・場所・対応が書かれていなければ「不明」としてください。
前後の記述から推測して埋めないでください。
- 「連絡した」と書かれていても、解決したとは扱わないでください。
resolved は、終わったことが明記されているときだけ true にします。
- 欄の外や余白に書かれた記述も対象にしてください。
- 読み取れない、または意味の確定しない文字列は、直さずに
unreadable_spans にそのまま写してください。
- 人の名前は書き出さず、「来訪者」「設備業者」「テナント従業員」のように
役割で書いてください。
- 巡回の回数や時刻についての評価はしないでください。
- 事案の重さや、契約先への報告の要否は書かないでください。
- evidence には、根拠にした日誌の文字列をそのまま写してください。
【施設】{facility_name}({facility_type})
【日付】{date}
【警備日誌(Markdown)】
{journal_markdown}
「連絡した」を「解決した」と扱わない、を明記しないと、多くの記述が対応済みになります。 警備日誌は、発見と連絡までを書き、その後の結果は翌日以降に書かれることがよくあります。解決を推測で埋めると、翌月の報告書から未解決の事案が消えます。
人の名前を書き出さない指示も最初から入れます。 警備日誌には、来訪者、テナントの従業員、不審者として声をかけた人の名前が書かれることがあります。報告書に要るのは出来事で、個人の名前ではありません。
出力形式を固定する
生成AIの出力は、構造化出力(JSON スキーマ)で受け取ります。 Claude API では output_config.format に json_schema の形でスキーマを渡すと、その形に沿った JSON が返ります。オブジェクトには additionalProperties: false が必要で、数値の minimum / maximum などの制約は使えません。 値の範囲の確認は、受け取った後にプログラムで行います。
{
"facility_code": "",
"date": "",
"events": [
{
"category": "equipment | suspicious | key_visit | other | 要確認",
"time": "",
"location": "",
"description": "",
"action_taken": "",
"resolved": false,
"evidence": ""
}
],
"handover": [ { "text": "", "evidence": "" } ],
"unreadable_spans": [ "" ]
}
巡回記録表の側は、プログラムが次の形にそろえます。AIの出力と同じファイルには入れず、別の層として持ちます。
{
"facility_code": "",
"date": "",
"rounds": [
{
"round_no": 1,
"planned_start": "22:00",
"recorded_start": "22:05",
"recorded_end": "22:40",
"min_confidence": 0.0,
"checkpoints_marked": 18,
"checkpoints_total": 20,
"status": "done | late | not_recorded | unreadable"
}
]
}
1つ目の理由は、巡回の判定と日誌の整理を別々に直せることです。 遅れの幅を変えたいときはプログラムの設定だけ、取り出す項目を足したいときはスキーマだけを直します。
2つ目は、status の4つの値をプログラムの規則で決められることです。
status | 条件 |
|---|---|
done | 予定の回に対応する出発時刻があり、許す遅れの幅に収まる |
late | 出発時刻はあるが、許す遅れの幅を超えている |
not_recorded | 予定の回に対応する時刻の欄が空で、手書きの文字が検出されていない |
unreadable | 文字は検出されているが、信頼度が基準を下回るか、時刻として解釈できない |
3行目と4行目の区別が、この構成でいちばん大事なところです。 何も検出されていなければ not_recorded、検出されていて信頼度が低ければ unreadable。根拠を、OCRが返した数値に置きます。 チェックポイントの印が一部欠けている回は done のまま checkpoints_marked に数を残し、報告書では「一部未確認」として扱うかを業務課が決めます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 施設ごとのフォルダ | Power Automate のトリガー | ファイルの保存を検知する |
| Azure AI Document Intelligence | API呼び出し | 表・選択マーク・手書きの文字・信頼度を返す |
| 巡回計画の表 | 読み取り | 施設ごとの回と予定の時刻、許す遅れの幅 |
| Python | 関数の呼び出し | 時刻の照合と status の決定、月次の件数 |
| Claude API | API呼び出し | 警備日誌の項目分け、月次報告書の下書き |
| 日別一覧 | 書き込み | 施設ごと・日ごとの結果を1行ずつ追記 |
| Teams またはメール | 通知 | not_recorded と unreadable があった日を隊長と業務課へ |
契約先へは、この構成から何も送りません。 月次報告書は下書きまでで、送るのは業務課と営業です。巡回の抜けを含む報告は、契約の継続に関わるからです。
巡回計画の表にも書き込みません。 遅れが毎日同じ回に出るなら、それは計画が現場に合っていないのかもしれませんが、計画を変えるのは契約先との取り決めです。
人が確認する
- 翌朝、知らせのあった日だけを見る …
not_recordedとunreadableがあった施設と日です。業務課が画像を開き、本当に空欄か、かすれているだけかを目で確かめます - 隊長に理由を聞く … 空欄が本当なら、巡回しなかったのか、書き忘れたのかを隊長が答えます。答えは日別一覧の「理由」の欄に残します
- 月末に下書きを読む … 異常の件数と記述、
resolvedがtrueの事案の根拠、引継ぎの抜けを確かめます - 営業が契約先向けの言い回しを決める … 巡回の遅れや抜けをどう書くかは、契約先との関係を知っている営業が決めます
1番目を翌朝にするのが、時間を減らす鍵です。 毎日1施設あたり数十秒で済む確認を、月初めに30日分まとめて行うと、また1日分4分に戻ります。
目標は、900件をならして1件1分です。 done だけの日は一覧で流し見て数秒、知らせのあった日と事案のある日は画像と下書きを見るので数分かかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワード付きのPDF | 提出前にロックを解除する必要がある。複合機の設定を変える |
| 画像の寸法や文字の高さが下限を下回る | unreadable として人へ。スキャンの設定を見直す |
| 書式が対応表に無い | 表の列の対応が取れないので、全回を unreadable にして業務課へ |
| 1日分の綴りに2日分が混ざる | 日付の欄を読み、ファイル名の日付と違えば needs_split で人へ |
| 計画に無い臨時の巡回の記録 | 抜けの判定には使わず、日別一覧に「臨時」として残す |
| 警報の作動など、日中に急ぎの対応が要る事案 | この構成を待たず、従来どおり現場から電話で報告する |
| OCRや生成AIが応答しない | フォルダに残す。処理済みへ移すのは成功時だけ |
| 同じ日のファイルが2つ届く | 後のものを差し替えとし、前の結果と差がある回を一覧に出す |
6行目は、運用の取り決めとして先に書いておきます。 この構成は勤務明けの記録を読むもので、事案の第一報を担う仕組みではありません。 急ぎの連絡の手順は今のまま残します。
記録を残す
- 元のスキャンのPDFと、保存した日時・施設・隊長
- OCRが返したJSONの全文(表、選択マーク、単語と信頼度、
styles) - 巡回の判定結果(
rounds)と、そのとき参照した巡回計画の版 - 生成AIの出力(
events、handover、unreadable_spans) - 隊長が答えた抜けの理由と、答えた日時
- 業務課が下書きを直した箇所と、直す前の文
- 施設ごとの
unreadableの発生率
2つ目の「巡回計画の版」を残すのは、計画が後から変わるためです。 契約の変更で回の時刻が変わると、過去の late の意味が変わります。当時の計画が残っていないと、契約先から問われたときに説明できません。
最後の行は、現場の改善の材料になります。 特定の施設だけ unreadable が多いなら、書式の欄が狭いか、スキャンの設定が合っていません。
04実装レベルの3段階
最小構成では件数がさばけません。 1日分ずつ手で読ませるので、900件には使えません。確かめるための段階です。 半自動化で、1日分4分が1分程度になります。 時刻の転記と計画との比較がなくなり、人が見るのは知らせのあった日と事案のある日だけになるからです。本記事の想定はこの段階です。 本格構成で増えるのは月次報告書の下書きで、月初めの集中がさらに軽くなりますが、下書きを読む時間は残ります。 段階を飛ばさないでください。 半自動化の日別一覧を1か月回すと、unreadable の多い施設と、計画どおりに回れていない回が先に分かります。そこを現場と話してから報告書の自動化に進むほうが、契約先への説明がそろいます。
05工数削減シミュレーション
導入後 900件 × 1分 ÷ 60 = 15 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- オフィスビル・商業施設・病院・工場などの施設警備を数十か所で請け負い、現場の警備員が紙の巡回記録表と警備日誌を毎日書いている警備会社。本社の業務担当がその束を読み、契約先ごとの月次報告書を手で作っている場合。契約先ごとに巡回の時刻と経路を定めた巡回計画(警備計画)があり、それを表の形で持てる場合。
- 巡回をICタグや巡回端末で記録しており、時刻と地点がすでにデータで残っている場合は、読み取りそのものが要りません。契約先が数か所で、隊長が月末に日誌を読み返せば足りる場合。なお、事故や不審事案があったときに契約先や警察へどう報告するかの判断は、この構成では代替できません。
07最小構成で試す方法
- 先月分の綴りから、3施設×10日=30日分を選ぶ(巡回の抜けや異常があったと分かっている日を数日入れる)
- 当時、業務課がその30日分から報告書に何を載せたかを手元に用意する
- Document Intelligence Studio でレイアウトモデルを選び、30日分のPDFを1つずつ読ませ、表と手書きの時刻がどこまで読めるかを見る
- 警備日誌の Markdown の出力を手元のAIサービスに貼り、第7章の指示で異常と引継ぎを取り出させる
- 巡回の時刻は、表の出力を見ながら手で巡回計画と比べる
30日分は必ずやってください。 ワークフローを組む前に、「手書きの時刻が数字として読めるか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 時刻がほぼ読め、当時の報告と同じ事案が出た | ワークフローと照合のプログラムに進む |
| 「連絡した」を対応済みとして返した | 指示の書き方で直る。構成は有効 |
| 時刻の欄の読み違いが多い | 書式とスキャンの設定が先。 時刻の欄を広げる、ボールペンにする |
3行目は珍しくありません。 巡回記録表は、現場で歩きながら書くものです。欄を広げるだけで読める率が変わることがあり、その書式の見直しはAIの有無にかかわらず役に立ちます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
かすれた時刻が not_recorded になる | 文字が検出されたかと信頼度で分ける。空欄と読めないを混ぜない |
| 生成AIが「連絡した」を対応済みにする | resolved は終わったことが明記されたときだけ。指示に書く |
| 抜けの判定を生成AIに任せてしまう | 時刻の比較はプログラムで行う |
| 計画が文章で、何を抜けとするか決まらない | 回ごとに予定時刻と許す遅れの幅を数字で持つ |
| 書式が現場ごとに違い、表の列が合わない | 書式の種類ごとに対応表を作る。無い書式は人へ |
| 余白の引継ぎが拾われない | 段落の出力ごと渡し、余白も対象と指示する |
| 施設を中身から推定して取り違える | 施設と日付はフォルダとファイル名で決める |
| 日誌の人名が報告書に載る | 役割で書かせる。名前は書き出さない |
| 綴りが月初めにまとめて届く | 勤務明けに毎日スキャンする運用に変える |
| 急ぎの事案をこの仕組みで知ろうとする | 第一報は従来どおり電話。 この構成は記録の整理 |
上の2行が、この構成の失敗のほとんどです。 どちらも「書かれていない」と「読めない」「終わっていない」を混ぜることから起きます。判定の根拠をOCRの数値と日誌の文言に置いてあるかで、契約先に出せる報告になるかが決まります。
下から2行目は、技術ではなく運用の変更です。 読み取りを自動にしても、綴りが月に1回しか届かなければ、抜けに気づくのは翌月のままです。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 契約先の施設の巡回経路とチェックポイント、巡回の時刻、警報や施錠の不備、鍵の貸出、来訪者や不審者に関する記述、勤務した警備員の名前です。
- 巡回計画と巡回の実績は、契約先の防犯の情報です … どの時刻にどこを回り、どこが手薄かが分かる情報で、外へ漏れると犯罪に使われうるものです。 保管先のフォルダは施設ごとに権限を分け、業務課と担当の営業だけが開ける形にします
- 生成AIへ渡すのは警備日誌だけにする … 巡回計画とチェックポイントの一覧は、照合のプログラムの中だけで使います。計画そのものをAIへ渡さないでください
- 人の名前を報告書に載せない … 日誌に書かれた来訪者、テナントの従業員、声をかけた人の名前は、報告書には要りません。役割で書かせ、元の画像は社内に残します
- 巡回の抜けを自動で契約先へ報告しない … 出すのは下書きまでです。抜けの理由を確かめないまま報告すると、書き忘れを巡回の不履行として伝えることになります
- 警備員の評価に直結させない … 日別一覧には、誰がどの回を担当したかが残ります。抜けや遅れの件数をそのまま個人の評価に使うと、記録を正直に書かなくなります。 使い方を先に決めて現場に伝えます
- 生成AIのデータの扱いを確かめる … 警備日誌には施設内の出来事が書かれます。API の利用条件と、入力が学習に使われない設定かを、契約前に確かめてください
誤りが起きた場合のリスクは、巡回の抜けを見落とすことと、抜けでないものを抜けとして報告することの2つです。 前者は unreadable を done に混ぜると起き、後者は unreadable を not_recorded に混ぜると起きます。どちらも同じ区別から出ているので、そこだけは設計で守ります。
10まず何から始めるか
1週目:巡回計画を表にそろえる
30施設のうち、巡回の回数が多い5施設から、回の番号・予定の出発時刻・許す遅れの幅・チェックポイントの一覧を表にします。許す遅れの幅が決まっていない施設は、営業が契約先と確かめます。
2週目:30日分で試す
5施設の先月の綴りから30日分を選び、Studio で読み取って、時刻とチェックの印がどこまで読めるかを見ます。当時の報告書と突き合わせ、異常の取りこぼしと、「連絡した」が対応済みになっていないかを最優先で見ます。
3週目:現場の運用を変える
5施設の隊長に、勤務明けにその日の綴りをスキャンしてもらうように頼みます。複合機の解像度とカラーの設定をそろえ、ファイル名の決まりを伝えます。読みにくかった書式は、時刻の欄を広げた版に替えます。
4週目:フォルダから日別一覧までをつなぐ
Power Automate でフォルダを見張り、OCRと照合のプログラムを呼び、日別一覧に書き出すところまで作ります。この時点では通知を出さず、一覧を業務課が毎朝見るだけにします。
2か月目: 翌朝の通知と、隊長が理由を答える欄を足します。not_recorded と unreadable の件数を施設ごとに数えます。3か月目以降: 月次報告書の下書きを足し、30施設に広げます。1日分4分が何分になったかを実測し、unreadable の多い施設の書式とスキャンを直した時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
レイアウトモデル(prebuilt-layout)が v4.0(2024-11-30 GA)でテキスト・表・選択マーク・段落・構造を取り出すこと。入力が PDF、画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)、Office 形式であること。PDF と TIFF が最大2,000ページ(Free は最初の2ページのみ)、ファイルサイズが S0 で500MB・F0 で4MB であること。画像が50×50から10,000×10,000ピクセル、テキストの最小の高さが1024×768の画像で12ピクセル(150dpiで約8ポイント)であること。パスワード付き PDF は提出前に解除が必要なこと。表がセルごとに行と列の番号を持つこと。選択マークが selected/unselected と信頼度を返すこと。単語ごとの信頼度と、行の手書きスタイル(styles)が返ること。outputContentFormat=markdown で Markdown 出力ができ、表が HTML の表で表されること。複数ページにまたがる表はページに分けて後処理するよう案内されていること | Microsoft Learn: ドキュメント レイアウト分析 | 2026-10-14 |
読み取りモデルとレイアウトモデルの手書きテキストの対応言語に、日本語(ja)が含まれること(v4.0) | Microsoft Learn: 読み取りとレイアウトの言語サポート | 2026-10-14 |
Claude API の構造化出力が output_config.format に json_schema を渡す形であること。オブジェクトに additionalProperties: false が必要で、数値の minimum/maximum などの制約に対応しないこと | Claude Docs: Structured outputs | 2026-10-14 |
巡回の回数・時刻・許す遅れの幅は、契約先との取り決めです。 本記事は製品の公開仕様で確認できた範囲だけを扱っており、警備業務の契約や報告の内容は、各社の契約と社内の規程に従ってください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1518)についてのご相談はこちらから。
