Sensipay Mini: Technical Architecture
Sistem Penagihan & Alur Kerja Pembayaran Berbasis Laravel
1. Ikhtisar Sistem
Sensipay Mini adalah modul finansial internal yang menghubungkan orang tua murid dengan admin/owner Bimbel JET. Sistem ini dirancang untuk mengelola tagihan program belajar secara terstruktur, di mana setiap transfer dana melalui bukti unggahan harus divalidasi oleh staf sebelum saldo tagihan diperbarui.
Role: Parent
Mengelola dashboard siswa, melihat tagihan (invoices), dan mengunggah bukti pembayaran.
Role: Owner/Admin
Akses penuh ke manajemen invoice, antrean persetujuan pembayaran, dan pelaporan.
🚀 Pembaruan Arsitektur: Single Source of Truth
Dalam iterasi terbaru (Option A), sistem telah disederhanakan untuk menghilangkan dualitas antrean. Seluruh proses kini dipusatkan pada tabel payments sebagai satu-satunya sumber kebenaran data pembayaran.
- Penyatuan Flow:
ParentPaymentControllerkini menggunakanParentPendingPaymentServiceuntuk langsung membuat record di tabelpaymentsdengan status pending. - Penghapusan Redundansi: Modul
AdminPaymentProofControllertelah dihapus untuk memastikan admin hanya memantau satu antrean verifikasi diPaymentApprovalController. - Legacy Handling: Tabel
payment_proofslama tetap dipertahankan hanya sebagai arsip audit historis.
3. Struktur Data & Relasi
Berikut adalah entitas inti yang membangun ekosistem Sensipay Mini:
| Entitas | Deskripsi Teknis |
|---|---|
| Users | Menyimpan profil login dengan peran parent atau owner, serta referral_code unik. |
| Invoices | Data tagihan utama yang mencakup total_amount, paid_amount, dan status penagihan otomatis. |
| Payments | Record pembayaran individu dengan status pending, approved, atau rejected. |
| Registrations | Pelacakan data pendaftaran awal (intake) dari form publik /daftar. |
4. Logika Sinkronisasi (Critical Flow)
InvoicePaymentSyncService
Ini adalah jantung dari akurasi finansial Sensipay. Layanan ini menghitung ulang paid_amount hanya dari pembayaran yang berstatus approved. Status invoice akan diperbarui secara otomatis menjadi:
- Paid: Jika akumulasi pembayaran ≥ total tagihan.
- Partial: Jika sudah ada pembayaran namun belum melunasi seluruh tagihan.
- Unpaid: Jika belum ada pembayaran yang disetujui.
5. Manajemen Risiko Sistem
- Invisible Invoices: Invoice tanpa
parent_user_idtidak akan muncul di portal orang tua. Admin wajib memastikan pemetaan user pada setiap pembuatan invoice. - Status Drift: Perbedaan angka dapat terjadi jika data
paymentsdiedit manual di DB. Gunakan fitur Recalc Status pada controller invoice untuk sinkronisasi ulang. - Role Security: Akses
/sensipay/*dikunci ketat menggunakanRoleMiddlewarekhusus untuk owner/admin.


Tidak ada komentar:
Posting Komentar