FJFrigo · Relatórios · menu 3-1-9 Apuração

Balanço Gerencial

A prévia do balanço do mês de um modelo configurável: cada linha com o valor do sistema, o digitado à mão e o total, com versão convertida e clique que abre os documentos. De onde vem cada número, as recusas com a mensagem exata e as conferências feitas no banco da transportadora.

Opção: 3199C (modelos no 17M) Origem: desenho novo (docs/proposta-balanco-configuravel.md) Saída: tela Base conferida: fjfrigo_concep_transp

Regra

Como o número é calculado: tabela, coluna, filtro.

Aviso

A prévia sai, mas com um comportamento que surpreende.

Bloqueia

A chamada é recusada: statuscode 400 com a frase indicada.

Teste

Roteiro de QA com o resultado esperado e a forma de conferir no banco.

A

O que a tela mostra

3-Relatórios › 1-Financeiros › 9-Apuracao › Balanço Gerencial (3199C)

Desenho novo (28/09/2026), sem equivalente no legado. É a prévia do balanço do mês de um modelo configurável (cadastrado no 17M): o sistema monta sozinho o balanço gerencial que um cliente fazia colando relatórios numa planilha. Não confundir com o Balanço (3199A), relatório de movimentação por emitente portado do legado.

ItemValor
TelaBalanço Gerencial (3199C) — BalancoGerencial.vue; janelas BalancoComposicaoWindow.vue (documentos de um valor) e BalancoManuaisWindow.vue (valores digitados e cotação)
EndpointsGET /cadastro/balanco/modelos/{id}/previa?mes=AAAA-MM[&recalcular=true], .../previa/linha/{idLinha}?mes= (composição), GET|PUT .../manuais?mes=, .../manuais/historico, GET /cadastro/balanco/permissoes, e o cadastro /cadastro/balanco/modelos (17M)
ServiçosBalancoCalculoService (a conta, só lê), BalancoPreviaService (cache), BalancoManualService, BalancoModeloService (pacote cadastro.balanco)
Tabelas do sistema novobalanco_modelo, balanco_modelo_filial, balanco_linha, balanco_linha_cc, balanco_linha_conta, balanco_periodo, balanco_manual, balanco_manual_historico (criadas no primeiro uso, scripts/sql/balanco.sql); balanco_fechamento_* existem mas ainda ninguém grava
Faixa da telaSituação do mês (Aberto/Validado), data de corte e cotação usada (com a data quando vem do sistema)
GradeLinha · Sistema · Manual · Total · (Convertido, se o modelo tem moeda de conversão). Título e linhas de destaque em negrito; negativo em vermelho; o clique num valor de linha de sistema abre a Composição
Quem usaHoje o modelo “Balanço Transportadora” (fjfrigo_concep_transp, id 2, filial 1, conversão U$, 131 linhas)
B

Filtros e opções

Não há painel de Opções: modelo e mês

Quem escolhe o modelo escolhe também, sem querer, as filiais, a moeda, as linhas e os centros de custo: tudo isso mora no cadastro (17M), não na tela.

CampoPadrãoO que faz
Modeloo primeiro modelo ativoLista de GET /cadastro/balanco/modelos filtrada por ativo
Mêsmês corrente (AAAA-MM)Prévia do mês. A data de corte é o menor entre hoje e o último dia do mês; mês passado usa o último dia
Gerar / Recalcular—Recalcular ignora o resultado guardado (5 minutos por banco + modelo + mês + usuário)
Valores manuais—Abre a janela dos valores digitados e da cotação do mês. Exige a regra BALANCO_MANUAL (master passa)
Clique num valor—Composição da linha: documentos (títulos, baixas, pendentes, contas) com centro de custo, filial, data, moeda, valor, câmbio e valor local; Abrir lançamento (ou duplo clique) abre o título no 221
C

De onde vem cada número

Tabelas, colunas e filtros SQL
Regra

Alcance e período

FiliaisAs do modelo (balanco_modelo_filial) que o usuário alcança; as sem acesso saem com aviso. Modelo sem filial: todas as do usuário.

