FJFrigo · Relatórios · menu 3-5 Contábeis

Relatórios Contábeis

Livro Diário (351), Livro Razão (35A) e Balance General (359): o que cada um mostra, quais filtros o servidor de fato lê, o que vai no PDF e o que vai na planilha, as recusas com a mensagem exata e os comportamentos que fazem o número "não bater" — com o confronto contra o sistema antigo (menu351.prg, menu35A.prg, menu359.prg).

Relatórios: 351, 35A, 359 Sem regra de acesso nomeada Saída: PDF e planilha (XLS) Tabela: contabilidade_analitico

Bloqueia

O relatório não é gerado. statuscode 400 com a frase abaixo.

Confirma

Nenhum dos três pergunta nada antes de gerar — não há regra desse tipo aqui.

Aviso

O relatório sai, mas com um comportamento que surpreende — é a origem dos chamados de "o número não bate com o antigo".

Nenhum grava nada

Os três só leem contabilidade_analitico e o plano de contas. Quem grava asiento é o 251/252 e os fechamentos 259/25E/25F/25G.

A

Mapa: o que cada relatório responde

3-Relatórios › 5-Contábeis

Os três leem a mesma tabela e respondem perguntas diferentes: o Diário agrupa por asiento, o Razão por conta com saldo corrente, e o Balance mostra o saldo de cada conta e de cada nível da árvore. Endpoints: POST /lancamento/relatorios/relatorioLivroDiario, …/relatorioLivroRazao, …/relatorioBalanceteContabil.

OpçãoRelatórioAgrupa porPeríodoPDFPlanilhaConfronto com o legado
351Livro Diário (Libro Diario)asiento: cabeçalho (número e data), partidas, total do asiento; no fim o total geralopcional nas duas pontas (padrão: 1º do mês até hoje)conta, descrição, detalhe, débito, crédito (paisagem por padrão)17 colunas, que mudam com as opções4 gabaritos: 2 com zero diferenças, 2 com diferença só em caractere não-ASCII
35ALivro Razão (Libro Mayor)conta: saldo inicial, lançamentos com saldo corrente, totalopcional nas duas pontas (padrão: 1º do mês até hoje)data, asiento, documento, detalhe, moeda, débito, crédito, saldo16 colunas (8 a menos com "Reporte mayor")9 gabaritos, zero diferenças
359Balance Generalconta e moeda, com a árvore do planoobrigatório (padrão: 1º de janeiro até hoje)código, descrição indentada, moeda, saldo + rodapé (retrato por padrão)11 colunas + rodapé de 7 totaismoeda original e IFRS: zero diferenças; guarani: diferenças de unidade por limite do double do legado

A folha "Filtros utilizados" é acrescentada no fim de todo PDF dos três (passam pelo responder(...) do RelatorioController), a menos que a caixa Exibir filtros no final (PDF) seja desmarcada. A planilha não muda.

B

Regras que valem para os três

Antes de abrir o relatório específico
Bloqueia

Não foram encontrados lançamentos nessas condições.

QuandoNenhuma linha no recorte — em PDF e em planilha. Vale para os três.

Texto diferente do antigoO legado diz "Não foram encontrados dados nessas condições !" (menu35A.prg:608, menu351.prg:867, menu359.prg:620). O efeito é o mesmo: nada é impresso. Sem a recusa, o PDF estouraria com um erro técnico ("The document has no pages").

35135A359
Bloqueia

A data final não pode ser anterior à inicial.

QuandoPeríodo invertido. No Diário e no Razão só é conferido quando as duas datas vêm preenchidas — com uma ponta vazia o período fica aberto daquele lado.

35135A359
Bloqueia

A filial não tem moeda local cadastrada (filial.idmoeda_local).

QuandoA filial da sessão está sem idmoeda_local. Os três dependem dela para decidir as casas e a conversão.

Na mesma famíliaFilial N não encontrada. — a filial da sessão não existe mais no cadastro.

