> ## Documentation Index
> Fetch the complete documentation index at: https://docs.quinnsambal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Discount management

<style>
  {`
    [class*="max-w-none"][class*="table"] {
      display: block !important;
      overflow-x: auto !important;
      max-width: 100% !important;
      width: 100% !important;
      flex-grow: 0 !important;
    }
    [class*="max-w-none"][class*="table"] > table {
      width: 100% !important;
      max-width: 100% !important;
      table-layout: fixed !important;
    }
    .mermaid {
      max-width: 100% !important;
      overflow-x: auto !important;
    }
    article svg[role="img"] {
      max-width: 100% !important;
      height: auto !important;
    }
    article img, .prose img {
      max-width: 100% !important;
      height: auto !important;
    }
    img[src*="LOGO"], img[src*="logo"] {
      max-width: 120px !important;
      max-height: 40px !important;
      width: auto !important;
      height: auto !important;
      object-fit: contain !important;
    }
    `}
</style>

***

title: "Discount Management"
description: "Kelola diskon persentase, voucher, bundle deals, dan promo dengan syarat ketentuan, prioritas, dan statistik."
----------------------------------------------------------------------------------------------------------------------------

# Discount Management

<img src="https://mintcdn.com/quinnofspicy/e4f_upKhVWcjsUmM/docs/mintlify/screenshots/inventory/discount-management.png?fit=max&auto=format&n=e4f_upKhVWcjsUmM&q=85&s=ff13c4b6da2e982780f0e45e9184774d" alt="Discount Management" width="1920" height="1080" data-path="docs/mintlify/screenshots/inventory/discount-management.png" />

Discount Management mengatur seluruh jenis promosi dan diskon yang berlaku di bisnis Quinn of Spicy. Mulai dari diskon persentase, potongan harga langsung, voucher dengan kode unik, hingga bundle deals — semuanya dikonfigurasi dari satu tempat. Setiap promo memiliki syarat & ketentuan, periode berlaku, batas penggunaan, dan prioritas untuk menangani kasus promo bertabrakan.

## Arsitektur Discount Management

```mermaid theme={null}
graph TB
    subgraph "Jenis Promo (4 Types)"
        DP[Diskon Produk<br/>% atau Nominal]
        DT[Diskon Total<br/>% atau Nominal]
        VC[Voucher<br/>Kode Unik]
        BD[Bundle Deals<br/>Paket Produk]
    end

    subgraph "Pengaturan Promo"
        PR[Priority<br/>Prioritas Promo]
        TC[Terms & Conditions<br/>Syarat & Ketentuan]
        PD[Period<br/>Periode Berlaku]
        LM[Usage Limit<br/>Batas Penggunaan]
    end

    subgraph "Channel Integrasi"
        POS[POS<br/>Terapkan saat Transaksi]
        WEB[Website<br/>Input Kode Voucher]
        WA[WhatsApp<br/>Share Kode Promo]
    end

    subgraph "Analytics Engine"
        ST[Statistics<br/>Penggunaan & Efektivitas]
        ROI[ROI Calculator<br/>Return on Investment]
    end

    DP & DT & VC & BD --> PR & TC & PD & LM
    DP & DT & VC & BD --> POS & WEB & WA
    POS & WEB & WA --> ST
    ST --> ROI
```

## Entity Promo

| Field | Tipe | Wajib | Deskripsi |
| - | - | - | - |
| `id` | UUID | Auto | Primary key |
| `name` | string | Ya | Nama promo (contoh: "Diskon Sambal 20%") |
| `type` | enum | Ya | `product_discount`, `total_discount`, `voucher`, `bundle` |
| `discount_type` | enum | Ya | `percentage` atau `fixed` (nominal) |
| `discount_value` | number | Ya | Nilai diskon (20 untuk 20%, atau 5000 untuk Rp 5.000) |
| `scope` | enum | Tidak | `all_products` atau `specific_products` |
| `product_ids` | array | Tidak | Daftar produk yang terkena diskon |
| `min_purchase` | number | Tidak | Minimum belanja untuk qualify |
| `max_discount` | number | Tidak | Batas maksimal diskon (untuk persentase) |
| `start_date` | date | Ya | Tanggal mulai berlaku |
| `end_date` | date | Ya | Tanggal berakhir |
| `max_claims` | number | Tidak | Total kali bisa digunakan |
| `per_user_limit` | number | Tidak | Batas per pelanggan |
| `priority` | number | Auto | Prioritas (1 = tertinggi) |
| `is_active` | boolean | Ya | Status aktif/nonaktif |
| `usage_count` | number | Auto | Berapa kali sudah digunakan |
| `total_discount_given` | number | Auto | Total nilai diskon yang sudah diberikan |
| `company_id` | FK → Company | Ya | Scope perusahaan |

