209 lines
7.6 KiB
TypeScript
209 lines
7.6 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;
|
|
}
|