@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 ════════════════════════════════════════════════════════════ --}}
{{-- ═══ 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 --}}
{{-- ═══ 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
| Mês |
Tipo |
Receita |
Reservas |
RevPAR |
@foreach($revenueByMonth as $m)
| {{ $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, ',', '.') }} |
@endforeach
{{-- ═══ PACE TABLE — detalhe dia a dia ════════════════════════════════ --}}
Detalhe Diário — Ocupação OTB
Pace Diário — {{ $horizonDays }} dias
≥70%
40-69%
<40%
| Data |
UHs Ocup. |
Disponíveis |
Ocupação |
Mapa |
Receita Prevista |
@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
|
{{ $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
|
@endforeach
@endsection
@push('scripts')
@endpush