@php $kpis = $ageing['kpis'] ?? []; $register = $ageing['exception_register'] ?? []; $modal = $ageing['modal'] ?? ['alarm' => 'red', 'rows' => [], 'total' => 0]; $alarmRules = $ageing['alarm_rules'] ?? []; $total = (int) ($register['total'] ?? 0); $perPage = (int) ($register['per_page'] ?? 5); $currentPage = (int) ($register['current_page'] ?? 1); $lastPage = (int) ($register['last_page'] ?? 1); $from = (int) ($register['from'] ?? 0); $to = (int) ($register['to'] ?? 0); $baseQuery = request()->except('page', 'ajax', 'per_page'); $pageUrl = fn(int $p) => url()->current() . '?' . http_build_query(array_merge($baseQuery, ['page' => $p])); @endphp @if(!empty($pageMessages ?? []))
{{ implode(' ', $pageMessages) }}
@endif

Total Cases

{{ number_format((int) ($kpis['completed'] ?? 0)) }}

Efficient

THR: < 60

{{ number_format((int) ($kpis['green_population'] ?? 0)) }}

Stable

THR: 60-89

{{ number_format((int) ($kpis['yellow_population'] ?? 0)) }}

Delayed

THR: 90-119

{{ number_format((int) ($kpis['orange_population'] ?? 0)) }}

Severely Delayed

THR: 120+

{{ number_format((int) ($kpis['red_population'] ?? 0)) }}

Ageing Buckets

Cross-sectional analysis of user engagement duration

Performance Thresholds

@php $fallbackRules = [ ['color' => 'green', 'title' => 'Normal Range', 'badge' => 'NORMAL', 'range' => '< 60 Days', 'count' => 0], ['color' => 'yellow', 'title' => 'Moderate Risk', 'badge' => 'REVIEW', 'range' => '60-89 Days', 'count' => 0], ['color' => 'orange', 'title' => 'High Risk', 'badge' => 'WARNING', 'range' => '90-119 Days', 'count' => 0], ['color' => 'red', 'title' => 'Critical Delay', 'badge' => 'CRITICAL', 'range' => '120+ Days', 'count' => 0], ]; $rulesToRender = !empty($alarmRules) ? $alarmRules : $fallbackRules; @endphp @foreach($rulesToRender as $rule) @php $color = strtolower((string) ($rule['color'] ?? 'green')); $title = (string) ($rule['title'] ?? ucfirst($color)); $badge = (string) ($rule['badge'] ?? strtoupper($color)); $range = (string) ($rule['range'] ?? '-'); $count = (int) ($rule['count'] ?? 0); $ruleProgress = max(0, min(100, (float) ($rule['progress'] ?? ($total > 0 ? ($count / $total) * 100 : 0)))); @endphp
{{ $title }}
{{ $badge }}
{{ $range }} ({{ number_format($count) }})
@endforeach
{{--
Ageing Exception Register
@forelse(($register['rows'] ?? []) as $row) @php $ageClass = $row['ageing_days'] >= 120 ? 'is-critical' : ($row['ageing_days'] >= 60 ? 'is-warning' : 'is-healthy'); $alarmClass = match ($row['alarm_level']) { 'red' => 'is-red', 'orange' => 'is-orange', 'yellow' => 'is-yellow', default => 'is-green', }; @endphp @empty @endforelse
UUID BENEFICIARY/CNIC IP DISTRICT TEHSIL PENDING STAGE AGEING DAYS Performance Thresholds
{{ $row['uuid'] }} {{ $row['beneficiary_name'] }}
{{ $row['beneficiary_cnic'] }}
{{ $row['ip'] }} {{ $row['district'] }} {{ $row['tehsil'] }} {{ $row['pending_stage'] }} {{ (int) $row['ageing_days'] }}
No exception rows found for selected filters.
@if($lastPage > 1) @elseif($total > 0) @endif
--}} {{-- ===== STAGE WISE AGEING COMPARISON CHART ===== --}}

Stage Wise Ageing Comparison

Distribution of cases by construction stage across districts

{{-- Chart rendered by renderStageWiseBarChart() in ageing.js --}}