Media > AI活用ユースケース > 品質管理 > 飲食店・給食の現場で手書きされる冷蔵庫と加熱の温度記録を読み取り、基準を外れた記録と記入漏れを拾って、店舗別の月次の点検表にする

飲食店・給食の現場で手書きされる冷蔵庫と加熱の温度記録を読み取り、基準を外れた記録と記入漏れを拾って、店舗別の月次の点検表にする

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

店舗や給食の現場で手書きされる冷蔵庫・冷凍庫と加熱の温度記録表を読み取り、日付と機器ごとの値にそろえます。店舗の衛生管理計画の基準と照らし、基準を外れた記録と記入漏れを拾って、店舗別の月次の点検表にします。

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

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

導入前(Before)
  1. 月末に各店舗から記録表の画像がメールで届き、店舗ごとのフォルダに保存する
  2. 担当者が記録表を開き、店舗の衛生管理計画の基準を確かめる
  3. 日付の行を上から順に見て、基準を外れた値に印を付ける
  4. 空欄を探し、休業日か記入漏れかを店舗の営業日の表で確かめる
  5. 基準を外れた日に、是正の欄(何をしたか)が書かれているかを見る
  6. 店長の確認の印が押されているかを見る
  7. 店舗ごとに件数を点検結果の表に書き、店舗とエリアの責任者に是正の依頼を送る
導入後(After)
  1. 人店舗が月末に記録表をスキャンかスマートフォンで撮り、店舗用の受付フォルダに保存する
  2. 自動保存をきっかけに処理が動き、形式・画像の寸法・ページ数を確かめる
  3. 自動Azure AI Document Intelligence のレイアウトモデルが、記録表の表・手書きの文字・チェック欄の状態を信頼度つきで返す
  4. 自動Azure OpenAI が、表のセルを「日付・時間帯・機器・値・記入者」の行にそろえる
  5. 自動プログラムが、店舗の衛生管理計画の基準・営業日の表と照らし、基準外・記入漏れ・是正の記録の抜け・確認の印の抜けを判定する
  6. 自動店舗別の月次の点検表と、是正の依頼の下書きを作る
  7. 人本部の担当者が、基準外と判定された欄と信頼度の低い欄を原本の画像で確かめる
  8. 人担当者が点検表を確定し、是正の依頼を直して店舗とエリアの責任者へ送る
各工程の詳しい説明を読む
  1. 月末に各店舗から記録表の画像がメールで届き、店舗ごとのフォルダに保存する
  2. 担当者が記録表を開き、店舗の衛生管理計画の基準を確かめる
  3. 日付の行を上から順に見て、基準を外れた値に印を付ける
  4. 空欄を探し、休業日か記入漏れかを店舗の営業日の表で確かめる
  5. 基準を外れた日に、是正の欄(何をしたか)が書かれているかを見る
  6. 店長の確認の印が押されているかを見る
  7. 店舗ごとに件数を点検結果の表に書き、店舗とエリアの責任者に是正の依頼を送る

(a)1枚の表に数百の欄がある。 冷蔵庫が4台あれば、朝と夕で1日8つの値、1か月で200を超える欄です。基準を外れた値は全体のごく一部で、それを見つけるためにすべての欄を見ます。

(b)手書きの数字が読みにくい。 「1」と「7」、「3」と「8」、小数点の有無。冷凍庫の「−」が薄くて、マイナス18℃なのかプラス18℃なのか分からない欄があります。 読み違えると、基準内の記録を逸脱として店舗に問い合わせることになります。

(c)是正が書かれていないことに気づかない。 基準を外れた値に印を付けることに注意が向き、その日の是正の欄が空いていることを見落とします。 逸脱した記録に是正の記録が無いことは、計画の運用として一番確かめたいところです。