Onde corrigirCadastro de filiais (41).

35135A359
Bloqueia

Conta contábil N não encontrada.

QuandoO id da conta escolhida não existe em ct_plano_conta. Pela tela só acontece se a conta for apagada entre a escolha e o clique; é mais comum em chamada direta.

35135A359
Aviso

O período vai até 23:59:59 do dia final.

Como éA data final é comparada com 'aaaa-mm-dd 23:59:59', então o lançamento gravado com hora no último dia entra. No 359 a data inicial também leva 00:00:00.

35135A359
Aviso

Analítica traz só ela; sintética traz o galho inteiro.

Como éNo Diário e no Razão, a conta analítica filtra por ca.idplconta; a sintética filtra pelo prefixo do número e traz todas as contas abaixo dela. O lookup de conta mostra a coluna "Tipo" (Analítica/Sintética) para a escolha não surpreender.

Diferente do antigoO legado lê a natureza só da primeira conta e decide o filtro inteiro por ela (menu35A.prg:459). Aqui cada conta é tratada pela sua — com uma conta só o resultado é idêntico.

No 359O Balance filtra sempre por prefixo: com uma analítica, o prefixo do número inteiro traz só ela.

35135A359
Aviso

A conta de diferença IFRS fica fora dos livros locais — e vem de system_config.

Como éOs três excluem, fora do modo IFRS, a conta da chave IDCONTA_AJUSTE_IRFS (a do "Redondeo de IFRS" que o 25F grava). Zero ou sem a chave = nenhuma conta excluída, e o redondeo aparece no livro local.

Mudou em 12/09/2026Até então a conta era escolhida pelo apelido da filial (SHANGAI, HONG KONG, e 10019979 nas demais). O legado comentou esse bloco e passou a ler a chave; o porte acompanhou. Edita-se em Config. Globais (botão do 41).

35135A359
Aviso

Converter para outra moeda exige cotação na data de câmbio de cada lançamento.

Como éEscolhida a Moeda conversão, cada valor vai à moeda local pela cotação da moeda de origem e de lá à moeda escolhida, as duas na data de câmbio do lançamento (ou na data dele, sem data de câmbio). O tipo de câmbio escolhe compra ou venda; câmbio fechado usa o câmbio gravado no lançamento no lugar da cotação de origem.

PegadinhaSem cotação da moeda escolhida naquela data o valor sai vazio/zero, sem erro. Em homologação só a moeda local tem cotação diária. É igual no antigo.

"Original"Com a moeda em branco o valor sai como foi lançado — e numa mesma conta pode haver várias moedas.

35135A359
Aviso

A consulta força o índice de data — exceto quando há filtro melhor.

Por que existeSem hint, o MySQL varre contabilidade_analitico inteira (154 milhões de linhas em fjfrigo_concepcion): o 359 de 01/01 a 31/08 levava 102 s; com FORCE INDEX no índice de data, 23 s, as mesmas linhas. O nome do índice é conferido no banco antes (IndicesDaTabela) — tenant sem ele roda sem hint. O legado não tem hint nenhum; o ANALYZE TABLE não resolve (a amostragem padrão é pequena demais).

Quando NÃO é forçadoNo Razão e no Diário, com só contas analíticas escolhidas (o índice de idplconta corta mais: 0,75 s contra 4,0 s com o hint); no Diário também com asiento escolhido (lista ou faixa).

Relatório lentoRelatório lento com o hint no lugar costuma ser recorte grande de verdade — um ano de Diário são mais de 1,7 milhão de linhas de impresso.

35135A359
Aviso

Os textos passam pelo tira_chr do legado: quebra de linha, TAB e espaço inseparável somem.

Como éLF, CR, TAB e CHR(160) são removidos — não trocados por espaço, e espaço duplo verdadeiro continua duplo. Por isso "Fuster<A0>Salas" sai "FusterSalas", como no antigo. No Diário e no Razão o histórico que começa com = perde o sinal (marcação interna).

