Media > AI活用ユースケース > 物流 > 動かない在庫を毎月洗い出して、処分・返品・値引きの候補に仕分ける

動かない在庫を毎月洗い出して、処分・返品・値引きの候補に仕分ける

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

何か月も動いていない在庫を毎月洗い出し、滞留の理由を区分して、値引き・返品・転送・廃棄・保有継続のどれを検討すべきかの候補を出します。担当者の作業は、探すことから、示された候補を確かめて処理を決めることに変わります。

サマリー
生成AI
ChatGPT/Claude/Gemini
連携・自動化
Google Apps Script/Make/n8n/Power Automate/Python
対象業界
EC/医療/小売/製造/飲食
対象部門
物流/購買
対象業務
分類・仕分け/集計・分析
主な課題
データ分析に時間がかかる/人手が足りない/判断に時間がかかる
AIで行う処理
分類
主な効果
判断支援/工数削減/機会損失防止
導入難易度
★★☆☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
条件付き
現在工数
28h/月
AI導入後
8h/月
想定削減
71%
年間削減
240h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 棚卸の時期に、在庫管理システムから在庫数と最終出庫日を書き出す
  2. 最終出庫日の古い順に並べ、動きが止まっていそうなものに印を付ける
  3. 印を付けた品目について、品目マスタで終売か仕様変更の対象かを調べる
  4. 購買システムで発注の履歴を見て、買いすぎたものかどうかを確かめる
  5. 他拠点の在庫と、受注に引き当てられているかを、別の画面で1件ずつ見る
  6. 保守部品として意図的に持っているものかどうかを、設計や保守の担当者に聞く
  7. 仕入先に返品できるかを、契約書のファイルを探して確かめる
  8. 値引き・返品・転送・廃棄・保有継続のどれにするかを一覧にし、在庫の責任者に諮る
  9. 決まったものを経理に回し、評価損の処理を相談する
導入後(After)
  1. 自動毎月1日、在庫管理システムから在庫の一覧と、直近24か月の出庫の履歴を取り出す
  2. 自動基準表を引き、区分ごとの日数・保管期間・回転率のしきい値に当てて滞留の候補を出す
  3. 自動除外リストに当たるもの(引当あり、保守部品、法定保有、預り在庫)を候補から外す
  4. 自動残った候補に、終売と仕様変更、季節性、発注の履歴、他拠点の在庫を付ける
  5. 自動在庫金額を計算し、大きい順に並べる
  6. 自動AIが滞留の理由を区分し、取るべき手の候補を挙げ、根拠にした材料を書き出す
  7. 自動契約台帳を引き、返品に関する条項があるかどうかの事実だけを候補に添える
  8. 人在庫の責任者が、金額の大きいものから候補を確かめる
  9. 人値引き・返品・転送・廃棄・保有継続のどれにするかを決め、承認する
  10. 人返品の可否は購買が仕入先に確かめる。評価損の会計処理は経理に回す
  11. 自動決めた結果と理由を台帳に残し、翌月の除外リストと基準表に反映する
各工程の詳しい説明を読む
  1. 棚卸の時期に、在庫管理システムから在庫数と最終出庫日を書き出す
  2. 最終出庫日の古い順に並べ、動きが止まっていそうなものに印を付ける
  3. 印を付けた品目について、品目マスタで終売か仕様変更の対象かを調べる
  4. 購買システムで発注の履歴を見て、買いすぎたものかどうかを確かめる
  5. 他拠点の在庫と、受注に引き当てられているかを、別の画面で1件ずつ見る
  6. 保守部品として意図的に持っているものかどうかを、設計や保守の担当者に聞く
  7. 仕入先に返品できるかを、契約書のファイルを探して確かめる
  8. 値引き・返品・転送・廃棄・保有継続のどれにするかを一覧にし、在庫の責任者に諮る
  9. 決まったものを経理に回し、評価損の処理を相談する

