海外の物流倉庫(3PL)から毎月届く英文の在庫報告書を読み取り、SKUごとの在庫数・入出庫数を自社の在庫台帳と照らして、差異と滞留在庫を拾う
海外の物流倉庫(3PL)から毎月届く英文の在庫報告書のPDFを読み取り、SKUごとの入庫・出庫・月末在庫を自社の在庫台帳と照らします。数量の差異を種類別に分け、保管日数の長い滞留在庫とあわせて一覧にします。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- EC/商社/小売/製造
- 対象部門
- 物流
- 対象業務
- データ入力・転記/比較検討
- 主な課題
- データ分析に時間がかかる/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/工数削減/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 3PLからメールで届いた在庫報告書のPDFを共有フォルダに保存する
- PDFを開き、SKUごとの月初・入庫・出庫・調整・月末の数を表計算のファイルへ写す
- 3PLの品目コードが自社のSKUと違う倉庫は、対応表を見て書き換える
- 台帳から同じ倉庫の月末在庫を取り出し、SKUごとに差を出す
- 差のあるSKUについて、入庫予定と出荷実績を1件ずつ見て、どこで差が生じたかを調べる
- 原因の分からない差を、3PLの担当へ英文のメールで問い合わせる
- 保管日数の長いSKUを目で拾い、販売の担当に知らせる
- 人3PLから届いた在庫報告書のPDFを、倉庫ごとの受け取りの場所(Amazon S3)に保存する
- 自動保存をきっかけに、AWS Textract が表の読み取りを非同期で始める
- 自動読み取りが終わったら、プログラムが表をセルから組み立て、列の見出しを取り出す
- 自動見出しがその倉庫の登録済みの対応と違えば、Claude API が自社の項目への対応づけの案を出し、担当者の承認を待つ
- 自動プログラムが数と日付を倉庫ごとの書き方の設定で読み替え、品目コードを自社のSKUに対応づける
- 自動プログラムが、報告書の合計の行とSKUの行の合計が一致するかを確かめる
- 自動プログラムが台帳と照らし、差異を入庫差・出庫差・調整・月初の持ち越しに分け、滞留在庫を拾う
- 自動Claude API が、備考欄の英文を区分し、差異のあるSKUについて3PLへの問い合わせの英文の下書きを作る
- 人担当者が差異の一覧と、読み取りの信頼度が低いセルを確かめ、問い合わせを直して送る
- 人販売の担当と、滞留在庫の扱いを決める
各工程の詳しい説明を読む
- 3PLからメールで届いた在庫報告書のPDFを共有フォルダに保存する
- PDFを開き、SKUごとの月初・入庫・出庫・調整・月末の数を表計算のファイルへ写す
- 3PLの品目コードが自社のSKUと違う倉庫は、対応表を見て書き換える
- 台帳から同じ倉庫の月末在庫を取り出し、SKUごとに差を出す
- 差のあるSKUについて、入庫予定と出荷実績を1件ずつ見て、どこで差が生じたかを調べる
- 原因の分からない差を、3PLの担当へ英文のメールで問い合わせる
- 保管日数の長いSKUを目で拾い、販売の担当に知らせる
(a)写すだけで半日かかる。 20ページの報告書を写すと、写し間違いが差異として現れます。 調べた結果が自分の写し間違いだった、ということが毎月起きます。
(b)数の書き方が倉庫ごとに違う。 ドイツとオランダの倉庫の報告書は、桁区切りに点を使い、「1.250」が1,250個を表します。 日付も、日・月・年の順の倉庫と、月・日・年の順の倉庫があります。写す人がその都度読み替えています。
(c)差異の種類を分けるのに時間がかかる。 月末在庫の差だけを見ても原因は分かりません。入庫の列と出庫の列をそれぞれ台帳と照らして初めて、どこで差が生じたかが分かります。 2番目で入庫と出庫の列を写していない倉庫は、そこから写し直しです。
(d)滞留に気づくのが遅い。 保管日数の列を見る余裕が無く、長期保管の料金の請求が来てから、動いていないSKUに気づきます。
- 【人】 3PLから届いた在庫報告書のPDFを、倉庫ごとの受け取りの場所(Amazon S3)に保存する
- 【自動】 保存をきっかけに、AWS Textract が表の読み取りを非同期で始める
- 【自動】 読み取りが終わったら、プログラムが表をセルから組み立て、列の見出しを取り出す
- 【自動】 見出しがその倉庫の登録済みの対応と違えば、Claude API が自社の項目への対応づけの案を出し、担当者の承認を待つ
- 【自動】 プログラムが数と日付を倉庫ごとの書き方の設定で読み替え、品目コードを自社のSKUに対応づける
- 【自動】 プログラムが、報告書の合計の行とSKUの行の合計が一致するかを確かめる
- 【自動】 プログラムが台帳と照らし、差異を入庫差・出庫差・調整・月初の持ち越しに分け、滞留在庫を拾う
- 【自動】 Claude API が、備考欄の英文を区分し、差異のあるSKUについて3PLへの問い合わせの英文の下書きを作る
- 【人】 担当者が差異の一覧と、読み取りの信頼度が低いセルを確かめ、問い合わせを直して送る
- 【人】 販売の担当と、滞留在庫の扱いを決める
6番目が、この設計の分かれ目です。 報告書には倉庫ごとの合計の行があります。SKUの行を足した数が合計と合わなければ、読み取りか表の組み立てのどこかに誤りがあります。 その報告書は照合に進めず、人に回します。読み取りの誤りを差異として3PLに問い合わせる失敗を、ここで止めます。
9番目で人が見るのは、差異のあるSKUと信頼度の低いセルだけです。 差の無いSKUは件数を見るだけにします。
02今回想定するシステム構成
3PLの在庫報告書(英文のPDF。6社・18か所) │ 担当者が倉庫ごとの場所へ保存 ▼【トリガー】Amazon S3 への保存 AWS Lambda ── StartDocumentAnalysis(FeatureTypes:TABLES、QUERIES) ▼ AWS Textract(非同期の文書分析) │ 完了の通知(Amazon SNS) ▼ AWS Lambda ── GetDocumentAnalysis(NextToken でページを送る) ├──▶ Python:CELL のブロックから表を組み立て、見出しと合計の行を取り出す ├──▶ Claude API:見出しが変わった倉庫だけ、自社の項目への対応づけの案(承認待ち) ├──▶ Python:数と日付の読み替え、品目コードの対応づけ、合計の確かめ ├──▶ Python:在庫台帳との照合(入庫差/出庫差/調整/月初の持ち越し)と滞留在庫 └──▶ Claude API:備考の区分と、3PLへの問い合わせの英文の下書き ▼ 差異の一覧と滞留在庫の一覧(担当者が確認) ▼ 3PLへの問い合わせ(担当者が送る)/販売の担当へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartDocumentAnalysis/GetDocumentAnalysis。TABLES と QUERIES) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(列の見出しの対応づけの案、備考の区分、問い合わせの英文の下書き) | OpenAI API、Gemini API |
| 差異計算 | Python(表の組み立て、数の読み替え、在庫台帳との照合) | 基幹システムの照合の機能 |
| 連携 | AWS Lambda(保存と完了の通知を起点に処理を動かす) | AWS Step Functions |
| 保管 | Amazon S3(報告書の原本、読み取り結果、照合の結果、確認の記録) | 社内のファイルサーバー |
土台は、AWS Textract の非同期の文書分析です。 報告書は複数ページのPDFなので、同期の処理(PDFは1ページまで)ではなく、非同期の StartDocumentAnalysis を使います。 非同期ではPDFが500MBと3,000ページまでとされ、20ページの報告書には十分です。
Textract を選べるのは、報告書が英文だからです。 公式の対応言語は英語・フランス語・ドイツ語・イタリア語・ポルトガル語・スペイン語で、手書きは英語だけとされています。ドイツの倉庫の報告書も英文で出してもらいます。日本語や中国語の報告書が届く倉庫には、この構成は使えません。 その場合は Azure AI Document Intelligence か Google Document AI に替えます。
CSVが取れる2社は、読み取りに通しません。 ポータルのCSVを同じ照合の入口に入れます。読み取りは、PDFしか無い倉庫のためのものです。
03どうやって実装するのか
処理の起点を決める
倉庫ごとの受け取りの場所(S3 のフォルダ)にPDFが保存されたことを起点にします。 フォルダは 3pl-report/<3PLの記号>/<倉庫の記号>/<対象月>/ の形にし、どの倉庫のどの月の報告かを、保存した場所で決めます。 報告書の中の倉庫名を読み取って決めると、同じ3PLの別の倉庫と取り違えます。
読み取りを始めるとき、ClientRequestToken に「倉庫の記号+対象月+ファイルの版」を入れます。 公式のページでは、同じトークンで StartDocumentAnalysis を呼ぶと同じ JobId が返り、同じジョブを誤って二度始めるのを防げるとされています。担当者が同じPDFを二度保存しても、読み取りは一度で済みます。
完了は Amazon SNS の通知で受けます。 通知の状態が SUCCEEDED であることを確かめてから GetDocumentAnalysis を呼ぶ、と公式のページにあります。JobTag に倉庫の記号を入れておくと、通知だけでどの倉庫の報告かが分かります。 JobId は7日間だけ有効なので、結果は受け取ったその場で S3 に保存します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 在庫報告書 | SKUごとの月初・入庫・出庫・調整・月末、保管日数、備考。報告の期間と倉庫名 | 3PLからのPDF |
| 読み取り結果 | 表・セル・列の見出し・合計の行、各セルの信頼度 | AWS Textract |
| 倉庫ごとの設定 | 列の見出しと自社の項目の対応、数の桁区切りと小数点、日付の順 | 自社で用意する設定表 |
| 品目コードの対応表 | 3PLの品目コードと自社のSKU | 自社で用意する対応表 |
| 在庫台帳 | 倉庫ごとの月初在庫、入庫予定(ASN)と入庫の確認、出荷実績 | 基幹システム |
| 直近の出荷実績 | SKUごとの過去90日の出荷数 | 販売管理 |
質を決めるのは、3行目の倉庫ごとの設定です。 「Qty On Hand」「Closing Stock」「End Bal」は同じ月末在庫で、「Adj」「Stock Adjustment」「Inv Correction」は同じ調整です。設定表に倉庫ごとの対応を持ち、毎月の照合はその設定で読みます。 AIが毎月その場で対応づけを考えるのではありません。
数の書き方も、倉庫ごとに設定します。 桁区切りがコンマか点か、小数点があるかを、倉庫ごとに1行で決めます。 報告書を見て推し量らせると、「1.250」を1.25と読む誤りが出ます。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 表とセル | GetDocumentAnalysis の TABLE と CELL のブロック | SKUの行と各列の数 |
| 列の見出し | EntityTypes が COLUMN_HEADER のセル | 倉庫ごとの設定の見出しと照らす |
| 合計の行 | EntityTypes が TABLE_SUMMARY のセル、または TABLE_FOOTER | SKUの行の合計と照らす |
| 報告の期間と倉庫名 | QUERIES(「What is the report period?」など) | 保存した場所の対象月と照らす |
| セルの信頼度 | CELL と WORD の Confidence | 低いセルを人に回す |
表は、CELL のブロックの RowIndex と ColumnIndex で組み立てます。 公式のページでは、表は TABLE のブロックとして返り、各セルは CELL のブロックで、表の中の位置の情報を持つとされています。結合されたセルは MERGED_CELL として別に示されます。見出しが2段になっている報告書は、結合されたセルを先に展開してから見出しを決めます。
セルには、見出し・合計・表題などの種類が付きます。 公式のページでは、セルの EntityTypes に TABLE_TITLE、TABLE_FOOTER、TABLE_SECTION_TITLE、COLUMN_HEADER、TABLE_SUMMARY があるとされています。見出しの判定と合計の行の判定に、この種類を使います。
結果は MaxResults の1,000ブロックずつ返ります。 NextToken が返る限り呼び続け、全ページ分のブロックをそろえてから表を組み立てます。 途中で組み立てると、ページの境目でSKUの行が落ちます。
報告の期間は、QUERIES で取ります。 公式のページでは、問い合わせ(クエリ)は英語の文書でだけ使え、非同期の処理では1ページあたり30件までとされています。表の外にある報告日や期間を取るのに使います。
AIへ渡す前に整形する
- 形式の確認 … JPEG、PNG、PDF、TIFF のどれかであることを確かめます。XFA の形式のPDFは扱えないとされています
- パスワードの確認 … パスワードで保護されたPDFは扱えません。 3PLに保護を外して送ってもらいます
- 大きさの確認 … 非同期ではPDFが500MB・3,000ページまで。超えることはまず無いので、超えたら読み取らずに人へ回します
- スキャンの確認 … 紙を読み込んだものは、文字の高さが15ピクセル(150DPIで8ポイント相当)以上であることを確かめます
- ページをまたぐ表の連結 … 各ページの表の見出しが同じなら1つの表として続け、ページごとに繰り返される見出しの行は落とします
- 数と日付の読み替え … 倉庫ごとの設定で、桁区切りと小数点、日付の順を読み替えます
- 品目コードの対応づけ … 対応表で自社のSKUにそろえます。対応の無いコードは「対応なし」として残します
5番目を軽く見ないでください。 20ページの報告書は20個の表として返ります。見出しの行をそのまま残すと、「SKU」という名前の品目が19件並びます。 表の連結は、プログラムで決まった手順にします。
7番目の「対応なし」は、3PLが自社の知らない品目コードを付けた場合です。 多くは、セット品をばらして入庫したか、ラベルを貼り替えたものです。推し量って近いSKUに寄せないでください。
AIに処理させる
させるのは、言葉を扱う3つの仕事だけです。 数の読み取りは Textract、数の計算と照合はプログラムが行います。
| させること | 中身 | できないときの扱い |
|---|---|---|
| 列の見出しの対応づけの案 | 見出しが倉庫の設定と違ったときだけ、自社の項目(月初・入庫・出庫・調整・月末・保管日数・備考)への対応の案を出す | 対応が決められない見出しは「対応なし」 |
| 備考の区分 | 備考欄の英文を、品質保留・破損・返品の入庫・棚卸の訂正・その他に分ける | 区分に当たらなければ「その他」と原文 |
| 問い合わせの下書き | 差異のあるSKUごとに、差の種類・数・根拠の行を並べた英文のメール | 差の種類が「原因不明」なら事実だけを書く |
| させないこと | 理由 |
|---|---|
| 数の読み替えと計算 | 桁区切りを推し量ると、1,250が1.25になる |
| 差異の原因の判断 | 3PLの誤りか自社の誤りかは、記録を見て人が決める |
| 品目コードを近いSKUに寄せる | セット品のばらしや貼り替えが、別のSKUの差異になる |
| 見出しの対応を確定させる | 承認の前に照合に使うと、列を取り違えたまま差異が出る |
| 滞留在庫の処分の判断 | 処分か値下げかは販売と経理が決める |
1行目がいちばん大事です。 数をAIの出力の文字として受け取ると、元の報告書の数と一致しているかを、どこかでもう一度確かめる必要が出ます。 セルの数をプログラムが直接読めば、その確かめが要りません。
見出しの対応づけを承認待ちにするのは、3PLが報告書の書式を予告なく変えるからです。 「Shipped」の列が「Shipped (Net of Returns)」に変われば、返品を差し引いた数になります。AIは対応の案を出し、担当者が意味を確かめてから設定に足します。
指示内容を固定する
見出しの対応づけの案(見出しが変わったときだけ呼ぶ)の指示です。
あなたは物流部の担当者を手伝い、海外の物流倉庫の在庫報告書の列の見出しを、
自社の在庫台帳の項目に対応づける案を作る立場です。
渡された見出しの一覧と、その倉庫の前回までの対応だけを見てください。
【自社の項目】
opening(月初在庫)/received(入庫)/shipped(出庫)/adjusted(調整)/
closing(月末在庫)/days_in_storage(保管日数)/remarks(備考)/none(対応なし)
【厳守事項】
- 見出しの言葉だけで判断してください。表の中の数を見て推し量らないでください。
- 見出しに「Net」「Incl.」「Excl.」「Returns」などの条件が付いていれば、
対応の案に加えて、条件をそのまま note に写してください。
- 2つの項目に当たりうる見出しは none とし、note に理由を書いてください。
- 前回までの対応と違う案を出す場合は、changed を true にしてください。
備考の区分と問い合わせの下書きの指示です。
あなたは物流部の担当者を手伝い、海外の物流倉庫(3PL)への在庫の差異の問い合わせを
英文で下書きする立場です。渡された差異の一覧と、報告書の備考欄の原文だけを見てください。
【備考の区分】
qc_hold(品質保留)/damaged(破損)/return_receipt(返品の入庫)/
count_correction(棚卸の訂正)/other(その他)
備考の原文は、区分と一緒にそのまま残してください。
【問い合わせの書き方】
- SKUごとに、差の種類、報告書の数、自社の記録の数、根拠(ASN番号・出荷番号・報告書のページ)を並べてください。
- 数は渡された値をそのまま書いてください。足したり引いたりしないでください。
- どちらの誤りかを書かないでください。確認をお願いする形にしてください。
- 差の種類が unknown のものは、事実だけを書き、原因の推測を書かないでください。
「表の中の数を見て推し量らない」と書くのは、 見出しが曖昧なとき、AIは数の大きさから「これは出庫だろう」と当てにいくからです。当たっていても、根拠が見出しに無い対応は、次に書式が変わったときに崩れます。
問い合わせに「どちらの誤りかを書かない」と入れるのは、3PLとの関係のためです。 差異の半分は自社の記録の遅れから出ます。最初の1通で3PLの誤りと書けば、自社の誤りだったときに取り消しにくくなります。
出力形式を固定する
照合の結果は、プログラムがJSONで出します。 生成AIの出力も、Claude API の構造化出力で形を決めて受けます。公式のページでは、output_config.format に JSON スキーマを渡すと、スキーマに合う JSON が返るとされ、正式提供の機能です。
{
"warehouse": "US-EAST-01",
"period": "2026-09",
"summary_check": "matched | mismatch",
"lines": [
{ "sku": "CS-30117", "tpl_code": "CS30117-EA",
"opening": 420, "received": 600, "shipped": 512, "adjusted": -8, "closing": 500,
"ledger_closing": 520,
"variance": { "type": "received | shipped | adjusted | carried_over | unknown",
"qty": -20, "evidence": "ASN-0912-03 shipped 620, received 600" },
"remarks_raw": "8 units damaged on receipt", "remarks_class": "damaged",
"min_cell_confidence": 92.4, "days_in_storage": 35 }
],
"slow_moving": [ { "sku": "", "days_in_storage": 0, "shipped_90d": 0 } ],
"needs_human": [ { "sku": "", "reason": "low_confidence | no_mapping | summary_mismatch" } ]
}
1つ目の理由は、差異の種類を1列で持てることです。 variance.type が received なら入庫の担当、shipped なら出荷の担当へ、問い合わせる相手が列で決まります。 例のSKUでは、ASNで送った620個に対して3PLの入庫が600個で、差の20個は入庫で生じています。
2つ目は、summary_check を照合の手前に置けることです。 mismatch の報告書は lines を作らずに人に回します。
3つ目は、remarks_raw を残せることです。 区分は担当者が読む手がかりで、原文が残っていれば区分の誤りに気づけます。 例の備考の「8 units damaged on receipt」は、調整の8個と結び付きます。
variance.type | 決め方(プログラム) |
|---|---|
| carried_over | 月初の数が台帳の月初と違う。先月の未解決の差の持ち越し |
| received | 入庫の数が、その月に入庫を確認したASNの数の合計と違う |
| shipped | 出庫の数が、その月の出荷実績の合計と違う |
| adjusted | 調整の数が0でなく、自社に対応する記録が無い |
| unknown | 上のどれにも当たらないが月末が違う |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Amazon S3 | 保存の通知で Lambda を動かす | 倉庫と月をフォルダで決める |
| AWS Textract | StartDocumentAnalysis/GetDocumentAnalysis | 表・セル・見出し・合計・信頼度 |
| Amazon SNS | 完了の通知 | JobTag で倉庫を知る |
| 基幹システム | 在庫台帳とASN・出荷実績を読み出す | 読み取りだけ |
| Claude API | API呼び出し(構造化出力) | 見出しの対応の案、備考の区分、問い合わせの下書き |
| 担当者 | 差異と滞留の一覧を共有フォルダに置き、チャットで知らせる | 確認と問い合わせの送信 |
在庫台帳には書き込みません。 差異の一覧を見て、台帳を直すか、3PLに訂正を求めるかを決めるのは担当者です。この構成から台帳を直すと、3PLの誤りに自社の台帳を合わせることになります。
Claude を Amazon Bedrock から使う場合は、構造化出力の対応を先に確かめます。 公式のページでは、Bedrock では構造化出力が旧来の Bedrock の連携でだけ使え、Claude in Amazon Bedrock では使えないとされています。
人が確認する
人が見るのは、差異のあるSKUと、needs_human の行だけです。 差の無いSKUは倉庫ごとの件数を見て終えます。
summary_mismatchの報告書を先に見る … 合計が合わない報告書は照合に進んでいません。多くは表の連結か、見出しの行の落とし忘れです- 信頼度の低いセルを原本で見る … セルの位置からPDFの該当箇所を開き、数を確かめます
- 差異の根拠を確かめる …
evidenceのASN番号・出荷番号を台帳で開き、自社の記録の遅れでないかを見ます - 問い合わせを直して送る … 下書きの数と根拠を確かめ、送信は担当者が行います
- 滞留在庫を販売の担当と見る … 保管日数と出荷の実績を並べて、扱いを決めます
3番目を省かないでください。 入庫の確認の登録が月をまたいで遅れると、自社の記録のほうが少なく見えます。 3PLへ問い合わせる前に、自社の記録を見ます。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワード付き・XFA のPDF | 読めない。3PLに外して送ってもらう |
| JobStatus が FAILED か PARTIAL_SUCCESS | Warnings のページを見て、そのページだけ人が写す |
| 合計の行が見つからない | summary_check を付けられない。全SKUを人に回す |
| 見出しが設定と違う | 対応づけの案を出し、承認まで照合を止める |
| 品目コードが対応表に無い | 「対応なし」。セット品のばらしか貼り替えを3PLに確かめる |
| 報告の期間が保存した場所の月と違う | 読み取らずに担当者へ戻す |
| 英語以外の報告書が届いた | 読み取りに通さず、英文での提出を3PLに頼む |
| 同じ報告書の訂正版が届いた | 版を上げて保存し、前の版の照合結果は消さずに残す |
上から2行目と3行目が、最初の数か月は多く起きます。 どちらも報告書の書式の問題で、3PLに合計の行を入れてもらうだけで減ります。
記録を残す
- 報告書の原本と、保存した場所(倉庫・対象月・版)
- Textract が返したブロックの全文と、組み立てた表
- 倉庫ごとの設定(見出しの対応・数と日付の書き方)の、その月に使った版
- 照合の結果(
lines、slow_moving、needs_human) - 担当者が直した箇所 … どのセルの数を、どう直したか
- 3PLへの問い合わせと回答、差異の解消の記録
- 倉庫ごとの差異の件数と種類の推移
3つ目で設定の版を残すのは、見出しの対応が後で変わるためです。 対応を直すと過去の照合の意味が変わり、当時の設定が無いと、どの月から差異の読み方が変わったかが分かりません。
最後の行は、3PLとの定例の材料になります。 入庫差が続く倉庫は検品の手順に、出庫差が続く倉庫は出荷の記録に理由があります。
04実装レベルの3段階
半自動化で、1件120分が60分程度になります。 写しの時間は無くなりますが、差異の種類の切り分けが手作業のまま残ります。 本格構成で30分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化で3か月回すと、倉庫ごとの見出しの癖と数の書き方が設定表にそろいます。 そこを固めてから種類分けに進むほうが、誤った差異を3PLへ問い合わせることが減ります。
05工数削減シミュレーション
導入後 18件 × 30分 ÷ 60 = 9 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 越境ECや海外の販売子会社向けに、米国・欧州・豪州・アジアの複数の物流倉庫(3PL)に在庫を預けているEC事業者・メーカー・商社。3PLから月末の在庫報告書がPDFで届き、物流の担当者がSKUごとの数を自社の在庫台帳へ手で写して照らしている場合。数百から千を超えるSKUがあり、差異の原因を探すのに毎月数日かかっている場合。保管日数の長い在庫に気づくのが、長期保管の料金の請求を見てからになっている場合。
- 3PLの倉庫管理システムからCSVやAPIで在庫のデータを取れる場合(読み取りは要らず、データをそのまま照らせば足ります)。預けている倉庫が1か所でSKUが数十件の場合。日本語や中国語の報告書が届く場合(この構成で使う読み取りのサービスは英語など6言語だけに対応します)。なお、差異をどちらの誤りとして扱うか、在庫の評価を減らすか、滞留在庫を処分するかは、物流と経理の責任者が決めます。この構成は差異の候補を挙げるまでです。
07最小構成で試す方法
- 先月の在庫報告書から、書式の違う3PLの3か所を選ぶ(うち1か所は、桁区切りに点を使う欧州の倉庫を入れる)
- AWS のコンソールで Textract の文書分析を開き、表の読み取りを試す
- 表を表計算のファイルとして書き出し、当時担当者が写したファイルと並べる
- 合計の行とSKUの行の合計が合うか、数の読み替えが要るかを確かめる
- 手元のAIサービスに見出しの一覧を貼り、自社の項目への対応の案を出させる
欧州の倉庫は必ず入れてください。 読み取りそのものより、数の書き方の読み替えがどこで要るかが、ここで分かります。
| 出てきた内容 | 判断 |
|---|---|
| 表がセル単位で取れ、合計も合った | 照合のプログラムに進む |
| ページの境目で行が落ちた | 表の連結の手順で直る。構成は有効 |
| 見出しが結合されていて列がずれた | 結合されたセルの展開が要る。手順で直る |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 「1.250」が1.25として扱われる | 桁区切りは倉庫ごとの設定で決める。推し量らない |
| ページの境目で行が落ちる・見出しが品目になる | 全ページのブロックをそろえてから連結し、繰り返しの見出しを落とす |
| 見出しの変更に気づかず列を取り違える | 見出しを毎回設定と照らし、違えば照合を止める |
| 合計を確かめずに照合する | summary_check を照合の手前に置く |
| 対応の無い品目コードを近いSKUに寄せる | 「対応なし」のまま人へ |
| JobId が切れて結果が取れない | 7日間だけ有効。受け取ったその場で保存する |
| 自社の記録の遅れを3PLの誤りとして問い合わせる | 問い合わせの前に自社のASNと出荷の記録を見る |
| Bedrock で構造化出力が使えない | Claude API を直接使うか、対応を先に確かめる |
上の2行が、この構成の失敗のほとんどです。 どちらも、読み取りの誤りが差異に化ける失敗です。数をプログラムで読み、合計で確かめる設計にしておけば、3PLへ誤った問い合わせを送ることを防げます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: SKUごとの在庫数と入出庫数、倉庫の所在地、3PLとの取引の内容、販売の実績です。個人情報は含みませんが、販売の実績と在庫の数は取引上の秘密です。
- 3PLとの契約で、報告書の扱いを確かめる … 報告書を外部のサービスで読み取ることが、3PLとの契約の秘密保持に触れないかを確かめます
- 受け取りの場所の権限を絞る … S3 のフォルダは、海外物流グループと処理のプログラムだけが読めるようにします
- 生成AIに渡す範囲を絞る … 見出しの対応づけには見出しだけ、問い合わせの下書きには差異のあるSKUの行だけを渡します。報告書の全体や販売の実績は渡しません
- 台帳を自動で直さない … 差異の解消は担当者が記録を確かめてから行います
- 問い合わせを自動で送らない … 下書きまでです。3PLとの関係に直接ひびきます
- 評価や処分の判断に使わない … 差異の一覧は在庫の評価を減らす根拠ではありません。評価と処分は経理と物流の責任者が決めます
誤りが起きた場合のリスクは、読み取りの誤りを差異として3PLへ問い合わせることと、本物の差異を見落とすことの2つです。 前者は合計の確かめと数の読み替えの設定で、後者は全SKUを機械で照らすことで防ぎます。
10まず何から始めるか
1週目:倉庫ごとの設定表を作る
18か所の報告書を1枚ずつ見て、列の見出しと自社の項目の対応、桁区切りと日付の順を設定表に書きます。品目コードの対応表も、自社のSKUと違うコードを使う倉庫から作ります。
2週目:3か所で読み取りを試す
書式の違う3か所の報告書をコンソールで読み取り、当時写したファイルと並べます。欧州の倉庫で数の読み替えが正しくできるかを最優先で見ます。
3週目:3PLに2つを頼む
英文での提出と、合計の行を報告書に入れることを、6社の3PLに頼みます。CSVを出せる3PLには、CSVでの提出もあわせて頼みます。
4週目:表の組み立てと照合をつなぐ
保存を起点に読み取り、表を組み立て、合計を確かめ、台帳と照らすところまで作ります。この時点では差異の種類分けをせず、月末在庫の差だけを見ます。
2か月目: 差異の種類分けと滞留在庫の拾い出しを足し、needs_human の件数を毎月数えます。3か月目以降: 問い合わせの下書きを足し、1件120分が何分になったかを実測します。倉庫ごとの差異の件数の推移を3PLとの定例で使い始めた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 対応する形式が JPEG・PNG・PDF・TIFF で XFA の形式のPDFは扱えないこと。同期の処理はPDFが1ページまで、非同期の処理はPDFが500MB・3,000ページまでであること。パスワードで保護されたPDFは扱えないこと。対応言語が英語・フランス語・ドイツ語・イタリア語・ポルトガル語・スペイン語で、手書きは英語だけであること。縦書きに対応しないこと。クエリは英語の文書だけで、非同期で1ページ30件までであること。文字の高さの下限が15ピクセル(150DPIで8ポイント相当)であること | AWS: Set Quotas in Amazon Textract | 2026-10-13 |
| 表が TABLE のブロック、各セルが CELL のブロックとして返り、表の中の位置の情報を持つこと。結合されたセルが MERGED_CELL で示されること。セルの EntityTypes に TABLE_TITLE・TABLE_FOOTER・TABLE_SECTION_TITLE・COLUMN_HEADER・TABLE_SUMMARY があること | AWS: Tables(Amazon Textract) | 2026-10-13 |
| StartDocumentAnalysis の FeatureTypes に TABLES・FORMS・QUERIES・SIGNATURES・LAYOUT があること。文書を S3 に置くこと。完了の状態が SNS に通知されること。ClientRequestToken で同じジョブの二重の開始を防げること。JobTag が通知に含まれること。JobId が7日間だけ有効であること | AWS: StartDocumentAnalysis | 2026-10-13 |
| GetDocumentAnalysis が MaxResults 最大1,000で NextToken によりページを送ること。JobStatus が IN_PROGRESS・SUCCEEDED・FAILED・PARTIAL_SUCCESS であること。Warnings が返ること | AWS: GetDocumentAnalysis | 2026-10-13 |
output_config.format に JSON スキーマを渡すとスキーマに合う JSON が返ること。正式提供の機能であること。Amazon Bedrock では旧来の連携でだけ使え、Claude in Amazon Bedrock では使えないこと | Claude Docs: Structured outputs | 2026-10-13 |
差異をどちらの誤りとして扱うか、在庫の評価を減らすか、滞留在庫をどう扱うかは、物流と経理の責任者が決めてください。 本記事は公開されている製品の仕様で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1313)についてのご相談はこちらから。
