# AI ANALISIS PROJECT

## ROLE

Bertindak sebagai Senior Software Architect, Senior Laravel Developer, Senior Database Architect, dan System Analyst.

Sebelum membuat kode, lakukan analisis menyeluruh terhadap project.

Jangan membuat kode terlebih dahulu.

======================================================

TUJUAN

======================================================

Analisis seluruh project sebelum implementasi Modul Master Surat.

Pastikan implementasi tidak mengubah workflow yang telah selesai.

======================================================

YANG HARUS DILAKUKAN

======================================================

Lakukan analisis berikut.

1.

Identifikasi struktur project.

2.

Cari seluruh module Administrasi Surat.

3.

Cari Generator PDF.

4.

Cari proses Approval Surat.

5.

Cari proses Arsip Surat.

6.

Cari relasi Data Penduduk.

7.

Cari route yang berhubungan.

8.

Cari middleware.

9.

Cari policy.

10.

Cari service class.

======================================================

HASIL ANALISIS

======================================================

### 1. Struktur Project & Identifikasi Komponen
* **Arsitektur**: Menggunakan Laravel 11/12 dengan MVC pattern standar. Front-end dibangun dengan Blade templates terintegrasi dengan layout AdminLTE.
* **Database**: Menggunakan MySQL. Tabel terkait adalah `jenis_surats` (untuk metadata jenis surat dan template aslinya), `pengajuan_surats` (permohonan warga), dan `surat_cetaks` (arsip PDF yang terbit).

### 2. Modul Administrasi Surat
* Pengelolaan permohonan surat berada pada `PengajuanSuratController` untuk Admin dan `Warga/SuratController` untuk warga. Arsip dokumen cetak dikelola oleh `SuratCetakController`.

### 3. Generator PDF
* PDF di-generate menggunakan library `barryvdh/laravel-dompdf`. Template dasar PDF didefinisikan pada `resources/views/surat/pdf-template.blade.php`. Template dinonaktifkan dari hardcode dan dimigrasi ke database.

### 4. Proses Approval Surat
* Dijalankan melalui `PengajuanSuratController::setujui`. Logikanya adalah memvalidasi kelengkapan berkas, meng-generate nomor surat otomatis via `GenerateNomorSuratService`, memproses PDF dari template, menyimpannya di storage, membuat entri `surat_cetaks` (Arsip), dan mengubah status pengajuan menjadi `selesai`.

### 5. Proses Arsip Surat
* Begitu surat disetujui, entri baru masuk ke `surat_cetaks` dengan kolom `file_surat` mengarah ke PDF yang dihasilkan. Admin juga dapat mengunggah hasil scan bertanda tangan basah (`file_scan_ttd`) yang kemudian dapat diunduh oleh warga.

### 6. Relasi Data Penduduk
* `PengajuanSurat` terhubung ke `Penduduk` melalui `penduduk_id`. Model `Penduduk` terhubung ke `KartuKeluarga` melalui `kartu_keluarga_id`. Alamat lengkap disusun secara dinamis dari detail jalan penduduk, RT/RW, dan Dusun dari KK.

### 7. Route Terkait
* Resource route `pengajuan-surat`, `arsip-surat`, serta action `pengajuan-surat/{id}/setujui`, `pengajuan-surat/{id}/tolak`.
* Route baru yang akan ditambahkan: `/master-surat` (resource router terbatas untuk `index`, `show`, `edit`, `update`).

### 8. Middleware
* Menggunakan middleware standard Laravel: `auth`, `verified`, dan `role:admin` untuk memastikan hanya Administrator yang dapat melakukan pengelolaan template surat.

### 9. Policy & Otorisasi
* Otorisasi saat ini menggunakan middleware `role:admin`. Master Surat akan dilindungi menggunakan middleware role yang sama sehingga hanya Administrator yang memiliki akses baca/tulis.

### 10. Service Class
* `GenerateNomorSuratService` digunakan untuk penomoran surat otomatis.
* `TemplateParserService` digunakan sebagai parser placeholder dinamis (seperti `{{ nama_lengkap }}`, `{{ nik }}`, dll).

