53 lines
3.0 KiB
Markdown
53 lines
3.0 KiB
Markdown
# 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.
|