O que não é reproduzidoO travessão CP1252 que o antigo grava como - no XLSX (conversão CP1252→CP850 dele): aqui sai o caractere do banco. Decisão do usuário em 05/09/2026.

35135A359
Aviso

O PDF não é o XLS em outro formato.

Como éO PDF leva o que o legado põe no papel — poucas colunas, legíveis. A planilha traz as colunas de rastreamento (conferido, id pai, tabela, filial, datas, IFRS, emitente, conta 49), com datas como data de verdade. Quem precisa conferir número abre a planilha.

35135A359
C

351 — Livro Diário

RelatorioLivroDiarioService · menu351.prg

A sequência dos asientos do período, ordenada por data e asiento: cada um abre com número e data, lista as partidas e fecha com o par débito/crédito; no fim, o total geral. Filtros que o servidor lê: período (as duas pontas opcionais), conta (não existe no legado), filial (a do dado, idfilial_dado), moeda de conversão, lista de asientos, faixa de asiento, origem (a coluna tabela, mesmo combo do 251), conferido (todos/conferidos/não conferidos). Opções: IFRS, somente linhas IFRS, sem valor em dólar, modelo oficial, oficial interno, somente asientos que não fecham, somente sem câmbio, paisagem. PDF: "Nro. cuenta, Cuenta, Detalle, Debito, Credito", com número e data no cabeçalho de cada bloco. XLS: 17 colunas — "Fecha de factura" só no oficial interno, as três "Original" só com conversão. A auditoria externa não é opção: é o grupo do usuário (ver abaixo).

Bloqueia

Não há asientos em desequilíbrio nesse período.

QuandoSomente asientos que não fecham marcado e nenhum asiento tem débito diferente do crédito (soma de valor_ml; no IFRS, de valor_us).

PegadinhaEssa busca é uma consulta à parte e considera só o período e a filial — não a origem, a conta nem a moeda. Depois o relatório é filtrado pelos asientos achados, aí sim com os demais filtros.

Texto do antigo"Não foram encontrados asientos con diferencias !" (menu351.prg:664).

351
Aviso

A faixa de asiento vence a lista.

Como éInformado o asiento final, o relatório usa BETWEEN inicial AND final e ignora os asientos digitados na lista (menu351.prg:578). Sem o final, vale a lista (separada por vírgula).

351
Aviso

Origem "MAN - Manuais" é tabela vazia, não uma sigla.

Como éOs manuais do 251 têm tabela vazia ou nula; o filtro "MAN" procura isso. As outras siglas passam por uma lista fechada (a do combo do 251); sigla desconhecida vira "TT - Todas".

351
Aviso

O recorte IFRS tem três ramos, e cada um tira coisa diferente.

Livro normalExclui as linhas com ifrs T, B ou C e a conta de diferença IFRS.

IFRS marcadoExclui ifrs B e C, as contas 10018675 e 1001594, e exige valor_us > 0; o valor sai de valor_us com a sigla U$. Os rótulos da planilha viram "Debito IFRS"/"Credito IFRS".

Somente linhas IFRSSó ifrs = 'T', e nada mais do recorte acima.

Sem valor em dólarAs linhas com valor_us vazio ou zero, fora as de histórico "Diferencia…" — o que ainda falta o 25F converter.

351
Aviso

Modelo oficial: o número do asiento passa a ser o do livro.

Como éA coluna do asiento mostra numelan_livro (ou numelan_livro_ifrs com IFRS), a correlatividade que o 258 numera; as linhas de ajuste (ajuste = 'T') saem. No oficial IFRS, asiento sem número de livro IFRS fica de fora — sem rodar o 258 IFRS antes, o relatório vem vazio.

Oficial internoSó acrescenta a coluna "Fecha de factura" na planilha.

351
Aviso

O total geral só significa alguma coisa com conversão de moeda.

