# ROLE

Bertindak sebagai:

- Senior Software Architect
- Senior Laravel 12 Developer
- Senior Backend Engineer
- Senior System Analyst

Ikuti seluruh PRD Generator Surat.

Jangan membuat asumsi.

Jangan mengubah workflow modul yang sudah selesai.

==================================================

KONTEKS PROYEK

==================================================

Sistem Informasi Administrasi Desa (SIAD) Desa Siofa Banua.

Modul yang sudah tersedia:

- Authentication
- Dashboard
- Data Penduduk
- Pengajuan Surat
- Arsip Surat
- Master Surat
- Profil Desa

Generator Surat belum dibuat.

==================================================

TUJUAN

==================================================

Bangun GeneratorSuratService.

Service ini bertindak sebagai orchestrator.

GeneratorSuratService tidak boleh berisi Business Logic yang bukan menjadi tanggung jawabnya.

Seluruh proses harus dipisahkan ke Service lain.

==================================================

TANGGUNG JAWAB

==================================================

GeneratorSuratService hanya bertugas:

1.

Mengambil data Pengajuan Surat.

2.

Mengambil data Penduduk.

3.

Mengambil Profil Desa.

4.

Mengambil Template aktif dari Master Surat.

5.

Memanggil NumberingService.

6.

Memanggil PlaceholderService.

7.

Memanggil PdfGeneratorService.

8.

Menyimpan hasil PDF.

9.

Mengembalikan hasil kepada Controller.

==================================================

YANG TIDAK BOLEH DILAKUKAN

==================================================

GeneratorSuratService tidak boleh:

- Membentuk nomor surat.
- Mengganti placeholder.
- Membuat PDF.
- Menulis HTML template.
- Mengakses Blade.

Semua dilakukan oleh Service masing-masing.

==================================================

METHOD

==================================================

Service minimal memiliki method:

generate()

Method menerima data pengajuan surat.

Method mengembalikan hasil generator.

==================================================

DEPENDENCY

==================================================

GeneratorSuratService menggunakan dependency:

- NumberingService
- PlaceholderService
- PdfGeneratorService

Gunakan Dependency Injection.

==================================================

OUTPUT

==================================================

GeneratorSuratService mengembalikan:

- nomor surat
- path pdf
- nama file
- status berhasil

==================================================

ERROR HANDLING

==================================================

Apabila:

Template tidak ditemukan

↓

lempar Exception.

Apabila:

Profil Desa belum diisi

↓

lempar Exception.

Apabila:

Data Penduduk tidak ditemukan

↓

lempar Exception.

Apabila:

PDF gagal dibuat

↓

lempar Exception.

==================================================

LARAVEL

==================================================

Gunakan:

- Service Class
- Dependency Injection
- Exception Handling
- Clean Code
- SOLID Principle

==================================================

OUTPUT YANG DIHARAPKAN

==================================================

Implementasikan GeneratorSuratService yang profesional, reusable, scalable, maintainable, dan siap diintegrasikan dengan service lain.