飲食店・給食の現場で手書きされる冷蔵庫と加熱の温度記録を読み取り、基準を外れた記録と記入漏れを拾って、店舗別の月次の点検表にする
店舗や給食の現場で手書きされる冷蔵庫・冷凍庫と加熱の温度記録表を読み取り、日付と機器ごとの値にそろえます。店舗の衛生管理計画の基準と照らし、基準を外れた記録と記入漏れを拾って、店舗別の月次の点検表にします。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 対象業界
- 介護/教育/飲食
- 対象部門
- 品質管理
- 対象業務
- 内容確認・チェック/集計・分析
- 主な課題
- 人手が足りない/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 月末に各店舗から記録表の画像がメールで届き、店舗ごとのフォルダに保存する
- 担当者が記録表を開き、店舗の衛生管理計画の基準を確かめる
- 日付の行を上から順に見て、基準を外れた値に印を付ける
- 空欄を探し、休業日か記入漏れかを店舗の営業日の表で確かめる
- 基準を外れた日に、是正の欄(何をしたか)が書かれているかを見る
- 店長の確認の印が押されているかを見る
- 店舗ごとに件数を点検結果の表に書き、店舗とエリアの責任者に是正の依頼を送る
- 人店舗が月末に記録表をスキャンかスマートフォンで撮り、店舗用の受付フォルダに保存する
- 自動保存をきっかけに処理が動き、形式・画像の寸法・ページ数を確かめる
- 自動Azure AI Document Intelligence のレイアウトモデルが、記録表の表・手書きの文字・チェック欄の状態を信頼度つきで返す
- 自動Azure OpenAI が、表のセルを「日付・時間帯・機器・値・記入者」の行にそろえる
- 自動プログラムが、店舗の衛生管理計画の基準・営業日の表と照らし、基準外・記入漏れ・是正の記録の抜け・確認の印の抜けを判定する
- 自動店舗別の月次の点検表と、是正の依頼の下書きを作る
- 人本部の担当者が、基準外と判定された欄と信頼度の低い欄を原本の画像で確かめる
- 人担当者が点検表を確定し、是正の依頼を直して店舗とエリアの責任者へ送る
各工程の詳しい説明を読む
- 月末に各店舗から記録表の画像がメールで届き、店舗ごとのフォルダに保存する
- 担当者が記録表を開き、店舗の衛生管理計画の基準を確かめる
- 日付の行を上から順に見て、基準を外れた値に印を付ける
- 空欄を探し、休業日か記入漏れかを店舗の営業日の表で確かめる
- 基準を外れた日に、是正の欄(何をしたか)が書かれているかを見る
- 店長の確認の印が押されているかを見る
- 店舗ごとに件数を点検結果の表に書き、店舗とエリアの責任者に是正の依頼を送る
(a)1枚の表に数百の欄がある。 冷蔵庫が4台あれば、朝と夕で1日8つの値、1か月で200を超える欄です。基準を外れた値は全体のごく一部で、それを見つけるためにすべての欄を見ます。
(b)手書きの数字が読みにくい。 「1」と「7」、「3」と「8」、小数点の有無。冷凍庫の「−」が薄くて、マイナス18℃なのかプラス18℃なのか分からない欄があります。 読み違えると、基準内の記録を逸脱として店舗に問い合わせることになります。
(c)是正が書かれていないことに気づかない。 基準を外れた値に印を付けることに注意が向き、その日の是正の欄が空いていることを見落とします。 逸脱した記録に是正の記録が無いことは、計画の運用として一番確かめたいところです。
(d)加熱の基準が1つの温度ではない。 中心部を75℃で1分間の加熱と同等の条件として、70℃で3分、65℃で15分のような組み合わせも妥当と考えられるとされています。温度だけを見て「75℃未満は逸脱」とすると、時間を長くとっている正しい記録まで印が付きます。
- 【人】 店舗が月末に記録表をスキャンかスマートフォンで撮り、店舗用の受付フォルダに保存する
- 【自動】 保存をきっかけに処理が動き、形式・画像の寸法・ページ数を確かめる
- 【自動】 Azure AI Document Intelligence のレイアウトモデルが、記録表の表・手書きの文字・チェック欄の状態を信頼度つきで返す
- 【自動】 Azure OpenAI が、表のセルを「日付・時間帯・機器・値・記入者」の行にそろえる
- 【自動】 プログラムが、店舗の衛生管理計画の基準・営業日の表と照らし、基準外・記入漏れ・是正の記録の抜け・確認の印の抜けを判定する
- 【自動】 店舗別の月次の点検表と、是正の依頼の下書きを作る
- 【人】 本部の担当者が、基準外と判定された欄と信頼度の低い欄を原本の画像で確かめる
- 【人】 担当者が点検表を確定し、是正の依頼を直して店舗とエリアの責任者へ送る
7番目が、この設計の分かれ目です。 基準外の判定は機械でできますが、手書きの読み違いで基準外になっていないかは、人が画像で見ます。 読み違いのまま店舗に問い合わせると、記録をつけている現場の信頼を失います。
5番目の判定をプログラムに置いているのも意図してのことです。 基準の温度と照らすのは数字の比較で、加熱の温度と時間の組み合わせも表にしておけば機械で決まります。 AIには、ばらばらに読み取られたセルを行にそろえるところだけをさせます。
02今回想定するシステム構成
手書きの温度記録表(スキャン・スマートフォンの写真) ▼【トリガー】店舗用の受付フォルダ(Azure Blob Storage のコンテナー)への保存 Azure Functions ── 形式・画像の寸法・ページ数の確認 ▼ Azure AI Document Intelligence(レイアウトモデル) │ 表・手書きの文字・チェック欄の状態・信頼度 ▼ Azure OpenAI ── セルを「日付・時間帯・機器・値・記入者」の行にそろえる(構造化出力) ▼ Azure Functions ── 衛生管理計画の基準・営業日の表と照らして判定 ▼ 店舗別の月次の点検表/是正の依頼の下書き ▼ 【本部の担当者が確認】──▶ 店舗・エリアの責任者へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence(レイアウトモデル prebuilt-layout) | Google Document AI |
| 生成AI | Azure OpenAI(Microsoft Foundry)(表のセルを行にそろえる、是正の依頼の下書き) | Claude API、Gemini API |
| 連携 | Azure Functions(保存を起点に処理を動かし、基準との照合と点検表の作成を行う) | Azure Logic Apps |
| 保管 | Azure Blob Storage(記録表の画像と読み取り結果) | 社内のファイルサーバー |
衛生管理計画と点検結果の表は、新しく足すものではありません。 ただし、計画のPDFから機器ごとの基準を1行ずつの表に起こす作業が最初に要ります。照合はその表を読むだけで、計画のPDFそのものはAIに渡しません。
読み取りの土台は、Azure AI Document Intelligence のレイアウトモデルです。 テキスト、表、選択マーク、文書の構造を抽出し、表はセルごとに行と列の位置を返します。記録表は日付の行と項目の列の表なので、どの日の、どの機器の欄かをセルの位置から決められます。
手書きの日本語と数字を読めます。 レイアウトモデルの手書きの文字の対応言語に日本語が入っており、行ごとに手書きかどうかの判定と信頼度も返ります。記入者の名前や是正の内容のような手書きの日本語も、読み取りの対象になります。
チェック欄は選択マークとして返ります。 ○×ではなく四角の中にチェックを入れる様式なら、selected / unselected の状態と信頼度がそのまま取れます。点検表の様式を作り直すときは、手書きの○×よりチェック欄のほうが読み取りに向きます。
Textract を代替候補に入れていないのは、日本語を読めないからです。 手書きの日本語が混ざる記録表は、レイアウトモデルか Google Document AI で読みます。
03どうやって実装するのか
処理の起点を決める
店舗用の受付フォルダに画像が保存されたことを起点にします。 フォルダは店舗ごとに分け、店舗のコードをフォルダ名にします。どの店舗の記録表かを、画像の中身から推定させないためです。 店名の書き方は記録表によって違い、略称や手書きで書かれていることもあります。
読み取りと照合は保存のたびに動かし、点検表は月初の定時実行でまとめます。 前月分の記録表が届いた店舗から読み取りを進め、月の3営業日目の朝に、届いた記録表で点検表を作り、届いていない店舗を一覧にします。 記録表が届かない店舗は、点検の対象から抜け落ちやすいからです。
受付フォルダは Azure Blob Storage のコンテナーにし、Azure Functions の Blob Storage トリガーで動かします。 遅延の小さいイベントベースの実装が推奨されており、失敗したファイルは既定で計5回まで再試行され、すべて失敗すると専用のキューに記録されます。月初の点検表を作る前に、そのキューが空であることを確かめます。 同じ画像を二度保存したときは、ファイル名と撮影日で同じ記録表かを見分け、新しいほうを読み、古いほうの読み取り結果を差し替えます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 記録表の画像 | 1か月分の表(日付の行 × 機器・時間帯の列)、記入者、是正の欄、店長の確認の印 | 店舗用の受付フォルダ |
| 読み取り結果 | 表のセル・手書きの文字・選択マークと、それぞれの信頼度。行ごとの手書きの判定 | Azure AI Document Intelligence |
| 基準の表 | 店舗・機器ごとの基準の温度(上限・下限)、測る時間帯 | 衛生管理計画から自社で起こした表 |
| 加熱の条件の表 | 品目ごとの基準と、同等とする温度と時間の組み合わせ | 衛生管理計画から自社で起こした表 |
| 営業日の表 | 店舗ごとの休業日、機器の停止日(修理・入替え) | 店舗の営業日の管理表 |
| 様式の対応表 | 記録表の様式の版ごとの、列の並び(どの列がどの機器か) | 自社で用意する表 |
質を決めるのは、基準の表です。 計画のPDFに書かれた基準を、店舗・機器ごとに1行ずつ起こします。冷蔵庫の基準を「10℃以下」のように1つにまとめず、機器ごとに持ちます。店舗が冷蔵庫を入れ替えたときに、表の更新を忘れると、正しい記録が基準外に見えます。
営業日の表は、記入漏れと休業日を分けるために持ちます。 休業日の空欄を記入漏れとして返すと、店舗は点検表を信用しなくなります。
加熱の条件の表には、同等とする組み合わせを並べます。 中心部を75℃で1分間の加熱と同等の条件として、70℃で3分、69℃で4分、68℃で5分、67℃で8分、66℃で11分、65℃で15分が妥当と考えられるとされています。どの組み合わせを自社の計画で採るかは品質管理部が決め、表にはその結果だけを入れます。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 表のセル | レイアウトモデルの tables(cells の rowIndex・columnIndex・kind) | どの日の、どの機器の欄か |
| 列の見出し | kind が columnHeader のセル | 機器名・時間帯の列の特定 |
| 手書きの文字 | styles の isHandwritten と信頼度、words の confidence | 値の読み取りの確かさ |
| チェック欄 | selectionMarks の state と信頼度 | 一般的な衛生管理の点検表の○× |
| 基準・営業日 | 自社の表 | 照合の相手 |
列の見出しは、読み取り結果と様式の対応表の両方で決めます。 見出しが手書きで「冷1」「冷2」と書かれている様式では、読み取りだけでは機器が決まりません。様式の版ごとに列の並びを表にしておけば、見出しが読めなくても列の位置で機器を決められます。
数字の信頼度は、単語ごとの confidence を使います。 セル全体の読み取りが確かでも、小数点やマイナスの記号だけが薄いことがあります。 値を作る単語の信頼度のうち、最も低いものをその欄の信頼度にします。
AIへ渡す前に整形する
- 形式の確認 … PDFと画像(JPEG・PNG・BMP・TIFF・HEIF)であることを確かめます
- 画像の寸法の確認 … 50×50から10,000×10,000ピクセルの間である必要があります
- 文字の大きさの確認 … 抽出するテキストの最小高さは、1024×768の画像で12ピクセル(150dpiで約8ポイント)です。1か月分を1枚に詰めた表は、欄が小さく、この下限に近づきます
- ページの確認 … 1つのファイルに複数の記録表が入っていれば、表ごとに分けます。PDFとTIFFは最大2,000ページ、有料(S0)レベルで500MBまでです
- 月の確認 … 記録表の年月の欄を読み、ファイル名の年月と合わなければ担当者へ回します
3番目を軽く見ないでください。 レイアウトモデルの案内でも、ドキュメントごとに1つの明確な写真か高品質のスキャンが勧められています。斜めや遠くから撮った写真は、文字の高さが下限を割ります。店舗には、表が画面いっぱいに入るように真上から撮る撮り方を案内します。
AIに処理させる
させるのは、読み取られた表のセルを「日付・時間帯・機器・値・記入者」の行にそろえることだけです。
| 項目 | 取り出し元 | 書かれていないときの扱い |
|---|---|---|
| 日付 | 表の行の見出し | 行が決まらなければ ambiguous |
| 時間帯・機器 | 列の見出しと様式の対応表 | 決まらなければ ambiguous |
| 温度の値 | セルの文字。書かれたとおり | blank。前後の日の値で埋めない |
| 加熱の時間 | 加熱の記録表の時間の欄 | blank |
| 記入者 | 記入者の欄 | blank |
| 是正の内容 | 是正の欄の手書きの文字。原文のまま | blank |
| 店長の確認 | 確認の欄の印・サイン・チェック | blank |
| させないこと | 理由 |
|---|---|
| 基準内か基準外かの判定 | プログラムが基準の表と比べる |
| 読みにくい数字を、ありそうな値に直す | 「3」か「8」かは原本で人が見る |
| 冷凍庫の値にマイナスを補う | 記号が読めなければ、読めないものとして人へ |
| 空欄を前後の日の値で埋める | 記入漏れという事実が消える |
| 是正が十分だったかの判断 | 品質管理部が決める |
3行目がいちばん起きやすい失敗です。 冷凍庫の欄に「18」とだけ読めると、冷凍庫だから −18 だろうと補います。補った値はたいてい正しいのですが、マイナスが本当に書かれていなかった場合、それは冷凍庫が止まっていた記録かもしれません。 補わずに人へ回します。
指示内容を固定する
あなたは飲食店チェーンの本部の品質管理の担当として、店舗が手書きした
温度記録表を、点検のための行にそろえる立場です。
渡すのは Azure AI Document Intelligence のレイアウトモデルが返した
表のセル(行・列の位置、文字、信頼度、手書きかどうか)と、
この記録表の様式の対応表です。
読み取り結果に書かれていることだけを使ってください。推測で埋めないでください。
【やること】
- 表のセルを、date / time_slot / equipment / value / unit / recorder /
corrective_action / manager_check の行にそろえてください。
- 時間帯と機器は、様式の対応表の列の位置で決めてください。
決められないセルは status を ambiguous にしてください。
- value には、セルに書かれた文字をそのまま入れてください。
【厳守事項】
- 値を直さないでください。「3」か「8」か、「1」か「7」か迷う文字は、
読み取られた文字のまま入れ、status を low_confidence にしてください。
- 記号を補わないでください。マイナスの記号が読み取られていなければ、
冷凍庫の欄でもマイナスを付けないでください。sign_unclear を true に
してください。
- 空欄は value を空にし、status を blank にしてください。
前後の日の値や、ほかの機器の値で埋めないでください。
- 「休」「—」「停止」などの書き込みは、value に書かれたとおり入れてください。
- 是正の欄は、書かれた文を原文のまま入れてください。要約しないでください。
- 基準内か基準外か、是正が十分かどうかは書かないでください。
- confidence は読み取り結果の値のうち、その欄で最も低いものを入れてください。
【読み取り結果】{layout_result}
【様式の対応表】{form_map}
「マイナスを補わない」を明記しないと、冷凍庫の欄では必ず補います。 冷凍庫の温度がマイナスであることは常識なので、AIにとって補うことは親切な訂正に見えます。 禁じるのは、読めなかった記号を読めたことにする判断です。
出力形式を固定する
次の形のJSONで受け取ります。
{
"store_code": "",
"form_type": "cold_storage | cooking | general_hygiene",
"year_month": "",
"rows": [
{
"date": "",
"time_slot": "morning | evening | other",
"equipment": "",
"value": "",
"unit": "celsius | minutes | check",
"sign_unclear": false,
"recorder": "",
"corrective_action": "",
"manager_check": "",
"status": "ok | blank | ambiguous | low_confidence",
"handwritten": true,
"confidence": 0
}
]
}
1つ目の理由は、判定をプログラムに渡せることです。 rows を基準の表と営業日の表に照らし、AIではなく Azure Functions が次の区分を付けます。
| 判定 | 条件 | 点検表での扱い |
|---|---|---|
out_of_range | 値が基準の上限・下限を外れる。加熱は温度と時間の組み合わせが条件の表のどれも満たさない | 是正の欄を確かめる |
no_corrective | out_of_range の日に corrective_action が空 | 最優先で店舗へ確認 |
missing | blank で、営業日の表では営業日 | 店舗へ記録のしかたを確認 |
closed | blank で、営業日の表で休業日か機器の停止日 | 点検表には出さない |
needs_review | low_confidence、ambiguous、sign_unclear | 本部の担当者が原本を見る |
no_manager_check | manager_check が空 | 店長へ確認 |
2つ目は、needs_review を判定より先に人へ回せることです。 読み取りが不確かな欄は、基準と照らす前に担当者が原本で値を直し、直した値で判定をやり直します。 読み違いから out_of_range が出ることを防ぎます。
3つ目は、点検表を件数の表にできることです。 店舗ごとに、out_of_range・no_corrective・missing・no_manager_check の件数と、該当する日付を並べます。店舗が月をまたいでどう変わったかが、件数の推移で見えます。
構造化出力ではすべてのフィールドを必須にし、オブジェクトに additionalProperties: false を付けます。数値の範囲の制約はスキーマで書けないため、値を数として読めるかの確認はプログラムで行います。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 店舗用の受付フォルダ(Azure Blob Storage) | Azure Functions の Blob Storage トリガー | 画像の保存を検知する |
| Azure AI Document Intelligence | API呼び出し(prebuilt-layout) | 表・手書きの文字・選択マーク・信頼度を返す |
| Azure OpenAI | API呼び出し(構造化出力) | セルを行にそろえる、是正の依頼の下書き |
| 基準の表・営業日の表 | 読み取り | 照合の相手 |
| 点検結果の表 | 書き込み(担当者の確定の後) | 店舗別の月次の件数 |
| 店舗・エリアの責任者 | メール(人が送る) | 点検表と是正の依頼 |
点検結果の表へは、担当者が確定してから書き込みます。 needs_review の欄が残ったまま件数を出すと、読み違いの件数が店舗の成績として残ります。
人が確認する
担当者が見るのは、needs_review と out_of_range、no_corrective の欄です。
needs_reviewを先に見る … 原本の画像で値を確かめ、読み違いなら値を直します。直した値で判定をやり直しますout_of_rangeを原本で見る … 信頼度が高くても、基準外の欄は画像で値を確かめますno_correctiveを店舗に確かめる … 是正をしたが書いていないのか、是正をしていないのかを聞きます- 点検表を確定する … 件数と日付を確かめ、是正の依頼の下書きを直します
2番目を省かないでください。 基準外の記録は、店舗にとっては指摘の記録です。 読み違いで指摘された店舗は、次の月から記録を丁寧につけるのではなく、本部の点検を疑うようになります。
目標は、120枚をならして1枚6分です。 多くの記録表は件数を確かめて終わり、基準外や読みにくい欄が多い記録表だけに時間を使います。needs_review が多い店舗は、撮り方か記入のしかたに理由があります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 画像の文字が小さすぎる・斜め・影がある | 文字の高さが下限を割る。店舗に撮り直しを依頼 |
| 様式の版が対応表に無い | 列の位置で機器が決まらない。担当者が対応表に版を足す |
| 冷凍庫の値の記号が読めない | sign_unclear。原本で人が見る |
| 機器の入替えで列の意味が変わった | 営業日の表に停止日、基準の表に新しい機器を足す |
| 記録表の年月が合わない | ファイル名と記録表の年月を担当者が確かめる |
| 1つのファイルに2か月分が入っている | 表ごとに分けて読む |
| 記録表が届かない店舗がある | 月初の一覧に出し、エリアの責任者へ |
| 是正の欄に「別紙」とだけある | 別紙の画像の提出を依頼。是正ありとは判定しない |
上の2行が大半を占めます。 どちらもAIの問題ではなく、撮り方と様式の管理の問題です。 撮り方の案内を1枚の紙にして店舗に貼ってもらうほうが、読み取りの精度を上げるより効きます。
記録を残す
- 記録表の画像と、受け取った日時・店舗コード
- レイアウトモデルが返した読み取り結果の全文
- そろえた行のJSONと、そのとき使った様式の対応表の版
- 判定の結果と、そのとき照らした基準の表・営業日の表の版
- 担当者が直した値と、直す前の値
- 確定した点検表と、店舗へ送った是正の依頼
- 店舗ごとの
needs_reviewの発生率と、no_correctiveの件数の推移
4つ目で基準の表の版を残すのは、基準が後から変わるためです。 機器の入替えや計画の見直しで基準が変わったあとに照合し直すと、過去の月の判定が変わってしまいます。
原本は店舗で保管し、本部に残すのは画像と読み取り結果です。 どちらを記録の正本とするか、何年保存するかは、衛生管理計画の記録の保存の定めに合わせて先に決めます。
04実装レベルの3段階
半自動化で、1枚25分が15分程度になります。 値を目で追う時間は減りますが、基準と見比べる作業と、休業日の確認が手作業で残ります。本格構成で6分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、needs_review が多い店舗と様式の版が分かります。撮り方と様式を整えてから判定を足すほうが、店舗への空振りの問い合わせが減ります。
05工数削減シミュレーション
導入後 120件 × 6分 ÷ 60 = 12 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 数十の店舗や給食の現場を持つ外食チェーン・給食の受託会社で、冷蔵庫・冷凍庫の温度や加熱の中心温度を紙の記録表に手書きしている場合。本部の品質管理の担当者が、月末に集めた記録表を1枚ずつめくって基準を外れた値と記入漏れを探している場合。店舗ごとの衛生管理計画に基準の温度が決めてある場合。
- 温度をセンサーとデータロガーで自動で記録しており、紙の記録表が無い場合。店舗が1〜2店で、店長が毎日記録を見れば足りる場合。衛生管理計画が無く、何度を外れたら逸脱とするかが決まっていない場合(先に計画を作ります)。なお、逸脱した食品をどう扱うか、是正が十分だったかの判断は、この構成では代替できません。
07最小構成で試す方法
- 前月の記録表から10枚を選ぶ(冷凍庫の記録表と、手書きの字が読みにくい店舗を入れる)
- 10枚について、当時の点検で付けた印と件数を用意する
- 手元のAIサービスに画像を1枚ずつ貼り、「日付ごと・機器ごとの温度を表にしてください。読めない数字は直さずに『判読不能』とし、空欄は空欄のままにしてください。マイナスの記号を補わないでください」と指示する
- 出てきた表を基準と手で比べ、当時の点検の印と同じ欄が拾えるかを見る
- 読み違えた欄が、どの数字・どの記号だったかを書き出す
| 出てきた内容 | 判断 |
|---|---|
| 当時の点検と同じ欄が拾えた | OCRと照合の連携に進む |
| マイナスを補った・空欄を埋めた | 指示の書き方で直る。構成は有効 |
| 判読不能が多い | 撮り方と様式が先。 AIの問題ではない |
3行目が出ることは珍しくありません。 失敗ではなく、本部の担当者が1枚に25分かかっていた理由が1つ分かったということです。 その場合は、記録表の欄を大きくするか、チェック欄に変えるかを先に検討し、直した様式で同じ店舗の翌月分を試します。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 冷凍庫の値にマイナスを補う | 指示で禁じ、sign_unclear で人へ |
| 読みにくい数字をありそうな値に直す | 直さず low_confidence で人へ |
| 読み違いで基準外が出て店舗に問い合わせる | needs_review を判定の前に人が直す |
| 休業日を記入漏れとして返す | 営業日の表と機器の停止日を照らす |
| 加熱を温度だけで判定する | 温度と時間の組み合わせの表で判定する |
| 機器を入れ替えたのに基準の表が古い | 店舗の機器の変更を品質管理部に届けてもらう |
| 斜めや遠くから撮った写真で読めない | 真上から表を画面いっぱいに撮る案内を貼る |
| 様式の版が混ざって列の意味がずれる | 様式に版を印刷し、対応表を版ごとに持つ |
| 是正の欄の「別紙」を是正ありと扱う | 別紙が届くまで no_corrective のまま |
上の3行が、この構成の失敗のほとんどです。 どれも、手書きの読み違いが基準外の判定に混ざるところから出ています。読み取りの不確かさを判定の前に人へ回せるかで、店舗に信頼される点検表になるかが決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 店舗の機器ごとの温度の記録、記入者の名前、是正の内容です。個人の情報は記入者の名前程度で、機密性は高くありません。
- 外部へ渡す範囲を記録表に限る … 生成AIに渡すのは記録表1枚の読み取り結果と様式の対応表だけです。基準の表や店舗の点検の成績は、照合をプログラムの側で行い、AIへ渡しません
- 点検の結論をAIに出させない … 基準外かどうかはプログラムが基準の表で決め、是正が十分だったか、食品をどう扱うかは品質管理部と店長が決めます
- 記録そのものを書き換えない … 担当者が直すのは読み取りの値で、店舗の原本の記録ではありません。 原本と異なる値で点検表を作った場合は、直した記録を残します
- 点検表を店舗の評価だけに使わない … 件数を人事の評価に直結させると、記録を正直につけない理由になります。 HACCPに沿った衛生管理で求められているのは、記録と定期的な検証による見直しです
- 原本の保存を店舗任せにしない … 本部に画像があっても、原本の保存の期間と場所を衛生管理計画で決めておきます
誤りが起きた場合のリスクは、基準外の記録を見落として是正の確認が漏れることと、読み違いで基準内の記録を指摘することの2つです。 前者は全欄を機械で照らすことで、後者は判定の前に人が読み取りを直すことで防ぎます。
10まず何から始めるか
1週目:基準の表を起こす
40か所の衛生管理計画から、店舗・機器ごとの基準の温度と、加熱の温度と時間の組み合わせを1行ずつの表にします。機器の一覧が計画と現場で合っているかも、このときに確かめます。
2週目:10枚で試す
第8章のとおり、前月の10枚で値を表にさせます。マイナスを補わないか、読めない数字を直さないかを最優先で見ます。
3週目:撮り方と様式を整える
試した結果、判読不能の多かった店舗に撮り方を案内します。様式に版を印刷し、版ごとの列の並びを対応表にします。 営業日の表に休業日と機器の停止日を入れる運用も決めます。
4週目:受付フォルダから行の一覧までをつなぐ
受付フォルダを見張り、レイアウトモデルを呼び、行にそろえた一覧を書き出すところまで作ります。この時点では判定を作らず、needs_review の数だけを見ます。
2か月目: 基準と営業日の表による判定を足し、店舗別の点検表を出します。3か月目以降: 是正の依頼の下書きを足し、1枚25分が何分になったかを実測します。逸脱した記録に是正が書かれていない店舗が、月初の数日で全店分そろって見えるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 2021年6月1日から、原則としてすべての食品等事業者にHACCPに沿った衛生管理が求められること。衛生管理計画を作成し、手順書を作成し、衛生管理の実施状況を記録・保存し、計画と手順書の効果を定期的に検証して見直すこと。食品等事業者団体が作成した業種別手引書があること | 厚生労働省: HACCP(ハサップ) | 2026-10-06 |
| 食肉の中心部を75℃で1分間加熱する条件と同等の条件として、70℃3分・69℃4分・68℃5分・67℃8分・66℃11分・65℃15分が妥当と考えられること。中心温度計の適切な使用で中心部の温度が目標を下回らないことを確認する必要があること | 厚生労働省: 食肉の加熱条件に関するQ&A | 2026-10-06 |
レイアウトモデル(prebuilt-layout)がテキスト・表・選択マーク・文書の構造を抽出し、表のセルの行と列の位置、columnHeader、選択マークの selected/unselected と信頼度、行ごとの手書きの判定を返すこと。ドキュメントごとに1つの明確な写真か高品質のスキャンが勧められること。画像が50×50〜10,000×10,000ピクセル、文字の最小高さが1024×768で12ピクセル、PDFとTIFFが最大2,000ページ(Freeは2ページ)、S0で500MBであること | Microsoft Learn: ドキュメント レイアウト分析 | 2026-10-06 |
| レイアウトモデルの手書きの文字の対応言語に日本語が含まれること | Microsoft Learn: Language support for Read and Layout | 2026-10-06 |
構造化出力でJSONスキーマに従わせ、すべてのフィールドを必須にし、オブジェクトに additionalProperties: false を付けること。minimum・maximum などの数値の制約が使えないこと | Microsoft Learn: Structured outputs (Azure OpenAI in Microsoft Foundry) | 2026-10-06 |
| Blob Storage トリガーが新しいまたは更新されたファイルを検知して関数を起動し、遅延の小さいイベントベースの実装が推奨されること。失敗時は既定で計5回再試行し、すべて失敗すると専用のキューに記録されること | Microsoft Learn: Azure Blob storage trigger for Azure Functions | 2026-10-06 |
基準の温度と記録の保存の期間は、各店舗の衛生管理計画と、所管の保健所の指導に従ってください。 本記事は厚生労働省のページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0461)についてのご相談はこちらから。
