@extends('layouts.admin') @section('title', 'Indicadores & Analytics') @section('breadcrumb') Indicadores @endsection @push('styles') @endpush @section('content') @php $periodLabel = match($period) { 'quarter' => 'Trimestre Atual', 'semester' => 'Últimos 6 Meses', 'year' => 'Ano Atual', default => 'Mês Atual', }; function pctDiff($current, $prev): array { if ($prev == 0) return ['pct' => null, 'dir' => 'flat']; $pct = round(($current - $prev) / $prev * 100, 1); return ['pct' => $pct, 'dir' => $pct > 0 ? 'up' : ($pct < 0 ? 'down' : 'flat')]; } @endphp {{-- ═══ HEADER ════════════════════════════════════════════════════════════ --}}

📊 Indicadores & Analytics

{{ $periodLabel }} · {{ $fromDt->format('d/m/Y') }} a {{ $toDt->format('d/m/Y') }} · {{ $totalRooms }} UH{{ $totalRooms !== 1 ? 's' : '' }}

@foreach(['month'=>'Mês','quarter'=>'Trimestre','semester'=>'6 Meses','year'=>'Ano'] as $key=>$label) {{ $label }} @endforeach
{{-- ═══ KPIs COMPARATIVOS ═════════════════════════════════════════════════ --}}
Comparativo — {{ $periodLabel }} vs. Período Anterior
@php $revenueChg = pctDiff($revenue, $revenuePrev); $reservChg = pctDiff($reservations, $reservationsPrev); $adrChg = pctDiff($adr, $adrPrev); $occChg = pctDiff($avgOcc, $avgOccPrev); $ticketChg = pctDiff($ticketMedio, $ticketMedioPrev); $nightsChg = pctDiff($nightsSold, $nightsSoldPrev); @endphp
{{-- Receita --}}
Receita do Período
R$ {{ number_format($revenue,2,',','.') }}
@if($revenueChg['pct'] !== null) {{ $revenueChg['dir'] === 'up' ? '▲' : '▼' }} {{ abs($revenueChg['pct']) }}% @endif anterior: R$ {{ number_format($revenuePrev,2,',','.') }}
{{-- Reservas --}}
Reservas
{{ $reservations }}
@if($reservChg['pct'] !== null) {{ $reservChg['dir'] === 'up' ? '▲' : '▼' }} {{ abs($reservChg['pct']) }}% @endif anterior: {{ $reservationsPrev }}
{{-- ADR --}}
ADR (Diária Média)
R$ {{ number_format($adr,2,',','.') }}
@if($adrChg['pct'] !== null) {{ $adrChg['dir'] === 'up' ? '▲' : '▼' }} {{ abs($adrChg['pct']) }}% @endif anterior: R$ {{ number_format($adrPrev,2,',','.') }}
{{-- Ocupação --}}
Ocupação Média
{{ $avgOcc }}%
@if($occChg['pct'] !== null) {{ $occChg['dir'] === 'up' ? '▲' : '▼' }} {{ abs($occChg['pct']) }}% @endif anterior: {{ $avgOccPrev }}%
{{-- Ticket Médio --}}
Ticket Médio
R$ {{ number_format($ticketMedio,2,',','.') }}
@if($ticketChg['pct'] !== null) {{ $ticketChg['dir'] === 'up' ? '▲' : '▼' }} {{ abs($ticketChg['pct']) }}% @endif anterior: R$ {{ number_format($ticketMedioPrev,2,',','.') }}
{{-- Noites Vendidas --}}
Noites Vendidas
{{ $nightsSold }}
@if($nightsChg['pct'] !== null) {{ $nightsChg['dir'] === 'up' ? '▲' : '▼' }} {{ abs($nightsChg['pct']) }}% @endif anterior: {{ $nightsSoldPrev }}
{{-- Taxa de Cancelamento --}}
Taxa de Cancelamento
{{ $cancellationRate }}%
das reservas criadas no período
{{-- RevPAR --}}
RevPAR
R$ {{ number_format($revpar,2,',','.') }}
receita/UH disponível/dia
{{-- ═══ GRÁFICO PRINCIPAL: Receita 12 meses + ADR ══════════════════════════ --}}
Evolução dos Indicadores
Receita Mensal — Últimos 12 Meses Barras com gradiente indicam tendência
ADR por Mês Diária Média Realizada
{{-- ═══ OCUPAÇÃO DIÁRIA ════════════════════════════════════════════════════ --}}
Ocupação Diária — {{ $periodLabel }} Heatmap de intensidade por cor
{{-- ═══ ROSCAS: Pagamento + Canal ════════════════════════════════════════ --}}
Receita por Forma de Pagamento
Receita por Canal de Venda
{{-- ═══ RANKINGS ═══════════════════════════════════════════════════════════ --}}
Rankings do Período
{{-- Ranking de Quartos --}}
Top Quartos por Faturamento
@php $maxRoom = $topRooms->max('total') ?: 1; @endphp @forelse($topRooms as $i => $room)
{{ $i+1 }}
{{ $room->room ?? '—' }}
R$ {{ number_format((float)$room->total,2,',','.') }} {{ $room->stays }} reserva{{ $room->stays != 1 ? 's' : '' }}
@empty
Nenhum dado no período.
@endforelse
{{-- Ranking de Hóspedes --}}
Top Hóspedes por Receita
@forelse($topGuests as $i => $guest)
{{ $i+1 }}
{{ trim($guest->guest_name) ?: 'Hóspede #'.$guest->guest_id }} @if($guest->vip_level && $guest->vip_level !== 'none') {{ strtoupper($guest->vip_level) }} @endif
R$ {{ number_format((float)$guest->total,2,',','.') }} {{ $guest->stays }}x
@empty
Nenhum dado no período.
@endforelse
@endsection @push('scripts') @endpush