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>
This commit is contained in:
Power BI Dev
2026-07-18 12:05:28 +07:00
parent 3405dc21ff
commit 9be6bd03e3
42 changed files with 11366 additions and 53 deletions
+82
View File
@@ -0,0 +1,82 @@
{% extends "base.html" %}
{% block judul %}Metodologi Pengukuran — Informatika UNTAN{% endblock %}
{% block isi %}
<div class="nav-baris">
<span></span>
<a href="javascript:window.print()">Cetak halaman ini</a>
</div>
<h1>Metodologi Pengukuran Ketercapaian CPL/CPMK</h1>
<p class="keterangan">Halaman ini adalah dokumentasi resmi metode pengukuran — jawaban baku untuk asesor atas pertanyaan "angka ketercapaian ini dihitung dari mana?".</p>
{% if pesan %}<div class="info">{{ pesan }}</div>{% endif %}
<h2 class="bagian">1. SUMBER DATA</h2>
<table class="grid">
<tr><td class="label">Relasi CPLCPMKMKSub-CPMK</td><td>Pemetaan kurikulum OBE prodi (Dokumen 9): 10 CPL · 34 CPMK · 49 MK · 549 Sub-CPMK.</td></tr>
<tr><td class="label">Bobot penilaian</td><td>RPS tiap MK: bobot komponen penilaian dan pemetaannya ke Sub-CPMK (kisi-kisi asesmen, porsi bagi rata).</td></tr>
<tr><td class="label">Nilai</td><td>Skor 0100 per mahasiswa per Sub-CPMK (unggah Excel). Input rata-rata kelas diperbolehkan sebagai transisi dan ditandai <i>bukti agregat</i>.</td></tr>
</table>
<h2 class="bagian">2. RUMUS ROLL-UP (RATA-RATA SEDERHANA / BAGI RATA)</h2>
<table class="grid">
<tr><td class="label">Skor Sub-CPMK</td><td>Rata-rata skor seluruh mahasiswa pada Sub-CPMK tersebut.</td></tr>
<tr><td class="label">Skor CPMK (dalam MK)</td><td>Rata-rata skor Sub-CPMK pendukungnya dalam MK tersebut.</td></tr>
<tr><td class="label">Skor CPMK (prodi)</td><td>Rata-rata skor CPMK tersebut lintas seluruh MK yang mengukurnya{% if p.metode_antar_mk == 'sks' %} — <b>saat ini diatur tertimbang SKS</b>{% endif %}.</td></tr>
<tr><td class="label">Skor CPL</td><td>Rata-rata skor seluruh CPMK pendukung CPL tersebut.</td></tr>
<tr><td class="label">% Kelulusan</td><td>Persentase mahasiswa dengan skor ≥ ambang (hanya tersedia pada data per mahasiswa).</td></tr>
<tr><td class="label">Kelengkapan bukti</td><td>Jumlah titik ukur (pasangan MK×CPMK) yang sudah menyetor nilai, dibanding seluruh titik ukur pemikul.</td></tr>
</table>
<h2 class="bagian">3. PENGATURAN PRODI</h2>
<form method="post" action="/metodologi">
<table class="grid">
<tr>
<td class="label">Tahun ajaran aktif</td>
<td class="isian"><input type="text" name="tahun_aktif" style="width:220px" value="{{ p.tahun_aktif }}" placeholder="mis. 2026/2027 Ganjil">
<span style="color:var(--grey)">— semua form &amp; rekap mengikuti tahun ini; data tahun lama tetap tersimpan</span></td>
</tr>
<tr>
<td class="label">Ambang ketercapaian</td>
<td class="isian"><input type="number" name="ambang" min="0" max="100" step="1" style="width:110px" value="{{ p.ambang }}"> <span style="color:var(--grey)">(skor ≥ ambang = tercapai)</span></td>
</tr>
<tr>
<td class="label">Metode antar-MK</td>
<td class="isian">
<select name="metode_antar_mk" style="width:auto">
<option value="rata" {% if p.metode_antar_mk == 'rata' %}selected{% endif %}>Bagi rata (default — sesuai praktik umum KPT Dikti)</option>
<option value="sks" {% if p.metode_antar_mk == 'sks' %}selected{% endif %}>Tertimbang SKS (aktifkan hanya dengan keputusan resmi prodi)</option>
</select>
</td>
</tr>
<tr>
<td class="label">Skala huruf mutu</td>
<td class="isian"><textarea name="skala_huruf" rows="10" style="font-family:Consolas,monospace;font-size:13px">{{ p.skala_huruf }}</textarea>
<div style="color:var(--grey);font-size:12px;padding:4px 6px">Format per baris: HURUF|MIN|MAX|ANGKA</div>
</td>
</tr>
</table>
<div class="aksi-baris">
{% if boleh_ubah %}
<span class="spacer"></span>
<button class="tombol" type="submit">Simpan Pengaturan</button>
{% else %}
<span style="color:var(--grey);font-size:13px">Pengaturan prodi hanya dapat diubah oleh kaprodi.</span>
{% endif %}
</div>
</form>
<h2 class="bagian">4. SKALA HURUF MUTU BERLAKU</h2>
<table class="grid" style="max-width:420px">
<thead><tr><th>Huruf</th><th class="tengah">Rentang</th><th class="tengah">Angka Mutu</th></tr></thead>
<tbody>
{% for s in skala %}
<tr>
<td class="tengah"><b>{{ s.huruf }}</b></td>
<td class="tengah">{{ '%g'|format(s.lo) }} {{ '%g'|format(s.hi) }}</td>
<td class="tengah">{{ '%.2f'|format(s.angka) if s.angka is not none else '—' }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}