(d)加熱の基準が1つの温度ではない。 中心部を75℃で1分間の加熱と同等の条件として、70℃で3分、65℃で15分のような組み合わせも妥当と考えられるとされています。温度だけを見て「75℃未満は逸脱」とすると、時間を長くとっている正しい記録まで印が付きます。

  1. 【人】 店舗が月末に記録表をスキャンかスマートフォンで撮り、店舗用の受付フォルダに保存する
  2. 【自動】 保存をきっかけに処理が動き、形式・画像の寸法・ページ数を確かめる
  3. 【自動】 Azure AI Document Intelligence のレイアウトモデルが、記録表の表・手書きの文字・チェック欄の状態を信頼度つきで返す
  4. 【自動】 Azure OpenAI が、表のセルを「日付・時間帯・機器・値・記入者」の行にそろえる
  5. 【自動】 プログラムが、店舗の衛生管理計画の基準・営業日の表と照らし、基準外・記入漏れ・是正の記録の抜け・確認の印の抜けを判定する
  6. 【自動】 店舗別の月次の点検表と、是正の依頼の下書きを作る
  7. 【人】 本部の担当者が、基準外と判定された欄と信頼度の低い欄を原本の画像で確かめる
  8. 【人】 担当者が点検表を確定し、是正の依頼を直して店舗とエリアの責任者へ送る

7番目が、この設計の分かれ目です。 基準外の判定は機械でできますが、手書きの読み違いで基準外になっていないかは、人が画像で見ます。 読み違いのまま店舗に問い合わせると、記録をつけている現場の信頼を失います。

5番目の判定をプログラムに置いているのも意図してのことです。 基準の温度と照らすのは数字の比較で、加熱の温度と時間の組み合わせも表にしておけば機械で決まります。 AIには、ばらばらに読み取られたセルを行にそろえるところだけをさせます。

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

構成図
手書きの温度記録表(スキャン・スマートフォンの写真)
   ▼【トリガー】店舗用の受付フォルダ(Azure Blob Storage のコンテナー)への保存
Azure Functions ── 形式・画像の寸法・ページ数の確認
   ▼
Azure AI Document Intelligence(レイアウトモデル)
   │   表・手書きの文字・チェック欄の状態・信頼度
   ▼
Azure OpenAI ── セルを「日付・時間帯・機器・値・記入者」の行にそろえる(構造化出力)
   ▼
Azure Functions ── 衛生管理計画の基準・営業日の表と照らして判定
   ▼
店舗別の月次の点検表/是正の依頼の下書き
   ▼
【本部の担当者が確認】──▶ 店舗・エリアの責任者へ
役割想定する製品代替候補
OCRAzure AI Document Intelligence(レイアウトモデル prebuilt-layout)Google Document AI
生成AIAzure 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どうやって実装するのか

Step1

処理の起点を決める

店舗用の受付フォルダに画像が保存されたことを起点にします。 フォルダは店舗ごとに分け、店舗のコードをフォルダ名にします。どの店舗の記録表かを、画像の中身から推定させないためです。 店名の書き方は記録表によって違い、略称や手書きで書かれていることもあります。

読み取りと照合は保存のたびに動かし、点検表は月初の定時実行でまとめます。 前月分の記録表が届いた店舗から読み取りを進め、月の3営業日目の朝に、届いた記録表で点検表を作り、届いていない店舗を一覧にします。 記録表が届かない店舗は、点検の対象から抜け落ちやすいからです。

受付フォルダは Azure Blob Storage のコンテナーにし、Azure Functions の Blob Storage トリガーで動かします。 遅延の小さいイベントベースの実装が推奨されており、失敗したファイルは既定で計5回まで再試行され、すべて失敗すると専用のキューに記録されます。月初の点検表を作る前に、そのキューが空であることを確かめます。 同じ画像を二度保存したときは、ファイル名と撮影日で同じ記録表かを見分け、新しいほうを読み、古いほうの読み取り結果を差し替えます。

Step2

入力データを集める

データ中身取得元
記録表の画像1か月分の表(日付の行 × 機器・時間帯の列)、記入者、是正の欄、店長の確認の印店舗用の受付フォルダ
読み取り結果表のセル・手書きの文字・選択マークと、それぞれの信頼度。行ごとの手書きの判定Azure AI Document Intelligence
基準の表店舗・機器ごとの基準の温度(上限・下限)、測る時間帯衛生管理計画から自社で起こした表
加熱の条件の表品目ごとの基準と、同等とする温度と時間の組み合わせ衛生管理計画から自社で起こした表
営業日の表店舗ごとの休業日、機器の停止日(修理・入替え)店舗の営業日の管理表
様式の対応表記録表の様式の版ごとの、列の並び(どの列がどの機器か)自社で用意する表