Por queSem moeda de conversão o valor sai na moeda em que foi lançado e a soma mistura guarani com dólar — o legado faz o mesmo. Convertido para a moeda local, o total mostra se o período fecha: em 01 a 05/08/2026 ele acusou 162.662.821 de diferença, exatamente os 4 asientos abertos do período.

351
Aviso

As casas decimais: 2, exceto convertendo para a moeda local.

Como éConvertido para a moeda local vale moeda.decimais dela — em guarani, zero. Na moeda original e em moeda estrangeira, 2 (menu351.prg:763-782).

351
Aviso

"Usuario Conferido" não é quem conferiu.

Como éA coluna troca o nome pela chave CONTADOR_RESPONSAVEL de system_config quando ninguém conferiu, quando quem conferiu foi "Athayde", ou quando quem conferiu é quem incluiu (menu351.prg:1431). É maquiagem para o livro oficial: no gabarito de 01-05/08/2026 a coluna traz o mesmo nome em todas as 12.329 linhas.

Sem a chaveA coluna sai em branco nesses casos. Até 12/09/2026 o nome era por tenant, no código; hoje se edita em Config. Globais.

351
Aviso

"Origem" é Manual ou Automatico — e "Registro" nem sempre é a data de inclusão.

Origem"Manual" exige duas coisas: tabela vazia (ou man) e manual = 'T'. Linha marcada manual com tabela preenchida sai "Automatico", como no antigo.

RegistroVale a data do lançamento quando o histórico fala em "cambial de cierre" ou quando a inclusão é anterior ao lançamento; nos demais, a data de inclusão (menu351.prg:1247).

Não existeA coluna "Id Pai": no legado ela é sobrescrita por "Moneda Original" na mesma célula e nunca chega ao arquivo. São 17 colunas, não 18.

351
Aviso

O filtro de conta do Diário não existe no antigo.

Como éPedido pelo usuário em 05/09/2026, com a regra do Razão (analítica por id, sintética pelo galho). Sem conta escolhida a consulta é a do legado. Conferido: 01-05/08/2026, sem conta 12.329 lançamentos, a sintética 1.1.01 1.607.

351
Aviso

Usuário do grupo AEX (auditoria externa) vê as colunas espelho e não vê os asientos que tocam contas "audita".

Como éQuem decide é o grupo do usuário (grupo_usuario.tipo_grupo = 'AEX'), lido no servidor — não há caixa na tela. Para o grupo AEX a descrição da conta sai de descricao_c, o histórico de historico_c, e os asientos inteiros que têm algum lançamento numa conta ct_plano_conta.audita = 'T' saem do relatório (numelan NOT IN, buscados com período, filial, origem e faixa/lista de asientos). As colunas da planilha não mudam.

Igual ao antigomenu351.prg:670-731 e :816. O legado não tem caixa de auditoria: o lAuditoriaExterna é um DATA fixo em verdadeiro, sem campo na tela, e só escondia uma coluna "Saldo" que já estava comentada.

351
Aviso

Somente lançamentos sem câmbio: é valor_cambio igual a zero.

Como éServe para achar lançamento gravado sem cotação — o que faz a conversão para moeda local sair errada.

351
D

35A — Livro Razão

RelatorioLivroRazaoService · menu35A.prg

O extrato de cada conta com lançamento no período: abre com o saldo que a conta já tinha, lista os lançamentos acumulando o saldo corrente e fecha com débito, crédito e saldo. Filtros que o servidor lê: período (as duas pontas opcionais), conta, lista de asientos, filial (do dado), moeda de conversão, filtrar por moeda (só lançamentos nessa moeda de origem). Opções: IFRS, modelo oficial, "Reporte mayor", paisagem. PDF: "Fecha, Asiento, Documento, Detalle, Mon., Debito, Credito, Saldo", com o total da conta. XLS: 16 colunas — as 8 do papel mais conferido, id pai, tabela, filial, Doc. Avulsa, inclusão, modificação e IFRS (essas 8 saem com a caixa "Reporte mayor"). A planilha não tem linha de total: o total da conta só existe no papel.

