在庫管理

在庫は多拠点で管理され、動的なしきい値ルール販売速度と欠品予測自動発注入荷待ち(バックオーダー) まで一貫して扱えます。

多拠点在庫

inventory_levels/update Webhook で拠点別の在庫が /content/commerce/inventory/levels/{inventory_item_id}.json に記録されます(新しい値優先)。

{
  "inventory_item_id": "123456",
  "locations": { "loc_1": { "available": 15, "updatedAt": "..." } }
}
  • 集計や拠点別内訳は commerce.Locations で取得
  • 引当計画(commerce.Allocation)は most_stock / priority 戦略に対応
  • 設定: /etc/commerce/config/locations.ymlstrategy / priorityOrder / defaultSafetyStock
  • 参照: GET …/endpoints/inventory-locations.groovy?productId=123[&variantId=456&qty=10]

しきい値ルール

実効しきい値は次の優先順で決まります: 手動オーバーライド → ルール一致 → 既定値 → なし

/etc/commerce/config/inventory-rules.yml:

default: 5
rules:
  - name: "Perishable"
    match: { productType: ["Food", "Beverage"] }
    threshold: 20
  - name: "High velocity"
    match: { minVelocityPerDay: 5 }
    threshold: 25

照合条件: productType / vendor / tags(いずれか一致)/ seasonMM-DD 範囲、年跨ぎ可)/ minVelocityPerDay。上から評価し、全条件を満たす最初のルールが採用されます。

販売速度と欠品予測

タイマー(既定 6 時間ごと)で、注文履歴から変種ごとの速度(units/day)を計算し、/content/commerce/analytics/velocity.json にキャッシュします。

daysToStockout = current_stock / perDay

stockout.warnDays 以内に欠品が見込まれる変種をアラート(commerce.Alerts でクールダウン)。設定: /etc/commerce/config/velocity.ymlwindowDays / stockout.warnDays / cooldownMinutes)。参照: GET …/endpoints/forecast.groovy?warnDays=7

自動発注

タイマー(日次)で、速度と在庫から発注提案を作成します。

need = velocity * (leadTimeDays + targetCoverDays) - currentStock
qty  = roundUp(max(ceil(need), minOrderQty), roundTo)

提案は /content/commerce/purchase-orders/{yyyy}/{MM}/po_*.jsonreview_pending)に記録され、承認の BPMN フローへ。承認後、supplier.deliverynone / email / webhook)に応じて発注します。設定: /etc/commerce/config/reorder.yml。ステータス: review_pending → approved/rejected → ordered/order_failed

入荷待ち(バックオーダー)

注文時に、在庫不足(shortfall)または予約商品タグ(preorder)を検出して記録します。

backordered → ready → released   (通常)
backordered → cancelled          (返金時)
  • 検出: 注文ルート内の detectBackorders.groovyorder + line キーで冪等)
  • 解放: 入荷時に古い順(FIFO)で在庫が足りる分だけ Release タスクを起票
  • 取消: 返金時に当該注文の未解放分を取消
  • 記録: /content/commerce/backorders/{yyyy}/{MM}/backorder_{orderId}_{lineItemId}.json
  • 設定: /etc/commerce/config/backorder.ymlpreorderTags / notify.onCreated / notify.onReady

アラートツールの流れ

商品 Webhook 受信 → 在庫アラートのワークフロー開始 → 初回はしきい値未設定なら「しきい値設定」タスク → 在庫 < しきい値で「在庫レビュー」タスク → 通知。同一商品でワークフローが実行中なら新規 Webhook はスキップされます。タスクは Webtop の Tasks アプリで処理します。