@extends('layouts.app') @section('title', 'DA + Finalisasi — ' . $application->applicant_name) @section('content')
{{-- Header --}}
Verifikasi - Desk Analysis
{{ $application->applicant_name }} — {{ $application->id }}
{!! $application->status_badge !!}
{{-- ═══ Navigation: Tahap 4 DA vs Tahap 6 Finalisasi ═══ --}} @php $daSubmitted = $da->status === 'submitted'; $slikOkNav = (bool) $application->hasilSlik; $dokOkNav = ! empty($da->review_dokumen); // Gate utama: kriteria manual c,d,g,i sudah dikonfirmasi (bukan perlu_konfirmasi) $kriteriaDebiturNav = collect($da->kriteria_debitur ?? []); $manualKodesNav = ['c_tidak_macet', 'd_tidak_restrukturisasi', 'g_status_lahan', 'i_masa_penguasaan_lahan']; $kritManualOkNav = collect($manualKodesNav)->every(function ($kode) use ($kriteriaDebiturNav) { $item = $kriteriaDebiturNav->firstWhere('kode', $kode); return $item && ($item['status'] ?? 'perlu_konfirmasi') !== 'perlu_konfirmasi'; }); $daGates = [$dokOkNav, $slikOkNav, $kritManualOkNav]; $daDoneCount = collect($daGates)->filter()->count(); @endphp
{{-- Panel kiri: Tahap 4 DA --}}
4
Tahap 4 — Desk Analysis
@if($daSubmitted)
✅ Selesai — DA disubmit
@else
{{ $daDoneCount }}/3 gate terpenuhi
{{ $dokOkNav ? '✅' : '⏳' }} Dok {{ $slikOkNav ? '✅' : '⏳' }} SLIK {{ $kritManualOkNav ? '✅' : '⏳' }} Kriteria Manual
@endif
{{-- Panel kanan: Tahap 6 Finalisasi --}}
6
Tahap 6 — Finalisasi + CSL
@if(! $daSubmitted)
⏳ Menunggu DA selesai — CSL akan dihitung otomatis
@elseif(! $cslScoring)
⚠️ DA selesai — hitung CSL di section Finalisasi di bawah
@else
✅ CSL: {{ number_format($cslScoring->skor_total, 1) }}  | {!! $cslScoring->kategori_risiko_badge !!}  | {{ $cslScoring->semua_compliance_accepted ? '8/8 Accepted' : 'Ada Rejected' }}
@endif
@if($daSubmitted) Lanjut @endif
@if(session('success'))
{{ session('success') }}
@endif @if($errors->any())
@endif {{-- Tabs --}}
{{-- ═══════════════════════════════════════════════════════════════ --}} {{-- TAB 1: REVIEW DOKUMEN --}} {{-- ═══════════════════════════════════════════════════════════════ --}}
Review Dokumen Perorangan
@php $docTypes = [ 'dokumen_ktp' => 'KTP Pemohon + Pasangan', 'dokumen_kk' => 'Kartu Keluarga', 'dokumen_formulir' => 'Formulir Permohonan Perorangan', 'dokumen_penguasaan_lahan' => 'Dokumen Penguasaan Lahan', 'dokumen_surat_permohonan_fdb' => 'Surat Permohonan FDB Kelompok', 'dokumen_jaminan' => 'Dokumen Jaminan', ]; $uploadedDocs = $application->documents->keyBy('type'); $reviewDokumen = collect($da->review_dokumen ?? []); @endphp
@csrf
@foreach($docTypes as $kode => $label) @php $doc = $uploadedDocs->get($kode); $rv = $reviewDokumen->firstWhere('jenis', $kode) ?? []; $rvStatus = $rv['status'] ?? ($doc ? 'valid' : 'belum_ada'); $rvCatatan = $rv['catatan'] ?? ''; @endphp @endforeach
Dokumen Status Upload Validasi Catatan
{{ $label }}
@if($doc) Lihat dokumen @else Belum diupload @endif
@if($doc) Upload @else Belum @endif
{{-- ═══════════════════════════════════════════════════════════════ --}} {{-- TAB 2: SLIK --}} {{-- ═══════════════════════════════════════════════════════════════ --}}
Input Hasil SLIK / iDeb OJK
@php $slik = $application->hasilSlik; @endphp @if($slik)
SLIK sudah diinput pada {{ $slik->tanggal_query?->format('d M Y') ?? '-' }}. Risk Category: {{ $slik->risk_label }}. Diinput oleh: {{ $slik->diinputOleh?->name ?? '-' }}.
@endif
@csrf @php $riskScores = \App\Models\HasilSlik::$RISK_SCORE; $riskColors = [ 'very_low' => '#065f46', 'low' => '#065f46', 'average' => '#92400e', 'moderate' => '#92400e', 'high' => '#991b1b', 'very_high' => '#991b1b', ]; $riskBorders = [ 'very_low' => '#10b981', 'low' => '#10b981', 'average' => '#f59e0b', 'moderate' => '#f59e0b', 'high' => '#ef4444', 'very_high' => '#ef4444', ]; $selectedRisk = old('risk_category', $slik?->risk_category ?? ''); @endphp
@error('risk_category')
{{ $message }}
@enderror
Skala: VL=100 | L=100 | A=75 | M=75 | H=50 | VH=50
@if($selectedRisk) → Skor CSL Eksternal = {{ $riskScores[$selectedRisk] ?? 0 }} × 40% = {{ round(($riskScores[$selectedRisk] ?? 0) * 0.4, 1) }} poin @endif
@error('tanggal_query')
{{ $message }}
@enderror
ada_tunggakan ? '1' : '0') === '0')>
ada_tunggakan ? '1' : '0') === '1')>
@if($slik?->file_path)
File sebelumnya: Lihat file SLIK (upload baru akan menggantikan)
@endif
{{-- ═══════════════════════════════════════════════════════════════ --}} {{-- TAB 3: KRITERIA --}} {{-- ═══════════════════════════════════════════════════════════════ --}}
{{-- ── Section A: Auto-Check (Read-Only) ── --}}
Section A — Hasil Auto-Check Read-Only

