Domain: Komunikasi & Portal¶
SSOT untuk modul komunikasi Scola — pengumuman, notifikasi, pesan, portal orang tua.
Last verified: 2026-03-31
1. Visi & Best Practice¶
1.1 Kondisi Ideal¶
Pengumuman Sekolah: - Broadcast pengumuman ke seluruh sekolah atau per kategori (jenjang, kelas, peran) - Pengumuman dengan attachment (gambar, PDF) - Scheduling (jadwal publish) - Read tracking (siapa yang sudah baca) - Broadcast publik ke channel resmi sekolah tanpa membuka data pribadi siswa
Notifikasi Real-time: - Push notification (FCM) ke device mobile/desktop - In-app notification center - Notification per event: tugas baru, nilai masuk, pengumuman, pembayaran jatuh tempo - User preference: subscribe/unsubscribe per kategori notifikasi - Quiet hours + urgent bypass untuk mencegah spam operasional - Channel config terpusat untuk WhatsApp, Telegram, email, dan push
Portal Orang Tua: - Dashboard: ringkasan nilai, kehadiran, keuangan anak - View jadwal anak - View rapor anak - View tagihan & pembayaran - Pengajuan izin anak - Notifikasi dari sekolah - Multi-anak support
Chat / Messaging: - Pesan langsung antar user (guru ↔ orang tua) - Group chat per kelas - File sharing - Scope komunikasi wali kelas harus dibatasi ke rombel yang diampu
Agenda & Kalender: - Kalender sekolah (libur, ujian, kegiatan) - Event management - RSVP untuk kegiatan sekolah
2. Arsitektur & Data Model¶
2.1 Frontend Structure¶
src/views/
├── Communication/
│ ├── AnnouncementList.vue # Daftar pengumuman
│ ├── AnnouncementDetail.vue # Detail pengumuman
│ ├── AnnouncementForm.vue # Buat/edit pengumuman
│ └── NotificationCenter.vue # Pusat notifikasi
├── Chat/
│ ├── ChatList.vue # Daftar percakapan
│ ├── ChatRoom.vue # Chat room
│ └── ...
├── ParentViews/
│ ├── ParentDashboard.vue # Dashboard orang tua
│ ├── ParentSchedule.vue # Jadwal anak
│ ├── ParentChildAcademic.vue # Nilai anak
│ ├── ParentFinancePage.vue # Keuangan anak
│ ├── ParentReportCard.vue # Rapor anak
│ └── ParentLeaveRequest.vue # Pengajuan izin anak
├── Calendar/
│ ├── SchoolCalendar.vue # Kalender sekolah
│ └── EventDetail.vue # Detail event
└── StudentViews/
├── StudentDashboard.vue # Portal siswa
└── StudentNotifications.vue # Notifikasi siswa
2.2 Key Capabilities¶
| Capability | Roles |
|---|---|
communication.announcements.view |
all roles |
communication.announcements.manage |
admin, principal, vice_principal_public_relations |
communication.chat.view |
teacher, parent, counselor |
parents.dashboard.view |
parent |
parents.children.view |
parent |
2.3 Notification Architecture¶
Backend Event (Odoo)
→ Firebase Cloud Messaging (FCM)
→ Push Notification (mobile/desktop)
→ In-app notification store (Pinia)
→ Notification Center UI
3. Fitur & Status Implementasi¶
| Fitur | Status | Catatan |
|---|---|---|
| Pengumuman (CRUD) | ✅ Done | |
| Pengumuman per kategori | ✅ Done | Broadcast + filtered |
| Scheduling pengumuman | ✅ Done | publish_date + expiry_date di backend pengumuman |
| Read tracking pengumuman | ✅ Done | scola.announcement.read + counter baca |
| Push notification (FCM) | ✅ Done | |
| In-app notification center | ✅ Done | Grouping/timestamp notification center mengikuti timezone sekolah |
| Quiet hours + urgent bypass | ✅ Done | User preference tersedia |
| Notification preferences | ✅ Done | Subscribe/unsubscribe per tipe sudah ada |
| Portal orang tua: dashboard | ✅ Done | ParentDashboard, ringkasan waktu mengikuti timezone sekolah |
| Portal orang tua: jadwal anak | ✅ Done | ParentSchedule |
| Portal orang tua: nilai anak | ✅ Done | ParentChildAcademic |
| Portal orang tua: keuangan | ✅ Done | ParentFinancePage |
| Portal orang tua: rapor anak | ✅ Done | ParentReportCard |
| Portal orang tua: pengajuan izin | ✅ Done | ParentLeaveRequest |
| Multi-anak support (parent) | ✅ Done | Child selector |
| Portal siswa: dashboard | ✅ Done | StudentDashboard, label deadline tugas mengikuti timezone sekolah |
| Portal siswa: notifikasi | ✅ Done | |
| Kalender sekolah | ✅ Done | SchoolCalendar |
| Chat antar user | ✅ Done | Direct chat + channel/group messaging, timestamp mengikuti timezone sekolah |
| Scoped messaging wali kelas | ✅ Done | Parent contact scope dibatasi rombel wali kelas |
| WhatsApp integration | ✅ Done | whatsapp-web.js via admin settings + test channel |
| Telegram integration | ✅ Done | Bot admin + broadcast publik + personal link per user |
| Group chat per kelas | ✅ Done | Auto-provision rombel untuk wali kelas + orang tua dalam scope |
| Event RSVP | ✅ Done | User dapat merespons hadir/tentatif/tidak hadir dari jadwal |
| Delivery analytics lintas channel | ✅ Done | Dashboard admin menampilkan performa in-app/email/WA/Telegram/push |
4. Gap Analysis & Backlog¶
Status Saat Ini¶
Tidak ada gap produksi aktif untuk workflow komunikasi Tier 1. Fitur inti pengumuman, notifikasi lintas channel, portal orang tua/siswa, scoped chat wali kelas, kalender sekolah, RSVP event, Telegram, dan WhatsApp sudah terimplementasi.
Verifikasi 2026-03-31 menutup gap operasional berikut:
- filter kategori/prioritas/rentang tanggal pada daftar berita sekarang bekerja tanpa bergantung pada query pencarian
- notification center, preview chat/pesan, dan portal parent/student mengikuti timezone sekolah, bukan timezone browser atau hardcode Asia/Jakarta
- helper announcement dan messaging yang dipakai lintas halaman sekarang juga mengikuti timezone sekolah untuk fallback tanggal dan upload attachment RPC context
Roadmap Lanjutan¶
| Area | Nilai Tambah | Catatan |
|---|---|---|
| Event attendance recap | Admin kesiswaan/humas dapat melihat daftar hadir kegiatan sekolah | Pelengkap operasional, bukan blocker komunikasi inti |
| Health monitor channel | Admin dapat memantau status sesi WhatsApp Web dan quota provider lebih detail | Berguna untuk operasi harian, tidak memblokir publish/send |
| Telegram onboarding automation | Self-link via deep link bot /start |
Saat ini linking manual via chat ID/@username sudah tersedia |
4.1 Guardrail Operasional Sekolah Indonesia¶
- Kanal publik seperti Telegram hanya untuk pengumuman umum sekolah, agenda, dan informasi non-personal.
- Informasi sensitif siswa seperti absensi, tagihan, atau status akademik tetap diarahkan ke in-app, email, atau WhatsApp/Telegram individual yang sudah ditautkan pengguna.
- Gunakan nomor WhatsApp resmi sekolah dan jalankan sesi
whatsapp-web.jspada device/desktop operasional sekolah, bukan akun pribadi guru/staf. - Simpan audit trail baca pengumuman dan gunakan quiet hours untuk menjaga komunikasi tetap profesional.
- Untuk konteks wali kelas, scope percakapan ke orang tua dalam rombel yang diampu agar tidak terjadi kebocoran data lintas kelas.
- Event RSVP dipakai untuk agenda sekolah/non-akademik yang memang membutuhkan konfirmasi kehadiran, bukan sebagai pengganti absensi pembelajaran harian.
5. File References¶
Frontend¶
src/views/AnnouncementList.vue— Konsumsi pengumuman usersrc/views/NotificationList.vue— Notification centersrc/views/Messaging.vue— Direct chat + channel/group messagingsrc/views/ParentViews/Communication/ParentTeacherChat.vue— Komunikasi orang tua ↔ gurusrc/views/SettingsManagement/NotificationSettings.vue— Preference + quiet hourssrc/views/SettingsManagement/NotificationChannelConfig.vue— Konfigurasi channel WA/Telegram/Email/Pushsrc/services/calendar/calendarRsvp.service.js— Fetch event user + update RSVPsrc/views/ScheduleManagement/Student/Schedule.vue— RSVP event siswasrc/views/ScheduleManagement/Faculty/Schedule.vue— RSVP event gurusrc/views/ScheduleManagement/Parent/ParentScheduleView.vue— RSVP event orang tuasrc/views/Notifications/NotificationAnalytics.vue— Analitik performa notifikasi lintas channel
Backend¶
scola_portal/models/announcement.py— Pengumuman, scheduling, read tracking, Telegram broadcast publikscola_portal/models/notification_preference.py— Preference per user + quiet hoursscola_portal/models/notification_config.py— Konfigurasi WhatsApp, Telegram, email, pushscola_portal/controllers/portal_api.py— API pengumuman, preferences, dan admin channel settingsscola_portal/controllers/calendar_participation_api.py— API event user + RSVPscola_portal/controllers/messaging_api.py— Scoped homeroom messaging + auto-provision group rombelscola_portal/controllers/general_messaging_api.py— General portal messaging API
7. Panduan Konfigurasi Implementor¶
configuration-guides/komunikasi.md
8. Panduan End User¶
Semua role — berita di /news, pengumuman di /announcement. Admin: head-admin.md.