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 |
POS sale
Section titled “POS sale”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).
Transfer antar cabang
Section titled “Transfer antar cabang”POST /admin/inventory/transfers — transferBetweenBranches() di
inventory.repository.drizzle.ts:
FOR UPDATEbaris source.- Deduct dengan optimistic version.
- Upsert target (
onConflictDoUpdate). - Dua
stock_movementstypetransfer(out + in) secara atomik.
Contoh E2E terverifikasi: transfer 3 unit Pusat → Banjarbaru (Pusat 7→4, Banjarbaru 3→6).