Data dihitung otomatis dari form PL. Jika hasil tidak sesuai, kembalikan ke PL — bukan override.

Kriteria Kelompok
@foreach($kriteriaKelompok as $k) @php $st = $k['status'] ?? 'perlu_konfirmasi'; $icon = match($st) { 'lulus' => '✅', 'tidak' => '❌', default => '❓' }; $color = match($st) { 'lulus' => 'text-success', 'tidak' => 'text-danger', default => 'text-warning' }; @endphp
{{ $icon }}
{{ $k['label'] }}
{{ $k['info'] ?? '' }}
Auto
@endforeach
Kriteria Debitur (Auto)
@php $autoKodes = ['a_anggota_kelompok','b_tidak_aktif_bpdlh','e_rumah_bukan_sewa','f_domisili_gt1th','h_usia_produktif','j_kemampuan_bayar','k_profesi']; @endphp @foreach($kriteriaDebitur as $k) @if(in_array($k['kode'], $autoKodes)) @php $st = $k['status'] ?? 'perlu_konfirmasi'; $icon = match($st) { 'lulus' => '✅', 'tidak' => '❌', default => '❓' }; $color = match($st) { 'lulus' => 'text-success', 'tidak' => 'text-danger', default => 'text-warning' }; $letter = strtoupper(substr($k['kode'], 0, 1)); @endphp
{{ $letter }}. {{ $icon }}
{{ $k['label'] }}
{{ $k['info'] ?? '' }}
Auto
@endif @endforeach
Hasil auto-check tidak bisa diubah. Jika ada yang ❌ Tidak Lulus atau ❓ Perlu Konfirmasi, gunakan tombol "Kembalikan ke PL" di Tab Kesimpulan.
{{-- ── Section B: Input Manual Verifikasi (4 item: c, d, g, i) ── --}}
@csrf
Section B — Input Manual Verifikasi 4 Item Wajib

Hanya item ini yang membutuhkan judgment Verifikasi — konfirmasi berdasarkan dokumen fisik atau arsip BPDLH.

