iGuaman Sistem Integrated Bantuan Guaman ← System overview Penambahbaikan Subsistem · 22 wishes
Penambahbaikan Subsistem · Status Report

22 enhancements, shipped & tested.

The full SENARAI PENAMBAHBAIKAN - every improvement request against the consolidated iGuaman app, sequenced foundation-first around a central claim ledger, with the live status, the commit it landed in, and a one-line remark.

22Wishes in scope
21Fully shipped
1Spike / deferred
377Tests green
5Commits this round
Filter
✔ DONE built, tested, on trunk ◐ SPIKE decision made, dead seam removed, full build deferred KN Khidmat Nasihat RK Rekod Kes PP Peguam Panel PA Pembelaan Awam PG Pengantaraan × Cross-cutting
#WishAreaStatusCommitRemark
Foundations - DB integrity & the central ledger
W22 DB structure changes for integrity / consistency × ✔ DONE 322499a FK type fixes, soft-link FKs, mediation-officer FK, laporan_kes.id_kes normalized; G-H6 locked with a schema-snapshot test.
W15 Panel lawyer generates a claim ledger easily & accurately × ✔ DONE e9ea8d7 Foundational. Central polymorphic lejar_tuntutan_bayaran (KN / Pembelaan / Mediasi / Peguam-Luar). Unblocks W5, W9, W19. Auto-creates a KN claim on paid selesai().
Panel-lawyer operations & sync
W11 Automated case distribution + workload shortlist PP ✔ DONE 365f589 PeguamShortlistService ranks lawyers by open-case load; rewired into the assignment board. Manual pick still allowed (shortlist is advisory).
W12 Case sync Rekod Kes ↔ Peguam Panel PP ✔ DONE 4689c45 Reverse case→KN sync via KesKnSyncService (explicit service calls, not model events) - forms state flows back to khidmat_nasihat.
W10 Panel lawyer registration + approval (sivil / syariah / jenayah) PP ✔ DONE 8385793 Registration jalur split + a forked criminal-track approver tier (pengarah/ketua_pembelaan_awam).
W16 'Selesai' by lawyer → RK final confirm + close file PP ✔ DONE 14fa06f Status codes 18/19: lawyer marks Selesai → JBG confirm queue → file closed + KN synced + closure PDF. Reject bounces back to active.
W5 Assign completed KN to an external panel lawyer + ledger KN ✔ DONE 4c9d764 Grab pool (7-day) or direct assign via the W11 shortlist; writes a PEGUAM_LUAR ledger row. Expiry cron grab:tamat-luput.
Branch transfer + transfer KPI
W7 Case file transfer between branches (no data / history loss) RK ✔ DONE f507a18 Shared pemindahan_cawangan engine. All history (sejarah_*, lampiran, ledger) keys off id_kes which never moves - only the branch label does. Dual-branch visibility (D2).
W3 KN transfer between branches KN ✔ DONE f507a18 Same engine, KN side (id-based cawangan_id / cawangan_asal_id). Initiate → destination accepts / rejects (reverses).
W8 KPI for transferred cases, both branches, by month RK ✔ DONE 8512c27 StatistikPemindahanController - 12-month in/out matrix per branch (OUT by origin, IN by destination). Year picker.
W4 KPI for transferred KN, both branches KN ✔ DONE 8512c27 Same controller, KN tab. Reads pemindahan_cawangan only; rejected transfers excluded.
SKN intake + payment
W1 KN intake separated by source (prison / clinic vs public) + fee waive/pay + attachment KN ✔ DONE e2487f9 Explicit applicant_source (PUBLIC/PRISON/CLINIC/COURT), indexed for KPI. New prison_officer role. Optional fee-waiver upload when is_percuma.
W2 iPayment payment recorded in KN (counter + upload resit) KN ✔ DONE 6740484 Manual counter payment → flips KN status_bayaran + stamps ledger DIBAYAR + resit upload. kaedah_bayaran future-proofed for a live gateway (TUNAI today, IPAYMENT later).
Mediation (Pengantaraan)
W17 Mediation own file number (not reuse case no.) PG ✔ DONE e1bea17 Independent PGT… series via NoFailGenerator::generatePengantaraan; no_pengantaraan unique column.
W18 Mediation application direct OR via litigation PG ✔ DONE e1bea17 Standalone intake → a forms row tagged sumber_pengantaraan = TERUS | LITIGASI.
W19 Mediation assigned to a mediator + ledger PG ✔ DONE e1bea17 id_pegawai_pengantara + assign service + an idempotent MEDIASI ledger row. Perm pengantaraan.agih.
Pembelaan Awam (public criminal defence)
W9 Pembelaan Awam: register → assign → manage → close + ledger PA ✔ DONE b06b13f No new table - pembelaan cases are tagged forms rows on the existing 3-tier spine. PBA… number series; ledger row on close.
W14 Criminal interim (segera) legal-aid certificate PA ✔ DONE ddc759d Certificate state interim → muktamad on forms cols; PRK… series + dompdf certificate. Perms pembelaan.*, kes.perakuan.
Repository, reporting, integration, OCR
W6 Supporting-document upload / store / reference (at scale) RK ✔ DONE 09f59f9 25 MB cap, dedicated private repositori disk (legacy-fallback reads), 7-year retention report/purge command.
W20 Reports fast + multi-format download × ✔ DONE fb00509 Bulk-export job queue (ExportLaporanJob), restored the cancellation letter, fuller pengantaraan report columns.
W21 Real-time integration between modules × ✔ DONE b5ebda0 Laravel events + a queued listener (a branch transfer notifies the destination branch). CawanganScope extended beyond forms to khidmat_nasihat - closes the cross-branch read gap.
W13 Extract received docs → prefill online form (OCR) × ◐ SPIKE 447e19b Decision doc kept; OCR to route through the existing Python microservice (Tesseract vs Textract not yet chosen). The flag-off OcrPrefillService seam (ad62f1f) was removed as dead code in the hardening pass (ARCH-05). Only non-shipped item.
🧪
Verification: the full PHPUnit suite is 377/377 green (1,882 assertions) against the live MySQL dev DB (iguaman_2in1); every test seeds & cleans its own PHPUNIT-tagged rows. Shipped: merged to main (213e35b) and pushed to production via the Hostinger webhook.
🛡
Post-v2 hardening pass (audit remediation): on top of these 22 wishes a full security / architecture / performance / a11y audit was remediated - 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 351 → 377.