FJFrigo · Relatórios · menu 3-1-6 Outros Relatórios Gerenciais

Inadimplência por Mês de Emissão

Para cada mês de emissão, quanto do valor a receber continuava em aberto — e vencido — 30, 60, 90, 180 e 360 dias depois da emissão de cada título. De onde vem cada número, as recusas com a mensagem exata e casos de teste com a SQL de conferência.

Opção: 316D Origem: desenho novo (sem legado) Saída: PDF e planilha (XLS) Base conferida: central (Brasil 004)

Regra

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

Aviso

O relatório sai, mas com um comportamento que surpreende.

Bloqueia

O relatório não é gerado: 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 › 6-Outros Relatórios Gerenciais › D

Desenho novo (28/09/2026), sem equivalente no legado nem no ceif. Cada mês de emissão é comparado com os outros no mesmo tempo de vida: quanto do emitido continuava em aberto — e vencido — 30, 60, 90, 180 e 360 dias depois da emissão de cada título. Diferente do Aging (316A), que é uma foto do saldo de hoje.

ItemValor
TelaInadimplência por Mês de Emissão (316D) — RelatorioInadimplenciaEmissao.vue; XLS e Gerar PDF
EndpointPOST /lancamento/relatorios/relatorioInadimplenciaEmissao — RelatorioInadimplenciaEmissaoService
Reaproveitado porO painel Crédito e Inadimplência (38C) usa curva(...) (a mesma apuração, sem quebra) e a permissão da 316A
ColunasMês de emissão · Títulos · Emitido (moeda local) · para cada marco (30, 60, 90, 180, 360 d): aberto % e vencido %
LinhasUm mês por linha; com quebra, um bloco por filial/vendedor/região/tipo de faturamento, com “Total <grupo>”; e sempre o Total geral
Só a receberTítulos tipo_emissao = 'R', em moeda local, descontado fora
B

Filtros e opções

Moeda e quebra ficam no painel de Opções

O período é o de emissão dos títulos (cada mês dele é uma linha), no máximo três anos. A data de referência define até onde cada marco já “aconteceu”.

CampoOndePadrãoO que faz
Emissão de / atéFiltrodia 1 de 12 meses atrás · hojefe.data_emissao >= de AND < até + 1 dia. Obrigatórios. A tela escolhe os últimos 12 meses fechados mais o corrente para dar para ver o marco de 360 dias
Posição em (data de referência)FiltrohojeVazia vale hoje. Marco cuja data cai depois dela sai em branco. Não pode ser anterior ao início do período
FilialFiltrotodas as do usuárioUma filial (fe.idfilial)
EmitenteFiltrotodosfe.idemitente
VendedorFiltrotodosCOALESCE(NULLIF(fe.idvendedor,0), e.idvendedor, 0)
Quebrar porOpçõesSem quebraFilial (filial.apelido), Vendedor, Região (cidade.idregiao) ou Tipo de faturamento (tipo_faturamento.descricao)
Moeda filtroOpçõesTodasfe.idmoeda. Os valores saem sempre em moeda local pelo câmbio gravado no título
Só títulos de vendaOpçõesligadofe.idfaturamento > 0 e tipo de faturamento que não é empréstimo
Paisagem (PDF)OpçõesligadoOrientação do PDF
Filtros salvos ★ / Exibir filtrosComuns—Código de salvamento 316D
C

De onde vem cada número

Tabelas, colunas e filtros SQL
Regra

Saldo do título num marco

ContaParcela − Σ amortizado (a conta do 221: valor − acréscimo − juros + desconto + devolução + retenção) das baixas vivas com b.data_baixa < emissão + (N+1) dias — ou seja, até o dia do marco, inclusive.

LimiteO saldo fica entre zero e a parcela (LEAST(GREATEST(valor − amortizado, 0), valor)). Há baixa com amortização negativa (acréscimo maior que o valor); sem o limite um título chegava a 200% do emitido.

Moeda× IF(fe.valor_cambio > 0, fe.valor_cambio, 1): moeda local pelo câmbio do título.

Não usavalor_pendente (zerada no central). Protesto e carteira de cobrança não mudam nada.

Todos
Regra

Em aberto % e Vencido %

Em aberto %Σ saldo no marco ÷ Σ emitido do mês (parcela × câmbio).

Vencido %O mesmo saldo, só dos títulos cujo vencimento é anterior à data do marco (DATE(vencimento) < emissão + N dias). Tira o que ainda não venceu: título de prazo longo não é inadimplência. Título sem vencimento nunca entra no vencido.

RelaçãoVencido % ≤ Em aberto % em todo marco e mês.

Todos
Regra

Marco que ainda não chegou sai em branco

