# Quick Reference: Multi-Sesi Absensi

## 🎯 Tujuan Fitur

Memungkinkan absensi **multiple session per hari** dengan validasi waktu otomatis.

**Contoh:** FGD 8 jam dengan 4 sesi (Pagi, Siang, Sore, Malam)

---

## 🚀 Start Here

### Step 1: Buat Sesi
```
Admin → Sesi → Tambah
├─ Nama: "Sesi 1"
├─ Jam Mulai: 07:00
├─ Jam Selesai: 09:00
└─ Klik Simpan
```

### Step 2: Peserta Absen
```
QR Code Scan → Pilih Sesi → Auto-Validasi
├─ ✅ Tepat waktu (sebelum jam mulai)
├─ ✅ Terlambat (setelah jam mulai, sebelum jam selesai)
└─ ❌ Ditolak (setelah jam selesai)
```

---

## 📋 Menu & URL

| Fitur | URL | Akses |
|-------|-----|-------|
| List Sesi | `/admin/sesi` | Menu → Sesi |
| Buat Sesi | `/admin/sesi/create` | Tombol "Tambah" |
| Edit Sesi | `/admin/sesi/edit/[id]` | Tombol "Edit" |
| Hapus Sesi | `/admin/sesi/delete/[id]` | Tombol "Hapus" |
| Absensi Scan | `/scan` | Public QR |

---

## 📊 Contoh Setup

### FGD 4 Sesi

| Sesi | Mulai | Selesai | Durasi |
|------|-------|---------|--------|
| 1    | 07:00 | 09:00   | 2 jam  |
| 2    | 09:15 | 11:15   | 2 jam  |
| 3    | 12:30 | 14:30   | 2 jam  |
| 4    | 14:45 | 16:45   | 2 jam  |

**Total: 8 jam (dengan 2 jam break)**

---

## ⏰ Validasi Waktu (Otomatis)

### Sesi 1: 07:00 - 09:00

| Jam Absen | Hasil | Keterangan |
|-----------|-------|-----------|
| 06:45     | ✅    | Tepat waktu (0 min terlambat) |
| 07:00     | ✅    | Tepat waktu (0 min terlambat) |
| 07:30     | ✅    | Terlambat 30 menit |
| 08:59     | ✅    | Terlambat 119 menit |
| 09:00     | ✅    | Terlambat 120 menit (last second) |
| **09:01** | **❌** | **Sesi berakhir** (DITOLAK) |
| 10:00     | ❌    | Sesi berakhir (DITOLAK) |

---

## 🎮 Screenshot Flow

```
┌─────────────────┐
│  QR Code Page   │
│    /scan        │
│                 │
│ Scan QR Code   │
└────────┬────────┘
         │
┌────────▼──────────────────┐
│  Dropdown Sesi            │
│                           │
│ ☐ Sesi 1 (07:00 - 09:00) │
│ ☐ Sesi 2 (09:15 - 11:15) │
│ ☐ Sesi 3 (12:30 - 14:30) │
│ ☐ Sesi 4 (14:45 - 16:45) │
│                           │
│ Pilih sesi → Submit       │
└────────┬──────────────────┘
         │
         ├─ Validasi Waktu
         │  ├─ Valid? → Continue
         │  └─ Invalid? → Show Error
         │
┌────────▼──────────────────┐
│  Success / Error          │
│                           │
│ ✅ Absensi Diterima      │
│    (Terlambat 30 menit)  │
│                           │
│ Atau                      │
│                           │
│ ❌ Sesi Telah Berakhir   │
│    pada jam 09:00        │
└───────────────────────────┘
```

---

## 🛠️ Admin Tasks

### Daily Setup (Setiap Pagi)
```
1. Login Admin
2. Klik Sesi
3. Verify semua sesi hari ini:
   - Semua aktif? (Cek checkbox)
   - Jam sudah benar? (Jika perlu ubah)
4. Selesai! Peserta bisa absen
```

### End-of-Day (Setiap Sore)
```
1. Lihat data absensi hasil hari ini
2. Export ke report jika perlu
3. Nonaktifkan sesi yang sudah selesai (optional)
```

### Edit Sesi (Jika Ada Perubahan)
```
1. Klik Sesi → Pilih Edit
2. Ubah Jam Mulai/Selesai jika perlu
3. Klik Simpan
4. Peserta akan validasi dengan jam baru
```

---

## ⚠️ Penting!

### ✅ HARUS DILAKUKAN
- ✅ Set jam_mulai lebih awal dari jam_selesai
- ✅ Beri gap antar sesi (10-15 menit)
- ✅ Nama sesi harus deskriptif
- ✅ Pastikan jam server akurat

### ❌ JANGAN LAKUKAN
- ❌ Buat sesi dengan waktu overlapping
- ❌ Ubah jam_selesai terlalu siang
- ❌ Delete sesi yang sedang berjalan
- ❌ Buat 50+ sesi dalam satu hari

---

## 🆘 Troubleshooting

### Masalah: "Sesi Telah Berakhir" (Meski masih jam kerja)

**Cek:**
1. Lihat jam di sudut laptop → Sama dengan server?
2. Lihat jam_selesai sesi → Sudah lewat?
3. Solusi: Edit sesi, naikkan jam_selesai

### Masalah: Dropdown Sesi Kosong

**Cek:**
1. Sudah buat sesi?
2. Sesi aktif (checkbox on)?
3. Solusi: Buat sesi baru + aktifkan

### Masalah: Peserta Sudah Absen Tapi Mau Ubah

**Solusi:**
1. Admin ke menu "Edit Absensi"
2. Cari peserta & sesi
3. Ubah jam_masuk jika perlu
4. Keterlambatan auto-recalculate

---

## 💡 Tips Praktis

### Tip 1: Buat Template Sesi
Jika setiap hari pola sama, buat 4-8 sesi sekali selamanya.

### Tip 2: Nonaktifkan, Jangan Hapus
Kalo ada hari libur, nonaktifkan sesi daripada hapus (data aman).

### Tip 3: Gap Waktu Antar Sesi
```
✅ Baik: Sesi 1 (07:00-09:00) → Sesi 2 (09:15-11:15)
❌ Kurang: Sesi 1 (07:00-09:00) → Sesi 2 (09:00-11:00)
```

### Tip 4: Monitor Waktu Server
Jika ada banyak error "Sesi Berakhir", check timezone di `.env`.

---

## 📞 Support

### FAQ

**Q: Bisa 8 sesi dalam sehari?**
A: Ya! Bisa berapa aja. Setup sesuai kebutuhan.

**Q: Berapa menit grace period?**
A: Tidak ada. Sistem strict - absensi harus sebelum jam selesai.

**Q: Data lama absensi gimana?**
A: Tetap ada di database. Bisa lihat di laporan.

**Q: Bisa ubah jam sesi saat peserta sedang absen?**
A: Bisa, tapi hati-hati. Validasi peserta berikutnya pakai jam baru.

---

## 🎓 Training Video (Recommended)

Lihat file: `PANDUAN_SESI_ABSENSI.md` untuk guide lengkap dengan screenshot.

---

**Last Updated:** 2026-07-10
**Version:** 1.0
