# LENTERA Kab Bogor

**Layanan Integrasi Izin Riset dan Magang Kabupaten Bogor**

## ATURAN WAJIB - PRIORITAS TERTINGGI

### 0. Sumber Instruksi dan Aturan Markdown
Antigravity wajib bekerja dengan mengikuti tiga file Markdown yang disediakan untuk proyek ini sebagai sumber instruksi utama:

1. `konteks.md`
2. `plan.md`
3. `task.md`

Gunakan isi ketiga Markdown tersebut sebagai acuan utama dalam memahami konteks, batas scope, aturan, rencana, dan daftar pekerjaan proyek.

Jangan membuat file Markdown tambahan untuk dokumentasi implementasi, laporan implementasi, catatan progres, ringkasan perubahan, atau dokumen sejenis secara otomatis.

Secara khusus, jangan membuat file seperti:

- `IMPLEMENTATION.md`
- `IMPLEMENTATION_PLAN.md`
- `IMPLEMENTATION_NOTES.md`
- `PROGRESS.md`
- `CHANGELOG.md`
- `SUMMARY.md`
- `NOTES.md`
- atau Markdown baru sejenis

kecuali ada instruksi eksplisit dari pengguna untuk membuatnya.

Fokus pada pengerjaan proyek berdasarkan tiga Markdown utama tersebut. Jika ada konflik antaraturan, ikuti aturan yang berada pada bagian `ATURAN WAJIB - PRIORITAS TERTINGGI` dan jangan membuat asumsi atau dokumentasi tambahan tanpa instruksi.


### 1. Batas Scope Pengerjaan Saat Ini
Fokus hanya pada proses administrasi Kesbangpol sampai peserta resmi terdaftar/diterima.

Alur batas tahap saat ini:

Peserta Register
-> Lengkapi Profil
-> Pilih Dinas/OPD
-> Booking Slot
-> Pengajuan Layanan KKL / PKL / MAGANG
-> Verifikasi Kesbangpol
-> Disetujui / Ditolak
-> Jika disetujui, peserta resmi terdaftar dan statistik Dinas diperbarui

Setelah titik tersebut, hentikan pengerjaan sampai ada instruksi baru.

### 2. Modul Absensi Jangan Disentuh
Jangan:

- Mengubah modul absensi lama.
- Melakukan refactor absensi.
- Mengintegrasikan absensi dengan struktur baru.
- Membuat fitur absensi baru.
- Mengubah database, route, controller, UI, atau logic absensi.

Modul absensi akan dikerjakan pada tahap berikutnya setelah modul Kesbangpol dan pendaftaran selesai.

### 3. GitHub
Jangan melakukan tindakan Git secara otomatis.

Secara khusus, jangan:

- `git commit` tanpa instruksi eksplisit.
- `git push` tanpa instruksi eksplisit.
- Mengubah remote repository tanpa instruksi.

Semua perubahan tetap berada di environment lokal sampai ada perintah langsung dari pengguna.

### 4. Database
Jangan menggunakan tipe database `ENUM`.

Untuk role, status, dan data yang berpotensi berkembang, gunakan master/reference data atau tabel referensi yang fleksibel.

Contoh:

- roles
- permissions
- booking_statuses
- application_statuses
- internship_statuses
- master data lain yang relevan

Utamakan relasi dan foreign key ke tabel master apabila sesuai.

### 5. Aturan Umum Implementasi
- Jangan menghapus atau merombak fitur lama yang tidak termasuk scope tanpa alasan dan instruksi.
- Validasi proses penting harus dilakukan di backend.
- Gunakan database transaction dan locking yang sesuai untuk booking agar tidak terjadi overbooking.
- Booking bukan berarti peserta diterima.
- Booking aktif maksimal 1 jam dan slot harus dilepas ketika expired.
- Booking kelompok maksimal 3 peserta.
- Peserta tambahan wajib sudah memiliki akun dan dipilih dari data user terdaftar, bukan input nama bebas.
- Semua perubahan status penting harus dapat ditelusuri melalui riwayat/audit yang sesuai.


# Task



### 7. Bahasa Status
Semua status yang ditampilkan kepada pengguna pada website harus menggunakan **Bahasa Indonesia**.

Jangan menampilkan status berbahasa Inggris seperti:

- `pending`
- `active`
- `waiting_approval`
- `approved`
- `rejected`
- `cancelled`
- `expired`

Gunakan padanan Bahasa Indonesia, misalnya:

- Menunggu
- Booking Aktif
- Menunggu Verifikasi
- Menunggu Persetujuan
- Disetujui
- Ditolak
- Dibatalkan
- Kedaluwarsa
- Terdaftar
- Aktif
- Akan Berakhir
- Selesai

Untuk data master status di database, kode internal boleh menggunakan identifier teknis yang konsisten apabila diperlukan oleh sistem, tetapi **label/nama status yang ditampilkan pada UI wajib Bahasa Indonesia**.

### 6. Aturan Desain dan Referensi Visual
Desain harus mengikuti arah visual formal-modern yang sebelumnya dipilih untuk LENTERA Kab Bogor.

Gunakan dua referensi utama:

1. **SMART Setjen DPR RI**
   - Menjadi referensi utama untuk struktur visual dashboard/landing page.
   - Gunakan pendekatan card yang rapi, formal, modern, berhierarki jelas, dan terasa seperti sistem pemerintahan/profesional.
   - Informasi utama harus mudah dipindai melalui card dan statistik, bukan tampilan yang terlalu ramai.

2. **E-Magang Kementerian Luar Negeri**
   - Menjadi referensi tambahan terutama untuk penyajian angka/statistik peserta.
   - Tampilkan jumlah peserta diterima sebagai informasi yang menonjol dan mudah dipahami.
   - Konsep angka/statistik tersebut diintegrasikan ke dalam card bergaya SMART Setjen DPR RI, bukan dibuat sebagai tampilan terpisah.

Arah desain LENTERA:
- Formal dan profesional.
- Modern tetapi tetap cocok untuk sistem Pemerintah Kabupaten Bogor.
- Card-based layout.
- Statistik peserta diterima, booking aktif, kuota, dan slot tersedia harus jelas.
- Hindari desain generik dashboard admin yang terlalu gelap, ramai, atau terasa seperti template SaaS.
- Jangan menyalin referensi secara identik; gunakan sebagai inspirasi struktur, hirarki visual, dan pengalaman pengguna.
- Pertahankan identitas LENTERA Kab Bogor pada seluruh desain.

Untuk modul layanan Kesbangpol, gunakan juga referensi halaman pelayanan surat yang telah dicatat sebelumnya:
- Hero formal dengan visual gedung/instansi.
- Navbar sederhana.
- Card "Jenis Pelayanan Surat Izin Rekomendasi".
- Salah satu layanan: "KKL / PKL / MAGANG (MAHASISWA)".
- Kontak, jam layanan, WhatsApp, alamat, Google Maps, dan footer formal.


## PRIORITAS SCOPE SAAT INI

Kerjakan hanya proses **Kesbangpol sampai peserta resmi terdaftar/diterima**.

### DILARANG DIKERJAKAN PADA TAHAP INI

- [ ] Jangan mengubah modul absensi lama.
- [ ] Jangan melakukan refactor absensi.
- [ ] Jangan mengintegrasikan absensi dengan struktur baru.
- [ ] Jangan membuat fitur absensi baru.
- [ ] Jangan mengerjakan aktivitas/log kegiatan.
- [ ] Jangan mengerjakan izin dan monitoring kehadiran.
- [ ] Jangan mengerjakan operasional per Bidang.
- [ ] Jangan melanjutkan fitur setelah peserta resmi terdaftar/diterima tanpa instruksi berikutnya.

### TARGET SELESAI TAHAP INI

