FJFrigo · Relatórios · menu 3-8 Indicadores — 384

Custo por kg vendido

Por filial que vende carne: kg vendido, preço médio, custo do produto, custo fixo, custo sobre vendas, resultado e margem por kg. Plantas pelo custo formado do 383; distribuidoras e lojas pelo custo médio.

Tela: Custo por kg vendido (384)Origem: desenho novo, sem legadoSaída: XLS, PDF e painel em telaGrava: nada

Bloqueia

Recusa e não gera. HTTP 200 com statuscode 400 e a frase indicada.

Aviso

Comportamento que surpreende sem ser erro — origem da maioria dos chamados de "o número não bate". Parte sai como painel de avisos na tela.

Depende do 383

O custo do produto das plantas usa o custo formado e a foto da produção do 383.

Visão gerencial

A venda exclui os tipos das duas chaves DEMONSTRATIVO_FATURAMENTO_EXCLUIR_TIPOS* do 381.

A

O que a tela mostra

Relatório por filial e painel em tela

Para cada filial que vendeu carne no período: kg vendido, receita, preço médio por kg, custo do produto por kg, custo fixo por kg, custo sobre vendas por kg, custo total por kg, resultado por kg, resultado e margem %. Desenho novo, sem legado; proposta e mapa de centros em docs/proposta-custo-kg-vendido.md. Tudo em moeda local.

SaídaConteúdo
XLS / PDFUma linha por filial (colunas: Receita, Preço/kg, Custo produto/kg, Custo fixo/kg, Sobre vendas/kg, Custo total/kg, Resultado/kg, Resultado, Margem %), ordenada por kg vendido, e TOTAL. Com Composição do custo por kg (padrão ligado) acrescenta a seção Composição do custo por kg vendido: uma linha por grupo de custo e uma coluna por filial.
Painel "Ver em tela"Seletor Todas | Plantas | Comerciais; indicadores contra o período anterior de mesmo tamanho (kg vendido, custo total por kg, resultado por kg, margem); gráfico de custo por kg × preço médio (as 15 que mais vendem; o clique escolhe a filial), composição do fixo e do sobre vendas da filial clicada e grade por filial com o tipo.

Tipos de filial na grade

TipoQuandoCusto do produto
BOVINO, SUÍNO, BOVINO/SUÍNO, CICLO 2Planta: abateu ou produziu no período (mesma regra do 383).Custo formado do 383 + gado + entradas de carne, ÷ (kg produzido + kg das entradas), mês a mês, × kg vendido.
COMERCIAL (custo médio)Filial com filial.distribuidora = 1 ou filial.loja = 1 que não é planta.Kg vendido de cada produto em cada dia × custo médio móvel do produto no dia (funcoes.CustoMedioMovel, o do DRE gerencial).
COMERCIALFilial comercial sem a flag (Cajuru, Ibiúna) ou sem custo médio em nenhum produto.Pelas entradas de carne (compra 011, importação 041, transferência de entrada 071, retorno de industrialização 251).
B

Filtros e opções

Com o valor que a tela abre
CampoPadrãoEfeito
Período de / atéDia 1 do mês corrente até hojeObrigatório. Venda pela emissão; entradas e gado pela data_entrada; títulos pela emissão; todos em faixa meio-aberta.
Filial (multi)Vazio = todas do usuário que venderam carneFilial listada em CUSTO_KG_FILIAIS_FORA é removida, mesmo pedida — com aviso quando foi pedida (04/10/2026). Só entra filial com kg vendido > 0.
Composição do custo por kgLigadoSeção extra do arquivo.
Paisagem (PDF)Ligado—
Moeda(não há)Sempre moeda local.

Nota na janela: "O custo do produto usa a foto da produção do 383: refaça a foto do período lá antes, se faltar." Barra de filtros salvos (código 384).

C

De onde vem cada número

Tabelas, colunas e filtros

