<%# 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 %>

Total de Recusas

<%= metricas.recusas %>

Entregas Pendentes

<%= metricas.pendentes %>

<%# 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 %>