## 4 Jenis Promo

### 1. Diskon Produk

Diskon pada produk tertentu atau seluruh toko.

| Field | Deskripsi | Contoh |
| - | - | - |
| **Nama Promo** | Identifikasi promo | "Diskon Sambal 20%" |
| **Tipe Diskon** | Persentase atau Nominal | Persentase |
| **Nilai Diskon** | Angka | 20% |
| **Scope** | Produk tertentu / Semua produk | Produk: Sambal Matah |
| **Min. Belanja** | Minimum total belanja untuk qualify | Rp 50.000 |
| **Periode** | Tanggal mulai & berakhir | 1 Okt - 31 Okt 2026 |
| **Max Discount** | Batas maksimal diskon (untuk persentase) | Rp 50.000 |

### 2. Diskon Total Belanja

Diskon yang berlaku untuk total belanja, bukan per produk.

| Tier | Min. Belanja | Diskon | Contoh Kalkulasi |
| - | - | - | - |
| Tier 1 | Rp 100.000 | 5% | Belanja Rp 150.000 → diskon Rp 7.500 |
| Tier 2 | Rp 250.000 | 10% | Belanja Rp 300.000 → diskon Rp 30.000 |
| Tier 3 | Rp 500.000 | 15% | Belanja Rp 600.000 → diskon Rp 90.000 |

### 3. Voucher

Kode unik yang bisa dibagikan ke pelanggan.

| Field | Deskripsi | Contoh |
| - | - | - |
| **Kode Voucher** | Alfanumerik, unik | PEDAS20 |
| **Tipe** | Persentase atau Nominal | Persentase |
| **Nilai** | Angka | 20% |
| **Max Klaim** | Total kali bisa digunakan | 100 kali |
| **Per User** | Batas per pelanggan | 1 kali |
| **Min. Belanja** | Minimum belanja | Rp 50.000 |
| **Max Discount** | Batas maksimal diskon | Rp 100.000 |
| **Periode** | Tanggal mulai & berakhir | 1 Okt - 31 Okt 2026 |
| **Channel** | Kanal yang berlaku | POS, Website, WhatsApp |

### 4. Bundle Deals

Gabungkan beberapa produk menjadi paket dengan harga spesial.

| Field | Deskripsi | Contoh |
| - | - | - |
| **Nama Bundle** | Identifikasi paket | "Paket Hemat Sambal" |
| **Produk dalam Bundle** | Daftar produk + qty | Sambal Matah 2x + Sambal Rojak 1x |
| **Harga Normal** | Total harga individual | Rp 55.000 |
| **Harga Bundle** | Harga paket | Rp 45.000 |
| **Diskon** | Selisih (auto) | Rp 10.000 (18%) |
| **Stok Bundle** | Jumlah paket tersedia | 50 paket |
| **Periode** | Tanggal mulai & berakhir | 1 Okt - 15 Okt 2026 |

## Prioritas Promo

```mermaid theme={null}
flowchart TD
    A[Transaksi POS/Web] --> B{Ada Voucher Code?}
    B -->|Ya| C["Voucher<br/>Prioritas 1<br/>🥇 Highest"]
    B -->|Tidak| D{Ada Bundle Deal<br/>yang match?}
    D -->|Ya| E["Bundle Deal<br/>Prioritas 2<br/>🥈"]
    D -->|Tidak| F{Ada Diskon Produk<br/>yang qualify?}
    F -->|Ya| G["Diskon Produk<br/>Prioritas 3<br/>🥉"]
    F -->|Tidak| H{Ada Diskon Total<br/>yang qualify?}
    H -->|Ya| I["Diskon Total<br/>Prioritas 4<br/>🏅"]
    H -->|Tidak| J[Tanpa Promo<br/>Harga Normal]
```

| Prioritas | Jenis | Stackable? | Deskripsi |
| - | - | - | - |
| **1 (Tertinggi)** | Voucher | Tidak stackable dengan diskon lain | Kode unik dari customer |
| **2** | Bundle Deal | Tidak stackable | Paket produk sudah include diskon |
| **3** | Diskon Produk | Stackable dengan diskon total | Bisa digabung dengan tier discount |
| **4 (Terendah)** | Diskon Total Belanja | Stackable dengan diskon produk | Berlaku otomatis berdasarkan total |

## Syarat & Ketentuan

| Syarat | Deskripsi | Contoh | Validasi |
| - | - | - | - |
| **Minimum Belanja** | Total belanja minimum | Rp 50.000 | `cart.total >= min_purchase` |
| **Produk Tertentu** | Hanya berlaku untuk produk ini | Sambal Matah, Ayam Suwir | `cart.items ∋ product_ids` |
| **Kategori Tertentu** | Hanya untuk kategori ini | Sambal & Bumbu | `cart.items.category ∋ categories` |
| **Segmen Pelanggan** | Hanya untuk segmen ini | Member Gold & Platinum | `customer.segment ∋ segments` |
| **Channel Tertentu** | Hanya berlaku di channel ini | Website only | `source ∈ channels` |
| **Hari Tertentu** | Hanya hari ini | Senin - Rabu | `dayOfWeek ∈ days` |
| **Jam Tertentu** | Hanya jam ini | 10:00 - 14:00 | `hour ∈ [start, end]` |

## Status Promo

```mermaid theme={null}
stateDiagram-v2
    [*] --> AkanDatang: start_date > today
    AkanDatang --> Aktif: start_date reached<br/>&& usage < max_claims
    Aktif --> Berakhir: end_date reached
    Aktif --> Habis: usage_count >= max_claims
    Aktif --> Nonaktif: Admin deactivate manual
    Berakhir --> [*]
    Habis --> [*]
    Nonaktif --> Aktif: Admin reactivate
    Nonaktif --> [*]
```

| Status | Kondisi | Warna |
| - | - | - |
| **Aktif** | Dalam periode & belum habis limit | 🟢 Hijau |
| **Akan Datang** | Tanggal mulai di masa depan | 🔵 Biru |
| **Berakhir** | Sudah lewat tanggal berakhir | ⬜ Abu-abu |
| **Habis** | Sudah mencapai max klaim | 🟡 Kuning |
| **Nonaktif** | Dimatikan manual | 🔴 Merah |

## Statistik & Efektivitas

### Metrik per Promo

| Metrik | Perhitungan | Deskripsi |
| - | - | - |
| **Total Klaim** | `usage_count` | Berapa kali promo digunakan |
| **Total Diskon** | `total_discount_given` | Nilai diskon yang diberikan |
| **Revenue Generated** | `Σ cart.total where promo applied` | Pendapatan dari transaksi promo |
| **Avg Order Value** | `revenue / total_claims` | Rata-rata nilai transaksi promo |
| **Conversion Rate** | `claims / views × 100%` | % pelanggan yang menggunakan |
| **ROI** | `(revenue - discount_cost) / discount_cost` | Return on investment |

### Contoh Laporan

| Promo | Klaim | Diskon | Revenue | AOV | ROI | Status |
| - | - | - | - | - | - | - |
| PEDAS20 (Voucher) | 85 | Rp 1.275.000 | Rp 8.500.000 | Rp 100K | 5.66x | 🟢 Efektif |
| Diskon Sambal 20% | 120 | Rp 900.000 | Rp 5.400.000 | Rp 45K | 5.00x | 🟢 Efektif |
| Paket Hemat Sambal | 45 | Rp 450.000 | Rp 2.025.000 | Rp 45K | 3.50x | 🟡 Cukup |
| Diskon Akhir Tahun 10% | 200 | Rp 2.000.000 | Rp 18.000.000 | Rp 90K | 8.00x | 🟢 Sangat Efektif |

## Flow Penggunaan

```mermaid theme={null}
sequenceDiagram
    participant O as Owner/Inventory
    participant S as Sistem
    participant C as Pelanggan
    participant K as Kasir

    O->>S: Buat Promo (nama, tipe, nilai, periode, syarat)
    S->>S: Validasi & Simpan
    S->>S: Aktifkan (status = active)
    
    C->>K: Belanja di POS/Web
    K->>S: Input transaksi
    S->>S: Cek semua promo aktif
    S->>S: Filter by syarat (min purchase, products, dll)
    S->>S: Urutkan by priority
    S->>S: Terapkan promo prioritas tertinggi
    S->>K: Tampilkan harga setelah diskon
    K->>C: Informasikan diskon
    S->>S: Catat penggunaan (usage_count++)
    S->>S: Update total_discount_given
```

