iGuaman Sistem Integrated Bantuan Guaman 22 Penambahbaikan → JBG · Legal Aid System · Laravel 13 / PHP 8.3 / MySQL
System Understanding · v2 · Generated from source

One workspace for legal aid, case records & panel lawyers.

iGuaman - Sistem Integrated Bantuan Guaman is the internal production system for JBG - Jabatan Bantuan Guaman Malaysia (the Legal Aid Department). "Integrated" = two legacy systems (Rekod Kes + Peguam Panel) fused into one Laravel app, plus a new public advisory + appointment layer and an AI chatbot.

PHP 8.3 Laravel 13 MySQL 8.4 Blade + vanilla JS Vite 8 · Tailwind v4 spatie/permission RBAC Plain custom auth (no Filament)
3User portals
12Roles
~55Controllers
~52DB tables
22v2 enhancements
What's new

v222 Penambahbaikan - shipped & tested

v2 closes the full SENARAI PENAMBAHBAIKAN SUBSISTEM: 22 improvement requests against the consolidated app, sequenced foundation-first around a new central claim ledger. 21 fully shipped, 1 (OCR) deferred to the Python microservice. Merged to main and pushed to production; suite 377/377 green. See the full 22-wish status →

🆕
The big additions vs v1: a central polymorphic claim ledger (W15) · a shared branch-transfer engine + transfer KPI (W7/W3/W8/W4) · Pembelaan Awam on the litigation spine + interim/muktamad certificate (W9/W14) · Mediation with its own number, standalone intake & mediator assignment (W17/W18/W19) · a prison_officer intake role + manual iPayment receipts (W1/W2) · a real event/queue integration layer (W21). The role count grew 8 → 12 and permissions to 55.
🛡
Post-v2 hardening pass: a full security / architecture / performance / accessibility audit was remediated on top of these 22 wishes - transactional lifecycle writes, per-branch cache tenancy, cursor-streamed exports, DB integrity backstops (FKs, unique slot tuple), soft-deletes + user deactivation, field-level audit forensics (actor_id + before/after diff), aria-label on every form field, chatbot PII minimisation + PDPA notice, and PHPStan level 5 + CI. Suite grew 351 → 377.

🧾 Central claim ledger

New lejar_tuntutan_bayaran - one polymorphic money trail for KN, Pembelaan, Mediasi & external-lawyer claims. Auto-creates on paid advisory selesai().

W15W5W2

Branch transfer + KPI

Move a case or KN between branches with zero history loss (everything keys off id_kes) and dual-branch visibility. New 12-month in/out KPI matrix.

W7W3W8W4

🛡 Pembelaan Awam

Public criminal-defence cases ride the existing 3-tier spine as tagged forms rows (no new table). Interim → muktamad legal-aid certificate with PDF.

W9W14

⚖️ Mediation, first-class

Its own PGT… file number, standalone or via-litigation intake, and mediator assignment that opens a MEDIASI ledger row.

W17W18W19

💬 KN intake & iPayment

Intake split by source (prison/clinic vs public) with a new prison_officer role; manual counter payments record a receipt into the KN + ledger.

W1W2

🔔 Real-time integration

Laravel events + a queued listener (a transfer notifies the destination branch). CawanganScope branch-isolation extended beyond forms to khidmat_nasihat.

W21W12W11
Orientation

01What iGuaman actually is

Three legacy/origin systems were merged into a single Laravel application with one login table and one permission layer. Understanding the three origins is the fastest way to understand everything else.

📂 1 · Sistem Rekod Kes

The litigation backbone. A citizen applies for legal aid → the Director approves/rejects → the case runs through mediation (pengantaraan) or court (mahkamah) → the file is closed. Centered on the 94-column forms table.

KesOYDMahkamahLaporan

⚖️ 2 · Sistem Peguam Panel

The panel-lawyer side. Private lawyers apply to join the panel, get vetted, and are assigned cases through a 3-tier approval spine (PPUU → Director → Director General). Tracks workload, withdrawals, and practice areas.

AgihanPermohonan PeguamTarik Diri

💬 3 · Khidmat Nasihat + Janji Temu

New layer (ported from iGuaman Janji Temu). Legal-advisory applications with eligibility screening, appointment booking on a slot calendar, attendance tracking, feedback, and a bridge to open a full case. Includes a public citizen portal + AI chatbot.

