Files
calcserubi/docs/VALIDASI.md
T
2026-10-20 13:16:38 +09:00

53 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.