Três painéis do razão: o resultado cambial, os indicadores do balanço e a DRE contábil. Os grupos por prefixo de conta, a regra do 359 que sustenta os saldos, e como conferir contra o Balance General.
Telas: Resultado Cambial (38L), Indicadores do Balanço (38M), DRE Contábil (38N)Tipo: Desenho novo, sem legadoBase dos saldos: regra do Balance General (359)Gravação: nenhuma
A
O que são e o que têm em comum
Para quem atende
Três painéis do razão que olham o resultado e o balanço, desenho novo, sem legado (03/10/2026), só leitura. Permissão 251 no menu do front; no backend o endpoint é aberto a qualquer usuário logado (JWT, /lancamento/*). Abrem direto; as opções são Ano (default o corrente; 2000-2100, senão "Ano inválido: N") e Filial (default todas as do acesso).
Opção
Painel
O que mostra
Endpoint (/lancamento/contabilidade/...)
38L
Resultado Cambial
Ganho/perda de câmbio mês a mês: realizado (módulos), não realizado (25E), manual, redondeos; no IFRS o 25G e o 25F.
resultado-cambial/ano, resultado-cambial/mes
38M
Indicadores do Balanço
Liquidez, capital de giro e endividamento do saldo de cada fim de mês, local e IFRS.
indicadores-balanco/ano
38N
DRE Contábil
Demonstração do resultado do razão, mês a mês, com análise vertical, horizontal e comparação com o ano anterior.
dre/ano (comparar)
38M e 38N compartilham a leitura (MovimentoContabil): abrir um e depois o outro lê o razão uma vez só (cache de 10 minutos por banco + ano + filiais + nº de segmentos). "Atualizar" de qualquer um refaz. 38L tem leitura própria (cache de 10 minutos por banco + ano + filiais).
Regra do Balance General (359) (RelatorioBalanceteContabilSql.where), usada por 38M e 38N: linhas vivas (excluido <> 'T'), sem encerramento nem resultado_ex (259); moeda local: valor_ml, fora os balances T/G/B e a conta IDCONTA_AJUSTE_IRFS; IFRS: valor_us, fora os balances L/G/C, as duas contas que o legado tira do IFRS (CONTAS_FORA_DO_IFRS) e a linha cie em moeda local (com valor_us IS NOT NULL OR ifrs = 'T'). Mesmo FORCE INDEX de data do 359 (sem ele o MySQL varre a tabela inteira: 154 milhões de linhas em fjfrigo_concepcion).
Ano corrente só até hoje. Para 38M e 38N, o movimento do ano corrente vai de 1º/jan até hoje (data < hoje + 1): lançamento com data futura não entra. O 38L lê o ano inteiro.
Botão Moeda local / IFRS só aparece em base IFRS: TEM_IFRS = 1 ou o 25G (cie com ifrs = 'T') rodou no ano ou no anterior (38M/38N); TEM_IFRS, ou há 25G / redondeo IFRS no ano (38L).
Ganho é positivo (crédito − débito nas contas de resultado), perda negativa. Opções: Ano, Filial, e o botão Moeda local × IFRS (US$). Clique num mês (gráfico ou tabela) para o detalhe (POST .../mes com {ano, mes, filiais}; erro "Informe o mês.").
Config.
Contas usadas (sem conta chumbada)
Diferença cambialfilial.idplc_difcamb das filiais do recorte (a contrapartida do 25E, FechamentoContabilRepository). Nenhuma filial do recorte com conta: "Nenhuma filial do recorte tem conta de diferença cambial (filial.idplc_difcamb)."
Redondeossystem_config.IDCONTA_AJUSTE_REDONDEO_CIERRE (25E) e IDCONTA_AJUSTE_IRFS (25F); chave ausente ou 0 = a parcela some. Lidas com MovimentoContabil.configEstrita: erro de banco sobe em vez de virar conta 0 (a leitura engolida pelo SystemConfig sob carga já trocou a conta por 0 sem aviso no 38N).
Na telaA nota no pé da janela diz quais contas foram usadas (papel, id, número, descrição).
Contas
Parcela
Regra
Moeda
Realizado (módulos)
Linhas na conta de diferença com sigla de módulo (tabela preenchida), fora cie; por sigla (TRIM: a coluna é char, "cona" vinha com espaços)
valor_ml (e valor_us no IFRS)
Lançado à mão
Linhas na conta de diferença sem sigla (digitadas no 251). O manual "Solo IFRS" (ifrs = 'T') só entra no IFRS
valor_ml / valor_us
Não realizado (25E)
tabela = 'cie' e ifrs <> 'T' na conta de diferença
valor_ml
Redondeo do fechamento
Linhas na conta IDCONTA_AJUSTE_REDONDEO_CIERRE
valor_ml
Fechamento IFRS (25G)
cie com ifrs = 'T' na conta de diferença
valor_us
Redondeo IFRS (25F)
Linhas na conta IDCONTA_AJUSTE_IRFS
valor_us
Total do mês em moeda local = realizado + manual + não realizado + redondeo do fechamento. Total IFRS = realizado em dólar + manual em dólar + 25G + redondeo IFRS. Fora: encerramento e resultado do exercício (259). A filial entra pela linha (idfilial_dado); o 25E e o 25G gravam numa filial só (a 1 em fjfrigo_concepcion): escolhendo outra filial, o não realizado some (é da base).
Regra
B1. Detalhe do mês
Fechamento por contaAs linhas do cie do último dia do mês (somente_conversao = 'T', fora encerramento/resultado), exceto a conta de diferença: o ganho da conta é D − C da própria conta reavaliada. Até 200 contas.
Moeda da contaSai do histórico que o 25E grava ("Saldo M.E. ... Ca. 5971.0000"): a cotação do histórico é casada com moeda_valores do último dia do mês (compra ou venda) para achar a sigla; o saldo em moeda estrangeira vem de Saldo M.E. -6.866.329,47. Sem casar, a moeda fica "?". Texto do histórico fora desse padrão (outra versão do 25E) não tem moeda nem saldo.
25GNo IFRS o histórico traz uma cotação que não é de moeda estrangeira (converte o saldo local para dólar): sem quebra por moeda.
Maiores realizadosOs 30 maiores asientos (|ganho|) na conta de diferença do mês, fora cie, com módulo, documento e histórico.
Mês
SELECT EXTRACT(YEAR_MONTH FROM ca.data) ym, TRIM(COALESCE(ca.tabela,'')) tabela,
SUM(IF(ca.deb_cre='C',1,-1) * COALESCE(ca.valor_ml,0)) ml, SUM(IF(ca.deb_cre='C',1,-1) * COALESCE(ca.valor_us,0)) us
FROM contabilidade_analitico ca
WHERE ca.excluido <> 'T' AND ca.idplconta IN (SELECT DISTINCT idplc_difcamb FROM filial WHERE idplc_difcamb > 0)
AND ca.encerramento <> 'T' AND ca.resultado_ex <> 'T' AND ca.data >= :ini AND ca.data < :fim
GROUP BY 1, 2 ORDER BY 1, 2;
Cada indicador sai do saldo de fim de mês = movimento de 1º/jan (traz a apertura) até o fim do mês (regra do 359, seção A), em moeda local e IFRS. Os grupos vêm de listas de prefixos do número da conta em system_config (Config. Globais, grupo contabilidade, texto, separados por vírgula).
Chave
Padrão
Grupo
Natureza
BALANCO_ATIVO_CIRCULANTE
1.1
Ativo circulante
D − C
BALANCO_DISPONIVEL
1.1.01
Disponível
D − C
BALANCO_ESTOQUE
1.1.05
Estoque
D − C
BALANCO_REALIZAVEL_LP
1.2.04,1.2.05,1.2.06
Realizável a longo prazo
D − C
BALANCO_ATIVO_NAO_CIRCULANTE
1.2
Ativo não circulante
D − C
BALANCO_PASSIVO_CIRCULANTE
2.1
Passivo circulante
C − D
BALANCO_PASSIVO_NAO_CIRCULANTE
2.2
Passivo não circulante
C − D
BALANCO_DIVIDA_FINANCEIRA
2.1.01,2.1.03,2.2.01,2.2.03
Dívida financeira (inclui bonos)
C − D
BALANCO_PATRIMONIO
3
Patrimônio
C − D
BALANCO_RESULTADO
4,5
Resultado do exercício (ainda não encerrado)
C − D
Config.
Como o prefixo casa a conta
RegraA conta entra no grupo quando o número é o prefixo ou começa por ele seguido de ponto (1.1.01 não pega 1.1.010). A consulta agrupa por SUBSTRING_INDEX(numero, '.', n) — por segmento, não por caractere — com n = o maior nº de segmentos entre todos os prefixos (mínimo 3).
ValidaçãoChave ausente ou vazia vale o padrão. Cada prefixo precisa ser só dígitos e pontos; sem nenhum válido: "A chave BALANCO_X (Config. Globais) não tem prefixo de conta válido: "..."" (400). O pé da janela mostra os prefixos em uso.
PadrãoA numeração comum de fjfrigo_concepcion e central (1.1.01 disponibilidades, 1.1.05 bienes de cambio/estoques, 2.x.01 dívidas financeiras, 2.x.03 bonos). Plano diferente: trocar as chaves. Os grupos se sobrepõem de propósito (disponível ⊂ circulante; dívida financeira ⊂ passivo).
RazãoDenominador zero devolve vazio (nulo), não erro.
Índices
Regra
Diferença do balanço
Cálculoativo − passivo − PL (= soma geral D − C do movimento). Diferente de zero: aviso na tela e coluna em vermelho. Causas: asiento que não fecha (ver 38B), conta fora de qualquer grupo (por exemplo, passivo 2.3 quando só 2.1 e 2.2 estão configurados).
EstruturaO clique no mês abre o saldo por 1º, 2º e 3º nível do plano (ct_plano_conta não excluída, número com até 3 segmentos), pela natureza da conta. Nível sem sintética no plano (ex.: 4.2 no concepcion) aparece "sem conta sintética no plano".
Opções: Ano, Filial, Comparar com o ano anterior (default desmarcado; lê os dois anos, bem mais lento) e o botão Moeda local × IFRS. Valor da linha = crédito − débito do movimento de cada mês (receita +, custo/despesa −), e não o saldo acumulado. É a DRE do razão, que fecha com o balanço; o 31C (DRE gerencial) sai dos títulos e centros de custo.
Chave (Config. Globais)
Padrão
Linha
DRE_RECEITA_BRUTA
4.1
Receita bruta de vendas
DRE_DEDUCOES
4.1.03,4.1.04
(−) Deduções (no central: impostos sobre vendas, vendas canceladas)
—
—
= Receita líquida
DRE_CUSTO
5.1
(−) Custo das mercadorias vendidas
—
—
= Lucro bruto
DRE_DESPESA_COMERCIAL
5.2
(−) Operação e comercialização
DRE_DESPESA_PESSOAL
5.3
(−) Pessoal
DRE_DESPESA_ADMINISTRATIVA
5.4
(−) Administrativas
—
—
= Resultado operacional
DRE_RESULTADO_FINANCEIRO
5.5
(±) Resultado financeiro
DRE_OUTRAS
4.2,5.6
(±) Outras receitas e despesas
—
—
= Resultado antes dos impostos
DRE_IMPOSTOS
5.7
(−) Impostos (no central a 5.7 é "despesas tributárias")
—
—
(±) Outras contas de resultado (não classificadas)
—
—
= Resultado líquido (= resultado do exercício do 38M)
Regra
D1. Cada conta vai para o prefixo mais específico
RegraPara cada conta (cortada em 3+ segmentos) calcula-se, em cada linha, o tamanho (em segmentos) do prefixo mais longo que a alcança; vence o maior (4.1.03 → deduções, não receita bruta). Empate: a primeira linha na ordem da tabela.
UniversoBALANCO_RESULTADO (padrão 4,5): só contas dele entram. Conta do universo que nenhuma linha alcança vai para "não classificadas" (5.8 "cuenta transitoria" no concepcion) — por isso o resultado líquido é sempre o resultado do exercício do 38M.
ValidaçãoAs chaves seguem as do 38M (só dígitos e pontos; sem prefixo válido, o mesmo erro com o nome da chave). Clique na linha abre as contas de 3º nível que a compõem.
Linhas
Regra
D2. Análises e comparação
VerticalCada linha em % da receita líquida do mês (coluna AV do ano: % da receita líquida do ano).
HorizontalVariação de cada mês sobre o mês anterior; com comparar, a coluna do ano anterior (mesma estrutura, ano − 1) e a AH.
MesesAno passado: 12 meses; ano corrente: até o mês de hoje; ano futuro: 0.
IndicadoresReceita líquida, margens bruta/operacional/líquida e resultado do ano.
Análises
E
Configurações e pré-requisitos
Quando o resultado muda
Onde
O que
Painel
Efeito
filial.idplc_difcamb
Conta de diferença cambial
38L
Sem ela o painel recusa. Conta errada = painel "vazio" ou com outro conteúdo.
38L: parcelas de redondeo. 38M/38N: IDCONTA_AJUSTE_IRFS sai do saldo em moeda local (regra do 359).
system_config.BALANCO_*
Prefixos dos grupos
38M, 38N (universo)
Ver seção C.
system_config.DRE_*
Prefixos das linhas
38N
Ver seção D.
system_config.TEM_IFRS (1)
Base com IFRS
38L, 38M, 38N
Mostra o botão IFRS (junto com o 25G rodado).
ct_plano_conta.numero
Numeração do plano
38M, 38N
Os prefixos dependem dela; plano com outra numeração exige trocar as chaves.
Os prefixos e as contas de redondeo são lidos de system_config com leitura estrita: se o banco falhar na hora da leitura, o painel falha (em vez de seguir com o padrão ou conta 0). As chaves aparecem na Config. Globais, grupo contabilidade (as BALANCO_* e DRE_*). Não há e-mail nem rotina agendada nestes painéis.
F
Casos de teste sugeridos
QA
Melhor base: fjfrigo_concepcion (2026). O 38M e o 38N foram conferidos contra o 359 pelo código dele; refaça o cruzamento a cada mudança de regra.
Teste
T1. 38L — mês com 25E
PassosAbrir o 38L em 2026; clicar em julho.
EsperadoConcepcion, jul/2026: total do 25E +63,7 bi G$; por moeda U$ +82,66 bi (339 contas), R$ −18,17 bi (16), EUR −786 mi (6) = 63.704.305.372 (bate com o total do 25E). Maior conta: linha de crédito Agroganadera (+46,4 bi). Ano: +35,1 bi (não realizado +37,0, realizado −1,7, manual −237,6 mi).
ConferirSQL da seção B, por mês e sigla (a sigla cie é o não realizado).
Teste
T2. 38L — filial
PassosTrocar para uma filial que não é a do fechamento cambial.
EsperadoNão realizado e redondeo do fechamento somem; o realizado dos módulos daquela filial continua.
Teste
T3. 38M — saldo e diferença do balanço
PassosAbrir o 38M; clicar em março e em agosto.
EsperadoDiferença do balanço = a do rodapé do 359 do mesmo mês: concepcion, mar/2026 0 (local e IFRS); ago/2026 −65.889.852.529 G$ e US$ 32.428,58. Jan–mai fecham. As 58 de 59 linhas até o 3º nível iguais ao 359 (só a 4.2, sem sintética, não é impressa pelo 359).
ConferirBalance General (359), 01/01 até o fim do mês, plano inteiro, moeda local e IFRS.
Teste
T4. 38M — trocar prefixo
PassosEm Config. Globais trocar BALANCO_REALIZAVEL_LP para 1.2.04,1.2.06; reabrir (Atualizar).
EsperadoA liquidez geral muda; as demais não. Prefixo com letra (ex.: 1.1.A) recusa com o nome da chave.
Teste
T5. 38N — DRE × 359
PassosAbrir o 38N; comparar o resultado do mês e as contas de 3º nível com o 359 daquele mês (01/mês ao fim).
EsperadoConcepcion, ago/2026: 10 de 10 contas iguais ao guarani; resultado do mês 707.714.036 = "ingreso − egreso" do 359; acumulado até agosto −1.916.637.051.234 = resultado do exercício do 38M em 31/08.
Conferir
SELECT SUBSTRING_INDEX(plc.numero, '.', 3) conta3, SUM(IF(ca.deb_cre='C',1,-1) * COALESCE(ca.valor_ml,0)) cd
FROM contabilidade_analitico ca JOIN ct_plano_conta plc ON plc.id = ca.idplconta
WHERE ca.excluido <> 'T' AND ca.encerramento <> 'T' AND ca.resultado_ex <> 'T'
AND ca.ifrs NOT IN ('T','G','B') AND ca.idplconta <> :idconta_ajuste_irfs
AND ca.data >= :ini AND ca.data < :fim AND plc.numero REGEXP '^[45](\\.|$)'
GROUP BY 1 ORDER BY 1;
Teste
T6. 38N — linha por prefixo mais específico
PassosAbrir as contas da linha Deduções e da Receita bruta.
EsperadoConta 4.1.03.x só em Deduções; nenhuma conta em duas linhas; a soma das linhas de valor + não classificadas = resultado líquido.
Teste
T7. 38M/38N — IFRS
PassosCom o botão IFRS, comparar com o 359 em dólar.
EsperadoIguais ao centavo (concepcion: fecha até março; em agosto sobra US$ 32.428,58, o mesmo do rodapé do 359). Em base sem IFRS o botão não aparece.
Teste
T8. Leitura estrita de system_config
PassosCom o servidor sob carga, repetir a abertura do 38M/38N.
EsperadoOu o painel sai completo, ou falha com erro; nunca sai com a conta de redondeo IFRS (5.4.01.086) somada em despesas administrativas (efeito visto em 03/10: 5.793 G$ em agosto, 6,6 mi no ano).
G
Limitações e pendências
Histórico 403, 404, 405
Aviso
Status
PARCIAL em docs/status-porte.csv (03/10/2026) para os três: falta teste na tela real (endpoints novos: reiniciar o backend). Telas vistas numa prévia temporária com o JSON real, temas escuro e claro.
Aviso
Decisão pendente: o padrão de BALANCO_REALIZAVEL_LP
O padrão 1.2.04,1.2.05,1.2.06 põe a 1.2.05 inteira no realizável a longo prazo; no concepcion ela é ~85% investimentos em sociedades (1,53 de 1,81 tri em 31/05), não realizável. Por isso a liquidez geral caiu de 1,45 para 1,01 em junho. Proposta ao usuário: 1.2.04,1.2.06 (ou só 1.2.06) — decisão pendente. No central 1.2.04–1.2.06 não têm saldo.
Aviso
Achados de dados do concepcion (não são defeitos do painel)
Junho/2026: o asiento manual 424102/2026 (30/06, "ACTUALIZACION DE INVERSIONES AL VPP", digitado no 251 por smarin em 17/08, com junho fechado, sem conferência; 1.657.593.387.189 G$ / US$ 271.914.925,72) leva 1,64 tri G$ à conta 5.6.03.003 ("Otros ingresos y egresos") e derruba o PL de 2,68 para 0,99 tri: o endividamento vai de 1,52 para 4,04 e a margem líquida do ano a −140%. Lançamento de negócio a conferir com a contabilidade.
1.1.07 "OTROS ACTIVOS" com saldo credor de 990 bi G$ em agosto (ativo negativo).
Diferença do balanço: junho −53,5 bi G$ e julho −66,1 bi (12,6 bi a mais por reversões fvxr só com crédito do porte, ver 38B); IFRS fecha até março.
Resultado cambial: o redondeo IFRS de julho soma US$ 6,67 mi porque os asientos manuais 418190 e 429616 ("Cambio de moneda", 01/07, que o 38B mostra sem fechar por 3.304.393 G$) receberam do 25F, em 21/08, um "Redondeo de IFRS" de US$ 3.304.392,93 cada: a diferença em guaranis virou dólar 1:1 (valor_ml = valor_us numa linha em U$, moeda 112). Ver se o 25F precisa recusar asiento que não fecha em moeda local, como a sincronização já faz (ContabilizacaoLancamento) — não investigado.
Agosto sem 25E (cópia de homologação parada); 25G só em julho (jan–jun "não rodou"); setembro e outubro repetem agosto.
Aviso
Pontos a saber
38L: a moeda do detalhe depende do texto do histórico do 25E (Saldo M.E. ... Ca. ...); mudar esse texto no 25E quebra a quebra por moeda (o total não muda).
38M/38N: lançamento com data futura não entra no ano corrente (corte em hoje); o 38L entra.
38M: a conta analítica fora de qualquer grupo de ativo/passivo/PL gera "diferença do balanço"; o 38B mostra os asientos que não fecham.
38N: ~200–250 s com o servidor ocupado e a comparação (lê dois anos); cada leitura de um ano do MovimentoContabil custa ~60 s no concepcion. 38M ~63 s; 38L ~25–30 s o ano e ~4 s o mês.
38N: DRE_* e BALANCO_RESULTADO devem cobrir o mesmo universo; chave a menos vira "não classificadas", chave a mais com prefixo fora de 4/5 é ignorada (o universo manda).
Nada bate com essa busca. Tente um trecho menor, ou limpe o filtro.