Imobiliário · Financeiro multiempresa

Contas a pagar e a receber por empresa e SPE

A pagar, a receber, pagas e recebidas de todas as empresas do grupo numa visão só, batendo centavo a centavo com os relatórios do ERP.

UsoMuito usado
EsforçoAlto
Para quemHoldings imobiliárias e incorporadoras com uma SPE ou CNPJ por empreendimento ou negócio, que precisam de visão consolidada do financeiro.
Fonte

ERP de cada empresa: títulos, parcelas, baixas e movimento bancário

Regra

Tipo de operação, rateio e grão certo para cada relatório

Resultado

A pagar, a receber, pagas e recebidas por empresa e mês

Ativação

Fechamento, dashboard do grupo e agente de IA

O que resolve

  • Uma visão única de contas a pagar e a receber de todas as empresas, sem abrir o ERP empresa por empresa.
  • Os números batem com os relatórios oficiais do ERP, linha a linha.
  • O custo pago por centro de custo para de inflar com substituições e cancelamentos de título.

Perguntas de negócio que responde

Faça estas perguntas ao seu agente quando o caso estiver pronto.

Qual o saldo a pagar e a receber de cada empresa do grupo hoje?
Quanto foi pago por centro de custo e por categoria no mês?
Quanto entrou de caixa de verdade, sem reparcelamentos e substituições?
Quais títulos vencem nos próximos 30 dias, por empresa?
Qual o custo administrativo sobre a receita recebida nos últimos 12 meses?

O que você precisa

  • O ERP conectado na Nekt, com todas as empresas do grupo
  • Os relatórios oficiais do ERP de um período fechado, em planilha, para a validação
  • A lista de empresas, SPEs e centros de custo com o empreendimento de cada um

O que você recebe

  • Quatro tabelas: a pagar, a receber, pagas e recebidas, com os nomes de coluna do relatório
  • Uma validação automática contra o relatório oficial, que bloqueia o uso se divergir
  • Dashboard do grupo por empresa, centro de custo e mês
  • Um agente de IA que responde sobre o financeiro sem misturar grãos

Onde ativar

Fechamento mensal

As quatro tabelas exportadas para a planilha do financeiro, já validadas contra o ERP.

Agente de IA via MCP

Responde saldo, pago e recebido por empresa e centro de custo, com o grão certo.

Alerta de validação

Avisa o financeiro quando uma empresa sai de OK, antes de o painel ser usado.

Quer construir?

As regras são conhecidas, mas cada coluna precisa ser conferida contra o relatório oficial. Conte com uma rodada de validação por relatório. O detalhado traz as regras de negócio, as armadilhas e o teste de aceitação. Ou mande tudo direto para o seu agente com o MCP da Nekt.

Ver detalhado
O problema

Cada SPE ou CNPJ é uma empresa separada no ERP, e o grupo quer uma visão só que bata com o relatório oficial. Os títulos vêm com arrays aninhados de baixas, categorias e obras, e com tipos de operação que não são dinheiro. Somar sem filtrar o tipo de operação infla o pago em 30% a 50%, e juntar parcelas com baixas sem agregar duplica linhas.

Como costuma ser feito, e a regra

Cada linha é um erro que já aconteceu na prática.

O jeito comumA regra
01
Somar tudo direto e perder qual SPE deve ou tem a receber.
Segmente por empresa e consolide no fim

Toda tabela carrega o id da empresa (companyId no Sienge, a fonte de origem no Omie, o realm no QuickBooks). A administradora do grupo é uma empresa como as outras. Consolide só quando a pergunta for do grupo, e mostre a abertura por empresa ao lado.

02
Juntar contas a pagar com contas pagas linha a linha.
Dois grãos, quatro tabelas

A pagar e a receber têm grão de parcela de título (billId + installmentId), em aberto ou quitada. Pagas e recebidas têm grão de baixa: uma parcela pode ter várias baixas. Para saber quanto foi pago de um título, agregue as baixas por parcela antes de cruzar.

03
Somar todo o array payments.
Pago é só pagamento e adiantamento

