Correção da barra do ranking de motoristas

A barra era proporcional à QUANTIDADE de entregas, mas as duas abas do card
são ordenadas por VALOR. Na aba Estimado dá no mesmo (valor = qtd × preço),
mas na Consolidada bônus/retirada/termo mudam o preço unitário: com os dados
do teste a barra do 3º (290 entregas, R$ 5.250) saía MAIOR que a do 2º
(261 entregas, R$ 5.260), contradizendo a ordem do ranking. Invertia em três
pontos da lista.

Passa a escalar pelo valor, que é o número que ordena — as barras encurtam
sempre de cima para baixo. Mantida a guarda de divisão por zero.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-21 01:21:08 -03:00
parent 4965931c13
commit e9db6b7164

View File

@@ -6,11 +6,14 @@
Locais: itens (array de hashes), vazio (texto do estado sem dados). %> Locais: itens (array de hashes), vazio (texto do estado sem dados). %>
<% if itens.any? %> <% if itens.any? %>
<div class="space-y-3"> <div class="space-y-3">
<%# Base da barra: o MAIOR nº de entregas da aba, não o primeiro item — a aba <%# A barra é proporcional ao VALOR, que é o número pelo qual as duas abas são
consolidada é ordenada por VALOR, então o primeiro pode não ser o maior em ordenadas — assim ela sempre encurta de cima para baixo.
quantidade e a barra passaria de 100%. Sem entregas (só bônus/desconto, ⚠️ Não voltar a usar :entregas aqui: na aba Estimado dá no mesmo (valor =
por exemplo) a barra fica vazia em vez de dividir por zero. %> qtd × preço), mas na Consolidada quem tem mais entregas nem sempre tem o
<% max = itens.map { |x| x[:entregas].to_i }.max.to_f %> maior valor (bônus/retirada/termo mudam o preço unitário) e a barra do 3º
ficava MAIOR que a do 2º, contradizendo a ordem do ranking.
Zero vira barra vazia em vez de divisão por zero. %>
<% max = itens.map { |x| x[:valor].to_f }.max.to_f %>
<% itens.each_with_index do |m, i| %> <% itens.each_with_index do |m, i| %>
<div class="flex items-center gap-3"> <div class="flex items-center gap-3">
<span class="text-xs font-bold w-5 text-center <span class="text-xs font-bold w-5 text-center
@@ -27,7 +30,7 @@
<%# Barra de progresso %> <%# Barra de progresso %>
<div class="w-full bg-white/5 rounded-full h-1.5"> <div class="w-full bg-white/5 rounded-full h-1.5">
<div class="h-1.5 rounded-full bg-[#f97316]" <div class="h-1.5 rounded-full bg-[#f97316]"
style="width: <%= max.zero? ? 0 : [(m[:entregas] / max * 100).round, 100].min %>%"></div> style="width: <%= max.zero? ? 0 : [(m[:valor] / max * 100).round, 100].min %>%"></div>
</div> </div>
<span class="text-gray-400 text-xs"><%= m[:entregas] %> entregas</span> <span class="text-gray-400 text-xs"><%= m[:entregas] %> entregas</span>
</div> </div>