Regras comuns: documento e itens não excluídos; só as filiais do alcance do usuário; faixa meio-aberta; moeda local da filial (valor_cambio quando a moeda do documento não é a local; câmbio vazio ou zero vale 1).

NúmeroFonteRegra
Kg vendido, Receita, Preço médiofaturamento_venda × faturamento_venda_produtos (peso_liquido, valor_total, tipo_produto = '1')Tipos de saída (entrada_saida = 'S') com tipo_natop LIKE 'venda%' ou sem natureza cadastrada (decisão de 04/10/2026, a mesma tolerância do 38F: no Paraguai 98 dos 156 tipos não têm natureza), pela data_emissao. Fora os tipos das chaves DEMONSTRATIVO_FATURAMENTO_EXCLUIR_TIPOS e _GERENCIAL (a visão é sempre a gerencial). Soma o peso_liquido de todos os itens, não só carne.
Custo do produto (planta)383 (custo()), faturamento_compra_gado_produtos.valor_total, entradas de carnePor mês: (custo formado + compra de gado + entradas de carne) ÷ (kg produzido + kg das entradas), × kg vendido do mês. Mês sem base usa a razão do período. Sem base em nenhum mês, ou planta que abateu sem produção na foto, o custo fica em branco e a filial sai dos totais.
Custo do produto (comercial)Ver seção AKg sem custo médio é valorizado pela média da filial (aviso); se nenhum produto tem custo médio, cai nas entradas.
Custo fixo / Sobre vendasfinanceiro_emissao por centro de custo (CustoPorCentro.somarPorCentro)19 linhas, cada uma uma chave CUSTO_KG_FIXO_* (14) ou CUSTO_KG_VENDAS_* (5) com centros de custo. Pela emissão, tipo_emissao P/R, valor = pagar − receber, sem os títulos do almoxarifado. Uma consulta só para todas as linhas. Em filial que não é planta, o consumo do almoxarifado (117) entra como linha do fixo (na planta já está no custo formado).
Resultado, Margem %Preço médio − custo total; ÷ preçoEm branco quando o custo total é nulo.
TOTALSoma das filiais com custo do produtoQuando alguma filial ficou sem custo, o rótulo vira TOTAL (só filiais com custo do produto).

Por que mês a mês. A primeira versão dividia nove meses de custo por um mês de foto (Tarauacá R$ 368/kg). Hoje cada mês usa o custo e o kg do próprio mês.

Entradas de carne. Só tipo_operacao 011, 041, 071 e 251. A 461 ("somente aduaneira") duplicaria a troca de NF; armazenagem 571, devolução e cancelamento ficam fora.

Maringá industrializa fora: remessa 1184 e retorno 1185 saem com o mesmo R$/kg (a diferença que daria a mão de obra é zero). A mão de obra está nos títulos do centro 101722 ("Serviço de Industrialização"), que entra na folha do 383 (COMPARATIVO_PLANTAS_CC_SERV_INDUSTRIALIZACAO). O usuário confirmou que houve só até julho/2026.

D

Regras, travas e avisos

O que recusa e o que surpreende

O 384 só lê. Sem regra de acesso nomeada: alcance pelas filiais do usuário.

Bloqueia

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

Todos
Bloqueia

A filial N não está entre as filiais do usuário.

Todos
Bloqueia

Não foram encontrados dados nessas condições.

QuandoNenhuma filial do alcance vendeu carne no período (ou todas estão em CUSTO_KG_FILIAIS_FORA/excluídas). O painel mostra Nenhuma filial vendeu carne no período.

Todos
Aviso

Sem custo do produto (sem produção na foto, ou sem entrada de carne): <filiais>. Ficam fora do total. Nas plantas, refaça a foto da produção do período no 383.

QuemPlanta que abateu sem produção na foto (Colorado, São Gabriel, Venceslau, Juruena, Cacoal, Rolim, Distriboi: banco fora do alcance desta máquina ou sem 115 em 2026) e filial sem nenhuma base (RioBeef, Paiçandu, CD Campo Grande).

