/** * Scanner automático de envios de email e mensagens no código * Identifica todos os locais onde emails são enviados para gerar templates */ import { Doc } from "../_generated/dataModel"; export interface EmailSendLocation { arquivo: string; funcao: string; tipo: "enfileirarEmail" | "enviarEmailComTemplate" | "enviarMensagem" | "html_inline"; linha?: number; contexto?: string; assunto?: string; corpo?: string; templateCodigo?: string; variaveis?: string[]; } /** * Lista de locais conhecidos onde emails são enviados * Este é um mapeamento manual baseado na análise do código */ export const LOCAIS_ENVIO_EMAIL: EmailSendLocation[] = [ // Chamados { arquivo: "packages/backend/convex/chamados.ts", funcao: "registrarNotificacoes", tipo: "enfileirarEmail", contexto: "Notificação ao solicitante quando chamado é criado/atualizado", assunto: "Chamado {{numeroTicket}} - {{titulo}}", corpo: "{{mensagem}}\n\n---\nCentral de Chamados SGSE - Sistema de Gerenciamento de Secretaria", variaveis: ["numeroTicket", "titulo", "mensagem"], }, { arquivo: "packages/backend/convex/chamados.ts", funcao: "registrarNotificacoes", tipo: "enfileirarEmail", contexto: "Notificação ao responsável quando chamado é atualizado", assunto: "Chamado {{numeroTicket}} - {{titulo}}", corpo: "{{mensagem}}\n\n---\nCentral de Chamados SGSE - Sistema de Gerenciamento de Secretaria", variaveis: ["numeroTicket", "titulo", "mensagem"], }, // Ausências { arquivo: "packages/backend/convex/ausencias.ts", funcao: "solicitar", tipo: "enfileirarEmail", contexto: "Notificação ao gestor quando funcionário solicita ausência", assunto: "Nova Solicitação de Ausência - {{funcionarioNome}}", corpo: "Olá {{gestorNome}},\n\nO funcionário {{funcionarioNome}} solicitou uma ausência:\n\n\n\nPor favor, acesse o sistema para aprovar ou reprovar esta solicitação.", variaveis: ["gestorNome", "funcionarioNome", "dataInicio", "dataFim", "motivo"], }, { arquivo: "packages/backend/convex/ausencias.ts", funcao: "aprovar", tipo: "enfileirarEmail", contexto: "Notificação ao funcionário quando ausência é aprovada", assunto: "Solicitação de Ausência Aprovada", corpo: "Olá {{funcionarioNome}},\n\nSua solicitação de ausência foi aprovada pelo gestor {{gestorNome}}:\n\n", variaveis: ["funcionarioNome", "gestorNome", "dataInicio", "dataFim", "motivo"], }, { arquivo: "packages/backend/convex/ausencias.ts", funcao: "reprovar", tipo: "enfileirarEmail", contexto: "Notificação ao funcionário quando ausência é reprovada", assunto: "Solicitação de Ausência Reprovada", corpo: "Olá {{funcionarioNome}},\n\nSua solicitação de ausência foi reprovada pelo gestor {{gestorNome}}:\n\n", variaveis: ["funcionarioNome", "gestorNome", "dataInicio", "dataFim", "motivo", "motivoReprovacao"], }, // Chat { arquivo: "packages/backend/convex/chat.ts", funcao: "enviarMensagem", tipo: "enviarEmailComTemplate", contexto: "Email quando usuário recebe nova mensagem no chat (usuário offline)", templateCodigo: "chat_mensagem", variaveis: ["remetente", "mensagem", "conversaId", "urlSistema"], }, { arquivo: "packages/backend/convex/chat.ts", funcao: "enviarMensagem", tipo: "enviarEmailComTemplate", contexto: "Email quando usuário é mencionado no chat (usuário offline)", templateCodigo: "chat_mencao", variaveis: ["remetente", "mensagem", "conversaId", "urlSistema"], }, // Painel de Notificações { arquivo: "apps/web/src/routes/(dashboard)/ti/notificacoes/+page.svelte", funcao: "enviarNotificacao", tipo: "enfileirarEmail", contexto: "Envio manual de notificação via painel de TI", assunto: "Notificação do Sistema", corpo: "{{mensagemPersonalizada}}", variaveis: ["mensagemPersonalizada"], }, { arquivo: "apps/web/src/routes/(dashboard)/ti/notificacoes/+page.svelte", funcao: "enviarNotificacao", tipo: "enviarEmailComTemplate", contexto: "Envio manual de notificação usando template via painel de TI", templateCodigo: "{{templateCodigo}}", variaveis: ["nome", "matricula"], }, ]; /** * Sugestões de templates baseadas nos locais de envio encontrados */ export interface TemplateSuggestion { codigo: string; nome: string; titulo: string; corpo: string; categoria: "email" | "chat" | "ambos"; variaveis: string[]; tags: string[]; origem: string; } /** * Gerar sugestões de templates baseadas nos locais de envio */ export function gerarSugestoesTemplates(): TemplateSuggestion[] { const sugestoes: TemplateSuggestion[] = []; // Template para ausência solicitada sugestoes.push({ codigo: "ausencia_solicitada", nome: "Ausência Solicitada", titulo: "Nova Solicitação de Ausência - {{funcionarioNome}}", corpo: "Olá {{gestorNome}},\n\nO funcionário {{funcionarioNome}} solicitou uma ausência:\n\n\n\nPor favor, acesse o sistema para aprovar ou reprovar esta solicitação.", categoria: "email", variaveis: ["gestorNome", "funcionarioNome", "dataInicio", "dataFim", "motivo"], tags: ["ausencia", "solicitacao", "gestao"], origem: "ausencias.ts - solicitar", }); // Template para ausência aprovada sugestoes.push({ codigo: "ausencia_aprovada", nome: "Ausência Aprovada", titulo: "Solicitação de Ausência Aprovada", corpo: "Olá {{funcionarioNome}},\n\nSua solicitação de ausência foi aprovada pelo gestor {{gestorNome}}:\n\n", categoria: "email", variaveis: ["funcionarioNome", "gestorNome", "dataInicio", "dataFim", "motivo"], tags: ["ausencia", "aprovacao", "gestao"], origem: "ausencias.ts - aprovar", }); // Template para ausência reprovada sugestoes.push({ codigo: "ausencia_reprovada", nome: "Ausência Reprovada", titulo: "Solicitação de Ausência Reprovada", corpo: "Olá {{funcionarioNome}},\n\nSua solicitação de ausência foi reprovada pelo gestor {{gestorNome}}:\n\n", categoria: "email", variaveis: ["funcionarioNome", "gestorNome", "dataInicio", "dataFim", "motivo", "motivoReprovacao"], tags: ["ausencia", "reprovacao", "gestao"], origem: "ausencias.ts - reprovar", }); // Template genérico para notificações de chamados sugestoes.push({ codigo: "chamado_notificacao", nome: "Notificação de Chamado", titulo: "Chamado {{numeroTicket}} - {{titulo}}", corpo: "{{mensagem}}\n\n---\nCentral de Chamados SGSE - Sistema de Gerenciamento de Secretaria", categoria: "email", variaveis: ["numeroTicket", "titulo", "mensagem"], tags: ["chamado", "notificacao", "suporte"], origem: "chamados.ts - registrarNotificacoes", }); return sugestoes; } /** * Obter todos os locais de envio de email */ export function obterLocaisEnvio(): EmailSendLocation[] { return LOCAIS_ENVIO_EMAIL; }