Correção LAT E LONG carga simpleroute

This commit is contained in:
2026-07-15 09:38:56 -03:00
parent e001a48e1a
commit 1837a02ec9
2 changed files with 22 additions and 7 deletions

View File

@@ -2,8 +2,8 @@
#
# Monta as linhas da planilha de carga do SimpliRoute a partir de UMA operação
# vigente (tabela gade_entregas_*). Preenche Latitude/Longitude reaproveitando a
# geocodificação do MÊS ANTERIOR da mesma operação: casa nome + endereço +
# supervisão e puxa a lat/long do rastreio (db_reem_simplerout_2026) pelo NF antigo.
# geocodificação do MÊS ANTERIOR da mesma operação: casa nome + endereço
# (normalizado) e puxa a lat/long do rastreio (db_reem_simplerout_2026) pelo NF antigo.
#
# Tabelas de operação e rastreio são SOMENTE LEITURA (apenas SELECT).
module SimpliRoute
@@ -14,8 +14,10 @@ module SimpliRoute
nota_fiscal nome_completo endereco_sem_complemento complemento supervisao telefones
].freeze
# Colunas que formam a chave de match com o histórico.
COLUNAS_CHAVE = %w[nome_completo endereco_sem_complemento supervisao].freeze
# Colunas que formam a chave de match com o histórico. Supervisão fica de
# fora: o cliente renomeia/mescla supervisões entre meses (ex.: "STS SANTA
# CECILIA" + "STS SE" → "STS SE_SANTA CECILIA") e a geo é do endereço.
COLUNAS_CHAVE = %w[nome_completo endereco_sem_complemento].freeze
# Mês (número) -> grafias aceitas nos nomes de tabela (abreviação e extenso).
MESES_GRAFIAS = {
@@ -122,15 +124,28 @@ module SimpliRoute
end
end
# Chave de match: nome | endereço | supervisão, normalizados.
# Chave de match: nome | endereço, normalizados.
def chave(row)
COLUNAS_CHAVE.map { |c| normaliza(row[c]) }.join('|')
[normaliza(row['nome_completo']),
normaliza_endereco(row['endereco_sem_complemento'])].join('|')
end
def normaliza(valor)
valor.to_s.strip.gsub(/\s+/, ' ').upcase
end
# Rua/número/bairro (3 primeiros segmentos) + dígitos do CEP: imune às
# variações de sufixo que o cliente alterna entre meses
# ("São Paulo, São Paulo, 01511-010, Brazil" vs "São Paulo, SP, CEP: 01511-010").
# O CEP entra só pelos dígitos finais (7-8) para tolerar hífen fora do
# lugar (ex.: "028140-30").
def normaliza_endereco(valor)
segs = valor.to_s.split(',').map(&:strip)
base = normaliza(segs.first(3).join(', '))
cep = segs.drop(3).join.gsub(/\D/, '')[/\d{7,8}\z/]
[base, cep].compact.join('|')
end
# Coordenada como Float (com PONTO). O rastreio pode trazer texto com vírgula
# decimal ("-23,62"); coordenadas não usam separador de milhar, então trocar
# a vírgula por ponto é seguro e garante a saída numérica (ponto) no .xlsx.