Stock Transfer — 拠点間在庫移動
ある拠点(出庫元)から別の拠点(入庫先)へ、商品を 数量ベースで移動します。1 件の移動は 作成 →(承認)→ 出庫 → 入庫 というライフサイクルで進み、出庫元・入庫先の棚と在庫を段階的に確定します。販売可能在庫(Shopify に見える数)が実際に増減するのは、自社在庫(MFC 自己在庫)を持つ拠点だけです。外部システム(Shopify / スマレジ)が在庫を管理する拠点は、移動を記録・可視化しますが実数量は外部が正のため、この API では動かしません(→ ハイブリッド在庫)。
★ 返送バルク(Transfer API)とは別機能です。 既存の Transfer Batches(倉庫間移動バルク / 刻印返送)は、注文の出荷単位(unit)をまとめて送り返す状態機械です。本ページの Stock Transfer は、注文に紐づかない 商品 × 数量 の拠点間在庫移動で、別の仕組み(別テーブル)として併存します。
Base URL
https://api.lmile.io· 認証x-ingest-secretヘッダー または operator JWT(Authorization: Bearer)(詳細) · 書き込み(POST)はshopをリクエストボディに、読み取り(GET)はshopをクエリに含めます(API キーで呼ぶ場合は省略できます)
入力・出力フィールドは camelCase(
stockTransferId/originRef/shippedQty/idempotencyKey)です。ingest 系の snake_case とは異なる点に注意してください。
エンドポイント
POST
/api/routing/stock-transfer/create
移動を作成(承認なし・すぐ出庫できる)
POST
/api/routing/stock-transfer/create-request
承認が要る移動として作成(出庫依頼)
POST
/api/routing/stock-transfer/label-options
配送ラベルを発行できる出庫元・入庫先を調べる
POST
/api/routing/stock-transfer/set-lines
明細を追加・数量置換(出庫前のみ)
POST
/api/routing/stock-transfer/remove-lines
明細を barcode 指定で削除(出庫前のみ)
POST
/api/routing/stock-transfer/update
ヘッダ(伝票番号・メモ)と明細をまとめて更新
POST
/api/routing/stock-transfer/approve
承認(既定で承認と同時に出庫まで実行)
POST
/api/routing/stock-transfer/reject
承認を却下
POST
/api/routing/stock-transfer/ship
出庫を確定(自社在庫は出庫元の棚を減らす)
POST
/api/routing/stock-transfer/print-label
発行済みの配送ラベルをもう一度印刷する
POST
/api/routing/stock-transfer/receive
入庫検品(自社在庫は入庫先の棚を増やす)
POST
/api/routing/stock-transfer/cancel
業務取消(出庫済みは出庫元の棚を復元)
POST
/api/routing/stock-transfer/delete
出庫前の移動を物理削除
GET
/api/routing/stock-transfer/list
移動の一覧(ステータス・拠点で絞り込み)
GET
/api/routing/stock-transfer/get
移動 1 件(ヘッダ + 明細)
GET
/api/routing/stock-transfer/lines
移動 1 件の明細のみ
入庫検品中の 修正依頼(出庫内容の見直し)は別ページ Modification Request を参照してください。
ライフサイクル
移動のステータスは 3 つの軸を独立に持ちます。1 つの軸だけで完結せず、組み合わせで状態を表します。
progress
draft / pending_shipment / shipped / receiving / received / canceled
出庫・入庫の進捗
approval
none / pending_request / pending / approved / rejected
承認の状態(none = 承認フローなし)
レスポンスには上記 3 軸に加え、Shopify InventoryTransfer 相当の 派生フェーズ shopifyPhase(DRAFT / READY_TO_SHIP / IN_PROGRESS / TRANSFERRED / CANCELED)も返します(3 軸から自動計算した表示用の値です)。
作成の 2 系統(承認の有無)
create(承認なし) —approval = noneで作成し、すぐship(出庫)できます。承認フローを持たない拠点間移動に使います。create-request(承認あり) —approval = pending_request(出庫依頼)で作成します。approveで承認するまでshipできません(承認前の出庫はapproval_requiredで拒否)。rejectで却下できます。
進捗の流れ
createされた移動はprogress = pending_shipmentから始まります(draftは将来用の予約値で、通常は使いません)。出庫(
ship)は 1 回で全明細を出庫します。shipped → receiving → receivedと進み、receivingの間は複数回に分けて受領できます(→ receive の挙動)。receivedは終端です(取消・巻き戻し不可)。取消はreceivedになる前に行ってください。
ハイブリッド在庫(自社在庫だけが動く)
実際の数量(棚・販売可能在庫)が動くのは、その拠点が 自社在庫(MFC 自己在庫) の場合だけです。
出庫元が自社在庫:
shipで出庫元の棚を数量ぶん減らし、販売可能在庫を再計算します。入庫先が自社在庫:
receiveで入庫先の棚を受領数ぶん増やし、販売可能在庫を再計算します(棚コードdestinationShelfCodeの指定が必須)。外部管理拠点(Shopify / スマレジ): 棚には触れず、移動の数量を記録するだけです。実在庫は外部システムが正のため、そちら側で反映されます。
自社在庫の販売可能在庫が変化した分は、Source Inventory Webhook で外部へ通知されます(変化なしの場合は通知しません)。
POST /api/routing/stock-transfer/create
移動を新規作成します(approval = none・すぐ出庫できる状態)。明細は同時に渡しても、後から set-lines で足しても構いません。
リクエスト
ボディパラメータ
shop
string
✓
店舗ドメイン(API キーで呼ぶ場合は省略できます)
originRef
object
✓
出庫元拠点の参照(下記「拠点の指定」)
destinationRef
object
✓
入庫先拠点の参照。出庫元と同一だと same_location
identificationNo
string
伝票番号(運用採番・外部連携キー。任意)
idempotencyKey
string
冪等キー。同じ値で再送すると同一の移動を返します(再作成しない)
note
string
移動のメモ(任意)
receivingDesiredDate
string
入庫希望日(YYYY-MM-DD・任意)。入庫先で受け取りたい日付。形式不正は invalid_payload
lines
array
明細(0〜1,000 件。省略可・後から set-lines で追加可)
拠点の指定(originRef / destinationRef)
内部の拠点 ID か、外部システムの識別子のいずれかで拠点を指定します。
解決できない参照は origin_unresolved / destination_unresolved を返します。
lines[] オブジェクト
barcode
string
✓
商品識別子(商品マスターとの結合キー)
quantity
number
✓
移動する計画数量(0 以上の整数)。出庫数はこれを超えられません
requestQuantity
number
依頼数量(0 以上の整数。省略時は 0。create-request では省略時 quantity と同値)
note
string
明細ごとのメモ(任意)
同一伝票内で 同じ
barcodeは 1 行です(重複させると数量が置き換わります)。
レスポンス
stockTransferId
作成した移動の ID(以降の操作で使用)
progress / approval
3 軸ステータス(作成直後は pending_shipment / none)
originKind / destinationKind
拠点の種別(mfc_self / smaregi_store / shopify / other)。在庫効果の分岐に使われます
idempotent
冪等キー一致で既存の移動を返したときのみ true
挙動・冪等性
作成は冪等:
idempotencyKeyを付けて同じ値で再送すると、新しい移動を作らず既存の移動をidempotent: trueで返します。イベント単位で一意なキーを付けてください。originRef/destinationRefが同じ拠点に解決されるとsame_locationで拒否します(自己移動は作れません)。明細を同時に渡すと、そのまま登録します。数量は 0 未満に丸めません(負値は 0 として扱います)。
POST /api/routing/stock-transfer/create-request
create と同じボディで、承認が要る移動(出庫依頼)として作成します。approval = pending_request で作成され、approve で承認するまで出庫できません。
ボディパラメータは create と同一です。加えて
labelMethod(下記)を指定できます。明細の
requestQuantityを省略した場合、create-requestではquantityと同値で登録します(依頼数量=計画数量)。レスポンスの
approvalはpending_requestになります。
送り状の出し方(labelMethod)
移動する箱に付ける送り状を、作成のときに決めます。
labelMethod
出庫(ship)のときに起きること
"issue"
配送ラベルを発行して出庫元のプリンターで印刷し、追跡番号を箱に記録します。発行に失敗したら出庫しません
"manual"
手書きの送り状を使います。ship に trackingNumber を渡さないと出庫できません(tracking_number_required)
省略
送り状の出し方を決めない移動です。ship の trackingNumber は任意のままです
"issue"を指定できるのは、出庫元に配送ラベルの発行設定があり、入庫先の拠点に住所(郵便番号・都道府県・市区町村・番地・電話番号)が入っているときだけです。満たさない組み合わせは作成せずlabel_not_availableを返します。指定できるかは先に label-options で調べられます。"issue"を指定するときは、originRef/destinationRefをlocationIdで渡してください。冪等キーで再送したとき、最初に決めた出し方は変わりません。
POST /api/routing/stock-transfer/label-options
配送ラベルを発行できる出庫元と、ラベルの宛先にできる入庫先を返します。create-request の labelMethod: "issue" を指定できるかを、作成の前に調べるために使います。
リクエスト
レスポンス
originLocationIds[]
配送ラベルの発行設定がある拠点。出庫元がここに含まれるときだけ発行できます
destinationLocationIds[]
住所が入っている拠点。入庫先がここに含まれるときだけ発行できます
挙動・冪等性
読み取りだけです。何度呼んでも何も変わりません。
出庫元と入庫先の両方が含まれる組み合わせだけ、
labelMethod: "issue"を指定できます。
POST /api/routing/stock-transfer/set-lines
明細を追加・置換します(出庫前のみ)。同じ barcode が既にあれば数量を置き換え、無ければ新しい行として追加します。
リクエスト
ボディパラメータ
shop
string
✓
店舗ドメイン(API キーで呼ぶ場合は省略できます)
stockTransferId
string (uuid)
✓
対象の移動 ID
lines
array
✓
明細(1〜1,000 件。barcode / quantity / requestQuantity? / note?)
レスポンス
挙動・冪等性
編集できるのは出庫前(
progressがdraft/pending_shipment・却下されていない)だけです。出庫後や却下済みはnot_editableを返します。同じ
barcodeの再送は数量を置き換えます(行を増やしません)。同じボディの再送は同値で収束します。
POST /api/routing/stock-transfer/remove-lines
明細を barcode 指定で削除します(出庫前のみ)。
ボディパラメータ
shop
string
✓
店舗ドメイン(API キーで呼ぶ場合は省略できます)
stockTransferId
string (uuid)
✓
対象の移動 ID
barcodes
array
✓
削除する barcode の配列(1 件以上)
レスポンス
removedは実際に削除した行数です。既に無いbarcodeを指定しても数に含まれないだけでエラーにはなりません(再送に安全)。出庫後や却下済みは
not_editableを返します。
POST /api/routing/stock-transfer/update
ヘッダ(伝票番号・メモ)と、任意で明細をまとめて更新します。
ボディパラメータ
shop
string
✓
店舗ドメイン(API キーで呼ぶ場合は省略できます)
stockTransferId
string (uuid)
✓
対象の移動 ID
identificationNo
string | null
伝票番号。指定したキーだけ更新します
note
string | null
メモ。指定したキーだけ更新します
lines
array
明細(渡すと set-lines と同じ upsert。出庫前のみ有効)
挙動・冪等性
更新できるのは、出庫前、または 入庫検品中(
receiving)かつ修正依頼中(modificationRequest = requested) のときです。それ以外はnot_editableを返します。identificationNo/noteは リクエストに含めたキーだけを更新します(含めなければ現在値を維持)。明細(
lines)は出庫前のときだけ反映します(set-lines と同じ挙動)。
POST /api/routing/stock-transfer/approve
承認します。既定では 承認と同時に出庫(ship)まで実行します(スマレジの「承認=出庫」に合わせた挙動)。承認だけ行いたい場合は autoShip: false を指定します。
ボディパラメータ
shop
string
✓
店舗ドメイン(API キーで呼ぶ場合は省略できます)
stockTransferId
string (uuid)
✓
対象の移動 ID
autoShip
boolean
承認後に自動で出庫するか(既定 true)。false で承認のみ(READY_TO_SHIP で待機)
送り状が手書き(
labelMethod: "manual")の移動は、自動出庫では追跡番号を渡せないため出庫まで進みません(承認だけが確定し、shipにtracking_number_requiredが入ります)。autoShip: falseで承認し、ship にtrackingNumberを渡してください。
レスポンス
autoShip: falseのときは{ "ok": true, "approved": true, "ship": null }を返します。shipの中身は ship エンドポイントのレスポンスと同じです。
挙動・冪等性
承認できるのは承認待ち(
approvalがpending_request/pending)だけです。既にapprovedならnoop: trueを返します。それ以外の状態からの承認はillegal_transitionを返します。自動出庫が失敗しても承認は確定済みです(
approved=READY_TO_SHIP)。現場が在庫を整えてからshipを呼び直して回復できます。
POST /api/routing/stock-transfer/reject
承認を却下します(approval → rejected)。承認待ち(pending_request / pending)からのみ実行できます。進捗(progress)は pending_shipment のまま保たれます。
ボディパラメータ
shop
string
✓
店舗ドメイン(API キーで呼ぶ場合は省略できます)
stockTransferId
string (uuid)
✓
対象の移動 ID
挙動・冪等性
既に
rejectedならnoop: trueを返します(再送に安全)。承認待ち以外からの却下は
illegal_transitionを返します。却下後の移動は出庫できません。
POST /api/routing/stock-transfer/ship
出庫を確定します(progress → shipped)。出庫元が自社在庫の明細は、出庫元の棚を数量ぶん減らして販売可能在庫を再計算します。外部管理拠点の明細は数量を記録するだけです。
リクエスト
ボディパラメータ
shop
string
✓
店舗ドメイン(API キーで呼ぶ場合は省略できます)
stockTransferId
string (uuid)
✓
対象の移動 ID
lines
array
明細ごとの出庫指定(省略時は各明細の quantity を全量出庫)
lines[].barcode
string
✓
対象の商品 barcode
lines[].shippedQty
number
出庫数(省略時は明細の quantity)。計画数量 quantity を超えられません
lines[].originShelfCode
string
出庫元の棚コードの指定(自社在庫のとき優先的にこの棚から引きます)
trackingNumber
string
箱の追跡番号。送り状が手書き(labelMethod: "manual")の移動では必須です。ラベルを発行する移動("issue")では発行した番号を使うため、渡しても使いません
carrierCode
string
運送会社のコード(例 sagawa_regular)。trackingNumber と一緒に渡すと配送状況を追えます
レスポンス
totalShipped
出庫した合計数
selfItems[]
自社在庫として棚を動かした locationId × barcode
changed[]
販売可能在庫が変化した locationId × barcode(Source Inventory Webhook の通知対象)
label
ラベルを発行する移動(labelMethod: "issue")のときだけ付きます。status(generated = 今回発行 / reused = 前回発行したものを使った)・trackingNumber・carrierCode・print(印刷の結果。printed / skipped / failed)
挙動・冪等性
承認が要ります:
approvalがpending_request/pendingの移動を出庫しようとするとapproval_required、却下済みはrejectedを返します。送り状を先に用意します: ラベルを発行する移動は、出庫の前に配送ラベルを発行して印刷します。発行に失敗すると
label_generation_failedを返し、出庫しません(在庫は動きません)。原因を直してshipを呼び直してください。ラベルを二重に発行しません: ラベルの発行後に出庫が失敗した場合(在庫不足など)、呼び直すと前回のラベルをそのまま使います(
label.status: "reused")。印刷はやり直しません。印刷の失敗では出庫を止めません: ラベルは発行済みなので出庫は確定し、
label.print.statusがfailed/skippedになります。この値を確認してください。手書きの移動は
trackingNumberが無いとtracking_number_requiredを返します。売越を作りません(移動可能量ガード): 自社在庫の出庫元では、移動可能量 = 出庫元の棚合計 − 引き当て済み数を超える
shippedQtyをinsufficient_transferable_qtyで拒否します。例えば棚合計が 8・引き当て済みが 6 なら移動可能量は 2 で、shippedQty: 3は拒否されます(既存の受注引き当ての裏付け在庫を奪わないため)。計画数量が上限:
shippedQtyは明細のquantityを超えられません(超過は拒否されます)。冪等: 既に出庫済み(
shipped以降)の移動へのshipはnoop: trueを返し、棚を二重に減らしません。取消済み(canceled)へのshipはillegal_transitionを返します。
POST /api/routing/stock-transfer/print-label
出庫のときに発行した配送ラベルを、出庫元のプリンターでもう一度印刷します(紙詰まり・刷り直し用)。
ボディパラメータ
shop
string
✓
店舗ドメイン(API キーで呼ぶ場合は省略できます)
stockTransferId
string (uuid)
✓
対象の移動 ID
レスポンス
print.status
printed = 印刷した / skipped = 出庫元にプリンターの設定が無い / failed = 印刷できなかった(print.error に理由)
挙動・冪等性
何回でも呼べます。ラベルを発行し直さないので、追跡番号は変わらず、発行費用もかかりません。
ラベルをまだ発行していない移動は
label_not_issuedを返します。印刷できなかったときも HTTP
200でprint.statusがfailed/skippedになります。この値を確認してください。
POST /api/routing/stock-transfer/receive
入庫検品を記録します(shipped → receiving → received)。入庫先が自社在庫の明細は、入庫先の棚を受領数ぶん増やして販売可能在庫を再計算します。
リクエスト
ボディパラメータ
shop
string
✓
店舗ドメイン(API キーで呼ぶ場合は省略できます)
stockTransferId
string (uuid)
✓
対象の移動 ID
finalize
boolean
true を指定すると、残りがあっても移動を received(完了)で締めます(既定 false)
received
array
✓
受領した明細(0〜1,000 件)
received[].barcode
string
✓
対象の商品 barcode
received[].acceptedQty
number
✓
受け入れた数(0 以上)。この値までを絶対値で記録します
received[].rejectedQty
number
不良などで受け入れなかった数(0 以上)
received[].destinationShelfCode
string
入庫先の棚コード。入庫先が自社在庫で acceptedQty > 0 のときは必須
レスポンス
progressは、まだ受領しきっていなければreceiving、全明細が完了(またはfinalize: true)ならreceivedを返します。
挙動・冪等性
出庫後のみ:
shipped/receiving以外からの受領はillegal_transitionを返します。初回の受領でshipped → receivingに進みます。絶対値で記録(冪等):
acceptedQtyは「受け入れた総数」として上書きします。同じ値の再送は棚を二重に増やしません(既に反映済みの分を超えた差分だけ棚を増やします)。入庫先が自社在庫のときは
destinationShelfCodeが必須です(未指定はdestination_shelf_required)。棚を増やせない場合(別 barcode が占有等)は、その理由のerror_kindをそのまま返します。受領数の上限:
acceptedQty + rejectedQtyは出庫数(shippedQty)を超えられません(超過はinvalid_quantity)。完了判定: 全明細で
受け入れ + 不良 ≥ 出庫数になるとreceivedで締まります。分割受領の途中で締めたいときはfinalize: trueを使います。修正依頼中はロック: 修正依頼が開いている(
modificationRequest = requested)間の受領はmodification_requested_lockedで拒否されます(→ Modification Request)。
POST /api/routing/stock-transfer/cancel
業務上の取消です(progress → canceled)。出庫済み(shipped)の移動を取り消すと、出庫元の自社在庫の棚を元に戻します(復元)。
ボディパラメータ
shop
string
✓
店舗ドメイン(API キーで呼ぶ場合は省略できます)
stockTransferId
string (uuid)
✓
対象の移動 ID
挙動・冪等性
出庫前(
draft/pending_shipment)は即座に取消します。出庫済み(
shipped)は、出庫元の棚を復元してから取消します。復元に失敗した場合(元の棚が別 barcode で占有されている等の稀な競合)はrestore_failedを返し、取消を確定しません(在庫を静かに失わないため。棚を空けてから再実行してください)。receiving/receivedからは取消できません(not_cancelable)。受領が始まった移動は取り消せません。既に
canceledならnoop: trueを返します(再送に安全)。
POST /api/routing/stock-transfer/delete
出庫前の移動を 物理削除します。明細・修正依頼・棚ログも一緒に削除されます。
ボディパラメータ
shop
string
✓
店舗ドメイン(API キーで呼ぶ場合は省略できます)
stockTransferId
string (uuid)
✓
対象の移動 ID
挙動・冪等性
削除できるのは出庫前(
draft/pending_shipment)だけです。shipped/receiving/receivedは削除できません(not_deletable。取消は cancel を使ってください)。既に存在しない移動の削除は
noop: true(HTTP200)を返します(再送に安全)。
GET /api/routing/stock-transfer/list
移動の一覧を取得します。
クエリパラメータ
shop
✓
店舗ドメイン(API キーで呼ぶ場合は省略できます)
progress
進捗で絞り込み(draft / pending_shipment / shipped / receiving / received / canceled)
approval
承認で絞り込み(none / pending_request / pending / approved / rejected)
modificationRequest
修正依頼で絞り込み(none / requested / completed)
originLocationId
出庫元拠点で絞り込み
destinationLocationId
入庫先拠点で絞り込み
identificationNo
伝票番号で絞り込み
limit
取得件数(1〜200・既定 50)
offset
オフセット(既定 0)
レスポンス
新しい順(createdAt 降順)で返します。各行に拠点のラベル(originLocationLabel / destinationLocationLabel)と派生フェーズ(shopifyPhase)を付与します。
GET /api/routing/stock-transfer/get
移動 1 件を、明細付きで取得します。
クエリパラメータ
shop
✓
店舗ドメイン(API キーで呼ぶ場合は省略できます)
id
✓
移動 ID
レスポンス
ヘッダの各フィールドは list と同じ +
lines[]。該当が無ければ
404+error_kind: not_found。
GET /api/routing/stock-transfer/lines
移動 1 件の明細だけを取得します(ヘッダなし)。
クエリパラメータ
shop
✓
店舗ドメイン(API キーで呼ぶ場合は省略できます)
id
✓
移動 ID
レスポンス
各明細に商品情報(sku / productName / variantName)を付与します(barcode で商品マスターと照合。未登録は null)。
エラー
エンドポイント固有:
error_kind
Status
エンドポイント
意味
origin_unresolved / destination_unresolved
422
create / create-request
出庫元 / 入庫先の拠点参照が解決できない
same_location
422
create / create-request
出庫元と入庫先が同一拠点
not_editable
422
set-lines / remove-lines / update
出庫後などで明細を編集できない状態
not_deletable
422
delete
出庫後は削除できない(取消は cancel)
illegal_transition
422
approve / reject / ship / receive
その状態からは実行できない遷移(承認待ちでない・取消済み・未出庫 等)
label_not_available
422
create-request / ship
配送ラベルを発行できない組み合わせ(error が origin_has_no_label_config = 出庫元に発行設定が無い / destination_has_no_address = 入庫先に住所が無い)
tracking_number_required
422
ship / approve
手書きの送り状の移動に trackingNumber が無い
label_generation_failed
422
ship / approve
配送ラベルの発行に失敗(error に理由。出庫していない)
label_not_issued
422
print-label
配送ラベルをまだ発行していない
approval_required
422
ship
承認前(pending_request / pending)の移動は出庫できない
rejected
422
ship
却下済みの移動は出庫できない
insufficient_transferable_qty
422
ship
出庫数が移動可能量(棚合計 − 引き当て済み)を超過(売越防止。transferable / shelfSum / activeCount 付き)
invalid_quantity
422
receive
受け入れ + 不良が出庫数を超過(shipped 付き)
destination_shelf_required
422
receive
自社在庫の受領に destinationShelfCode が無い
modification_requested_locked
422
receive
修正依頼が開いている間は受領できない
not_cancelable
422
cancel
receiving / received からは取消できない
restore_failed
422
cancel
出庫済みの棚復元に失敗(取消を確定しない)
not_found
404
各エンドポイント / get
指定 ID の移動が存在しない(delete は ok:true の no-op)
受領時に棚を増やせない場合(同一棚に別 barcode が占有等)は、棚操作側の
error_kind(例shelf_occupied_by_different_barcode)をそのまま返します(silent skip しません)。noop: trueを伴うok: true(既にshipped/received/canceled/rejected/approvedへの再操作)はエラーではありません(冪等な再送)。共通エラー(
401/400/403/405/500/503)は Error Codes を参照。ボディのバリデーション失敗は400+invalid_input(details[]付き)です。
データモデル
sot.lm_stock_transfers— 移動ヘッダ。3 軸ステータス(progress/approval/modification_request)・出庫元/入庫先(origin_location_id/destination_location_id+ 削除耐性の snapshot)・拠点種別(origin_kind/destination_kind)・各遷移時刻・identification_no・チャネル外部 ID(smaregi_shipping_id/shopify_inventory_transfer_gid)・送り状の出し方(label_method)と発行したラベル(label_tracking_number/label_carrier_code/label_pdf_path/label_error)・note・作成者(created_by_staff_user_id)。UNIQUEshop + idempotency_key(冪等)/shop + smaregi_shipping_id/shop + shopify_inventory_transfer_gid。CHECK: 自己移動禁止・modification_request='requested'はreceivingのみ・shippedは承認前(pending_request)不可。sot.lm_stock_transfer_lines— 移動明細(barcode× 数量)。request_quantity/quantity(計画)/shipped_quantity(出庫)/received_accepted_quantity/received_rejected_quantity・origin_shelf_code/destination_shelf_code・自社在庫棚 ± の冪等マーカー(shelf_ship_applied_qty/shelf_receive_applied_qty)。UNIQUEstock_transfer_id + barcode/stock_transfer_id + line_no。CHECK:shipped_quantity <= quantity(計画超の出庫を全 writer で構造的に禁止=売越防止)・received_accepted + received_rejected <= shipped_quantity。sot.lm_stock_transfer_modification_requests— 入庫検品中の修正依頼(status:requested/completed/deleted・明細スナップショット)。1 伝票に active(requested)は 1 件(partial unique)。詳細は Modification Request。sot.lm_stock_transfer_shelf_logs— 移動が自社在庫棚を ± した追記ログ(reason:ship_out= 出庫元 − /receive_in= 入庫先 +)。棚在庫ログ本体とは別の attribution ログです。read(read view):
agent_read.lm_stock_transfers(ヘッダ +shopify_phase/line_count/total_quantity/received_quantity。顧客 PII・スタッフ ID・noteは含みません)/agent_read.lm_stock_transfer_lines(明細 +sku/product_name/variant_name)。
実際の数量(棚・販売可能在庫)が動くのは自社在庫(
source_system = 'mfc_inventory_ingest')の拠点だけで、ship/receiveが棚 ± と販売可能在庫の再計算を原子的に行います。外部管理拠点(Shopify / スマレジ)は数量を記録するのみで、実在庫は外部システムが正です。返送バルク(sot.lm_transfer_batches)とは独立した別テーブルです。
Last updated
Was this helpful?