在庫:照会、調整、棚卸、振替
最終更新 2026-10-13
デスクトップ/モバイルでの在庫照会、直接調整、循環棚卸(ABC自動棚卸含む)、倉庫間振替。
WMS在庫は追記専用台帳(wms_inventory_ledger)を唯一の真実の源とします:すべての在庫異動は正負のqty_changeを持つ台帳行を書き、残高を直接編集しません。残高プロジェクションはシステムが同期維持し、台帳はDB層でUPDATE/DELETEを禁止しています。
在庫照会#
- デスクトップ WMS → Inventory:明細ビュー(SKU/ロケーション/ステータス/ロット/シリアル/チャネル等で絞込)と集計ビュー(商品+ステータス+種別で数量集計)。
- モバイル在庫ページ:SKU/製品名で検索、カードにSKU/品名/ロケーション/数量を表示(照会専用)。
- ロット在庫は有効期限の昇順(FEFO)で表示。期限アラート(expiry-alerts?days=90)はavailable・qty>0・期限≤今日+daysのロットをdays_to_expiry付きで一覧表示。
在庫調整(直接調整モード)#
在庫調整は台帳に直接記帳します——「調整伝票」のステートマシンや承認フローはありません。現在の入口はAPI(POST /api/wms/inventory/adjust)のみで、デスクトップの専用入力画面は未提供、wms.inventory_adjust権限が明示的に必要です。
- 必須:warehouse_id / location_id / item_id / reason_code(damage/lost/found等の自由文、原因コードのマスターなし)。
- 数量は二択:qty_after(目標値へ調整)またはqty_delta(増減、非ゼロ)。両方/両方なしは検証エラー、qty_afterでdelta=0なら{adjusted:false}を返し台帳に書きません。
- ステータスはavailable / hold / damagedのみ(既定available)。負の調整は先に有効在庫を検証(不足でWMS_STOCK_001)、棚卸ロック中のロケーションはLOCATION_LOCKEDで拒否。
- transaction_type=adjustの台帳行を1件記帳、qty_change=delta(正=増加、負=減少)、reason_codeは必須。
棚卸#
- タスク作成(デスクトップ/API):scopeはcycle(循環棚卸)/ full(在庫ありのロケーション×商品から自動生成、上限5000行)/ spot(抜取)の3択、count_typeはblind/open(既定open)。作成時に残高からsystem_qtyスナップショットを記録、未完了棚卸タスクのロケーションと重複すると作成拒否(ロックの発動点)。
- モバイルで実行:ロケーション/製品ごとに行に実棚数を入力→enter-countで1行ずつ送信(棚卸済行はシステム数/実棚数/差異を表示、再入力でrecounted)。タスクはpending/assigned→in_progress。
- デスクトップで承認:approveで承認(counted/recounted→approved)、却下でpendingに戻し(実棚数・差異をクリア)再棚卸。
- 転記:postはapproved行のみ処理(差異ゼロの行はスキップ)。棚卸増はadjust(reason_code=found)、棚卸減はadjust(reason_code=lost)、reference_type=count_task。全approved行の処理完了でタスク完了、ロック自動解除。
- ABC自動棚卸:POST /api/wms/count-tasks/abcで商品のabc_classの棚卸間隔到来時にcycleタスクを自動生成。既定A=7日/B=30日/C=90日、倉庫別(abc_interval_a/b/c_days)や呼出時(interval_days)で上書き可。cron/手動で起動。
倉庫間振替#
振替は伝票式フロー(起票→提出→承認→出庫→入庫)で、現在はAPIのみ(デスクトップの伝票画面は未提供)。番号形式TRF-YYYYMMDD-XXXX。同一倉庫内のロケーション間移動も可(ロケーションが異なればOK)。
- 作成→draft、submit→submitted。
- approve:承認→approved(各行の出元ロケーション有効在庫を検証、不足でWMS_STOCK_001)、却下→rejected。
- ship→in_transit:有効在庫を再検証→transfer両建てを記帳(出元ロケーションavailable −数量 / 同ロケーションin_transit +数量)。
- receive→completed:出元ロケーションin_transit −数量 / 移動先ロケーションavailable +数量、明細行pending→done。cancelはdraft/submitted/approvedのみ可、in_transitは入荷完了でのみ終了。
在庫ステータス#
available→出庫/ピック引当でallocated→出荷でshipped。品質/例外保留はhold、破損はdamaged、振替出庫後は出元ロケーションがin_transit。調整で指定可能なのはavailable/hold/damagedのみ。
棚卸ロック:未完了の棚卸タスク対象ロケーションはロックされ、調整/移動/補充格納はLOCATION_LOCKEDで拒否されます。タスク完了/キャンセルで自動解除。