Audit Modul Pengadaan (PO) & Hutang Usaha 2026
š Laporan Audit Komprehensif: Modul Pengadaan & Pembelian (Purchase Order)
ERP BUMDes Bolulango Dokumen ID: AUD-PUR-2026-09 | Tanggal Audit: 9 September 2026 | Auditor: Tim Sistem Finansial & Basis Data BUMDes
šÆ 1. Eksekutif Ringkasan & Skor Kesehatan Modul#
Audit ini dilakukan secara menyeluruh (end-to-end), mendalam (deep-dive), dan komprehensif terhadap seluruh alur operasional dan integrasi sistem pada modul Pengadaan & Administrasi Pembelian (Purchase Order) di /dashboard/inventori/pembelian.
Modul Pengadaan bukan hanya formulir pencatatan biasa, melainkan Gerbang Utama Arus Masuk (Inbound Gateway) yang menghubungkan stok fisik gudang, mutasi kartu persediaan, jurnal umum akuntansi (GL), neraca saldo per unit, dan kartu hutang usaha (AP).
š Indeks Kesehatan Modul Pengadaan: 100 / 100 (Kategori: Sempurna / Wajar Tanpa Pengecualian)
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāāāāā
ā Domain Evaluasi ā Bobot ā Skor ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāāāā¤
ā 1. Integritas Status PO & Proteksi Mutasi Fisik ā 25% ā 100 / 100 ā
ā 2. Ketepatan Kuantitas Gudang & Kartu Stok (Anti-Double) ā 25% ā 100 / 100 ā
ā 3. Sinkronisasi Buku Besar GL & Keseimbangan Jurnal ā 20% ā 100 / 100 ā
ā 4. Integrasi Modul Hutang Usaha (AP) & Aging Schedule ā 15% ā 100 / 100 ā
ā 5. Keandalan Guardrails & Penanganan Edge Cases ā 15% ā 100 / 100 ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāāāāā
[!IMPORTANT] Temuan Signifikan Audit: Audit awal berhasil mendeteksi dan menyelesaikan 3 Cacat Kritis Tingkat Basis Data (Database-Level Defects) yang sebelumnya menyebabkan kegagalan penerimaan barang dan pembukuan jurnal. Setelah penerapan patch remediasi pada Migration 150, 18 dari 18 pengujian simulasi E2E (100%) dinyatakan LULUS (PASSED).
šØ 2. Temuan Cacat Kritis & Tindakan Remediasi#
Selama proses audit dan simulasi pengujian E2E, ditemukan 3 anomali sistemik yang segera diperbaiki pada basis data PostgreSQL:
Memuat diagram alur...
1. Ketidaksesuaian Nama Kolom Kartu Stok (type vs movement_type)
- Masalah: Pada fungsi database
rpc_receive_purchase_goods, perintah SQL melakukanINSERT INTO public.stock_movements (..., type, ...). Skema riil tabelstock_movementsmendefinisikan kolom sebagaimovement_type. - Dampak: Setiap staf gudang mencoba menerima pesanan (klik "Terima Barang"), transaksi ditolak basis data dengan kode error
42703. Barang fisik tidak dapat masuk ke sistem. - Tindakan Remediasi: Diperbaiki menjadi
movement_typepada Migration 150.
2. Pemicu Konflik Warisan (Legacy Trigger Conflict) & Penggandaan Stok (Double-Counting)
- Masalah: Terdapat trigger warisan
trigger_handle_purchase_status_changepada tabelpurchase_transactionsyang mencoba memanggilincrease_stock_on_purchase_manual(item_record). Selain memicu errorcannot cast type record to purchase_items (Code: 42846), trigger ini dantrigger_update_warehouse_stockmenyebabkan penambahan stok terjadi dua kali lipat (misal order 5 sak menjadi masuk 10 sak). - Dampak: Terjadi selisih kuantitas stok (phantom stock) sebesar 200% dari kuantitas faktur riil.
- Tindakan Remediasi: Trigger dan fungsi warisan
handle_purchase_status_change()resmi di-DROP. Logika mutasi kini terpusat secara atomik (single source of truth) dalamrpc_receive_purchase_goodstanpa risiko duplikasi.
3. Residu Skema Lama pada Modul Pelunasan Hutang (business_unit_id)
- Masalah: Fungsi
rpc_process_supplier_paymentlama masih menyisakan referensi kolom usangbusiness_unit_iddan duplikasi kolomunit_id, unit_idsaat membentuk jurnal pelunasan hutang kas keluar. - Dampak: Fitur pencatatan cicilan hutang supplier di
/dashboard/inventori/hutanggagal dieksekusi. - Tindakan Remediasi: Skema diselaraskan 100% menggunakan
unit_id, nomor voucher BKK otomatis, serta pendebitan Hutang Usaha (2-101) dan pengkreditan Kas/Bank (1-100/1-101/1-102).
š¬ 3. Matriks Hasil Pengujian E2E (18 Checkpoints)#
Pengujian diverifikasi secara otomatis menggunakan test suite live database (scripts/audit_po_comprehensive.ts):
| No | Kategori | Nama Pengujian | Hasil | Durasi | Keterangan |
|---|---|---|---|---|---|
| 0.1 | Master Data | Pengecekan Ketersediaan Pemasok Aktif | PASSED | 370ms | Ditemukan 2 pemasok aktif siap transaksi |
| 0.2 | Master Data | Pengecekan Ketersediaan Gudang Penyimpanan | PASSED | 112ms | 5 gudang aktif teridentifikasi |
| 0.3 | Master Data | Pengecekan Master Katalog Produk Pengadaan | PASSED | 201ms | Produk uji baseline terverifikasi |
| 0.4 | Master Data | Pengecekan Kelengkapan COA Finansial | PASSED | 282ms | Persediaan (1-104/105), Hutang (2-101), Kas (1-100) lengkap |
| 1.1 | Siklus Tunai | Pembuatan PO Tunai (Status: ordered) | PASSED | 255ms | Header PO & purchase_items terbentuk rapi |
| 1.2 | Siklus Tunai | Proteksi Mutasi Prematur | PASSED | 436ms | Stok & jurnal 0% berubah saat status masih ordered |
| 1.3 | Siklus Tunai | Penerimaan Barang via RPC Gudang | PASSED | 114ms | Eksekusi atomik rpc_receive_purchase_goods sukses |
| 1.4 | Siklus Tunai | Kenaikan Stok Fisik & Kartu Stok | PASSED | 293ms | Stok gudang & total produk naik tepat (+5 item), no duplicate |
| 1.5 | Siklus Tunai | Keseimbangan Jurnal GL Pembelian Tunai | PASSED | 203ms | Balance: Debit Persediaan (1-104) = Kredit Kas (1-100) |
| 2.1 | Siklus Kredit | Pembuatan PO Tempo (Payment: credit) | PASSED | 198ms | Tercatat jatuh tempo 30 hari, status unpaid |
| 2.2 | Siklus Kredit | Penerimaan Barang PO Tempo & Jurnal AP | PASSED | 192ms | Balance: Debit Persediaan = Kredit Hutang Usaha (2-101) |
| 2.3 | Siklus Kredit | Sinkronisasi Modul Hutang & Aging | PASSED | 91ms | Muncul di /dashboard/inventori/hutang kategori Current |
| 2.4 | Siklus Kredit | Pembayaran Cicilan 1 (Partial Payment) | PASSED | 281ms | Status update ke partial, sisa hutang terpotong tepat |
| 2.5 | Siklus Kredit | Pelunasan Penuh (Full Settlement) | PASSED | 299ms | Status update ke paid, jurnal kas keluar terbentuk |
| 3.1 | Guardrails | Proteksi Penerimaan Ganda (Anti-Double Receipt) | PASSED | 102ms | Ditolak: "Barang untuk pesanan ini sudah pernah diterima" |
| 3.2 | Guardrails | Proteksi Overpayment Hutang | PASSED | 173ms | Ditolak: Pembayaran melebihi sisa hutang diblokir |
| 3.3 | Guardrails | Proteksi Pembayaran Negatif / Nol | PASSED | 180ms | Ditolak: Nominal <= 0 diblokir sistem |
| 4.1 | Rollback | Pembersihan Transaksi Uji Coba Simulasi | PASSED | 1050ms | Database kembali bersih dan stok produk baseline utuh |
šļø 4. Arsitektur Sinkronisasi 5 Subsistem#
Setelah audit dan remediasi, modul Pengadaan BUMDes terbukti sinkron secara menyeluruh dengan diagram alur berikut:
[Formulir PO] āāāŗ (Status: ordered) āāāŗ TIDAK ADA mutasi stok / jurnal
ā
[Penerimaan Fisik di Gudang]
ā
āāāāāāāāāāāāāāā“āāāāāāāāāāāāāā
ā¼ ā¼
[1. Kartu Stok & Gudang] [2. Buku Besar / GL]
- stock_movements (IN) - Debit: Persediaan Barang (1-104xx)
- warehouse_stocks (+Qty) - Kredit:
- products.current_stock (+Qty) * Tunai āāāŗ Kas / Bank (1-100xx)
* Tempo āāāŗ Hutang Usaha (2-101xx)
ā
ā¼
[3. Modul Hutang Usaha (AP)]
- Aging Schedule (0-30 Hari)
- Pelunasan Bertahap (BKK)
- Debit 2-101, Kredit Kas
š” 5. Rekomendasi Operasional & SOP#
- Pemisahan Peran Operasional (Segregation of Duties):
- Staf Administrasi / Pengadaan bertugas menerbitkan PO (
status: ordered). - Staf Gudang (Logistics Officer) bertugas memeriksa fisik barang datang dan menekan tombol "Terima Barang" (
rpc_receive_purchase_goods). - Staf Keuangan bertugas memvalidasi faktur vendor dan melakukan pembayaran di menu Hutang Usaha (
rpc_process_supplier_payment).
- Audit Periodik Terjadwal:
- Skrip audit simulasi
scripts/audit_po_comprehensive.tsdisarankan dijalankan setiap awal bulan atau sebelum proses tutup buku (closing) untuk memastikan konsistensi saldo persediaan dan hutang.
- Dokumen Pendukung Fisik:
- Setiap penerimaan barang di gudang disarankan mengunggah foto fisik Berita Acara Serah Terima (BAST) atau surat jalan vendor melalui tombol unggah bukti yang telah tersedia.
Laporan ini diterbitkan secara sah dan sistemik sebagai bukti kepatuhan integritas modul finansial dan operasional ERP BUMDes Bolulango.