@if (session('dashboard_status'))
{{ session('dashboard_status') }}
@endif

Approval Workspace

{{ $package->title }}

{{ $package->code }} · {{ $totalQuestions }} soal · {{ $totalPassages }} passage

{{ str($package->workflow_status)->replace('_', ' ')->title() }} {{ $package->is_active ? 'Aktif' : 'Nonaktif' }} {{ $package->packageTypeLabel() }}

{{ $package->description ?: 'Belum ada deskripsi paket.' }}

@if ($package->requiresStrictValidation()) Paket ini bertipe official test. Pada tahap checklist berikutnya, validasi TOEFL riil akan dibuat ketat sebelum publish. @elseif ($package->isDemo()) Paket ini bertipe demo. Jumlah soal boleh fleksibel, tetapi validasi dasar seperti opsi dan kunci jawaban tetap akan dijaga. @else Paket ini bertipe practice. Cocok untuk latihan kelas dengan validasi menengah. @endif

Keputusan Reviewer

Tambahkan catatan review lalu tentukan status approval paket.

@if ($package->workflow_status === 'in_review') @unless ($quality['canPublish'])

Ada {{ $quality['summary']['blocking'] }} item blocking. Publish akan ditolak sampai item tersebut diperbaiki.

@endunless @elseif ($package->workflow_status === 'published') @else
Paket masih berada di draft author dan belum masuk antrian approval.
@endif

Quality Checklist

Kesiapan Paket Sebelum Publish

Demo dan practice diberi warning untuk standar TOEFL riil. Official test wajib lolos item blocking sebelum bisa dipublish.

Pass

{{ $quality['summary']['passed'] }}

Warning

{{ $quality['summary']['warnings'] }}

Blocking

{{ $quality['summary']['blocking'] }}

@foreach ($quality['items'] as $item)

{{ $item['label'] }}

{{ $item['message'] }}

{{ $item['status'] === 'pass' ? 'OK' : ($item['blocking'] ? 'Block' : 'Warn') }}
@endforeach
@foreach ([ 'pending' => ['Pending', 'bg-slate-100 text-slate-700'], 'approved' => ['Approved', 'bg-emerald-100 text-emerald-700'], 'needs_revision' => ['Needs Revision', 'bg-amber-100 text-amber-700'], 'flagged' => ['Flagged', 'bg-blue-100 text-blue-700'], 'rejected' => ['Rejected', 'bg-rose-100 text-rose-700'], ] as $statusKey => [$label, $tone])

{{ $label }}

{{ $reviewSummary[$statusKey] ?? 0 }}

Item review
@endforeach

Peta Review Section

Mulai dari section, masuk ke group, lalu review detail satu soal aktif.

@if ($activeSection) Section aktif: {{ $activeSection->name }} @endif
@foreach ($sectionSummaries as $summary) @php($section = $summary['section']) @endforeach
@php($activePassages = $passages->whereIn('id', $activeGroup['passage_ids'] ?? [])->values()) @if ($activePassages->isNotEmpty())

Konteks Passage / Audio Prompt

Konteks group aktif, dipadatkan agar reviewer tetap fokus ke soal.

@foreach ($activePassages as $passage)

{{ $passage->title }}

Urutan {{ $passage->order }}

{{ $passage->content }}

@endforeach
@endif

{{ $activeSection?->name ?? 'Section' }} @if ($activeGroup) · {{ $activeGroup['label'] }} @endif

{{ $activeQuestion ? 'Review Soal ' . $activeQuestion->order : 'Belum ada soal aktif' }}

Panel ini hanya menampilkan satu soal agar review lebih teliti dan tidak memanjang.

@if ($activeQuestion)
{{ str($activeQuestion->question_type ?: 'multiple_choice')->replace('_', ' ')->title() }} Review: {{ str($activeQuestionReview?->status ?? 'pending')->replace('_', ' ')->title() }}
@endif
@if ($activeQuestion) @if ($activeQuestion->passage)
Passage terkait: {{ $activeQuestion->passage->title }}
@endif @if ($activeQuestion->audio_path)
Audio listening tersedia: {{ $activeQuestion->audio_path }}
@endif

Question Stem

{{ $activeQuestion->question_text }}

@foreach ($activeQuestion->options as $option)
{{ $option->label }}. {{ $option->content }} @if ($option->is_correct) Kunci jawaban @endif
@endforeach

Status Review Soal

Gunakan ini untuk memberi status granular per item, bukan hanya approval paket secara umum.

@if ($activeQuestionReview)

Terakhir: {{ $activeQuestionReview->updated_at?->format('d M Y H:i') }}

@endif
@else
Pilih group atau soal untuk mulai review detail.
@endif