# 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 0–100; 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 (C1–C6) 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-CPMK–CPMK–CPL–MK | 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.