Media > AI活用ユースケース > 経理 > 客室係が手書きするミニバーの補充伝票を読み取って精算の明細にそろえ、チェックアウト前に未精算と記入漏れをフロントへ出す

客室係が手書きするミニバーの補充伝票を読み取って精算の明細にそろえ、チェックアウト前に未精算と記入漏れをフロントへ出す

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

客室係が清掃のたびに手書きするミニバーの補充伝票を写真で読み取り、部屋番号・品目・数量を精算の明細にそろえます。PMSに計上済みの売上と照らし、チェックアウト前に未精算の部屋と伝票の出ていない部屋をフロントへ知らせます。

サマリー
生成AI
Azure OpenAI Service/Claude/Gemini
AIサービス
Azure AI/Google Document AI
連携・自動化
Make/n8n/Power Automate/Python
対象業界
宿泊
対象部門
経理/総務
対象業務
データ入力・転記/内容確認・チェック
主な課題
入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
AIで行う処理
読み取り(OCR)
主な効果
入力漏れ削減/工数削減/機会損失防止
導入難易度
★★☆☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
条件付き
現在工数
120h/月
AI導入後
40h/月
想定削減
67%
年間削減
960h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 客室係が清掃の際に冷蔵庫を開け、減った品目を補充して、補充伝票に部屋番号・品目ごとの数量・日付・記入者名を書く
  2. 伝票はフロアのワゴンにまとめ、昼過ぎと夕方に事務所へ届ける
  3. 事務担当が伝票を1枚ずつ読み、品目と数量を価格表と照らす
  4. PMSでその部屋を開き、品目ごとに売上を入力する
  5. 読めない伝票は付箋を貼って脇に置き、記入者が出勤しているときに聞く
  6. 出発予定の部屋について、伝票が来ているかをフロントが内線で客室係に確かめる
  7. チェックアウト後に届いた伝票は、別の帳面に「後日請求」として書き出し、経理へ回す
導入後(After)
  1. 人客室係が清掃の際に補充伝票を書き、フロアのタブレットで伝票を撮影する(紙はワゴンにまとめておく)
  2. 自動撮影した画像が共有フォルダに保存されたことをきっかけにワークフローが動き、画像の寸法と向きを確かめる
  3. 自動OCRが伝票の文字・表・チェック欄を読み取り、手書きの行かどうかと文字ごとの信頼度を返す
  4. 自動生成AIが読み取り結果から、部屋番号・品目ごとの数量・記入者・日付を取り出し、品目名を品目マスタの名前にそろえる
  5. 自動数量欄ごとに `filled` / `zero` / `blank` / `unreadable` を付ける
  6. 自動品目マスタから単価と税率区分を引き、精算の明細の案を作る
  7. 自動PMSから書き出した当日の出発予定と計上済みの売上に照らし、`ready` / `needs_human` / `already_posted` を決める
  8. 自動清掃が終わったのに伝票が届いていない部屋を、出発予定の時刻順に並べる
  9. 人事務担当が `needs_human` の伝票と、伝票の届いていない部屋だけを確かめる
  10. 人`ready` の明細をPMSへ計上する(取り込みの口がある場合は、明細のファイルをまとめて取り込む)
  11. 人フロントは、出発前に未計上の部屋の一覧を見て、客に確認する
各工程の詳しい説明を読む
  1. 客室係が清掃の際に冷蔵庫を開け、減った品目を補充して、補充伝票に部屋番号・品目ごとの数量・日付・記入者名を書く
  2. 伝票はフロアのワゴンにまとめ、昼過ぎと夕方に事務所へ届ける
  3. 事務担当が伝票を1枚ずつ読み、品目と数量を価格表と照らす
  4. PMSでその部屋を開き、品目ごとに売上を入力する
  5. 読めない伝票は付箋を貼って脇に置き、記入者が出勤しているときに聞く
  6. 出発予定の部屋について、伝票が来ているかをフロントが内線で客室係に確かめる
  7. チェックアウト後に届いた伝票は、別の帳面に「後日請求」として書き出し、経理へ回す

(a)読みにくい伝票ほど後回しになる。 3番目で読めない字に当たると、その伝票は5番目の付箋の山に行きます。付箋の山が片づくのは記入者に会えたときだけで、そのあいだにその部屋の客が出発することがあります。

