diff --git a/apps/frontend/src/features/analysis/AnalysisPage.tsx b/apps/frontend/src/features/analysis/AnalysisPage.tsx
index 1d36873..a32d92a 100644
--- a/apps/frontend/src/features/analysis/AnalysisPage.tsx
+++ b/apps/frontend/src/features/analysis/AnalysisPage.tsx
@@ -1,5 +1,5 @@
import { Link, useNavigate } from "@tanstack/react-router";
-import { subDays } from "date-fns";
+import { subDays, subMonths } from "date-fns";
import { ArrowLeft } from "lucide-react";
import { useMemo, useState } from "react";
import {
@@ -13,7 +13,12 @@ import {
YAxis,
} from "recharts";
import { DatePicker } from "@/components/ui/date-picker";
-import { useDailyQuotes, useHistoricalMinMax, useQuotes } from "@/lib/queries";
+import {
+ useDailyQuotes,
+ useHistoricalMinMax,
+ useMonthlyLast,
+ useQuotes,
+} from "@/lib/queries";
import { MonthlyVariationTable } from "./components/MonthlyVariationTable";
const CURRENCIES = ["BELO", "BLUE", "BNA"] as const;
@@ -86,19 +91,13 @@ export function AnalysisPage({ currency }: { currency: string }) {
const yesterday = subDays(today, 1);
const yesterdayStr = formatDate(yesterday);
- const firstOfMonth = new Date(today.getFullYear(), today.getMonth(), 1);
- const firstOfMonthStr = formatDate(firstOfMonth);
const { data: yesterdayQuote } = useDailyQuotes(
currency,
yesterdayStr,
yesterdayStr,
);
- const { data: firstDayQuote } = useDailyQuotes(
- currency,
- firstOfMonthStr,
- firstOfMonthStr,
- );
+ const { data: monthlyLastData } = useMonthlyLast();
const chartData = useMemo(() => {
if (!daily) return [];
@@ -184,11 +183,21 @@ export function AnalysisPage({ currency }: { currency: string }) {
? (prevDayDiff / yesterdayBuy) * 100
: null;
- const firstMonthBuy = firstDayQuote?.[0]?.buy ?? null;
- const monthDiff = firstMonthBuy !== null ? currentBuy - firstMonthBuy : null;
+ const previousMonthBuy = useMemo(() => {
+ if (!monthlyLastData || monthlyLastData.length === 0) return null;
+ const prevMonth = subMonths(today, 1);
+ const prevMonthKey = `${prevMonth.getFullYear()}-${String(prevMonth.getMonth() + 1).padStart(2, "0")}`;
+ const entry = monthlyLastData.find(
+ (e) => e.month === prevMonthKey && e.type === currency,
+ );
+ return entry?.buy ?? null;
+ }, [monthlyLastData, currency, today]);
+
+ const monthDiff =
+ previousMonthBuy !== null ? currentBuy - previousMonthBuy : null;
const monthPct =
- monthDiff !== null && firstMonthBuy !== null && firstMonthBuy !== 0
- ? (monthDiff / firstMonthBuy) * 100
+ monthDiff !== null && previousMonthBuy !== null && previousMonthBuy !== 0
+ ? (monthDiff / previousMonthBuy) * 100
: null;
const backTo = currency === "BELO" ? "/quotes/belo" : "/quotes";
@@ -305,9 +314,7 @@ export function AnalysisPage({ currency }: { currency: string }) {
- Vs. primer día del mes -
+Vs. mes anterior