## Cara Akses

Dari sidebar, klik menu **Inventory** > **Discount Management**.

## Tips

* **Buat kalender promo** agar punya gambaran promosi apa saja yang berjalan setiap bulan dan tidak ada yang bentrok
* **Monitor statistik penggunaan** secara berkala untuk mengetahui promo mana yang efektif dan mana yang perlu dievaluasi
* **Jangan terlalu banyak promo bersamaan** — bisa membingungkan pelanggan dan menggerus margin
* **Set max\_claims untuk voucher** — mencegah voucher bocor dan digunakan berlebihan
* **Gunakan ROI sebagai metrik utama** — promo dengan ROI > 5x berarti setiap Rp 1 diskon menghasilkan Rp 5 revenue
* **Test promo di Preview mode** sebelum publish — pastikan kalkulasi diskon sudah benar
* **Review promo yang expired** — hapus atau arsipkan promo lama supaya daftar tetap rapi

***

## Entity Schema & Relasi

### ER Diagram — Discount & Entitas Terkait

```mermaid theme={null}
erDiagram
    Company ||--o{ Discount : "memiliki"
    Discount }o--o{ CompanyPOSProduct : "berlaku pada (product_ids)"
    Discount }o--o{ CompanyPOSCategory : "berlaku pada (category_names)"
    Discount ||--o{ CompanyPOSTransaction : "diterapkan pada"

    Company {
        string id PK
        string name
    }

    Discount {
        string id PK
        string company_id FK
        string discount_name
        string discount_type "percentage | fixed_amount | buy_x_get_y | coupon_code"
        number value
        number buy_quantity
        number get_quantity
        number min_purchase_amount
        number max_discount_amount
        string applies_to "all_products | specific_products | specific_categories"
        array product_ids
        array category_names
        string coupon_code
        number usage_limit
        number used_count
        date start_date
        date end_date
        boolean is_active
        string description
    }

    CompanyPOSProduct {
        string id PK
        string company_id FK
        string name
        string sku
        string category
        number price
        number stock
        boolean is_active
    }

    CompanyPOSTransaction {
        string id PK
        string company_id FK
        string transaction_number
        array items
        number subtotal
        number discount_amount
        number discount_percentage
        number total
        string payment_method
        string source
    }
```

## Tabel Schema — Discount

Schema lengkap entitas `Discount` berdasarkan definisi entity JSONC:

| Field | Tipe | Wajib | Default | Deskripsi |
| - | - | - | - | - |
| `id` | string (UUID) | Auto | — | Primary key |
| `company_id` | string (FK → Company) | Ya | — | ID perusahaan pemilik diskon |
| `discount_name` | string | Ya | — | Nama diskon (contoh: "Diskon Sambal 20%") |
| `discount_type` | enum | Ya | `percentage` | Jenis perhitungan diskon: `percentage`, `fixed_amount`, `buy_x_get_y`, `coupon_code` |
| `value` | number | Ya | — | Nilai diskon (persentase atau nominal rupiah) |
| `buy_quantity` | number | Tidak | — | Jumlah produk yang harus dibeli (khusus `buy_x_get_y`) |
| `get_quantity` | number | Tidak | — | Jumlah produk gratis yang didapat (khusus `buy_x_get_y`) |
| `min_purchase_amount` | number | Tidak | `0` | Minimum total belanja agar diskon berlaku |
| `max_discount_amount` | number | Tidak | — | Batas maksimal nilai diskon yang diberikan |
| `applies_to` | enum | Tidak | `all_products` | Cakupan produk: `all_products`, `specific_products`, `specific_categories` |
| `product_ids` | array\<string> | Tidak | — | Daftar ID produk yang terkena diskon (saat `applies_to = specific_products`) |
| `category_names` | array\<string> | Tidak | — | Daftar nama kategori yang terkena diskon (saat `applies_to = specific_categories`) |
| `coupon_code` | string | Tidak | — | Kode kupon unik untuk tipe `coupon_code` |
| `usage_limit` | number | Tidak | — | Batas total penggunaan (0 = unlimited) |
| `used_count` | number | Tidak | `0` | Jumlah kali diskon sudah digunakan |
| `start_date` | date | Tidak | — | Tanggal mulai berlaku |
| `end_date` | date | Tidak | — | Tanggal berakhir berlaku |
| `is_active` | boolean | Tidak | `true` | Status aktif/nonaktif manual |
| `description` | string | Tidak | — | Deskripsi tambahan tentang diskon |

