teste #7
@@ -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.
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<div class="p-4 bg-blue-900/20 border border-blue-500/40 rounded-xl text-blue-200/90 text-sm flex items-start gap-2">
|
||||
<span class="text-base leading-none">ℹ️</span>
|
||||
<p>A <strong>Latitude/Longitude</strong> é reaproveitada do <strong>mês anterior</strong> da mesma
|
||||
operação (casando nome + endereço + supervisão). Pacientes <strong>novos</strong> ou sem
|
||||
operação (casando nome + endereço). Pacientes <strong>novos</strong> ou sem
|
||||
correspondência saem <strong>sem</strong> lat/long — o SimpliRoute geocodifica na importação.
|
||||
Se a operação não tiver mês anterior, a planilha sai inteira sem lat/long.</p>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user