From 813294253260c61d89fc340450db69f66b4e3cee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alessandro=20Gon=C3=A7aalves?= Date: Mon, 3 Nov 2025 17:15:40 -0300 Subject: [PATCH] fix: ajuste nos valores dos totalizadores depois do filtro --- src/app/DRE/teste.tsx | 278 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 278 insertions(+) diff --git a/src/app/DRE/teste.tsx b/src/app/DRE/teste.tsx index e336962..932735b 100644 --- a/src/app/DRE/teste.tsx +++ b/src/app/DRE/teste.tsx @@ -1122,6 +1122,272 @@ export default function Teste() { } }, [isAllExpanded, data, ordemHierarquiaContasPrimeiro]); + // Função para recalcular grupos calculados baseado apenas nos dados filtrados + const recalcularGruposCalculados = (dadosFiltrados: DREItem[]): DREItem[] => { + const gruposCalculados: DREItem[] = []; + + // Agrupar dados por mês para cálculos + const dadosPorMes = dadosFiltrados.reduce((acc, item) => { + const mes = item.data_competencia; + if (!acc[mes]) acc[mes] = []; + acc[mes].push(item); + return acc; + }, {} as Record); + + // Para cada mês, criar os grupos calculados + Object.keys(dadosPorMes).forEach(mes => { + const dadosMes = dadosPorMes[mes]; + + // Calcular valores por grupo usando código numérico + const valoresPorGrupo = dadosMes.reduce((acc: Record, item: DREItem) => { + const codgrupo = item.codgrupo || ""; + if (!codgrupo) return acc; + if (!acc[codgrupo]) acc[codgrupo] = 0; + acc[codgrupo] += parseFloat(item.valor); + return acc; + }, {} as Record); + + // Função auxiliar para obter valor de um grupo (calculado ou não) + const obterValorGrupo = (codigoGrupo: string): number => { + // Primeiro, verificar se já foi calculado nos grupos calculados + const grupoCalculado = gruposCalculados.find(g => g.codgrupo === codigoGrupo && g.data_competencia === mes); + if (grupoCalculado) { + return parseFloat(grupoCalculado.valor); + } + // Se não, buscar nos valores diretos dos grupos + return valoresPorGrupo[codigoGrupo] || 0; + }; + + // 03 - Faturamento Líquido (01 + 02) + const faturamentoBruto = valoresPorGrupo['01'] || 0; + const devolucao = valoresPorGrupo['02'] || 0; + const faturamentoLiquido = faturamentoBruto + devolucao; + + gruposCalculados.push({ + codfilial: "001", + data_competencia: mes, + data_cai: mes, + grupo: "03 - FATURAMENTO LÍQUIDO", + subgrupo: "CALCULADO", + centro_custo: "CALCULADO", + codigo_centro_custo: "", + codigo_conta: 0, + conta: "FATURAMENTO LÍQUIDO", + valor: faturamentoLiquido.toString(), + codgrupo: "03", + isCalculado: true + }); + + // 05 - Lucro Bruto (03 + 04) - usar grupo 03 calculado + const cmv = valoresPorGrupo['04'] || 0; + const valor03 = obterValorGrupo("03"); + const lucroBruto = valor03 + cmv; + + gruposCalculados.push({ + codfilial: "001", + data_competencia: mes, + data_cai: mes, + grupo: "05 - LUCRO BRUTO", + subgrupo: "CALCULADO", + centro_custo: "CALCULADO", + codigo_centro_custo: "", + codigo_conta: 0, + conta: "LUCRO BRUTO", + valor: lucroBruto.toString(), + codgrupo: "05", + isCalculado: true + }); + + // 07 - Margem Loja (05 + 06) - usar grupo 05 calculado + const receitasGastosDiretos = valoresPorGrupo['06'] || 0; + const valor05 = obterValorGrupo("05"); + const margemLoja = valor05 + receitasGastosDiretos; + + gruposCalculados.push({ + codfilial: "001", + data_competencia: mes, + data_cai: mes, + grupo: "07 - MARGEM LOJA", + subgrupo: "CALCULADO", + centro_custo: "CALCULADO", + codigo_centro_custo: "", + codigo_conta: 0, + conta: "MARGEM LOJA", + valor: margemLoja.toString(), + codgrupo: "07", + isCalculado: true + }); + + // 10 - Resultado Operacional (07 + 08 + 09) - usar grupo 07 calculado + const verba = valoresPorGrupo['08'] || 0; + const receitasGastosIndiretos = valoresPorGrupo['09'] || 0; + const valor07 = obterValorGrupo("07"); + const resultadoOperacional = valor07 + verba + receitasGastosIndiretos; + + gruposCalculados.push({ + codfilial: "001", + data_competencia: mes, + data_cai: mes, + grupo: "10 - RESULTADO OPERACIONAL", + subgrupo: "CALCULADO", + centro_custo: "CALCULADO", + codigo_centro_custo: "", + codigo_conta: 0, + conta: "RESULTADO OPERACIONAL", + valor: resultadoOperacional.toString(), + codgrupo: "10", + isCalculado: true + }); + + // 13 - Resultado Financeiro (11 + 12) + const receitaFinanceira = valoresPorGrupo['11'] || 0; + const despesaFinanceira = valoresPorGrupo['12'] || 0; + const resultadoFinanceiro = receitaFinanceira + despesaFinanceira; + + gruposCalculados.push({ + codfilial: "001", + data_competencia: mes, + data_cai: mes, + grupo: "13 - RESULTADO FINANCEIRO", + subgrupo: "CALCULADO", + centro_custo: "CALCULADO", + codigo_centro_custo: "", + codigo_conta: 0, + conta: "RESULTADO FINANCEIRO", + valor: resultadoFinanceiro.toString(), + codgrupo: "13", + isCalculado: true + }); + + // 19 - Resultado Não Operacional (14 + 15 + 16 + 17 + 18) + const prejuizosPerdas = valoresPorGrupo['14'] || 0; + const inativas = valoresPorGrupo['15'] || 0; + const diretoria = valoresPorGrupo['16'] || 0; + const lancamentosSemCC = valoresPorGrupo['17'] || 0; + const receitasDespesasNaoOperacional = valoresPorGrupo['18'] || 0; + const resultadoNaoOperacional = prejuizosPerdas + inativas + diretoria + lancamentosSemCC + receitasDespesasNaoOperacional; + + gruposCalculados.push({ + codfilial: "001", + data_competencia: mes, + data_cai: mes, + grupo: "19 - RESULTADO NÃO OPERACIONAL", + subgrupo: "CALCULADO", + centro_custo: "CALCULADO", + codigo_centro_custo: "", + codigo_conta: 0, + conta: "RESULTADO NÃO OPERACIONAL", + valor: resultadoNaoOperacional.toString(), + codgrupo: "19", + isCalculado: true + }); + + // 20 - LAIR (10 + 13 + 19) - usar grupos calculados + const valor10 = obterValorGrupo("10"); + const valor13 = obterValorGrupo("13"); + const valor19 = obterValorGrupo("19"); + const lair = valor10 + valor13 + valor19; + + gruposCalculados.push({ + codfilial: "001", + data_competencia: mes, + data_cai: mes, + grupo: "20 - LAIR", + subgrupo: "CALCULADO", + centro_custo: "CALCULADO", + codigo_centro_custo: "", + codigo_conta: 0, + conta: "LUCRO ANTES DO IMPOSTO DE RENDA", + valor: lair.toString(), + codgrupo: "20", + isCalculado: true + }); + + // 21 - IR = Se LAIR > 0 calcular 20% e resultado negativo (*-1), se não 0 + const valor20_ir = obterValorGrupo("20"); + const ir = valor20_ir > 0 ? -(valor20_ir * 0.20) : 0; + + gruposCalculados.push({ + codfilial: "001", + data_competencia: mes, + data_cai: mes, + grupo: "21 - IR", + subgrupo: "CALCULADO", + centro_custo: "CALCULADO", + codigo_centro_custo: "", + codigo_conta: 0, + conta: "IMPOSTO DE RENDA", + valor: ir.toString(), + codgrupo: "21", + isCalculado: true + }); + + // 22 - CSLL = Se LAIR > 0 calcular 9% e resultado negativo (*-1), se não 0 + const valor20_csll = obterValorGrupo("20"); + const csll = valor20_csll > 0 ? -(valor20_csll * 0.09) : 0; + + gruposCalculados.push({ + codfilial: "001", + data_competencia: mes, + data_cai: mes, + grupo: "22 - CSLL", + subgrupo: "CALCULADO", + centro_custo: "CALCULADO", + codigo_centro_custo: "", + codigo_conta: 0, + conta: "CONTRIBUIÇÃO SOCIAL SOBRE LUCRO LÍQUIDO", + valor: csll.toString(), + codgrupo: "22", + isCalculado: true + }); + + // 23 - Lucro Líquido (20 + 21 + 22) - usar grupos calculados + const valor20 = obterValorGrupo("20"); + const valor21 = obterValorGrupo("21"); + const valor22 = obterValorGrupo("22"); + const lucroLiquido = valor20 + valor21 + valor22; + + gruposCalculados.push({ + codfilial: "001", + data_competencia: mes, + data_cai: mes, + grupo: "23 - LUCRO LÍQUIDO", + subgrupo: "CALCULADO", + centro_custo: "CALCULADO", + codigo_centro_custo: "", + codigo_conta: 0, + conta: "LUCRO LÍQUIDO", + valor: lucroLiquido.toString(), + codgrupo: "23", + isCalculado: true + }); + + // 25 - EBITDA (20 - (13 + 19 + 24)) - usar grupos calculados + const despesaTributaria = valoresPorGrupo['24'] || 0; + const valor20_ebitda = obterValorGrupo("20"); + const valor13_ebitda = obterValorGrupo("13"); + const valor19_ebitda = obterValorGrupo("19"); + const ebitda = valor20_ebitda - (valor13_ebitda + valor19_ebitda + despesaTributaria); + + gruposCalculados.push({ + codfilial: "001", + data_competencia: mes, + data_cai: mes, + grupo: "25 - EBITDA", + subgrupo: "CALCULADO", + centro_custo: "CALCULADO", + codigo_centro_custo: "", + codigo_conta: 0, + conta: "EBITDA", + valor: ebitda.toString(), + codgrupo: "25", + isCalculado: true + }); + }); + + return gruposCalculados; + }; + const limparFiltros = () => { const agora = new Date(); const anoAtual = agora.getFullYear(); @@ -1291,6 +1557,18 @@ export default function Teste() { ); } + // Remover grupos calculados antigos (que foram calculados com todos os dados) + // Eles serão recalculados com base apenas nos dados filtrados + dadosFiltrados = dadosFiltrados.filter((item: DREItem) => + item.centro_custo !== "CALCULADO" && item.isCalculado !== true + ); + + // Recalcular grupos calculados com base apenas nos dados filtrados + const gruposCalculadosRecalculados = recalcularGruposCalculados(dadosFiltrados); + + // Adicionar os grupos calculados recalculados de volta aos dados filtrados + dadosFiltrados = [...dadosFiltrados, ...gruposCalculadosRecalculados]; + setData(dadosFiltrados); setDadosFiltrados(dadosFiltrados); setFiltrosAplicados(true);