(b)伝票が出ていないことに誰も気づかない。 清掃が入ったのに伝票が届いていない部屋は、事務所から見ると「消費が無かった部屋」と区別がつきません。伝票の出し忘れと、本当に何も飲まれなかった部屋が、同じ見た目になります。 気づけるのは、清掃の記録と伝票の束を1部屋ずつ突き合わせたときだけで、毎日その時間はありません。

(c)出発後の精算はほぼ戻らない。 7番目の「後日請求」は、法人の契約客なら請求書に足せますが、個人客ではほとんど回収できません。チェックアウトに間に合わなかった時点で、その売上はたいてい失われます。

(d)全件を目で読み続けるのは重い。 月2,400枚を6名で回すと、1枚3分でも月120時間です。伝票の大半は読みやすく、数量も1か2です。 時間を取っているのは、読みにくい1割と、伝票の出ていない部屋を探す作業のほうです。

  1. 【人】 客室係が清掃の際に補充伝票を書き、フロアのタブレットで伝票を撮影する(紙はワゴンにまとめておく)
  2. 【自動】 撮影した画像が共有フォルダに保存されたことをきっかけにワークフローが動き、画像の寸法と向きを確かめる
  3. 【自動】 OCRが伝票の文字・表・チェック欄を読み取り、手書きの行かどうかと文字ごとの信頼度を返す
  4. 【自動】 生成AIが読み取り結果から、部屋番号・品目ごとの数量・記入者・日付を取り出し、品目名を品目マスタの名前にそろえる
  5. 【自動】 数量欄ごとに filled / zero / blank / unreadable を付ける
  6. 【自動】 品目マスタから単価と税率区分を引き、精算の明細の案を作る
  7. 【自動】 PMSから書き出した当日の出発予定と計上済みの売上に照らし、ready / needs_human / already_posted を決める
  8. 【自動】 清掃が終わったのに伝票が届いていない部屋を、出発予定の時刻順に並べる
  9. 【人】 事務担当が needs_human の伝票と、伝票の届いていない部屋だけを確かめる
  10. 【人】 ready の明細をPMSへ計上する(取り込みの口がある場合は、明細のファイルをまとめて取り込む)
  11. 【人】 フロントは、出発前に未計上の部屋の一覧を見て、客に確認する

9番目と10番目が、この設計の分かれ目です。人が読むのは全件ではありません。 読み取りがそろったものは明細の一覧で流し見て計上し、読めなかったものと、伝票が無いものだけに時間を使います。

7番目を規則で決めているのも意図してのことです。 AIは「何が書いてあるか」を返し、それを売上にするかどうかは、マスタとPMSの記録を使った規則の側で決めます。 品目の入れ替えや価格の改定があっても、直すのはマスタだけです。

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

構成図
補充伝票(紙・手書き)
   │  客室係がフロアのタブレットで撮影
   ▼【トリガー】共有フォルダへの画像の保存
Power Automate
   ├──▶ 画像の寸法・向き・枚数の確認
   ▼
Azure AI Document Intelligence(レイアウトモデル)
   │   文字・表・チェック欄・手書きの判定・信頼度を返す
   ▼
Azure OpenAI(Microsoft Foundry)── 部屋番号・品目・数量の取り出しと品目名の名寄せ
   ▼
Azure Functions ── 品目マスタの単価・税率区分を付け、PMSの書き出しと照合
   ▼
判定(計上できる ready / 人が確認 needs_human / 計上済み already_posted)
   ▼
【人が needs_human と伝票の無い部屋だけ確認】
   ├──▶ 事務担当が PMS へ計上
   └──▶ フロントへ出発前の未計上一覧
役割想定する製品代替候補
OCRAzure AI Document Intelligence(レイアウトモデル)Google Document AI(Form Parser)
生成AIAzure OpenAI(Microsoft Foundry)(構造化出力で数量欄ごとの値を取り出す)Claude API、Gemini API
連携Power Automate(フォルダの監視と各処理の呼び出し、通知)Make、n8n
差異計算Azure Functions(品目マスタとの突合とPMSの書き出しとの照合)Python
保管SharePoint の文書ライブラリ(伝票の画像と明細の控え)社内のファイルサーバー

