Gambaran Umum

Bila diskon reguler diberikan secara bebas oleh kasir di meja pembayaran, maka Kode Promo (Voucher Promo) adalah alat pemasaran proaktif yang didorong (push-marketing) kepada pelanggan sebelum mereka datang ke toko. Fitur ini memungkinkan pengelola bisnis di Temuya POS untuk menciptakan kode alphanumeric yang bisa disebarkan melalui media sosial, selebaran, email newsletter, atau platform pemesanan mandiri. Kode promo mengubah pembeli yang ragu-ragu menjadi pembeli impulsif karena efek kelangkaan waktu dan syarat khusus.

Modul Kode Promo sangat terstruktur. Anda bukan sekadar membagikan “Potongan 20%”, melainkan menciptakan sebuah kampanye strategis. Anda dapat mengatur aturan yang ketat (rules engine) seperti: Promo “GAJIAN50” hanya berlaku akhir bulan, dengan minimum pembelanjaan Rp 200.000, memberikan diskon 15% maksimal Rp 50.000, dan hanya bisa diklaim oleh 100 orang pertama. Di meja kasir, sistem secara otomatis menjadi penjaga gerbang (gatekeeper) untuk memvalidasi seluruh kriteria tersebut tanpa perlu kasir memeriksa kalender atau menghitung manual.

Alur Kerja

Skenario Bisnis Praktis: Sebuah restoran cepat saji menyebarkan brosur di sekitar kampus dengan tulisan “Tunjukkan brosur ini dan sebutkan kode MAHASISWAHEMAT untuk gratis potongan Rp 15.000, syarat beli 2 paket burger”. Mahasiswa Budi datang dan memesan pesanan tersebut. Kasir mengklik tombol ‘Gunakan Promo Code’ dan mengetikkan MAHASISWAHEMAT. Sistem dalam hitungan milidetik mengecek: Apakah promo ini masih dalam rentang tanggal yang valid? Ya. Apakah keranjang berisi minimal 2 paket burger? Ya. Apakah batas kuota belum habis? Ya. Maka, sistem akan menyetujui, menambahkan keterangan promo di layar kasir, dan mengurangi harga bill sebesar Rp 15.000.

Jika Budi hanya memesan 1 burger, saat kode dimasukkan, sistem akan menolak dan menampilkan pesan galat: “Keranjang tidak memenuhi syarat minimum qty atau total nilai pembelian”.

flowchart TD
    A[Mulai - Kasir Input Kode Promo] --> B[Kueri Kode Promo dari Database]
    B --> C{Apakah Kode Valid/Aktif?}
    
    C -->|Tidak| D[Tampilkan Error: Kode Tidak Ditemukan/Expired]
    C -->|Ya| E{Cek Syarat: Minimum Belanja?}
    
    E -->|Tidak Memenuhi| F[Tampilkan Error: Belanja Belum Mencapai Minimum]
    E -->|Memenuhi| G{Cek Syarat: Kuota Global / Pelanggan?}
    
    G -->|Habis| H[Tampilkan Error: Kuota Promo Habis]
    G -->|Tersedia| I[Hitung Nilai Diskon]
    
    I --> J{Apakah Ada Batas Maksimal Diskon?}
    J -->|Ya| K[Terapkan Nilai Diskon Maksimum yang Ditentukan]
    J -->|Tidak| L[Terapkan Nilai Diskon Penuh]
    
    K --> M[Kurangi Total Keranjang Belanja]
    L --> M
    M --> N[Selesai & Catat Pemakaian Kuota]

Teknologi & Infrastruktur

Infrastruktur modul ini berpusat pada Mesin Validasi Aturan (Rules Validation Engine) yang harus berjalan efisien (lightweight) agar tidak melambatkan proses checkout. Setiap kali sebuah keranjang berubah (produk ditambah atau dikurangi), validasi harus di-evaluasi ulang secara dinamis.

Tabel DatabaseDeskripsi Fungsi
promo_codesMenyimpan nama kampanye, string kode, tipe diskon (persen/nominal), batas masa berlaku, dan kuota pemakaian global.
promo_code_rulesTabel relasional untuk menyimpan syarat spesifik, seperti min_subtotal, required_items, atau customer_group_only.
promo_usagesLog historis pemakaian promo per transaksi untuk mengamankan limit kuota, menghindari pemakaian lebih.
Endpoint APIKegunaan
POST /api/v1/cart/apply-promoEndpoint utama saat kasir mencoba memasukkan teks kode promo.
DELETE /api/v1/cart/remove-promoMencopot promo jika pelanggan mengubah pikiran.
GET /api/v1/promos/activeMengambil daftar promo publik yang sedang berjalan untuk ditampilkan ke pelanggan di struk / display layar pembeli.

Modul ini juga menggunakan sistem kunci database transaction (pessimistic locking) pada saat pembayaran terjadi, untuk mencegah race-condition saat kuota promo tinggal 1, dan dua pelanggan mencoba memakainya di detik yang bersamaan.

Keterkaitan dengan Fitur Lain

Kode promo merupakan ujung tombak kampanye marketing yang bersinggungan erat dengan komponen operasional kasir dan manajemen produk:

  1. Katalog Produk & Kategori: Promo dapat dikunci hanya untuk berlaku pada kategori tertentu (misalnya kode “NGOPI” hanya memotong harga Minuman, dan tidak memotong harga Kue meskipun berada dalam transaksi yang sama).
  2. Database Pelanggan: Promo dapat dibatasi penggunanya (User Limit). Misalnya: Hanya bisa diklaim maksimal 1x per ID Pelanggan. Ini mensyaratkan pelanggan tersebut wajib terdaftar di CRM untuk memvalidasi penggunaan histori mereka.
  3. Laporan & Analitik Marketing: Pemilik usaha dapat mengekstrak laporan kampanye mana yang paling sukses (Return on Investment tinggi) dengan melacak total penggunaan dan total nilai penjualan (revenue) yang dihasilkan dari satu kode spesifik.
flowchart LR
    A[Modul Kasir & Keranjang] -->|Validasi Kode| B(Rules Engine Promo)
    B --> C[Manajemen Katalog / Kategori]
    B --> D[Pelanggan CRM / User Limit]
    B --> E[Analitik Kampanye Marketing]

Hal Penting yang Perlu Diketahui

  1. Multiple Promos (Larangan Tumpuk): Secara sistematis, Temuya POS memastikan sebuah transaksi hanya dapat menampung SATU (1) Kode Promo pada satu waktu. Ini melindungi bisnis dari insiden di mana pelanggan menggabungkan tiga kode promo berbeda untuk mendapatkan produk secara gratis secara tidak sengaja.
  2. Batas Maksimal Potongan: Untuk promo tipe Persentase (misal diskon 50%), wajib bagi manajemen untuk menetapkan Cap (batas maskimal potongan). Jika tidak, pembelian bernilai puluhan juta akan merugikan secara masif. Sistem menyediakan parameter “Diskon 50%, Maksimal Rp 25.000”.
  3. Pembedaan Kode Khusus vs Publik: Manajemen dapat membuat ribuan kode unik (satu kode unik per orang / single-use generated code) untuk hadiah kompensasi personal, atau membuat satu vanity code massal (seperti HUTRI79) untuk disebarkan secara luas di billboard. Keduanya ditangani melalui sistem ini secara mulus.