(a)見つかったときには手が打てない。 年1回なので、終売から1年以上たった在庫が出てきます。その時点では値引きでも動かず、返品の期限も過ぎています。 早ければ返品や転送ができたものが、廃棄しか残らない状態で見つかります。遅れているのは発見であって、判断ではありません。

(b)「動いていない」の基準が人によって違う。 先へ進む品目を選んでいるのは2番の目視です。半年出ていないものを滞留とみなす担当者と、3か月で滞留とみなす担当者がいます。 区分ごとの基準が文書になっていないため、誰が担当したかで出てくる件数が変わります。

(c)引当や保守部品を誤って候補に入れる。 5番と6番は、触ってはいけないものを外す作業です。受注に引き当てられている在庫、保守用に意図して持っている部品、法定で保有が決まっているもの。 動いていないのが正常です。人の記憶に頼っているため、担当が代わると誤って処分候補に入ります。

(d)金額に関係なく、古い順に見ている。 最終出庫日の古い順に並べると、単価の低い部品が上に並びます。数百円の部品を何十件も調べたところで時間が尽き、数十万円の在庫が手つかずで残ります。 金額の大きいものから出さないと、調べた時間が効いてきません。

  1. 【自動】 毎月1日、在庫管理システムから在庫の一覧と、直近24か月の出庫の履歴を取り出す
  2. 【自動】 基準表を引き、区分ごとの日数・保管期間・回転率のしきい値に当てて滞留の候補を出す
  3. 【自動】 除外リストに当たるもの(引当あり、保守部品、法定保有、預り在庫)を候補から外す
  4. 【自動】 残った候補に、終売と仕様変更、季節性、発注の履歴、他拠点の在庫を付ける
  5. 【自動】 在庫金額を計算し、大きい順に並べる
  6. 【自動】 AIが滞留の理由を区分し、取るべき手の候補を挙げ、根拠にした材料を書き出す
  7. 【自動】 契約台帳を引き、返品に関する条項があるかどうかの事実だけを候補に添える
  8. 【人】 在庫の責任者が、金額の大きいものから候補を確かめる
  9. 【人】 値引き・返品・転送・廃棄・保有継続のどれにするかを決め、承認する
  10. 【人】 返品の可否は購買が仕入先に確かめる。評価損の会計処理は経理に回す
  11. 【自動】 決めた結果と理由を台帳に残し、翌月の除外リストと基準表に反映する

9番目が、この設計の分かれ目です。決めるのは人です。 AIが出すのは6番までの区分と候補で、処分するかどうかはそこに含まれません。 取り消せない決定を自動化しない、という一点で設計しています。

3番目をAIに渡す前に置いているのも、意図してのことです。 引当が入っているものと保守部品を、機械的に外します。 後段で外す設計にすると、除外すべきものが候補一覧に一度は並びます。並べば、承認の画面で見落とす可能性が残ります。除外は、目に触れる前に終わらせます。

7番目は、判断ではなく事実の付加です。 返品の可否は仕入先との契約の条件次第で、AIに判断させるものではありません。 契約台帳に条項があるかという事実だけを添え、実際に返品できるかは10番目で購買が確かめます。

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

構成図
【トリガー】毎月1日の定時実行
   │
   ▼
Python ── 在庫の一覧と出庫の履歴を取り出す
   ├──▶ 基準表を引く(区分ごとの日数・保管期間・回転率)
   ├──▶ 除外リストを当てる(引当あり/保守部品/法定保有/預り在庫)
   ├──▶ 動きの指標を計算し、滞留の候補を確定する
   ▼
   在庫金額の大きい順に並べ、上位から渡す
   ▼
OpenAI API ── 滞留の理由の区分と、取るべき手の候補
   │   ① 理由の区分   ② 手の候補   ③ 根拠にした材料
   ▼
Python ── 契約台帳を引き、返品条項の有無を事実として添える
   ▼
一覧(在庫金額の大きい順/理由の区分ごと)
   ▼
Power Automate ── 在庫の責任者へ承認を依頼
   ├──▶ 承認 ──▶ 処理の台帳へ記録し、担当部署へ回す
   └──▶ 却下 ──▶ 保有継続として記録し、翌月の基準に反映する
