18

Laporan Audit Modul Filter ERP

Updated: Nov 2026Oleh: SystemModul Keuangan & Akuntansi

๐Ÿ›ก๏ธ LAPORAN AUDIT KOMPREHENSIF MODUL FILTER & INTEGRITAS DATA ERP 2026

Evaluasi Forensik Arsitektur Filter, Reaktivitas State, Zona Waktu WITA, dan Isolasi RBAC Multi-Unit#

BUMDes Bolulango โ€” Desa Bandungan, Kecamatan Bulango Utara, Kabupaten Bone Bolango, Gorontalo Nomor Dokumen: AUD/TECH/2026-10-31/001-FILTER


๐Ÿงญ 1. Ringkasan Eksekutif (Executive Summary)#

Audit forensik ini dilakukan untuk mengevaluasi keandalan fungsional, integritas data pembukuan SAK EP, isolasi wewenang unit kerja (RBAC), dan pengalaman pengguna (UI/UX) pada seluruh komponen filter dan pencarian di ekosistem ERP BUMDes Bolulango.

Pemindaian menyeluruh dilakukan terhadap 95+ halaman dan komponen antarmuka, mencakup:

  • Modul Finansial & Akuntansi: Neraca Skontro, Neraca Saldo, Neraca Lajur, Anggaran RKA, Buku Besar, BKU, Kas Kecil, Bukti Foto, Utang-Piutang, Pajak, dan Rekonsiliasi Bank.
  • Modul Operasional & Agribisnis: Smart Farming Ayam Petelur, Penggemukan Sapi Potong, Budidaya Nila, dan Pabrik Pakan Ternak Mandiri (Feed Mill).
  • Modul Simpan Pinjam: Unit Simpan Pinjam Konvensional (USP .01) dan Unit Simpan Pinjam Syariah (USPPS .13).
  • Modul Logistik & Inventori: Transfer Stok Antar-Unit, Manajemen Gudang, POS Retail Kasir, dan Suplier.

Hasil Kuantitatif Audit:

  • Total Temuan: 35 Isu Teknis & Desain.
  • Tingkat Kritis (Fase 1 - Blocker & Kebocoran Data): 14 Isu (Telah diselesaikan 100%).
  • Tingkat Menengah (Fase 2 - Sinkronisasi Konteks & UI Periode): 11 Isu (Telah diselesaikan 100%).
  • Tingkat Minor & UI Polish (Fase 3 - Dead UI Controls & Polish): 10 Isu (Telah diselesaikan 100%).
  • Progres Kumulatif Selesai: 35 dari 35 Isu (100% Tuntas & Terverifikasi).

๐Ÿ“Š 2. Matriks 7 Kategori Temuan Audit#

Memuat diagram alur...

Rincian 7 Klaster Temuan:

  1. React State Stale (useState(initialData)): Filter di UI memperbarui URL, namun tabel laporan tidak bereaksi karena React mempertahankan state lama dari siklus render pertama.
  2. Dead UI Controls: Input pencarian atau tombol filter dirender di layar tanpa event listener (value, onChange, onClick).
  3. Logika Filter Terputus & Konflik: Filter gudang hanya mengubah banner tanpa menyaring tabel barang; filter status tab merusak rekapitulasi kartu KPI.
  4. Pergeseran Zona Waktu WITA (UTC+8): Penggunaan .toISOString().split('T')[0] menggeser tanggal pembukuan mundur 1 hari (misal 1 Oktober 00:00 WITA menjadi 30 September 16:00 UTC).
  5. Inkonsistensi URL Parameters: Perbedaan key ?unit= vs ?unitId=, serta params.delete('unitId') saat memilih konsolidasi yang tidak membersihkan activeUnit.
  6. Celah Isolasi RBAC Multi-Unit: Kebocoran angka statistik Jurnal Kegiatan tanpa filter unit, serta pencampuran data Simpan Pinjam Konvensional dan Syariah.
  7. Ekspor Mengabaikan Filter Aktif: Fungsi ekspor CSV/Excel/PDF mengunduh data mentah tanpa menerapkan baris hasil saringan di layar.

๐Ÿš€ 3. Status Pelaksanaan & Remediasi Bertahap (100% Selesai)#

A. Fase 1: Hotfix Kritis & Integritas Data (STATUS: SELESAI / RESOLVED)