Aviso

O saldo inicial é o acumulado do exercício, não desde sempre.

Como éA abertura de cada conta soma de 1º de janeiro do ano da data inicial até a véspera dela (buscaSaldoContab, funcoes.prg:1495). Começando em 01/01, é zero e o banco nem é consultado. Sem data inicial não há abertura — o relatório já traz tudo.

Como conferirA abertura de uma conta em 01/02 é o saldo dela no Balance (359) de 01/01 a 31/01 — conferido: 1.1.01.005.000004 dá 1.923.390 nos dois.

Só quem tem movimentoConta sem lançamento no período não aparece no Razão, mesmo com saldo.

35A
Aviso

Contas 2, 3 e 4 trocam de sinal no saldo.

Por quePassivo, patrimônio e receitas têm o saldo credor como natural (funcoes.prg:1557), como no balancete.

35A
Aviso

A linha "somente conversão" entra ou sai conforme a moeda.

No saldo inicialEm moeda local ela entra — é o ajuste que faz o valor_ml valer (na 1.1.01.005.000013 o saldo é zero com ela e 2.132.497.214 sem). Nas demais moedas sai. Antes de 01/01/2019 o legado usa sempre valor sem essas linhas, e o porte reproduz.

Nos lançamentosFora da moeda local ela sai (senão apareceria em dobro), exceto quando a conta 1001594 está entre as escolhidas — lá ela é o assunto da conta. No IFRS fora da moeda local sai a cobrança no exterior (tabela = 'cie') lançada na moeda local.

35A
Aviso

O recorte IFRS do Razão não é o do Balance — e na Bolívia não há recorte.

Livro normalExclui ifrs T, G e B e a conta de diferença IFRS.

IFRSExclui ifrs L, I, B e C (o I e o C a mais que o 359), as contas 10018675 e 1001594, e exige valor_us > 0 ou ifrs = 'T'.

BolíviaCom codicfj 003 o livro normal não tem recorte de IFRS nenhum (menu35A.prg:527) — nem a conta de diferença sai.

35ABolívia
Aviso

Moeda original mistura moedas na mesma conta; "Filtrar por moeda" é outra coisa.

Moeda conversão em brancoCada lançamento sai na moeda de origem, com a sigla dele, e o saldo corrente soma tudo com 2 casas. Para um saldo que signifique alguma coisa, converta — ou use Filtrar por moeda.

Filtrar por moedaRecorta os lançamentos daquela moeda de origem (e o saldo inicial acompanha). Não converte nada.

Casas2, exceto convertendo para a moeda local (as casas dela).

35A
Aviso

"Doc. Avulsa" só vem preenchido na conta de gastos a rendir.

Como éQuando a conta de filial.idplc_rendir está entre as escolhidas, a planilha traz o documento da fatura avulsa ligada ao título (tabela = 'fim'). Nas demais a coluna sai vazia — é o que o legado faz (menu35A.prg:594).

35A
Aviso

Usuário do grupo AEX (auditoria externa) não vê as contas marcadas "audita"; a caixa "Reporte mayor" só esconde colunas.

Como éQuem é do grupo AEX (grupo_usuario.tipo_grupo, lido no servidor) vê descrição e histórico das colunas espelho (descricao_c, historico_c), e as contas com ct_plano_conta.audita = 'T' ficam fora (HAVING audita = 'F'). A caixa Reporte mayor, de qualquer usuário, só tira da planilha as 8 colunas de rastreamento. A marca "Audita?" se edita no 1A1 (escondida para o grupo AEX).

Igual ao antigomenu35A.prg:569-595 (grupo) e :222/:702 (caixa lAuditoria, "Reporte mayor ?").

35A
Aviso

Modelo oficial: o asiento é o número do livro.