PMSと品目マスタは、新しく足すものではありません。 PMSからは当日の出発予定と、部屋ごとに計上済みの売上を書き出して使います。PMSへの書き込みはこの構成では行わず、計上は人が行います。 PMSに明細を取り込む口があるかどうかは製品によって違い、ここは利用環境に応じた個別実装になります。

土台になるのは、Azure AI Document Intelligence のレイアウトモデルです。 文字・表・選択マーク(チェック欄)・文書の構造を取り出すモデルで、表は行数と列数、セルごとの行と列の位置を返します。補充伝票は「品目×数量」の表なので、セルの位置で品目と数量を結び付けられます。

日本語の手書きに対応していることを確かめてあります。 公式の言語対応の表では、Read と Layout の手書きの対応言語に日本語(ja)が載っています。さらにレイアウトモデルは、行ごとに手書きの書体かどうかを styles として信頼度つきで返します。印字された品目名と、手書きの数量を見分ける材料になります。

チェック欄も読めます。 選択マークは selected / unselected の状態と信頼度で返ります。伝票に「補充なし」のチェック欄を設ければ、空欄と「何も無かった」を区別できます。 この欄の設計が、第7章の判定の土台になります。

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

Step1

処理の起点を決める

客室係が撮影した画像が共有フォルダに保存されたことを起点にします。 昼と夕方の2回にまとめると、出発日の朝に清掃が入った部屋の伝票が間に合いません。撮影されたら1枚ずつ動かします。

撮影はフロアのタブレットで行い、カメラのアプリから決まったフォルダへ保存する形にします。客室係のスマートフォンは使いません。 伝票には部屋番号が書かれており、個人の端末に残すと宿泊の記録が持ち出されることになるからです。

これとは別に、出発予定の時刻に合わせた定時の点検を毎朝7時・9時・10時半に動かします。こちらは伝票の到着を待たず、清掃が終わったのに伝票が届いていない部屋を探す処理です。届いたものを読むだけでは、届かなかったものは見つけられません。

処理が終わった画像は処理済みのフォルダへ移します。移すのは成功したときだけにします。 元のフォルダに残っている数が、そのまま未処理の数になります。

Step2

入力データを集める

データ中身取得元
補充伝票の画像部屋番号、品目ごとの数量、日付、記入者、「補充なし」のチェック欄フロアのタブレットから共有フォルダ
読み取り結果文字、表とセル、選択マーク、手書きの判定、文字ごとの信頼度Azure AI Document Intelligence
品目マスタ品目コード、正式名、伝票に書かれうる略称、単価、税率区分、無料品かどうか宿泊部が持つ表
PMSの書き出し当日の出発予定(部屋番号・予定時刻)、部屋ごとの計上済みのミニバー売上PMSの帳票の書き出し
清掃の記録清掃が終わった部屋と時刻客室係の清掃の記録

質を決めるのは、品目マスタの略称の列です。 客室係は「ビール」を「ビ」「BR」「生」と書き、「ミネラルウォーター」を「水」「ミネ」と書きます。略称の一覧が無いと、品目の名寄せをAIに推測させることになります。 推測させないために、書かれうる略称を先に集めてマスタに持たせます。

無料品かどうかの列も要ります。 客室にサービスで置く水やお茶を同じ伝票に書く施設では、補充の数は書かれても売上にはしません。 この列が無いと、無料の水が客室料金に乗ります。

Step3

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

読み取りは、ワークフローからレイアウトモデルを呼ぶだけです。伝票は1枚1ページなので、ページの指定は要りません。

取るものどこから何に使うか
表とセル(行・列の位置)tables品目の行と数量の列を結び付ける
選択マークと状態pages の selectionMarks「補充なし」のチェックを見る
手書きの判定styles(isHandwritten と信頼度)印字の品目名と手書きの数量を分ける
文字ごとの信頼度pages の words数量の数字が読めたかを決める
全文content表から外れて書かれた部屋番号や備考を拾う

部屋番号は、表の外に書かれることが多い項目です。 伝票の上の欄に書く決まりでも、急いでいると余白に書かれます。表からだけ取ると、部屋番号が見つからない伝票が増えます。 全文から拾い、部屋番号の一覧(PMSの客室マスタ)にある値かどうかで確かめます。

