Visão Geral

Sobre o Projeto

O Elfa AI Mail Service é um serviço de processamento automatizado de casos do Salesforce, utilizando uma arquitetura serverless na AWS com NestJS. O sistema processa automaticamente solicitações de clientes para segunda via de boletos e notas fiscais.

Funcionalidades Principais

  • Classificação Automática: Utiliza IA (OpenAI) para classificar a intenção do cliente (BOLETO, NOTA_FISCAL ou UNKNOWN)
  • Busca de Documentos: Integração com Elfa Services para buscar PDFs de boletos e notas fiscais automaticamente
  • Geração de Email: IA gera conteúdo personalizado do email em português brasileiro
  • Envio Automatizado: Envia emails com documentos anexos via AWS SES
  • Processamento Agendado: Execução automática a cada 5 minutos via EventBridge
  • Rastreabilidade: Logs detalhados e rastreamento de cada processamento

Fluxo de Processamento

Diagrama de Fluxo de Processamento

Arquitetura

Arquitetura Serverless

O sistema utiliza uma arquitetura serverless na AWS, composta por funções Lambda, API Gateway, EventBridge, RDS PostgreSQL e SQS.

Diagrama de Arquitetura AWS

Componentes Principais

Lambda API Handler

Processa requisições HTTP via API Gateway. Utiliza cache de servidor para otimização de cold starts.

dist/lambda.handler

Lambda Cron Handler

Executa processamento agendado a cada 5 minutos via EventBridge.

dist/cron-handler.handler

API Gateway

Endpoint REST para acesso HTTP ao serviço.

RDS PostgreSQL

Banco de dados relacional para persistência de dados.

SQS Queue

Fila para processamento assíncrono (preparado para uso futuro).

EventBridge

Agendamento de execuções periódicas (cron jobs).

Integrações Externas

  • Salesforce API: Busca de casos e informações de clientes
  • Elfa Services API: Busca de pedidos, boletos e notas fiscais
  • OpenAI API: Classificação de casos e geração de conteúdo de email
  • AWS SES: Envio de emails transacionais

VPC e Segurança

O Lambda está configurado para executar dentro de uma VPC para acesso seguro ao RDS PostgreSQL. Security Groups e Subnets são configurados para garantir isolamento e segurança.

Tecnologias Utilizadas

Core Framework

NestJS 11.x

Framework Node.js baseado em TypeScript, utilizando padrões de arquitetura modular e injeção de dependências

TypeScript 5.7

Linguagem de programação com tipagem estática

Node.js 20.x

Runtime JavaScript configurado no Lambda

Serverless Framework

Serverless Framework 3.x

Framework para deploy e gerenciamento de funções serverless

serverless-http 4.x

Adaptador para executar aplicações Express/NestJS em Lambda

serverless-offline

Plugin para desenvolvimento local

Banco de Dados

PostgreSQL

Banco de dados relacional (RDS AWS)

Drizzle ORM 0.44.x

ORM type-safe para TypeScript

drizzle-kit

Ferramenta de migração e geração de schema

Integrações e APIs

OpenAI API

Classificação de casos (GPT-4.1-mini) e geração de conteúdo (GPT-4o-mini)

Salesforce API

Integração OAuth2 para busca de casos

Elfa Services API

API interna para busca de pedidos, boletos e notas fiscais

AWS SES

Serviço de envio de emails via @nestjs-modules/mailer

Observabilidade

AWS X-Ray

Tracing distribuído habilitado no Lambda

CloudWatch Logs

Logs centralizados com retenção de 30 dias

Estrutura do Repositório

Estrutura de Diretórios

elfa-ai-mail-service/
├── src/
│   ├── app.module.ts              # Módulo principal da aplicação
│   ├── main.ts                    # Entry point para desenvolvimento local
│   ├── lambda.ts                  # Handler Lambda para API Gateway
│   ├── cron-handler.ts            # Handler Lambda para EventBridge
│   ├── modules/
│   │   └── process-message/       # Módulo de processamento de mensagens
│   │       ├── controllers/       # Controllers REST
│   │       ├── services/          # Lógica de negócio
│   │       └── process.module.ts
│   └── shared/
│       ├── database/              # Configuração e repositórios do banco
│       │   ├── schema.ts          # Schema Drizzle ORM
│       │   ├── repositories/      # Repositórios de dados
│       │   └── handlers/          # Handlers de log
│       └── providers/             # Provedores de serviços externos
│           ├── sales-force/       # Integração Salesforce
│           ├── elfa-services/    # Integração Elfa Services
│           ├── open-ai/           # Integração OpenAI
│           └── mailer/            # Configuração de email
├── test/                          # Testes end-to-end
├── scripts/                       # Scripts auxiliares
├── serverless.yml                 # Configuração Serverless Framework
├── drizzle.config.ts              # Configuração Drizzle ORM
├── package.json                   # Dependências e scripts
└── tsconfig.json                  # Configuração TypeScript

Módulos Principais

ProcessModule