役割想定する製品代替候補
処理OpenAI APIClaude API、Gemini API
集計PythonGoogle Apps Script
連携Power AutomateMake、n8n

在庫管理システムと購買システムは、新しく足すものではありません。 どちらも読み取るだけで、書き込みません。会計システムにも一切つなぎません。 評価損の処理は経理の仕事で、この構成が出すのは候補の一覧までです。

AIに渡す前の計算を、すべてPythonに寄せているのが要点です。 日数、保管期間、回転率、在庫金額。どれも四則演算で出るもので、AIに計算させる理由がありません。 AIが受け取るのは、計算し終わった数値と、終売や季節性といった文脈の情報だけです。

理由の区分と手の候補は、決められた選択肢から選ばせます。 ここで効くのが Structured Outputs です。公開ドキュメントでは、供給したJSON Schemaに常に従う応答を生成し、必須キーを省略したり無効な enum 値を生成したりすることがないと説明されています。JSON mode は有効なJSONであることだけを保証し、スキーマへの準拠は保証しません。 区分を enum に固定する設計では、この差がそのまま運用の差になります。

利用の形は、text の format に type: "json_schema" を指定し、strict: true とスキーマを渡すものです。安全上の理由で応答を拒否した場合は、refusal フィールドで拒否を示すとされています。

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

Step1

処理の起点を決める

毎月1日の定時実行です。 前月の締めが終わり、月末時点の在庫と出庫の履歴が確定したところで動かします。

年1回の棚卸のときだけ動かす形にもしません。月次にすることが、いちばん大きな変更点です。 終売から時間がたつほど値引きでも動かなくなり、返品の相談も難しくなります。発見が早いほど、選べる手が多く残ります。

処理の単位は品目コードと保管場所の組み合わせです。品目だけで見ると、動いている拠点の実績に隠れて滞留が見えません。

Step2

入力データを集める

データ中身取得元
在庫の一覧品目コード、保管場所、在庫数、単価、最終入庫日、最終出庫日在庫管理システム
出庫の履歴直近24か月の出庫の日付と数量在庫管理システム
品目マスタ品目の区分、終売、仕様変更と後継品、季節性の区分品目マスタ
発注の履歴直近の発注日、発注数、発注の理由購買システム
他拠点の在庫同じ品目の他拠点での在庫数と直近の出庫在庫管理システム
引当の情報受注に引き当てられている数量在庫管理システム
基準表品目の区分ごとの、日数・保管期間・回転率のしきい値自社で用意する表
除外リスト保守部品、法定保有、預り在庫、試作の保管自社で用意する表
契約台帳仕入先ごとの返品条項の有無と期限自社で用意する表

下の3つが、この構成の質を決めます。 基準表が無ければ全品目を同じ日数で測ることになり、保守部品が全部滞留になります。除外リストが無ければ、触ってはいけないものが並びます。

基準表は、区分ごとに3つの数値を持ちます。

品目の区分最終出庫日からの日数保管期間回転率
消耗品・部品90日6か月年2回未満
完成品(通年)120日6か月年2回未満
完成品(季節もの)300日18か月年1回未満
保守部品730日36か月—

どれをいくつ超えたときに候補とするかも、区分ごとに決めます。 季節ものを日数だけで測ると、毎年同じ時期に全件が候補になります。

Step3

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

在庫管理システムと購買システムからは、APIで取れるならAPIで、取れないなら書き出しファイルで受け取ります。 月1回の処理なので、夜間バッチのCSVを読む形で十分です。

取るもの使い方
在庫数と単価掛けて在庫金額にする。並べ替えの基準
最終出庫日基準日との差を日数にする
最終入庫日保管期間にする。日が浅いものを外すためにも使う
出庫の履歴期間の出庫数を平均在庫で割り、回転率にする
引当の数量1以上なら、その時点で候補から外す
他拠点の在庫と出庫転送が成り立つかの材料

基準表と除外リストと契約台帳は、スプレッドシートを読むだけで足ります。契約台帳から引くのは、返品条項の有無と期限だけです。 契約の全文は読みません。