@php $savedKd = collect($da->kriteria_debitur ?? []); $manualItems = ['c_tidak_macet', 'd_tidak_restrukturisasi', 'g_status_lahan', 'i_masa_penguasaan_lahan']; @endphp @foreach($kriteriaDebitur as $k) @if(! in_array($k['kode'], $manualItems)) @continue @endif @php $savedK = $savedKd->firstWhere('kode', $k['kode']) ?? $k; $savedStatus = $savedK['status'] ?? 'perlu_konfirmasi'; $savedCatatan = $savedK['catatan'] ?? ''; $letter = strtoupper(substr($k['kode'], 0, 1)); $isKriteriaG = $k['kode'] === 'g_status_lahan'; $isKriteriaI = $k['kode'] === 'i_masa_penguasaan_lahan'; @endphp
{{ $letter }} {{ $k['label'] }} Manual — {{ $k['info'] ?? '' }}
@if($isKriteriaG) @elseif($isKriteriaI) @if($k['info'])
{{ $k['info'] }}
@endif {{-- hidden status field — di-compute server-side dari tanggal --}} @elseif($k['kode'] === 'c_tidak_macet')
@elseif($k['kode'] === 'd_tidak_restrukturisasi')
@endif
@endforeach
{{-- Safeguard --}}
Safeguard Check
safeguard_clear ? '1' : null) === '1')>
safeguard_clear && $da->safeguard_clear !== null ? '0' : null) === '0')>
{{-- ═══════════════════════════════════════════════════════════════ --}} {{-- TAB 4: TALLYSHEET SUMMARY --}} {{-- ═══════════════════════════════════════════════════════════════ --}}
Tallysheet — Data Produksi & Jaminan

Data diinput oleh PL (read-only). Rasio jaminan terhadap plafond dihitung otomatis.

