Inicio / Trilha 3 / Modulo 3.3
MODULO 3.3

🏒 Integracao com ERPs

SAP, Oracle, Totvs, mapeamento de dados empresariais, sincronizacao e webhooks para dashboards corporativos.

πŸ“š
6
Topicos
⏱️
80min
Duracao
πŸ“Š
Avancado
Nivel
🎯
Enterprise
Tipo
1

πŸ”· Arquitetura de ERPs

Entendendo sistemas legados

ERPs (Enterprise Resource Planning) sao sistemas que integram todos os processos de uma empresa: financeiro, vendas, estoque, RH, producao. SAP, Oracle, Totvs, Sankhya sao os mais comuns no Brasil.

Para dashboards corporativos, ERPs sao a fonte de verdade. Dados de receita, custos, estoque - tudo vem do ERP. Integrar corretamente e crucial.

πŸ“‹ Principais ERPs e suas APIs

SAP S/4HANA

OData APIs, RFC/BAPI para legado. Complexo mas bem documentado.

Oracle ERP Cloud

REST APIs modernas. Integracao mais direta com autenticacao OAuth.

Totvs Protheus

WebServices SOAP/REST. Documentacao variavel, comunidade ativa.

Sankhya

API REST bem estruturada. Popular em empresas medias brasileiras.

πŸ’» Codigo: Conexao com SAP OData

// Conexao com SAP S/4HANA via OData
const sapClient = {
  baseUrl: 'https://sap-server.company.com/sap/opu/odata/sap',

  async getOrders(filters: { dateFrom: string }) {
    const response = await fetch(
      `${this.baseUrl}/API_SALES_ORDER_SRV/A_SalesOrder?$filter=CreationDate ge datetime'${filters.dateFrom}'`,
      {
        headers: {
          'Authorization': `Basic ${Buffer.from(`${user}:${pass}`).toString('base64')}`,
          'Accept': 'application/json'
        }
      }
    );
    const data = await response.json();
    return data.d.results.map(transformSAPOrder);
  }
};

function transformSAPOrder(sapOrder: SAPOrder) {
  return {
    id: sapOrder.SalesOrder,
    customerName: sapOrder.SoldToParty,
    total: parseFloat(sapOrder.TotalNetAmount),
    currency: sapOrder.TransactionCurrency,
    createdAt: new Date(parseInt(sapOrder.CreationDate.match(/\d+/)[0]))
  };
}
2

πŸ—ΊοΈ Mapeamento de Dados

ETL e transformacao

ETL (Extract, Transform, Load) e o processo de extrair dados do ERP, transforma-los para o formato do dashboard e carregar no destino. Raramente dados do ERP estao prontos para visualizacao direta.

Transformacoes comuns incluem: agregacao de valores, conversao de moedas, calculo de metricas derivadas, limpeza de dados nulos.

πŸ’» Codigo: Pipeline ETL

// Pipeline ETL para dados de vendas
async function etlSalesData() {
  // EXTRACT - Buscar do ERP
  const rawOrders = await sapClient.getOrders({ dateFrom: '2024-01-01' });

  // TRANSFORM - Processar e agregar
  const transformed = rawOrders
    .filter(order => order.status !== 'CANCELLED')
    .map(order => ({
      ...order,
      totalBRL: convertCurrency(order.total, order.currency, 'BRL'),
      month: format(order.createdAt, 'yyyy-MM'),
      category: mapProductCategory(order.productCode)
    }));

  const aggregated = groupBy(transformed, 'month');
  const metrics = Object.entries(aggregated).map(([month, orders]) => ({
    month,
    revenue: sumBy(orders, 'totalBRL'),
    count: orders.length,
    avgTicket: sumBy(orders, 'totalBRL') / orders.length
  }));

  // LOAD - Salvar no banco do dashboard
  await prisma.salesMetric.createMany({ data: metrics });
}
3

πŸ”„ Sincronizacao de Dados

Batch vs real-time

Sincronizacao define quando e como dados sao atualizados do ERP para o dashboard. A escolha impacta freshness dos dados vs carga no sistema.

