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]);
|
}, [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 limparFiltros = () => {
|
||||||
const agora = new Date();
|
const agora = new Date();
|
||||||
const anoAtual = agora.getFullYear();
|
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);
|
setData(dadosFiltrados);
|
||||||
setDadosFiltrados(dadosFiltrados);
|
setDadosFiltrados(dadosFiltrados);
|
||||||
setFiltrosAplicados(true);
|
setFiltrosAplicados(true);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue