Data tersimpan: mode
{% if tersimpan.data.mode == 'per_mahasiswa' %}PER MAHASISWA ({{ tersimpan.data.mahasiswa|length }} mahasiswa){% else %}BUKTI AGREGAT (rata-rata kelas){% endif %}
— terakhir disimpan {{ tersimpan.updated_at }}{% if tersimpan.updated_by %} oleh {{ tersimpan.updated_by }}{% endif %}.
{% if riwayat_ringkas %} Ringkasan pengisian — team teaching:
{% for k in riwayat_ringkas %}{{ k.komponen }}: {% for d in k.per_dosen %}{{ d.n }}× {{ d.nama }}{{ ', ' if not loop.last }}{% endfor %}{{ ' · ' if not loop.last }}{% endfor %}.{% endif %}
{% endif %}
{% if riwayat %}
Log Lengkap Pengisian Nilai ({{ riwayat|length }} entri)
Waktu
Dosen
Aksi
Komponen
{% for r in riwayat %}
{{ r.at or '—' }}
{{ r.by or '—' }}
{{ r.aksi }}
{{ r.komponen or '—' }}
{% endfor %}
{% endif %}
{% set ada_kelas = grid and grid|selectattr('kelas')|list|length > 0 %}
{% if ada_kelas %}
{% set semua_kelas = grid|map(attribute='kelas')|select|unique|sort|list %}
{% endif %}
{% if grid and tabel_komponen and komponen_daftar %}
NILAI PER KOMPONEN — nilai mahasiswa berdasarkan komponen
Angka = rata-rata skor mentah tiap sesi/tugas komponen itu yang diikuti mahasiswa (bukan lewat Sub-CPMK). Ketik untuk menimpa —
ditulis rata ke semua Sub-CPMK komponen itu; rincian per Sub-CPMK tetap presisi di grid bawah.
{% endif %}
{% if grid %}
{% set per_mhs = tersimpan and tersimpan.data.mode == 'per_mahasiswa' %}
NILAI PER MAHASISWA — nilai mahasiswa berdasarkan Sub-CPMK
{% endif %}
{% if kelompok or tabel_poin or bobot_komponen or hasil %}
DETAIL TAMBAHAN — Kelompok Capaian, Skala Poin, Rincian Bobot & Hasil Ketercapaian
{% if kelompok %}
KELOMPOK CAPAIAN — ATAS / TENGAH / BAWAH (acuan norma: mean ± SD kelas ini, bukan ambang kelulusan)
Batas: Atas > {{ '%.1f'|format(kelompok.batas_atas) }} · Bawah < {{ '%.1f'|format(kelompok.batas_bawah) }} — untuk melihat sebaran capaian relatif dalam kelas ini, pelengkap tabel Hasil Ketercapaian (acuan ambang tetap) di bawah.
No.
NIM
Nama
Nilai Akhir
Kelompok
{% set ns = namespace(no=0) %}
{% for label, kelas, warna, daftar in [('Atas', 'kelompok-atas', '#205020', kelompok.atas), ('Tengah', 'kelompok-tengah', '#7a5c00', kelompok.tengah), ('Bawah', 'kelompok-bawah', 'var(--red)', kelompok.bawah)] %}
{% for m in daftar %}
{% set ns.no = ns.no + 1 %}
{{ ns.no }}
{{ m.nim }}
{{ m.nama }}
{{ '%.1f'|format(m.akhir) }}
{{ label }}
{% endfor %}
{% endfor %}
{% endif %}
{% if tabel_poin %}
{% set ada_kelas_p = tabel_poin|selectattr('kelas')|list|length > 0 %}
{% set n_kiri_p = 4 if ada_kelas_p else 3 %}
NILAI PER MAHASISWA — SKALA POIN — nilai yang sama, ditampilkan sebagai poin yang didapat dari total 100 (lihat rincian bobot di bawah); hanya tampilan, bukan isian
No.
NIM
Nama
{% if ada_kelas_p %}
Kelas
{% endif %}
{% for s in peta.subs %}
{{ s.kode }}
{% endfor %}
Total
{% for m in tabel_poin %}
{{ loop.index }}
{{ m.nim }}
{{ m.nama }}
{% if ada_kelas_p %}
{{ m.kelas or '—' }}
{% endif %}
{% for s in peta.subs %}
{% set p = m.poin.get(s.kode) %}
{% if p %}{{ '%.2f'|format(p.dapat) }}/{{ '%.2f'|format(p.maks) }}{% else %}—{% endif %}
{% endfor %}
{{ '%.2f'|format(m.total) }}
{% endfor %}
{% endif %}
{% if bobot_komponen %}
RINCIAN BOBOT PENILAIAN — bobot komponen (RPS bagian G) dibagi rata ke Sub-CPMK-nya; murni dari RPS, tak bergantung nilai