1 Latte = 18g espresso bean + 200ml fresh milk + 1 paper cup. Saat order paid, trigger PostgreSQL kurangi tiap bahan dari inventory_item.qty_remaining. Refund-with-restore option re-add stok kalau item dikembalikan.

Setiap inventory_item bisa di-set par level (misal: minimum 2kg coffee bean). Saat qty_remaining ≤ par, dashboard tampilkan alert merah. Procurement bisa lihat list item yang perlu re-order pagi-pagi.

Setiap cabang punya inventory pool sendiri. Senopati boleh kehabisan croissant tanpa mempengaruhi Dago. Resep & menu master di pusat, tapi stok dihitung outlet-level.

Stock-take kuartalan? Tap "Adjust" pada inventory_item, masukkan qty fisik, beri alasan (misal: "Spoilage Mar 2026"). Setiap adjust tulis audit row supaya owner tahu siapa rubah, kapan, kenapa.

Saat terima stok, isi opsional harga per unit (mis. Rp 145.000/kg) — Posz hitung ulang harga rata-rata tertimbang otomatis. Hasilnya: laporan Profit (gross / COGS / gross-profit) di Dashboard pakai cost yang akurat lintas batch, bukan harga terakhir saja.