diff --git a/Imagens para implantação /Imagem colada (11).png b/Imagens para implantação /Imagem colada (11).png new file mode 100644 index 0000000..8346d7a Binary files /dev/null and b/Imagens para implantação /Imagem colada (11).png differ diff --git a/app/models/operacao.rb b/app/models/operacao.rb index 9fbc56b..3620036 100644 --- a/app/models/operacao.rb +++ b/app/models/operacao.rb @@ -37,17 +37,28 @@ class Operacao nomes_validos.include?(nome.to_s) end - # Rótulo amigável: tira o prefixo e formata. + # Rótulo amigável: tira o prefixo e formata em CAIXA ALTA (para não parecer o + # nome cru da tabela do banco). def label(tabela) - tabela.to_s.delete_prefix(PREFIXO).tr('_', ' ').strip.titleize + tabela.to_s.delete_prefix(PREFIXO).tr('_', ' ').strip.upcase end - # Abreviações de mês usadas nos nomes das tabelas (gade_entregas_emad_fev_2026). + # Meses usados nos nomes das tabelas (gade_entregas_emad_fev_2026). Aceita a + # abreviação (fev) E o nome por extenso (fevereiro) — o cliente usa os dois + # (ex.: "..._ubs_norte_maio_2026"), então ambos precisam cair no mês certo. MESES = { - 'jan' => [1, 'Janeiro'], 'fev' => [2, 'Fevereiro'], 'mar' => [3, 'Março'], - 'abr' => [4, 'Abril'], 'mai' => [5, 'Maio'], 'jun' => [6, 'Junho'], - 'jul' => [7, 'Julho'], 'ago' => [8, 'Agosto'], 'set' => [9, 'Setembro'], - 'out' => [10, 'Outubro'], 'nov' => [11, 'Novembro'], 'dez' => [12, 'Dezembro'] + 'jan' => [1, 'Janeiro'], 'janeiro' => [1, 'Janeiro'], + 'fev' => [2, 'Fevereiro'], 'fevereiro' => [2, 'Fevereiro'], + 'mar' => [3, 'Março'], 'marco' => [3, 'Março'], 'março' => [3, 'Março'], + 'abr' => [4, 'Abril'], 'abril' => [4, 'Abril'], + 'mai' => [5, 'Maio'], 'maio' => [5, 'Maio'], + 'jun' => [6, 'Junho'], 'junho' => [6, 'Junho'], + 'jul' => [7, 'Julho'], 'julho' => [7, 'Julho'], + 'ago' => [8, 'Agosto'], 'agosto' => [8, 'Agosto'], + 'set' => [9, 'Setembro'], 'setembro' => [9, 'Setembro'], + 'out' => [10, 'Outubro'], 'outubro' => [10, 'Outubro'], + 'nov' => [11, 'Novembro'], 'novembro' => [11, 'Novembro'], + 'dez' => [12, 'Dezembro'], 'dezembro' => [12, 'Dezembro'] }.freeze # Agrupa as operações por mês/ano (extraído do nome da tabela), do mais recente @@ -99,7 +110,7 @@ class Operacao resto = (tokens[0...idx] + tokens[(ano ? idx + 2 : idx + 1)..]).join(' ').strip { titulo: ano ? "#{nome} #{ano}" : nome, - item: resto.presence&.titleize || nome, + item: (resto.presence || nome).to_s.upcase, # mais recente primeiro; sem ano vai pro fim do bloco do mês ordem: [-(ano || 0), -num] } diff --git a/spec/models/operacao_spec.rb b/spec/models/operacao_spec.rb new file mode 100644 index 0000000..a5ae59d --- /dev/null +++ b/spec/models/operacao_spec.rb @@ -0,0 +1,31 @@ +require 'rails_helper' + +# label e grupo_de são só parsing do nome da tabela (sem tocar o banco). +RSpec.describe Operacao do + describe '.label (caixa alta, sem parecer o nome do banco)' do + it 'tira o prefixo e deixa em CAIXA ALTA' do + expect(Operacao.label('gade_entregas_ubs_norte_maio_2026')).to eq('UBS NORTE MAIO 2026') + expect(Operacao.label('gade_entregas_emad_fev_2026')).to eq('EMAD FEV 2026') + end + end + + describe '.grupo_de (agrupamento por mês)' do + it 'reconhece o mês por EXTENSO (maio) e agrupa no mês certo, item em caixa alta' do + g = Operacao.send(:grupo_de, 'gade_entregas_ubs_norte_maio_2026') + expect(g[:titulo]).to eq('Maio 2026') + expect(g[:item]).to eq('UBS NORTE') + end + + it 'continua reconhecendo a abreviação (fev)' do + g = Operacao.send(:grupo_de, 'gade_entregas_emad_fev_2026') + expect(g[:titulo]).to eq('Fevereiro 2026') + expect(g[:item]).to eq('EMAD') + end + + it 'cai em "Outras" quando não há mês reconhecível' do + g = Operacao.send(:grupo_de, 'gade_entregas_oeste_centro_remanescentes') + expect(g[:titulo]).to eq('Outras') + expect(g[:item]).to eq('OESTE CENTRO REMANESCENTES') + end + end +end