190 lines
7.8 KiB
TypeScript
190 lines
7.8 KiB
TypeScript
/**
|
|
* 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 <strong>{{funcionarioNome}}</strong> solicitou uma ausência:\n\n<ul><li><strong>Período:</strong> {{dataInicio}} até {{dataFim}}</li><li><strong>Motivo:</strong> {{motivo}}</li></ul>\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 <strong>aprovada</strong> pelo gestor {{gestorNome}}:\n\n<ul><li><strong>Período:</strong> {{dataInicio}} até {{dataFim}}</li><li><strong>Motivo:</strong> {{motivo}}</li></ul>",
|
|
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 <strong>reprovada</strong> pelo gestor {{gestorNome}}:\n\n<ul><li><strong>Período:</strong> {{dataInicio}} até {{dataFim}}</li><li><strong>Motivo:</strong> {{motivo}}</li><li><strong>Motivo da Reprovação:</strong> {{motivoReprovacao}}</li></ul>",
|
|
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 <strong>{{funcionarioNome}}</strong> solicitou uma ausência:\n\n<ul><li><strong>Período:</strong> {{dataInicio}} até {{dataFim}}</li><li><strong>Motivo:</strong> {{motivo}}</li></ul>\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 <strong>aprovada</strong> pelo gestor {{gestorNome}}:\n\n<ul><li><strong>Período:</strong> {{dataInicio}} até {{dataFim}}</li><li><strong>Motivo:</strong> {{motivo}}</li></ul>",
|
|
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 <strong>reprovada</strong> pelo gestor {{gestorNome}}:\n\n<ul><li><strong>Período:</strong> {{dataInicio}} até {{dataFim}}</li><li><strong>Motivo:</strong> {{motivo}}</li><li><strong>Motivo da Reprovação:</strong> {{motivoReprovacao}}</li></ul>",
|
|
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;
|
|
}
|
|
|