Step4

AIへ渡す前に整形する

  1. 単位をそろえる … 品目コードと保管場所の組み合わせを行の単位にし、在庫数を換算します
  2. 除外リストを当てる … 保守部品、法定保有、預り在庫、試作の保管に当たるものを外します
  3. 引当を確かめる … 引当の数量が1以上のものを外します
  4. 日の浅いものを外す … 初回入庫から保管期間に満たないものは候補にしません
  5. 指標を計算する … 最終出庫日からの日数、保管期間、回転率をPythonで計算します
  6. 基準表に当てる … 区分ごとのしきい値と比べ、候補かどうかを決めます
  7. 在庫金額を計算し、並べる … 在庫数と単価を掛け、大きい順に並べます
  8. AIに渡す件数を絞る … 金額の大きいほうから、その月に扱える件数までを渡します
Step5

AIに処理させる

させるのは、滞留の理由を区分し、取るべき手の候補を挙げ、その根拠にした材料を書き出すことだけです。

理由の区分判断の材料対応して出やすい手
終売品目マスタの終売の区分、後継品の有無値引き、廃棄の検討
仕様変更品目マスタの仕様変更と後継品、変更の日付仕入先への返品の相談、廃棄の検討
季節外れ季節性の区分、過去の出庫の履歴の形そのまま保有、他拠点へ転送
発注が多すぎた発注の履歴と、その後の出庫の量の差仕入先への返品の相談、値引き
需要が落ちた出庫の履歴が段階的に減っている値引き、他拠点へ転送
サンプル・試作の残り発注の理由、入庫が1回だけ廃棄の検討、そのまま保有
材料からは決められない上のどれにも当たらない材料が足りない
させないこと理由
廃棄するかどうかの決定取り消せない。在庫の責任者が決める
返品できるかどうかの判断仕入先との契約の条件次第。台帳の事実だけを添える
評価損など会計処理の判断経理と会計士に委ねる領域
値引きの金額を決めること売価の決定は営業と経営の判断
在庫金額や回転率の計算Pythonで計算済み。数字を作り直させない
除外すべきかどうかの判断リストとの照合で決まる。前処理で終えている
Step6

指示内容を固定する

あなたは物流部門で、動きの止まった在庫の滞留の理由を区分する立場です。
渡された材料だけを見て判断してください。材料に無いことを推測で補わないでください。

【理由の区分(この7つから1つ選ぶ)】
- discontinued ..... 終売になった製品またはその部材
- spec_change ...... 仕様変更で使えなくなった
- seasonal ......... 季節を外しただけで、次の季節に動く見込み
- over_order ....... 発注が実際の使用量より多すぎた
- demand_drop ...... 需要が段階的に落ちている
- sample_leftover .. 展示会・試作・サンプルの残り
- unknown .......... 渡された材料では区分を決められない

【取るべき手の候補(この6つから1つ以上挙げる)】
- markdown ......... 値引きして販売する
- return_to_vendor . 仕入先への返品を相談する
- transfer ......... その品目が動いている他拠点への転送
- scrap ............ 廃棄を検討する
- hold ............. そのまま保有する
- need_info ........ 判断の材料が足りない

【厳守事項】
- 廃棄するかどうかを決めないでください。scrap は「検討する候補」であり、
  決定ではありません。決めるのは在庫の責任者です。
- 仕入先に返品できるかどうかを判断しないでください。契約の条件は
  渡していません。return_to_vendor は相談する候補という意味です。
- 評価損など会計上の処理や、値引きの金額・率を書かないでください。
- 在庫金額、回転率、日数を計算し直さないでください。
- 終売とも仕様変更とも読めないときは unknown を選び、reason_evidence に
  「何が分かれば決められるか」を書いてください。迷ったときに
  discontinued を選ばないでください。
- reason_evidence には、判断の根拠にした材料の値をそのまま写してください。
  「終売フラグ = 1」「直近24か月の出庫 = 0」のように、値で書いてください。

