@extends('layouts.app') @section('title', 'Hasil Analisis - FIN-ANALYSIS PRO') @push('styles') @endpush @section('content')
{{-- ═══ HEADER ═══ --}}

Hasil Analisis Z-Score

{{ $companyData['company_name'] }} — {{ $companyData['period'] }}

@if(isset($analysisResult)) Unduh PDF @endif
@csrf
{{-- ═══ INFO PERUSAHAAN ═══ --}}
Perusahaan
{{ $companyData['company_name'] }}
Bidang Usaha
{{ $companyData['business_field'] === 'Lainnya' ? ($companyData['other_field'] ?? 'Lainnya') : $companyData['business_field'] }}
Periode
{{ $companyData['period'] }}
Mata Uang
{{ $companyData['currency'] }}
{{-- ═══ Z-SCORE UTAMA ═══ --}} @php $zCategory = $category ?? 'grey'; $zColors = [ 'safe' => ['bg'=>'#D1FAE5','border'=>'#6EE7B7','text'=>'#065F46','label'=>'ZONA AMAN', 'desc'=>'Perusahaan dalam kondisi keuangan yang sehat'], 'grey' => ['bg'=>'#FEF3C7','border'=>'#FCD34D','text'=>'#92400E','label'=>'ZONA WASPADA', 'desc'=>'Perusahaan perlu perhatian pada kondisi keuangannya'], 'distress' => ['bg'=>'#FEE2E2','border'=>'#FCA5A5','text'=>'#991B1B','label'=>'ZONA BERBAHAYA','desc'=>'Perusahaan berpotensi mengalami kesulitan keuangan'], ]; $zc = $zColors[$zCategory] ?? $zColors['grey']; $zoneAccent = $zCategory === 'safe' ? '#1D9E75' : ($zCategory === 'grey' ? '#EF9F27' : '#E24B4A'); /* ════════════════════════════════════════════════ GAUGE GEOMETRY ViewBox: 440 × 260 Hub centre: CX=220, CY=220 Arc band: R_OUT=168, R_IN=112 Gauge sweeps from the left (score=0) clockwise to the right (score=5), i.e. a 180° half-circle. Convention: "gauge-degree" gd ∈ [0,180] gd=0 → leftmost (score 0) gd=180 → rightmost (score 5) Standard math angle = gd − 180 (so gd=0 → −180° = left) ════════════════════════════════════════════════ */ $GCX = 220; $GCY = 220; $R_OUT = 168; $R_IN = 112; $MAX_S = 5; /* score → gauge-degree */ $s2g = fn($s) => ($s / $MAX_S) * 180.0; /* gauge-degree → SVG x,y */ $xy = fn($r, $gd) => [ round($GCX + $r * cos(deg2rad($gd - 180.0)), 2), round($GCY + $r * sin(deg2rad($gd - 180.0)), 2), ]; /* annular segment between gd1 and gd2, rOut / rIn */ $seg = function($gd1, $gd2, $rO, $rI) use ($xy) { [$ox1,$oy1] = $xy($rO, $gd1); [$ox2,$oy2] = $xy($rO, $gd2); [$ix2,$iy2] = $xy($rI, $gd2); [$ix1,$iy1] = $xy($rI, $gd1); $lg = (($gd2 - $gd1) > 180) ? 1 : 0; return "M $ox1 $oy1 A $rO $rO 0 $lg 1 $ox2 $oy2 L $ix2 $iy2 A $rI $rI 0 $lg 0 $ix1 $iy1 Z"; }; /* key angles */ $gd0 = $s2g(0); // 0 $gd123 = $s2g(1.23); // 44.28 $gd29 = $s2g(2.9); // 104.4 $gd5 = $s2g(5); // 180 /* needle geometry for initial PHP render */ $ndlGd = $s2g(min(max($zScore, 0), $MAX_S)); $ndlRad = deg2rad($ndlGd - 180.0); $NL = $R_IN - 8; // tip reaches inner edge of arc − 8px $NT = 24; // tail behind hub $NW = 5.5; // half-width at hub [$ntx,$nty] = [$GCX + $NL * cos($ndlRad), $GCY + $NL * sin($ndlRad)]; [$nbx,$nby] = [$GCX - $NT * cos($ndlRad), $GCY - $NT * sin($ndlRad)]; $npx = -sin($ndlRad) * $NW; $npy = cos($ndlRad) * $NW; $initPts = implode(' ', [ round($ntx,2).','.round($nty,2), round($GCX+$npx,2).','.round($GCY+$npy,2), round($nbx,2).','.round($nby,2), round($GCX-$npx,2).','.round($GCY-$npy,2), ]); /* tick marks */ $R_T1 = $R_OUT + 5; $R_T2_MAJ = $R_OUT + 18; $R_T2_MIN = $R_OUT + 11; $R_LBL = $R_OUT + 30; $ticks = []; for ($i = 0; $i <= 10; $i++) { $gd = $i / 10 * 180.0; $maj = ($i % 2 === 0); [$x1,$y1] = $xy($R_T1, $gd); [$x2,$y2] = $xy($maj ? $R_T2_MAJ : $R_T2_MIN, $gd); [$lx,$ly] = $xy($R_LBL, $gd); $ticks[] = ['x1'=>$x1,'y1'=>$y1,'x2'=>$x2,'y2'=>$y2, 'lx'=>$lx,'ly'=>$ly,'lv'=>number_format($i/10*5,1),'maj'=>$maj]; } /* zone label mid-points */ $R_ZL = ($R_OUT + $R_IN) / 2; $zLabels = [ ['gd'=>$s2g(0.615), 'txt'=>'Bahaya'], ['gd'=>$s2g(2.065), 'txt'=>'Waspada'], ['gd'=>$s2g(3.95), 'txt'=>'Aman'], ]; foreach ($zLabels as &$zl) { [$zl['x'],$zl['y']] = $xy($R_ZL, $zl['gd']); } unset($zl); /* boundary dividers at 1.23 and 2.9 */ $divGds = [$gd123, $gd29]; @endphp
{{-- Score Card --}}
Altman Z'-Score
{{ number_format($zScore, 4) }}
{{ $zc['label'] }}
{{ $zc['desc'] }}
{{-- ═══ GAUGE SVG ═══ --}}
Skala Z-Score
{{-- Card background --}} {{-- Full-track background arc --}} {{-- Zone: Berbahaya (red) --}} {{-- Zone: Waspada (amber) --}} {{-- Zone: Aman (green) --}} {{-- Boundary dividers --}} @foreach($divGds as $dg) @php [$dx1,$dy1] = $xy($R_IN + 2, $dg); [$dx2,$dy2] = $xy($R_OUT - 2, $dg); @endphp @endforeach {{-- Tick marks + labels --}} @foreach($ticks as $t) @if($t['maj']) {{ $t['lv'] }} @endif @endforeach {{-- Zone text labels --}} @foreach($zLabels as $zl) {{ $zl['txt'] }} @endforeach {{-- ─── NEEDLE (JS will animate from 0°) ─── --}} {{-- Hub: three concentric circles --}} {{-- Score text — sits below hub inside the open arc area --}} {{ number_format($zScore, 2) }} Z-Score
{{-- /gaugeWrapper --}} {{-- Legend --}}
< 1.23 Berbahaya
1.23–2.9 Waspada
> 2.9 Aman
{{-- /gauge card --}}
{{-- /z-score grid --}} {{-- ═══ KOMPONEN X1–X5 ═══ --}}
Komponen Z-Score
@php $components = [ 'X1' => ['val'=>$zScoreComponents['x1'], 'weight'=>'× 0.717', 'desc'=>'Modal Kerja / Total Aset'], 'X2' => ['val'=>$zScoreComponents['x2'], 'weight'=>'× 0.847', 'desc'=>'Laba Ditahan / Total Aset'], 'X3' => ['val'=>$zScoreComponents['x3'], 'weight'=>'× 3.107', 'desc'=>'EBIT / Total Aset'], 'X4' => ['val'=>$zScoreComponents['x4'], 'weight'=>'× 0.420', 'desc'=>'Ekuitas / Total Utang'], 'X5' => ['val'=>$zScoreComponents['x5'], 'weight'=>'× 0.998', 'desc'=>'Pendapatan / Total Aset'], ]; @endphp @foreach($components as $name => $comp)
{{ $name }}
{{ number_format($comp['val'], 4) }}
{{ $comp['weight'] }}
{{ $comp['desc'] }}
@endforeach
{{-- Formula --}}
Z' = 0.717({{ number_format($zScoreComponents['x1'],4) }}) + 0.847({{ number_format($zScoreComponents['x2'],4) }}) + 3.107({{ number_format($zScoreComponents['x3'],4) }}) + 0.420({{ number_format($zScoreComponents['x4'],4) }}) + 0.998({{ number_format($zScoreComponents['x5'],4) }}) = {{ number_format($zScore, 4) }}
{{-- ═══ DETAIL LAPORAN KEUANGAN ═══ --}}
Detail Laporan Keuangan
@php $cur = $companyData['currency']; $fd = $financialData; $fmt = fn($v) => $cur . ' ' . number_format($v, 0, ',', '.'); @endphp
{{-- Neraca --}}
Neraca
@foreach([ ['label'=>'Aset Lancar', 'value'=>$fd['aset_lancar']??0, 'bold'=>false], ['label'=>'Aset Tetap', 'value'=>$fd['aset_tetap']??0, 'bold'=>false], ['label'=>'Total Aset', 'value'=>$fd['total_aset']??0, 'bold'=>true], ['label'=>'Utang Lancar', 'value'=>$fd['utang_lancar']??0, 'bold'=>false], ['label'=>'Utang Jangka Panjang', 'value'=>$fd['utang_jangka_panjang']??0, 'bold'=>false], ['label'=>'Total Utang', 'value'=>$fd['total_utang']??0, 'bold'=>true], ['label'=>'Nilai Buku Ekuitas', 'value'=>$fd['nilai_buku_ekuitas']??0, 'bold'=>true], ] as $row) @endforeach
{{ $row['label'] }} {{ $fmt($row['value']) }}
{{-- Laba Rugi --}}
Laba Rugi
@foreach([ ['label'=>'Pendapatan', 'value'=>$fd['pendapatan']??0, 'bold'=>false], ['label'=>'Biaya Operasional', 'value'=>$fd['biaya_operasional']??0, 'bold'=>false], ['label'=>'Laba Sebelum Pajak', 'value'=>$fd['laba_sebelum_pajak']??0, 'bold'=>true], ['label'=>'Pengambilan Pribadi (Prive)', 'value'=>$fd['prive']??0, 'bold'=>false], ['label'=>'Laba Ditahan', 'value'=>$fd['laba_ditahan']??0, 'bold'=>true], ] as $row) @endforeach
{{ $row['label'] }} {{ $fmt($row['value']) }}
{{-- ═══ INTERPRETASI & REKOMENDASI ═══ --}}
Interpretasi & Rekomendasi
@if($zCategory === 'safe')

Dengan Z-Score {{ number_format($zScore, 4) }}, perusahaan {{ $companyData['company_name'] }} berada di Zona Aman. Kondisi keuangan perusahaan dinilai sehat dan tidak menunjukkan tanda-tanda kesulitan finansial dalam waktu dekat.

@elseif($zCategory === 'grey')

Dengan Z-Score {{ number_format($zScore, 4) }}, perusahaan {{ $companyData['company_name'] }} berada di Zona Waspada (Grey Zone). Diperlukan perhatian khusus terhadap kondisi keuangan dan langkah perbaikan.

@else

Dengan Z-Score {{ number_format($zScore, 4) }}, perusahaan {{ $companyData['company_name'] }} berada di Zona Berbahaya (Financial Distress). Diperlukan tindakan segera untuk mencegah kebangkrutan.

@endif
{{-- ═══ TOMBOL AKSI BAWAH ═══ --}}
Lihat Riwayat @if(isset($analysisResult)) Preview Laporan Unduh PDF @endif
@endsection @push('scripts') @endpush