build_rps() mengisi blok naratif (Peta CPL-CPMK, Deskripsi Singkat MK,
Bahan Kajian, Pustaka, Media, Dosen Pengampu, MK Prasyarat) lewat
t.cell(18, 2) dst -- indeks baris tetap sesuai template asli (39 baris).
Tapi baris-baris itu dieksekusi SETELAH daftar CPL/CPMK/Sub-CPMK
digandakan & baris contohnya dibuang -- jumlah baris yang disisipkan
beda-beda tiap MK (tergantung berapa CPL/CPMK/Sub-CPMK-nya), jadi
t.cell(18, 2) di tabel yang sudah berubah itu tidak lagi menunjuk baris
"Peta CPL-CPMK" yang dimaksud. Teks jadi nyasar ke sel/baris lain,
termasuk kolom sempit -- terlihat sebagai puluhan halaman teks terpotong
huruf demi huruf.
Pola yang benar sudah dipakai untuk tabel mingguan (trs[31], trs[33],
dst -- referensi elemen XML baris asli yang dibekukan di awal, tak
ikut bergeser). Terapkan pola sama (helper cell()) untuk blok naratif
yang kelewat.
Diverifikasi: label & isi sekarang sejajar benar (baris "Peta CPL - CP
MK" berisi peta CPMK->CPL, bukan lagi nama dosen pengampu), dokumen
turun dari puluhan halaman rusak jadi 2 halaman rapi untuk bagian ini.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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>
Sel "Peta CPL-CPMK" pada template resmi UNTAN memuat tabel kecil bersarang
(contoh isian bawaan SN-Dikti). _set_text() cuma membuang paragraf tambahan
saat menimpa sel dengan teks generate, tak tahu ada tabel bersarang di
dalamnya -- hasilnya sel berakhir dengan w:tbl tanpa w:p setelahnya, yang
melanggar skema OOXML. Word membaca file itu sebagai "rusak" dan otomatis
memperbaikinya sendiri saat dibuka, dan perbaikan-otomatis itulah yang
mengacak tata letak dokumen.
- _set_text() sekarang membuang tabel bersarang tersisa sebelum menulis
teks baru ke sel manapun (berlaku umum, bukan cuma sel yang saat ini
kena masalah)
- Ganti templates/rps_untan.docx dengan versi yang sudah dirapikan
formatnya (font/spacing) -- struktur baris & kolom identik (39x18),
jadi tetap kompatibel dengan pemetaan baris di rps_untan.py
- Diverifikasi: tak ada lagi sel yang berakhir dengan tabel bersarang
tanpa paragraf penutup di seluruh dokumen hasil generate
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.
RANCANGAN.md dan METODOLOGI_ASESMEN_KOMPONEN.md jadi catatan lokal saja
(berkasnya tetap ada, cuma tidak lagi ikut repositori).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- 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>
Trigger pembesaran sebelumnya cuma di focusin/focusout pada textarea itu
sendiri, jadi tidak pernah aktif untuk dosen non-RPS -- elemen di dalam
<fieldset disabled> tidak bisa menerima fokus maupun event mouse sama
sekali. Pindahkan trigger ke hover pada <td> di sekitarnya (yang tidak
ikut disabled), sehingga dosen view-only pun bisa membaca sel yang sempit
dengan jelas, bukan cuma dosen yang boleh mengedit.
Tabel F (9 kolom x 16 baris) membuat textarea-nya kecil dan susah dibaca/
diedit. Sekarang textarea di tabel itu membesar & mengambang (position:fixed,
z-index) saat diklik, tanpa mengubah lebar/tinggi tabel di baliknya, lalu
kembali normal saat pindah fokus. Semua textarea juga bisa di-resize bebas
(lebar+tinggi) sebagai jaring pengaman tambahan.
Perubahan murni CSS/JS statis -- tidak ada migrasi data.
- 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.
- Peran dosen dipecah jadi dosen_mk (nilai & portofolio saja, RPS baca-only)
dan dosen_rps_mk (bisa edit RPS juga); migrasi otomatis dari skema lama.
- Rekap Bobot Penilaian RPS pakai 6 komponen teknik asesmen baku prodi;
total wajib tepat 100%, komponen individual boleh dikosongkan.
- Dropdown & daftar Sub-CPMK tak lagi terpotong teksnya.
- Bagian F (Rencana Mingguan): tombol "Isi Otomatis" per baris (termasuk
usulan Bobot) yang muncul setelah Sub-CPMK dipilih, plus panel contoh
teks bantu per kolom.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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>