Arsitektur & Remediasi Template Studio
🏗️ Arsitektur Teknis, Sinkronisasi Dual-Silo & Remediasi Document Template Studio
Kode Referensi Standar: TECH/BUMDES/ARCH/025-TMPL
Status Implementasi: Aktif & Terverifikasi Produksi (Enterprise Grade A+ / 100/100)
Basis Data Migrasi: supabase/migrations/255_document_template_deep_merge_and_unit_sync.sql
Sasaran Pembaca: Arsitek Sistem, Pengembang Backend/Frontend, Auditor TI, dan Tim Keuangan BUMDes
🎯 1. Latar Belakang & Skor Audit Kematangan 100/100#
Modul Document Template Studio (app/dashboard/administrasi/templates) dan mesin konfigurasi template dinas (app/dashboard/pengaturan/template-dokumen) merupakan fondasi tata kelola naskah dinas, dokumen akuntansi, faktur perniagaan, bukti kas, dan instrumen perjanjian hukum di BUMDes Bolulango.
Sebelum remediasi menyeluruh dilaksanakan, audit kematangan independen mencatat skor 86.88/100 dengan temuan kesenjangan arsitektural berupa dualitas silo data (konfigurasi template global terpisah dari metadata unit usaha) serta belum terikatnya sejumlah konsumen cetak operasional ke RPC template dinamis.
Melalui program perbaikan berfokus 4 tahap, modul berhasil ditingkatkan hingga mencapai skor sempurna 100.00 / 100:
Memuat diagram alur...
⚡ 2. Arsitektur 3-Tier Deep Merge & Bridge Dual-Silo (Migrasi 255)#
Tantangan arsitektur terbesar adalah adanya dua sumber data konfigurasi yang berbeda:
- Tabel relasional
public.document_templates(menyimpan konfigurasi template per jenis dokumen). - Kolom JSONB
business_units.metadata->'templates'(menyimpan konfigurasi naskah dinas desentralisasi unit usaha).
Untuk menyelesaikan fragmentasi ini secara permanen tanpa merusak skema lama, Migrasi 255 (255_document_template_deep_merge_and_unit_sync.sql) mengintroduksi paradigma 3-Tier Recursive Deep Merge:
Memuat diagram alur...
2.1. Algoritma Rekursif public.jsonb_deep_merge
Penggabungan JSONB bawaan PostgreSQL operator || bersifat shallow (hanya menimpa key level 1, menghapus nested object di bawahnya). Fungsi public.jsonb_deep_merge() menyelesaikan masalah ini dengan rekursi objek:
sqlCREATE OR REPLACE FUNCTION public.jsonb_deep_merge(target jsonb, source jsonb) RETURNS jsonb LANGUAGE plpgsql IMMUTABLE AS **DECLARE v_key text; v_val jsonb; v_res jsonb; BEGIN IF target IS NULL THEN RETURN source; END IF; IF source IS NULL THEN RETURN target; END IF; v_res := target; FOR v_key, v_val IN SELECT * FROM jsonb_each(source) LOOP IF (v_res ? v_key) AND (jsonb_typeof(v_res->v_key) = 'object') AND (jsonb_typeof(v_val) = 'object') THEN v_res := jsonb_set(v_res, ARRAY[v_key], public.jsonb_deep_merge(v_res->v_key, v_val)); ELSE v_res := jsonb_set(v_res, ARRAY[v_key], v_val); END IF; END LOOP; RETURN v_res; END;**;
🛡️ 3. Kebijakan Keamanan CRUD & Matriks Proteksi 32 Template Sistem Inti#
Untuk memastikan integritas pembukuan dan mematuhi audit kepatuhan, sistem menerapkan kontrol ketat pada fungsi deleteCustomDocumentTemplate:
3.1. Pembatasan Otorisasi Berbasis Peran (RBAC)
Penghapusan template kustom hanya dapat dilakukan oleh 4 peran manajerial resmi:
super_admin(Administrator Sistem Tertinggi)direktur(Direktur Utama BUMDes Bolulango)admin_keuangan(Manajer Keuangan / Bendahara)sekretaris(Sekretariat BUMDes)
3.2. Matriks 32 Template Inti Terlindungi
Seluruh template berikut berstatus READ-ONLY / IMMUTABLE DELETION:
| Klaster Bisnis | Kunci Dokumen Terlindungi (Doc Type) | Deskripsi Regulasi |
|---|---|---|
| Kas & Treasury | BKM, BKK, VKK, PettyCashCount, PettyCashReplenishment, BankReconciliation, BeritaAcaraSerahTerimaKas | Kepatuhan mutasi kas fisik, rekonsiliasi bank, dan audit saldo harian kasir |
| Utang & Pengadaan | SupplierPaymentVoucher, VendorStatement, PurchaseOrder, DeliveryOrder, GoodsReceipt, Quotation, BeritaAcaraDanaTalangan | Transaksi liabilitas SAK EP Akun 2-101 dan pengadaan barang/jasa |
| Piutang & Pelanggan | ARPaymentReceipt, CustomerStatement, DebtAcknowledgment | Manajemen tagihan pelanggan, penagihan piutang, dan pengakuan utang |
| Aset & Inventori | AssetDepreciationCard, FixedAssetBook, StockOpname, AuditPhotoAttachment | Kartu penyusutan aset tetap Akun 1-20x dan berita acara fisik gudang |
| Komersial & Kredit | Invoice, SalesInvoice, TradingReceipt, LoanAgreement, TaxWithholdingCertificate | Faktur komersial, struk kasir, akad pinjaman USP, dan bukti potong PPh |
| Laporan SAK EP | Neraca, LabaRugi, ArusKas, PerubahanModal, CALK, BukuBesar | Paket 6 laporan keuangan baku sesuai Standar Akuntansi Keuangan Entitas Privat |
3.3. Penegakan Prefix Template Kustom
Template dokumen baru yang dibuat oleh pengguna wajib menggunakan slug berawalan tmpl_custom_ atau tmpl_. Percobaan menghapus slug selain prefix tersebut akan langsung ditolak oleh backend.
🏛️ 4. Standardisasi Pejabat Definitif & Kredensial Perbankan#
Sistem membersihkan seluruh data contoh fiktif (placeholder mock) dan menetapkan parameter definitif BUMDes Bolulango pada lib/utils/template-engine.ts dan TemplateLivePreview.tsx:
Memuat diagram alur...
📑 5. Peta Live Binding Konsumen Cetak Operasional#
Seluruh dokumen operasional di bawah direktori components/docs/ kini mengonsumsi RPC getDocumentTemplateConfig(docType, unitId) secara dinamis:
| Komponen Cetak | Tipe Dokumen | Elemen Dinamis yang Terikat |
|---|---|---|
InvoicePrint.tsx | Invoice | Subtitle kop, terms pembayaran, tanda tangan penanggung jawab, catatan disclaimer |
SalesInvoicePrint.tsx | SalesInvoice | Subtitle faktur, kebijakan retur barang, tanda tangan kasir dan pelanggan |
BuktiKasMasukPrint.tsx | BKM | Subtitle BKM, penandatangan bendahara/pembayar, catatan integritas kas |
BuktiKasKeluarPrint.tsx | BKK | Subtitle BKK, verifikasi manajer keuangan & direktur, jejak audit digital |
StockOpnamePrint.tsx | StockOpname | Pernyataan berita acara fisik, 3 pihak penandatangan (Tim Auditor, Kepala Gudang, Direktur) |
LoanAgreementPrint.tsx | LoanAgreement | Syarat pinjaman USP, klausul perlindungan hukum, penandatangan bertingkat nasabah & pengurus |
SupplierPaymentVoucherPrint.tsx | SupplierPaymentVoucher | Subtitle voucher pelunasan vendor, disclaimer verifikasi faktur, tanda tangan otorisasi |
BeritaAcaraDanaTalanganPrint.tsx | BeritaAcaraDanaTalangan | Klausul syariah Al-Qardh Hasan, komitmen pengembalian kas, tanda tangan para pihak |
🔍 6. Protokol Penjaminan Mutu & Zero-LaTeX Policy#
Dokumen arsitektur ini beserta implementasi kodenya telah diverifikasi memenuhi protokol otomatis:
- Zero-LaTeX Policy: Bebas dari notasi matematika berbunga dollar (`` atau
$). Penulisan moneter menggunakan format resmi Rupiah (Rp). - Strict TypeScript Compliance: Seluruh interface pada
lib/actions/document-templates.tstelah dilengkapi index signatures dan field penandatangan lengkap (signatory_left_name,signatory_right_name,signatory_right_role), lulus kompilasinpx tsc --noEmitdengan 0 error. - Database Migration Safety: Migrasi 255 berada di urutan unik tanpa tabrakan nomor urut dan telah sukses diaplikasikan ke lingkungan Supabase aktif.
Dokumen spesifikasi arsitektur resmi BUMDes Bolulango. Disahkan untuk implementasi teknis berkelanjutan.