RegraPara o mês inteiro, o marco N está alcançado quando último dia do mês + N dias ≤ data de referência. Senão a célula fica em branco (os títulos do fim do mês puxariam o % para cima, com o marco ainda por vir).

ExemploMês 02/2026 com referência em 04/10/2026: 180 d alcançado (28/02 + 180 = 27/08/2026); 360 d em branco (28/02 + 360 = 24/02/2027).

Todos
Regra

A linha de total pondera só os meses que alcançaram o marco

RegraEm “Total” e “Total geral”, o % de cada marco é Σ aberto (ou vencido) dos meses que alcançaram o marco ÷ Σ emitido desses meses. Os campos Títulos e Emitido do total somam todos os meses.

Por issoO Emitido do total não é o denominador do %; conferir o % do total à mão exige somar só os meses alcançados.

Todos
Regra

Quais títulos entram

Fixosfe.excluido <> 'T', fe.tipo_emissao = 'R', IFNULL(fe.descontado,'') <> 'T', emissão no período, filiais do usuário (ou a escolhida).

Só venda (padrão)fe.idfaturamento > 0 AND IFNULL(tf.emprestimo,'N') <> 'S' — qualquer módulo que grave idfaturamento e não esteja marcado como empréstimo entra.

Grupo da quebraSem nome: “(sem filial)”, “(sem vendedor)”, “(sem região)” ou “(sem tipo de faturamento)”.

Todos
D

Recusas e avisos

Mensagens exatas
Bloqueia

Informe a data inicial. / Informe a data final.

QuandoPeríodo de emissão em branco (chamada direta).

Todos
Bloqueia

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

QuandoPeríodo invertido.

Todos
Bloqueia

O período pode ter no máximo três anos.

QuandoMais de 1.100 dias entre as duas datas.

Todos
Bloqueia

A data de referência não pode ser anterior ao início do período.

Quando“Posição em” antes de “Emissão de”.

Todos
Bloqueia

A filial N não está entre as filiais do usuário. / O usuário não tem filial de acesso.

QuandoFilial sem acesso ou usuário sem filial.

Todos
Bloqueia

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

QuandoNenhum título a receber de venda emitido no período e nos filtros.

Todos
Aviso

Data de referência malformada não tem mensagem amigável

O que aconteceAo contrário dos outros relatórios, a data de referência é lida com LocalDate.parse sem tratamento: um texto fora de yyyy-MM-dd (só por chamada direta; a tela usa o seletor de data) cai no erro inesperado, com código de ocorrência e dica, e não na mensagem “Data … inválida”.

Todos
Aviso

O resultado muda de um dia para o outro sem ninguém lançar nada

EfeitoA referência padrão é hoje: meses que ainda não alcançaram um marco vão preenchendo com o passar dos dias. Para comparar duas gerações, fixe a data de referência.

Todos
Aviso

Vencido e em aberto iguais

EfeitoÉ comum em bases com prazo curto: tudo o que está em aberto aos 90 dias já venceu (a SQL de referência do central dá 11,06% nos dois). Não é erro.

Todos
Aviso

Tempo de geração

MedidoUsuário com 141 filiais, jan/2025–set/2026, ~974 mil títulos: ~35 s. A tela mostra Gerando… (Ns).

Todos
E

Configurações que mudam o resultado

O que o suporte confere antes de abrir chamado
ConfiguraçãoOndeEfeito
Prazo de vencimento dos títulosfinanceiro_emissao.data_vencimentoDefine o que conta como vencido em cada marco
Descontadofinanceiro_emissao.descontadoTira o título do relatório
Tipo de faturamento = empréstimotipo_faturamento.emprestimo = 'S'Com “Só títulos de venda”, o tipo marcado sai
Câmbio do títulofinanceiro_emissao.valor_cambioConverte para a moeda local; 0/nulo = 1
Região da cidade / vendedor do cadastrocidade.idregiao, emitente.idvendedorGrupos das quebras Região e Vendedor
Filiais do usuáriousuario_filialAlcance
Baixas retroativasfinanceiro_baixas.data_baixaBaixa lançada depois com data antiga reduz o aberto dos marcos já passados
F

Casos de teste sugeridos

Resultado esperado e como conferir no banco
Teste

T1 — Um mês e um marco contra SQL independente

ComoGere emissão 01/03/2026 a 31/03/2026, referência hoje, filial 3, sem quebra. Compare a linha 03/2026, marco 90 d, com a SQL abaixo.

EsperadoIgualdade em Títulos, Emitido e nos dois percentuais. Referência medida em 04/10/2026 no central: 3.371 títulos, emitido 30.664.907,53, aberto 11,06%, vencido 11,06%. Conferência do plano em 28/09 (usuário 100826, 141 filiais): 03/2026 aos 90 dias = 31.753 títulos, 418.635.483,50, 32,31% / 26,33%.