### Penerapan Diskon pada CompanyPOSTransaction

Diskon diterapkan pada level transaksi melalui field-field berikut di `CompanyPOSTransaction`:

| Field di Transaction | Tipe | Deskripsi |
| - | - | - |
| `discount_amount` | number | Total nilai diskon yang diterapkan pada transaksi (nominal) |
| `discount_percentage` | number | Persentase diskon yang diterapkan pada transaksi |
| `items[].discount` | number | Nilai diskon per-baris item (diskon produk spesifik) |
| `subtotal` | number | Subtotal sebelum diskon dan pajak |
| `total` | number | Total akhir setelah diskon dan pajak |

Kalkulasi: `total = subtotal - discount_amount + tax_amount`

## State Machine — Sikap Hidup Diskon

```mermaid theme={null}
stateDiagram-v2
    [*] --> Draft: Admin buat diskon<br/>(is_active = false)
    Draft --> Aktif: Admin aktifkan<br/>atau start_date tercapai
    Aktif --> Kadaluarsa: end_date tercapai
    Aktif --> Habis: used_count >= usage_limit
    Aktif --> Nonaktif: Admin matikan manual<br/>(is_active = false)
    Nonaktif --> Aktif: Admin aktifkan kembali
    Kadaluarsa --> [*]
    Habis --> [*]
    Nonaktif --> [*]: Admin hapus
    Draft --> [*]: Admin hapus
```

| Status | Kondisi | Indikator | Aksi yang Tersedia |
| - | - | - | - |
| **Draft** | `is_active = false` dan `start_date` belum tiba | Biru | Edit, Aktifkan, Hapus |
| **Aktif** | `is_active = true` dan `start_date <= today <= end_date` dan `used_count < usage_limit` | Hijau | Edit, Nonaktifkan, Lihat Statistik |
| **Kadaluarsa** | `today > end_date` | Abu-abu | Arsipkan, Duplikat |
| **Habis** | `used_count >= usage_limit` (dan `usage_limit > 0`) | Kuning | Arsipkan, Reset counter |
| **Nonaktif** | `is_active = false` (dimatikan manual saat aktif) | Merah | Aktifkan kembali, Hapus |

## Sequence Diagram — Penerapan Diskon di POS

```mermaid theme={null}
sequenceDiagram
    participant K as Kasir (POS)
    participant API as Backend API
    participant DB as Database
    participant E as Discount Engine

    K->>API: POST /transactions (cart items + coupon_code?)
    API->>DB: Query diskon aktif<br/>WHERE company_id = ?<br/>AND is_active = true<br/>AND start_date <= NOW()<br/>AND end_date >= NOW()
    DB-->>API: Daftar diskon aktif

    API->>E: Evaluasi diskon (cart, discounts)

    E->>E: 1. Filter by applies_to<br/>(all / specific_products / categories)
    E->>E: 2. Cek min_purchase_amount
    E->>E: 3. Cek usage_limit vs used_count
    E->>E: 4. Validasi coupon_code (jika ada)
    E->>E: 5. Hitung nilai diskon<br/>(percentage / fixed / buy_x_get_y)
    E->>E: 6. Terapkan max_discount_amount
    E->>E: 7. Urutkan prioritas & pilih terbaik

    E-->>API: Hasil: discount_amount, items[].discount
    API->>API: Kalkulasi total = subtotal - discount + tax

    API->>DB: Simpan transaksi (incl. discount_amount)
    API->>DB: Increment used_count pada diskon yang terpakai
    DB-->>API: OK

    API-->>K: Response: transaksi + rincian diskon
```

## Sequence Diagram — Validasi Diskon

