Lewati ke konten

Stok & Inventori

Stok dikelola dalam tiga lapis:

Lapis Peran
product_variants.stock Saldo global per bisnis (POS deduction)
stock_per_branch Saldo per cabang (transfer antar cabang)
stock_movements Ledger append-only dengan unit_cost snapshot

saveFull() memotong stock dengan optimistic locking (field version), menulis movement out dengan referenceType="order_create", dan unit_cost dihitung rata-rata tertimbang dari batch aktif (FIFO).

voidOrder() me-restore stock + movement in (order_void), lalu jurnal pembalik diposting (best-effort).

POST /admin/inventory/transfers — transferBetweenBranches() di inventory.repository.drizzle.ts:

  1. FOR UPDATE baris source.
  2. Deduct dengan optimistic version.
  3. Upsert target (onConflictDoUpdate).
  4. Dua stock_movements type transfer (out + in) secara atomik.

Contoh E2E terverifikasi: transfer 3 unit Pusat → Banjarbaru (Pusat 7→4, Banjarbaru 3→6).