🛠 PRICING OPS — operasi bekerja di baris Harga Dasar (Tingkat × Segmentasi) + baris Override. Bukan cell matrix per-subject (model itu ditinggalkan). Semua op model-agnostik: effective-dating, bulk fill-down, %-bump, dirty-guard.
Pricing Operations — Base + Override
Operasi harga di atas model final SubjectLevel ?? Subject ?? Base. Yang di-edit = baris Harga Dasar (~45 baris Tingkat × Segmentasi) dan baris Override / Harga Khusus (sparse). Tiap baris punya effective_from, bukan cell matrix.
Late-bind & effective-date model. Tiap baris Harga Dasar / Override punya effective_from (di-anchor ke WIB). Harga & kebijakan pembatalan di-resolve telat (late-bind) — diambil dari harga yang berlaku pada tanggal pelajaran, lalu di-snapshot saat SETTLEMENT (penagihan/pembatalan), bukan saat sesi di-APPROVE. Konsekuensi: jadwalkan kenaikan jauh hari, sistem switch otomatis di tanggal efektif; sesi yang sudah disettle tetap pakai harga lamanya.
1Effective-dating — jadwalkan perubahan baris harga ⏰ terjadwal
Harga/Harga Dasar/SD 3 · INT
Berlaku Mulai per baris effective_from (WIB)
Pilih baris Harga Dasar atau Override → jadwalkan nilai baru dengan tanggal Berlaku Mulai. Nilai aktif berjalan terus (tanpa tanggal akhir) sampai versi terjadwal mengambil alih.
Bukan input per-cell. Tanggal di-set lewat flow "Jadwalkan Perubahan" pada satu baris cascade. Edit biasa = berlaku hari ini. Header baris menampilkan status berlaku + badge perubahan terjadwal.
Harga Dasar · SD 3 · INT✓ Berlaku sejak 1 Jan 2026⏰ Perubahan terjadwal: 1 Jul 2026
Sekarang — berlaku
Rp 215.000
effective_from 1 Jan 2026 · tanpa tanggal akhir
Terjadwal — 1 Jul 2026
Rp 237.000
+10% · otomatis aktif, admin tak perlu edit hari-H
Berlaku untuk baris Harga Dasar maupun baris Override.
💡 Hover baris → tooltip "Berlaku sejak 1 Jan 2026". Tanggal per-baris = info read-only; di-set lewat flow Jadwalkan. Late-bind: sesi di tanggal ≥ 1 Jul 2026 otomatis pakai Rp 237.000 saat di-settle; sesi sebelum itu tetap Rp 215.000.
⏰ Jadwalkan Perubahan — Harga Dasar · SD 3 · INT✕
📅
Di-anchor ke WIB (Asia/Jakarta). Harga lama otomatis berlaku s/d 30 Jun 2026; harga baru aktif otomatis 1 Jul 2026 — tidak perlu edit manual hari-H.
Naikkan % nilaiSet nilai baru
Rp
Pembulatan ke ribuan terdekat. Saat ini: Rp 215.000 → Rp 237.000 (+10%).
Pratinjau dampak: 1 baris berubah · efektif 1 Jul 2026 (WIB) · harga di-resolve late-bind di penagihan — sesi yang sudah di-settle sebelum tanggal itu tetap pakai harga lama.
2Bulk ops — fill-down Segmentasi & multi-select baris Harga Dasar
Harga/Harga Dasar/Matrix
Harga Dasar — Tingkat × Segmentasi
Pilih baris/kolom Harga Dasar → fill-down satu Segmentasi melintasi semua Tingkat, atau pilih banyak sel lalu terapkan sekaligus. Inilah ~45 baris cascade (subject-agnostic), bukan cell matrix per-subject.
0 sel dipilih
Cara pakai: klik header Tingkat (kolom) atau label Segmentasi (baris) untuk select cepat, atau klik sel satu-satu. Lalu klik-kanan untuk menu bulk, atau pakai tombol di atas. Fill-down menyalin sel sumber (bertepi putus-putus) ke seluruh baris.
💡 Fill-down paling ngurangin kerja kalau harga clustering (banyak Tingkat dengan harga sama dalam satu Segmentasi). Sekali isi → propagate ke seluruh baris. Baris Override tetap menang atas Base lewat cascade.
Operasi bulk
↓ Isi ke bawah (fill-down baris)
→ Isi ke kanan (semua Tingkat)
📈 Naikkan % sel terpilih
⏰ Jadwalkan perubahan…
✕ Kosongkan pilihan
3%-Bump dengan pratinjau old → new konfirmasi sebelum apply
Harga/Harga Dasar/Naikkan %
Terapkan +X% ke baris terpilih
Pilih baris Harga Dasar → masukkan persen → pratinjau Rupiah lama → baru berdampingan SEBELUM commit. Konfirmasi eksplisit dengan jumlah baris + total.
%
Ribuan terdekat
Pilih dulu baris di tabel section 2.
Belum ada baris dipilih. Pilih sel/baris di matrix Harga Dasar (section 2), lalu klik Pratinjau. Pratinjau menampilkan tiap baris old → new + total sebelum kamu commit.
💡 %-bump bekerja pada nilai baris Harga Dasar; baris Override yang ikut terpilih juga di-bump. Setelah commit, kamu masih bisa menjadwalkannya (effective_from) alih-alih langsung aktif hari ini.
📈 Naikkan Harga — Pratinjau✕
PRATINJAU — harga lama → baru (+10%):
4Dirty-cue + escape guard manual save
Harga/Status simpan
Perubahan belum disimpan
Sel/baris yang diubah tapi belum di-commit = highlight + dot biru. Simpan manual (bukan autosave). Keluar halaman dengan perubahan pending → konfirmasi beforeunload.
Coba: edit nilai di matrix Harga Dasar (section 2) atau jadwalkan/bump perubahan → bar status di bawah berubah jadi kuning. Klik Simpan untuk commit, atau refresh/tutup tab untuk memicu escape guard.
Escape guard. Browser beforeunload — prompt "Perubahan belum disimpan. Yakin keluar?" muncul saat menutup tab / navigasi keluar dengan perubahan pending. Mencegah kehilangan kerja tidak sengaja.
🎯 Catatan handover
Operasi (semua model-agnostik)
① Effective-dating — effective_from per baris cascade (Base/Override), WIB-anchored, late-bind di settlement. ② Bulk — fill-down Segmentasi melintasi Tingkat, multi-select apply, clear. ③ %-bump — pratinjau old→new + konfirmasi (jumlah baris + total). ④ Dirty-cue + escape guard — manual save + beforeunload.
Acuan model
Operasi bekerja pada baris Harga Dasar (~45) + baris Override (sparse), bukan cell matrix per-subject (ditinggalkan). Cascade SubjectLevel ?? Subject ?? Base dari file kanonik admin-mvp-1-pricing-base-override.html. Harga + kebijakan pembatalan late-bind: resolve pada tanggal pelajaran, snapshot saat settlement. Partner authority on impl.