@extends('layouts.app', ['title' => 'Audit Bukti Generate AI'])
@section('content')
@php
$prioritySourceGroups = data_get($priorityConfig, 'source_groups', []);
$priorityDocumentTypes = data_get($priorityConfig, 'document_types', []);
$meetingChecks = collect(data_get($consistencyReport, 'per_meeting', []))->keyBy('week_number');
$canonicalType = static function (?string $type): string {
return $type === 'kurikulum_workshop' ? 'kurikulum' : (string) $type;
};
@endphp
Audit Bukti Generate AI
Halaman ini memperlihatkan dari mana AI mengambil dasar penyusunan RPS, seberapa kuat prioritas sumbernya, dan bagian mana yang masih perlu ditinjau sebelum Bapak menerapkan atau mengekspor dokumen.
@if (isset($generateReadiness))
@php
$statusLabels = ['siap' => 'Siap', 'cukup' => 'Cukup', 'kurang' => 'Kurang', 'tidak_layak_generate' => 'Tidak layak generate', 'aman' => 'Aman', 'perlu_cek' => 'Perlu Cek', 'kurang_bukti' => 'Kurang Bukti'];
$statusKey = $generateReadiness['status'] ?? 'tidak_layak_generate';
@endphp
Ringkasan Fondasi Generate
Status
{{ $generateReadiness['status_label'] ?? ($statusLabels[$statusKey] ?? ucfirst(str_replace('_', ' ', $statusKey))) }}
Skor
{{ $generateReadiness['score'] ?? 0 }}/100
Siap
{{ data_get($generateReadiness, 'summary.ready', 0) }}
Konflik
{{ count($generateReadiness['conflicts'] ?? []) }}
@endif
@if (!empty($automaticSelfCheck))
@php
$selfStatus = $automaticSelfCheck['status'] ?? 'perlu_tinjauan';
$selfStatusClass = str_replace('_', '-', $selfStatus);
@endphp
AI Self-Check Setelah Draft Dibuat
Pemeriksaan otomatis ini berjalan setelah AI menyusun 14 Sub-CPMK dan pertemuan 1–7 serta 9–15. Self-check membantu memastikan hasil AI tidak keluar dari batas kerja dan tetap mengikuti opsi admin.
Status
{{ $automaticSelfCheck['status_label'] ?? strtoupper(str_replace('_', ' ', $selfStatus)) }}
Skor
{{ data_get($automaticSelfCheck, 'score', data_get($automaticSelfCheck, 'summary.score', 0)) }}/100
Lulus
{{ data_get($automaticSelfCheck, 'summary.passed', 0) }} / {{ data_get($automaticSelfCheck, 'summary.total', 0) }}
Perlu Cek
{{ data_get($automaticSelfCheck, 'summary.warning', 0) }} warning, {{ data_get($automaticSelfCheck, 'summary.critical', 0) }} kritis
| Pemeriksaan |
Status |
Tingkat |
Catatan |
@foreach (collect($automaticSelfCheck['checks'] ?? []) as $check)
| {{ $check['label'] ?? '-' }} |
{{ strtoupper(str_replace('_', ' ', (string) ($check['status'] ?? '-'))) }} |
{{ strtoupper((string) ($check['severity'] ?? '-')) }} |
{{ collect($check['notes'] ?? [])->implode(' ') ?: '-' }} |
@endforeach
@endif
@if (!empty($sourceTrace))
Jejak Sumber AI
Metadata ini hanya untuk audit. Sistem tidak menampilkan jejak sumber pada RPS utama dan tidak mengubah identitas, CPL, CPMK utama, pustaka, dosen, otorisasi, tanda tangan, SKS, semester, kode dokumen, atau tanggal penyusunan.
@if (!empty(data_get($sourceTrace, 'sub_cpmk', [])))
Dasar Penyusunan Sub-CPMK
| No |
Sub-CPMK |
CPMK |
Bahan Kajian |
Basis Pengetahuan |
Referensi PDF |
@foreach (collect(data_get($sourceTrace, 'sub_cpmk', [])) as $item)
| {{ $item['number'] ?? '-' }} |
{{ $item['description'] ?? '-' }} |
{{ collect(data_get($item, 'source_basis.cpmk', []))->implode(', ') ?: '-' }} |
{{ collect(data_get($item, 'source_basis.curriculum_material', []))->implode('; ') ?: '-' }} |
{{ collect(data_get($item, 'source_basis.knowledge_base', []))->implode(', ') ?: '-' }} |
{{ collect(data_get($item, 'source_basis.reference_pdf', []))->implode(', ') ?: '-' }} |
@endforeach
@endif
@if (!empty(data_get($sourceTrace, 'meetings', [])))
Dasar Penyusunan Pertemuan 1–7 dan 9–15
| Pertemuan |
Sub-CPMK / Indikator |
Bahan Kajian |
Basis Pengetahuan |
Referensi PDF |
@foreach (collect(data_get($sourceTrace, 'meetings', [])) as $item)
| {{ $item['meeting_number'] ?? '-' }} |
{{ $item['sub_cpmk'] ?? '-' }}
{{ $item['indicator'] ?? '-' }}
|
{{ collect(data_get($item, 'source_basis.curriculum_material', []))->implode('; ') ?: '-' }} |
{{ collect(data_get($item, 'source_basis.knowledge_base', []))->implode(', ') ?: '-' }} |
{{ collect(data_get($item, 'source_basis.reference_pdf', []))->implode(', ') ?: '-' }} |
@endforeach
@endif
@endif
Prioritas Sumber AI yang Aktif
@foreach ($priorityLabels['source_groups'] as $key => $label)
{{ $label }}
{{ $prioritySourceGroups[$key] ?? 0 }}
@endforeach
| Jenis Dokumen |
Bobot Prioritas |
@foreach ($priorityLabels['document_types'] as $key => $label)
| {{ $label }} |
{{ $priorityDocumentTypes[$key] ?? 0 }} |
@endforeach
@if (isset($approvedExemplars, $templateReference))
Exemplar dan Template Kampus
Jumlah Exemplar Mata Kuliah Ini
{{ $approvedExemplars->count() }}
Judul Template
{{ data_get($templateReference, 'template_identity.document_title', 'RPS') }}
Orientasi
{{ data_get($templateReference, 'template_identity.orientation', '-') }}
Generator AI juga mempertimbangkan template kampus resmi dan exemplar RPS final yang sudah disetujui untuk mata kuliah ini.
@if ($approvedExemplars->isNotEmpty())
| RPS Exemplar |
Kode / Semester |
Disetujui |
@foreach ($approvedExemplars as $item)
| {{ $item->course_name }} |
{{ $item->course_code ?: '-' }} / {{ $item->semester ?: '-' }} |
{{ optional($item->ai_exemplar_approved_at)->format('d-m-Y H:i') ?: '-' }} |
@endforeach
@endif
@endif
Dokumen Referensi yang Dibaca
| Judul |
Jenis |
Status |
Prioritas |
Halaman |
@forelse ($rps->referenceDocuments as $document)
@php
$typeKey = $canonicalType($document->document_type);
@endphp
| {{ $document->title }} |
{{ $documentTypeLabels[$typeKey] ?? ($documentTypeLabels[$document->document_type] ?? strtoupper(str_replace('_', ' ', $document->document_type))) }} |
{{ strtoupper($document->extraction_status) }} |
{{ $priorityDocumentTypes[$typeKey] ?? 0 }} |
{{ $document->page_count ?: ($document->pages->count() ?: '-') }} |
@empty
| Belum ada referensi PDF yang dipakai untuk generate. |
@endforelse
Audit CPL / CPMK / Sub-CPMK
| Bagian |
Isi |
Kecocokan Kurikulum |
Bobot |
Dokumen Pendukung |
Rasional AI |
@foreach (['cpl_items' => 'CPL', 'cpmk_items' => 'CPMK', 'sub_cpmk_items' => 'Sub-CPMK'] as $traceKey => $label)
@forelse (collect($evidenceTrace[$traceKey] ?? []) as $item)
| {{ $label }} |
{{ trim(($item['code'] ?? '').' '.($item['description'] ?? '')) ?: '-' }} |
{{ data_get($item, 'sources.curriculum_match') ?: '-' }} |
{{ data_get($item, 'sources.priority_weight', '-') }} |
{{ collect(data_get($item, 'sources.reference_documents', []))->implode(', ') ?: '-' }} |
{{ data_get($item, 'sources.rationale') ?: '-' }} |
@empty
| {{ $label }} |
Belum ada data {{ $label }} pada audit ini. |
@endforelse
@endforeach
Audit Bahan Kajian dan Pustaka
| Bagian |
Isi |
Kecocokan Kurikulum |
Bobot |
Dokumen Pendukung |
@forelse (collect($evidenceTrace['study_material_lines'] ?? []) as $item)
| Bahan Kajian |
{{ $item['text'] ?? '-' }} |
{{ data_get($item, 'sources.curriculum_match') ?: '-' }} |
{{ data_get($item, 'sources.priority_weight', '-') }} |
{{ collect(data_get($item, 'sources.reference_documents', []))->implode(', ') ?: '-' }} |
@empty
| Belum ada audit bahan kajian. |
@endforelse
@foreach (collect(data_get($evidenceTrace, 'references.main', [])) as $item)
| Pustaka Utama |
{{ $item['citation'] ?? '-' }} |
- |
{{ data_get($item, 'sources.priority_weight', '-') }} |
{{ collect(data_get($item, 'sources.reference_documents', []))->implode(', ') ?: '-' }} |
@endforeach
@foreach (collect(data_get($evidenceTrace, 'references.supporting', [])) as $item)
| Pustaka Pendukung |
{{ $item['citation'] ?? '-' }} |
- |
{{ data_get($item, 'sources.priority_weight', '-') }} |
{{ collect(data_get($item, 'sources.reference_documents', []))->implode(', ') ?: '-' }} |
@endforeach
Audit Pekan 1–16
| Pekan |
Status Validator |
Sub-CPMK / Materi |
Topik Bukti |
Bobot |
Dokumen Pendukung |
Catatan |
@forelse (collect($evidenceTrace['meetings'] ?? []) as $item)
@php
$week = (int) ($item['week_number'] ?? 0);
$check = $meetingChecks->get($week, []);
@endphp
| {{ $week ?: '-' }} |
{{ strtoupper(str_replace('_', ' ', (string) ($check['status'] ?? '-'))) }} |
{{ $item['sub_cpmk'] ?: ($item['study_material'] ?: '-') }} |
{{ data_get($item, 'sources.topic_evidence') ?: '-' }} |
{{ data_get($item, 'sources.priority_weight', '-') }} |
{{ collect(data_get($item, 'sources.reference_documents', []))->implode(', ') ?: '-' }} |
{{ collect($check['notes'] ?? [])->implode(' ') ?: '-' }} |
@empty
| Belum ada audit pertemuan. |
@endforelse
@endsection