- 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>
Aplikasi Penyusunan RPS & Portofolio — Prodi Informatika UNTAN
Web app untuk dosen menyusun RPS (APTIKOM 2024) dan Portofolio MK dengan
keluaran .docx berformat identik template resmi, sekaligus mesin pengukuran
ketercapaian CPL/CPMK (Kurikulum OBE). Rancangan lengkap: RANCANGAN.md.
Menjalankan lokal
pip install -r requirements.txt
uvicorn app.main:app --reload
# buka http://localhost:8000
Database SQLite dibuat otomatis di data/app.db (atau path di env DB_PATH).
Tahun ajaran aktif diatur lewat env TAHUN_AJARAN (default: "2026/2027 Ganjil").
Memperbarui data kurikulum
Data CPL/CPMK/MK/Sub-CPMK di-seed dari dashboard pemetaan:
python tools/extract_seed.py # baca ../dashboard-deploy/index.html
python tools/extract_seed.py <path> # atau sumber lain
Re-seed tidak menyentuh isian RPS dosen (tersimpan terpisah di SQLite).
Dashboard Pemetaan CPMK (buatan user) ikut disajikan di rute /dashboard
dari salinan app/static/dashboard.html. Bila dashboard sumber diperbarui,
salin ulang dan re-seed sekaligus:
cp ../dashboard-deploy/index.html app/static/dashboard.html
python tools/extract_seed.py
Deploy via Coolify
Prasyarat: kode berada di repositori Git yang bisa diakses Coolify
(mis. GitHub private repo). data/ di-gitignore — nilai mahasiswa tidak
pernah ikut ke repositori.
- Push repo ini ke GitHub (private), hubungkan ke Coolify: New Resource → Application → Private Repository, Build Pack: Dockerfile, Port 8000.
- Tambahkan volume persisten ke
/data(wajib — tempat SQLite; tanpa ini data hilang tiap redeploy). - Env (opsional, ada default):
TAHUN_AJARAN(mis.2026/2027 Ganjil; hanya fallback awal — tahun aktif selanjutnya diatur di/metodologi),FAKULTAS,PRODI(kop dokumen .docx). - Deploy, buka domainnya → kunjungan pertama membuka
/setupuntuk membuat akun kaprodi. - Memindahkan data lokal ke server (bila isian lokal mau dibawa):
unduh
/cadangan.dbdari instalasi lokal, lalu salin ke volume server sebagai/data/app.db(docker cp cadangan.db <container>:/data/app.dblalu restart), atau mulai bersih dari/setup. - Tombol PDF butuh LibreOffice — aktifkan baris
apt-get install libreoffice-writerdi Dockerfile bila diperlukan (image +±700 MB); tanpa itu pengguna diarahkan unduh .docx.
Healthcheck sudah terpasang di Dockerfile (/login); uvicorn berjalan
dengan --proxy-headers agar cocok di belakang proxy Coolify.
Status fitur
- Tahap 1 — MVP RPS: beranda status 49 MK, form RPS (CPL/CPMK/Sub-CPMK
otomatis dari pemetaan, validasi bobot 100 %, cek cakupan Sub-CPMK),
unduh .docx format resmi UNTAN (template asli diisi langsung — logo,
merge, dan tata letak terjaga; + lampiran kisi-kisi asesmen), arsip versi
saat "selesai". Fakultas/prodi pada kop diatur env
FAKULTAS/PRODI. - Tahap 2 — Portofolio + Pengukuran: input nilai per MK di
/nilai/<kode>(unggah Excel per mahasiswa dari template yang digenerate aplikasi, atau ketik rata-rata → ditandai "bukti agregat"); mesin roll-up bagi rata Sub-CPMK → CPMK → CPL (app/hitung.py); halaman/rekap(skor CPL/CPMK prodi, status vs ambang, kelengkapan bukti, penyumbang terlemah);/metodologi(dokumentasi rumus + pengaturan ambang/skala huruf, bisa dicetak); form portofolio/portofolio/<kode>+ unduh .docx (Cover, Pengesahan, CPL, korelasi, rencana penilaian, matriks nilai mahasiswa, evaluasi ketercapaian, statistik & simpulan — struktur mengikutiContoh Portofolio MK 040126.xlsx). - Tahap 3 — Penyempurnaan:
- Tahun ajaran dinamis — diatur di
/metodologi; semua form & rekap mengikuti tahun aktif, data tahun lama tetap tersimpan. - Duplikasi RPS antar tahun ajaran — tombol "Salin dari " muncul di form RPS yang masih kosong; hasil salinan berstatus draft dan tidak pernah menimpa isian tahun aktif. - Data SKS + semester per MK (seed/sks.json, dari sheet14. Susunan MK; perbarui:python tools/extract_sks.py) — dipakai untuk prefill form RPS dan mengaktifkan roll-up tertimbang SKS (opsi di/metodologi). - Riwayat lintas semester (/rekap/riwayat) — matriks skor CPL × tahun ajaran + kelengkapan bukti, untuk melihat tren. - Cadangan —/cadangan.json(seluruh isian, termasuk arsip & pengaturan) dan/cadangan.db(file SQLite mentah). - Ekspor PDF —/rps/<kode>/unduh.pdf&/portofolio/<kode>/unduh.pdfvia LibreOffice bila terpasang di server; bila tidak, pengguna diarahkan unduh .docx (lihat catatan Dockerfile). - Tahap 4 — Akun & privasi nilai (14 Jul 2026):
- Login dengan NIP (username = NIP, password awal = NIP; hash PBKDF2,
cookie sesi HttpOnly). Kunjungan pertama saat belum ada akun membuka
/setupuntuk membuat akun kaprodi. "Reset password" di/adminmengembalikan password ke NIP. - Dua peran — kaprodi: kelola akun & reset password (/admin), penugasan MK per dosen, pengaturan prodi, cadangan; dosen: mengedit RPS/portofolio dan mengakses nilai hanya pada MK yang ditugaskan (RPS/porto MK lain tetap terbuka baca; unduhan portofolio yang memuat nilai mahasiswa ikut dibatasi). Nama penyimpan (updated_by) otomatis dari akun login. - Impor daftar mahasiswa — kaprodi mengunggah satu Excel kontrak semester (NPM, Nama, Kode MK, Kelas; template dari/admin); daftar ini mengisi otomatis template nilai tiap MK. - Dasbor monitoring (
/pantau, 18 Jul 2026): grafik ketercapaian CPL & CPMK semester berjalan vs ambang (SVG tanpa library, warna mengikuti status), kelengkapan proses dokumen RPS → Nilai → Portofolio, tren skor CPL lintas tahun ajaran (sparkline, tampil bila ≥ 2 tahun berdata), dan daftar "perlu perhatian": CPL di bawah ambang + penyumbang terlemahnya, serta MK yang belum setor nilai lengkap dengan pengampunya. - Kerapian navigasi & team teaching (18 Jul 2026):
- Menu global di semua halaman (base.html) menggantikan tautan
ad-hoc per halaman; halaman aktif ditandai; Cadangan pindah ke
/admin. - Filter semester di beranda (kolom Smt dariseed/sks.json) dengan KPI yang menghitung ulang sesuai filter + persentase berwarna (hijau ≥ 75 %, kuning 40–74 %, merah < 40 %). - Semua tabel bisa diurut klik header naik/turun (static/tabel.js; tabel di dalam form dilewati, baris total tetap di bawah). - Team teaching nilai: unggahan Excel menggabung per sel — tiap dosen mengunggah bagiannya (kolom Sub-CPMK sebelum/sesudah UTS atau baris mahasiswa kelasnya) tanpa menimpa dosen lain; riwayat unggahan tercatat per file+dosen; tombol "Mulai Ulang" menghapus total; mode rata-rata ditolak bila data per-mahasiswa sudah ada. Halaman nilai dirapikan: satu metodologi, cara agregat dilipat sebagai alternatif. - Input nilai langsung di aplikasi (cara utama): tabel mahasiswa × Sub-CPMK yang bisa diketik, terisi otomatis dari impor kaprodi + nilai tersimpan; menyimpan mengganti seluruh isi tabel dengan yang tampil. Unggah Excel tetap tersedia (dilipat) untuk nilai yang sudah direkap atau team teaching yang mengisi terpisah.