【この品目の材料】
品目コード / 保管場所 / 品目の区分 / 在庫数 / 在庫金額 .. {item}
最終出庫日からの日数 / 保管期間 / 回転率 ................ {metrics}
終売の区分 / 仕様変更の有無 / 後継品 / 季節性 ........... {master}
直近の発注日 / 発注数 / 発注の理由 ...................... {po}
他拠点の在庫数 / 他拠点の直近の出庫 ..................... {other_sites}

「迷ったときに discontinued を選ばない」を書いておかないと、unknown がほとんど出ません。 終売は材料が分かりやすく、逃げ場所になります。unknown が出ないほうが困ります。 材料が足りないという事実が見えなくなり、品目マスタが更新されていないことに気づけなくなります。

Step7

出力形式を固定する

次の形のJSONで受け取ります。

{
  "item_code": "",
  "location": "",
  "reason": "discontinued | spec_change | seasonal | over_order | demand_drop | sample_leftover | unknown",
  "reason_evidence": "",
  "confidence": "high | medium | low",
  "actions": [
    { "action": "markdown | return_to_vendor | transfer | scrap | hold | need_info",
      "rationale": "" }
  ],
  "missing_info": ""
}

スキーマは strict: true で渡し、すべてのフィールドを required に入れ、オブジェクトには additionalProperties: false を付けます。公開ドキュメントでは、Structured Outputs は必須キーを省略したり無効な enum 値を生成したりすることがないとされています。enum に固定しているのは、後段の集計が区分の文字列に依存するからです。 自由文が1件でも混ざると、その月の集計が合いません。

安全上の理由で応答が拒否された場合は、refusal フィールドで拒否が示されるとされています。空のJSONとして後段に流れないよう、検出して人へ回す経路を作ります。

Step8

システムへ連携する

つなぎ先方式内容
在庫管理システムAPIまたはファイルの読み取り在庫、出庫の履歴、引当
購買システムAPIまたはファイルの読み取り発注の履歴
基準表・除外リストスプレッドシートの読み取りしきい値と除外の照合
OpenAI APIAPI呼び出し理由の区分と手の候補
契約台帳スプレッドシートの読み取り返品条項の有無と期限
Power Automate承認の依頼と結果の受け取り在庫の責任者の承認
処理の台帳書き込み決めた結果と理由の記録

書き込むのは処理の台帳だけです。在庫数を動かす操作が経路に一切無い状態を保ちます。 実際の出庫や廃棄の登録は、承認のあとに担当部署が既存の手順で行います。

ツール利用(function calling)を使う設計も考えられます。 公開ドキュメントでは、ツールを含めてリクエストし、呼び出しを受け取り、アプリケーション側で実行し、その出力を含めて再度リクエストし、最終応答を得る流れが示されています。今回は前処理で材料をそろえてから1回で渡す形にしています。 使う場合は20個未満に抑えることが推奨されています。

Step9

人が確認する

Power Automate では、承認ワークフローを作るには「承認 - 開始して承認を待機」アクションを追加するとされています。承認の種類を選び、タイトル、割り当て先、詳細を指定する形です。承認者は承認センターか電子メールの受信ボックスから返信できると説明されています。

  1. confidence が low のものと missing_info のあるものを先に見る … 多くは品目マスタの更新漏れです
  2. 在庫金額の大きいものから候補と根拠を確かめる … reason_evidence の値を見て、区分が合っているかを判断します
  3. 手を決める … 値引き・返品・転送・廃棄・保有継続のどれにするかを、責任者が選びます
  4. 返品と会計は別の人に回す … 返品の可否は購買が仕入先に確かめ、評価損の処理は経理に回します

3番目は、AIの候補をそのまま承認する場ではありません。 候補が scrap でも、責任者が hold を選べる形にします。選び直した記録が、翌月の基準表と除外リストを直す材料になります。 AIが scrap を出したものに hold が選ばれ続けるなら、候補の出し方が業務と合っていません。

