PROMPT PENUH MYANSURAN VERSI TERKINI

Anda ialah pembangun Laravel berpengalaman. Saya mahu anda menyambung,
menyelenggara dan menambah baik sistem web lengkap bernama MyAnsuran untuk
demo KIK. Sistem ini telah dibangunkan menggunakan Laravel, Blade, Bootstrap,
jQuery dan MySQL.

Jangan hasilkan cadangan umum sahaja. Jangan hasilkan skeleton kosong.
Teruskan pembangunan berdasarkan sistem sedia ada. Jika terdapat maklumat
tidak lengkap, buat andaian munasabah, teruskan pembangunan dan catat andaian
penting secara ringkas.

Sistem perlu kekal moden, kemas, profesional dan sesuai untuk portal kerajaan
atau pihak berkuasa tempatan. Semua role perlu boleh login, dashboard boleh
dipaparkan, menu utama boleh dibuka dan flow utama boleh didemo.

==================================================
NAMA SISTEM
==================================================

MyAnsuran

==================================================
STACK SISTEM
==================================================

1. Laravel
2. Blade
3. Bootstrap
4. jQuery
5. MySQL
6. Laravel Authentication
7. Role-Based Access Control
8. Maatwebsite Excel untuk import dan export Excel

==================================================
ROLE SISTEM
==================================================

1. Admin
2. Staff
3. Pengguna Awam

==================================================
OBJEKTIF SISTEM
==================================================

1. Pengguna awam boleh membuat permohonan bayaran cukai harta secara ansuran.
2. Pengguna awam hanya memasukkan No_Akaun_Tunggakan untuk semakan.
3. Sistem memaparkan maklumat akaun cukai harta jika akaun wujud.
4. Sistem memaparkan status terkini akaun berdasarkan permohonan ansuran.
5. Pengguna boleh memilih tempoh ansuran antara 2 hingga 6 bulan.
6. Staff menyemak permohonan dan memasukkan jadual ansuran secara manual.
7. Staff memasukkan amaun ansuran, ulasan semakan dan tindakan status.
8. Staff boleh merekod bayaran manual dengan nombor resit.
9. Staff boleh kemaskini bayaran secara pukal melalui Excel atau CSV.
10. Admin boleh mengurus pengguna, data harta, import cukai harta, laporan dan audit trail.
11. Sistem menyokong import Excel berbeza untuk Admin dan Staff.
12. Sistem menyediakan flow demo lengkap untuk KIK.

==================================================
PERATURAN UTAMA SISTEM ANSURAN
==================================================

Sistem MyAnsuran TIDAK menjana jadual ansuran secara automatik.

Sistem hanya:
1. Menyemak No_Akaun_Tunggakan.
2. Memaparkan maklumat akaun tunggakan jika wujud.
3. Membenarkan pengguna memilih tempoh ansuran 2 hingga 6 bulan.
4. Membenarkan pengguna mengisi borang permohonan ansuran.
5. Membenarkan staff menyemak permohonan.
6. Membenarkan staff memasukkan amaun ansuran secara manual.
7. Menyimpan jadual ansuran berdasarkan input staff.
8. Memaparkan jadual ansuran kepada pengguna selepas staff sahkan.

Jangan bina fungsi auto-generate jadual ansuran.
Jangan paksa sistem membahagikan tunggakan secara automatik.

==================================================
STATUS AKAUN / PERMOHONAN
==================================================

Gunakan status berikut:

1. diproses
   - Permohonan baharu.
   - Staff perlu membuat semakan dan proses kelulusan.
   - Badge oren.

2. aktif
   - Permohonan diterima.
   - Akaun berada dalam tempoh bayaran ansuran.
   - Jadual ansuran manual telah disahkan.
   - Badge hijau.

3. selesai
   - Semua bayaran ansuran telah lengkap.
   - Akaun tidak lagi dianggap akaun aktif.
   - Badge gelap atau putih mengikut UI.

4. gagal
   - Akaun disahkan gagal oleh staff.
   - Badge merah.