---

## 1. File Yang Akan Dibuat
1. **Migration**: `database/migrations/xxxx_xx_xx_create_master_surats_table.php` untuk membuat tabel `master_surats` terpisah.
2. **Migration**: `database/migrations/xxxx_xx_xx_create_master_surat_logs_table.php` untuk menyimpan log audit perubahan template.
3. **Model**: `app/Models/MasterSurat.php` dan `app/Models/MasterSuratLog.php` untuk representasi Eloquent.
4. **Seeder**: `database/seeders/MasterSuratSeeder.php` untuk inisialisasi awal 3 template surat resmi (SKD, SKU, SKTM).
5. **Form Request**: `app/Http/Requests/UpdateMasterSuratRequest.php` untuk validasi input template dan status.
6. **Controller**: `app/Http/Controllers/Admin/MasterSuratController.php` (Resource Controller).
7. **Views**: 
   * `resources/views/admin/master-surat/index.blade.php` (Index & Statistik).
   * `resources/views/admin/master-surat/show.blade.php` (Detail readonly & list placeholder).
   * `resources/views/admin/master-surat/edit.blade.php` (Form edit dengan TinyMCE).
8. **Test**: `tests/Feature/MasterSuratTest.php` untuk validasi fungsionalitas otomatis.

## 2. File Yang Akan Diubah
1. `routes/web.php` untuk menambahkan route baru `/master-surat`.
2. `config/adminlte.php` untuk menambahkan item menu baru pada sidebar Admin.
3. `app/Http/Controllers/PengajuanSuratController.php` pada method `setujui` untuk membaca template dari tabel `master_surats` bukan `jenis_surats`.
4. `app/Http/Controllers/SuratCetakController.php` pada method `generate` untuk sinkronisasi generator PDF dari database `master_surats`.
5. `database/seeders/DatabaseSeeder.php` untuk mendaftarkan `MasterSuratSeeder`.

## 3. Alasan Perubahan
* Memisahkan penyimpanan template surat ke tabel khusus `master_surats` sesuai dengan request backend agar tidak mencampuradukkan metadata Jenis Surat bawaan sistem dengan template isi dinamis yang dikelola oleh Administrator.
* Memungkinkan editor isi template menggunakan Rich Text Editor (TinyMCE) secara dinamis tanpa menyentuh source code Laravel Blade.

## 4. Dependency
* `barryvdh/laravel-dompdf` untuk rendering PDF dari HTML template.
* TinyMCE via CDN untuk input WYSIWYG editor pada halaman edit.
* SweetAlert2 & DataTables (sudah terpasang di project, tinggal diintegrasikan).

## 5. Dampak Terhadap Modul Lain
* Modul Pengajuan Surat dan Arsip Surat tidak akan mengalami perubahan alur kerja (workflow), namun metode pembuatan PDF-nya akan mengambil data isi surat dari tabel `master_surats`.
* Untuk menjaga kompatibilitas, field `is_active` di tabel `jenis_surats` akan disinkronkan secara otomatis ketika Admin mengaktifkan/menonaktifkan template di `master_surats` agar filter jenis surat di portal warga tetap konsisten.

## 6. Resiko Implementasi
* **Resiko**: Penghapusan placeholder wajib secara tidak sengaja oleh admin yang mengakibatkan kegagalan render data penduduk saat approval.
  * *Mitigasi*: Menambahkan validasi custom di `UpdateMasterSuratRequest` untuk memastikan minimal ada satu placeholder resmi dalam template, serta panduan salin placeholder interaktif di halaman edit.
* **Resiko**: Konflik stylesheet/inline-style HTML editor TinyMCE dengan parser DomPDF.
  * *Mitigasi*: Menggunakan konfigurasi editor TinyMCE yang bersih serta me-render CSS Times New Roman standar pada layout PDF.

======================================================

JANGAN MENULIS KODE.

Berhenti setelah analisis selesai.