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
O fluxo passa por três etapas que separam responsabilidades:
- Importação: lê o .xlsx do Protheus e guarda os dados crus, com checagem de duplicidade pelo hash do arquivo (re-uploadar o mesmo arquivo é no-op).
- Processamento: aplica o de-para (conta interna → conta consolidada), filtros e regras estruturais.
- Consolidação: aplica as quatro famílias de eliminação (intercompany, investimento×PL, dividendos, equivalência) e calcula a participação minoritária.
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
| Empresa | Tipo | Controladora | % |
|---|---|---|---|
| Sinqia S.A. | consolidadora | — | — |
| Sinqia Tecnologia | operacional | Sinqia S.A. | 100,00% |
| Torq | operacional | Sinqia S.A. | 100,00% |
| FepWeb | operacional | Sinqia S.A. | 100,00% |
| Quitejá | operacional | Sinqia S.A. | 51,00% |
| Lote 45 | operacional | Sinqia Tecnologia | 52,00% |
| Compliasset | operacional | Sinqia Tecnologia | 60,00% |
| Proforma | veí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 Tec ↔ Despesa intercompany Sinqia S.A..
Tipo 2: Investimento × Patrimônio Líquido
Para cada par (controladora, controlada, conta_investimento, conta_equivalência):
- 2A: elimina o saldo de
conta_investimentona controladora. - 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:
- A receber (10 contas, ex.:
11503001 DIVIDENDOS A RECEBER - FEPWEB): o saldo na controladora já reflete só a fatia dela; elimina-se integralmente. - A pagar (2 contas:
21401004,21401018): a controlada registra o total devido (incluindo a parcela dos minoritários); elimina-se a soma do saldo multiplicado pela participação da controladora, por subsidiária. O restante (1 − %) permanece como obrigação real do grupo aos minoritários.
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
| Controlada | Controladora | % | PL controlada | Minoritária |
|---|---|---|---|---|
| Quitejá | Sinqia S.A. | 51% | -1.122.115,47 | -549.836,58 |
| Lote 45 | Sinqia Tecnologia | 52% | -1.208.400,00 | -580.030,79 |
| Compliasset | Sinqia Tecnologia | 60% | -1.200,00 | -480,00 |
7. Convenções e regras
Códigos de conta
- SQIA (8 dígitos): plano de contas do Protheus (ex.:
11102137). - EVTC (6 dígitos): plano consolidado do contador (ex.:
110213). - O de-para é um mapeamento N:1 (várias contas SQIA podem cair na mesma conta EVTC).
- Conta sem mapeamento aparece no consolidado pelo seu código SQIA original.
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.
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étrica | Início | Pós Cluster A | Pós ajustes + Cluster C |
|---|---|---|---|
| BS match | 96,9% | 97,2% | 97,8% |
| BS diffs (TOL R$ 0,50) | 32 | 29 | 23 |
| BS volume divergente | R$ 49,8M | R$ 11,0M | R$ 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)
| SQIA | Descrição | Diff inicial | Diff atual | Fix |
|---|---|---|---|---|
23201004 | TRANSACAO COM SOCIOS MINORITARIOS | -18,1M | 0,00 | Proforma → Veículo PPA |
23301004 | RESULTADO DO EXERCICIO | +6,9M | 0,00 | Proforma → Veículo PPA |
23301007 | RESULTADO DE EXERCICIOS ANTERIORES | +3,2M | 0,00 | Proforma → Veículo PPA |
21401004 | DIVIDENDOS A PAGAR | +10,6M | +R$ 13,51 | dividends.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étodo | Rota | Descrição |
|---|---|---|
| GET | /companies | Lista empresas |
| GET | /filiais | Lista filiais Protheus |
| GET | /organograma | Estrutura societária vigente |
| GET | /organograma/timeline | Histórico de mudanças na estrutura societária |
| POST | /pipeline/ingest?competencia=YYYY-MM-DD | Importa 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}/linhas | Linhas do balancete (filtros e paginação) |
| GET/POST/PUT/DELETE | /ajustes | CRUD de ajustes manuais |
| GET/POST/PUT/DELETE | /regras/intercompany | CRUD de regras intercompany |
| GET/POST/PUT/DELETE | /regras/dividends | CRUD de regras de dividendos (a_receber / a_pagar) |
| GET/POST/PUT/DELETE | /regras/equity-pairs | CRUD 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-equivalencia | Upsert do par invest×equiv da holding |
| PUT | /organograma/holdings/{id}/dividendos | Upsert dos dividendos a-receber/a-pagar |
| GET/PUT | /empresas | Listar 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.
| Tipo | Componentes |
|---|---|
| Tokens | tokens.css: cores, tipografia, espaçamento, raio |
| Componentes | Button, Pill, StatCard, Table, FormField, Callout, Nav, Panel, Tabs, Lookup |
| Convenção | Namespace 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.