@php $fmt = fn($v) => 'Rp ' . number_format((float)$v, 0, ',', '.'); $diff = fn($real, $target) => $real - $target; $diffClass = fn($v) => $v >= 0 ? 'text-green-600 dark:text-green-400' : 'text-red-500 dark:text-red-400'; $diffSign = fn($v) => $v >= 0 ? '+' : ''; @endphp

Forecasting Finance

Proyeksi keuangan 3 skenario per tim

{{-- Filters --}}
@php $teams = $this->getComputedData(); @endphp @if(empty($teams))
Tidak ada tim.
@else
@foreach($teams as $t) @php $f = $t['forecast']; @endphp
{{-- Team header --}}

{{ $t['team']->name }}

{{ date('F', mktime(0,0,0,$month,1)) }} {{ $year }}

@if(!$f) Belum ada data @endif
@if(!$f)
Forecasting belum diisi untuk periode ini.
@else {{-- Beginning Balance --}}

Saldo Awal

{{ $fmt($f->beginning_balance) }}

{{-- 3-scenario summary cards --}}
@php $scenarios = [ [ 'label' => 'Real', 'color' => 'blue', 'income' => $f->income_total_nominal_real, 'expense' => $f->expense_total_nominal_real, 'profit' => $f->estimated_profit_real, 'ending' => $f->ending_balance_real, ], [ 'label' => 'Target', 'color' => 'purple', 'income' => $f->income_total_nominal_target, 'expense' => $f->expense_total_nominal_target, 'profit' => $f->estimated_profit_target, 'ending' => $f->ending_balance_target, ], [ 'label' => 'Real Income / Est. Expenses', 'color' => 'amber', 'income' => $f->income_total_nominal_real_income_estimated_expenses, 'expense' => $f->expense_total_nominal_real_income_estimated_expenses, 'profit' => $f->estimated_profit_real_income_estimated_expenses, 'ending' => $f->ending_balance_real_income_estimated_expenses, ], ]; $colorMap = [ 'blue' => ['bg' => 'bg-blue-50 dark:bg-blue-950/30', 'badge' => 'bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300', 'profit_pos' => 'text-blue-600 dark:text-blue-400'], 'purple' => ['bg' => 'bg-purple-50 dark:bg-purple-950/30', 'badge' => 'bg-purple-100 text-purple-700 dark:bg-purple-900 dark:text-purple-300', 'profit_pos' => 'text-purple-600 dark:text-purple-400'], 'amber' => ['bg' => 'bg-amber-50 dark:bg-amber-950/30', 'badge' => 'bg-amber-100 text-amber-700 dark:bg-amber-900 dark:text-amber-300', 'profit_pos' => 'text-amber-600 dark:text-amber-400'], ]; @endphp @foreach($scenarios as $s) @php $c = $colorMap[$s['color']]; $profit = (float)$s['profit']; @endphp
{{ $s['label'] }}

Total Income

{{ $fmt($s['income']) }}

Total Expense

{{ $fmt($s['expense']) }}

Est. Profit

{{ $fmt($s['profit']) }}

Ending Balance

{{ $fmt($s['ending']) }}

@endforeach
{{-- Real vs Target comparison row --}} @php $incDiff = $diff($f->income_total_nominal_real, $f->income_total_nominal_target); $expDiff = $diff($f->expense_total_nominal_real, $f->expense_total_nominal_target); $profitDiff = $diff($f->estimated_profit_real, $f->estimated_profit_target); @endphp

Income vs Target

{{ $diffSign($incDiff) }}{{ $fmt($incDiff) }}

Expense vs Target

{{ $diffSign($expDiff) }}{{ $fmt($expDiff) }}

Profit vs Target

{{ $diffSign($profitDiff) }}{{ $fmt($profitDiff) }}

{{-- Income & Expense breakdown --}}
{{-- Estimated Incomes --}}

Estimasi Pendapatan

@if($f->estimatedIncomes->isEmpty())

Belum ada item.

@else @foreach($f->estimatedIncomes as $item) @endforeach
Deskripsi Real Target
{{ $item->description }} {{ $fmt($item->nominal_real) }} {{ $fmt($item->nominal_target) }}
Total {{ $fmt($f->income_total_nominal_real) }} {{ $fmt($f->income_total_nominal_target) }}
@endif
{{-- Estimated Expenses --}}

Estimasi Pengeluaran

@if($f->estimatedExpenses->isEmpty())

Belum ada item.

@else @foreach($f->estimatedExpenses as $item) @endforeach
Deskripsi Real Target
{{ $item->description }} {{ $fmt($item->nominal_real) }} {{ $fmt($item->nominal_target) }}
Total {{ $fmt($f->expense_total_nominal_real) }} {{ $fmt($f->expense_total_nominal_target) }}
@endif
@endif
@endforeach
@endif