# Guide Cara Pakai: Profil Jadwal Kerja Bulanan & Override Shift Tanggal Tertentu

## 1. Tujuan
Panduan ini untuk penggunaan jadwal kerja bulanan saat:
- karyawan punya jadwal kerja default dalam 1 bulan,
- ada perubahan shift hanya di tanggal tertentu (misalnya tanggal A).

## 2. Konsep Utama
1. **Profil Bulanan** = default jadwal kerja untuk karyawan di bulan tersebut.
2. **Override Shift Harian** = pengecualian jadwal hanya untuk tanggal tertentu.
3. Payroll/absensi selalu membaca:
- override harian dulu (jika ada),
- jika tidak ada, pakai jadwal default profil bulanan.

## 3. Alur Pakai Normal
### Langkah 1: Siapkan master profil jam kerja
Masuk ke:
- `Master Profil Jam Kerja`

Buat profil seperti:
- `OFFICE-5D` (08:00-17:00),
- `SHIFT-1` (07:00-15:00),
- `SHIFT-2` (15:00-23:00).

### Langkah 2: Buat profil bulan
Masuk ke:
- `Master Profil Bulan`

Isi:
- kode/nama profil,
- periode awal-akhir,
- tanggal tutup buku,
- aturan kontrak/cuti/THR.

### Langkah 3: Assign karyawan ke profil bulan
Di bagian assignment karyawan:
- pilih karyawan,
- pilih **Profil Jadwal Kerja Bulanan** (wajib),
- isi data kontrak dan komponen.

Hasil: karyawan sudah punya jadwal default untuk 1 bulan itu.

## 4. Jika Ada Perubahan Shift di Tanggal A
Contoh:
- Default karyawan = `SHIFT-1`,
- tanggal `2026-03-14` harus pindah ke `SHIFT-2`.

### Cara input (disarankan)
Buat **override shift harian** berisi:
- `profil_bulan_id`
- `karyawan_id`
- `work_date` (contoh `2026-03-14`)
- `old_profil_jam_kerja_id` (opsional, untuk jejak)
- `new_profil_jam_kerja_id` (wajib)
- `reason` (alasan)
- `approved_by` (opsional sesuai alur approval)

### Aturan validasi
1. Tidak boleh duplikat `karyawan + work_date` dalam profil bulan yang sama.
2. Tanggal override harus berada dalam range periode profil bulan.
3. Jika periode sudah `closed`, perubahan lewat mekanisme adjustment.

## 5. Cara Mesin Hitung (Absensi/Payroll)
Untuk setiap tanggal kerja:
1. Cek apakah ada override shift harian.
2. Jika ada, pakai shift override.
3. Jika tidak ada, pakai shift default dari assignment profil bulan.

Efek:
- Telat, pulang cepat, dan lembur dihitung dari shift aktif di tanggal itu.
- Tidak perlu pecah assignment bulanan hanya karena 1-2 hari pindah shift.

## 6. Contoh Skenario
Periode Maret 2026, karyawan default `SHIFT-1`.
- 1-13 Maret: `SHIFT-1`
- 14 Maret: override ke `SHIFT-2`
- 15-31 Maret: kembali `SHIFT-1`

Absensi/payroll:
- tanggal 14 dihitung pakai jam `SHIFT-2`,
- tanggal lain tetap `SHIFT-1`.

## 7. SOP Operasional Singkat
1. Admin HR set profil bulan dan assignment karyawan.
2. Supervisor ajukan perubahan shift tanggal tertentu.
3. HR/Approver validasi dan approve override.
4. Sistem lock data saat tutup buku.
5. Perubahan setelah lock masuk adjustment periode berikutnya.

## 8. Checklist Implementasi Teknis (untuk developer)
1. Tabel override shift harian.
2. API CRUD override per profil bulan.
3. UI input override di halaman detail profil bulan.
4. Engine resolver shift per tanggal (override > default).
5. Audit trail perubahan.
6. Validasi lock periode closed.