@php $jenisLayanan = $application->jenis_layanan ?? ''; $isTundaTebang = str_contains(strtolower($jenisLayanan), 'tunda'); $plafondDiajukan = $application->plafond_diajukan ?? 0; @endphp @if($isTundaTebang) {{-- Tallysheet: Tunda Tebang (LHC Summary) --}} @php $pohonList = $application->pohonTundaTebang ?? collect(); $byJenis = $pohonList->groupBy('jenis_pohon'); $totalNilai = $pohonList->sum('nilai_pohon'); $rasioJaminan = $plafondDiajukan > 0 ? round(($totalNilai / $plafondDiajukan) * 100, 2) : 0; @endphp
@forelse($byJenis as $jenis => $pohons) @empty @endforelse @if($pohonList->isNotEmpty()) @endif
Jenis Pohon Jml Pohon Total Keliling (cm) Total Tinggi (m) Total Nilai
{{ $jenis }} {{ $pohons->count() }} {{ number_format($pohons->sum('keliling_cm'), 0, ',', '.') }} {{ number_format($pohons->sum('tinggi_m'), 0, ',', '.') }} Rp {{ number_format($pohons->sum('nilai_pohon'), 0, ',', '.') }}
Belum ada data tallysheet tunda tebang
Total {{ $pohonList->count() }} pohon Rp {{ number_format($totalNilai, 0, ',', '.') }}
@else {{-- Tallysheet: MUK — Produksi Bulanan --}} @php $tanamanList = $application->tanaman ?? collect(); $totalPendapatan = 0; foreach ($tanamanList as $tan) { foreach ($tan->produksiBulanan as $p) { $totalPendapatan += $p->total_harga ?? ($p->jumlah_panen_kg * $p->harga_per_kg); } } $nilaiJaminan = (int) ($totalPendapatan * 0.5); $rasioJaminan = $plafondDiajukan > 0 ? round(($nilaiJaminan / $plafondDiajukan) * 100, 2) : 0; @endphp @forelse($tanamanList as $tanaman)
{{ $tanaman->nama_komoditas ?? $tanaman->jenis_tanaman ?? 'Komoditas' }} @if($tanaman->luas_lahan_ha) ({{ $tanaman->luas_lahan_ha }} ha) @endif
@forelse($tanaman->produksiBulanan->sortBy('bulan') as $p) @empty @endforelse
Bulan Qty (kg) Harga/kg Total
{{ \App\Models\ProduksiBulanan::getNamaBulan($p->bulan) }} {{ number_format($p->jumlah_panen_kg, 0, ',', '.') }} Rp {{ number_format($p->harga_per_kg, 0, ',', '.') }} Rp {{ number_format($p->total_harga ?? ($p->jumlah_panen_kg * $p->harga_per_kg), 0, ',', '.') }}
Belum ada data produksi bulanan
Total Pendapatan Tahunan Rp {{ number_format($tanaman->produksiBulanan->sum(fn($p) => $p->total_harga ?? ($p->jumlah_panen_kg * $p->harga_per_kg)), 0, ',', '.') }}
@empty
Belum ada data tanaman/produksi dari PL.
@endforelse @endif {{-- Ringkasan Jaminan --}}
Ringkasan Jaminan vs Plafond
Nilai Jaminan
@if($isTundaTebang) Rp {{ number_format($totalNilai ?? 0, 0, ',', '.') }} @else Rp {{ number_format($nilaiJaminan ?? 0, 0, ',', '.') }}
(50% × total produksi)
@endif
Plafond Diajukan
Rp {{ number_format($plafondDiajukan, 0, ',', '.') }}
Rasio Jaminan / Plafond
{{ number_format($rasioJaminan, 2, ',', '.') }}% {{ $rasioJaminan >= 125 ? '✅' : '⚠️' }} (min 125%)
Status Compliance Jaminan
{{ $rasioJaminan >= 125 ? '✅ Accepted' : '❌ Rejected' }}
{{-- ═══════════════════════════════════════════════════════════════ --}} {{-- TAB 5: COMPLIANCE PARAMETER --}} {{-- ═══════════════════════════════════════════════════════════════ --}}
@php $compParams = $da->compliance_params ?? []; $compAllOk = collect($compParams)->every(fn($p) => ($p['status'] ?? '') === 'Accepted'); $compRejectedCount = collect($compParams)->filter(fn($p) => ($p['status'] ?? '') !== 'Accepted')->count(); $slik = $application->hasilSlik; @endphp {{-- Section A: Karakter SLIK --}}
A. Karakter Debitur (SLIK / iDeb OJK)
@if($slik)
Kategori Risiko
{{ $slik->risk_label }}
Skor CSL Eksternal
{{ $slik->risk_score }} × 40% = {{ number_format($slik->risk_score * 0.4, 1) }}
Tunggakan
{{ $slik->ada_tunggakan ? 'Ada — '.$slik->jumlah_hari_tunggakan.' hari' : 'Tidak ada' }}
Tanggal Query
{{ \Carbon\Carbon::parse($slik->tanggal_query)->format('d/m/Y') }}
@if($slik->catatan)
Catatan
{{ $slik->catatan }}
@endif
@else
SLIK belum diinput. Input hasil SLIK di Tab SLIK untuk melihat Karakter Debitur.
@endif {{-- Section B: CSL Scoring Breakdown --}}
B. CSL Scoring — Breakdown
@if(empty($compParams))
Parameter compliance akan muncul setelah data aplikasi lengkap (SLIK + data FA tersedia).
@else {{-- ① Compliance Parameters — Gate Wajib --}}
① Compliance Parameter — Gate Wajib

8 parameter dikalkulasi otomatis dari data aplikasi. Parameter 4 (Karakter) dari SLIK.

