Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ Validation fails fast with aggregated errors; the step re-renders with input pre

### Transcript Completeness Check (ENH-020)

`Graduation::checkTranscriptCompleteness()` scans `GetTranskripMahasiswa` rows for a thesis/skripsi course (name matching `/skripsi|tugas\s*akhir|thesis|disertasi/i`) with a non-empty grade (`nilai_huruf` or `nilai_angka`). Returns `{complete: bool, reason: string}`. This is a heuristic — confirm naming against real data and tighten pattern if needed.
`Graduation::checkTranscriptCompleteness()` scans transcript rows from the Neo Feeder cloud "Cek Transkrip Mahasiswa" endpoints (`NeoFeeder::getCekTranskripMahasiswa()`) for a final-project course with a non-empty grade (`nilai_huruf` or `nilai_angka`). Course names differ per program studi, so the pattern is selected from `nama_program_studi` (persisted in wizard progress): S1 matches `skripsi|tugas akhir|thesis|tesis`, S2 matches `tesis|skripsi|tugas akhir|thesis|ujian hasil penelitian dan tutup|ujian tutup`, and S3 matches only `ujian terbuka|promosi`. S3's `Ujian Tutup` is an intermediate milestone, so it is deliberately excluded there. Returns `{complete: bool, reason: string}`. The per-course `choosed` marker is informational only and does not gate completeness.

### PISN Eligibility (Stubbed)

Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ _None yet._
- **Graduation wizard academic edits silently rejected by Neo Feeder (#117):** `Graduation::finish()` pushed per-semester academic corrections (status / IPK / IPS) as a *partial* `UpdatePerkuliahanMahasiswa` record (only `id_status_mahasiswa`, `ips`, `ipk`). Neo Feeder rejects partial records — it enforces `id_status_mahasiswa`, `biaya_kuliah_smt` and `id_pembiayaan` even though the GetDictionary schema lists only `id_status_mahasiswa` as NOT NULL — so every academic edit failed and the last-semester IPK/status was never actually updated. The failure was also invisible because the response was discarded (no result row). `finish()` now sends the **full** activity row (minus the composite key) plus `id_pembiayaan` resolved via `GetListRiwayatPendidikanMahasiswa`, with only the edited fields overridden — the same record shape as the Verifikasi IPK menu — and records a per-semester success/failure result so the guidance page shows what actually happened — #117

- **Graduation wizard transcript completeness (BUG-001, #89):** the "Kelengkapan Transkrip" check is now sourced from the Neo Feeder "Cek Transkrip Mahasiswa" menu data (cloud REST `/ws/transkrip/nilai_mahasiswa`, using BASE's existing WS `act` token as Bearer — no separate cloud login) instead of `GetTranskripMahasiswa`. Completeness now requires the thesis/skripsi course to exist with a non-empty grade; the per-course `choosed` transcript-inclusion marker is shown as status detail (badge "Nilai ada · masuk transkrip"/"belum masuk transkrip"/"Tanpa nilai") but no longer gates the result. New `NeoFeeder::getCekTranskripMahasiswa()` + `cloudGet()` helper; card 2b renders the detected thesis course (MK, kode, semester, nilai, status).

- **Graduation wizard final-project detection for S2/S3 (BUG-003, #130):** the transcript check only matched undergraduate course names (`skripsi|tugas akhir|thesis|disertasi`), so postgraduate students — whose final requirement is `Ujian Tutup` (S2 Akuntansi), `Ujian Hasil Penelitian dan Tutup` (S2 Manajemen), or `Ujian Terbuka (Promosi)` (S3) — were always reported as missing it, `transcript_ok` never auto-checked, and a missing grade was never filled from Excel. Detection now selects a pattern from the program studi (`S2`/`S3` prefix, S1 fallback) and excludes proposal/methodology/results-exam milestones; S3 deliberately rejects `Ujian Tutup` because it is only an intermediate milestone there. The program name is persisted in wizard progress so `finish()` uses the same pattern. `transcript_ok` requires a grade without the `choosed` gate, which is `false` on every sampled postgraduate final-project row. Card 3 wording now says "karya akhir".
- **FA6 icon consistency:** `header.php` logout button and `DESIGN.md` reference still used FA5 deprecated names (`fa-sign-out-alt` → `fa-right-from-bracket`, `fa-tachometer-alt` → `fa-gauge-high`) — aligned to canonical FA6 names to match `sidebar.php`
- **Sidebar active state:** fixed route detection — `getPath()` returned `index.php/dashboard` instead of `dashboard`; now uses `current_url()` with `basename()` which handles both URL formats

Expand Down
Loading
Loading