For the complete documentation index, see llms.txt. This page is also available as Markdown.

Oversell / Reallocate — 売越し・再引き当て

ルーティング確定後に 売越し(システム上は在庫があったが、店舗で実物欠品 / 汚損 / 先行販売 等で実際には出荷できない)が起きたとき、該当の引き当て結果に 売越しフラグ を立て、同じ出荷元の別の在庫ロケーション へ再引き当て(再ルーティング)します。

Base URL https://api.lmile.io · 認証 x-ingest-secret ヘッダー または operator JWT(Authorization: Bearer)(詳細) · shop はリクエストボディに含めます(API キーで呼ぶ場合は省略できます)

/api/routing/oversell / /api/routing/reallocate は機械間 secret(x-ingest-secret)と倉庫スタッフの operator JWT のどちらでも呼べます(系統はヘッダの有無で明示判別。詳細)。operator JWT 経由は操作スタッフを記録します。

エンドポイント

Method
Path
用途

POST

/api/routing/oversell

引き当て結果に売越しフラグを立てる

POST

/api/routing/reallocate

売越し結果を同一出荷元の別メンバーへ再引き当て

入力フィールドは camelCase(routingOrderId / lineInstanceNo)です。


POST /api/routing/oversell

routingOrderId の applied な引き当て結果に売越しフラグ(oversold = true)を立てます。barcode / locationId / lineInstanceNo で対象を絞り込めます(未指定なら注文の applied 全件)。

リクエスト

POST https://api.lmile.io/api/routing/oversell
x-ingest-secret: {INGEST_SECRET}
Content-Type: application/json
{
  "shop": "demo-store.myshopify.com",
  "routingOrderId": "0f1e2d3c-4b5a-6789-0abc-def123456789",
  "barcode": "1234567890123",
  "locationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "reason": "店舗で実物欠品"
}

ボディパラメータ

パラメータ
型
必須
説明

shop

string

✓

店舗ドメイン(API キーで呼ぶ場合は省略できます)

routingOrderId

string (uuid)

✓

対象の routing order id

barcode

string

対象 barcode で絞り込み

locationId

string (uuid)

引き当て先在庫ロケーション(selected_location_id)で絞り込み

lineInstanceNo

number

販売単位番号で絞り込み

reason

string

売越し理由(oversold_reason に記録)

レスポンス

フィールド
説明

marked

売越しフラグを立てた decision 件数(既に oversold の行・applied でない行は対象外)

挙動

  • 対象は decision_status = applied かつ oversold = false の行のみ。oversold = true / oversold_at / oversold_reason を更新します。

  • 既に売越し済の行は二重マークしません(marked に含まれない)。

  • フラグを立てただけでは引き当ては変わりません。実際の振り直しは /api/routing/reallocate を呼びます。


POST /api/routing/reallocate

routingOrderId の 売越し(oversold) な引き当て結果を、同一出荷元の別の在庫ロケーション へ再ルーティングします。旧結果は superseded にし後継へリンク、出荷指示を再構築して再 dispatch します。

リクエスト

ボディパラメータ

パラメータ
型
必須
説明

shop

string

✓

店舗ドメイン(API キーで呼ぶ場合は省略できます)

routingOrderId

string (uuid)

✓

再引き当て対象の routing order id

レスポンス

フィールド
説明

ok

入力・認証が妥当で、かつ dispatch 送信が失敗しなかったことを示す。再引き当て先の在庫が無くても(status: no_stock / unresolvedReallocations > 0 / skipped > 0)ok: true のまま返ります。ok: false になるのは入力不正(400)・注文不在(404)・dispatch 送信失敗(status: failed)のみ。再引き当ての成否は ok ではなく status / unresolvedReallocations / skipped で判定してください

reallocated

再引き当てした unit 数(旧 decision を superseded にし後継を生成した数)

unresolvedReallocations

再引き当てしたが他に在庫が無く引き当て不能だった unit 数(unroutableLines 行き)

skipped

出荷元 / barcode 情報を欠く旧 decision で再引き当て不能だった数(oversold のまま据え置き)

status

再構築後の注文ステータス(dispatched / routed / failed / no_stock)

shippingInstruction

現在の applied 結果(健全分 + 再引き当て分)から再構築した出荷指示

dispatches

引き当て先ロケーションごとの再送結果配列(Dispatch Config の per-location 設定で送信)

売越し対象が無い場合は { "ok": true, "routingOrderId": "...", "reallocated": 0, "note": "no oversold decisions" } を返します。

挙動・冪等性

  • 再引き当ては 同一出荷元のメンバー在庫ロケーション内で行い、売越しになった在庫ロケーションは候補から除外します。同 barcode の売越し location はすべて除外対象です。

  • 在庫量を尊重するため (出荷元, barcode) 単位でまとめて再配分します(複数 unit の二重引き当てを防止)。

  • 旧 decision は decision_status = superseded にし superseded_by_decision_id で後継へリンク。新 decision は applied。明細単位の properties(Routing の lines[].properties)は旧 decision から後継へ引き継がれ、再構築後の出荷指示にも含まれます。

  • 出荷指示は (shop, idempotencyKey) で upsert されるため、再 dispatch は同一行を更新します(Idempotency)。

  • 別メンバーにも在庫が無ければ該当 unit は unroutableLines(no_stock_anywhere)。全 unit 不能なら status = no_stock、dispatch は skip。

  • 再引き当て不能(no_stock / unresolvedReallocations / skipped)は HTTP エラーにせず 200 + ok: true で返します(行単位の結果として表現し silent skip しない)。ok: false は入力不正・注文不在・dispatch 送信失敗に限ります。在庫が見つかるまで現場で確保 → 再度 /api/routing/reallocate を呼ぶ運用を前提とします。


エラー

エンドポイント固有:

Status
条件
レスポンス例

400

routingOrderId 欠落

{ "ok": false, "error": "routingOrderId required" }

404

routing order が存在しない(reallocate)

{ "ok": false, "error_kind": "not_found", "error": "routing order not found" }

共通エラー(401 / 400 / 403 / 405 / 500 / 503)は Error Codes を参照。

データモデル

  • sot.lm_routing_decisions — 売越し列 oversold / oversold_at / oversold_reason、再引き当てリンク superseded_by_decision_id。出荷元は fulfillment_source_location_id、引き当て先は selected_location_id。

  • sot.lm_fulfillment_source_members — 再引き当ての候補プール(同一出荷元の在庫ロケーション)。

  • sot.lm_shipping_instructions — 再 dispatch ログ(delivery_status。UNIQUE shop + idempotency_key)。

Last updated

Was this helpful?