FJFrigo · Contabilidade · menu38L / 38M / 38N — Indicadores

Validações do BI Contábil: Câmbio, Balanço e DRE

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çãoPainelO que mostraEndpoint (/lancamento/contabilidade/...)
38LResultado CambialGanho/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
38MIndicadores do BalançoLiquidez, capital de giro e endividamento do saldo de cada fim de mês, local e IFRS.indicadores-balanco/ano
38NDRE ContábilDemonstraçã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).

B

38L — Resultado Cambial

contabilidade.resultadocambial.ResultadoCambialService

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
ParcelaRegraMoeda
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ãoLinhas na conta de diferença sem sigla (digitadas no 251). O manual "Solo IFRS" (ifrs = 'T') só entra no IFRSvalor_ml / valor_us
Não realizado (25E)tabela = 'cie' e ifrs <> 'T' na conta de diferençavalor_ml
Redondeo do fechamentoLinhas na conta IDCONTA_AJUSTE_REDONDEO_CIERREvalor_ml
Fechamento IFRS (25G)cie com ifrs = 'T' na conta de diferençavalor_us
Redondeo IFRS (25F)Linhas na conta IDCONTA_AJUSTE_IRFSvalor_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;
C

38M — Indicadores do Balanço

contabilidade.indicadoresbalanco.IndicadoresBalancoService

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).

ChavePadrãoGrupoNatureza
BALANCO_ATIVO_CIRCULANTE1.1Ativo circulanteD − C
BALANCO_DISPONIVEL1.1.01DisponívelD − C
BALANCO_ESTOQUE1.1.05EstoqueD − C
BALANCO_REALIZAVEL_LP1.2.04,1.2.05,1.2.06Realizável a longo prazoD − C
BALANCO_ATIVO_NAO_CIRCULANTE1.2Ativo não circulanteD − C
BALANCO_PASSIVO_CIRCULANTE2.1Passivo circulanteC − D
BALANCO_PASSIVO_NAO_CIRCULANTE2.2Passivo não circulanteC − D
BALANCO_DIVIDA_FINANCEIRA2.1.01,2.1.03,2.2.01,2.2.03Dívida financeira (inclui bonos)C − D
BALANCO_PATRIMONIO3PatrimônioC − D
BALANCO_RESULTADO4,5Resultado 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).

Config.
Regra

Índices

LiquidezCorrente = AC ÷ PC; seca = (AC − estoque) ÷ PC; imediata = disponível ÷ PC; geral = (AC + realizável LP) ÷ passivo total (PC + PNC).

Capital de giroAC − PC.

Endividamentopassivo total ÷ PL, onde PL = patrimônio + resultado ainda não encerrado.

Dívida de curto prazoPC ÷ passivo total. Dívida financeira líquida = dívida financeira − disponível.

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".

Conferência
D

38N — DRE Contábil

contabilidade.indicadoresbalanco.DreContabilService

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ãoLinha
DRE_RECEITA_BRUTA4.1Receita bruta de vendas
DRE_DEDUCOES4.1.03,4.1.04(−) Deduções (no central: impostos sobre vendas, vendas canceladas)
——= Receita líquida
DRE_CUSTO5.1(−) Custo das mercadorias vendidas
——= Lucro bruto
DRE_DESPESA_COMERCIAL5.2(−) Operação e comercialização
DRE_DESPESA_PESSOAL5.3(−) Pessoal
DRE_DESPESA_ADMINISTRATIVA5.4(−) Administrativas
——= Resultado operacional
DRE_RESULTADO_FINANCEIRO5.5(±) Resultado financeiro
DRE_OUTRAS4.2,5.6(±) Outras receitas e despesas
——= Resultado antes dos impostos
DRE_IMPOSTOS5.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
OndeO quePainelEfeito
filial.idplc_difcambConta de diferença cambial38LSem ela o painel recusa. Conta errada = painel "vazio" ou com outro conteúdo.
system_config.IDCONTA_AJUSTE_REDONDEO_CIERRE, IDCONTA_AJUSTE_IRFSContas de redondeo38L, 38M, 38N38L: parcelas de redondeo. 38M/38N: IDCONTA_AJUSTE_IRFS sai do saldo em moeda local (regra do 359).
system_config.BALANCO_*Prefixos dos grupos38M, 38N (universo)Ver seção C.
system_config.DRE_*Prefixos das linhas38NVer seção D.
system_config.TEM_IFRS (1)Base com IFRS38L, 38M, 38NMostra o botão IFRS (junto com o 25G rodado).
ct_plano_conta.numeroNumeração do plano38M, 38NOs 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.