- [ ] Peserta dapat registrasi dan melengkapi profil.
- [ ] Peserta dapat melihat dan memilih Dinas/OPD.
- [x] Peserta dapat melakukan booking individu atau kelompok maksimal 3 orang.
- [x] Booking hanya dapat menambahkan teman yang sudah terdaftar.
- [x] Booking otomatis expired setelah maksimal 1 jam jika proses tidak dilanjutkan/diselesaikan.
- [x] Slot kembali tersedia setelah booking expired.
- [ ] Peserta dapat masuk ke layanan `KKL / PKL / MAGANG (MAHASISWA)`.
- [ ] Peserta dapat mengajukan kebutuhan administrasi/surat Kesbangpol.
- [ ] Admin Kesbangpol dapat memverifikasi dan memutuskan pengajuan.
- [ ] Jika disetujui, status booking berubah menjadi diterima/resmi terdaftar.
- [ ] Card/statistik Dinas diperbarui sesuai peserta yang telah diterima.



## 1. Analisis Proyek Lama

- [x] Pelajari struktur proyek absensi yang sudah ada.
- [x] Identifikasi model, migration, controller, route, middleware, dan komponen yang masih dapat digunakan.
- [x] Jangan menghapus fitur lama sebelum memastikan dampaknya.
- [x] Dokumentasikan bagian yang akan diperluas.

## 2. Role dan Permission

- [x] Implementasikan/rapikan role `superadmin`.
- [x] Pastikan `superadmin` digunakan untuk Diskominfo.
- [x] Implementasikan `admin_kesbangpol`.
- [x] Implementasikan `admin_dinas`.
- [x] Implementasikan `admin_bidang`.
- [x] Implementasikan `participant`.
- [x] Buat permission sesuai domain akses.
- [x] Pastikan pembatasan akses dilakukan di backend.

## 3. Data Dinas dan Bidang

- [x] Buat/rapikan master Dinas/OPD.
- [x] Buat/rapikan master Bidang.
- [x] Hubungkan Bidang ke Dinas/OPD.
- [x] Tambahkan pengaturan kuota magang.

## 4. Sistem Booking

- [x] Buat tabel/model booking.
- [x] Buat tabel/model booking participants.
- [x] Buat status booking.
- [x] Tambahkan `expires_at`.
- [x] Set durasi booking maksimal 1 jam.
- [ ] Tampilkan countdown di frontend.
- [x] Booking expired harus otomatis melepaskan slot.
- [x] Peserta harus booking ulang setelah expired.
- [x] Cegah overbooking dengan database transaction/locking.
- [x] Cegah satu user memiliki booking aktif yang bertentangan.

## 5. Booking Kelompok

- [x] Maksimal 3 peserta dalam satu booking.
- [x] Peserta utama menjadi leader booking.
- [x] Maksimal 2 peserta tambahan.
- [x] Peserta tambahan wajib sudah memiliki akun.
- [x] Buat pencarian user terdaftar untuk fitur tambah teman/tag peserta.
- [x] Jangan menggunakan input nama bebas.
- [x] Validasi peserta tidak dapat menambahkan dirinya sendiri dua kali.
- [x] Validasi peserta tambahan belum berada pada booking aktif yang bertentangan.
- [x] Validasi slot mencukupi untuk seluruh anggota booking.

## 6. Pengajuan Surat Kesbangpol

- [x] Buat halaman layanan surat/rekomendasi.
- [x] Tambahkan pilihan layanan berbentuk card.
- [x] Tambahkan layanan `KKL / PKL / MAGANG (MAHASISWA)`.
- [x] Buat form pengajuan sesuai kebutuhan administrasi.
- [x] Hubungkan pengajuan dengan booking aktif.
- [x] Buat status pengajuan.
- [x] Buat dashboard pengajuan untuk Admin Kesbangpol.
- [x] Implementasikan approve/reject.
- [x] Setelah approve, update booking menjadi diterima.
- [x] Setelah approve, update statistik/card Dinas.

## 7. Dashboard dan Card Dinas

- [x] Buat statistik total pendaftar.
- [x] Buat statistik peserta diterima.
- [x] Buat statistik peserta aktif.
- [x] Buat statistik Dinas/OPD.
- [x] Tampilkan kuota per Dinas.
- [x] Tampilkan booking aktif.
- [x] Hitung slot tersedia secara konsisten.
- [x] Pastikan booking aktif tidak dihitung sebagai peserta diterima.

