@php $moeda = fn ($v): string => number_format((float) $v, 2, ',', '.'); $percentual = fn ($v): string => number_format((float) $v, 1, ',', '.'); $caixa = 'h-[2.125rem] w-full rounded-md border bg-superficie px-3 text-sm text-tinta tabular-nums shadow-xs placeholder:text-suave focus-visible:outline-2 focus-visible:outline-offset-0'; $caixaOk = 'border-fio focus-visible:outline-marca-600'; $caixaErro = 'border-rose-300 focus-visible:outline-rose-500'; $rotulo = 'text-[0.7rem] font-semibold uppercase tracking-[0.06em] text-suave'; @endphp
@if ($veiculo) @php // "8,2% acima da FIPE": a FIPE é a referência de mercado de cada preço. $contraFipe = fn (float $preco): string => $percentual(abs(($preco / $fipe - 1) * 100)).'% '.($preco >= $fipe ? 'acima' : 'abaixo').' da FIPE'; // A escada: os preços do carro do maior para o menor, com o mínimo no meio. // Nomes e cores iguais aos das referências do topo. $degraus = collect([ 'anuncio' => ['Anunciado', 'bg-tinta', $precoConfiavel ? $anunciado : null], 'fipe' => ['FIPE atual', 'bg-amber-500', $fipe], 'proposta' => ['Proposta', 'bg-sky-600', $propostaAtual], 'minimo' => ['Preço mínimo', 'bg-marca-700', $precoMinimo], 'custo' => ['Custo do carro', 'bg-debito', (float) $veiculo->custo_total], ])->filter(fn (array $d): bool => $d[2] !== null && $d[2] > 0)->sortByDesc(fn (array $d): float => $d[2]); @endphp
{{-- 1. As referências do carro --}}
Custo do carro
R$ {{ $moeda($veiculo->custo_total) }} compra {{ $moeda($veiculo->valor_compra) }} + lançamentos {{ $moeda($veiculo->lancamentos) }}
Anunciado
{{ $anunciado > 0 ? 'R$ '.$moeda($anunciado) : '—' }} @if ($margemDoAnuncio !== null) $margemDoAnuncio < 0, 'text-suave' => $margemDoAnuncio >= 0])>margem de {{ $percentual($margemDoAnuncio) }}% @else preço a conferir na Revenda Mais @endif
FIPE atual
@if ($fipe) R$ {{ $moeda($fipe) }} @if ($variacaoFipe !== null && $variacaoFipe != 0) {{ $variacaoFipe < 0 ? 'caiu' : 'subiu' }} {{ $percentual(abs($variacaoFipe)) }}% desde a compra @elseif ($variacaoFipe !== null) igual à da compra @endif @else {{ $veiculo->novo ? 'zero-km não tem FIPE no relatório' : 'sem FIPE no relatório' }} @endif
{{-- 2. O que o gerente decide: a margem abre com a do anúncio; comissão e retorno são da negociação e ficam em branco até ele preencher. --}}
@foreach ([ 'margem' => ['Margem mínima', 'do preço de venda', '%', 'ex.: 10'], 'comissao' => ['Comissão do vendedor', 'do preço de venda', '%', '0'], 'retorno' => ['Retorno do financiamento', 'abate do custo', 'R$', '0'], ] as $campo => [$rotuloCampo, $nota, $unidade, $exemplo])
@if ($unidade === 'R$') R$ @endif $unidade === '%', 'pl-9' => $unidade === 'R$', $caixaErro => $errors->has($campo), $caixaOk => ! $errors->has($campo)])> @if ($unidade === '%') % @endif
@error($campo)

{{ $message }}

@else

{{ $nota }}

@enderror
@endforeach
{{-- 3. A resposta --}}
@if ($precoMinimo === null)

Digite a margem mínima para ver até quanto este carro pode baixar.

@else

Preço mínimo com {{ $percentual($margemAtual) }}% de margem

R$ {{ $moeda($precoMinimo) }}

lucro de R$ {{ $moeda($simulacao->lucro($precoMinimo)) }} @if ($fipe)
$precoMinimo > $fipe, 'text-emerald-700' => $precoMinimo <= $fipe])>{{ $contraFipe($precoMinimo) }}@endif

@if ($simulacao->comissao > 0 || $simulacao->retorno > 0)

Neste preço: custo R$ {{ $moeda($veiculo->custo_total) }} @if ($simulacao->comissao > 0) + comissão de {{ $percentual($simulacao->comissao) }}% (R$ {{ $moeda($simulacao->comissaoEm($precoMinimo)) }}) @endif @if ($simulacao->retorno > 0) − retorno R$ {{ $moeda($simulacao->retorno) }} @endif

@endif {{-- Escada de preços: uma lista, não um controle. Cada linha diz a distância até o preço mínimo; anúncio e proposta acima dele são espaço para negociar (verde), abaixo são o que falta (vermelho). --}}

Do maior para o menor · diferença para o mínimo

    @foreach ($degraus as $chave => [$nomeDegrau, $cor, $valor]) @php $diferenca = round($valor - $precoMinimo, 2); $negocia = in_array($chave, ['anuncio', 'proposta'], true); @endphp
  1. $chave === 'minimo', 'text-tinta' => $chave !== 'minimo', ])> {{ $nomeDegrau }} R$ {{ $moeda($valor) }} $negocia && $diferenca >= 0, 'text-debito' => $negocia && $diferenca < 0, 'text-suave' => ! $negocia, ])> @if ($chave === 'minimo') referência @else {{ $diferenca >= 0 ? '+' : '−' }} {{ $moeda(abs($diferenca)) }} @endif
  2. @endforeach
@if (! $precoConfiavel)

O preço anunciado está a conferir na Revenda Mais (zerado ou abaixo da metade do custo), então não dá para dizer quanto baixar dele.

@elseif ($folga >= 0)

Do anúncio, dá para baixar até R$ {{ $moeda($folga) }} ({{ $percentual($folga / $anunciado * 100) }}%).

@else

O anúncio já está R$ {{ $moeda(-$folga) }} abaixo do mínimo: vendido por ele, a margem é de {{ $percentual($simulacao->margem($anunciado)) }}%.

@endif
@endif
{{-- 4. Uma proposta na mesa --}}
R$ $errors->has('proposta'), $caixaOk => ! $errors->has('proposta')])>
@if ($propostaAtual !== null && $propostaAtual > 0) @php $lucroProposta = $simulacao->lucro($propostaAtual); $atende = $precoMinimo === null ? null : $propostaAtual >= $precoMinimo; @endphp

$lucroProposta < 0, 'text-tinta' => $lucroProposta >= 0])>Lucro de R$ {{ $moeda($lucroProposta) }} · margem de {{ $percentual($simulacao->margem($propostaAtual)) }}%@if ($fipe) · {{ $contraFipe($propostaAtual) }}@endif @if ($atende === true) atende o mínimo @elseif ($atende === false) abaixo do mínimo @endif

@endif
@error('proposta')

{{ $message }}

@enderror

Preço mínimo = (custo − retorno) ÷ (1 − margem − comissão). O custo é compra + lançamentos; o custo do dinheiro parado não entra. Nada aqui é gravado. Custos e FIPE são do relatório do estoque importado.

@endif