@extends('layouts.app', ['title' => 'Detail RPS']) @section('content') @php $qualityMeta = data_get($rps->ai_draft_payload, 'pipeline_meta.quality_meta', []); $consistencyReport = data_get($qualityMeta, 'consistency_report', []); $evidenceTrace = data_get($qualityMeta, 'evidence_trace', []); $sectionQuality = collect(data_get($consistencyReport, 'per_section', [])); $meetingValidation = collect(data_get($consistencyReport, 'per_meeting', []))->keyBy('week_number'); $traceCounts = [ 'cpl' => count($evidenceTrace['cpl_items'] ?? []), 'cpmk' => count($evidenceTrace['cpmk_items'] ?? []), 'sub_cpmk' => count($evidenceTrace['sub_cpmk_items'] ?? []), 'meetings' => count($evidenceTrace['meetings'] ?? []), ]; $statusLabels = [ 'siap' => 'Siap', 'cukup' => 'Cukup', 'kurang' => 'Kurang', 'tidak_layak_generate' => 'Tidak layak generate', 'aman' => 'Aman', 'perlu_cek' => 'Perlu Cek', 'kurang_bukti' => 'Kurang Bukti', 'unknown' => 'Belum Dinilai', ]; $sectionPriority = [ 'kurang_bukti' => 0, 'perlu_cek' => 1, 'aman' => 2, 'unknown' => 3, ]; $sectionQuality = $sectionQuality ->sortBy(function ($section, $key) use ($sectionPriority) { $statusKey = $section['status'] ?? 'unknown'; return [ $sectionPriority[$statusKey] ?? 99, $section['label'] ?? ($key === 'study_materials' ? 'Bahan Kajian' : strtoupper((string) $key)), ]; }) ->map(fn ($section) => $section); $topPrioritySectionKey = $sectionQuality->keys()->first(); $generateGate = $generateReadiness['gate'] ?? ['status' => 'open', 'can_generate_full' => true]; @endphp
Dokumen ini dapat dilanjutkan ke editor untuk penyesuaian isi sebelum dipreview dan diexport ke PDF berdasarkan template RPS akhir.
Acuan format generator saat ini mengikuti template kampus: `{{ collect(data_get($templateReference, 'reference_documents', []))->implode('`, `') }}`.
@if ($approvedExemplars->isNotEmpty())| RPS Exemplar | Kode / Semester | Disetujui |
|---|---|---|
| {{ $item->course_name }} | {{ $item->course_code ?: '-' }} / {{ $item->semester ?: '-' }} | {{ optional($item->ai_exemplar_approved_at)->format('d-m-Y H:i') ?: '-' }} |
Bagian ini menunjukkan apakah mata kuliah sudah punya profil resmi yang cukup kuat untuk dijadikan dasar generate RPS.
Tahap ini memakai hasil ekstraksi PDF + draft RPS saat ini untuk menyusun usulan yang lebih lengkap, termasuk pertemuan 1–16. Usulan AI tidak langsung menimpa draft sampai tombol `Terapkan Usulan AI` dijalankan.
| Bagian | Ringkasan Usulan |
|---|---|
| Deskripsi MK | {{ $rps->ai_draft_payload['course_description'] ?? '-' }} |
| Bahan Kajian | {{ collect($rps->ai_draft_payload['study_material_lines'] ?? [])->implode('; ') ?: '-' }} |
| CPL / CPMK / Sub-CPMK | CPL: {{ count($rps->ai_draft_payload['cpl_items'] ?? []) }}, CPMK: {{ count($rps->ai_draft_payload['cpmk_items'] ?? []) }}, Sub-CPMK: {{ count($rps->ai_draft_payload['sub_cpmk_items'] ?? []) }} |
| Pustaka | Utama: {{ count($rps->ai_draft_payload['main_references'] ?? []) }}, Pendukung: {{ count($rps->ai_draft_payload['supporting_references'] ?? []) }} |
| Rencana Mingguan | {{ count($rps->ai_draft_payload['meetings'] ?? []) }} usulan pertemuan |
Laporan ini mengecek apakah draft AI sudah cukup konsisten sebelum Bapak lanjut ke edit atau export.
Jejak sumber ini menunjukkan dari mana AI mengambil dasar untuk menyusun isi RPS.
| Bagian | Nilai | Dasar/Sumber |
|---|---|---|
| CPL | {{ $item['code'] ?? '-' }} {{ $item['description'] ?? '' }} |
{{ data_get($item, 'sources.curriculum_match') ?: '-' }}
@if (filled(data_get($item, 'sources.rationale')))
{{ data_get($item, 'sources.rationale') }} @endif |
| Belum ada jejak CPL yang tersimpan. | ||
| CPMK | {{ $item['code'] ?? '-' }} {{ $item['description'] ?? '' }} |
{{ data_get($item, 'sources.curriculum_match') ?: '-' }}
@if (filled(data_get($item, 'sources.rationale')))
{{ data_get($item, 'sources.rationale') }} @endif |
| Pekan {{ $item['week_number'] ?? '-' }} | {{ $item['study_material'] ?: ($item['sub_cpmk'] ?? '-') }} |
{{ data_get($item, 'sources.topic_evidence') ?: '-' }}
@if (filled(data_get($item, 'sources.rationale')))
{{ data_get($item, 'sources.rationale') }} @endif |
Dokumen yang statusnya `COMPLETED` bisa dipetakan semi-otomatis ke draft RPS tanpa menghapus isian manual yang sudah ada.
| Judul | Jenis | Status | File | Aksi |
|---|---|---|---|---|
| {{ $document->title }} | {{ str_replace('_', ' ', strtoupper($document->document_type)) }} | {{ strtoupper($document->extraction_status) }} | {{ $document->original_filename }} | Lihat | Unduh |
| Belum ada referensi PDF. | ||||
Deskripsi Singkat MK
{{ $rps->course_description ?: '-' }}
Bahan Kajian
{{ $rps->study_materials ?: '-' }}
Mata Kuliah Syarat
{{ $rps->prerequisite_course ?: '-' }}
| Peran | Nama | Identitas | Tanggal |
|---|---|---|---|
| {{ $approval->role_name }} | {{ $approval->signer_name ?: '-' }} | {{ $approval->signer_identifier ?: '-' }} | {{ optional($approval->approval_date)->format('d-m-Y') ?: '-' }} |
| Belum ada data penandatangan. | |||
| Mg ke- | Status | Jenis | Kemampuan Akhir Tiap Tahapan Belajar (Sub-CPMK) | Indikator | Kriteria dan Teknik | Pembelajaran Luring | Pembelajaran Daring | Materi Pembelajaran [Pustaka] | Bobot Penilaian (%) |
|---|---|---|---|---|---|---|---|---|---|
| {{ $meeting->week_number }} | {{ strtoupper(str_replace('_', ' ', $meetingStatus)) }} @if (! empty($meetingNotes)) @endif | {{ strtoupper($meeting->session_type) }} | {{ $meeting->sub_cpmk ?: '-' }} | {{ $meeting->indicator ?: '-' }} |
{{ $meeting->assessment_criteria ?: '-' }}
{{ $meeting->assessment_form ?: '-' }} |
{{ $meeting->offline_activity ?: '-' }} | {{ $meeting->online_activity ?: '-' }} | {{ $meeting->study_material ?: '-' }} | {{ $meeting->assessment_weight !== null ? rtrim(rtrim(number_format((float) $meeting->assessment_weight, 2, '.', ''), '0'), '.') : '-' }} |