No array payments do Sienge, conte apenas operationTypeName 'Pagamento' e 'Adiantamento'. 'Substituição' e 'Cancelamento' são movimentações de título, não custo, e inflam a soma em 30% a 50%. Com essa regra, o warehouse bateu com o BI anterior com desvio abaixo de 0,5%.

04
Somar todos os receipts como entrada de caixa.
Recebido é só recebimento

No array receipts, receita recebida é operationTypeName 'Recebimento', pelo valor líquido (netAmount). Reparcelamento, distrato e substituição são reclassificações da carteira e ficam fora. Juros, correção monetária, multa e desconto ficam em colunas próprias.

05
Usar originalAmount e discountAmount porque os nomes parecem certos.
Cada coluna do relatório tem um campo

No Sienge, 'Valor no vencimento' do a pagar é correctedBalanceAmount (saldo já corrigido pelo indexador). 'Desconto' do relatório é taxAmount, que são as retenções de ISS, INSS e IR. 'Valor original' do a receber é balanceAmount (saldo não corrigido), e não o originalAmount do título.

06
Desaninhar o array e somar o valor cheio em cada linha.
Rateie pelos percentuais do título

Desaninhe paymentsCategories e multiplique por financialCategoryRate / 100 (nulo vale 100). Para obra, desaninhe buildingsCosts e aplique o rate da obra. No Omie, desaninhe departamentos e use n_distr_percentual. Sem aplicar o percentual, cada categoria recebe o valor inteiro.

07
Contar cada linha do movimento bancário como uma baixa.
Baixa não é movimento bancário

Uma baixa com juros gera duas ou mais linhas em sienge_bank_movement (principal e acréscimos). O grão de pagas e recebidas é a baixa. Movimentos bancários avulsos (tarifas, aportes entre empresas, retiradas de sócio, rendimentos) entram com uma coluna de origem, porque são caixa, mas ficam fora da comparação com o relatório de títulos.

08
Usar balanceAmount cheio como saldo a pagar.
Saldo em aberto sem a retenção

Comprometido em aberto = (balanceAmount - taxAmount - discountAmount) x rate / 100, datado pelo vencimento. Notas de serviço em aberto com retenção de imposto inflavam o saldo quando o imposto não saía.

09
Copiar a query por empresa com pequenas diferenças, ou somar caixa e categorizado.
Uma fonte por empresa, unidas com origem

No Omie, cada empresa é uma conexão. Trate cada uma com a mesma transformação e una com uma coluna de origem. Datas do Omie chegam como texto dd/mm/aaaa e precisam de conversão explícita. Em QuickBooks, exclua Transfer e Journal Entry do fluxo de caixa e nunca some a visão de caixa puro com a categorizada: o pagamento da fatura do cartão é o mesmo dinheiro.

10
Publicar o painel e descobrir a divergência na reunião de fechamento.
Só publique o que passou na validação

Compare cada tabela com o relatório oficial por empresa e mês, com tolerância de 0,01. Classifique em OK, OK explicado (diferença conhecida e nomeada, item a item) ou Diferença. Qualquer Diferença bloqueia o painel e o export até ser explicada.

Relatório do ERP para campo

Mapa validado contra os relatórios oficiais do Sienge.

A pagar: Valor no vencimentoSaldo corrigido pelo indexadorcorrectedBalanceAmount
A pagar: DescontoRetenções de ISS, INSS e IRtaxAmount
A receber: Valor originalSaldo devedor não corrigidobalanceAmount
Contas pagasBaixas de pagamento e adiantamentopayments.operationTypeName IN ('Pagamento','Adiantamento')
Substituição, CancelamentoNão é custopayments.operationTypeName
Contas recebidasRecebimento de caixa, valor líquidoreceipts.operationTypeName = 'Recebimento'
Reparcelamento, Distrato, SubstituiçãoReclassificação da carteira, forareceipts.operationTypeName
Rateio por categoriaPercentual da categoria, nulo vale 100financialCategoryRate / 100
Rateio por obraPercentual da obrabuildingsCosts.rate / 100

Definições

