18

Blueprint Sistem Audit Trail & Forensik

Updated: Sep 2026Oleh: SystemModul Keuangan & Akuntansi

🛡️ BLUEPRINT SISTEM AUDIT TRAIL & LOG AKTIVITAS FORENSIK

Standar Tata Kelola, Jejak Digital, dan Pengawasan Mutasi Sistem ERP BUMDes#

BUMDes Bolulango — Kabupaten Boalemo, Gorontalo Standar Kepatuhan Permendesa PDTT No. 3/2021, SAK EP, & Standar Pengawasan BPKP / Inspektorat Daerah


🏛️ 1. Latar Belakang & Urgensi Tata Kelola#

Dalam tata kelola keuangan dan operasional badan usaha milik desa yang mengelola 25+ unit usaha produktif, transparansi dan non-repudiation (asas tidak dapat disangkal) merupakan prasyarat mutlak akuntabilitas publik.

Setiap mutasi data sensitif, seperti:

  1. Perubahan & Penghapusan Jurnal Keuangan: Risiko manipulasi saldo atau penghapusan transaksi mencurigakan.
  2. Pembatalan / Tutup Buku (Period Closing & Reopening): Tindakan membuka kembali periode yang sudah ditutup untuk memasukkan data historis atau perbaikan pembukuan.
  3. Pemberian & Perubahan Peran Pengguna (Privilege Escalation): Pengubahan wewenang kasir, admin gudang, atau bendahara.
  4. Restrukturisasi & Penghapusbukuan Piutang (USP): Tindakan write-off pinjaman macet yang rawan penyalahgunaan wewenang.

Untuk mencegah terjadinya kecurangan (fraud), sistem ERP BUMDes Bolulango mengimplementasikan Modul Audit Trail & Log Aktivitas Forensik berbasis tabel public.audit_logs dengan perlindungan ketat di tingkat basis data.

Memuat diagram alur...

🗄️ 2. Struktur Basis Data & Model Data (audit_logs)#

Tabel audit_logs didesain secara append-only (hanya bisa menambah record, tidak diizinkan pengeditan manual).

2.1. Skema Tabel PostgreSQL

sql
CREATE TABLE IF NOT EXISTS public.audit_logs (
 id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
 actor_id UUID REFERENCES public.profiles(id) ON DELETE SET NULL,
 action VARCHAR(64) NOT NULL,
 module VARCHAR(64) NOT NULL,
 details JSONB DEFAULT '{}'::jsonb,
 status VARCHAR(20) DEFAULT 'success',
 ip_address VARCHAR(45) NULL,
 created_at TIMESTAMPTZ DEFAULT NOW()
);

-- Indeks Kinerja Kueri Forensik
CREATE INDEX IF NOT EXISTS idx_audit_logs_actor ON public.audit_logs(actor_id);
CREATE INDEX IF NOT EXISTS idx_audit_logs_module ON public.audit_logs(module);
CREATE INDEX IF NOT EXISTS idx_audit_logs_created_at ON public.audit_logs(created_at DESC);
CREATE INDEX IF NOT EXISTS idx_audit_logs_action ON public.audit_logs(action);

2.2. Kamus Data Atribut

KolomTipe DataKeterangan
idUUIDKunci primer unik otomatis.
actor_idUUIDID pengguna yang melakukan aksi (merujuk ke profiles.id). Bernilai NULL jika operasi dilakukan oleh CLI/Sistem latar belakang.
actionVARCHAR(64)Aksi operasional: CREATE, UPDATE, DELETE, LOGIN, LOGOUT, REVERT_CLOSING_PERIOD, MIGRATION_TOGGLE, dll.
moduleVARCHAR(64)Modul asal: FINANCE, TREASURY, CLOSING, COA_MAPPING, USP, INVENTORY, RBAC, dll.
detailsJSONBMetadata kaya yang memuat data sebelum/sesudah, nomor referensi, alasan perubahan, dan nominal.
statusVARCHAR(20)Status eksekusi: success, error, warning.
ip_addressVARCHAR(45)Alamat IP pengeksekusi untuk pelacakan lokasi akses.
created_atTIMESTAMPTZWaktu pencatatan presisi tinggi terkunci zona waktu UTC/WITA.

🔐 3. Arsitektur Keamanan & Kebijakan Row-Level Security (RLS)#

3.1. Klasifikasi RLS Tier 5 (Admin-Only / Service-Role)

Tabel audit_logs digolongkan ke dalam Tier 5 RLS, di mana tidak ada kebijakan baris publik (no user row policies). Artinya:

  • Pengguna biasa (koneksi anon / authenticated standar) secara mutlak tidak dapat membaca maupun memanipulasi tabel audit_logs.
  • Kueri pembacaan dan penulisan hanya dapat dijalankan melalui createAdminClient() yang diverifikasi di sisi server (Server Action) setelah melewati pengecekan peran pengguna.

3.2. Implementasi Server Action Terpusat (audit.ts)

typescript
import { createAdminClient } from '@/lib/supabase/service'
import { getCurrentUser } from '@/lib/auth'

export async function getAuditLogs(limit = 100) {
 const user = await getCurrentUser()
 // Guard Otorisasi: Hanya peran pengawas/eksekutif yang diizinkan melihat log
 if (!user?.profile?.role || !['super_admin', 'admin_keuangan', 'direktur'].includes(user.profile.role)) {
 return []
 }
 
 const supabase = createAdminClient()
 const { data, error } = await supabase
 .from('audit_logs')
 .select(`
 *,
 profiles (full_name, role)
 `)
 .order('created_at', { ascending: false })
 .limit(limit)

 if (error) {
 console.error('Error fetching audit logs:', error)
 return []
 }
 return data || []
}

🖥️ 4. Antarmuka Visualisasi Pengawasan (UI/UX)#

Sistem menyediakan 2 titik akses antarmuka untuk meninjau log aktivitas:

4.1. Visualizer Utama: /dashboard/pengguna (Tab: Log Aktivitas)

Komponen AuditLogVisualizer.tsx menyajikan antarmuka visual komprehensif:

  1. Kartu Ringkasan Eksekutif (4 KPI Cards):
  • Total Aktivitas: Akumulasi seluruh log yang terekam.
  • Tingkat Keberhasilan: Rasio aksi status === 'success' dalam persentase dengan progress bar dinamis.
  • Tindakan Sensitif: Jumlah operasi kritis (DELETE atau UPDATE) pada data master/keuangan.
  • Kegagalan Sistem: Jumlah aksi berstatus error yang tertangkap sistem.
  1. Visualisasi Analitik Recharts:
  • Tren Aktivitas (7 Hari): Grafik area interaktif yang menunjukkan volume mutasi per hari dalam sepekan terakhir.
  • Distribusi Modul: Donut chart persentase aktivitas per modul sistem (FINANCE, COA_MAPPING, RBAC, dll).
  1. Penyaring Interaktif (Filter & Search):
  • Pencarian real-time berdasarkan nama operator, modul, jenis aksi, atau teks di dalam JSON detail.
  • Dropdown filter modul dinamis.
  1. Tabel Riwayat Rinci:
  • Menampilkan ikon status (hijau/merah), tanggal, nama aktor & peran, badge aksi, dan tombol modal detail.

4.2. Panel Jejak Cepat: /dashboard/pengaturan (Tab: Database)

Komponen DatabaseSettingsTab.tsx menyediakan ringkasan 10 log aktivitas administratif terbaru untuk inspeksi berkala administrator sistem saat memantau status kesehatan database.


🗺️ 5. Peta Jalan Pengembangan (Evolution Roadmap)#

Untuk meningkatkan kepatuhan tata kelola BUMDes berstandar audit profesional, ditetapkan 5 Fase Pengembangan Modul Audit Trail:

Memuat diagram alur...

🚩 Fase 1: Otomasi Pencatatan Mutasi Sistem (System-Wide Auto-Hooking) - [SELESAI]

Menghubungkan fungsi createLog() ke setiap Server Action kritikal tanpa bergantung pada input manual:

  • Modul Jurnal & Transaksi Kas:
  • Hook saat pembuatan jurnal manual (createManualJournalEntry).
  • Hook saat edit transaksi kas / BKK / BKM (createTreasuryTransaction).
  • Hook saat konfirmasi setoran fisik kas (confirmCashRemittance).
  • Modul Tutup Buku & Periode Akuntansi:
  • Hook saat pembatalan tutup buku (revert_sept_2025_closing).
  • Modul Mode Migrasi & Unit Usaha:
  • Hook saat status is_migration_mode diaktifkan atau dimatikan oleh Super Admin (updateBusinessUnit).
  • Hook saat perubahan status operasional unit usaha.
  • Modul Simpan Pinjam Syariah (USP):
  • Hook persetujuan pinjaman, pencairan dana, restrukturisasi jadwal angsuran, dan write-off pinjaman macet.
  • Modul Keamanan & Akun:
  • Hook login berhasil dan login gagal (deteksi percobaan peretasan).
  • Hook pergantian role pengguna dan pembuatan pengguna baru.

🚩 Fase 2: Pelaporan & Ekspor Kepatuhan Audit (Compliance Export) - [SELESAI]

