@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'] }}
{{-- ═══ 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)
{{ $row['label'] }}
{{ $fmt($row['value']) }}
@endforeach
{{-- 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)
{{ $row['label'] }}
{{ $fmt($row['value']) }}
@endforeach
{{-- ═══ 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.
@foreach(['Pertahankan rasio likuiditas yang baik','Terus optimalkan efisiensi operasional','Pertimbangkan ekspansi bisnis yang terencana','Jaga struktur modal yang sehat'] as $item)
{{ $item }}
@endforeach
@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.
@foreach(['Evaluasi dan efisiensi biaya operasional','Tingkatkan pendapatan melalui strategi pemasaran','Kelola utang dengan hati-hati dan hindari penambahan utang baru','Perkuat modal kerja perusahaan'] as $item)
{{ $item }}
@endforeach
@else
Dengan Z-Score {{ number_format($zScore, 4) }} , perusahaan {{ $companyData['company_name'] }} berada di Zona Berbahaya (Financial Distress) . Diperlukan tindakan segera untuk mencegah kebangkrutan.
@foreach(['Segera lakukan restrukturisasi keuangan','Konsultasikan dengan konsultan keuangan profesional','Kurangi utang dan negosiasikan ulang syarat pembayaran','Cari sumber pendanaan baru atau investor','Evaluasi aset yang dapat dijual untuk meningkatkan likuiditas'] as $item)
{{ $item }}
@endforeach
@endif
{{-- ═══ TOMBOL AKSI BAWAH ═══ --}}
@endsection
@push('scripts')
@endpush