Moeda localAs filiais têm de ter a mesma idmoeda_local; senão recusa.

Faixa>= 1º dia do mês AND < corte + 1 dia (meio-aberta). Títulos pela emissão, baixas pela data da baixa.

Todos
Regra

Tipos de linha do modelo

EMISSAOTítulos emitidos no mês: valor_parcela × IF(valor_cambio>0, valor_cambio, 1), pelos centros de custo da linha (o mesmo critério do 311).

BAIXABaixas do mês: fb.valor × câmbio da baixa (o 315). Exige título vivo.

PENDENTESaldo em aberto no corte pela conta do 221 (descontado fora; só saldo > 0,005): o 313.

PROVISAOBaixas do mês − provisão anterior + pendente atual (+ manual). O valor levado ao mês seguinte é pendente + manual. A provisão anterior vem do fechamento validado do mês anterior; sem ele, é o pendente do sistema no último dia do mês anterior mais o manual do mês anterior (e a prévia avisa).

AJUSTE_BAIXA(acréscimo + juros − desconto − devolução − retenção) × câmbio da baixa.

DIF_CAMBIALfb.diferenca_cambial da baixa, já em moeda local.

SALDO_BANCOSaldo das contas do modelo (ou todas as das filiais) no corte pelo MovimentacaoBancariaSql (a view movimentacao_bancaria), só o movimento na moeda da conta, × cotação mais recente até o corte; conta de moeda sem cotação fica fora com aviso.

MANUALSó o valor digitado no mês.

PERCENTUALpercentual% do total de outra linha (codigoBase); sem o sinal da base.

ACUMULADOValor fechado do mês anterior desta linha + o total da linha base no mês; sem fechamento validado, começa em zero e avisa.

FORMULASoma/subtração (+ − ( ) sobre códigos de linha, sem divisão); cada código entra como sinal × total.

TITULOSó rótulo (cabeçalho de bloco).

DIF_CAMBIAL_BANCO, VARIACAO_ALMOXAinda não implementados (etapa 2b): valem 0, com aviso.

Todos
Regra

Natureza, sinal e valor manual

NaturezaR: só títulos a receber, positivo. P: só a pagar, positivo. A (ambos): receber − pagar.

Sinal da linha±1; só se aplica quando outra linha soma esta (na FORMULA). Nos tipos de sistema o valor da linha sai com o sinal da natureza.

ManualToda linha de sistema (e MANUAL) soma também o valor digitado do mês: Total = Sistema + Manual. FORMULA e PERCENTUAL não aceitam.

Escala3 casas decimais.

Todos
Regra

Conversão (versão em dólar)

Cotação1) a digitada no mês (balanco_periodo.cotacao_digitada); 2) moeda de conversão = moeda local → 1; 3) a do sistema: moeda_valores mais recente até o corte.

ContaConvertido = Total ÷ cotação (linha TITULO fica em branco). Sem cotação e sem digitada: aviso “A moeda de conversão não tem cotação até …: a versão convertida não foi calculada.”

Todos
Regra

Centros de custo com movimento sem linha no modelo

Aviso“Centro de custo N (descrição) tem movimento no mês sem linha no modelo: emitido a receber …; emitido a pagar …; baixado a receber …; baixado a pagar ….” — esses valores não entram no balanço. Título sem centro aparece como “Centro de custo 0 (títulos sem centro de custo)”.

QuandoSó considera EMISSAO/BAIXA/PENDENTE/PROVISAO/AJUSTE/DIF_CAMBIAL: um centro que só aparece numa linha de outro tipo conta como coberto pelo critério de títulos.

Todos
Regra

Mês validado e manuais

Estadobalanco_periodo.situacao = A (aberto) ou V (validado). O período só nasce ao gravar manuais; sem período a situação vem vazia.

ValidadoNão aceita alteração de manual nem de cotação: “Mês validado — reabra antes de alterar.”

HistóricoCada mudança de valor manual grava balanco_manual_historico (valor anterior, novo, usuário, data); valor nulo ou zero apaga o manual.