Módulo responsável pelo processamento de casos do Salesforce

  • ProcessController: Endpoint REST
  • ProcessMessageService: Orquestração do fluxo
  • OpenAIClassifierService: Classificação com IA
  • GetDocumentsService: Busca de documentos
  • SendEmailService: Envio de emails

DatabaseModule

Configuração e acesso ao banco de dados PostgreSQL

  • SendingRepository: CRUD de envios
  • LogRepository: Registro de logs
  • LogHandlerService: Gerenciamento de logs

Providers

Módulos de integração com serviços externos

  • SalesForceModule: Integração Salesforce
  • ElfaServicesModule: Integração Elfa
  • OpenAIModule: Integração OpenAI
  • MailerModule: Configuração de email

Schema do Banco de Dados

Tabela: sendings

Armazena informações sobre o processamento de cada caso

  • id: ID único (serial)
  • caseId: ID do caso no Salesforce
  • email: Email do cliente
  • classifier: Classificação (BOLETO/NOTA_FISCAL/UNKNOWN)
  • status: Status do processamento (processing/sent/error)
  • billetPdf: PDF do boleto (base64)
  • invoicePdf: PDF da nota fiscal (base64)
  • E outros campos relacionados...

Tabela: logs

Armazena logs detalhados de cada processamento

  • id: ID único (serial)
  • sendingId: Referência ao envio (FK)
  • totalResponseTime: Tempo total em milissegundos
  • metadata: Metadados do processamento (JSONB)
  • errors: Array de erros (JSONB)

Segurança

Gerenciamento de Credenciais

  • Variáveis de Ambiente: Todas as credenciais são gerenciadas via variáveis de ambiente, nunca commitadas no código
  • AWS Secrets Manager: Recomendado para produção (pode ser implementado)
  • Rotacao de Credenciais: Implementar rotacao periodica de credenciais de APIs externas

VPC e Network Security

  • VPC Configuration: Lambda executando dentro de VPC para acesso seguro ao RDS
  • Security Groups: Configurados para permitir apenas trafego necessario
  • Subnets: Isolamento de rede em subnets privadas
  • Principio do Menor Privilegio: Aplicado em todas as configuracoes de rede

IAM e Permissões

  • Principio do Menor Privilegio: Permissoes IAM especificas apenas para recursos necessarios
  • Permissoes Granulares:
    • SQS: SendMessage, ReceiveMessage, DeleteMessage, GetQueueUrl
    • RDS: Acesso apenas ao banco especifico do projeto
  • Sem Permissoes Administrativas: Nenhuma permissao de administrador concedida

API Gateway Security

  • CORS: Configurado adequadamente para permitir apenas origens autorizadas
  • Autenticacao: Considerar implementacao de autenticacao JWT se necessario
  • Rate Limiting: Considerar implementacao de rate limiting para protecao contra abuso

Dados Sensiveis

  • PDFs em Base64: Armazenados no banco de dados, considerar encriptacao se necessario
  • Logs: Nenhum dado sensivel (senhas, tokens) deve ser logado
  • Transmissao: Todas as comunicacoes via HTTPS/TLS

Monitoramento

AWS X-Ray

Tracing distribuido habilitado no Lambda para rastrear latencia de cada componente e identificar gargalos no processamento.

  • Rastreamento de todas as chamadas de API externas
  • Medicao de tempo de execucao de cada etapa
  • Identificacao de dependencias e integracoes

CloudWatch Logs

Logs centralizados com retencao de 30 dias configurada. Todos os logs sao estruturados para facil analise.

  • Logs de execucao do Lambda
  • Logs de erros e excecoes
  • Logs de processamento de casos
  • Logs de envio de emails

Logs Customizados no Banco

Tabela logs no banco de dados para auditoria detalhada, incluindo metricas de tempo, erros e metadados de cada processamento.

  • totalResponseTime: Tempo total de processamento
  • metadata: Informacoes contextuais do processamento
  • errors: Array de erros (se houver)
  • sendingId: Relacao com o envio processado

Metricas Importantes

Latencia

  • Tempo de resposta da API
  • Tempo de processamento completo
  • Tempo de cold start

Taxa de Erro

  • Erros de classificacao (UNKNOWN)
  • Erros de envio de email
  • Erros de integracao

Throughput

  • Casos processados por minuto
  • Emails enviados com sucesso
  • Taxa de sucesso geral

Alertas Recomendados

Taxa de Erro > 5%

Alertar quando a taxa de erro ultrapassar 5% das execucoes

Latencia P95 > 30 segundos

Alertar quando 95% das requisicoes demorarem mais de 30 segundos

Falhas Consecutivas

Alertar quando o cron job falhar consecutivamente

Erros de Conexao

Alertar sobre erros de conexao com banco de dados ou APIs externas

Dashboards Recomendados

  • Dashboard de Performance: Latencia, throughput e tempo de resposta
  • Dashboard de Erros: Taxa de erro por tipo e tendencias
  • Dashboard de Integracoes: Status e latencia de APIs externas
  • Dashboard de Negocio: Casos processados, emails enviados, taxa de sucesso