@extends('layouts.app') @section('titulo', 'Dashboard') @section('subtitulo', 'Resumo executivo — ' . ucfirst(now()->translatedFormat('F Y'))) @section('sino_alerta', count($avisos) ? '1' : '') @section('conteudo') {{-- faixa de avisos --}} @if ($avisos)
@foreach ($avisos as $aviso)
@include('partials.icone', ['nome' => $aviso['icone']]) {{ $aviso['texto'] }}
@endforeach
@endif {{-- indicadores --}} @php $variacao = function (float $atual, float $anterior): array { if ($anterior <= 0) { return ['classe' => 'neutra', 'icone' => null, 'texto' => 'sem base de comparação']; } $pct = ($atual - $anterior) / $anterior * 100; return [ 'classe' => $pct >= 0 ? 'sobe' : 'desce', 'icone' => $pct >= 0 ? 'sobe' : 'desce', 'texto' => ($pct >= 0 ? '+' : '−') . number_format(abs($pct), 1, ',', '.') . '%', ]; }; $varArrecadacao = $variacao($totais['arrecadado_mes'], $totais['arrecadado_mes_anterior']); $varGuias = $variacao($totais['guias_mes'], $totais['guias_mes_anterior']); @endphp
Arrecadação ({{ ucfirst(now()->translatedFormat('M')) }}) @include('partials.icone', ['nome' => 'dinheiro'])
R$ {{ number_format($totais['arrecadado_mes'], 2, ',', '.') }}
@if ($varArrecadacao['icone']) @include('partials.icone', ['nome' => $varArrecadacao['icone']]) @endif {{ $varArrecadacao['texto'] }} vs. mês anterior
Guias emitidas @include('partials.icone', ['nome' => 'documento'])
{{ number_format($totais['guias_mes'], 0, ',', '.') }}
@if ($varGuias['icone']) @include('partials.icone', ['nome' => $varGuias['icone']]) @endif {{ $varGuias['texto'] }} vs. mês anterior
Contribuintes ativos @include('partials.icone', ['nome' => 'pessoas'])
{{ number_format($totais['contribuintes'], 0, ',', '.') }}
{{ number_format($totais['imoveis'], 0, ',', '.') }} imóveis · {{ number_format($totais['estabelecimentos'], 0, ',', '.') }} empresas
Débitos em aberto @include('partials.icone', ['nome' => 'alerta-circulo'])
R$ {{ number_format($totais['em_aberto'], 2, ',', '.') }}
somando parcelas em aberto
{{-- gráficos --}}

Arrecadação mensal

{{ $serieMensal['ano'] }} comparado a {{ $serieMensal['ano'] - 1 }}

{{ $serieMensal['ano'] }} {{ $serieMensal['ano'] - 1 }}
@php $teto = $serieMensal['teto']; $escala = fn ($v) => $teto > 0 ? max(0.6, $v / $teto * 100) : 0; $milhoes = fn ($v) => $v >= 1000000 ? number_format($v / 1000000, 1, ',', '.') . 'M' : ($v >= 1000 ? number_format($v / 1000, 0, ',', '.') . 'k' : number_format($v, 0, ',', '.')); @endphp
@foreach ([1, .75, .5, .25, 0] as $fracao) {{ $milhoes($teto * $fracao) }} @endforeach
@for ($i = 0; $i < 5; $i++) @endfor
@foreach ($serieMensal['meses'] as $m)
{{ $m['mes'] }}
@endforeach

Composição por tributo

Arrecadado em {{ now()->format('Y') }}

@if ($composicao['fatias']) @php $raio = 64; $circunferencia = 2 * M_PI * $raio; $deslocamento = 0; @endphp
@foreach ($composicao['fatias'] as $fatia) @php $comprimento = $circunferencia * $fatia['percentual'] / 100; @endphp @php $deslocamento += $comprimento; @endphp @endforeach
@foreach ($composicao['fatias'] as $fatia)
{{ $fatia['nome'] }} {{ $fatia['percentual'] }}%
@endforeach
@else

Nenhum pagamento registrado em {{ now()->format('Y') }}.

@endif
{{-- guias recentes --}}

Lançamentos recentes

Últimas guias emitidas e sua situação

@can('relatorio.gerencial') Ver todos → @endcan
@forelse ($recentes as $guia) @php $vencimento = \Illuminate\Support\Carbon::parse($guia->data_vencimento); if ($guia->pago || $guia->situacao === 'pago') { $selo = ['verde', 'Pago']; } elseif ($guia->situacao === 'cancelado') { $selo = ['cinza', 'Cancelado']; } elseif ($vencimento->isPast()) { $selo = ['vermelho', 'Atrasado']; } else { $selo = ['ambar', 'Pendente']; } @endphp @empty @endforelse
Nº guia Contribuinte Tipo Valor Vencimento Situação
{{ $guia->nosso_numero ?: '#' . $guia->id }} {{ $guia->contribuinte ?? '—' }} @if ($guia->tributo){{ $guia->tributo }}@endif R$ {{ number_format($guia->valor, 2, ',', '.') }} {{ $vencimento->format('d/m/Y') }} {{ $selo[1] }}
Nenhuma guia emitida ainda.
{{-- débitos em aberto por tributo --}}

Débitos em aberto por tributo

Parcelas não quitadas, incluindo dívida ativa

@forelse ($porTributo as $t) @empty @endforelse
Tributo Lançamentos Valor em aberto
{{ $t->codigo }} {{ $t->nome }} {{ number_format($t->lancamentos, 0, ',', '.') }} R$ {{ number_format($t->valor, 2, ',', '.') }}
Nenhum débito em aberto.
{{-- imóveis por setor --}}

Imóveis por setor

{{ number_format($imoveisPorSetor['total'], 0, ',', '.') }} imóveis cadastrados

@can('imovel.consultar') Ver imóveis → @endcan
@forelse ($imoveisPorSetor['setores'] as $setor) @php $pct = $imoveisPorSetor['total'] > 0 ? $setor->imoveis / $imoveisPorSetor['total'] * 100 : 0; $largura = $imoveisPorSetor['maior'] > 0 ? max(1, $setor->imoveis / $imoveisPorSetor['maior'] * 100) : 0; @endphp @empty @endforelse
Setor Distribuição Imóveis %
{{ $setor->codigo }} {{ $setor->nome }}
{{ number_format($setor->imoveis, 0, ',', '.') }} {{ number_format($pct, 1, ',', '.') }}%
Nenhum imóvel cadastrado.
@endsection