# HRIS Approval Lifecycle

File diagram:
- `docs/flowcharts/hris-approval-lifecycle.drawio`

Fokus diagram:
- lifecycle approval generik lintas modul
- snapshot flow approval saat submit
- percabangan approve, reject, unapprove, dan bulk action
- efek akhir ke status modul sumber

Dasar struktur yang dipakai:
- [MasterApproval routes](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\MasterApproval\routes\web.php)
- [MasterApproval migrations](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\MasterApproval\Database\migrations)
- [LeaveRequest routes](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\LeaveRequest\routes\web.php)
- [LeaveRequestController.php](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\LeaveRequest\Http\Controllers\LeaveRequestController.php)
- [ReimbursementRequest routes](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\ReimbursementRequest\routes\web.php)
- [ReimbursementRequestController.php](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\ReimbursementRequest\Http\Controllers\ReimbursementRequestController.php)
- [ForgettingClockRequest routes](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\ForgettingClockRequest\routes\web.php)
- [ForgettingClockRequestController.php](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\ForgettingClockRequest\Http\Controllers\ForgettingClockRequestController.php)
- [SuratPerintahLembur routes](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\SuratPerintahLembur\routes\web.php)
- [SuratPerintahLemburController.php](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\SuratPerintahLembur\Http\Controllers\SuratPerintahLemburController.php)

Pembacaan singkat:
1. Admin membuat flow dan step approval di master approval.
2. Modul sumber membuat draft transaksi.
3. Saat submit, sistem membuat `approval_requests` dan menyalin step aktif ke `approval_request_steps`.
4. Step aktif diproses satu per satu atau lewat bulk action.
5. Jika masih ada step berikutnya, status tetap `in_review`.
6. Jika step terakhir approve, transaksi sumber menjadi `approved`.
7. Jika reject, transaksi sumber menjadi `rejected` dan alasan ditulis ke request.

Catatan penting:
- Pola ini cocok dipakai ulang untuk modul lain selama ada `module_key`, `reference_type`, dan `reference_id`.
- `cancel submit` dan `unapprove` tidak tersedia di semua modul, jadi itu digambar sebagai cabang opsional.
- Bulk action pada dasarnya tetap lewat engine yang sama, hanya inputnya banyak baris sekaligus.

Langkah lanjutan yang cocok:
- buat sequence diagram per modul
- buat audit matrix siapa boleh approve apa
- buat map notifikasi approval per step
