Model: school_academic_alert
Menu: School → Incident → Academic Alerts
School Academic Alert adalah dokumen transaksi yang merepresentasikan satu kali pengecekan status akademik seorang siswa terhadap aturan Academic Alert Level (model school_academic_alert_level) yang dapat dikonfigurasi, sebagai implementasi Sistem Peringatan Akademik Tiga Warna (Bab 8.3 dari "Panduan Penanganan Insiden dan Keluhan Orang Tua v2.0" YPII). Setiap Academic Alert Level mewakili satu warna peringatan (Kuning/Oranye/Merah) dan memiliki formula pemicu sendiri (python_code, dievaluasi dengan safe_eval) sehingga setiap unit sekolah dapat mendefinisikan aturan kelulusan/pemicunya sendiri tanpa menyentuh kode program. Tujuan sistem ini adalah memastikan orang tua tidak pernah mengetahui masalah akademik anaknya pertama kali dari rapor — peringatan dini (Kuning) cukup diberikan sebagai catatan, sedangkan peringatan serius/kritis (Oranye/Merah) wajib dieskalasi menjadi kasus formal melalui pembuatan School Incident.
Saat tombol Evaluate diklik, sistem menjalankan evaluation_context milik dokumen (opsional, untuk menyuntikkan variabel tambahan seperti jumlah mata pelajaran di bawah nilai lulus), lalu mengevaluasi setiap Academic Alert Level yang terdaftar mulai dari yang paling parah (sequence tertinggi) ke yang paling ringan. Level pertama yang python_code-nya menghasilkan variabel result = True ditetapkan sebagai alert_level_id dokumen ini; jika tidak ada level yang terpicu, alert_level_id dikosongkan. Tombol Create Incident hanya dapat digunakan bila hasil evaluasi berwarna Oranye atau Merah — insiden yang terbentuk otomatis menggunakan Incident Type "Academic" (school_incident_type_academic), mengambil handling_level default dari Incident Type tersebut, dan deskripsinya berisi warna alert beserta subject_note/action_guideline.
Draft → Confirm → Open → Done
↓
Reject
Draft / Confirm / Open → Cancel
Reject / Cancel → (Restart) → Draft
color hasil evaluasi adalah orange atau red.Nomor dokumen alert yang dibuat otomatis oleh sistem saat status berubah ke Open.
Nilai Default: / (sebelum nomor di-generate)
Wajib Diisi: Tidak (generated)
Dapat Dirubah: Ya (jika manual_number_ok = True, hanya saat status Draft)
Mekanisme Pengisian Otomatis: Di-generate menggunakan sequence saat _create_sequence_state = "open" terpenuhi.
Tanggal dilakukannya pengecekan status akademik siswa ini. Digunakan sebagai field tanggal acuan sequence saat nomor dokumen di-generate.
Nilai Default: Tanggal hari ini
Wajib Diisi: Ya
Dapat Dirubah: Ya (hanya saat status Draft)
Mekanisme Pengisian Otomatis: Default ke tanggal hari ini.
Siswa yang status akademiknya dievaluasi pada dokumen ini.
Nilai Default: N/A
Wajib Diisi: Ya
Dapat Dirubah: Ya (hanya saat status Draft)
Mekanisme Pengisian Otomatis: Perubahan Student mengisi ulang Grade Class.
Kelas (homeroom) siswa pada saat alert ini dibuat.
Nilai Default: N/A
Wajib Diisi: Tidak
Dapat Dirubah: Ya (hanya saat status Draft)
Mekanisme Pengisian Otomatis: Terisi otomatis dari grade_class_id milik enrollment aktif Student yang dipilih.
Catatan bebas mengenai konteks alert ini, misalnya mata pelajaran mana saja yang nilainya di bawah nilai lulus. Teks ini juga dipakai sebagai bagian dari deskripsi otomatis saat sebuah Incident dibuat dari alert ini.
Nilai Default: N/A
Wajib Diisi: Tidak
Dapat Dirubah: Ya (hanya saat status Draft)
Mekanisme Pengisian Otomatis: N/A
Kode sumber Python opsional, dievaluasi dengan mekanisme yang sama dengan Python Code milik Academic Alert Level (safe_eval), digunakan untuk menyuntikkan variabel lokal tambahan sebelum aturan level akademik dievaluasi. Di sinilah angka nilai/pelanggaran akademik yang sesungguhnya dimasukkan ke dalam evaluasi, tanpa modul ini pernah meng-hardcode formula nilai apa pun. Contoh isi: trigger_count = 3, lalu variabel trigger_count (atau nama lain yang dipilih) dirujuk dari Python Code milik Academic Alert Level.
Nilai Default: Kosong
Wajib Diisi: Tidak
Dapat Dirubah: Ya (hanya saat status Draft)
Mekanisme Pengisian Otomatis: N/A
Academic Alert Level yang terpicu pada evaluasi terakhir (lewat tombol Evaluate). Dikosongkan bila tidak ada level yang terkonfigurasi terpicu untuk Evaluation Context saat ini.
Nilai Default: Kosong
Wajib Diisi: Tidak
Dapat Dirubah: Tidak (hanya terisi lewat tombol Evaluate)
Mekanisme Pengisian Otomatis: Diisi oleh tombol Evaluate, memilih level dengan sequence tertinggi yang python_code-nya menghasilkan result = True.
Warna peringatan (Kuning/Oranye/Merah) dari Alert Level yang terpicu, disimpan (related, store=True) agar dapat dipakai untuk dekorasi tampilan list serta filter/group-by pencarian.
Nilai Default: Kosong
Wajib Diisi: Tidak
Dapat Dirubah: Tidak
Mekanisme Pengisian Otomatis: Mengikuti alert_level_id.color secara otomatis.
School Incident yang dibuat dari alert ini melalui tombol Create Incident. Hanya pernah terisi untuk alert berwarna Oranye/Merah.
Nilai Default: Kosong
Wajib Diisi: Tidak
Dapat Dirubah: Tidak
Mekanisme Pengisian Otomatis: Diisi oleh tombol Create Incident setelah School Incident baru berhasil dibuat.