Telah diselesaikan pada 31 Oktober 2026:

  1. Penyelesaian Stale State pada 6 Halaman Keuangan:
  • SkontroBalanceSheetClient.tsx: Menggunakan const data = initialData langsung dengan useEffect penyinkron props.
  • TrialBalanceClient.tsx: Langsung mengikat data Server Component ke tampilan.
  • WorksheetClient.tsx: Mengikat data 10 kolom langsung ke tampilan.
  • BudgetClient.tsx: Menambahkan useEffect untuk menyinkronkan setBudgets(initialBudgets) sehingga input pagu RKA tidak salah menimpa unit/tahun lain.
  • KasKecilClient.tsx: Sinkronisasi otomatis selectedFundId saat unit aktif diubah di WorkContextBar.
  • PhotoEvidenceClient.tsx: Sinkronisasi parameter URL unitId, selectedMonth, selectedYear.
  1. Standardisasi Tanggal Lokal WITA:
  • Mengganti seluruh konversi .toISOString().split('T')[0] dengan toLocalDateString() di cutoff-period.ts, UniversalFilterBar.tsx, KasKecilClient.tsx, DebtReceivableClient.tsx, TaxClient.tsx, dan form agunan USP.
  • Menambahkan konstanta baku FISCAL_YEARS = [2023..2030].
  1. Penyatuan Filter Utang-Piutang:
  • Sinkronisasi dua arah statusFilter global dengan filter lokal tab Piutang (arFilter) dan tab Utang (apFilter).
  • Meneruskan rentang tanggal cut-off ke riwayat pelunasan BKK suplier.
  • Menambahkan event handler onResetAll untuk mereset seluruh tab secara serentak.
  1. Isolasi Rekapitulasi SPT Masa & Eliminasi Duplikasi PPh 23:
  • Server Component pajak/page.tsx mengambil bukti potong seluruh masa pajak aktif; filter status hanya menyaring daftar bukti potong di Tab 1 tanpa memotong tabel SPT Masa di Tab 2.
  • Menghapus baris ganda PPh 23 sehingga daftar pajak tepat 5 baris resmi SAK EP.
  1. Penutupan Celah RBAC & Isolasi Unit USP Konvensional vs Syariah:
  • Menambahkan otorisasi resolveFinanceRBAC pada getActivityStats di activities.ts.
  • Menerapkan isolasi effectiveUnitId pada query simpanan, statistik tabungan, dan agunan di kedua modul USP.
  • Memperbaiki seluruh tautan navigasi di modul Syariah agar 100% berada dalam lingkup /dashboard/simpan-pinjam-syariah/.

B. Fase 2: Sinkronisasi Konteks Unit, UI Periode, Hierarki Sub-Holding & Ekspor (STATUS: SELESAI / RESOLVED)

Telah diselesaikan pada 01 November 2026:

  1. URL Sync, Konteks Unit Aman & Drill-Down COA:
  • components/dashboard/UnitUrlSyncProvider.tsx: Menyinkronkan perubahan activeUnit di WorkContextBar ke parameter URL ?unitId= tanpa memicu infinite re-render.
  • components/finance/UniversalFilterBar.tsx: Menggunakan useOptionalUnitContext() dari @/contexts/UnitContext sehingga komponen aman saat diuji pada unit test Jest yang tidak membungkus provider. Saat pengguna memilih "Semua Unit (Konsolidasi)", sistem memanggil setActiveUnit?.(null) untuk menyelaraskan indikator header.
  • app/dashboard/keuangan/buku-besar/page.tsx & LedgerClient.tsx: Standarisasi pembacaan parameter URL ?unitId= (dengan fallback kompatibilitas ?unit=).
  • app/dashboard/keuangan/coa/COAClient.tsx: Tautan drill-down saldo akun ke Buku Besar menyertakan &unitId= terisolasi sesuai unit aktif.
  1. Standardisasi UI Periode & Mode Setahun Penuh (month=0):
  • app/dashboard/keuangan/buku-besar/: Menambahkan opsi "Semua Bulan (Setahun Penuh)" (month=0) yang menghitung saldo awal per 1 Januari dan menjumlahkan seluruh mutasi hingga 31 Desember.
  • app/dashboard/keuangan/neraca-saldo/ & TrialBalanceClient.tsx: Menambahkan kontrol filter pemilih Bulan (0..12) dan Tahun Fiskal FISCAL_YEARS yang terhubung langsung ke Server Actions.
  • app/dashboard/keuangan/neraca-lajur/ & WorksheetClient.tsx: Menambahkan kontrol filter pemilih Bulan dan Tahun Fiskal FISCAL_YEARS seragam.
  • Penyeragaman konstanta tahun fiskal FISCAL_YEARS = [2023..2030] di seluruh laporan keuangan (BalanceSheetClient, ProfitLossClient, CashFlowClient, EquityClient, SkontroBalanceSheetClient, MatrixClient).
  • Penggunaan toLocalDateString() untuk tanggal filter default di TreasuryClient.tsx dan FullRecordingReport.tsx.
  1. Hierarki Sub-Holding Ketapang & Agregasi Multi-Unit Rekursif:
  • lib/utils/unit-hierarchy.ts: Memperbaiki algoritma buildUnitHierarchy dengan orphan-parent fallback agar daftar parsial unit bawahan Manajer Sub-Holding Ketapang tetap membentuk pohon navigasi yang valid dan tidak kosong.
  • lib/actions/finance/misc.ts: Menambahkan assignedUnitId pada hasil pengembalian resolveFinanceRBAC untuk membedakan unit penugasan asli dengan filter aktif.
  • lib/actions/finance/journal.ts & lib/actions/finance/misc.ts: Menerapkan agregasi rekursif getAllChildUnitIds pada Jurnal Umum dan Bukti Foto Transaksi (getPhotoEvidenceTrend, getPhotoEvidenceReport).
  • Pembukaan seleksi dropdown filter sub-unit anak bagi Kepala Sub-Holding Ketapang di 7 antarmuka keuangan (bku, perbendaharaan, anggaran, bukti-foto, neraca-lajur, buku-besar, dan FinanceDashboard).
  1. Integrasi Filter Aktif ke Seluruh Format Ekspor (Filter-Aware Export):
  • MatrixClient.tsx: Ekspor CSV Matriks Konsolidasi kini mengekspor baris tersaring (filterRows) sesuai pencarian akun dan toggle Sembunyikan Saldo Rp 0.
  • AsetClient.tsx: Ekspor PDF/Excel Buku Inventarisasi Aset (BIIA) kini mengekspor baris data terfilter (filtered).
  • lib/export-utils.ts: Mendukung pencantuman unitName spesifik pada header Excel Neraca, Laba Rugi, dan Arus Kas, serta parameter method: 'direct' | 'indirect' pada PDF dan Excel Arus Kas.
  • CashFlowClient.tsx: Unduhan PDF dan Excel Arus Kas otomatis menyesuaikan dengan metode yang sedang aktif di tab layar (Langsung vs Tidak Langsung SAK EP).
  • app/dashboard/sdm/absensi/AttendanceClient.tsx: Ekspor CSV presensi harian kini mengekspor baris terfilter (filteredRows).