質を決めるのは、基準の表です。 計画のPDFに書かれた基準を、店舗・機器ごとに1行ずつ起こします。冷蔵庫の基準を「10℃以下」のように1つにまとめず、機器ごとに持ちます。店舗が冷蔵庫を入れ替えたときに、表の更新を忘れると、正しい記録が基準外に見えます。

営業日の表は、記入漏れと休業日を分けるために持ちます。 休業日の空欄を記入漏れとして返すと、店舗は点検表を信用しなくなります。

加熱の条件の表には、同等とする組み合わせを並べます。 中心部を75℃で1分間の加熱と同等の条件として、70℃で3分、69℃で4分、68℃で5分、67℃で8分、66℃で11分、65℃で15分が妥当と考えられるとされています。どの組み合わせを自社の計画で採るかは品質管理部が決め、表にはその結果だけを入れます。

Step3

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

取るものどこから何に使うか
表のセルレイアウトモデルの tables(cells の rowIndex・columnIndex・kind)どの日の、どの機器の欄か
列の見出しkind が columnHeader のセル機器名・時間帯の列の特定
手書きの文字styles の isHandwritten と信頼度、words の confidence値の読み取りの確かさ
チェック欄selectionMarks の state と信頼度一般的な衛生管理の点検表の○×
基準・営業日自社の表照合の相手

列の見出しは、読み取り結果と様式の対応表の両方で決めます。 見出しが手書きで「冷1」「冷2」と書かれている様式では、読み取りだけでは機器が決まりません。様式の版ごとに列の並びを表にしておけば、見出しが読めなくても列の位置で機器を決められます。

数字の信頼度は、単語ごとの confidence を使います。 セル全体の読み取りが確かでも、小数点やマイナスの記号だけが薄いことがあります。 値を作る単語の信頼度のうち、最も低いものをその欄の信頼度にします。

Step4

AIへ渡す前に整形する

  1. 形式の確認 … PDFと画像(JPEG・PNG・BMP・TIFF・HEIF)であることを確かめます
  2. 画像の寸法の確認 … 50×50から10,000×10,000ピクセルの間である必要があります
  3. 文字の大きさの確認 … 抽出するテキストの最小高さは、1024×768の画像で12ピクセル(150dpiで約8ポイント)です。1か月分を1枚に詰めた表は、欄が小さく、この下限に近づきます
  4. ページの確認 … 1つのファイルに複数の記録表が入っていれば、表ごとに分けます。PDFとTIFFは最大2,000ページ、有料(S0)レベルで500MBまでです
  5. 月の確認 … 記録表の年月の欄を読み、ファイル名の年月と合わなければ担当者へ回します

3番目を軽く見ないでください。 レイアウトモデルの案内でも、ドキュメントごとに1つの明確な写真か高品質のスキャンが勧められています。斜めや遠くから撮った写真は、文字の高さが下限を割ります。店舗には、表が画面いっぱいに入るように真上から撮る撮り方を案内します。

Step5

AIに処理させる

させるのは、読み取られた表のセルを「日付・時間帯・機器・値・記入者」の行にそろえることだけです。

項目取り出し元書かれていないときの扱い
日付表の行の見出し行が決まらなければ ambiguous
時間帯・機器列の見出しと様式の対応表決まらなければ ambiguous
温度の値セルの文字。書かれたとおりblank。前後の日の値で埋めない
加熱の時間加熱の記録表の時間の欄blank
記入者記入者の欄blank
是正の内容是正の欄の手書きの文字。原文のままblank
店長の確認確認の欄の印・サイン・チェックblank
させないこと理由
基準内か基準外かの判定プログラムが基準の表と比べる
読みにくい数字を、ありそうな値に直す「3」か「8」かは原本で人が見る
冷凍庫の値にマイナスを補う記号が読めなければ、読めないものとして人へ
空欄を前後の日の値で埋める記入漏れという事実が消える
是正が十分だったかの判断品質管理部が決める

3行目がいちばん起きやすい失敗です。 冷凍庫の欄に「18」とだけ読めると、冷凍庫だから −18 だろうと補います。補った値はたいてい正しいのですが、マイナスが本当に書かれていなかった場合、それは冷凍庫が止まっていた記録かもしれません。 補わずに人へ回します。