PMSからの書き出しは、朝の点検の前に1回、その後は1時間ごとに取り直します。連携の方式はPMSの製品によって違います。 帳票をCSVで書き出せるなら、それをフォルダに置いてワークフローで読む形が最も手堅い構成です。

Step4

AIへ渡す前に整形する

  1. 形式と寸法の確認 … 画像は 50×50 から 10,000×10,000 ピクセルの間である必要があります。範囲外は撮り直します
  2. 文字の大きさの確認 … 取り出せる文字の最小の高さは、1024×768 の画像で 12 ピクセルです。150dpi で約8ポイントに相当します。伝票を遠くから撮ると、数量の数字がこれを下回ります
  3. 向きの確認 … 横向きや逆さまに撮られたものは、返ってくるページの角度で見分けて、回転させてから判定します
  4. 1枚に1部屋の確認 … 2枚の伝票を重ねて撮ったものは、部屋番号が2つ見つかるので分けて撮り直します
  5. 重複の検知 … 同じ部屋・同じ日付・同じ記入者の伝票が直前にあれば、撮り直しとして印を付けます
  6. 清掃の記録との突き合わせ … 伝票の部屋番号が、当日清掃の終わった部屋に入っているかを見ます

2番目を軽く見ないでください。 客室係はワゴンの上で伝票を撮ります。伝票全体を収めようとして離れて撮ると、数字が小さくなりすぎます。 撮影の位置を決めた台紙を用意し、そこに置いて撮る運用にします。

Step5

AIに処理させる

させるのは、読み取り結果から部屋番号・品目ごとの数量・記入者・日付を取り出し、品目名を品目マスタの名前にそろえることだけです。

取り出すもの取り出し方判断できないときの扱い
部屋番号伝票の上の欄、なければ全文から候補が2つ以上なら ambiguous
品目表の行の品目名を、マスタの正式名と略称に照らすマスタに無い書き方なら unmatched
数量表の数量のセルの数字下の4区分で返す
「補充なし」のチェック選択マークの状態状態の信頼度が低ければ unreadable
記入者・日付伝票の下の欄書かれていなければ空のまま

数量は、4つの区分のどれかで返させます。

qty_status意味次に起きること
filled1以上の数字が読み取れた明細の案にする
zero0、または「-」「/」など無しを示す記号が書かれている明細にしない
blank何も書かれていない「補充なし」のチェックが無ければ人へ
unreadable文字は検出されたが、数字として確定できない人へ

blank と zero を分けるのが、この構成でいちばん大事な区別です。 zero は客室係が見て「無かった」と書いたもの、blank は書かれていないもので、数え忘れの可能性が残ります。 伝票の全部の数量欄が blank で、「補充なし」のチェックも無い伝票は、冷蔵庫を開けたかどうかが分かりません。 客室係へ確かめに回します。

unreadable の根拠は、OCRが返した信頼度に置きます。 数字が検出され信頼度が十分なら filled か zero、検出されていても信頼度が低ければ unreadable です。AIに「たぶん2」と読ませません。

させないこと理由
単価・金額の計算マスタから引く。価格の改定はマスタで直す
税率区分の判断酒類と非酒類で税率が違う。マスタの列で決める
読めない数字の推測売上を作る値なので、推測で埋めると誤請求になる
品目の推測による名寄せマスタに無い書き方は unmatched で人へ
計上するかの判断PMSの計上済みと照らした規則で決める

4行目がいちばん起きやすい失敗です。 「酎」と書かれた行を、マスタに酎ハイが2種類あるのにどちらかへ寄せると、単価の違う品目で請求されます。 略称が1つの品目に決まらないときは unmatched にします。

Step6

指示内容を固定する

あなたはホテルの宿泊部の事務担当で、客室係が手書きした
冷蔵庫・ミニバーの補充伝票を、精算の明細にするための値に直す立場です。
OCRが返した読み取り結果だけを見て答えてください。推測で埋めないでください。

【取り出すもの】
1. 部屋番号(客室の一覧にある値だけ。無ければ空にして status を ambiguous)
2. 品目ごとの数量(伝票の表の行ごと)
3. 「補充なし」のチェック欄の状態
4. 記入者名と日付(書かれていなければ空)