5. batal
   - Akaun dibatalkan oleh staff.
   - Badge merah.

Peraturan penting:
1. Staff hanya boleh menyemak akaun berstatus diproses dan aktif.
2. Akaun batal, gagal dan selesai tidak dipaparkan di dashboard semakan staff.
3. Akaun batal, gagal dan selesai masih wujud dalam sejarah, database, laporan dan import Excel.
4. Pengguna tidak boleh meneruskan permohonan baharu jika No_Akaun_Tunggakan sudah mempunyai akaun berstatus diproses, aktif atau selesai.
5. Pengguna boleh melihat status terkini akaun semasa semakan No_Akaun_Tunggakan.
6. Jika akaun tiada dalam database, pengguna tidak boleh meneruskan permohonan.

==================================================
MODUL PENGGUNA AWAM
==================================================

Halaman utama pengguna awam:
1. Dashboard pengguna.
2. Permohonan Saya.
3. Permohonan Baharu.
4. Profil Pengguna.
5. Notifikasi.
6. Logout.

Flow permohonan baharu adalah page-to-page / step wizard:

Langkah 1:
Semakan No_Akaun_Tunggakan

1. Pengguna hanya boleh memasukkan No_Akaun_Tunggakan.
2. Sistem mencari akaun dalam table property_accounts.
3. Jika akaun tidak wujud, paparkan mesej:
   Nombor akaun tunggakan tidak dijumpai. Sila semak semula nombor akaun anda atau hubungi pihak MBIP.
4. Jika akaun wujud, sistem paparkan:
   - No_Akaun
   - No_Akaun_Tunggakan
   - Status Akaun Terkini
   - No Permohonan terkini jika ada
   - Pemilik
   - Tunggakan
   - Taman
   - Rupacara
   - Kadar
5. Jika status akaun ialah diproses, aktif atau selesai, butang Seterusnya mesti disabled.
6. Jika status akaun ialah gagal atau batal, pengguna boleh meneruskan permohonan baharu.
7. Jika belum ada permohonan ansuran, pengguna boleh meneruskan permohonan.

Langkah 2:
Borang Permohonan Bayaran Cukai Harta Secara Ansuran

Field penting:
1. No_Akaun - autofill dan readonly.
2. Status Akaun Terkini - autofill dan readonly.
3. Pemilik - autofill dan readonly.
4. Rupacara - autofill dan readonly.
5. No_Lot - autofill dan readonly.
6. No_DHM - pengguna boleh isi atau kemaskini.
7. No_Syarikat - pengguna boleh isi atau kemaskini.
8. Alamat_Harta - autofill dan readonly.
9. Alamat_Harta disusun berdasarkan No_Bgnn, Nama_Jalan daripada import Excel.
10. Kategori Harta:
    - Kediaman
    - Industri
    - Perdagangan
11. Tempoh Ansuran:
    - 2 bulan
    - 3 bulan
    - 4 bulan
    - 5 bulan
    - 6 bulan
12. Identification Type:
    - Army/Police ID
    - MyKad
    - National ID
13. Identification Number.
14. Alamat_Surat_Menyurat.
15. Mobile_No dengan kod negara.
16. Emel.
17. Alamat_Tempat_Bekerja.
18. Pekerjaan.
19. Pendapatan_Sebulan.

Langkah 3:
Teks Perakuan Pemohon

Paparkan teks perakuan:

Saya yang bertandatangan dibawah bersetuju dan berjanji akan menjelaskan
bayaran cukai harta mengikut jadual ansuran yang telah diluluskan sebagaimana
di bawah. Sekiranya saya gagal maka pihak Majlis Bandaraya Iskandar Puteri
berhak membatalkan permohonan ini dan mengambil TINDAKAN SITAAN /
UNDANG-UNDANG ke atas SAYA / PREMIS tanpa apa-apa notis lagi.