Todos
D

Recusas e avisos

Mensagens exatas
Bloqueia

Nenhuma filial do modelo está entre as filiais do usuário.

QuandoO usuário não alcança nenhuma das filiais do modelo.

Todos
Bloqueia

As filiais do balanço estão sem moeda local cadastrada. / As filiais do modelo têm moedas locais diferentes ([…]): um balanço só soma filiais com a mesma moeda local.

Quandofilial.idmoeda_local vazio, ou duas moedas locais entre as filiais do modelo.

Todos
Bloqueia

Mês inválido: use AAAA-MM.

QuandoMês fora do formato (só por chamada direta).

Todos
Bloqueia

Modelo de balanço não encontrado. / Linha não encontrada no modelo.

QuandoId de modelo inexistente, ou composição de linha que não é do modelo.

Todos
Bloqueia

Referência circular na linha X. / X: a linha "Y" não existe no modelo. / Fórmula inválida perto de "…".

QuandoModelo mal configurado no 17M (o cadastro valida na gravação, mas a prévia revalida na conta).

Todos
Bloqueia

Você não tem permissão para digitar valores do balanço (regra BALANCO_MANUAL).

QuandoGravar manuais sem a regra (master passa).

Todos
Bloqueia

A cotação digitada tem de ser maior que zero. / Linha N não pertence ao modelo. / A linha do tipo X não aceita valor manual. / A observação passa de 255 caracteres.

QuandoValidações da gravação dos manuais.

Todos
Bloqueia

Mês validado — reabra antes de alterar.

QuandoGravar manual num período com situação V.

Todos
Aviso

Centro de custo … tem movimento no mês sem linha no modelo

O que fazerIncluir o centro numa linha do modelo (17M) ou confirmar que fica de fora. Enquanto isso o balanço não fecha com o financeiro.

Todos
Aviso

O mês anterior não tem fechamento validado…

EfeitoA provisão anterior usa o pendente do sistema no último dia do mês anterior (mais o manual daquele mês) e os acumulados começam em zero. Como ainda não existe a tela de validar, sempre aparece.

Todos
Aviso

O tipo de linha DIF_CAMBIAL_BANCO / VARIACAO_ALMOX ainda não foi implementado: as linhas desse tipo valem 0.

EfeitoO modelo da transportadora tem 1 linha DIF_CAMBIAL_BANCO: ela sai zerada com o aviso (a variação cambial dos bancos é digitada à mão numa linha MANUAL).

Todos
Aviso

Filiais do modelo sem acesso para este usuário ficaram de fora: […]. / A moeda N não tem cotação até …: as contas dessa moeda ficaram fora da linha X.

EfeitoO balanço de dois usuários com acessos diferentes não é o mesmo; conta bancária de moeda sem cotação sai do saldo.

Todos
Aviso

Resultado guardado por 5 minutos, por usuário

EfeitoAlterações no modelo (17M) não invalidam o resultado guardado: só gravar manuais invalida (o mês e o seguinte). Use Recalcular depois de mexer no modelo.

Todos
Aviso

Regime do modelo não muda a conta

EfeitoO campo Regime (Competência/Caixa) do cadastro existe, mas a prévia não o lê: cada linha vale pelo seu tipo (EMISSAO = competência, BAIXA = caixa).

Todos
E

Configurações que mudam o resultado

O que o suporte confere antes de abrir chamado
ConfiguraçãoOndeEfeito
Modelo, linhas e centros17M (balanco_modelo, balanco_linha, balanco_linha_cc, balanco_linha_conta)É o balanço. Centro fora de linha não entra
Filiais do modelobalanco_modelo_filialQuais filiais somam
Moeda de conversãobalanco_modelo.idmoeda_conversaoLiga a coluna Convertido
Cotação do mêsbalanco_periodo.cotacao_digitada (janela Valores manuais)Substitui a do sistema
Valores manuaisbalanco_manualSomam em cada linha; viram provisão do mês seguinte
Regras de acessoBALANCO_MODELO, BALANCO_MANUAL, BALANCO_VALIDAR, BALANCO_REABRIR (scripts/sql/regras_balanco.sql)Modelo e manual são verificadas na gravação; validar/reabrir ainda não têm tela nem endpoint
Filiais do usuáriousuario_filialRecortam as filiais do modelo
Cotaçõesmoeda_valores (cadastro 21)Conversão e SALDO_BANCO
Fechamento do mês anteriorbalanco_periodo.situacao, balanco_fechamento_linhaProvisão anterior e acumulados
F