@foreach($compParams as $idx => $p) @php $isAcc = ($p['status'] ?? '') === 'Accepted'; @endphp @endforeach
# Parameter Sumber Status
{{ $idx + 1 }} {{ $p['label'] }} {{ ($p['sumber'] ?? '') === 'slik' ? 'SLIK' : 'Auto' }} {{ $isAcc ? 'Accepted' : 'Rejected' }}
@php $rejectedLabels = collect($compParams)->filter(fn($p) => ($p['status'] ?? '') !== 'Accepted')->pluck('label'); @endphp
@if($compAllOk) Gate: ✅ Semua 8 Accepted @else Gate: ⚠️ {{ $compRejectedCount }} Rejected ({{ $rejectedLabels->join(', ') }})
→ Pengajuan diteruskan ke Signature dengan catatan risiko.
@endif
@if(!$slik)
⏳ Menunggu input SLIK — skor CSL Eksternal/Financial/Non-Financial belum tersedia.
@elseif(!$cslScoring)
Skor CSL akan tersedia setelah FA selesai dan semua data lengkap.
@else @php $cslTotal = $cslScoring->skor_total ?? 0; $cslKat = $cslScoring->kategori_risiko ?? '—'; // 3-state: Hijau (≥50 + all ok), Kuning (≥50 + ada rejected), Merah (<50) $cslState = $cslTotal >= 50 && $compAllOk ? 'hijau' : ($cslTotal >= 50 ? 'kuning' : 'merah'); $angsuranPerTahun = $cslScoring->angsuran_per_tahun ?? 0; $angsuranPerBulan = $angsuranPerTahun > 0 ? round($angsuranPerTahun / 12) : 0; $rpcTahunan = $cslScoring->rpc_tahunan ?? 0; $rasioRpc = $cslScoring->rasio_rpc ?? 0; $idir = $rpcTahunan > 0 ? round(($angsuranPerTahun / $rpcTahunan) * 100, 1) : 0; @endphp {{-- ② Eksternal 40% --}}
② Komponen Eksternal — bobot 40%
Sumber
SLIK / iDeb OJK
Risk Category
{{ $slik->risk_label }}
Skala nilai
@php $riskMap = ['very_low'=>'VL','low'=>'L','average'=>'A','moderate'=>'M','high'=>'H','very_high'=>'VH']; $riskScoresDisplay = \App\Models\HasilSlik::$RISK_SCORE; @endphp
@foreach($riskScoresDisplay as $key => $score) {{ $riskMap[$key] ?? $key }}={{ $score }} @endforeach
Nilai mentah
{{ $cslScoring->nilai_eksternal }}
Kalkulasi: {{ $cslScoring->nilai_eksternal }} × 0,40 = {{ number_format($cslScoring->skor_eksternal, 1) }} poin
{{-- ③ Financial 30% --}}
③ Komponen Financial — bobot 30%
Sumber: Self Assessment Keuangan + plafond yang diajukan
RPC Tahunan
Rp {{ number_format($rpcTahunan, 0, ',', '.') }}
Angsuran / Tahun
Rp {{ number_format($angsuranPerTahun, 0, ',', '.') }}
@if($angsuranPerBulan)
(Rp {{ number_format($angsuranPerBulan, 0, ',', '.') }}/bln × 12)
@endif
Rasio RPC / Angsuran
{{ number_format($rasioRpc, 2) }}×
IDIR
{{ $idir }}%
(batas maks 80%)
Skala rasio RPC
> 1,5× → nilai 100 (Low Risk) 1 – 1,5× → nilai 75 (Moderate) < 1× → nilai 50 (High Risk)
Nilai mentah
{{ number_format($cslScoring->nilai_financial ?? 0, 0) }}
Kalkulasi: {{ number_format($cslScoring->nilai_financial ?? 0, 0) }} × 0,30 = {{ number_format($cslScoring->skor_financial ?? 0, 1) }} poin
{{-- ④ Non-Financial 30% --}}
④ Komponen Non-Financial — bobot 30% (10 Parameter)
@if($cslScoring->params_non_financial) @php $nfParams = $cslScoring->params_non_financial; $nfTotal = collect($nfParams)->sum('nilai'); $nfRataRata = count($nfParams) > 0 ? $nfTotal / count($nfParams) : 0; @endphp
@foreach($nfParams as $i => $nf) @endforeach
# Parameter Nilai Kategori Evidence
{{ $i + 1 }} {{ $nf['label'] ?? '' }} {{ $nf['nilai'] ?? '' }} {{ $nf['kategori'] ?? '' }} {{ $nf['evidence'] ?? '—' }}
Total nilai mentah: {{ $nfTotal }}
Rata-rata (÷ 10): {{ number_format($nfRataRata, 1) }} × 0,30 = {{ number_format($cslScoring->skor_non_financial ?? 0, 1) }} poin
@endif
{{-- ⑤ Hasil Akhir CSL --}} @php $hasilBorderClass = match($cslState) { 'hijau' => 'border-success', 'kuning' => 'border-warning', default => 'border-danger' }; $hasilBgClass = match($cslState) { 'hijau' => 'bg-success bg-opacity-10', 'kuning' => 'bg-warning bg-opacity-10', default => 'bg-danger bg-opacity-10' }; $hasilLabel = match($cslState) { 'hijau' => '✅ Layak — Siap ke Signature', 'kuning' => '⚠️ Skor memenuhi syarat, namun gate compliance belum lolos → diteruskan ke Signature dengan catatan', default => '❌ Tidak Layak — Skor < 50, rekomendasikan tolak', }; @endphp
⑤ Hasil Akhir CSL Scoring
Eksternal (40%)
{{ number_format($cslScoring->nilai_eksternal, 0) }} × 0,40 = {{ number_format($cslScoring->skor_eksternal, 1) }}
Financial (30%)
{{ number_format($cslScoring->nilai_financial ?? 0, 0) }} × 0,30 = {{ number_format($cslScoring->skor_financial ?? 0, 1) }}
Non-Financial (30%)
{{ number_format($nfRataRata ?? 0, 1) }} × 0,30 = {{ number_format($cslScoring->skor_non_financial ?? 0, 1) }}
TOTAL CSL
{{ number_format($cslTotal, 1) }} poin
Kategori Risiko: {{ $cslKat }} (≥75 = Low, 50–74 = Moderate, <50 = High)
Gate Compliance: {{ $compAllOk ? '✅ Passed' : '⚠️ '.$compRejectedCount.' Rejected' }} Syarat lolos: skor ≥50 DAN semua 8 param Accepted
STATUS AKHIR: {{ $hasilLabel }}
@endif {{-- end if slik + cslScoring --}} @endif {{-- end if compParams not empty --}}
{{-- ═══════════════════════════════════════════════════════════════ --}} {{-- TAB 5: KESIMPULAN & SUBMIT --}} {{-- ═══════════════════════════════════════════════════════════════ --}}
Catatan DA & Rekomendasi
@csrf
{{-- ── Ringkasan Status DA (Gate sesuai dokumen) ── --}} @php // Gate 1 — Dokumen $reviewDok = collect($da->review_dokumen ?? []); $adaTidakValid = $reviewDok->contains('status', 'tidak_valid'); $adaBelumAda = $reviewDok->contains('status', 'belum_ada'); $dokBelumDireview = $reviewDok->isEmpty(); $dokStatus = match(true) { $dokBelumDireview => 'belum', $adaTidakValid => 'tidak_valid', $adaBelumAda => 'belum_ada', default => 'ok', }; // Gate 2 — SLIK $slikOk2 = (bool) $application->hasilSlik; // Gate 3 — Kriteria Manual (c, d, g, i) — harus sudah dikonfirmasi $kriteriaKes = collect($da->kriteria_debitur ?? []); $manualKodesKes = ['c_tidak_macet', 'd_tidak_restrukturisasi', 'g_status_lahan', 'i_masa_penguasaan_lahan']; $kritManualOkKes = collect($manualKodesKes)->every(function ($kode) use ($kriteriaKes) { $item = $kriteriaKes->firstWhere('kode', $kode); return $item && ($item['status'] ?? 'perlu_konfirmasi') !== 'perlu_konfirmasi'; }); // Gate 4 — Safeguard $safeguardOk = $da->safeguard_clear === true; // Compliance — informational only (bukan blocker) $compAllOkKes = collect($da->compliance_params ?? [])->every(fn($p) => ($p['status'] ?? '') === 'Accepted'); $compEmptyKes = empty($da->compliance_params); // Semua gate terpenuhi? (compliance bukan blocker sesuai spec §3.6) $gateLolos = $slikOk2 && $kritManualOkKes && $safeguardOk && $dokStatus === 'ok'; @endphp
Gate — Syarat Selesai DA (sesuai dokumen: "Dokumen valid + DA selesai")
{{-- Gate 1: Dokumen --}}
📄 Dokumen
@if($dokBelumDireview) ⏳ Belum direview @elseif($adaTidakValid) ❌ Ada Tidak Valid @elseif($adaBelumAda) ⚠️ Ada Belum Ada @else ✅ Semua Valid @endif
@if($adaTidakValid)
Kembalikan ke PL untuk diperbaiki
@endif
{{-- Gate 2: SLIK --}}
🏦 SLIK / iDeb OJK
@if($slikOk2) ✅ Terinput
{{ $application->hasilSlik->risk_label }}
@else ❌ Belum diinput @endif
{{-- Gate 3: Kriteria Manual --}}
📋 Kriteria Manual (C,D,G,I)
@if($kritManualOkKes) ✅ Semua Terkonfirmasi @else @php $belumKonfirmasiKes = collect($manualKodesKes)->filter(function ($kode) use ($kriteriaKes) { $item = $kriteriaKes->firstWhere('kode', $kode); return !$item || ($item['status'] ?? 'perlu_konfirmasi') === 'perlu_konfirmasi'; }); @endphp ❌ {{ $belumKonfirmasiKes->count() }} belum dikonfirmasi @endif
{{-- Gate 4: Safeguard --}}
🛡️ Safeguard
@if($da->safeguard_clear === true) ✅ Clear @elseif($da->safeguard_clear === false) ❌ Ada Masalah @else ⏳ Belum dicek @endif
{{-- Pesan gate jika ada yang belum lolos --}} @if(!$gateLolos)
Yang perlu diselesaikan (blocker):
    @if($dokBelumDireview)
  • Review semua dokumen di Tab Dokumen
  • @endif @if($adaTidakValid)
  • Ada dokumen Tidak Valid — kembalikan ke PL
  • @endif @if(!$slikOk2)
  • Input hasil SLIK di Tab SLIK
  • @endif @if(!$kritManualOkKes)
  • Konfirmasi kriteria manual C, D, G, I di Tab Kriteria (Section B)
  • @endif @if($da->safeguard_clear === null)
  • Isi Safeguard Check di Tab Kriteria
  • @endif @if($da->safeguard_clear === false)
  • Ada masalah safeguard — pertimbangkan kembalikan ke PL
  • @endif