Como éA coluna "Asiento/Lanzamiento" mostra numelan_livro (ou numelan_livro_ifrs com IFRS). Diferente do Diário, aqui o oficial não tira as linhas de ajuste nem exige o número de livro — asiento sem correlatividade sai com a coluna vazia.

Lista de asientosO Razão aceita a lista, mas não a faixa (que é só do Diário).

35A
Aviso

A abertura do plano inteiro usa o índice de data — leva segundos, não minutos.

Por queCom todas as contas, filtrar a abertura por uma lista de milhares de idplconta passava de 8 minutos (2.013 contas); agregando o plano pelo índice de data são ~38 s, com o mesmo saldo conta a conta. Com conta analítica escolhida volta o filtro por conta. O relatório é lido em fluxo: um trimestre inteiro (~490 mil linhas) roda em ~320 MB de memória.

35A
E

359 — Balance General

RelatorioBalanceteContabilService · menu359.prg

O saldo de cada conta no período, com a árvore do plano: uma linha por conta e por moeda, inclusive nas sintéticas. Filtros que o servidor lê: período (obrigatório), conta (uma), filiais (várias, do dado), moeda de conversão. Opções: IFRS, modelo oficial, resultado, apertura, mostrar saldo zero, decimais (padrão do país / 2 casas / sem casas), paisagem. PDF (nasce em retrato): código e descrição indentada só na primeira moeda de cada conta, moeda e saldo, mais o rodapé. XLS: "Codigo, Id Cta, Cuenta, Saldo Original, Moneda, Saldo G$, Cambio Cierre, Saldo Cierre G$, Id Emitente, Numero 49, Cuenta 49", mais o rodapé.

Aviso

(sem mensagem) — não há caixa "Encerramento"; os lançamentos de encerramento ficam sempre fora.

Diferente do antigoNo legado a caixa existe e só acrescenta AND 0=1 (menu359.prg:450, sem outro ramo): marcada, o relatório nunca trazia nada. Saiu da tela por decisão do usuário (24/09/2026). O resultado é o do legado com a caixa desmarcada.

359
Aviso

Moeda em branco é o modo "moeda original", não "moeda local".

Os quatro modosOriginal (em branco): uma linha por conta e moeda de origem, com o saldo convertido à moeda local ao lado. Moeda local: valor_ml, uma linha por conta. IFRS: valor_us, em dólar (moeda 112), ignorando a moeda escolhida. Outra moeda: tudo convertido, e as colunas em moeda local saem zeradas de propósito.

Somente conversãoFora da moeda local as linhas "somente conversão" saem; no IFRS fora da moeda local sai a cobrança no exterior (cie) lançada em moeda local.

359
Aviso

Decimais "padrão do país": 2 casas no Brasil.

Não é formataçãoA opção decide se cada perna é arredondada em 2 casas ou em nenhuma antes de somar — e portanto o valor de toda sintética em moeda estrangeira. No legado é a caixa lDecimales, que nasce ligada só com codicfj 004 (menu359.prg:27, :917).

Brasil
Aviso

Decimais "padrão do país": sem casas fora do Brasil.

Como éFora do 004 o balancete sai sem casas, e a sintética usa Int(Σdébito − Σcrédito). É assim que os gabaritos de fjfrigo_concepcion foram gerados. Forçar "Com 2 casas" num tenant paraguaio muda os números das sintéticas em moeda estrangeira em relação ao antigo.

Paraguai
Aviso

A sintética não é a soma das linhas impressas logo abaixo dela.

Como éA analítica soma as pernas cruas e arredonda o saldo. A sintética soma todas as folhas do galho (sem passar pelos níveis intermediários), com cada perna já arredondada nas casas escolhidas. Na 1.1.01.001 de 31/01/2026 (IFRS, 45 folhas) dá 9.501.302, o número do legado; somando os filhos impressos daria 9.501.298.

ConsequênciaDiferença de poucas unidades entre uma sintética e a soma dos filhos é esperada — não é erro.

359
Aviso

