Media > AI活用ユースケース > 物流 > 店舗から物流センターに届く手書きの返品伝票を読み取り、店舗・品番・数量・返品理由を返品データにそろえて、出荷実績との数量の食い違いと理由の書き漏れを拾う

店舗から物流センターに届く手書きの返品伝票を読み取り、店舗・品番・数量・返品理由を返品データにそろえて、出荷実績との数量の食い違いと理由の書き漏れを拾う

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

店舗から商品と一緒に物流センターへ届く手書きの返品伝票を読み取り、店舗・品番・数量・返品理由を返品データの形にそろえます。そのうえで、店舗に出荷した数より多い返品と、理由の書かれていない行を拾い、店舗への問い合わせの一覧にします。

サマリー
生成AI
ChatGPT/Claude/Gemini
AIサービス
Azure AI/Google Document AI
連携・自動化
Google Apps Script/Python
対象業界
商社/小売/物流
対象部門
物流
対象業務
データ入力・転記/内容確認・チェック
主な課題
人手が足りない/入力作業が多い/確認ミスが多い
AIで行う処理
読み取り(OCR)
主な効果
入力漏れ削減/品質標準化/工数削減
導入難易度
★★☆☆☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
条件付き
現在工数
75h/月
AI導入後
15h/月
想定削減
80%
年間削減
720h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 返品の担当が箱を開け、実物の数を数えて、伝票の数量の横に数えた数を書き込む
  2. 事務担当が伝票を受け取り、倉庫管理システムの返品の登録の画面を開く
  3. 店舗コード、返品日、明細の品番・数量・返品理由を1行ずつ入力する
  4. 品番が書かれていない行は、品名から商品マスタを検索して品番を探す
  5. 理由の印が無い行と、品番が見つからない行を、表計算の問い合わせの一覧に書く
  6. 気になる行について、倉庫管理システムの出荷実績で、その店舗にその品番を出荷したかを確かめる
  7. 問い合わせの一覧がたまったところで、店舗へ電話かメールで確かめる
導入後(After)
  1. 人返品の担当が実物を数え、伝票の「センター検品数」の欄に数を書き込んでから、複合機でスキャンする
  2. 自動スキャンのPDFが共有ドライブのフォルダに保存される
  3. 自動Google Apps Script が10分ごとにフォルダを見て、新しいPDFを Google Document AI の Form Parser に送る
  4. 自動上の欄の項目と明細の表、返品理由の四角の印の有無、読み取りの信頼度を受け取る
  5. 自動品番を商品マスタで引き、品番の無い行や引けない行は、Claude が品名からマスタの候補を選ぶ
  6. 自動返品理由を6つの区分にそろえ、「書かれていない」「読めない」を分けて記録する
  7. 自動店舗への直近の出荷実績と、センターで数えた数を、伝票の数量と突き合わせる
  8. 自動返品データの一覧に書き込み、印の付いた行だけを確認の一覧に出す
  9. 人事務担当が確認の一覧を見て、読めない行は伝票を見て直し、問い合わせる行を決める
  10. 人確かめた返品データを、倉庫管理システムの返品の取り込みで登録する
各工程の詳しい説明を読む
  1. 返品の担当が箱を開け、実物の数を数えて、伝票の数量の横に数えた数を書き込む
  2. 事務担当が伝票を受け取り、倉庫管理システムの返品の登録の画面を開く
  3. 店舗コード、返品日、明細の品番・数量・返品理由を1行ずつ入力する
  4. 品番が書かれていない行は、品名から商品マスタを検索して品番を探す
  5. 理由の印が無い行と、品番が見つからない行を、表計算の問い合わせの一覧に書く
  6. 気になる行について、倉庫管理システムの出荷実績で、その店舗にその品番を出荷したかを確かめる
  7. 問い合わせの一覧がたまったところで、店舗へ電話かメールで確かめる

(a)入力そのものに時間がかかる。 1枚の伝票に明細が平均4〜5行あり、手書きの数字と品番を見ながら打ち込む作業です。返品は月末と棚替えの時期に集中し、その週は入力が追いつきません。

