Wiki: Consolidação Contábil

1. Objetivo

Reproduzir, a partir dos balancetes brutos do Protheus, a coluna Cons YTD da aba Consolidated do arquivo .xlsb que o contador publica como demonstração consolidada do grupo Sinqia. O alvo é match contábil ao centavo com a planilha auditada.

Em produção, isto substitui o trabalho manual de fim de mês de juntar 8 balancetes, aplicar eliminações intercompany, calcular participação minoritária, e formatar o DRE/BP consolidado.

2. Fluxo de dados

Balancetes Protheus (1 .xlsx por empresa) │ │ Importação ▼ Balancetes importados (saldos crus, por empresa) │ │ Mapeamento e processamento ▼ Saldos por (empresa × conta × competência), com plano consolidado aplicado │ │ Eliminações + cálculo da minoritária ▼ Consolidação publicada (página Consolidação)

O fluxo passa por três etapas que separam responsabilidades:

3. Etapas do processamento

Importação

O parser lê os 7 campos do balancete: conta (formato pontuado, ex.: 1.1.1.02.137), descrição, saldo inicial, débito, crédito, movimento do período, saldo final e natureza (D/C). Valores monetários vêm em pt-BR (141.138,91 D) e são convertidos para decimal.

A combinação (empresa, competência, hash do arquivo) garante idempotência: o mesmo arquivo subido duas vezes produz a mesma linha: não duplica.

Processamento

Resolve o de-para (mapeamento da conta interna do Protheus para a conta do plano consolidado), aplica filtros estruturais (ver convenções) e produz uma linha por (empresa × conta × competência).

Consolidação

Calcula as quatro famílias de eliminação e agrega o resultado:

combinado       = soma do saldo final por empresa
eliminação      = soma das eliminações por conta
consolidado_YTD = combinado + eliminação

O agrupamento usa a conta consolidada quando há mapeamento, e a conta original caso contrário. Assim a página de consolidação mostra ~115 contas (visão do contador) em vez das 1.444 contas analíticas cruas.

4. Empresas e estrutura societária

EmpresaTipoControladora%
Sinqia S.A.consolidadora
Sinqia TecnologiaoperacionalSinqia S.A.100,00%
TorqoperacionalSinqia S.A.100,00%
FepWeboperacionalSinqia S.A.100,00%
QuitejáoperacionalSinqia S.A.51,00%
Lote 45operacionalSinqia Tecnologia52,00%
CompliassetoperacionalSinqia Tecnologia60,00%
Proformaveículo PPA

A Proforma não é uma empresa operacional: é um veículo contábil para Purchase Price Allocation (PPA) das aquisições. Ela carrega ágio, marcas, carteira de clientes, software adquiridos e contingências: saldos que precisam aparecer no consolidado mas não pertencem a nenhuma das 7 empresas reais. Marcada como veículo PPA, ela entra no combinado em quase tudo, mas suas contra-partidas de patrimônio são excluídas do cálculo de equity (não há controle societário a eliminar).

5. Os 4 tipos de eliminação

Tipo 1: Intercompany

Para pares de contas (a, b) cadastradas em Configurações → TIPO 1: a soma dos saldos das duas contas em todas as empresas deve zerar. Quando não zera, o ajuste compensa. Ex.: Receita intercompany Sinqia TecDespesa intercompany Sinqia S.A..

Tipo 2: Investimento × Patrimônio Líquido

Para cada par (controladora, controlada, conta_investimento, conta_equivalência):

  1. 2A: elimina o saldo de conta_investimento na controladora.
  2. 2B: elimina o equity da controlada (capital social, reservas, resultado, etc).

As contas elegíveis para 2B são marcadas como conta de patrimônio de controlada no plano de contas: hoje 24 contas (todas as 23xxx + 51111111 APURAÇÃO DE RESULTADOS).

Tipo 3: Dividendos

Dividendos a receber (na controladora) ↔ dividendos a pagar (na controlada) zeram entre si. A regra distingue dois subtipos:

Em controladas 100%-owned (FepWeb, Sinqia Tec, Torq), os dois caminhos coincidem. Em controladas parciais (Quitejá 51%, Lote 45 52%, Compliasset 60%), o ganho é exatamente a parcela minoritária: o que fechou o último diff estrutural do Cluster A.

Tipo 4: Equivalência × Apuração

O resultado da equivalência patrimonial (registrado na controladora como receita/despesa) é eliminado contra a apuração de resultado da controlada: evita dupla contagem do lucro.

6. Participação minoritária

Para cada controlada com participação < 100% (Quitejá, Lote 45, Compliasset), calcula-se uma linha de minoritária:

PL da controlada       = soma do saldo final das contas de patrimônio
valor da minoritária   = (1 − participação) × PL da controlada
ControladaControladora%PL controladaMinoritária
QuitejáSinqia S.A.51%-1.122.115,47-549.836,58
Lote 45Sinqia Tecnologia52%-1.208.400,00-580.030,79
CompliassetSinqia Tecnologia60%-1.200,00-480,00

7. Convenções e regras

Códigos de conta

Sinal e natureza

Saldos no Protheus vêm com sufixo D ou C. Convenção interna: débito = positivo, crédito = sinal invertido (negativo). Eliminações sempre carregam o sinal contrário ao saldo que estão neutralizando.

Empresas virtuais (veículos PPA)