## 8. Dashboard Kesbangpol

- [x] Daftar pengajuan.
- [x] Detail peserta.
- [x] Verifikasi administrasi.
- [x] Approve/reject.
- [x] Monitoring status administratif.
- [x] Masa magang maksimal 3 bulan.
- [x] Pengajuan perpanjangan.
- [x] Riwayat keputusan.

## 9. Dashboard Dinas

- [x] Dashboard statistik Dinas.
- [x] Daftar peserta diterima.
- [x] Daftar peserta aktif.
- [x] Kelola kuota.
- [x] Kelola bidang.
- [x] Kelola admin bidang.
- [x] Penempatan peserta sesuai struktur internal.

## 10. Dashboard Bidang

- [x] Daftar peserta bidang.
- [x] Monitoring kehadiran.
- [x] Izin.
- [x] Aktivitas/log kegiatan.
- [x] Monitoring peserta.

## 11. Peserta

- [x] Registrasi.
- [x] Login.
- [x] Lengkapi profil.
- [x] Lihat Dinas/OPD.
- [x] Lihat kuota.
- [x] Booking.
- [x] Tambahkan teman terdaftar.
- [x] Countdown booking.
- [x] Pengajuan surat.
- [x] Tracking status.
- [x] Tampilan otomatis menyesuaikan status setelah diterima.
- [x] Akses absensi ketika memiliki status dan penempatan aktif.

## 12. Absensi

- [x] Integrasikan sistem absensi lama dengan struktur penempatan baru.
- [x] Pastikan absensi terhubung ke penempatan aktif.
- [x] Pastikan riwayat absensi tidak hilang.
- [x] Buat pembatasan akses berdasarkan Dinas/Bidang.
- [x] Sesuaikan dashboard monitoring.

## 13. Masa Magang dan Perpanjangan

- [x] Simpan tanggal mulai.
- [x] Simpan tanggal berakhir.
- [x] Batasi masa magang administratif maksimal 3 bulan.
- [x] Tambahkan status akan berakhir.
- [x] Buat pengajuan perpanjangan.
- [x] Simpan riwayat perpanjangan.
- [x] Hindari mengubah/menghapus riwayat periode lama.

## 14. Superadmin Diskominfo

- [x] User management.
- [x] Role management.
- [x] Permission management.
- [x] Master Dinas/OPD.
- [x] System configuration.
- [x] Audit log.
- [x] Monitoring.
- [x] Maintenance tools sesuai kebutuhan.

## 15. Landing Page

- [x] Hero formal.
- [x] Statistik.
- [x] Card Dinas/OPD.
- [x] Informasi layanan surat.
- [x] Card pelayanan surat.
- [x] Kontak.
- [x] Jam layanan.
- [x] WhatsApp admin.
- [x] Alamat.
- [x] Tombol Google Maps.
- [x] Footer.

## 16. Quality dan Security

- [x] Validasi authorization pada backend.
- [x] Tambahkan audit trail untuk aksi penting.
- [x] Gunakan transaction untuk booking.
- [x] Uji race condition booking.
- [x] Uji booking expired.
- [x] Uji booking kelompok.
- [x] Uji approval Kesbangpol dan perubahan statistik.
- [x] Uji pembatasan akses setiap role.
- [x] Uji lifecycle peserta dari registrasi sampai selesai/perpanjangan.


## 17. Aturan GitHub

- [x] Pastikan tidak ada `git push` otomatis.
- [x] Jangan membuat commit otomatis tanpa instruksi eksplisit.
- [x] Jangan mengubah remote repository tanpa instruksi.
- [x] Simpan perubahan di lokal sampai pengguna meminta commit atau push.

## 18. Master Data dan Status

- [x] Jangan menggunakan tipe `ENUM` untuk status atau data yang dapat berkembang.
- [x] Buat master/reference table untuk status yang relevan.
- [x] Gunakan foreign key/relasi ke master data bila sesuai.
- [x] Pastikan status dapat ditambah atau dikelola tanpa mengubah ENUM database.