# Tasks

## 1. Kontrak dan profil

- [x] 1.1 Tambahkan DTO Settings, validator input dan kode error mengikuti envelope existing; verifikasi build shared dan tes input kosong, field terlarang, email serta batas panjang.
- [x] 1.2 Implementasikan PATCH profile dengan password opsional atomik, hashing existing, audit aman dan perlindungan perubahan password bersamaan; verifikasi tes rollback saat password salah/email duplikat serta login dengan password baru.
- [x] 1.3 Daftarkan route/controller profile, auth/origin/no-store dan rate limit yang sesuai; lengkapi OpenAPI dan AUTH.md mengenai kebijakan sesi; verifikasi kontrak HTTP, akses tanpa login dan tidak bocornya secret.

## 2. Manajemen pengguna

- [x] 2.1 Implementasikan daftar pengguna dengan pagination, pencarian, filter role/status dan DTO aman; verifikasi urutan stabil, filter dan ADMIN-only pada tes endpoint.
- [x] 2.2 Implementasikan tambah/edit akun dengan password awal hanya saat create, email unique, role dan isActive; verifikasi login akun baru, konflik email, validasi password dan audit atomik.
- [x] 2.3 Terapkan nonaktif/aktif tanpa hard delete, larangan self-deactivate/self-role-change serta perlindungan ADMIN terakhir dengan serialisasi transaksi dan pemeriksaan ulang aktor; verifikasi histori utuh, penolakan sesi nonaktif dan tes konkurensi MySQL disposable.
- [x] 2.4 Dokumentasikan endpoint pengguna pada OpenAPI dan catatan service Settings termasuk password awal manual serta batasan reaktivasi JWT; verifikasi respons/error sesuai dokumentasi dan tidak ada API reset password.

## 3. Nama fasilitas dan laporan

- [x] 3.1 Implementasikan GET/PATCH konfigurasi nama fasilitas khusus ADMIN, default saat row absen, upsert singleton dan audit; verifikasi GET tanpa write dan field timezone/currency/approval tetap utuh.
- [x] 3.2 Tambahkan plantName pada DTO/metadata laporan dan tampilkan sebagai teks di header Excel/cetak PDF; verifikasi nama baru pada ekspor baru, fallback, karakter khusus dan metrik laporan tidak berubah.
- [x] 3.3 Perbarui OpenAPI Settings/laporan serta dokumentasi semantik nama fasilitas saat ini; verifikasi tes kontrak metadata dan tidak ada kebutuhan perubahan Prisma/migration.

## 4. Integrasi Settings frontend

- [x] 4.1 Buat settings.service.ts dan integrasi React Query dengan key per akun/filter, error handling dan invalidation; verifikasi tes service serta cache tidak bocor saat berganti akun.
- [x] 4.2 Hubungkan ProfileCard ke akun login dan save atomik; implementasikan Discard, validasi password, pending/error dan pembaruan identitas header; verifikasi input tidak hilang saat refetch/failure dan tombol mencegah submit ganda.
- [x] 4.3 Hubungkan UsersCard ke daftar nyata, tambah dialog create/edit, filter/pagination dan konfirmasi aktif/nonaktif; verifikasi role/status/self marker, akses ADMIN dan perilaku akun nonaktif.
- [x] 4.4 Hubungkan SystemCard ke nama fasilitas serta invalidasi laporan setelah save; verifikasi hasil tetap tersimpan setelah reload dan kesalahan tidak menghapus input.
- [x] 4.5 Rapikan navigasi sesuai role; hapus bagian Notifications dan kontrol auto-approve beserta data dummy/import yang tidak dipakai setelah pencarian usage; verifikasi layout tetap konsisten dan notifikasi header/halaman tetap tersedia.
- [x] 4.6 Tambahkan verifikasi UI untuk loading Skeleton, empty/error/retry, dialog keyboard, tampilan mobile dan perubahan role saat halaman terbuka; catat hasil pemeriksaan yang benar-benar dijalankan.

## 5. Verifikasi integrasi

- [x] 5.1 Jalankan typecheck/build workspace dan test:docs setelah build API; verifikasi semua lolos tanpa build:vercel, migration atau reseed aplikasi.
- [x] 5.2 Jalankan regresi auth, notifikasi, checkout approval dan reports serta tes Settings dengan database terisolasi bila diperlukan; dokumentasikan hasil, keterbatasan dan cek bahwa tidak ada perubahan schema atau perilaku domain di luar proposal.

## Workflow follow-up

- Review proposal dan perubahan UI yang diusulkan sebelum apply. Seluruh checkbox tetap belum selesai sampai implementasi serta verifikasi dilakukan.
- Archive hanya setelah implementasi selesai dan diminta; commit/push mengikuti instruksi pengguna dan AGENTS.md.
