@extends('portal.layout') @section('title', 'Feasibility Report #'.str_pad($report->id, 5, '0', STR_PAD_LEFT)) @section('content') @php $score = $report->feasibility_score ?? 0; $scoreColor = $score >= 70 ? 'var(--green)' : ($score >= 40 ? 'var(--yellow)' : 'var(--red)'); $scoreLabel = $score >= 70 ? 'Feasible' : ($score >= 40 ? 'Marginal' : 'Challenging'); $scoreBadge = $score >= 70 ? 'badge-green' : ($score >= 40 ? 'badge-yellow' : 'badge-red'); $cost = $report->cost_estimates ?? []; $projectTypeLabels = ['residential' => 'Residential', 'commercial' => 'Commercial', 'industrial' => 'Industrial', 'mixed' => 'Mixed Use']; $ptLabel = $projectTypeLabels[$report->project_type ?? 'residential'] ?? 'Residential'; @endphp
@if($report->status === 'completed') @include('portal.partials.report-sidebar') @endif
{{-- Header --}}
FEASIBILITY REPORT

{{ $report->address ?? 'Plot Analysis' }}

Report #{{ str_pad($report->id, 5, '0', STR_PAD_LEFT) }} {{ $report->created_at?->diffForHumans() }} @if($report->zone) {{ $report->zone->name }} @endif {{ $ptLabel }}
← New Analysis
@if($report->status === 'failed')
Analysis failed: {{ $report->result_data['error'] ?? 'Unknown error. Please try again.' }}
@endif @if($report->status === 'completed') {{-- ═══════════ TAB NAVIGATION ═══════════ --}}
{{-- ═══════════ SUMMARY TAB (Quick View — answer the user's question fast) ═══════════ --}}
{{-- Score Banner --}}
{{ $score }}
{{ $scoreLabel }}
out of 100
@if($report->max_buildable_area_sqm)
{{ number_format($report->max_buildable_area_sqm) }}
Max BUA (sqm)
@endif @if($report->max_floors)
{{ $report->max_floors }}
Max Floors
@endif @if($report->zoneRule)
{{ $report->zoneRule->max_far }}
FAR / FSI
@endif
{{-- Quick Answer: What Can Be Built --}}
🏗 What Can Be Built Here?
Max Built-up Area
{{ $report->max_buildable_area_sqm ? number_format($report->max_buildable_area_sqm).' sqm' : '—' }}
across {{ $report->max_floors ?? '—' }} floor{{ ($report->max_floors ?? 1) != 1 ? 's' : '' }}
Approx. Units @ 75 sqm
{{ $report->max_buildable_area_sqm ? floor($report->max_buildable_area_sqm / 75).' units' : '—' }}
typical 2-BHK size
Ground Floor Footprint
{{ $report->ground_coverage_sqm ? number_format($report->ground_coverage_sqm).' sqm' : '—' }}
{{ $report->zoneRule?->max_ground_coverage ? round($report->zoneRule->max_ground_coverage * 100).'% coverage' : '' }}
{{-- Key Parameters (compact summary) --}}
Key Parameters
@php $summaryParams = [ ['Plot Area', $report->plot_area_sqm ? number_format($report->plot_area_sqm).' sqm' : '—'], ['Road Width', $report->road_width_m ? $report->road_width_m.' m' : '—'], ['Max Height', $report->zoneRule?->max_height_m ? $report->zoneRule->max_height_m.' m' : ($report->result_data['max_height_m_allowed'] ?? '—')], ['Zone', $report->zone?->name ?? '—'], ]; @endphp @foreach($summaryParams as [$label, $value])
{{ $label }} {{ $value }}
@endforeach
{{-- Setbacks (compact) --}} @if($report->setback_summary)
Required Setbacks
@foreach(['front_m' => 'Front', 'side_m' => 'Side', 'rear_m' => 'Rear'] as $key => $dir) @if(isset($report->setback_summary[$key]))
{{ $report->setback_summary[$key] }}m
{{ $dir }}
@endif @endforeach
@endif
{{-- Height rule explanation (shown when road-width-based height) --}} @if(($report->result_data['height_rule_type'] ?? 'fixed') === 'road_width_based')
📐 Height Rule: Road-Width Based
Max height = road width @if($report->result_data['height_multiplier'] ?? null) ({{ $report->road_width_m }}m) × {{ $report->result_data['height_multiplier'] }} @endif @if(($report->setback_summary['has_extra_setback'] ?? false)) + setback bonus @endif = {{ $report->result_data['max_height_m_allowed'] ?? '—' }}m
@endif {{-- Quick cost preview --}} @if(!empty($cost))
@php $quickCost = [ ['Construction', '₹'.number_format($cost['construction_cost_min_inr']).'+', '#60a5fa'], ['Market Value', '₹'.number_format($cost['gross_development_value_inr']), '#22c55e'], ['Est. Profit', ($cost['estimated_profit_inr'] >= 0 ? '₹' : '-₹').number_format(abs($cost['estimated_profit_inr'])), $cost['estimated_profit_inr'] >= 0 ? '#22c55e' : '#ef4444'], ['ROI', $cost['roi_pct'].'%', $cost['roi_pct'] >= 30 ? '#22c55e' : ($cost['roi_pct'] >= 15 ? '#eab308' : '#ef4444')], ]; @endphp @foreach($quickCost as [$label, $value, $color])
{{ $value }}
{{ $label }}
@endforeach
@endif {{-- Manual override indicator --}} @if($report->has_manual_overrides && !empty($report->manual_overrides))
⚙ Manual overrides applied: @foreach($report->manual_overrides as $key => $value) {{ str_replace('_', ' ', ucfirst(str_replace('_m', '', $key))) }}: {{ $value }} @endforeach @if($report->parent_report_id) ← Original @endif
@endif {{-- Quick actions --}}
🏗 3D Building View 📊 What-If Scenarios
{{-- /summary tab --}} {{-- ═══════════ FULL DETAILS TAB ═══════════ --}}
{{-- Left Column --}}
{{-- Building Parameters --}}
Building Parameters
@php $params = [ ['Plot Area', $report->plot_area_sqm ? number_format($report->plot_area_sqm).' sqm' : '—', null], ['Max Buildable Area', $report->max_buildable_area_sqm ? number_format($report->max_buildable_area_sqm).' sqm' : '—', '#60a5fa'], ['Ground Coverage', $report->ground_coverage_sqm ? number_format($report->ground_coverage_sqm).' sqm' : '—', null], ['Max Floors', $report->max_floors ?? '—', '#f97316'], ['FAR / FSI', $report->zoneRule?->max_far ?? '—', '#a78bfa'], ['Max Height', $report->zoneRule?->max_height_m ? $report->zoneRule->max_height_m.' m' : '—', null], ['Road Width', $report->road_width_m ? $report->road_width_m.' m' : '—', '#2dd4bf'], ['Ground Coverage %', $report->zoneRule?->max_ground_coverage ? ($report->zoneRule->max_ground_coverage * 100).'%' : '—', null], ['Parking Required', isset($report->result_data['parking_required_ecs']) ? $report->result_data['parking_required_ecs'].' ECS' : '—', null], ]; @endphp @foreach($params as [$label, $value, $color])
{{ $label }} {{ $value }}
@endforeach
{{-- Setbacks --}} @if($report->setback_summary)
Required Setbacks
@foreach(['front_m' => 'Front', 'side_m' => 'Side', 'rear_m' => 'Rear'] as $key => $dir) @if(isset($report->setback_summary[$key]))
{{ $report->setback_summary[$key] }}m
{{ $dir }}
@endif @endforeach
@if(!empty($report->setback_summary['note']))
{{ $report->setback_summary['note'] }}
@endif
@endif {{-- Regulation Source --}} @if($report->zoneRule)
Applied Regulation
@foreach([ ['Rule Source', $report->zoneRule->rule_source ?? '—'], ['Road Width Band', $report->zoneRule->road_width_label ?? '—'], ['Open Space %', $report->zoneRule->open_space_pct ? $report->zoneRule->open_space_pct.'%' : '—'], ['Parking Ratio', $report->zoneRule->parking_ratio_ecs ? $report->zoneRule->parking_ratio_ecs.' ECS / 100 sqm' : '—'], ] as [$label, $value])
{{ $label }} {{ $value }}
@endforeach @if($report->zoneRule->special_conditions)
⚠ {{ $report->zoneRule->special_conditions }}
@endif
@endif
{{-- Right Column --}}
{{-- Location Map + Info --}}
@if($report->latitude && $report->longitude)
@endif
Location
@foreach([ ['Address', $report->address ?? '—'], ['State', $report->state?->name ?? '—'], ['City', $report->city?->name ?? '—'], ['Zone', $report->zone?->name ?? '—'], ['Coordinates', $report->latitude && $report->longitude ? round($report->latitude,5).', '.round($report->longitude,5) : '—'], ['Regulation', $report->zoneRule?->rule_source ?? '—'], ] as [$label, $value])
{{ $label }} {{ $value }}
@endforeach
{{-- Permitted Uses --}} @if($report->permitted_uses && count($report->permitted_uses))
Permitted Uses
@foreach($report->permitted_uses as $use) {{ $use }} @endforeach
@endif {{-- Restrictions --}} @if($report->restriction_flags && count(array_filter($report->restriction_flags)))
⚠ Restriction Flags
@foreach($report->restriction_flags as $flag => $active) @if($active)
{{ str_replace('_', ' ', ucfirst($flag)) }}
@endif @endforeach
@endif
{{-- Height rule explanation (in Details tab, shown when road-width-based) --}} @if(($report->result_data['height_rule_type'] ?? 'fixed') === 'road_width_based')
📐 Height Rule: Road-Width Based
In this zone, the maximum permissible building height is calculated based on the front road width @if($report->result_data['height_multiplier'] ?? null) ({{ $report->road_width_m }}m × {{ $report->result_data['height_multiplier'] }} multiplier) @endif. @if(($report->setback_summary['has_extra_setback'] ?? false)) An additional height bonus was applied because the front setback ({{ $report->setback_summary['front_m'] }}m) exceeds the minimum requirement ({{ $report->setback_summary['front_min_m'] ?? '—' }}m). @endif Changing the road width or front setback may change the maximum height allowed.
{{ $report->road_width_m ?? '—' }}m
Road Width
{{ $report->result_data['max_height_m_allowed'] ?? '—' }}m
Max Height
{{ $report->max_floors ?? '—' }}
Max Floors
@endif
{{-- /details tab --}} {{-- ═══════════ COST & ROI TAB ═══════════ --}}
@if(!empty($cost))
💰 Cost & Return Estimates
{{ $ptLabel }} project in {{ $report->state?->name ?? 'this region' }}
Indicative
@php $costMetrics = [ ['Construction Cost', '₹'.number_format($cost['construction_cost_min_inr']).' – ₹'.number_format($cost['construction_cost_max_inr']), '#60a5fa', 'Total build cost'], ['Gross Dev. Value', '₹'.number_format($cost['gross_development_value_inr']), '#22c55e', 'Est. market value'], ['Est. Profit', ($cost['estimated_profit_inr'] >= 0 ? '₹' : '-₹').number_format(abs($cost['estimated_profit_inr'])), $cost['estimated_profit_inr'] >= 0 ? '#22c55e' : '#ef4444', 'GDV minus avg cost'], ['ROI %', $cost['roi_pct'].'%', $cost['roi_pct'] >= 30 ? '#22c55e' : ($cost['roi_pct'] >= 15 ? '#eab308' : '#ef4444'), 'Return on construction'], ]; @endphp @foreach($costMetrics as [$label, $value, $color, $sub])
{{ $value }}
{{ $label }}
{{ $sub }}
@endforeach
@if($cost['monthly_rent_estimate_inr'])
Monthly Rental
₹{{ number_format($cost['monthly_rent_estimate_inr']) }}
₹{{ number_format($cost['annual_rent_estimate_inr']) }} / yr
@endif @if($cost['breakeven_years'])
Rental Break-even
{{ $cost['breakeven_years'] }} yrs
Via rental income alone
@endif
Construction Rate
₹{{ number_format($cost['construction_rate_min_sqm']) }}–{{ number_format($cost['construction_rate_max_sqm']) }}
per sqm ({{ $ptLabel }})
Estimates only. {{ $cost['note'] ?? '' }}
@else
No cost data available
Cost estimates require a completed zone rule with market data.
@endif
{{-- /costs tab --}} {{-- ═══════════ CORRECTIONS TAB ═══════════ --}}
{{-- Child reports (re-analyses) --}} @if($report->childReports->isNotEmpty()) @endif {{-- ═══════════ RE-ANALYZE WITH CORRECTIONS ═══════════ --}}
🔄
Re-Analyze with Corrected Details
Wrong road width, setback, or plot dimensions? Enter the correct values and re-run the analysis.
Only fill in the values you want to correct. A new report will be created linked to this one. In states with road-width-based height rules, changing road width or front setback will recalculate the max permissible height.
@csrf {{-- Current vs Override comparison --}}
Plot & Road Details
@if(($report->result_data['height_rule_type'] ?? 'fixed') === 'road_width_based')
⚠ Changing this will affect max building height
@endif
Setback Corrections
@if(($report->result_data['height_rule_type'] ?? 'fixed') === 'road_width_based')
⚠ May affect max height if extra setback bonus applies
@endif
Plot Dimensions (optional)
Override the calculated height directly
{{-- Disclaimer --}}
Disclaimer: This analysis is for informational purposes only based on publicly available regulations and indicative market data. Always consult a licensed architect, town planner, or registered valuer before making investment decisions. LandFeasibility.in accepts no liability for decisions made based on this report.
{{-- /corrections tab --}}
{{-- /x-data tabs --}} @endif {{-- status completed --}} {{-- Action Buttons --}}
← New Analysis @if($report->status === 'completed') PDF 🏗 3D View 📊 Scenarios ⚖️ Compare @endif
✓ Link copied to clipboard!
{{-- .report-content --}}
{{-- .report-layout --}} @endsection @section('scripts') @if($report->latitude && $report->longitude) @endif @endsection