【品目名のそろえ方】
- 伝票の品目名は、下の品目一覧の「正式名」か「略称」のどれかに
  完全に当たるときだけ、その品目コードにしてください。
- 当たる候補が2つ以上あるとき、どれにも当たらないときは、
  item_code を空にして match を unmatched にしてください。
  似ている品目に寄せないでください。

【数量の qty_status の選び方】
- filled ....... 1以上の数字が読み取れた
- zero ......... 0、または「-」「/」「なし」が書かれている
- blank ........ 何も書かれていない
- unreadable ... 文字はあるが、信頼度が低く数字として確定できない
迷ったときに filled を選ばないでください。

【厳守事項】
- 数量の数字が読めないとき、前後の行や他の部屋から補って埋めないでください。
- 「正」の字や線の本数で書かれた数量は、数え方が確定できるときだけ
  数字にし、そうでなければ unreadable にしてください。
- 空欄を 0 として扱わないでください。空欄は blank です。
- 単価、金額、税率は書かないでください。
- confidence には、OCRが返した信頼度をそのまま入れてください。
- evidence には、判定の根拠にした文字列をそのまま写してください。
- 補充伝票でない書類と判断した場合は、取り出しをせず document_type に種類を書いてください。

【読み取り結果】{layout_result}
【品目一覧(コード・正式名・略称)】{item_master}
【客室の一覧】{room_list}

「空欄を0として扱わない」を明記しないと、空欄は0になります。 何も書かれていない欄は、文章として読むと「消費なし」に見えるからです。空欄の意味を決めるのは「補充なし」のチェック欄と人の確認であって、AIではありません。

「似ている品目に寄せない」も同じ理由で書きます。 名寄せを任せると、AIはもっともらしい品目を選んで埋めます。埋めた品目が正しいかではなく、確かめるべき行が一覧から消えることが問題です。

Step7

出力形式を固定する

次の形のJSONで受け取ります。 Azure OpenAI の構造化出力を使い、strict: true で、すべての項目を required にし、additionalProperties を false にしたスキーマを渡します。

{
  "slip_id": "",
  "document_type": "minibar_slip",
  "room_no": "",
  "room_status": "ok | ambiguous",
  "no_refill_checked": "selected | unselected | unreadable",
  "staff_name": "",
  "slip_date": "",
  "lines": [
    { "written_name": "", "item_code": "", "match": "matched | unmatched",
      "qty": 0, "qty_status": "filled | zero | blank | unreadable",
      "confidence": 0, "evidence": "" }
  ]
}

1つ目の理由は、AIの出力と売上の判定を別の層に置けることです。 lines はAIが埋め、そこから明細を作るかどうかは Azure Functions の規則で決めます。単価や品目が変わっても、直すのはマスタと規則だけです。

2つ目は、構造化出力のスキーマにすべての項目を必須で並べることで、取り出せなかった項目が「抜ける」のではなく「空として残る」ことです。 公式の説明でも、すべての項目を required にし、任意の項目は null との組み合わせで表すとされています。抜けた項目は気づけませんが、空の項目は数えられます。

Azure Functions は、この出力に品目マスタとPMSの書き出しを合わせて、次の形の明細の案を作ります。

列中身
room_no部屋番号
item_code / item_name品目コードと正式名(マスタから)
qty数量(filled のものだけ)
unit_price / tax_class単価と税率区分(マスタから。AIは関与しない)
departure_timePMSの出発予定の時刻
verdictready / needs_human / already_posted
reasonneeds_human の理由(unreadable、unmatched、全欄 blank など)
verdict条件
ready部屋番号が ok、すべての行が filled か zero、品目がすべて matched、PMSに同じ明細が無い
already_postedPMSに同じ部屋・同じ日付・同じ品目の計上がある
needs_human上のどちらにも当たらないもの
Step8

システムへ連携する

つなぎ先方式内容
共有フォルダPower Automate のトリガー伝票の画像の保存を検知する
Azure AI Document IntelligenceAPI呼び出し表・チェック欄・手書きの判定・信頼度を返す
Azure OpenAIAPI呼び出し(構造化出力)部屋番号・品目・数量を取り出す
Azure FunctionsHTTPの呼び出しマスタとの突合、PMSの書き出しとの照合
PMS帳票の書き出しを読む出発予定と計上済みの売上を取る
Teams通知フロントへ出発前の未計上一覧を送る

