PAUD Attendance Manual E2E UAT Runbook¶
Runbook manual untuk menguji fitur absensi siswa PAUD: pencatatan kedatangan dengan suhu badan, kepulangan, opsi input manual/RFID, dan integrasi dengan absensi setiap jam pelajaran.
Last verified: 2026-06-08
Mode: server development
Workspace root: /home/scola/odoo
Audience: QA, operator sekolah, admin, wali kelas, implementor lapangan
Related domain: Absensi & RFID
Dokumen acuan yang wajib dibaca sebelum eksekusi UAT: - Development Guide - Workspace Governance - Architecture API - Testing Guidelines
1. Tujuan¶
Pakai runbook ini untuk memastikan fitur absensi PAUD berjalan end-to-end: - Admin bisa mengatur mode absensi siswa dari Settings sebagai sumber konfigurasi utama. - Admin atau operator absensi yang diberi hak akses bisa mencatat kedatangan siswa PAUD beserta suhu badan. - Admin atau operator absensi yang diberi hak akses bisa mencatat kepulangan siswa di akhir sekolah. - RFID dapat dipakai sebagai metode kedatangan/kepulangan jika diaktifkan. - Absensi setiap jam pelajaran tetap berjalan sendiri dan tidak tercampur dengan data kedatangan/kepulangan. - Orang tua, siswa, admin, kepala sekolah, dan laporan melihat data yang konsisten tanpa hitung ganda.
UAT dinyatakan PASS jika konfigurasi, input harian, tampilan lintas role, dan rekap berjalan sesuai pass criteria di bawah.
2. Scope¶
In Scope¶
- Settings Admin tab
Pengaturan Absensi - Mode
Kedatangan & Kepulangan - Metode
Manual oleh petugas - Metode
RFID - Opsi PAUD pencatatan suhu saat kedatangan
- Validasi suhu wajib jika diaktifkan
- Ambang demam
- Halaman
Kedatangan & Kepulangan Siswa - Check-in manual
- Check-out manual
- RFID gate-in/gate-out sebagai adapter
- Absensi setiap jam pelajaran saat mode per-lesson aktif
- Student/parent attendance view
- Admin/principal reporting agar
arrival_departuredanper_lessontidak dihitung ganda
Out of Scope¶
- Kalibrasi alat ukur suhu fisik
- Integrasi hardware RFID offline buffering
- Validasi medis klinis terhadap suhu siswa
- Payroll atau absensi pegawai
- Perubahan legal kebijakan sekolah terkait batas demam
3. Environment¶
Gunakan environment server dev yang aktif.
| Item | Nilai baseline |
|---|---|
| Workspace root | /home/scola/odoo |
| Frontend dev/deployed | https://dev.gcgscola.id |
| Backend dev local | http://127.0.0.1:8074 |
| Database dev | scoladev |
| API architecture | same-origin /api, tidak memakai VITE_API_URL produksi |
Pre-flight cepat:
cd /home/scola/odoo
curl -sf http://127.0.0.1:8074/web/login
curl -sf https://dev.gcgscola.id/manifest.webmanifest
Jika salah satu gagal, hentikan UAT dan minta tim dev memperbaiki environment dulu.
4. Data dan Role Uji¶
Siapkan data berikut sebelum UAT:
| Data | Minimum |
|---|---|
| Kelas PAUD | 1 batch aktif dengan minimal 3 siswa aktif |
| Siswa A | Untuk check-in suhu normal dan check-out |
| Siswa B | Untuk check-in suhu demam |
| Siswa C | Untuk validasi belum datang / belum pulang |
| Wali kelas/guru | Punya akses absensi siswa |
| Admin/operator absensi | Punya akses halaman kedatangan/kepulangan |
| Orang tua | Terhubung ke minimal Siswa A |
| RFID card | Minimal 1 kartu terdaftar untuk Siswa A jika skenario RFID diuji |
| RFID device | Minimal 1 device aktif jika skenario RFID diuji |
Role yang dipakai:
| Role | Tanggung jawab UAT |
|---|---|
| Admin | Konfigurasi mode absensi di Settings, monitoring laporan, dan boleh melakukan input harian untuk baseline UAT |
| Admin Staff/TU sebagai operator absensi | Best practice untuk input kedatangan/kepulangan harian jika sekolah mendelegasikan operasional absensi ke TU/operator |
| Guru/Wali Kelas | Validasi flow per jam pelajaran dan akses roster |
| Orang Tua | Melihat ringkasan kedatangan/pulang anak |
| Siswa | Melihat riwayat kehadiran pribadi jika portal siswa aktif |
| Principal/Wakasek | Memeriksa rekap tanpa hitung ganda |
Catatan akun:
- Gunakan akun tenant/dev yang valid.
- Untuk UAT baseline, konfigurasi selalu dilakukan dengan akun Admin.
- Untuk input harian, best practice operasional adalah akun Admin Staff/TU atau operator absensi yang diberi hak students.attendance.edit. Jika tenant belum punya akun TU/operator yang valid, gunakan akun Admin sebagai fallback UAT.
- Istilah operator absensi atau petugas di dokumen ini bukan role teknis baru. Artinya aktor operasional sekolah yang melakukan input harian.
- Jangan hard-code password baru di dokumen.
- Jika smoke Playwright diperlukan, override backend dev dengan E2E_ODOO_URL=http://127.0.0.1:8074.
Menu dan alur operasional yang benar¶
Konfigurasi mode absensi:
- Role: Admin.
- Menu: Settings -> Pengaturan Sekolah -> tab Pengaturan Absensi.
- Deep link: /settings/company?tab=attendance.
- Fungsi: mengaktifkan/mematikan mode kedatangan-kepulangan, memilih metode manual/RFID, mengaktifkan suhu PAUD, dan mengatur per jam pelajaran.
Input kedatangan dan kepulangan harian:
- Role best practice: Admin Staff/TU atau operator absensi yang diberi hak attendance edit.
- Role fallback UAT: Admin.
- Menu Admin: Kehadiran Siswa -> Kedatangan & Kepulangan.
- Menu Admin Staff/TU: Admin Staff -> Siswa -> Kehadiran, lalu pilih kartu Kedatangan & Kepulangan.
- Route langsung: /attendance/daily.
Absensi setiap jam pelajaran:
- Role best practice: Guru atau Wali Kelas.
- Menu: Faculty -> Kehadiran Siswa atau halaman absensi per sesi.
- Route utama guru: /faculty/attendance.
5. Cara Mencatat Hasil¶
Gunakan status:
- PASS: hasil sesuai ekspektasi.
- FAIL: hasil berbeda atau data tidak konsisten.
- BLOCKED: tidak bisa lanjut karena akun, seed, device, atau environment belum siap.
- SKIP: skenario tidak relevan dengan konfigurasi sekolah yang sedang diuji.
Template catatan:
| ID | Role | Status | Bukti | Catatan |
|---|---|---|---|---|
| PAUD-01 | Admin | PASS | screenshot settings | Mode tersimpan dan terbaca ulang |
Untuk setiap FAIL, simpan:
- screenshot halaman
- akun yang dipakai
- tanggal UAT
- kelas/batch
- nama siswa
- suhu yang diinput
- expected vs actual
6. Konfigurasi Baseline yang Harus Diuji¶
Uji minimal 3 kombinasi konfigurasi berikut.
| Matrix | Kedatangan/Kepulangan | Metode | Suhu PAUD | Suhu wajib | Per Jam Pelajaran |
|---|---|---|---|---|---|
| M1 | Aktif | Manual petugas | Aktif | Aktif | Aktif |
| M2 | Aktif | RFID | Aktif | Aktif | Aktif |
| M3 | Nonaktif | - | Nonaktif | Nonaktif | Aktif |
| M4 optional | Aktif | Manual petugas | Aktif | Nonaktif | Nonaktif |
Default expected setelah upgrade:
- Kedatangan/Kepulangan: nonaktif
- Setiap Jam Pelajaran: aktif
- Sistem lama absensi per jam pelajaran tetap bisa digunakan.
7. Smoke Check¶
PAUD-SM-01 - Admin membuka Settings Absensi¶
Role: Admin
Langkah:
1. Login sebagai admin.
2. Buka Settings.
3. Buka tab Pengaturan Absensi.
4. Cari section Mode Absensi Siswa.
Expected:
- Section mode absensi siswa tampil.
- Ada toggle Kedatangan & Kepulangan.
- Ada toggle Setiap Jam Pelajaran.
- Jika kedatangan/kepulangan aktif, pilihan metode manual/RFID tampil.
- Jika kedatangan/kepulangan aktif, opsi PAUD suhu tampil.
PAUD-SM-02 - Menu Attendance sesuai mode¶
Role: Admin
Langkah:
1. Aktifkan Kedatangan & Kepulangan.
2. Simpan Settings.
3. Buka menu Attendance/Kehadiran.
Expected:
- Menu Kedatangan & Kepulangan tampil.
- Menu Lembar Kehadiran Jam Pelajaran tetap tampil jika per-lesson aktif.
- Jika per-lesson dimatikan, menu per-lesson tidak menjadi primary flow.
PAUD-SM-03 - Roster harian terbuka¶
Role: Admin atau Wali Kelas
Langkah:
1. Buka halaman Kedatangan & Kepulangan Siswa.
2. Pilih tanggal hari ini.
3. Pilih kelas PAUD.
4. Klik muat/cari roster.
Expected: - Daftar siswa tampil. - Kolom status datang/pulang/source tampil. - Jika suhu PAUD aktif, input suhu tersedia saat check-in. - Tidak ada error API.
8. Skenario Utama Manual¶
PAUD-01 - Settings menolak semua mode nonaktif¶
Role: Admin
Langkah:
1. Buka Settings Pengaturan Absensi.
2. Matikan Kedatangan & Kepulangan.
3. Matikan Setiap Jam Pelajaran.
4. Simpan.
Expected: - Sistem menolak konfigurasi. - Pesan validasi menyatakan minimal salah satu mode absensi siswa harus aktif. - Nilai sebelumnya tidak rusak.
PAUD-02 - Aktifkan mode manual PAUD dengan suhu wajib¶
Role: Admin
Langkah:
1. Aktifkan Kedatangan & Kepulangan.
2. Pilih metode Manual oleh petugas.
3. Aktifkan Pencatatan suhu PAUD.
4. Aktifkan Suhu wajib.
5. Set ambang demam, contoh 37.5.
6. Pastikan Setiap Jam Pelajaran tetap aktif.
7. Simpan.
8. Reload halaman Settings.
Expected: - Semua nilai tersimpan dan tetap tampil setelah reload. - Method tersimpan sebagai manual petugas. - Ambang demam tampil dengan nilai yang benar.
PAUD-03 - Check-in manual suhu normal¶
Role: Admin
Data:
- Siswa A
- Suhu: 36.5
Langkah:
1. Buka Kedatangan & Kepulangan Siswa.
2. Pilih tanggal hari ini dan kelas PAUD.
3. Cari Siswa A.
4. Isi suhu 36.5.
5. Klik check-in/datang.
Expected:
- Status datang berubah menjadi hadir/datang.
- Waktu datang terisi.
- Suhu tampil 36.5.
- Status suhu normal.
- Source tampil manual_operator.
- Siswa belum otomatis dianggap pulang.
- Roster tidak membuat baris duplikat untuk siswa yang sama.
PAUD-04 - Check-in manual suhu demam¶
Role: Admin
Data:
- Siswa B
- Suhu: 38.0
Langkah:
1. Cari Siswa B di roster yang sama.
2. Isi suhu 38.0.
3. Klik check-in/datang.
Expected:
- Status datang tercatat.
- Suhu tampil 38.0.
- Status suhu menunjukkan demam/fever.
- Jika UI punya indikator warna/peringatan, indikator muncul jelas.
- Data tetap tersimpan walaupun suhu melewati ambang, kecuali kebijakan sekolah meminta blokir.
PAUD-05 - Suhu wajib tidak boleh kosong¶
Role: Admin
Data: - Siswa C
Langkah: 1. Pastikan suhu PAUD aktif dan wajib. 2. Cari Siswa C. 3. Kosongkan input suhu. 4. Klik check-in/datang.
Expected: - Sistem menolak check-in. - Pesan validasi menyebut suhu wajib diisi. - Siswa C tetap belum datang. - Tidak ada attendance line baru yang tersimpan.
PAUD-06 - Check-in ulang idempotent¶
Role: Admin
Data:
- Siswa A yang sudah check-in
- Suhu baru: 36.8
Langkah:
1. Pada Siswa A, ubah suhu menjadi 36.8 jika UI mengizinkan edit/check-in ulang.
2. Klik check-in lagi.
3. Reload roster.
Expected: - Tetap hanya ada satu baris attendance untuk Siswa A pada tanggal dan scope kedatangan/kepulangan. - Waktu datang tidak menghasilkan duplikasi. - Suhu mengikuti aturan UI/API: tetap nilai awal atau ter-update dengan jelas. - Tidak ada double-count di ringkasan.
PAUD-07 - Check-out manual¶
Role: Admin
Data: - Siswa A yang sudah check-in.
Langkah: 1. Cari Siswa A. 2. Klik check-out/pulang. 3. Reload roster.
Expected:
- Waktu pulang terisi.
- Status pulang berubah menjadi sudah pulang.
- Waktu datang dan suhu tetap ada.
- Source check-in tetap manual_operator.
- Check-out tidak mengubah nilai absensi setiap jam pelajaran.
PAUD-08 - Check-out sebelum check-in¶
Role: Admin
Data: - Siswa C belum check-in.
Langkah: 1. Cari Siswa C. 2. Klik check-out/pulang tanpa check-in.
Expected: - Sistem memberi perilaku yang jelas sesuai aturan bisnis: - menolak karena belum datang, atau - membuat catatan pulang dengan indikasi belum ada waktu datang. - Tidak ada crash atau data duplikat. - Jika ditolak, Siswa C tetap belum datang/belum pulang.
PAUD-09 - Per jam pelajaran tetap terpisah¶
Role: Guru atau Wali Kelas
Precondition: - Kedatangan/kepulangan aktif. - Per jam pelajaran aktif. - Siswa A sudah check-in harian.
Langkah: 1. Login sebagai guru. 2. Buka halaman absensi setiap jam pelajaran. 3. Pilih sesi pelajaran hari ini untuk kelas PAUD. 4. Isi absensi Siswa A dan B. 5. Simpan. 6. Kembali ke halaman kedatangan/kepulangan.
Expected:
- Absensi sesi tersimpan sebagai data per jam pelajaran.
- Kedatangan/kepulangan harian tidak berubah.
- Rekap admin bisa membedakan arrival_departure dan per_lesson.
- Tidak ada double-count saat melihat summary harian.
PAUD-10 - Per jam pelajaran nonaktif menolak input sesi¶
Role: Admin, lalu Guru
Langkah:
1. Admin buka Settings.
2. Aktifkan Kedatangan & Kepulangan.
3. Matikan Setiap Jam Pelajaran.
4. Simpan.
5. Guru buka flow absensi setiap jam pelajaran.
Expected: - UI menyembunyikan atau menonaktifkan flow per-session. - Jika endpoint per-session tetap dipanggil, backend menolak write dengan error terstruktur. - Kedatangan/kepulangan tetap bisa dipakai.
PAUD-11 - Mode kedatangan/kepulangan nonaktif menolak daily write¶
Role: Admin
Langkah:
1. Admin matikan Kedatangan & Kepulangan.
2. Pastikan Setiap Jam Pelajaran aktif.
3. Admin buka halaman daily attendance atau panggil aksi check-in jika masih terlihat.
Expected: - Menu daily attendance tidak ditampilkan sebagai opsi aktif. - Jika API check-in/check-out dipanggil langsung, backend menolak dengan error terstruktur. - Flow absensi setiap jam pelajaran tetap berjalan.
9. Skenario RFID¶
Jalankan bagian ini hanya jika sekolah/tenant memakai RFID dan device uji tersedia.
PAUD-RFID-01 - Settings method RFID¶
Role: Admin
Langkah:
1. Aktifkan Kedatangan & Kepulangan.
2. Pilih metode RFID.
3. Aktifkan suhu PAUD sesuai kebutuhan sekolah.
4. Simpan.
5. Reload Settings.
Expected: - Method RFID tersimpan. - Detail konfigurasi RFID tetap ada di modul RFID, bukan di Settings umum. - Menu daily attendance tetap dapat dipakai untuk monitoring/fallback sesuai hak akses.
PAUD-RFID-02 - RFID gate-in membuat kedatangan¶
Role: Admin atau operator RFID
Data: - Kartu RFID Siswa A sudah aktif. - Device RFID aktif.
Langkah:
1. Tap kartu Siswa A di device/gate-in.
2. Buka RFID events.
3. Buka halaman Kedatangan & Kepulangan Siswa.
4. Cari Siswa A.
Expected:
- Event RFID tercatat.
- Attendance daily Siswa A tercatat sebagai datang.
- Source tampil rfid.
- Register/sheet harian valid dan tidak error required field.
- Jika suhu PAUD wajib, cek kebijakan tenant:
- RFID boleh mencatat datang tanpa suhu lalu flagged perlu suhu, atau
- RFID ditolak dari attendance line dan hanya menjadi event log.
Catat perilaku aktual karena kebijakan suhu dengan RFID harus diputuskan sekolah.
PAUD-RFID-03 - RFID gate-out membuat kepulangan¶
Role: Admin atau operator RFID
Langkah: 1. Setelah Siswa A sudah datang, tap kartu di gate-out. 2. Buka halaman daily attendance. 3. Cari Siswa A.
Expected: - Waktu pulang terisi. - Source RFID tetap jelas. - Check-out tidak mengubah absensi per jam pelajaran. - Tidak membuat line kedua untuk tanggal yang sama.
PAUD-RFID-04 - RFID method nonaktif hanya mencatat event log¶
Role: Admin
Langkah:
1. Ubah metode kedatangan/kepulangan ke Manual oleh petugas.
2. Tap kartu RFID Siswa A.
3. Buka RFID events.
4. Buka daily attendance.
Expected: - Event RFID tetap tercatat sebagai log. - Daily attendance tidak dibuat/diubah oleh event RFID. - Tidak ada data hadir otomatis dari RFID saat method bukan RFID.
10. Tampilan Lintas Role¶
PAUD-VIEW-01 - Parent melihat ringkasan anak¶
Role: Orang Tua
Langkah: 1. Login sebagai orang tua Siswa A. 2. Buka halaman kehadiran anak. 3. Pilih tanggal UAT.
Expected: - Ringkasan kedatangan/pulang harian tampil jika mode aktif. - Suhu tampil hanya jika memang boleh ditampilkan sesuai kebijakan aplikasi. - Detail per jam pelajaran tampil terpisah jika mode per-lesson aktif. - Tidak ada duplikasi satu hari yang sama.
PAUD-VIEW-02 - Student melihat riwayat pribadi¶
Role: Siswa
Langkah: 1. Login sebagai Siswa A. 2. Buka halaman kehadiran. 3. Pilih tanggal UAT.
Expected: - Data datang/pulang pribadi tampil. - Detail per jam pelajaran tidak tercampur dengan ringkasan harian. - Tidak ada data siswa lain.
PAUD-VIEW-03 - Admin/principal rekap tidak double-count¶
Role: Admin, Principal, atau Wakasek
Langkah: 1. Buka laporan/rekap kehadiran. 2. Filter kelas PAUD dan tanggal UAT. 3. Bandingkan jumlah siswa datang harian dengan jumlah absensi sesi.
Expected: - Laporan membedakan scope kedatangan/kepulangan dan per jam pelajaran. - Jika ada 1 daily line dan 3 lesson lines untuk siswa yang sama, sistem tidak menghitung sebagai 4 kehadiran harian. - Filter/label laporan cukup jelas untuk auditor sekolah.
11. Verifikasi API Opsional¶
Gunakan hanya jika tester punya akses teknis.
Login via API atau gunakan session browser yang valid, lalu cek endpoint:
curl -sf https://dev.gcgscola.id/api/v1/attendance/student/settings
Endpoint yang perlu diverifikasi melalui browser/devtools atau API client:
| Endpoint | Expected |
|---|---|
POST /api/v1/attendance/student/settings |
Mengembalikan mode absensi siswa yang sudah dinormalisasi |
POST /api/v1/attendance/daily/roster |
Mengembalikan roster kelas dan status daily |
POST /api/v1/attendance/daily/check-in |
Membuat/update line daily arrival |
POST /api/v1/attendance/daily/check-out |
Mengisi waktu pulang |
POST /api/v1/attendance/daily/summary |
Summary tidak menghitung ganda per-lesson |
Expected payload penting:
- attendance_scope = arrival_departure untuk daily line.
- attendance_scope = per_lesson untuk absensi sesi.
- attendance_source = manual_operator atau rfid sesuai metode.
- body_temperature_celsius terisi saat suhu PAUD diinput.
- temperature_status sesuai ambang demam.
12. Negative and Edge Cases¶
| ID | Skenario | Expected |
|---|---|---|
| PAUD-NEG-01 | Input suhu teks, contoh abc |
Ditolak dengan validasi angka |
| PAUD-NEG-02 | Input suhu terlalu rendah, contoh 20 |
Ditolak atau flagged sesuai rule validasi |
| PAUD-NEG-03 | Input suhu terlalu tinggi, contoh 45 |
Ditolak atau flagged sesuai rule validasi |
| PAUD-NEG-04 | Check-in siswa dari kelas lain | Tidak muncul di roster, atau ditolak API |
| PAUD-NEG-05 | User tanpa hak akses membuka daily attendance | Redirect/403, tidak bisa melihat data siswa |
| PAUD-NEG-06 | Dua operator atau admin check-in siswa yang sama | Tetap satu line, tidak duplikat |
| PAUD-NEG-07 | Tanggal libur/nonaktif | Roster kosong atau pesan jelas sesuai kalender akademik |
| PAUD-NEG-08 | RFID kartu tidak dikenal | Event log tercatat error, attendance tidak berubah |
13. Sign-Off Checklist¶
| Area | PASS? | Catatan |
|---|---|---|
| Settings Admin menyimpan mode dengan benar | ||
| Validasi minimal satu mode aktif berjalan | ||
| Daily roster kelas PAUD tampil | ||
| Check-in manual suhu normal berjalan | ||
| Check-in manual suhu demam berjalan | ||
| Suhu wajib tidak bisa kosong | ||
| Check-out berjalan | ||
| Check-in ulang tidak membuat duplikat | ||
| Per jam pelajaran tetap terpisah | ||
| Backend menolak write saat mode nonaktif | ||
| Parent/student view konsisten | ||
| Admin/principal report tidak double-count | ||
| RFID gate-in/gate-out berjalan jika method RFID aktif | ||
| RFID hanya event log jika method bukan RFID |
UAT bisa ditandatangani jika semua area wajib PASS, atau area yang tidak relevan diberi SKIP dengan alasan yang jelas.
14. Evidence yang Harus Dikumpulkan¶
Minimum evidence:
- Screenshot Settings Mode Absensi Siswa.
- Screenshot roster sebelum check-in.
- Screenshot Siswa A setelah check-in suhu normal.
- Screenshot Siswa B setelah check-in suhu demam.
- Screenshot Siswa A setelah check-out.
- Screenshot absensi per jam pelajaran untuk tanggal yang sama.
- Screenshot parent/student attendance view.
- Screenshot laporan admin/principal dengan filter tanggal UAT.
- Screenshot RFID event jika skenario RFID diuji.
Untuk bug: - Sertakan request/response dari browser Network tab jika masalah API. - Sertakan timestamp dan nama siswa. - Sertakan konfigurasi mode aktif saat bug terjadi.
15. Rollback UAT Data¶
Jika UAT dilakukan di tenant dev bersama: 1. Catat semua siswa dan tanggal yang dipakai. 2. Jangan hapus data produksi/manual sekolah tanpa persetujuan admin tenant. 3. Jika perlu reset data UAT, minta developer menghapus hanya attendance line tanggal UAT dan siswa UAT. 4. Kembalikan Settings ke konfigurasi awal tenant.
Konfigurasi default aman setelah UAT: - Kedatangan/kepulangan sesuai keputusan sekolah. - Per jam pelajaran aktif jika sekolah masih memakai flow lama. - Suhu PAUD aktif hanya untuk unit PAUD yang memang membutuhkan pencatatan suhu.