Lewati ke konten utama

Master Produk & Inventaris

Katalog Master Produk adalah sumber kebenaran tunggal (Single Source of Truth / SSOT) untuk seluruh barang, jasa, dan paket yang diperjualbelikan atau disimpan oleh perusahaan Anda. Data pada master produk akan mengontrol perilaku transaksi di kasir POS, kalkulasi persediaan gudang, perhitungan HPP (Harga Pokok Penjualan), hingga pengenaan faktur pajak.


1. Rincian Formulir Master Produk

Saat Anda membuka menu Produk > Master Produk dan menekan tombol Tambah Produk Baru, formulir berikut akan ditampilkan:

Nama FieldTipe DataWajib?Keterangan & Aturan Validasi
Nama Produk (name)String (Maks. 255)WajibNama resmi produk yang akan tercetak di struk kasir, invoice B2B, dan kartu stok gudang. Contoh: Kopi Susu Gula Aren 250ml.
Kode Produk / SKU (code)String (Sequence)OpsionalKode SKU unik barang. Jika dikosongkan saat simpan, sistem secara otomatis menerbitkan nomor urut dengan format PRD-xxxxxx.
Tipe Produk (productType)EnumWajibMenentukan bagaimana stok diperlakukan: storable, service, consu, bundle, atau recipe. (Lihat penjelasan mendalam di bawah).
Harga Jual Standar (price)Decimal (15,2)WajibHarga jual dasar sebelum diskon. Digunakan sebagai harga patokan default pada Sales Order dan POS.
Harga Pokok / Modal (defaultCost)Decimal (15,2)OpsionalEstimasi HPP awal per unit. Pada barang berjenis storable, nilai ini akan terus diperbarui secara otomatis saat penerimaan barang dari Purchase Order.
Satuan Dasar (baseUomId)Relasi (UoM)Wajib*Satuan hitung terkecil stok (Unit of Measure), misalnya Pcs, Kg, Liter. Wajib diisi jika produk bertipe storable/bundle/recipe/consu.
Kategori Produk (categoryId)Relasi (Category)OpsionalKlasifikasi produk untuk mempermudah filter tab di kasir POS dan pemilihan lingkup audit Stock Opname.
Lokasi Default (defaultLocationId)Relasi (Location)OpsionalLokasi gudang atau rak standar tempat barang disimpan dan dipotong saat transaksi penjualan terjadi.
Kode Barcode (barcode)StringOpsionalKode batang standar (EAN-13, UPC, Code 128) untuk pemindaian instan oleh barcode scanner kasir fisik. Wajib unik per tenant.
Tarif PPN (taxRate)Decimal (5,2)OpsionalPersentase pajak pertambahan nilai yang berlaku (misal: 11.00 untuk PPN 11%). Default bernilai 0.
Termasuk Pajak (taxIncluded)Boolean (Checkbox)OpsionalCentang jika price sudah merupakan harga bersih termasuk PPN (Gross Pricing). Biarkan tidak tercentang jika PPN dihitung di luar harga (Net Pricing).
Izin Stok Minus (allowNegativeStock)Boolean (Checkbox)OpsionalMenentukan apakah barang boleh dijual saat saldo fisik di sistem bernilai 0. Default: Tidak Aktif (False).
Titik Pesan Ulang (reorderPoint)Decimal (15,3)OpsionalAmbang batas stok minimum (Safety Stock). Jika stok jatuh di bawah angka ini, sistem menampilkan peringatan kebutuhan pengadaan.
Tampil di POS (availableInPos)Boolean (Checkbox)OpsionalCentang agar produk muncul di grid katalog layar kasir POS.

2. Apa yang Perlu Diperhatikan dan Kenapa (Why)

A. Kenapa Memilih Tipe Produk yang Tepat Sangat Krusial?

Sistem menyediakan 5 klasifikasi tipe produk:

  1. storable (Barang Berstok Fisik):
    • Perilaku: Menggerakkan mutasi stok fisik di gudang. Setiap penjualan atau pembelian akan menerbitkan pergerakan stok (Stock Move).
    • Validasi: Sistem memeriksa ketersediaan saldo sebelum pengiriman dilakukan.
  2. service (Jasa / Layanan):
    • Perilaku: Tidak memiliki stok fisik di gudang dan tidak pernah menerbitkan mutasi persediaan. Cocok untuk ongkos kirim, jasa perbaikan, atau jasa pasang.
    • Pemanfaatan: Pada perakitan bundle, jasa dapat dimasukkan sebagai komponen biaya tenaga kerja perakitan.
  3. consu (Barang Habis Pakai / Konsumabel):
    • Perilaku: Digunakan untuk barang operasional (misalnya lakban, kardus packing, atau kertas printer). Pergerakan stok dicatat, tetapi saldo habis tidak akan memblokir transaksi pengiriman.
  4. bundle (Paket Kompilasi Fisik):
    • Perilaku: Produk paket yang memiliki stok fisik tersendiri dan harus dirakit terlebih dahulu dari komponen-komponen penyusunnya melalui formulir Perakitan Bundle (Assembly).
  5. recipe (Menu Resep F&B):
    • Perilaku: Produk kuliner atau racikan instan (misal Secangkir Kopi). Produk ini tidak perlu dirakit terlebih dahulu; saat kasir POS menjual 1 unit recipe, sistem secara otomatis memotong saldo stok bahan baku penyusunnya (misal: 15 gr biji kopi, 150 ml susu) secara real-time.
