18

Arsitektur & Remediasi Template Studio

Updated: Okt 2026Oleh: SystemSistem ERP & Teknologi Inti

🏗️ 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:

  1. Tabel relasional public.document_templates (menyimpan konfigurasi template per jenis dokumen).
  2. 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:

sql
CREATE 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 BisnisKunci Dokumen Terlindungi (Doc Type)Deskripsi Regulasi
Kas & TreasuryBKM, BKK, VKK, PettyCashCount, PettyCashReplenishment, BankReconciliation, BeritaAcaraSerahTerimaKasKepatuhan mutasi kas fisik, rekonsiliasi bank, dan audit saldo harian kasir
Utang & PengadaanSupplierPaymentVoucher, VendorStatement, PurchaseOrder, DeliveryOrder, GoodsReceipt, Quotation, BeritaAcaraDanaTalanganTransaksi liabilitas SAK EP Akun 2-101 dan pengadaan barang/jasa
Piutang & PelangganARPaymentReceipt, CustomerStatement, DebtAcknowledgmentManajemen tagihan pelanggan, penagihan piutang, dan pengakuan utang
Aset & InventoriAssetDepreciationCard, FixedAssetBook, StockOpname, AuditPhotoAttachmentKartu penyusutan aset tetap Akun 1-20x dan berita acara fisik gudang
Komersial & KreditInvoice, SalesInvoice, TradingReceipt, LoanAgreement, TaxWithholdingCertificateFaktur komersial, struk kasir, akad pinjaman USP, dan bukti potong PPh
Laporan SAK EPNeraca, LabaRugi, ArusKas, PerubahanModal, CALK, BukuBesarPaket 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 CetakTipe DokumenElemen Dinamis yang Terikat
InvoicePrint.tsxInvoiceSubtitle kop, terms pembayaran, tanda tangan penanggung jawab, catatan disclaimer
SalesInvoicePrint.tsxSalesInvoiceSubtitle faktur, kebijakan retur barang, tanda tangan kasir dan pelanggan
BuktiKasMasukPrint.tsxBKMSubtitle BKM, penandatangan bendahara/pembayar, catatan integritas kas
BuktiKasKeluarPrint.tsxBKKSubtitle BKK, verifikasi manajer keuangan & direktur, jejak audit digital
StockOpnamePrint.tsxStockOpnamePernyataan berita acara fisik, 3 pihak penandatangan (Tim Auditor, Kepala Gudang, Direktur)
LoanAgreementPrint.tsxLoanAgreementSyarat pinjaman USP, klausul perlindungan hukum, penandatangan bertingkat nasabah & pengurus
SupplierPaymentVoucherPrint.tsxSupplierPaymentVoucherSubtitle voucher pelunasan vendor, disclaimer verifikasi faktur, tanda tangan otorisasi
BeritaAcaraDanaTalanganPrint.tsxBeritaAcaraDanaTalanganKlausul 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:

  1. Zero-LaTeX Policy: Bebas dari notasi matematika berbunga dollar (`` atau $). Penulisan moneter menggunakan format resmi Rupiah (Rp).
  2. Strict TypeScript Compliance: Seluruh interface pada lib/actions/document-templates.ts telah dilengkapi index signatures dan field penandatangan lengkap (signatory_left_name, signatory_right_name, signatory_right_role), lulus kompilasi npx tsc --noEmit dengan 0 error.
  3. 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.

Apakah panduan ini membantu Anda?