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.
| # | Wish | Area | Status | Commit | Remark |
|---|---|---|---|---|---|
| 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. |
iguaman_2in1); every test seeds & cleans its own PHPUNIT-tagged rows. Shipped: merged to main (213e35b) and pushed to production via the Hostinger webhook.actor_id + before/after diff), aria-label on every form field, chatbot PII minimisation + PDPA notice, and PHPStan level 5 + CI. Suite 351 → 377.