Power BI Dev adf2918e85 Ubah teks peringatan Sub-CPMK-komponen: fokus ke "belum ditautkan"
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>
2026-08-09 20:56:18 +07:00

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.

  1. Push repo ini ke GitHub (private), hubungkan ke Coolify: New Resource → Application → Private Repository, Build Pack: Dockerfile, Port 8000.
  2. Tambahkan volume persisten ke /data (wajib — tempat SQLite; tanpa ini data hilang tiap redeploy).
  3. Env (opsional, ada default): TAHUN_AJARAN (mis. 2026/2027 Ganjil; hanya fallback awal — tahun aktif selanjutnya diatur di /metodologi), FAKULTAS, PRODI (kop dokumen .docx).
  4. Deploy, buka domainnya → kunjungan pertama membuka /setup untuk membuat akun kaprodi.
  5. Memindahkan data lokal ke server (bila isian lokal mau dibawa): unduh /cadangan.db dari instalasi lokal, lalu salin ke volume server sebagai /data/app.db (docker cp cadangan.db <container>:/data/app.db lalu restart), atau mulai bersih dari /setup.
  6. Tombol PDF butuh LibreOffice — aktifkan baris apt-get install libreoffice-writer di 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 mengikuti Contoh 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 sheet 14. 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.pdf via 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 /setup untuk membuat akun kaprodi. "Reset password" di /admin mengembalikan password ke NIP. - Dua perankaprodi: 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 dari seed/sks.json) dengan KPI yang menghitung ulang sesuai filter + persentase berwarna (hijau ≥ 75 %, kuning 4074 %, 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.
S
Description
No description provided
Readme 18 MiB
Languages
HTML 63.4%
Python 33.3%
CSS 2.1%
JavaScript 1%
Dockerfile 0.2%