Step6

指示内容を固定する

あなたは飲食店チェーンの本部の品質管理の担当として、店舗が手書きした
温度記録表を、点検のための行にそろえる立場です。
渡すのは 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にとって補うことは親切な訂正に見えます。 禁じるのは、読めなかった記号を読めたことにする判断です。

Step7

出力形式を固定する

次の形の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_correctiveout_of_range の日に corrective_action が空最優先で店舗へ確認
missingblank で、営業日の表では営業日店舗へ記録のしかたを確認
closedblank で、営業日の表で休業日か機器の停止日点検表には出さない
needs_reviewlow_confidence、ambiguous、sign_unclear本部の担当者が原本を見る
no_manager_checkmanager_check が空店長へ確認

2つ目は、needs_review を判定より先に人へ回せることです。 読み取りが不確かな欄は、基準と照らす前に担当者が原本で値を直し、直した値で判定をやり直します。 読み違いから out_of_range が出ることを防ぎます。

3つ目は、点検表を件数の表にできることです。 店舗ごとに、out_of_range・no_corrective・missing・no_manager_check の件数と、該当する日付を並べます。店舗が月をまたいでどう変わったかが、件数の推移で見えます。

構造化出力ではすべてのフィールドを必須にし、オブジェクトに additionalProperties: false を付けます。数値の範囲の制約はスキーマで書けないため、値を数として読めるかの確認はプログラムで行います。

Step8

システムへ連携する

つなぎ先方式内容
店舗用の受付フォルダ(Azure Blob Storage)Azure Functions の Blob Storage トリガー画像の保存を検知する
Azure AI Document IntelligenceAPI呼び出し(prebuilt-layout)表・手書きの文字・選択マーク・信頼度を返す
Azure OpenAIAPI呼び出し(構造化出力)セルを行にそろえる、是正の依頼の下書き
基準の表・営業日の表読み取り照合の相手
点検結果の表書き込み(担当者の確定の後)店舗別の月次の件数
店舗・エリアの責任者メール(人が送る)点検表と是正の依頼

点検結果の表へは、担当者が確定してから書き込みます。 needs_review の欄が残ったまま件数を出すと、読み違いの件数が店舗の成績として残ります。

Step9

人が確認する

担当者が見るのは、needs_review と out_of_range、no_corrective の欄です。

  1. needs_review を先に見る … 原本の画像で値を確かめ、読み違いなら値を直します。直した値で判定をやり直します
  2. out_of_range を原本で見る … 信頼度が高くても、基準外の欄は画像で値を確かめます
  3. no_corrective を店舗に確かめる … 是正をしたが書いていないのか、是正をしていないのかを聞きます
  4. 点検表を確定する … 件数と日付を確かめ、是正の依頼の下書きを直します

2番目を省かないでください。 基準外の記録は、店舗にとっては指摘の記録です。 読み違いで指摘された店舗は、次の月から記録を丁寧につけるのではなく、本部の点検を疑うようになります。

目標は、120枚をならして1枚6分です。 多くの記録表は件数を確かめて終わり、基準外や読みにくい欄が多い記録表だけに時間を使います。needs_review が多い店舗は、撮り方か記入のしかたに理由があります。

Step10

例外に対処する

起きること対応
画像の文字が小さすぎる・斜め・影がある文字の高さが下限を割る。店舗に撮り直しを依頼
様式の版が対応表に無い列の位置で機器が決まらない。担当者が対応表に版を足す
冷凍庫の値の記号が読めないsign_unclear。原本で人が見る
機器の入替えで列の意味が変わった営業日の表に停止日、基準の表に新しい機器を足す
記録表の年月が合わないファイル名と記録表の年月を担当者が確かめる
1つのファイルに2か月分が入っている表ごとに分けて読む
記録表が届かない店舗がある月初の一覧に出し、エリアの責任者へ
是正の欄に「別紙」とだけある別紙の画像の提出を依頼。是正ありとは判定しない

上の2行が大半を占めます。 どちらもAIの問題ではなく、撮り方と様式の管理の問題です。 撮り方の案内を1枚の紙にして店舗に貼ってもらうほうが、読み取りの精度を上げるより効きます。

