penjadwalan-ga/CONTEXT.md

4.7 KiB
Raw Permalink Blame History

SYSTEM CONTEXT - ROBOTKU V2

Dokumen ini berisi gambaran arsitektur sistem, skema basis data, dan aturan bisnis utama aplikasi Robotku V2.


1. Ringkasan Teknologi (Tech Stack)

  • Framework Backend: Laravel 11 (PHP 8.2+)
  • Database: MySQL / MariaDB
  • Frontend / Templating: Laravel Blade, HTML5, Vanilla CSS, Bootstrap 4 / Stisla Admin Theme, jQuery, Selectric, List.js
  • Media & File Handling: Intervention Image v3, Storage Public Disk, Laravel Excel (Maatwebsite/Excel)
  • Authentication & Roles: Laravel Default Auth (Users & Guru Guard / Role Admin vs Guru)

2. Arsitektur Modul & Hak Akses

Aplikasi Robotku V2 terbagi menjadi 3 modul utama:

  1. Modul Admin (/admin):

    • Pengelolaan Master Data: Programs, Sekolah, Ruangan, Guru, Peserta/Siswa, Sesi.
    • Pengelolaan Kelas: Tambah/edit/hapus kelas, floating jadwal ekstrakurikuler vs reguler, penetapan koordinator & ruangan.
    • Pengelolaan Logbook Kelas: Monitoring seluruh catatan logbook, foto kegiatan, pengajar pendamping, dan export/import Excel.
    • Monitoring Ketersediaan Mengajar Guru: Melihat dan mengubah jadwal ketersediaan guru per hari & per sesi.
  2. Modul Guru (/guru):

    • Dashboard Guru: Daftar kelas aktif yang diampu.
    • Detail Kelas & Siswa: Informasi anggota kelas & riwayat logbook.
    • Pengisian Logbook: Form pengisian kegiatan, foto kegiatan, materi, kendala & solusi dengan aturan deadline harian (maksimal jam 19:00 WIB pada hari yang sama).
    • Pengaturan Ketersediaan Mengajar: Mengisi slot ketersediaan mengajar berdasarkan Master Sesi dengan bantuan shortcut "Centang Semua".
  3. Modul Guest / Orang Tua (/angket/{kode_kelas}):

    • Formulir evaluasi/angket publik untuk orang tua siswa berdasarkan kode_kelas.

3. Skema Database & Relasi Utamanya

A. Master Data Core

  • programs (id, nama_program, level_number, created_at, updated_at)
  • sekolah (id, nama_sekolah, is_active, ...)
  • ruangan (id, nama_ruangan, lokasi_tipe, sekolah_id, status, ...)
  • sesi (id, nama_sesi, jam, created_at, updated_at)
    • Contoh data: Sesi 1 (08:00-10:00), Sesi 2 (10:00-12:00), dst.

B. User & Guru

  • users (id, name, email, role, password, ...)
  • guru (id, user_id, nama, no_hp, status, level_maksimal, ...)
  • ketersediaan_mengajars (id, guru_id, hari_id, sesi_id, status, ...)

C. Kelas & Detail Siswa

  • kelas (id, kode_kelas, nama_kelas, jenis_kelas, program_id, guru_id, harga_kelas, status, semester, tahun_ajaran, kategori_kelas, frekuensi_per_minggu, is_ekstrakurikuler, sekolah_id, hari_fix, sesi_fix, ruangan_fix_id, keterangan, ...)
    • Catatan Schema: Kolom cabang dan total_pertemuan_program telah dihapus. Field jenis_kelas kini digunakan untuk menyimpan Total Pertemuan (12 Sesi / 24 Sesi).
  • pesertas (id, nama_anak, nama_orangtua, no_hp_orangtua, foto, ...)
  • detail_kelas (id, kelas_id, peserta_id, status_siswa, harga_kelas, catatan, ...)
    • Relasi Pesertas() (belongsTo(Pesertas::class, 'peserta_id')). Filtered menggunakan has('Pesertas') untuk mencegah error null dereference.

D. Logbook Kelas

  • logbook (id, kelas_id, sesi_id, pertemuan, kode_kelas, tanggal, start, end, materi, kegiatan_minggu_ini, perkembangan_siswa, kendala_dan_solusi, kebutuhan_minggu_depan, hal_baik, catatan, status, jenis_libur, jenis_libur_lainnya, ...)
    • Relasi Sesi() (belongsTo(Sesi::class, 'sesi_id')).
  • foto_logbook (id, logbook_id, foto, keterangan, ...)
  • pengajar_logbook (id, logbook_id, guru_id, ...)

4. Aturan Bisnis Utama (Business Rules)

  1. Total Pertemuan Kelas:
    • Pilihan Total Pertemuan dibatasi hanya 12 Sesi dan 24 Sesi.
  2. Fleksibilitas Logbook & Auto-Fill Sesi:
    • Setiap catatan logbook terhubung ke Master Sesi (sesi_id).
    • Memilih Sesi pada modal Logbook secara otomatis mengisikan jam start dan end.
    • Logbook lama yang dibuat sebelum fitur sesi_id di-mapping otomatis berdasarkan kesesuaian jam start & end.
  3. Deadline Pengisian Logbook Guru:
    • Pengisian/pengubahan logbook oleh Guru dibatasi hingga pukul 19:00 WIB pada hari H kegiatan. Logbook tanggal lampau dikunci untuk mengedit.
  4. Ketersediaan Mengajar Guru:
    • Menggunakan tabel matriks Hari (SeninSabtu) dan Master Sesi. Dilengkapi opsi master "Centang Semua".
  5. Null-Safety Guarding:
    • Penanganan relasi detail_kelas ke pesertas diproteksi secara ketat agar jika terdapat data yatim (deleted/orphaned relation), sistem tidak mengalami crash (error 500).