Files
OBE-Mapping/README.md
Power BI Dev 9be6bd03e3 Gabungkan aplikasi RPS & Portofolio OBE (dashboard jadi bagian aplikasi)
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>
2026-07-18 12:05:28 +07:00

138 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```bash
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:
```bash
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:
```bash
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
- [x] 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`.
- [x] 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`).
- [x] 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 <tahun>"
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).
- [x] 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 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.
- [x] 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.
- [x] 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.