From 6e201cfbaab08de20991b603a2a1e1391fe8e2c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alessandro=20Gon=C3=A7aalves?= Date: Wed, 5 Nov 2025 17:49:38 -0300 Subject: [PATCH] feat: adicionada a coluna de percentual total no final da coluna --- src/app/DRE/teste.tsx | 62 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/src/app/DRE/teste.tsx b/src/app/DRE/teste.tsx index 932735b..21a9e0b 100644 --- a/src/app/DRE/teste.tsx +++ b/src/app/DRE/teste.tsx @@ -53,6 +53,7 @@ interface HierarchicalRow { isExpanded?: boolean; valoresPorMes?: Record; percentuaisPorMes?: Record; + percentualTotal?: number; isCalculado?: boolean; } @@ -163,6 +164,21 @@ const TableRow = memo(({ ); })()} + + {/* Coluna Percentual Total */} + handleRowClick(row)} + title={ + row.percentualTotal !== undefined + ? `${row.percentualTotal.toFixed(1)}%` + : "-" + } + > + {row.percentualTotal !== undefined + ? `${row.percentualTotal.toFixed(1)}%` + : "-"} + ); }); @@ -920,15 +936,17 @@ export default function Teste() { // Calcular total do grupo const totalCalculado = Object.values(valoresGrupoPorMes).reduce((sum, valor) => sum + valor, 0); + const totalFinal = isCalculado ? totalCalculado : totalGrupo; // Linha do grupo (Level 0) rows.push({ type: "grupo", level: 0, grupo, - total: isCalculado ? totalCalculado : totalGrupo, + total: totalFinal, valoresPorMes: valoresGrupoPorMes, percentuaisPorMes: calcularPercentuaisPorMes(valoresGrupoPorMes, grupo), + percentualTotal: calcularPercentualTotal(totalFinal, grupo), isCalculado: isCalculado, }); @@ -969,6 +987,7 @@ export default function Teste() { total: totalConta, valoresPorMes: valoresContaPorMes, percentuaisPorMes: calcularPercentuaisPorMes(valoresContaPorMes, grupo), + percentualTotal: calcularPercentualTotal(totalConta, grupo), }); // Agrupar por centro de custo dentro da conta @@ -1006,6 +1025,7 @@ export default function Teste() { total: totalCentro, valoresPorMes: valoresCentroPorMes, percentuaisPorMes: calcularPercentuaisPorMes(valoresCentroPorMes, grupo), + percentualTotal: calcularPercentualTotal(totalCentro, grupo), }); }); }); @@ -1046,6 +1066,7 @@ export default function Teste() { total: totalCentro, valoresPorMes: valoresCentroPorMes, percentuaisPorMes: calcularPercentuaisPorMes(valoresCentroPorMes, grupo), + percentualTotal: calcularPercentualTotal(totalCentro, grupo), }); // Agrupar por conta dentro do centro de custo @@ -1083,6 +1104,7 @@ export default function Teste() { total: totalConta, valoresPorMes: valoresContaPorMes, percentuaisPorMes: calcularPercentuaisPorMes(valoresContaPorMes, grupo), + percentualTotal: calcularPercentualTotal(totalConta, grupo), }); }); }); @@ -1642,6 +1664,33 @@ export default function Teste() { return percentuais; }; + // Função para calcular percentual do total baseado no grupo 03 como referência + const calcularPercentualTotal = ( + total: number, + grupo: string + ): number => { + // Se for o grupo 03, retorna 100% + if (grupo.includes("03")) { + return 100; + } + + // Calcular o total do grupo 03 + const grupo03Items = data.filter((item) => + item.grupo.includes("03") + ); + + const totalGrupo03 = grupo03Items.reduce( + (sum, item) => sum + parseFloat(item.valor), + 0 + ); + + if (totalGrupo03 !== 0) { + return (total / totalGrupo03) * 100; + } else { + return 0; + } + }; + const buildHierarchicalData = (): HierarchicalRow[] => { const rows: HierarchicalRow[] = []; @@ -1821,16 +1870,18 @@ export default function Teste() { // Calcular total do grupo const totalCalculado = Object.values(valoresPorMes).reduce((sum, valor) => sum + valor, 0); + const totalFinal = isCalculado ? totalCalculado : totalGrupo; // Linha do grupo rows.push({ type: "grupo", level: 0, grupo, - total: isCalculado ? totalCalculado : totalGrupo, + total: totalFinal, isExpanded: expandedGroups.has(grupo), valoresPorMes, percentuaisPorMes: calcularPercentuaisPorMes(valoresPorMes, grupo), + percentualTotal: calcularPercentualTotal(totalFinal, grupo), isCalculado: isCalculado, }); @@ -1884,6 +1935,7 @@ export default function Teste() { valoresContaPorMes, grupo ), + percentualTotal: calcularPercentualTotal(totalConta, grupo), }); if (expandedCentros.has(`${grupo}-${conta}`)) { @@ -1933,6 +1985,7 @@ export default function Teste() { valoresCentroPorMes, grupo ), + percentualTotal: calcularPercentualTotal(totalCentro, grupo), }); }); } @@ -1986,6 +2039,7 @@ export default function Teste() { valoresCentroPorMes, grupo ), + percentualTotal: calcularPercentualTotal(totalCentro, grupo), }); if (expandedCentros.has(`${grupo}-${centro}`)) { @@ -2035,6 +2089,7 @@ export default function Teste() { valoresContaPorMes, grupo ), + percentualTotal: calcularPercentualTotal(totalConta, grupo), }); }); } @@ -2633,6 +2688,9 @@ export default function Teste() { Total + + % +