Cobranças — Templates de Mensagem
Tabela: cobranca_templates · Trigger: fn_cobranca_templates_protect_fixos · Edge: admin-financeiro (actions list_templates / upsert_template / archive_template).
Categorias
| Categoria | Slug pattern | Quem usa | Pode arquivar? | Pode renomear slug? |
|---|---|---|---|---|
fixo_regua | cobranca_d1, cobranca_d7, cobranca_d15, cobranca_manual | Régua automática + envio manual genérico | ❌ (trigger bloqueia) | ❌ |
manual | manual_* (auto-prefixado) | Envio manual seletivo | ✅ (toggle ativo=false) | ❌ (slug imutável após criação) |
Variáveis suportadas
Renderizadas por _shared/cobranca-template-render.ts:
| Variável | Origem |
|---|---|
{{escola_nome}} | escolas.nome |
{{numero_fatura}} | escola_faturas.numero_fatura (ou "Pendente") |
{{valor}} | valor − desconto + taxas, formatado em BRL |
{{vencimento}} | data BRT em dd/mm/aaaa |
{{dias_atraso}} | calculado por calcularDiasAtrasoBRT |
Blocos condicionais simples ({{#dias_atraso}}…{{/dias_atraso}}) suportados pelo render para textos contextuais.
Resolução do template no envio
admin-financeiro/index.ts → resolverMensagem():
- Slug ∈ fixos → usa
gerarMensagemSMS()(texto canônico hardcoded em_shared/sms-templates.ts). Garante paridade entre régua automática e envio manual. - Slug
manual_*→ lêcobranca_templates.corpoe renderiza com as vars acima. Inativo ⇒ erro 422.
Por que slugs fixos não leem do banco? Para garantir que a régua automática (cron) nunca dependa de uma row removível e que mudanças no texto sejam revisadas via PR (versionadas). A edição em
templates-tabpermite ajustar o nome de exibição dos fixos, mas o corpo efetivamente enviado pela régua continua o do código.
RLS e proteção
- RLS fail-close: SELECT/INSERT/UPDATE/DELETE só
service_role(acesso via edge function autenticada). - Trigger
fn_cobranca_templates_protect_fixosbloqueia DELETE, alteração de slug/categoria eativo=falseemcategoria='fixo_regua'. - Slug de manual sem prefixo
manual_→ erro22023.
Logs
faturamento.template_criadofaturamento.template_atualizadofaturamento.template_arquivado
Limitações conhecidas
- Sem versionamento histórico do corpo (apenas
atualizado_em). - Sem preview ao vivo no editor — checar texto manualmente antes de salvar.
- Bulk send respeita 6s entre mensagens (Wasender), templates não alteram esse delay.