Saldo zero some — mesmo em conta com movimento.

Como éA analítica cujo saldo arredondado dá zero não é impressa, e a sintética cujas folhas se anulam também não (mas entra nos totais do rodapé antes). Uma conta com débito e crédito iguais no período some do balancete. Mostrar saldo zero as traz de volta.

Árvore sem movimentoAs sintéticas entram mesmo sem lançamento (união com o plano), e são elas que somem pelo saldo zero.

359
Aviso

O rodapé de totais só sai com o plano inteiro.

Como é"(+) Activo", Passivo, Patrimônio, "(=) Resultado Patrimonial", Ingreso, Egreso e "(=) Resultado Financiero", em moeda local, somando as contas de primeiro nível. Escolhida uma conta, o rodapé não sai — somar um galho só como "Activo" seria errado (menu359.prg:1400).

359
Aviso

Resultado, oficial e apertura mudam o que entra.

ResultadoSem Resultado, os lançamentos de resultado do exercício (resultado_ex = 'T', gravados pelo 259) ficam fora.

EncerramentoOs lançamentos de encerramento ficam sempre fora — salvo, no modo oficial, a conta de resultado do exercício na data final (1241, ou 11129 em filial transportadora).

AperturaMarcada, só entram os lançamentos de abertura (apertura = 'T').

359
Aviso

"Cambio Cierre" só reavalia as contas marcadas com ajuste cambial.

Como éA cotação é a da data final na moeda da linha — compra para contas que começam por 1, venda para as demais — e só vale para contas com ct_plano_conta.ajuste_cambial = 'T'. Sem cotação na data final a reavaliação não acontece.

IFRSO recorte é o oposto do normal: exclui ifrs L, G e C (o normal exclui T, G e B), as contas 10018675 e 1001594, e exige valor_us preenchido ou ifrs = 'T'.

359
Aviso

Em guarani, o Saldo Cierre de contas enormes pode diferir do antigo em unidades.

Por queO legado soma em double, e passando de 1015 ele perde unidades; o porte soma em decimal exato. Em 31/01 foram 17 de 2.457 linhas, em 31/08 20 de 2.830 — sempre no Saldo Cierre. Os sete totais batem.

359
Aviso

A ordem das moedas dentro de uma conta pode mudar entre rodadas.

Por queO ORDER BY numero do legado não desempata; o MySQL devolve as moedas de uma conta na ordem que quiser. Os valores não mudam. Comparar planilhas casando por (número, conta, moeda) cruza linhas erradas no modo guarani, onde todas têm a mesma sigla — compare por posição dentro da conta. O usuário decidiu (04/09/2026) que não é problema.

359
F

Permissões

Quem vê o quê

Não há regra de acesso nomeada nos três — nem no legado (hUsuarioRegras não aparece em menu351/35A/359.prg). Quem vê o menu 3-5 gera o relatório, de qualquer filial (o filtro de filial é livre, pelo idfilial_dado).

Auditoria externa é o tipo de grupo AEX do usuário (grupo_usuario.tipo_grupo), lido no servidor como no 251 — o auditor não escolhe nem desliga. Hoje nenhum grupo é AEX em central; fjfrigo_concepcion tem 4.

A conexão é a do tenant da sessão (JWT); os relatórios só leem.

G

Como o erro chega na tela

Para o QA reproduzir e reportar

O relatório é pedido como arquivo, mas a recusa chega como mensagem: HTTP 200 com statuscode 400 e a frase, que a tela mostra no lugar do download. Enquanto gera, o botão mostra "Gerando… (Ns)" — um mês de Diário sem filtro leva dezenas de segundos, e o Balance do ano ~20 s por causa da consulta.

Um erro inesperado traz o código de ocorrência de 8 caracteres, a base e a filial: copie-os no chamado. No 359, chamada direta sem data inicial ou final dá erro inesperado (a tela sempre manda as duas).

