fix: ajuste nos valores dos totalizadores depois do filtro
This commit is contained in:
parent
df741a287d
commit
8132942532
|
|
@ -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<string, DREItem[]>);
|
||||
|
||||
// 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<string, number>, 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<string, number>);
|
||||
|
||||
// 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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue