Correção do relatório que é gerado para completo

This commit is contained in:
2026-07-22 11:35:59 -03:00
parent d3667ac48a
commit e8f470f878
7 changed files with 318 additions and 15 deletions

View File

@@ -0,0 +1,42 @@
# lib/tasks/series_aparelho.rake
#
# Sincroniza o "Número de Série da Base (Aparelho)" da API do SimpliRoute para a
# tabela series_aparelho (ver SincronizarSeriesAparelhoJob).
# Log padrão das tarefas do projeto (ver historico.rake): uma linha de início,
# uma de resultado, e o erro sobe para o cron registrar. É lambda (e não método)
# para não pendurar um `executar` global no Object.
executar = lambda do |&bloco|
puts "[#{Time.current}] Sincronizando número de série da base (SimpliRoute)..."
r = bloco.call
puts "[#{Time.current}] OK — #{r[:datas]} data(s) varrida(s), #{r[:visitas]} visita(s), #{r[:series]} série(s) gravada(s)."
puts "[#{Time.current}] AVISO — #{r[:falhas].size} data(s) sem resposta da API: #{r[:falhas].map { |f| f[:data] }.join(', ')}" if r[:falhas].present?
rescue StandardError => e
puts "[#{Time.current}] ERRO: #{e.message}"
Rails.logger.error("[simpli_route:series] #{e.message}\n#{e.backtrace.first(5).join("\n")}")
raise
end
namespace :simpli_route do
desc 'Sincroniza o número de série da base dos últimos 45 dias (cron diário)'
task series: :environment do
executar.call { SincronizarSeriesAparelhoJob.perform_now }
end
desc 'Backfill de UMA operação inteira — rake "simpli_route:series_operacao[gade_entregas_ubs_sudeste_jul_2026]"'
task :series_operacao, [:tabela] => :environment do |_t, args|
tabela = args[:tabela].to_s
if Operacao.valida?(tabela)
puts "[#{Time.current}] Backfill da operação #{tabela}..."
executar.call { SincronizarSeriesAparelhoJob.perform_now(operacao: tabela) }
else
puts "[#{Time.current}] ERRO: operação inválida (#{tabela.inspect})."
puts "Válidas: #{Operacao.nomes_validos.join(', ')}"
end
end
desc 'Backfill por período — rake "simpli_route:series_periodo[2026-07-01,2026-07-31]"'
task :series_periodo, %i[de ate] => :environment do |_t, args|
executar.call { SincronizarSeriesAparelhoJob.perform_now(de: Date.parse(args[:de]), ate: Date.parse(args[:ate])) }
end
end