Casos de teste sugeridos

Resultado esperado e como conferir no banco
Teste

T1 — Emissão, baixa e pendente de um centro contra SQL

ComoModelo “Balanço Transportadora” no fjfrigo_concep_transp, mês 08/2026. Abra a composição de uma linha EMISSAO P do centro 1116, uma BAIXA P do 1116 e uma PENDENTE P do 1140 (julho).

EsperadoCada linha igual à SQL (e a soma da composição = o valor da linha). Referência medida em 04/10/2026: EMISSAO P cc 1116 ago/2026 = 24.826.000,000; BAIXA P cc 1116 ago/2026 = 21.473.000,000; PENDENTE P cc 1140 em 31/07/2026 = 595.070,000. Confere com a conferência de 28/09.

SELECT 'EMISSAO P cc 1116 ago/2026' AS conferencia,
       ROUND(SUM(fe.valor_parcela * IF(fe.valor_cambio > 0, fe.valor_cambio, 1)), 3) AS valor_local
  FROM financeiro_emissao fe
 WHERE fe.excluido <> 'T' AND fe.tipo_emissao = 'P' AND fe.idcentro_custo = 1116 AND fe.idfilial = 1
   AND fe.data_emissao >= '2026-08-01' AND fe.data_emissao < DATE_ADD('2026-08-31', INTERVAL 1 DAY)
UNION ALL
SELECT 'BAIXA P cc 1116 ago/2026', ROUND(SUM(fb.valor * IF(fb.valor_cambio > 0, fb.valor_cambio, 1)), 3)
  FROM financeiro_baixas fb JOIN financeiro_emissao fe ON fe.id = fb.idfinanceiro_emissao
 WHERE fb.excluido <> 'T' AND fe.excluido <> 'T' AND fe.tipo_emissao = 'P' AND fe.idcentro_custo = 1116 AND fe.idfilial = 1
   AND fb.data_baixa >= '2026-08-01' AND fb.data_baixa < DATE_ADD('2026-08-31', INTERVAL 1 DAY)
UNION ALL
SELECT 'PENDENTE P cc 1140 em 31/07/2026', ROUND(SUM(t.pend * t.cambio), 3) FROM (
  SELECT fe.id, IF(fe.valor_cambio > 0, fe.valor_cambio, 1) AS cambio,
         fe.valor_parcela - IFNULL((SELECT SUM(b.valor)-SUM(b.valor_acrescimo)-SUM(b.valor_juros)+SUM(b.valor_desconto)+SUM(b.valor_devolucao)+SUM(b.valor_retencao)
                                      FROM financeiro_baixas b WHERE b.idfinanceiro_emissao = fe.id AND b.excluido <> 'T'
                                       AND b.data_baixa < DATE_ADD('2026-07-31', INTERVAL 1 DAY)), 0) AS pend
    FROM financeiro_emissao fe
   WHERE fe.excluido <> 'T' AND fe.tipo_emissao = 'P' AND fe.idcentro_custo = 1140 AND fe.idfilial = 1
     AND fe.data_emissao < DATE_ADD('2026-07-31', INTERVAL 1 DAY)) t
 WHERE t.pend > 0.005
Todos
Teste

T2 — Provisão anterior sem fechamento

ComoGere 08/2026 (julho não validado). Veja a composição de uma linha PROVISAO.

