Chapter 6 — System UI/UX: Antarmuka sebagai Penjaga CLoAK

6.0 Register Keputusan

Table

Item Status Alasan / catatan
Handcrafted Navigation (Peta Menu BMP) Adopsi Penuh Navigasi bukan hasil konfigurasi runtime; dipetakan per role dengan CLoAK
Workspace User-Editable Tolak User tidak boleh mengubah sidebar; menghindari navigasi kabur & kebocoran menu
Landing Page Role-Based Adopsi Penuh Owner, Finance, Manufacturing, Sales, IT, Operator masing-masing punya pintu masuk berbeda
Form Layout BPM (Build-Process-Monitor) Adopsi Pola layout seragam: header → baris transaksi → footer aksi; mengurangi beban kognitif
List View dengan Saved Views Adopsi Filter & tata letak kolom bisa disimpan per user/role, tapi tidak mengubah schema
Global Search Adopsi Pencarian lintas doctype dengan hasil tersaring oleh permission user
Dashboard & Number Card Adaptasi Widget statis per role; tidak boleh menampilkan data sensitif cross-role
Mobile Responsive Adopsi UMKM mengandalkan HP di lapangan (gudang, produksi); tap target & input harus lapang
Dark Mode Tolak Fokus pada konsistensi visual & penghematan baterai tidak sebanding dengan biaya maintenance tema ganda
Print & PDF Output Adopsi Print Format terkontrol per role; dokumen sensitif tidak boleh diedit IT
Notifikasi Real-time Adopsi Toast, bell icon, dan notification log; prioritas: error > peringatan > info

6.1 Filosofi Dasar: UI sebagai Perpanjangan CLoAK

Di BMP, antarmuka bukan sekadar "tampilan yang bagus". UI adalah mekanisme penegak keamanan terdepan — apa yang tidak dilihat user, tidak bisa dieksploitasi. Prinsip payung:

  1. Visibility by Permission: Setiap pixel di layar harus lulus pemeriksaan permission. Jika IT tidak punya permlevel 1, field rate, amount, dan valuation_rate tidak hanya disabled — mereka tidak dirender sama sekali di DOM.
  2. Navigasi sebagai Tembok: Sidebar menu tidak dibuat dinamis berdasarkan apa yang "user-friendly". Sidebar dibuat berdasarkan Role Matrix CLoAK — IT tidak akan pernah melihat menu "Manufacturing" atau "Accounting" di sidebarnya, meski mereka tahu URL-nya ada.
  3. Konsistensi Mengurangi Kesalahan: Satu pola layout, satu pola aksi, satu pola notifikasi di seluruh modul. Ketika user pindah dari Stock ke Accounting, mereka tidak perlu belajar ulang.
  4. UMKM-First, Not Enterprise-First: Tidak ada wizard berjalan 7 langkah, tidak ada konfigurasi layar yang memerlukan manual 20 halaman. Setiap layar harus bisa dipahami oleh user yang tidak pernah mengikuti training formal.

6.2 Navigasi & Information Architecture

6.2.1 Peta Menu BMP (Cloak)

Navigasi BMP mengikuti pola "Cloak" — menu yang terlihat tergantung siapa yang mengenakan jubah (role). Peta menu tidak dihasilkan dari Module Def runtime; ia adalah struktur statis yang didefinisikan di kode dan di-deploy bersama aplikasi.

Struktur Level Navigasi:

Table

Level Elemen Perilaku
L0 App Bar Logo BMP + Global Search + Notification Bell + User Avatar. Selalu terlihat.
L1 Sidebar (Primary) Modul utama: Dashboard, Manufacturing, Stock, Buying, Selling, Accounting, Quality, HR, Settings. Tersaring per role.
L2 Sidebar (Secondary) Sub-menu per modul: mis. Manufacturing → BOM, Work Order, Production Plan. Tersaring per role + permission doctype.
L3 Workspace / Landing Halaman pembuka modul: shortcut, number card, chart. Tersaring per role.
L4 Daftar (List View) Tabel record dengan filter, sort, kolom. Tersaring oleh User Permission + Role Permission.
L5 Form Input/Edit record. Field tersaring oleh permlevel.

Aturan CLoAK di Navigasi:

Edge case:

  1. User dengan multi-role (mis. Finance + Manufacturing Manager) = union menu, tapi field tetap tersaring permlevel. User melihat kedua menu, tapi field sensitif di masing-masing tetap terlindungi.
  2. IT mengetahui URL langsung ke /app/bom = sistem menolak dengan pesan "Anda tidak memiliki akses ke dokumen ini" setelah pengecekan permission. Navigasi bukan satu-satunya garis pertahanan; permission doctype adalah garis terakhir.
  3. Menu yang di-hide tapi menjadi target workflow (mis. notifikasi approval) = notifikasi muncul di Bell Icon, tapi klik membuka form read-only atau approval dialog terbatas, bukan navigasi penuh ke modul.

6.3 Landing Page & Dashboard

6.3.1 Landing Page Role-Based