PMSへは書き込みません。 この構成が出すのは計上の案までで、売上を確定させるのは人の操作です。 誤った明細が自動で計上されると、客の目の前で精算額が違うという形で表に出ます。

フロントへの通知は、出発予定の時刻順に並べます。 部屋番号順に並べると、10分後に出発する部屋が一覧の下に埋もれます。

Step9

人が確認する

人が開くのは needs_human の伝票と、伝票の届いていない部屋だけです。 ready のものは明細の一覧で件数と部屋を流し見て計上します。

  1. 出発の近い部屋から見る … 一覧は出発予定の時刻順です。出発後に回したものは、ほぼ回収できないからです
  2. unreadable と unmatched は画像を開いて読む … 読めなければ、記入者に内線で聞きます
  3. 全欄 blank の伝票は客室係に確かめる … 冷蔵庫を開けたかどうかを聞きます
  4. 伝票の届いていない部屋は、清掃の担当に聞く … 出発の近い部屋はフロントにも伝え、客に自己申告をお願いするかを決めます
  5. 判定を直したら記録する … どの欄を、何に直したかを残します

3番目を省かないでください。 全欄が空の伝票を「消費なし」として通すと、数え忘れが売上の漏れとして確定します。

目標は、2,400枚をならして1枚1分です。 開くのは1割前後という想定で、それより多い月は、撮り方か伝票の様式に原因があります。

Step10

例外に対処する

起きること対応
画像の寸法が範囲外、文字が小さすぎる撮り直しを客室係のタブレットに通知する
部屋番号が2つ見つかる伝票を重ねて撮ったものとして撮り直す
部屋番号が客室の一覧に無いneeds_human。書き間違いの多くは隣の部屋番号
品目がマスタに無いunmatched。新しい品目なら、マスタに追加してから再判定
「補充なし」がチェックされているのに数量があるneeds_human。どちらが正しいか客室係に聞く
同じ部屋の伝票が同じ日に2枚撮り直しか、2回補充したかを確かめる。二重に計上しない
チェックアウト後に届いたlate。経理の後日請求の一覧へ回す
OCRまたは生成AIが応答しない元のフォルダに残す。処理済みへ移すのは成功時だけ

上の3行が大半を占めます。 どれもAIの問題ではなく、撮り方と伝票の様式の問題です。 直すほうが、読み取りの精度を上げるより効きます。

Step11

記録を残す

  • 伝票の画像と、撮影した日時・タブレット・フロア
  • OCRが返したJSONの全文と、生成AIが返したJSON
  • 明細の案(verdict、reason)と、そのとき参照した品目マスタの版
  • 人が判定を直した記録 … どの欄を、何から何に直したか
  • PMSに計上した日時と、計上した担当
  • 記入者ごとの unreadable と全欄 blank の件数

品目マスタの版を残すのは、価格と品目が入れ替わるためです。 季節で品目を替えたあとに過去の精算を見直すと、当時の単価が分からなくなります。

最後の行は、客室係への声かけの材料になります。 特定の記入者で unreadable が続くなら、数字の書き方を一度そろえれば片づきます。評価に使うのではなく、伝票の様式と書き方を直すために使います。

04実装レベルの3段階

最小構成:伝票の写真を手でAIの画面に貼り、部屋番号と数量を表にさせる / 1枚ごとの読み取り
半自動化:上記+撮影をきっかけにOCRと生成AIを呼び、品目マスタで明細の案を作り、PMSの書き出しと照らして出発予定の時刻順の一覧にする / 読み取り、名寄せ、未計上と伝票の無い部屋の洗い出し
本格構成:上記+PMSの取り込みの口へ `ready` の明細を渡し、計上後の結果を受け取って突き合わせる / 計上の準備と、計上漏れの点検

最小構成は、確かめるための段階です。 1枚ずつ貼り付けるので、月2,400枚には使えません。 本記事の想定は半自動化です。 読み取りと名寄せが自動になり、人はPMSの計上と、needs_human と伝票の無い部屋の確認に時間を使います。 本格構成は、PMSに明細の取り込みの口がある場合に限られ、その仕様は製品ごとに違うため個別の確認が要ります。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、unmatched になる略称と、unreadable の多い記入者が先に分かります。

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

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

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

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