EfeitoPreço e kg aparecem; custo, resultado e margem em branco; a filial não soma no TOTAL.

Todos
Aviso

Kg vendido sem custo médio (produto sem entrada com preço), valorizado pela média da filial: <filial (kg)>.

QuemDistribuidora/loja. O produto sem entrada valorizada no custo médio móvel assume o custo médio da filial no período.

Todos
Aviso

O Excel e a tela podem demorar.

Tempo~50 s para jan–set (o custo médio é calculado filial a filial); custo fixo e sobre vendas 13 s (eram 38 s quando uma consulta por linha). O painel calcula o período e o anterior em paralelo.

Todos
Aviso

Um centro de custo em duas linhas conta nas duas.

EfeitoA consulta distribui o valor por linha: se o mesmo centro está em duas chaves, aparece em ambas (cadastro a corrigir).

Todos
Aviso

Filiais fora: 12, 14, 16, 17, 27, 51, 52, 56, 64 (BMG).

MotivoGranjas que "vendem" suíno vivo e ração, curtume, confinamento (51, 52, 56, 64) e unidades desativadas/encerradas (Juruena 12, Vila Bela 14, Rolim 16, Distriboi 17, RioBeef 27). Decisão do usuário em 03/10/2026; a chave é CUSTO_KG_FILIAIS_FORA.

Todos
E

Configuração e permissões

Config. Globais, grupo faturamento

Todas são listas de ids (vírgula, ponto e vírgula ou espaço) em system_config.valor_string; padrão vazio. Gravadas para a BMG no central de homologação.

ChaveEfeito
CUSTO_KG_FILIAIS_FORAIds de filial fora do relatório (e do 38F). BMG: 12,14,16,17,27,51,52,56,64.
DEMONSTRATIVO_FATURAMENTO_EXCLUIR_TIPOS e _GERENCIALTipos de venda que não contam (kg e receita). BMG: 1121 e 11195,11196,11203.
CUSTO_KG_FIXO_* (14)ALUGUEL_ESCRITORIO, ALUGUEL_ARRENDAMENTO, ALUGUEL_MAQUINAS, CONDOMINIO, INTERNET_TELEFONE, HONORARIOS, MANUT_CIVIL, MANUT_ELETRICA_MECANICA, MANUT_INDUSTRIAL, MATERIAL, MEIO_AMBIENTE, SISTEMAS, IPTU, JUROS_MULTAS — ids de centro de custo.
CUSTO_KG_VENDAS_* (5)COMISSAO, VEICULOS, FRETE_EXPORTACAO, DESPESAS_EXPORTACAO, FRETES_NACIONAL — ids de centro de custo.
Chaves do 383O custo formado e a foto vêm de COMPARATIVO_PLANTAS_* (ver o documento do 383): consumo 117, folha, frete dos animais, refeitório, intermediários, serviço de industrialização.
filial.distribuidora / filial.lojaColunas opcionais da filial (tenant sem elas: o relatório segue pelas entradas, sem erro). Definem o COMERCIAL (custo médio).

Permissão. Item de menu sem idOpcao: qualquer usuário logado abre; o alcance é o das filiais do usuário.

F

Casos de teste sugeridos

Com o resultado esperado e como conferir no banco

Banco: central (BMG). O custo do produto das plantas exige a foto da produção do período no 383 (jan–set/2026 gravada nas plantas alcançáveis desta máquina). Números de 03–04/10/2026.

#PassoEsperadoComo conferir
1Período 01/09–30/09/2026, todas as filiais.Iporã (5): 3.300,8 t, receita R$ 32.016.613,34, preço médio R$ 9,70/kg; Grão Pará (11) 662 t; filial 3 ≈ 345 t; Maringá (18) 131,5 t. Sem as filiais fora.
SELECT fv.idfilial, ROUND(SUM(fvp.peso_liquido)/1000, 1) AS toneladas,
       ROUND(SUM(fvp.valor_total * IF(fv.idmoeda = f.idmoeda_local OR IFNULL(fv.valor_cambio,0) = 0, 1, fv.valor_cambio)), 2) AS receita