AdvisoryAppointmentsCitizen portal
🧭
The unifying idea: one users table with a user_type of staff, lawyer, or awam (citizen). On login each type lands in its own portal. One spatie/laravel-permission layer governs everything; admin is a super-admin that bypasses all checks via Gate::before.
Orientation

02Module map - what's inside

Every functional area, grouped. This is the table of contents of the actual app menu.

🗂 Rekod Kes

Case CRUD, OYD registry, closed files, attachments, per-case PDF printouts.

⚖️ Pengantaraan / Mahkamah

Mediation sections + hearing reschedule; civil/syariah court records & case reports.

⇄ Agihan Peguam

3-tier case-to-lawyer assignment, workload board, over-time auto-reassign.

👔 Panel Peguam

Lawyer applications, vetting, withdrawals, practice-area add/drop, activate/deactivate.

💬 Khidmat Nasihat

Advisory applications, eligibility screening, officer processing, KN→case bridge.

📆 Janji Temu / Slot

Slot generation per branch/room, session config, operational closures, calendar.

📊 Statistik & Laporan

SLA matrices, mediation stats, file-number error log, KPI, 8 KN reports, CSV/Excel/PDF.

🛠 Pentadbiran & Selenggara

Users, roles & access matrix, staff registry, audit log, all reference masters, e-Poster.

🌐 Portal Awam

Citizen IC-login, self-service KN application wizard, upload, reschedule/cancel.

🤖 AI@JBG Chatbot

Public widget → Laravel proxy → Python microservice. Throttled.

📝 Maklum Balas

Public post-appointment satisfaction feedback - no login, one per advisory.

🔑 Auth & Akaun

Plain login, password reset, forced password change for migrated accounts.

🧾 Lejar Tuntutan v2

Central claim ledger across KN, Pembelaan, Mediasi & external lawyers; officer lifecycle + receipt step.

⇄ Pemindahan Cawangan v2

Branch transfer engine for cases & KN + dual-branch worklists + 12-month transfer KPI.

🛡 Pembelaan Awam v2

Public criminal-defence cases on the litigation spine; interim → muktamad legal-aid certificate.

🔔 Events & Queue v2

Lifecycle events + queued listeners (transfer notifications); cross-module real-time integration.

How it's built

03Technical architecture

A conventional Laravel MVC stack with a thin-controller / service-layer split. Business rules live in app/Support/*Service.php; controllers handle transport + gating; Eloquent models map the legacy schema.

🧱 Stack

LanguagePHP 8.3
FrameworkLaravel 13
DatabaseMySQL 8.4 (iguaman_2in1)
ViewsBlade + vanilla JS
AssetsVite 8 + Tailwind v4
AuthCustom controller + Auth::attempt
RBACspatie/laravel-permission
PDF / Exceldompdf · maatwebsite/excel
ChatbotPython microservice + Laravel proxy

⚙️ Service layer (app/Support)

Domain logic extracted out of controllers:

AgihanService StatusAgihan KhidmatNasihatService KhidmatProsesService SlotAvailabilityService LaporanKnService LebihMasaService PengkhususanService PeguamLifecycleService TarikDiriService

Plus one policy (KhidmatNasihatPolicy) and a Gate::before super-admin bypass for admin.

The 6 layers a request passes through

Routesroutes/web.php
One web route file. Groups by portal & permission. URL patterns constrained with whereNumber / whereIn.
Middlewareauth · permission · role · throttle
auth, guest, permission:x, role:x|y, throttle:n,1, plus custom ForcePasswordChange & SecurityHeaders.
Controllers~50 · thin
Validate input, call a service, return a Blade view / PDF / CSV / JSON. Resource-style action methods.
Servicesapp/Support
State-machine transitions, slot availability math, report aggregation, redistribution rules. The brain of the app.
Models~38 Eloquent
Map the legacy + new schema. Relationships, status constants, casts. Mass-assignment whitelisted via #[Fillable].
DatabaseMySQL · ~48 tables
20 imported legacy tables + 15 new (batches 8–13) + 7 spatie + framework tables. bigint tables have real FKs; legacy int tables use indexes only.
How it's built

04Request lifecycle

A typical authenticated, permission-gated request - e.g. a PPUU picking a lawyer for a case.

BrowserPOST /agihan/12/ppuu-pilih Routeweb.php auth Middlewarepermission:agihan.ppuu ControllerAgihanSpineController ServiceAgihanService::ppuuPilih ModelForm / sejarah MySQL + Audit
Response: redirect back with status flash → Blade re-renders the assignment queue. Failed gate → 403. Guest → redirect to system.login (wired in bootstrap/app.php via redirectGuestsTo).
How it's built

05Security model

🔐 Auth & sessions

Plain Auth::attempt, bcrypt-hashed passwords, session-based. No SPA tokens. Three login surfaces (staff / lawyer share one, citizen separate).

🧱 RBAC + super-admin

Every staff route gated by a named permission. admin bypasses all via Gate::before. Role/permission matrix editable in-app (Peranan & Akses).

🔁 Forced password change

Migrated legacy accounts pinned to /password/change via ForcePasswordChange middleware until must_change_password clears.

⏱ Throttling

Login (10/min), public forms & uploads (6–20/min), chatbot (20/min), feedback (6/min). Honeypot + captcha on public application forms.

📎 Private file access

Attachments stored on a private disk, streamed only through auth + ownership checks. Citizens can only download their own KN documents.

🧾 Audit + headers

audit_trail records sensitive actions with the acting user (actor_id) and field-level before/after diffs; SecurityHeaders middleware sets hardening headers; CSRF on all state-changing forms.

Who uses it

06Users & roles

Three user types (which portal you land in) and twelve roles (what you can do) - the original eight plus three v2 additions (prison_officer + the two Pembelaan Awam approver tiers) and the awam citizen role. The Malay hierarchy mirrors a real government legal-aid department.

🛡 admin

Super-admin. Bypasses every permission via Gate::before. Only role granted role/permission management (urus.peranan).

👑 ketua_pengarah

Director General. Final approver - the top of every 3-tier chain (assignment, withdrawal, practice-area, panel application).

🎖 pengarah

Director. Approves/rejects case applications, endorses (sokong) lawyer picks, closes files. The middle tier.

🧭 koordinator

Coordinator. Branch-wide operations, maintenance masters, can also act as case distributor. Sees all branches.

🧑‍💼 pegawai

Officer. Case data entry, advisory (KN) processing. The everyday operational role.

📑 ppuu

Penolong Pegawai Undang-Undang. The case distributor - vets new cases and picks panel lawyers (ppuuPilih).

🗃 pembantu_tadbir

Admin assistant / clerk. Screening, data, KN viewing. Excluded from KN processing & approvals.

👔 peguam

Panel lawyer (external). Own portal only - accept/reject case offers, report, withdraw, manage practice areas.

🏛 prison_officer v2

Prison / clinic officer. Files Khidmat Nasihat on behalf of inmates. Reaches the staff area + KN intake only (no approvals, no payments).

🛡 pembelaan-awam tiers v2

pengarah_pembelaan_awam · ketua_pembelaan_awam. The forked criminal-track approver tier for panel registration (W10) - endorse / decide on the jenayah jalur.

👥
Citizens (awam) are a user type, not a staff role. They authenticate by IC number and get the single awam.portal permission - enough to run the self-service advisory wizard and nothing else. Lawyers (peguam) similarly hold only lawyer.area.
Who uses it

07Permission matrix

Exact role→permission grants from RolePermissionSeeder. admin is omitted from rows - it implicitly has all via Gate::before. Read down a column to see what a role can reach.

Permission pengarahkoord.pegawaippuup.tadbirketua_p.peguam
system.view·
kes.view / create / update·
kes.keputusan (approve/close)·····
pengantaraan / mahkamah / lampiran·
oyd.manage · cetakan · kpi · laporan·
statistik.view·
agihan.manage·
agihan.ppuu (pick lawyer)·····
agihan.pengarah (endorse)······
agihan.kp (final approve)······
khidmat.view / manage··
khidmat.proses (advisory processing)····
slot.view / slot.manageview··
peguam.semak (vet application)····
peguam.sokong (endorse)······
peguam.keputusan (decide)······
selenggara.* (maintenance masters)····
urus.pengguna · audit.view····
menu.selenggara·····
cawangan.view-all (cross-branch)·····
urus.peranan·······
lawyer.area / awam.portal······

urus.peranan = admin only · awam.portal = citizen type only. Branch isolation: most staff see only their cawangan; koordinator + ketua_pengarah see all (cawangan.view-all).

🆕
v2 added 6 permissions (matrix now 55 across 12 roles): tuntutan.view/manage/semak/lulus/bayar (claim ledger, W15) · agihan.luar (external-lawyer KN, W5) · kes.pindah (branch transfer, W7) · pengantaraan.agih (mediator assignment, W19) · pembelaan.view/manage + kes.perakuan (Pembelaan Awam + certificate, W9/W14). New roles: prison_officer (KN intake) and the pengarah/ketua_pembelaan_awam approver tiers. Branch isolation (CawanganScope) now also covers khidmat_nasihat (W21), closing the cross-branch read gap.
Who uses it

08The 3 portals

Each user type gets a different shell after login (chosen by User::homeRoute()). Menu items appear/disappear by permission (@can).

Ruang Pegawai
staff · sidebar shell · /system
  • Senarai Kes
  • Permohonan Baharu
  • OYD
  • Fail Tutup
  • Statistik
  • Statistik SLA
  • Kesilapan No. Fail
  • Statistik Pengantaraan
  • KPI
  • Laporan
  • Laporan KN
  • Permohonan Khidmat
  • Pemprosesan KN
  • Jadual Janji Temu
  • Penjanaan Slot
  • Penutupan Operasi
  • Permohonan Peguam
  • Agihan Kes
  • Beban Tugas
  • Tarik Diri
  • Kemaskini Bidang
  • Pengguna
  • Pegawai JBG
  • Log Audit
  • Peranan & Akses
  • Jenis Kes
  • Mahkamah
  • Cuti
  • Cawangan
  • Jenis Khidmat
  • Jawatan
  • e-Poster
👔
Ruang Peguam Panel
lawyer · topbar shell · /peguam
  • Dashboard
  • Kes Saya
  • Tawaran
  • Profil
  • Terima / Tolak tawaran
  • Hantar laporan kes
  • Tarik diri dari kes
  • Tambah / gugur bidang
  • Kemaskini profil
  • /peguam/daftar (apply to panel - no login)
🌐
Portal Khidmat Nasihat
citizen · /awam · IC login
  • Daftar (IC)
  • Log Masuk
  • Permohonan Saya (dashboard)
  • Saringan kelayakan
  • Permohonan baharu (wizard)
  • Tempah slot janji temu
  • Muat naik lampiran
  • Jadual semula / Batal
  • AI@JBG chatbot
  • Maklum balas selepas temu janji
How work flows

09Process flow · Case lifecycle

A legal-aid case (the forms row). Two status fields run in parallel: status (the high-level file state) and status_agihan (the assignment sub-state, see next section).

File status - forms.status

High-level case stages (the "peringkat"). Approval & closure are Director / Director-General actions.
Permohonancitizen applies / KN bridge Pengarah / KP Diterimaaccepted → assign mediation / court In progresspengantaraan · mahkamah Pengarah / KP Fail Tutupfile closed
Permohonan tolak Ditolakrejected
🧩
Inside the "in progress" stage, staff edit Pengantaraan (mediation sections, reschedule hearings) and Mahkamah (court records + laporan_kes child reports), attach files, and print per-case PDFs (ringkasan, penugasan, laporan).
How work flows

10Process flow · 3-tier lawyer assignment (Agihan)

The heart of the panel system. forms.status_agihan is a numeric state machine (0–17). A new case climbs PPUU → Pengarah → Ketua Pengarah before it's offered to a lawyer, who accepts or bounces it back.

Happy path - new case to accepted

Codes are canonical (StatusAgihan); each arrow names the acting role.
0BARU_PENGARAH Pengarahterima 8DIAGIH_PPUU PPUUpilih 10SOKONGAN_PENGARAH Pengarahsokong 13KELULUSAN_KP Ketua P.lulus 1DITAWARKAN Peguamterima 2DITERIMA · active
Rejection & re-pick loops
0Pengarah tolak9 DITOLAK_PENGARAH 10tidak sokong4 PPUU_AGIH_SEMULA
13KP tolak15 KELULUSAN_KP_SEMULA 1Peguam tolak4 PPUU_AGIH_SEMULA PPUU re-pick10

📥 Bucket: Baru

New & in-approval cases. Statuses 0, 8, 10, 13, 9, 15, 14.

📤 Bucket: Semasa

Offered / active / over-time. Statuses 1, 2, 7.

🔁 Bucket: Semula

Re-assignment loop. Statuses 4, 15.

Over-time auto-reassign (LebihMasaService): if a lawyer doesn't respond to an offer (status 1) within the SLA window, the case flips to 7 LEBIH_MASA and re-enters the re-pick loop. Deactivating a lawyer (nyahaktif) similarly redistributes their active cases.
How work flows

11Process flow · Khidmat Nasihat (advisory + appointment)

The advisory record (khidmat_nasihat.status_kn) and its appointment (temu_janji.status) move together. A completed advisory can spawn a full litigation case ("Buka Kes").

Advisory status - status_kn

Created by staff wizard or by a citizen in the portal; screened for eligibility first.
Saringan3-modal eligibility gate DRAFunsubmitted hantar BAHARUpending officer officer agih PKN DALAM_PROSESassigned attended + selesai SELESAI
anycancelBATAL SELESAIofficer · Buka Kesforms (new case)

Appointment status - temu_janji.status

Officer confirms the booked slot, marks attendance, then closes.
MENUNGGUslot booked officer terima DISAHKANconfirmed kehadiran HADIRattended selesai SELESAI
MENUNGGUtolakBATAL DISAHKANno-showTIDAK_HADIR
🎟
Slot engine: SlotAvailabilityService generates bookable slots per cawangan + bilik + date, honoring weekends, public holidays (ref_cuti / cuti negeri) and operational closures (penutupan_operasi). The /slot/tarikh & /slot/masa JSON endpoints are shared by staff and citizens.
How work flows

12Process flow · Citizen journey (Awam)

The self-service path a member of the public takes - no staff involvement until officer processing.

Daftar / Loginby IC (nokp) Saringaneligibility 3-modal lulus Wizardfill application Tempah slotpick date + time HantarBAHARU + MENUNGGU Dashboardupload · reschedule · cancel
After the appointment: officer marks attendance & completes → citizen opens a public Maklum Balas link (no login, one per advisory) to rate satisfaction. Income > threshold during screening routes to Laluan Sumbangan (contribution path).
How work flows

13Process flow · Lawyer-side & staff review queues

What a panel lawyer initiates, and the 3-tier staff queues that approve it. Both withdrawal and practice-area changes climb PPUU/Pengarah → Pengarah → Ketua Pengarah.

Tarik Diri - lawyer withdraws from an active case

2 DITERIMAactive case Peguamtarik diri 12DALAM_PROSES_TD PPUUsemak 16SEMAKAN_PENGARAH Pengarah 17SEMAKAN_KP KP lulus 6 TARIK_DIRI_LULUS→ re-pool
17KP tolak2 DITERIMAlawyer keeps case

Kemaskini Bidang - add / drop a practice area

butiran_peguam_panel_6.checkbox_value_status. Drop is blocked if the lawyer still has an active case in that category.
4 ADD_MOHONor 3 DROP_MOHON Pengarah sokong 9 ADD_DISOKONG/ 7 DROP_DISOKONG KP lulus 2 AKTIFor row deleted (drop)
anytolakrevert / delete
How work flows

14Process flow · Panel lawyer application

A prospective lawyer applies publicly; staff vet in three tiers. On approval the application becomes a live peguam_panel record. butiran_peguam_panel_2.permohonan_status.

Public apply/peguam/daftar · honeypot 0 Baharunew PPUU semak vetted Pengarah sokong endorsed KP keputusan 1 Lulus→ peguam_panel + login
vettingKP tolak2 Tidak Lulus anyapplicant3 Tarik Diri
The data

15Data model

~52 tables total: 20 imported legacy tables + ~15 new (batches 8–13) + the v2 ledger & transfer tables + 7 spatie permission tables + Laravel framework tables. Grouped by domain below.

📂 Core case records

forms is the 94-column case spine. History & child tables hang off it via id_kes.

formslaporan_kesbutiran_oyd sejarah_sidangsejarah_pegawaisejarah_ppuu mahkamah_sivilmahkamah_syariah

👔 Lawyer panel

IC-keyed (kp_peguam / kpBaru). One master + 6 detail tables (qual, firm, bank, specialization).

peguam_panelbutiran_peguam_panel…_2 → _6 sejarah_peguam_panel

💬 Khidmat Nasihat

Advisory master + 3-level category tree + feedback.

khidmat_nasihatref_kategori_knref_kategori_kes_kn ref_subkategori_knmaklum_balas

📆 Appointments / calendar

Slot engine + branches/rooms + closures.

temu_janjislot_temu_janjicawangan bilikpenutupan_operasiref_cuti

📚 Reference / master

Flat lookup tables. ref_kes (litigation taxonomy) is separate from the KN category tree.

ref_negeriref_kesref_jawatan ref_lokasi_berguampegawai_jbg

🔧 System / auth

Unified login, RBAC, audit, uploads, announcements.

usersrolespermissions audit_trailuploaded_filesposters

🆕 v2 - ledger & transfer

The central claim ledger (polymorphic across sources) and the shared branch-transfer journal. KN also gained applicant_source, waiver/resit links, mediation & certificate columns.

lejar_tuntutan_bayaranpemindahan_cawangan

Key relationships

FromToVia
formslaporan_kes · sejarah_* id_kes
khidmat_nasihatusers (applicant + assigned officer)id_pengguna · id_pegawai_kn
khidmat_nasihatcawangan · ref_kategori_kn · ref_subkategori_knFK nullOnDelete
khidmat_nasihattemu_janji · forms (Buka Kes bridge)id_temu_janji · id_forms
khidmat_nasihatmaklum_balas (1:1, unique)khidmat_nasihat_id
temu_janjislot_temu_janji · cawanganFK
slot_temu_janjicawangan · bilikFK cascade/null
bilik · penutupan_operasicawangancawangan_id
butiran_peguam_panel_3…6butiran_peguam_panel_2kpBaru (IC index, no FK)
uploaded_filesforms · khidmat_nasihat · usersid_kes · id_khidmat · user_doc_id
usersroles ↔ permissions (spatie)pivot tables
🔑
users extra columns: user_type (staff/lawyer/awam), role, cawangan, nokp (IC), id_peguam_panel (links a lawyer login to their panel record), is_active, must_change_password, last_login_at. FK strategy: bigint (new) tables get real FKs; legacy int tables (ref_negeri, forms.id) use plain indexes only.
The data

16The KN category tree

A 3-level taxonomy used only for advisory (Khidmat Nasihat) - deliberately separate from the litigation ref_kes.

ref_kategori_knL1 · Jenis Kategori kategori_id ref_kategori_kes_knL2 · Jenis Kes kategori_kes_id ref_subkategori_knL3 · Sub
L1 values: SIVIL · SYARIAH · PENDAMPING JENAYAH · PENDAMPING GUAMAN. Each level cascade-soft-deletes its children (recoverable, per-child audit). khidmat_nasihat references L1 (id_kategori) + L3 (id_subkategori), both nullOnDelete so reference data outlives advisory records.
Reference

17Glossary - Malay → English

The UI and code are in Malay. This decodes the recurring terms.

JBG
Jabatan Bantuan Guaman - the Legal Aid Department
Guaman
Litigation / legal (suit)
Kes
Case (the forms record)
Permohonan
Application / request
Peguam Panel
Panel lawyer (private lawyer on the roster)
Agihan
Assignment / distribution (of cases to lawyers)
OYD
Orang Yang Dibantu - the assisted person / client
Pengantaraan
Mediation
Mahkamah
Court (sivil = civil, syariah = syariah)
Sidang
Court hearing / session
Khidmat Nasihat
Legal advisory service (KN)
Janji Temu / Temu Janji
Appointment
Saringan
Screening (eligibility check)
Slot / Penjanaan Slot
Appointment slot / slot generation
Cawangan
Branch (office)
Bilik
Room
Penutupan Operasi
Operational closure (block dates)
Cuti
Holiday (umum = public, negeri = state)
Pengarah
Director
Ketua Pengarah
Director General (KP)
Koordinator
Coordinator
Pegawai
Officer
PPUU
Penolong Pegawai Undang-Undang - assistant legal officer (case distributor)
Pembantu Tadbir
Administrative assistant (clerk)
Semak / Semakan
Review / check (vetting step)
Sokong / Sokongan
Endorse / recommendation
Keputusan
Decision
Lulus / Tolak
Approve / Reject
Tawaran
Offer (case offered to a lawyer)
Tarik Diri
Withdraw / withdrawal
Bidang Pengkhususan
Practice area / specialization
Lebih Masa
Over-time (offer not answered in SLA)
Fail Tutup
Closed file
Beban Tugas
Workload
Laporan
Report
Maklum Balas
Feedback
Selenggara
Maintenance (reference data admin)
Pengguna
User
Peranan & Akses
Role & access (permission matrix)
Awam
Public / citizen
No. KP / NoKP
IC number (national identity card)
Buka Kes
Open a case (KN → litigation bridge)
Laluan Sumbangan
Contribution path (when income exceeds the aid threshold)