﻿# Catatan Flow Approval Bertingkat dan Grouping Area

## Tujuan

Mendesain approval SPL dan modul approval lain agar karyawan tidak perlu memilih approver/flow manual saat mengajukan dari Android atau web. Sistem otomatis menentukan flow berdasarkan konteks area, project, dan group karyawan.

## Prinsip Utama

- Karyawan tidak memilih approval flow.
- Backend menentukan approval flow otomatis.
- Approval mengikuti struktur operasional: area, project, group, leader.
- Flow tidak dibuat satu per satu untuk setiap project jika jumlah project banyak.
- Project baru cukup dibuatkan mapping leader/approval assignment.
- Project selesai cukup dinonaktifkan atau diberi tanggal berakhir.

## Struktur Bisnis

Contoh kondisi:

- Area 1 punya 15 project.
- Area 2 punya 6 project.
- Area 3 punya 2 group.
- Setiap project/group bisa punya leader berbeda.
- Karyawan mengikuti group masing-masing.
- SPL project harus masuk ke leader project/group yang benar.

## Prioritas Resolve Approval

Untuk SPL atau overtime, urutan pencarian approval yang disarankan:

1. Area + Project + Group
2. Area + Project
3. Area + Group
4. Project
5. Group
6. Area
7. Default module

Semakin lengkap match-nya, semakin tinggi prioritasnya.

## Contoh Mapping

| Module | Area | Project | Group | Flow | Leader |
| --- | --- | --- | --- | --- | --- |
| overtime | AREA-1 | PRJ-001 | CIVIL | FLOW-SPL-PROJECT | Budi |
| overtime | AREA-1 | PRJ-001 | MEP | FLOW-SPL-PROJECT | Sari |
| overtime | AREA-1 | PRJ-002 | CIVIL | FLOW-SPL-PROJECT | Andi |
| overtime | AREA-2 | PRJ-010 | SECURITY | FLOW-SPL-PROJECT | Dodi |
| overtime | AREA-3 | null | DAY | FLOW-SPL-GROUP | Rina |
| overtime | AREA-3 | null | NIGHT | FLOW-SPL-GROUP | Anton |

## Table Rekomendasi

Gunakan table assignment fleksibel, misalnya:

`approval_scope_assignments`

Kolom inti:

- `id`
- `module_key` contoh: `overtime`, `leave`, `reimbursement`, `forgetting_clock`
- `area_code` nullable
- `project_no` nullable
- `employee_group` nullable
- `flow_id`
- `leader_karyawan_id` nullable
- `manager_karyawan_id` nullable
- `priority`
- `effective_start_date` nullable
- `effective_end_date` nullable
- `is_active`
- timestamps

## Flow Template

Untuk banyak project baru per hari, jangan buat flow baru per project.

Gunakan template flow:

`FLOW-SPL-PROJECT`

Step:

1. `PROJECT_LEADER` dynamic
2. `PROJECT_MANAGER` dynamic/optional
3. `HRD` fixed

Yang berubah per project hanya assignment leader, bukan struktur flow.

## Alur Android SPL

Payload Android tetap sederhana:

```json
{
  "employee_code": "EMP001",
  "project_no": "PRJ-001",
  "work_date": "2026-06-18",
  "start_time": "18:00",
  "end_time": "21:00",
  "reason": "Lembur project"
}
```

Backend:

1. Resolve karyawan dari `employee_code` / `finger_id`.
2. Ambil group karyawan dari `master_karyawans.employee_group`.
3. Ambil area dari project atau master karyawan/project.
4. Cari assignment paling spesifik.
5. Set `approval_flow_id` otomatis.
6. Generate approval request.
7. Resolve dynamic approver, misalnya `PROJECT_LEADER` menjadi leader project.
8. Submit approval.

## Validasi

- Jika `project_no` ada, approval project wajib ada.
- Jika assignment tidak ditemukan, submit ditolak.
- Jika project sudah expired/nonaktif, submit ditolak.
- Jika leader project belum disetting, submit ditolak.
- Jika user mengirim `approval_flow_id`, backend tetap validasi dan boleh abaikan untuk project-based SPL.

Contoh error:

- `Approval untuk AREA-1 / PRJ-001 / CIVIL belum disetting.`
- `Leader project PRJ-001 belum dikonfigurasi.`
- `Project PRJ-001 sudah tidak aktif untuk pengajuan SPL.`

## Self Approval

Jika submitter sama dengan approver pada step tertentu:

- Personal approver sama dengan submitter: step auto-skip.
- Project leader sama dengan submitter: step leader auto-skip.
- Jika masih ada step berikutnya, lanjut ke step berikutnya.
- Jika semua step terskip, request langsung approved.

## UI Admin Rekomendasi

Tambah tab di `Master Approval`:

`Scope Assignment`

Field:

- Module
- Area
- Project
- Group
- Flow Template
- Leader
- Manager optional
- Start Date
- End Date
- Active
- Priority

## Kesimpulan

Arsitektur final:

`Android SPL -> karyawan -> area + project + group -> approval assignment -> flow template -> dynamic approver -> approval request`

Dengan model ini:

- 1000 karyawan tetap aman.
- 5 sampai 20 project baru per hari cukup tambah mapping assignment.
- User Android tidak perlu memilih approval.
- Leader project/group tetap akurat sesuai jalan project.
