547 lines
194 KiB
HTML
547 lines
194 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="id">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Dashboard Pemetaan CPMK — Informatika UNTAN</title>
|
||
<style>
|
||
:root{
|
||
--bg:#f4f6f8; --panel:#ffffff; --ink:#1b2733; --muted:#647281; --line:#e2e8f0;
|
||
--brand:#0b6b5a; --brand2:#13917b; --accent:#e08a2b; --chip:#eef4f3; --shadow:0 1px 3px rgba(16,40,60,.08),0 8px 24px rgba(16,40,60,.06);
|
||
--hl:#ffe9c7; --hlink:#0b6b5a;
|
||
}
|
||
html[data-theme="dark"]{
|
||
--bg:#0e1620; --panel:#16212e; --ink:#e6edf3; --muted:#93a2b3; --line:#26323f;
|
||
--brand:#2fb89e; --brand2:#46cdb2; --accent:#f0a64a; --chip:#1d2a36; --shadow:0 1px 3px rgba(0,0,0,.4),0 10px 30px rgba(0,0,0,.35);
|
||
--hl:#4a3a1a; --hlink:#46cdb2;
|
||
}
|
||
*{box-sizing:border-box}
|
||
body{margin:0;font-family:'Segoe UI',Roboto,system-ui,Arial,sans-serif;background:var(--bg);color:var(--ink);line-height:1.45;font-size:14px}
|
||
a{color:var(--hlink)}
|
||
.wrap{max-width:1280px;margin:0 auto;padding:0 20px 80px}
|
||
header.top{position:sticky;top:0;z-index:50;background:linear-gradient(180deg,var(--brand),var(--brand2));color:#fff;padding:14px 0;box-shadow:var(--shadow)}
|
||
.top .wrap{padding-bottom:0;display:flex;flex-wrap:wrap;align-items:center;gap:14px}
|
||
.brandbox{display:flex;flex-direction:column;line-height:1.15}
|
||
.brandbox b{font-size:17px;letter-spacing:.2px}
|
||
.brandbox span{font-size:11.5px;opacity:.9}
|
||
.spacer{flex:1}
|
||
.searchbox{position:relative;min-width:280px;flex:1;max-width:460px}
|
||
.searchbox input{width:100%;padding:9px 34px 9px 14px;border-radius:22px;border:none;font-size:13.5px;background:rgba(255,255,255,.95);color:#1b2733}
|
||
.searchbox .ic{position:absolute;right:12px;top:8px;opacity:.5;color:#1b2733}
|
||
.results{position:absolute;top:42px;left:0;right:0;background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);max-height:360px;overflow:auto;display:none;z-index:60}
|
||
.results.show{display:block}
|
||
.results .grp{padding:6px 12px;font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);background:var(--chip);position:sticky;top:0}
|
||
.results .item{padding:8px 12px;cursor:pointer;border-bottom:1px solid var(--line);display:flex;gap:8px;align-items:baseline}
|
||
.results .item:hover{background:var(--chip)}
|
||
.results .item b{color:var(--brand);min-width:84px;font-size:12px}
|
||
.results .item small{color:var(--muted)}
|
||
.btn{border:none;border-radius:20px;padding:8px 14px;font-size:12.5px;font-weight:600;cursor:pointer;background:rgba(255,255,255,.18);color:#fff}
|
||
.btn:hover{background:rgba(255,255,255,.30)}
|
||
.btn.ghost{background:transparent;border:1px solid rgba(255,255,255,.5)}
|
||
nav.tabs{position:sticky;top:62px;z-index:40;background:var(--panel);border-bottom:1px solid var(--line);box-shadow:var(--shadow)}
|
||
nav.tabs .wrap{padding:0 20px;display:flex;gap:4px;overflow:auto}
|
||
nav.tabs a{padding:13px 16px;text-decoration:none;color:var(--muted);font-weight:600;font-size:13px;border-bottom:3px solid transparent;white-space:nowrap}
|
||
nav.tabs a.active{color:var(--brand);border-bottom-color:var(--brand)}
|
||
section{margin-top:34px;scroll-margin-top:120px}
|
||
h2.sec{font-size:18px;margin:0 0 4px;display:flex;align-items:center;gap:10px}
|
||
h2.sec .num{background:var(--brand);color:#fff;width:26px;height:26px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;font-size:13px}
|
||
.sub{color:var(--muted);font-size:13px;margin:0 0 16px}
|
||
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
|
||
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:18px 20px;box-shadow:var(--shadow);position:relative;overflow:hidden}
|
||
.kpi .big{font-size:34px;font-weight:800;color:var(--brand);line-height:1}
|
||
.kpi .lbl{color:var(--muted);font-size:12.5px;margin-top:6px;text-transform:uppercase;letter-spacing:.4px}
|
||
.kpi .deco{position:absolute;right:-10px;bottom:-16px;font-size:64px;opacity:.07;font-weight:900}
|
||
.panel{background:var(--panel);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);padding:18px}
|
||
.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}
|
||
.toolbar .pill{background:var(--chip);border:1px solid var(--line);border-radius:18px;padding:6px 12px;font-size:12.5px;cursor:pointer;color:var(--ink)}
|
||
.toolbar .pill.on{background:var(--brand);color:#fff;border-color:var(--brand)}
|
||
.toolbar input[type=text]{padding:8px 12px;border-radius:18px;border:1px solid var(--line);background:var(--bg);color:var(--ink);font-size:13px;min-width:200px}
|
||
.matrix-scroll{overflow:auto;border:1px solid var(--line);border-radius:12px}
|
||
table.matrix{border-collapse:collapse;width:100%;font-size:12.5px}
|
||
table.matrix th,table.matrix td{border:1px solid var(--line);padding:7px 9px;text-align:center}
|
||
table.matrix thead th{position:sticky;top:0;background:var(--chip);z-index:5;cursor:pointer;user-select:none}
|
||
table.matrix thead th.mkcol{text-align:left;left:0;z-index:6}
|
||
table.matrix td.mkname{text-align:left;position:sticky;left:0;background:var(--panel);z-index:4;min-width:240px;font-weight:600}
|
||
table.matrix td.mkname small{display:block;color:var(--muted);font-weight:400;font-size:11px}
|
||
table.matrix td.cell{font-size:11px;color:var(--muted);min-width:64px}
|
||
table.matrix td.hit{background:var(--brand);color:#fff;font-weight:700}
|
||
table.matrix td.hit.dim{opacity:.28}
|
||
table.matrix tr.dim{opacity:.25}
|
||
table.matrix th.colhl,table.matrix td.colhl{outline:2px solid var(--accent);outline-offset:-2px}
|
||
.cnt{font-size:11px;color:var(--muted);font-weight:400}
|
||
/* explorer */
|
||
.explorer{display:grid;grid-template-columns:1fr 1fr 1.3fr;gap:14px}
|
||
.col{background:var(--panel);border:1px solid var(--line);border-radius:14px;overflow:hidden;display:flex;flex-direction:column;max-height:560px}
|
||
.col .head{padding:11px 14px;font-weight:700;font-size:13px;background:var(--chip);border-bottom:1px solid var(--line);position:sticky;top:0}
|
||
.col .body{overflow:auto;padding:6px}
|
||
.node{padding:9px 12px;border-radius:10px;cursor:pointer;margin:3px 4px;border:1px solid transparent}
|
||
.node:hover{background:var(--chip)}
|
||
.node.on{background:var(--brand);color:#fff}
|
||
.node b{font-size:12.5px;display:block}
|
||
.node small{font-size:11.5px;color:var(--muted);display:block;margin-top:2px}
|
||
.node.on small{color:rgba(255,255,255,.85)}
|
||
.node .tag{font-size:10.5px;background:var(--chip);color:var(--brand);border-radius:8px;padding:1px 7px;margin-left:6px}
|
||
.node.on .tag{background:rgba(255,255,255,.25);color:#fff}
|
||
.subitem{padding:8px 12px;border-bottom:1px solid var(--line)}
|
||
.subitem b{color:var(--brand);font-size:12px}
|
||
.subitem p{margin:3px 0 0;font-size:12.5px}
|
||
.empty{padding:24px;text-align:center;color:var(--muted);font-size:13px}
|
||
/* mk search */
|
||
.mkgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px}
|
||
.mkcard{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:14px;box-shadow:var(--shadow);cursor:pointer;transition:.15s}
|
||
.mkcard:hover{transform:translateY(-2px);border-color:var(--brand)}
|
||
.mkcard .code{font-size:11px;color:var(--accent);font-weight:700}
|
||
.mkcard .nm{font-weight:700;font-size:13.5px;margin:3px 0 8px}
|
||
.mkcard .stat{display:flex;gap:14px;font-size:12px;color:var(--muted)}
|
||
.mkcard .stat b{color:var(--brand);font-size:16px;display:block}
|
||
.cpl-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}
|
||
.cpl-chips span{font-size:10px;background:var(--chip);color:var(--brand);border-radius:7px;padding:2px 6px}
|
||
/* modal */
|
||
.modal{position:fixed;inset:0;background:rgba(10,20,30,.55);display:none;z-index:100;align-items:flex-start;justify-content:center;padding:40px 16px;overflow:auto}
|
||
.modal.show{display:flex}
|
||
.modal .box{background:var(--panel);border-radius:18px;max-width:780px;width:100%;box-shadow:var(--shadow);overflow:hidden}
|
||
.modal .mh{background:linear-gradient(180deg,var(--brand),var(--brand2));color:#fff;padding:18px 22px}
|
||
.modal .mh .code{font-size:12px;opacity:.85}
|
||
.modal .mh h3{margin:4px 0 0;font-size:19px}
|
||
.modal .mb{padding:20px 22px;max-height:62vh;overflow:auto}
|
||
.modal .x{float:right;cursor:pointer;font-size:22px;line-height:1;opacity:.85}
|
||
.cpmkblock{margin-bottom:16px;border-left:3px solid var(--brand);padding-left:12px}
|
||
.cpmkblock h4{margin:0 0 2px;font-size:13.5px;color:var(--brand)}
|
||
.cpmkblock p.d{margin:0 0 8px;font-size:12.5px;color:var(--muted)}
|
||
.cpmkblock ul{margin:0;padding-left:18px}
|
||
.cpmkblock li{font-size:12.5px;margin-bottom:4px}
|
||
/* gaps */
|
||
.gapgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px}
|
||
.gapcard{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px;box-shadow:var(--shadow)}
|
||
.gapcard h4{margin:0 0 10px;font-size:14px;display:flex;align-items:center;gap:8px}
|
||
.gapcard h4 .ic{width:24px;height:24px;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;font-size:13px;color:#fff}
|
||
.bar{display:flex;align-items:center;gap:8px;margin:5px 0;font-size:12px}
|
||
.bar .nm{min-width:0;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
||
.bar .track{flex:1.4;height:9px;background:var(--chip);border-radius:6px;overflow:hidden}
|
||
.bar .fill{height:100%;background:var(--brand);border-radius:6px}
|
||
.bar .v{min-width:24px;text-align:right;font-weight:700;color:var(--brand)}
|
||
.flag{display:flex;gap:8px;font-size:12.5px;padding:6px 0;border-bottom:1px solid var(--line)}
|
||
.flag b{color:var(--accent)}
|
||
/* sankey */
|
||
.sankey-wrap{overflow:auto;border:1px solid var(--line);border-radius:12px;background:var(--panel)}
|
||
#sankey{display:block;min-width:760px}
|
||
.snode rect{cursor:pointer}
|
||
.slabel{font-size:11px;fill:var(--ink);pointer-events:none}
|
||
.slink{fill:none;opacity:.32;transition:opacity .15s}
|
||
.slink.hl{opacity:.85}
|
||
.slink.dim{opacity:.05}
|
||
.legend{display:flex;flex-wrap:wrap;gap:10px;margin-top:10px;font-size:11.5px;color:var(--muted)}
|
||
.legend span{display:inline-flex;align-items:center;gap:5px}
|
||
.legend i{width:12px;height:12px;border-radius:3px;display:inline-block}
|
||
footer{margin-top:50px;color:var(--muted);font-size:12px;text-align:center;border-top:1px solid var(--line);padding-top:18px}
|
||
.clearbar{display:none;align-items:center;gap:10px;background:var(--hl);border:1px solid var(--accent);border-radius:12px;padding:8px 14px;margin-bottom:14px;font-size:13px}
|
||
.clearbar.show{display:flex}
|
||
.clearbar b{color:var(--accent)}
|
||
.clearbar button{margin-left:auto;border:none;background:var(--accent);color:#fff;border-radius:14px;padding:5px 12px;cursor:pointer;font-weight:600}
|
||
@media print{
|
||
header.top,nav.tabs,.searchbox,.btn,.toolbar,.clearbar,#dlbar{display:none!important}
|
||
body{background:#fff}
|
||
.panel,.kpi,.mkcard,.gapcard,.col{box-shadow:none;break-inside:avoid}
|
||
section{break-inside:avoid}
|
||
}
|
||
@media(max-width:900px){.kpis{grid-template-columns:repeat(2,1fr)}.explorer{grid-template-columns:1fr}}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<header class="top">
|
||
<div class="wrap">
|
||
<div class="brandbox">
|
||
<b>Dashboard Pemetaan CPMK</b>
|
||
<span>Prodi Informatika (S-1) · Fakultas Teknik · Universitas Tanjungpura</span>
|
||
</div>
|
||
<div class="searchbox">
|
||
<input id="gsearch" type="text" placeholder="Cari CPL, CPMK, Mata Kuliah, atau Sub-CPMK…" autocomplete="off">
|
||
<span class="ic">🔍</span>
|
||
<div class="results" id="gresults"></div>
|
||
</div>
|
||
<div class="spacer"></div>
|
||
<button class="btn ghost" id="themeBtn" title="Mode terang/gelap">☀ Tema</button>
|
||
<button class="btn" id="csvBtn" title="Unduh matriks (CSV)">⬇ CSV</button>
|
||
<button class="btn" id="pdfBtn" title="Cetak / simpan PDF">🖨 PDF</button>
|
||
</div>
|
||
</header>
|
||
<nav class="tabs">
|
||
<div class="wrap">
|
||
<a href="#ringkasan" class="active">Ringkasan</a>
|
||
<a href="#alur">Diagram Alur</a>
|
||
<a href="#matriks">Matriks MK×CPL</a>
|
||
<a href="#explorer">Explorer CPL→Sub-CPMK</a>
|
||
<a href="#matakuliah">Mata Kuliah</a>
|
||
<a href="#celah">Deteksi Celah</a>
|
||
</div>
|
||
</nav>
|
||
|
||
<div class="wrap">
|
||
<div class="clearbar" id="clearbar"><b id="clearlbl"></b><span>— sorotan aktif di seluruh panel</span><button onclick="clearHL()">Hapus sorotan ✕</button></div>
|
||
|
||
<section id="ringkasan">
|
||
<h2 class="sec"><span class="num">1</span>Ringkasan Pemetaan</h2>
|
||
<p class="sub">Rekap kuantitatif rumusan dan pemetaan capaian pembelajaran pada dokumen RPS (BAB IX).</p>
|
||
<div class="kpis" id="kpis"></div>
|
||
</section>
|
||
|
||
<section id="alur">
|
||
<h2 class="sec"><span class="num">2</span>Diagram Alur CPL → CPMK → MK</h2>
|
||
<p class="sub">Aliran kontribusi capaian. Tebal pita = jumlah keterkaitan. Klik node untuk menyorot jalurnya di seluruh dashboard.</p>
|
||
<div class="panel">
|
||
<div class="sankey-wrap"><svg id="sankey"></svg></div>
|
||
<div class="legend" id="sankeyLegend"></div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="matriks">
|
||
<h2 class="sec"><span class="num">3</span>Matriks Pemetaan MK × CPL</h2>
|
||
<p class="sub">Sel terisi = Mata Kuliah berkontribusi pada CPL tersebut (menampilkan kode CPMK). Klik judul kolom CPL untuk menyorot.</p>
|
||
<div class="toolbar">
|
||
<input type="text" id="mxsearch" placeholder="Saring mata kuliah…">
|
||
<span class="pill" id="mxonly">Hanya baris tersorot</span>
|
||
<span class="cnt" id="mxcount"></span>
|
||
</div>
|
||
<div class="matrix-scroll"><table class="matrix" id="mtx"></table></div>
|
||
</section>
|
||
|
||
<section id="explorer">
|
||
<h2 class="sec"><span class="num">4</span>Explorer CPL → CPMK → Sub-CPMK</h2>
|
||
<p class="sub">Telusuri bertingkat: pilih CPL untuk melihat CPMK-nya, lalu pilih CPMK untuk melihat Sub-CPMK beserta uraiannya.</p>
|
||
<div class="explorer">
|
||
<div class="col"><div class="head" id="cplHead">CPL (10)</div><div class="body" id="cplList"></div></div>
|
||
<div class="col"><div class="head" id="cpmkHead">CPMK</div><div class="body" id="cpmkList"></div></div>
|
||
<div class="col"><div class="head" id="subHead">Sub-CPMK</div><div class="body" id="subList"></div></div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="matakuliah">
|
||
<h2 class="sec"><span class="num">5</span>Pencarian Mata Kuliah</h2>
|
||
<p class="sub">Cari mata kuliah lalu klik kartu untuk melihat CPMK & Sub-CPMK yang diembannya.</p>
|
||
<div class="toolbar"><input type="text" id="mksearch" placeholder="Cari nama / kode mata kuliah…"><span class="cnt" id="mkcount"></span></div>
|
||
<div class="mkgrid" id="mkgrid"></div>
|
||
</section>
|
||
|
||
<section id="celah">
|
||
<h2 class="sec"><span class="num">6</span>Analisis Cakupan & Deteksi Celah</h2>
|
||
<p class="sub">Insight otomatis: beban CPMK per MK, kekuatan dukungan tiap CPL, dan potensi celah pemetaan.</p>
|
||
<div class="gapgrid" id="gapgrid"></div>
|
||
</section>
|
||
|
||
<footer>Sumber: <b>Dokumen_9_RPS_Rumusan_Pemetaan_CPMK.docx</b> · Dibuat untuk Kurikulum OBE Informatika UNTAN · Dashboard offline interaktif.</footer>
|
||
</div>
|
||
|
||
<div class="modal" id="modal"><div class="box"><div class="mh"><span class="x" onclick="closeModal()">×</span><div class="code" id="mCode"></div><h3 id="mTitle"></h3></div><div class="mb" id="mBody"></div></div></div>
|
||
|
||
<script>
|
||
const MODEL = {"cpl": {"CPL-01": {"kode": "CPL-01", "desk": "Mampu menunjukkan sikap profesional, mandiri, jujur, bertanggung jawab, dan beretika sesuai nilai-nilai Pancasila dalam pengambilan keputusan di bidang informatika."}, "CPL-02": {"kode": "CPL-02", "desk": "Mampu menunjukkan kepedulian terhadap isu sosial, budaya, lingkungan, serta nilai lokal dan prinsip keberlanjutan dalam solusi informatika."}, "CPL-03": {"kode": "CPL-03", "desk": "Menguasai konsep teoritis dan prinsip dasar komputasi untuk menganalisis persoalan serta mengidentifikasi kebutuhan perangkat lunak."}, "CPL-04": {"kode": "CPL-04", "desk": "Menganalisis, merancang, dan mengintegrasikan keamanan, jaringan, dan IoT untuk pengembangan solusi informatika cerdas berkelanjutan."}, "CPL-05": {"kode": "CPL-05", "desk": "Mampu berpikir logis, kritis, sistematis, dan inovatif dalam mengidentifikasi dan merancang solusi komputasi."}, "CPL-06": {"kode": "CPL-06", "desk": "Mampu berkomunikasi efektif, menyampaikan gagasan dan solusi, serta membangun kolaborasi dalam tim maupun mandiri dalam proyek perangkat lunak."}, "CPL-07": {"kode": "CPL-07", "desk": "Mampu mengambil keputusan berbasis analisis data serta informasi untuk memecahkan masalah komputasi yang kompleks secara bertanggung jawab."}, "CPL-08": {"kode": "CPL-08", "desk": "Mampu merancang solusi komputasi berbasis kebutuhan pengguna serta mendokumentasikan spesifikasi kebutuhan perangkat lunak dan mendukung aspek keberlanjutan."}, "CPL-09": {"kode": "CPL-09", "desk": "Mampu membangun, mengimplementasikan, mengevaluasi perangkat lunak berbasis komputasi secara efektif, aman, dan efisien untuk kebutuhan pengguna."}, "CPL-10": {"kode": "CPL-10", "desk": "Mampu mengimplementasikan konektivitas dan pertukaran data antara perangkat sensor dan platform IoT serta menganalisis celah keamanan dan privasi pada jaringan dan aplikasi."}}, "cpmk": {"CPMK011": {"kode": "CPMK011", "cpl": "CPL-01", "desk": "Mampu menerapkan nilai etika, kejujuran, dan integritas akademik secara konsisten dalam setiap aktivitas perkuliahan dan pengerjaan tugas tanpa melakukan plagiasi.", "mk": ["Pendidikan Pancasila", "Pendidikan Agama", "Kewarganegaraan", "Literasi Digital dan Etika Komputasi", "Etika, Masyarakat dan Komputer Keberlanjutan", "PMKM"]}, "CPMK012": {"kode": "CPMK012", "cpl": "CPL-01", "desk": "Mampu menunjukkan kedisiplinan dan tanggung jawab dengan menyelesaikan seluruh kewajiban tugas secara mandiri dan tepat waktu.", "mk": ["Pendidikan Pancasila", "Pendidikan Agama", "Komunikasi dan Keterampilan Profesional", "Literasi Digital dan Etika Komputasi", "Etika, Masyarakat dan Komputer Keberlanjutan", "Kerja Praktik", "Teknopreneur", "PMKM"]}, "CPMK013": {"kode": "CPMK013", "cpl": "CPL-01", "desk": "Mampu menunjukkan sikap profesional dalam berinteraksi dan bekerjasama dengan tim melalui komunikasi yang konstruktif dan pembagian peran yang adil.", "mk": ["Pendidikan Pancasila", "Bahasa Inggris", "Komunikasi dan Keterampilan Profesional", "Bahasa Indonesia", "Literasi Digital dan Etika Komputasi", "Etika, Masyarakat dan Komputer Keberlanjutan", "Proyek Perangkat Lunak", "Kerja Praktik", "Teknopreneur", "PMKM"]}, "CPMK021": {"kode": "CPMK021", "cpl": "CPL-02", "desk": "Mampu menganalisis isu sosial, budaya, dan lingkungan yang relevan dengan penerapan Teknologi Informasi melalui kajian studi kasus nyata di masyarakat.", "mk": ["Pendidikan Pancasila", "Bahasa Inggris", "Pengantar Informatika", "Kewarganegaraan", "Bahasa Indonesia", "Literasi Digital dan Etika Komputasi", "Sistem Informasi", "Etika, Masyarakat dan Komputer Keberlanjutan", "PMKM"]}, "CPMK022": {"kode": "CPMK022", "cpl": "CPL-02", "desk": "Mampu mengevaluasi dampak sosial dan keberlanjutan dari sebuah solusi TI menggunakan kerangka analisis dampak yang sistematis, objektif dan berbasis data.", "mk": ["Pendidikan Pancasila", "Pendidikan Agama", "Pengantar Informatika", "Organisasi dan Arsitektur Komputer", "Literasi Digital dan Etika Komputasi", "Sistem Informasi", "Etika, Masyarakat dan Komputer Keberlanjutan", "Teknopreneur"]}, "CPMK023": {"kode": "CPMK023", "cpl": "CPL-02", "desk": "Mampu merancang dan menerapkan solusi teknologi tepat guna yang kontekstual dan berkelanjutan untuk membantu menyelesaikan permasalahan nyata di komunitas sasaran.", "mk": ["Etika, Masyarakat dan Komputer Keberlanjutan", "Kerja Praktik", "PMKM"]}, "CPMK031": {"kode": "CPMK031", "cpl": "CPL-03", "desk": "Mampu menganalisis konsep dasar komputasi dan struktur data untuk menjelaskan keterkaitannya dalam penyelesaian masalah komputasi secara tepat.", "mk": ["Pengantar Informatika", "Matematika Diskrit", "Logika Komputasional", "Dasar Pemrograman", "Praktikum Dasar Pemrograman", "Organisasi dan Arsitektur Komputer", "Sistem Operasi", "Struktur Data", "Praktikum Struktur Data", "Sistem Paralel dan Terdistribusi", "Pemrograman Berorientasi Objek *", "Kecerdasan Buatan"]}, "CPMK032": {"kode": "CPMK032", "cpl": "CPL-03", "desk": "Mampu menganalisis teori komputasi dan model matematika untuk memformulasikan solusi masalah teknis secara sistematis.", "mk": ["Kalkulus", "Matematika Diskrit", "Logika Komputasional", "Aljabar Linier", "Probabilitas dan Statistik", "Metode Numerik", "Kecerdasan Buatan", "Metodologi Penelitian"]}, "CPMK033": {"kode": "CPMK033", "cpl": "CPL-03", "desk": "Mampu menganalisis dan merumuskan spesifikasi kebutuhan fungsional dan non-fungsional perangkat lunak secara lengkap berdasarkan studi kasus pengguna.", "mk": ["Dasar Pemrograman", "Organisasi dan Arsitektur Komputer", "Basis Data", "Praktikum Basis Data", "Rekayasa Perangkat Lunak", "Sistem Informasi", "Analisis dan Perancangan Sistem Informasi"]}, "CPMK034": {"kode": "CPMK034", "cpl": "CPL-03", "desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "mk": ["Dasar Pemrograman", "Praktikum Dasar Pemrograman", "Sistem Operasi", "Probabilitas dan Statistik", "Basis Data", "Praktikum Basis Data", "Struktur Data", "Praktikum Struktur Data", "Sistem Paralel dan Terdistribusi", "Metode Numerik", "Strategi Algoritma", "Praktikum Strategi Algoritma", "Kecerdasan Buatan", "Pembelajaran Mesin*", "Metodologi Penelitian", "Computer Vision*", "NLP*"]}, "CPMK041": {"kode": "CPMK041", "cpl": "CPL-04", "desk": "Mampu menganalisis dan menetapkan spesifikasi kebutuhan infrastruktur jaringan dan standar keamanan sistem yang diperlukan untuk mendukung kinerja aplikasi secara optimal.", "mk": ["Organisasi dan Arsitektur Komputer", "Sistem Operasi", "Jaringan Komputer", "Sistem Paralel dan Terdistribusi", "Manajemen Jaringan*", "Keamanan Informasi dan Jaringan*"]}, "CPMK042": {"kode": "CPMK042", "cpl": "CPL-04", "desk": "Mampu merancang arsitektur jaringan komputer atau sistem IoT dasar yang aman, skalabel, dan sesuai dengan topologi standar.", "mk": ["Jaringan Komputer", "Praktikum Jaringan Komputer", "Sistem Paralel dan Terdistribusi", "Manajemen Jaringan*", "Internet of Things*", "Keamanan Informasi dan Jaringan*"]}, "CPMK043": {"kode": "CPMK043", "cpl": "CPL-04", "desk": "Mampu mengimplementasikan konfigurasi perangkat jaringan dan konektivitas sensor IoT agar terhubung ke gateway atau internet dengan stabil.", "mk": ["Praktikum Jaringan Komputer", "Internet of Things*"]}, "CPMK044": {"kode": "CPMK044", "cpl": "CPL-04", "desk": "Mampu menganalisis potensi risiko keamanan pada arsitektur sistem jaringan atau IoT dan merumuskan langkah mitigasi dasarnya.", "mk": ["Sistem Operasi", "Jaringan Komputer", "Praktikum Jaringan Komputer", "Sistem Paralel dan Terdistribusi", "Manajemen Jaringan*", "Internet of Things*", "Keamanan Informasi dan Jaringan*"]}, "CPMK051": {"kode": "CPMK051", "cpl": "CPL-05", "desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "mk": ["Kalkulus", "Matematika Diskrit", "Logika Komputasional", "Dasar Pemrograman", "Praktikum Dasar Pemrograman", "Aljabar Linier", "Probabilitas dan Statistik", "Struktur Data", "Praktikum Struktur Data", "Rekayasa Perangkat Lunak", "Pemrograman Berorientasi Objek *", "Strategi Algoritma", "Praktikum Strategi Algoritma", "Kecerdasan Buatan", "Pembelajaran Mesin*", "Computer Vision*"]}, "CPMK052": {"kode": "CPMK052", "cpl": "CPL-05", "desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "mk": ["Matematika Diskrit", "Logika Komputasional", "Dasar Pemrograman", "Praktikum Dasar Pemrograman", "Aljabar Linier", "Probabilitas dan Statistik", "Struktur Data", "Praktikum Struktur Data", "Pemrograman Berorientasi Objek *", "Metode Numerik", "Strategi Algoritma", "Praktikum Strategi Algoritma", "Pemrograman Web*", "Kecerdasan Buatan", "Pembelajaran Mesin*", "Computer Vision*", "Pemrograman Mobile*", "NLP*"]}, "CPMK053": {"kode": "CPMK053", "cpl": "CPL-05", "desk": "Mampu mengevaluasi validitas logika dan efisiensi dari berbagai alternatif algoritma sebelum diimplementasikan ke dalam kode program.", "mk": ["Logika Komputasional", "Struktur Data", "Praktikum Struktur Data", "Pemrograman Berorientasi Objek *", "Metode Numerik", "Strategi Algoritma", "Praktikum Strategi Algoritma", "Kecerdasan Buatan"]}, "CPMK061": {"kode": "CPMK061", "cpl": "CPL-06", "desk": "Mampu menyusun dan mengevaluasi dokumen spesifikasi teknis perangkat lunak yang lengkap dan sesuai dengan standar industri.", "mk": ["Komunikasi dan Keterampilan Profesional", "Bahasa Indonesia", "Rekayasa Perangkat Lunak", "Analisis dan Perancangan Sistem Informasi", "Proyek Perangkat Lunak", "Kerja Praktik", "PMKM"]}, "CPMK062": {"kode": "CPMK062", "cpl": "CPL-06", "desk": "Mampu menyajikan dan mempertahankan gagasan teknis secara lisan dengan argumentasi yang logis dan didukung media visual yang efektif.", "mk": ["Bahasa Inggris", "Komunikasi dan Keterampilan Profesional", "Bahasa Indonesia", "Literasi Digital dan Etika Komputasi", "Sistem Informasi", "Metodologi Penelitian", "Proyek Perangkat Lunak", "Kerja Praktik", "Teknopreneur", "PMKM"]}, "CPMK063": {"kode": "CPMK063", "cpl": "CPL-06", "desk": "Mampu berkolaborasi secara produktif dalam tim proyek perangkat lunak menggunakan alat manajemen proyek untuk mencapai target bersama.", "mk": ["Komunikasi dan Keterampilan Profesional", "Rekayasa Perangkat Lunak", "Proyek Perangkat Lunak", "Kerja Praktik", "Teknopreneur", "PMKM"]}, "CPMK071": {"kode": "CPMK071", "cpl": "CPL-07", "desk": "Mampu menganalisis dan memvalidasi data menggunakan teknik cleansing yang tepat hingga menghasilkan dataset yang siap dianalisis.", "mk": ["Probabilitas dan Statistik", "Basis Data", "Praktikum Basis Data", "Metode Numerik", "Pembelajaran Mesin*", "Sistem Informasi Geografis*", "Computer Vision*", "NLP*"]}, "CPMK072": {"kode": "CPMK072", "cpl": "CPL-07", "desk": "Mampu menganalisis dan mengevaluasi pola serta tren data menggunakan metode statistik atau algoritma Machine Learning dasar untuk mendapatkan informasi yang berguna.", "mk": ["Aljabar Linier", "Probabilitas dan Statistik", "Metode Numerik", "Kecerdasan Buatan", "Pembelajaran Mesin*", "Sistem Informasi Geografis*", "Computer Vision*", "NLP*"]}, "CPMK073": {"kode": "CPMK073", "cpl": "CPL-07", "desk": "Mampu merumuskan dan mengevaluasi rekomendasi solusi yang strategis dan logis berdasarkan hasil interpretasi data yang akurat.", "mk": ["Probabilitas dan Statistik", "Basis Data", "Praktikum Basis Data", "Kecerdasan Buatan", "Pembelajaran Mesin*", "Sistem Informasi Geografis*", "Metodologi Penelitian", "Computer Vision*", "NLP*", "Kerja Praktik", "Teknopreneur"]}, "CPMK081": {"kode": "CPMK081", "cpl": "CPL-08", "desk": "Mampu menganalisis dan merumuskan kebutuhan pengguna ke dalam bentuk User Stories atau spesifikasi kebutuhan yang komprehensif dan mudah dipahami.", "mk": ["Rekayasa Perangkat Lunak", "Sistem Informasi", "Interaksi Manusia dan Komputer", "Analisis dan Perancangan Sistem Informasi", "Pemrograman Web*", "Sistem Informasi Geografis*", "Pemrograman Mobile*", "Proyek Perangkat Lunak", "PMKM"]}, "CPMK082": {"kode": "CPMK082", "cpl": "CPL-08", "desk": "Mampu merancang arsitektur solusi sistem yang selaras dengan spesifikasi kebutuhan pengguna yang telah disepakati.", "mk": ["Rekayasa Perangkat Lunak", "Analisis dan Perancangan Sistem Informasi", "Pemrograman Web*", "Sistem Informasi Geografis*", "Pemrograman Mobile*", "Proyek Perangkat Lunak"]}, "CPMK083": {"kode": "CPMK083", "cpl": "CPL-08", "desk": "Mampu mengintegrasikan prinsip kemudahan penggunaan (usability) dan keberlanjutan sistem ke dalam rancangan antarmuka pengguna.", "mk": ["Interaksi Manusia dan Komputer", "Analisis dan Perancangan Sistem Informasi", "Pemrograman Web*", "Sistem Informasi Geografis*", "Pemrograman Mobile*", "Proyek Perangkat Lunak"]}, "CPMK084": {"kode": "CPMK084", "cpl": "CPL-08", "desk": "Mampu mengembangkan dan mengevaluasi prototipe sistem interaktif melalui pengujian pengguna (user testing) untuk memastikan kesesuaian desain.", "mk": ["Interaksi Manusia dan Komputer", "Sistem Informasi Geografis*", "Pemrograman Mobile*", "Uji Perangkat Lunak", "Proyek Perangkat Lunak"]}, "CPMK091": {"kode": "CPMK091", "cpl": "CPL-09", "desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "mk": ["Dasar Pemrograman", "Praktikum Dasar Pemrograman", "Basis Data", "Praktikum Basis Data", "Struktur Data", "Pemrograman Berorientasi Objek *", "Strategi Algoritma", "Pemrograman Web*", "Kecerdasan Buatan", "Pembelajaran Mesin*", "Computer Vision*", "Pemrograman Mobile*", "NLP*", "Proyek Perangkat Lunak", "Kerja Praktik"]}, "CPMK092": {"kode": "CPMK092", "cpl": "CPL-09", "desk": "Mampu merancang dan melaksanakan pengujian perangkat lunak (fungsional/unit) menggunakan metode yang terstandar untuk memastikan kode berjalan dengan benar.", "mk": ["Basis Data", "Praktikum Basis Data", "Pemrograman Berorientasi Objek *", "Pemrograman Web*", "Pemrograman Mobile*", "Uji Perangkat Lunak", "Proyek Perangkat Lunak"]}, "CPMK093": {"kode": "CPMK093", "cpl": "CPL-09", "desk": "Mampu mengevaluasi kinerja dan fungsionalitas perangkat lunak melalui serangkaian skenario uji coba yang sistematis untuk mendeteksi bug.", "mk": ["Basis Data", "Praktikum Basis Data", "Pemrograman Berorientasi Objek *", "Pemrograman Web*", "Computer Vision*", "Pemrograman Mobile*", "NLP*", "Uji Perangkat Lunak", "Proyek Perangkat Lunak"]}, "CPMK094": {"kode": "CPMK094", "cpl": "CPL-09", "desk": "Mampu menyusun dan mengevaluasi laporan teknis hasil pengujian perangkat lunak secara terstruktur sebagai acuan perbaikan sistem.", "mk": ["Basis Data", "Praktikum Basis Data", "Uji Perangkat Lunak", "Proyek Perangkat Lunak", "Kerja Praktik"]}, "CPMK101": {"kode": "CPMK101", "cpl": "CPL-10", "desk": "Mampu merancang dan mengimplementasikan protokol komunikasi data untuk menghubungkan sensor fisik dengan platform IoT secara real-time.", "mk": ["Jaringan Komputer", "Internet of Things*"]}, "CPMK102": {"kode": "CPMK102", "cpl": "CPL-10", "desk": "Mampu menerapkan mekanisme enkripsi dan autentikasi pada perangkat IoT untuk menjamin kerahasiaan dan integritas data.", "mk": ["Sistem Operasi", "Jaringan Komputer", "Praktikum Jaringan Komputer", "Manajemen Jaringan*", "Internet of Things*", "Keamanan Informasi dan Jaringan*"]}, "CPMK103": {"kode": "CPMK103", "cpl": "CPL-10", "desk": "Mampu menganalisis dampak privasi data dan potensi celah keamanan pada sistem IoT yang dikembangkan serta merumuskan solusi perbaikan.", "mk": ["Internet of Things*", "Keamanan Informasi dan Jaringan*"]}}, "mk": {"MKWU-01": {"kode": "MKWU-01", "nama": "Pendidikan Pancasila", "no": "1", "cpls": {"CPL-01": ["CPMK011", "CPMK012", "CPMK013"], "CPL-02": ["CPMK021", "CPMK022"]}}, "MKWU-02": {"kode": "MKWU-02", "nama": "Pendidikan Agama", "no": "2", "cpls": {"CPL-01": ["CPMK011", "CPMK012"], "CPL-02": ["CPMK022"]}}, "MKWU-03": {"kode": "MKWU-03", "nama": "Bahasa Inggris", "no": "3", "cpls": {"CPL-01": ["CPMK013"], "CPL-02": ["CPMK021"], "CPL-06": ["CPMK062"]}}, "INF-111-101": {"kode": "INF-111-101", "nama": "Kalkulus", "no": "4", "cpls": {"CPL-03": ["CPMK032"], "CPL-05": ["CPMK051"]}}, "INF-111-201": {"kode": "INF-111-201", "nama": "Pengantar Informatika", "no": "5", "cpls": {"CPL-02": ["CPMK021", "CPMK022"], "CPL-03": ["CPMK031"]}}, "INF-111-102": {"kode": "INF-111-102", "nama": "Matematika Diskrit", "no": "6", "cpls": {"CPL-03": ["CPMK031", "CPMK032"], "CPL-05": ["CPMK051", "CPMK052"]}}, "INF-111-202": {"kode": "INF-111-202", "nama": "Logika Komputasional", "no": "7", "cpls": {"CPL-03": ["CPMK031", "CPMK032"], "CPL-05": ["CPMK051", "CPMK052", "CPMK053"]}}, "INF-111-501": {"kode": "INF-111-501", "nama": "Komunikasi dan Keterampilan Profesional", "no": "8", "cpls": {"CPL-01": ["CPMK012", "CPMK013"], "CPL-06": ["CPMK061", "CPMK062", "CPMK063"]}}, "MKWU-04": {"kode": "MKWU-04", "nama": "Kewarganegaraan", "no": "9", "cpls": {"CPL-01": ["CPMK011"], "CPL-02": ["CPMK021"]}}, "MKWU-05": {"kode": "MKWU-05", "nama": "Bahasa Indonesia", "no": "10", "cpls": {"CPL-01": ["CPMK013"], "CPL-02": ["CPMK021"], "CPL-06": ["CPMK061", "CPMK062"]}}, "INF-211-203": {"kode": "INF-211-203", "nama": "Dasar Pemrograman", "no": "11", "cpls": {"CPL-03": ["CPMK031", "CPMK033", "CPMK034"], "CPL-05": ["CPMK051", "CPMK052"], "CPL-09": ["CPMK091"]}}, "INF-221-204": {"kode": "INF-221-204", "nama": "Praktikum Dasar Pemrograman", "no": "12", "cpls": {"CPL-03": ["CPMK031", "CPMK034"], "CPL-05": ["CPMK051", "CPMK052"], "CPL-09": ["CPMK091"]}}, "INF-211-205": {"kode": "INF-211-205", "nama": "Organisasi dan Arsitektur Komputer", "no": "13", "cpls": {"CPL-02": ["CPMK022"], "CPL-03": ["CPMK031", "CPMK033"], "CPL-04": ["CPMK041"]}}, "INF-211-206": {"kode": "INF-211-206", "nama": "Sistem Operasi", "no": "14", "cpls": {"CPL-03": ["CPMK031", "CPMK034"], "CPL-04": ["CPMK041", "CPMK044"], "CPL-10": ["CPMK102"]}}, "INF-211-103": {"kode": "INF-211-103", "nama": "Aljabar Linier", "no": "15", "cpls": {"CPL-03": ["CPMK032"], "CPL-05": ["CPMK051", "CPMK052"], "CPL-07": ["CPMK072"]}}, "INF-211-502": {"kode": "INF-211-502", "nama": "Literasi Digital dan Etika Komputasi", "no": "16", "cpls": {"CPL-01": ["CPMK011", "CPMK012", "CPMK013"], "CPL-02": ["CPMK021", "CPMK022"], "CPL-06": ["CPMK062"]}}, "INF-311-104": {"kode": "INF-311-104", "nama": "Probabilitas dan Statistik", "no": "17", "cpls": {"CPL-03": ["CPMK032", "CPMK034"], "CPL-05": ["CPMK051", "CPMK052"], "CPL-07": ["CPMK071", "CPMK072", "CPMK073"]}}, "INF-311-207": {"kode": "INF-311-207", "nama": "Jaringan Komputer", "no": "18", "cpls": {"CPL-04": ["CPMK041", "CPMK042", "CPMK044"], "CPL-10": ["CPMK101", "CPMK102"]}}, "INF-321-208": {"kode": "INF-321-208", "nama": "Praktikum Jaringan Komputer", "no": "19", "cpls": {"CPL-04": ["CPMK042", "CPMK043", "CPMK044"], "CPL-10": ["CPMK102"]}}, "INF-311-209": {"kode": "INF-311-209", "nama": "Basis Data", "no": "20", "cpls": {"CPL-03": ["CPMK033", "CPMK034"], "CPL-07": ["CPMK071", "CPMK073"], "CPL-09": ["CPMK091", "CPMK092", "CPMK093", "CPMK094"]}}, "INF-321-210": {"kode": "INF-321-210", "nama": "Praktikum Basis Data", "no": "21", "cpls": {"CPL-03": ["CPMK033", "CPMK034"], "CPL-07": ["CPMK071", "CPMK073"], "CPL-09": ["CPMK091", "CPMK092", "CPMK093", "CPMK094"]}}, "INF-311-211": {"kode": "INF-311-211", "nama": "Struktur Data", "no": "22", "cpls": {"CPL-03": ["CPMK031", "CPMK034"], "CPL-05": ["CPMK051", "CPMK052", "CPMK053"], "CPL-09": ["CPMK091"]}}, "INF-321-212": {"kode": "INF-321-212", "nama": "Praktikum Struktur Data", "no": "23", "cpls": {"CPL-03": ["CPMK031", "CPMK034"], "CPL-05": ["CPMK051", "CPMK052", "CPMK053"]}}, "INF-311-301": {"kode": "INF-311-301", "nama": "Rekayasa Perangkat Lunak", "no": "24", "cpls": {"CPL-03": ["CPMK033"], "CPL-05": ["CPMK051"], "CPL-06": ["CPMK061", "CPMK063"], "CPL-08": ["CPMK081", "CPMK082"]}}, "INF-311-302": {"kode": "INF-311-302", "nama": "Sistem Informasi", "no": "25", "cpls": {"CPL-02": ["CPMK021", "CPMK022"], "CPL-03": ["CPMK033"], "CPL-06": ["CPMK062"], "CPL-08": ["CPMK081"]}}, "INF-411-303": {"kode": "INF-411-303", "nama": "Interaksi Manusia dan Komputer", "no": "26", "cpls": {"CPL-08": ["CPMK081", "CPMK083", "CPMK084"]}}, "INF-411-304": {"kode": "INF-411-304", "nama": "Analisis dan Perancangan Sistem Informasi", "no": "27", "cpls": {"CPL-03": ["CPMK033"], "CPL-06": ["CPMK061"], "CPL-08": ["CPMK081", "CPMK082", "CPMK083"]}}, "INF-411-305": {"kode": "INF-411-305", "nama": "Sistem Paralel dan Terdistribusi", "no": "28", "cpls": {"CPL-03": ["CPMK031", "CPMK034"], "CPL-04": ["CPMK041", "CPMK042", "CPMK044"]}}, "INF-411-213": {"kode": "INF-411-213", "nama": "Pemrograman Berorientasi Objek *", "no": "29", "cpls": {"CPL-03": ["CPMK031"], "CPL-05": ["CPMK051", "CPMK052", "CPMK053"], "CPL-09": ["CPMK091", "CPMK092", "CPMK093"]}}, "INF-411-105": {"kode": "INF-411-105", "nama": "Metode Numerik", "no": "30", "cpls": {"CPL-03": ["CPMK032", "CPMK034"], "CPL-05": ["CPMK052", "CPMK053"], "CPL-07": ["CPMK071", "CPMK072"]}}, "INF-411-214": {"kode": "INF-411-214", "nama": "Strategi Algoritma", "no": "31", "cpls": {"CPL-03": ["CPMK034"], "CPL-05": ["CPMK051", "CPMK052", "CPMK053"], "CPL-09": ["CPMK091"]}}, "INF-421-215": {"kode": "INF-421-215", "nama": "Praktikum Strategi Algoritma", "no": "32", "cpls": {"CPL-03": ["CPMK034"], "CPL-05": ["CPMK051", "CPMK052", "CPMK053"]}}, "INF-411-306": {"kode": "INF-411-306", "nama": "Manajemen Jaringan*", "no": "33", "cpls": {"CPL-04": ["CPMK041", "CPMK042", "CPMK044"], "CPL-10": ["CPMK102"]}}, "INF-411-503": {"kode": "INF-411-503", "nama": "Etika, Masyarakat dan Komputer Keberlanjutan", "no": "34", "cpls": {"CPL-01": ["CPMK011", "CPMK012", "CPMK013"], "CPL-02": ["CPMK021", "CPMK022", "CPMK023"]}}, "INF-511-307": {"kode": "INF-511-307", "nama": "Pemrograman Web*", "no": "35", "cpls": {"CPL-05": ["CPMK052"], "CPL-08": ["CPMK081", "CPMK082", "CPMK083"], "CPL-09": ["CPMK091", "CPMK092", "CPMK093"]}}, "INF-511-401": {"kode": "INF-511-401", "nama": "Kecerdasan Buatan", "no": "36", "cpls": {"CPL-03": ["CPMK031", "CPMK032", "CPMK034"], "CPL-05": ["CPMK051", "CPMK052", "CPMK053"], "CPL-07": ["CPMK072", "CPMK073"], "CPL-09": ["CPMK091"]}}, "INF-511-402": {"kode": "INF-511-402", "nama": "Internet of Things*", "no": "37", "cpls": {"CPL-04": ["CPMK042", "CPMK043", "CPMK044"], "CPL-10": ["CPMK101", "CPMK102", "CPMK103"]}}, "INF-511-403": {"kode": "INF-511-403", "nama": "Keamanan Informasi dan Jaringan*", "no": "38", "cpls": {"CPL-04": ["CPMK041", "CPMK042", "CPMK044"], "CPL-10": ["CPMK102", "CPMK103"]}}, "INF-511-404": {"kode": "INF-511-404", "nama": "Pembelajaran Mesin*", "no": "39", "cpls": {"CPL-03": ["CPMK034"], "CPL-05": ["CPMK051", "CPMK052"], "CPL-07": ["CPMK071", "CPMK072", "CPMK073"], "CPL-09": ["CPMK091"]}}, "INF-511-405": {"kode": "INF-511-405", "nama": "Sistem Informasi Geografis*", "no": "40", "cpls": {"CPL-07": ["CPMK071", "CPMK072", "CPMK073"], "CPL-08": ["CPMK081", "CPMK082", "CPMK083", "CPMK084"]}}, "INF-511-801": {"kode": "INF-511-801", "nama": "Metodologi Penelitian", "no": "41", "cpls": {"CPL-03": ["CPMK032", "CPMK034"], "CPL-06": ["CPMK062"], "CPL-07": ["CPMK073"]}}, "INF-611-406": {"kode": "INF-611-406", "nama": "Computer Vision*", "no": "42", "cpls": {"CPL-03": ["CPMK034"], "CPL-05": ["CPMK051", "CPMK052"], "CPL-07": ["CPMK071", "CPMK072", "CPMK073"], "CPL-09": ["CPMK091", "CPMK093"]}}, "INF-611-407": {"kode": "INF-611-407", "nama": "Pemrograman Mobile*", "no": "43", "cpls": {"CPL-05": ["CPMK052"], "CPL-08": ["CPMK081", "CPMK082", "CPMK083", "CPMK084"], "CPL-09": ["CPMK091", "CPMK092", "CPMK093"]}}, "INF-611-408": {"kode": "INF-611-408", "nama": "NLP*", "no": "44", "cpls": {"CPL-03": ["CPMK034"], "CPL-05": ["CPMK052"], "CPL-07": ["CPMK071", "CPMK072", "CPMK073"], "CPL-09": ["CPMK091", "CPMK093"]}}, "INF-611-409": {"kode": "INF-611-409", "nama": "Uji Perangkat Lunak", "no": "45", "cpls": {"CPL-08": ["CPMK084"], "CPL-09": ["CPMK092", "CPMK093", "CPMK094"]}}, "INF-611-601": {"kode": "INF-611-601", "nama": "Proyek Perangkat Lunak", "no": "46", "cpls": {"CPL-01": ["CPMK013"], "CPL-06": ["CPMK061", "CPMK062", "CPMK063"], "CPL-08": ["CPMK081", "CPMK082", "CPMK083", "CPMK084"], "CPL-09": ["CPMK091", "CPMK092", "CPMK093", "CPMK094"]}}, "INF-611-802": {"kode": "INF-611-802", "nama": "Kerja Praktik", "no": "47", "cpls": {"CPL-01": ["CPMK012", "CPMK013"], "CPL-02": ["CPMK023"], "CPL-06": ["CPMK061", "CPMK062", "CPMK063"], "CPL-07": ["CPMK073"], "CPL-09": ["CPMK091", "CPMK094"]}}, "INF-711-504": {"kode": "INF-711-504", "nama": "Teknopreneur", "no": "48", "cpls": {"CPL-01": ["CPMK012", "CPMK013"], "CPL-02": ["CPMK022"], "CPL-06": ["CPMK062", "CPMK063"], "CPL-07": ["CPMK073"]}}, "INF-711-505": {"kode": "INF-711-505", "nama": "PMKM", "no": "49", "cpls": {"CPL-01": ["CPMK011", "CPMK012", "CPMK013"], "CPL-02": ["CPMK021", "CPMK023"], "CPL-06": ["CPMK061", "CPMK062", "CPMK063"], "CPL-08": ["CPMK081"]}}}, "matrix": [{"kode": "MKWU-01", "nama": "Pendidikan Pancasila", "cpls": {"CPL-01": ["CPMK011", "CPMK012", "CPMK013"], "CPL-02": ["CPMK021", "CPMK022"]}}, {"kode": "MKWU-02", "nama": "Pendidikan Agama", "cpls": {"CPL-01": ["CPMK011", "CPMK012"], "CPL-02": ["CPMK022"]}}, {"kode": "MKWU-03", "nama": "Bahasa Inggris", "cpls": {"CPL-01": ["CPMK013"], "CPL-02": ["CPMK021"], "CPL-06": ["CPMK062"]}}, {"kode": "INF-111-101", "nama": "Kalkulus", "cpls": {"CPL-03": ["CPMK032"], "CPL-05": ["CPMK051"]}}, {"kode": "INF-111-201", "nama": "Pengantar Informatika", "cpls": {"CPL-02": ["CPMK021", "CPMK022"], "CPL-03": ["CPMK031"]}}, {"kode": "INF-111-102", "nama": "Matematika Diskrit", "cpls": {"CPL-03": ["CPMK031", "CPMK032"], "CPL-05": ["CPMK051", "CPMK052"]}}, {"kode": "INF-111-202", "nama": "Logika Komputasional", "cpls": {"CPL-03": ["CPMK031", "CPMK032"], "CPL-05": ["CPMK051", "CPMK052", "CPMK053"]}}, {"kode": "INF-111-501", "nama": "Komunikasi dan Keterampilan Profesional", "cpls": {"CPL-01": ["CPMK012", "CPMK013"], "CPL-06": ["CPMK061", "CPMK062", "CPMK063"]}}, {"kode": "MKWU-04", "nama": "Kewarganegaraan", "cpls": {"CPL-01": ["CPMK011"], "CPL-02": ["CPMK021"]}}, {"kode": "MKWU-05", "nama": "Bahasa Indonesia", "cpls": {"CPL-01": ["CPMK013"], "CPL-02": ["CPMK021"], "CPL-06": ["CPMK061", "CPMK062"]}}, {"kode": "INF-211-203", "nama": "Dasar Pemrograman", "cpls": {"CPL-03": ["CPMK031", "CPMK033", "CPMK034"], "CPL-05": ["CPMK051", "CPMK052"], "CPL-09": ["CPMK091"]}}, {"kode": "INF-221-204", "nama": "Praktikum Dasar Pemrograman", "cpls": {"CPL-03": ["CPMK031", "CPMK034"], "CPL-05": ["CPMK051", "CPMK052"], "CPL-09": ["CPMK091"]}}, {"kode": "INF-211-205", "nama": "Organisasi dan Arsitektur Komputer", "cpls": {"CPL-02": ["CPMK022"], "CPL-03": ["CPMK031", "CPMK033"], "CPL-04": ["CPMK041"]}}, {"kode": "INF-211-206", "nama": "Sistem Operasi", "cpls": {"CPL-03": ["CPMK031", "CPMK034"], "CPL-04": ["CPMK041", "CPMK044"], "CPL-10": ["CPMK102"]}}, {"kode": "INF-211-103", "nama": "Aljabar Linier", "cpls": {"CPL-03": ["CPMK032"], "CPL-05": ["CPMK051", "CPMK052"], "CPL-07": ["CPMK072"]}}, {"kode": "INF-211-502", "nama": "Literasi Digital dan Etika Komputasi", "cpls": {"CPL-01": ["CPMK011", "CPMK012", "CPMK013"], "CPL-02": ["CPMK021", "CPMK022"], "CPL-06": ["CPMK062"]}}, {"kode": "INF-311-104", "nama": "Probabilitas dan Statistik", "cpls": {"CPL-03": ["CPMK032", "CPMK034"], "CPL-05": ["CPMK051", "CPMK052"], "CPL-07": ["CPMK071", "CPMK072", "CPMK073"]}}, {"kode": "INF-311-207", "nama": "Jaringan Komputer", "cpls": {"CPL-04": ["CPMK041", "CPMK042", "CPMK044"], "CPL-10": ["CPMK101", "CPMK102"]}}, {"kode": "INF-321-208", "nama": "Praktikum Jaringan Komputer", "cpls": {"CPL-04": ["CPMK042", "CPMK043", "CPMK044"], "CPL-10": ["CPMK102"]}}, {"kode": "INF-311-209", "nama": "Basis Data", "cpls": {"CPL-03": ["CPMK033", "CPMK034"], "CPL-07": ["CPMK071", "CPMK073"], "CPL-09": ["CPMK091", "CPMK092", "CPMK093", "CPMK094"]}}, {"kode": "INF-321-210", "nama": "Praktikum Basis Data", "cpls": {"CPL-03": ["CPMK033", "CPMK034"], "CPL-07": ["CPMK071", "CPMK073"], "CPL-09": ["CPMK091", "CPMK092", "CPMK093", "CPMK094"]}}, {"kode": "INF-311-211", "nama": "Struktur Data", "cpls": {"CPL-03": ["CPMK031", "CPMK034"], "CPL-05": ["CPMK051", "CPMK052", "CPMK053"], "CPL-09": ["CPMK091"]}}, {"kode": "INF-321-212", "nama": "Praktikum Struktur Data", "cpls": {"CPL-03": ["CPMK031", "CPMK034"], "CPL-05": ["CPMK051", "CPMK052", "CPMK053"]}}, {"kode": "INF-311-301", "nama": "Rekayasa Perangkat Lunak", "cpls": {"CPL-03": ["CPMK033"], "CPL-05": ["CPMK051"], "CPL-06": ["CPMK061", "CPMK063"], "CPL-08": ["CPMK081", "CPMK082"]}}, {"kode": "INF-311-302", "nama": "Sistem Informasi", "cpls": {"CPL-02": ["CPMK021", "CPMK022"], "CPL-03": ["CPMK033"], "CPL-06": ["CPMK062"], "CPL-08": ["CPMK081"]}}, {"kode": "INF-411-303", "nama": "Interaksi Manusia dan Komputer", "cpls": {"CPL-08": ["CPMK081", "CPMK083", "CPMK084"]}}, {"kode": "INF-411-304", "nama": "Analisis dan Perancangan Sistem Informasi", "cpls": {"CPL-03": ["CPMK033"], "CPL-06": ["CPMK061"], "CPL-08": ["CPMK081", "CPMK082", "CPMK083"]}}, {"kode": "INF-411-305", "nama": "Sistem Paralel dan Terdistribusi", "cpls": {"CPL-03": ["CPMK031", "CPMK034"], "CPL-04": ["CPMK041", "CPMK042", "CPMK044"]}}, {"kode": "INF-411-213", "nama": "Pemrograman Berorientasi Objek *", "cpls": {"CPL-03": ["CPMK031"], "CPL-05": ["CPMK051", "CPMK052", "CPMK053"], "CPL-09": ["CPMK091", "CPMK092", "CPMK093"]}}, {"kode": "INF-411-105", "nama": "Metode Numerik", "cpls": {"CPL-03": ["CPMK032", "CPMK034"], "CPL-05": ["CPMK052", "CPMK053"], "CPL-07": ["CPMK071", "CPMK072"]}}, {"kode": "INF-411-214", "nama": "Strategi Algoritma", "cpls": {"CPL-03": ["CPMK034"], "CPL-05": ["CPMK051", "CPMK052", "CPMK053"], "CPL-09": ["CPMK091"]}}, {"kode": "INF-421-215", "nama": "Praktikum Strategi Algoritma", "cpls": {"CPL-03": ["CPMK034"], "CPL-05": ["CPMK051", "CPMK052", "CPMK053"]}}, {"kode": "INF-411-306", "nama": "Manajemen Jaringan*", "cpls": {"CPL-04": ["CPMK041", "CPMK042", "CPMK044"], "CPL-10": ["CPMK102"]}}, {"kode": "INF-411-503", "nama": "Etika, Masyarakat dan Komputer Keberlanjutan", "cpls": {"CPL-01": ["CPMK011", "CPMK012", "CPMK013"], "CPL-02": ["CPMK021", "CPMK022", "CPMK023"]}}, {"kode": "INF-511-307", "nama": "Pemrograman Web*", "cpls": {"CPL-05": ["CPMK052"], "CPL-08": ["CPMK081", "CPMK082", "CPMK083"], "CPL-09": ["CPMK091", "CPMK092", "CPMK093"]}}, {"kode": "INF-511-401", "nama": "Kecerdasan Buatan", "cpls": {"CPL-03": ["CPMK031", "CPMK032", "CPMK034"], "CPL-05": ["CPMK051", "CPMK052", "CPMK053"], "CPL-07": ["CPMK072", "CPMK073"], "CPL-09": ["CPMK091"]}}, {"kode": "INF-511-402", "nama": "Internet of Things*", "cpls": {"CPL-04": ["CPMK042", "CPMK043", "CPMK044"], "CPL-10": ["CPMK101", "CPMK102", "CPMK103"]}}, {"kode": "INF-511-403", "nama": "Keamanan Informasi dan Jaringan*", "cpls": {"CPL-04": ["CPMK041", "CPMK042", "CPMK044"], "CPL-10": ["CPMK102", "CPMK103"]}}, {"kode": "INF-511-404", "nama": "Pembelajaran Mesin*", "cpls": {"CPL-03": ["CPMK034"], "CPL-05": ["CPMK051", "CPMK052"], "CPL-07": ["CPMK071", "CPMK072", "CPMK073"], "CPL-09": ["CPMK091"]}}, {"kode": "INF-511-405", "nama": "Sistem Informasi Geografis*", "cpls": {"CPL-07": ["CPMK071", "CPMK072", "CPMK073"], "CPL-08": ["CPMK081", "CPMK082", "CPMK083", "CPMK084"]}}, {"kode": "INF-511-801", "nama": "Metodologi Penelitian", "cpls": {"CPL-03": ["CPMK032", "CPMK034"], "CPL-06": ["CPMK062"], "CPL-07": ["CPMK073"]}}, {"kode": "INF-611-406", "nama": "Computer Vision*", "cpls": {"CPL-03": ["CPMK034"], "CPL-05": ["CPMK051", "CPMK052"], "CPL-07": ["CPMK071", "CPMK072", "CPMK073"], "CPL-09": ["CPMK091", "CPMK093"]}}, {"kode": "INF-611-407", "nama": "Pemrograman Mobile*", "cpls": {"CPL-05": ["CPMK052"], "CPL-08": ["CPMK081", "CPMK082", "CPMK083", "CPMK084"], "CPL-09": ["CPMK091", "CPMK092", "CPMK093"]}}, {"kode": "INF-611-408", "nama": "NLP*", "cpls": {"CPL-03": ["CPMK034"], "CPL-05": ["CPMK052"], "CPL-07": ["CPMK071", "CPMK072", "CPMK073"], "CPL-09": ["CPMK091", "CPMK093"]}}, {"kode": "INF-611-409", "nama": "Uji Perangkat Lunak", "cpls": {"CPL-08": ["CPMK084"], "CPL-09": ["CPMK092", "CPMK093", "CPMK094"]}}, {"kode": "INF-611-601", "nama": "Proyek Perangkat Lunak", "cpls": {"CPL-01": ["CPMK013"], "CPL-06": ["CPMK061", "CPMK062", "CPMK063"], "CPL-08": ["CPMK081", "CPMK082", "CPMK083", "CPMK084"], "CPL-09": ["CPMK091", "CPMK092", "CPMK093", "CPMK094"]}}, {"kode": "INF-611-802", "nama": "Kerja Praktik", "cpls": {"CPL-01": ["CPMK012", "CPMK013"], "CPL-02": ["CPMK023"], "CPL-06": ["CPMK061", "CPMK062", "CPMK063"], "CPL-07": ["CPMK073"], "CPL-09": ["CPMK091", "CPMK094"]}}, {"kode": "INF-711-504", "nama": "Teknopreneur", "cpls": {"CPL-01": ["CPMK012", "CPMK013"], "CPL-02": ["CPMK022"], "CPL-06": ["CPMK062", "CPMK063"], "CPL-07": ["CPMK073"]}}, {"kode": "INF-711-505", "nama": "PMKM", "cpls": {"CPL-01": ["CPMK011", "CPMK012", "CPMK013"], "CPL-02": ["CPMK021", "CPMK023"], "CPL-06": ["CPMK061", "CPMK062", "CPMK063"], "CPL-08": ["CPMK081"]}}], "cpl_cols": ["CPL-01", "CPL-02", "CPL-03", "CPL-04", "CPL-05", "CPL-06", "CPL-07", "CPL-08", "CPL-09", "CPL-10"], "sub": {"MKWU-01": {"nama": "Pendidikan Pancasila", "cpmks": {"CPMK011": {"desk": "Mampu menerapkan nilai etika, kejujuran, dan integritas akademik secara konsisten dalam setiap aktivitas perkuliahan dan pengerjaan tugas tanpa melakukan plagiasi.", "subs": [{"kode": "Sub-011-1", "uraian": "Mampu mengidentifikasi bentuk-bentuk pelanggaran integritas akademik dan sanksinya berdasarkan peraturan perguruan tinggi."}, {"kode": "Sub-011-2", "uraian": "Mampu menerapkan prinsip kejujuran akademik dengan menyerahkan karya orisinal bebas plagiasi pada setiap penugasan."}]}, "CPMK012": {"desk": "Mampu menunjukkan kedisiplinan dan tanggung jawab dengan menyelesaikan seluruh kewajiban tugas secara mandiri dan tepat waktu.", "subs": [{"kode": "Sub-012-1", "uraian": "Mampu menunjukkan kehadiran dan ketepatan waktu pengumpulan tugas sebagai indikator kedisiplinan pribadi."}, {"kode": "Sub-012-2", "uraian": "Mampu menyelesaikan seluruh komponen tugas individu secara mandiri tanpa melibatkan pihak lain secara tidak sah."}]}, "CPMK013": {"desk": "Mampu menunjukkan sikap profesional dalam berinteraksi dan bekerjasama dengan tim melalui komunikasi yang konstruktif dan pembagian peran yang adil.", "subs": [{"kode": "Sub-013-1", "uraian": "Mampu berkomunikasi secara konstruktif dalam diskusi kelompok dengan menghargai pendapat anggota tim lain."}, {"kode": "Sub-013-2", "uraian": "Mampu membagi peran dan tanggung jawab secara adil dalam tugas kelompok berbasis nilai-nilai Pancasila."}]}, "CPMK021": {"desk": "Mampu menganalisis isu sosial, budaya, dan lingkungan yang relevan dengan penerapan TI melalui kajian studi kasus nyata di masyarakat.", "subs": [{"kode": "Sub-021-1", "uraian": "Mampu mengidentifikasi isu-isu sosial dan teknologi yang berkaitan dengan nilai-nilai Pancasila dari sumber berita aktual."}, {"kode": "Sub-021-2", "uraian": "Mampu menganalisis dampak penerapan teknologi informasi terhadap kehidupan bermasyarakat dan bernegara."}]}, "CPMK022": {"desk": "Mampu mengevaluasi dampak sosial dan keberlanjutan dari sebuah solusi TI menggunakan kerangka analisis dampak yang sistematis, objektif dan berbasis data.", "subs": [{"kode": "Sub-022-1", "uraian": "Mampu menjelaskan prinsip keberlanjutan dalam penggunaan teknologi menggunakan kerangka nilai Pancasila."}, {"kode": "Sub-022-2", "uraian": "Mampu mengevaluasi solusi teknologi dari perspektif dampak sosial dan keadilan berdasarkan sila-sila Pancasila."}]}}}, "MKWU-02": {"nama": "Pendidikan Agama", "cpmks": {"CPMK011": {"desk": "Mampu menerapkan nilai etika, kejujuran, dan integritas akademik secara konsisten dalam setiap aktivitas perkuliahan dan pengerjaan tugas tanpa melakukan plagiasi.", "subs": [{"kode": "Sub-011-1", "uraian": "Mampu menjelaskan konsep amanah dan kejujuran dalam perspektif agama sebagai landasan integritas akademik."}, {"kode": "Sub-011-2", "uraian": "Mampu menerapkan prinsip kejujuran religius dalam menyelesaikan tugas akademik tanpa kecurangan."}]}, "CPMK012": {"desk": "Mampu menunjukkan kedisiplinan dan tanggung jawab dengan menyelesaikan seluruh kewajiban tugas secara mandiri dan tepat waktu.", "subs": [{"kode": "Sub-012-1", "uraian": "Mampu menunjukkan tanggung jawab sebagai wujud ibadah dengan menyelesaikan kewajiban akademik tepat waktu."}, {"kode": "Sub-012-2", "uraian": "Mampu mengelola waktu belajar secara mandiri berdasarkan prinsip disiplin yang bersumber dari nilai-nilai agama."}]}, "CPMK022": {"desk": "Mampu mengevaluasi dampak sosial dan keberlanjutan dari sebuah solusi TI menggunakan kerangka analisis dampak yang sistematis, objektif dan berbasis data.", "subs": [{"kode": "Sub-022-1", "uraian": "Mampu menjelaskan pandangan agama tentang tanggung jawab manusia dalam menjaga lingkungan dan keberlanjutan."}, {"kode": "Sub-022-2", "uraian": "Mampu mengevaluasi dampak sosial penggunaan teknologi dari perspektif etika dan nilai-nilai agama."}]}}}, "MKWU-03": {"nama": "Bahasa Inggris", "cpmks": {"CPMK013": {"desk": "Mampu menunjukkan sikap profesional dalam berinteraksi dan bekerjasama dengan tim melalui komunikasi yang konstruktif dan pembagian peran yang adil.", "subs": [{"kode": "Sub-013-1", "uraian": "Mampu berkomunikasi dalam bahasa Inggris secara lisan dan tulisan menggunakan terminologi teknis informatika yang tepat."}, {"kode": "Sub-013-2", "uraian": "Mampu menyampaikan ide dan solusi teknis dalam bahasa Inggris dengan struktur yang jelas di depan kelompok."}]}, "CPMK021": {"desk": "Mampu menganalisis isu sosial, budaya, dan lingkungan yang relevan dengan penerapan TI melalui kajian studi kasus nyata di masyarakat.", "subs": [{"kode": "Sub-021-1", "uraian": "Mampu membaca dan memahami artikel berbahasa Inggris tentang isu sosial dan dampak teknologi informasi."}, {"kode": "Sub-021-2", "uraian": "Mampu menganalisis teks berbahasa Inggris tentang tantangan digital society dan implikasinya bagi masyarakat."}]}, "CPMK062": {"desk": "Mampu menyajikan dan mempertahankan gagasan teknis secara lisan dengan argumentasi yang logis dan didukung media visual yang efektif.", "subs": [{"kode": "Sub-062-1", "uraian": "Mampu menyusun dan menyampaikan presentasi singkat berbahasa Inggris tentang topik teknis informatika."}, {"kode": "Sub-062-2", "uraian": "Mampu menulis laporan akademik berbahasa Inggris dengan tata bahasa dan struktur argumen yang benar."}]}}}, "INF-111-101": {"nama": "Kalkulus", "cpmks": {"CPMK032": {"desk": "Mampu menganalisis teori komputasi dan model matematika untuk memformulasikan solusi masalah teknis secara sistematis.", "subs": [{"kode": "Sub-032-1", "uraian": "Mampu menghitung limit, turunan, dan integral fungsi satu variabel serta menginterpretasikan maknanya secara geometris."}, {"kode": "Sub-032-2", "uraian": "Mampu menerapkan kalkulus multivariabel untuk memodelkan masalah komputasi."}, {"kode": "Sub-032-3", "uraian": "Mampu menganalisis penggunaan turunan parsial untuk menemukan titik minimum/maksimum fungsi multivariabel sebagai dasar metode optimasi numerik."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi masalah optimasi matematis menjadi sub-masalah menggunakan teknik turunan dan integral."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi fenomena komputasi kontinu ke dalam model matematis yang dapat diselesaikan secara analitik."}]}}}, "INF-111-201": {"nama": "Pengantar Informatika", "cpmks": {"CPMK021": {"desk": "Mampu menganalisis isu sosial, budaya, dan lingkungan yang relevan dengan penerapan TI melalui kajian studi kasus nyata di masyarakat.", "subs": [{"kode": "Sub-021-1", "uraian": "Mampu mengidentifikasi peran teknologi informasi dalam berbagai sektor kehidupan sosial dan ekonomi masyarakat."}, {"kode": "Sub-021-2", "uraian": "Mampu menganalisis alur pemrosesan data dari input melalui sistem software hingga output, serta peran jaringan dan kecerdasan buatan dalam sistem komputasi modern."}]}, "CPMK022": {"desk": "Mampu mengevaluasi dampak sosial dan keberlanjutan dari sebuah solusi TI menggunakan kerangka analisis dampak yang sistematis, objektif dan berbasis data.", "subs": [{"kode": "Sub-022-1", "uraian": "Mampu menjelaskan sub-bidang utama dalam disiplin informatika beserta keterkaitan antar bidang tersebut."}, {"kode": "Sub-022-2", "uraian": "Mampu mengidentifikasi jalur karier di bidang informatika dan memetakan mata kuliah inti yang relevan untuk setiap jalur tersebut."}]}, "CPMK031": {"desk": "Mampu menganalisis konsep dasar komputasi dan struktur data untuk menjelaskan keterkaitannya dalam penyelesaian masalah komputasi secara tepat.", "subs": [{"kode": "Sub-031-1", "uraian": "Mampu menjelaskan komponen utama sistem komputer beserta fungsinya."}, {"kode": "Sub-031-2", "uraian": "Mampu menganalisis alur pemrosesan informasi dari input hingga output dalam sistem komputasi sederhana."}]}}}, "INF-111-102": {"nama": "Matematika Diskrit", "cpmks": {"CPMK031": {"desk": "Mampu menganalisis konsep dasar komputasi dan struktur data untuk menjelaskan keterkaitannya dalam penyelesaian masalah komputasi secara tepat.", "subs": [{"kode": "Sub-031-1", "uraian": "Mampu menjelaskan keterkaitan antara struktur matematika diskrit dengan struktur data pada pemrograman."}, {"kode": "Sub-031-2", "uraian": "Mampu menganalisis permasalahan komputasi menggunakan logika proposisional, predikat, dan teori himpunan."}]}, "CPMK032": {"desk": "Mampu menganalisis teori komputasi dan model matematika untuk memformulasikan solusi masalah teknis secara sistematis.", "subs": [{"kode": "Sub-032-1", "uraian": "Mampu menerapkan konsep kombinatorika dan relasi untuk memodelkan serta menghitung kompleksitas masalah komputasi."}, {"kode": "Sub-032-2", "uraian": "Mampu menganalisis bukti matematis dengan teknik induksi untuk memvalidasi kebenaran algoritma."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi masalah komputasi ke dalam representasi graf atau pohon untuk menemukan struktur solusinya."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi pola logis dari masalah diskrit menggunakan konsep relasi dan fungsi matematis."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang pseudocode berbasis rekursi dengan memanfaatkan prinsip induksi matematis sebagai dasar validasi."}, {"kode": "Sub-052-2", "uraian": "Mampu mengembangkan solusi algoritmik untuk masalah graf menggunakan flowchart terstruktur."}]}}}, "INF-111-202": {"nama": "Logika Komputasional", "cpmks": {"CPMK031": {"desk": "Mampu menganalisis konsep dasar komputasi dan struktur data untuk menjelaskan keterkaitannya dalam penyelesaian masalah komputasi secara tepat.", "subs": [{"kode": "Sub-031-1", "uraian": "Mampu menjelaskan empat pilar berpikir komputasional dengan contoh nyata."}, {"kode": "Sub-031-2", "uraian": "Mampu menganalisis masalah sehari-hari menggunakan kerangka berpikir komputasional secara terstruktur."}]}, "CPMK032": {"desk": "Mampu menganalisis teori komputasi dan model matematika untuk memformulasikan solusi masalah teknis secara sistematis.", "subs": [{"kode": "Sub-032-1", "uraian": "Mampu mengidentifikasi pola berulang dalam sekumpulan masalah dan menggunakannya untuk menyederhanakan solusi melalui pendekatan pengenalan pola."}, {"kode": "Sub-032-2", "uraian": "Mampu menerapkan keempat pilar berpikir komputasional secara terpadu untuk menyelesaikan masalah sehari-hari."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi masalah kompleks non-coding menjadi langkah-langkah logis yang terurut dan dapat dieksekusi."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi esensi masalah untuk mengidentifikasi pola solusi yang dapat digunakan kembali."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang algoritma solusi dalam bentuk pseudocode untuk masalah komputasi sehari-hari tanpa coding."}, {"kode": "Sub-052-2", "uraian": "Mampu mengembangkan flowchart yang runtut dan mudah dipahami untuk merepresentasikan alur penyelesaian masalah."}]}, "CPMK053": {"desk": "Mampu mengevaluasi validitas logika dan efisiensi dari berbagai alternatif algoritma sebelum diimplementasikan ke dalam kode program.", "subs": [{"kode": "Sub-053-1", "uraian": "Mampu memvalidasi kebenaran algoritma dengan menelusuri alur eksekusi langkah demi langkah."}, {"kode": "Sub-053-2", "uraian": "Mampu mengevaluasi efisiensi relatif dua algoritma berbeda berdasarkan jumlah langkah eksekusi secara intuitif."}]}}}, "INF-111-501": {"nama": "Komunikasi dan Keterampilan Profesional", "cpmks": {"CPMK012": {"desk": "Mampu menunjukkan kedisiplinan dan tanggung jawab dengan menyelesaikan seluruh kewajiban tugas secara mandiri dan tepat waktu.", "subs": [{"kode": "Sub-012-1", "uraian": "Mampu menyelesaikan dan mengumpulkan tugas laporan serta presentasi secara mandiri sesuai tenggat waktu yang ditetapkan."}, {"kode": "Sub-012-2", "uraian": "Mampu menunjukkan tanggung jawab profesional dengan memenuhi seluruh porsi kerja tim secara tepat waktu."}]}, "CPMK013": {"desk": "Mampu menunjukkan sikap profesional dalam berinteraksi dan bekerjasama dengan tim melalui komunikasi yang konstruktif dan pembagian peran yang adil.", "subs": [{"kode": "Sub-013-1", "uraian": "Mampu berinteraksi secara profesional dalam diskusi tim menggunakan komunikasi asertif dan menghormati perbedaan pendapat."}, {"kode": "Sub-013-2", "uraian": "Mampu membagi peran kerja secara adil dalam proyek tim dan mendokumentasikan kontribusi masing-masing anggota."}]}, "CPMK061": {"desk": "Mampu menyusun dan mengevaluasi dokumen spesifikasi teknis perangkat lunak yang lengkap dan sesuai dengan standar industri.", "subs": [{"kode": "Sub-061-1", "uraian": "Mampu menyusun laporan teknis proyek dengan struktur standar dan tata bahasa baku."}, {"kode": "Sub-061-2", "uraian": "Mampu mengevaluasi kualitas dokumen teknis berdasarkan rubrik standar industri yang mencakup kelengkapan dan kejelasan."}]}, "CPMK062": {"desk": "Mampu menyajikan dan mempertahankan gagasan teknis secara lisan dengan argumentasi yang logis dan didukung media visual yang efektif.", "subs": [{"kode": "Sub-062-1", "uraian": "Mampu menyajikan gagasan teknis secara lisan dengan slide yang efektif, terstruktur, dan selesai dalam waktu yang ditentukan."}, {"kode": "Sub-062-2", "uraian": "Mampu mempertahankan argumen teknis dalam sesi tanya-jawab dengan logis menggunakan data pendukung yang relevan."}]}, "CPMK063": {"desk": "Mampu berkolaborasi secara produktif dalam tim proyek perangkat lunak menggunakan alat manajemen proyek untuk mencapai target bersama.", "subs": [{"kode": "Sub-063-1", "uraian": "Mampu berkolaborasi dalam proyek tim menggunakan platform manajemen digital secara produktif."}, {"kode": "Sub-063-2", "uraian": "Mampu menyusun rencana kerja tim berisi pembagian tugas, milestone, dan jadwal yang terukur dan realistis."}]}}}, "MKWU-04": {"nama": "Kewarganegaraan", "cpmks": {"CPMK011": {"desk": "Mampu menerapkan nilai etika, kejujuran, dan integritas akademik secara konsisten dalam setiap aktivitas perkuliahan dan pengerjaan tugas tanpa melakukan plagiasi.", "subs": [{"kode": "Sub-011-1", "uraian": "Mampu mengidentifikasi prinsip-prinsip hukum dan etika warga negara yang mendukung integritas dalam kehidupan akademik dan digital."}, {"kode": "Sub-011-2", "uraian": "Mampu menerapkan nilai-nilai kewarganegaraan yang bertanggung jawab dalam penggunaan teknologi informasi secara legal."}]}, "CPMK021": {"desk": "Mampu menganalisis isu sosial, budaya, dan lingkungan yang relevan dengan penerapan TI melalui kajian studi kasus nyata di masyarakat.", "subs": [{"kode": "Sub-021-1", "uraian": "Mampu menganalisis isu demokrasi digital dan hak-hak warga negara dalam konteks transformasi teknologi informasi di Indonesia."}, {"kode": "Sub-021-2", "uraian": "Mampu mengidentifikasi regulasi TI yang berlaku dan implikasinya bagi warga negara."}]}}}, "MKWU-05": {"nama": "Bahasa Indonesia", "cpmks": {"CPMK013": {"desk": "Mampu menunjukkan sikap profesional dalam berinteraksi dan bekerjasama dengan tim melalui komunikasi yang konstruktif dan pembagian peran yang adil.", "subs": [{"kode": "Sub-013-1", "uraian": "Mampu berkomunikasi secara profesional dalam bahasa Indonesia baku dalam konteks penulisan akademik dan presentasi teknis."}, {"kode": "Sub-013-2", "uraian": "Mampu berkolaborasi dalam tim proyek menggunakan komunikasi tertulis yang efektif dan terstruktur dalam bahasa Indonesia."}]}, "CPMK021": {"desk": "Mampu menganalisis isu sosial, budaya, dan lingkungan yang relevan dengan penerapan TI melalui kajian studi kasus nyata di masyarakat.", "subs": [{"kode": "Sub-021-1", "uraian": "Mampu membaca dan memahami artikel ilmiah berbahasa Indonesia tentang isu sosial dan dampak teknologi informasi."}, {"kode": "Sub-021-2", "uraian": "Mampu menyusun ringkasan analisis kritis tentang dampak TI terhadap masyarakat dalam tulisan akademik berbahasa Indonesia."}]}, "CPMK061": {"desk": "Mampu menyusun dan mengevaluasi dokumen spesifikasi teknis perangkat lunak yang lengkap dan sesuai dengan standar industri.", "subs": [{"kode": "Sub-061-1", "uraian": "Mampu menyusun laporan teknis proyek perangkat lunak menggunakan format dan ejaan bahasa Indonesia yang baku."}, {"kode": "Sub-061-2", "uraian": "Mampu menulis proposal atau artikel ilmiah teknis dengan struktur argumen yang runtut dan referensi yang valid."}]}, "CPMK062": {"desk": "Mampu menyajikan dan mempertahankan gagasan teknis secara lisan dengan argumentasi yang logis dan didukung media visual yang efektif.", "subs": [{"kode": "Sub-062-1", "uraian": "Mampu menyajikan hasil analisis teknis secara lisan dalam bahasa Indonesia yang formal, jelas, dan mudah dipahami."}, {"kode": "Sub-062-2", "uraian": "Mampu menyusun esai argumentatif teknis yang persuasif dengan didukung data dan referensi ilmiah berbahasa Indonesia."}]}}}, "INF-211-203": {"nama": "Dasar Pemrograman", "cpmks": {"CPMK031": {"desk": "Mampu menganalisis konsep dasar komputasi dan struktur data untuk menjelaskan keterkaitannya dalam penyelesaian masalah komputasi secara tepat.", "subs": [{"kode": "Sub-031-1", "uraian": "Mampu menjelaskan konsep variabel, tipe data, operator, dan struktur kontrol serta keterkaitannya dalam alur eksekusi program."}, {"kode": "Sub-031-2", "uraian": "Mampu menganalisis alur eksekusi program sederhana dan mengidentifikasi kesalahan logika dari kode yang diberikan."}]}, "CPMK033": {"desk": "Mampu menganalisis dan merumuskan spesifikasi kebutuhan fungsional dan non-fungsional perangkat lunak secara lengkap berdasarkan studi kasus pengguna.", "subs": [{"kode": "Sub-033-1", "uraian": "Mampu mengidentifikasi kebutuhan fungsional dasar sebuah program dari deskripsi masalah yang diberikan."}, {"kode": "Sub-033-2", "uraian": "Mampu merumuskan spesifikasi input-output dan batasan program berdasarkan studi kasus pemrograman sederhana."}]}, "CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu membandingkan berbagai pendekatan struktur kontrol iteratif dan memilih yang paling sesuai untuk kasus pemrograman tertentu."}, {"kode": "Sub-034-2", "uraian": "Mampu memilih dan membuktikan pendekatan struktur kontrol yang paling tepat untuk kasus pemrograman tertentu."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi masalah pemrograman menjadi fungsi-fungsi yang lebih kecil dan memiliki tanggung jawab tunggal."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi logika berulang ke dalam fungsi atau prosedur yang dapat dipanggil ulang."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang pseudocode atau flowchart lengkap sebelum mengimplementasikan solusi dalam kode program."}, {"kode": "Sub-052-2", "uraian": "Mampu mengembangkan algoritma terstruktur untuk masalah pemrograman dasar."}]}, "CPMK091": {"desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "subs": [{"kode": "Sub-091-1", "uraian": "Mampu mengimplementasikan program yang benar secara sintaks dan logika menggunakan bahasa pemrograman yang ditetapkan."}, {"kode": "Sub-091-2", "uraian": "Mampu melakukan debugging sistematis untuk mengidentifikasi dan memperbaiki kesalahan pada program yang bermasalah."}]}}}, "INF-221-204": {"nama": "Praktikum Dasar Pemrograman", "cpmks": {"CPMK031": {"desk": "Mampu menganalisis konsep dasar komputasi dan struktur data untuk menjelaskan keterkaitannya dalam penyelesaian masalah komputasi secara tepat.", "subs": [{"kode": "Sub-031-1", "uraian": "Mampu menerapkan konsep dasar pemrograman dalam implementasi program pada setiap sesi praktikum."}, {"kode": "Sub-031-2", "uraian": "Mampu menganalisis kode program yang diberikan dan menjelaskan alur eksekusinya kepada instruktur dengan benar."}]}, "CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu membandingkan solusi alternatif untuk soal praktikum dan memilih yang paling efisien berdasarkan kompleksitas kode."}, {"kode": "Sub-034-2", "uraian": "Mampu membuktikan keunggulan pendekatan yang dipilih dengan mengukur performa atau kemudahan pemahaman kode."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi soal praktikum kompleks menjadi sub-fungsi sebelum mulai menulis kode program."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi pola berulang dalam soal praktikum ke dalam fungsi generik yang dapat digunakan kembali."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang solusi algoritmik setiap soal praktikum dalam pseudocode sebelum implementasi kode."}, {"kode": "Sub-052-2", "uraian": "Mampu mengembangkan kode yang terstruktur, terdokumentasi komentar, dan mengikuti konvensi penamaan yang ditetapkan."}]}, "CPMK091": {"desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "subs": [{"kode": "Sub-091-1", "uraian": "Mampu mengimplementasikan program praktikum yang memenuhi semua test case yang diberikan tanpa error."}, {"kode": "Sub-091-2", "uraian": "Mampu menulis kode yang rapi dengan indentasi konsisten, penamaan bermakna, dan komentar pada bagian kritis."}]}}}, "INF-211-205": {"nama": "Organisasi dan Arsitektur Komputer", "cpmks": {"CPMK022": {"desk": "Mampu mengevaluasi dampak sosial dan keberlanjutan dari sebuah solusi TI menggunakan kerangka analisis dampak yang sistematis, objektif dan berbasis data.", "subs": [{"kode": "Sub-022-1", "uraian": "Mampu mengidentifikasi komponen utama CPU dan menjelaskan peran masing-masing dalam siklus instruksi."}, {"kode": "Sub-022-2", "uraian": "Mampu menganalisis struktur hierarki memori dan dampaknya terhadap kinerja sistem komputasi."}]}, "CPMK031": {"desk": "Mampu menganalisis konsep dasar komputasi dan struktur data untuk menjelaskan keterkaitannya dalam penyelesaian masalah komputasi secara tepat.", "subs": [{"kode": "Sub-031-1", "uraian": "Mampu menjelaskan siklus fetch-decode-execute pada CPU dan kaitannya dengan kinerja sistem komputasi."}, {"kode": "Sub-031-2", "uraian": "Mampu menganalisis hierarki memori dan implikasinya terhadap performa program."}]}, "CPMK033": {"desk": "Mampu menganalisis dan merumuskan spesifikasi kebutuhan fungsional dan non-fungsional perangkat lunak secara lengkap berdasarkan studi kasus pengguna.", "subs": [{"kode": "Sub-033-1", "uraian": "Mampu mengidentifikasi kebutuhan spesifikasi perangkat keras berdasarkan analisis beban komputasi suatu aplikasi."}, {"kode": "Sub-033-2", "uraian": "Mampu merumuskan kebutuhan kapasitas memori dan bandwidth I/O untuk mendukung sistem tertentu."}]}, "CPMK041": {"desk": "Mampu menganalisis dan menetapkan spesifikasi kebutuhan infrastruktur jaringan dan standar keamanan sistem yang diperlukan untuk mendukung kinerja aplikasi secara optimal.", "subs": [{"kode": "Sub-041-1", "uraian": "Mampu menjelaskan konsep instruction set architecture termasuk format instruksi, mode pengalamatan, dan kategori instruksi."}, {"kode": "Sub-041-2", "uraian": "Mampu menganalisis mekanisme pipelining CPU, mengidentifikasi jenis hazard, dan menjelaskan teknik penanganannya."}]}}}, "INF-211-206": {"nama": "Sistem Operasi", "cpmks": {"CPMK031": {"desk": "Mampu menganalisis konsep dasar komputasi dan struktur data untuk menjelaskan keterkaitannya dalam penyelesaian masalah komputasi secara tepat.", "subs": [{"kode": "Sub-031-1", "uraian": "Mampu menjelaskan konsep proses, thread, dan mekanisme context-switching pada sistem operasi modern."}, {"kode": "Sub-031-2", "uraian": "Mampu menganalisis cara kerja manajemen memori virtual dan dampaknya terhadap performa aplikasi."}]}, "CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu membandingkan algoritma penjadwalan CPU berdasarkan waktu tunggu rata-rata."}, {"kode": "Sub-034-2", "uraian": "Mampu mengevaluasi strategi penggantian halaman berdasarkan tingkat page fault pada skenario tertentu."}]}, "CPMK041": {"desk": "Mampu menganalisis dan menetapkan spesifikasi kebutuhan infrastruktur jaringan dan standar keamanan sistem yang diperlukan untuk mendukung kinerja aplikasi secara optimal.", "subs": [{"kode": "Sub-041-1", "uraian": "Mampu menganalisis mekanisme akses kontrol dan permission sistem operasi sebagai fondasi keamanan aplikasi server."}, {"kode": "Sub-041-2", "uraian": "Mampu mengidentifikasi kebutuhan konfigurasi sistem operasi untuk mendukung infrastruktur layanan jaringan yang aman."}]}, "CPMK044": {"desk": "Mampu menganalisis potensi risiko keamanan pada arsitektur sistem jaringan atau IoT dan merumuskan langkah mitigasi dasarnya.", "subs": [{"kode": "Sub-044-1", "uraian": "Mampu mengidentifikasi potensi kerentanan sistem operasi dan mekanisme proteksinya."}, {"kode": "Sub-044-2", "uraian": "Mampu menganalisis kebijakan akses dan permission file system untuk memitigasi risiko keamanan pada sistem operasi."}]}, "CPMK102": {"desk": "Mampu menerapkan mekanisme enkripsi dan autentikasi pada perangkat IoT untuk menjamin kerahasiaan dan integritas data.", "subs": [{"kode": "Sub-102-1", "uraian": "Mampu menerapkan konfigurasi manajemen pengguna, grup, dan permission pada sistem operasi Unix/Linux."}, {"kode": "Sub-102-2", "uraian": "Mampu menerapkan mekanisme sinkronisasi proses pada sistem operasi untuk mencegah kondisi balapan dan menjamin konsistensi akses sumber daya bersama."}]}}}, "INF-211-103": {"nama": "Aljabar Linier", "cpmks": {"CPMK032": {"desk": "Mampu menganalisis teori komputasi dan model matematika untuk memformulasikan solusi masalah teknis secara sistematis.", "subs": [{"kode": "Sub-032-1", "uraian": "Mampu menerapkan operasi matriks untuk menyelesaikan sistem persamaan linier dalam komputasi."}, {"kode": "Sub-032-2", "uraian": "Mampu menganalisis konsep eigenvalue/eigenvector dan menjelaskan kegunaannya dalam PCA dan grafika komputer."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi masalah representasi data multidimensi menggunakan transformasi linier yang sesuai."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi masalah komputasi ke dalam formulasi aljabar linier yang terstruktur."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang pseudocode untuk algoritma operasi matriks yang efisien."}, {"kode": "Sub-052-2", "uraian": "Mampu mengembangkan solusi algoritmik untuk transformasi ruang vektor dalam konteks grafika atau pengolahan sinyal."}]}, "CPMK072": {"desk": "Mampu menganalisis dan mengevaluasi pola serta tren data menggunakan metode statistik atau algoritma Machine Learning dasar untuk mendapatkan informasi yang berguna.", "subs": [{"kode": "Sub-072-1", "uraian": "Mampu menerapkan dekomposisi nilai singular untuk menyelesaikan sistem persamaan linier yang tidak tentu dan menginterpretasikan hasil secara geometris."}, {"kode": "Sub-072-2", "uraian": "Mampu menganalisis rank, nullity, dan ruang baris/kolom matriks untuk menentukan konsistensi dan solusi sistem persamaan linier."}]}}}, "INF-211-502": {"nama": "Literasi Digital dan Etika Komputasi", "cpmks": {"CPMK011": {"desk": "Mampu menerapkan nilai etika, kejujuran, dan integritas akademik secara konsisten dalam setiap aktivitas perkuliahan dan pengerjaan tugas tanpa melakukan plagiasi.", "subs": [{"kode": "Sub-011-1", "uraian": "Mampu mengidentifikasi pelanggaran etika digital beserta konsekuensi hukumnya."}, {"kode": "Sub-011-2", "uraian": "Mampu menerapkan etika digital dalam aktivitas akademik online termasuk penggunaan AI generatif secara bertanggung jawab."}]}, "CPMK012": {"desk": "Mampu menunjukkan kedisiplinan dan tanggung jawab dengan menyelesaikan seluruh kewajiban tugas secara mandiri dan tepat waktu.", "subs": [{"kode": "Sub-012-1", "uraian": "Mampu mengelola identitas dan jejak digital secara positif dan bertanggung jawab di platform online."}, {"kode": "Sub-012-2", "uraian": "Mampu menyelesaikan penugasan digital secara mandiri dan tepat waktu dengan menghindari penggunaan bantuan yang tidak sah."}]}, "CPMK013": {"desk": "Mampu menunjukkan sikap profesional dalam berinteraksi dan bekerjasama dengan tim melalui komunikasi yang konstruktif dan pembagian peran yang adil.", "subs": [{"kode": "Sub-013-1", "uraian": "Mampu berkolaborasi secara profesional di platform digital sambil menjaga etika komunikasi dan keamanan akun."}, {"kode": "Sub-013-2", "uraian": "Mampu berkontribusi secara adil dalam proyek digital tim dengan mendokumentasikan kontribusi pada alat kolaborasi."}]}, "CPMK021": {"desk": "Mampu menganalisis isu sosial, budaya, dan lingkungan yang relevan dengan penerapan TI melalui kajian studi kasus nyata di masyarakat.", "subs": [{"kode": "Sub-021-1", "uraian": "Mampu menganalisis dampak kesenjangan digital terhadap kesetaraan akses informasi di masyarakat."}, {"kode": "Sub-021-2", "uraian": "Mampu mengidentifikasi isu privasi dan keamanan data dalam aktivitas digital sehari-hari menggunakan kerangka analisis yang tepat."}]}, "CPMK022": {"desk": "Mampu mengevaluasi dampak sosial dan keberlanjutan dari sebuah solusi TI menggunakan kerangka analisis dampak yang sistematis, objektif dan berbasis data.", "subs": [{"kode": "Sub-022-1", "uraian": "Mampu mengevaluasi dampak penggunaan media sosial terhadap kesehatan mental dan kohesi sosial berdasarkan studi kasus."}, {"kode": "Sub-022-2", "uraian": "Mampu menganalisis implikasi lingkungan dari perilaku digital dan merumuskan rekomendasi."}]}, "CPMK062": {"desk": "Mampu menyajikan dan mempertahankan gagasan teknis secara lisan dengan argumentasi yang logis dan didukung media visual yang efektif.", "subs": [{"kode": "Sub-062-1", "uraian": "Mampu mempresentasikan analisis kasus etika digital secara argumentatif dengan media visual yang efektif."}, {"kode": "Sub-062-2", "uraian": "Mampu mempertahankan posisi argumen dalam debat tentang isu privasi, kebebasan berekspresi, dan etika teknologi."}]}}}, "INF-311-104": {"nama": "Probabilitas dan Statistik", "cpmks": {"CPMK032": {"desk": "Mampu menganalisis teori komputasi dan model matematika untuk memformulasikan solusi masalah teknis secara sistematis.", "subs": [{"kode": "Sub-032-1", "uraian": "Mampu menerapkan distribusi probabilitas dan inferensi statistik untuk memodelkan ketidakpastian dalam sistem komputasi."}, {"kode": "Sub-032-2", "uraian": "Mampu menganalisis masalah teknis menggunakan teknik pengujian hipotesis dan estimasi interval kepercayaan."}]}, "CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu membandingkan metode statistik berdasarkan asumsi dan karakteristik data."}, {"kode": "Sub-034-2", "uraian": "Mampu mengevaluasi validitas model regresi menggunakan metrik dan uji asumsi yang sesuai."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi masalah analisis data menjadi langkah eksplorasi, pemodelan, dan validasi yang terstruktur."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi fenomena nyata ke dalam model probabilistik yang dapat dioperasionalisasikan secara komputasi."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang prosedur pengujian hipotesis statistik yang logis untuk menjawab pertanyaan riset yang diberikan."}, {"kode": "Sub-052-2", "uraian": "Mampu mengembangkan alur analisis data statistik secara sistematis dari eksplorasi hingga penarikan kesimpulan."}]}, "CPMK071": {"desk": "Mampu menganalisis dan memvalidasi data menggunakan teknik cleansing yang tepat hingga menghasilkan dataset yang siap dianalisis.", "subs": [{"kode": "Sub-071-1", "uraian": "Mampu menerapkan teknik deteksi outlier dan penanganan missing value untuk memvalidasi kualitas dataset."}, {"kode": "Sub-071-2", "uraian": "Mampu menganalisis distribusi data dan mengidentifikasi anomali menggunakan statistik deskriptif dan visualisasi."}]}, "CPMK072": {"desk": "Mampu menganalisis dan mengevaluasi pola serta tren data menggunakan metode statistik atau algoritma Machine Learning dasar untuk mendapatkan informasi yang berguna.", "subs": [{"kode": "Sub-072-1", "uraian": "Mampu menganalisis pola dan tren data menggunakan teknik regresi linier dan analisis korelasi dengan interpretasi tepat."}, {"kode": "Sub-072-2", "uraian": "Mampu mengevaluasi signifikansi statistik dari hubungan antar variabel menggunakan uji yang sesuai."}]}, "CPMK073": {"desk": "Mampu merumuskan dan mengevaluasi rekomendasi solusi yang strategis dan logis berdasarkan hasil interpretasi data yang akurat.", "subs": [{"kode": "Sub-073-1", "uraian": "Mampu merumuskan rekomendasi berbasis hasil uji statistik yang valid dan dapat diinterpretasikan oleh pemangku kepentingan."}, {"kode": "Sub-073-2", "uraian": "Mampu mengevaluasi kekuatan dan keterbatasan kesimpulan statistik serta menyajikannya dalam laporan yang terstruktur."}]}}}, "INF-311-207": {"nama": "Jaringan Komputer", "cpmks": {"CPMK041": {"desk": "Mampu menganalisis dan menetapkan spesifikasi kebutuhan infrastruktur jaringan dan standar keamanan sistem yang diperlukan untuk mendukung kinerja aplikasi secara optimal.", "subs": [{"kode": "Sub-041-1", "uraian": "Mampu menganalisis kebutuhan spesifikasi jaringan berdasarkan profil beban aplikasi."}, {"kode": "Sub-041-2", "uraian": "Mampu menetapkan standar keamanan jaringan yang diperlukan berdasarkan analisis ancaman dan kebutuhan layanan."}]}, "CPMK042": {"desk": "Mampu merancang arsitektur jaringan komputer atau sistem IoT dasar yang aman, skalabel, dan sesuai dengan topologi standar.", "subs": [{"kode": "Sub-042-1", "uraian": "Mampu merancang topologi jaringan LAN/WAN beserta skema pengalamatan IP yang optimal."}, {"kode": "Sub-042-2", "uraian": "Mampu merancang konfigurasi routing untuk menghubungkan beberapa segmen jaringan secara efisien."}]}, "CPMK044": {"desk": "Mampu menganalisis potensi risiko keamanan pada arsitektur sistem jaringan atau IoT dan merumuskan langkah mitigasi dasarnya.", "subs": [{"kode": "Sub-044-1", "uraian": "Mampu menganalisis kerentanan umum protokol jaringan dan merumuskan langkah mitigasi dasar yang tepat."}, {"kode": "Sub-044-2", "uraian": "Mampu mengidentifikasi anomali trafik jaringan melalui analisis paket menggunakan Wireshark."}]}, "CPMK101": {"desk": "Mampu merancang dan mengimplementasikan protokol komunikasi data untuk menghubungkan sensor fisik dengan platform IoT secara real-time.", "subs": [{"kode": "Sub-101-1", "uraian": "Mampu menjelaskan arsitektur model OSI tujuh lapisan dan model TCP/IP beserta fungsi, protokol representatif, dan PDU pada setiap lapisan."}, {"kode": "Sub-101-2", "uraian": "Mampu menganalisis proses switching layer-2 dan membedakannya dengan proses routing layer-3."}]}, "CPMK102": {"desk": "Mampu menerapkan mekanisme enkripsi dan autentikasi pada perangkat IoT untuk menjamin kerahasiaan dan integritas data.", "subs": [{"kode": "Sub-102-1", "uraian": "Mampu menerapkan konfigurasi keamanan dasar pada perangkat jaringan untuk membatasi akses tidak sah."}, {"kode": "Sub-102-2", "uraian": "Mampu mengimplementasikan protokol enkripsi komunikasi pada lapisan transport jaringan."}]}}}, "INF-321-208": {"nama": "Praktikum Jaringan Komputer", "cpmks": {"CPMK042": {"desk": "Mampu merancang arsitektur jaringan komputer atau sistem IoT dasar yang aman, skalabel, dan sesuai dengan topologi standar.", "subs": [{"kode": "Sub-042-1", "uraian": "Mampu merancang dan mengimplementasikan simulasi jaringan sesuai skenario praktikum."}, {"kode": "Sub-042-2", "uraian": "Mampu mengkonfigurasi routing statis dan dinamis pada topologi multi-router yang diberikan."}]}, "CPMK043": {"desk": "Mampu mengimplementasikan konfigurasi perangkat jaringan dan konektivitas sensor IoT agar terhubung ke gateway atau internet dengan stabil.", "subs": [{"kode": "Sub-043-1", "uraian": "Mampu mengkonfigurasi perangkat jaringan secara lengkap sesuai spesifikasi praktikum."}, {"kode": "Sub-043-2", "uraian": "Mampu memverifikasi konektivitas jaringan menggunakan perintah diagnostik."}]}, "CPMK044": {"desk": "Mampu menganalisis potensi risiko keamanan pada arsitektur sistem jaringan atau IoT dan merumuskan langkah mitigasi dasarnya.", "subs": [{"kode": "Sub-044-1", "uraian": "Mampu menganalisis kelemahan konfigurasi jaringan pada skenario praktikum dan memberikan rekomendasi perbaikan."}, {"kode": "Sub-044-2", "uraian": "Mampu mengimplementasikan port security dan ACL dasar pada switch/router untuk mengamankan jaringan praktikum."}]}, "CPMK102": {"desk": "Mampu menerapkan mekanisme enkripsi dan autentikasi pada perangkat IoT untuk menjamin kerahasiaan dan integritas data.", "subs": [{"kode": "Sub-102-1", "uraian": "Mampu mengkonfigurasi autentikasi SSH dan enkripsi pada perangkat jaringan untuk menggantikan akses Telnet yang tidak aman."}, {"kode": "Sub-102-2", "uraian": "Mampu menguji efektivitas konfigurasi keamanan jaringan melalui skenario simulasi penetrasi dasar pada lingkungan lab terkontrol."}]}}}, "INF-311-209": {"nama": "Basis Data", "cpmks": {"CPMK033": {"desk": "Mampu menganalisis dan merumuskan spesifikasi kebutuhan fungsional dan non-fungsional perangkat lunak secara lengkap berdasarkan studi kasus pengguna.", "subs": [{"kode": "Sub-033-1", "uraian": "Mampu mengidentifikasi entitas, atribut, dan relasi dari narasi kebutuhan pengguna dan menuangkannya dalam ERD."}, {"kode": "Sub-033-2", "uraian": "Mampu memetakan ERD ke skema relasional dan menormalisasi hingga 3NF untuk menghilangkan redundansi data."}, {"kode": "Sub-033-3", "uraian": "Mampu merumuskan constraint integritas yang diperlukan berdasarkan aturan bisnis sistem."}]}, "CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu mengimplementasikan query SQL kompleks sesuai kebutuhan."}, {"kode": "Sub-034-2", "uraian": "Mampu menganalisis execution plan query dan merancang strategi indeksasi untuk mengoptimalkan performa."}, {"kode": "Sub-034-3", "uraian": "Mampu mengevaluasi dan memilih solusi penyimpanan antara basis data relasional dan NoSQL berdasarkan karakteristik data, pola akses, dan kebutuhan skalabilitas."}]}, "CPMK071": {"desk": "Mampu menganalisis dan memvalidasi data menggunakan teknik cleansing yang tepat hingga menghasilkan dataset yang siap dianalisis.", "subs": [{"kode": "Sub-071-1", "uraian": "Mampu mengidentifikasi dan menangani masalah kualitas data menggunakan operasi SQL."}, {"kode": "Sub-071-2", "uraian": "Mampu menerapkan constraint dan trigger untuk menjaga integritas dan konsistensi data secara otomatis."}]}, "CPMK073": {"desk": "Mampu merumuskan dan mengevaluasi rekomendasi solusi yang strategis dan logis berdasarkan hasil interpretasi data yang akurat.", "subs": [{"kode": "Sub-073-1", "uraian": "Mampu mengimplementasikan transaksi ACID dan mekanisme rollback untuk memastikan konsistensi data dalam skenario konkurensi."}, {"kode": "Sub-073-2", "uraian": "Mampu merumuskan rekomendasi strategi optimasi basis data berdasarkan analisis performa dan kebutuhan sistem."}]}, "CPMK091": {"desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "subs": [{"kode": "Sub-091-1", "uraian": "Mampu mengimplementasikan DDL dan DML lengkap sesuai standar SQL."}, {"kode": "Sub-091-2", "uraian": "Mampu menulis stored procedure, fungsi, dan trigger yang bersih, terdokumentasi, dan bebas dari SQL injection."}]}, "CPMK092": {"desk": "Mampu merancang dan melaksanakan pengujian perangkat lunak (fungsional/unit) menggunakan metode yang terstandar untuk memastikan kode berjalan dengan benar.", "subs": [{"kode": "Sub-092-1", "uraian": "Mampu merancang test case komprehensif untuk memverifikasi kebenaran query, stored procedure, dan trigger basis data."}, {"kode": "Sub-092-2", "uraian": "Mampu melaksanakan pengujian integritas transaksional dan constraint untuk memvalidasi implementasi basis data."}]}, "CPMK093": {"desk": "Mampu mengevaluasi kinerja dan fungsionalitas perangkat lunak melalui serangkaian skenario uji coba yang sistematis untuk mendeteksi bug.", "subs": [{"kode": "Sub-093-1", "uraian": "Mampu menggunakan EXPLAIN PLAN untuk mengidentifikasi bottleneck dan menganalisis performa query secara sistematis."}, {"kode": "Sub-093-2", "uraian": "Mampu mengevaluasi efisiensi skema basis data melalui pengujian beban dan mengidentifikasi area yang perlu dioptimalkan."}]}, "CPMK094": {"desk": "Mampu menyusun dan mengevaluasi laporan teknis hasil pengujian perangkat lunak secara terstruktur sebagai acuan perbaikan sistem.", "subs": [{"kode": "Sub-094-1", "uraian": "Mampu menyusun dokumentasi teknis basis data beserta laporan hasil pengujian yang terstruktur."}, {"kode": "Sub-094-2", "uraian": "Mampu merumuskan rekomendasi perbaikan terukur berdasarkan temuan pengujian dan analisis performa basis data."}]}}}, "INF-321-210": {"nama": "Praktikum Basis Data", "cpmks": {"CPMK033": {"desk": "Mampu menganalisis dan merumuskan spesifikasi kebutuhan fungsional dan non-fungsional perangkat lunak secara lengkap berdasarkan studi kasus pengguna.", "subs": [{"kode": "Sub-033-1", "uraian": "Mampu mengimplementasikan skema basis data dari ERD yang dirancang menggunakan DBMS secara lengkap."}, {"kode": "Sub-033-2", "uraian": "Mampu memverifikasi kesesuaian implementasi fisik dengan spesifikasi kebutuhan melalui pengujian constraint."}]}, "CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu menjalankan dan membandingkan query SQL dengan strategi indeksasi berbeda pada dataset praktikum berukuran nyata."}, {"kode": "Sub-034-2", "uraian": "Mampu mengevaluasi performa query menggunakan tools EXPLAIN dan memilih solusi optimasi yang paling efektif."}]}, "CPMK071": {"desk": "Mampu menganalisis dan memvalidasi data menggunakan teknik cleansing yang tepat hingga menghasilkan dataset yang siap dianalisis.", "subs": [{"kode": "Sub-071-1", "uraian": "Mampu mengeksekusi skrip cleansing data pada dataset praktikum dan memverifikasi hasilnya menggunakan query validasi."}, {"kode": "Sub-071-2", "uraian": "Mampu menerapkan constraint integritas dan membuktikan efektivitasnya melalui pengujian dengan data uji yang dirancang."}]}, "CPMK073": {"desk": "Mampu merumuskan dan mengevaluasi rekomendasi solusi yang strategis dan logis berdasarkan hasil interpretasi data yang akurat.", "subs": [{"kode": "Sub-073-1", "uraian": "Mampu mengimplementasikan dan menguji transaksi multi-step dengan skenario commit dan rollback pada praktikum."}, {"kode": "Sub-073-2", "uraian": "Mampu merumuskan kesimpulan teknis dan rekomendasi perbaikan berdasarkan hasil pengujian basis data praktikum."}]}, "CPMK091": {"desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "subs": [{"kode": "Sub-091-1", "uraian": "Mampu mengimplementasikan seluruh komponen basis data sesuai spesifikasi praktikum."}, {"kode": "Sub-091-2", "uraian": "Mampu menghasilkan script SQL yang dapat dieksekusi ulang, terdokumentasi, dan mengikuti konvensi penamaan standar."}]}, "CPMK092": {"desk": "Mampu merancang dan melaksanakan pengujian perangkat lunak (fungsional/unit) menggunakan metode yang terstandar untuk memastikan kode berjalan dengan benar.", "subs": [{"kode": "Sub-092-1", "uraian": "Mampu merancang dan menjalankan test suite untuk memverifikasi seluruh fungsionalitas basis data pada skenario praktikum."}, {"kode": "Sub-092-2", "uraian": "Mampu mendokumentasikan hasil pengujian dalam format laporan pengujian yang mencakup input, ekspektasi, dan aktual."}]}, "CPMK093": {"desk": "Mampu mengevaluasi kinerja dan fungsionalitas perangkat lunak melalui serangkaian skenario uji coba yang sistematis untuk mendeteksi bug.", "subs": [{"kode": "Sub-093-1", "uraian": "Mampu menganalisis kinerja query pada dataset berskala menggunakan tools profiling DBMS dan menginterpretasikan hasilnya."}, {"kode": "Sub-093-2", "uraian": "Mampu mengidentifikasi dan memperbaiki bottleneck performa dalam implementasi basis data praktikum secara terukur."}]}, "CPMK094": {"desk": "Mampu menyusun dan mengevaluasi laporan teknis hasil pengujian perangkat lunak secara terstruktur sebagai acuan perbaikan sistem.", "subs": [{"kode": "Sub-094-1", "uraian": "Mampu menyusun laporan teknis praktikum basis data yang mencakup perancangan, implementasi, pengujian, dan analisis."}, {"kode": "Sub-094-2", "uraian": "Mampu mempresentasikan temuan dan rekomendasi implementasi basis data kepada instruktur secara terstruktur dan percaya diri."}]}}}, "INF-311-211": {"nama": "Struktur Data", "cpmks": {"CPMK031": {"desk": "Mampu menganalisis konsep dasar komputasi dan struktur data untuk menjelaskan keterkaitannya dalam penyelesaian masalah komputasi secara tepat.", "subs": [{"kode": "Sub-031-1", "uraian": "Mampu menjelaskan karakteristik, kompleksitas waktu, dan ruang dari struktur data."}, {"kode": "Sub-031-2", "uraian": "Mampu menganalisis kesesuaian pemilihan struktur data untuk menyelesaikan masalah komputasi tertentu secara efisien."}]}, "CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu membandingkan kompleksitas operasi antara berbagai struktur data untuk skenario penggunaan tertentu."}, {"kode": "Sub-034-2", "uraian": "Mampu mengevaluasi trade-off antara penggunaan memori dan kecepatan akses dalam pemilihan struktur data."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi masalah komputasi kompleks menjadi sub-masalah yang masing-masing dapat diselesaikan dengan struktur data tertentu."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi kebutuhan penyimpanan dan akses data ke dalam pemilihan struktur data yang tepat."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang pseudocode untuk operasi kunci pada struktur data."}, {"kode": "Sub-052-2", "uraian": "Mampu mengembangkan algoritma efisien berbasis struktur data untuk menyelesaikan soal pemrograman yang diberikan."}]}, "CPMK053": {"desk": "Mampu mengevaluasi validitas logika dan efisiensi dari berbagai alternatif algoritma sebelum diimplementasikan ke dalam kode program.", "subs": [{"kode": "Sub-053-1", "uraian": "Mampu memvalidasi kebenaran algoritma traversal dan manipulasi struktur data melalui hand tracing pada data uji."}, {"kode": "Sub-053-2", "uraian": "Mampu mengevaluasi dan memilih implementasi struktur data yang paling efisien dari beberapa alternatif yang tersedia."}]}, "CPMK091": {"desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "subs": [{"kode": "Sub-091-1", "uraian": "Mampu mengimplementasikan struktur data dari awal menggunakan bahasa pemrograman yang ditetapkan."}, {"kode": "Sub-091-2", "uraian": "Mampu menulis kode implementasi struktur data yang bersih, efisien, dan dilengkapi komentar dokumentasi yang memadai."}]}}}, "INF-321-212": {"nama": "Praktikum Struktur Data", "cpmks": {"CPMK031": {"desk": "Mampu menganalisis konsep dasar komputasi dan struktur data untuk menjelaskan keterkaitannya dalam penyelesaian masalah komputasi secara tepat.", "subs": [{"kode": "Sub-031-1", "uraian": "Mampu mengimplementasikan dan menguji operasi dasar setiap struktur data pada sesi praktikum sesuai spesifikasi yang diberikan."}, {"kode": "Sub-031-2", "uraian": "Mampu menganalisis dan menjelaskan alur eksekusi kode struktur data yang diberikan saat sesi review praktikum."}]}, "CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu mengukur dan membandingkan waktu eksekusi operasi pada struktur data berbeda menggunakan dataset praktikum."}, {"kode": "Sub-034-2", "uraian": "Mampu membuktikan pilihan struktur data yang optimal melalui eksperimen performa pada praktikum."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi soal praktikum kompleks yang membutuhkan kombinasi beberapa struktur data menjadi bagian yang terkelola."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi kebutuhan soal praktikum ke dalam pemilihan dan perancangan struktur data yang tepat."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang pseudocode solusi setiap soal praktikum sebelum implementasi dan mendiskusikannya dengan instruktur."}, {"kode": "Sub-052-2", "uraian": "Mampu mengembangkan kode praktikum yang modular dan menggunakan struktur data yang sesuai dengan kebutuhan."}]}, "CPMK053": {"desk": "Mampu mengevaluasi validitas logika dan efisiensi dari berbagai alternatif algoritma sebelum diimplementasikan ke dalam kode program.", "subs": [{"kode": "Sub-053-1", "uraian": "Mampu memvalidasi implementasi struktur data dengan menjalankan serangkaian test case edge case yang dirancang sendiri."}, {"kode": "Sub-053-2", "uraian": "Mampu mengevaluasi kode temannya dan mengidentifikasi inefficiency dalam penggunaan struktur data."}]}}}, "INF-311-301": {"nama": "Rekayasa Perangkat Lunak", "cpmks": {"CPMK033": {"desk": "Mampu menganalisis dan merumuskan spesifikasi kebutuhan fungsional dan non-fungsional perangkat lunak secara lengkap berdasarkan studi kasus pengguna.", "subs": [{"kode": "Sub-033-1", "uraian": "Mampu mengidentifikasi kebutuhan fungsional dan non-fungsional sistem perangkat lunak melalui teknik elisitasi."}, {"kode": "Sub-033-2", "uraian": "Mampu merumuskan spesifikasi kebutuhan dalam format SRS yang lengkap dan terstruktur."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi sistem perangkat lunak kompleks menjadi modul-modul dengan tanggung jawab yang jelas menggunakan UML."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi kebutuhan pengguna ke dalam arsitektur solusi yang dapat dikerjakan secara bertahap."}]}, "CPMK061": {"desk": "Mampu menyusun dan mengevaluasi dokumen spesifikasi teknis perangkat lunak yang lengkap dan sesuai dengan standar industri.", "subs": [{"kode": "Sub-061-1", "uraian": "Mampu menyusun dokumen SRS, SDD, dan test plan sesuai standar IEEE yang lengkap dan dapat digunakan oleh tim pengembang."}, {"kode": "Sub-061-2", "uraian": "Mampu mengevaluasi kualitas dokumen spesifikasi menggunakan checklist standar industri dan memberikan umpan balik konstruktif."}]}, "CPMK063": {"desk": "Mampu berkolaborasi secara produktif dalam tim proyek perangkat lunak menggunakan alat manajemen proyek untuk mencapai target bersama.", "subs": [{"kode": "Sub-063-1", "uraian": "Mampu mengelola backlog proyek menggunakan metodologi Agile/Scrum dengan sprint planning dan daily standup yang efektif."}, {"kode": "Sub-063-2", "uraian": "Mampu membandingkan model proses pengembangan perangkat lunak dan memilih model yang tepat berdasarkan karakteristik proyek."}]}, "CPMK081": {"desk": "Mampu menganalisis dan merumuskan kebutuhan pengguna ke dalam bentuk User Stories atau spesifikasi kebutuhan yang komprehensif dan mudah dipahami.", "subs": [{"kode": "Sub-081-1", "uraian": "Mampu mengidentifikasi dan mendokumentasikan kebutuhan pengguna dalam format User Stories dengan kriteria penerimaan yang jelas."}, {"kode": "Sub-081-2", "uraian": "Mampu merancang strategi pengujian perangkat lunak yang mencakup unit test, integration test, system test, dan acceptance test dalam konteks SDLC."}]}, "CPMK082": {"desk": "Mampu merancang arsitektur solusi sistem yang selaras dengan spesifikasi kebutuhan pengguna yang telah disepakati.", "subs": [{"kode": "Sub-082-1", "uraian": "Mampu merancang arsitektur perangkat lunak yang sesuai dengan kebutuhan dan constraint sistem."}, {"kode": "Sub-082-2", "uraian": "Mampu mendokumentasikan arsitektur solusi menggunakan diagram komponen, deployment, dan sequence yang tepat."}]}}}, "INF-311-302": {"nama": "Sistem Informasi", "cpmks": {"CPMK021": {"desk": "Mampu menganalisis isu sosial, budaya, dan lingkungan yang relevan dengan penerapan TI melalui kajian studi kasus nyata di masyarakat.", "subs": [{"kode": "Sub-021-1", "uraian": "Mampu mengidentifikasi permasalahan organisasi yang dapat diselesaikan dengan penerapan sistem informasi yang tepat."}, {"kode": "Sub-021-2", "uraian": "Mampu menganalisis dampak sosial dan organisasional dari implementasi sistem informasi pada studi kasus nyata."}]}, "CPMK022": {"desk": "Mampu mengevaluasi dampak sosial dan keberlanjutan dari sebuah solusi TI menggunakan kerangka analisis dampak yang sistematis, objektif dan berbasis data.", "subs": [{"kode": "Sub-022-1", "uraian": "Mampu membuat DFD level 0 dan level 1 untuk memodelkan aliran data dalam sistem informasi organisasi."}, {"kode": "Sub-022-2", "uraian": "Mampu mengidentifikasi dan menjelaskan kategori teknologi pendukung SI beserta perannya dalam mendukung proses bisnis organisasi."}]}, "CPMK033": {"desk": "Mampu menganalisis dan merumuskan spesifikasi kebutuhan fungsional dan non-fungsional perangkat lunak secara lengkap berdasarkan studi kasus pengguna.", "subs": [{"kode": "Sub-033-1", "uraian": "Mampu mengidentifikasi kebutuhan informasi organisasi dan merumuskannya ke dalam spesifikasi fungsional sistem informasi."}, {"kode": "Sub-033-2", "uraian": "Mampu menganalisis proses bisnis existing dan merumuskan kebutuhan sistem informasi yang mendukung efisiensinya."}]}, "CPMK062": {"desk": "Mampu menyajikan dan mempertahankan gagasan teknis secara lisan dengan argumentasi yang logis dan didukung media visual yang efektif.", "subs": [{"kode": "Sub-062-1", "uraian": "Mampu mempresentasikan analisis sistem informasi dengan visualisasi yang efektif dan mudah dipahami."}, {"kode": "Sub-062-2", "uraian": "Mampu mempertahankan rekomendasi desain sistem informasi kepada pemangku kepentingan dengan argumentasi berbasis data."}]}, "CPMK081": {"desk": "Mampu menganalisis dan merumuskan kebutuhan pengguna ke dalam bentuk User Stories atau spesifikasi kebutuhan yang komprehensif dan mudah dipahami.", "subs": [{"kode": "Sub-081-1", "uraian": "Mampu menganalisis dan mendokumentasikan kebutuhan pengguna sistem informasi melalui wawancara dan observasi proses bisnis."}, {"kode": "Sub-081-2", "uraian": "Mampu menyusun spesifikasi kebutuhan sistem informasi yang mudah dipahami oleh pengguna non-teknis."}]}}}, "INF-411-303": {"nama": "Interaksi Manusia dan Komputer", "cpmks": {"CPMK081": {"desk": "Mampu menganalisis dan merumuskan kebutuhan pengguna ke dalam bentuk User Stories atau spesifikasi kebutuhan yang komprehensif dan mudah dipahami.", "subs": [{"kode": "Sub-081-1", "uraian": "Mampu mengidentifikasi kebutuhan dan karakteristik pengguna melalui teknik user research."}, {"kode": "Sub-081-2", "uraian": "Mampu menjelaskan proses User-Centered Design sebagai kerangka kerja pengembangan antarmuka dan menerapkannya dalam tahapan penelitian, desain, prototyping, dan evaluasi."}]}, "CPMK083": {"desk": "Mampu mengintegrasikan prinsip kemudahan penggunaan (usability) dan keberlanjutan sistem ke dalam rancangan antarmuka pengguna.", "subs": [{"kode": "Sub-083-1", "uraian": "Mampu merancang wireframe dan mockup antarmuka yang mempertimbangkan prinsip usability secara konsisten."}, {"kode": "Sub-083-2", "uraian": "Mampu mengintegrasikan prinsip aksesibilitas ke dalam rancangan antarmuka pengguna yang inklusif."}]}, "CPMK084": {"desk": "Mampu mengembangkan dan mengevaluasi prototipe sistem interaktif melalui pengujian pengguna (user testing) untuk memastikan kesesuaian desain.", "subs": [{"kode": "Sub-084-1", "uraian": "Mampu melakukan heuristic evaluation menggunakan prinsip usability terhadap antarmuka yang ada dan mendokumentasikan temuan berdasarkan tingkat keparahan."}, {"kode": "Sub-084-2", "uraian": "Mampu mengevaluasi prototipe melalui sesi user testing terstruktur dan merevisi desain berdasarkan temuan."}]}}}, "INF-411-304": {"nama": "Analisis dan Perancangan Sistem Informasi", "cpmks": {"CPMK033": {"desk": "Mampu menganalisis dan merumuskan spesifikasi kebutuhan fungsional dan non-fungsional perangkat lunak secara lengkap berdasarkan studi kasus pengguna.", "subs": [{"kode": "Sub-033-1", "uraian": "Mampu menganalisis kebutuhan sistem informasi yang kompleks menggunakan teknik elisitasi terstruktur."}, {"kode": "Sub-033-2", "uraian": "Mampu merumuskan spesifikasi kebutuhan fungsional dan non-fungsional lengkap untuk sistem informasi organisasi."}]}, "CPMK061": {"desk": "Mampu menyusun dan mengevaluasi dokumen spesifikasi teknis perangkat lunak yang lengkap dan sesuai dengan standar industri.", "subs": [{"kode": "Sub-061-1", "uraian": "Mampu menyusun dokumen analisis sistem yang komprehensif dan sesuai standar dokumentasi yang ditetapkan."}, {"kode": "Sub-061-2", "uraian": "Mampu mengevaluasi kelengkapan dan konsistensi dokumentasi analisis sistem menggunakan teknik walkthrough."}]}, "CPMK081": {"desk": "Mampu menganalisis dan merumuskan kebutuhan pengguna ke dalam bentuk User Stories atau spesifikasi kebutuhan yang komprehensif dan mudah dipahami.", "subs": [{"kode": "Sub-081-1", "uraian": "Mampu menganalisis dan mendokumentasikan kebutuhan pengguna sistem informasi dalam format yang terstruktur dan dapat divalidasi."}, {"kode": "Sub-081-2", "uraian": "Mampu memprioritaskan dan menegosiasikan kebutuhan dengan pemangku kepentingan berdasarkan urgensi dan dampak bisnis."}]}, "CPMK082": {"desk": "Mampu merancang arsitektur solusi sistem yang selaras dengan spesifikasi kebutuhan pengguna yang telah disepakati.", "subs": [{"kode": "Sub-082-1", "uraian": "Mampu merancang arsitektur sistem informasi yang sesuai dengan kebutuhan, constraint anggaran, dan kapasitas infrastruktur."}, {"kode": "Sub-082-2", "uraian": "Mampu mendokumentasikan rancangan arsitektur sistem menggunakan diagram yang standar dan dapat dikomunikasikan kepada tim."}]}, "CPMK083": {"desk": "Mampu mengintegrasikan prinsip kemudahan penggunaan (usability) dan keberlanjutan sistem ke dalam rancangan antarmuka pengguna.", "subs": [{"kode": "Sub-083-1", "uraian": "Mampu membuat Use Case Diagram dan skenario Use Case yang lengkap berdasarkan kebutuhan pengguna yang telah diidentifikasi."}, {"kode": "Sub-083-2", "uraian": "Mampu membuat DFD level 0, level 1, dan level 2 untuk memodelkan aliran data dan proses dalam sistem informasi yang dianalisis."}]}}}, "INF-411-305": {"nama": "Sistem Paralel dan Terdistribusi", "cpmks": {"CPMK031": {"desk": "Mampu menganalisis konsep dasar komputasi dan struktur data untuk menjelaskan keterkaitannya dalam penyelesaian masalah komputasi secara tepat.", "subs": [{"kode": "Sub-031-1", "uraian": "Mampu menjelaskan model komputasi paralel dan implikasinya terhadap desain algoritma."}, {"kode": "Sub-031-2", "uraian": "Mampu menganalisis masalah race condition, deadlock, dan starvation dalam sistem konkurensi dan cara penanganannya."}]}, "CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu membandingkan arsitektur sistem terdistribusi berdasarkan kebutuhan skalabilitas."}, {"kode": "Sub-034-2", "uraian": "Mampu mengevaluasi trade-off konsistensi-availabilitas-partisi dalam desain sistem terdistribusi."}]}, "CPMK041": {"desk": "Mampu menganalisis dan menetapkan spesifikasi kebutuhan infrastruktur jaringan dan standar keamanan sistem yang diperlukan untuk mendukung kinerja aplikasi secara optimal.", "subs": [{"kode": "Sub-041-1", "uraian": "Mampu menjelaskan model layanan cloud dan deployment model serta relevansinya sebagai infrastruktur sistem terdistribusi modern."}, {"kode": "Sub-041-2", "uraian": "Mampu menganalisis mekanisme komunikasi antar proses dan menentukan model yang sesuai untuk skenario sistem terdistribusi tertentu."}]}, "CPMK042": {"desk": "Mampu merancang arsitektur jaringan komputer atau sistem IoT dasar yang aman, skalabel, dan sesuai dengan topologi standar.", "subs": [{"kode": "Sub-042-1", "uraian": "Mampu merancang arsitektur sistem terdistribusi sederhana yang mempertimbangkan skalabilitas dan fault tolerance."}, {"kode": "Sub-042-2", "uraian": "Mampu merancang mekanisme komunikasi antar proses yang efisien untuk sistem paralel."}]}, "CPMK044": {"desk": "Mampu menganalisis potensi risiko keamanan pada arsitektur sistem jaringan atau IoT dan merumuskan langkah mitigasi dasarnya.", "subs": [{"kode": "Sub-044-1", "uraian": "Mampu menganalisis potensi ancaman keamanan dalam komunikasi antar node sistem terdistribusi dan merumuskan mitigasinya."}, {"kode": "Sub-044-2", "uraian": "Mampu merancang strategi autentikasi dan otorisasi untuk mengamankan akses dalam sistem terdistribusi."}]}}}, "INF-411-213": {"nama": "Pemrograman Berorientasi Objek", "cpmks": {"CPMK031": {"desk": "Mampu menganalisis konsep dasar komputasi dan struktur data untuk menjelaskan keterkaitannya dalam penyelesaian masalah komputasi secara tepat.", "subs": [{"kode": "Sub-031-1", "uraian": "Mampu menjelaskan konsep OOP beserta contoh implementasinya."}, {"kode": "Sub-031-2", "uraian": "Mampu menganalisis kode OOP yang diberikan dan mengidentifikasi prinsip OOP mana yang diterapkan atau dilanggar."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi masalah ke dalam hierarki kelas yang bersih menggunakan prinsip Single Responsibility."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi entitas dunia nyata menjadi kelas dengan atribut dan metode yang kohesif dan terenkapsulasi."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang diagram kelas UML yang menggambarkan hubungan antar kelas."}, {"kode": "Sub-052-2", "uraian": "Mampu mengembangkan solusi OOP menggunakan design pattern dasar yang sesuai konteks."}]}, "CPMK053": {"desk": "Mampu mengevaluasi validitas logika dan efisiensi dari berbagai alternatif algoritma sebelum diimplementasikan ke dalam kode program.", "subs": [{"kode": "Sub-053-1", "uraian": "Mampu mengevaluasi desain kelas menggunakan prinsip SOLID dan mengidentifikasi pelanggaran yang perlu diperbaiki."}, {"kode": "Sub-053-2", "uraian": "Mampu membandingkan solusi OOP berbeda dan memilih yang paling maintainable berdasarkan kriteria yang jelas."}]}, "CPMK091": {"desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "subs": [{"kode": "Sub-091-1", "uraian": "Mampu mengimplementasikan hierarki kelas yang menggunakan inheritance, polymorphism, dan interface atau abstract class secara tepat sesuai konteks masalah."}, {"kode": "Sub-091-2", "uraian": "Mampu menulis kode OOP yang mengikuti prinsip clean code dan dilengkapi dokumentasi."}]}, "CPMK092": {"desk": "Mampu merancang dan melaksanakan pengujian perangkat lunak (fungsional/unit) menggunakan metode yang terstandar untuk memastikan kode berjalan dengan benar.", "subs": [{"kode": "Sub-092-1", "uraian": "Mampu merancang dan mengimplementasikan unit test untuk setiap kelas menggunakan framework testing yang ditetapkan."}, {"kode": "Sub-092-2", "uraian": "Mampu melaksanakan pengujian integrasi antar kelas untuk memverifikasi interaksi dan perilaku polimorfik."}]}, "CPMK093": {"desk": "Mampu mengevaluasi kinerja dan fungsionalitas perangkat lunak melalui serangkaian skenario uji coba yang sistematis untuk mendeteksi bug.", "subs": [{"kode": "Sub-093-1", "uraian": "Mampu mengevaluasi kualitas kode OOP menggunakan metrik dan mengidentifikasi code smell."}, {"kode": "Sub-093-2", "uraian": "Mampu melakukan refactoring kode OOP yang bermasalah dan memverifikasi bahwa fungsionalitas tetap terjaga."}]}}}, "INF-411-105": {"nama": "Metode Numerik", "cpmks": {"CPMK032": {"desk": "Mampu menganalisis teori komputasi dan model matematika untuk memformulasikan solusi masalah teknis secara sistematis.", "subs": [{"kode": "Sub-032-1", "uraian": "Mampu menerapkan metode numerik untuk menyelesaikan persamaan non-linier."}, {"kode": "Sub-032-2", "uraian": "Mampu menganalisis galat truncation dan rounding dalam metode numerik serta strategi pengendaliannya."}]}, "CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu membandingkan metode interpolasi berdasarkan akurasi dan kompleksitas komputasinya."}, {"kode": "Sub-034-2", "uraian": "Mampu mengevaluasi dan memilih metode integrasi numerik yang optimal untuk kasus tertentu."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang pseudocode untuk algoritma metode numerik iteratif dengan kriteria konvergensi yang tepat."}, {"kode": "Sub-052-2", "uraian": "Mampu mengembangkan alur komputasi numerik yang terstruktur dengan penanganan kasus divergensi."}]}, "CPMK053": {"desk": "Mampu mengevaluasi validitas logika dan efisiensi dari berbagai alternatif algoritma sebelum diimplementasikan ke dalam kode program.", "subs": [{"kode": "Sub-053-1", "uraian": "Mampu memvalidasi solusi numerik dengan membandingkannya terhadap solusi analitik atau referensi yang diketahui."}, {"kode": "Sub-053-2", "uraian": "Mampu mengevaluasi tingkat akurasi dan efisiensi komputasi dari beberapa alternatif metode numerik."}]}, "CPMK071": {"desk": "Mampu menganalisis dan memvalidasi data menggunakan teknik cleansing yang tepat hingga menghasilkan dataset yang siap dianalisis.", "subs": [{"kode": "Sub-071-1", "uraian": "Mampu menerapkan metode interpolasi untuk mengaproksimasi nilai fungsi di titik yang tidak diketahui dan menganalisis galat interpolasi."}, {"kode": "Sub-071-2", "uraian": "Mampu menerapkan metode diferensiasi numerik dan menganalisis galat truncation yang dihasilkan."}]}, "CPMK072": {"desk": "Mampu menganalisis dan mengevaluasi pola serta tren data menggunakan metode statistik atau algoritma Machine Learning dasar untuk mendapatkan informasi yang berguna.", "subs": [{"kode": "Sub-072-1", "uraian": "Mampu menerapkan metode integrasi numerik dan membandingkan akurasi antar metode."}, {"kode": "Sub-072-2", "uraian": "Mampu menganalisis konvergensi dan kestabilan metode numerik iteratif serta menentukan kriteria berhenti yang tepat berdasarkan galat relatif."}]}}}, "INF-411-214": {"nama": "Strategi Algoritma", "cpmks": {"CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu membandingkan solusi brute force dengan solusi optimal menggunakan paradigma divide-and-conquer atau dynamic programming."}, {"kode": "Sub-034-2", "uraian": "Mampu mengevaluasi kompleksitas waktu dan ruang solusi algoritmik dengan notasi Big-O dan mengidentifikasi bottleneck."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi masalah komputasi kompleks menjadi sub-masalah yang dapat diselesaikan secara rekursif atau iteratif."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi pola masalah untuk menentukan strategi algoritmik yang tepat."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang pseudocode algoritma menggunakan strategi greedy, dynamic programming, atau backtracking untuk masalah yang diberikan."}, {"kode": "Sub-052-2", "uraian": "Mampu mengembangkan algoritma efisien dengan mempertimbangkan trade-off waktu dan memori yang disepakati."}]}, "CPMK053": {"desk": "Mampu mengevaluasi validitas logika dan efisiensi dari berbagai alternatif algoritma sebelum diimplementasikan ke dalam kode program.", "subs": [{"kode": "Sub-053-1", "uraian": "Mampu membuktikan keoptimalan solusi greedy atau DP melalui argumen matematis atau simulasi pada kasus uji representatif."}, {"kode": "Sub-053-2", "uraian": "Mampu mengevaluasi dan membandingkan beberapa alternatif algoritma untuk masalah yang sama berdasarkan kompleksitas asimptotik."}]}, "CPMK091": {"desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "subs": [{"kode": "Sub-091-1", "uraian": "Mampu mengimplementasikan algoritma lanjutan dalam kode yang efisien dan benar."}, {"kode": "Sub-091-2", "uraian": "Mampu mengoptimalkan kode algoritmik menggunakan teknik memoization atau pruning untuk meningkatkan performa."}]}}}, "INF-421-215": {"nama": "Praktikum Strategi Algoritma", "cpmks": {"CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu mengukur dan membandingkan waktu eksekusi algoritma berbeda untuk masalah yang sama pada dataset praktikum."}, {"kode": "Sub-034-2", "uraian": "Mampu membuktikan secara empiris superioritas algoritma optimal atas brute force pada ukuran input yang meningkat."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi soal praktikum algoritma kompleks menjadi sub-masalah dan mengidentifikasi strategi penyelesaian yang tepat."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi pola algoritma dari soal-soal serupa untuk membangun pendekatan solusi yang generik."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang pseudocode lengkap untuk setiap soal praktikum sebelum implementasi dan mendokumentasikannya."}, {"kode": "Sub-052-2", "uraian": "Mampu mengimplementasikan solusi algoritmik yang terstruktur dan memenuhi seluruh test case pada platform penilaian."}]}, "CPMK053": {"desk": "Mampu mengevaluasi validitas logika dan efisiensi dari berbagai alternatif algoritma sebelum diimplementasikan ke dalam kode program.", "subs": [{"kode": "Sub-053-1", "uraian": "Mampu menganalisis dan memperbaiki solusi yang tidak efisien menjadi solusi dengan kompleksitas yang lebih baik."}, {"kode": "Sub-053-2", "uraian": "Mampu mengevaluasi kode teman dan mengidentifikasi peluang optimasi algoritma yang konkret."}]}}}, "INF-411-306": {"nama": "Manajemen Jaringan", "cpmks": {"CPMK041": {"desk": "Mampu menganalisis dan menetapkan spesifikasi kebutuhan infrastruktur jaringan dan standar keamanan sistem yang diperlukan untuk mendukung kinerja aplikasi secara optimal.", "subs": [{"kode": "Sub-041-1", "uraian": "Mampu menganalisis kebutuhan infrastruktur jaringan enterprise berdasarkan trafik, keandalan, dan SLA yang ditetapkan."}, {"kode": "Sub-041-2", "uraian": "Mampu menetapkan spesifikasi teknis keamanan jaringan berdasarkan profil ancaman organisasi."}]}, "CPMK042": {"desk": "Mampu merancang arsitektur jaringan komputer atau sistem IoT dasar yang aman, skalabel, dan sesuai dengan topologi standar.", "subs": [{"kode": "Sub-042-1", "uraian": "Mampu merancang topologi jaringan enterprise berskala besar dengan redundansi dan load balancing yang sesuai."}, {"kode": "Sub-042-2", "uraian": "Mampu merancang dan mengkonfigurasi segmentasi VLAN beserta inter-VLAN routing dan trunking pada topologi jaringan enterprise yang diberikan."}]}, "CPMK044": {"desk": "Mampu menganalisis potensi risiko keamanan pada arsitektur sistem jaringan atau IoT dan merumuskan langkah mitigasi dasarnya.", "subs": [{"kode": "Sub-044-1", "uraian": "Mampu menerapkan protokol dan tools network monitoring untuk memantau kondisi dan kinerja jaringan secara proaktif."}, {"kode": "Sub-044-2", "uraian": "Mampu mengotomatisasi konfigurasi perangkat jaringan menggunakan skrip dan menjelaskan manfaat network automation untuk operasi jaringan berskala besar."}]}, "CPMK102": {"desk": "Mampu menerapkan mekanisme enkripsi dan autentikasi pada perangkat IoT untuk menjamin kerahasiaan dan integritas data.", "subs": [{"kode": "Sub-102-1", "uraian": "Mampu mengkonfigurasi dan memverifikasi VPN site-to-site menggunakan protokol IPSec untuk komunikasi aman antar cabang."}, {"kode": "Sub-102-2", "uraian": "Mampu menerapkan 802.1X dan RADIUS untuk autentikasi berbasis sertifikat pada jaringan enterprise."}]}}}, "INF-411-503": {"nama": "Etika, Masyarakat dan Komputer Keberlanjutan", "cpmks": {"CPMK011": {"desk": "Mampu menerapkan nilai etika, kejujuran, dan integritas akademik secara konsisten dalam setiap aktivitas perkuliahan dan pengerjaan tugas tanpa melakukan plagiasi.", "subs": [{"kode": "Sub-011-1", "uraian": "Mampu mengidentifikasi standar etika profesi informatika dan menerapkannya dalam analisis kasus nyata."}, {"kode": "Sub-011-2", "uraian": "Mampu mengevaluasi dilema etika dalam pengembangan perangkat lunak dan merumuskan keputusan yang bertanggung jawab."}]}, "CPMK012": {"desk": "Mampu menunjukkan kedisiplinan dan tanggung jawab dengan menyelesaikan seluruh kewajiban tugas secara mandiri dan tepat waktu.", "subs": [{"kode": "Sub-012-1", "uraian": "Mampu menunjukkan tanggung jawab profesional dalam menyelesaikan tugas analisis etika secara mandiri dan tepat waktu."}, {"kode": "Sub-012-2", "uraian": "Mampu mendokumentasikan proses pengambilan keputusan etis dalam laporan yang terstruktur dan dapat dipertanggungjawabkan."}]}, "CPMK013": {"desk": "Mampu menunjukkan sikap profesional dalam berinteraksi dan bekerjasama dengan tim melalui komunikasi yang konstruktif dan pembagian peran yang adil.", "subs": [{"kode": "Sub-013-1", "uraian": "Mampu berdiskusi secara konstruktif tentang isu etika teknologi dalam forum yang menghormati perbedaan perspektif."}, {"kode": "Sub-013-2", "uraian": "Mampu berkolaborasi dalam tim untuk menganalisis kasus etika dan menyusun rekomendasi kebijakan yang seimbang."}]}, "CPMK021": {"desk": "Mampu menganalisis isu sosial, budaya, dan lingkungan yang relevan dengan penerapan TI melalui kajian studi kasus nyata di masyarakat.", "subs": [{"kode": "Sub-021-1", "uraian": "Mampu menganalisis isu privasi data, bias algoritma, dan kesenjangan digital dari perspektif sosial-teknis yang komprehensif."}, {"kode": "Sub-021-2", "uraian": "Mampu mengidentifikasi dampak sosial penggunaan AI dan otomasi terhadap tenaga kerja dan komunitas yang rentan."}]}, "CPMK022": {"desk": "Mampu mengevaluasi dampak sosial dan keberlanjutan dari sebuah solusi TI menggunakan kerangka analisis dampak yang sistematis, objektif dan berbasis data.", "subs": [{"kode": "Sub-022-1", "uraian": "Mampu mengevaluasi dampak lingkungan infrastruktur komputasi menggunakan kerangka LCA."}, {"kode": "Sub-022-2", "uraian": "Mampu menganalisis implementasi green computing dan mengusulkan rekomendasi keberlanjutan yang terukur."}]}, "CPMK023": {"desk": "Mampu merancang dan menerapkan solusi teknologi tepat guna yang kontekstual dan berkelanjutan untuk membantu menyelesaikan permasalahan nyata di komunitas sasaran.", "subs": [{"kode": "Sub-023-1", "uraian": "Mampu merancang solusi teknologi yang mempertimbangkan inklusivitas, keadilan, dan keberlanjutan untuk komunitas yang kurang terlayani."}, {"kode": "Sub-023-2", "uraian": "Mampu menerapkan prinsip responsible innovation dalam perancangan proyek teknologi berbasis dampak sosial positif."}]}}}, "INF-511-307": {"nama": "Pemrograman Web", "cpmks": {"CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu membangun halaman web statis dengan HTML semantik yang benar dan CSS yang responsif."}, {"kode": "Sub-052-2", "uraian": "Mampu mengimplementasikan interaktivitas halaman web menggunakan JavaScript modern termasuk DOM manipulation, event handling, dan fetch API."}]}, "CPMK081": {"desk": "Mampu menganalisis dan merumuskan kebutuhan pengguna ke dalam bentuk User Stories atau spesifikasi kebutuhan yang komprehensif dan mudah dipahami.", "subs": [{"kode": "Sub-081-1", "uraian": "Mampu menganalisis dan merumuskan User Stories untuk fitur aplikasi web dari hasil wawancara pengguna atau brief proyek."}, {"kode": "Sub-081-2", "uraian": "Mampu mendefinisikan kriteria penerimaan yang terukur untuk setiap User Story aplikasi web yang dikembangkan."}]}, "CPMK082": {"desk": "Mampu merancang arsitektur solusi sistem yang selaras dengan spesifikasi kebutuhan pengguna yang telah disepakati.", "subs": [{"kode": "Sub-082-1", "uraian": "Mampu merancang arsitektur RESTful API dengan endpoint yang konsisten dan dokumentasi OpenAPI/Swagger yang lengkap."}, {"kode": "Sub-082-2", "uraian": "Mampu memilih dan membuktikan arsitektur front-end yang sesuai dengan kebutuhan pengguna."}]}, "CPMK083": {"desk": "Mampu mengintegrasikan prinsip kemudahan penggunaan (usability) dan keberlanjutan sistem ke dalam rancangan antarmuka pengguna.", "subs": [{"kode": "Sub-083-1", "uraian": "Mampu merancang antarmuka web yang responsif dan mengikuti prinsip mobile-first dengan mempertimbangkan aksesibilitas WCAG."}, {"kode": "Sub-083-2", "uraian": "Mampu mengimplementasikan proses deployment aplikasi web ke platform cloud menggunakan prosedur yang benar."}]}, "CPMK091": {"desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "subs": [{"kode": "Sub-091-1", "uraian": "Mampu mengimplementasikan aplikasi web full-stack dengan front-end dan back-end yang terintegrasi menggunakan framework modern."}, {"kode": "Sub-091-2", "uraian": "Mampu menulis kode web yang mengikuti standar keamanan OWASP."}]}, "CPMK092": {"desk": "Mampu merancang dan melaksanakan pengujian perangkat lunak (fungsional/unit) menggunakan metode yang terstandar untuk memastikan kode berjalan dengan benar.", "subs": [{"kode": "Sub-092-1", "uraian": "Mampu merancang dan melaksanakan pengujian API menggunakan Postman/Thunder Client untuk memverifikasi seluruh endpoint."}, {"kode": "Sub-092-2", "uraian": "Mampu mengimplementasikan unit test untuk komponen front-end dan fungsi back-end menggunakan framework testing."}]}, "CPMK093": {"desk": "Mampu mengevaluasi kinerja dan fungsionalitas perangkat lunak melalui serangkaian skenario uji coba yang sistematis untuk mendeteksi bug.", "subs": [{"kode": "Sub-093-1", "uraian": "Mampu mengevaluasi performa aplikasi web menggunakan Lighthouse dan mengidentifikasi bottleneck yang perlu dioptimalkan."}, {"kode": "Sub-093-2", "uraian": "Mampu mendeteksi dan memperbaiki bug aplikasi web melalui pengujian lintas browser dan skenario edge case."}]}}}, "INF-511-401": {"nama": "Kecerdasan Buatan", "cpmks": {"CPMK031": {"desk": "Mampu menganalisis konsep dasar komputasi dan struktur data untuk menjelaskan keterkaitannya dalam penyelesaian masalah komputasi secara tepat.", "subs": [{"kode": "Sub-031-1", "uraian": "Mampu menjelaskan paradigma utama AI dan hubungannya dengan komputasi."}, {"kode": "Sub-031-2", "uraian": "Mampu menganalisis karakteristik masalah untuk menentukan pendekatan AI yang paling sesuai."}]}, "CPMK032": {"desk": "Mampu menganalisis teori komputasi dan model matematika untuk memformulasikan solusi masalah teknis secara sistematis.", "subs": [{"kode": "Sub-032-1", "uraian": "Mampu menerapkan model probabilistik untuk merepresentasikan ketidakpastian dalam penalaran berbasis AI."}, {"kode": "Sub-032-2", "uraian": "Mampu menganalisis masalah inferensi logis menggunakan propositional logic dan predicate logic dalam sistem berbasis aturan."}]}, "CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu membandingkan algoritma pencarian berdasarkan kelengkapan, optimalitas, dan kompleksitasnya."}, {"kode": "Sub-034-2", "uraian": "Mampu mengevaluasi representasi pengetahuan untuk domain masalah tertentu."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi masalah AI kompleks ke dalam sub-masalah yang terstruktur."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi masalah nyata ke dalam representasi formal yang dapat diproses oleh algoritma AI."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang pseudocode untuk algoritma pencarian heuristik dengan fungsi heuristik yang admissible."}, {"kode": "Sub-052-2", "uraian": "Mampu mengembangkan agen cerdas sederhana yang beroperasi berdasarkan aturan persepsi-aksi yang terstruktur."}]}, "CPMK053": {"desk": "Mampu mengevaluasi validitas logika dan efisiensi dari berbagai alternatif algoritma sebelum diimplementasikan ke dalam kode program.", "subs": [{"kode": "Sub-053-1", "uraian": "Mampu memvalidasi keoptimalan algoritma pencarian melalui analisis kelengkapan dan admissibility heuristik yang digunakan."}, {"kode": "Sub-053-2", "uraian": "Mampu mengevaluasi efektivitas sistem berbasis aturan menggunakan test case yang mencakup kasus tepi dan kasus umum."}]}, "CPMK072": {"desk": "Mampu menganalisis dan mengevaluasi pola serta tren data menggunakan metode statistik atau algoritma Machine Learning dasar untuk mendapatkan informasi yang berguna.", "subs": [{"kode": "Sub-072-1", "uraian": "Mampu menganalisis pola dan tren data menggunakan pendekatan probabilistik AI untuk pengambilan keputusan."}, {"kode": "Sub-072-2", "uraian": "Mampu mengevaluasi kinerja model AI dengan metrik yang sesuai pada dataset yang diberikan."}]}, "CPMK073": {"desk": "Mampu merumuskan dan mengevaluasi rekomendasi solusi yang strategis dan logis berdasarkan hasil interpretasi data yang akurat.", "subs": [{"kode": "Sub-073-1", "uraian": "Mampu merumuskan rekomendasi solusi berbasis hasil inferensi sistem AI dengan disertai penjelasan alur penalaran yang logis."}, {"kode": "Sub-073-2", "uraian": "Mampu menganalisis isu etika dan bias dalam sistem AI dan mengusulkan pendekatan pengembangan AI yang bertanggung jawab."}]}, "CPMK091": {"desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "subs": [{"kode": "Sub-091-1", "uraian": "Mampu mengimplementasikan algoritma AI dalam kode yang efisien menggunakan library yang sesuai."}, {"kode": "Sub-091-2", "uraian": "Mampu mengintegrasikan komponen AI ke dalam aplikasi yang dapat menunjukkan perilaku cerdas pada kasus nyata."}]}}}, "INF-511-402": {"nama": "Internet of Things", "cpmks": {"CPMK042": {"desk": "Mampu merancang arsitektur jaringan komputer atau sistem IoT dasar yang aman, skalabel, dan sesuai dengan topologi standar.", "subs": [{"kode": "Sub-042-1", "uraian": "Mampu merancang arsitektur sistem IoT end-to-end yang aman dan dapat diskalakan."}, {"kode": "Sub-042-2", "uraian": "Mampu merancang protokol komunikasi IoT yang sesuai dengan karakteristik perangkat dan jaringan."}]}, "CPMK043": {"desk": "Mampu mengimplementasikan konfigurasi perangkat jaringan dan konektivitas sensor IoT agar terhubung ke gateway atau internet dengan stabil.", "subs": [{"kode": "Sub-043-1", "uraian": "Mampu memprogram embedded system untuk mengkonfigurasi dan menghubungkan sensor atau aktuator ke platform IoT menggunakan protokol komunikasi yang ditetapkan."}, {"kode": "Sub-043-2", "uraian": "Mampu memverifikasi konektivitas perangkat IoT ke gateway dan cloud melalui pengujian end-to-end yang terstruktur."}]}, "CPMK044": {"desk": "Mampu menganalisis potensi risiko keamanan pada arsitektur sistem jaringan atau IoT dan merumuskan langkah mitigasi dasarnya.", "subs": [{"kode": "Sub-044-1", "uraian": "Mampu menganalisis vektor ancaman keamanan sistem IoT dan mitigasinya."}, {"kode": "Sub-044-2", "uraian": "Mampu merancang kebijakan keamanan IoT yang mencakup autentikasi perangkat, enkripsi data, dan pembaruan firmware aman."}]}, "CPMK101": {"desk": "Mampu merancang dan mengimplementasikan protokol komunikasi data untuk menghubungkan sensor fisik dengan platform IoT secara real-time.", "subs": [{"kode": "Sub-101-1", "uraian": "Mampu merancang dan mengimplementasikan protokol komunikasi MQTT untuk mengirim data sensor secara real-time ke broker."}, {"kode": "Sub-101-2", "uraian": "Mampu memprogram microcontroller untuk membaca data sensor dan mengirimkannya melalui protokol IoT ke broker atau server."}]}, "CPMK102": {"desk": "Mampu menerapkan mekanisme enkripsi dan autentikasi pada perangkat IoT untuk menjamin kerahasiaan dan integritas data.", "subs": [{"kode": "Sub-102-1", "uraian": "Mampu menerapkan TLS/SSL pada komunikasi MQTT dan HTTPS untuk mengenkripsi transmisi data sensor IoT."}, {"kode": "Sub-102-2", "uraian": "Mampu mengimplementasikan mekanisme autentikasi perangkat menggunakan certificate-based atau token-based authentication."}]}, "CPMK103": {"desk": "Mampu menganalisis dampak privasi data dan potensi celah keamanan pada sistem IoT yang dikembangkan serta merumuskan solusi perbaikan.", "subs": [{"kode": "Sub-103-1", "uraian": "Mampu menganalisis dampak privasi pengguna dari sistem IoT yang dikembangkan dan mengidentifikasi data sensitif yang dikumpulkan."}, {"kode": "Sub-103-2", "uraian": "Mampu merumuskan kebijakan perlindungan privasi dan mitigasi keamanan untuk celah yang ditemukan dalam sistem IoT."}]}}}, "INF-511-403": {"nama": "Keamanan Informasi dan Jaringan", "cpmks": {"CPMK041": {"desk": "Mampu menganalisis dan menetapkan spesifikasi kebutuhan infrastruktur jaringan dan standar keamanan sistem yang diperlukan untuk mendukung kinerja aplikasi secara optimal.", "subs": [{"kode": "Sub-041-1", "uraian": "Mampu menganalisis kebutuhan keamanan infrastruktur jaringan menggunakan framework risk assessment."}, {"kode": "Sub-041-2", "uraian": "Mampu melakukan threat modeling menggunakan metodologi tertentu untuk mengidentifikasi ancaman pada sistem dan merumuskan kontrol keamanan yang sesuai."}]}, "CPMK042": {"desk": "Mampu merancang arsitektur jaringan komputer atau sistem IoT dasar yang aman, skalabel, dan sesuai dengan topologi standar.", "subs": [{"kode": "Sub-042-1", "uraian": "Mampu merancang segmentasi jaringan menggunakan DMZ, VLAN, dan firewall untuk meminimalkan attack surface."}, {"kode": "Sub-042-2", "uraian": "Mampu merancang kebijakan akses jaringan yang sesuai dengan kebutuhan keamanan organisasi."}]}, "CPMK044": {"desk": "Mampu menganalisis potensi risiko keamanan pada arsitektur sistem jaringan atau IoT dan merumuskan langkah mitigasi dasarnya.", "subs": [{"kode": "Sub-044-1", "uraian": "Mampu menganalisis kerentanan sistem menggunakan tools scanning dan mengklasifikasikan temuan berdasarkan CVSS."}, {"kode": "Sub-044-2", "uraian": "Mampu merumuskan rencana remediasi yang diprioritaskan berdasarkan tingkat risiko kerentanan yang ditemukan."}]}, "CPMK102": {"desk": "Mampu menerapkan mekanisme enkripsi dan autentikasi pada perangkat IoT untuk menjamin kerahasiaan dan integritas data.", "subs": [{"kode": "Sub-102-1", "uraian": "Mampu menerapkan kriptografi untuk mengamankan data at-rest dan data in-transit pada sistem nyata."}, {"kode": "Sub-102-2", "uraian": "Mampu mengkonfigurasi PKI dan manajemen sertifikat untuk autentikasi entitas dalam jaringan."}]}, "CPMK103": {"desk": "Mampu menganalisis dampak privasi data dan potensi celah keamanan pada sistem IoT yang dikembangkan serta merumuskan solusi perbaikan.", "subs": [{"kode": "Sub-103-1", "uraian": "Mampu mengkonfigurasi dan mengelola sistem IDS atau IPS untuk mendeteksi pola serangan dan menghasilkan alert yang dapat ditindaklanjuti."}, {"kode": "Sub-103-2", "uraian": "Mampu merumuskan prosedur incident response yang terstruktur dan mendokumentasikan temuan investigasi keamanan."}]}}}, "INF-511-404": {"nama": "Pembelajaran Mesin", "cpmks": {"CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu membandingkan algoritma supervised learning berdasarkan akurasi dan kompleksitas."}, {"kode": "Sub-034-2", "uraian": "Mampu mengevaluasi dan memilih model machine learning terbaik menggunakan cross-validation, hyperparameter tuning, dan metrik yang tepat."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi pipeline machine learning menjadi tahapan yang terkelola."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi masalah bisnis/teknis ke dalam formulasi masalah ML yang tepat."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang pipeline ML end-to-end menggunakan pseudocode yang mencakup preprocessing hingga deployment model."}, {"kode": "Sub-052-2", "uraian": "Mampu menerapkan teknik reduksi dimensi untuk data berdimensi tinggi dan menginterpretasikan hasil proyeksi."}]}, "CPMK071": {"desk": "Mampu menganalisis dan memvalidasi data menggunakan teknik cleansing yang tepat hingga menghasilkan dataset yang siap dianalisis.", "subs": [{"kode": "Sub-071-1", "uraian": "Mampu menerapkan teknik preprocessing data ML secara tepat."}, {"kode": "Sub-071-2", "uraian": "Mampu menganalisis dan memvalidasi kualitas dataset ML menggunakan teknik visualisasi dan statistik deskriptif."}]}, "CPMK072": {"desk": "Mampu menganalisis dan mengevaluasi pola serta tren data menggunakan metode statistik atau algoritma Machine Learning dasar untuk mendapatkan informasi yang berguna.", "subs": [{"kode": "Sub-072-1", "uraian": "Mampu menjelaskan konsep dasar Reinforcement Learning beserta komponen utamanya dan mengidentifikasi kasus penggunaan yang sesuai."}, {"kode": "Sub-072-2", "uraian": "Mampu mengevaluasi performa model ML menggunakan confusion matrix, ROC-AUC, RMSE, dan metrik evaluasi lain yang relevan."}]}, "CPMK073": {"desk": "Mampu merumuskan dan mengevaluasi rekomendasi solusi yang strategis dan logis berdasarkan hasil interpretasi data yang akurat.", "subs": [{"kode": "Sub-073-1", "uraian": "Mampu merumuskan rekomendasi model ML terbaik berdasarkan hasil eksperimen yang sistematis dan terdokumentasi dengan baik."}, {"kode": "Sub-073-2", "uraian": "Mampu mengevaluasi dan mengkomunikasikan limitasi model ML kepada pemangku kepentingan secara jujur dan berbasis data."}]}, "CPMK091": {"desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "subs": [{"kode": "Sub-091-1", "uraian": "Mampu mengimplementasikan pipeline ML lengkap menggunakan Python dari preprocessing hingga evaluasi."}, {"kode": "Sub-091-2", "uraian": "Mampu menulis kode ML yang termodulasi, reproducible, dan didokumentasikan dalam format notebook atau script yang rapi."}]}}}, "INF-511-405": {"nama": "Sistem Informasi Geografis", "cpmks": {"CPMK071": {"desk": "Mampu menganalisis dan memvalidasi data menggunakan teknik cleansing yang tepat hingga menghasilkan dataset yang siap dianalisis.", "subs": [{"kode": "Sub-071-1", "uraian": "Mampu mengimpor, membersihkan, dan memvalidasi data geospasial dari berbagai format menggunakan tools SIG."}, {"kode": "Sub-071-2", "uraian": "Mampu menganalisis kualitas data geografis dan melakukan koreksi yang diperlukan."}]}, "CPMK072": {"desk": "Mampu menganalisis dan mengevaluasi pola serta tren data menggunakan metode statistik atau algoritma Machine Learning dasar untuk mendapatkan informasi yang berguna.", "subs": [{"kode": "Sub-072-1", "uraian": "Mampu menganalisis pola spasial menggunakan teknik geostatistik dan menginterpretasikan hasilnya."}, {"kode": "Sub-072-2", "uraian": "Mampu mengevaluasi tren spasio-temporal menggunakan analisis overlay dan perubahan tutupan lahan pada data multi-temporal."}]}, "CPMK073": {"desk": "Mampu merumuskan dan mengevaluasi rekomendasi solusi yang strategis dan logis berdasarkan hasil interpretasi data yang akurat.", "subs": [{"kode": "Sub-073-1", "uraian": "Mampu merumuskan rekomendasi berbasis analisis spasial yang akurat untuk mendukung pengambilan keputusan berbasis lokasi."}, {"kode": "Sub-073-2", "uraian": "Mampu mengevaluasi validitas model SIG dan mempresentasikan temuan geospasial dalam format peta dan laporan yang komunikatif."}]}, "CPMK081": {"desk": "Mampu menganalisis dan merumuskan kebutuhan pengguna ke dalam bentuk User Stories atau spesifikasi kebutuhan yang komprehensif dan mudah dipahami.", "subs": [{"kode": "Sub-081-1", "uraian": "Mampu menganalisis kebutuhan pengguna aplikasi berbasis peta dan merumuskan spesifikasi fitur geospasial yang diperlukan."}, {"kode": "Sub-081-2", "uraian": "Mampu menjelaskan konsep dasar GIS meliputi sistem koordinat, proyeksi peta, dan tipe data spasial serta perbedaan penggunaannya."}]}, "CPMK082": {"desk": "Mampu merancang arsitektur solusi sistem yang selaras dengan spesifikasi kebutuhan pengguna yang telah disepakati.", "subs": [{"kode": "Sub-082-1", "uraian": "Mampu merancang arsitektur sistem informasi geografis yang mencakup server geospasial, database, dan antarmuka peta."}, {"kode": "Sub-082-2", "uraian": "Mampu menerapkan operasi geoprocessing dasar untuk menjawab pertanyaan analisis spasial yang diberikan."}]}, "CPMK083": {"desk": "Mampu mengintegrasikan prinsip kemudahan penggunaan (usability) dan keberlanjutan sistem ke dalam rancangan antarmuka pengguna.", "subs": [{"kode": "Sub-083-1", "uraian": "Mampu merancang antarmuka WebGIS yang intuitif dengan kontrol peta, layer management, dan legenda yang mudah dipahami pengguna."}, {"kode": "Sub-083-2", "uraian": "Mampu mengintegrasikan prinsip kartografi yang baik ke dalam rancangan visualisasi data geospasial yang efektif."}]}, "CPMK084": {"desk": "Mampu mengembangkan dan mengevaluasi prototipe sistem interaktif melalui pengujian pengguna (user testing) untuk memastikan kesesuaian desain.", "subs": [{"kode": "Sub-084-1", "uraian": "Mampu mengembangkan prototipe aplikasi WebGIS yang fungsional dan melakukan user testing dengan pengguna target."}, {"kode": "Sub-084-2", "uraian": "Mampu mengevaluasi dan merevisi desain antarmuka WebGIS berdasarkan temuan user testing secara iteratif."}]}}}, "INF-511-801": {"nama": "Metodologi Penelitian", "cpmks": {"CPMK032": {"desk": "Mampu menganalisis teori komputasi dan model matematika untuk memformulasikan solusi masalah teknis secara sistematis.", "subs": [{"kode": "Sub-032-1", "uraian": "Mampu melakukan systematic literature review menggunakan protokol pencarian terstruktur untuk mengidentifikasi state of the art dan research gap yang relevan dengan topik penelitian."}, {"kode": "Sub-032-2", "uraian": "Mampu memformulasikan pertanyaan penelitian yang SMART dan rumusan masalah yang dapat diuji secara empiris."}]}, "CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu membandingkan metodologi penelitian dan memilih yang paling sesuai."}, {"kode": "Sub-034-2", "uraian": "Mampu mengevaluasi kekuatan dan kelemahan rancangan penelitian yang diusulkan berdasarkan kriteria validitas dan reliabilitas."}]}, "CPMK062": {"desk": "Mampu menyajikan dan mempertahankan gagasan teknis secara lisan dengan argumentasi yang logis dan didukung media visual yang efektif.", "subs": [{"kode": "Sub-062-1", "uraian": "Mampu menyajikan proposal penelitian secara lisan dengan struktur yang jelas dan argumentasi yang didukung literatur kuat."}, {"kode": "Sub-062-2", "uraian": "Mampu mempertahankan justifikasi metodologi penelitian dari pertanyaan kritis penguji dengan argumen ilmiah yang kuat."}]}, "CPMK073": {"desk": "Mampu merumuskan dan mengevaluasi rekomendasi solusi yang strategis dan logis berdasarkan hasil interpretasi data yang akurat.", "subs": [{"kode": "Sub-073-1", "uraian": "Mampu merumuskan hipotesis atau pertanyaan penelitian yang dapat dijawab melalui prosedur metodologi yang direncanakan."}, {"kode": "Sub-073-2", "uraian": "Mampu mengevaluasi temuan penelitian yang ada dan mengidentifikasi kontribusi baru yang dapat diberikan oleh penelitian."}]}}}, "INF-611-406": {"nama": "Computer Vision", "cpmks": {"CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu membandingkan arsitektur CNN berdasarkan akurasi dan biaya komputasi untuk tugas vision."}, {"kode": "Sub-034-2", "uraian": "Mampu mengevaluasi dan memilih teknik augmentasi data yang optimal untuk meningkatkan generalisasi model vision."}]}, "CPMK051": {"desk": "Mampu menganalisis dan menerapkan teknik abstraksi dan dekomposisi untuk memecahkan masalah kompleks menjadi sub-masalah yang lebih kecil dan terkelola.", "subs": [{"kode": "Sub-051-1", "uraian": "Mampu mendekomposisi pipeline computer vision secara terstruktur."}, {"kode": "Sub-051-2", "uraian": "Mampu mengabstraksi masalah visual ke dalam formulasi yang dapat diselesaikan dengan CV."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang arsitektur model CNN beserta strategi training menggunakan pseudocode."}, {"kode": "Sub-052-2", "uraian": "Mampu mengembangkan pipeline preprocessing citra yang terstruktur untuk tugas computer vision tertentu."}]}, "CPMK071": {"desk": "Mampu menganalisis dan memvalidasi data menggunakan teknik cleansing yang tepat hingga menghasilkan dataset yang siap dianalisis.", "subs": [{"kode": "Sub-071-1", "uraian": "Mampu membersihkan dan memvalidasi dataset citra sebelum proses training."}, {"kode": "Sub-071-2", "uraian": "Mampu menganalisis distribusi dataset dan mengidentifikasi class imbalance serta strategi penanganannya."}]}, "CPMK072": {"desk": "Mampu menganalisis dan mengevaluasi pola serta tren data menggunakan metode statistik atau algoritma Machine Learning dasar untuk mendapatkan informasi yang berguna.", "subs": [{"kode": "Sub-072-1", "uraian": "Mampu menganalisis performa model CV menggunakan metrik dan confusion matrix secara tepat."}, {"kode": "Sub-072-2", "uraian": "Mampu mengevaluasi trade-off antara akurasi dan kecepatan inferensi model untuk deployment pada device tertentu."}]}, "CPMK073": {"desk": "Mampu merumuskan dan mengevaluasi rekomendasi solusi yang strategis dan logis berdasarkan hasil interpretasi data yang akurat.", "subs": [{"kode": "Sub-073-1", "uraian": "Mampu merumuskan rekomendasi model dan konfigurasi training terbaik berdasarkan hasil eksperimen yang terdokumentasi."}, {"kode": "Sub-073-2", "uraian": "Mampu mengimplementasikan model segmentasi citra dan menginterpretasikan hasil segmentasi secara kuantitatif dan visual."}]}, "CPMK091": {"desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "subs": [{"kode": "Sub-091-1", "uraian": "Mampu mengimplementasikan pipeline CV lengkap menggunakan PyTorch atau TensorFlow."}, {"kode": "Sub-091-2", "uraian": "Mampu mengimplementasikan model deteksi objek dan mengevaluasi performanya menggunakan metrik deteksi yang sesuai."}]}, "CPMK093": {"desk": "Mampu mengevaluasi kinerja dan fungsionalitas perangkat lunak melalui serangkaian skenario uji coba yang sistematis untuk mendeteksi bug.", "subs": [{"kode": "Sub-093-1", "uraian": "Mampu mengevaluasi model CV secara sistematis menggunakan test set yang tidak terlihat dan menginterpretasikan error cases."}, {"kode": "Sub-093-2", "uraian": "Mampu mendeteksi dan mendiagnosis masalah overfitting/underfitting dari kurva training dan merancang solusi perbaikan."}]}}}, "INF-611-407": {"nama": "Pemrograman Mobile", "cpmks": {"CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang arsitektur aplikasi mobile dan alur navigasi antar layar menggunakan wireframe yang terstruktur."}, {"kode": "Sub-052-2", "uraian": "Mampu mengembangkan pseudocode untuk logika bisnis utama aplikasi mobile sebelum implementasi kode."}]}, "CPMK081": {"desk": "Mampu menganalisis dan merumuskan kebutuhan pengguna ke dalam bentuk User Stories atau spesifikasi kebutuhan yang komprehensif dan mudah dipahami.", "subs": [{"kode": "Sub-081-1", "uraian": "Mampu menganalisis kebutuhan pengguna aplikasi mobile melalui analisis kompetitor dan user research untuk menyusun spesifikasi."}, {"kode": "Sub-081-2", "uraian": "Mampu mendokumentasikan User Stories aplikasi mobile dengan kriteria penerimaan yang spesifik dan dapat diuji."}]}, "CPMK082": {"desk": "Mampu merancang arsitektur solusi sistem yang selaras dengan spesifikasi kebutuhan pengguna yang telah disepakati.", "subs": [{"kode": "Sub-082-1", "uraian": "Mampu merancang arsitektur aplikasi mobile yang mempertimbangkan offline-first, sinkronisasi data, dan manajemen state."}, {"kode": "Sub-082-2", "uraian": "Mampu mendokumentasikan desain arsitektur komponen mobile beserta alur data antar layer yang jelas."}]}, "CPMK083": {"desk": "Mampu mengintegrasikan prinsip kemudahan penggunaan (usability) dan keberlanjutan sistem ke dalam rancangan antarmuka pengguna.", "subs": [{"kode": "Sub-083-1", "uraian": "Mampu merancang antarmuka mobile yang mengikuti panduan desain platform dengan UX yang intuitif."}, {"kode": "Sub-083-2", "uraian": "Mampu mengintegrasikan prinsip aksesibilitas mobile ke dalam desain UI."}]}, "CPMK084": {"desk": "Mampu mengembangkan dan mengevaluasi prototipe sistem interaktif melalui pengujian pengguna (user testing) untuk memastikan kesesuaian desain.", "subs": [{"kode": "Sub-084-1", "uraian": "Mampu mengembangkan prototipe aplikasi mobile interaktif menggunakan Figma dan melakukan usability testing dengan 5 pengguna."}, {"kode": "Sub-084-2", "uraian": "Mampu merevisi desain antarmuka mobile berdasarkan temuan usability testing secara iteratif dan terdokumentasi."}]}, "CPMK091": {"desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "subs": [{"kode": "Sub-091-1", "uraian": "Mampu mengimplementasikan aplikasi mobile fungsional menggunakan Flutter/React Native yang dapat berjalan di perangkat nyata."}, {"kode": "Sub-091-2", "uraian": "Mampu mengintegrasikan REST API ke aplikasi mobile dengan penanganan state loading, error, dan data yang baik."}]}, "CPMK092": {"desk": "Mampu merancang dan melaksanakan pengujian perangkat lunak (fungsional/unit) menggunakan metode yang terstandar untuk memastikan kode berjalan dengan benar.", "subs": [{"kode": "Sub-092-1", "uraian": "Mampu merancang dan melaksanakan widget/component test dan integration test untuk fitur utama aplikasi mobile."}, {"kode": "Sub-092-2", "uraian": "Mampu melakukan pengujian performa aplikasi mobile menggunakan DevTools yang tersedia."}]}, "CPMK093": {"desk": "Mampu mengevaluasi kinerja dan fungsionalitas perangkat lunak melalui serangkaian skenario uji coba yang sistematis untuk mendeteksi bug.", "subs": [{"kode": "Sub-093-1", "uraian": "Mampu mengevaluasi kinerja aplikasi mobile menggunakan profiler dan menyusun perbaikan."}, {"kode": "Sub-093-2", "uraian": "Mampu mendeteksi memory leak dan mendiagnosis crash menggunakan tools debugging mobile yang sesuai."}]}}}, "INF-611-408": {"nama": "NLP", "cpmks": {"CPMK034": {"desk": "Mampu mengevaluasi dan membandingkan berbagai alternatif solusi teknis berdasarkan efisiensi, kompleksitas, dan efektivitas komputasi.", "subs": [{"kode": "Sub-034-1", "uraian": "Mampu membandingkan arsitektur model NLP berdasarkan performa dan kebutuhan komputasi."}, {"kode": "Sub-034-2", "uraian": "Mampu mengevaluasi dan memilih teknik representasi teks yang sesuai untuk tugas NLP tertentu."}]}, "CPMK052": {"desk": "Mampu merancang solusi algoritmik yang logis dan terstruktur menggunakan pseudocode atau flowchart untuk menyelesaikan permasalahan komputasi.", "subs": [{"kode": "Sub-052-1", "uraian": "Mampu merancang pipeline NLP end-to-end menggunakan pseudocode yang terstruktur."}, {"kode": "Sub-052-2", "uraian": "Mampu mengembangkan strategi preprocessing teks berbahasa Indonesia yang mempertimbangkan karakteristik linguistik khusus."}]}, "CPMK071": {"desk": "Mampu menganalisis dan memvalidasi data menggunakan teknik cleansing yang tepat hingga menghasilkan dataset yang siap dianalisis.", "subs": [{"kode": "Sub-071-1", "uraian": "Mampu membersihkan dan memvalidasi dataset teks untuk keperluan training model NLP."}, {"kode": "Sub-071-2", "uraian": "Mampu menerapkan teknik preprocessing teks secara tepat."}]}, "CPMK072": {"desk": "Mampu menganalisis dan mengevaluasi pola serta tren data menggunakan metode statistik atau algoritma Machine Learning dasar untuk mendapatkan informasi yang berguna.", "subs": [{"kode": "Sub-072-1", "uraian": "Mampu menganalisis pola distribusi kata dan topik dalam corpus menggunakan teknik NLP eksploratif."}, {"kode": "Sub-072-2", "uraian": "Mampu mengevaluasi model NLP menggunakan metrik yang sesuai dan menginterpretasikan hasilnya."}]}, "CPMK073": {"desk": "Mampu merumuskan dan mengevaluasi rekomendasi solusi yang strategis dan logis berdasarkan hasil interpretasi data yang akurat.", "subs": [{"kode": "Sub-073-1", "uraian": "Mampu merumuskan rekomendasi solusi NLP terbaik berdasarkan hasil benchmark yang sistematis dan terdokumentasi."}, {"kode": "Sub-073-2", "uraian": "Mampu mengevaluasi keterbatasan model NLP pada data Bahasa Indonesia dan mengusulkan perbaikan yang konkret."}]}, "CPMK091": {"desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "subs": [{"kode": "Sub-091-1", "uraian": "Mampu mengimplementasikan model NLP menggunakan library HuggingFace atau NLTK/spaCy."}, {"kode": "Sub-091-2", "uraian": "Mampu melakukan fine-tuning model Transformer pretrained pada dataset Bahasa Indonesia yang dikumpulkan sendiri."}]}, "CPMK093": {"desk": "Mampu mengevaluasi kinerja dan fungsionalitas perangkat lunak melalui serangkaian skenario uji coba yang sistematis untuk mendeteksi bug.", "subs": [{"kode": "Sub-093-1", "uraian": "Mampu mengevaluasi model NLP secara menyeluruh menggunakan test set dan menganalisis error case secara kualitatif."}, {"kode": "Sub-093-2", "uraian": "Mampu mendeteksi bias dalam model NLP dan merumuskan strategi mitigasi yang terukur."}]}}}, "INF-611-409": {"nama": "Uji Perangkat Lunak", "cpmks": {"CPMK084": {"desk": "Mampu mengembangkan dan mengevaluasi prototipe sistem interaktif melalui pengujian pengguna (user testing) untuk memastikan kesesuaian desain.", "subs": [{"kode": "Sub-084-1", "uraian": "Mampu merancang dan melaksanakan white-box testing menggunakan teknik basis path testing dengan mengukur statement dan branch coverage."}, {"kode": "Sub-084-2", "uraian": "Mampu mengimplementasikan automated test suite menggunakan framework testing yang dapat diintegrasikan dalam pipeline CI/CD."}]}, "CPMK092": {"desk": "Mampu merancang dan melaksanakan pengujian perangkat lunak (fungsional/unit) menggunakan metode yang terstandar untuk memastikan kode berjalan dengan benar.", "subs": [{"kode": "Sub-092-1", "uraian": "Mampu merancang test plan komprehensif yang mencakup unit test, integration test, dan system test untuk sistem yang diberikan."}, {"kode": "Sub-092-2", "uraian": "Mampu melaksanakan pengujian fungsional black-box menggunakan teknik equivalence partitioning dan boundary value analysis."}]}, "CPMK093": {"desk": "Mampu mengevaluasi kinerja dan fungsionalitas perangkat lunak melalui serangkaian skenario uji coba yang sistematis untuk mendeteksi bug.", "subs": [{"kode": "Sub-093-1", "uraian": "Mampu mengevaluasi kinerja sistem perangkat lunak menggunakan tools performance testing dengan skenario beban nyata."}, {"kode": "Sub-093-2", "uraian": "Mampu menganalisis hasil pengujian regresi dan mengidentifikasi defect yang perlu diperbaiki sebelum rilis."}]}, "CPMK094": {"desk": "Mampu menyusun dan mengevaluasi laporan teknis hasil pengujian perangkat lunak secara terstruktur sebagai acuan perbaikan sistem.", "subs": [{"kode": "Sub-094-1", "uraian": "Mampu menyusun laporan bug report yang lengkap menggunakan issue tracker."}, {"kode": "Sub-094-2", "uraian": "Mampu mengevaluasi dan menyusun laporan akhir pengujian yang mencakup ringkasan eksekusi, defect, dan rekomendasi rilis."}]}}}, "INF-611-601": {"nama": "Proyek Perangkat Lunak", "cpmks": {"CPMK013": {"desk": "Mampu menunjukkan sikap profesional dalam berinteraksi dan bekerjasama dengan tim melalui komunikasi yang konstruktif dan pembagian peran yang adil.", "subs": [{"kode": "Sub-013-1", "uraian": "Mampu menunjukkan kepemimpinan tim yang profesional dengan membagi peran, memfasilitasi meeting, dan menyelesaikan konflik."}, {"kode": "Sub-013-2", "uraian": "Mampu berkontribusi secara adil dan kolaboratif dalam tim proyek melalui komunikasi yang terbuka dan konstruktif."}]}, "CPMK061": {"desk": "Mampu menyusun dan mengevaluasi dokumen spesifikasi teknis perangkat lunak yang lengkap dan sesuai dengan standar industri.", "subs": [{"kode": "Sub-061-1", "uraian": "Mampu menyusun dokumentasi proyek lengkap yang memenuhi standar industri."}, {"kode": "Sub-061-2", "uraian": "Mampu mengevaluasi dan melakukan review dokumentasi teknis tim menggunakan walkthrough yang terstruktur."}]}, "CPMK062": {"desk": "Mampu menyajikan dan mempertahankan gagasan teknis secara lisan dengan argumentasi yang logis dan didukung media visual yang efektif.", "subs": [{"kode": "Sub-062-1", "uraian": "Mampu mempresentasikan progres sprint kepada pemangku kepentingan dengan visualisasi burndown chart dan demo fitur."}, {"kode": "Sub-062-2", "uraian": "Mampu mempertahankan keputusan desain teknis dalam sesi review dengan argumen yang berbasis data dan praktis."}]}, "CPMK063": {"desk": "Mampu berkolaborasi secara produktif dalam tim proyek perangkat lunak menggunakan alat manajemen proyek untuk mencapai target bersama.", "subs": [{"kode": "Sub-063-1", "uraian": "Mampu mengelola proyek perangkat lunak menggunakan metodologi Agile dengan sprint planning, daily standup, dan retrospektif."}, {"kode": "Sub-063-2", "uraian": "Mampu menggunakan version control dan CI/CD pipeline untuk kolaborasi tim yang efektif."}]}, "CPMK081": {"desk": "Mampu menganalisis dan merumuskan kebutuhan pengguna ke dalam bentuk User Stories atau spesifikasi kebutuhan yang komprehensif dan mudah dipahami.", "subs": [{"kode": "Sub-081-1", "uraian": "Mampu melakukan elisitasi kebutuhan proyek dari client/stakeholder dan mendokumentasikannya dalam SRS yang tervalidasi."}, {"kode": "Sub-081-2", "uraian": "Mampu mengelola perubahan kebutuhan selama proyek menggunakan change management yang terstruktur."}]}, "CPMK082": {"desk": "Mampu merancang arsitektur solusi sistem yang selaras dengan spesifikasi kebutuhan pengguna yang telah disepakati.", "subs": [{"kode": "Sub-082-1", "uraian": "Mampu merancang arsitektur sistem proyek yang scalable dan didokumentasikan dalam Architecture Decision Record."}, {"kode": "Sub-082-2", "uraian": "Mampu melakukan code review arsitektur tim dan memastikan kesesuaian implementasi dengan desain yang disepakati."}]}, "CPMK083": {"desk": "Mampu mengintegrasikan prinsip kemudahan penggunaan (usability) dan keberlanjutan sistem ke dalam rancangan antarmuka pengguna.", "subs": [{"kode": "Sub-083-1", "uraian": "Mampu memimpin desain antarmuka pengguna proyek menggunakan pendekatan iteratif dengan umpan balik pengguna nyata."}, {"kode": "Sub-083-2", "uraian": "Mampu mengintegrasikan aspek keberlanjutan dan aksesibilitas ke dalam desain produk perangkat lunak secara sistematis."}]}, "CPMK084": {"desk": "Mampu mengembangkan dan mengevaluasi prototipe sistem interaktif melalui pengujian pengguna (user testing) untuk memastikan kesesuaian desain.", "subs": [{"kode": "Sub-084-1", "uraian": "Mampu mengkoordinasikan user acceptance testing dengan pengguna nyata dan mendokumentasikan hasilnya secara formal."}, {"kode": "Sub-084-2", "uraian": "Mampu mengevaluasi kesiapan rilis produk berdasarkan hasil UAT dan test coverage yang dicapai tim."}]}, "CPMK091": {"desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "subs": [{"kode": "Sub-091-1", "uraian": "Mampu mengimplementasikan fitur-fitur proyek sesuai acceptance criteria menggunakan standar coding tim yang disepakati."}, {"kode": "Sub-091-2", "uraian": "Mampu melakukan code review yang konstruktif dan memastikan kualitas kode tim memenuhi standar clean code."}]}, "CPMK092": {"desk": "Mampu merancang dan melaksanakan pengujian perangkat lunak (fungsional/unit) menggunakan metode yang terstandar untuk memastikan kode berjalan dengan benar.", "subs": [{"kode": "Sub-092-1", "uraian": "Mampu merancang dan mengimplementasikan automated test suite dengan coverage minimal yang ditetapkan."}, {"kode": "Sub-092-2", "uraian": "Mampu mengintegrasikan CI/CD pipeline yang menjalankan automated test setiap kali ada commit ke branch utama."}]}, "CPMK093": {"desk": "Mampu mengevaluasi kinerja dan fungsionalitas perangkat lunak melalui serangkaian skenario uji coba yang sistematis untuk mendeteksi bug.", "subs": [{"kode": "Sub-093-1", "uraian": "Mampu mengevaluasi kualitas proyek secara menyeluruh menggunakan tools analisis statis dan profiler performa."}, {"kode": "Sub-093-2", "uraian": "Mampu mengidentifikasi dan memprioritaskan technical debt yang perlu diselesaikan sebelum rilis produk."}]}, "CPMK094": {"desk": "Mampu menyusun dan mengevaluasi laporan teknis hasil pengujian perangkat lunak secara terstruktur sebagai acuan perbaikan sistem.", "subs": [{"kode": "Sub-094-1", "uraian": "Mampu menyusun laporan akhir proyek yang mencakup arsitektur, implementasi, pengujian, retrospektif, dan rencana ke depan."}, {"kode": "Sub-094-2", "uraian": "Mampu mendokumentasikan lessons learned proyek secara jujur sebagai masukan untuk proyek berikutnya."}]}}}, "INF-611-802": {"nama": "Kerja Praktik", "cpmks": {"CPMK012": {"desk": "Mampu menunjukkan kedisiplinan dan tanggung jawab dengan menyelesaikan seluruh kewajiban tugas secara mandiri dan tepat waktu.", "subs": [{"kode": "Sub-012-1", "uraian": "Mampu menunjukkan kedisiplinan kerja industri dengan memenuhi jam kerja, deadline tugas, dan standar profesional institusi."}, {"kode": "Sub-012-2", "uraian": "Mampu menyelesaikan tugas-tugas KP yang diberikan pembimbing lapangan secara mandiri dan tepat waktu."}]}, "CPMK013": {"desk": "Mampu menunjukkan sikap profesional dalam berinteraksi dan bekerjasama dengan tim melalui komunikasi yang konstruktif dan pembagian peran yang adil.", "subs": [{"kode": "Sub-013-1", "uraian": "Mampu beradaptasi dan berinteraksi secara profesional dengan rekan kerja dan atasan di lingkungan industri nyata."}, {"kode": "Sub-013-2", "uraian": "Mampu berkontribusi secara kolaboratif dalam tim proyek industri dengan mengambil inisiatif yang konstruktif."}]}, "CPMK023": {"desk": "Mampu merancang dan menerapkan solusi teknologi tepat guna yang kontekstual dan berkelanjutan untuk membantu menyelesaikan permasalahan nyata di komunitas sasaran.", "subs": [{"kode": "Sub-023-1", "uraian": "Mampu mengidentifikasi permasalahan nyata di institusi KP dan merancang solusi teknologi yang kontekstual dan feasible."}, {"kode": "Sub-023-2", "uraian": "Mampu menerapkan solusi teknologi yang dirancang dalam konteks organisasi tempat KP dengan dampak yang terukur."}]}, "CPMK061": {"desk": "Mampu menyusun dan mengevaluasi dokumen spesifikasi teknis perangkat lunak yang lengkap dan sesuai dengan standar industri.", "subs": [{"kode": "Sub-061-1", "uraian": "Mampu menyusun laporan KP yang komprehensif mencakup profil institusi, pelaksanaan, hasil, dan analisis pengalaman."}, {"kode": "Sub-061-2", "uraian": "Mampu mengevaluasi dan merefleksikan gap antara teori yang dipelajari di kampus dengan praktik di industri secara kritis."}]}, "CPMK062": {"desk": "Mampu menyajikan dan mempertahankan gagasan teknis secara lisan dengan argumentasi yang logis dan didukung media visual yang efektif.", "subs": [{"kode": "Sub-062-1", "uraian": "Mampu mempresentasikan pengalaman dan hasil KP kepada penguji dengan strukturasi yang logis dan komunikasi yang percaya diri."}, {"kode": "Sub-062-2", "uraian": "Mampu mempertahankan temuan dan rekomendasi KP dari pertanyaan penguji dengan argumen yang berdasarkan pengalaman nyata."}]}, "CPMK063": {"desk": "Mampu berkolaborasi secara produktif dalam tim proyek perangkat lunak menggunakan alat manajemen proyek untuk mencapai target bersama.", "subs": [{"kode": "Sub-063-1", "uraian": "Mampu bekerja dalam tim proyek industri menggunakan metodologi dan alat yang berlaku di tempat KP."}, {"kode": "Sub-063-2", "uraian": "Mampu mendokumentasikan proses kolaborasi tim selama KP sebagai refleksi pembelajaran soft skill industri."}]}, "CPMK073": {"desk": "Mampu merumuskan dan mengevaluasi rekomendasi solusi yang strategis dan logis berdasarkan hasil interpretasi data yang akurat.", "subs": [{"kode": "Sub-073-1", "uraian": "Mampu menganalisis permasalahan teknis di tempat KP dan merumuskan rekomendasi perbaikan berbasis data yang ditemukan."}, {"kode": "Sub-073-2", "uraian": "Mampu mengevaluasi efektivitas solusi yang diimplementasikan selama KP dan mendokumentasikan hasilnya."}]}, "CPMK091": {"desk": "Mampu mengimplementasikan algoritma ke dalam kode program yang efisien, bebas error, dan memenuhi standar clean code.", "subs": [{"kode": "Sub-091-1", "uraian": "Mampu mengimplementasikan solusi teknis yang ditugaskan pembimbing lapangan menggunakan teknologi yang berlaku di industri."}, {"kode": "Sub-091-2", "uraian": "Mampu menghasilkan artefak teknis yang memenuhi standar kualitas industri tempat KP."}]}, "CPMK094": {"desk": "Mampu menyusun dan mengevaluasi laporan teknis hasil pengujian perangkat lunak secara terstruktur sebagai acuan perbaikan sistem.", "subs": [{"kode": "Sub-094-1", "uraian": "Mampu menyusun laporan teknis hasil pekerjaan KP yang mencakup metodologi, implementasi, pengujian, dan evaluasi outcome."}, {"kode": "Sub-094-2", "uraian": "Mampu mendokumentasikan best practice industri yang dipelajari selama KP sebagai referensi pengembangan profesional."}]}}}, "INF-711-504": {"nama": "Teknopreneur", "cpmks": {"CPMK012": {"desk": "Mampu menunjukkan kedisiplinan dan tanggung jawab dengan menyelesaikan seluruh kewajiban tugas secara mandiri dan tepat waktu.", "subs": [{"kode": "Sub-012-1", "uraian": "Mampu menyelesaikan seluruh komponen rencana bisnis secara mandiri dan tepat waktu sesuai tahapan yang ditentukan."}, {"kode": "Sub-012-2", "uraian": "Mampu menunjukkan tanggung jawab dalam memimpin atau berkontribusi pada tim startup sesuai peran yang disepakati."}]}, "CPMK013": {"desk": "Mampu menunjukkan sikap profesional dalam berinteraksi dan bekerjasama dengan tim melalui komunikasi yang konstruktif dan pembagian peran yang adil.", "subs": [{"kode": "Sub-013-1", "uraian": "Mampu berkolaborasi efektif dalam tim startup dengan komunikasi yang terbuka dan pembagian kerja yang adil."}, {"kode": "Sub-013-2", "uraian": "Mampu mempresentasikan ide bisnis teknologi kepada calon investor/mitra dengan percaya diri dan profesional."}]}, "CPMK022": {"desk": "Mampu mengevaluasi dampak sosial dan keberlanjutan dari sebuah solusi TI menggunakan kerangka analisis dampak yang sistematis, objektif dan berbasis data.", "subs": [{"kode": "Sub-022-1", "uraian": "Mampu mengevaluasi dampak sosial dan keberlanjutan dari ide bisnis teknologi menggunakan kerangka SDG yang relevan."}, {"kode": "Sub-022-2", "uraian": "Mampu menganalisis implikasi etika dan lingkungan dari model bisnis teknologi yang dikembangkan."}]}, "CPMK062": {"desk": "Mampu menyajikan dan mempertahankan gagasan teknis secara lisan dengan argumentasi yang logis dan didukung media visual yang efektif.", "subs": [{"kode": "Sub-062-1", "uraian": "Mampu menyusun dan menyampaikan pitch deck startup yang menarik, terstruktur, dan didukung data pasar yang valid."}, {"kode": "Sub-062-2", "uraian": "Mampu mempertahankan kelayakan bisnis teknologi dari pertanyaan kritis investor dalam sesi simulasi pitch."}]}, "CPMK063": {"desk": "Mampu berkolaborasi secara produktif dalam tim proyek perangkat lunak menggunakan alat manajemen proyek untuk mencapai target bersama.", "subs": [{"kode": "Sub-063-1", "uraian": "Mampu mengelola tim startup menggunakan framework Lean Startup dengan build-measure-learn cycle yang efektif."}, {"kode": "Sub-063-2", "uraian": "Mampu menggunakan alat manajemen proyek bisnis untuk memantau progres validasi hipotesis bisnis."}]}, "CPMK073": {"desk": "Mampu merumuskan dan mengevaluasi rekomendasi solusi yang strategis dan logis berdasarkan hasil interpretasi data yang akurat.", "subs": [{"kode": "Sub-073-1", "uraian": "Mampu merumuskan value proposition yang jelas dan terdiferensiasi berdasarkan hasil analisis kebutuhan pengguna target."}, {"kode": "Sub-073-2", "uraian": "Mampu mengevaluasi kelayakan bisnis teknologi menggunakan analisis pasar, kompetitor, dan proyeksi keuangan dasar."}]}}}, "INF-711-505": {"nama": "PMKM", "cpmks": {"CPMK011": {"desk": "Mampu menerapkan nilai etika, kejujuran, dan integritas akademik secara konsisten dalam setiap aktivitas perkuliahan dan pengerjaan tugas tanpa melakukan plagiasi.", "subs": [{"kode": "Sub-011-1", "uraian": "Mampu menunjukkan integritas dan etika profesional dalam setiap interaksi dengan komunitas dan mitra PMKM."}, {"kode": "Sub-011-2", "uraian": "Mampu mendokumentasikan seluruh aktivitas PMKM secara jujur dan transparan dalam laporan yang dapat diverifikasi."}]}, "CPMK012": {"desk": "Mampu menunjukkan kedisiplinan dan tanggung jawab dengan menyelesaikan seluruh kewajiban tugas secara mandiri dan tepat waktu.", "subs": [{"kode": "Sub-012-1", "uraian": "Mampu memenuhi komitmen waktu dan target capaian PMKM yang telah disepakati dengan supervisor dan komunitas."}, {"kode": "Sub-012-2", "uraian": "Mampu menyelesaikan deliverable PMKM secara mandiri sesuai jadwal yang telah direncanakan."}]}, "CPMK013": {"desk": "Mampu menunjukkan sikap profesional dalam berinteraksi dan bekerjasama dengan tim melalui komunikasi yang konstruktif dan pembagian peran yang adil.", "subs": [{"kode": "Sub-013-1", "uraian": "Mampu berinteraksi secara empati dan profesional dengan komunitas sasaran PMKM sebagai mitra yang setara."}, {"kode": "Sub-013-2", "uraian": "Mampu berkolaborasi secara produktif dalam tim PMKM lintas disiplin untuk mencapai target program."}]}, "CPMK021": {"desk": "Mampu menganalisis isu sosial, budaya, dan lingkungan yang relevan dengan penerapan TI melalui kajian studi kasus nyata di masyarakat.", "subs": [{"kode": "Sub-021-1", "uraian": "Mampu mengidentifikasi dan menganalisis permasalahan sosial-teknologi yang dialami komunitas sasaran melalui need assessment."}, {"kode": "Sub-021-2", "uraian": "Mampu menganalisis konteks sosial-budaya komunitas dan implikasinya terhadap desain solusi teknologi yang tepat guna."}]}, "CPMK023": {"desk": "Mampu merancang dan menerapkan solusi teknologi tepat guna yang kontekstual dan berkelanjutan untuk membantu menyelesaikan permasalahan nyata di komunitas sasaran.", "subs": [{"kode": "Sub-023-1", "uraian": "Mampu merancang solusi teknologi tepat guna yang sesuai dengan kapasitas dan kebutuhan komunitas sasaran PMKM."}, {"kode": "Sub-023-2", "uraian": "Mampu menerapkan dan mendampingi komunitas dalam menggunakan solusi teknologi yang dikembangkan secara berkelanjutan."}]}, "CPMK061": {"desk": "Mampu menyusun dan mengevaluasi dokumen spesifikasi teknis perangkat lunak yang lengkap dan sesuai dengan standar industri.", "subs": [{"kode": "Sub-061-1", "uraian": "Mampu menyusun laporan akhir PMKM yang komprehensif mencakup analisis kebutuhan, implementasi, dampak, dan keberlanjutan."}, {"kode": "Sub-061-2", "uraian": "Mampu mendokumentasikan best practice dan lesson learned PMKM sebagai referensi program sejenis di masa depan."}]}, "CPMK062": {"desk": "Mampu menyajikan dan mempertahankan gagasan teknis secara lisan dengan argumentasi yang logis dan didukung media visual yang efektif.", "subs": [{"kode": "Sub-062-1", "uraian": "Mampu mempresentasikan hasil PMKM kepada pemangku kepentingan dengan data dampak yang terukur dan komunikatif."}, {"kode": "Sub-062-2", "uraian": "Mampu mempertahankan keputusan desain solusi PMKM dari pertanyaan kritis dengan argumentasi berbasis kondisi lapangan."}]}, "CPMK063": {"desk": "Mampu berkolaborasi secara produktif dalam tim proyek perangkat lunak menggunakan alat manajemen proyek untuk mencapai target bersama.", "subs": [{"kode": "Sub-063-1", "uraian": "Mampu mengelola program PMKM secara kolaboratif dengan stakeholder menggunakan alat manajemen program yang tepat."}, {"kode": "Sub-063-2", "uraian": "Mampu memfasilitasi transfer pengetahuan kepada komunitas agar solusi teknologi dapat dioperasikan secara mandiri."}]}, "CPMK081": {"desk": "Mampu menganalisis dan merumuskan kebutuhan pengguna ke dalam bentuk User Stories atau spesifikasi kebutuhan yang komprehensif dan mudah dipahami.", "subs": [{"kode": "Sub-081-1", "uraian": "Mampu menganalisis dan mendokumentasikan kebutuhan komunitas sasaran secara sistematis sebagai dasar perancangan solusi."}, {"kode": "Sub-081-2", "uraian": "Mampu memvalidasi kebutuhan komunitas melalui iterasi co-design yang melibatkan perwakilan pengguna secara aktif."}]}}}}};
|
||
const CPL=MODEL.cpl, CPMK=MODEL.cpmk, MK=MODEL.mk, MATRIX=MODEL.matrix, COLS=MODEL.cpl_cols, SUB=MODEL.sub;
|
||
const cplKeys=Object.keys(CPL), cpmkKeys=Object.keys(CPMK), mkKeys=Object.keys(MK);
|
||
// derived: cpmk -> list of MK codes (from matrix)
|
||
const cpmk2mk={}; cpmkKeys.forEach(k=>cpmk2mk[k]=[]);
|
||
MATRIX.forEach(m=>{Object.values(m.cpls).forEach(arr=>arr.forEach(c=>{if(cpmk2mk[c]&&!cpmk2mk[c].includes(m.kode))cpmk2mk[c].push(m.kode);}));});
|
||
// mk -> set of cpmk
|
||
const mk2cpmk={}; MATRIX.forEach(m=>{const s=new Set();Object.values(m.cpls).forEach(a=>a.forEach(c=>s.add(c)));mk2cpmk[m.kode]=[...s];});
|
||
// cpl -> cpmk list
|
||
const cpl2cpmk={}; cplKeys.forEach(k=>cpl2cpmk[k]=[]);
|
||
cpmkKeys.forEach(k=>{const c=CPMK[k].cpl; if(cpl2cpmk[c])cpl2cpmk[c].push(k);});
|
||
|
||
const state={cpl:null,cpmk:null,mk:null};
|
||
|
||
/* ---------- THEME ---------- */
|
||
const themeBtn=document.getElementById('themeBtn');
|
||
function setTheme(t){document.documentElement.setAttribute('data-theme',t);localStorage.setItem('obe-theme',t);themeBtn.innerHTML=(t==='dark'?'☀ Terang':'☾ Gelap');if(window._ready)drawSankey();}
|
||
themeBtn.onclick=()=>setTheme(document.documentElement.getAttribute('data-theme')==='dark'?'light':'dark');
|
||
setTheme(localStorage.getItem('obe-theme')||'light');
|
||
|
||
/* ---------- KPI ---------- */
|
||
const totalSub=Object.values(SUB).reduce((a,v)=>a+Object.values(v.cpmks).reduce((b,c)=>b+c.subs.length,0),0);
|
||
const kpidata=[['🎓',cplKeys.length,'Capaian Pembelajaran Lulusan'],['🎯',cpmkKeys.length,'Capaian Pemb. Mata Kuliah'],['📚',mkKeys.length,'Mata Kuliah'],['📋',totalSub,'Sub-CPMK']];
|
||
document.getElementById('kpis').innerHTML=kpidata.map(k=>`<div class="kpi"><div class="big">${k[1]}</div><div class="lbl">${k[2]}</div><div class="deco">${k[0]}</div></div>`).join('');
|
||
|
||
/* ---------- GLOBAL HIGHLIGHT ---------- */
|
||
function setHL(type,key){state.cpl=state.cpmk=state.mk=null;state[type]=key;applyHL();syncHash();}
|
||
function clearHL(){state.cpl=state.cpmk=state.mk=null;applyHL();syncHash();}
|
||
function activeLabel(){
|
||
if(state.cpl)return state.cpl+' — '+CPL[state.cpl].desk.slice(0,70)+'…';
|
||
if(state.cpmk)return state.cpmk+' — '+(CPMK[state.cpmk]?CPMK[state.cpmk].desk.slice(0,70):'')+'…';
|
||
if(state.mk)return state.mk+' — '+(MK[state.mk]?MK[state.mk].nama:'');
|
||
return '';
|
||
}
|
||
function relatedCPMK(){ // set of cpmk implied by current state
|
||
if(state.cpmk)return new Set([state.cpmk]);
|
||
if(state.cpl)return new Set(cpl2cpmk[state.cpl]);
|
||
if(state.mk)return new Set(mk2cpmk[state.mk]);
|
||
return null;
|
||
}
|
||
function relatedMK(){
|
||
if(state.mk)return new Set([state.mk]);
|
||
if(state.cpmk)return new Set(cpmk2mk[state.cpmk]);
|
||
if(state.cpl){const s=new Set();cpl2cpmk[state.cpl].forEach(c=>cpmk2mk[c].forEach(m=>s.add(m)));return s;}
|
||
return null;
|
||
}
|
||
function relatedCPL(){
|
||
if(state.cpl)return new Set([state.cpl]);
|
||
if(state.cpmk)return new Set([CPMK[state.cpmk]?CPMK[state.cpmk].cpl:null]);
|
||
if(state.mk)return new Set(Object.keys(MK[state.mk].cpls));
|
||
return null;
|
||
}
|
||
function applyHL(){
|
||
const any=state.cpl||state.cpmk||state.mk;
|
||
const cb=document.getElementById('clearbar');
|
||
cb.classList.toggle('show',!!any);
|
||
if(any)document.getElementById('clearlbl').textContent=activeLabel();
|
||
renderMatrix(); renderExplorer(); highlightSankey();
|
||
}
|
||
|
||
/* ---------- HASH / DEEP LINK ---------- */
|
||
function syncHash(){let h='';if(state.cpl)h='cpl='+state.cpl;else if(state.cpmk)h='cpmk='+state.cpmk;else if(state.mk)h='mk='+state.mk;history.replaceState(null,'',h?('#'+h):location.pathname);}
|
||
function readHash(){const h=location.hash.replace('#','');if(!h)return;const [k,v]=h.split('=');if(['cpl','cpmk','mk'].includes(k)&&v){state.cpl=state.cpmk=state.mk=null;state[k]=decodeURIComponent(v);}}
|
||
|
||
/* ---------- MATRIX ---------- */
|
||
const mtx=document.getElementById('mtx');
|
||
let mxFilter='',mxOnly=false;
|
||
document.getElementById('mxsearch').oninput=e=>{mxFilter=e.target.value.toLowerCase();renderMatrix();};
|
||
document.getElementById('mxonly').onclick=function(){mxOnly=!mxOnly;this.classList.toggle('on',mxOnly);renderMatrix();};
|
||
function renderMatrix(){
|
||
const rcpl=relatedCPL(), rmk=relatedMK();
|
||
let head='<thead><tr><th class="mkcol">Mata Kuliah</th>';
|
||
COLS.forEach(c=>{const on=state.cpl===c;head+=`<th data-cpl="${c}" class="${on?'colhl':''}" onclick="setHL('cpl','${c}')" title="${CPL[c]?CPL[c].desk:''}">${c}</th>`;});
|
||
head+='</tr></thead>';
|
||
let body='<tbody>';let shown=0;
|
||
MATRIX.forEach(m=>{
|
||
if(mxFilter && !(m.nama.toLowerCase().includes(mxFilter)||m.kode.toLowerCase().includes(mxFilter)))return;
|
||
const rowHL=rmk?rmk.has(m.kode):null;
|
||
if(mxOnly && rmk && !rowHL)return;
|
||
shown++;
|
||
let tr=`<tr class="${rowHL===false?'dim':''}"><td class="mkname">${m.nama}<small>${m.kode}</small></td>`;
|
||
COLS.forEach(c=>{
|
||
const codes=m.cpls[c]||[];const colhl=state.cpl===c;
|
||
const cellHL = rcpl?rcpl.has(c):false;
|
||
if(codes.length){tr+=`<td class="cell hit ${(rcpl&&!cellHL)?'dim':''} ${colhl?'colhl':''}">${codes.join('<br>')}</td>`;}
|
||
else{tr+=`<td class="cell ${colhl?'colhl':''}">·</td>`;}
|
||
});
|
||
body+=tr+'</tr>';
|
||
});
|
||
body+='</tbody>';
|
||
mtx.innerHTML=head+body;
|
||
document.getElementById('mxcount').textContent=shown+' / '+MATRIX.length+' MK';
|
||
}
|
||
|
||
/* ---------- EXPLORER ---------- */
|
||
function renderExplorer(){
|
||
const cplList=document.getElementById('cplList');
|
||
cplList.innerHTML=cplKeys.map(k=>`<div class="node ${state.cpl===k?'on':''}" onclick="setHL('cpl','${k}')"><b>${k} <span class="tag">${cpl2cpmk[k].length} CPMK</span></b><small>${CPL[k].desk.slice(0,90)}…</small></div>`).join('');
|
||
const cpmkHead=document.getElementById('cpmkHead'),cpmkList=document.getElementById('cpmkList');
|
||
const subHead=document.getElementById('subHead'),subList=document.getElementById('subList');
|
||
let listCpmk=[];
|
||
if(state.cpl){listCpmk=cpl2cpmk[state.cpl];cpmkHead.textContent='CPMK · '+state.cpl;}
|
||
else if(state.cpmk){listCpmk=[state.cpmk];cpmkHead.textContent='CPMK';}
|
||
else{cpmkHead.textContent='CPMK';cpmkList.innerHTML='<div class="empty">Pilih CPL di kolom kiri.</div>';}
|
||
if(listCpmk.length){
|
||
cpmkList.innerHTML=listCpmk.map(k=>`<div class="node ${state.cpmk===k?'on':''}" onclick="setHL('cpmk','${k}')"><b>${k} <span class="tag">${cpmk2mk[k].length} MK</span></b><small>${CPMK[k]?CPMK[k].desk.slice(0,100):''}…</small></div>`).join('');
|
||
}
|
||
// sub list
|
||
let scpmk=state.cpmk;
|
||
if(!scpmk && state.cpl && cpl2cpmk[state.cpl].length===0){}
|
||
if(scpmk){
|
||
subHead.textContent='Sub-CPMK · '+scpmk;
|
||
// gather subs across MK (dedup by sub code)
|
||
const seen={};
|
||
Object.values(SUB).forEach(mkv=>{if(mkv.cpmks[scpmk])mkv.cpmks[scpmk].subs.forEach(s=>{if(!seen[s.kode])seen[s.kode]=s.uraian;});});
|
||
const items=Object.keys(seen).sort();
|
||
subList.innerHTML=items.length?items.map(k=>`<div class="subitem"><b>${k}</b><p>${seen[k]}</p></div>`).join(''):'<div class="empty">Belum ada Sub-CPMK untuk CPMK ini.</div>';
|
||
}else{subHead.textContent='Sub-CPMK';subList.innerHTML='<div class="empty">Pilih CPMK di kolom tengah.</div>';}
|
||
}
|
||
|
||
/* ---------- MK CARDS ---------- */
|
||
const mkgrid=document.getElementById('mkgrid');
|
||
document.getElementById('mksearch').oninput=e=>renderMK(e.target.value.toLowerCase());
|
||
function renderMK(q=''){
|
||
let shown=0;
|
||
mkgrid.innerHTML=MATRIX.filter(m=>!q||m.nama.toLowerCase().includes(q)||m.kode.toLowerCase().includes(q)).map(m=>{
|
||
shown++;const cpls=Object.keys(m.cpls);const ncpmk=mk2cpmk[m.kode].length;
|
||
const nsub=SUB[m.kode]?Object.values(SUB[m.kode].cpmks).reduce((a,c)=>a+c.subs.length,0):0;
|
||
return `<div class="mkcard" onclick="openMK('${m.kode}')"><div class="code">${m.kode}</div><div class="nm">${m.nama}</div>
|
||
<div class="stat"><div><b>${cpls.length}</b>CPL</div><div><b>${ncpmk}</b>CPMK</div><div><b>${nsub}</b>Sub</div></div>
|
||
<div class="cpl-chips">${cpls.map(c=>`<span>${c}</span>`).join('')}</div></div>`;
|
||
}).join('');
|
||
document.getElementById('mkcount').textContent=shown+' / '+MATRIX.length+' MK';
|
||
}
|
||
function openMK(kode){
|
||
const m=MK[kode];const sv=SUB[kode];
|
||
document.getElementById('mCode').textContent=kode+' · '+Object.keys(m.cpls).length+' CPL · '+mk2cpmk[kode].length+' CPMK';
|
||
document.getElementById('mTitle').textContent=m.nama;
|
||
let html='';
|
||
const cpmks=sv?Object.keys(sv.cpmks):mk2cpmk[kode];
|
||
cpmks.forEach(ck=>{
|
||
const desk=CPMK[ck]?CPMK[ck].desk:(sv&&sv.cpmks[ck]?sv.cpmks[ck].desk:'');
|
||
const cplOf=CPMK[ck]?CPMK[ck].cpl:'';
|
||
html+=`<div class="cpmkblock"><h4>${ck} <span style="font-weight:400;color:var(--muted)">(${cplOf})</span></h4><p class="d">${desk}</p>`;
|
||
if(sv&&sv.cpmks[ck]){html+='<ul>'+sv.cpmks[ck].subs.map(s=>`<li><b>${s.kode}:</b> ${s.uraian}</li>`).join('')+'</ul>';}
|
||
html+='</div>';
|
||
});
|
||
document.getElementById('mBody').innerHTML=html||'<div class="empty">Tidak ada rincian.</div>';
|
||
document.getElementById('modal').classList.add('show');
|
||
}
|
||
function closeModal(){document.getElementById('modal').classList.remove('show');}
|
||
document.getElementById('modal').onclick=e=>{if(e.target.id==='modal')closeModal();};
|
||
document.addEventListener('keydown',e=>{if(e.key==='Escape'){closeModal();document.getElementById('gresults').classList.remove('show');}});
|
||
|
||
/* ---------- GAP ANALYSIS ---------- */
|
||
function renderGaps(){
|
||
// CPMK load per MK
|
||
const load=MATRIX.map(m=>({kode:m.kode,nama:m.nama,n:mk2cpmk[m.kode].length})).sort((a,b)=>b.n-a.n);
|
||
const maxLoad=load[0].n;
|
||
const topLoad=load.slice(0,8);
|
||
// CPL support strength
|
||
const cplSup=cplKeys.map(c=>({c,n:new Set(cpl2cpmk[c].flatMap(k=>cpmk2mk[k])).size})).sort((a,b)=>b.n-a.n);
|
||
const maxSup=cplSup[0].n;
|
||
// flags
|
||
const noSub=cpmkKeys.filter(k=>{let has=false;Object.values(SUB).forEach(v=>{if(v.cpmks[k]&&v.cpmks[k].subs.length)has=true;});return !has;});
|
||
const noMK=cpmkKeys.filter(k=>cpmk2mk[k].length===0);
|
||
const weakCPL=cplSup.slice(-3).reverse();
|
||
const g=[];
|
||
g.push(`<div class="gapcard"><h4><span class="ic" style="background:var(--brand)">📊</span>MK dengan Beban CPMK Tertinggi</h4>${topLoad.map(x=>`<div class="bar"><span class="nm" title="${x.nama}">${x.nama}</span><span class="track"><span class="fill" style="width:${x.n/maxLoad*100}%"></span></span><span class="v">${x.n}</span></div>`).join('')}</div>`);
|
||
g.push(`<div class="gapcard"><h4><span class="ic" style="background:var(--brand2)">🎯</span>Kekuatan Dukungan tiap CPL (jml MK)</h4>${cplSup.map(x=>`<div class="bar"><span class="nm">${x.c}</span><span class="track"><span class="fill" style="width:${x.n/maxSup*100}%"></span></span><span class="v">${x.n}</span></div>`).join('')}</div>`);
|
||
let flags='';
|
||
flags+=`<div class="flag"><b>${weakCPL.map(x=>x.c).join(', ')}</b><span>CPL dengan dukungan MK paling sedikit (${weakCPL.map(x=>x.n).join('/')}).</span></div>`;
|
||
flags+=`<div class="flag"><b>${noSub.length}</b><span>CPMK tanpa Sub-CPMK${noSub.length?': '+noSub.join(', '):' — semua CPMK terjabarkan ✔'}</span></div>`;
|
||
flags+=`<div class="flag"><b>${noMK.length}</b><span>CPMK tanpa MK pendukung${noMK.length?': '+noMK.join(', '):' — semua CPMK terpetakan ✔'}</span></div>`;
|
||
const avg=(load.reduce((a,x)=>a+x.n,0)/load.length).toFixed(1);
|
||
flags+=`<div class="flag"><b>${avg}</b><span>Rata-rata CPMK per Mata Kuliah.</span></div>`;
|
||
g.push(`<div class="gapcard"><h4><span class="ic" style="background:var(--accent)">⚠</span>Bendera Audit Pemetaan</h4>${flags}</div>`);
|
||
document.getElementById('gapgrid').innerHTML=g.join('');
|
||
}
|
||
|
||
/* ---------- SANKEY ---------- */
|
||
const SCOLORS=['#0b6b5a','#13917b','#e08a2b','#3b7dd8','#9b59b6','#c0392b','#16a085','#d4a017','#2c7873','#8e44ad'];
|
||
const cplColor={}; cplKeys.forEach((k,i)=>cplColor[k]=SCOLORS[i%SCOLORS.length]);
|
||
let sankeyLinks=[];
|
||
function drawSankey(){
|
||
const svg=document.getElementById('sankey');
|
||
const W=Math.max(1180, svg.clientWidth||1180), colX=[40,W*0.40,W-300];
|
||
const gap=6, minH=8, TOP=24, BOT=24;
|
||
// build flows: CPL->CPMK weight = #mk for cpmk ; CPMK->MK weight=1
|
||
const cpmkW={}; cpmkKeys.forEach(k=>cpmkW[k]=Math.max(1,cpmk2mk[k].length));
|
||
const cplW={};cplKeys.forEach(c=>cplW[c]=cpl2cpmk[c].reduce((a,k)=>a+cpmkW[k],0)||1);
|
||
const mkW={};mkKeys.forEach(m=>mkW[m]=Math.max(1,mk2cpmk[m].length));
|
||
// MK column packed (height follows real node count, never squeezed) -> defines diagram height
|
||
const UNIT=3;
|
||
let yMK=TOP; const pMK={};
|
||
mkKeys.forEach(m=>{const h=Math.max(minH,mkW[m]*UNIT);pMK[m]={x:colX[2],y:yMK,h,w:14};yMK+=h+gap;});
|
||
const H=Math.max(620, yMK-gap+BOT, cpmkKeys.length*15);
|
||
svg.setAttribute('viewBox',`0 0 ${W} ${H}`);svg.setAttribute('preserveAspectRatio','xMinYMin meet');svg.setAttribute('width','100%');svg.setAttribute('height',H);
|
||
// CPL & CPMK columns fit into H (few/large nodes, no squeeze issue)
|
||
function layout(keys,weights,x){
|
||
const tot=keys.reduce((a,k)=>a+weights[k],0);const avail=H-TOP-BOT-gap*(keys.length-1);
|
||
let y=TOP;const pos={};
|
||
keys.forEach(k=>{const h=Math.max(minH,weights[k]/tot*avail);pos[k]={x,y,h,w:14};y+=h+gap;});
|
||
return pos;
|
||
}
|
||
const pCPL=layout(cplKeys,cplW,colX[0]);
|
||
const pCPMK=layout(cpmkKeys,cpmkW,colX[1]);
|
||
// track consumed offsets
|
||
const offCPLr={},offCPMKl={},offCPMKr={},offMKl={};
|
||
cplKeys.forEach(k=>offCPLr[k]=0);cpmkKeys.forEach(k=>{offCPMKl[k]=0;offCPMKr[k]=0;});mkKeys.forEach(k=>offMKl[k]=0);
|
||
let links='';sankeyLinks=[];
|
||
function ribbon(p0,y0,p1,y1,thick,color,cls,data){
|
||
const x0=p0.x+p0.w,x1=p1.x;const mx=(x0+x1)/2;
|
||
const d=`M${x0},${y0} C${mx},${y0} ${mx},${y1} ${x1},${y1}`;
|
||
sankeyLinks.push({...data,cls});
|
||
return `<path class="slink ${cls}" data-l='${JSON.stringify(data)}' d="${d}" stroke="${color}" stroke-width="${Math.max(1,thick)}"/>`;
|
||
}
|
||
// CPL->CPMK
|
||
cpmkKeys.forEach(k=>{const c=CPMK[k].cpl;if(!pCPL[c])return;const w=cpmkW[k];const scale=p=>p;
|
||
const ph=Math.max(2,w/cplW[c]*pCPL[c].h);
|
||
const y0=pCPL[c].y+offCPLr[c]+ph/2;offCPLr[c]+=ph;
|
||
const th=Math.max(2,w/cpmkW[k]*pCPMK[k].h);
|
||
const y1=pCPMK[k].y+offCPMKl[k]+th/2;offCPMKl[k]+=th;
|
||
links+=ribbon(pCPL[c],y0,pCPMK[k],y1,Math.min(ph,th),cplColor[c],'l-'+c+' lc-'+k,{cpl:c,cpmk:k});
|
||
});
|
||
// CPMK->MK
|
||
cpmkKeys.forEach(k=>{const c=CPMK[k].cpl;const mks=cpmk2mk[k];const each=pCPMK[k].h/Math.max(1,mks.length);
|
||
mks.forEach(m=>{if(!pMK[m])return;
|
||
const y0=pCPMK[k].y+offCPMKr[k]+each/2;offCPMKr[k]+=each;
|
||
const mh=pMK[m].h/Math.max(1,mk2cpmk[m].length);
|
||
const y1=pMK[m].y+offMKl[m]+mh/2;offMKl[m]+=mh;
|
||
links+=ribbon(pCPMK[k],y0,pMK[m],y1,Math.min(each,mh),cplColor[c],'lc-'+k+' lm-'+m,{cpl:c,cpmk:k,mk:m});
|
||
});
|
||
});
|
||
// nodes
|
||
const esc=s=>String(s).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
|
||
function nodes(pos,keys,labelFn,onclick,anchor){
|
||
return keys.map(k=>{const p=pos[k];const col=(labelFn.color?labelFn.color(k):'var(--muted)');
|
||
const lx=anchor==='end'?p.x-6:p.x+p.w+6;const ta=anchor==='end'?'end':'start';
|
||
const fs=labelFn.fs||11;
|
||
return `<g class="snode"><rect x="${p.x}" y="${p.y}" width="${p.w}" height="${p.h}" rx="3" fill="${col}" onclick="${onclick}('${k}')"><title>${esc(labelFn.t(k))}</title></rect><text class="slabel" style="font-size:${fs}px" x="${lx}" y="${p.y+p.h/2+3}" text-anchor="${ta}">${esc(labelFn.l(k))}</text></g>`;
|
||
}).join('');
|
||
}
|
||
const trunc=(s,n)=>s.length>n?s.slice(0,n-1)+'…':s;
|
||
const nCPL=nodes(pCPL,cplKeys,{l:k=>k,t:k=>k+': '+CPL[k].desk,color:k=>cplColor[k]},'sankClick_cpl','start');
|
||
const nCPMK=nodes(pCPMK,cpmkKeys,{l:k=>cpmkKeys.length<40?k:'',t:k=>k+': '+CPMK[k].desk,color:k=>cplColor[CPMK[k].cpl]},'sankClick_cpmk','start');
|
||
const nMK=nodes(pMK,mkKeys,{l:k=>trunc(MK[k].nama,30),t:k=>MK[k].kode+': '+MK[k].nama,color:k=>'var(--muted)',fs:9.5},'sankClick_mk','start');
|
||
// column titles
|
||
const titles=`<text class="slabel" x="${colX[0]}" y="12" font-weight="700">CPL</text><text class="slabel" x="${colX[1]}" y="12" font-weight="700">CPMK</text><text class="slabel" x="${colX[2]-40}" y="12" font-weight="700">Mata Kuliah</text>`;
|
||
svg.innerHTML=links+nCPL+nCPMK+nMK+titles;
|
||
document.getElementById('sankeyLegend').innerHTML=cplKeys.map(k=>`<span><i style="background:${cplColor[k]}"></i>${k}</span>`).join('');
|
||
highlightSankey();
|
||
}
|
||
function sankClick_cpl(k){setHL('cpl',k);scrollTo(0,0);}
|
||
function sankClick_cpmk(k){setHL('cpmk',k);}
|
||
function sankClick_mk(k){setHL('mk',k);}
|
||
function highlightSankey(){
|
||
const svg=document.getElementById('sankey');if(!svg)return;
|
||
const paths=svg.querySelectorAll('.slink');
|
||
const any=state.cpl||state.cpmk||state.mk;
|
||
paths.forEach(p=>{const d=JSON.parse(p.getAttribute('data-l'));let on=true;
|
||
if(state.cpl)on=d.cpl===state.cpl; else if(state.cpmk)on=d.cpmk===state.cpmk; else if(state.mk)on=d.mk===state.mk;
|
||
p.classList.toggle('hl',any&&on);p.classList.toggle('dim',any&&!on);
|
||
});
|
||
}
|
||
window.addEventListener('resize',()=>{clearTimeout(window._rt);window._rt=setTimeout(drawSankey,200);});
|
||
|
||
/* ---------- GLOBAL SEARCH ---------- */
|
||
const gsearch=document.getElementById('gsearch'),gresults=document.getElementById('gresults');
|
||
gsearch.oninput=function(){const q=this.value.toLowerCase().trim();if(!q){gresults.classList.remove('show');return;}
|
||
let html='';
|
||
const cplm=cplKeys.filter(k=>k.toLowerCase().includes(q)||CPL[k].desk.toLowerCase().includes(q)).slice(0,5);
|
||
const cpmkm=cpmkKeys.filter(k=>k.toLowerCase().includes(q)||CPMK[k].desk.toLowerCase().includes(q)).slice(0,6);
|
||
const mkm=mkKeys.filter(k=>k.toLowerCase().includes(q)||MK[k].nama.toLowerCase().includes(q)).slice(0,6);
|
||
// sub search
|
||
const subm=[];const seen=new Set();
|
||
for(const mk in SUB){for(const ck in SUB[mk].cpmks){for(const s of SUB[mk].cpmks[ck].subs){if((s.uraian.toLowerCase().includes(q)||s.kode.toLowerCase().includes(q))&&!seen.has(s.kode)){seen.add(s.kode);subm.push({...s,ck});if(subm.length>=6)break;}}if(subm.length>=6)break;}if(subm.length>=6)break;}
|
||
if(cplm.length)html+='<div class="grp">CPL</div>'+cplm.map(k=>`<div class="item" onclick="pick('cpl','${k}')"><b>${k}</b><small>${CPL[k].desk.slice(0,80)}…</small></div>`).join('');
|
||
if(cpmkm.length)html+='<div class="grp">CPMK</div>'+cpmkm.map(k=>`<div class="item" onclick="pick('cpmk','${k}')"><b>${k}</b><small>${CPMK[k].desk.slice(0,80)}…</small></div>`).join('');
|
||
if(mkm.length)html+='<div class="grp">Mata Kuliah</div>'+mkm.map(k=>`<div class="item" onclick="pick('mk','${k}')"><b>${k}</b><small>${MK[k].nama}</small></div>`).join('');
|
||
if(subm.length)html+='<div class="grp">Sub-CPMK</div>'+subm.map(s=>`<div class="item" onclick="pick('cpmk','${s.ck}')"><b>${s.kode}</b><small>${s.uraian.slice(0,70)}…</small></div>`).join('');
|
||
gresults.innerHTML=html||'<div class="item"><small>Tidak ada hasil.</small></div>';gresults.classList.add('show');
|
||
};
|
||
function pick(type,key){gresults.classList.remove('show');gsearch.value='';setHL(type,key);
|
||
const target=type==='mk'?'#matakuliah':(type==='cpl'?'#explorer':'#explorer');
|
||
if(type==='mk'){openMK(key);}else{document.querySelector('#explorer').scrollIntoView({behavior:'smooth'});}
|
||
}
|
||
document.addEventListener('click',e=>{if(!e.target.closest('.searchbox'))gresults.classList.remove('show');});
|
||
|
||
/* ---------- EXPORT ---------- */
|
||
document.getElementById('pdfBtn').onclick=()=>window.print();
|
||
document.getElementById('csvBtn').onclick=()=>{
|
||
let rows=[['Kode MK','Nama MK',...COLS]];
|
||
MATRIX.forEach(m=>rows.push([m.kode,m.nama,...COLS.map(c=>(m.cpls[c]||[]).join(' '))]));
|
||
const csv=rows.map(r=>r.map(x=>'"'+String(x).replace(/"/g,'""')+'"').join(',')).join('\n');
|
||
const blob=new Blob([''+csv],{type:'text/csv;charset=utf-8'});const a=document.createElement('a');
|
||
a.href=URL.createObjectURL(blob);a.download='Matriks_MK_CPL_Informatika_UNTAN.csv';a.click();
|
||
};
|
||
|
||
/* ---------- TAB SCROLLSPY ---------- */
|
||
const tabLinks=[...document.querySelectorAll('nav.tabs a')];
|
||
const secs=tabLinks.map(a=>document.querySelector(a.getAttribute('href')));
|
||
window.addEventListener('scroll',()=>{const y=scrollY+140;let idx=0;secs.forEach((s,i)=>{if(s.offsetTop<=y)idx=i;});tabLinks.forEach((a,i)=>a.classList.toggle('active',i===idx));});
|
||
|
||
/* ---------- INIT ---------- */
|
||
window._ready=true;
|
||
readHash();
|
||
renderMatrix();renderExplorer();renderMK();renderGaps();drawSankey();applyHL();
|
||
</script>
|
||
</body>
|
||
</html> |