(b)出荷していない品番の返品が、入力の後で分かる。 6番目の出荷実績の確認は、気になった行だけです。店舗が品番を書き間違えた行や、別の店舗の商品が混ざった行は、入力された後の在庫の食い違いとして見つかります。 そのときには、どの伝票のどの行だったかをたどるのに時間がかかります。

(c)理由の書き漏れの扱いがばらばら。 理由の印が無い行を、ある担当は「その他」で入力し、ある担当は問い合わせに回します。返品の理由ごとの集計が、商品部の発注の見直しに使われているにもかかわらず、「その他」が実際より多く出ます。

(d)問い合わせが遅れる。 一覧がたまってからまとめて問い合わせるので、店舗の担当者が返品したときのことを覚えていないことがあります。

  1. 【人】 返品の担当が実物を数え、伝票の「センター検品数」の欄に数を書き込んでから、複合機でスキャンする
  2. 【自動】 スキャンのPDFが共有ドライブのフォルダに保存される
  3. 【自動】 Google Apps Script が10分ごとにフォルダを見て、新しいPDFを Google Document AI の Form Parser に送る
  4. 【自動】 上の欄の項目と明細の表、返品理由の四角の印の有無、読み取りの信頼度を受け取る
  5. 【自動】 品番を商品マスタで引き、品番の無い行や引けない行は、Claude が品名からマスタの候補を選ぶ
  6. 【自動】 返品理由を6つの区分にそろえ、「書かれていない」「読めない」を分けて記録する
  7. 【自動】 店舗への直近の出荷実績と、センターで数えた数を、伝票の数量と突き合わせる
  8. 【自動】 返品データの一覧に書き込み、印の付いた行だけを確認の一覧に出す
  9. 【人】 事務担当が確認の一覧を見て、読めない行は伝票を見て直し、問い合わせる行を決める
  10. 【人】 確かめた返品データを、倉庫管理システムの返品の取り込みで登録する

9番目が、この設計の分かれ目です。 人が見るのは全行ではありません。印の付いていない行は一覧で流し見て終わりにし、印の付いた行だけに時間を使います。 全行を見直す設計にすると、入力が確認に置き換わるだけで、時間はほとんど減りません。

10番目で、倉庫管理システムへの登録を人の手に残しているのも意図してのことです。 返品の登録は在庫を動かします。読み取りの誤りがそのまま在庫に入ると、次の出荷の引き当てまで狂います。

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

構成図
返品伝票(手書き・複写式)
   │  センター検品数を書き込んでから複合機でスキャン
   ▼
共有ドライブの受付フォルダ(PDF)
   ▼【トリガー】時間主導型のトリガー(10分ごと)
Google Apps Script
   ├──▶ Google Document AI(Form Parser)
   │       上の欄の項目(キーと値)/明細の表/返品理由の四角(filled・unfilled)/信頼度
   ├──▶ 商品マスタ(品番・JAN・品名)
   ├──▶ Claude API ── 品番の無い行の候補選び、その他の理由の区分
   └──▶ 出荷実績(倉庫管理システムの日次のCSV)
   ▼
返品データの一覧(スプレッドシート)── 行ごとの印
   │   理由なし/理由が読めない/出荷実績を超える/検品数と違う/品番が引けない
   ▼
【事務担当が印の付いた行だけを確かめる】
   ▼
倉庫管理システムの返品の取り込み(CSV)
役割想定する製品代替候補
OCRGoogle Document AI(Form Parser)Azure AI Document Intelligence
生成AIClaude API(品番の候補選びと、その他の理由の区分)Gemini API、OpenAI API
連携Google Apps Script(フォルダの確認、OCRの呼び出し、マスタと出荷実績の照合、一覧への書き込み)Python
集計Google Apps Script(店舗ごとの問い合わせの一覧と、理由ごとの件数)Python
保管Google ドライブ(共有ドライブ)、Google スプレッドシート社内のファイルサーバー
在庫の記録既存の倉庫管理システム―

倉庫管理システムへは、直接書き込みません。 この構成が作るのは、取り込みの形にそろえた返品データと、確認の一覧までです。登録は、事務担当が確かめた後に、倉庫管理システムの既存の取り込みの機能で行います。

