@extends('layouts.admin') @section('title', 'Forecast & Budget') @section('breadcrumb') Forecast @endsection @push('styles') @endpush @section('content') @php $horizonDays = $horizon; $todayCarbon = \Carbon\Carbon::instance($today); $todayStr = $todayCarbon->format('d/m/Y'); $endForecast = $todayCarbon->copy()->addDays($horizon - 1)->format('d/m/Y'); @endphp {{-- ═══ HEADER ════════════════════════════════════════════════════════════ --}}

🔭 Forecast & Budget

Projeção de {{ $horizonDays }} dias · {{ $todayStr }} a {{ $endForecast }} · {{ $totalRooms }} UH{{ $totalRooms !== 1 ? 's' : '' }}

@foreach([30=>'30 Dias', 60=>'60 Dias', 90=>'90 Dias'] as $days => $label) {{ $label }} @endforeach
{{-- ═══ KPIs FORECAST ════════════════════════════════════════════════════ --}}
💰 Receita OTB
R$ {{ number_format((float)$revenueOtb, 2, ',', '.') }}
reservas confirmadas nos próximos {{ $horizonDays }}d
📅 Reservas OTB
{{ $confirmedOtb }}
check-ins previstos no horizonte
🛏 Ocupação Média
{{ $avgOccForecast }}%
média projetada no horizonte de {{ $horizonDays }}d
🕐 Booking Window
{{ $avgBookingWindow }} dias
antecedência média de reserva (180d)
{{-- ═══ GRÁFICO PACE + BOOKING WINDOW ══════════════════════════════════ --}}
Pace Report — Ocupação Diária Projetada
{{-- Pace chart --}}
Ocupação OTB — Próximos {{ $horizonDays }} Dias Fim de semana
{{-- Booking Window stacked --}}
Antecedência de Reserva
{{-- ═══ ALERTAS OPERACIONAIS ══════════════════════════════════════════ --}}
{{-- Alta Disponibilidade --}}
Baixa Ocupação Prevista
@forelse($highAvailDays as $d)
{{ $d['date'] }}
{{ $d['occupied'] }}/{{ $totalRooms }} UHs · R$ {{ number_format($d['revenue_expected'],2,',','.') }}
{{ $d['occ_rate'] }}%
@empty
✅ Sem dias com baixa ocupação
@endforelse
{{-- Alta Demanda --}}
Alta Demanda Prevista
@forelse($highDemandDays as $d)
{{ $d['date'] }}
{{ $d['occupied'] }}/{{ $totalRooms }} UHs · R$ {{ number_format($d['revenue_expected'],2,',','.') }}
{{ $d['occ_rate'] }}%
@empty
Nenhum dia com alta demanda no horizonte
@endforelse
{{-- ═══ PROJEÇÃO MENSAL (Realizado + OTB) ════════════════════════════ --}}
Projeção Mensal — Realizado vs. OTB (On The Books)
{{-- Gráfico de barras empilhadas --}}
Receita — Realizado vs. Forecast
{{-- Tabela de Forecast Mensal --}}
Tabela Detalhada
@foreach($revenueByMonth as $m) @endforeach
Mês Tipo Receita Reservas RevPAR
{{ $m['label'] }} @if($m['type'] === 'realized') ✓ Realizado @elseif($m['type'] === 'current') ▶ Atual @else ~ Forecast @endif R$ {{ number_format($m['type'] !== 'forecast' ? $m['realized'] : $m['otb'], 2, ',', '.') }} {{ $m['reservations'] }} R$ {{ number_format($m['revpar'], 2, ',', '.') }}
{{-- ═══ PACE TABLE — detalhe dia a dia ════════════════════════════════ --}}
Detalhe Diário — Ocupação OTB
Pace Diário — {{ $horizonDays }} dias ≥70% 40-69% <40%
@foreach($pace as $dStr => $d) @php $occColor = $d['occ_rate'] >= 70 ? '#22c55e' : ($d['occ_rate'] >= 40 ? '#f59e0b' : '#3b82f6'); $occBg = $d['occ_rate'] >= 70 ? '#f0fdf4' : ($d['occ_rate'] >= 40 ? '#fffbeb' : '#eff6ff'); $occText = $d['occ_rate'] >= 70 ? '#16a34a' : ($d['occ_rate'] >= 40 ? '#d97706' : '#2563eb'); @endphp @endforeach
Data UHs Ocup. Disponíveis Ocupação Mapa Receita Prevista
{{ $d['is_today'] ? '▶ Hoje' : $d['weekday'] }}, {{ \Carbon\Carbon::parse($dStr)->format('d/m') }}
@if($d['is_weekend'])
Fin. de Semana
@endif
{{ $d['occupied'] }} / {{ $totalRooms }} {{ $d['available'] }} {{ $d['occ_rate'] }}%
@if($d['revenue_expected'] > 0) R$ {{ number_format($d['revenue_expected'], 2, ',', '.') }} @else @endif
@endsection @push('scripts') @endpush