Implantação da geração de mensagem de forma livre e mudança na engine de mensagem
This commit is contained in:
78
app/services/notificacao/variaveis.rb
Normal file
78
app/services/notificacao/variaveis.rb
Normal file
@@ -0,0 +1,78 @@
|
||||
# app/services/notificacao/variaveis.rb
|
||||
#
|
||||
# Quais {{variaveis}} existem em cada gatilho, o que elas significam e um valor
|
||||
# de AMOSTRA para o preview do editor.
|
||||
#
|
||||
# A amostra é o que faz o preview valer alguma coisa: mostrar "{{valor}}" cru na
|
||||
# tela não diz se a mensagem ficou boa. Aqui ela é um exemplo plausível, não um
|
||||
# dado real do banco — o preview não deve depender de haver consolidação
|
||||
# fechada no ambiente para funcionar.
|
||||
module Notificacao
|
||||
module Variaveis
|
||||
# Disponíveis em qualquer evento.
|
||||
COMUNS = {
|
||||
'empresa' => { descricao: 'Nome da empresa', amostra: 'Reem Transportes' },
|
||||
'data' => { descricao: 'Data de hoje', amostra: '24/08/2026' },
|
||||
'contato' => { descricao: 'Primeiro nome de quem recebe', amostra: 'Carlos' }
|
||||
}.freeze
|
||||
|
||||
# Gatilhos que falam de um fechamento/pagamento de motorista.
|
||||
FECHAMENTO = {
|
||||
'motorista' => { descricao: 'Nome do motorista', amostra: 'Carlos Matheus Pimentel' },
|
||||
'consolidacao' => { descricao: 'Nome da consolidação', amostra: 'UBS NORTE 01–14/08' },
|
||||
'periodo' => { descricao: 'Período do fechamento', amostra: '01/08/2026 a 14/08/2026' },
|
||||
'valor' => { descricao: 'Valor do motorista', amostra: 'R$ 5.060,00' },
|
||||
'entregas' => { descricao: 'Entregas atendidas', amostra: '280' },
|
||||
'link_painel' => { descricao: 'Link do painel do motorista', amostra: 'https://app.reem.com.br/motorista' }
|
||||
}.freeze
|
||||
|
||||
POR_GATILHO = {
|
||||
'manual' => {},
|
||||
'consolidacao_finalizada' => FECHAMENTO,
|
||||
'pagamento_efetuado' => FECHAMENTO,
|
||||
'valor_alterado' => FECHAMENTO.merge(
|
||||
'o_que_mudou' => { descricao: 'O que foi alterado', amostra: 'Desconto de R$ 120,00 aplicado (avaria)' }
|
||||
),
|
||||
'operacao_alterada' => {
|
||||
'operacao' => { descricao: 'Operação afetada', amostra: 'UBS NORTE AGO 2026' },
|
||||
'o_que_mudou' => { descricao: 'O que foi alterado', amostra: '3 NFs entraram, 1 saiu' },
|
||||
'nf' => { descricao: 'Nota fiscal', amostra: '85382' }
|
||||
},
|
||||
'agendado' => {
|
||||
'operacao' => { descricao: 'Operação', amostra: 'UBS NORTE AGO 2026' },
|
||||
'periodo' => { descricao: 'Período do resumo', amostra: '01/08/2026 a 24/08/2026' },
|
||||
'entregues' => { descricao: 'Notas entregues', amostra: '4.851' },
|
||||
'recusas' => { descricao: 'Notas não entregues', amostra: '122' },
|
||||
'pendentes' => { descricao: 'Notas em aberto', amostra: '0' },
|
||||
'retentativas' => { descricao: 'Visitas além da primeira', amostra: '4' },
|
||||
'fora_operacao' => { descricao: 'Notas fora da operação', amostra: '2' }
|
||||
}
|
||||
}.freeze
|
||||
|
||||
def self.para(gatilho)
|
||||
COMUNS.merge(POR_GATILHO.fetch(gatilho.to_s, {}))
|
||||
end
|
||||
|
||||
def self.nomes(gatilho) = para(gatilho).keys
|
||||
|
||||
# { 'valor' => 'R$ 5.060,00', ... } — o contexto do PREVIEW.
|
||||
#
|
||||
# ⚠️ Só para preview. Num envio de verdade a amostra colocaria uma data fixa
|
||||
# e um valor inventado dentro da mensagem que o contato recebe.
|
||||
def self.amostra(gatilho)
|
||||
para(gatilho).transform_values { |meta| meta[:amostra] }
|
||||
end
|
||||
|
||||
# Valores REAIS das variáveis comuns — o que um envio de verdade deve usar
|
||||
# quando o gatilho não traz contexto próprio (ex.: disparo manual).
|
||||
def self.comuns_reais
|
||||
{
|
||||
'empresa' => Configuracao.valor('empresa_nome').presence || 'Reem Transportes',
|
||||
'data' => Date.current.strftime('%d/%m/%Y')
|
||||
}
|
||||
rescue StandardError
|
||||
# Tabela de configuração indisponível não pode impedir um disparo.
|
||||
{ 'data' => Date.current.strftime('%d/%m/%Y') }
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user