Step11

記録を残す

  • 記録表の画像と、受け取った日時・店舗コード
  • レイアウトモデルが返した読み取り結果の全文
  • そろえた行のJSONと、そのとき使った様式の対応表の版
  • 判定の結果と、そのとき照らした基準の表・営業日の表の版
  • 担当者が直した値と、直す前の値
  • 確定した点検表と、店舗へ送った是正の依頼
  • 店舗ごとの needs_review の発生率と、no_corrective の件数の推移

4つ目で基準の表の版を残すのは、基準が後から変わるためです。 機器の入替えや計画の見直しで基準が変わったあとに照合し直すと、過去の月の判定が変わってしまいます。

原本は店舗で保管し、本部に残すのは画像と読み取り結果です。 どちらを記録の正本とするか、何年保存するかは、衛生管理計画の記録の保存の定めに合わせて先に決めます。

04実装レベルの3段階

最小構成:画像を手でAIの画面に貼り、日付・機器ごとの値を表にさせる / 1枚ごとの値の書き出し
半自動化:上記+レイアウトモデルを呼び、そろえた行を一覧に書き出す / 読み取りと行の一覧化
本格構成:上記+受付フォルダを起点に動かし、基準と営業日の表で判定し、店舗別の点検表と是正の依頼の下書きまで出す / 点検の全体と、是正の依頼の下書き

半自動化で、1枚25分が15分程度になります。 値を目で追う時間は減りますが、基準と見比べる作業と、休業日の確認が手作業で残ります。本格構成で6分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、needs_review が多い店舗と様式の版が分かります。撮り方と様式を整えてから判定を足すほうが、店舗への空振りの問い合わせが減ります。

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

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

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

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

AI活用について相談する

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

向いている
  1. 数十の店舗や給食の現場を持つ外食チェーン・給食の受託会社で、冷蔵庫・冷凍庫の温度や加熱の中心温度を紙の記録表に手書きしている場合。本部の品質管理の担当者が、月末に集めた記録表を1枚ずつめくって基準を外れた値と記入漏れを探している場合。店舗ごとの衛生管理計画に基準の温度が決めてある場合。
向いていない
  1. 温度をセンサーとデータロガーで自動で記録しており、紙の記録表が無い場合。店舗が1〜2店で、店長が毎日記録を見れば足りる場合。衛生管理計画が無く、何度を外れたら逸脱とするかが決まっていない場合(先に計画を作ります)。なお、逸脱した食品をどう扱うか、是正が十分だったかの判断は、この構成では代替できません。

07最小構成で試す方法

  1. 前月の記録表から10枚を選ぶ(冷凍庫の記録表と、手書きの字が読みにくい店舗を入れる)
  2. 10枚について、当時の点検で付けた印と件数を用意する
  3. 手元のAIサービスに画像を1枚ずつ貼り、「日付ごと・機器ごとの温度を表にしてください。読めない数字は直さずに『判読不能』とし、空欄は空欄のままにしてください。マイナスの記号を補わないでください」と指示する
  4. 出てきた表を基準と手で比べ、当時の点検の印と同じ欄が拾えるかを見る
  5. 読み違えた欄が、どの数字・どの記号だったかを書き出す
出てきた内容判断
当時の点検と同じ欄が拾えたOCRと照合の連携に進む
マイナスを補った・空欄を埋めた指示の書き方で直る。構成は有効
判読不能が多い撮り方と様式が先。 AIの問題ではない

3行目が出ることは珍しくありません。 失敗ではなく、本部の担当者が1枚に25分かかっていた理由が1つ分かったということです。 その場合は、記録表の欄を大きくするか、チェック欄に変えるかを先に検討し、直した様式で同じ店舗の翌月分を試します。

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

問題対策
冷凍庫の値にマイナスを補う指示で禁じ、sign_unclear で人へ
読みにくい数字をありそうな値に直す直さず low_confidence で人へ
読み違いで基準外が出て店舗に問い合わせるneeds_review を判定の前に人が直す
休業日を記入漏れとして返す営業日の表と機器の停止日を照らす
加熱を温度だけで判定する温度と時間の組み合わせの表で判定する
機器を入れ替えたのに基準の表が古い店舗の機器の変更を品質管理部に届けてもらう
斜めや遠くから撮った写真で読めない真上から表を画面いっぱいに撮る案内を貼る
様式の版が混ざって列の意味がずれる様式に版を印刷し、対応表を版ごとに持つ
是正の欄の「別紙」を是正ありと扱う別紙が届くまで no_corrective のまま