Immutabilitas Tipe Produk

Setelah produk disimpan dan terlibat dalam transaksi operasional (sudah memiliki riwayat mutasi stok atau invoice penjualan), tipe produk tidak dapat diubah kembali. Mengubah tipe barang dari berstok menjadi jasa di tengah jalan akan merusak integritas pembukuan kartu stok dan buku besar keuangan.


B. Kenapa Satuan Dasar (baseUom) Terkunci Permanen?

Satuan Dasar (baseUom) adalah denominator tunggal penyimpanan data di tingkat basis data (qty_base). Seluruh transaksi grosir, kemasan karton, atau konversi lusin akan selalu dikalikan dengan faktor konversi dan dicatat dalam qty_base.

Larangan Penggantian Base UoM

Jika sebuah produk sudah pernah mengalami mutasi stok (pembelian, penjualan, atau opname), mencoba mengubah baseUomId akan langsung ditolak oleh server dengan pesan HTTP 409 Conflict. Hal ini diberlakukan demi melindungi validitas riwayat mutasi kartu stok historis. Jika terjadi kekeliruan penetapan satuan dasar pada produk baru yang telah terlanjur transaksi, arsipkan produk tersebut dan buat master produk baru yang benar.


C. Kenapa Barcode Wajib Unik?

Barcode dirancang untuk pemindaian cepat di meja kasir. Scanner kasir membaca serangkaian digit dan mengirimkan perintah pencarian instan.

  • Jika terdapat dua produk dengan barcode yang sama, kasir akan mengalami ambiguitas pemindaian atau salah memasukkan produk ke keranjang belanja pelanggan.
  • Sistem menerapkan pembatasan indeks unik database (unique_barcode_per_tenant). Menyimpan barcode yang sama dengan produk lain yang aktif akan memicu penolakan validasi form.

D. Kenapa Mematikan allowNegativeStock Sangat Disarankan?

Secara default, parameter allowNegativeStock disetel ke Non-aktif (false).

  • Risiko Stok Minus: Menjual barang yang saldonya 0 di sistem menandakan ketidaksesuaian antara catatan administratif dan fisik di rak toko. Hal ini berpotensi menutupi kasus pencurian barang, barang tercecer, atau kelalaian penerimaan barang masuk dari supplier.
  • Kapan Boleh Diaktifkan?: Hanya aktifkan opsi ini pada unit bisnis ritel dengan perputaran sangat cepat di mana barang fisik telah tiba di toko namun staf gudang belum sempat mengklik tombol terima dokumen pengadaan di sistem komputer.

E. Memahami Skema Pajak: taxRate dan taxIncluded

  • taxIncluded = false (Harga Bersih / Belum Termasuk PPN): Jika harga produk diinput Rp 100.000 dengan tarif pajak 11%, maka saat produk dimasukkan ke kasir atau Sales Order, total tagihan yang harus dibayar konsumen adalah Rp 111.000 (Subtotal Rp 100.000 + PPN Rp 11.000).
  • taxIncluded = true (Harga Kotor / Sudah Termasuk PPN): Jika harga produk diinput Rp 100.000 dengan tarif pajak 11%, maka harga jual final di struk kasir tetap Rp 100.000. Sistem secara otomatis mengekstrak nilai DPP (Dasar Pengenaan Pajak) sebesar Rp 90.090,09 dan nilai PPN sebesar Rp 9.909,91. Skema ini lazim digunakan pada kafe, restoran, dan toko ritel modern.

3. Alur Kerja Langkah Demi Langkah Menambah Produk

  1. Masuk ke aplikasi web, buka menu Katalog & Persediaan > Master Produk.
  2. Klik tombol + Tambah Produk di sudut kanan atas tabel.
  3. Isi kolom Nama Produk dengan jelas dan lengkap.
  4. Tentukan Tipe Produk. Pastikan Anda memilih storable untuk barang fisik yang dilacak stoknya.
  5. Pilih Satuan Dasar (Base UoM) yang tepat (misal Pcs).
  6. Masukkan Harga Jual Standar dan Estimasi Harga Pokok (HPP).
  7. Scan barcode produk pada field Kode Barcode jika tersedia.
  8. Tetapkan kategori produk pada Kategori Produk.
  9. Tentukan pengaturan pajak (taxRate dan taxIncluded) sesuai kebijakan toko Anda.
  10. Klik tombol Simpan. Sistem akan menerbitkan kode SKU otomatis (jika dikosongkan) dan produk siap digunakan pada seluruh modul operasional.