ホテルの清掃委託会社から毎月届く請求明細を、客室ごとの清掃の実績(チェックアウト・連泊・特別清掃)と単価表に照らして、件数と金額の食い違いを支払の前に拾う
清掃委託会社から毎月届く請求明細を、客室の清掃の実績と単価表に照らします。件数と金額の食い違いを拾い、食い違いごとに理由の見立てを付けて、支払の前に確かめる一覧にします。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Make/n8n/Power Automate/Zapier
- 対象業界
- 不動産/宿泊
- 対象部門
- 経理/購買
- 対象業務
- 内容確認・チェック/比較検討
- 主な課題
- 人手が足りない/入力作業が多い/確認ミスが多い
- AIで行う処理
- 判定
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 委託先から届いた請求明細のPDFを開き、日ごと・区分ごとの件数と金額をスプレッドシートに打ち込む
- 各ホテルの予約管理システムから、日ごとのチェックアウトの数と連泊の数を画面で数えるか、帳票を出す
- 清掃なしの連泊の数を、フロントの記録から数える
- 日ごと・区分ごとに件数を見比べ、合わない日に印を付ける
- 特別清掃の客室番号を、フロントの特別清掃の依頼の記録と突き合わせる
- 単価が単価表どおりか、件数 × 単価が金額と合うかを確かめる
- 合わない日の理由をホテルの客室の担当に聞き、委託先に問い合わせる
- 自動委託先から請求明細のメールが届くと、ワークフローが添付のPDFを取り出す
- 自動AIが請求明細を読み取り、日ごと・区分ごとの件数・単価・金額と、特別清掃の客室番号を表にする
- 自動照合の表に書き込むと、式が予約管理システムの実績・特別清掃の依頼の記録・単価表との差を計算する
- 自動差のある行ごとに、その日の客室の実績と契約の定義をAIに渡し、理由の見立てを判定させる
- 自動判定に応じて、委託先への問い合わせの下書き、客室部門への確認、契約の担当への確認の3つの一覧に分ける
- 人経理の担当が一覧を見て、判定と根拠を確かめる
- 人委託先への問い合わせを送り、訂正の請求を受け取ってから支払に回す
各工程の詳しい説明を読む
- 委託先から届いた請求明細のPDFを開き、日ごと・区分ごとの件数と金額をスプレッドシートに打ち込む
- 各ホテルの予約管理システムから、日ごとのチェックアウトの数と連泊の数を画面で数えるか、帳票を出す
- 清掃なしの連泊の数を、フロントの記録から数える
- 日ごと・区分ごとに件数を見比べ、合わない日に印を付ける
- 特別清掃の客室番号を、フロントの特別清掃の依頼の記録と突き合わせる
- 単価が単価表どおりか、件数 × 単価が金額と合うかを確かめる
- 合わない日の理由をホテルの客室の担当に聞き、委託先に問い合わせる
(a)PDFを表に起こすだけで時間がかかる。 1施設120行を打ち込むのに約1時間です。打ち込みの誤りが、そのまま食い違いに見えることもあります。
(b)区分の境目で食い違う。 夕方のチェックアウトで清掃が翌朝に回った客室、連泊の途中で清掃を断った客室、チェックイン無しで点検だけした客室は、委託先と予約管理システムで、どの日のどの区分に数えるかが違います。 これを毎月同じように説明するのに時間がかかります。
(c)特別清掃の根拠が残っていない。 フロントが口頭で依頼した特別清掃は、依頼の記録に載っていないことがあります。請求明細にある特別清掃が、本当に依頼したものかを確かめる先がありません。
(d)見立てがベテランの経験に頼る。 「この施設は月末の連泊が多いから、この日のずれは区分の数え方の違いだろう」という見立ては、長く担当している1名の頭の中にしかありません。
- 【自動】 委託先から請求明細のメールが届くと、ワークフローが添付のPDFを取り出す
- 【自動】 AIが請求明細を読み取り、日ごと・区分ごとの件数・単価・金額と、特別清掃の客室番号を表にする
- 【自動】 照合の表に書き込むと、式が予約管理システムの実績・特別清掃の依頼の記録・単価表との差を計算する
- 【自動】 差のある行ごとに、その日の客室の実績と契約の定義をAIに渡し、理由の見立てを判定させる
- 【自動】 判定に応じて、委託先への問い合わせの下書き、客室部門への確認、契約の担当への確認の3つの一覧に分ける
- 【人】 経理の担当が一覧を見て、判定と根拠を確かめる
- 【人】 委託先への問い合わせを送り、訂正の請求を受け取ってから支払に回す
6番目が、この設計の分かれ目です。 経理の担当は、PDFを打ち込んで1日ずつ数を合わせる代わりに、差のある行と、その見立てと根拠だけを読みます。 差の無い行は件数だけを確かめて流します。
7番目で「訂正の請求を受け取ってから」としているのは、意図してのことです。 食い違いを自社の側で差し引いて支払うのではなく、委託先に確かめてもらい、正しい請求を出し直してもらいます。 理由は第13章で書きます。
02今回想定するシステム構成
委託先からの請求明細(PDF添付のメール) ▼【トリガー】Gmail の Watch emails(委託先のアドレス、添付あり) Make ├──▶ Gmail の List email attachments and media(PDFを取り出す) ▼ Anthropic Claude(Make an API Call:PDF入力+構造化出力) │ 日ごと・区分ごとの件数・単価・金額、特別清掃の客室番号 ▼ Google Sheets の Bulk Add Rows(照合の表に書き込む) │ 式で計算:予約管理システムの実績との差/依頼の記録との差/単価表との差 ▼ Google Sheets の Search Rows(差のある行)→ Iterator ▼ Anthropic Claude(Make an API Call:食い違いごとの判定) ▼ Router ├─ 請求の誤りの候補 …… 委託先への問い合わせの下書き(Create a draft email) ├─ 自社の記録の抜けの候補 … 客室部門の確認の一覧 └─ 定義の確認が要る(fallback) … 契約の担当の確認の一覧
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| ワークフロー | Make | Power Automate、n8n、Zapier |
| 生成AI | Claude API(Make の Anthropic Claude アプリ) | OpenAI API、Gemini API |
| 差異計算 | Google スプレッドシート(照合の表の式) | Microsoft 365 の表計算 |
| メール | Gmail(経理の受付のアドレス) | Microsoft 365 のメール |
| 実績 | 予約管理システムから日ごとに書き出した客室の実績 | 施設の帳票 |
新しく足すのは、Make のシナリオ1本と、照合の表です。 予約管理システムと会計システムには書き込みません。予約管理システムからの書き出しは、施設ごとに日ごとの客室の状態(チェックアウト・連泊・清掃なしの連泊・未販売)を1日1回、表に書き出す形を前提にします。 書き出しの方法は予約管理システムによって違うので、提供元に確かめてください。
入口は Gmail の Watch emails です。 送信者や件名、ラベル、添付の有無で絞れ、1回に拾う件数の上限は500以下です。 添付のPDFは List email attachments and media で取り出し、ファイルのデータを含めて返す設定にします。
読み取りは、Anthropic Claude アプリの Make an API Call で Messages API を呼びます。 Claude はPDFの各ページを画像に変換し、各ページから取り出した文字を画像と一緒に読みます。 表の罫線や、セルの結合のある明細も読める形です。1回の依頼の大きさは32MBまで、ページは600ページ(文脈の窓が100万トークン未満の場合は100ページ)までで、パスワードや暗号化のあるPDFは読めません。
JSONの形は構造化出力で決めます。 output_config.format に type: "json_schema" でスキーマを渡し、区分の値を enum で縛ります。
03どうやって実装するのか
処理の起点を決める
Watch emails を1時間ごとに動かします。 対象は、委託先2社のアドレスから届いた、添付のあるメールです。委託先のアドレスから届いたメールに「清掃請求」のラベルを付ける Gmail のフィルターを置き、そのラベルだけを見ます。取り込んだときに既読にする設定にはしません。
請求明細は月に1回ですが、届いたらすぐに動かします。 12施設の明細が同じ週に届き、支払の締めまで数日しかありません。1通目が届いた日に照合が始まれば、委託先に問い合わせて訂正の請求を受け取る時間が残ります。
同じ施設の同じ月の明細が2回届いたら、2回目を訂正版として扱います。 施設のコードと対象の月で照合の表を引き、すでに行があれば、前の行を消さずに「訂正前」の印を付けてから新しい行を書きます。 訂正の前後で何が変わったかを、後から見られるようにするためです。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 請求明細 | 施設名、対象の月、日ごと・区分ごとの件数・単価・金額、特別清掃の客室番号と理由 | Gmail の添付のPDF |
| 客室の実績 | 施設ごと・日ごとの、客室番号と状態(チェックアウト・連泊・清掃なしの連泊・未販売)、チェックアウトの時刻 | 予約管理システムから書き出した表 |
| 特別清掃の依頼の記録 | 依頼の日、客室番号、理由、依頼した人 | フロントの依頼の記録 |
| 単価表 | 委託先・施設・区分ごとの単価と、適用の開始日 | 契約の単価表 |
| 契約の定義 | 区分の定義(夕方のチェックアウトをどの日に数えるか、清掃なしの連泊の扱いなど) | 契約書の該当部分を書き写した文書 |
質を決めるのは、いちばん下の契約の定義です。 第3章の(b)の食い違いは、定義を読めばどちらの数え方が正しいかが分かるものが多いのですが、契約書の定義は短く、運用の取り決めはメールのやり取りに散らばっています。最初の準備として、定義と、その後に取り決めた運用を1つの文書にまとめます。
単価表には適用の開始日を持たせます。 単価は年に1回見直されることがあり、月の途中で単価が変わる月は、日によって正しい単価が違います。
データの取得方法を決める
請求明細は、PDFをそのままAIに渡して表にします。 Make an API Call の本文に、取り出したPDFを base64 にした document のブロックと、取り出しの指示を入れます。明細の書式は委託先2社で違いますが、取り出す項目は同じなので、指示は1つで足ります。
照合の表は、施設ごと・月ごとに1枚のシートにします。 AIが返した行を Bulk Add Rows で書き込むと、同じシートの式が次を計算します。
| 列 | 計算の中身 |
|---|---|
| 実績の件数 | 客室の実績の表から、その日・その区分の客室を数える |
| 件数の差 | 請求の件数 - 実績の件数 |
| 単価表の単価 | 委託先・施設・区分と、その日に適用される単価 |
| 単価の差 | 請求の単価 - 単価表の単価 |
| 金額の検算 | 請求の件数 × 請求の単価 - 請求の金額 |
| 特別清掃の依頼の有無 | 客室番号と日で依頼の記録を引く |
差の計算をスプレッドシートの式にするのは、誰が見ても同じ答えになるからです。 AIに「件数が合うか」を聞くと、数え方の説明は上手でも、数そのものを取り違えることがあります。 数は式、見立てはAI、と分けます。
どこまでの差を「差あり」とするかも、表の側で決めます。 件数の差が0でも金額の検算がずれる行、件数の差が1件だけの行も、すべて差ありとして拾います。 1件の差でも、毎日続けば月に30件になるからです。逆に、施設がまだ書き出しを始めていない日の行は「実績なし」として差の計算から外し、存在しない食い違いを作らないようにします。
差のある行は Search Rows で取り出し、Iterator で1行ずつAIに渡します。 そのとき、その日の客室の実績の行(客室番号と状態、チェックアウトの時刻)と、前後1日の実績を一緒に渡します。夕方のチェックアウトが翌日の清掃に回った、という見立ては、前後の日を見ないと立てられません。
AIへ渡す前に整形する
- ファイルの確認 … 添付がPDFであること、パスワードが付いていないことを確かめます。付いていれば委託先に外して送ってもらいます
- 施設と月の特定 … 件名とファイル名から施設のコードと対象の月の候補を拾い、AIが読み取った値と一致するかを確かめます。一致しなければ照合に進まず、担当に回します
- 合計の検算 … AIが返した明細の金額の合計が、PDFに書かれた請求の合計と合うかを確かめます。合わなければ読み取りの誤りを疑い、照合に進みません
- 実績の書き出しの確認 … その施設のその月の客室の実績が、全日分そろっているかを確かめます
- 重複の確認 … 同じ施設・同じ月の明細がすでにあれば、訂正版として扱います
3番目が、読み取りの誤りを止める関所です。 明細の1行を読み飛ばしたり、件数と金額を取り違えたりすると、照合の表に存在しない食い違いが現れます。合計が合わない明細を照合に進めると、委託先に誤った問い合わせを送ることになります。
AIに処理させる
AIを2回呼びます。 1回目は請求明細を表にすること、2回目は差のある行ごとの判定です。この構成の主眼は2回目です。
2回目で付けさせる判定は、次の4つです。
| 判定 | 意味 | 回す先 |
|---|---|---|
vendor_error_candidate | 実績と定義から見て、請求の件数・単価・区分が誤っている候補 | 委託先への問い合わせ |
record_gap_candidate | 自社の実績や依頼の記録に抜けがある候補 | 客室部門の確認 |
definition_check | 契約の定義の読み方で、どちらの数え方もありうる | 契約の担当の確認 |
undetermined | 渡された材料では見立てが立たない | 経理の担当 |
判定ごとに、根拠を書かせます。 根拠は「どの客室の、どの記録を見て、契約の定義のどの文に当てはめたか」で、契約の定義の文はそのまま写させます。
| 食い違いの型 | AIが見るところ |
|---|---|
| 連泊の件数が多く、チェックアウトの件数が少ない | 夕方のチェックアウトの客室と、定義の「何時以降のチェックアウトは翌日の扱い」の文 |
| 清掃なしの連泊が通常の連泊として請求されている | その日の清掃なしの連泊の客室と、フロントの記録 |
| 特別清掃の依頼の記録が無い | その客室のその日の状態と、請求明細の特別清掃の理由 |
| 単価が単価表と違う | 単価表の適用の開始日と、請求の日 |
| させないこと | 理由 |
|---|---|
| 件数・金額の計算 | スプレッドシートの式で行う |
| 支払う額の決定 | 経理と委託先で確かめて決める |
| 差し引いて支払う提案 | 委託先の訂正の請求を受け取る運用にする |
| 委託先の責任の断定 | 判定は「候補」。決めるのは人 |
| 契約の定義の解釈の確定 | 定義の読み方が分かれるものは definition_check として人に回す |
3行目がいちばん守らせたいことです。 判定の文に「○○円を差し引いて支払う」と書かせると、そのまま支払の処理に流れる恐れがあります。 問い合わせの下書きにも、差し引くという言葉は使わせません。
指示内容を固定する
2回目(食い違いごとの判定)の指示の例です。
あなたはホテルの本部の経理で、客室清掃の委託費の請求明細を確かめる担当です。
渡された材料だけを見て、食い違いの理由の見立てを付けてください。
推測で補わないでください。
【判定】
- vendor_error_candidate ... 実績と契約の定義から見て、請求の件数・単価・区分が
誤っている候補
- record_gap_candidate ..... 自社の客室の実績や特別清掃の依頼の記録に
抜けがある候補
- definition_check ......... 契約の定義の読み方で、どちらの数え方もありうる
- undetermined ............. 渡された材料では見立てが立たない
迷ったときは vendor_error_candidate を選ばないでください。
【厳守事項】
- 件数と金額の計算をしないでください。差は渡した値をそのまま使ってください。
- 根拠には、見た客室番号と記録の値、当てはめた契約の定義の文を書いてください。
契約の定義の文は、渡した文書からそのまま写してください。
- 前後の日の実績も見て、日をまたいだ数え方の違いで説明できるかを確かめてください。
- 特別清掃の依頼の記録が無いことだけを理由に vendor_error_candidate にしないでください。
口頭の依頼で記録が残っていない場合があります。record_gap_candidate も検討してください。
- 支払う額、差し引く額、委託先の責任について書かないでください。
- 委託先への問い合わせの文には、確かめたい日・区分・件数と、
こちらの記録の値だけを書き、どちらが正しいかを書かないでください。
【施設と月】{facility} {month}
【食い違いの行】{diff_row}
【その日と前後1日の客室の実績】{room_records}
【その日の特別清掃の依頼の記録】{special_requests}
【契約の定義(運用の取り決めを含む)】{definition_text}
「依頼の記録が無いことだけを理由に請求の誤りにしない」を明記しないと、特別清掃の食い違いがすべて請求の誤りになります。 第3章の(c)のとおり、フロントの口頭の依頼は記録に残っていないことがあります。記録が無いことは、依頼が無かったことの証明になりません。
「迷ったときに vendor_error_candidate を選ばない」と書くのも同じ理由です。 委託先への問い合わせは、空振りが続くと委託先の現場の担当者に余計な調べものをさせ、関係を悪くします。
出力形式を固定する
次の形のJSONで受け取ります。
{
"facility": "",
"date": "",
"category": "checkout | stayover | no_service_stay | special",
"diff": { "count": 0, "unit_price": 0, "amount_check": 0 },
"verdict": "vendor_error_candidate | record_gap_candidate | definition_check | undetermined",
"rooms_examined": [""],
"evidence": "",
"definition_quote": "",
"question_to_vendor": "",
"question_to_rooms": ""
}
1つ目の理由は、verdict で回す先が機械的に決まることです。 Router の枝のフィルターを verdict の値で書けば、請求の誤りの候補は委託先への下書きへ、記録の抜けの候補は客室部門の一覧へと流れます。
2つ目は、diff を渡した値のまま返させることです。 AIの判定と、式で計算した差を同じ行に並べておけば、AIが数を書き換えていないかを、照合の表と1対1で見比べられます。 違っていれば、その判定は使いません。
3つ目は、definition_quote で定義の当てはめを確かめられることです。 経理の担当は、契約書を開かなくても、どの文に当てはめた見立てかを読めます。 定義の文が間違っていれば、判定ごと差し戻します。
委託先への問い合わせは、vendor_error_candidate の行を施設ごとにまとめ、Array aggregator で1通にしてから、Gmail の Create a draft email で下書きにします。送信は経理の担当が行います。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 経理の受付のアドレス | Gmail の Watch emails と List email attachments and media | 委託先のメールを拾い、PDFを取り出す |
| Claude API | Anthropic Claude の Make an API Call | 明細の読み取りと、食い違いごとの判定 |
| 照合の表 | Google Sheets の Bulk Add Rows・Search Rows | 明細を書き込み、差のある行を引く |
| 客室の実績・依頼の記録・単価表 | Google Sheets の Search Rows | 判定の材料を引く |
| 判定の一覧 | Google Sheets の Add a Row | 判定ごとに確認の一覧に1行を足す |
| 委託先への問い合わせ | Gmail の Create a draft email | 施設ごとに1通の下書き |
会計システムには書き込みません。 支払の処理は、委託先から訂正の請求が届いた後に、経理の担当がいつもの手順で行います。この構成が出すのは、確かめるべき食い違いの一覧までです。
予約管理システムにも書き込みません。 客室部門の確認で記録の抜けが分かったときに、予約管理システムを直すかどうかは客室部門が決めます。
人が確認する
- 合計の検算が合わなかった明細を先に見る … 読み取りの誤りか、明細そのものの誤りかを確かめます
vendor_error_candidateの根拠を確かめる … 見た客室と記録の値を、予約管理システムで確かめてから問い合わせを送りますrecord_gap_candidateは客室部門に聞く … 口頭の特別清掃の依頼が無かったか、清掃なしの連泊の記録が漏れていないかを確かめますdefinition_checkは契約の担当が決める … 決めた読み方を契約の定義の文書に書き足します- 判定を覆したら記録する … どの判定を、どれに変えたか、理由を残します
4番目が、翌月以降の判定を軽くします。 定義の読み方を文書に書き足すと、翌月の同じ型の食い違いは definition_check ではなく、どちらかの判定に落ちるようになります。
目標は、12施設をならして1件75分です。 差のある行が1施設10行前後という想定です。それより多い月は、予約管理システムの書き出しが欠けているか、定義の文書が追いついていません。
例外に対処する
| 起きること | 対応 |
|---|---|
| PDFにパスワードが付いている | 読めないので、委託先に外して送ってもらう |
| 明細の合計がPDFの請求の合計と合わない | 照合に進めず、経理の担当が明細を開く |
| 施設や月が件名と読み取りで食い違う | 照合に進めず、担当に回す |
| 客室の実績の書き出しに欠けた日がある | その日の行は判定せず「実績なし」として一覧に載せる |
| 明細が日ごとでなく月の合計だけ | 日ごとの照合ができない。委託先に日ごとの明細を求める |
| 単価表に無い区分が請求されている | definition_check として契約の担当へ |
AIの判定の diff が式の値と違う | その判定を使わず、undetermined として担当へ |
| Claude API が応答しない | ラベルを残し、次の実行でもう一度試す |
上から4行目までが大半を占めます。 どれもAIの判定の問題ではなく、明細と実績という材料の欠けの問題です。 材料が欠けた行を判定させないことが、判定の精度を上げるより効きます。
記録を残す
- 受け取った請求明細のPDFと、受け取った日時、訂正版かどうか
- 1回目の読み取りの結果のJSONと、合計の検算の結果
- 照合の表(その月の版を、訂正前の行も含めて残す)
- 2回目の判定のJSONと、そのとき参照した契約の定義の文書の版
- 人が判定を覆した記録 … どの判定を、どれに変えたか
- 委託先への問い合わせと、訂正の請求との対応
4つ目で定義の文書の版を残すのは、文書が毎月書き足されるからです。 後から判定を見直すときに、当時の定義で見た判定か、新しい定義で見た判定かを分けられます。
04実装レベルの3段階
半自動化で、1件300分が150分程度になります。 打ち込みと数合わせは自動になりますが、差のある行の理由を1つずつ調べる作業が残ります。本格構成で75分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化を1か月回すと、予約管理システムの書き出しの欠けと、契約の定義の文書の抜けが先に分かります。 そこを埋めてから判定を足すほうが、判定が undetermined だらけになりません。
05工数削減シミュレーション
導入後 12件 × 75分 ÷ 60 = 15 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 複数のホテルを運営し、客室清掃を外部の会社に委託していて、毎月ホテルごとに届く請求明細を本部の経理が予約管理システムの実績と見比べている場合。清掃の区分(チェックアウト・連泊・清掃なしの連泊・特別清掃)ごとに単価が違い、件数の食い違いが毎月いくつか見つかる場合。予約管理システムから日ごとの客室の状態を書き出せる場合。
- ホテルが1つで客室が数十室しかなく、請求明細を目で見て足りる場合。清掃の委託が月額の固定料金で、件数で請求が変わらない場合。予約管理システムから客室の実績を書き出せない場合。なお、食い違いをどう精算するか、委託先とどう話し合うかの判断は、この構成では代替できません。
07最小構成で試す方法
- 先月の請求明細から3施設分を選ぶ(食い違いがあったと分かっている施設を入れる)
- その3施設について、予約管理システムの日ごとの実績と特別清掃の依頼の記録を手で表にする
- 手元のAIサービスに請求明細のPDFを渡し、「日ごと・区分ごとの件数・単価・金額を表にしてください。読めない数字は空欄にしてください」と指示する
- 表計算で差を計算し、差のある行について、その日の実績と契約の定義を貼って「請求の誤りの候補か、自社の記録の抜けか、定義の確認が要るかを、根拠を付けて判定してください」と指示する
- 出てきた判定を、当時の担当者の見立てと見比べる
3施設は必ず試してください。 シナリオを組む前に、「明細を正しく表にできるか」「見立てが当時の担当と合うか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 明細の表が合計と合い、見立てが当時とおおむね一致した | シナリオの構築に進む |
| 見立てが請求の誤りに偏った | 「迷ったら選ばない」と記録の抜けの指示を足す。構成は有効 |
| 定義の確認ばかりになった | 契約の定義の文書が先。 AIの問題ではない |
3行目が出ることは珍しくありません。 失敗ではなく、これまでの見立てが、文書に無い取り決めに頼っていたということです。 当時の担当者に、その取り決めを書き出してもらってください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 明細の1行を読み飛ばす | 明細の合計と請求の合計を検算し、合わなければ照合に進まない |
| 特別清掃の食い違いがすべて請求の誤りになる | 記録が無いことだけで決めない、と指示に書く |
| 夕方のチェックアウトの日のずれを誤りとする | 前後1日の実績を渡し、定義の文を当てはめさせる |
| AIが件数を数え直す | 差は式で計算し、AIには渡した値のまま返させる |
| 月の途中の単価の改定で差が出る | 単価表に適用の開始日を持たせる |
判定が definition_check だらけになる | 契約の定義の文書を先に整える |
| 実績の書き出しが欠けた日を誤りとする | 実績の無い日は判定しない |
| 問い合わせに「差し引く」と書く | 下書きには確かめたい事実だけを書かせる |
| 訂正版で前の行を上書きする | 訂正前の印を付けて残す |
| パスワード付きのPDFで止まる | 委託先に外して送ってもらう |
上の3行が、この構成の失敗のほとんどです。 どれも、手元に無い材料を「無い」ことの証明として読むところから起きます。記録が無い、前後の日を見ていない、行を読み飛ばした、のどれも、判定の前の材料のそろえ方で防ぎます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 委託先との契約の単価、施設ごとの客室の稼働の実績、特別清掃の理由(喫煙、汚損など)です。宿泊者の名前は扱いません。
- 宿泊者の情報を材料に入れない … 予約管理システムからの書き出しは、客室番号と状態、チェックアウトの時刻だけにします。宿泊者の名前や連絡先は判定に要りません
- 差し引いて支払わない … 食い違いが見つかっても、自社の側で請求額から差し引くのではなく、委託先に確かめてもらい、訂正の請求を受け取ってから支払います
- 取適法に当たるかを確かめておく … 公正取引委員会の Q&A は、委託する事業者が自ら用いる役務の委託を取適法の役務提供委託の対象外としています。ホテルの客室清掃の委託がこれに当たるかは、取引の形と両社の規模で変わるので、契約の担当と確かめてください。 当たる場合は、中小受託事業者の責めに帰すべき理由がないのに、あらかじめ定めた代金を減額することが禁じられ、相手の了解を得ていても違反になるとされています。役務提供委託の支払は、役務が提供された日から起算して60日以内に定めた支払期日までに行う必要があります。照合で支払を遅らせないよう、問い合わせは届いた週のうちに送ります
- 契約の単価を外部へ出しすぎない … AIに渡す単価表は、その施設・その区分の行だけにします
- 判定は候補にとどめる … 委託先の責任を断定する文を書かせず、決めるのは経理と契約の担当です
誤りが起きた場合のリスクは、誤った問い合わせで委託先との関係を損なうことと、本当の請求の誤りを見逃して支払うことの2つです。 前者は「迷ったら請求の誤りにしない」指示と人の確認で、後者は差の計算を式に置くことで防ぎます。
10まず何から始めるか
1週目:契約の定義の文書を作る
契約書の区分の定義と、その後にメールで取り決めた運用(夕方のチェックアウトの扱い、清掃なしの連泊の扱いなど)を、1つの文書に書き出します。長く担当している経理の担当者と客室部門で作ります。
2週目:3施設で試す
先月の明細から3施設を選び、手元のAIサービスで表にして、差のある行の見立てをさせます。明細の合計が合うか、見立てが請求の誤りに偏っていないかを最優先で見ます。
3週目:客室の実績の書き出しをつなぐ
予約管理システムから、日ごとの客室の状態を表に書き出す仕組みを作ります。12施設のうち、書き出せる施設から始めます。
4週目:明細の読み取りから照合の表までをつなぐ
Make で Watch emails から読み取り、照合の表への書き込みまでを作ります。この時点では判定をさせず、差のある行の一覧だけを見ます。
2か月目: 食い違いごとの判定と回す先の一覧を足します。判定を覆した件数を毎月数えます。3か月目以降: 問い合わせの下書きを足し、1件300分が何分になったかを実測します。definition_check が月に数件まで減り、定義の文書の書き足しが止まった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Watch emails で送信者、件名、ラベル、添付の有無などを指定でき、1回の上限が500以下であること。List email attachments and media で添付を取り出し、ファイルのデータを含めて返す設定があること。Create a draft email があること | Make: Gmail modules | 2026-10-09 |
| Bulk Add Rows (advanced)、Search Rows、Add a Row などのモジュールがあること | Make: Google Sheets modules | 2026-10-09 |
| Anthropic Claude アプリに Create a Prompt と Make an API Call などのモジュールがあること | Make: Anthropic Claude | 2026-10-09 |
| Iterator が配列を1つずつのバンドルに分け、Array aggregator が複数のバンドルを1つにまとめること | Make Help: Flow control | 2026-10-09 |
| PDFの各ページを画像に変換し、各ページから取り出した文字を画像と一緒に渡すこと。1回の依頼の大きさが32MBまで、ページが600ページ(文脈の窓が100万トークン未満では100ページ)までで、パスワードや暗号化のないPDFが対象であること。1ページあたり1,500〜3,000トークン程度の文字に加えて画像の分がかかること | Claude Docs: PDF support | 2026-10-09 |
構造化出力が output_config.format と type: "json_schema" で一般提供されていること。enum が使え、オブジェクトの additionalProperties は false が必要なこと | Claude Docs: Structured outputs | 2026-10-09 |
| あらかじめ定めた代金を減額することが禁止されていること。役務提供委託では役務が提供された日から起算して60日以内に定めた支払期日までに支払わないと違反となること。中小受託事業者の了解を得ていても違反になること | 公正取引委員会: 委託事業者の禁止行為 | 2026-10-09 |
| 委託する事業者が自ら用いる役務の委託は、取適法の役務提供委託に当たらないとされていること | 公正取引委員会: よくある質問コーナー(取適法) | 2026-10-09 |
食い違いをどう精算するか、取引が取適法の対象に当たるかは、経理と契約の担当、必要に応じて専門家と確かめてください。 本記事は上記の公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1183)についてのご相談はこちらから。