@endif {{-- Compliance warning — informatif, bukan blocker --}} @if(!$compEmptyKes && !$compAllOkKes)
Informasi: {{ collect($da->compliance_params)->filter(fn($p) => ($p['status'] ?? '') !== 'Accepted')->count() }} compliance parameter Rejected — DA tetap bisa disubmit. Evaluasi final CSL dilakukan di Tahap 6 Finalisasi.
@endif
{{-- Kembalikan ke PL --}} @if(!$gateLolos) @else @endif
{{-- end tab-content --}}
{{-- end card DA --}} {{-- ══════════════════════════════════════════════════════════════════════ --}} {{-- SEKSI FINALISASI + CSL (Tahap 6) — dalam satu halaman dengan DA --}} {{-- ══════════════════════════════════════════════════════════════════════ --}}
@if($daSubmitted)
6
Tahap 6 — Finalisasi + CSL Scoring
@endif @if(! $daSubmitted) {{-- DA belum selesai — lock section --}} @else {{-- DA sudah submitted — tampilkan Finalisasi --}}
{{-- ── Tab: Ringkasan DA + FA ── --}}
Desk Analysis
Verifikator: {{ $da->verifikator?->name ?? '-' }}
Status: Submitted
Compliance: {{ $da->semua_compliance_accepted ? '8/8 Accepted' : 'Ada Rejected' }}
@if($da->catatan_da)
Catatan DA:
{{ $da->catatan_da }}
@endif @if($da->rekomendasi_plafond_da)
Rekomendasi DA: Rp {{ number_format($da->rekomendasi_plafond_da, 0, ',', '.') }} / {{ $da->rekomendasi_tenor_da ?? '-' }} bln
@endif
Field Analysis
@php $fa = $application->verifikasiFa; @endphp @if($fa)
PL: {{ $fa->pl?->name ?? '-' }}
Status: {{ $fa->isSubmitted() ? 'Submitted' : 'Draft' }}
Item tidak sesuai: {{ $fa->tidak_sesuai_count }} item
@if($fa->catatan_keseluruhan)
Catatan FA:
{{ $fa->catatan_keseluruhan }}
@endif @else
Data FA tidak ditemukan.
@endif
Tabulasi DA + FA
@forelse($tabulasi as $row) @empty @endforelse
SumberItemStatusCatatan
{{ $row['sumber'] }} {{ $row['item'] }} @php $st = $row['status'] ?? '-'; @endphp @if(in_array($st, ['Accepted', 'lulus', 'sesuai'])) ✅ {{ ucfirst($st) }} @elseif(in_array($st, ['Rejected', 'tidak', 'tidak_valid'])) ❌ {{ ucfirst($st) }} @else {{ $st }} @endif {{ $row['catatan'] ?: '-' }}
Belum ada data tabulasi
{{-- ── Tab: CSL Scoring ── --}}
Kalkulasi CSL Scoring
@csrf
@if(! $application->hasilSlik)
Hasil SLIK belum diinput. CSL tidak bisa dihitung. Input SLIK di Tab SLIK di atas terlebih dahulu.
@elseif($cslScoring)
{{ number_format($cslScoring->skor_total, 1) }}
{!! $cslScoring->kategori_risiko_badge !!}
{{ $cslScoring->status_layak ? '✅ Layak diproses' : '❌ Tidak layak' }}
Dihitung: {{ $cslScoring->dihitung_pada?->format('d M Y H:i') }}
Breakdown Komponen
Eksternal (SLIK/Pefindo)
Bobot 40% | Risk: {{ $application->hasilSlik?->risk_label }}
{{ $cslScoring->nilai_eksternal }}/100
Skor: {{ number_format($cslScoring->skor_eksternal, 2) }}
Financial (RPC)
Bobot 30% | Rasio RPC/Angsuran: {{ number_format($cslScoring->rasio_rpc, 2) }}×
{{ $cslScoring->nilai_financial }}/100
Skor: {{ number_format($cslScoring->skor_financial, 2) }}
Non-Financial
Bobot 30% | 10 parameter
{{ number_format($cslScoring->skor_non_financial / 0.3, 1) }}/100
Skor: {{ number_format($cslScoring->skor_non_financial, 2) }}
@if($cslScoring->params_non_financial)
10 Parameter Non-Financial
@foreach($cslScoring->params_non_financial as $p) @endforeach
ParameterKategoriNilaiBobotWeighted
{{ $p['label'] }} {{ $p['kategori'] ?? '-' }} {{ $p['nilai'] }} {{ $p['bobot'] }} {{ number_format($p['weighted'], 4) }}
@endif
8 Compliance Parameter
@foreach($cslScoring->compliance_params ?? [] as $i => $p) @endforeach
#ParameterStatusCatatan
{{ $i + 1 }} {{ $p['label'] }} {{ $p['status'] ?? '-' }} {{ $p['catatan'] ?? '-' }}
{{ $cslScoring->semua_compliance_accepted ? '✅ Semua compliance terpenuhi' : '❌ Ada compliance yang rejected' }} — CSL lolos jika semua 8 compliance = Accepted DAN skor ≥ 50.
@else
SLIK sudah diinput. Klik tombol "Hitung CSL" di atas untuk menghitung skor.
@endif
{{-- ── Tab: Submit ke Signature ── --}}
Rekomendasi Final & Submit ke Signature
@csrf
Plafond diajukan: Rp {{ number_format($application->plafond_diajukan ?? 0, 0, ',', '.') }}
@php $siapSubmit = $cslScoring !== null && $application->hasilSlik !== null; @endphp @if(! $siapSubmit)
Syarat submit belum terpenuhi:
    @if(! $application->hasilSlik)
  • SLIK belum diinput (di Tab SLIK di atas)
  • @endif @if(! $cslScoring)
  • CSL belum dihitung (di tab CSL Scoring)
  • @endif
@else
Skor CSL
{{ number_format($cslScoring->skor_total, 1) }}
Kategori
{!! $cslScoring->kategori_risiko_badge !!}
Compliance
{{ $cslScoring->semua_compliance_accepted ? '✅ OK' : '❌ Gagal' }}
Hasil
{{ $cslScoring->status_layak ? '✅ Layak' : '❌ Tidak Layak' }}
@csrf
@endif
{{-- end tab-content finalisasi --}}
{{-- end card finalisasi --}} @endif
{{-- end seksiFinal --}}
{{-- end container --}} {{-- Modal Kembalikan ke PL --}} @endsection @push('scripts') @endpush