βš–οΈ Estrategias de Sync

Full Sync (Batch)

Extrai todos os dados periodicamente. Simples mas pesado. Ideal para dados historicos.

Cron: 0 3 * * * (3AM diario)
Delta Sync

Apenas registros alterados desde ultima sync. Mais eficiente, requer campo de timestamp.

WHERE updated_at > last_sync
CDC (Change Data Capture)

Captura mudancas em tempo real via log do banco. Mais complexo, dados mais frescos.

Debezium, Oracle GoldenGate
4

πŸͺ Webhooks e Eventos

Notificacoes push

Webhooks invertem o fluxo: ao inves do dashboard buscar dados (polling), o ERP notifica quando algo muda. Mais eficiente e com menor latencia.

πŸ’» Codigo: Endpoint de Webhook

// Next.js API Route para receber webhooks do ERP
export async function POST(request: Request) {
  const signature = request.headers.get('X-Webhook-Signature');
  const body = await request.text();

  // Validar assinatura
  if (!verifyWebhookSignature(body, signature, WEBHOOK_SECRET)) {
    return new Response('Invalid signature', { status: 401 });
  }

  const event = JSON.parse(body);

  // Processar por tipo de evento
  switch (event.type) {
    case 'order.created':
      await updateDashboardMetrics(event.data);
      await notifyRealtimeClients('new-order', event.data);
      break;
    case 'order.updated':
      await refreshOrderCache(event.data.orderId);
      break;
  }

  // Responder rapido - processamento pesado em background
  return new Response('OK', { status: 200 });
}
5

πŸ” Autenticacao com ERPs

Credenciais e tokens

Cada ERP tem seu metodo de autenticacao preferido. SAP usa Basic Auth ou OAuth, Oracle usa OAuth 2.0, Totvs varia por versao.

πŸ”‘ Metodos de Autenticacao

Basic Auth

Usuario:senha em Base64. Simples mas menos seguro. Ideal para integracao server-to-server.

OAuth 2.0

Tokens com expiracao. Mais seguro, requer refresh token logic.

API Key

Chave fixa no header. Comum em ERPs mais simples.

Certificado X.509

Autenticacao mutua TLS. Mais seguro, complexo de configurar.

6

πŸ‡§πŸ‡· ERPs Brasileiros

Totvs, Sankhya, Senior

O mercado brasileiro tem ERPs locais muito populares. Totvs domina o mercado mid-market, Sankhya cresce em industrias, Senior foca em RH e folha.

πŸ’» Codigo: Integracao Totvs Protheus

// Conexao com Totvs Protheus REST
class TotvsPro theusClient {
  private token: string;

  async authenticate() {
    const response = await fetch(`${this.baseUrl}/api/oauth2/token`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
      body: new URLSearchParams({
        grant_type: 'password',
        username: process.env.TOTVS_USER!,
        password: process.env.TOTVS_PASS!
      })
    });
    this.token = (await response.json()).access_token;
  }

  async getSalesOrders(params: { branch: string; startDate: string }) {
    const response = await fetch(
      `${this.baseUrl}/rest/MATA410/${params.branch}?startDate=${params.startDate}`,
      { headers: { 'Authorization': `Bearer ${this.token}` } }
    );
    return response.json();
  }
}

πŸ’‘ Dica Pratica

Para ERPs brasileiros: A documentacao pode ser escassa. Participe de comunidades como Totvs Developer Community, grupos de WhatsApp/Telegram de desenvolvedores. Muito conhecimento esta disperso em forums e nao na doc oficial.

πŸ“ Resumo do Modulo

βœ“
Arquitetura ERP - SAP, Oracle, Totvs e suas APIs
βœ“
ETL - Extract, Transform, Load para dados do ERP
βœ“
Sincronizacao - Full sync, delta sync, CDC
βœ“
Webhooks - Notificacoes push do ERP para dashboard
βœ“
Autenticacao - Basic Auth, OAuth, certificados
βœ“
ERPs Brasileiros - Especificidades de Totvs, Sankhya, Senior