読み取りには、Google Document AI の Form Parser を使います。 Form Parser は、キーと値のペア、表、選択の印(四角の印など)、汎用の項目、文字を取り出すもので、学習は不要で、追加の学習もできません。チェックボックスは、近くの文字をキーにしたキーと値のペアとして返り、印が付いているかどうかが valueType に filled_checkbox/unfilled_checkbox として入ります。 返品理由の6つの四角は、この仕組みでそのまま読めます。

プロセッサの一覧では、Form Parser の言語の表で日本語(ja)の手書きに対応していることが示されています。ただし、Form Parser を置ける地域は us・eu の複数地域と、ムンバイ・シンガポール・シドニー・ロンドン・フランクフルト・モントリオールの単一地域で、日本の地域はありません。 伝票を日本の外で処理することになるので、第13章で扱います。

表の読み取りは、行や列をまたぐセルの無い、ふつうの表だけが対象です。返品伝票の明細の表は、1行1品の単純な表なので向いています。本部の様式に「その他」の欄が2行にまたがっているような作りがあれば、様式の側を直します。

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

Step1

処理の起点を決める

Google Apps Script の時間主導型のトリガーで、10分ごとに受付フォルダを確かめます。 インストール型のトリガーには、毎分から月1回までの間で動かせる時間主導型のトリガーと、開いたとき・編集したとき・フォームの送信などの出来事で動くトリガーがあります。Google ドライブにファイルが追加されたことで動くトリガーは一覧に無いので、時間で見回る形にします。

実行の時刻には少し揺らぎがあります。 公式のページでも、時刻が少しばらつくことがあると書かれています。返品の受付は即時性を求めない業務なので、10分の間隔で十分です。

インストール型のトリガーは、作った人のアカウントで動きます。 個人のアカウントで作ると、その人が異動や退職でいなくなったときに止まります。 センターの業務用のアカウントで作り、共有ドライブの権限もそのアカウントに付けます。処理が終わったPDFは処理済みのフォルダへ移します。 移すのは成功したときだけにし、受付フォルダに残っている数がそのまま未処理の数になるようにします。

Step2

入力データを集める

データ中身取得元
返品伝票のPDF上の欄(店舗コード、店舗名、返品日、担当者)、明細の表(品番、品名、数量、返品理由の印、その他の欄、センター検品数)受付フォルダ
読み取り結果キーと値のペア、表のセル、チェックボックスの印、信頼度、全文Google Document AI
商品マスタ自社品番、JANコード、品名、規格、取扱の有無倉庫管理システムの日次のCSV
出荷実績店舗ごと・品番ごとの直近90日の出荷の数量倉庫管理システムの日次のCSV
店舗の一覧店舗コード、店舗名、問い合わせの連絡先センターの共有の表計算

質を決めるのは、商品マスタと出荷実績の鮮度です。 前の日の出荷が反映されていないと、昨日届いた商品をすぐ返品した行が「出荷実績を超える」になります。 倉庫管理システムからの書き出しは毎朝の始業前に終わらせ、その時刻をファイル名に入れます。

センター検品数の欄は、様式に足します。 これまでは伝票の数量の横に手で書き込んでいましたが、決まった欄が無いと、OCRはどの数字が検品数かを区別できません。 本部と相談し、明細の右端に「センター検品数」の列を設けます。

Step3

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

PDFは、Apps Script から Document AI の処理のAPIへ送ります。 応答はJSONで、ページごとに formFields(キーと値のペア)と tables(表)が入っています。

取るものどこから何に使うか
店舗コード・返品日・担当者formFields の fieldName と fieldValue伝票の上の欄
明細の行tables の headerRows と bodyRows のセル品番・品名・数量・センター検品数
返品理由の印formFields の fieldValue の valueTypefilled_checkbox/unfilled_checkbox
信頼度各要素の layout の confidence読めたかどうかの判断
全文text と textAnchor表から漏れた文字の拾い直し

