79 lines
3.7 KiB
Ruby
79 lines
3.7 KiB
Ruby
# 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
|