上の3行が、この構成の失敗のほとんどです。 どれも、手書きの読み違いが基準外の判定に混ざるところから出ています。読み取りの不確かさを判定の前に人へ回せるかで、店舗に信頼される点検表になるかが決まります。

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

この構成で扱うデータ: 店舗の機器ごとの温度の記録、記入者の名前、是正の内容です。個人の情報は記入者の名前程度で、機密性は高くありません。

  1. 外部へ渡す範囲を記録表に限る … 生成AIに渡すのは記録表1枚の読み取り結果と様式の対応表だけです。基準の表や店舗の点検の成績は、照合をプログラムの側で行い、AIへ渡しません
  2. 点検の結論をAIに出させない … 基準外かどうかはプログラムが基準の表で決め、是正が十分だったか、食品をどう扱うかは品質管理部と店長が決めます
  3. 記録そのものを書き換えない … 担当者が直すのは読み取りの値で、店舗の原本の記録ではありません。 原本と異なる値で点検表を作った場合は、直した記録を残します
  4. 点検表を店舗の評価だけに使わない … 件数を人事の評価に直結させると、記録を正直につけない理由になります。 HACCPに沿った衛生管理で求められているのは、記録と定期的な検証による見直しです
  5. 原本の保存を店舗任せにしない … 本部に画像があっても、原本の保存の期間と場所を衛生管理計画で決めておきます

誤りが起きた場合のリスクは、基準外の記録を見落として是正の確認が漏れることと、読み違いで基準内の記録を指摘することの2つです。 前者は全欄を機械で照らすことで、後者は判定の前に人が読み取りを直すことで防ぎます。

10まず何から始めるか

1週目:基準の表を起こす

40か所の衛生管理計画から、店舗・機器ごとの基準の温度と、加熱の温度と時間の組み合わせを1行ずつの表にします。機器の一覧が計画と現場で合っているかも、このときに確かめます。

2週目:10枚で試す

第8章のとおり、前月の10枚で値を表にさせます。マイナスを補わないか、読めない数字を直さないかを最優先で見ます。

3週目:撮り方と様式を整える

試した結果、判読不能の多かった店舗に撮り方を案内します。様式に版を印刷し、版ごとの列の並びを対応表にします。 営業日の表に休業日と機器の停止日を入れる運用も決めます。

4週目:受付フォルダから行の一覧までをつなぐ

受付フォルダを見張り、レイアウトモデルを呼び、行にそろえた一覧を書き出すところまで作ります。この時点では判定を作らず、needs_review の数だけを見ます。

2か月目: 基準と営業日の表による判定を足し、店舗別の点検表を出します。3か月目以降: 是正の依頼の下書きを足し、1枚25分が何分になったかを実測します。逸脱した記録に是正が書かれていない店舗が、月初の数日で全店分そろって見えるようになった時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-10-06/最終更新:2026-10-06
確認した内容情報源確認日
2021年6月1日から、原則としてすべての食品等事業者にHACCPに沿った衛生管理が求められること。衛生管理計画を作成し、手順書を作成し、衛生管理の実施状況を記録・保存し、計画と手順書の効果を定期的に検証して見直すこと。食品等事業者団体が作成した業種別手引書があること厚生労働省: HACCP(ハサップ)2026-10-06
食肉の中心部を75℃で1分間加熱する条件と同等の条件として、70℃3分・69℃4分・68℃5分・67℃8分・66℃11分・65℃15分が妥当と考えられること。中心温度計の適切な使用で中心部の温度が目標を下回らないことを確認する必要があること厚生労働省: 食肉の加熱条件に関するQ&A2026-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 Layout2026-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 Functions2026-10-06

基準の温度と記録の保存の期間は、各店舗の衛生管理計画と、所管の保健所の指導に従ってください。 本記事は厚生労働省のページで確認できた範囲だけを扱っています。

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

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

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

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