Sentra Membership — Wallet & Billing Module¶
Overview¶
Modul Wallet mengelola dompet digital internal (closed-loop) member yang digunakan untuk pembayaran sesi kelas, top-up via QRIS/Midtrans, dan refund. Setiap mutasi saldo menggunakan append-only ledger dengan tanda tangan kriptografis untuk mencegah fraud manipulasi saldo.
12.1 Double-Entry In-App Wallet Engine¶
Setiap pemotongan saldo wallet dicatat secara seimbang di database akuntansi jurnal kredit-debet untuk audit kepatuhan anti-fraud.
Transaksi: Top-up Saldo Member Rp 100.000 via QRIS Midtrans
[ Jurnal Akuntansi Entri Ganda ]
├─ Akun Saldo Kas E-Wallet (Asset) ─── DEBET Rp 100.000 (Bisnis Bertambah)
└─ Akun Deposit Member (Liability) ── KREDIT Rp 100.000 (Utang Ke Member)
Sistem menghitung kecocokan kolom saldo di tabel wallets dengan jumlah kumulatif mutasi di tabel wallet_transactions. Jika terjadi selisih perbandingan hash penutupan harian, wallet member dibekukan otomatis oleh sistem untuk investigasi fraud.
Wallet Tamper-Evidence (Anti-Fraud)¶
Setiap baris di tabel wallets memiliki kolom wallet_signature_hash yang dihitung ulang setiap kali terjadi mutasi saldo:
Sebelum transaksi baru dieksekusi, sistem melakukan hitung ulang signature dan membandingkannya dengan database. Jika tidak cocok (saldo diubah paksa tanpa melalui API resmi), sistem langsung membekukan wallet dan memicu peringatan darurat keamanan internal.
Supported Transaction Types¶
| Type | Deskripsi |
|---|---|
TOPUP |
Top-up saldo via QRIS / Midtrans settlement |
DEBIT_BOOKING |
Pemotongan saldo saat booking kelas / sesi |
REFUND |
Pengembalian saldo dari pembatalan kelas |
BONUS |
Kredit bonus dari loyalty program atau kompensasi |
Payment Gateway Integration¶
- Provider: Midtrans / Xendit
- Method: Webhook
POST /api/v1/wallet/topupmenerima payload settlement - Security: Validasi
signature_keyMidtrans sebelum kredit saldo - Idempotency:
order_iddigunakan sebagai kunci idempotensi — webhook duplikat tidak mengkreditkan saldo 2x