承認の詳細の欄には、品目コード、保管場所、在庫数、在庫金額、日数、区分、根拠、候補を並べます。Markdown を使って詳細フィールドの書式を設定することができるとされているので、一覧の形で読める状態にしておきます。 承認者が在庫管理システムを開かずに判断できるかで、確認に使う時間が変わります。条件分岐は、承認者の応答が「承認」と等しいかで分けます。

フローの実行期間が30日を超える可能性がある場合については、承認データを Microsoft Dataverse に保存する方法が示されています。2つのフローに分け、「承認の作成 (v2)」アクションで応答側の処理を行う形です。在庫の判断は仕入先への確認待ちで数週間止まることがあるため、この形を前提にしておくと止まりません。

Step10

例外に対処する

起きること対応
最終出庫日が空最終入庫日からの保管期間だけで測り、missing_info を付けて人へ
品目マスタの終売が更新されていないAIは unknown を返す。更新漏れとして担当へ戻す
引当が処理中に入った承認の前にもう一度確かめ、入っていれば一覧から落とす
除外リストに無い保守部品が出た承認の場で hold を選び、除外リストへ追加する
同じ品目が複数の保管場所で出る品目単位でまとめて1件として承認に出す
単価が未設定で在庫金額が0になる並べ替えから外し、別の一覧に出す
契約台帳に仕入先が無い返品条項は「不明」とし、購買に確かめてもらう
応答がスキーマに合わないstrict で防ぐ。失敗した回は再試行し、2回失敗したら人へ
承認が30日を超えて返らないDataverse に保存し、フローのタイムアウトと切り離す
同じ品目が毎月候補に出続ける保有継続と決めたものは、次に見る月まで出さない

下2行が、運用に乗るかを決めます。 承認が返らないまま月が変わると同じものが翌月も並び、やがて誰も一覧を開かなくなります。

Step11

記録を残す

  • 毎月の候補の一覧(品目、保管場所、在庫数、在庫金額、日数、保管期間、回転率)
  • AIが返したJSONの全文(reason、reason_evidence、confidence、actions、missing_info)
  • そのとき使った基準表と除外リストの内容
  • 承認の結果(誰が、いつ、どの手を選んだか)と、AIの候補と違う手を選んだ記録
  • 決めたあとの実際の処理(値引きの開始日、返品の可否、転送先、廃棄の日)
  • 滞留している在庫金額の合計の、月ごとの推移

3つ目を残すのは、基準表が後から変わるためです。 しきい値を変えると、過去に候補にならなかった品目の意味が変わります。当時の基準が無いと、見直しの範囲が決まりません。

04実装レベルの3段階

最小構成:材料の表を手で作り、AIの画面に貼って区分と候補を出させる / 1品目ごとの理由の区分
半自動化:上記+在庫と出庫の取り出し、基準表と除外リストの照合、AIの呼び出しをPythonで回す / 抽出から候補の一覧まで
本格構成:上記+承認のフローと台帳への記録、翌月の基準への反映までつなぐ / 月次の仕分けの全体

本記事が想定するのは半自動化です。 抽出と区分が自動で回り、一覧が毎月出てくる状態になれば、第10章の8.0時間に届きます。 承認は既存の会議や回覧でも成り立つため、まずここで止めて構いません。 本格構成に進む価値があるのは、決めたことが記録に残る点です。 誰がいつどの手を選んだかと、AIの候補と違う手を選んだ記録が台帳にたまると、基準表と除外リストを直す材料になります。 半自動化のままだと、この記録が担当者の手元にしか残りません。 最小構成から半自動化へは、一足飛びに進めます。 最小構成で作った30品目の表が、そのまま入力の定義になるからです。逆に、最小構成を飛ばして半自動化から始めると、基準表のしきい値を決める根拠がありません。

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

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

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

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

AI活用について相談する

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

向いている
  1. 品目数が数千を超え、終売品・仕様変更品・季節品が混ざる製造業、小売業、EC事業者。年1回の棚卸のときにしか滞留在庫を見ておらず、見つかったときには値引きでも動かなくなっている場合。倉庫や店舗が複数あり、他拠点に在庫があるかどうかを都度画面で確かめている場合。品目の区分ごとに「動いていない」の基準が違い、担当者の感覚で判断されている場合。