C. Fase 3: Penyambungan Kontrol UI Mati, Logika Filter & Polish UX (STATUS: SELESAI / RESOLVED)

Telah diselesaikan pada 01 November 2026:

  1. Pencarian Global & Portal Publik (Komponen 1):
  • lib/actions/search.ts: Menggunakan tabel resmi business_units, menambahkan Server Action globalDashboardSearch dengan proteksi otorisasi resolveFinanceRBAC dan agregasi rekursif multi-unit getAllChildUnitIds.
  • app/pencarian/SearchClient.tsx: Menambahkan input debounce 300ms, mapping harga jual selling_price, dan kode unit usaha.
  • app/dashboard/search/page.tsx: Dibangun ulang menjadi antarmuka pencarian universal terpadu yang interaktif dengan tab kategori, debounce, dan tautan langsung ke modul.
  • app/berita/page.tsx: Menambahkan hidden input kategori saat submit pencarian berita agar filter kategori tidak hilang.
  1. Penyambungan Kontrol UI Mati / Dead UI Controls (Komponen 2):
  • app/dashboard/simpan-pinjam/pinjaman/page.tsx & simpan-pinjam-syariah/pinjaman/page.tsx: Input loanSearch tersambung secara reaktif ke filteredLoans untuk tampilan Kanban dan Tabel.
  • app/dashboard/simpan-pinjam/simpanan/page.tsx & simpan-pinjam-syariah/simpanan/page.tsx: Tombol filter statis diganti menjadi select filter saldo (all, active_balance, zero_balance) yang menyaring data nasabah.
  • app/dashboard/simpan-pinjam/agunan/page.tsx & simpan-pinjam-syariah/agunan/page.tsx: Tombol filter statis diganti menjadi select filter status agunan (all, stored, returned).
  • app/dashboard/simpan-pinjam/anggota/laporan/page.tsx & simpan-pinjam-syariah/anggota/laporan/page.tsx: Dibangun ulang menjadi modul laporan saldo simpanan fungsional lengkap dengan ringkasan saldo, pencarian nasabah, dan tombol Export CSV sadar-filter.
  • app/dashboard/penjualan/riwayat/SalesReportClient.tsx: Input pencarian "Cari ID, Unit..." terhubung ke state searchTerm, tombol Export Data terhubung ke CSV downloader untuk mengekspor data tersaring, dan colSpan baris kosong diperbaiki menjadi 7.
  • app/dashboard/penjualan/invoice/InvoiceClient.tsx: Tombol filter mati diganti menjadi select filter status (all, unpaid, partial, paid), dan pesan WhatsApp disanitasi dari nama lama menjadi BUMDes Bolulango.
  • app/dashboard/manufaktur/riwayat/page.tsx: Input pencarian "Cari Batch ID..." terhubung ke state searchTerm dan tombol Export Laporan terhubung ke CSV downloader.
  • app/dashboard/keuangan/rekonsiliasi-bank/BankReconciliationClient.tsx: Input pencarian mutasi terhubung ke state searchQuery, tombol pill filter "Sudah Cocok" diaktifkan di samping "Semua" dan "Belum Cocok", dan pencarian mencakup uraian serta nomor jurnal.
  1. Logika Filter, KPI & DataTable (Komponen 3):
  • components/feedmill/FeedMillWarehousePanel.tsx: Menyertakan selectedWarehouseId dalam filteredProducts saat gudang spesifik dipilih.
  • components/feedmill/FeedQualityControlPanel.tsx: Menambahkan tombol filter "Grade B" (setGradeFilter('GRADE_B')) di toolbar filter QC.
  • app/dashboard/inventori/transfer/TransferListClient.tsx: Kartu statistik KPI tetap dihitung dari total data awal, sementara tabel dan tombol ekspor PDF/Excel menggunakan filteredTransfers reaktif.
  • app/dashboard/peternakan/kpi/KPIDashboardClient.tsx: Angka pada badge tombol "Butuh Perhatian (${alertUnitsCount})" diselaraskan dengan jumlah unit unik yang membutuhkan perhatian agar tidak terjadi penggandaan matematis.
  • app/dashboard/peternakan/sapi-potong/SapiPotongDashboard.tsx: Menambahkan kontrol filter status ternak (default 'active') di tab Daftar Ternak sehingga angka label tab konsisten dengan jumlah baris tabel.
  • components/ui/DataTable.tsx: Menambahkan auto-reset setCurrentPage(1) saat prop data berubah, mendukung pencarian numerik via String(value), dan penambahan kelas tema gelap (dark:).
  1. Sanitasi Identitas Resmi & Penyeragaman colSpan (Komponen 4):
  • app/dashboard/inventori/pos/POSClient.tsx: Mengganti nama template lama menjadi BUMDes Bolulango, QRIS diselaraskan dengan BUMDES_BOLULANGO, dan menghapus filter sepihak yang menyembunyikan item promosi.
  • app/dashboard/simpan-pinjam-syariah/pengawasan/PengawasanClient.tsx: Mengganti kop cetak DPS menjadi BUMDES BOLULANGO.
  • app/dashboard/inventori/supplier/SupplierClient.tsx: Mengganti sorting in-place menjadi shallow copy [...suppliers].sort(...) agar tidak memutasi state React saat render, dan memperbaiki colSpan={5} pada baris kosong.
  • Penyeragaman colSpan baris kosong di tabel:
  • components/dashboard/peternakan/LivestockHistoryTable.tsx (selalu colSpan={4}).
  • app/dashboard/peternakan/FullRecordingReport.tsx (diperbaiki dari 9 menjadi colSpan={13}).
  • components/feedmill/FeedMillProductCatalogPanel.tsx (diperbaiki dari 9 dan 11 menjadi tepat colSpan={10}).

