Framing lama ("RPS sudah punya bobot untuk X, tapi belum ada Sub-CPMK
dicentang") terkesan seperti pengisian sengaja yang cuma kurang
langkah terakhir. Padahal akar masalahnya sering kali bobot bawaan
aplikasi (KOMPONEN_DEFAULT) yang belum pernah disentuh dosen sama
sekali — reframing ke "Sub-CPMK belum ditautkan ke komponen penilaian"
lebih jujur ke kondisi sebenarnya.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Kasus nyata: RPS bagian G bobotnya sudah lengkap (total 100%), tapi kolom
"Sub-CPMK yang Dinilai" tak satu pun dicentang di tiap komponen. Komponen
begini lolos validasi total bobot, tapi _komponen_daftar() menyaringnya
habis (butuh subs DAN bobot) -- dosen jadi bingung kenapa halaman Nilai
sama sekali tak punya section "ISI PER KOMPONEN", padahal RPS-nya sudah
diisi.
- _komponen_tanpa_sub(): fungsi baru, deteksi komponen dengan bobot > 0
tapi subs kosong
- Halaman RPS: peringatan di atas tabel bagian G, sebut nama komponen
yang bermasalah
- Halaman Nilai: peringatan serupa + link "Buka RPS" -- muncul di titik
gejalanya, bukan cuma di sumbernya
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Tombol "Mulai Ulang (hapus semua nilai)" di halaman Input Nilai
sebelumnya cuma dijaga confirm() browser biasa — gampang ke-klik tanpa
sadar, apalagi datanya sekarang ratusan mahasiswa per MK.
- Dialog konfirmasi kini menyebut jumlah mahasiswa yang akan hilang
- Password akun yang login harus dimasukkan ulang & diverifikasi
server-side (auth.verifikasi_password) sebelum aksi hapus dieksekusi
- Isi nilai lama diarsipkan otomatis ke tabel nilai_arsip_hapus sebelum
dihapus (mk_kode, tahun, data JSON, kapan, oleh siapa) — jaring
pengaman, ikut ke-backup lewat /cadangan.db yang sudah ada; belum ada
UI pemulihan (di luar cakupan saat ini, cukup query manual bila perlu)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- /nilai/<kode>: dropdown "Tampilkan kelas" menyaring tabel Nilai per
Komponen & Nilai per Mahasiswa sekaligus (tanpa reload); baris
ringkasan (rata-rata/% lulus MK) ikut disembunyikan saat filter aktif
karena angkanya dihitung dari seluruh MK, bukan per kelas
- /nilai/<kode>/komponen/<i>: filter serupa + kolom Kelas ditambahkan
di tabel Nilai Mahasiswa (halaman paling sering dipakai dosen isi
nilai per sesi/tugas)
- Muncul otomatis hanya bila MK punya >1 kelas
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Portofolio: section "Analisis Proses Asesmen" (dropdown tertutup default) —
distribusi huruf mutu, kelompok capaian (mean ± SD), Sub-CPMK terlemah/terkuat,
kesenjangan rencana vs realisasi, mahasiswa berisiko, tren lintas tahun ajaran
- Portofolio: Nomor Dokumen & Tanggal Terbit terisi otomatis; placeholder contoh
di Realisasi Pembelajaran dan Kendala & Tindak Lanjut; tombol "Isi Otomatis"
merangkai draf Simpulan dari analisis + realisasi + kendala
- Nilai: tabel Kelompok Capaian (Atas/Tengah/Bawah, shading warna) dipindah ke
dropdown "Detail Tambahan" bersama Skala Poin/Rincian Bobot/Hasil Ketercapaian;
tabel utama tak lagi ada scroll vertikal internal
- Nilai: riwayat pengisian dicatat terstruktur (waktu, dosen, aksi, komponen),
tanpa batas 8 entri, dengan ringkasan per komponen + dropdown Log Lengkap —
mendukung akuntabilitas team teaching
- Fix bug data: seed kurikulum menyimpan 'cpl' CPMK sebagai string tunggal,
bukan list, sehingga pecah per huruf saat di-join() di tabel Hasil
Ketercapaian/Rekap (mis. "CPL-03" -> "C, P, L, -, 0, 3"); dinormalisasi di
db.py (runtime) dan tools/extract_seed.py (agar re-seed berikutnya benar)
- Hover tooltip deskripsi lengkap di kode Sub-CPMK/CPMK/CPL (halaman Nilai
dan Rekap CPL/CPMK)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Dokumen RTM resmi sesuai template baku prodi (FORM RPS & RTM UNTAN), diisi
di halaman /rps/{kode}/rtm sendiri setelah RPS ditandai selesai — blok Tugas
bisa ditambah/dihapus dinamis, dan bisa diunduh sebagai .docx. Murni
dokumentasi, tak menyimpan atau memengaruhi nilai/skor mahasiswa sama sekali.
Halaman Nilai kini punya tabel per-mahasiswa dalam skala poin (bukan 0-100)
supaya terlihat berapa poin riil yang sudah didapat dari total 100 per
Sub-CPMK. Nilai Akhir juga ditandai * kalau sebagian Sub-CPMK belum
ternilai (angkanya sementara), dan sel di grid Sub-CPMK ditandai ✎ kalau
skornya pernah dikoreksi manual dan berisiko tertimpa balik saat sesi
komponen terkait disimpan ulang.
- Halaman Nilai: tabel "Nilai per Komponen" (rata-rata skor mentah tiap
sesi, bisa diedit langsung) berdampingan dengan grid Sub-CPMK yang tetap
presisi; kolom persentase ternilai di Hasil Ketercapaian.
- Komponen Tugas: sesi bisa menyasar subset Sub-CPMK (RPS tetap batasannya),
lengkap dengan field ala RTM (bentuk tugas, deskripsi, metode, luaran,
indikator/bobot, jadwal) dan tombol isi-otomatis per bentuk tugas.
- RPS: auto-save berkala sebagai draft, tombol ke atas, validasi total
bobot komponen 100% saat ditandai selesai, komponen berbobot kosong
disembunyikan dari halaman Nilai.
- Admin: tampilkan kelas yang tersedia dari data mahasiswa saat mengatur
penugasan dosen per kelas.
- Perbaikan step="any" pada input nilai (mencegah validasi HTML5 menolak
nilai desimal hasil roll-up).
- Tambah METODOLOGI_ASESMEN_KOMPONEN.md: dokumentasi metodologi Sub-CPMK
vs komponen, termasuk skenario tugas menyasar sebagian Sub-CPMK.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Tampilan "Isi Per Komponen Penilaian" diganti dari tombol bertumpuk teks
jadi tabel (Komponen/Sub-CPMK/Bobot/Status/Aksi) dengan status berupa
stempel, lebih mudah dipindai.
- Filter pencarian MK (ketik kode/nama) di kotak penugasan dosen /admin.
- Istilah NPM diseragamkan jadi NIM di seluruh aplikasi (label, header,
template Excel, dokumen portofolio), termasuk migrasi kolom database
mahasiswa.npm -> nim yang aman (ALTER TABLE RENAME COLUMN, otomatis saat
startup, tanpa kehilangan data; parser Excel tetap terima file lama
berheader NPM).
- Fitur ganti password mandiri (/akun): verifikasi password lama, sesi lain
otomatis keluar setelah berhasil, sesi yang dipakai tetap aktif.
- RPS: dosen RPS+MK kini bisa menyesuaikan redaksi kalimat Sub-CPMK (bagian
D) untuk MK yang diampu -- kode & kaitan CPMK/CPL tetap dari kurikulum,
hanya teksnya yang bisa disesuaikan. Penyesuaian otomatis konsisten di
dropdown mingguan (F), checklist komponen (G), serta unduhan RPS &
portofolio, tanpa menyentuh data kurikulum induk atau halaman nilai/
dashboard prodi.
- Form RPS dibungkus <fieldset disabled> untuk dosen tanpa hak edit --
seluruh field benar-benar terkunci (bukan cuma tombol simpan hilang).
- Halaman nilai: tombol isi-cepat per komponen penilaian (bagian G RPS) yang
menyalin nilai ke seluruh Sub-CPMK terkait; komponen berulang (Kuis, Tugas,
Presentasi, Tes Lisan) mendukung banyak sesi dengan rata-rata otomatis,
komponen sekali-jalan (UTS/UAS) mengedit sesi yang sama. Sub-CPMK yang
diukur >1 komponen digulung rata tertimbang bobot (hitung.skor_dari_sesi).
- Hapus jalur unggah Excel & mode "ketik rata-rata kelas" (agregat) dari
input nilai — proses diseragamkan: hanya grid manual + tombol komponen,
keduanya bersumber dari daftar mahasiswa impor kaprodi.
- Dasbor Monitoring, Rekap CPL/CPMK, dan Riwayat kini khusus kaprodi (dosen
tidak lagi melihat rollup lintas-MK yang bukan miliknya).
- Penugasan dosen ke MK bisa dibatasi per kelas (kolom kelas baru di tabel
penugasan, migrasi otomatis & aman untuk DB yang sudah berjalan) — dosen
MK dengan banyak kelas paralel hanya melihat & menilai kelasnya sendiri;
hapus nilai MK penuh dikunci untuk dosen yang dibatasi kelas.
Dashboard pemetaan statis kini dilayani aplikasi di /dashboard
(app/static/dashboard.html). Fitur lengkap Tahap 1-4 + dasbor monitoring,
menu global, filter semester, input nilai langsung, penggabungan nilai
team teaching, tabel bisa urut. Dockerfile berubah dari nginx statis ke
uvicorn/FastAPI: healthcheck, proxy-headers, volume /data (SQLite).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>