Di catatan tertulis sisa 40 pcs, tapi saat pelanggan datang ternyata rak kosong. Di sisi lain, gudang penuh barang yang sudah tiga bulan tidak bergerak dan modal Anda ikut tertahan di sana. Kalau dua situasi ini terasa akrab, masalahnya hampir pasti ada di cara stok dicatat, bukan di jumlah barangnya.
Artikel ini membahas cara mengelola stok barang secara sistematis: konsep dasar yang perlu dipahami, langkah beralih dari buku atau Excel ke sistem inventory, cara menghitung kapan harus belanja ulang, sampai desain database sederhana bila Anda developer yang ingin membangunnya sendiri.
Masalah Umum dalam Pengelolaan Stok
Pencatatan manual di buku atau spreadsheet bukan hal yang salah, terutama di awal usaha. Masalah muncul ketika jumlah barang, transaksi, dan orang yang mencatat bertambah. Gejala yang paling sering terlihat:
- Data stok tidak akurat. Angka di catatan berbeda dengan barang di rak karena ada transaksi yang lupa dicatat.
- Sulit melacak barang masuk dan keluar. Saat ada selisih, tidak ada jejak siapa yang mengubah angka dan kapan.
- Stockout. Barang laris habis sebelum Anda sadar perlu belanja ulang.
- Overstock. Barang lambat terus dibeli karena tidak ada data kecepatan penjualan.
- Human error. Salah ketik satu digit di rumus Excel bisa merusak seluruh rekap bulan itu.
Prinsip Dasar: Stok Adalah Hasil Mutasi, Bukan Angka yang Diketik
Inilah perbedaan terpenting antara pencatatan manual dan sistem inventory yang benar. Di Excel, banyak orang langsung mengedit kolom "sisa stok". Di sistem yang baik, angka stok tidak pernah diedit langsung. Stok adalah hasil penjumlahan semua mutasi: barang masuk dari pembelian, barang keluar karena penjualan, retur, barang rusak, dan penyesuaian hasil opname.
Dengan pendekatan ini, setiap angka punya asal-usul. Jika stok sabun cuci tiba-tiba minus 6, Anda bisa menelusuri baris mutasi mana yang menyebabkannya. Konsep ini sering disebut kartu stok atau stock ledger.
Perbandingan Metode Pencatatan
| Aspek | Buku manual | Excel/Spreadsheet | Sistem inventory |
|---|---|---|---|
| Jejak perubahan | Tergantung kerapian tulisan | Mudah tertimpa | Tercatat per transaksi dan per user |
| Stok real-time | Tidak | Hanya jika selalu diperbarui | Ya, berubah tiap transaksi |
| Peringatan stok menipis | Tidak ada | Bisa dengan conditional formatting | Notifikasi otomatis |
| Banyak pengguna sekaligus | Sulit | Rawan bentrok versi file | Didukung, dengan hak akses |
| Laporan | Rekap manual | Pivot table, perlu keahlian | Laporan otomatis |
| Cocok untuk | Di bawah 50 SKU, satu pencatat | Puluhan hingga ratusan SKU | Ratusan SKU, banyak staf atau cabang |
Batas jumlah SKU di atas hanya patokan kasar, bukan aturan baku. Faktor yang lebih menentukan adalah berapa orang yang mencatat dan seberapa sering transaksi terjadi.
Fitur Inti yang Perlu Ada di Sistem Inventory
- Manajemen stok barang: data produk, satuan, harga beli, harga jual, dan lokasi simpan.
- Tracking barang masuk dan keluar: setiap mutasi punya tanggal, jenis, jumlah, referensi dokumen, dan nama petugas.
- Notifikasi stok menipis: peringatan saat stok menyentuh titik pemesanan ulang.
- Laporan inventory otomatis: nilai persediaan, barang terlaris, dan barang yang tidak bergerak.
- Manajemen kategori produk: memudahkan analisis per kelompok barang dan pencarian.
Langkah Beralih ke Sistem Inventory
- Rapikan master data dulu. Buat daftar barang dengan kode unik (SKU), nama baku, satuan, dan kategori. Hindari dua nama untuk barang yang sama, misalnya "Aqua 600" dan "Air mineral 600ml".
- Lakukan stock opname awal. Hitung fisik seluruh barang pada satu hari yang sama, idealnya setelah toko tutup. Angka ini menjadi saldo awal.
- Input saldo awal sebagai mutasi. Jangan ketik langsung ke kolom stok. Catat sebagai mutasi jenis "saldo awal" agar riwayatnya tetap utuh.
- Tetapkan aturan pencatatan. Barang masuk wajib dicatat saat diterima, bukan saat dibayar. Barang rusak dicatat sebagai mutasi keluar dengan alasan.
- Atur hak akses. Kasir hanya mencatat penjualan, staf gudang mencatat penerimaan, dan hanya pemilik yang boleh membuat penyesuaian opname.
- Jalankan paralel 1–2 minggu. Tetap simpan catatan lama sebagai pembanding sampai Anda yakin angka di sistem konsisten.
Menghitung Kapan Harus Belanja Ulang
Notifikasi stok menipis hanya berguna jika batasnya masuk akal. Rumus yang umum dipakai adalah titik pemesanan ulang (reorder point):
Reorder point = (rata-rata penjualan per hari x lead time hari) + stok pengaman
Contoh:
Rata-rata terjual = 12 pcs/hari
Lead time supplier = 4 hari
Stok pengaman = 15 pcs
Reorder point = (12 x 4) + 15 = 63 pcs
Artinya, ketika stok menyentuh 63 pcs, Anda sudah harus memesan. Angka di atas hanyalah contoh. Stok pengaman bisa diperbesar untuk barang yang supplier-nya sering telat, dan diperkecil untuk barang yang mudah dibeli di mana saja.
Untuk Developer: Desain Tabel dan Query Stok
Jika Anda membangun sistem inventory dengan Laravel, struktur minimal yang aman adalah memisahkan tabel produk dan tabel mutasi. Sebelum membuat migration, ada baiknya menggambar relasinya terlebih dahulu seperti dibahas di panduan merancang ERD sederhana.
CREATE TABLE products (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
sku VARCHAR(50) NOT NULL UNIQUE,
name VARCHAR(150) NOT NULL,
category_id BIGINT UNSIGNED NULL,
unit VARCHAR(20) NOT NULL DEFAULT 'pcs',
reorder_point INT NOT NULL DEFAULT 0,
created_at TIMESTAMP NULL,
updated_at TIMESTAMP NULL
);
CREATE TABLE stock_movements (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
product_id BIGINT UNSIGNED NOT NULL,
type ENUM('opening','in','out','return','damage','adjust') NOT NULL,
qty INT NOT NULL, -- positif = masuk, negatif = keluar
reference VARCHAR(50) NULL, -- no. faktur / no. nota
user_id BIGINT UNSIGNED NOT NULL,
note VARCHAR(255) NULL,
created_at TIMESTAMP NULL,
INDEX (product_id, created_at)
);
Stok saat ini cukup dihitung dari jumlah mutasi. Contoh query Eloquent untuk mencari barang yang sudah di bawah titik pemesanan ulang:
$lowStock = Product::query()
->withSum('movements as stock', 'qty')
->get()
->filter(fn ($p) => (int) $p->stock <= $p->reorder_point);
Untuk data besar, simpan kolom stock_cached di tabel produk yang diperbarui di dalam DB::transaction() setiap kali mutasi dibuat, agar halaman daftar tidak menjumlahkan jutaan baris. Pola optimasi semacam ini dibahas lebih lanjut di artikel optimasi query Eloquent. Pengecekan stok menipis bisa dijadwalkan harian lewat scheduler Laravel lalu dikirim sebagai notifikasi email atau Telegram.
Kesalahan yang Sering Terjadi dan Cara Memperbaikinya
- Mengedit angka stok langsung. Perbaikan: selalu lewat mutasi "penyesuaian" dengan alasan tertulis.
- Opname hanya setahun sekali. Perbaikan: lakukan cycle count, yaitu menghitung sebagian kecil barang setiap minggu secara bergiliran, dengan prioritas barang bernilai tinggi.
- Barang retur dicampur barang baru tanpa dicatat. Perbaikan: buat jenis mutasi khusus retur, dan pisahkan retur rusak sebagai mutasi barang rusak.
- Semua staf punya akses penuh. Perbaikan: batasi hak edit dan aktifkan log aktivitas per user.
- Tidak pernah membaca laporan. Perbaikan: jadwalkan 15 menit tiap minggu untuk melihat barang terlaris dan barang yang tidak bergerak lebih dari 60 hari.
Checklist Pengelolaan Stok Mingguan
- Semua penerimaan barang minggu ini sudah dicatat dengan nomor faktur supplier.
- Cycle count untuk 10–20 SKU bergiliran sudah dilakukan.
- Selisih opname sudah dicatat sebagai mutasi penyesuaian beserta alasannya.
- Daftar barang di bawah titik pemesanan ulang sudah ditindaklanjuti.
- Barang yang tidak bergerak lebih dari 60 hari sudah ditandai untuk promo atau retur ke supplier.
- Hak akses staf yang keluar atau pindah tugas sudah diperbarui.
Kapan Membangun Sendiri, Kapan Memakai Aplikasi Jadi
Bila alur bisnis Anda standar, yaitu beli, simpan, dan jual, aplikasi siap pakai biasanya lebih cepat diterapkan. Membangun sendiri masuk akal jika Anda punya alur khusus seperti produksi, konsinyasi, atau banyak gudang dengan transfer antarlokasi. Pertimbangan lengkapnya ada di artikel beli atau bikin sendiri source code. Jika ingin titik awal berbasis Laravel, katalog GudangCode juga memuat beberapa contoh aplikasi inventory yang bisa dipelajari strukturnya.
Apa pun alat yang Anda pilih, kuncinya tetap sama: setiap perubahan stok harus punya jejak, opname dilakukan rutin, dan angka di laporan benar-benar dipakai untuk memutuskan apa yang dibeli minggu depan.