Picking List — ピッキングリスト
ルーティング済みの注文(Routing で出荷指示まで生成された注文)から、在庫ロケーション単位の「何を・いくつピックするか」 を商品名付きで生成します。生成元は永続化された routing データ(sot.lm_routing_orders + sot.lm_routing_decisions)で、format=json なら構造化データ、format=pdf なら出荷元ロケーション単位の作業指示書 PDF(スキャン用 CODE128 バーコード・商品画像・1 点 1 行のピックチェック)を Storage に保存します。
ピックの素材は applied な unit 単位 decision(
selected_location_id= 引き当て先在庫ロケーション)です。引き当て不能だった unit はunpickable[](ピック対象外)として明示します。配送ラベル発行・物理印刷はピッキングリストとは別の出荷実行ステップです(本エンドポイントには含みません)。
Base URL
https://api.lmile.io· 認証x-ingest-secretヘッダー(詳細) ·shopはリクエストボディに含めます(省略するとキーのアカウント)
エンドポイント
POST
/api/routing/picking-list
ルーティング済み1 注文からピッキングリストを生成(JSON / PDF)
POST
/api/routing/picking-list/batch
複数注文を在庫拠点単位に統合した 1 つのピッキングリストを生成(JSON / PDF / CSV)
入力フィールドは camelCase(
sourceSystem/externalOrderRef/routingOrderId/routingOrderIds/format)です。
POST /api/routing/picking-list
対象注文を routingOrderId、または sourceSystem + externalOrderRef で指定します(routingOrderId 優先)。format を省略すると JSON を返します。
リクエスト
POST https://api.lmile.io/api/routing/picking-list
x-ingest-secret: {INGEST_SECRET}
Content-Type: application/json{
"shop": "demo-store.myshopify.com",
"sourceSystem": "shopify",
"externalOrderRef": "1001",
"format": "json"
}ボディパラメータ
shop
string
店舗ドメイン(省略するとキーのアカウント)
routingOrderId
string (uuid)
△
routing order の id。指定時はこれで解決(優先)
sourceSystem
string
△
カートの種別。routingOrderId 未指定時は externalOrderRef とセットで必須
externalOrderRef
string
△
カート側の注文番号。routingOrderId 未指定時は sourceSystem とセットで必須
format
string
json(既定)または pdf
locationId
string (uuid)
format=pdf 時のみ。指定した出荷元ロケーションの単票 PDF を本体で返す。省略時は全ロケーション分を生成し JSON で URL 一覧を返す
routingOrderId、またはsourceSystemとexternalOrderRefの両方、のいずれかが必須です。どちらも欠けると400 invalid_input。
レスポンス(format=json)
pickingList.locations[]
在庫ロケーション単位のピック群。locationId / locationLabel と items[](barcode / sku / productName / imageUrl / quantity / properties)+ totalQuantity
pickingList.unpickable[]
引き当て不能(在庫不足等)でピック対象外の明細。barcode / sku / productName / imageUrl / quantity / reason(no_stock_anywhere 等)/ properties
pickingList.totals
locationCount / itemKinds(location×barcode×properties 種類数)/ totalQuantity / unpickableQuantity
pickingList.shipTo
配送先サマリ(氏名・国・都道府県・市区町村・郵便番号。詳細住所/電話/email は含めない)
pickingList.generatedAt
生成時刻(ISO 8601, UTC)
レスポンス(format=pdf)
PDF は 出荷元ロケーション単位で 1 枚ずつ(= 1 出荷先 = 1 作業指示書)生成し、picking-lists bucket(public read)に保存します。
(a) locationId 指定時 — その単票を application/pdf 本体で返し、公開 URL を X-Picking-List-Url ヘッダーに載せます(保存と返却の両方)。
(b) locationId 省略時 — 全ロケーション分を生成・保存し、URL 一覧を JSON で返します。
PDF の内容・体裁(mfc の運用フォーマットを参考):
A4 縦。日本語は IPAex ゴシックをサブセット埋め込み(テキストは選択・抽出可能)。
上部: 注文スキャンバーコード(CODE128,
externalOrderRefをエンコード) + 注文番号 + 出荷元ラベル + ソース/タグ/合計点数 +(再発行時)印刷回数。右に Ship To ブロック。明細: 数量分を 1 点 1 行に展開し、
商品画像(sot.products.primary_image_url。取得不可は「No Image」枠)/SKU・商品名・barcode/ピッキングラベル貼付枠(空欄)/Pickチェックボックス。propertiesのある明細はキー: 値を「 / 」区切りの 1 行で表示(収まらない分は末尾省略)。保存 path は
{shop}/picking_{externalOrderRef}_{locationId先頭8}_{YYYYMMDDHHMMSS}.pdf。
挙動・冪等性
生成元は routing データ: 出力は常に
sot.lm_routing_decisions(decision_status = applied)の現在値から組み立てます。売越し・再引き当て(Oversell / Reallocate)後に再生成すると最新の引き当て先が反映されます。ロケーション単位の分割: PDF は出荷元(在庫ロケーション)ごとに 1 枚。1 注文が複数拠点に分割された場合は拠点数ぶんの作業指示書になります。
明細単位 properties: Routing の
lines[].properties(刻印テキスト等)はsot.lm_routing_decisions.line_propertiesから各 item に透過します。同一barcodeでもpropertiesが異なれば別行として集計・表示します(なしはproperties: null)。非冪等(再発行前提): 生成のたびに新しい PDF をタイムスタンプ付きファイル名で保存し、
sot.lm_picking_listsに 1 行追記します(再印刷の履歴を残す append-only ログ)。冪等なのは入力となる routing データ側です。印刷回数: 当該注文の過去 PDF 生成回数 +1 を PDF 上に表示(2 回目以降)。
商品名・画像解決:
barcode→sot.products(product_name/sku/primary_image_url)。未登録 barcode はnull。画像は jpg/png のみ埋め込み、取得不可(webp 等含む)は「No Image」枠。ロケーション名:
sot.locations.display_label。
POST /api/routing/picking-list/batch
出荷作業一覧で複数の注文を選択して、在庫拠点単位に統合した 1 つのピッキングリストを生成します(LM-1053)。対象は routingOrderIds[](routing order の id 配列)で指定します。選択した注文の applied decision を在庫ロケーション横断でまとめ、各明細に注文番号とスキャン用 CODE128 バーコードを付けます。format=pdf は統合 PDF を 1 つ、format=csv は共有用 CSV を、いずれも Storage に保存して公開 URL を返します(本体ではなく URL)。
リクエスト
ボディパラメータ
shop
string
店舗ドメイン(省略するとキーのアカウント)
routingOrderIds
string[] (uuid)
✓
対象 routing order の id 配列(1〜500 件)
format
string
pdf(既定)/ csv / json
locale
string
帳票の表示言語。ja(既定)/ en。見出しと拠点名に効きます(商品名は実データなので変わりません)
labelShipmentIds
string[] (uuid)
配送ラベルを同じ PDF の後ろに綴じる出荷の id(最大 100 件)。format=pdf のときだけ効きます。省略すると従来どおりピッキングリストだけを返します
レスポンス(format=pdf / format=csv)
統合 PDF / CSV を picking-lists bucket(public read)に保存し、公開 URL を JSON で返します。missing(見つからなかった id)・unrouted(applied decision が無い注文)は silent skip せず応答に含めます。
url
生成物(PDF / CSV)の公開 URL。新規タブで開く・共有する想定
storagePath
Storage 上の保存パス
totals
orderCount(対象になった注文数)/ locationCount / itemKinds / totalQuantity / unpickableQuantity
missing
見つからなかった routingOrderId(shop 不一致 / 不在)
unrouted
見つかったが applied decision が無い注文(routingOrderId / orderLabel)
labelsIncluded
PDF の後ろに綴じた配送ラベルの枚数(labelShipmentIds 未指定なら 0)
labelsSkipped
綴じられなかった出荷の id。ラベル未発行 / 破棄済み / 指定した注文に属さない出荷。silent skip しません
レスポンス(format=json)
PDF の内容・体裁:
A4 縦、日本語は IPAex ゴシックをサブセット埋め込み。
上部に
PICKING LIST (一括)+ 生成時刻 + 注文数 / 拠点数 / 合計点数。missing/unrouted/ 引当不能があれば注意行を表示。在庫拠点ごとにセクション(
拠点: {ラベル}(計 N 点))→ 明細行:注文番号(+ 刻印)/商品画像/SKU・商品名/商品バーコード(CODE128, 数字併記) /数量/Pickチェック。保存 path は
{shop}/batch_{YYYYMMDDHHMMSS}_{先頭注文id8}_{注文数}.pdf|csv。
CSV の列(1 行 = 1 明細・拠点順): No. / 注文番号 / 拠点 / SKU / barcode / 商品名 / 数量 / 刻印(_Letters の実値)。Excel 対応の BOM 付き。
挙動・冪等性
生成元は routing データ: 単一版と同じく
sot.lm_routing_decisions(applied)の現在値から組み立てます。在庫拠点で統合: 選択した全注文の明細を
selected_location_id単位でまとめ、拠点内は注文番号 → 商品名 → propertiesで決定的にソート。同一注文×同一barcode×同一propertiesは数量に集計、刻印違いは別行。部分結果を明示:
missing(不在 id)・unrouted(未ルーティング注文)・unpickable[](引き当て不能明細)は応答・PDF に必ず出し、silent skip しません。非冪等: 生成のたびにタイムスタンプ付きで Storage 保存(同名は上書き)。単一版と異なり
sot.lm_picking_listsへの追記は行いません(複数注文にまたがるため。生成物は URL が成果物)。配送ラベルを綴じる:
labelShipmentIdsを送ると、その出荷の発行済みラベル PDF を ピッキングリストの後ろに指定順で追加した 1 つの PDF を返します(現場が 1 枚として開いて印刷できるように)。対象はroutingOrderIdsに属する出荷だけで、他注文のラベルは綴じません。ラベル未発行 / 破棄済み / 読み出せなかった出荷はlabelsSkippedに載せます(枚数はlabelsIncluded)。ラベルが 1 枚も綴じられなくても、ピッキングリスト単体の PDF として成功で返るので、綴じられたかどうかはlabelsIncludedで判定してください。
エラー
エンドポイント固有:
400
バリデーション失敗(注文キー欠落含む)
{ "ok": false, "error": "invalid_input", "details": [{ "path": "externalOrderRef", "message": "..." }] }
404
対象 routing order が無い
{ "ok": false, "error_kind": "not_found", "error": "routing order not found for shop" }
422
applied decision が無い(未ルーティング)
{ "ok": false, "error_kind": "not_routed", "error": "routing order has no applied decisions (not routed yet)", "routingOrderId": "...", "status": "received" }
422
指定 locationId にピック対象が無い
{ "ok": false, "error_kind": "location_not_in_picking_list", "error": "specified location has no pickable units in this order" }
404
(batch)対象注文が 1 件も無い
{ "ok": false, "error_kind": "not_found", "error": "no routing orders found for shop", "missing": ["..."] }
422
(batch)選択注文にピック対象が 1 点も無い
{ "ok": false, "error_kind": "not_routed", "error": "selected orders have no pickable units", "missing": [...], "unrouted": [...] }
500
フォント読込失敗(picking_list_font_unavailable)
{ "ok": false, "error": "internal_server_error" }
引き当て不能の明細はエラーではなく、pickingList.unpickable[] に reason 付きで返ります(正常処理を止めません)。共通エラー(401 / 400 / 403 / 405 / 500 / 503)は Error Codes を参照。
データモデル
sot.lm_picking_lists— ピッキングリスト生成ログ(append-only。routing_order_id/format/pdf_url/storage_path/payload+ 集計列location_count/item_kinds/total_quantity/unpickable_count/generated_at)。単一注文版のみ追記(batch は複数注文にまたがるため追記しない)。入力(read):
sot.lm_routing_orders(注文ヘッダ・order_name)/sot.lm_routing_decisions(applied unit)/sot.products(商品名・SKU・primary_image_url)/sot.locations(ラベル)PDF / CSV 保存先: Storage bucket
picking-lists(public read)公開 view(read):
public.lm_v_picking_lists
ピッキングリストは routing 結果の 派生表現 です。引き当てロジックそのものは Routing を参照してください。
Last updated
Was this helpful?