Menyediakan dokumen formal fisik untuk diserahkan kepada auditor eksternal:

  • Ekspor PDF Resmi Berita Acara Jejak Audit:
  • Kop Resmi BUMDes Bolulango lengkap dengan identitas sistem & nomor dokumen dinamis (BA-AUDIT/YYYY/MM/DD).
  • Tata letak Landscape A4 dengan tabel kronologis aktivitas audit ber-cap waktu terotentikasi.
  • Lembar pengesahan Tiga Pilar Audit: Bendahara BUMDes, Ketua BPD / Dewan Pengawas, dan Direktur Utama BUMDes.
  • Ekspor Berkas Excel / CSV:
  • Unduhan instan seluruh log yang terfilter untuk analisis spreadsheet auditor BPKP (Excel .xlsx multi-sheet & CSV UTF-8).

🚩 Fase 3: Penyaring Rentang Waktu & Unit Usaha (Advanced Filtering) - [SELESAI]

Memudahkan auditor memeriksa kasus spesifik:

  • Komponen Date Range Picker: Pemilihan Tanggal Mulai s/d Tanggal Selesai lengkap dengan preset kilat (Hari Ini, 7 Hari Terakhir, Bulan Ini).
  • Filter Multi-Pilihan Unit Usaha: Pemilahan mutasi per unit (Holding Pusat, USP-01, KTPG-PTR, dll) berdasarkan metadata transaksi dan profil staf.
  • Filter Berdasarkan Tingkat Urgensi (Severity Level):
  • 🔴 Kritis (Critical): Aksi DELETE, MIGRATION_MODE_TOGGLE, REVERT, atau status error.
  • 🟡 Peringatan (Warning): Aksi UPDATE, UNIT_STATUS_UPDATE, atau status warning.
  • 🔵 Informasi (Informational): Aksi CREATE, entri jurnal baru, login, dan mutasi normal.

🚩 Fase 4: Modal Forensik Perbandingan Data (Diff Viewer) - [SELESAI]

Memperlihatkan apa saja yang diubah oleh pengguna:

  • Modal Forensik Interaktif Layar Lebar: Dialog komprehensif (max-w-4xl) dengan 3 tab navigasi: Komparasi Visual, Payload Mentah JSON, dan Forensik Jaringan.
  • Tampilan Komparasi Berdampingan (Side-by-Side Diff):
  • Data Lama (Old Value): Penanda merah lembut (rose-50/rose-900) untuk nilai sebelum mutasi.
  • Data Baru (New Value): Penanda hijau lembut (emerald-50/emerald-900) untuk nilai setelah mutasi.
  • Kalkulator Deviasi Finansial Dinamis: Perhitungan otomatis selisih nominal (Δ rupiah) dan persentase perubahan pada transaksi finansial yang mengalami revisi saldo.
  • Tombol Salin Cepat JSON: Mempermudah penarikan bukti forensik digital ke clipboard.

🚩 Fase 5: Deteksi Anomali Cerdas & Early Warning System (EWS Security)

Proteksi dini pencegahan penggelapan dana:

  • Threshold Alert: Memberi bendera peringatan pada mutasi kas tunai di atas Rp 5.000.000 tanpa persetujuan berjenjang.
  • Out-of-Hours Alert: Deteksi dan penandaan mutasi yang diinput di luar jam kerja operasional kantor desa (misal antara pukul 23:00 - 05:00 WITA).
  • Rapid Deletion Watcher: Peringatan instan ke Direktur jika ada akun staf yang menghapus lebih dari 3 entri dalam kurun waktu 5 menit.

📝 6. Standar Penulisan Log Aktivitas (createLog)#

Setiap pengembang wajib mengikuti konvensi penulisan payload saat menambahkan hook audit baru:

typescript
import { createLog } from '@/lib/actions/audit'

// Contoh Standar Pencatatan Aksi Finansial:
await createLog({
 action: 'REVERT_CLOSING_PERIOD', // Gunakan huruf kapital baku
 module: 'FINANCE', // Nama modul sistem standar
 status: 'success', // 'success' | 'error' | 'warning'
 details: {
 reference_number: 'CLOSE-PUSAT-2025-09',
 period_month: 9,
 period_year: 2025,
 reason: 'Migrasi data historis 12 bulan lampau',
 affected_tables: ['financial_closings', 'journal_entries', 'depreciation_logs']
 }
})

Pusat Dokumentasi Sistem ERP BUMDes Bolulango — Blueprint Arsitektur Teknis Tata Kelola & Audit Trail v2026.1.

Apakah panduan ini membantu Anda?