# Report Test 3 (ISHIHARA)

## Overview

Test 3 (Ishihara) adalah tes buta warna. Terdiri dari 24 soal berupa gambar plat berwarna (ishihara plates). Peserta menjawab angka yang terlihat pada setiap plat.

## Flow Data

```
applicant_answers (answer: string jawaban user)
        │
        ▼
mst_test3 (question_number, answer_key)
        │
        ▼
Per-soal: strtoupper(answer) === strtoupper(answer_key)
        │
        ▼
        │
        ▼
Hitung ulang dengan grup soal (matching old app msjhr):
  - Soal 1: gate — jika salah → BUTA WARNA TOTAL (break)
  - Soal 2-21: → hitungBenar (+1) / hitungSalah (+1)
  - Soal 22-24: → hitungBenar2 (+1) / hitungSalah2 (+1)
        │
        ▼
Hasil Akhir:
  - Soal 1 salah                → BUTA WARNA TOTAL
  - hitungSalah > 3             → BUTA WARNA PARSIAL
  - hitungBenar ≤ 12 && hitungBenar2 == 1 → BUTA WARNA PARSIAL
  - hitungBenar2 == 2           → BUTA WARNA PARSIAL
  - hitungBenar ≥ 14            → NORMAL
  - hitungBenar2 ≥ 3            → NORMAL
  - Selain itu                  → TIDAK VALID
```

## Database Tables

| Table | Role |
|---|---|
| `mst_test3` | 24 soal Ishihara — image_url (plat gambar), answer_key (angka) |
| `applicant_answers` | Jawaban user (`answer` = angka yang dijawab) |

### `mst_test3`

| Column | Desc |
|---|---|
| `question_number` | Nomor soal (1-24) |
| `image_url` | Path gambar plat ishihara |
| `answer_key` | Kunci jawaban (angka) |
| `page_num` | Halaman saat test |

## Method: `getTest3Data($test3Session)`

1. Iterasi semua jawaban, kumpulkan detail per-soal
2. Urutkan berdasarkan nomor soal
3. Grup soal:
   - **Soal 1**: gate — jika salah → `BUTA WARNA TOTAL` (break)
   - **Soal 2-21**: dihitung sebagai `hitungBenar` / `hitungSalah`
   - **Soal 22-24**: dihitung sebagai `hitungBenar2` / `hitungSalah2`
4. Tentukan `hasil_akhir` (matching old app msjhr):
   - `hitungSalah > 3` → `BUTA WARNA PARSIAL`
   - `hitungBenar <= 12 && hitungBenar2 == 1` → `BUTA WARNA PARSIAL`
   - `hitungBenar2 == 2` → `BUTA WARNA PARSIAL`
   - `hitungBenar >= 14` → `NORMAL`
   - `hitungBenar2 >= 3` → `NORMAL`
   - selain itu → `TIDAK VALID`

## View Components (`test3.blade.php`)

### Screen View
| Komponen | Detail |
|---|---|
| **Card Total Benar** | Hijau — tampilkan `total_benar` |
| **Card Total Salah** | Merah — tampilkan `total_salah` |
| **Card Hasil Akhir** | Warna dinamis: merah (BUTA WARNA TOTAL), kuning (BUTA WARNA PARSIAL), hijau (NORMAL) |
| **Tabel Detail** | 2 kolom × 12 baris — No, User, Kunci, Status (Benar/Salah) |
| **Keterangan Penilaian** | 3 aturan penilaian Ishihara |

### Print View
- Kop dokumen + identitas kandidat
- Tabel detail jawaban + kolom KETERANGAN
- Summary Benar/Salah + Hasil Tes

## Struktur Data Return

```php
[
    'total_benar' => int,
    'total_salah' => int,
    'hasil_akhir' => string,  // 'NORMAL' | 'BUTA WARNA TOTAL' | 'BUTA WARNA PARSIAL'
    'details' => [
        ['no' => int, 'user' => string, 'kunci' => string, 'is_correct' => bool],
        ...
    ],
]
```
