Modifier & Opsi Tambahan
Sistem opsi tambahan (modifier) khusus bisnis FnB: pilihan topping, level gula, hingga opsi kustomisasi pesanan.
Gambaran Umum
Jika fitur Varian digunakan untuk spesifikasi inti yang mengubah barang (seperti ukuran M/L atau warna), maka fitur “Modifier” dirancang khusus untuk kustomisasi pesanan yang sifatnya sebagai “tambahan”, “opsi”, atau “instruksi spesifik”. Modul Modifier adalah fitur krusial (killer feature) untuk bisnis kuliner dan F&B masa kini. Pelanggan hari ini sangat menyukai personalisasi; mereka ingin minuman dengan sedikit gula, tambahan keju ekstra, susu oat, dan es dipisah.
Berbeda dengan varian yang memaksa pilihan tunggal wajib (misalnya ukuran harus dipilih salah satu), modifier beroperasi layaknya checklist yang jauh lebih dinamis. Pengelola dapat memberikan kebebasan mutlak kepada pelanggan untuk tidak memilih modifier sama sekali, memilih satu, atau bahkan memilih lima topping berbeda sekaligus.
Skenario bisnis yang paling sering ditemui adalah pada gerai minuman boba atau burger joint. Saat memesan “Classic Beef Burger”, pelanggan diizinkan menambah “Extra Cheese” (seharga Rp 5.000) dan “Extra Bacon” (seharga Rp 10.000). Semua preferensi ini dicatat oleh kasir menggunakan antarmuka modifier, yang kemudian dikalkulasi secara total dan—yang paling penting—tercetak dengan rapi sebagai instruksi di dapur (Kitchen Printer) agar tim pembuat masakan tahu persis cara membuat pesanan spesifik tersebut.
Alur Kerja
Pembuatan modifier selalu dimulai dari konsep “Grup Modifier” (Modifier Groups). Ini adalah payung yang membawahi pilihan-pilihan kecil di dalamnya.
Misalkan seorang pemilik kedai kopi merilis menu “Caramel Macchiato”. Mereka kemudian masuk ke dashboard admin untuk mengatur opsi kustomisasi pelanggan melalui dua langkah utama:
- Membuat Grup “Level Manis” (Sugar Level)
- Pemilik membuat grup ini. Di dalamnya, ia memasukkan pilihan: Normal Sugar, Less Sugar, No Sugar.
- Semuanya berharga Rp 0 (gratis).
- Pemilik mengatur aturan: Minimal Pilih = 1, Maksimal Pilih = 1. Ini berarti kasir harus menanyakan level manis kepada pelanggan dan tidak boleh memilih dua level manis sekaligus.
- Membuat Grup “Tambahan Topping” (Add-ons)
- Pemilik membuat grup ini. Pilihannya: Boba (+Rp 3.000), Pudding (+Rp 4.000), Whip Cream (+Rp 5.000).
- Aturan yang diset: Minimal Pilih = 0, Maksimal Pilih = 3. Ini berarti pelanggan boleh tidak tambah topping sama sekali, atau tambah ketiganya jika mereka mau.
Setelah grup modifier ini dibuat, pengelola menautkannya (assign) ke produk “Caramel Macchiato”. Saat dioperasikan oleh kasir, menekan tombol kopi tersebut akan membuka panel khusus di layar. Panel ini menampilkan opsi Level Manis yang wajib diisi (biasanya ditandai bintang merah), dan opsi Topping yang sifatnya checkbox pilihan ganda. Sistem akan langsung mengkalkulasi harga akhir berdasarkan berapa banyak topping berbayar yang dicentang.
flowchart TD
A[Setup: Buat Modifier Group] --> B{Atur Nama Grup}
B -- Contoh: Level Gula --> C[Set Aturan Min/Max: 1/1]
B -- Contoh: Pilihan Topping --> D[Set Aturan Min/Max: 0/Bebas]
C --> E["Tambah Items: Normal, Less, No Sugar"]
D --> F["Tambah Items: Boba(+3k), Jelly(+2k)"]
E --> G[Tautkan Grup ke Produk 'Kopi Susu']
F --> G
G --> H[Kasir Order: Klik 'Kopi Susu']
H --> I[Muncul Panel Pilihan Modifier]
I --> J{Validasi Pilihan Kasir}
J -- Tidak Memenuhi Syarat (Misal: Gula kosong) --> K[Tahan Order, Munculkan Peringatan]
J -- Valid --> L[Hitung Total & Masuk Keranjang]
L --> M[Pesanan Tercetak di Dapur dgn Detail Modifier]
Teknologi & Infrastruktur
Modul ini memiliki struktur database yang sedikit lebih kompleks karena melibatkan relasi Many-to-Many. Satu Modifier Group (misal: “Pilihan Topping”) bisa dipakai oleh puluhan produk berbeda (Kopi Susu, Milk Tea, Thai Tea). Sebaliknya, satu Produk (Kopi Susu) bisa memiliki banyak Modifier Group (Topping, Gula, Es).
Untuk mewadahi ini, kita menggunakan pivot table atau tabel penghubung product_modifier_groups. Struktur harga modifier berada di tingkat modifier_items. Berbeda dengan Varian di mana sistem menjumlahkan harga dasar dan adjustment, perhitungan transaksi modifier di sistem backend memecahnya menjadi struktur data JSON bersarang (nested).
Dalam pesanan, satu entitas TransactionItem (Kopi Susu) akan memiliki array selected_modifiers yang di dalamnya berisi referensi ke item modifier yang dipilih beserta snapshot harganya saat itu. Snapshot harga (menyalin harga ke tabel transaksi) sangat penting, sebab jika harga Boba besok naik, nota transaksi hari ini tidak boleh ikut berubah.
Tabel Database Terkait
| Nama Tabel | Deskripsi | Kolom Penting |
|---|---|---|
modifier_groups | Grup yang membawahi opsi-opsi (misal: “Topping”). | id, name, min_selection, max_selection |
modifier_items | Opsi spesifik (misal: “Boba”). | id, modifier_group_id, name, price |
product_modifier_groups | Tabel pivot relasi Many-to-Many. | product_id, modifier_group_id |
Endpoint API
| Metode | Endpoint | Fungsi dan Kegunaan |
|---|---|---|
GET | /api/v1/modifier-groups | Mengambil daftar master seluruh grup modifier toko. |
POST | /api/v1/modifier-groups | Membuat grup modifier beserta item-nya dan aturan min/max secara bersamaan. |
POST | /api/v1/products/:id/modifiers | Menautkan sebuah modifier group ke produk spesifik (mengisi tabel pivot). |
GET | /api/v1/products/:id/modifiers | Saat aplikasi kasir menekan produk, endpoint ini dipanggil untuk memuat form opsi kustomisasi dengan aturannya. |
Keterkaitan dengan Fitur Lain
- Kitchen Display System (KDS) / Printer Dapur: Modifier hidup dan bernapas untuk komunikasi dapur. Item utama dicetak besar (KOPI SUSU), sedangkan modifier dicetak di bawahnya dengan teks lebih kecil dan di-indentasi (- Less Sugar, - Extra Boba). Tanpa modifier, koki tidak akan tahu spesifikasi pesanan.
- Sistem Inventori (Level Bahan Baku): Dalam implementasi advanced, setiap
modifier_itemdapat disambungkan ke resep (Recipe). Sehingga ketika pelanggan menambah ekstra keju, sistem inventori tidak hanya mencatat tambahan omzet Rp 5.000, tetapi juga mengurangi stok “Keju Slice” sebanyak 1 lembar dari gudang. - Laporan Upselling: Modifier adalah alat upsell yang luar biasa. Laporan dapat menunjukkan performa kasir: “Dari 100 kopi yang terjual oleh Kasir A, berapa persen yang berhasil ia upsell dengan tambahan sirup karamel?”.
Hal Penting yang Perlu Diketahui
- Logic Constraint di Frontend: Aturan Min/Max Selection harus dikawal ketat oleh aplikasi frontend kasir. Jika
min=1, tombol “Simpan Pesanan” di layar pop-up modifier harus berstatus disabled (abu-abu) sampai kasir menceklis setidaknya satu opsi. Ini mencegah pesanan ambigu masuk ke dapur. - Perbedaan Konseptual Varian vs Modifier: Aturan praktis untuk menjelaskan ke pengguna: Jika sebuah perubahan mengubah wujud fisik atau SKU dasar barang (seperti kaos S ke kaos M, sepatu 40 ke 41), gunakan Varian. Jika perubahan tersebut hanyalah sekadar tambahan, bumbu, atau preferensi rasa di atas produk utama, gunakan Modifier.
erDiagram
PRODUCTS }o--o{ MODIFIER_GROUPS : "memiliki opsi"
MODIFIER_GROUPS ||--|{ MODIFIER_ITEMS : "terdiri dari"
PRODUCTS {
string id PK
string name "ex: Kopi Susu"
}
MODIFIER_GROUPS {
string id PK
string name "ex: Pilihan Topping"
int min_selection "Aturan minimal"
int max_selection "Aturan maksimal"
}
MODIFIER_ITEMS {
string id PK
string group_id FK
string item_name "ex: Boba"
decimal price "ex: 3000"
}