Proactive Scan

Mencari supplier lebih murah / lebih baik secara proaktif untuk produk yang sedang sehat. Tujuan: optimasi cost margin tanpa harus menunggu supplier sekarang bermasalah.

⚠️ Proactive scan menambah konsumsi rate-limit. Aktifkan secara hati-hati.


Dua strategi

Strategy 1: Diff-Triggered (default ON)

Saat Change Detection mendeteksi harga produk naik ≥ threshold, OtoSwitch otomatis fetch supplier list untuk produk itu dan cek alternatif lebih murah.

Kapan jalan:

  • Hanya saat ada kenaikan harga signifikan.
  • Trigger threshold: diffTriggerPriceIncreasePercent (default 3%).

Cost:

  • ~0-10 request tambahan per cycle (hanya saat ada kenaikan).
  • Default ON karena cost rendah.

Strategy 2: Rotational Sampling (default OFF)

Setiap cycle, ambil batch produk sehat yang belum dicek (atau sudah lewati cooldown), fetch supplier list, cek alternatif.

Kapan jalan:

  • Setiap cycle, batch by batch.
  • Rotasi sampai semua produk tercakup.

Cost:

  • ~batchSize request tambahan per cycle (default 50).
  • Default OFF karena cost lebih tinggi.

Konfigurasi

Pengaturan → panel Proactive Scan:

Field Default Deskripsi
enabled false Master toggle untuk strategy 2 (rotational).
batchSize 50 Jumlah produk dicek per cycle (strategy 2).
minSavingsPercent 5.0 Threshold savings minimum untuk dianggap signifikan.
cooldownHours 24 Jangan re-check produk sebelum N jam.
diffTriggered true Aktifkan strategy 1.
diffTriggerPriceIncreasePercent 3.0 Threshold kenaikan harga untuk trigger strategy 1.

Budget rate-limit

Rate-limit OtoSwitch default 100 req/menit. Scan interval default 5 menit (Basic) → 500 req/cycle budget.

Estimasi konsumsi:

Komponen Request/cycle
Category scan ~17 (1 per kategori)
Diff-triggered (strategy 1) ~0-10
Rotational (strategy 2, batch 50) ~50
Total worst-case ~77
Sisa budget ~423 (per 5 menit)

Kalau interval Pro (2 menit), budget cuma 200 req/cycle. Strategy 2 batchSize 50 + scan 17 + diff 10 = ~77. Aman tapi sisa lebih sempit.


Hasil deteksi

Setiap kali ditemukan supplier lebih murah dengan savings ≥ minSavingsPercent, dicatat sebagai change entry dengan type better_seller_available.

Lihat di dashboard

Menu Perubahan → filter Type = better_seller_available.

Lihat via API

GET /api/changes/better-sellers?hours=24

Response:

[
  {
    "product_id": "AXIS5K",
    "product_name": "Axis 5K",
    "current_seller": "Supplier-A",
    "current_price": 4900,
    "alternative_seller": "Supplier-B",
    "alternative_price": 4500,
    "savings_percent": 8.16,
    "detected_at": "2026-05-09T14:32:11Z"
  }
]

Apakah switch otomatis?

Tidak otomatisbetter_seller_available hanya alert. OtoSwitch tidak switch supplier hanya karena ada yang lebih murah (kecuali produk bermasalah).

Switch alternatif perlu manual:

  1. Buka tab Perubahan, filter better_seller_available.
  2. Klik produk → modal Detail.
  3. Lihat ranking supplier, klik Switch ke Supplier Ini.

Filosofi: jangan ganggu produk yang sehat hanya untuk hemat sedikit. Manual switch memberi kontrol lebih.


Kapan harus aktifkan

Aktifkan strategy 1 (diff-triggered) saat:

  • Selalu — cost rendah, value tinggi.
  • Default ON, cukup pertahankan.

Aktifkan strategy 2 (rotational) saat:

  • Reseller skala besar dengan ratusan-ribuan produk.
  • Margin tipis & ingin selalu tahu supplier termurah.
  • Punya budget rate-limit cukup (Pro plan, banyak room).

Jangan aktifkan strategy 2 saat:

  • Produk sedikit (<100) — diff-triggered cukup.
  • Plan Trial / Basic dengan banyak kategori — rate-limit ketat.
  • Ingin minimasi cost API ke Digiflazz.

FAQ

Strategy 2 ON tapi tidak ada hasil. Cek minSavingsPercent — kalau threshold tinggi (>10%), jarang ada yang qualify. Coba turunkan ke 3-5%.

Cooldown apa fungsinya? Mencegah cek produk yang sama berulang dalam window pendek. Hemat rate-limit. Default 24 jam.

Bisa exclude kategori tertentu dari proactive? Belum di UI. Workaround: assign priority low di Smart Intervals → kategori jarang di-scan → otomatis jarang di-proactive.

Strategy 2 nge-flood log dengan request? Biasa — 50 request per cycle. Pakai filter level di Log untuk hide DEBUG.