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
- Pengaturan → panel Change Detection → field
categoryPriorities. - Format JSON object:
{categoryId: priority}.
{
"KWy9W4": "critical",
"ABc123": "low"
}
- Save All.
Kalau interval scan default 5 menit (Basic):
critical— scan tiap 5 menitnormal— scan tiap 10 menitlow— 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).