Financial Analysis
Financial Pro Forma
Investment pro forma with IRR, NPV, break-even analysis, unit mix and sensitivity matrix.
@if(session('success'))
{{ session('success') }}
@endif
{{-- Generate Form --}}
@if($proforma)
@php
$summary = $proforma->summary ?? [];
$assumptions = $proforma->assumptions ?? [];
$totalInvestment = $summary['total_investment'] ?? 0;
$totalRevenue = $summary['total_revenue'] ?? 0;
$grossProfit = $summary['gross_profit'] ?? 0;
$irrPct = $proforma->irr_pct ?? $summary['irr_pct'] ?? 0;
$npvVal = $proforma->npv ?? $summary['npv'] ?? 0;
$breakEven = $proforma->break_even_months ?? $summary['break_even_month'] ?? null;
$profitMargin = $summary['profit_margin_pct'] ?? 0;
$roiPct = $summary['roi_pct'] ?? 0;
$duration = $summary['project_duration_months'] ?? 0;
// Build cost breakdown from assumptions
$costBreakdown = [];
if (!empty($assumptions['total_land_cost'])) $costBreakdown['Land Cost'] = $assumptions['total_land_cost'];
if (!empty($assumptions['total_construction_cost'])) $costBreakdown['Construction'] = $assumptions['total_construction_cost'];
$approvalAmt = ($assumptions['total_construction_cost'] ?? 0) * (($assumptions['approval_cost_pct'] ?? 0) / 100);
if ($approvalAmt > 0) $costBreakdown['Approvals & Permits'] = $approvalAmt;
$marketingAmt = ($assumptions['total_construction_cost'] ?? 0) * (($assumptions['marketing_cost_pct'] ?? 0) / 100);
if ($marketingAmt > 0) $costBreakdown['Marketing'] = $marketingAmt;
$contingencyAmt = ($assumptions['total_construction_cost'] ?? 0) * (($assumptions['contingency_pct'] ?? 0) / 100);
if ($contingencyAmt > 0) $costBreakdown['Contingency'] = $contingencyAmt;
@endphp
{{-- Key Metrics --}}
@php
$metrics = [
['Total Investment', '₹ ' . number_format($totalInvestment), '#60a5fa', 'wallet'],
['Total Revenue', '₹ ' . number_format($totalRevenue), '#22c55e', 'trending-up'],
['Net Profit', '₹ ' . number_format($grossProfit), $grossProfit >= 0 ? '#22c55e' : '#ef4444', 'banknote'],
['IRR', number_format($irrPct, 1) . '%', $irrPct >= 18 ? '#22c55e' : ($irrPct >= 10 ? '#eab308' : '#ef4444'), 'percent'],
['Break-even', $breakEven ? $breakEven . ' months' : '—', '#f97316', 'clock'],
];
@endphp
@foreach($metrics as [$label, $value, $color, $icon])
{{ $label }}
{{ $value }}
@endforeach
{{-- Investment Analysis --}}
{{ $proforma->profitability_label ?? 'Unknown' }}
{{-- NPV + Profit Margin + ROI + Duration --}}
Net Present Value
₹ {{ number_format($npvVal) }}
Profit Margin
{{ number_format($profitMargin, 1) }}%
Return on Investment
{{ number_format($roiPct, 1) }}%
Project Duration
{{ $duration }} months
{{-- Cost Breakdown --}}
@if(count($costBreakdown) > 0)
Cost Breakdown
@foreach($costBreakdown as $category => $amount)
{{ $category }}
₹ {{ number_format($amount) }}
@if($totalInvestment > 0)
{{ number_format($amount / $totalInvestment * 100, 1) }}%
@endif
@endforeach
@endif
{{-- Key Assumptions --}}
Key Assumptions
@php
$assumptionDisplay = [
'Plot Area' => number_format($assumptions['plot_area_sqm'] ?? 0) . ' sqm',
'Buildable Area' => number_format($assumptions['buildable_area_sqm'] ?? 0) . ' sqm',
'Saleable Area' => number_format($assumptions['saleable_area_sqm'] ?? 0) . ' sqm',
'Construction ₹/sqft'=> '₹ ' . number_format($assumptions['construction_cost_per_sqft'] ?? 0),
'Sale Rate ₹/sqft' => '₹ ' . number_format($assumptions['sale_rate_per_sqft'] ?? 0),
'Max Floors' => $assumptions['max_floors'] ?? '—',
'Construction' => ($assumptions['construction_months'] ?? 0) . ' months',
'Absorption' => ($assumptions['absorption_months'] ?? 0) . ' months',
];
@endphp
@foreach($assumptionDisplay as $aLabel => $aValue)
{{ $aLabel }}
{{ $aValue }}
@endforeach
{{-- Unit Mix --}}
@if(!empty($proforma->unit_mix))
| Unit Type |
Size (sqft) |
Qty |
Rate ₹/sqft |
Unit Price |
Total Revenue |
@php $totalUnitRevenue = 0; @endphp
@foreach($proforma->unit_mix as $unit)
@php $totalUnitRevenue += $unit['total'] ?? 0; @endphp
| {{ $unit['type'] ?? '—' }} |
{{ number_format($unit['size_sqft'] ?? 0) }} |
{{ $unit['count'] ?? 0 }} |
₹ {{ number_format($unit['rate_sqft'] ?? 0) }} |
₹ {{ number_format(($unit['size_sqft'] ?? 0) * ($unit['rate_sqft'] ?? 0)) }} |
₹ {{ number_format($unit['total'] ?? 0) }} |
@endforeach
| Total |
{{ array_sum(array_column($proforma->unit_mix, 'count')) }} |
|
|
₹ {{ number_format($totalUnitRevenue) }} |
@endif
{{-- Sensitivity Analysis --}}
@if(!empty($proforma->sensitivity))
@php
$dimLabels = [
'construction_cost' => ['label' => 'Construction Cost Variation', 'icon' => 'hard-hat', 'color' => '#f97316'],
'sale_rate' => ['label' => 'Sale Rate Variation', 'icon' => 'trending-up', 'color' => '#22c55e'],
'absorption_period' => ['label' => 'Absorption Period Variation', 'icon' => 'clock', 'color' => '#60a5fa'],
];
@endphp
@foreach($proforma->sensitivity as $dimension => $scenarios)
@php $dimInfo = $dimLabels[$dimension] ?? ['label' => ucwords(str_replace('_', ' ', $dimension)), 'icon' => 'activity', 'color' => '#a78bfa']; @endphp
@foreach($scenarios as $scenario)
@php
$changePct = $scenario['change_pct'] ?? 0;
$scenarioIrr = $scenario['irr_pct'] ?? 0;
$scenarioNpv = $scenario['npv'] ?? 0;
$isBase = $changePct === 0;
$changeLabel = $changePct === 0 ? 'Base' : ($changePct > 0 ? '+' . $changePct . '%' : $changePct . '%');
@endphp
{{ $changeLabel }}
{{ number_format($scenarioIrr, 1) }}%
IRR
NPV: ₹ {{ number_format($scenarioNpv / 100000, 1) }}L
@endforeach
@endforeach
@endif
@else
No Pro Forma Yet
Click "Generate" above to create a detailed financial analysis.
@endif