Field perakuan:
1. Nama Perakuan.
2. Jenis ID Perakuan.
3. No ID Perakuan.
4. Tarikh Perakuan.
5. Upload / capture salinan IC.
6. Tick perakuan.

Permohonan tidak boleh dihantar jika tick perakuan tidak ditanda.

Server-side juga wajib menyemak semula:
1. Akaun mesti wujud.
2. Akaun tidak boleh ada permohonan terkini berstatus diproses, aktif atau selesai.
3. Jika status blocked, sistem redirect balik dengan mesej ralat.

==================================================
MODUL STAFF
==================================================

Menu sidebar Staff:
1. Dashboard Staff.
2. Permohonan.
3. Kemaskini Bayaran Pukal.
4. Import Excel.

Dashboard Staff:
1. Jumlah permohonan baharu.
2. Jumlah permohonan diproses.
3. Jumlah permohonan diterima.
4. Jumlah permohonan ditolak.
5. Tugasan belum selesai.
6. Senarai permohonan terkini.

Staff hanya melihat permohonan diproses dan aktif untuk semakan.

==================================================
DETAIL PERMOHONAN STAFF
==================================================

Staff perlu melihat:

Maklumat permohonan:
1. No Permohonan.
2. No_Akaun.
3. No_Akaun_Tunggakan.
4. Kategori Harta.
5. Tempoh Ansuran.
6. No_Lot.
7. No_DHM.
8. No_Syarikat.
9. Jumlah Tunggakan.
10. Cukai Harta.
11. Cukai Harta / 2.
12. Jumlah Ansuran.
13. Jumlah Jadual Semasa.

Maklumat pemohon:
1. Nama Pemohon.
2. Identification Type.
3. Identification Number.
4. No Telefon / Contact Number.
5. Emel.
6. Alamat Surat Menyurat.
7. Alamat Harta.
8. Alamat Tempat Bekerja.
9. Pekerjaan.
10. Pendapatan Sebulan.

Maklumat akaun dan sejarah:
1. Pemilik.
2. Bandar / Taman.
3. Rupacara.
4. Kadar.
5. Cukai Harta.
6. Sejarah tindakan.

==================================================
LOGIK JUMLAH ANSURAN STAFF
==================================================

Pada kad Input Manual Ansuran Oleh Staff:

1. Staff boleh edit Jumlah Tunggakan.
2. Staff boleh edit Cukai Harta / 2.
3. Sistem autofill Cukai Harta / 2 berdasarkan Cukai Harta.
4. Staff masih boleh ubah nilai Cukai Harta / 2 jika perlu.
5. Formula paparan:
   Jumlah Ansuran = Jumlah Tunggakan + (Cukai Harta / 2)
6. Jika Cukai Harta / 2 berubah, Jumlah Tunggakan diselaraskan mengikut logic UI sedia ada.
7. Staff mengisi jadual ansuran dalam bentuk table.
8. Jadual ansuran mesti berdasarkan tempoh ansuran yang dipilih pengguna.
9. Sistem membandingkan jumlah jadual dengan Jumlah Ansuran.
10. Jika jumlah tidak sama, sistem beri amaran.
11. Staff boleh simpan draf.
12. Staff hanya boleh sahkan aktif jika jumlah lengkap dan sah.

==================================================
TINDAKAN STAFF
==================================================

Pilihan tindakan staff:
1. Akaun Diproses.
2. Akaun Aktif (permohonan diterima).
3. Akaun Batal.
4. Akaun Gagal.
5. Akaun Selesai.
6. Tiada Tindakan.

Peraturan:
1. Akaun Aktif mengesahkan permohonan dan jadual ansuran.
2. Akaun Batal menukar status kepada batal.
3. Akaun Gagal menukar status kepada gagal.
4. Akaun Selesai hanya dibenarkan selepas semua ansuran dibayar.
5. Tiada Tindakan tidak mengubah status tetapi menyimpan ulasan/sejarah.

==================================================
REKOD BAYARAN MANUAL STAFF
==================================================

Pada detail permohonan staff:

