fix: ajuste no percentual do faturamento líquido
This commit is contained in:
parent
beaefcc736
commit
6ce426222e
|
|
@ -795,6 +795,10 @@ export default function Teste() {
|
||||||
const totalEntidade = items.reduce((sum, item) => sum + parseFloat(item.valor), 0);
|
const totalEntidade = items.reduce((sum, item) => sum + parseFloat(item.valor), 0);
|
||||||
const valoresEntidadePorMes = calcularValoresPorMes(items);
|
const valoresEntidadePorMes = calcularValoresPorMes(items);
|
||||||
|
|
||||||
|
// Verificar se a entidade contém faturamento líquido
|
||||||
|
const temFaturamentoLiquido = items.some(item => item.codgrupo === "00");
|
||||||
|
const codgrupoParaCalculo = temFaturamentoLiquido ? "00" : "";
|
||||||
|
|
||||||
// Linha da entidade (Level 0) - sempre expandida
|
// Linha da entidade (Level 0) - sempre expandida
|
||||||
rows.push({
|
rows.push({
|
||||||
type: "entidade",
|
type: "entidade",
|
||||||
|
|
@ -803,8 +807,8 @@ export default function Teste() {
|
||||||
total: totalEntidade,
|
total: totalEntidade,
|
||||||
isExpanded: true,
|
isExpanded: true,
|
||||||
valoresPorMes: valoresEntidadePorMes,
|
valoresPorMes: valoresEntidadePorMes,
|
||||||
percentuaisPorMes: calcularPercentuaisPorMes(valoresEntidadePorMes, ""),
|
percentuaisPorMes: calcularPercentuaisPorMes(valoresEntidadePorMes, codgrupoParaCalculo),
|
||||||
percentualTotal: calcularPercentualTotal(totalEntidade, ""),
|
percentualTotal: calcularPercentualTotal(totalEntidade, codgrupoParaCalculo),
|
||||||
});
|
});
|
||||||
|
|
||||||
// Agrupar por direto/indireto (SUBGRUPO) dentro da entidade
|
// Agrupar por direto/indireto (SUBGRUPO) dentro da entidade
|
||||||
|
|
@ -834,6 +838,10 @@ export default function Teste() {
|
||||||
);
|
);
|
||||||
const valoresDiretoIndiretoPorMes = calcularValoresPorMes(diretoIndiretoItems);
|
const valoresDiretoIndiretoPorMes = calcularValoresPorMes(diretoIndiretoItems);
|
||||||
|
|
||||||
|
// Verificar se direto/indireto contém faturamento líquido
|
||||||
|
const temFaturamentoLiquidoDI = diretoIndiretoItems.some(item => item.codgrupo === "00");
|
||||||
|
const codgrupoParaCalculoDI = temFaturamentoLiquidoDI ? "00" : "";
|
||||||
|
|
||||||
// Linha direto/indireto (Level 1) - sempre expandida
|
// Linha direto/indireto (Level 1) - sempre expandida
|
||||||
rows.push({
|
rows.push({
|
||||||
type: "direto_indireto",
|
type: "direto_indireto",
|
||||||
|
|
@ -843,8 +851,8 @@ export default function Teste() {
|
||||||
total: totalDiretoIndireto,
|
total: totalDiretoIndireto,
|
||||||
isExpanded: true,
|
isExpanded: true,
|
||||||
valoresPorMes: valoresDiretoIndiretoPorMes,
|
valoresPorMes: valoresDiretoIndiretoPorMes,
|
||||||
percentuaisPorMes: calcularPercentuaisPorMes(valoresDiretoIndiretoPorMes, ""),
|
percentuaisPorMes: calcularPercentuaisPorMes(valoresDiretoIndiretoPorMes, codgrupoParaCalculoDI),
|
||||||
percentualTotal: calcularPercentualTotal(totalDiretoIndireto, ""),
|
percentualTotal: calcularPercentualTotal(totalDiretoIndireto, codgrupoParaCalculoDI),
|
||||||
});
|
});
|
||||||
|
|
||||||
// Agrupar por centro de custo dentro de direto/indireto
|
// Agrupar por centro de custo dentro de direto/indireto
|
||||||
|
|
@ -877,6 +885,10 @@ export default function Teste() {
|
||||||
);
|
);
|
||||||
const valoresCentroPorMes = calcularValoresPorMes(centroItems);
|
const valoresCentroPorMes = calcularValoresPorMes(centroItems);
|
||||||
|
|
||||||
|
// Verificar se centro de custo contém faturamento líquido
|
||||||
|
const temFaturamentoLiquidoCC = centroItems.some(item => item.codgrupo === "00");
|
||||||
|
const codgrupoParaCalculoCC = temFaturamentoLiquidoCC ? "00" : "";
|
||||||
|
|
||||||
// Linha do centro de custo (Level 2) - sempre expandida
|
// Linha do centro de custo (Level 2) - sempre expandida
|
||||||
rows.push({
|
rows.push({
|
||||||
type: "centro_custo",
|
type: "centro_custo",
|
||||||
|
|
@ -888,8 +900,8 @@ export default function Teste() {
|
||||||
total: totalCentro,
|
total: totalCentro,
|
||||||
isExpanded: true,
|
isExpanded: true,
|
||||||
valoresPorMes: valoresCentroPorMes,
|
valoresPorMes: valoresCentroPorMes,
|
||||||
percentuaisPorMes: calcularPercentuaisPorMes(valoresCentroPorMes, ""),
|
percentuaisPorMes: calcularPercentuaisPorMes(valoresCentroPorMes, codgrupoParaCalculoCC),
|
||||||
percentualTotal: calcularPercentualTotal(totalCentro, ""),
|
percentualTotal: calcularPercentualTotal(totalCentro, codgrupoParaCalculoCC),
|
||||||
});
|
});
|
||||||
|
|
||||||
// Agrupar por conta dentro do centro de custo
|
// Agrupar por conta dentro do centro de custo
|
||||||
|
|
@ -922,6 +934,10 @@ export default function Teste() {
|
||||||
);
|
);
|
||||||
const valoresContaPorMes = calcularValoresPorMes(contaItems);
|
const valoresContaPorMes = calcularValoresPorMes(contaItems);
|
||||||
|
|
||||||
|
// Verificar se conta contém faturamento líquido
|
||||||
|
const temFaturamentoLiquidoConta = contaItems.some(item => item.codgrupo === "00");
|
||||||
|
const codgrupoParaCalculoConta = temFaturamentoLiquidoConta ? "00" : "";
|
||||||
|
|
||||||
// Linha da conta (Level 3)
|
// Linha da conta (Level 3)
|
||||||
rows.push({
|
rows.push({
|
||||||
type: "conta",
|
type: "conta",
|
||||||
|
|
@ -934,8 +950,8 @@ export default function Teste() {
|
||||||
codigo_centro_custo: centroItems[0].codigo_centro_custo,
|
codigo_centro_custo: centroItems[0].codigo_centro_custo,
|
||||||
total: totalConta,
|
total: totalConta,
|
||||||
valoresPorMes: valoresContaPorMes,
|
valoresPorMes: valoresContaPorMes,
|
||||||
percentuaisPorMes: calcularPercentuaisPorMes(valoresContaPorMes, ""),
|
percentuaisPorMes: calcularPercentuaisPorMes(valoresContaPorMes, codgrupoParaCalculoConta),
|
||||||
percentualTotal: calcularPercentualTotal(totalConta, ""),
|
percentualTotal: calcularPercentualTotal(totalConta, codgrupoParaCalculoConta),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
@ -1476,28 +1492,52 @@ export default function Teste() {
|
||||||
return valoresPorMes;
|
return valoresPorMes;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Função para calcular percentuais (simplificada para nova hierarquia)
|
// Função auxiliar para calcular o faturamento líquido por mês
|
||||||
const calcularPercentuaisPorMes = (
|
const calcularFaturamentoLiquidoPorMes = (): Record<string, number> => {
|
||||||
valoresPorMes: Record<string, number>,
|
const faturamentoLiquidoPorMes: Record<string, number> = {};
|
||||||
grupo: string // Não usado na nova hierarquia, mantido para compatibilidade
|
|
||||||
): Record<string, number> => {
|
|
||||||
const percentuais: Record<string, number> = {};
|
|
||||||
|
|
||||||
// Calcular o total geral de todas as entidades para usar como referência
|
|
||||||
const totalGeralPorMes: Record<string, number> = {};
|
|
||||||
mesesDisponiveis.forEach(mes => {
|
mesesDisponiveis.forEach(mes => {
|
||||||
totalGeralPorMes[mes] = data
|
// Buscar itens com CODGRUPO = "00" (faturamento líquido)
|
||||||
.filter(item => item.data_competencia === mes)
|
const dadosMes = data.filter(item => item.data_competencia === mes);
|
||||||
.reduce((sum, item) => sum + parseFloat(item.valor), 0);
|
|
||||||
|
const faturamentoLiquidoItems = dadosMes.filter(item => item.codgrupo === "00");
|
||||||
|
|
||||||
|
if (faturamentoLiquidoItems.length > 0) {
|
||||||
|
// Se encontrou itens com CODGRUPO = "00", somar seus valores
|
||||||
|
faturamentoLiquidoPorMes[mes] = faturamentoLiquidoItems.reduce(
|
||||||
|
(sum, item) => sum + parseFloat(item.valor),
|
||||||
|
0
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// Se não encontrou, retornar 0
|
||||||
|
faturamentoLiquidoPorMes[mes] = 0;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Calcular percentuais baseado no total geral
|
return faturamentoLiquidoPorMes;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Função para calcular percentuais baseado no faturamento líquido
|
||||||
|
const calcularPercentuaisPorMes = (
|
||||||
|
valoresPorMes: Record<string, number>,
|
||||||
|
grupo: string // Usado para verificar se é faturamento líquido (CODGRUPO = "00")
|
||||||
|
): Record<string, number> => {
|
||||||
|
const percentuais: Record<string, number> = {};
|
||||||
|
const faturamentoLiquidoPorMes = calcularFaturamentoLiquidoPorMes();
|
||||||
|
|
||||||
|
// Verificar se é faturamento líquido (CODGRUPO = "00")
|
||||||
|
const isFaturamentoLiquido = grupo === "00" || grupo.includes("00") || grupo.includes("FATURAMENTO LÍQUIDO");
|
||||||
|
|
||||||
Object.keys(valoresPorMes).forEach((mes) => {
|
Object.keys(valoresPorMes).forEach((mes) => {
|
||||||
const valorAtual = valoresPorMes[mes];
|
const valorAtual = valoresPorMes[mes];
|
||||||
const totalGeral = totalGeralPorMes[mes] || 0;
|
const faturamentoLiquido = faturamentoLiquidoPorMes[mes] || 0;
|
||||||
|
|
||||||
if (totalGeral !== 0) {
|
if (isFaturamentoLiquido) {
|
||||||
percentuais[mes] = (valorAtual / totalGeral) * 100;
|
// Se for faturamento líquido, sempre retornar 100%
|
||||||
|
percentuais[mes] = 100;
|
||||||
|
} else if (faturamentoLiquido !== 0) {
|
||||||
|
// Calcular percentual baseado no faturamento líquido
|
||||||
|
percentuais[mes] = (valorAtual / faturamentoLiquido) * 100;
|
||||||
} else {
|
} else {
|
||||||
percentuais[mes] = 0;
|
percentuais[mes] = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -1506,19 +1546,28 @@ export default function Teste() {
|
||||||
return percentuais;
|
return percentuais;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Função para calcular percentual do total
|
// Função para calcular percentual do total baseado no faturamento líquido
|
||||||
const calcularPercentualTotal = (
|
const calcularPercentualTotal = (
|
||||||
total: number,
|
total: number,
|
||||||
grupo: string // Não usado na nova hierarquia, mantido para compatibilidade
|
grupo: string // Usado para verificar se é faturamento líquido (CODGRUPO = "00")
|
||||||
): number => {
|
): number => {
|
||||||
// Calcular o total geral
|
// Verificar se é faturamento líquido
|
||||||
const totalGeral = data.reduce(
|
const isFaturamentoLiquido = grupo === "00" || grupo.includes("00") || grupo.includes("FATURAMENTO LÍQUIDO");
|
||||||
(sum, item) => sum + parseFloat(item.valor),
|
|
||||||
|
if (isFaturamentoLiquido) {
|
||||||
|
// Se for faturamento líquido, sempre retornar 100%
|
||||||
|
return 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calcular o total do faturamento líquido
|
||||||
|
const faturamentoLiquidoPorMes = calcularFaturamentoLiquidoPorMes();
|
||||||
|
const totalFaturamentoLiquido = Object.values(faturamentoLiquidoPorMes).reduce(
|
||||||
|
(sum, valor) => sum + valor,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
|
|
||||||
if (totalGeral !== 0) {
|
if (totalFaturamentoLiquido !== 0) {
|
||||||
return (total / totalGeral) * 100;
|
return (total / totalFaturamentoLiquido) * 100;
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -1552,6 +1601,10 @@ export default function Teste() {
|
||||||
);
|
);
|
||||||
const valoresEntidadePorMes = calcularValoresPorMes(items);
|
const valoresEntidadePorMes = calcularValoresPorMes(items);
|
||||||
|
|
||||||
|
// Verificar se a entidade contém faturamento líquido (CODGRUPO = "00")
|
||||||
|
const temFaturamentoLiquido = items.some(item => item.codgrupo === "00");
|
||||||
|
const codgrupoParaCalculo = temFaturamentoLiquido ? "00" : "";
|
||||||
|
|
||||||
// Linha da entidade (Level 0)
|
// Linha da entidade (Level 0)
|
||||||
rows.push({
|
rows.push({
|
||||||
type: "entidade",
|
type: "entidade",
|
||||||
|
|
@ -1560,8 +1613,8 @@ export default function Teste() {
|
||||||
total: totalEntidade,
|
total: totalEntidade,
|
||||||
isExpanded: expandedEntidades.has(entidade),
|
isExpanded: expandedEntidades.has(entidade),
|
||||||
valoresPorMes: valoresEntidadePorMes,
|
valoresPorMes: valoresEntidadePorMes,
|
||||||
percentuaisPorMes: calcularPercentuaisPorMes(valoresEntidadePorMes, ""),
|
percentuaisPorMes: calcularPercentuaisPorMes(valoresEntidadePorMes, codgrupoParaCalculo),
|
||||||
percentualTotal: calcularPercentualTotal(totalEntidade, ""),
|
percentualTotal: calcularPercentualTotal(totalEntidade, codgrupoParaCalculo),
|
||||||
});
|
});
|
||||||
|
|
||||||
if (expandedEntidades.has(entidade)) {
|
if (expandedEntidades.has(entidade)) {
|
||||||
|
|
@ -1592,6 +1645,10 @@ export default function Teste() {
|
||||||
);
|
);
|
||||||
const valoresDiretoIndiretoPorMes = calcularValoresPorMes(diretoIndiretoItems);
|
const valoresDiretoIndiretoPorMes = calcularValoresPorMes(diretoIndiretoItems);
|
||||||
|
|
||||||
|
// Verificar se direto/indireto contém faturamento líquido
|
||||||
|
const temFaturamentoLiquidoDI = diretoIndiretoItems.some(item => item.codgrupo === "00");
|
||||||
|
const codgrupoParaCalculoDI = temFaturamentoLiquidoDI ? "00" : "";
|
||||||
|
|
||||||
// Linha direto/indireto (Level 1)
|
// Linha direto/indireto (Level 1)
|
||||||
const chaveDiretoIndireto = `${entidade}-${diretoIndireto}`;
|
const chaveDiretoIndireto = `${entidade}-${diretoIndireto}`;
|
||||||
rows.push({
|
rows.push({
|
||||||
|
|
@ -1602,8 +1659,8 @@ export default function Teste() {
|
||||||
total: totalDiretoIndireto,
|
total: totalDiretoIndireto,
|
||||||
isExpanded: expandedDiretoIndireto.has(chaveDiretoIndireto),
|
isExpanded: expandedDiretoIndireto.has(chaveDiretoIndireto),
|
||||||
valoresPorMes: valoresDiretoIndiretoPorMes,
|
valoresPorMes: valoresDiretoIndiretoPorMes,
|
||||||
percentuaisPorMes: calcularPercentuaisPorMes(valoresDiretoIndiretoPorMes, ""),
|
percentuaisPorMes: calcularPercentuaisPorMes(valoresDiretoIndiretoPorMes, codgrupoParaCalculoDI),
|
||||||
percentualTotal: calcularPercentualTotal(totalDiretoIndireto, ""),
|
percentualTotal: calcularPercentualTotal(totalDiretoIndireto, codgrupoParaCalculoDI),
|
||||||
});
|
});
|
||||||
|
|
||||||
if (expandedDiretoIndireto.has(chaveDiretoIndireto)) {
|
if (expandedDiretoIndireto.has(chaveDiretoIndireto)) {
|
||||||
|
|
@ -1640,6 +1697,10 @@ export default function Teste() {
|
||||||
);
|
);
|
||||||
const valoresCentroPorMes = calcularValoresPorMes(centroItems);
|
const valoresCentroPorMes = calcularValoresPorMes(centroItems);
|
||||||
|
|
||||||
|
// Verificar se centro de custo contém faturamento líquido
|
||||||
|
const temFaturamentoLiquidoCC = centroItems.some(item => item.codgrupo === "00");
|
||||||
|
const codgrupoParaCalculoCC = temFaturamentoLiquidoCC ? "00" : "";
|
||||||
|
|
||||||
// Linha do centro de custo (Level 2)
|
// Linha do centro de custo (Level 2)
|
||||||
const chaveCentro = `${entidade}-${diretoIndireto}-${centro}`;
|
const chaveCentro = `${entidade}-${diretoIndireto}-${centro}`;
|
||||||
rows.push({
|
rows.push({
|
||||||
|
|
@ -1652,8 +1713,8 @@ export default function Teste() {
|
||||||
total: totalCentro,
|
total: totalCentro,
|
||||||
isExpanded: expandedCentros.has(chaveCentro),
|
isExpanded: expandedCentros.has(chaveCentro),
|
||||||
valoresPorMes: valoresCentroPorMes,
|
valoresPorMes: valoresCentroPorMes,
|
||||||
percentuaisPorMes: calcularPercentuaisPorMes(valoresCentroPorMes, ""),
|
percentuaisPorMes: calcularPercentuaisPorMes(valoresCentroPorMes, codgrupoParaCalculoCC),
|
||||||
percentualTotal: calcularPercentualTotal(totalCentro, ""),
|
percentualTotal: calcularPercentualTotal(totalCentro, codgrupoParaCalculoCC),
|
||||||
});
|
});
|
||||||
|
|
||||||
if (expandedCentros.has(chaveCentro)) {
|
if (expandedCentros.has(chaveCentro)) {
|
||||||
|
|
@ -1690,6 +1751,10 @@ export default function Teste() {
|
||||||
);
|
);
|
||||||
const valoresContaPorMes = calcularValoresPorMes(contaItems);
|
const valoresContaPorMes = calcularValoresPorMes(contaItems);
|
||||||
|
|
||||||
|
// Verificar se conta contém faturamento líquido
|
||||||
|
const temFaturamentoLiquidoConta = contaItems.some(item => item.codgrupo === "00");
|
||||||
|
const codgrupoParaCalculoConta = temFaturamentoLiquidoConta ? "00" : "";
|
||||||
|
|
||||||
// Linha da conta (Level 3)
|
// Linha da conta (Level 3)
|
||||||
rows.push({
|
rows.push({
|
||||||
type: "conta",
|
type: "conta",
|
||||||
|
|
@ -1702,8 +1767,8 @@ export default function Teste() {
|
||||||
codigo_centro_custo: centroItems[0].codigo_centro_custo,
|
codigo_centro_custo: centroItems[0].codigo_centro_custo,
|
||||||
total: totalConta,
|
total: totalConta,
|
||||||
valoresPorMes: valoresContaPorMes,
|
valoresPorMes: valoresContaPorMes,
|
||||||
percentuaisPorMes: calcularPercentuaisPorMes(valoresContaPorMes, ""),
|
percentuaisPorMes: calcularPercentuaisPorMes(valoresContaPorMes, codgrupoParaCalculoConta),
|
||||||
percentualTotal: calcularPercentualTotal(totalConta, ""),
|
percentualTotal: calcularPercentualTotal(totalConta, codgrupoParaCalculoConta),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue