Merge pull request #30 from JurunenseDevInterno/dev

Dev
This commit is contained in:
Alessandro Gonçalves 2025-11-03 17:32:09 -03:00 committed by GitHub
commit 372eae40f3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 278 additions and 0 deletions

View File

@ -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);