キーと値のペアのキーは、伝票に印刷されている文字そのものです。 公式のページでも、ほかの抽出のように名前を設定するものではなく、書類の上のキーの文字がそのまま返るとされています。「店舗コード」「店コード」のように様式の版で印刷の文字が違うときは、Apps Script の側で同じ項目にまとめます。

返品理由の印は、明細の行ごとに結び付け直します。 チェックボックスは、近くの文字をキーにしたペアとして返るので、どの行の印かは、印の位置(boundingPoly)と表の行の位置を比べて決めます。 行の高さの範囲に入る印を、その行の理由とします。

Step4

AIへ渡す前に整形する

  1. 形式の確認 … PDFであることを確かめます。複合機の設定でJPEGの圧縮を使ったTIFFが混ざることがありますが、TIFFの中のJPEGの圧縮の一部には対応していないとされているので、スキャンはPDFにそろえます
  2. 1ファイル1枚にそろえる … 複合機でまとめてスキャンしたものは、ページで分けます
  3. 向きの確認 … 逆さまや横向きのページは、向きを直してから送ります
  4. 重複の確認 … 同じ店舗・同じ返品日・同じ明細の伝票が直近にあれば、二重のスキャンとして印を付けます
  5. 商品マスタと出荷実績の読み込み … その朝の書き出しのファイルの日付を確かめ、前の日より古ければ処理を止めます

5番目を省くと、すべての照合がずれます。 書き出しが止まっていた日に動かすと、数日分の出荷が反映されないまま、大量の行に「出荷実績を超える」が付きます。 古いファイルで照合するより、止めて知らせるほうが確実です。

Step5

AIに処理させる

AIにさせることは2つの段に分かれます。 Document AI に伝票を読ませる段と、Claude に品番の候補を選ばせ、「その他」の理由を区分させる段です。品番の照合、出荷実績との突き合わせ、印の付け方は、Apps Script の決まった規則で行います。

見るもの判定の仕方判断できないときの扱い
店舗コード店舗の一覧に存在するか信頼度が低ければ unreadable
品番商品マスタで引けるか引けなければ Claude が品名から候補を選ぶ。候補が無ければ not_found
数量整数として読めるか信頼度が低ければ unreadable
返品理由6つの四角のうち filled_checkbox がいくつあるか0個で「その他」の欄も空なら missing、印が検出されなければ unreadable、2個以上なら ambiguous
出荷実績との比べ伝票の数量が直近90日の出荷の数量を超えるか超えれば over_shipped
センター検品数との比べ伝票の数量と検品数が同じか違えば count_diff

返品理由の行が、この構成でいちばん大事な区別です。 印が6つとも unfilled_checkbox として検出され、その他の欄にも文字が無ければ、店舗が理由を書いていないということです。一方で、四角そのものが検出されなかったり、信頼度が低かったりするなら、センターで伝票を見れば分かることです。

Form Parser には、空欄の値を確実には取り出せないという制限があります。 公式のページでも、値の入っていないキーと値のペア(白紙の様式など)を確実には解析しないと書かれています。だから、「その他」の欄が空かどうかを、キーと値のペアの値が無いことだけで決めません。その欄の位置の範囲に、全文の文字が1つも無いことをあわせて確かめます。

Claude には、品番の無い行と引けない行の品名だけを渡します。 商品マスタから、品名の文字が近い候補を Apps Script で10件まで絞り、その中から選ばせます。マスタの外の品番を作らせないために、候補の番号から選ぶ形にします。 出力は、Claude API の構造化出力で決まった形のJSONにします。output_config.format に json_schema を指定すると、スキーマに合ったJSONが返ります。

させないこと理由
返品を受け入れるかの判断商品部と店舗の取り決め
印の無い返品理由を推し量って埋める理由の集計が発注の見直しに使われる
品番を候補の外から作る在庫が存在しない品番に動く
数量を出荷実績に合わせて直す見つけたかった食い違いが消える
店舗への問い合わせを送る店舗の作業に関わる。人が決める

2行目がいちばん起きやすい失敗です。 品名に「割れ」と書かれていれば、理由は破損らしく見えます。生成AIに渡すと、もっともらしく「破損・汚損」を選びます。 理由の集計は商品部が発注と仕入先の評価に使う数字です。推し量った理由が混ざると、集計そのものが信用できなくなります。

