Change Detection

Sistem diff-based untuk mendeteksi perubahan harga, supplier, status, dan stok antar siklus scan. Berguna untuk audit, alert, dan trigger proactive scan.


Cara kerja

Setiap kali OtoSwitch scan kategori, snapshot lengkap produk disimpan ke SQLite lokal (data/changes.db). Snapshot berikutnya dibandingkan dengan snapshot sebelumnya — perbedaan apapun dicatat sebagai change entry.

Dua snapshot per kategori disimpan (terbaru + sebelumnya). Snapshot lebih lama otomatis di-prune.

Riwayat change entries disimpan selama maxHistoryHours (default 168 jam = 7 hari). Auto-pruning setiap pruneIntervalHours (default 24 jam).


Jenis perubahan

Type Severity default Trigger
price_changed warning (naik) / info (turun) Harga supplier berubah.
seller_changed warning Supplier yang terpasang ganti.
seller_status_changed critical (down) / info (up) Supplier on/off.
product_added info Produk baru di kategori.
product_removed critical Produk hilang dari kategori.
max_price_changed info Max price diubah.
product_status_changed warning (off) / info (on) Produk diaktifkan/dinonaktifkan.
better_seller_available warning Supplier lebih murah ditemukan via proactive scan.

Threshold severity

Bisa diatur di Pengaturan → Change Detection:

Field Default Efek
alertOnPriceIncreasePercent 5.0 Kenaikan ≥5% jadi warning. <5% tetap dicatat tapi sebagai info.
alertOnPriceDecrease true Penurunan harga di-log. Off = tidak dicatat.
alertOnSellerDown true Supplier mati jadi critical.
alertOnNewProduct false Produk baru di kategori jadi info. Default off untuk hindari noise.

Smart intervals (kategori prioritas)

Tidak semua kategori sama. Pulsa & data perubahan harganya cepat (per jam), kategori lain (token listrik) jarang berubah.

OtoSwitch mendukung 3 priority level:

Priority Frekuensi scan Cocok untuk
critical Setiap cycle Pulsa, data — perubahan harga cepat
normal (default) Setiap 2 cycle Kategori biasa
low Setiap 4 cycle Kategori jarang berubah (mis. token listrik tetap)

Cara setup

  1. Pengaturan → panel Change Detection → field categoryPriorities.
  2. Format JSON object: {categoryId: priority}.
{
  "KWy9W4": "critical",
  "ABc123": "low"
}
  1. Save All.

Kalau interval scan default 5 menit (Basic):

  • critical — scan tiap 5 menit
  • normal — scan tiap 10 menit
  • low — scan tiap 20 menit

Hemat budget rate-limit dan bandwidth.


Storage

  • File: data/changes.db (SQLite).
  • Snapshot: 2 terakhir per kategori.
  • Change log: disimpan maxHistoryHours (default 7 hari).
  • Auto-pruning setiap pruneIntervalHours (default 24 jam).

File ini bisa membesar (~10-100 MB tergantung jumlah produk & frekuensi scan). Aman untuk dihapus saat OtoSwitch berhenti — siklus pertama setelah restart cuma bikin baseline tanpa change entries.


Lihat hasil

Dari dashboard

Menu Perubahan → tabel dengan filter window/type/severity/produk. Detail UI: Tab Perubahan.

Dari API

# Semua perubahan 24 jam terakhir
GET /api/changes?hours=24

# Filter type
GET /api/changes?type=price_changed&hours=24

# Per produk
GET /api/changes/product/{product_id}

# Statistik agregat
GET /api/changes/stats?hours=24

# Shortcut: better seller findings
GET /api/changes/better-sellers?hours=24

Auth: session dashboard atau JWT.


Integrasi dengan Proactive Scan

Saat price_changed (naik) terdeteksi melebihi threshold, OtoSwitch otomatis trigger proactive scan untuk produk ini — cek apakah ada supplier lebih murah yang bisa dipilih.

Konfigurasi di Pengaturan → Proactive Scan → diffTriggered & diffTriggerPriceIncreasePercent.

Detail: Proactive Scan.


FAQ

Database changes.db jadi besar, aman dihapus? Aman. Stop monitor dulu, hapus file, start lagi. Snapshot baseline dibikin ulang di siklus pertama.

Tidak ada perubahan tercatat sama sekali. Pastikan monitor sudah jalan minimal 2 siklus. Siklus pertama = baseline (tidak menghasilkan change entries).

Severity di tabel beda dengan setting? Severity dievaluasi saat change dicatat — tidak retroaktif. Setting baru hanya berlaku untuk perubahan setelah diubah.

Berapa lama snapshot diperiksa? Saat ini hanya 2 terakhir. Tidak ada delta multi-snapshot (mis. 1 hari lalu).