Skip to content

Módulo de Integrações

Documentação técnica do módulo de integrações polimórficas — gateways de pagamento, bancos e mensageria via WhatsApp.

Arquitetura

O sistema resolve o provider ativo em tempo de execução com base nas credenciais configuradas pelo tenant. Nenhuma lógica de negócio precisa saber qual provider está ativo.

IntegrationsController

  IntegrationService

  IntegrationProviderFactory
   ├─ IPaymentGateway  →  MercadoPagoGateway | FastGivrGateway
   ├─ IBankProvider    →  SicoobBankProvider | BBBankProvider
   └─ IWhatsAppProvider→  EvolutionApiWhatsApp

Providers Disponíveis

ProviderTipoDescrição
FastGivrPaymentGateway próprio da plataforma FastGivr (PIX, cartão, boleto)
MercadoPagoPaymentGateway MercadoPago (PIX, cartão, boleto)
SicoobBankCooperativa de crédito — extrato e saldo via API OAuth2
BBBankBanco do Brasil — extrato e saldo via Developer Portal
EvolutionApiMessagingInstância WhatsApp via Evolution API (self-hosted)

Modelo de Dados

typescript
interface TenantIntegration {
  id: string;
  companyId: string;
  provider: 'FastGivr' | 'MercadoPago' | 'Sicoob' | 'BB' | 'EvolutionApi';
  type: 'Payment' | 'Bank' | 'Messaging';
  isActive: boolean;
  status: 'Connected' | 'Error' | 'NotConfigured';
  lastErrorMessage?: string;
  lastTestedAt?: string;
  credentialsMasked: Record<string, string>;  // sensitive fields: ****xxxx
  updatedAt: string;
}

Credenciais são armazenadas criptografadas com AES-256 no banco. A API nunca expõe valores completos de campos sensíveis — apenas os últimos 4 caracteres mascarados.


Endpoints

MétodoEndpointPapel mínimoDescrição
GET/integrationsAdminListar integrações do tenant
PUT/integrations/:providerAdminCriar ou atualizar credenciais
DELETE/integrations/:providerAdminRemover integração
POST/integrations/:provider/testAdminTestar conexão
POST/webhooks/payment/:provider?tenant=:id— (HMAC)Webhook polimórfico de pagamento

Configuração por Provider

FastGivr

json
{
  "ApiKey": "fgvr_live_...",
  "WebhookSecret": "whsec_...",
  "Sandbox": "false"
}
CampoObrigatórioDescrição
ApiKeyChave de API do ambiente
WebhookSecretSecret HMAC-SHA256 para validar webhooks
Sandbox"true" para ambiente de testes (padrão: "false")

URL de webhook a configurar no painel FastGivr:

POST https://api.systemclinic.com.br/webhooks/payment/FastGivr?tenant={companyId}

MercadoPago

json
{
  "AccessToken": "APP_USR-...",
  "WebhookSecret": "..."
}
CampoObrigatórioDescrição
AccessTokenToken de acesso da aplicação MP
WebhookSecretSecret para validação de assinatura (v1)

URL de webhook a configurar no Mercado Pago Developers:

POST https://api.systemclinic.com.br/webhooks/payment/MercadoPago?tenant={companyId}

Sicoob

json
{
  "ClientId": "...",
  "ClientSecret": "...",
  "CooperativeCode": "0756",
  "AccountNumber": "123456"
}
CampoObrigatórioDescrição
ClientIdClient ID do app cadastrado no Sicoob Developers
ClientSecretSecret correspondente
CooperativeCodeNúmero da cooperativa (4 dígitos)
AccountNumberNúmero da conta corrente

Scopes solicitados: cobranca_boletos-consultar conta-corrente-consultar


Banco do Brasil

json
{
  "DeveloperAppKey": "...",
  "BasicCredentials": "base64(clientId:clientSecret)",
  "AccountNumber": "123456-7",
  "AccountType": "corrente"
}
CampoObrigatórioDescrição
DeveloperAppKeygw-dev-app-key do Portal BB Developers
BasicCredentialsbase64(clientId:clientSecret) do OAuth2
AccountNumberNúmero da conta com dígito
AccountType"corrente" ou "poupanca" (padrão: "corrente")

Scopes solicitados: extrato.read saldo.read


Evolution API (WhatsApp)

json
{
  "BaseUrl": "https://evolution.suaempresa.com.br",
  "ApiKey": "...",
  "Instance": "clinica-principal"
}
CampoObrigatórioDescrição
BaseUrlURL da instância Evolution API (self-hosted)
ApiKeyAPI Key configurada na instância
InstanceNome da instância WhatsApp

A instância precisa estar em estado open (QR Code lido) para que o teste de conexão passe.


Webhook de Pagamento (Polimórfico)

POST /webhooks/payment/{provider}?tenant={companyId}

Fluxo:

  1. Lê o body raw para validação HMAC
  2. Resolve o provider configurado para o tenant
  3. Valida assinatura (X-Signature ou X-Hub-Signature-256)
  4. Normaliza o evento para PaymentConfirmedEvent (provider-agnostic)
  5. Encaminha ao módulo financeiro (quando implementado)

Headers esperados por provider:

ProviderHeader de assinatura
FastGivrX-Signature
MercadoPagoX-Signature (formato ts=...,v1=...)

Uso em Outros Serviços

csharp
// Resolver gateway ativo do tenant
var gateway = await integrationService.ResolvePaymentGatewayAsync(companyId);

// Resolver provider bancário específico
var bank = await integrationService.ResolveBankProviderAsync(companyId, "Sicoob");
var transactions = await bank.GetTransactionsAsync(from, to);

// Resolver WhatsApp
var wa = await integrationService.ResolveWhatsAppProviderAsync(companyId);
await wa.SendTextAsync("+5511999998888", "Seu agendamento foi confirmado.");

Segurança

  • Credenciais armazenadas com AES-256 via IEncryptionService
  • API nunca retorna valores completos de campos sensíveis (AccessToken, ApiKey, ClientSecret)
  • Webhooks validados por HMAC-SHA256 antes de qualquer processamento
  • Apenas roles Admin e Owner podem gerenciar integrações
  • Cada integração é isolada por companyId (multi-tenant)

Adicionar novo provider

  1. Implementar IPaymentGateway, IBankProvider ou IWhatsAppProvider em Services/Integrations/Providers/
  2. Adicionar o case no IntegrationProviderFactory
  3. Declarar campos obrigatórios em IntegrationService.RequiredFields
  4. Classificar o tipo em PaymentProviders, BankProviders ou MessagingProviders

Desenvolvido com ❤️ pela equipe FastGivr.