# Format Test Online — Hotel University (dipakai aplikasi HotelCrew)

Setiap lesson mini punya file `KODE-test.json` di folder yang sama dengan materi HTML-nya.
App membaca JSON ini langsung untuk online testing (offline-capable: diunduh bersama materi).

```json
{
  "test_id": "GEN-L1-W01-T",
  "lesson": "GEN-L1-W01",
  "faculty": "General Studies",
  "level": 1,
  "competencies": ["GEN-01", "GEN-15"],
  "pass_grade": 80,
  "time_limit_minutes": 10,
  "shuffle_questions": true,
  "shuffle_options": true,
  "max_attempts": 3,
  "questions": [
    {
      "type": "single",
      "text": "Pertanyaan…",
      "options": ["A", "B", "C", "D"],
      "answer": 0,
      "explanation": "Muncul setelah menjawab (mode belajar) / setelah lulus (mode ujian)."
    }
  ]
}
```

- `answer` = index jawaban benar **sebelum** shuffle (app mengacak & memetakan ulang).
- **Kuis mini kelulusan = 10 soal: TEPAT 5 case study/skenario + 5 teori** (per 9 Jul 2026). Ujian akhir W12 = 20 soal. Kunci tersebar merata A/B/C/D (tiap posisi ~2–3× per file 10 soal, tanpa pola). Tiap soal punya field `lo` (alignment LO) & `why` (kenapa kunci benar + pengecoh salah, utk remedial).
- `type` lain yang didukung app: `"multi"` (answer = array index), `"truefalse"`, `"photo_single"` (options berisi path gambar), `"ordering"` (answer = urutan benar).

## Placement Test (satu file per faculty — di root folder faculty)

File: `{PREFIX}-PLACEMENT.json` (mis. `03-housekeeping/HK-PLACEMENT.json`).
Bertingkat: app menyajikan bagian L1 dulu; skor ≥ `pass_grade` membuka bagian
berikutnya; berhenti saat gagal. Hasil = level teori **provisional** —
konfirmasi akhir tetap uji praktek assessor sebelum skill matrix terisi.

```json
{
  "test_id": "HK-PLACEMENT",
  "faculty": "Housekeeping",
  "type": "placement",
  "pass_grade": 85,
  "retake_after_days": 90,
  "shuffle_questions": true,
  "shuffle_options": true,
  "sections": [
    { "level": 1, "time_limit_minutes": 20, "questions": [] },
    { "level": 2, "time_limit_minutes": 20, "questions": [] },
    { "level": 3, "time_limit_minutes": 25, "questions": [] }
  ]
}
```
(20 soal per section.) Aturan soal placement: **lebih sulit dari kuis
mingguan** — ≥70% skenario keputusan kerja; pengecoh = kesalahan yang
benar-benar dilakukan orang berpengalaman, tanpa opsi konyol; bank soal
TERPISAH dari kuis lesson (dilarang copy-paste); L4 tidak ada di placement
(jalur TTT).
- Sesi fisik (W04/W08/W12) tidak punya JSON — penilaiannya lewat form praktek assessor di app.
- Kunci jawaban tidak pernah ditampilkan di materi HTML; hanya app yang membaca JSON.
- Metadata materi HTML dibaca app dari tag `<meta name="lesson-code|competencies|duration-minutes|pass-grade">`.