๐Ÿงช 4. Rekapitulasi Verifikasi Penjaminan Mutu#

Metode VerifikasiPerintah EksekusiHasil PengujianKeterangan
Kompilasi TypeScriptnode --max-old-space-size=8192 ./node_modules/typescript/bin/tsc --noEmit0 Error (Exit Code 0)Validasi ketat seluruh berkas TS/TSX bebas type error
Unit & Regression Testingnpx jest87 Tests PASS (100%)Remediasi BKU, Buku Besar, Jurnal, dan Filter Universal
Next.js Production Buildnpm run build100% Sukses (Exit Code 0)134 rute terkompilasi, Server Actions valid
Validasi Standar Dokumennpm run verify:docs50 Checks PASS (0 Error)Patuh Zero-LaTeX, frontmatter lengkap, bebas dead-link

๐Ÿ“œ 5. Lembar Pengesahan Formal Dokumen#

Dokumen audit ini telah diverifikasi dan disahkan sebagai acuan baku tata kelola sistem ERP:

PeranNama PejabatJabatanTanggalStatus
PenyusunTim Arsitektur SistemSoftware Architect & Forensic Auditor2026-11-01SELESAI
PemeriksaKepala Bagian IT & SPIKepala Auditor Internal BUMDes2026-11-01DISETUJUI
PengesahDirektur Utama BUMDesDirektur BUMDes Bolulango2026-11-01DITERAPKAN

Apakah panduan ini membantu Anda?