Peta POS & Resep (BOM)
Panduan lengkap admin mengelola Peta & Resep — model berpikirnya, alur lengkap dari menu baru sampai stok terpotong otomatis, lalu cara mengisi Resep/BOM (satu menu sekali simpan), Sub-Resep yang dipakai ulang, Peta Menu POS, Peta Modifier (tambahan/varian) dengan pemilih item, dan membaca laporan Cakupan.
Menu Peta & Resep adalah tempat Anda mengajari sistem apa isi setiap menu — supaya saat laporan POS mencatat sebuah menu terjual, sistem tahu bahan apa yang terpakai dan bisa mengurangi stok secara otomatis. Hanya Admin dan Owner yang bisa membuka dan mengubah halaman-halaman ini.
Navigasi cepat
Baru pertama kali? Baca dari atas — mulai dari model berpikir lalu alur lengkap. Sudah paham dan hanya butuh satu halaman? Loncat langsung:
- ✨ Asisten AI — otomatiskan dari laporan POS — unggah laporan POS, dapatkan saran peta & resep sekaligus
- 🚀 Alur lengkap (end-to-end) — satu contoh nyata melewati keempat halaman
- 📥 Impor & Ekspor massal (Excel/xlsx) — isi puluhan menu sekaligus, dalam urutan yang benar
- 📖 Halaman 1 — Resep (BOM) — daftar bahan per porsi + Sub-Resep
- ⚖️ Yield Factor — bahan yang menyusut saat dimasak — kapan & berapa angkanya, contoh Ayam Gepuk
- 🗺️ Halaman 2 — Peta Menu — nama POS → Menu Key
- 🎛️ Halaman 3 — Peta Modifier — arti tambahan/varian dari POS
- 🎯 Halaman 4 — Cakupan — cek mana yang belum lengkap
- ⚙️ Tingkat Cakupan (Scope) — Tenant vs Warung
Di sidebar kiri, kelompok menu Peta & Resep kini punya halaman beranda + Asisten AI + empat halaman kerja, tersusun sesuai urutan pengerjaan:
| Menu di sidebar | Gunanya |
|---|---|
| Beranda Peta | Halaman pembuka: pintasan ke tiap langkah + jumlah yang sudah tersimpan. Mulai dari sini. |
| Asisten AI | Unggah laporan POS → AI menyarankan peta menu, resep, & modifier sekaligus untuk Anda periksa. |
| Peta Menu | Menghubungkan nama menu persis dari laporan POS dengan Menu Key internal. |
| Resep (BOM) | Daftar bahan + jumlah per porsi tiap menu. Di sini juga Anda membuat Sub-Resep. |
| Peta Modifier | Mengklasifikasikan tambahan/varian dari POS (pedas, potongan, tambahan, kemasan). |
| Cakupan | Laporan: berapa banyak menu yang sudah siap, dan mana yang masih kurang. |
💡 Dulu keempatnya ada di satu halaman panjang; sekarang masing-masing punya halaman sendiri agar lebih ringan dan fokus, dengan Beranda Peta sebagai pintu masuknya. Membuka link lama (
/dashboard/peta-pos) kini mendarat di Beranda Peta — kartu-kartu pintasan yang mengarahkan Anda ke langkah berikutnya.
✨ Buru-buru? Kalau Anda menyiapkan outlet baru dari nol, lompati pengisian manual: coba Asisten AI dulu — ia membaca laporan POS Anda dan mengisi sebagian besar peta & resep secara otomatis, tinggal Anda periksa dan setujui.
🎓 Pahami dulu: model berpikir Peta & Resep
Analogi sederhana
Bayangkan struk kasir POS mencatat "Nasi Goreng Special" terjual 30 porsi. Sistem tidak tahu otomatis bahwa satu porsi butuh 150 gr nasi + 50 gr ayam + 20 gr bumbu — kecuali Anda mengajarinya lewat Peta Menu dan Resep BOM.
Tanpa itu, laporan stok & HPP tidak bisa menghitung bahan apa yang terpakai dari penjualan tersebut.
Empat halaman = empat pertanyaan yang dijawab sistem
| Halaman | Menjawab pertanyaan |
|---|---|
| Resep (BOM) | "Satu porsi menu ini butuh bahan apa saja, berapa banyak?" |
| Peta Menu | "Nama di laporan POS ini sebenarnya menu yang mana (kode)?" |
| Peta Modifier | "Tambahan/varian di POS ini menambah/mengganti bahan apa?" |
| Cakupan | "Mana yang sudah siap, mana yang masih kurang?" |
Bagaimana semuanya tersambung saat menu terjual
Inilah inti model berpikirnya. Saat Anda mengunggah laporan POS, untuk tiap bill sistem menjalankan rantai ini secara otomatis:
Jadi Resep, Peta Menu, dan Peta Modifier adalah "bahan persiapan"; potongan stok yang sesungguhnya terjadi nanti, otomatis, saat laporan POS diunggah — bukan saat Anda menyimpan resep/modifier. (Mengisi halaman-halaman ini tidak langsung mengubah stok.)
Apa itu Menu Key
Menu Key adalah kode internal singkat yang Anda tentukan — misalnya NASI_GORENG —
yang menghubungkan nama POS dengan resep. Satu Menu Key boleh dipakai banyak nama POS
(mis. "Nasi Goreng", "Nasi Goreng Special", "Nasi Goreng Kombo" memakai resep sama jika
bahannya identik).
Urutan paling praktis: isi resepnya dulu di Resep (BOM), lalu petakan nama POS-nya di Peta Menu. Tapi keduanya boleh dikerjakan dalam urutan apa pun — petunjuk ✓/⚠ di tiap halaman mengingatkan bagian yang belum lengkap.
Apa itu Sub-Resep (dan kenapa memudahkan hidup Anda)
Sebuah Sub-Resep adalah resep yang dipakai sebagai bahan di resep lain — biasanya bumbu, saus, atau bahan dasar yang muncul di banyak menu.
Contoh: bumbu rendang Anda dipakai di Rendang Daging, Rendang Ayam, dan Nasi Rendang. Daripada mengetik ulang 8 bahan bumbu di tiga resep, Anda cukup:
Aturan penamaan: Menu Key Sub-Resep harus diawali SR_ — mis. SR_BUMBU_RENDANG,
SR_SAUS_KACANG. Itulah cara sistem mengenali bahwa sebuah kode adalah Sub-Resep, bukan
menu jual biasa. Di form Resep (BOM), cukup pilih tab Sub-Resep pada kolom Menu Key —
awalan SR_ otomatis terkunci, jadi Anda hanya mengetik sisanya.
Sub-Resep hanya boleh satu tingkat. Sebuah Sub-Resep (
SR_…) boleh berisi bahan biasa (Item), tapi tidak boleh berisi Sub-Resep lain. JadiSR_SAUStidak bisa menunjukSR_BUMBU. Kalau dicoba, sistem menolak: "SR tidak boleh menunjuk SR — nesting maksimal 1 level".
Dua jenis "belum siap" — beda penanganannya
| Status | Artinya | Yang perlu dilakukan |
|---|---|---|
| Menu Belum Terpeta | Nama POS belum ada di Peta Menu | Tambah baris di Peta Menu |
| Resep Kosong | Nama POS sudah dipetakan, tapi resepnya masih kosong | Isi bahan di Resep (BOM) |
Sistem tidak boleh mengira resep kosong = resep nol bahan — itu akan mengacaukan laporan stok. Selama resep masih kosong, stok untuk menu itu tidak dihitung.
Sumber belajar
Alur lengkap: dari menu baru sampai stok terpotong
Bagian ini menyatukan keempat halaman dalam satu contoh nyata — ikuti berurutan untuk membuat satu menu siap hitung dari nol. Kita pakai contoh: menu "Ayam Bakar" yang punya tambahan "Extra Tahu" di POS.
Langkah 1 — Buat resep menunya di Resep (BOM)
Buka Resep (BOM). Isi Menu Key AYAM_BAKAR, tumpuk
bahan-bahannya (mis. 1 pc Ayam, 150 gr Beras) ke Daftar Bahan, lalu Simpan Resep.
👉 Detail langkahnya di Halaman 1.
Punya bumbu yang dipakai di banyak menu? Buat dulu sebagai Sub-Resep (
SR_…) sebelum dipakai di sini.
Langkah 2 — Hubungkan nama POS-nya di Peta Menu
Buka Peta Menu. Salin nama persis dari laporan POS
(mis. Ayam Bakar) ke Nama Menu POS, isi Menu Key AYAM_BAKAR (sama dengan
Langkah 1), lalu Simpan Peta Menu. Petunjuk ✓ "Resep sudah ada (N baris)" menandakan
keduanya sudah nyambung.
Langkah 3 — Beri arti tambahannya di Peta Modifier
Kalau di POS ada tambahan seperti "Extra Tahu", buka
Peta Modifier. Isi Modifier = Extra Tahu, pilih
Kelas = ADDON, lalu pada "Item yang ditambah" pilih Tahu dari dropdown. Simpan.
Sekarang sistem tahu: setiap bill ber-"Extra Tahu" memotong 1 Tahu ekstra di atas resep.
👉 Arti tiap kelas modifier ada di Halaman 3.
Langkah 4 — Unggah laporan POS → stok terpotong otomatis
Inilah saat potongan stok benar-benar terjadi. Buka menu
Laporan POS dan unggah file .xlsx-nya. Untuk
tiap bill, sistem menjalankan rantai di model berpikir:
resep dasar dipotong, lalu modifier menambah/mengganti bahan. Banner hasil menampilkan
"… Stok teoretis: N bill dikurangi".
Contoh hasil untuk 1 bill "Ayam Bakar + Extra Tahu": stok Ayam −1, Beras −150 gr (dari resep), Tahu −1 (dari modifier ADDON).
Langkah 5 — Pastikan tidak ada yang bolong di Cakupan
Buka Cakupan, pilih warung & periode, Perbarui Cakupan. Pastikan tidak ada menu di ember Menu Belum Terpeta / Resep Kosong / Modifier Belum Terklasifikasi. Target: "Semua menu sudah terpeta dan memiliki resep. 🎉"
✅ Checklist satu menu siap: (1) resep terisi di Resep BOM · (2) nama POS terpetakan di Peta Menu · (3) semua modifier menu itu terklasifikasi di Peta Modifier · (4) muncul di potongan stok setelah unggah POS · (5) bersih di Cakupan.
Impor & Ekspor massal (file Excel/xlsx)
Mengisi satu per satu lewat formulir cocok untuk menambah sedikit. Kalau Anda harus
memasukkan puluhan menu sekaligus — misalnya saat menyiapkan outlet baru — pakai
impor file Excel (.xlsx). Setiap halaman (Peta Menu, Resep, Peta Modifier)
punya tiga tombol di kotak atas:
| Tombol | Gunanya |
|---|---|
| Unduh Template | Mengunduh file Excel kosong dengan kolom yang benar + sheet contoh (Item, Outlet, dll). |
| Ekspor | Mengunduh data yang sekarang sudah ada (untuk diperiksa, diedit, atau dicadangkan). |
| Impor | Mengunggah file Excel yang sudah diisi — sistem memeriksa lalu menyimpan baris demi baris. |
🎓 Pahami dulu: kerjakan dalam urutan ini
Kenapa ada urutan
Ketiga halaman saling merujuk lewat Menu Key. Resep dan Modifier baru bermakna kalau Menu Key-nya sudah dikenal dari Peta Menu. Jadi isi Peta Menu lebih dulu, baru Resep, baru Modifier — persis seperti di alur lengkap, hanya saja kali ini lewat file Excel.
Kotak panduan di tiap halaman juga menulis urutan ini — Anda akan lihat "Langkah 1 dari 3" di Peta Menu, "Langkah 2 dari 3" di Resep, dan "Langkah 3 dari 3" di Peta Modifier.
Begini tampilan kotak tombolnya (contoh di Peta Menu — perhatikan teks "Langkah 1 dari 3"):
Langkah 1 dari 3 — petakan nama menu POS ke Menu Key lebih dulu; Resep & Modifier merujuk ke Menu Key ini.
Unduh template yang benar
Di halaman yang ingin Anda isi, tekan Unduh Template. File Excel berisi baris judul kolom yang harus tetap ada, plus sheet bantuan (mis. daftar Kode Item dan Outlet) supaya Anda mengisi kode yang valid. Jangan menghapus atau mengganti nama kolom — kalau judul kolom berubah, sistem menolak seluruh file dan memberi tahu kolom mana yang hilang.
Isi datanya di Excel
Ketik data Anda di sheet Data, satu baris per entri. Untuk Resep, beberapa baris dengan Menu Key yang sama otomatis dianggap satu resep (semua bahannya).
Unggah lewat tombol Impor
Pilih file lewat Impor file .xlsx, tekan Impor. Sistem memeriksa dulu, baru menyimpan, lalu menampilkan ringkasan seperti "✅ 5 baris diterapkan. 2 baris ditolak. Baris 4: …" — nomor barisnya sesuai nomor baris di Excel sehingga mudah Anda perbaiki.
Aman diulang
Mengimpor file yang sama dua kali tidak menggandakan data — baris yang sudah ada akan ditolak sebagai duplikat, hanya baris baru yang ditambahkan. Jadi kalau ragu, impor ulang saja; tidak akan merusak data.
💡 Untuk Resep: kalau satu baris dalam satu Menu Key salah (mis. kode bahan tidak dikenal), seluruh resep menu itu dibatalkan — sama seperti aturan "satu menu sekali simpan" di Halaman 1. Perbaiki baris itu di Excel, lalu impor ulang.
🔒 Impor/ekspor menulis ke katalog saja — sama seperti mengisi formulir, ini tidak mengubah angka food cost / HPP. Stok baru terpotong nanti saat laporan POS diunggah.
Asisten AI — otomatiskan Peta & Resep dari laporan POS
Buka menu Peta & Resep → Asisten AI. Ini cara tercepat menyiapkan outlet baru: alih-alih mengetik puluhan menu satu per satu, Anda mengunggah satu laporan POS, dan AI membaca seluruh menu & tambahannya, lalu menyusun saran — peta menu, resep bahan per menu, dan klasifikasi modifier — yang tinggal Anda periksa, sunting, dan setujui.
🎓 Pahami dulu: apa yang Asisten AI lakukan (dan TIDAK lakukan)
Analogi sederhana
Bayangkan seorang asisten baru yang membaca laporan penjualan Anda lalu berkata: "Sepertinya 'Ayam Krispy' butuh ayam + tepung + minyak, dan 'Pedas' itu varian sambal." Ia menyodorkan draf — bukan keputusan final. Anda tetap bosnya: setiap saran bisa Anda ubah, buang, atau setujui. Tidak ada yang tersimpan sampai Anda menekan Terapkan.
Tiga hal penting yang menjaga data Anda aman
- Tidak pernah menimpa. Menu, resep, atau modifier yang sudah ada dikunci dan ditandai "sudah ada — dilewati" — Asisten hanya menambah yang baru. Aman dipakai berulang di outlet yang sudah sebagian terisi.
- Bahan hanya dari katalog Anda. Semua bahan yang disarankan diambil dari Data Master item Anda — kalau AI menebak bahan yang tidak ada di katalog, bahan itu dibuang dan Anda diberi tahu. Tidak ada bahan "karangan".
- Angka takaran = perkiraan. Setiap
Qty/Porsiyang ditebak AI diberi label kuning "perkiraan — mohon periksa". Itu titik awal, bukan kebenaran — selalu sesuaikan dengan takaran dapur Anda sebelum menyetujui.
Kapan pakai Asisten, kapan manual
Unggah laporan POS-nya
Pilih Tingkat (Tenant global atau satu Warung), lalu unggah file .xlsx "Sales
Recapitulation Detail Report" dan tekan Unggah & Sarankan.
Proses AI bisa memakan 10–30 detik untuk laporan besar. Pastikan file adalah "Sales Recapitulation Detail Report".
⏳ Sabar sebentar. AI membaca seluruh laporan lalu menyusun saran — untuk laporan besar ini bisa 10–30 detik. Jangan tutup halaman selama proses berjalan.
Periksa saran di tiga bagian
Hasilnya muncul sebagai tiga tabel — Peta Menu, Peta Modifier, dan Resep — masing-masing bisa dicari, diurutkan, dan disaring. Centang baris yang benar, sunting seperlunya (ganti Menu Key, ubah kelas modifier, sesuaikan qty, tambah/buang bahan). Baris berlabel kuning "perkiraan" wajib Anda periksa; baris "sudah ada — dilewati" terkunci.
Ayam krispy · RM003
1.000perkiraan
Beras · RM030
200.000perkiraan
sudah ada — dilewati
—- Label kuning perkiraan hilang begitu Anda menyunting qty baris itu — tandanya Anda sudah memverifikasinya.
- Baris "sudah ada — dilewati" terkunci dan tidak ikut tercentang saat "pilih semua" — Asisten tidak akan menyentuh data yang sudah ada.
Terapkan per bagian
Tiap bagian punya tombol sendiri: Terapkan yang dipilih (N). Hanya baris tercentang di bagian itu yang tersimpan. Setelah berhasil, muncul ringkasan "N diterapkan, M dilewati (sudah ada), K gagal" dan pintasan Lihat Cakupan untuk memastikan cakupannya naik.
🔁 Aman diulang & tidak menimpa. Menekan Terapkan dua kali tidak menggandakan data, dan baris yang sudah ada tetap dilewati — persis aturan yang sama dengan impor Excel.
🔒 Menyetujui saran = mengisi katalog, sama seperti mengisi formulir manual — ini tidak mengubah angka food cost / HPP. Stok baru terpotong nanti saat laporan POS diunggah (lihat model berpikir).
👤 Khusus Admin & Owner. Peran lain melihat halaman ini tapi dengan pesan "Fitur ini khusus admin/owner." — pengunggahan & penerapan hanya hak Admin/Owner.
Halaman 1 — Resep (BOM)
Buka menu Peta & Resep → Resep (BOM) di sidebar. Di sinilah Anda mengisi bahan-bahan (dan jumlahnya per porsi) untuk setiap Menu Key.
Cara kerjanya sekali jalan: Anda menumpuk dulu semua baris bahan ke dalam sebuah daftar (Daftar Bahan), baru menekan satu tombol Simpan Resep — seluruh bahan tersimpan bersamaan dalam satu kali simpan. Kalau ada satu baris yang salah, seluruh resep itu batal (tidak ada yang setengah tersimpan), dan sistem menyebut baris ke berapa yang bermasalah.
A. Mengisi resep biasa (bahan dari katalog)
Tentukan Tingkat dan Menu Key
- Tingkat — pilih Tenant (global) agar berlaku di semua outlet (paling umum), atau Warung kalau satu outlet punya resep berbeda. (Lihat Tingkat Cakupan di bawah.)
- Menu Key — ketik kode yang Anda pakai (misal
NASI_GORENG). Huruf otomatis jadi KAPITAL. Di bawah kolom muncul petunjuk: ✓ "Sudah dipetakan di Peta Menu POS" kalau pasangannya ada, atau ⚠️ "Belum dipetakan" kalau belum. Untuk sub-resep (kodeSR_…) muncul ℹ️ "Sub-resep — tidak perlu dipetakan di Peta Menu POS". - Nama Menu & Tipe (opsional) — nama tampilan dan jenis (Makanan/Minuman).
Tambahkan baris bahan satu per satu ke Daftar Bahan
Untuk tiap bahan: pilih jenis & item, isi Qty/Porsi, lalu tekan
. Baris langsung masuk ke Daftar Bahan di atas — belum tersimpan, masih bisa diubah.
Daftar Bahan (2 baris)
ITEM
Ayam Fillet (gr)50.000 grITEM
Beras (gr)150.000 gr
- Jenis Bahan — pilih Item Bahan untuk bahan dari katalog Data Master.
- Pilih Item — dropdown berisi item dari Data Master. Satuannya (gr/ml/…) otomatis terkunci mengikuti item.
- Qty/Porsi — jumlah bahan untuk satu porsi menu, sampai 3 desimal (misal
150.000). - Yield Factor — faktor susut (default
1.000= tidak ada susut). Naikkan bila bahan menyusut saat dimasak. Belum yakin angkanya? Baca Yield Factor — bahan yang menyusut saat dimasak (lengkap dengan contoh Ayam Gepuk). - Salah menambah baris? Tekan ikon sampah () di baris itu untuk membuangnya dari Daftar Bahan sebelum menyimpan.
Tekan Simpan Resep — semua baris tersimpan sekaligus
Setelah semua bahan masuk ke Daftar Bahan, tekan
.
Tombol ini mati selama Daftar Bahan masih kosong, dan menyala begitu ada minimal satu baris. Muncul ✅ Resep tersimpan., Daftar Bahan dikosongkan, dan resepnya langsung muncul di tabel Resep Tersimpan di bawah.
⚠️ Kalau ada baris yang salah, seluruh resep batal. Misalnya satu bahan bentrok dengan baris yang sudah ada, muncul pesan seperti "Baris ke-1: baris resep yang sama sudah ada" dan tidak ada baris yang tersimpan. Perbaiki baris itu, lalu Simpan Resep lagi. Ini sengaja — resep selalu utuh, tidak pernah setengah tersimpan.
Yield Factor — bahan yang menyusut saat dimasak
Yield Factor adalah angka kecil di tiap baris bahan yang menjawab satu pertanyaan praktis:
"Berapa bahan mentah yang harus saya beli supaya, setelah dimasak/dibersihkan, tersisa
sebanyak yang tertulis di resep?" Nilai bawaannya 1.000 — artinya tidak ada susut:
yang Anda tulis di Qty/Porsi = persis yang terpakai. Anda menaikkannya hanya untuk bahan yang
berkurang beratnya antara saat dibeli dan saat disajikan.
💡 Inti yang harus dipahami: Qty/Porsi adalah berat matang/bersih yang masuk ke piring; Yield Factor adalah pengali yang mengubahnya jadi berat mentah yang benar-benar Anda keluarkan dari stok. Stok dipotong sebesar Qty/Porsi × Yield Factor per porsi — jadi makin besar susutnya, makin besar Yield Factor-nya.
Sekilas — kapan pakai angka berapa:
| Nilai Yield | Kapan dipakai | Contoh nyata |
|---|---|---|
| = 1.000 | Tidak ada susut, atau Qty sudah berat netto/matang | Minyak yang terserap, sambal dari Sub-Resep matang |
| > 1.000 | Bahan menyusut saat dimasak/dibersihkan (kasus umum) | Ayam goreng 1.250, lalapan dipotong 1.100 |
| < 1.000 | Jangan dipakai — ini berlaku untuk bahan yang mengembang | Beras → nasi: pakai Gaya B, bukan Yield < 1 |
⚖️ Yield Factor di MBS selalu ≥ 1.000. Sistem memakainya untuk susut — stok dipotong Qty/Porsi × Yield, jadi angka di bawah 1 akan mengurangi potongan stok dan menyembunyikan biaya. Untuk bahan yang justru mengembang (nasi, mie rebus), jangan turunkan Yield ke bawah 1 — isi Qty/Porsi dengan berat mentahnya dan biarkan Yield
1.000(lihat catatan beras di contoh Ayam Gepuk).
🎓 Pahami dulu: kenapa ada Yield Factor & cara menghitungnya
Kenapa berat mentah ≠ berat matang
Banyak bahan menyusut saat diproses — air menguap saat digoreng, lemak meleleh, kulit & tulang dibuang, sayur layu. Yang Anda beli dan simpan di stok adalah berat mentah; yang masuk ke porsi pelanggan adalah berat matang/bersih yang lebih kecil. Kalau resep hanya mencatat berat matang, stok Anda akan terpotong terlalu sedikit dan laporan food cost jadi lebih murah dari kenyataan.
Yield Factor menjembatani keduanya:
Rumusnya — pakai angka asli dapur
Cara termudah menemukan Yield Factor: timbang sebelum & sesudah, lalu
Contoh: 100 gr ayam mentah → setelah digoreng tersisa 80 gr.
Yield Factor = 100 ÷ 80 = 1.250
Artinya: untuk menyajikan 80 gr ayam matang, stok dipotong 80 × 1.250 = 100 gr mentah. ✔
⚖️ Selalu ≥ 1.000. Karena bahan menyusut (mentah selalu ≥ matang), Yield Factor tidak pernah di bawah 1. Kalau Anda menghitung angka di bawah 1, kemungkinan besar berat mentah & matang tertukar.
Dua cara memakainya — pilih salah satu, jangan dua-duanya
Ada dua gaya mengisi resep, dan keduanya benar asal konsisten:
| Gaya | Qty/Porsi diisi… | Yield Factor | Cocok kalau… |
|---|---|---|---|
| A. Tulis berat matang + Yield | berat matang/bersih | angka susut (>1) | Anda menimbang porsi jadi (mis. 80 gr ayam) |
| B. Tulis berat mentah langsung | berat mentah | biarkan 1.000 | Anda sudah tahu takaran belanja mentahnya |
⚠️ Jangan campur. Kalau Qty/Porsi sudah Anda isi berat mentah, jangan lagi menaikkan Yield Factor — nanti stok terpotong dobel dan food cost melonjak palsu.
Contoh nyata: menu Ayam Gepuk Pak Gembus
Pakai Gaya A (tulis berat matang + Yield). Untuk satu porsi Ayam Gepuk (AYAM_GEPUK),
operator menimbang porsi matang lalu mengisi Yield Factor dari rasio susut tiap bahan:
lihat catatan ↓
Cara membaca tiap baris — dari pengalaman dapur, bukan rumus baku (timbang sendiri untuk angka warung Anda):
- Ayam —
1.250. Digoreng kering ala gepuk: 100 gr mentah jadi ±80 gr matang (air & lemak hilang). 100 ÷ 80 = 1.250. Inilah bahan yang paling penting diberi Yield Factor — porsinya besar dan harganya mahal, jadi salah sedikit langsung menggeser food cost. - Minyak —
1.000. Yang benar-benar terserap ke ayam (mis. 15 ml) sudah Anda timbang sebagai pemakaian bersih. Minyak penggorengan yang dipakai berulang bukan per porsi — jangan masukkan seluruh wajan ke satu porsi. Jadi biarkan1.000. - Sambal —
1.000. Sudah dihitung sebagai Sub-Resep matang (SR_SAMBAL_BAWANG) — susutnya, kalau ada, sebaiknya ada di dalam resep sambal itu, bukan di sini. Cukup1.000. - Lalapan —
1.100. Kol & timun dibuang sebagian (bonggol, ujung). 44 gr beli untuk sajikan 40 gr bersih → ±1.100. Kecil, tapi konsisten. - Beras → nasi — kasus khusus. Beras justru mengembang (bukan menyusut) saat jadi nasi. Lihat catatan di bawah.
🍚 Bahan yang MENGEMBANG (nasi, mie rebus) — jangan pakai Yield < 1 di sini. Yield Factor di MBS dirancang untuk susut (selalu ≥ 1). Untuk beras, pilih Gaya B: isi Qty/Porsi = berat beras mentah yang benar-benar Anda keluarkan dari stok per porsi (mis.
90 grberas untuk sepiring nasi) dan biarkan Yield1.000. Tulis nilai matang hanya sebagai catatan, jangan dijadikan Yield < 1 — itu akan mengurangi potongan stok dan menyembunyikan biaya beras Anda. (Baris0.450di tabel atas sengaja ditandai "lihat catatan" supaya Anda tidak menyalinnya mentah-mentah.)
🧪 Cek cepat sebelum simpan: kalikan Qty/Porsi × Yield di kepala — apakah hasilnya masuk akal sebagai belanja mentah per porsi? Untuk ayam: 80 × 1.25 = 100 gr mentah → wajar. Kalau hasilnya aneh (mis. 320 gr ayam mentah per porsi), berarti Yield-nya kebablasan.
B. Membuat & memakai Sub-Resep
Sub-Resep dibuat di form yang sama — bedanya cuma di tab Menu Key (pilih
Sub-Resep, yang mengunci awalan SR_) dan urutan pengerjaannya. Selalu simpan
Sub-Resep dulu, baru pakai di menu lain (sistem hanya mau memakai Sub-Resep yang sudah
tersimpan).
Langkah 1 — Pilih tab Sub-Resep, lalu ketik nama tanpa SR_
Di kolom Menu Key, ganti tab dari Menu jual ke Sub-Resep. Awalan
SR_ langsung terkunci di depan kolom — Anda cukup mengetik sisanya (mis.
BUMBU_RENDANG), dan sistem menyimpannya sebagai SR_BUMBU_RENDANG. Lalu tumpuk hanya Item
Bahan (bumbu, minyak, dst) ke Daftar Bahan dengan Tambah baris, baru Simpan Resep.
SR_
Awalan SR_ terkunci — ketik sisanya saja, mis.
BUMBU_RENDANG →
SR_BUMBU_RENDANG.
Tumpuk semua bahan bumbu sebagai baris-baris terpisah, lalu Simpan Resep sekali. Pastikan Jenis Bahan = Item Bahan untuk setiap baris — ingat, Sub-Resep tidak boleh berisi Sub-Resep lain.
Langkah 2 — Pakai Sub-Resep di resep menu
Isi Menu Key menu jualnya (misal RENDANG_DAGING). Pilih Jenis Bahan → Sub-Resep.
Kolom di sebelahnya berubah jadi "Pilih Sub-Resep (SR…)" yang berisi semua Sub-Resep yang
sudah Anda simpan. Tambahkan sebagai baris, lalu Simpan Resep:
- Pilih Sub-Resep (SR…) — dropdown ini hanya menampilkan Sub-Resep yang sudah tersimpan. Kalau yang Anda cari tidak muncul, berarti Anda belum menyimpannya (kembali ke Langkah 1).
- Qty/Porsi — berapa banyak Sub-Resep itu dipakai per porsi menu (misal
30.000gr bumbu). - Satuan — untuk Sub-Resep, satuan diketik manual (misal
gr/ml), karena Sub-Resep tidak punya satu satuan dasar tetap.
Langkah 3 — Ubah cukup sekali
Kalau resep bumbu berubah, Anda cukup mengubah Sub-Resep SR_BUMBU_RENDANG. Semua menu
yang memakainya otomatis ikut berubah — tidak perlu mengedit satu per satu.
Mengapa harus
SR_? Sistem memakai awalanSR_untuk mengenali sebuah kode sebagai Sub-Resep. Tanpa awalan itu, kode dianggap menu biasa dan tidak akan muncul di dropdown "Pilih Sub-Resep".
Membaca tabel Resep Tersimpan (kelompok per menu)
Di bawah form ada tabel Resep Tersimpan. Tabel ini dikelompokkan per Menu Key — satu baris untuk satu menu, bukan satu baris untuk satu bahan. Tiap baris menampilkan Menu Key, jumlah bahan (mis. 3 bahan), dan Scope.
3 bahan
tenantITEM
Daging Sapi · RM012
120.000 grSUBRECIPE
Bumbu Rendang · SR_BUMBU_RENDANG
30.000 gr
5 bahan
tenant- Tekan di kiri sebuah baris untuk membuka dan melihat daftar bahannya; tekan untuk menutup lagi.
- Saat dibuka, tiap bahan tampil dengan nama jelasnya (mis. Daging Sapi · RM012, Bumbu Rendang · SR_BUMBU_RENDANG) — bukan kode acak — beserta jumlah per porsinya.
- Untuk menghapus satu bahan, tekan ikon sampah () di baris bahan tersebut.
- Kotak pencarian di atas tabel mencari berdasarkan Menu Key, nama menu, atau kode/nama bahan. Anda juga bisa mengurutkan lewat kepala kolom Menu Key / Bahan, dan berpindah halaman di bawah tabel.
- Kalau bahan sebuah baris sudah dinonaktifkan atau digabungkan ke item lain (lihat Gabungkan Item), namanya tetap tampil apa adanya dengan keterangan kecil nonaktif di sebelahnya — bukan kode acak yang tidak terbaca. Resep-nya sendiri tidak perlu diubah; kalau bahan itu memang sudah tidak dipakai lagi, susun ulang resepnya lewat tombol Kelola → Ubah.
Mengubah seluruh resep sebuah menu (tombol Kelola → Ubah)
Untuk memperbaiki resep yang sudah ada (mis. mengganti jumlah bahan atau menambah baris), tekan tombol Kelola () di baris kelompok menu itu, lalu Ubah. Form di atas akan terisi ulang dengan semua baris bahan menu tersebut — perbaiki, lalu tekan Simpan Resep sekali. Semua baris tersimpan ulang dalam satu kali simpan (tidak membuat menu ganda).
⚠️ Menghapus satu bahan tidak lewat tombol Ubah. Saat mode Ubah, menghapus baris di form tidak otomatis menghapusnya dari resep tersimpan. Untuk membuang satu bahan, buka kelompok menunya () lalu tekan ikon sampah () di baris bahan itu. Tombol Ubah hanya untuk menambah/mengubah baris.
Halaman 2 — Peta Menu
Buka menu Peta & Resep → Peta Menu. Di sinilah Anda menghubungkan nama menu persis dari laporan POS dengan Menu Key internal. Nama POS harus diketik sama persis seperti yang muncul di laporan POS (termasuk huruf besar-kecilnya).
Isi nama menu POS dan Menu Key
- Nama Menu POS — salin persis dari kolom nama menu di laporan POS Anda.
- Menu Key — kode singkat KAPITAL yang Anda tentukan, misal
NASI_GORENG. Ini harus sama dengan Menu Key yang Anda pakai di Resep (BOM). Petunjuk di bawah kolom menunjukkan apakah resepnya sudah ada (✓ "Resep sudah ada (N baris)") atau masih kosong (⚠️ "Resep masih kosong"). - Default Spice (opsional) — tingkat pedas bawaan, kalau menu ini punya. Ini dipakai bersama modifier SPICE (lihat Halaman 3).
- Catatan (opsional) — keterangan bebas.
Tekan Simpan Peta Menu
Muncul ✅ Peta menu tersimpan. dan baris baru tampil di tabel Peta Menu Tersimpan di bawah (dengan pencarian + urutan + halaman, sama seperti tabel lainnya).
Memperbaiki atau menghapus baris (tombol Kelola)
Tiap baris di tabel Peta Menu Tersimpan punya tombol Kelola () di kolom paling kanan. Tekan tombol itu untuk membuka dua pilihan:
Ubah
Hapus
- Ubah — membuka kotak Ubah Peta Menu yang sudah terisi nilai baris itu (Menu Key, Default Spice, Catatan). Perbaiki seperlunya lalu tekan Simpan Perubahan — baris itu diperbarui di tempat, bukan menambah baris baru. Nama POS tidak bisa diubah di sini (itu kuncinya); kalau salah nama, hapus baris lama lalu buat baru.
- Hapus — menghapus baris (lunak — bisa dipulihkan lewat admin database bila perlu). Tidak ada konfirmasi karena bisa dibatalkan.
Hanya Admin & Owner yang melihat tombol Kelola aktif. Peran lain (mis. Manager) tetap bisa melihat tabelnya, tapi tombol Kelola-nya non-aktif (abu-abu) — mengubah peta menu adalah hak Admin/Owner.
Satu Menu Key bisa dipakai banyak nama POS. Misalnya "Nasi Goreng", "Nasi Goreng Biasa", dan "Nasi Goreng Special (tanpa cabai)" semuanya bisa dipetakan ke
NASI_GORENGkalau resep bahannya sama persis.
Halaman 3 — Peta Modifier
Buka menu Peta & Resep → Peta Modifier. Laporan POS sering punya modifier (varian/tambahan) di belakang nama menu — misalnya "pedas sedang", "potong dada", "Extra Tahu", "bungkus". Di halaman ini Anda memberi tahu sistem arti tiap modifier, supaya saat menu terjual, modifiernya ikut menambah atau mengganti bahan dengan benar.
🧠 Ingat model berpikirnya: menyimpan modifier tidak langsung memotong stok. Potongannya terjadi otomatis saat laporan POS diunggah, sebagai bagian dari rantai explosion.
Parent atau Modifier? Lihat kolomnya, bukan namanya
Ini kebingungan paling sering. Di laporan POS ada kolom "Menu Category Detail" berisi
label seperti PAKET GEMOI, MODIFIER, atau ALA CARTE. Label itu BUKAN penentunya.
Yang menentukan sebuah baris masuk ke Resep (parent) atau Peta Modifier cuma satu hal:
apakah baris itu berbayar (punya harga sendiri)?
| Situasi baris | Tanda di POS | Diisi di mana |
|---|---|---|
| Dipesan berdiri sendiri (dibayar) | baris berbayar (ada harga) | Peta Menu + Resep (jadi parent) |
| Menempel di bawah menu lain | berlabel | Peta Modifier |
💡 Aturannya: sesuatu yang bisa dijual sendiri selalu jadi parent (Peta Menu + Resep). Ia baru jadi modifier kalau menempel di bawah menu lain sebagai baris
(PACKAGE). Contoh:Sate Ususyang dipesan satuan = parent (buat resepnya); tapiSate Usus (PACKAGE)yang menempel di sebuah paket = modifier ADDON.
🔁 Kasus "dua-duanya". Satu item bisa muncul sebagai keduanya di hari yang sama — dijual satuan dan ditempel ke paket. Kalau begitu, isi dua-duanya: resepnya (untuk yang satuan) dan satu baris modifier ADDON (untuk yang menempel), dengan item yang sama, supaya stok terpotong sama persis lewat jalur mana pun. Cakupan akan menandai mana yang masih kurang.
Lima kelas modifier — pilih yang benar
Tiap modifier diberi satu Kelas. Kelas inilah yang menentukan apa yang diisi di kolom berikutnya:
| Kelas | Artinya | Yang dipilih di kolom Aksi | Contoh |
|---|---|---|---|
| ADDON | Menambah bahan | Item yang ditambah | Extra Tahu, extra telur |
| PACKAGING | Kemasan terpakai | Item kemasan | bungkus, dus, kresek |
| CUT | Potongan ayam tertentu | Item pengisi slot AYAM_CUT | potong dada, potong paha |
| SPICE | Mengganti sambal/bumbu | Sub-Resep sambal pengganti | pedas sedang, extra sambal |
| NOISE | Diabaikan (tak berpengaruh ke bahan) | — (tidak ada kolom) | tanpa sendok, catatan kasir |
💡 Kolom "Aksi" berubah mengikuti Kelas. Untuk ADDON/PACKAGING/CUT muncul pemilih Item (langsung nama bahan — bukan kode). Untuk SPICE muncul pemilih Sub-Resep. Untuk NOISE kolom itu hilang karena memang tidak perlu. Anda tidak perlu lagi menempel kode/ID mentah seperti dulu.
Isi teks modifier dari POS
- Modifier (teks dari POS) — tulis persis seperti yang tertulis di laporan POS
(mis.
Extra Tahu). Sistem mencocokkannya sama-persis dengan teks modifier di bill, jadi salah ketik = tidak cocok. - Label tampilan (opsional) — nama yang lebih enak dibaca, kalau perlu.
Pilih Kelas — kolom Aksi menyesuaikan otomatis
Contoh ADDON (menambah 1 Tahu). Pilih Kelas = ADDON, lalu pada "Item yang ditambah" pilih bahannya dari dropdown:
Di bawah kolom Aksi ada petunjuk singkat artinya — mis. "Stok item ini ikut terpotong tiap modifier ini muncul di bill."
🔢 "2 tahu" memotong 2, bukan 1 — jumlahnya diambil dari kolom Qty, bukan dari nama. Anda tidak perlu mengisi jumlah di sini: cukup satu baris ADDON
Tahu → item Tahu. Saat pelanggan memesan 2 tahu, laporan POS mencatatnya sebagai satu barisTahu (PACKAGE)dengan Qty = 2 — dan sistem memotong 2 Tahu dari stok teoretis, mengikuti angka di kolom Qty apa adanya. Jadi label modifier tetap tunggal (Tahu, bukan2 Tahu); yang menentukan berapa banyak dipotong selalu kolom Qty.
Contoh SPICE (mengganti sambal). Pilih Kelas = SPICE, lalu pada "Sub-resep sambal
pengganti" pilih Sub-Resepnya (kode SR_… yang sudah Anda buat di
Halaman 1):
Untuk NOISE, tidak ada kolom Aksi — muncul keterangan "Modifier ini diabaikan saat hitung stok — tidak perlu item." Gunakan NOISE untuk catatan kasir yang tidak mengubah bahan (mis. "tanpa sendok").
Tingkat pedas (Pedas/Sedang/Original): SPICE di sini, sambalnya di Resep
Tingkat pedas adalah pilihan pelanggan, jadi ia diklasifikasi SPICE di Peta Modifier —
jangan dijadikan baris bahan di dalam resep parent. Bahan sambalnya sendiri (cabai dll.)
tinggal di Resep, sebagai Sub-Resep SR01/SR02/SR03.
| Bagian | Di mana | Fungsinya |
|---|---|---|
| Sambalnya (cabai, bawang…) | Resep — Sub-Resep | Bahan yang benar-benar terpotong |
| Pilihan tingkat pedasnya | Peta Modifier — Kelas SPICE | Mengganti sambal mana yang dipakai |
Resep parent cukup memakai satu Sub-Resep sambal (yang default). Modifier SPICE hanya
menggantinya saat pelanggan memilih tingkat lain. Konvensinya wajib SR01/SR02/SR03
(mis. SR01 = Original, SR02 = Sedang, SR03 = Pedas) — hanya ketiga kode inilah yang
ditukar oleh modifier SPICE. Sambal ber-kode lain (SR04 dst.) tidak akan ikut tertukar.
Lengkapi juga Default Spice di Peta Menu — tingkat yang dipakai kalau pelanggan tidak memilih apa-apa.
Potongan ayam (Dada/Paha/Sayap): CUT hanya kalau stoknya dibedakan
Kelas CUT berguna hanya kalau inventori Anda menyimpan tiap potongan sebagai item
berbeda (Dada, Paha, Sayap = tiga item stok terpisah). CUT bekerja dengan mengisi slot
AYAM_CUT di resep — lihat cara membuat slotnya.
Tapi kalau ayam Anda cuma SATU item (mis. dihitung per potong/pcs, tanpa membedakan
bagian): jangan pakai CUT dan jangan pakai slot AYAM_CUT. Cukup:
- Resep — masukkan ayamnya langsung sebagai bahan biasa (item ayam yang asli, qty 1) —
bukan
AYAM_CUT. Satu potong tetap terpotong satu, apa pun bagian yang dipilih pelanggan. - Peta Modifier — klasifikasi
Dada/Paha/Sayapsebagai NOISE.
⚠️ Jangan cuma dilewati. Kalau
Dada/Paha/Sayaptidak Anda isi sama sekali, mereka akan muncul terus di Cakupan sebagai "Modifier Belum Terklasifikasi" — papan periksa Anda tidak akan pernah bersih. Menandainya NOISE = "sudah diputuskan: tidak memotong apa-apa" (bersih); membiarkannya kosong = "lupa dipetakan" (peringatan permanen). Hasil ke stok sama; bedanya cuma di Cakupan.
💡 Nanti kalau Anda mulai memisah stok Dada/Paha, tinggal ganti baris resepnya ke
AYAM_CUTdan ubah ketiga modifier itu dari NOISE → CUT (Aksi = item tiap potongan). Tidak ada perubahan lain.
Tekan Simpan Peta Modifier
Muncul ✅ Peta modifier tersimpan. dan baris baru tampil di tabel Peta Modifier Tersimpan. Tabel menampilkan kolom Aksi (item / sub-resep) yang sudah menerjemahkan kode jadi nama — mis. modifier "Extra Tahu" tampil aksinya "Tahu", bukan kode acak.
Memperbaiki atau menghapus modifier (tombol Kelola)
Sama seperti Peta Menu, tiap baris punya tombol Kelola () di kolom paling kanan dengan dua pilihan:
- Ubah — membuka kotak Ubah Peta Modifier yang sudah terisi Kelas, Aksi, dan Catatan baris itu. Kolom Aksi sudah menampilkan namanya (mis. Tahu, SR_SAMBAL), bukan kode acak. Saat Anda mengganti Kelas, pilihan Aksi otomatis dikosongkan (karena aksi untuk SPICE beda jenis dengan ADDON) — pilih ulang aksinya. Tekan Simpan Perubahan → baris diperbarui di tempat.
- Hapus — menghapus baris (lunak).
🔧 Modifier yang belum diklasifikasi akan muncul di ember Modifier Belum Terklasifikasi pada halaman Cakupan — itu daftar PR Anda di sini.
Halaman 4 — Cakupan
Buka menu Peta & Resep → Cakupan. Halaman ini menampilkan seberapa banyak menu POS yang sudah terpetakan dan terisi resepnya, sekaligus menunjukkan mana yang masih belum lengkap. Inilah papan periksa Anda — kerjakan sampai bersih.
Pilih Warung dan Periode — laporan langsung menyegar
Pilih Warung dan Periode di atas halaman. Begitu Anda memilih, laporan langsung diperbarui — tidak ada lagi tombol "Perbarui Cakupan" yang perlu ditekan. Pilihan Anda juga tersimpan di alamat halaman (URL), jadi tautannya bisa di-bookmark atau dibagikan.
2026-06
Baca persentase cakupan
Di atas daftar ada persentase cakupan (berapa persen bill POS yang sudah ter-resep) beserta labelnya:
- ✅ memenuhi target — cakupan baik, hampir semua menu sudah siap.
- ⚠️ di bawah target — masih ada banyak menu yang belum terpetakan atau resepnya kosong.
Baca tiga ember laporan
Laporan menampilkan tiga kelompok masalah — masing-masing menunjuk ke halaman perbaikannya:
| Ember | Artinya | Tindakan |
|---|---|---|
| 🗺️ Menu Belum Terpeta | Nama POS belum ada di Peta Menu | Tambah di Peta Menu |
| 📋 Resep Kosong | Menu Key sudah dipetakan tapi belum ada barisnya | Isi di Resep (BOM) |
| 🔧 Modifier Belum Terklasifikasi | Modifier POS belum ada di Peta Modifier | Isi di Peta Modifier |
Dua ember pertama (Menu Belum Terpeta dan Resep Kosong) sekarang tampil sebagai tabel yang bisa dicari, diurutkan, dan dihalaman — sama seperti tabel lain di aplikasi:
- Kotak pencarian di tiap tabel — ketik untuk menyaring (cari nama menu POS, atau cari Menu Key).
- Kepala kolom bisa diklik untuk mengurutkan — mis. urutkan kolom Jumlah Bill dari besar ke kecil untuk melihat menu paling laku yang belum siap lebih dulu.
- Tombol halaman di bawah tiap tabel kalau daftarnya panjang.
Tiap baris menampilkan Jumlah Bill — semakin tinggi angkanya, semakin sering menu itu terjual, jadi prioritaskan yang besar dulu.
Isi yang masih kosong — laporan menyegar sendiri
Kerjakan dari atas ke bawah: petakan nama POS dulu, lalu isi resep bahannya, lalu klasifikasi modifiernya (pindah antar halaman lewat menu sidebar). Saat Anda kembali ke Cakupan, laporan otomatis terbaca ulang untuk Warung & Periode yang dipilih — tidak perlu menekan tombol apa pun. Saat semua beres, kedua tabel digantikan pesan "Semua menu sudah terpeta dan memiliki resep. 🎉".
Tingkat Cakupan (Scope)
Semua baris di halaman-halaman ini (resep, peta menu, peta modifier) bisa diatur di tingkat Tenant (berlaku semua outlet) atau Warung tertentu. Pilih di kolom Tingkat di tiap formulir sebelum menyimpan.
- Tenant (global) — paling umum. Satu resep berlaku di semua outlet.
- Warung — buat hanya kalau resep di satu outlet berbeda. Outlet mewarisi pengaturan tenant otomatis; baris tingkat Warung akan menggantikan baris tenant untuk menu itu (bukan menggabung) — jadi salin ulang seluruh bahan menu itu kalau Anda meng-override per outlet.
Membuka Kembali Periode yang Sudah Ditutup (Admin Platform)
Panduan khusus Admin Platform (super admin) membuka kembali satu periode (bulan) per outlet yang TIDAK SENGAJA ditutup — dengan peringatan keras saat detail buku besar sudah tidak bisa dikembalikan, konfirmasi ganda, alasan wajib, dan jejak audit penuh.
Pengaturan Override (Tenant → Grup → Outlet)
Cara admin/owner mengatur nilai default di tingkat tenant, grup, atau outlet lewat bagian Pengaturan (override cascade) di Data Master — target dashboard, harga standar, reorder par, kontak, dan konstanta (§4.14). Outlet yang tidak punya override otomatis mewarisi nilai dari grup atau default tenant, tanpa menyalin baris.