1. Staff boleh merekod bayaran manual kerana sistem tiada API payment.
2. Staff pilih ansuran yang belum bayar atau lewat.
3. Staff wajib isi No. Resit.
4. Staff boleh isi No. Transaksi.
5. Staff isi Amaun Bayaran.
6. Staff isi Tarikh Bayaran.
7. Staff isi Catatan.
8. Amaun bayaran mesti sama dengan amaun jadual ansuran.
9. Sistem cipta rekod dalam payments.
10. Sistem kemaskini installment_schedules kepada dibayar.
11. Sistem rekod application history dan audit trail.

==================================================
MODUL KEMASKINI BAYARAN PUKAL STAFF
==================================================

Route:
GET /staff/bulk-payments
POST /staff/bulk-payments
GET /staff/bulk-payments/template

Tujuan:
Staff boleh kemaskini bayaran banyak akaun melalui Excel/CSV tanpa buka
satu-satu detail permohonan.

Halaman ini mesti ada:
1. Kad Akaun Aktif.
2. Kad Ansuran Dalam Excel.
3. Kad Jumlah Belum Direkod.
4. Butang Download Template Excel.
5. Form upload Excel/CSV.
6. Ringkasan proses terakhir.
7. Jadual ansuran akaun aktif.

Template Excel perlu mengandungi:
1. Installment_Schedule_ID.
2. No_Akaun.
3. No_Akaun_Tunggakan.
4. No_Permohonan.
5. Nama_Pemohon.
6. Ansuran_Ke.
7. Tarikh_Jadual.
8. Amaun_Jadual.
9. Status_Bayaran.
10. No_Resit.
11. No_Transaksi.
12. Tarikh_Bayaran.
13. Amaun_Bayaran.
14. Catatan.

Peraturan penting:
1. Template memaparkan semua ansuran untuk akaun berstatus aktif.
2. Ansuran belum_bayar dan lewat dipaparkan untuk direkod sebagai bayaran baharu.
3. Ansuran dibayar turut dipaparkan dengan transaksi bayaran sedia ada.
4. Jika ansuran sudah dibayar, Excel mesti memaparkan No_Resit, No_Transaksi,
   Tarikh_Bayaran, Amaun_Bayaran dan Catatan sedia ada.
5. Upload Excel boleh mencipta bayaran baharu untuk ansuran belum_bayar/lewat.
6. Upload Excel boleh mengemaskini transaksi bayaran sedia ada untuk ansuran dibayar.
7. Sistem tidak boleh cipta duplicate payment untuk ansuran yang sudah dibayar.
8. No_Transaksi yang telah digunakan oleh bayaran lain mesti disekat.
9. Setiap import perlu direkod dalam audit trail.

==================================================
MODUL ADMIN
==================================================

Menu Admin:
1. Dashboard.
2. Pengurusan Pengguna.
3. Pengurusan Peranan.
4. Permohonan.
5. Akaun Ansuran.
6. Bayaran.
7. Tugasan.
8. Notifikasi & Emel.
9. Data Harta.
10. Import Excel.
11. Tetapan Sistem.
12. Laporan.
13. Audit Trail.

Admin boleh:
1. Mengurus pengguna.
2. Mengurus peranan.
3. Melihat semua permohonan.
4. Melihat akaun ansuran.
5. Melihat semua bayaran.
6. Melihat data harta.
7. Import data cukai harta.
8. Jana laporan.
9. Semak audit trail.

==================================================
MODUL IMPORT EXCEL
==================================================

Terdapat dua jenis import:

1. Import Staff
   - Untuk data tunggakan.
   - Route: /staff/import-excel.
   - Staff import data tunggakan berdasarkan No_Akaun_Tunggakan.
   - Import staff tidak boleh overwrite cukai_harta jika fail tiada kolum Cukai_Harta.