Não use a tela enquanto o backend é recompilado: numa janela de segundos a classe do relatório não existe e a resposta é um NoClassDefFoundError que não é defeito do código.

H

Regras chumbadas

Literais do legado, reproduzidos
O quêOndeValorSituação
Contas fora do modo IFRS351, 35A, 35910018675 e 1001594Literal do legado (menu359.prg:429, menu35A.prg:514), sem cadastro
Conta onde "somente conversão" é o assunto35A1001594Literal (menu35A.prg:487)
Conta de resultado do exercício no modo oficial3591241; 11129 com filial.transportadoraLiteral (menu359.prg:562)
Moeda do IFRS359 (id 112); 351 e 35A (sigla U$)dólarLiteral
Conta de diferença IFRS excluída do livro local351, 35A, 359system_config.IDCONTA_AJUSTE_IRFSDeixou de ser chumbada em 12/09/2026 (era pelo apelido da filial: SHANGAI, HONG KONG, 10019979)
"Usuario Conferido" trocado351 (XLS)quem conferiu contém "Athayde" → CONTADOR_RESPONSAVELO nome virou chave em 12/09/2026; o teste pelo login "Athayde" continua literal
Cobrança no exterior em moeda local35A, 359 (IFRS)tabela = 'cie'Sigla de módulo, do legado
Bolívia sem recorte de IFRS35Acodicfj = '003'Por país, do legado (menu35A.prg:527)
Decimais por país3592 casas só no codicfj 004Por país, do legado; a tela deixa forçar
I

Diferenças e decisões pendentes

O que muda em relação ao sistema antigo

Divergências deliberadas (já decididas)

OndeO que é diferentePor quê
351, 35A, 359FORCE INDEX no índice de data (condicional no 351/35A)102 s → 23 s no 359; decisão do usuário em 05/09/2026 (no lugar de mexer na estatística da tabela)
351, 35ACada conta pela sua natureza (analítica por id, sintética por galho)O legado decide pela primeira conta; com uma conta dá o mesmo
351Filtro de contaNão existe no legado; pedido em 05/09/2026. Sem conta, é a consulta do legado
35ASaldo inicial numa consulta só (e pelo índice de data com o plano inteiro)O legado consulta conta a conta; 12 contas custavam 2,6 s. Mesmo saldo em 2.013 de 2.013 contas
351, 35A, 359Travessão CP1252 sai como está no bancoO legado o destrói ao gravar o XLSX; decisão do usuário: "não copia a corrupção"
359Soma em decimal exatoO double do legado perde unidades acima de 1015
351, 35A, 359Relatório lido em fluxo, sem materializar a consultaUm mês de Diário estourava 128 MB de heap; hoje roda em 48 MB
359PDF só código, descrição, moeda e saldo; retratoÉ o que o legado põe no papel; em paisagem eram 68 folhas contra 41
359"Decimais" é um combo de três estados"Padrão do país" deixa o servidor aplicar o default do legado
359A transportadora sai do cadastro da filial, não da telaÉ o oParametros:lTransportadora do legado
359sem a caixa "Encerramento"No legado a caixa só acrescenta AND 0=1 e o relatório nunca trazia nada; saiu da tela (usuário, 24/09/2026)

Pendências a decidir

1. Mensagens de vazio diferentes do legado ("lançamentos" no lugar de "dados", e a do Diário para asientos em desequilíbrio). Suporte que procura a frase do antigo não acha.

2. "Somente asientos que não fecham" ignora origem, conta e moeda na busca dos asientos (só período e filial). Conferir se o cWhere do legado (menu351.prg:592) é o mesmo antes de considerar defeito.

3. Lentidão com o plano inteiro: os tempos acima dependem de o índice de data existir no tenant. Se aparecer lentidão parecida nas outras telas que varrem contabilidade_analitico por período (conferência, fechamentos), o remédio é o mesmo IndicesDaTabela.

Nenhuma regra bate com essa busca. Tente um trecho menor da mensagem, ou limpe os filtros.