# ROLE

Bertindak sebagai:

- Senior Software Architect
- Senior Laravel 12 Developer
- Senior Backend Engineer
- Senior System Analyst

Ikuti seluruh PRD Generator Surat.

Gunakan prinsip:

- SOLID
- Clean Architecture
- Single Responsibility Principle

Jangan membuat menu baru.

Jangan mengubah workflow yang telah ada.

==================================================

KONTEKS

==================================================

Generator Surat sedang dikembangkan.

Service yang sedang dibuat adalah:

PlaceholderService

Service ini merupakan internal business service.

Bukan menu.

Bukan controller.

Bukan halaman.

==================================================

TUJUAN

==================================================

Bangun PlaceholderService.

Service bertugas mengganti seluruh placeholder pada template surat menjadi data sebenarnya.

==================================================

SUMBER DATA

==================================================

Placeholder dapat berasal dari:

1. Data Penduduk

2. Data Pengajuan Surat

3. Profil Desa

4. Nomor Surat

==================================================

DATA PENDUDUK

==================================================

Ambil data berikut apabila tersedia:

nama_lengkap

nik

nomor_kk

tempat_lahir

tanggal_lahir

jenis_kelamin

agama

pekerjaan

status_perkawinan

kewarganegaraan

alamat

==================================================

DATA PENGAJUAN

==================================================

Ambil:

keperluan

jenis_surat

tanggal_pengajuan

==================================================

PROFIL DESA

==================================================

Ambil:

nama_desa

alamat_desa

kecamatan

kabupaten

provinsi

nama_penandatangan

jabatan_penandatangan

logo_desa

==================================================

NUMBERING SERVICE

==================================================

Terima hasil:

nomor_surat

tanggal_surat

dari GeneratorSuratService.

==================================================

PLACEHOLDER YANG WAJIB DIDUKUNG

==================================================

{{ nomor_surat }}

{{ tanggal_surat }}

{{ nama_lengkap }}

{{ nik }}

{{ nomor_kk }}

{{ tempat_lahir }}

{{ tanggal_lahir }}

{{ jenis_kelamin }}

{{ alamat }}

{{ pekerjaan }}

{{ agama }}

{{ status_perkawinan }}

{{ kewarganegaraan }}

{{ keperluan }}

{{ nama_desa }}

{{ alamat_desa }}

{{ kecamatan }}

{{ kabupaten }}

{{ provinsi }}

{{ nama_penandatangan }}

{{ jabatan_penandatangan }}

==================================================

TUGAS SERVICE

==================================================

Service menerima:

Isi Template

+

Seluruh Data

↓

Menghasilkan

Isi Template Final

Seluruh placeholder harus diganti.

Tidak boleh ada placeholder tersisa.

==================================================

VALIDASI

==================================================

Apabila template mengandung placeholder yang tidak dikenali,

lempar Exception.

Apabila data wajib tidak tersedia,

lempar Exception.

==================================================

JANGAN

==================================================

Service tidak boleh:

- membuat PDF
- membuat nomor surat
- mengubah database
- mengubah status pengajuan
- membaca Blade

==================================================

METHOD

==================================================

Minimal memiliki method:

replace()

Parameter:

- template
- data

Return:

String template final.

==================================================

OUTPUT

==================================================

Implementasikan PlaceholderService yang reusable, maintainable, mudah diperluas, dan siap digunakan oleh GeneratorSuratService.