# app/services/analytics/resumo_operacao.rb # # Os números da operação num período, na forma que a mensagem agendada usa — # as MESMAS chaves que Notificacao::Variaveis anuncia no editor para o gatilho # `agendado`. # # Reusa OperacaoMetricas (visão Global) e NotasForaOperacao em vez de refazer as # queries: se a regra de contagem mudar num lugar, o resumo enviado por WhatsApp # não pode continuar dizendo outra coisa que o dashboard. module Analytics class ResumoOperacao def initialize(inicio:, fim:) @inicio = inicio.to_date @fim = fim.to_date end # Valores como TEXTO: eles vão direto para dentro de uma mensagem. def numeros { 'operacao' => rotulo_operacao, 'entregues' => metricas.sucesso.to_s, 'recusas' => metricas.recusas.to_s, 'pendentes' => metricas.pendentes.to_s, 'retentativas' => metricas.retentativas.to_s, 'fora_operacao' => fora.total.to_s } end # Nada mudou no período? Evita mandar resumo zerado num feriado. def vazio? metricas.total.zero? && fora.total.zero? end private def tabelas = @tabelas ||= Operacao.nomes_validos def rotulo_operacao tabelas.size == 1 ? Operacao.label(tabelas.first) : "Todas as operações (#{tabelas.size})" end def metricas @metricas ||= OperacaoMetricas.new(tabelas: tabelas, inicio: @inicio, fim: @fim) end def fora @fora ||= NotasForaOperacao.new(inicio: @inicio, fim: @fim) end end end