engineering docs

Inventory database

inventory memisahkan definisi item dari stok fisik. InventoryItem mengarah ke product catalog melalui productId, sedangkan quantity berada pada warehouse/batch.

Model dan ownership

  • Warehouse dan WarehouseBin adalah lokasi organisasi.
  • InventoryItem adalah SKU/unit dengan status, minStock, barcode, dan valuation method.
  • WarehouseStock adalah aggregate quantity unik per warehouse dan item.
  • InventoryBatch menyimpan expiration dan remaining quantity.
  • InventoryMovement adalah ledger event; perlakukan sebagai immutable.
  • InventoryTransfer mengoordinasikan perpindahan antar warehouse.

Aturan mutasi stok

Jangan mengubah quantity tanpa membuat movement yang mencatat previousStock, currentStock, actor, reference, dan warehouse. Gunakan atomic update atau optimistic concurrency untuk mencegah lost update. WarehouseStock memiliki unique pair [warehouseId, inventoryItemId].

Valuation method yang tersedia adalah FIFO, LIFO, FEFO, dan average cost. FEFO harus memilih batch dengan expiration terdekat yang masih memiliki quantity.

Cross-database reference

Validasi organizationId melalui runner dan productId melalui catalog sebelum membuat inventory item. Inventory tidak boleh menghapus product catalog; archive dilakukan pada owner domain.