# Payroll, BPJS, THR Engine

File diagram:
- `docs/flowcharts/payroll-bpjs-thr-engine.drawio`

Fokus diagram:
- alur perhitungan payroll reguler
- jalur kalkulasi BPJS dan penyimpanan detail audit per payment
- jalur generate sampai bayar THR
- titik output: slip, tax proof, export, report

Dasar struktur yang dipakai:
- [Penggajian routes](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\Penggajian\routes\web.php)
- [PenggajianController.php](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\Penggajian\Http\Controllers\PenggajianController.php)
- [ThrController.php](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\Penggajian\Http\Controllers\ThrController.php)
- [BpjsCalculator.php](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\MasterBpjs\Support\BpjsCalculator.php)
- [MasterProfilBulan migrations](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\MasterProfilBulan\Database\migrations)
- [MasterBpjs migrations](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\MasterBpjs\Database\migrations)
- [Penggajian migrations](D:\APP\LARAVEL_DEFAULT\AHSP\app\Modules\Penggajian\Database\migrations)

Pembacaan singkat:
1. Payroll reguler dimulai dari assignment bulanan dan pay date.
2. Engine menyelesaikan billing period berdasarkan `salary_cycle_type` dan anchor date.
3. Attendance approved, override komponen, insentif, reimbursement, SPL special, NPWP, dan bank account digabung ke breakdown.
4. BPJS dihitung lewat `BpjsCalculator` memakai profile karyawan, enrollment, rate history, dan ceiling history.
5. Hasil akhir disimpan ke `payroll_payment_histories` dan detail BPJS ke `payroll_payment_bpjs_details`.
6. THR punya jalur terpisah: generate draft -> submit -> approve -> pay detail -> report year.

Catatan penting:
- Pada payroll reguler, komponen BPJS perusahaan tetap tercatat untuk report, sedangkan bagian employee yang `deduct_to_payroll` ikut memotong net payroll.
- THR tidak memakai `approval_requests` generik saat ini; statusnya dikelola langsung di tabel THR sendiri.
- PPh21 pada controller saat ini masih memakai pendekatan rate sederhana berbasis ada/tidaknya NPWP pada breakdown utama.

Langkah lanjutan yang cocok:
- buat flow detail `payroll component resolution`
- buat flow khusus `salary cycle weekly/biweekly/monthly`
- buat matrix sumber data slip payroll per kolom
