# Validasi Perhitungan vs Excel Sumber acuan: **CALCULATOR CASHBACK SERUB KANTOR CABANG 22092026.xlsx** (sheet `COB` dan `CALCULATOR CASHBACK SERUBI`). ## Metode 1. `tests/export-excel-fixtures.ps1` membuka salinan workbook di **Microsoft Excel**, mengisi nominal (A6) dan jangka waktu (B6), lalu membiarkan Excel menghitung ulang. Ada 31 nominal × 5 tenor = **155 skenario**, termasuk batas-batas tier (49.999.999 / 50.000.000, 250.000.000 / 250.000.001, 1.999.999.999 / 2.000.000.000, dan seterusnya). Hasilnya disimpan di `tests/excel-fixtures.json`. 2. `tests/validate.js` menjalankan engine aplikasi (`assets/js/engine.js`) dengan **parameter yang dibaca dari MySQL**, lalu membandingkan 31 angka per skenario: cashback bruto/neto, bunga neto tiap produk, deposito, total diterima, rate, total rate, pinalti, porsi, pendapatan, dan spread. - Nominal rupiah harus sama sampai rupiah (selisih < Rp0,01). - Rate harus sama sampai 1e-9. Cara menjalankan: ``` powershell -ExecutionPolicy Bypass -File tests\export-excel-fixtures.ps1 # perlu Excel node tests\validate.js --legacy ``` ## Hasil | Yang diuji | Cocok dengan Excel | |---|---| | Aplikasi baru (parameter dari MySQL) | **4.805 / 4.805 cek (100%)** | | Aplikasi HTML lama | 2.870 / 3.410 cek | Contoh: Rp55.000.000, 6 bulan, perorangan. Angka Excel sama persis dengan aplikasi. | | Excel | Aplikasi | |---|---|---| | Cashback bruto | 915.963,68 | 915.963,68 | | Cashback neto | 732.770,94 | 732.770,94 | | Ekuivalen per tahun | 2,7016% | 2,7016% | | Total SIMANJA | 895.510,14 | 895.510,14 | | Deposito neto | 694.356 | 694.356 | | Total kewajiban pinalti | 1.099.156,42 | 1.099.156,42 | ## Temuan pada aplikasi HTML lama (sudah diperbaiki) 1. **Baris DEPOSITO, kolom "Bunga Neto" menampilkan bunga kotor.** Salah di 140 dari 155 skenario. Contoh Rp55 jt / 6 bulan: tertulis Rp867.945, padahal bunga neto (Excel H6) Rp694.356. 2. **Bagian pinalti cashback (Excel A15:B22) tidak ada.** Sekarang tampil di bagian "Bila dicairkan sebelum jatuh tempo". 3. **Pilihan "Jenis Nasabah" tidak berpengaruh.** Sekarang memakai pajak cashback perorangan atau badan usaha (keduanya 20%, sesuai U85/U86). 4. Semua parameter tertanam di kode. Sekarang semuanya ada di database dan bisa diubah lewat halaman admin. Perhitungan cashback bruto/neto pada aplikasi lama sendiri sudah benar. ## Catatan pada file Excel (tidak diubah, mohon dikonfirmasi) - **Premi LPS dihitung penuh 0,20% tanpa melihat jangka waktu** (`COB!J27 = MIN(nominal; 2 M) × 0,2%`), padahal premi ini bersifat tahunan. Aplikasi mengikuti Excel apa adanya. - **Pajak cashback di `COB!H8` ditulis langsung 20%,** tidak merujuk ke U85/U86. Aplikasi memakai parameter per jenis nasabah. Nilainya saat ini sama. - Untuk tenor 1 bulan atau nominal < Rp50 jt, Excel menghasilkan `#VALUE!`. Aplikasi menampilkan "Tanpa cashback" beserta alasannya. - Parameter **LPS 3,75% (U79) tidak dipakai** di rumus mana pun. - Giro dengan nominal tepat Rp50.000.000 mendapat rate 0% (tier "≤ 50 jt"), padahal cashback mulai berlaku di nominal yang sama.