Arsitektur Teknis USP
Updated: Sep 2026Oleh: SystemModul Simpan Pinjam Konvensional (USP)
Arsitektur Teknis Sistem & Basis Data: Unit Simpan Pinjam (UNT-USP)
Dokumen ini mendokumentasikan spesifikasi arsitektur data relasional, prosedur atomik keuangan, protokol keamanan baris data, dan integrasi server actions untuk Unit Simpan Pinjam Konvensional BUMDes Bolulango (UNT-USP).
Rujukan model bisnis dan alur operasional diatur dalam Blueprint Operasional Unit USP dan Pedoman Akuntansi SAK EP.
1. Diagram Relasi Entitas Data (Entity Relationship)#
text┌─────────────────────────┐ │ business_units │ <-- Kode: 'USP-01', Suffix: '.05' │ (Unit Usaha BUMDes) │ └────────────┬────────────┘ │ unit_id ▼ ┌─────────────────────────┐ ┌─────────────────────────┐ │ usp_members │ │ usp_member_savings │ │ (Nasabah / Anggota) │───────►│ (Mutasi Simpanan Kas) │ │ │ │ │ │ • member_number (KTP) │ │ • savings_type │ │ • full_name │ │ • amount (SafeMoney) │ │ • phone_number │ │ • balance_after │ │ • credit_score │ └─────────────────────────┘ └────────────┬────────────┘ │ member_id ▼ ┌─────────────────────────┐ ┌─────────────────────────┐ │ usp_loans │ │ usp_loan_repayments │ │ (Kontrak Pinjaman) │───────►│ (Angsuran Bulanan) │ │ │ │ │ │ • loan_number │ │ • installment_number │ │ • principal_amount │ │ • principal_paid │ │ • interest_rate │ │ • interest_paid │ │ • collectibility (1-5) │ │ • penalty_paid │ │ • loan_status │ │ • payment_method │ └────────────┬────────────┘ └─────────────────────────┘ │ loan_id ▼ ┌─────────────────────────┐ ┌─────────────────────────┐ │usp_inter_unit_collateral│ │ journal_entries │ │ (Agunan Lintas Unit) │ │ (Buku Jurnal SAK EP) │ │ │ │ │ │ • source_unit_id │ │ • entry_number │ │ • asset_reference_no │ │ • debit/kredit lines │ │ • lock_status │ │ • coa_id (Suffix .05) │ └─────────────────────────┘ └─────────────────────────┘
2. Struktur Tabel Basis Data Inti#
2.1 Tabel usp_members (Data Induk Nasabah)
id(UUID, Primary Key): Identifikator unik nasabah.unit_id(UUID, Foreign Key kebusiness_units.id): Penguncian data pada unit USP-01.member_number(VARCHAR(30), Unique): Nomor Induk Anggota (Format:USP/MBR/YYYY/XXXX).nik(VARCHAR(16), Terenkripsi): Nomor Induk Kependudukan sesuai KTP.full_name(VARCHAR(100)): Nama lengkap nasabah.address(TEXT): Alamat domisili RT/RW di desa.latitude/longitude(NUMERIC(10,7)): Titik koordinat GPS domisili nasabah.credit_score(INTEGER): Skor kelayakan pinjaman (0 - 100).status(VARCHAR(20)): Status keanggotaan (active,suspended,closed).
2.2 Tabel usp_loans (Data Kontrak Pinjaman)
id(UUID, Primary Key): Identifikator unik pinjaman.loan_number(VARCHAR(50), Unique): Nomor kontrak kredit (Format:USP/LN/YYYY/XXXX).member_id(UUID, Foreign Key keusp_members.id): Pemilik pinjaman.principal_amount(NUMERIC(15,2)): Plafon pokok pinjaman yang disetujui.interest_rate(NUMERIC(5,2)): Suku bunga tahunan/bulanan.tenor_months(INTEGER): Jangka waktu pinjaman dalam bulan.outstanding_balance(NUMERIC(15,2)): Sisa pokok pinjaman yang belum terbayar (Baki Debet).collectibility(INTEGER): Tingkat kelancaran pembayaran (1=Lancar, 2=DPK, 3=KL, 4=Diragukan, 5=Macet).status(VARCHAR(20)): Status pinjaman (draft,approved,active,repaid,defaulted).
2.3 Tabel usp_loan_repayments (Mutasi Angsuran)
id(UUID, Primary Key): Identifikator unik pembayaran.loan_id(UUID, Foreign Key keusp_loans.id): Tautan ke kontrak pinjaman.installment_number(INTEGER): Nomor urut angsuran (misal: angsuran ke-3 dari 12).principal_paid(NUMERIC(15,2)): Porsi pembayaran pokok.interest_paid(NUMERIC(15,2)): Porsi pembayaran bunga jasa.penalty_paid(NUMERIC(15,2)): Denda keterlambatan jika ada.collector_id(UUID, Foreign Key keprofiles.id): Petugas kolektor penagih.collector_latitude/collector_longitude(NUMERIC(10,7)): Koordinat GPS saat pembayaran diterima.
3. Transaksi Atomik & Prosedur Transaksional Finansial (Atomic RPC)#
Untuk mencegah terjadinya race condition, saldo gantung, atau selisih pembukuan saat penarikan/penyetoran simultan, sistem mengandalkan fungsi basis data atomik:
sql-- Prosedur Atomik Penyetoran/Penarikan Tabungan Anggota CREATE OR REPLACE FUNCTION increment_member_savings_balance( p_member_id UUID, p_amount NUMERIC(15,2), p_savings_type VARCHAR(20), p_operator_id UUID ) RETURNS NUMERIC(15,2) AS **DECLARE v_new_balance NUMERIC(15,2); BEGIN -- Kunci baris data anggota untuk mencegah operasi konkuren simultan PERFORM 1 FROM usp_members WHERE id = p_member_id FOR UPDATE; -- Update saldo tabungan sukarela UPDATE usp_members SET vol_savings_balance = vol_savings_balance + p_amount, updated_at = NOW() WHERE id = p_member_id RETURNING vol_savings_balance INTO v_new_balance; -- Validasi saldo tidak boleh negatif IF v_new_balance < 0 THEN RAISE EXCEPTION 'Saldo tidak mencukupi untuk melakukan penarikan!'; END IF; -- Catat riwayat mutasi INSERT INTO usp_member_savings ( member_id, amount, savings_type, balance_after, created_by ) VALUES ( p_member_id, p_amount, p_savings_type, v_new_balance, p_operator_id ); RETURN v_new_balance; END;** LANGUAGE plpgsql SECURITY DEFINER;
4. Keamanan Baris Data (Row-Level Security / RLS)#
- Akses Data Staf Loket (
staff/operator):
- Hanya dapat membaca dan menginput transaksi nasabah di unit
USP-01. Dilarang mengubah data kontrak kredit yang telah berstatusapproved.
- Akses Petugas Kolektor (
kolektor):
- Hanya dapat melihat daftar tagihan nasabah yang ditugaskan di wilayah/dusun kerjanya dan menginput setoran angsuran dengan validasi lokasi GPS.
- Akses Super Admin & Direktur (
super_admin/direktur):
- Akses menyeluruh untuk otorisasi plafon pinjaman di atas Rp 10.000.000, restrukturisasi kredit, dan persetujuan penghapusbukuan kredit macet (write-off).
Apakah panduan ini membantu Anda?
Bacaan Selanjutnya
Modul Simpan Pinjam Konvensional (USP)
SOP Pembiayaan Modal Tani Yarnen (Bayar Panen) & Integrasi Rantai Pasok Pakan Mandiri
Modul Simpan Pinjam Konvensional (USP)
Blueprint Operasional USP
Modul Simpan Pinjam Konvensional (USP)
Standar Akuntansi SAK EP .05
Modul Simpan Pinjam Konvensional (USP)
Master SOP Simpan Pinjam