Step6

指示内容を固定する

あなたは物流センターで、店舗から届いた返品伝票の明細を整える担当です。
渡す情報だけを見て判断してください。推測で埋めないでください。

【あなたがすること】
1. 品番の無い行・商品マスタで引けなかった行について、
   渡す候補(最大10件)の中から、品名と規格が一致するものを1つ選ぶ。
2. 返品理由が「その他」で、その他の欄に文字が書かれている行について、
   次の区分のどれに当たるかを選ぶ。
   破損・汚損/期限間近/誤納品/過剰在庫/不良品/その他

【厳守事項】
- 品番は、渡した候補の candidate_id から選んでください。
  候補に一致するものが無ければ candidate_id を null にし、status を not_found にしてください。
  候補の外の品番を作らないでください。
- 品名が一致していても、規格(容量・色・サイズ)が違う候補を選ばないでください。
  規格が読み取れないときは status を ambiguous にしてください。
- 返品理由は、その他の欄に書かれた文字だけを根拠にしてください。
  品名や数量から理由を推し量らないでください。
- その他の欄が空の行、理由の印が無い行は、あなたに渡しません。
  渡されていない行の理由を書かないでください。
- 区分に当てはまらない理由は「その他」のままにし、書かれた文字を evidence に写してください。
- 数量を変えないでください。
- evidence には、判断の根拠にした文字をそのまま写してください。

【明細の行】{lines}
【品番の候補】{candidates}

「渡されていない行の理由を書かない」を入れているのは、理由の空欄を守るためです。 理由の印が無い行は、そもそも Claude に渡しません。それでも、同じ伝票の他の行を見て「この伝票は破損の返品」と書き足すことがあります。 渡す範囲と、書いてよい範囲を両方で縛ります。

Step7

出力形式を固定する

伝票1枚ごとに、次の形のJSONを作り、明細の行を返品データの一覧に書き込みます。

{
  "slip_id": "RS-2026-1008-0153",
  "file": "RS_20261008_101530.pdf",
  "store": { "code": "", "status": "ok | unreadable | not_found" },
  "return_date": "2026-10-06",
  "lines": [
    {
      "line_no": 1,
      "item_code": "",
      "item_status": "ok | from_candidate | not_found | ambiguous | unreadable",
      "item_name": "",
      "qty": 0,
      "qty_status": "ok | unreadable",
      "center_count": 0,
      "reason": "破損・汚損 | 期限間近 | 誤納品 | 過剰在庫 | 不良品 | その他 | ",
      "reason_status": "ok | missing | unreadable | ambiguous",
      "shipped_90d": 0,
      "flags": ["over_shipped", "count_diff"],
      "confidence": { "item": 0.00, "qty": 0.00 },
      "evidence": ""
    }
  ],
  "verdict": "pass | needs_check | needs_store_inquiry"
}

1つ目の理由は、reason_status で書き漏れと読めないを分けられることです。 missing は店舗への問い合わせ、unreadable はセンターでの見直しに回ります。返品データの理由の欄は、どちらも空のままにし、空の理由を別の欄で持ちます。

2つ目は、verdict を規則で決められることです。 規則は次のとおりです。

verdict条件
pass全行で status が ok か from_candidate、印が無い
needs_checkunreadable か ambiguous が1つでもある、または count_diff がある
needs_store_inquirymissing か not_found か over_shipped が1つでもある

3つ目は、from_candidate を ok と分けて持つことです。 品名から候補で選んだ品番は、伝票に書かれていた品番ではありません。pass にはしますが、一覧で色を変えて見せ、店舗ごとの件数を数えます。 毎月多い店舗には、品番を書いてもらうよう本部から伝えます。

Step8

システムへ連携する

つなぎ先方式内容
受付フォルダApps Script の時間主導型のトリガー新しいPDFを見つけ、処理済みへ移す
Google Document AI処理のAPIの呼び出しキーと値のペア・表・チェックボックス・信頼度
商品マスタ・出荷実績倉庫管理システムの日次のCSVを読む品番の照合と出荷の数量
Claude APIAPI呼び出し品番の候補選びと、その他の理由の区分
返品データの一覧スプレッドシートへの書き込み明細の行と印、伝票ごとの verdict
倉庫管理システム既存の返品の取り込み(CSV)確かめた返品データを人が登録する

