Tren Penjualan Harian
Jam Ramai
Total transaksi (TC) per jam, dari data hari ini. Waktu mengikuti jam lokal browser.
Breakdown Pembayaran
Grab / Gojek / Shopee Food = Aktual Gerai (harga_base, acuan dana cair) — bukan harga marketplace.
Penjualan per Produk
| # | Produk | Qty |
|---|
Rekap per Tanggal
| Tanggal | Gross | Bersih | Cash | Cashless | Transfer | Grab | Gojek | Shopee | TC |
|---|
Target Penjualan per Outlet
Klik kolom Target untuk ubah nilainya, lalu klik di luar kolom (atau Enter) untuk simpan — tersimpan otomatis ke sales_target. Aktual dari daily_summary (Aktual Gerai), sama sumbernya dgn tab Ringkasan/Ringkasan Bisnis.
| Brand | Outlet | Target | Aktual | Pencapaian |
|---|
Bahan Terbanyak Terpakai
| Bahan | Total Terpakai | Rata-rata /hari (7 hari) | Unit | Stok Sekarang | Sisa Hari |
|---|
Rata-rata /hari & Sisa Hari = basis 7 hari penjualan terakhir (bukan rentang tanggal di atas — itu cuma buat "Total Terpakai"). Kalau produk itu 0 di 7 hari terakhir dan brand punya angka cadangan (so_config.fallback_avg_daily), angka itu dipakai sebagai fallback.
Stok Sekarang = SO (Stock Opname) terakhir yang di-input staff lewat app (tab Inventori). Sisa Hari = stok ÷ rata-rata pakai per hari. AMAN ≥5 hari, LOW 2-5 hari, KRITIS <2 hari.
Total Terpakai = qty terjual (semua order, kecuali batal) di rentang tanggal yang dipilih × takaran resep (BOM) per produk, dikonversi ke bahan baku mentah.
Forecast Pengiriman Mingguan
Rekomendasi qty PO per jadwal brand (so_config.po_schedule; tiap jadwal nutupin sampai jadwal berikutnya), dihitung per-outlet mandiri. PO terdekat = rata-rata × faktor keramaian hari + buffer 2.3 hari − stok efektif. PO berikutnya = rata-rata × faktor keramaian hari saja. Faktor keramaian dari histori 42 hari transaksi live.
Qty sudah dikonversi ke unit pembelian (gram→kg, ml→L) & dibulatkan ke kelipatan yang diatur brand (so_config.pack_rules; tanpa aturan: pcs ×25, g/ml ×1) — sama persis dengan aturan pembulatan di app (tab Inventori).
SO per Outlet — Kirim Besok
Formula sama persis dengan tab Forecast di app Flutter (STOK = proyeksi dari SO terakhir per bahan, MAX = 2.3× rata-rata pemakaian 14 hari terakhir + 30% kalau besok weekend, Min = 1.2×) — pakai setting default (multiplier custom per-outlet, kalau ada, belum tersinkron ke sini karena cuma tersimpan di HP masing-masing).
Rata-rata pemakaian 14 hari di-cache, cuma dihitung ulang tanggal 1 & 15 tiap bulan (bukan tiap klik) — biar gak lama. STOK & MAX/Min tetap dihitung ulang tiap klik karena SO bisa berubah tiap hari.
| Outlet | Brand | SO Terakhir | Perlu Kirim | Kritis |
|---|
Klik outlet untuk lihat rincian per bahan. Perlu Kirim = jumlah bahan dengan MAX > 0 (STOK di bawah target). Kritis = jumlah bahan dengan STOK di bawah Min (batas darurat hari ini).
Pergerakan Stok — Barang Masuk/Keluar & SO
Gabungan tampilan dua sumber data yang independen: log "Barang Masuk/Keluar/Waste" (input manual lewat app) dan riwayat Input SO (stock opname). Keduanya CUMA ditampilkan bareng di sini — Barang Masuk/Keluar tidak memotong/menambah BOM atau SO otomatis.
Riwayat Barang Masuk / Keluar / Waste
| Tanggal | Arah | Jumlah Bahan | Catatan | Foto |
|---|
Klik baris untuk lihat rincian bahan & qty per transaksi.
Riwayat Stock Opname (SO)
| Tanggal | Jumlah Bahan Tercatat |
|---|
Klik tanggal untuk lihat rincian qty fisik per bahan hasil Input SO hari itu.
Selisih Stok — SO fisik vs teori
Per bahan berunit pcs: selisih = SO fisik hari itu − (SO kemarin + barang masuk − keluar/waste − pemakaian resep × terjual). Negatif (merah) = stok fisik kurang dari teori; positif (oranye) = lebih dari teori. Hari tanpa SO hari itu atau kemarin tidak dihitung. Menandai "sudah di-review" dilakukan di app kasir (PIN manajer). Angka ini alat bantu pengecekan, bukan bukti kehilangan — cocokkan dulu dengan stok fisik.
| Bahan | Total selisih | Hari dihitung | Hari tanpa SO | Review |
|---|
Klik bahan untuk rincian harian. Diurutkan dari selisih paling negatif.
Detail Transaksi
Default rentang = minggu ini (Senin s/d hari ini). Rentang lebar + Semua Outlet bisa berat, pertimbangkan pilih 1 outlet kalau cuma butuh 1 gerai. Transaksi selesai & antrian yang ditampilkan (batal/void/hold dikecualikan). Klik baris untuk lihat rincian item.
| Tanggal | Jam | Nota | Outlet | Kasir | Metode Bayar | Diskon | Total | Status |
|---|
Ringkasan Bisnis — Semua Unit Bisnis
Gross pakai Aktual Gerai (bukan harga marketplace) — konsisten sama tab Ringkasan. Mode Hari Ini baca rekap harian yang sudah tercatat otomatis (ringan, 1 query). Mode Rentang menghitung ulang dari transaksi mentah — lebih lambat kalau rentangnya lebar.
Tren Penjualan Harian — Semua Bisnis
Kontribusi per Brand
Channel Penjualan
Dine-in = tunai + cashless (QRIS/kartu). Delivery = Grab + Gojek + ShopeeFood (Aktual Gerai).
Jam Ramai — per Brand
Rincian per Brand
Klik nama brand untuk lihat rincian per outlet.
Resep = bahan yang terpakai untuk 1 porsi produk. Dipakai app kasir, Estimasi Bahan, SO, dan Transfer, jadi perubahan di sini langsung berlaku di semuanya. Resep berlaku untuk semua outlet brand .
Produk
Daftar SO dibentuk otomatis: bahan dari semua resep + hasil konversi + item tambahan di bawah. Semua dicocokkan dengan tulisan yang persis sama, jadi beda huruf besar/kecil, spasi, atau salah ketik akan menjadi dua baris SO yang terpisah. Berlaku untuk brand .
Tambah item SO di luar resep
Untuk barang yang penting di-SO tetapi tidak masuk resep (plastik, kertas, thermal, sarung tangan, dll.). Item ini langsung muncul di layar SO app kasir.
Daftar SO (hasil akhir)
| Bahan | Unit | Sumber | Stok min. | Utama | SO terakhir | Catatan |
|---|
Harga Modal Bahan Baku
Isi harga modal per unit pembelian (kg/L/pcs) — dipakai buat hitung margin tiap produk lewat resep (BOM). Brand: .
| Bahan | Unit Beli | Harga per Unit (Rp) |
|---|
Margin per Produk
| Produk | Harga Jual | Modal (COGS) | Margin | Margin % | Terjual 30 hari | Diskon combo 30 hari | Margin setelah combo |
|---|
Modal = jumlah (qty resep × harga modal bahan) per produk. Produk dengan bahan yang belum diisi harga modalnya ditandai Belum lengkap. Tiga kolom terakhir dihitung dari penjualan nyata 30 hari terakhir (order antrian/selesai): diskon combo dialokasikan sebanding nilai produk di dalam paket combo, dan margin setelah combo = (penjualan − diskon combo) − modal × qty.