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

12 KiB
Raw Blame History

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.

  1. 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.