倉庫管理システムへの取り込みは、1日2回にまとめます。 確かめ終わった行だけを取り込みの形のCSVに書き出し、事務担当が取り込みます。未確認の行は書き出しの対象にしません。

Step9

人が確認する

事務担当が開くのは、needs_check と needs_store_inquiry の伝票だけです。 pass の伝票は一覧で件数と店舗を流し見ます。

  1. needs_check を先に見る … unreadable の行は伝票の画像を見て直します。多くはセンターだけで解決します
  2. count_diff は返品の担当に確かめる … 実物の数え直しか、輸送中の抜けかを確かめます
  3. needs_store_inquiry の根拠を確かめる … missing の行は、画像で理由の四角が本当に空かを目で見ます
  4. 店舗へ問い合わせる … 店舗ごとの一覧で、1店舗1回にまとめます
  5. 直した内容を記録する … どの行の何を、何から何に直したかを残します

3番目を省かないでください。 missing の判定は、店舗の作業を止める問い合わせに直結します。 印が薄くて検出されなかっただけの行を問い合わせると、次から店舗がこの問い合わせを軽く扱うようになります。

目標は、900枚をならして1枚1分です。 pass の伝票は数秒で流し、印の付いた伝票は画像を見て数分かかります。印の付く伝票が2割を超える月は、様式か店舗の書き方に原因があります。

Step10

例外に対処する

起きること対応
PDFでないファイル・JPEGの圧縮を使ったTIFF処理せず、スキャンのやり直しを返品の担当へ知らせる
1ファイルに複数の伝票ページで分けて再投入。分けられないものは needs_check
店舗コードが店舗の一覧に無いnot_found。店舗名の欄から候補を出し、人が決める
商品マスタと出荷実績の書き出しが古い処理を止め、情報システムへ知らせる
品番の候補が規格違いで決められないambiguous で人へ
理由の四角が2つ以上に印ambiguous で人へ
伝票の数量が出荷実績を超えるover_shipped。品番の書き間違いを先に疑う
Document AI か Claude API が応答しない受付フォルダに残す。処理済みへ移すのは成功時だけ
同じ伝票を二度スキャンした店舗・返品日・明細で照合し、二重に一覧へ書かない

7行目の over_shipped は、店舗の不正を疑う材料にしません。 多くは品番の1桁違いか、別の店舗から移ってきた商品です。確かめる順番は、品番の書き間違い、店舗間の移動の記録、そのあとで店舗への問い合わせです。

Step11

記録を残す

  • 元の伝票のPDFと、スキャンの日時
  • Document AI が返したJSONの全文
  • 明細の行ごとの判定(status・flags・verdict)と、そのとき使った商品マスタと出荷実績の書き出しの日付
  • Claude に渡した候補と、選んだ候補・根拠
  • 人が直した記録 … どの行の何を、何から何に直したか
  • 店舗への問い合わせの日時と、店舗の回答
  • 店舗ごとの missing・from_candidate・unreadable の件数

3つ目で書き出しの日付を残すのは、照合のやり直しの範囲を決めるためです。 出荷実績の書き出しが遅れていた日が後から分かったとき、その日付で照合した伝票だけを照合し直せます。

04実装レベルの3段階

最小構成:コンソールで伝票を1枚ずつ読ませ、結果を目で確かめる / 読めるかどうかの確認
半自動化:上記+Apps Script で受付フォルダから読み取り、明細と理由の印を一覧に書き出す / 読み取りと一覧化
本格構成:上記+商品マスタと出荷実績の照合、Claude による品番の候補選び、規則による `verdict` / 読み取り、照合、確認の振り分けまで