Empresas marcadas como veículo PPA entram no combinado em todas as contas exceto as classificadas como contas de patrimônio de controlada. Isso evita que a contra-partida de PPA (que vive em contas 23xxx) bagunce a consolidação de equity.

Por que isso importa: a Proforma tem −R$ 18M em 23201004 TRANSAÇÃO COM SÓCIOS MINORITÁRIOS, que é a contra-partida contábil dos R$ 13M de marcas/software/clientes adquiridos. Se incluído no combinado, dá −R$ 18M errado em uma conta de PL. A planilha do contador também ignora.

8. Status de validação

A validação compara a consolidação calculada pelo sistema contra a coluna Cons YTD da aba Consolidated da planilha de fechamento (.xlsb), conta por conta, com tolerância de R$ 0,50.

MétricaInícioPós Cluster APós ajustes + Cluster C
BS match96,9%97,2%97,8%
BS diffs (TOL R$ 0,50)322923
BS volume divergenteR$ 49,8MR$ 11,0MR$ 7,1M

A página Validação mostra esses números em tempo real, com diff por grupo contábil e top 40 diffs.

Cluster A: bugs do motor (R$ 38,8M, todos resolvidos)

SQIADescriçãoDiff inicialDiff atualFix
23201004TRANSACAO COM SOCIOS MINORITARIOS-18,1M0,00Proforma → Veículo PPA
23301004RESULTADO DO EXERCICIO+6,9M0,00Proforma → Veículo PPA
23301007RESULTADO DE EXERCICIOS ANTERIORES+3,2M0,00Proforma → Veículo PPA
21401004DIVIDENDOS A PAGAR+10,6M+R$ 13,51dividends.tipo='a_pagar'

O resíduo de R$ 13,51 em 21401004 vem de arredondamento na participação (Lote 45 está cadastrada como 0,520001: provavelmente o contador usou um arredondamento diferente). Acima do TOL atual mas irrelevante na prática.

Cluster B: gap de dados (R$ 9,4M, 23 contas)

Contas onde o cálculo difere do alvo porque a planilha do contador inclui ajustes manuais feitos nas abas de trabalho do .xlsb (reclassificações de banco, provisões de banco de horas, IRRF, etc.) que não existem no balancete cru do Protheus. Solução: cadastrar esses ajustes em Configurações → Ajustes manuais.

Cluster C: par espelhado FECHADO 2026-05-04

12102019 CONTAS A RECEBER INTERCOMPANY - LOTE45 (na Compliasset, +R$ 29,6K) e 22402018 CONTAS A PAGAR INTERCOMPANY - COMPLIASSET (na Lote 45, −R$ 29,6K). Faltava regra em Configurações → TIPO 1 e o motor só eliminava o "lado A" das regras intercompany: fix duplo: nova regra cadastrada + ajuste no cálculo para eliminar também o "lado B".

P&L

Receitas (3xxx) e despesas (4xxx) somam R$ 2,3B de divergência, mas todos os saldos crus são zero. O balancete do Protheus deste período exporta apenas BS; precisamos do extrato DRE separado para validar essas 435 contas.

9. Endpoints da API

MétodoRotaDescrição
GET/companiesLista empresas
GET/filiaisLista filiais Protheus
GET/organogramaEstrutura societária vigente
GET/organograma/timelineHistórico de mudanças na estrutura societária
POST/pipeline/ingest?competencia=YYYY-MM-DDImporta balancetes Protheus (.xlsx)
POST/pipeline/silver?competencia=…Processa balancetes (mapeamento + agregação)
POST/pipeline/gold?competencia=…Calcula consolidação (eliminações + minoritária)
POST/pipeline/run-all?competencia=…Pipeline completo (importação → consolidação)
GET/consolidacao?competencia=…Resultado consolidado para a UI
GET/balancetes?competencia=…Lista balancetes importados
GET/balancetes/{id}/linhasLinhas do balancete (filtros e paginação)
GET/POST/PUT/DELETE/ajustesCRUD de ajustes manuais
GET/POST/PUT/DELETE/regras/intercompanyCRUD de regras intercompany
GET/POST/PUT/DELETE/regras/dividendsCRUD de regras de dividendos (a_receber / a_pagar)
GET/POST/PUT/DELETE/regras/equity-pairsCRUD de pares investimento ↔ equivalência
GET/organograma?competencia=…Árvore da estrutura societária na competência (holdings + pares + dividendos + empresas)
PUT/organograma/holdings/{id}/investimento-equivalenciaUpsert do par invest×equiv da holding
PUT/organograma/holdings/{id}/dividendosUpsert dos dividendos a-receber/a-pagar
GET/PUT/empresasListar e editar empresas (classificação, razão social, notas)
GET/validacao?competencia=…Diferenças entre consolidação calculada e planilha de referência

10. Design system

O front consome um folha CSS única em /styles.css (concatenação dos arquivos em apps/design-system/src/: montados read-only no container web). O catálogo dos componentes está disponível em Storybook na porta 6006.

TipoComponentes
Tokenstokens.css: cores, tipografia, espaçamento, raio
ComponentesButton, Pill, StatCard, Table, FormField, Callout, Nav, Panel, Tabs, Lookup
ConvençãoNamespace evtc-*, modificadores BEM (evtc-btn--ghost, evtc-table__num)

Migração do apps/web é incremental: Configurações e Validação já consomem. Próximas a migrar: Consolidação, Balancetes, Wiki.