Otomatisasi EOD (End of Day) Settlement dan Dompet Digital Multi-Cabang Sekolah
Membahas alur rekonsiliasi kas harian otomatis (EOD) dan arsitektur multi-tenant dompet digital siswa (Utama, Wisata, Qurban) berbasis constraint database.
Table of Contents
Pada manajemen keuangan yayasan sekolah modern yang memiliki banyak cabang (multi-branching), dua tantangan operasional terbesar adalah:
- Rekonsiliasi Kas Harian: Memastikan total penerimaan kas fisik di meja kasir sesuai dengan angka pembukuan sistem sebelum toko/kantor tutup di sore hari.
- Manajemen Alokasi Dana Siswa: Mengelola tabungan siswa untuk berbagai peruntukan (seperti Uang Saku Utama, Tabungan Wisata, dan Tabungan Qurban) tanpa risiko pencampuran saldo.
Di dalam ForgeLenta / ForgeSPP, kedua kebutuhan ini dijawab melalui modul EOD (End of Day) Settlement dan Multi-Wallet Student Account.
1. Fitur EOD (End of Day) Settlement
Setiap pukul 17:00 WIB, sebuah background job (eodJob.js berbasis cron) mengeksekusi rekonsiliasi penutupan kas harian untuk setiap cabang sekolah:
async function executeEodSettlement(idCabang, tglSettlement) {
return await prisma.$transaction(async (tx) => {
const totalPemasukan = await tx.pembayaran.aggregate({
where: {
id_cabang: idCabang,
tgl_bayar: {
gte: startOfDay(tglSettlement),
lte: endOfDay(tglSettlement)
}
},
_sum: { jumlah_bayar: true }
});
const totalPengeluaran = await tx.pengeluaran.aggregate({
where: {
id_cabang: idCabang,
tgl_transaksi: {
gte: startOfDay(tglSettlement),
lte: endOfDay(tglSettlement)
},
status: 'APPROVED'
},
_sum: { jumlah: true }
});
const settlement = await tx.settlement.create({
data: {
tanggal: tglSettlement,
total_pemasukan: totalPemasukan._sum.jumlah_bayar || 0,
total_pengeluaran: totalPengeluaran._sum.jumlah || 0,
status: 'COMPLETED'
}
});
return settlement;
});
}2. Arsitektur Dompet Digital Siswa (Multi-Wallet)
Setiap siswa memiliki tiga tipe dompet terpisah:
- UTAMA: Digunakan untuk penerimaan kembalian SPP atau uang saku harian.
- WISATA: Tabungan khusus kegiatan karya wisata tahunan.
- QURBAN: Tabungan partisipasi program kurban sekolah.
enum TipeDompet {
UTAMA
WISATA
QURBAN
}
model Dompet {
id_dompet Int @id @default(autoincrement())
nisn String @db.VarChar(20)
tipe TipeDompet @default(UTAMA)
saldo Int @default(0)
id_cabang Int?
transaksi TransaksiDompet[]
@@unique([nisn, tipe])
}Untuk mencegah terjadinya penarikan saldo negatif (negative balance), MySQL database ditambahkan penegasan aturan (CHECK Constraint):
ALTER TABLE dompet ADD CONSTRAINT check_saldo_positif CHECK (saldo >= 0);Kesimpulan
Modul EOD Settlement dan Multi-Wallet pada ForgeSPP menghadirkan standar pengelolaan keuangan sekolah modern yang rapi, otomatis, serta siap mendukung ekspansi banyak cabang sekolah secara fleksibel.