```mermaid theme={null}
sequenceDiagram
    participant K as Kasir / Customer
    participant API as Backend API
    participant E as Discount Engine
    participant DB as Database

    K->>API: POST /discounts/validate { coupon_code, cart_total, items[] }

    API->>DB: Query diskon by coupon_code<br/>AND company_id
    DB-->>API: Data diskon (jika ditemukan)

    alt Diskon tidak ditemukan
        API-->>K: 404 — Kode kupon tidak valid
    else Diskon ditemukan
        API->>E: Validasi syarat diskon

        E->>E: Cek is_active
        alt is_active = false
            E-->>API: GAGAL — Diskon nonaktif
            API-->>K: 422 — Diskon sudah nonaktif
        end

        E->>E: Cek periode berlaku
        alt today < start_date
            E-->>API: GAGAL — Belum mulai
            API-->>K: 422 — Diskon belum berlaku
        end
        alt today > end_date
            E-->>API: GAGAL — Sudah expired
            API-->>K: 422 — Diskon sudah kadaluarsa
        end

        E->>E: Cek batas penggunaan
        alt usage_limit > 0 AND used_count >= usage_limit
            E-->>API: GAGAL — Habis
            API-->>K: 422 — Diskon sudah mencapai batas penggunaan
        end

        E->>E: Cek minimum belanja
        alt cart_total < min_purchase_amount
            E-->>API: GAGAL — Belum minimum
            API-->>K: 422 — Minimum belanja belum tercapai
        end

        E->>E: Cek cakupan produk
        alt applies_to = specific_products
            E->>E: Verifikasi items[] ∋ product_ids
        else applies_to = specific_categories
            E->>E: Verifikasi items[].category ∋ category_names
        end

        E-->>API: VALID — Hitung discount_amount
        API-->>K: 200 — { valid: true, discount_amount, discount_type, value }
    end
```

## Tabel Enum

### Enum: `discount_type`

| Nilai | Deskripsi | Kalkulasi | Contoh |
| - | - | - | - |
| `percentage` | Diskon berdasarkan persentase dari subtotal | `discount = subtotal × (value / 100)`, dibatasi `max_discount_amount` | value=20 → potongan 20% |
| `fixed_amount` | Diskon nominal tetap | `discount = min(value, subtotal)` | value=5000 → potongan Rp 5.000 |
| `buy_x_get_y` | Beli X gratis Y | Gratis `get_quantity` unit setelah membeli `buy_quantity` unit | buy=2, get=1 → beli 2 gratis 1 |
| `coupon_code` | Diskon dengan kode kupon unik | Sama seperti `percentage` atau `fixed_amount`, memerlukan input `coupon_code` | Kode PEDAS20 → 20% |

### Enum: `applies_to`

| Nilai | Deskripsi | Field yang Digunakan | Contoh |
| - | - | - | - |
| `all_products` | Berlaku untuk seluruh produk di katalog | Tidak perlu field tambahan | Diskon toko 10% untuk semua item |
| `specific_products` | Hanya berlaku untuk produk tertentu | `product_ids` (daftar ID produk) | Diskon khusus Sambal Matah & Sambal Rojak |
| `specific_categories` | Hanya berlaku untuk kategori tertentu | `category_names` (daftar nama kategori) | Diskon 15% untuk kategori "Sambal & Bumbu" |

### Enum: `discount_status` (Status Turunan)

Status diskon diturunkan dari kombinasi field `is_active`, `start_date`, `end_date`, `used_count`, dan `usage_limit`:

| Status | Logika Kondisi | Warna Badge |
| - | - | - |
| `draft` | `is_active = false` DAN `start_date > today` | Biru |
| `active` | `is_active = true` DAN `start_date <= today <= end_date` DAN (`usage_limit = 0` ATAU `used_count < usage_limit`) | Hijau |
| `expired` | `today > end_date` | Abu-abu |
| `exhausted` | `usage_limit > 0` DAN `used_count >= usage_limit` | Kuning |
| `inactive` | `is_active = false` DAN `start_date <= today` (dimatikan manual) | Merah |

## RBAC — Hak Akses Discount Management

| Aksi | Owner | Admin | Manager | Kasir | Viewer |
| - | - | - | - | - | - |
| **Buat diskon baru** | Ya | Ya | Ya | Tidak | Tidak |
| **Edit diskon** | Ya | Ya | Ya (milik sendiri) | Tidak | Tidak |
| **Hapus diskon** | Ya | Ya | Tidak | Tidak | Tidak |
| **Aktifkan / Nonaktifkan** | Ya | Ya | Ya | Tidak | Tidak |
| **Lihat daftar diskon** | Ya | Ya | Ya | Ya | Ya |
| **Lihat statistik diskon** | Ya | Ya | Ya | Tidak | Ya |
| **Terapkan diskon di POS** | Ya | Ya | Ya | Ya | Tidak |
| **Validasi kode kupon** | Ya | Ya | Ya | Ya | Tidak |
| **Reset usage\_count** | Ya | Ya | Tidak | Tidak | Tidak |
| **Ekspor laporan diskon** | Ya | Ya | Ya | Tidak | Tidak |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.