Files
OBE-Mapping/RANCANGAN.md
T
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

228 lines
12 KiB
Markdown
Raw 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.
# Rancangan Aplikasi Penyusunan RPS & Portofolio Mata Kuliah
**Prodi Informatika (S-1) · Universitas Tanjungpura — Kurikulum OBE**
## 1. Tujuan
Membantu dosen menyusun **RPS (format APTIKOM 2024)** dan **Portofolio Mata Kuliah**
melalui form web, lalu menghasilkan dokumen **.docx yang formatnya identik dengan
template resmi** — tanpa dosen menyentuh Word sama sekali.
Nilai tambah utama: data kurikulum yang sudah ada (10 CPL, 34 CPMK, 49 MK,
549 Sub-CPMK — sumber: dashboard pemetaan) dipakai untuk **mengisi otomatis**
bagian CPL/CPMK/Sub-CPMK begitu dosen memilih mata kuliah. Dosen hanya melengkapi
bagian yang memang pengetahuannya: tabel mingguan, penilaian, referensi.
## 2. Keputusan desain (sudah disepakati)
| Aspek | Keputusan |
|---|---|
| Deployment | Web app + server, deploy via Coolify (Dockerfile), seperti dashboard |
| Backend | Python: FastAPI + SQLite + python-docx |
| Autentikasi | **Login dengan NIP** — username = NIP, password awal = NIP (revisi 14 Jul 2026 — dibutuhkan karena aplikasi menyimpan nilai per mahasiswa; kredensial dibuat sesederhana mungkin atas keputusan user). Dua peran: **kaprodi** (kelola akun, penugasan MK, impor daftar mahasiswa, pengaturan, cadangan) dan **dosen** (edit RPS/porto & lihat nilai hanya pada MK yang ditugaskan; RPS MK lain terbuka baca). Keputusan awal "tanpa login" dibatalkan. |
| Template RPS | `Template_RPS_APTIKOM2024.docx` (kode generatornya sudah ada: `buat_template_rps.py`) |
| Template Portofolio | Akan diberikan user — generator dibuat setelah file diterima |
## 3. Arsitektur
```
┌──────────────────────────── Docker (Coolify) ────────────────────────────┐
│ FastAPI (uvicorn, port 8000) │
│ ├── UI: Jinja2 templates + sedikit JS vanilla (tanpa build step) │
│ ├── API: CRUD RPS/Portofolio, generate .docx │
│ ├── Generator dokumen: python-docx (refactor dari buat_template_rps.py) │
│ └── SQLite ←── volume persisten Coolify (/data/app.db) │
└──────────────────────────────────────────────────────────────────────────┘
Seed data: JSON kurikulum diekstrak dari dashboard-deploy/index.html (baris 237)
```
Prinsip: **satu container, tanpa build frontend, tanpa dependensi eksternal saat runtime.**
Form dirender server-side; interaktivitas (tambah baris minggu, hitung total bobot)
pakai JS vanilla inline.
## 4. Model data
Entitas kurikulum (read-only, di-seed sekali dari JSON dashboard, bisa di-reseed):
- `cpl` — kode, deskripsi
- `mk` — kode, nama, sks, semester
- `cpmk` — kode, deskripsi, relasi ke CPL
- `sub_cpmk` — kode, uraian, relasi ke CPMK & MK
Entitas isian dosen:
- `rps` — satu per MK per tahun ajaran:
- identitas (bobot teori/praktikum, prasyarat, dosen pengampu, koordinator, kaprodi)
- deskripsi singkat MK
- pilihan CPL/CPMK/Sub-CPMK yang dibebankan (default: semua hasil pemetaan, bisa dikurangi)
- `rps_minggu` — 16 baris (minggu, sub-CPMK, indikator, kriteria & bentuk penilaian,
metode & estimasi waktu, materi & referensi, bobot %) — minggu 8 = UTS, 16 = UAS
- `rps_bobot` — rekap komponen penilaian (Tugas/Kuis, Praktikum, UTS, UAS)
- `rps_referensi` — daftar pustaka (APA)
- status: `draft` / `selesai`, `updated_at`, `updated_by` (nama diketik bebas)
- `portofolio` — satu per MK per semester berjalan; **struktur field mengikuti template
yang akan diberikan** (umumnya: realisasi pembelajaran, ketercapaian CPMK, distribusi
nilai, refleksi, rencana perbaikan)
Entitas pengukuran (lihat §7):
- `nilai_komponen` — realisasi skor per komponen penilaian per MK per semester
(rata-rata kelas 0100; opsional per mahasiswa via impor CSV pada tahap lanjut)
- Bobot penilaian per Sub-CPMK **tidak perlu entitas baru** — sudah terkandung di
`rps_minggu.bobot` (tiap baris minggu terikat ke Sub-CPMK) dan `rps_bobot`
## 5. Arah visual (UI)
Kekhawatiran user: tampilan tidak boleh terasa "template buatan AI". Kesepakatan kerja:
- **Tanpa framework CSS** (tanpa Tailwind/Bootstrap) — CSS ditulis tangan mengikuti
satu arah visual yang dipilih dari mockup.
- Tiga kandidat arah sudah dibuat sebagai mockup nyata (artifact
`Arah Visual — Aplikasi RPS & Portofolio`):
- **A · Dokumen Dinas** — tata naskah resmi: kop bergaris ganda, Times New Roman,
tabel bergaris penuh, biru `#1F4E79` dari template Word, status berupa stempel.
- **B · Lembar Kerja Teknik** — kertas milimeter, blok judul gambar teknik,
monospace untuk data, aksen oranye drafting.
- **C · Papan Prodi** — modernisme layanan publik: blok warna datar hijau
pinus + marigold, huruf Bahnschrift besar, sudut siku, tanpa bayangan.
- Orientasi layout **landscape/lebar** (keputusan user, 14 Jul 2026): "kertas"
aplikasi selebar `min(96vw, 1720px)` — memudahkan pengisian tabel mingguan
dan selaras dengan format RPS UNTAN yang memang landscape.
- Arah terpilih: **A · Dokumen Dinas** (keputusan user, 13 Jul 2026) — palet, tipografi,
dan komponen (tabel, chip status, tombol, form) dibakukan jadi style guide kecil
di `app/static/` dan dipakai konsisten di seluruh halaman.
## 6. Alur pengguna
1. **Beranda** — daftar 49 MK + status RPS/Portofolio (belum ada / draft / selesai).
Ini sekaligus jadi tampilan pantauan untuk kaprodi.
2. **Pilih MK** → form RPS terbuka dengan bagian B/C/D **sudah terisi** dari pemetaan.
3. Dosen melengkapi identitas, deskripsi, tabel mingguan, bobot, referensi.
Validasi ringan: total bobot harus 100 %, minggu 8/16 terkunci sebagai UTS/UAS,
saran kata kerja operasional Bloom (C1C6) pada uraian.
4. **Simpan** kapan saja (draft) → **Unduh .docx** kapan saja; dokumen selalu
digenerate ulang dari data terkini sehingga format pasti konsisten.
5. Alur portofolio serupa: pilih MK → sebagian terisi dari RPS-nya → lengkapi → unduh.
## 7. Pengukuran ketercapaian CPL & CPMK — inti OBE
Dashboard yang ada (`dashboard-deploy/index.html`) memuat **graf relasi lengkap**
CPL → CPMK → MK → Sub-CPMK (549 Sub-CPMK) + matriks MK × CPL, tapi **tanpa bobot dan
tanpa nilai** — ia memetakan desain kurikulum, belum mengukur realisasinya.
Aplikasi ini melengkapi dua bahan yang hilang itu:
| Bahan | Sumber di aplikasi |
|---|---|
| Relasi Sub-CPMKCPMKCPLMK | Seed dari JSON dashboard (read-only) |
| Bobot penilaian per Sub-CPMK | Tabel mingguan (F) & rekap bobot (G) pada form RPS |
| Nilai realisasi | Form portofolio: rata-rata kelas per komponen penilaian |
**Rumus penggulungan (roll-up):**
1. **Ketercapaian Sub-CPMK** = skor komponen penilaian yang menilainya
(bila dinilai >1 komponen: rata-rata tertimbang bobot).
2. **Ketercapaian CPMK dalam satu MK** = Σ(bobot × skor Sub-CPMK pendukung) / Σ bobot.
3. **Ketercapaian CPMK tingkat prodi** = rata-rata ketercapaian CPMK itu lintas
semua MK yang mengukurnya (**bagi rata**, default — lihat catatan di bawah).
4. **Ketercapaian CPL** = rata-rata ketercapaian CPMK pendukungnya (**bagi rata**).
> **Catatan bobot antar-MK** (hasil audit spreadsheet `Draft Kurikulum Terbaru
> 2025.xlsx`, 13 Jul 2026): tidak ada matriks bobot kontribusi MK→CPL di dokumen
> kurikulum. Sheet `(%)Pemetaan CPL-MK` hanya biner (1 = memikul) + kolom "beban
> CPL" (SKS + jumlah CPL) untuk cek beban, dan sheet 18 hanya distribusi MK per
> semester. Karena itu default mengikuti praktik umum panduan KPT/OBE Dikti:
> **rata-rata sederhana dua tahap** (MK → CPMK → CPL). Opsi **tertimbang SKS**
> disediakan sebagai toggle pengaturan prodi; matriks kontribusi manual = fitur
> lanjutan bila prodi kelak menetapkannya.
5. Ambang ketercapaian (mis. ≥ 70 = tercapai) dapat diatur di pengaturan prodi.
Default bobot komponen penilaian untuk prefill rekap bobot (G) di form RPS —
diambil dari sheet `Asessement` draft kurikulum (Tabel 25): Kuis 15 %,
UTS 20 %, UAS 30 %, Tugas 35 %. Dosen bebas mengubahnya per MK.
**Keluaran pengukuran:**
- Halaman **Rekap Ketercapaian** — skor CPL & CPMK tingkat prodi per semester,
daftar CPL/CPMK di bawah ambang, dan MK mana penyumbangnya (pelengkap dashboard
pemetaan yang sudah ada).
- Tabel ketercapaian CPMK **otomatis masuk ke dokumen portofolio** tiap MK.
- Validasi di form RPS: setiap Sub-CPMK yang dipetakan ke MK harus ternilai oleh
minimal satu komponen — jika tidak, CPMK/CPL-nya tidak akan pernah terukur
(deteksi celah sejak perencanaan).
**Keputusan final (disepakati user, 13 Jul 2026, hasil kajian "auditor OBE"):**
1. **Bobot antar-MK: bagi rata dua tahap + terdokumentasi.** Aplikasi menyediakan
halaman **Metodologi Pengukuran** yang bisa dicetak (rumus roll-up, ambang,
periode) sebagai jawaban baku untuk asesor. Toggle SKS ada tapi baru diaktifkan
bila ada keputusan resmi prodi.
2. **Nilai per mahasiswa sejak awal di lapisan data.** Pintu masuk utama: unggah
Excel nilai (yang sudah dibuat dosen untuk SIAKAD). Ketik rata-rata kelas tetap
boleh sebagai transisi, tapi MK tersebut ditandai **"bukti agregat"** di rekap.
Rekap ketercapaian menampilkan **kelengkapan bukti** per CPL (x dari y MK
pemikul sudah setor nilai) berdampingan dengan skor.
3. **Kisi-kisi komponen × Sub-CPMK tampil**, terisi otomatis dari tabel mingguan
(bagi rata), dapat dikoreksi dosen, dan tercetak sebagai lampiran di dokumen
RPS/portofolio (bukti constructive alignment).
4. **Pengaturan prodi** (ambang kelulusan, skala huruf mutu, bobot default
komponen) jadi halaman sendiri — menggantikan kebijakan pinjaman dari pedoman
kampus lain yang ditemukan di sheet `Asessement`.
Temuan data yang memengaruhi UI rekap: distribusi pemikul timpang (CPL-03: 27 MK
vs CPL-10: 6 MK; CPMK-043/101/103 hanya diukur 2 MK) → indikator kelengkapan bukti
wajib tampil; granularitas tinggi (median 10, maks 24 Sub-CPMK/MK) → kisi-kisi
wajib prefill otomatis.
## 8. Generator dokumen
**Keputusan format (user, 13 Jul 2026):** RPS memakai **format resmi UNTAN**
(`RPS Template.docx`, standar Dikti SN-Dikti Permendikbud 3/2020 — landscape,
satu tabel besar berlogo UNTAN); portofolio dibuat sebagai **.docx** dengan
struktur mengikuti `Contoh Portofolio MK 040126.xlsx` (10 bagian, termasuk
Evaluasi Ketercapaian yang diisi mesin roll-up tahap 2).
- `generator/rps_untan.py` — pendekatan **isi-template-asli**: file template resmi
dimuat, sel diisi data, baris CPL/CPMK/Sub-CPMK/mingguan digandakan dari baris
prototipe (merge & gaya ikut tersalin), teks petunjuk pengisian dibuang, kop
diganti identitas prodi (fakultas/prodi via env `FAKULTAS` / `PRODI`), plus
lampiran kisi-kisi asesmen. Logo UNTAN bawaan template ikut tersalin otomatis;
logo yang sama dipakai di kop aplikasi web (`static/logo-untan.png`).
- `generator/rps_docx.py` — generator format APTIKOM 2024 (versi awal), disimpan
sebagai alternatif; tidak dipakai rute unduh.
- `generator/portofolio_docx.py` — tahap 2, meniru struktur contoh xlsx dalam
bentuk .docx.
## 9. Struktur proyek
```
rps-portofolio-app/
├── app/
│ ├── main.py # FastAPI, routing
│ ├── db.py # SQLite (sqlite3/SQLModel), skema & seed
│ ├── generator/
│ │ ├── rps_docx.py
│ │ └── portofolio_docx.py
│ ├── templates/ # Jinja2: beranda, form RPS, form portofolio
│ └── static/ # css + js vanilla
├── seed/kurikulum.json # hasil ekstraksi dari dashboard
├── Dockerfile
├── requirements.txt
└── RANCANGAN.md
```
## 10. Tahapan pengerjaan
1. **MVP RPS** — seed data kurikulum, beranda status, form RPS, generate .docx, Dockerfile.
2. **Portofolio + Pengukuran** — setelah template diterima: analisis struktur, form portofolio, input nilai komponen, mesin roll-up ketercapaian CPMK/CPL, halaman Rekap Ketercapaian, generator .docx portofolio.
3. **Penyempurnaan** — duplikasi RPS antar tahun ajaran, ekspor PDF, rekap
ketercapaian CPMK lintas MK, backup/ekspor seluruh database ke JSON.
## 11. Risiko & mitigasi
- **Tanpa login → bisa saling timpa**: setiap simpan mencatat nama & waktu; riwayat
versi sederhana (simpan snapshot JSON tiap kali status berubah ke `selesai`).
- **Data kurikulum berubah**: seed dipisah sebagai JSON; ada perintah re-seed yang
tidak menyentuh data isian dosen.
- **SQLite di container**: wajib volume persisten di Coolify (`/data`), plus tombol
ekspor database dari UI sebagai cadangan.