Analise as finanças do NetSuite — da conexão à DRE
~45 minutos · uma conexão ativa com o NetSuite, um razão geral carregado, uma DRE mensal, um aging de contas a receber e uma atualização agendada
Este é o caminho do primeiro dia para um controller ou analista de FP&A: ao final, você terá extraído o seu razão geral diretamente do NetSuite, transformado em uma demonstração do resultado (DRE) mensal que se lê como um demonstrativo, criado um aging de contas a receber, colocado ambos em um painel e configurado tudo para ser atualizado sozinho. Sem exportar planilhas, sem redigitação manual — os números vêm do NetSuite e permanecem atualizados.
Você vai conectar uma vez, extrair uma vez e depois fazer a parte que realmente importa: transformar linhas brutas do razão geral nos resumos que uma pessoa de negócios lê na manhã de segunda-feira.
Pré-requisitos
Seção intitulada “Pré-requisitos”- Um espaço de trabalho do PlaidCloud e um projeto para trabalhar (inicie um teste se precisar de um).
- Uma conexão ativa com o NetSuite. Siga primeiro Conectar ao NetSuite — você precisa de OAuth 2.0 e REST Web Services habilitados no NetSuite, do ID de cliente da integração, de um ID de certificado, do ID da sua conta e do PEM da chave privada. Confirme que Enviar solicitação de teste está verde antes de começar aqui.
- Não é preciso SQL para transformar os dados — você fará isso com etapas de transformação padrão. O único texto de consulta é a extração do NetSuite, e todas as consultas de extração são fornecidas. Mantenha Exemplos de consultas SuiteQL do NetSuite aberto em uma guia; este tutorial se baseia nele.
Etapa 1: crie um fluxo de trabalho
Seção intitulada “Etapa 1: crie um fluxo de trabalho”O fluxo de trabalho é o pipeline que extrai e transforma os dados.
- Abra seu projeto e vá para a guia Fluxos de trabalho.
- Clique em Novo fluxo de trabalho, dê a ele um nome como
NetSuite Financialse abra-o.
Etapa 2: extraia o razão geral
Seção intitulada “Etapa 2: extraia o razão geral”Uma única consulta SuiteQL fornece um ano de movimentações contábeis — todas as contas, todos os meses — o que basta para criar uma DRE e, mais tarde, outros demonstrativos.
-
Adicione uma etapa Solicitação REST. Na guia Solicitação, defina Conexão como sua conexão do NetSuite, Método como
POSTe Endpoint como/services/rest/query/v1/suiteql. -
No Corpo, coloque este SuiteQL envolvido como
{"q": "…"}:SELECTTO_CHAR(t.trandate, 'YYYY-MM') AS period,a.accttype AS account_type,a.acctnumber AS account_number,BUILTIN.DF(a.id) AS account_name,tal.amount AS amountFROM transactionaccountingline talJOIN transaction t ON t.id = tal.transactionJOIN account a ON a.id = tal.accountWHERE tal.posting = 'T'AND tal.accountingbook = 1AND t.trandate BETWEEN TO_DATE('2026-01-01', 'YYYY-MM-DD')AND TO_DATE('2026-12-31', 'YYYY-MM-DD')ORDER BY period, a.acctnumber -
Na guia Resposta, defina o destino como Tabela — chame-a de
netsuite_gl— e defina os tipos de coluna:amount→ Moeda, todas as demais → Texto. (O SuiteQL retorna números e datas como texto; o tipo é o que permite queamountseja somado.) -
Clique em Enviar solicitação de teste para confirmar que ela é executada e, em seguida, execute a etapa. Agora você tem uma tabela
netsuite_gl: uma linha por conta por mês, com um valor de lançamento com sinal.
Etapa 3: transforme o razão geral em uma DRE
Seção intitulada “Etapa 3: transforme o razão geral em uma DRE”Agora a análise, feita com uma única transformação de apontar e clicar — sem SQL. Uma DRE é apenas o razão geral consolidado: contas de receita e de despesa, agrupadas em algumas linhas, com o sinal invertido para que a receita apareça positiva. Uma etapa Table Extract faz tudo isso nas guias Seleção de dados da tabela e Filtros de dados.
-
Adicione uma etapa Table Extract. Defina sua Origem como
netsuite_gle seu Destino como uma nova tabela,netsuite_pnl. -
Na guia Filtros de dados, mantenha apenas as contas de receita e de despesa (deixe de fora as contas de balanço patrimonial): adicione um filtro em que
account_typeé um deIncome,OthIncome,COGS,Expense,OthExpense. -
Na guia Seleção de dados da tabela, clique em Resumir para ativar a agregação e, em seguida, configure três colunas de destino:
period— mapeada diretamente da origem. Resumir Agrupar por.pnl_line— uma expressão (abaixo) que transforma cada tipo de conta em uma linha do relatório. Resumir Agrupar por.amount— uma expressãonetsuite_gl.amount * -1(a inversão de sinal). Resumir Soma.
Para
pnl_line, clique duas vezes na célula de expressão e insira (o editor permite apontar e clicar nas colunas e na funçãocasedo grupo Condições):case((netsuite_gl.account_type.in_(['Income', 'OthIncome']), '1 - Revenue'),(netsuite_gl.account_type == 'COGS', '2 - Cost of Goods Sold'),(netsuite_gl.account_type.in_(['Expense', 'OthExpense']), '3 - Operating Expenses'),) -
Execute a etapa.
A expressão amount * -1 é o único movimento contábil: negar o valor positivo para débito faz com que a receita fique positiva e os custos negativos, de modo que as três linhas de cada mês somem o lucro líquido. Em seguida, Soma com Agrupar por em period e pnl_line consolida todas as contas nessas três linhas por mês. As expressões usam o editor de apontar e clicar do PlaidCloud — veja Uso avançado do Data Mapper e a referência de expressões.
Etapa 4: leia como um profissional de finanças
Seção intitulada “Etapa 4: leia como um profissional de finanças”Abra a tabela netsuite_pnl. Para cada mês, você tem três números:
| period | pnl_line | amount |
|---|---|---|
| 2026-01 | 1 - Revenue | 486,200.00 |
| 2026-01 | 2 - Cost of Goods Sold | -190,540.00 |
| 2026-01 | 3 - Operating Expenses | -212,880.00 |
Leia diretamente dela:
- Lucro bruto = Receita + Custo dos produtos vendidos (o CPV já é negativo) →
486,200 − 190,540 = 295,660. - Lucro líquido = as três linhas somadas →
82,780. - Margem bruta % = lucro bruto ÷ receita → ~61%.
A primeira coisa a fazer é conferir: execute a própria Demonstração do resultado do NetSuite para o mesmo mês e confirme que a receita e o lucro líquido coincidem. Se não coincidirem, quase sempre é uma diferença de escopo — um filtro de subsidiária/moeda ou o alinhamento entre período contábil e data da transação (veja a observação sobre períodos). Confie no pipeline somente depois que ele conferir.
Etapa 5: crie um aging de contas a receber
Seção intitulada “Etapa 5: crie um aging de contas a receber”A segunda vitória do primeiro dia, que segue o mesmo formato de conectar, extrair e transformar. Comece pela receita de recebíveis em aberto e depois distribua os valores em faixas conforme o atraso de cada fatura.
-
Adicione outra etapa Solicitação REST (mesma conexão,
POST, o endpoint suiteql) com este corpo:SELECTt.tranid AS invoice_number,BUILTIN.DF(t.entity) AS customer,TO_CHAR(t.trandate, 'YYYY-MM-DD') AS invoice_date,TO_CHAR(t.duedate, 'YYYY-MM-DD') AS due_date,t.foreigntotal AS invoice_total,t.foreignamountunpaid AS amount_unpaidFROM transaction tWHERE t.type = 'CustInvc'AND t.foreignamountunpaid <> 0ORDER BY t.tranidCarregue-a como
netsuite_open_ar, cominvoice_totaleamount_unpaid→ Moeda,invoice_dateedue_date→ Data, e as demais → Texto. -
Adicione uma etapa Table Extract lendo
netsuite_open_arpara uma nova tabelanetsuite_ar_aging. Na guia Seleção de dados da tabela, clique em Resumir e configure três colunas de destino:aging_bucket— uma expressão (abaixo) que classifica cada fatura conforme o atraso. Resumir Agrupar por.invoices— qualquer coluna, por exemploinvoice_number. Resumir Contagem.balance— mapeada deamount_unpaid. Resumir Soma.
Para
aging_bucket, insira esta expressão — ela mede os dias de atraso (uma data menos outra data resulta em dias) e rotula a faixa:case(((func.today() - netsuite_open_ar.due_date) <= 0, '0 - Current'),((func.today() - netsuite_open_ar.due_date) <= 30, '1 - 1-30 days'),((func.today() - netsuite_open_ar.due_date) <= 60, '2 - 31-60 days'),((func.today() - netsuite_open_ar.due_date) <= 90, '3 - 61-90 days'),else_='4 - Over 90 days',) -
Execute-a.
netsuite_ar_agingagora mostra, em cinco linhas, quanto está em dia e quanto está atrasado há 30/60/90+ dias — a visão de cobrança que uma empresa lê primeiro. (due_dateprecisa estar com o tipo Data para que a subtração de datas funcione — você definiu isso acima, na guia Resposta da etapa Solicitação REST.)
Etapa 6: coloque tudo em um painel
Seção intitulada “Etapa 6: coloque tudo em um painel”Números em uma tabela são úteis; um gráfico é o que você envia ao CFO. Publique netsuite_pnl e netsuite_ar_aging e depois siga Crie um painel para adicionar:
- um gráfico de barras do lucro líquido (ou da receita) por
period, e - um gráfico de pizza ou de barras do
balancede contas a receber poraging_bucket.
Esse é um painel financeiro do NetSuite ao vivo — sem exportação, atualizado sempre que o fluxo de trabalho é executado.
Etapa 7: agende a atualização
Seção intitulada “Etapa 7: agende a atualização”- Execute o fluxo de trabalho inteiro uma vez, de cima para baixo, para confirmar que todas as etapas estão verdes.
- Agende o fluxo de trabalho — mensalmente no ritmo do fechamento, ou todas as noites se você quiser o aging de contas a receber atualizado a cada manhã.
Como cada extração substitui a tabela inteira, cada execução extrai novamente a parte definida por sua cláusula WHERE — mantenha-as na janela de que você precisa (o ano atual, somente faturas em aberto) em vez de todo o histórico.
O que você construiu
Seção intitulada “O que você construiu”Partindo de um fluxo de trabalho vazio, você extraiu o razão geral e os recebíveis ao vivo do NetSuite, transformou-os em uma DRE mensal e em um aging de contas a receber com duas etapas de transformação padrão — sem SQL —, colocou-os em um painel e os configurou para atualização — o ciclo central de relatórios que uma equipe de finanças executa, agora automatizado.
Para onde ir em seguida
Seção intitulada “Para onde ir em seguida”- Exemplos de consultas SuiteQL do NetSuite — balancete, balanço patrimonial, pedidos de venda em aberto, pedidos de compra e estoque para adicionar ao mesmo fluxo de trabalho.
- Etapa Table Extract e Uso avançado do Data Mapper — agrupamento, filtragem e colunas calculadas para análises mais profundas.
- Projete uma hierarquia de dimensão — consolide seu plano de contas em grupos de relatório que você controla.
- Crie um painel — o passo a passo completo do painel.