半自動化で、1枚5分が2分程度になります。 入力は無くなりますが、品番の無い行を探す作業と、出荷実績を確かめる作業が残ります。本格構成で1分になり、この段階が本記事の想定です。 差が大きいのは、全行の出荷実績の照合が、手では一部しかできなかった作業だからです。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、unreadable の多い欄と、品番を書かない店舗が先に分かります。様式と店舗の書き方を直してから照合を足すほうが、問い合わせの空振りが減ります。

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

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

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

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

AI活用について相談する

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

向いている
  1. ドラッグストア・ホームセンター・アパレルなどのチェーンの物流センターや、その運営を受託している物流会社で、店舗からの返品が手書きの複写式の伝票で届いている場合。月に数百枚から千枚ほどの返品伝票を、センターの事務担当が倉庫管理システムへ手で入力している場合。返品の理由が書かれていない伝票や、店舗に出荷していない品番の返品が混ざり、店舗への問い合わせが後手に回っている場合。店舗へ商品を卸している卸売業の返品の受付。
向いていない
  1. 店舗の端末やハンディから返品をデータで登録できており、紙の伝票が無い場合。返品が月に数十枚で、目視の入力で足りる場合。伝票の様式が店舗ごとにばらばらで、決まった欄が無い場合(まず様式をそろえる)。なお、返品を受け入れるか、どの店舗の負担にするか、仕入先へ返すかの判断は、この構成では代替できません。

07最小構成で試す方法

  1. 先月届いた返品伝票から50枚を選ぶ(理由の書き漏れや、品番の無い行があると分かっているものを入れる)
  2. その50枚を、事務担当が倉庫管理システムに入力したときの記録と並べられるようにする
  3. Google Cloud のコンソールで Form Parser のプロセッサを作り、50枚を1枚ずつ試しに読ませる
  4. 明細の表と理由の四角の印が、行ごとに正しく取れているかを、入力の記録と突き合わせる
  5. 理由の四角が空の行で、unfilled_checkbox が6つとも検出されているかを数える

ここまではプログラムを書かずに、コンソールの画面でできます。 「手書きの明細と四角の印が読めるか」を先に確かめます。

出てきた内容判断
明細も印もほぼ読めたApps Script の連携に進む
明細は読めるが、印が検出されない四角が多い四角の大きさと線の太さを様式で直す
明細の表がくずれて読まれる様式の表にまたがるセルが無いかを見直す

2行目と3行目は、様式で直る問題です。 Form Parser は追加の学習ができないので、読み取りを良くするには、読みやすい様式にするのが近道です。 本部と相談して、次の版の伝票で直します。

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

問題対策
理由の空欄が missing と unreadable で混ざる四角が検出されたかと信頼度で分ける。混ぜると店舗に空振りの問い合わせをする
「その他」の欄が空かどうかを取り違える空の値は確実に取れない。欄の位置に文字が無いことも確かめる
品名から理由を推し量って埋める理由の無い行を生成AIに渡さない。指示でも禁じる
規格違いの品番を選ぶ候補から選ばせ、規格が違えば ambiguous
出荷実績の書き出しが古く、over_shipped が大量に付く書き出しの日付を確かめ、古ければ止める
チェックボックスがどの行のものか分からない印の位置と表の行の位置で結び付ける
表がくずれて読まれる様式から行や列をまたぐセルをなくす
トリガーを作った人がいなくなって止まる業務用のアカウントで作る
まとめてスキャンされた伝票ページで分ける。1枚ずつのスキャンを返品の担当に頼む
店舗コードを読み違える店舗の一覧で照合し、無ければ店舗名から候補を出す

上の3行が、この構成の失敗のほとんどです。 どれも「理由の欄が空に見える」という同じ見た目から始まっています。空の理由を店舗の書き漏れと読めないに分け、生成AIに埋めさせないことが守れているかで、理由の集計が使えるかが決まります。

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

