π· 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
OData APIs, RFC/BAPI para legado. Complexo mas bem documentado.
REST APIs modernas. Integracao mais direta com autenticacao OAuth.
WebServices SOAP/REST. Documentacao variavel, comunidade ativa.
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]))
};
}
πΊοΈ 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 });
}
π 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
Extrai todos os dados periodicamente. Simples mas pesado. Ideal para dados historicos.
Apenas registros alterados desde ultima sync. Mais eficiente, requer campo de timestamp.
Captura mudancas em tempo real via log do banco. Mais complexo, dados mais frescos.
πͺ 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 });
}
π 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
Usuario:senha em Base64. Simples mas menos seguro. Ideal para integracao server-to-server.
Tokens com expiracao. Mais seguro, requer refresh token logic.
Chave fixa no header. Comum em ERPs mais simples.
Autenticacao mutua TLS. Mais seguro, complexo de configurar.
π§π· 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.