# ROLE

Bertindak sebagai:

- Senior Software Architect
- Senior Laravel 12 Developer
- Senior Backend Engineer
- Database Architect

Ikuti seluruh PRD Generator Surat.

Gunakan prinsip:

- SOLID
- Clean Architecture
- Single Responsibility Principle

Jangan membuat menu baru.

Jangan membuat halaman konfigurasi baru.

Jangan mengubah workflow modul lain.

==================================================

KONTEKS

==================================================

Generator Surat sedang dikembangkan.

Service yang sedang dibuat adalah:

NumberingService

Service ini merupakan internal business service.

Bukan menu.

Bukan halaman.

Bukan controller.

==================================================

TUJUAN

==================================================

Bangun NumberingService.

Service ini bertanggung jawab menghasilkan nomor surat resmi desa.

==================================================

FORMAT NOMOR SURAT

==================================================

Nomor surat mengikuti format:

470/{nomor}/{kode_surat}/{bulan_romawi}/{tahun}

Contoh:

470/001/SKU/VI/2026

470/002/SKD/VI/2026

470/003/STM/VI/2026

==================================================

KODE SURAT

==================================================

Ambil dari Master Surat.

Contoh:

SKU

SKD

STM

Jangan hardcode.

==================================================

NOMOR URUT

==================================================

Nomor urut harus:

- unik
- berurutan
- tidak boleh lompat
- tidak boleh ganda

Nomor bertambah hanya ketika surat benar-benar berhasil dibuat.

==================================================

BULAN

==================================================

Gunakan angka Romawi.

Contoh:

I

II

III

IV

...

XII

==================================================

TAHUN

==================================================

Gunakan tahun saat surat dibuat.

==================================================

TANGGUNG JAWAB

==================================================

Service hanya bertugas:

- menentukan nomor berikutnya
- membentuk format nomor surat
- mengembalikan nomor surat

==================================================

JANGAN

==================================================

Service ini tidak boleh:

- membuat PDF
- mengganti placeholder
- membaca Blade
- menyimpan file
- mengubah status pengajuan

==================================================

METHOD

==================================================

Minimal memiliki method:

generate()

Method menerima:

Master Surat

Method mengembalikan:

Nomor Surat Lengkap

==================================================

DATABASE

==================================================

Gunakan data yang sudah tersedia.

Apabila sistem memiliki tabel settings atau konfigurasi, gunakan untuk menyimpan nomor terakhir.

Apabila belum tersedia, buat solusi yang paling sederhana dan mudah diintegrasikan tanpa menambah menu baru.

==================================================

ERROR HANDLING

==================================================

Apabila kode surat tidak ditemukan:

lempar Exception.

Apabila nomor gagal dibuat:

lempar Exception.

==================================================

LARAVEL

==================================================

Gunakan:

- Service Class
- Dependency Injection
- Exception Handling

Jangan meletakkan business logic pada Controller.

==================================================

OUTPUT

==================================================

Implementasikan NumberingService yang reusable, maintainable, dan siap dipanggil oleh GeneratorSuratService.