この構成で扱うデータ: 店舗の返品の品番と数量、返品理由、店舗の担当者の名前、出荷実績です。個人の顧客の情報は含みませんが、店舗の担当者の名前と、店舗ごとの在庫の動きが分かるデータです。

  1. 処理する地域を決める … Form Parser を置ける地域に日本はありません。us・eu の複数地域か、シンガポールなどの単一地域から選び、伝票が日本の外で処理されることを、委託元の小売チェーンと取り決めておきます
  2. 生成AIに渡す範囲を絞る … Claude に渡すのは、品番の無い行の品名と規格、その他の欄の文字、マスタの候補だけです。店舗の担当者の名前と、伝票の画像は渡しません
  3. 倉庫管理システムへの登録は人が行う … 読み取りの誤りが在庫に直接入らないよう、取り込みは確かめた後に人が行います
  4. 店舗への問い合わせを自動で送らない … 出すのは店舗ごとの一覧までです。店舗の作業を止める連絡なので、送るかどうかは事務担当が決めます
  5. 店舗ごとの件数を、店舗の評価に流用しない … 理由の書き漏れの件数は、様式と書き方を直すための数字です。評価に使うなら、本部と基準を決めてからにします
  6. 共有ドライブの権限を絞る … 受付フォルダと一覧は、返品の受付の担当と、本部の店舗運営の担当だけが見られるようにします

誤りが起きた場合のリスクは、読み取りの誤りが在庫に入ることと、書いた店舗に空振りの問い合わせをすることの2つです。 前者は登録を人に残すことで、後者は missing と unreadable を分けることで防ぎます。

10まず何から始めるか

1週目:50枚で読めるかを試す

先月の返品伝票から50枚を選び、Google Cloud のコンソールで Form Parser に読ませます。明細の表と理由の四角の印が、行ごとに取れているかを入力の記録と突き合わせます。

2週目:様式の直しを本部に相談する

読み取りで分かった様式の問題(またがるセル、小さすぎる四角)と、センター検品数の列を足すことを、本部の店舗運営の担当に相談します。新しい伝票が行き渡るまでの数か月は、今の様式のまま進めます。

3週目:倉庫管理システムの書き出しを用意する

商品マスタと直近90日の出荷実績を、毎朝の始業前にCSVで共有ドライブへ書き出す設定を、情報システムの担当と作ります。書き出しのファイル名に日付と時刻を入れます。

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

Apps Script で受付フォルダを見回り、Form Parser の結果を返品データの一覧に書き出すところまで作ります。この時点では照合を入れず、読み取りの結果だけを1か月見ます。

2か月目: 商品マスタと出荷実績の照合、Claude による品番の候補選び、verdict の規則を足します。needs_store_inquiry の件数を毎週数えます。3か月目以降: 1枚5分が何分になったかを実測し、店舗ごとの書き漏れの件数を本部に渡します。新しい様式の伝票が行き渡り、unreadable の件数が落ち着いた時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-10-08/最終更新:2026-10-08
確認した内容情報源確認日
Form Parser の言語の表で日本語(ja)の手書きに対応していることGoogle Cloud: Processor list2026-10-08
Form Parser がキーと値のペア・表・選択の印・汎用の項目・文字を取り出し、追加の学習ができないこと。表は行や列をまたぐセルの無いものが対象であること。チェックボックスが近くの文字をキーにしたペアとして返ること。空欄の値のペアを確実には解析しないこと。TIFFの中のJPEGの圧縮の一部に対応しないことGoogle Cloud: Form Parser2026-10-08
応答の formFields(fieldName・fieldValue)と tables(headerRows・bodyRows)の形。キーが書類の上の文字そのものであること。チェックボックスの valueType が filled_checkbox/unfilled_checkbox であることGoogle Cloud: Handle processing response2026-10-08
Form Parser を置ける地域が us・eu と、asia-south1・asia-southeast1・australia-southeast1・europe-west2・europe-west3・northamerica-northeast1 であることGoogle Cloud: Regional and multi-regional support2026-10-08
output_config.format に json_schema を指定すると、スキーマに合ったJSONが返ることClaude: Structured outputs2026-10-08
インストール型のトリガーに、毎分から月1回まで動かせる時間主導型と、出来事で動く型があること。実行の時刻が少しばらつくことがあること。作った人のアカウントで動くことGoogle: Installable Triggers2026-10-08

返品を受け入れるか、どの店舗の負担にするかは、委託元の小売チェーンと物流センターで決めてください。 本記事は公開されている仕様で確認できた範囲だけを扱っています。

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

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

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

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