From 811f40002bda70c847d3d44db288308ab15a4407 Mon Sep 17 00:00:00 2001
From: Giuliano Paschoalino
Date: Tue, 20 Jan 2026 09:58:16 -0300
Subject: [PATCH] Refactor data processing: enhance getLastConsolidatedYear
function to filter valid consolidated data and improve cost indicator
handling
---
.../graph/cativoXLivreChart/index.tsx | 65 ++++++++++++++-----
src/pages/costIndicator/index.tsx | 38 ++++++-----
src/pages/dashboard/index.tsx | 19 ++++--
src/pages/economy/index.tsx | 19 +++++-
src/pages/forgotPassword/index.tsx | 2 +-
src/pages/index.tsx | 4 +-
src/pages/news/index.tsx | 2 +-
src/pages/verifyEmail/index.tsx | 2 +-
src/services/ssrApi.ts | 6 +-
src/utils/dataProcessing.ts | 17 ++++-
10 files changed, 125 insertions(+), 49 deletions(-)
diff --git a/src/components/graph/cativoXLivreChart/index.tsx b/src/components/graph/cativoXLivreChart/index.tsx
index d2d8130..8724d37 100644
--- a/src/components/graph/cativoXLivreChart/index.tsx
+++ b/src/components/graph/cativoXLivreChart/index.tsx
@@ -14,6 +14,7 @@ import { CativoXLivreChartView } from './CativoXLivreChartView';
import ChartTitle from '../ChartTitle';
import pattern from 'patternomaly'
import { config } from '../config';
+import { getLastConsolidatedYear } from '../../../utils/dataProcessing';
ChartJS.register(
LinearScale,
@@ -75,15 +76,45 @@ interface LineBarChartInterface {
export function CativoXLivreChart({ title, subtitle, chartData, label, dataset1, dataset2, dataset3, barLabel, hashurado, miniature }: LineBarChartInterface) {
const chartRef = useRef(null);
- const labels = label
+ // Filter data by last consolidated year
+ const lastConsolidatedYear = getLastConsolidatedYear(chartData || [], true);
+
+ // Helper function to extract year from mes field
+ const extractYear = (mes: string): number => {
+ if (!mes) return lastConsolidatedYear;
+ const mesStr = mes.toString();
+ if (mesStr.includes('-')) {
+ return parseInt(mesStr.split('-')[0]);
+ }
+ if (mesStr.includes('/')) {
+ return parseInt(mesStr.split('/')[1]);
+ }
+ return lastConsolidatedYear;
+ };
+
+ // Filter data and labels together to keep them in sync
+ const filteredData: { chartData: any[], labels: any[] } = { chartData: [], labels: [] };
+
+ chartData?.forEach((value, index) => {
+ const year = extractYear(value.mes);
+ if (year === lastConsolidatedYear) {
+ filteredData.chartData.push(value);
+ if (label && label[index]) {
+ filteredData.labels.push(label[index]);
+ }
+ }
+ });
+
+ const filteredChartData = filteredData.chartData.length > 0 ? filteredData.chartData : chartData;
+ const labels = filteredData.labels.length > 0 ? filteredData.labels : label;
const options: any = config(miniature)
- const hasEstimated = chartData?.some((value) => value.dad_estimado)
+ const hasEstimated = filteredChartData?.some((value) => value.dad_estimado)
const data: any = {
labels,
- datasets: chartData?.map(value => value.dad_estimado)?.includes(true) ? [
+ datasets: filteredChartData?.map(value => value.dad_estimado)?.includes(true) ? [
{
type: 'line' as const,
label: dataset1? dataset1 : 'Dataset 1',
@@ -95,53 +126,53 @@ export function CativoXLivreChart({ title, subtitle, chartData, label, dataset1,
},
borderWidth: 2,
fill: false,
- data: chartData?.map(value => parseInt(value.economia_mensal)),
+ data: filteredChartData?.map(value => parseInt(value.economia_mensal)),
},
{
type: 'bar' as const,
label: 'Cativo',
- data: chartData?.map(value => {
+ data: filteredChartData?.map(value => {
if (!value.dad_estimado)
return parseInt(value.custo_cativo)
}),
// skipNull: true,
borderRadius: 8,
backgroundColor: '#C2D5FB',
- skipNull: chartData?.map(value => value.dad_estimado)?.includes(true)
+ skipNull: filteredChartData?.map(value => value.dad_estimado)?.includes(true)
},
{
type: 'bar' as const,
label: 'Livre',
- data: chartData?.filter(value => !value.dad_estimad? true : false).map(value => {
+ data: filteredChartData?.filter(value => !value.dad_estimad? true : false).map(value => {
if (!value.dad_estimado)
return parseInt(value.custo_livre)
}),
// skipNull: true,
borderRadius: 8,
backgroundColor: '#255488',
- skipNull: chartData?.map(value => value.dad_estimado)?.includes(true)
+ skipNull: filteredChartData?.map(value => value.dad_estimado)?.includes(true)
},
{
type: 'bar',
label: 'Est. Cativo',
- data: chartData?.map(value => {
+ data: filteredChartData?.map(value => {
if (value.dad_estimado)
return parseInt(value.custo_cativo)
}),
borderRadius: 8,
backgroundColor: pattern.draw('diagonal-right-left', '#C2D5FB'),
- skipNull: chartData?.map(value => value.dad_estimado)?.includes(true)
+ skipNull: filteredChartData?.map(value => value.dad_estimado)?.includes(true)
},
{
type: 'bar',
label: 'Est. Livre',
- data: chartData?.map(value => {
+ data: filteredChartData?.map(value => {
if (value.dad_estimado)
return parseInt(value.custo_livre)
}),
borderRadius: 8,
backgroundColor: pattern.draw('diagonal-right-left', '#255488'),
- skipNull: chartData?.map(value => value.dad_estimado)?.includes(true)
+ skipNull: filteredChartData?.map(value => value.dad_estimado)?.includes(true)
}
] : [
{
@@ -155,31 +186,31 @@ export function CativoXLivreChart({ title, subtitle, chartData, label, dataset1,
},
borderWidth: 2,
fill: false,
- data: chartData?.map(value => parseInt(value.economia_mensal)),
+ data: filteredChartData?.map(value => parseInt(value.economia_mensal)),
},
{
type: 'bar' as const,
label: 'Cativo',
- data: chartData?.map(value => {
+ data: filteredChartData?.map(value => {
if (!value.dad_estimado)
return parseInt(value.custo_cativo)
}),
// skipNull: true,
borderRadius: 8,
backgroundColor: '#C2D5FB',
- skipNull: chartData?.map(value => value.dad_estimado)?.includes(true)
+ skipNull: filteredChartData?.map(value => value.dad_estimado)?.includes(true)
},
{
type: 'bar' as const,
label: 'Livre',
- data: chartData?.filter(value => !value.dad_estimad? true : false).map(value => {
+ data: filteredChartData?.filter(value => !value.dad_estimad? true : false).map(value => {
if (!value.dad_estimado)
return parseInt(value.custo_livre)
}),
// skipNull: true,
borderRadius: 8,
backgroundColor: '#255488',
- skipNull: chartData?.map(value => value.dad_estimado)?.includes(true)
+ skipNull: filteredChartData?.map(value => value.dad_estimado)?.includes(true)
}
],
}
diff --git a/src/pages/costIndicator/index.tsx b/src/pages/costIndicator/index.tsx
index 2068bbf..a82c9b0 100644
--- a/src/pages/costIndicator/index.tsx
+++ b/src/pages/costIndicator/index.tsx
@@ -42,11 +42,12 @@ export default function CostIndicator({graphData, userName, clients}: any) {
useEffect(() => {
// Calculate the last consolidated year
const lastYear = getLastConsolidatedYear(graphData, true)
+ console.log('Last Consolidated Year:', lastYear)
+ console.log('Graph Data:', graphData)
setLastConsolidatedYear(lastYear)
- // Populate graph data with consolidated and estimated data for that year
- const populatedData = populateGraphDataForYear(graphData, lastYear)
- setProcessedGraphData(populatedData)
+ // Keep the full dataset to show both years
+ setProcessedGraphData(graphData)
}, [graphData])
useEffect(() => {
@@ -55,11 +56,11 @@ export default function CostIndicator({graphData, userName, clients}: any) {
{"type" : "=", "field":"dados_cadastrais.cod_smart_unidade", "value": unity}
]
}:{}).then(res => {
- // Apply data processing to filtered result
+ // Keep full dataset without filtering by year
if (res.data.data && res.data.data.length > 0) {
const lastYear = getLastConsolidatedYear(res.data.data, true)
- const populatedData = populateGraphDataForYear(res.data.data, lastYear)
- setGraphDataState(populatedData)
+ setLastConsolidatedYear(lastYear)
+ setGraphDataState(res.data.data)
} else {
setGraphDataState(res.data.data)
}
@@ -94,17 +95,24 @@ export default function CostIndicator({graphData, userName, clients}: any) {
- value.mes.slice(0, 4).includes(lastConsolidatedYear?.toString() || ''))
- .map(value => value?.custo_unit && !!parseInt(value?.custo_unit) ? value.custo_unit : null)
+ value.mes?.slice(0, 4) === (lastConsolidatedYear && lastConsolidatedYear - 1)?.toString() && value.custo_unit !== undefined)
+ .map(value => value?.custo_unit && !!parseFloat(value?.custo_unit) ? value.custo_unit : null)
:
- processedGraphData.filter((value, index) => value.mes.slice(0, 4).includes(lastConsolidatedYear?.toString() || ''))
- .map(value => value?.custo_unit && !!parseInt(value?.custo_unit) ? value.custo_unit : null)}
- data2={unity!==''? graphDataState.filter((value, index) => value.mes.slice(0, 4).includes(lastConsolidatedYear?.toString() || ''))
- .map(value => value?.custo_unit && !!parseInt(value?.custo_unit) ? value.custo_unit : null)
+ processedGraphData
+ .filter(value => value.mes?.slice(0, 4) === (lastConsolidatedYear && lastConsolidatedYear - 1)?.toString() && value.custo_unit !== undefined)
+ .map(value => value?.custo_unit && !!parseFloat(value?.custo_unit) ? value.custo_unit : null)}
+ data2={unity!==''?
+ graphDataState
+ .filter(value => value.mes?.slice(0, 4) === lastConsolidatedYear?.toString() && value.custo_unit !== undefined)
+ .map(value => value?.custo_unit && !!parseFloat(value?.custo_unit) ? value.custo_unit : null)
:
- processedGraphData.filter((value, index) => value.mes.slice(0, 4).includes(lastConsolidatedYear?.toString() || ''))
- .map(value => value?.custo_unit && !!parseInt(value?.custo_unit) ? value.custo_unit : null)}
+ processedGraphData
+ .filter(value => value.mes?.slice(0, 4) === lastConsolidatedYear?.toString() && value.custo_unit !== undefined)
+ .map(value => value?.custo_unit && !!parseFloat(value?.custo_unit) ? value.custo_unit : null)}
+ years={[lastConsolidatedYear ? (lastConsolidatedYear - 1).toString() : '', lastConsolidatedYear?.toString() || '']}
label={months}
/>
diff --git a/src/pages/dashboard/index.tsx b/src/pages/dashboard/index.tsx
index 9aed9f2..89d7dfd 100644
--- a/src/pages/dashboard/index.tsx
+++ b/src/pages/dashboard/index.tsx
@@ -69,6 +69,7 @@ export default function Dashboard({ grossAnualGraph, grossAnualYears, grossMensa
const [lastDataBrutaAnualS, setLastDataBrutaAnual] = useState('')
const [processedMensalData, setProcessedMensalData] = useState(grossMensalGraph)
const [lastConsolidatedYear, setLastConsolidatedYear] = useState(null)
+ const [lastConsolidatedYearIndicator, setLastConsolidatedYearIndicator] = useState(null)
const [open, setOpen] = useState(true);
const handleOpen = () => setOpen(true);
@@ -103,6 +104,13 @@ export default function Dashboard({ grossAnualGraph, grossAnualYears, grossMensa
setLastDataBrutaAnual(`${parseFloat(lastDataAnual).toFixed(3)}`)
}, [grossMensalGraph, grossAnualGraph])
+ useEffect(() => {
+ if (costIndicator && costIndicator.length > 0) {
+ const lastYear = getLastConsolidatedYear(costIndicator, true)
+ setLastConsolidatedYearIndicator(lastYear)
+ }
+ }, [costIndicator])
+
return (
@@ -153,10 +161,13 @@ export default function Dashboard({ grossAnualGraph, grossAnualYears, grossMensa
value?.mes.slice(0, 4).includes(costIndicator[0].mes.slice(0, 4))).map(value => value?.custo_unit && !!parseInt(value?.custo_unit) ? value.custo_unit : null)}
- data2={costIndicator?.filter((value, index) => value?.mes.slice(0, 4).includes(costIndicator[costIndicator.length - 1].mes.slice(0, 4))).map(value => value?.custo_unit && !!parseInt(value?.custo_unit) ? value.custo_unit : null)}
- // years={[costIndicator[0].mes.slice(0, 4), costIndicator[costIndicator.length - 1].mes.slice(0, 4)]}
- years={[previousYear+'', currentYear+'']}
+ data1={costIndicator
+ ?.filter(value => value?.mes?.slice(0, 4) === (lastConsolidatedYearIndicator ? (lastConsolidatedYearIndicator - 1).toString() : ''))
+ .map(value => value?.custo_unit && !!parseFloat(value?.custo_unit) ? value.custo_unit : null)}
+ data2={costIndicator
+ ?.filter(value => value?.mes?.slice(0, 4) === (lastConsolidatedYearIndicator ? lastConsolidatedYearIndicator.toString() : ''))
+ .map(value => value?.custo_unit && !!parseFloat(value?.custo_unit) ? value.custo_unit : null)}
+ years={[lastConsolidatedYearIndicator ? (lastConsolidatedYearIndicator - 1).toString() : '', lastConsolidatedYearIndicator?.toString() || '']}
label={months}
miniature
/>
diff --git a/src/pages/economy/index.tsx b/src/pages/economy/index.tsx
index 74db3f8..9a2dbe2 100644
--- a/src/pages/economy/index.tsx
+++ b/src/pages/economy/index.tsx
@@ -33,6 +33,7 @@ export default function economy({ userName, anual, years, brutaMensal, catLiv, c
const [catLivDataState, setCatLivDataState] = useState(null);
const [indicatorDataState, setIndicatorDataState] = useState(null);
+ const [lastConsolidatedYearIndicator, setLastConsolidatedYearIndicator] = useState(null);
const [processedBrutaMensal, setProcessedBrutaMensal] = useState(brutaMensal)
const [lastConsolidatedYear, setLastConsolidatedYear] = useState(null)
@@ -110,6 +111,14 @@ export default function economy({ userName, anual, years, brutaMensal, catLiv, c
getChartsWithUnity()
}, [unity])
+ useEffect(() => {
+ if (indicatorDataState && indicatorDataState.length > 0) {
+ // Determine last consolidated year for cost indicator data (requires dad_estimado === false and custo_unit > 0)
+ const lastYear = getLastConsolidatedYear(indicatorDataState, true)
+ setLastConsolidatedYearIndicator(lastYear)
+ }
+ }, [indicatorDataState])
+
return (
@@ -223,9 +232,13 @@ export default function economy({ userName, anual, years, brutaMensal, catLiv, c
value?.mes.slice(0, 4).includes(previousYear)).map(value => value?.custo_unit && !!parseInt(value?.custo_unit) ? value.custo_unit : null)}
- data2={indicatorDataState?.filter(value => value?.mes.slice(0, 4).includes(currentYear)).map(value => value?.custo_unit && !!parseInt(value?.custo_unit) ? value.custo_unit : null)}
- years={[previousYear+'', currentYear+'']}
+ data1={indicatorDataState?.
+ filter(value => value?.mes?.slice(0, 4) === (lastConsolidatedYearIndicator ? (lastConsolidatedYearIndicator - 1).toString() : ''))
+ .map(value => value?.custo_unit && !!parseFloat(value?.custo_unit) ? value.custo_unit : null)}
+ data2={indicatorDataState?.
+ filter(value => value?.mes?.slice(0, 4) === (lastConsolidatedYearIndicator ? lastConsolidatedYearIndicator.toString() : ''))
+ .map(value => value?.custo_unit && !!parseFloat(value?.custo_unit) ? value.custo_unit : null)}
+ years={[lastConsolidatedYearIndicator ? (lastConsolidatedYearIndicator - 1).toString() : '', lastConsolidatedYearIndicator?.toString() || '']}
label={months}
/>
diff --git a/src/pages/forgotPassword/index.tsx b/src/pages/forgotPassword/index.tsx
index 8d731dd..36ca4f4 100644
--- a/src/pages/forgotPassword/index.tsx
+++ b/src/pages/forgotPassword/index.tsx
@@ -87,7 +87,7 @@ export default function ForgotPassword() {
- +55(41) 3012-5900
www.energiasmart.com.br
+ +55(41) 3012-5900
www.smartenergia.com.br
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index b367b06..2f7f75e 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -197,11 +197,11 @@ export default function Home() {
+55(41) 3012-5900
- www.energiasmart.com.br
+ www.smartenergia.com.br
diff --git a/src/pages/news/index.tsx b/src/pages/news/index.tsx
index ea44552..858ee5f 100644
--- a/src/pages/news/index.tsx
+++ b/src/pages/news/index.tsx
@@ -45,7 +45,7 @@ export default function aboutUs({userName, news}: any) {
>
})
}
- Ver todas as notÃcias
diff --git a/src/pages/verifyEmail/index.tsx b/src/pages/verifyEmail/index.tsx
index 852ba0a..b1d5dc9 100644
--- a/src/pages/verifyEmail/index.tsx
+++ b/src/pages/verifyEmail/index.tsx
@@ -173,7 +173,7 @@ export default function VerifyEmail() {
- +55(41) 3012-5900
www.energiasmart.com.br
+ +55(41) 3012-5900
www.smartenergia.com.br
diff --git a/src/services/ssrApi.ts b/src/services/ssrApi.ts
index 50ef360..d6f1a5b 100644
--- a/src/services/ssrApi.ts
+++ b/src/services/ssrApi.ts
@@ -18,11 +18,11 @@ export default function getAPIClient(
const { '@smartAuth-token': token } = parseCookies(ctx)
const api = axios.create({
- // baseURL: 'https://api.energiasmart.com.br/api'
- // baseURL: 'https://api.energiasmart.klupp.com.br/api'
+ // baseURL: 'https://api.smartenergia.com.br/api'
+ // baseURL: 'https://api.smartenergia.klupp.com.br/api'
baseURL:
process.env.NODE_ENV === 'production'
- ? 'https://api.energiasmart.com.br/api'
+ ? 'https://api.smartenergia.com.br/api'
: 'http://127.0.0.1:8000/api'
})
diff --git a/src/utils/dataProcessing.ts b/src/utils/dataProcessing.ts
index b483e56..c06770f 100644
--- a/src/utils/dataProcessing.ts
+++ b/src/utils/dataProcessing.ts
@@ -49,8 +49,21 @@ export function getLastConsolidatedYear(data: EconomyData[], isMonthly: boolean
return new Date().getFullYear();
}
- // Filter only consolidated data (dad_estimado === false)
- const consolidatedData = data.filter(item => !item.dad_estimado);
+ // Filter only consolidated data (dad_estimado === false explicitly)
+ // Also ensure the entry has valid data (not just a date placeholder)
+ // For cost indicator data, also check that custo_unit is not zero
+ const consolidatedData = data.filter(item => {
+ if (item.dad_estimado !== false) return false;
+
+ // If custo_unit exists, it must be > 0 to be considered consolidated
+ if (item.custo_unit !== undefined) {
+ const costValue = parseFloat(item.custo_unit);
+ return !isNaN(costValue) && costValue > 0;
+ }
+
+ // For other data types, check if they have valid data fields
+ return item.economia_acumulada !== undefined || item.economia_mensal !== undefined;
+ });
// Extract all years present in the dataset (consolidated + estimated)
const allYears = data