2. Import Admin
   - Untuk data cukai harta.
   - Route: /admin/import-excel.
   - Hanya Admin boleh import data cukai harta.
   - Admin import data seperti No_Akaun, No_Bgnn, Nama_Jalan, Kadar, Cukai_Harta.
   - Import admin tidak boleh overwrite No_Akaun_Tunggakan jika fail cukai harta tiada kolum tersebut.
   - Import admin tidak boleh overwrite pemilik dengan Tidak dinyatakan jika data pemilik sedia ada wujud.

Kolum import tunggakan Staff:
1. No_Akaun.
2. Pemilik.
3. Warganegara.
4. Pelanggan.
5. Status.
6. Bandar.
7. Taman.
8. Rupacara.
9. Kadar.
10. Aktif.
11. Tunggakan.
12. No_Akaun_Tunggakan.

Kolum import cukai harta Admin:
1. No_Akaun.
2. No_Lot.
3. No_DHM.
4. No_Bgnn.
5. Nama_Jalan.
6. Rupacara.
7. Kadar.
8. Cukai_Harta.

Logik import:
1. Jika No_Akaun atau No_Akaun_Tunggakan wujud, update rekod.
2. Jika tidak wujud, tambah rekod baharu.
3. Untuk import staff, akaun yang tiada dalam import semasa ditanda Tiada Dalam Import Terkini.
4. Jangan padam rekod lama secara automatik.
5. Simpan import batch.
6. Papar statistik import.
7. Rekod audit trail.

==================================================
MODUL BAYARAN DUMMY JOMPAY PENGGUNA
==================================================

Pengguna boleh bayar secara dummy JomPAY.

Maklumat tetap:
Biller Code: 37317

REF 1:
No_Akaun

REF 2:
Emel atau Mobile_No

Flow:
1. Pengguna pilih ansuran belum bayar.
2. Sistem papar flow JomPAY dummy.
3. Pengguna masukkan amaun menggunakan pad nombor jQuery.
4. Pengguna tambah ke bakul.
5. Pengguna klik Bayar.
6. Sistem set status success untuk demo.
7. Sistem cipta rekod payment.
8. Sistem kemaskini jadual ansuran kepada dibayar.
9. Sistem papar resit dummy.

==================================================
PRINT BORANG PERMOHONAN
==================================================

Borang print perlu mengandungi:
1. Tajuk rasmi:
   BORANG PERMOHONAN BAYARAN CUKAI HARTA SECARA ANSURAN
2. Maklumat akaun.
3. Maklumat pemohon.
4. Maklumat permohonan.
5. Jadual ansuran manual.
6. Perakuan pemohon.
7. Ulasan staff / pegawai penyemak.
8. Ruangan tandatangan.

Ulasan staff wajib dipaparkan dalam print.
Jika tiada ulasan, paparkan:
Tiada ulasan direkodkan.

==================================================
DATABASE UTAMA
==================================================

Table utama:
1. users.
2. roles.
3. role_permissions.
4. user_profiles.
5. departments atau units.
6. property_accounts.
7. import_batches.
8. installment_applications.
9. installment_schedules.
10. payments.
11. notifications.
12. email_logs.
13. tasks.
14. application_histories.
15. system_settings.
16. audit_trails.

Relationship penting:
1. User belongsTo Role.
2. User hasOne UserProfile.
3. User belongsTo Department.
4. PropertyAccount hasMany InstallmentApplications.
5. InstallmentApplication belongsTo User.
6. InstallmentApplication belongsTo PropertyAccount.
7. InstallmentApplication hasMany InstallmentSchedules.
8. InstallmentApplication hasMany Payments.
9. InstallmentApplication hasMany ApplicationHistories.
10. InstallmentApplication hasMany Tasks.
11. Payment belongsTo InstallmentApplication.
12. Payment belongsTo InstallmentSchedule.
13. Notification belongsTo User.
14. Task belongsTo User sebagai assigned staff.
15. AuditTrail belongsTo User.
16. ImportBatch belongsTo User sebagai uploaded_by.

==================================================
SERVICE CLASS PENTING
==================================================

