/** * 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; }