Chapter 6: System UI/UX
Bab ini memformalkan antarmuka sistem BMP: Module, Workspace, Role, Permission, User, Settings, dan Administration. Bab ini menjelaskan bagaimana konsep-konsep tersebut terlihat, dikelompokkan, dinavigasikan, dan digunakan oleh administrator maupun user bisnis.
Status: 🟡 Draft / Menunggu Finalisasi
6.0 System UI/UX Principles
System UI BMP mengikuti prinsip utama:
System UI menjelaskan sistem kepada manusia tanpa memaksa manusia memahami struktur internal sistem.
UI harus membedakan dengan jelas:
Keempatnya tidak boleh dicampur menjadi satu launcher atau satu daftar konfigurasi.
Blueprint secara eksplisit menetapkan bahwa Settings Hub menjadi satu permukaan untuk policy, sementara master data tetap berada di modul pemiliknya.
6.1 Dua Dunia UI: Business dan System
BMP memiliki dua pengalaman utama.
Business Home
Untuk user operasional:
Home
├── Search
├── My Attention
├── KPI
└── Operational Queue
Landing menjawab:
"Apa yang perlu saya kerjakan?"
bukan:
"Modul apa yang tersedia?"
Ini sudah menjadi prinsip utama Landing Page BMP.
System Console
Untuk administrator/system user:
System Console
├── Modules
├── Users
├── Roles
├── Permissions
├── Workspaces
├── Settings
└── System & Utility
Akun IT/Sysadmin menggunakan System Console sebagai home, bukan Business Home.
6.2 Strict UI Ownership
Setiap item UI memiliki satu owner.
Contoh:
| UI | Owner |
|---|---|
| Sales Order | Sales |
| Delivery Note | Inventory |
| Purchase Order | Purchase |
| Account | Accounting |
| Employee | HR |
| Warehouse | Inventory |
| Role | Administration |
| User | Administration |
| Module | System & Utility |
| Company | Organization |
| Policy setting | Settings Hub |
Sebuah domain tidak boleh memasukkan entitas domain lain ke sidebar hanya karena entitas tersebut berhubungan dengannya.
Aturan ini disebut Strict UI Ownership.
6.3 Module Model
Module adalah unit kemampuan bisnis yang dapat diaktifkan atau dinonaktifkan pada sebuah instalasi BMP.
Module bukan:
Hubungannya:
Installation
│
├── Modules
│ ├── Sales
│ ├── Purchase
│ ├── Inventory
│ └── ...
│
└── Users
Module enablement bersifat installation-level.
Blueprint menetapkan module sebagai sesuatu yang dapat di-toggle melalui tabel modules.
6.4 Module Catalog
Module bisnis utama BMP:
| Module | Area |
|---|---|
| Accounting | Finance & accounting |
| Sales | Penjualan |
| Purchase | Pembelian |
| Manufacturing | Produksi |
| Inventory | Persediaan |
| HR | Human resources |
| Asset | Asset management |
| Quality | Quality control |
| Project | Project / R&D |
Daftar tersebut merupakan struktur yang tampil pada rail utama BMP.
System modules:
| Module | Area |
|---|---|
| System & Utility | System-level utilities |
| Administration | User, role, permission |
| Organization | Company & organization |
Ketiganya berada di zona settings dan role-gated.
6.5 Module Enablement UI
Administrator melihat:
Settings Hub
→ Modules
Setiap module ditampilkan sebagai row:
┌────────────────────────────────────────────┐
│ Sales [ ON ] │
│ Customer, Sales Order, Delivery, Invoice │
├────────────────────────────────────────────┤
│ Manufacturing [ OFF] │
│ BOM, Work Order, Production │
└────────────────────────────────────────────┘
Toggle hanya mengontrol availability module pada instalasi.
Toggle tidak berarti:
semua user otomatis boleh menggunakan module.
Urutannya:
Module enabled
↓
Role has permission
↓
User has role
↓
Workspace exposes UI
6.6 Hidden Module
Module tertentu boleh tersedia secara teknis tetapi disembunyikan dari user bisnis.
Contoh yang sudah ditetapkan:
Project / R&D = hidden by default.
UI harus membedakan:
Disabled
dengan:
Enabled but hidden
Karena keduanya memiliki arti berbeda.
6.7 Workspace
Workspace adalah permukaan kerja user untuk sebuah area bisnis.
Workspace bukan database resource.
Workspace menentukan bagaimana user memasuki sebuah domain:
Workspace
├── title
├── navigation
├── shortcuts
├── saved views
├── primary actions
└── relevant KPIs
Workspace merupakan lapisan presentation/navigation, bukan lapisan security.
Blueprint secara eksplisit menetapkan bahwa konfigurasi workspace/flyout hanya bersifat presentasi.
6.8 Workspace vs Module
Perbedaannya:
| Module | Workspace | |
|---|---|---|
| Scope | Installation | User/UI |
| Fungsi | Enable capability | Menyediakan working surface |
| Contoh | Sales | Sales Workspace |
| Security | Bukan security | Bukan security |
| Persistence | modules | workspaces + user customization |
Satu module dapat mempunyai beberapa workspace.
Contoh:
Sales
├── Sales Workspace
├── Order Workspace
└── Customer Workspace
Workspace tidak boleh digunakan untuk memberikan permission.
6.9 Workspace Layout
Workspace mengikuti pola:
Page Head
↓
Workspace Header
↓
Primary Action
↓
KPI / Attention
↓
Shortcuts / Views
↓
Operational List
Workspace harus segera berguna ketika dibuka.
Tidak boleh menjadi halaman kosong yang hanya menampilkan nama module.
Empty state harus memberikan aksi berikutnya.
6.10 Primary Action
Setiap workspace memiliki satu primary action.
Contoh:
Sales
[+ Create Sales Order]
Primary slot digunakan untuk aksi dominan halaman, biasanya Create.
Primary slot tidak boleh dipakai untuk navigasi.
6.11 Saved Views
Saved View adalah konfigurasi tampilan yang disimpan user.
Contoh:
Sales Orders
[ All Orders ▼ ]
My Views
├── Assigned to Me
├── Pending Approval
└── Recent Activity
Tiga istilah tersebut sudah ditetapkan sebagai vocabulary UI BMP.
Saved View dapat menyimpan:
Saved View tidak mengubah permission.
6.12 Permission
Permission menjawab:
"Apa yang boleh dilakukan user?"
Bukan:
"Apa yang terlihat di sidebar?"
Model konseptual:
Role
↓
Permission
↓
Resource
↓
Action
Contoh:
Finance
└── Payment Entry
├── Read
├── Create
├── Update
├── Submit
└── Export
Security enforcement dilakukan oleh Ash.Policy.Authorizer; Chapter 6 hanya menentukan representasi UI-nya.
6.13 Permission Matrix UI
Administrator melihat permission dalam bentuk matrix:
| Resource | Read | Create | Update | Submit | Delete | Export |
|---|---|---|---|---|---|---|
| Sales Order | ✓ | ✓ | ✓ | ✓ | — | ✓ |
| Delivery Note | ✓ | ✓ | ✓ | ✓ | — | ✓ |
| Sales Invoice | ✓ | ✓ | — | ✓ | — | ✓ |
UI tidak boleh menampilkan permission sebagai daftar panjang checkbox tanpa grouping.
Grouping:
Sales
├── Sales Order
├── Delivery Note
└── Sales Invoice
Purchase
├── Purchase Order
└── Purchase Receipt
6.14 Export Permission
Export dianggap sebagai aksi tersendiri.
Jika user tidak memiliki permission Export:
Export button = hidden
dan endpoint export juga harus diblokir.
UI tidak boleh hanya menyembunyikan tombol sambil membiarkan endpoint terbuka.
Aturan ini sudah ditetapkan pada Cloak/security convention.
6.15 Role
Role adalah template fungsi kerja.
Role bukan user.
Role bukan permission tunggal.
Role menggabungkan sekumpulan permission yang relevan untuk fungsi tertentu.
Model:
Role
└── Permissions
↓
User
Contoh role:
Owner
Finance
Sales
Warehouse
Production
HR
QA
IT Support
Blueprint telah menambahkan master roles dan junction user_roles.
6.16 Multiple Roles
Seorang user dapat mempunyai lebih dari satu role.
Contoh:
User: Finance Supervisor
Roles:
├── Finance
└── Approver
UI assignment menggunakan multi-select role.
Jangan membuat role gabungan seperti:
Finance + Warehouse + Approver
untuk setiap kombinasi user.
Role harus tetap modular.
6.17 Permission vs Role vs Personalization
Tiga layer harus tetap terpisah:
Permission
↓
Role Default
↓
Personal Customization
Maknanya:
Permission
Apa yang boleh dilakukan.
Role Default
Konfigurasi default berdasarkan fungsi.
Personal Customization
Bagaimana user memilih bekerja.
Pemisahan tiga layer ini sudah ditetapkan pada Interaction Structure.
Personalization tidak boleh menaikkan permission.
6.18 User Administration
Halaman User:
Users
├── User identity
├── Account status
├── Roles
├── Organization
└── Preferences
Contoh:
┌───────────────────────────────────────────┐
│ Ahmad │
│ │
│ Roles │
│ [Finance] [Approver] │
│ │
│ Status Active │
└───────────────────────────────────────────┘
Role assignment dilakukan di sini.
Permission detail tetap dikelola pada Role/Permission UI.
6.19 Account ≠ Persona
BMP menggunakan model account, bukan persona gabungan.
Satu orang dapat mempunyai lebih dari satu akun terpisah.
Karena itu UI tidak boleh mencoba membuat satu user identity yang sekaligus memuat:
Business Employee
IT Administrator
System Administrator
sebagai satu persona yang tidak jelas.
6.20 Business Home vs System Console
Perbedaan visual harus jelas.
Business user
BMP
├── Search
├── Accounting
├── Sales
├── Inventory
└── ...
IT/System Administrator
BMP
├── System & Utility
├── Administration
└── Organization
Akun IT/Sysadmin mendapatkan System Console sebagai home.
6.21 Settings Hub
Settings Hub adalah satu permukaan konfigurasi policy BMP.
Tidak boleh ada:
Sales Settings
Purchase Settings
Inventory Settings
Accounting Settings
System Settings
yang masing-masing menciptakan sistem settings sendiri tanpa struktur bersama.
Sebaliknya:
Settings Hub
├── Sales
├── Purchase
├── Inventory
├── Accounting
├── Manufacturing
├── HR
└── System
Settings Hub menangani policy/configuration, bukan semua master data.
Master data tetap berada pada module pemiliknya.
6.22 Settings Classification
Setiap setting harus diklasifikasikan.
| Jenis | Contoh | UI |
|---|---|---|
| System Policy | numbering behavior | Settings Hub |
| Business Policy | approval rule | Settings Hub |
| UI Preference | density | User Preferences |
| Master Data | Warehouse | Inventory |
| Organization Data | Company | Organization |
Jangan memindahkan master data ke Settings hanya karena secara visual "terlihat seperti konfigurasi".
6.23 Settings UI
Pola:
Settings Hub
Search settings...
General
├── Company
├── Currency
└── Fiscal Year
Sales
├── Sales Policy
├── Pricing
└── Returns
Inventory
├── Stock Policy
└── Warehouse Policy
Accounting
├── Posting Policy
└── Tax Policy
Settings harus dikelompokkan berdasarkan policy owner.
6.24 Settings Value Model
Policy sederhana menggunakan scalar setting.
Contoh:
setting:
key = sales.allow_negative_stock
value = false
Settings tidak digunakan untuk menyimpan master data kompleks.
Blueprint menetapkan bahwa policy adalah scalar pada tabel settings, sedangkan master data tetap berada di module pemiliknya.
6.25 Organization UI
Organization menangani entitas organisasi, terutama:
Organization
├── Company
├── Departments
└── Organizational structure
Company bukan Settings.
Company bukan User.
Company bukan Role.
Department juga merupakan master tersendiri.
Blueprint v1.7 menetapkan master departments dan relasi employees.department_id.
6.26 Department UI
Department digunakan untuk struktur organisasi.
Contoh:
Organization
└── Departments
├── Production
├── Supply Chain
├── Sales & Marketing
├── Finance & Accounting
├── HRGA
├── Technical Support
└── IT
Department bukan Role.
Contoh:
Employee:
Department = Finance
Role = Finance
tetapi bisa juga:
Employee:
Department = Finance
Role = Approver
6.27 Navigation Visibility
Visibility UI mengikuti tiga kondisi:
Module Enabled
User Authorized
Workspace Visible
↓
Navigation Item Visible
Jika module disabled:
Tidak tampil.
Jika module enabled tetapi user tidak memiliki permission:
Tidak tampil.
Jika user memiliki permission tetapi workspace dikonfigurasi hidden:
Tidak tampil di navigation.
Namun hidden navigation tidak sama dengan security denial.
Workspace hanya presentation.
6.28 Flyout Menu
Flyout merupakan navigational surface.
Menu tree bersifat statis dan difilter berdasarkan role/user permission.
Blueprint menetapkan static menu tree + role filter sebagai implementasi flyout.
Flyout tidak boleh menjadi tempat business logic.
6.29 Breadcrumb
Breadcrumb harus menggunakan pohon navigasi yang sama dengan sidebar.
Contoh:
Home
→ Sales
→ Sales Orders
→ SO-2026-00125
Tidak boleh ada dua hierarchy:
Sidebar hierarchy ≠ Breadcrumb hierarchy
Aturan ini sudah dikunci dalam Interaction Structure.
6.30 Search as System Navigation
Universal Search (Ctrl+K) merupakan navigasi global.
Search mencakup:
Action
Document
Report
Setting
dan menggunakan satu endpoint search.
Contoh:
Ctrl+K
Search...
Actions
Create Sales Order
Documents
SO-2026-00125
Reports
Sales by Item
Settings
Negative Stock Policy
Search result tidak boleh mencampurkan semua jenis hasil tanpa grouping.
6.31 Role-Aware Search
Search hanya menampilkan sesuatu yang memang relevan bagi user.
Jika user tidak memiliki akses:
Setting X
maka setting tersebut tidak boleh muncul sebagai hasil search.
Begitu pula:
Search adalah bagian dari navigation UX, bukan bypass permission.
6.32 Attention Model
Business Home menggunakan satu feed:
My Attention
yang menggabungkan:
KPI dipersempit berdasarkan role user.
Contoh:
Finance
My Attention
├── 3 Payments Pending
├── 2 Journal Entries to Review
└── 1 Reconciliation Discrepancy
Warehouse
My Attention
├── 12 Delivery Notes
├── 4 Stock Reservations
└── 2 Receiving Tasks
6.33 Real-Time System Feedback
System UI dapat menerima update real-time melalui event architecture.
Contoh:
Approval created
↓
Phoenix PubSub
↓
My Attention
↓
Badge/KPI refresh
Channel yang sudah ditetapkan:
user:<id>:notifications
company:<id>:document_updates
company:<id>:kpi_refresh
6.34 Permission-Aware UI
UI harus memberikan feedback yang masuk akal.
Ada tiga keadaan:
Visible + allowed
[Submit]
Visible but unavailable
Digunakan apabila user perlu mengetahui bahwa action ada tetapi kondisi bisnis belum terpenuhi.
[Submit] disabled
Reason: Missing required approval
Not authorized
Action tidak ditampilkan.
Submit
tidak muncul sama sekali.
Jangan menampilkan error authorization setelah user menekan tombol apabila keberadaan action tersebut sendiri sudah diketahui tidak diizinkan.
6.35 Security UI Boundary
Security memiliki tiga lapisan:
1. Cloak
↓
2. Ash Policy
↓
3. Workspace/UI
Cloak = perlindungan data at-rest.
Policy = authorization.
Workspace = presentation.
Blueprint secara eksplisit menetapkan ketiga lapisan tersebut.
Workspace tidak boleh dianggap sebagai security boundary.
6.36 Sensitive Field Presentation
Jika user tidak berhak melihat field sensitif:
Field tidak dirender.
Bukan:
Field dirender lalu di-mask menggunakan CSS.
Bukan juga:
Field dikirim ke browser lalu disembunyikan JavaScript.
API serialization juga harus membuang field tersebut bila role bukan pembaca.
6.37 User Preferences
Preferences adalah konfigurasi personal.
Contoh:
Preferences
├── Density
├── Sidebar state
├── Table columns
├── Saved views
└── Other personal UI settings
Preferences tidak mengubah:
Persistent UI state disimpan pada user_settings.
6.38 Density
BMP mendukung personal density.
Contoh:
Comfortable
Compact
Namun density tidak mengubah fundamental interaction target.
Contoh:
Desktop table:
44px / 36px row
merupakan pilihan yang sudah ditetapkan untuk Chrome Fix, sementara touch target tetap mengikuti aturan accessibility.
6.39 Responsive Context
BMP memiliki tiga konteks penggunaan:
| Context | User | Karakter |
|---|---|---|
| Desktop dense | Accounting | Dense, keyboard-first |
| Tablet touch-first | Warehouse / Cashier | Large touch target |
| Kiosk/display | Production / Warehouse | Read-only, auto-refresh |
System UI tidak boleh mendesain ketiganya sebagai tiga aplikasi berbeda.
6.40 Overlay Usage
System UI mengikuti lima tingkat overlay yang sudah ditetapkan:
| Level | UI | Penggunaan |
|---|---|---|
| 1 | Inline / Tooltip | Edit kecil |
| 2 | Anchored panel | Navigation / selection |
| 3 | Popover / Toast | Peripheral information |
| 4 | Drawer | Detail tanpa meninggalkan list |
| 5 | Modal | Destructive / blocking / critical |
System administration sebaiknya menggunakan level terendah yang masih mempertahankan konteks.
6.41 System UI Empty State
Empty state tidak boleh sekadar:
No data.
Harus menjawab:
Contoh:
No roles have been created.
Create your first role
[ + Create Role ]
Ini mengikuti aturan umum BMP bahwa setiap empty state harus mempunyai CTA ke aksi berikutnya.
6.42 System UI Navigation Map
Struktur keseluruhan:
BMP
│
├── Business Home
│ │
│ ├── Accounting
│ ├── Sales
│ ├── Purchase
│ ├── Manufacturing
│ ├── Inventory
│ ├── HR
│ ├── Asset
│ ├── Quality
│ └── Project
│
└── System Console
│
├── System & Utility
├── Administration
│ ├── Users
│ ├── Roles
│ └── Permissions
│
└── Organization
├── Companies
└── Departments
Settings Hub
├── System Policy
├── Business Policy
└── Module Policy
Struktur ini sengaja memisahkan business navigation dari system administration.
6.43 System UI Relationship Model
Secara konseptual:
Installation
│
┌───────┴───────┐
│ │
Modules Organization
│ │
│ ┌────┴────┐
│ Company Department
│
Workspaces
│
│
User ─────── Roles
│
│
Permissions
│
↓
Resources
│
↓
Actions
Dan:
User
└── Personal Settings
├── Density
├── Saved Views
├── Columns
└── Rail State
Personalization tetap berada di luar authorization model.
6.44 What System UI Must Not Do
System UI tidak boleh:
6.45 System UI Consistency Rules
Semua halaman System UI mengikuti pola yang sama:
Page Head
↓
Breadcrumb
↓
Page Title
↓
Description / Context
↓
Primary Action
↓
Content
Contoh:
Administration / Roles
Roles
Define reusable access templates for users.
[+ Create Role]
┌────────────────────────────────────────────┐
│ Role Users Permissions │
├────────────────────────────────────────────┤
│ Finance 4 18 │
│ Sales 6 14 │
│ Warehouse 8 11 │
└────────────────────────────────────────────┘
6.46 System UI Definition of Done
Sebuah halaman System UI dianggap selesai apabila:
6.47 Final System UI Principle
System UI BMP harus membuat user memahami:
Apa yang tersedia → apa yang dapat saya lakukan → mengapa saya dapat/tidak dapat melakukannya → di mana saya dapat mengaturnya.
Struktur mental akhirnya:
Module
= capability
Workspace
= working surface
Role
= functional template
Permission
= authorization
User
= account identity
Settings
= policy
Preferences
= personal choice
Tidak boleh ada dua konsep yang memiliki fungsi UI yang sama.
Module ≠ Workspace
Role ≠ Permission
Permission ≠ Visibility
Settings ≠ Master Data
Workspace ≠ Security
Preferences ≠ Policy
Inilah batas konseptual utama System UI BMP.
Bagian Atas Formulir
Bagian Bawah Formulir