AI活用について相談する

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

向いている
  1. 客室に有料の冷蔵庫・ミニバーを置き、客室係が清掃のたびに紙の補充伝票を書いている旅館・ホテル。伝票をフロントや事務所の担当が1枚ずつ読んで客室管理の仕組み(PMS)へ入力しており、チェックアウトに間に合わない伝票や読めない字で精算漏れが起きている場合。伝票の様式を品目の印字された決まった形に直せる場合。
向いていない
  1. 冷蔵庫の中身を無料にしている、または客室に冷蔵庫の販売品を置いていない施設。センサー付きの冷蔵庫や客室のタブレットで消費が自動で記録され、紙の伝票を使っていない施設。客室数が少なく、フロントが客室係から口頭で聞いて入力すれば足りる場合。なお、個々の品目の税率区分の判断や、宿泊客との精算の可否の判断はこの構成では行いません。

07最小構成で試す方法

  1. 先週の補充伝票から50枚を選ぶ(読みにくいもの、空欄のあるもの、略称のものを必ず入れる)
  2. その50枚を、当時PMSにどう入力したかと並べておく
  3. 50枚をタブレットで撮り、手元のAIサービスの画面に1枚ずつ貼り付ける
  4. 「この伝票の部屋番号と、品目ごとの数量を表にしてください。何も書かれていない欄は空欄、0と書かれた欄は0、読めない欄は読めないと書いてください。品目一覧に無い品目名は、似た品目に寄せないでください」と指示する
  5. 出てきた表を、当時の入力と突き合わせる

50枚は必ずやってください。 ワークフローを組む前に、「手書きの数量が読めるのか」を確かめます。

出てきた内容判断
当時の入力と同じ数量が出たOCRとワークフローの連携に進む
空欄を0にした、似た品目に寄せた指示の書き方で直る。構成は有効
数字が読めない伝票が多い撮り方と伝票の様式が先。 AIの問題ではない

3行目が出たら、伝票の様式を見直します。品目名を印字し、数量の欄を1マスずつに区切り、「補充なし」のチェック欄を足すだけで、読めない欄は大きく減ります。 新しい様式で同じ50枚分を書いてもらい、もう一度試してください。

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

問題対策
空欄が0として扱われるblank と zero を分ける。 「補充なし」のチェック欄を伝票に足す
読めない数字が推測で埋まる信頼度で unreadable に分け、指示でも推測を禁じる
略称が似た品目に寄せられるマスタに略称の列を持ち、完全一致だけを名寄せにする
無料の水やお茶が売上に乗るマスタに無料品の列を持たせ、明細の案から外す
ビールとお茶の税率を取り違える税率区分はマスタで持つ。 AIに判断させない
遠くから撮って数字が小さい撮影の位置を決めた台紙を置く
伝票を重ねて撮る部屋番号が2つ出たら撮り直しを通知する
伝票の届かない部屋に気づけない清掃の記録と照らす定時の点検を、届いた伝票の処理とは別に動かす
同じ伝票を二度撮る部屋・日付・記入者で重複を検知し、二重に計上しない
PMSへ自動で計上してしまう計上は人が行う。 取り込みの口を使う場合も、人が確定させる
客室係の個人の端末で撮るフロアのタブレットに限る。宿泊の記録を個人の端末に残さない

上の2行が、この構成の失敗のほとんどです。 どちらも「何も無いように見える」という同じ見た目から出発しています。判定の根拠を、伝票のチェック欄とOCRの信頼度に置いてあるかどうかで、運用に乗るかが決まります。

5行目も早めに効いてきます。 冷蔵庫の中身を「飲料」と一括りにすると、税率の区分が崩れます。

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