FROM faturamento_venda fv
JOIN filial f ON f.id_filial = fv.idfilial
JOIN tipo_faturamento t ON t.id = fv.idtipo_faturamento
JOIN faturamento_venda_produtos fvp ON fvp.idfaturamento_venda = fv.id AND fvp.tipo_produto = '1' AND IFNULL(fvp.excluido,'F') <> 'T'
WHERE IFNULL(fv.excluido,'F') <> 'T' AND t.entrada_saida = 'S'
  AND (t.tipo_natop LIKE 'venda%' OR TRIM(IFNULL(t.tipo_natop,'')) = '')
  AND fv.idtipo_faturamento NOT IN (1121,11195,11196,11203)      -- as duas chaves DEMONSTRATIVO_*
  AND fv.idfilial NOT IN (12,14,16,17,27,51,52,56,64)            -- CUSTO_KG_FILIAIS_FORA
  AND fv.data_emissao >= '2026-09-01' AND fv.data_emissao < '2026-10-01'
GROUP BY fv.idfilial ORDER BY toneladas DESC
-- 04/10/2026: Iporã (5) 3.300,8 t e R$ 32.016.613,34 (R$ 9,70/kg); Grão Pará (11) 662,0 t; filial 3 344,7 t; filial 18 131,5 t
2Período 01/01–30/09/2026.Total das filiais com custo: ≈ 51,3 mil t, preço ≈ R$ 15,00/kg, custo ≈ R$ 14,37/kg, margem ≈ 4,2%. Iporã ≈ R$ 9,86/kg de custo e margem ≈ 3,7%; São José ≈ R$ 16,06/kg (margem −1,7%).Tolerar variação pequena (nota nova/retroativa). O custo depende da foto da produção do 383.
3Marcar uma filial de CUSTO_KG_FILIAIS_FORA (ex.: 51) no filtro.Ela não aparece, sem erro e sem aviso.SELECT valor_string FROM system_config WHERE chave = 'CUSTO_KG_FILIAIS_FORA'
4Planta com banco de indústria fora do alcance (ex.: Colorado, 10).Aviso Sem custo do produto (...); custo/resultado/margem em branco; fora do TOTAL, cujo rótulo vira TOTAL (só filiais com custo do produto).SELECT COUNT(*) FROM producao_industria WHERE idfilial = 10 AND tipo='PRODUCAO' = 0
5Distribuidora/loja (ex.: São José, Curitiba LV, lojas).Tipo COMERCIAL (custo médio); custo do produto = kg × custo médio móvel; possível aviso Kg vendido sem custo médio....Comparar com o custo médio do DRE gerencial do mesmo produto no dia.
6Filial comercial sem a flag (Cajuru, Ibiúna).Tipo COMERCIAL; custo pelas entradas de carne.
SELECT c.idfilial, DATE_FORMAT(c.data_entrada,'%Y-%m') AS mes, SUM(p.peso_liquido) AS kg,
       SUM(p.valor_total * IF(c.idmoeda = f.idmoeda_local OR IFNULL(c.valor_cambio,0) = 0, 1, c.valor_cambio)) AS valor
FROM faturamento_compra_carne c
JOIN filial f ON f.id_filial = c.idfilial
JOIN tipo_faturamento t ON t.id = c.idtipo_faturamento AND t.tipo_operacao IN ('011','041','071','251')
JOIN faturamento_compra_carne_produtos p ON p.idfaturamento_compra_carne = c.id AND IFNULL(p.excluido,'F') <> 'T'
WHERE IFNULL(c.excluido,'F') <> 'T' AND c.idfilial = <filial>
  AND c.data_entrada >= '2026-09-01' AND c.data_entrada < '2026-10-01'