1. InstallmentManualScheduleService
   - Simpan jadual ansuran manual.
   - Validasi jumlah ansuran.
   - Confirm jadual ansuran.

2. WorkflowStatusService
   - Mengurus status diproses, aktif, batal, gagal, selesai.
   - Rekod application history.

3. NotificationService
   - Mencipta notifikasi sistem.
   - Mencipta dummy email log.

4. PropertyAccountImportService
   - Mengurus import staff dan admin.
   - Menambah dan update property_accounts.

5. BulkPaymentImportService
   - Menjana template Excel bayaran pukal.
   - Memproses upload bayaran pukal.
   - Mencipta bayaran baharu.
   - Mengemaskini transaksi bayaran sedia ada untuk ansuran dibayar.

6. AuditTrailService
   - Merekod tindakan penting.

7. ReportService
   - Menjana ringkasan laporan admin.

8. ApplicationInformationExcelService
   - Menyimpan maklumat permohonan pengguna ke Excel dalaman.

==================================================
DATA DEMO DAN SEEDER
==================================================

Seeder menyediakan:
1. Role Admin, Staff dan Pengguna Awam.
2. User demo:
   - admin@myansuran.test
   - staff@myansuran.test
   - user@myansuran.test
3. Password demo:
   - password
4. Profil pengguna awam demo.
5. System settings demo.

Nota penting:
1. Akaun property dummy telah dibersihkan daripada database local/demo sebenar.
2. Fixture akaun dummy hanya dikekalkan untuk environment testing supaya automated test mempunyai data kawalan.
3. Jangan padam data import sebenar semasa menjalankan pembaikan.
4. Elakkan migrate:fresh pada database kerja sebenar jika data import pengguna perlu dikekalkan.

==================================================
UI / UX
==================================================

1. Gunakan Bootstrap layout kemas.
2. Gaya portal kerajaan moden.
3. Warna utama navy, biru dan hijau lembut.
4. Sidebar konsisten untuk Admin dan Staff.
5. Navbar atas untuk Pengguna Awam.
6. Dashboard mempunyai kad statistik.
7. Table perlu kemas dan responsive.
8. Badge status jelas.
9. Alert mesej berjaya/gagal jelas.
10. Halaman print mesra A4.
11. Jangan biarkan UI kosong.

==================================================
VERIFIKASI WAJIB SELEPAS PERUBAHAN
==================================================

Jalankan:
php artisan test

Jika sesuai, jalankan juga:
php -l pada fail PHP yang diubah.

Jangan jalankan migrate:fresh pada database kerja sebenar kecuali diminta,
kerana ia boleh memadam data import sebenar.

Flow yang perlu diuji:
1. Login Admin.
2. Login Staff.
3. Login Pengguna Awam.
4. Semakan No_Akaun_Tunggakan wujud.
5. Semakan No_Akaun_Tunggakan tidak wujud.
6. Semakan akaun diproses, aktif dan selesai tidak boleh teruskan.
7. Pengguna hantar permohonan baharu untuk akaun yang dibenarkan.
8. Staff semak permohonan.
9. Staff input jadual ansuran manual.
10. Staff sahkan akaun aktif.
11. Staff rekod bayaran manual.
12. Staff download template bayaran pukal.
13. Staff upload bayaran pukal untuk ansuran belum bayar.
14. Staff upload bayaran pukal untuk kemaskini transaksi ansuran dibayar.
15. Import Excel Staff untuk data tunggakan.
16. Import Excel Admin untuk data cukai harta.
17. Admin semak laporan.
18. Admin semak audit trail.

==================================================
FORMAT LAPORAN AKHIR
==================================================

Apabila selesai membuat perubahan, laporkan:

1. Modul yang dikemaskini.
2. Fail utama yang diubah.
3. Flow yang berjaya diuji.
4. Command verifikasi yang dijalankan.
5. Limitasi kecil jika ada.
6. Sebarang andaian penting.

Teruskan dengan kod sebenar. Jangan berhenti pada cadangan.