向いていない
  1. 品目数が数十で、担当者が全品目の動きを覚えていられる場合。受注生産で在庫をほとんど持たない場合。在庫管理システムに最終出庫日と出庫の履歴が残っておらず、動きを機械的に測る材料が無い場合。なお、廃棄するかどうかの決定と、評価損に関わる会計処理の判断は、この構成では代替できません。

07最小構成で試す方法

  1. 先月の在庫の一覧から、在庫金額の大きい順に30品目を選ぶ(手を打ち終えたものを数件入れる)
  2. その30品目について、去年の棚卸のときに何を調べ、どう決めたかを聞き取る
  3. 30品目それぞれの材料(在庫数、在庫金額、最終出庫日からの日数、終売の区分、仕様変更、季節性、直近の発注、他拠点の在庫)を、表にまとめる
  4. 手元のAIサービスの画面に表を貼り、第7章のプロンプトの区分と候補の部分をそのまま指示する
  5. 出てきた区分と候補を、去年の判断と突き合わせる

30品目は表を手で作ってください。 ここで作る表が、そのままAIに渡す材料の一覧になります。 手で集めてみると、どの材料がシステムから取れて、どれが人の記憶にしか無いかが分かります。

出てきた内容判断
去年の判断と同じ区分が出た材料はそろっている。自動化に進む
unknown が多い品目マスタの終売と仕様変更の区分が古い。マスタの整備が先
終売でないものを終売と区分した指示の書き方で直る。構成は有効
引当のある品目が候補に出た除外リストを先に作る。 AIの問題ではない

2行目が出ても失敗ではありません。 年1回の棚卸に時間がかかっていた理由の1つが、そこで分かったということです。 マスタが古いまま自動化しても、毎月 unknown が並ぶだけになります。

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

問題対策
全品目を同じ日数で測る保守部品が全部滞留になる。 品目の区分ごとの基準表を先に作る
引当のある在庫が候補に出る前処理で外す。 いちばん新しい引当の値を取る
保守部品を誤って処分候補にする除外リストを先に持つ。候補に並べてから外す設計にしない
AIが廃棄を決めた形の出力を返すscrap は候補であると明記する。決定は承認の場で人が選ぶ
返品できると書かれる契約の条件はAIに渡さない。台帳の条項の有無だけを後段で添える
会計上の処理まで書かれる指示で禁じる。評価損の判断は経理と会計士に委ねる
件数の多い順に並べてしまう在庫金額の大きい順に並べる。 全件並べても手が回らない
unknown が出ない迷ったときに終売を選ばせない。材料不足が見えなくなる
品目マスタの終売が古いままunknown が多い月は、判定ではなくマスタを疑う
同じ品目が毎月出続ける保有継続と決めたものは、次に見る月を記録して抑える
承認が返らず月が変わるDataverse に保存する形にし、「承認の作成 (v2)」で応答側を分ける
季節ものが毎年同じ時期に全件出る季節性の区分を持ち、日数だけで測らない

上の3行が、この構成の失敗のほとんどです。 どれも「動いていないように見えるが、動かなくてよいもの」を候補に入れる型です。一度これが起きると、現場は一覧を信用しなくなります。

中ほどの3行は、AIに決めさせてはいけない3つです。 廃棄、返品の可否、会計処理。どれも間違えたときの戻し方が無いか、他の部署の責任の範囲です。 指示で禁じるだけでなく、出力の形からも外しておきます。

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