この構成で扱うデータ: 部屋番号、客室で消費された品目と数量、記入した客室係の名前、そしてPMSから書き出す出発予定と計上済みの売上です。宿泊者の氏名は伝票に書かず、PMSの書き出しからも外します。

  1. 宿泊者の氏名をAIに渡さない … 伝票の読み取りと名寄せに氏名は要りません。PMSの書き出しは、部屋番号・出発予定の時刻・計上済みの売上の列だけにします
  2. 撮影の端末を限る … フロアのタブレットだけを使い、客室係の個人の端末に伝票の画像を残しません
  3. 誤った請求を出さない設計にする … 計上は人が行い、AIの出力は案のままにします。客の目の前で精算額が違うのは、削減した時間よりはるかに高くつきます
  4. 税率区分はマスタで決める … 国税庁のQ&Aでは、客室の冷蔵庫内の飲料の販売は軽減税率の対象で、酒税法に規定する酒類は除かれています。品目ごとの区分は経理が決め、顧問税理士と確かめてください
  5. 記入者ごとの集計を評価に使わない … unreadable の多い記入者が分かっても、それは様式と書き方を直す材料です。 人事の評価に回すと、伝票に書かない人が出てきます
  6. ログの保存期間を決める … 伝票の画像と明細の案は、売上の根拠です。会計の帳簿と同じ考え方で保存期間を決めます

誤りが起きた場合のリスクは、飲まれた分を請求し損ねることと、飲まれていない分を請求することの2つです。 前者は blank を zero に混ぜると起き、後者は unreadable を推測で埋めると起きます。どちらも同じ区別から出ているので、そこだけは設計で守ります。

10まず何から始めるか

1週目:伝票の様式を直す

品目名を印字し、数量の欄を1マスずつに区切り、「補充なし」のチェック欄と部屋番号の欄を上に置いた様式を作ります。あわせて品目マスタに、略称の列と無料品の列を足します。略称は、客室係に実際の書き方を聞いて集めます。

2週目:50枚で試す

新しい様式の伝票を1フロアで使ってもらい、50枚を手元のAIサービスに貼り付けて読ませます。当時の入力と突き合わせ、空欄を0にしていないか、似た品目に寄せていないかを最優先で見ます。

3週目:撮り方を決める

フロアに撮影用のタブレットと台紙を置き、撮る位置と向きを決めます。 撮った画像の文字の大きさを見て、数量の数字が十分な大きさで写る距離を確かめます。

4週目:撮影から明細の案までをつなぐ

Power Automate でフォルダを見張り、OCRと生成AIを呼び、明細の案を一覧に書き出すところまで作ります。この時点ではPMSとの照合をせず、読み取りの一覧だけを見ます。

2か月目: PMSの書き出しとの照合と、伝票の届いていない部屋を探す定時の点検を足し、フロントへの通知を始めます。needs_human の件数を毎週数えます。3か月目以降: 全フロアに広げ、1枚3分が何分になったかを実測します。チェックアウト後に見つかる精算漏れが減っていることを確かめた時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-10-08/最終更新:2026-10-08
確認した内容情報源確認日
レイアウトモデルが文字・表・選択マーク・文書の構造を取り出すこと。表が行数・列数とセルごとの行と列の位置を返すこと。選択マークが selected/unselected の状態と信頼度で返ること。行ごとに手書きの書体かどうかを styles で返すこと。画像が 50×50 から 10,000×10,000 ピクセル、文字の最小の高さが 1024×768 の画像で 12 ピクセル(150dpi で約8ポイント)であること。ファイルサイズが S0 で 500MB、F0 で 4MB であることMicrosoft Learn: Document layout analysis2026-10-08
Read と Layout の手書きの対応言語に日本語(ja)が含まれること(v4.0)Microsoft Learn: Language and locale support for Read and Layout2026-10-08
構造化出力が渡した JSON Schema に従わせる機能であること。strict: true を使い、すべての項目を required にし、additionalProperties を false にすること。任意の項目は null との組み合わせで表すことMicrosoft Learn: How to use structured outputs with Azure OpenAI in Microsoft Foundry Models2026-10-08
ホテル等の客室に備え付けられた冷蔵庫内の飲料(酒税法に規定する酒類を除く)の販売は「飲食料品の譲渡」に当たり軽減税率の対象となること。ルームサービスは「食事の提供」に当たり軽減税率の対象とならないこと(問72・問73)国税庁: 消費税の軽減税率制度に関するQ&A(個別事例編)2026-10-08

品目ごとの税率区分と、出発後の請求をどう扱うかは、自社の経理と顧問税理士で決めてください。 本記事は公式のページで確認できた範囲だけを扱っています。

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

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

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

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