Setiap role memiliki satu halaman awal yang menjadi pintu masuk setelah login. Halaman ini bukan "home generik" — ia adalah cockpit tugas untuk role tersebut.

Table

Role Landing Page Widget Utama
Owner Executive Dashboard P&L summary, Cash position, Outstanding AR/AP, BOM summary, Low stock alert
Finance Finance Cockpit Outstanding invoices, Bank reconciliation pending, Tax withholding summary, Budget variance
Manufacturing Mgr Production Dashboard Open Work Orders, BOM list, Quality inspection pending, Material availability
Stock Mgr Warehouse Dashboard Stock levels, Pending Stock Entry, Delivery Note to ship, Inventory aging
Sales Admin Sales Cockpit Open SO, DN to deliver, Overdue invoices, Customer PII-free activity
IT System Health Error Log count, Background Job queue, Scheduler status, User login activity
Operator Produksi My Tasks Assigned Work Orders, Stock Entry draft, Batch to process

Perilaku kunci:

6.3.2 Dashboard Chart & Number Card

Dashboard chart adalah visualisasi read-only dari report yang sudah ada. Mereka tidak memiliki query sendiri; mereka adalah instance visual dari report yang tersaring.

Aturan BMP:

6.4 Interaction Patterns & Aturan Interaksi

6.4.1 Pola Aksi Seragam (Universal Action Patterns)

Setiap form dan list di BMP mengikuti pola aksi yang identik. User tidak perlu menebak "di modul ini tombol save-nya di mana?"

Table

Konteks Aksi Utama Posisi Warna Ikon
Form baru Simpan Draft Footer kanan Primary Save
Form draft Submit Footer kanan Success Check
Form submitted Cancel Footer kiri Danger X
Form cancelled Amend Footer kanan Warning Edit
List view Buat Baru Header kanan Primary Plus
List view (bulk) Bulk Action Toolbar atas Secondary

Aturan transisi status:

6.4.2 Konfirmasi & Peringatan

BMP menggunakan tingkat intervensi yang berbeda untuk aksi berbeda:

Table

Tingkat Pola Contoh
Silent Aksi langsung, tanpa dialog Simpan draft, Ubah filter, Pindah tab
Toast Konfirmasi singkat setelah aksi Submit berhasil, Cancel berhasil, Export dimulai
Dialog Konfirmasi eksplisit sebelum aksi Cancel dokumen, Hapus draft, Bulk update
Blocker Aksi ditolak dengan penjelasan Submit tanpa balance debit=kredit, Budget Stop, Permission denied

Prinsip: Error dan peringatan harus actionable. Pesan "Permission denied" ditolak; yang diterima adalah "Anda tidak memiliki akses ke BOM rate. Hubungi Owner untuk permintaan akses."

6.4.3 Real-time & Kolaborasi

6.5 Form Design & Data Entry

6.5.1 Layout Form: Pola BPM (Build-Process-Monitor)

Setiap form transaksi di BMP mengikuti pola BPM Layout yang sama, terinspirasi dari kebutuhan manufaktur tapi diuniversalkan:

plain

┌─────────────────────────────────────────┐

│ HEADER (Metadata Dokumen) │

│ No. Dokumen | Tanggal | Party | Status │

├─────────────────────────────────────────┤

│ BARIS TRANSAKSI (Child Table) │

│ Item | Qty | Rate* | Amount* | Warehouse │

├─────────────────────────────────────────┤

│ FOOTER (Total & Referensi) │

│ Total | Tax | Grand Total | Terms │

├─────────────────────────────────────────┤

│ TIMELINE & COMMENT (Kolaborasi) │

│ Komentar | Versi | Audit Log │

├─────────────────────────────────────────┤

│ ACTION BAR (Simpan | Submit | Cancel) │

└─────────────────────────────────────────┘

Catatan: Field bertanda * (rate, amount) di-set ke permlevel 1 — tersembunyi dari IT, Operator, dan Sales Admin.

6.5.2 Field-Level Security di UI

CLoAK diimplementasikan di UI pada tiga level:

  1. Hidden: Field tidak dirender sama sekali di DOM. Digunakan untuk field sensitif yang tidak relevan untuk role (mis. valuation_rate untuk Operator Produksi).
  2. Read-Only: Field dirender tapi tidak bisa diubah. Digunakan untuk field yang boleh dilihat tapi tidak boleh diedit role tersebut (mis. item_code di Work Order untuk Operator).
  3. Editable: Field bisa diubah. Default untuk field dalam kewenangan role.

Perilaku khusus Customize Form:

6.5.3 Input Patterns

Table

Pola Kapan Dipakai Contoh
Link Field + Search Referensi ke master data Customer, Supplier, Item, Warehouse
Dropdown (Select) Pilihan terbatas, statis Status, UOM, Priority
Date Picker Tanggal transaksi Posting Date, Due Date
Number (Formatted) Kuantitas, harga Qty (3 desimal), Rate (2 desimal)
Currency Toggle Multi-currency (terbatas) IDR default; USD hanya referensi di Purchase
Child Table Grid Baris transaksi Invoice Items, BOM Items, Stock Entry Detail
File Attachment Dokumen pendukung PO scan, Faktur Pajak, COA supplier

