From b586aeebc2d969faf5a927532313295dd5c9aeed Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Tue, 11 Jun 2024 10:32:01 +0200 Subject: [PATCH] bugfixing: fundamental data --- src/lib/utils.js | 42 +++++++++++++++---- .../stats/balance-sheet/+page.svelte | 6 ++- .../[tickerID]/stats/ratios/+page.svelte | 5 ++- 3 files changed, 41 insertions(+), 12 deletions(-) diff --git a/src/lib/utils.js b/src/lib/utils.js index b16a8176..57f3edf4 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -49,22 +49,38 @@ export const validateData = async (formData, schema) => { } -export function sumQuarterlyResultsByYear(quarterlyResults) { +export function sumQuarterlyResultsByYear(quarterlyResults, namingList) { const yearlySummaries = {}; const quarterCounts = {}; - - // Define a Set of keys to exclude + //FMP sucks since these keys are up to date only by the last quarter value + const lastQuarterKeys = new Set([namingList]); // Keys that need last quarter values + + // Define a Set of keys to exclude from summing + //FMP sucks since these keys are up to date for every quarter hence no summation required const excludeKeys = new Set(['weightedAverageShsOut', 'weightedAverageShsOutDil']); - + + // Function to get the quarter number from the period string + function getQuarterNumber(period) { + switch (period) { + case 'Q1': return 1; + case 'Q2': return 2; + case 'Q3': return 3; + case 'Q4': return 4; + default: return 0; + } + } + // Iterate over each quarterly result quarterlyResults?.forEach(quarter => { - // Extract year from the date - const year = new Date(quarter?.calendarYear)?.getFullYear(); - + // Extract year and quarter from the data + const year = quarter?.calendarYear; + const quarterNum = getQuarterNumber(quarter?.period); + // Initialize the year in summaries and quarter counts if not already present if (!yearlySummaries[year]) { yearlySummaries[year] = { calendarYear: `${year}`, // Use end of the year date + lastQuarterProcessed: 0 // Keep track of the last quarter processed }; quarterCounts[year] = 0; } @@ -72,13 +88,21 @@ export function sumQuarterlyResultsByYear(quarterlyResults) { // Increment the quarter count for the year quarterCounts[year]++; + // Update last quarter processed if current quarter is greater + if (quarterNum > yearlySummaries[year].lastQuarterProcessed) { + yearlySummaries[year].lastQuarterProcessed = quarterNum; + } + // Sum up the numeric fields for the year, excluding specific keys Object?.keys(quarter)?.forEach(key => { - if (typeof quarter[key] === 'number' && !excludeKeys.has(key)) { + if (typeof quarter[key] === 'number' && !excludeKeys?.has(key) && !lastQuarterKeys.has(key)) { yearlySummaries[year][key] = (yearlySummaries[year][key] || 0) + quarter[key]; } else if (excludeKeys.has(key)) { // Directly copy the last quarter value for these keys yearlySummaries[year][key] = quarter[key]; + } else if (lastQuarterKeys.has(key) && quarterNum === 4) { + // Update only if it's the last quarter of the year + yearlySummaries[year][key] = quarter[key]; } }); }); @@ -95,6 +119,8 @@ export function sumQuarterlyResultsByYear(quarterlyResults) { + + export const sortPostsByDate = (posts) => { return posts.sort(function(a, b) { return new Date(b.created) - new Date(a.created); diff --git a/src/routes/stocks/[tickerID]/stats/balance-sheet/+page.svelte b/src/routes/stocks/[tickerID]/stats/balance-sheet/+page.svelte index 667522c7..34564c02 100644 --- a/src/routes/stocks/[tickerID]/stats/balance-sheet/+page.svelte +++ b/src/routes/stocks/[tickerID]/stats/balance-sheet/+page.svelte @@ -185,7 +185,8 @@ } ]; - +let namingList = statementConfig?.map(config => config?.propertyName) || []; + function toggleMode() { @@ -375,7 +376,8 @@ $: { if (timeFrame || displayStatement || filterRule) { if (filterRule === 'annual') { - fullStatement = sumQuarterlyResultsByYear(data?.getBalanceSheetStatement) + + fullStatement = sumQuarterlyResultsByYear(data?.getBalanceSheetStatement, namingList) } else { fullStatement = data?.getBalanceSheetStatement; diff --git a/src/routes/stocks/[tickerID]/stats/ratios/+page.svelte b/src/routes/stocks/[tickerID]/stats/ratios/+page.svelte index cb0b2325..56ac1177 100644 --- a/src/routes/stocks/[tickerID]/stats/ratios/+page.svelte +++ b/src/routes/stocks/[tickerID]/stats/ratios/+page.svelte @@ -117,7 +117,8 @@ const statementConfig = [ ]; - +let namingList = statementConfig?.map(config => config?.propertyName) || []; + function toggleMode() { mode = !mode; @@ -312,7 +313,7 @@ $: { if (timeFrame || displayStatement || filterRule) { if (filterRule === 'annual') { - fullStatement = sumQuarterlyResultsByYear(data?.getRatiosStatement) + fullStatement = sumQuarterlyResultsByYear(data?.getRatiosStatement, namingList) } else { fullStatement = data?.getRatiosStatement;