Parent Portal adalah aplikasi web tempat orang tua/wali siswa YPII masuk dengan kode OTP
(One-Time Password) yang dikirim ke email, lalu melihat dan memperbarui data anaknya.
Parent Portal tidak menyimpan data siswa sendiri — seluruh data dibaca dari dan
ditulis ke Odoo YPII pada saat halaman dibuka atau tombol simpan ditekan.
Tabel keputusan ini menetapkan apa yang dilihat orang tua pada kondisi-kondisi yang
paling sering menimbulkan pertanyaan ke Tata Usaha (TU) sekolah: mengapa kode OTP tidak
kunjung datang meskipun Parent Portal menyatakan sudah mengirimnya, mengapa data anak
tetangga tampak "tidak ada", mengapa sebuah perubahan ditolak saat disimpan, dan mengapa
menu yang sedang dibuka berpindah sendiri ke Ringkasan setelah berganti anak.
Dokumen ini bukan panduan langkah kerja. Cara masuk ke Parent Portal ada di
Login OTP Email, dan
pengenalan tampilannya ada di
Orientasi Antarmuka.
Singkatan yang dipakai: OTP (One-Time Password, kode sekali pakai), TU (Tata Usaha),
IP (Internet Protocol, alamat jaringan perangkat), TTL (Time To Live, masa berlaku kode).
| Kondisi | Yang dilihat pengguna | Keterangan teknis |
|---|---|---|
| Email yang dimasukkan tidak terdaftar di Odoo YPII, atau terdaftar tetapi bukan ayah/ibu/wali dari satu siswa pun | Pesan sukses generik "Bila email terdaftar, kode OTP telah dikirim." — tidak ada email yang benar-benar terkirim | 200; pencocokan ayah/ibu/wali lewat father_id, mother_id, guardian_id pada school_student |
| Email terdaftar sebagai orang tua/wali dan seluruh syarat lain terpenuhi | Pesan sukses generik yang sama persis, dan email berisi kode OTP dikirim lewat mail server Odoo YPII | 200; kode dikirim sebagai mail.mail yang langsung dikirim, bukan menunggu penjadwal Odoo |
| Verifikasi captcha aktif, tetapi layanan hCaptcha tidak terjangkau atau membalas galat server | Permintaan kode OTP ditolak dengan pesan "Verifikasi captcha gagal. Muat ulang halaman lalu coba lagi." — tidak ada email yang dikirim | 400; sikap fail-closed disengaja: gangguan hCaptcha membuat login berhenti total, bukan membuka pintu |
| Verifikasi captcha aktif, tetapi kolom captcha dikirim kosong | Permintaan kode OTP ditolak dengan pesan yang sama | 400; token kosong ditolak sebelum menghubungi hCaptcha |
| Verifikasi captcha aktif, tetapi kunci rahasia hCaptcha belum diisi di server | Orang tua tidak pernah berhasil meminta kode; operator melihat pemeriksaan kesiapan server gagal | Endpoint kesiapan GET /api/v1/ready membalas 503 dengan penanda captcha_config |
Odoo YPII tidak memiliki satu pun mail server (ir.mail_server) yang aktif |
Orang tua tetap melihat pesan sukses generik, tetapi email kode OTP tidak pernah sampai | POST /auth/request-otp tetap 200; kondisinya hanya terlihat operator lewat GET /api/v1/ready yang membalas 503 dengan penanda odoo_mail_server |
| Email yang sama meminta kode OTP lagi sebelum masa jeda pengiriman ulang berakhir | Pesan bahwa kode baru saja dikirim dan harus menunggu sebelum meminta lagi | 429 disertai Retry-After; jeda berlaku sama untuk email mana pun sehingga tidak membocorkan keterdaftaran |
Kode OTP yang dimasukkan salah, dan jumlah percobaan gagal mencapai batas OTP_MAX_ATTEMPTS |
Kode yang dipegang orang tua menjadi mati; orang tua harus meminta kode baru dari awal | Entri OTP dihapus dari penyimpanan begitu sisa percobaan habis |
| Kode OTP yang dimasukkan benar | Orang tua masuk ke Parent Portal; kode yang sama tidak bisa dipakai lagi | Entri OTP langsung dihapus setelah cocok — sekali pakai |
| Layanan Parent Portal dimulai ulang saat sebuah kode OTP masih dalam masa berlakunya | Kode yang sudah diterima di email menjadi tidak berlaku; orang tua harus meminta kode baru | Penyimpanan OTP bersifat in-memory pada satu proses, hilang saat proses berhenti |
| Kondisi | Yang dilihat pengguna | Keterangan teknis |
|---|---|---|
ADMIN_LOGIN_ENABLED bernilai false, atau ADMIN_LOGIN_PASSWORD dibiarkan kosong |
Jalur masuk administrator seolah tidak ada sama sekali | POST /auth/admin-login membalas 404, tanpa menyentuh Odoo YPII maupun pembatas percobaan |
| Jalur masuk administrator aktif, tetapi password administrator salah atau email bukan orang tua dengan minimal satu anak | Pesan tunggal "Email atau password administrator salah." untuk kedua sebab | 401 dengan badan respons identik, supaya tidak bisa dipakai menebak email mana yang terdaftar |
Percobaan masuk administrator yang gagal dari satu alamat IP mencapai ADMIN_LOGIN_MAX_ATTEMPTS |
Alamat IP itu terkunci sementara; pesan meminta mencoba lagi nanti disertai lama tunggu | 429 disertai Retry-After; kunci dilepas otomatis setelah ADMIN_LOGIN_LOCKOUT_SECONDS, atau segera setelah satu kali masuk berhasil |
| Kondisi | Yang dilihat pengguna | Keterangan teknis |
|---|---|---|
| Nomor siswa yang diminta berada di luar daftar anak milik orang tua yang sedang masuk | Halaman menyatakan siswa tidak ditemukan — bukan "Anda tidak berhak" | 404, bukan 403; disengaja agar Parent Portal tidak mengonfirmasi bahwa siswa dengan nomor itu memang ada di Odoo YPII |
| Nomor siswa berada di dalam daftar anak orang tua yang sedang masuk | Data anak ditampilkan seperti biasa | Daftar anak dihitung ulang dari Odoo YPII pada setiap permintaan, bukan dari isi token sesi |
| Kondisi | Yang dilihat pengguna | Keterangan teknis |
|---|---|---|
| Perubahan dikirim untuk peran yang slotnya kosong pada siswa tersebut di Odoo YPII — misalnya mengubah data wali padahal siswa itu tidak punya wali terdaftar | Pesan bahwa slot kontak peran tersebut kosong pada siswa ini; perubahan tidak tersimpan | 404; Parent Portal tidak pernah membuat kontak baru di Odoo YPII, ia hanya memperbarui kontak yang sudah ditunjuk record siswa |
| Odoo YPII menolak penulisan dengan konflik | Pesan bahwa terjadi konflik saat menyimpan perubahan | 409 Conflict diteruskan apa adanya |
Odoo YPII menolak penulisan dengan galat permintaan lain di rentang 4xx |
Pesan bahwa perubahan ditolak Odoo YPII, disertai alasan dari Odoo YPII | Diterjemahkan menjadi 422 |
| Kondisi | Yang dilihat pengguna | Keterangan teknis |
|---|---|---|
| Baris alergi, riwayat penyakit, atau pengukuran yang dikirim memuat nomor baris yang bukan milik anak yang sedang dibuka | Pesan bahwa baris tidak ditemukan pada anak ini; tidak satu pun perubahan dalam permintaan itu tersimpan | 404; seluruh pemeriksaan kepemilikan berjalan sebelum penulisan ke Odoo YPII dijalankan, sehingga permintaan gagal secara utuh |
| Nomor baris pengukuran sah pada koleksi lain, tetapi dikirim di koleksi yang berbeda — misalnya nomor baris berat badan dikirim sebagai tinggi badan | Pesan yang sama, perubahan tetap tidak tersimpan | Kepemilikan diperiksa per model Odoo YPII (partner.height, partner.weight, partner.head_circumference), bukan digabung |
| Satu permintaan memuat dua baris alergi dengan jenis alergen yang sama | Pesan bahwa ada alergen ganda dalam satu pengiriman | 422 |
| Nilai pengukuran yang dikirim bernilai nol atau negatif | Pesan bahwa nilai harus lebih besar dari 0 | 422 |
| Tanggal pengukuran yang dikirim melewati tanggal hari ini | Pesan bahwa tanggal tidak boleh melewati hari ini | 422; larangan tanggal masa depan adalah aturan Parent Portal — Odoo YPII sendiri tidak memeriksanya, dan tanggal masa depan akan diam-diam mengubah angka "terkini" yang dibaca sekolah |
| Sebuah koleksi dikirim dalam permintaan | Seluruh isi koleksi itu di Odoo YPII diganti dengan isi yang dikirim; baris lama yang tidak ikut dikirim terhapus | Semantik penggantian penuh per koleksi |
| Sebuah koleksi tidak dikirim sama sekali dalam permintaan | Isi koleksi itu di Odoo YPII tidak disentuh | Kelima koleksi (alergi, riwayat penyakit, tinggi, berat, lingkar kepala) berdiri sendiri-sendiri |
| Kondisi | Yang dilihat pengguna | Keterangan teknis |
|---|---|---|
| Orang tua hanya memiliki satu anak | Pemilih anak di kanan atas disembunyikan seluruhnya — bukan ditampilkan dalam keadaan tidak aktif | Komponen pemilih anak tidak dirender bila jumlah anak kurang dari atau sama dengan 1 |
| Orang tua berganti anak saat sedang membuka Riwayat Enrollment, Peringatan Akademik, Riwayat Insiden, atau Pembayaran | Menu yang sedang dibuka dipertahankan untuk anak yang baru dipilih | Keempat segmen inilah yang terdaftar sebagai segmen yang dipertahankan |
| Orang tua berganti anak saat sedang membuka Mutasi Kelas, Kelulusan, Cuti / Izin, Pengunduran Diri, Pendaftaran, atau Tes Masuk | Tampilan jatuh ke Ringkasan anak yang baru dipilih; menu semula tidak bertahan | Keenam segmen ini tidak terdaftar sebagai segmen yang dipertahankan |
| Orang tua berganti anak saat sedang membuka Ringkasan | Tetap di Ringkasan anak yang baru dipilih | Ringkasan adalah tujuan bawaan, jadi tidak ada yang berubah |
Sebuah tes masuk berstatus selain done (belum selesai dinilai) |
Label hasil Lulus atau Tidak Lulus tidak ditampilkan sama sekali; yang tampil hanya penanda status tesnya | Label hasil hanya bermakna setelah tes selesai dinilai, sehingga sengaja ditahan sebelum itu |
Sebuah tes masuk berstatus done |
Label Lulus atau Tidak Lulus ditampilkan di samping penanda status | Nilai kelulusan dibaca dari dokumen tes masuk di Odoo YPII |
404 alih-alih 403 pada data anak — untuk data anak di bawah umur, menyatakanPesan "Bila email terdaftar, kode OTP telah dikirim." tidak membuktikan bahwa email
sudah dikirim. Bila kode tidak kunjung datang, dua kemungkinan yang paling sering terjadi
adalah email orang tua belum terdaftar sebagai ayah/ibu/wali di Odoo YPII, atau mail server
Odoo YPII sedang tidak aktif. Keduanya menghasilkan pesan yang sama di layar, dan hanya
bisa dibedakan oleh operator lewat endpoint kesiapanGET /api/v1/ready.
Kode OTP tersimpan di memori satu proses layanan Parent Portal. Setiap kali layanan dimulai
ulang — termasuk saat pembaruan versi — seluruh kode yang sedang berlaku hangus seketika,
dan orang tua yang baru saja menerima email harus meminta kode baru.
Parent Portal tidak pernah membuat kontak baru di Odoo YPII. Bila seorang siswa belum
memiliki wali terdaftar, orang tua tidak akan bisa mengisinya dari Parent Portal; slot itu
harus dibuat lebih dulu di Odoo YPII oleh Tata Usaha sekolah.
Seluruh keputusan pada tabel di atas diambil oleh dua bagian Parent Portal:
Penerbitan dan pengiriman kode OTP itu sendiri berjalan lewat mail server Odoo YPII, bukan
lewat konfigurasi surat elektronik terpisah milik Parent Portal — rinciannya ada di
Parent Portal — Penerbitan dan Pengiriman Kode OTP lewat Mail Server Odoo.
Karena Parent Portal tidak menyimpan salinan data siswa, setiap selisih antara yang terlihat
di Parent Portal dan kenyataan di lapangan berasal dari data Odoo YPII yang belum diperbarui,
bukan dari Parent Portal yang tertinggal.