%# locals: metricas (Analytics::OperacaoMetricas), titulo (opcional),
filtravel (opcional, default false) — torna as tabelas clicáveis p/ cross-filter %>
<% titulo = local_assigns[:titulo] %>
<% filtravel = local_assigns.fetch(:filtravel, false) %>
<% ins = metricas.insucessos_pct %>
<% pd = metricas.por_dia %>
<% if titulo.present? %>
<%= titulo %>
<%= metricas.total %> entregas<% if metricas.data_inicio %> · <%= metricas.data_inicio.strftime('%d/%m/%Y') %>–<%= metricas.data_fim.strftime('%d/%m/%Y') %><% end %>
<% end %>
<%# ── Layout 2 colunas: cards empilhados (esquerda, estreito) + resto (direita) ── %>
<% pct_total = ->(parte) { metricas.total.zero? ? 0 : (parte * 100.0 / metricas.total).round(1) } %>
<%# Coluna esquerda — 4 cards de status EMPILHADOS na vertical (orientação da img 13). %>
Total de Entregas
<%= metricas.total %>
Total de Sucesso
<%= metricas.sucesso %>
<%= pct_total.(metricas.sucesso) %>% do total
Total de Recusas
<%= metricas.recusas %>
<%= pct_total.(metricas.recusas) %>% do total
Entregas Pendentes
<%= metricas.pendentes %>
<%= pct_total.(metricas.pendentes) %>% do total
<%# Coluna direita — gráficos/tabelas ocupam o espaço ao lado dos cards. %>
<%# ── Insucessos % + Índices de falha + Status ─────────── %>
Insucessos %
<% if metricas.total.zero? %>
Sem dados no período.
<% else %>
● Completas <%= ins[:pct_completed] %>%
● Falhas <%= ins[:pct_failed] %>%
<% end %>
Índices de Falha
<%= render 'tabela_simples',
cabecalhos: ['Observação', 'Total', '%'],
linhas: metricas.indices_falha.map { |h| [h[:observation], h[:total], "#{h[:pct]}%"] },
vazio: 'Nenhuma falha no período.',
filtro: (filtravel ? 'f_obs' : nil) %>
Por Status
<%= render 'tabela_simples',
cabecalhos: ['Status', 'Quantidade'],
linhas: metricas.por_status_gade.map { |h| [h[:status], h[:total]] },
vazio: 'Sem dados.',
total: metricas.total,
filtro: (filtravel ? 'f_status' : nil) %>
<%# ── Motoristas + STS ─────────────────────────────────── %>
Notas fiscais por Motorista
<%= render 'tabela_simples',
cabecalhos: ['Motorista', 'Notas fiscais'],
linhas: metricas.por_motorista.map { |h| [h[:nome], h[:total]] },
vazio: 'Sem dados.',
total: metricas.total,
filtro: (filtravel ? 'f_driver' : nil) %>
Entregas por STS (Unidade)
<%= render 'tabela_simples',
cabecalhos: ['Unidade', 'NFs entregues'],
linhas: metricas.por_sts.map { |h| [h[:nome], h[:total]] },
vazio: 'Sem dados.',
total: metricas.sucesso,
filtro: (filtravel ? 'f_sts' : nil) %>
<%# ── Entregas por dia ─────────────────────────────────── %>
Entregas por Dia
<% if pd[:labels].empty? %>
Sem dados no período.
<% else %>
<% end %>
<%# fim coluna direita %>
<%# fim layout 2 colunas %>