この構成で扱うデータ: 品目コードと品名、在庫数、単価と在庫金額、仕入先の名称、発注の履歴、拠点ごとの在庫です。単価と在庫金額は原価に直結します。

  1. 外部へ渡す範囲を、区分に必要な材料までに限る … 理由の区分に仕入先の名称は要りません。在庫金額も、並べ替えはPython側でできます。 渡すのは日数、保管期間、回転率、終売と仕様変更の区分、季節性、発注の量といった材料に絞れます
  2. 廃棄の決定をAIに含めない … 出力の scrap は候補であって決定ではありません。在庫の責任者が承認の場で選びます。 廃棄は物が消え、元に戻せません
  3. 返品の可否を判断させない … 仕入先との契約の条件次第です。契約台帳に条項があるという事実までを添え、実際に返品できるかは購買が仕入先に確かめます
  4. 会計処理の判断をさせない … 処分の判断は評価損につながります。その会計処理の判断は経理と会計士に委ねてください。 この構成が出すのは、動いていないという事実と、その理由の区分までです
  5. 仕入先ごとの発注の履歴を、まとめて外へ出さない … 1品目ずつ渡すのと、仕入先ごとの取引の全体を渡すのとでは意味が違います。取引条件が読み取れる形の一覧にしないでください
  6. 一覧の共有範囲を決めておく … 動かない在庫の一覧は、発注の判断が適切だったかが読み取れる資料でもあります。 責任を問う材料ではなく、手を打つための材料として使うという位置づけを、始める前に共有してください

誤りが起きた場合のリスクは、動かしてはいけない在庫を処分することと、滞留を見落として持ち続けることの2つです。 前者は除外リストの不備から、後者は基準表のしきい値の緩さから起きます。どちらも人の確認では防ぎきれないので、表の整備で守ります。

10まず何から始めるか

1週目:基準表を作る

品目の区分ごとに、最終出庫日からの日数、保管期間、回転率のしきい値を決めます。全品目を一度に決める必要はありません。 在庫金額の大きい区分から埋めます。担当者によって違っていた基準を、ここで1つに決めます。

2週目:除外リストを作る

保守部品、法定で保有が決まっているもの、預り在庫、試作の保管。動いていないのが正常なものを、名前で挙げて一覧にします。 設計と保守の担当者に聞き、「動かなくてよい」と言われたものを全部入れます。

3週目:30品目で試す

在庫金額の大きい順に30品目を選び、材料の表を手で作って、AIの画面で区分と候補を出させます。去年の棚卸での判断と突き合わせ、unknown がどれくらい出るかを見ます。

4週目:抽出と区分をPythonでつなぐ

在庫と出庫の取り出し、基準表と除外リストの照合、AIの呼び出しまでを書きます。この時点では承認のフローを作らず、一覧を書き出すだけにします。

2か月目: 契約台帳の返品条項を添え、在庫金額の大きい順の一覧として関係者に配ります。候補と違う手を選んだ件数を数えます。3か月目以降: Power Automate で承認のフローをつなぎ、台帳への記録と翌月の基準への反映を足します。滞留している在庫金額の合計を毎月並べ、その推移が読めるようになった時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-09-28/最終更新:2026-09-28
確認した内容情報源確認日
JSON Schemaに常に従う応答が生成され、必須キーの省略や無効な enum 値の生成が起きないこと。JSON mode はスキーマ準拠を保証しないこと。format に type: "json_schema" と strict: true を指定すること。拒否が refusal で示されることOpenAI: Structured Outputs2026-09-28
ツール利用が学習データ外のデータへアクセスする方法であること。ツールを含めてリクエストし、呼び出しを受け取り、実行し、出力を含めて再度リクエストし、最終応答を得る流れであること。定義が type / name / description / parameters / strict から成り、最初は20個未満に抑えることが推奨されることOpenAI: Function calling2026-09-28
「承認 - 開始して承認を待機」アクションで承認ワークフローを作り、承認の種類・タイトル・割り当て先・詳細を指定すること。承認者が承認センターまたは電子メールから返信できること。詳細を Markdown で書式設定できること。応答が「承認」と等しいかで条件分岐すること。30日を超える場合は Dataverse に保存し「承認の作成 (v2)」で処理することMicrosoft Learn: 承認ワークフロー2026-09-28

廃棄の決定と、評価損に関わる会計処理の判断は、この構成の外です。 前者は在庫の責任者が、後者は経理と会計士が行います。

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

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

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

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