SELECT DATE_FORMAT(t.em,'%Y-%m') AS mes, COUNT(*) AS titulos, ROUND(SUM(t.valor*t.c),2) AS emitido,
       ROUND(100*SUM(LEAST(GREATEST(t.valor-t.a90,0),t.valor)*t.c)/SUM(t.valor*t.c),2) AS aberto_90,
       ROUND(100*SUM(IF(t.venc<DATE_ADD(t.em,INTERVAL 90 DAY),LEAST(GREATEST(t.valor-t.a90,0),t.valor),0)*t.c)
             /SUM(t.valor*t.c),2) AS vencido_90
FROM (SELECT fe.id, DATE(fe.data_emissao) AS em, DATE(fe.data_vencimento) AS venc, fe.valor_parcela AS valor,
             IF(fe.valor_cambio>0,fe.valor_cambio,1) AS c,
             IFNULL(SUM(IF(b.data_baixa<DATE_ADD(DATE(fe.data_emissao),INTERVAL 91 DAY),
                  (b.valor-b.valor_acrescimo-b.valor_juros+b.valor_desconto+b.valor_devolucao+b.valor_retencao),0)),0) AS a90
        FROM financeiro_emissao fe
        LEFT JOIN financeiro_baixas b ON b.idfinanceiro_emissao = fe.id AND b.excluido <> 'T'
        LEFT JOIN tipo_faturamento tf ON tf.id = fe.idtipo_faturamento
       WHERE fe.excluido <> 'T' AND fe.tipo_emissao = 'R' AND IFNULL(fe.descontado,'') <> 'T'
         AND fe.data_emissao >= '2026-03-01' AND fe.data_emissao < DATE_ADD('2026-03-31', INTERVAL 1 DAY)
         AND fe.idfilial = 3 AND fe.idfaturamento > 0 AND IFNULL(tf.emprestimo,'N') <> 'S'
       GROUP BY fe.id) t
GROUP BY 1
Todos
Teste

T2 — Marcos ainda por vir ficam em branco

ComoPeríodo 01/01/2026 a 31/10/2026, referência 04/10/2026.

EsperadoMês 10/2026: todos os marcos em branco. Mês 03/2026: 360 d em branco, 180 d preenchido (31/03 + 180 = 27/09 ≤ 04/10). Em 04/10, 08/2026 só tem 30 d (31/08 + 30 = 30/09).

Todos
Teste

T3 — Total pondera só os meses alcançados

ComoNo resultado do T2, calcule à mão o % de 180 d do Total geral: Σ aberto dos meses com 180 d preenchido ÷ Σ emitido só desses meses.

EsperadoBate com o Total geral. Títulos e Emitido do Total somam todos os meses, inclusive os que ficaram em branco.

Todos
Teste

T4 — Vencido ≤ aberto

ComoPercorra todas as linhas.

EsperadoEm cada marco, vencido % ≤ aberto %. Nunca acima de 100%, mesmo com baixa de amortização negativa no mês.

Todos
Teste

T5 — Quebra fecha com o total

ComoGere sem quebra e depois com Quebrar por Filial (mesmo período e referência).

EsperadoA soma de Títulos e Emitido dos totais de grupo = Total geral sem quebra. O % do Total geral é o mesmo nos dois (a quebra não muda a ponderação do total geral).

Todos
Teste

T6 — Referência passada

ComoGere com referência 30/06/2026 e depois com hoje, mesmo período.

EsperadoCom 30/06 menos marcos alcançados (mais células em branco) e o título do relatório mostra “posição em 30/06/2026”. Referência anterior ao início do período recusa.

Todos
Teste

T7 — Só venda

ComoDesligue “Só títulos de venda”.

EsperadoMais títulos e Emitido maiores (empréstimos e avulsos entram); a SQL do T1 sem a linha de idfaturamento/emprestimo bate de novo.

Todos
Teste

T8 — Recusas

ComoPeríodo de 4 anos; datas invertidas; referência antes do início; filial sem acesso; período sem títulos.

EsperadoAs mensagens da seção D.

Todos
G

Limitações e pendências

docs/status-porte.csv e docs/melhorias-relatorios-financeiros.md (3.7)

Status: REVISAR (02/10/2026). Feito em 28/09/2026 (nome trocado de “por safra”); conferido no central (03/2026 aos 90 dias = SQL independente). Sem teste de tela.

Só a receber; sem a pagar.

Marcos fixos (30, 60, 90, 180, 360 dias): não são configuráveis.

Um item por filtro: a tela envia só a primeira filial/emitente/vendedor marcado.

Sem ordenação: os meses saem em ordem cronológica; os grupos da quebra em ordem alfabética.

38C: o painel Crédito e Inadimplência exibe a mesma curva (sem quebra); divergência é diferença de filtro ou de data de referência.

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