Model: school_incident
Menu: School → Incident → Incidents
School Incident adalah implementasi digital "Master Log" satu kasus insiden atau keluhan orang tua di Yayasan Penyelenggaraan Ilahi Indonesia (YPII), sesuai Panduan Penanganan Insiden dan Keluhan Orang Tua v2.0 YPII. Satu record mencatat lima elemen wajib Master Log: WHO (siswa dan kontak orang tua/wali yang terlibat), WHAT (jenis insiden dan deskripsi kejadian), WHEN (tanggal kejadian dan tanggal kontak pertama), ACTION (tindakan yang diambil), dan STATUS (alur dokumen serta hasil penanganan dari sisi orang tua). Setiap kasus ditangani melalui kerangka tiga tingkat (handling_level): Tier 1 Wali Kelas, Tier 2 BK-Wakasek, atau Tier 3 Kepala Sekolah, yang secara default mengikuti Incident Type yang dipilih tetapi selalu dapat disesuaikan per kasus. Setiap kontak dengan orang tua dicatat sebagai baris terpisah pada tab Parent Contacts, mengikuti kerangka komunikasi Empati → Fakta → Solusi.
Draft → Confirm (Menunggu Persetujuan) → Open → Done
↓
Reject / Cancel → (Restart) → Draft
Field workflow
state(Draft/Confirm/Open/Done/Reject/Cancel) berbeda dari fieldresolution_status(Resolved - Satisfied/Resolved - Unsatisfied/In Progress/Not Resolved/Escalated).statemenunjukkan posisi dokumen dalam alur persetujuan Odoo, sedangkanresolution_statusmencatat hasil penanganan kasus dari sudut pandang kepuasan orang tua. Dokumen dapat berstatus Done meskipunresolution_statusbelum berada pada nilai Resolved.
| Field (Teknis) | Label | Elemen Master Log | Wajib Diisi | Dapat Diubah | Keterangan |
|---|---|---|---|---|---|
date_incident |
Incident Date | WHEN | Ya | Hanya saat Draft | Tanggal insiden atau keluhan orang tua terjadi. Default: tanggal hari ini. |
student_id |
Student | WHO | Ya | Hanya saat Draft | Siswa yang terlibat dalam kasus ini. |
enrollment_id |
Enrollment | WHO | Tidak | Hanya saat Draft | Enrollment aktif siswa, otomatis terisi dari student_id.active_enrollment_id saat Student dipilih. |
grade_class_id |
Grade Class | WHO | Tidak | Hanya saat Draft | Kelas siswa saat insiden terjadi, otomatis terisi dari student_id.grade_class_id saat Student dipilih. |
parent_partner_id |
Parent/Guardian Contact | WHO | Tidak | Hanya saat Draft | Kontak orang tua/wali yang akan dihubungi. Otomatis terisi dari Father, Mother, atau Guardian siswa (urutan preferensi tersebut) saat Student dipilih, tetap dapat diubah manual. |
incident_type_id |
Incident Type | WHAT | Ya | Hanya saat Draft | Kategori/jenis insiden atau keluhan orang tua. Menentukan default handling_level serta SLA kontak pertama dan resolusi. |
handling_level |
Handling Level | ACTION | Tidak | Hanya saat Draft | Tingkat penanganan (Tier 1 Wali Kelas/Tier 2 BK-Wakasek/Tier 3 Kepala Sekolah). Default dari incident_type_id.default_handling_level, dapat diubah manual per kasus. |
description |
Description | WHAT | Ya | Hanya saat Draft | Deskripsi singkat kejadian. |
handled_by_id |
Handled By | ACTION | Tidak | Hanya saat Draft | Staf yang bertanggung jawab menangani kasus. Default: pengguna yang mencatat kasus. |
contact_method |
Contact Method | WHEN | Tidak | Hanya saat Draft | Kanal kontak pertama: WhatsApp, Phone, Face to Face, atau Letter. |
date_first_contact |
First Contact Date | WHEN | Tidak | Hanya saat Draft | Tanggal dan waktu kontak pertama dengan pihak terkait. Otomatis tersinkron dari entri paling awal pada parent_contact_ids begitu tab Parent Contacts tidak kosong; sebelum ada entri, field ini dapat diisi manual sebagai fallback. |
parent_contact_ids |
Parent Contacts | WHEN | Tidak | Saat Draft, Confirm, dan Open | Riwayat setiap kontak dengan orang tua/wali (tanggal, metode, ringkasan mengikuti kerangka Empati → Fakta → Solusi). Entri paling awal memutakhirkan date_first_contact. |
parent_contact_count 🔒 |
Parent Contact Count | — | Tidak (computed) | Tidak | Jumlah entri pada parent_contact_ids, dihitung otomatis. |
action_taken |
Action Taken | ACTION | Tidak | Hanya saat Draft | Deskripsi tindakan konkret yang diambil untuk menangani kasus. |
resolution_status |
Resolution Status | STATUS | Tidak (default In Progress) | Saat Draft, Confirm, dan Open | Hasil kasus dari sisi orang tua: Resolved - Satisfied, Resolved - Unsatisfied, In Progress, Not Resolved, atau Escalated. Berbeda dari state (alur dokumen). |
date_resolved |
Resolution Date | STATUS | Kondisional (wajib bila resolution_status Resolved) |
Saat Draft, Confirm, dan Open | Tanggal kasus diselesaikan. Sistem menolak penyimpanan bila resolution_status berupa Resolved - Satisfied/Unsatisfied tetapi field ini kosong. |
first_contact_deadline 🔒 |
First Contact Deadline | — | Tidak (computed, stored) | Tidak | Batas waktu kontak pertama, dihitung dari Incident Date ditambah SLA kontak pertama pada Incident Type, atau default per tier bila Incident Type tidak mendefinisikannya. |
resolution_deadline 🔒 |
Resolution Deadline | — | Tidak (computed, stored) | Tidak | Batas waktu penyelesaian kasus, dihitung dari Incident Date ditambah SLA resolusi untuk tier yang sedang ditangani. |
is_first_contact_overdue 🔒 |
First Contact Overdue | — | Tidak (computed) | Tidak | True bila belum ada First Contact Date dan waktu saat ini sudah melewati First Contact Deadline. |
is_resolution_overdue 🔒 |
Resolution Overdue | — | Tidak (computed) | Tidak | True bila kasus belum mencapai status Resolved dan waktu saat ini sudah melewati Resolution Deadline. |
is_overdue 🔒 |
Overdue | — | Tidak (computed, stored) | Tidak | True bila kasus overdue pada SLA kontak pertama maupun SLA resolusi. Dipakai untuk decoration list view dan filter pencarian. |
escalation_criteria_ids |
Escalation Criteria | STATUS | Tidak | Hanya melalui wizard Escalate | Kriteria eskalasi (Bab 8.7 Panduan YPII) yang dipilih sebagai justifikasi eskalasi terakhir kasus ini ke tier penanganan lebih tinggi. Read-only pada form utama. |
escalation_reason |
Escalation Reason | STATUS | Tidak | Hanya melalui wizard Escalate | Narasi/kronologi alasan eskalasi (Bab 8.8 Panduan YPII). Read-only pada form utama. |
escalated_to_level 🔒 |
Escalated To Level | — | Tidak | Tidak | Tier penanganan tujuan eskalasi terakhir kasus ini. |
escalated_by_id 🔒 |
Escalated By | — | Tidak | Tidak | Pengguna yang melakukan eskalasi terakhir kasus ini. |
escalation_date 🔒 |
Escalation Date | — | Tidak | Tidak | Tanggal dan waktu eskalasi terakhir kasus ini. |
escalate_ok 🔒 |
Can Escalate | — | Tidak (computed) | Tidak | Kebijakan yang menentukan apakah kasus ini dapat dieskalasi saat ini (status Open dan pengguna termasuk grup yang diizinkan sesuai Policy Template). Mengendalikan kemunculan tombol Escalate. |