Waste Log (Pencatatan Barang Rusak/Basi)
Modul pencatatan kerugian barang akibat kadaluarsa, rusak, atau terbuang untuk akurasi HPP dan analisis pembukaan waste.
Gambaran Umum
Dalam dunia bisnis nyata, terutama di sektor makanan dan minuman (F&B) serta barang segar, tidak semua inventori yang dibeli akan berakhir di piring pelanggan sebagai omzet. Sebagian barang pasti akan berakhir di tempat sampah. Daging bisa busuk karena kulkas mati semalaman, gelas kaca bisa pecah terjatuh oleh pelayan, atau hidangan salah dimasak dan harus dibuang. Di dalam manajemen operasional, insiden kerugian aset ini dikenal sebagai “Waste” (Sampah / Pembuangan).
Tanpa modul Waste Log, pengurangan barang-barang rusak ini sering kali dibiarkan menguap begitu saja, atau tersembunyi hingga masa Stock Opname akhir bulan tiba. Akibatnya, pemilik bisnis bingung ke mana bocornya stok mereka. “Waste Log” atau log pencatatan barang rusak bertujuan untuk mendokumentasikan setiap insiden pembuangan secara sistematis dan harian.
Tujuan utama pencatatan ini adalah transparansi akuntansi dan pengendalian operasional. Jika seorang koki sadar ia harus mengisi form resmi setiap kali ia membuang salmon karena gosong dimasak, tingkat kewaspadaannya akan meningkat. Selain itu, catatan ini memisahkan “Stok yang terjual” dengan “Stok yang dibuang”, sehingga metrik Harga Pokok Penjualan (HPP / COGS) murni penjualan tidak tercemar oleh faktor kelalaian dapur. Nilai barang yang dibuang akan dicatat terpisah sebagai “Biaya Kerugian Operasional” (Operational Loss).
Alur Kerja
Pembuatan catatan waste (Waste Entry) dilakukan sesegera mungkin sesaat insiden terjadi atau saat tutup shift. Alur kerjanya dirancang sangat sederhana agar staf lapangan tidak enggan melapor, namun cukup detail bagi keperluan audit.
Sebagai contoh nyata: Pada hari Sabtu jam 14:00, seorang staf barista membuat kesalahan saat menyeduh sirup pesanan pelanggan. Akibatnya, 2 gelas plastik (Cup) dan 30 ml Sirup Hazelnut terpaksa dibuang. Pada sore harinya saat pergantian shift, barista tersebut masuk ke sistem kasir POS, berpindah dari tab Penjualan ke tab “Catat Waste”.
- Pemilihan Barang: Barista mencari barang “Cup Plastik” dan memasukkan kuantitas 2. Lalu ia mencari bahan “Sirup Hazelnut” dan memasukkan kuantitas 30.
- Pemilihan Alasan: Ini tahap krusial. Sistem menyediakan dropdown daftar alasan yang sudah dibakukan (Master Reason). Barista memilih kategori alasan: “Human Error / Kesalahan Karyawan”. (Pilihan lain biasanya: Expired / Kedaluwarsa, Rusak dari Supplier, Rusak Peralatan/Kulkas Mati).
- Catatan Pendukung (Opsional): Barista mengetik keterangan singkat: “Kesalahan baca nota pesanan.”
- Simpan: Saat barista menekan tombol Simpan, sistem secara instan mengirimkan perintah ke modul Inventori. Kartu stok (Stock Ledger) dari “Cup Plastik” dikurangi sebanyak -2, dan stok sirup dikurangi -30 ml.
Dengan alur pelaporan seketika ini, saat manajer membuka dashboard analitik di kantor pusat esok harinya, mereka bisa langsung melihat grafik pie chart yang menunjukkan bahwa “Human Error” menyumbang 60% penyebab terbuangnya aset minggu ini, memberi indikasi bahwa tim operasional butuh pelatihan ulang.
flowchart TD
A[Insiden: Barang rusak, basi, atau pecah] --> B[Masuk ke Menu Waste Log di Sistem]
B --> C["Cari dan Pilih Item (Bahan/Produk Jadi)"]
C --> D[Input Kuantitas Barang yang Dibuang]
D --> E["Pilih Kategori Alasan (Reason Code)"]
E -- Contoh --> E1["Basi / Expired"]
E -- Contoh --> E2["Human Error"]
E -- Contoh --> E3["Cacat / Pecah"]
E --> F[Tambah Keterangan Tambahan / Catatan Kejadian]
F --> G[Submit Form Waste]
G --> H[Backend Menerima Data & Kalkulasi Valuasi]
H --> I[Modul Inventori: Kurangi Stok Item Secara Real-time]
I --> J[Catat ke Kartu Stok: Tipe 'WASTE']
J --> K[Modul Akuntansi: Pindahkan Nilai Barang ke Kolom 'Biaya Kerugian']
Teknologi & Infrastruktur
Secara teknis, Waste Log berfungsi sebagai “Transaksi Negatif” eksternal. Jika modul penjualan (Sales) mengurangi stok untuk mendatangkan uang (Revenue), modul waste mengurangi stok dan mendatangkan kerugian (Expense).
Fitur ini memanfaatkan arsitektur database relasional untuk menyimpan referensi ke Master Reason. Hal ini agar laporan dapat di-kelompokkan (GROUP BY) berdasarkan kategori alasan kejadian secara akurat. Data limbah disimpan di tabel khusus waste_logs dan turunannya waste_log_items, yang terpisah dari tabel transaksi pesanan pelanggan, demi kemudahan query pembuatan laporan keuangan operasional.
Selain itu, ketika stok dipotong dari tabel inventori, backend juga mengalkulasi beban moneter secara instan. Sistem mengambil nilai harga pokok per unit (Average Cost) dari bahan terkait, lalu mengalikannya dengan kuantitas yang dibuang. Valuasi kerugian rupiah (atau mata uang lainnya) direkam statis pada baris log tersebut (snapshot). Hal ini mencegah nilai laporan berubah-ubah di masa depan jika harga pokok barang tersebut mengalami kenaikan dari pemasok bulan depan.
Tabel Database Terkait
| Nama Tabel | Deskripsi | Kolom Penting |
|---|---|---|
waste_reasons | Tabel kamus/master alasan standar (agar input seragam, tidak sekadar teks bebas). | id, reason_code, description, is_active |
waste_logs | Header dari sebuah pelaporan sesi buang barang. | id, reported_by_user_id, reported_date, total_loss_value |
waste_log_items | Rincian barang per barang yang dibuang. | id, waste_log_id, inventory_item_id, quantity, waste_reason_id, cost_per_unit_snapshot |
stock_ledgers | (Keterkaitan) Tujuan mutasi. | Menerima entri mutasi dengan transaction_type = 'WASTE_OUT' |
Endpoint API
| Metode | Endpoint | Fungsi dan Kegunaan |
|---|---|---|
GET | /api/v1/waste-reasons | Mengambil kamus alasan (misal: “Basi”, “Tumpah”) untuk merender opsi dropdown di aplikasi. |
GET | /api/v1/waste-logs | Mengambil daftar riwayat pelaporan waste yang sudah disubmit, lengkap dengan total valuasinya, filter tanggal. |
POST | /api/v1/waste-logs | Mengirim data pelaporan dari antarmuka kasir. Endpoint ini bertanggung jawab membungkus insert log dan pemotongan stok ledger dalam satu Transaction DB. |
Keterkaitan dengan Fitur Lain
- Modul Kartu Stok (Ledgers): Laporan pembuangan barang memicu entri riwayat perpindahan stok. Pada riwayat pergerakan stok, akan terlihat jelas sebuah pengurangan bukan karena penjualan (
SALE_OUT), melainkan akibat dibuang (WASTE_OUT). - Laporan Evaluasi Staf: Oleh karena kolom
reported_by_user_iddicatat, manajer HR atau Operasional bisa menarik metrik evaluasi karyawan. Jika kasir A mendominasi tingginya log pembuangan barang karena “Human Error” dibanding kasir B, perusahaan dapat mengambil tindakan indisipliner atau coaching. - Laporan Keuangan (Dashboard Profitabilitas): Laporan laba/rugi di dashboard akhir bulan tidak hanya menampilkan Pendapatan dikurangi Modal Penjualan HPP (Margin Kotor), tetapi juga harus mendisplai potongan tambahan untuk Total Valuasi Waste (Biaya Susut/Kerugian) agar mencerminkan Profit Bersih yang aktual.
Hal Penting yang Perlu Diketahui
- Pemisahan Alasan Waste: Penting untuk mengedukasi operasional agar tepat memilih kategori alasan. Waste karena “Basi / Expired” adalah kesalahan estimasi produksi/belanja manajer yang membeli kelebihan barang, sedangkan Waste akibat “Terjatuh / Gosong” murni adalah kesalahan standar operasional operasional staf dapur. Keduanya membutuhkan obat solusi manajemen yang sangat berbeda.
- Approval System (Persetujuan Opsional): Untuk bisnis dengan pergerakan barang nilai tinggi (misalnya restoran steak kelas atas atau bar minuman keras impor), membuang stok tidak semudah sekadar mengisi form. Aplikasi mendukung konfigurasi “Persetujuan Manager”. Saat staf mengisi form, stok dibekukan sementara, dan pemotongan permanen baru terjadi setelah Manajer mengetikkan pin otorisasi di layar sistem untuk menyetujui validitas alasan tersebut.
erDiagram
WASTE_LOGS ||--|{ WASTE_LOG_ITEMS : "memuat detail"
WASTE_LOG_ITEMS }o--|| WASTE_REASONS : "memiliki alasan pembuangan"
WASTE_LOG_ITEMS }o--|| INVENTORY_ITEMS : "merujuk pada barang mentah"
WASTE_LOGS {
string id PK
datetime report_time
string reporter_user_id
decimal total_loss "Total Rp Kerugian"
}
WASTE_LOG_ITEMS {
string id PK
string log_id FK
string inventory_item_id FK
decimal qty "ex: 2"
string reason_id FK
decimal cost_snapshot "HPP aset saat dibuang"
}
WASTE_REASONS {
string id PK
string code "ex: BASI / RUSAK_ALAT"
}