Saldo a pagar
soma do saldo em aberto das parcelas com vencimento no período, por empresa, rateado por categoria
Saldo a receber
soma de balanceAmount das parcelas em aberto, por empresa e vencimento
Valor pago
soma de payments.grossAmount x financialCategoryRate / 100 com tipo Pagamento ou Adiantamento, pela data da baixa
Receita recebida
soma de receipts.netAmount com tipo Recebimento, pela data do recebimento
Vencido a pagar
saldo em aberto de parcelas com vencimento anterior à data de corte
Custo administrativo sobre receita
custo pago do centro de custo da administração central / receita recebida de todas as obras, mensal e acumulado 12 meses, ambos em caixa
Diferença de validação
valor da tabela menos valor do relatório oficial, por empresa e mês; OK quando abaixo de 0,01

Armadilhas que já aconteceram

Pago 40% maior que o real

A soma de todo o array de pagamentos incluía substituições e cancelamentos de título.

Filtre Pagamento e Adiantamento antes de somar.

Join que duplica

Cruzar a tabela de parcelas com a de baixas multiplicou o saldo de títulos pagos em várias vezes.

Agregue as baixas por parcela antes do join.

Desconto que não era desconto

A coluna Desconto do relatório não batia com discountAmount porque, no relatório, desconto são as retenções.

Use taxAmount e valide coluna a coluna.

Títulos antigos sumidos

Títulos anteriores a um certo ano não vinham no endpoint padrão de contas a pagar.

Complete com o endpoint por título e confira o total de um ano antigo.

Cota da API estourada

A carga histórica do ERP parou no meio porque a API tem cota diária pequena.

Faça o histórico em blocos de 12 meses com uma tabela de estado da carga.

Empresa esquecida no consolidado

Uma SPE nova foi cadastrada no ERP e ficou fora da visão do grupo por semanas.

Compare a lista de empresas do ERP com a da tabela a cada carga e alerte quando surgir uma nova.

Teste de aceitação

O caso está pronto quando todos os itens passam.

Pacote para o agente

Cole no Claude, ChatGPT ou outro cliente com o MCP da Nekt conectado.

Markdown completo
Financeiro multiempresa (ERP)
- Toda análise é por empresa (companyId). Consolide só quando a pergunta for do grupo e mostre a abertura por empresa.
- Grãos: a pagar e a receber = parcela de título (billId + installmentId). Pagas e recebidas = baixa. Nunca junte os dois sem agregar as baixas por parcela.
- Valor pago = payments.grossAmount x financialCategoryRate / 100, só com operationTypeName 'Pagamento' ou 'Adiantamento'. Substituição e Cancelamento não são custo.
- Receita recebida = receipts.netAmount com operationTypeName 'Recebimento'. Reparcelamento, distrato e substituição ficam fora.
- financialCategoryRate nulo vale 100. Rateio por obra usa buildingsCosts.rate.
- Relatório a pagar: Valor no vencimento = correctedBalanceAmount; Desconto = taxAmount (retenções). Relatório a receber: Valor original = balanceAmount.
- Movimentos bancários avulsos (tarifas, aportes, retiradas, rendimentos) são caixa, mas não aparecem no relatório de títulos: vêm marcados pela origem.
- Só use as tabelas quando a validação contra o relatório oficial estiver OK ou OK explicado.
Exceções por cliente:
- <cliente>: empresa <id> é a administradora; SPEs <ids> correspondem a <empreendimentos>.
- <cliente>: centro de custo da administração central = <id>.
- <cliente>: diferenças conhecidas e aceitas na validação: <lista nomeada>.

Variações

Custo administrativo sobre receita

Custo pago do centro de custo da administração dividido pela receita recebida de todas as obras, com e sem distribuição de lucros.

Omie e Conta Azul

Omie: uma conexão por empresa, departamentos por n_distr_percentual. Conta Azul: desaninhe o rateio por categoria e depois por centro de custo da parcela.

QuickBooks com P&L por SPE

P&L por empresa e mês validado contra o relatório nativo, saldos entre empresas do grupo e semáforo de liberação por empresa.