Aturan validasi client-side:

6.6 List Views, Reports & Search

6.6.1 List View

List view adalah gerbang utama ke data. BMP menggunakan list view dengan prinsip:

6.6.2 Global Search

Global Search (ikon kaca pembesar di App Bar) mencari lintas doctype dengan batasan:

6.6.3 Report & Query

Report di BMP mengikuti pola dari Framework Chapter 1 (Report Builder, Query, Script):

Aturan CLoAK di Report:

6.7 Print & Output Experience

6.7.1 Print Format

Print Format adalah layout PDF yang dirender dari data dokumen. BMP menggunakan dua mesin render:

  1. Jinja Template: Layout tradisional dengan HTML/CSS, fleksibel untuk dokumen formal (Invoice, Faktur Pajak, Surat Jalan).
  2. Print Format Builder: Editor drag-drop untuk layout sederhana, menghasilkan JSON yang dirender oleh mesin yang sama.

Aturan CLoAK:

6.7.2 Email & PDF Output

6.8 Mobile & Responsive Design

6.8.1 Mobile-First untuk Operator Lapangan

UMKM parfum tidak selalu memiliki workstation di setiap sudut gudang. Operator produksi dan staf gudang sering mengakses BMP dari HP.

Prinsip mobile:

6.8.2 Responsive Breakpoints

Table

Breakpoint Layout Catatan
< 640px Single column, sidebar jadi drawer Fokus pada input & aksi utama
640–1024px Sidebar tetap, konten adaptable Tablet di meja kerja
> 1024px Sidebar expanded, multi-pane Desktop utama

6.9 Accessibility & Localization

6.9.1 Aksesibilitas

BMP menargetkan WCAG 2.1 Level AA dengan prioritas:

6.9.2 Lokalisasi (Bahasa & Format)

6.10 CLoAK di Level UI: Ringkasan Implementasi

Table

Layer Mekanisme Ditegakkan Oleh
Navigasi Sidebar menu di-filter per role Role Permission + Workspace Restriction
Landing Dashboard widget di-filter per role Query tersaring di backend
Form Field hidden/read-only/editable via permlevel Customize Form + Role Permission Manager
List Kolom & filter tersaring List view query + User Permission
Search Hasil tersaring lintas doctype Role Permission + User Permission
Report Akses doctype dibatasi per role Role Permission Manager
Print Edit template dibatasi per doctype Role Permission pada Print Format
Export Akses export dibatasi + tercatat di Access Log Role Permission + Access Log hook
Notifikasi Isi notifikasi tidak mengandung data sensitif cross-role Notification template + permlevel filter

6.11 Edge Case & Mitigasi

  1. Celah: User mengubah role sendiri di browser (client-side manipulation) untuk melihat menu tersembunyi. Mitigasi: Sidebar dirender dari server-side permission check; manipulasi DOM hanya mengubah tampilan, bukan akses data. API call tetap ditolak.
  2. Celah: User membuat bookmark ke URL form yang tidak boleh mereka akses. Mitigasi: Setiap API getdoc dan get_list menjalankan permission check server-side; URL tidak pernah menjadi bypass.
  3. Celah: Print Format yang sudah tidak dipakai masih mengandung field sensitif lama. Mitigasi: Audit Print Format berkala; sistem menolak render field yang permlevel-nya lebih tinggi dari role user.
  4. Celah: Mobile view menampilkan field sensitif karena layout berbeda dari desktop. Mitigasi: Permlevel check berjalan sebelum render, tidak peduli breakpoint atau device.
  5. Celah: Notifikasi email mengandung snapshot data sensitif karena template lupa di-update. Mitigasi: Review template email saat perubahan permlevel; unit test mengirim email dummy dan memverifikasi tidak ada field sensitif di body.

6.12 Kesimpulan

Chapter 6 menegaskan bahwa di BMP, UI bukan lapisan kosmetik — UI adalah penjaga CLoAK yang pertama dan terakhir. Setiap keputusan desain, dari warna tombol hingga struktur sidebar, harus lolos pertanyaan: "Apakah ini membuat data sensitif lebih sulit dibocorkan oleh orang yang tidak berwenang?"

Dengan navigasi handcrafted, layout seragam, field-level security via permlevel, dan audit trail di setiap output (print, email, export), BMP mencapai keseimbangan antara kegunaan (usability) dan keamanan (security) — dua hal yang sering dianggap saling bertentangan, tapi di BMP menjadi satu kesatuan arsitektur.

Catatan untuk reviewer: Chapter ini sengaja ditulis agresif dalam pembatasan (default deny) karena pengalaman menunjukkan bahwa "memberi akses dulu, membatasi kemudian" selalu meninggalkan celah. Lebih mudah membuka sedikit akses atas permintaan Owner daripada menutup akses yang sudah bocor.

Apakah ada bagian lain yang perlu diselaraskan terminologinya, atau Chapter 6 ini sudah siap untuk direview?