EsperadoItens: baixas do mês, pendente no corte e um item ANTERIOR (id 0, negativo) = pendente em 31/07 + manual de julho. Total = baixas − anterior + pendente + manual; o valor levado ao mês seguinte = pendente + manual. Aviso “O mês anterior não tem fechamento validado…”. Conferido: manual de 1.000.000 na PROVISAO do CC 1140 em julho soma exatamente, e a provisão anterior de agosto leva o manual de julho (diferença de 1.500.000).

Todos
Teste

T3 — Manual soma e histórico

ComoEm Valores manuais digite um valor numa linha de sistema e outro numa MANUAL. Recalcule.

EsperadoTotal = Sistema + Manual; a linha MANUAL tem Sistema vazio e Total = digitado. O histórico mostra valor anterior/novo; zerar apaga. Usuário sem BALANCO_MANUAL recebe a recusa da seção D.

Todos
Teste

T4 — Conversão

ComoMês 08/2026, modelo com U$ (cotação digitada 5.903).

EsperadoConvertido = Total ÷ 5.903. Sem a cotação digitada, a do sistema do último dia até o corte (a faixa mostra a data). Sem nenhuma: aviso e coluna em branco.

Todos
Teste

T5 — Fórmula e percentual

ComoConfira uma FORMULA (ex. total de receitas) e a PERCENTUAL (aguinaldo = 8,33333333% de SUELDOS).

EsperadoA fórmula soma sinal × total das linhas citadas; o percentual usa o total da base sem sinal. Conferência de 28/09: agosto = −496.787.268,25 contra a planilha −496.787.420,57 (diferença de 152,32, do percentual com poucas casas, que o decimal(12,8) deve reduzir a centavos). Julho difere da planilha porque ela congela a provisão de junho — some com junho validado.

Todos
Teste

T6 — Centro de custo sem linha

ComoLance um título num centro de custo que nenhuma linha usa e gere o mês.

EsperadoAviso com id, descrição e os quatro valores; o balanço não muda.

Todos
Teste

T7 — Filiais

ComoCom um usuário que não alcança uma filial do modelo, gere o mês.

EsperadoAviso “Filiais do modelo sem acesso … ficaram de fora”; valores menores. Sem nenhuma filial: recusa.

Todos
Teste

T8 — Tipos pendentes

ComoGere o mês do modelo da transportadora.

EsperadoAviso do tipo DIF_CAMBIAL_BANCO (a linha vale 0).

Todos
G

Limitações e pendências

docs/proposta-balanco-configuravel.md (seção 7) e docs/status-porte.csv

Status: REVISAR (29/09/2026). Feitas as etapas 1a, 1b, 2, 3a e 3b (cadastro 17M, cálculo da prévia, manuais, tela). Sem teste na tela e sem conferência do modelo gravado no banco (só contra o modelo em memória).

Etapa 2b: DIF_CAMBIAL_BANCO e VARIACAO_ALMOX valem 0 (entraram como MANUAL no modelo da transportadora).

Etapa 4 (validar/reabrir + foto), 5 (conferir fechamento), 6 (XLS no desenho da planilha) e 7 (importador + validação): não feitas. Não existe tela nem endpoint de validar/reabrir; a situação V só nasceria por SQL, e as regras BALANCO_VALIDAR/BALANCO_REABRIR só aparecem em /cadastro/balanco/permissoes: nada as aplica ainda.

Sem saída em arquivo: a prévia só é tela; o RelatorioBalancoGerencialXlsx do código é do 3199A, não deste.

Não coube nos tipos (vira linha auxiliar): aguinaldo e prejuízo acumulado precisam de abertura manual no 1º mês; SUELDOS usa duas linhas e uma fórmula; a FORMULA não tem divisão; ficaram de fora adelanto a proveedores, inversiones, receber/pagar por grupo, lucro até 2018 e variação cambial acumulada.

Fretes cárnico: a planilha do cliente lista 1136/1147/1148 mas só soma 1133 e 1146; o modelo reproduz — decisão do cliente.

Ids de documento: financeiro_emissao.id é bigint unsigned no central e int unsigned na transportadora; as tabelas de fechamento guardam bigint.

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