GROUP BY 1, 2
7Um mês só (setembro) × jan–set na mesma planta.O custo/kg do mês usa o kg e o custo daquele mês; o do período é a média ponderada pelo kg vendido de cada mês.—
8Custo fixo e sobre vendas de uma filial.Cada linha = soma dos títulos dos centros da chave, pagar − receber, sem tipos do almoxarifado; em filial não-planta, a linha extra Consumo do almoxarifado (não planta).
SELECT fe.idcentro_custo, ROUND(SUM(IF(fe.tipo_emissao = 'P', 1, -1) * fe.valor_parcela), 2) AS valor
FROM financeiro_emissao fe
LEFT JOIN tipo_faturamento tf ON tf.id = fe.idtipo_faturamento
WHERE COALESCE(fe.excluido,'F') <> 'T' AND fe.tipo_emissao IN ('P','R') AND fe.idfilial = <filial>
  AND fe.idcentro_custo IN (/* centros da linha, ex.: CUSTO_KG_FIXO_IPTU */)
  AND fe.data_emissao >= '2026-09-01' AND fe.data_emissao < '2026-10-01'
  AND (tf.tipo_operacao IS NULL OR tf.tipo_operacao NOT IN ('101','111','131','102','132','112','171','172','501','502','551','552'))
GROUP BY fe.idcentro_custo
9Maringá (18): custo com e sem o centro 101722.Retirar 101722 de COMPARATIVO_PLANTAS_CC_SERV_INDUSTRIALIZACAO reduz o custo formado (≈ R$ 1,25/kg retornado até julho).Títulos do centro 101722 na filial 18 no período.
10Painel: Todas | Plantas | Comerciais; clicar numa filial.O filtro muda a lista e os indicadores; o clique mostra a composição do fixo e do sobre vendas por kg.Comparar com a seção Composição do XLS.
11Período sem venda de carne (futuro).Não foram encontrados dados nessas condições.—
G

Limitações, pendências e achados

O que ainda não existe ou merece atenção

Pendências: teste de tela (o backend precisa reiniciar); foto da produção das plantas fora do alcance desta máquina; nada de moeda — só moeda local.

Decisões que moldaram o desenho (usuário, 03/10/2026): IPTU no fixo; "os 6 de fora entram" (centros sem linha: aluguel/arrendamento, máquinas, juros e multas, despesas de exportação); entradas de carne no custo; custo mês a mês; custo médio nas distribuidoras e lojas.

Achados ao ler o código (não corrigidos)

1. Kg vendido não é só carne. A venda soma peso_liquido de todos os itens tipo_produto='1' de qualquer natureza venda* (inclui serviço, sebo, farinha, ração). A granja "vende" suíno vivo e ração: por isso a lista de filiais fora.

2. Remoção silenciosa de filial. Filial pedida e presente em CUSTO_KG_FILIAIS_FORA some sem aviso (o painel só mostra "nenhuma filial" se sobrar vazio). Corrigido em 04/10/2026: filial pedida e tirada vira aviso na tela.

3. Natureza por prefixo. tipo_natop LIKE 'venda%' inclui venda_servico, venda_ordem_adquirente, venda_entrega_futura, venda_consignacao, venda_dropshipping* e venda_drawback (tudo que tiver nota em faturamento_venda); um tipo novo com esse prefixo entra sozinho.

H

Como o erro chega na tela

Para o QA reproduzir e reportar

Toda resposta sai com HTTP 200; quem diz o que aconteceu é o statuscode no corpo — 400 para as recusas deste documento.

O arquivo é pedido como download, mas a recusa chega como mensagem: a tela mostra a frase no lugar do arquivo. Enquanto gera, o botão mostra o contador Gerando… (Ns).

Avisos (cotação faltando, foto sem produção, estorno sem nota...) não interrompem: vêm no cabeçalho X-Aviso-Sistema e a tela mostra o painel de avisos. Teste sempre olhando o painel, não só o arquivo.

Ao abrir chamado, copie o código de ocorrência de 8 caracteres dos erros inesperados. Erro de tela vai para o log em POST /cadastro/erros-front.

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