Files
Reem-Notas/app/services/notificacao/variaveis.rb

79 lines
3.7 KiB
Ruby
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 0114/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