diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fe5ab8af..9f15ad40a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Fixed the investment value by including currency effects in the portfolio summary tab on the home page - Added the missing `valueInBaseCurrency` to the response of the import activities endpoint ## 2.238.0 - 2026-02-12 diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts index 52c8489dd..9a93d0419 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts @@ -194,6 +194,7 @@ describe('PortfolioCalculator', () => { netPerformanceInPercentage: 0.07032490039195362, netPerformanceInPercentageWithCurrencyEffect: 0.07032490039195362, netPerformanceWithCurrencyEffect: 33.4, + totalInvestment: 559, totalInvestmentValueWithCurrencyEffect: 559 }) ); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts index 3998b081d..c876d0db1 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts @@ -208,6 +208,7 @@ describe('PortfolioCalculator', () => { netPerformanceInPercentage: -0.05528341497550734703, netPerformanceInPercentageWithCurrencyEffect: -0.05528341497550734703, netPerformanceWithCurrencyEffect: -15.8, + totalInvestment: 0, totalInvestmentValueWithCurrencyEffect: 0 }) ); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts index acd0d0b2e..ae921d6d9 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts @@ -192,6 +192,7 @@ describe('PortfolioCalculator', () => { netPerformanceInPercentage: -0.05528341497550734703, netPerformanceInPercentageWithCurrencyEffect: -0.05528341497550734703, netPerformanceWithCurrencyEffect: -15.8, + totalInvestment: 0, totalInvestmentValueWithCurrencyEffect: 0 }) ); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts index 652e72db0..6207f1417 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts @@ -192,6 +192,7 @@ describe('PortfolioCalculator', () => { netPerformanceInPercentage: 0.08437042459736457, netPerformanceInPercentageWithCurrencyEffect: 0.08437042459736457, netPerformanceWithCurrencyEffect: 23.05, + totalInvestment: 273.2, totalInvestmentValueWithCurrencyEffect: 273.2 }) ); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts index a70cc2986..11765fc49 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts @@ -210,6 +210,7 @@ describe('PortfolioCalculator', () => { netPerformanceInPercentage: 42.41983590271396609433, netPerformanceInPercentageWithCurrencyEffect: 41.64017412624815597854, netPerformanceWithCurrencyEffect: 26516.208701400000064086, + totalInvestment: 318.542667299999967957, totalInvestmentValueWithCurrencyEffect: 318.542667299999967957 }) ); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts index 59a5531df..a3fbc0758 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts @@ -128,6 +128,7 @@ describe('PortfolioCalculator', () => { netPerformanceInPercentage: 0, netPerformanceInPercentageWithCurrencyEffect: 0, netPerformanceWithCurrencyEffect: 0, + totalInvestment: 0, totalInvestmentValueWithCurrencyEffect: 0 }) ); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts index 9b48a1324..122a9aaed 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts @@ -188,6 +188,7 @@ describe('PortfolioCalculator', () => { netPerformanceInPercentage: 0.29544434470377019749, netPerformanceInPercentageWithCurrencyEffect: 0.24112962014285697628, netPerformanceWithCurrencyEffect: 19.851974, + totalInvestment: new Big('89.12').mul(0.8854).toNumber(), totalInvestmentValueWithCurrencyEffect: 82.329056 }) ); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts index b19adb642..e7eff6682 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts @@ -174,6 +174,7 @@ describe('PortfolioCalculator', () => { expect(portfolioSnapshot.historicalData.at(-1)).toMatchObject( expect.objectContaining({ + totalInvestment: 298.58, totalInvestmentValueWithCurrencyEffect: 298.58 }) ); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts index fecf17011..3034e3a1f 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts @@ -190,6 +190,7 @@ describe('PortfolioCalculator', () => { netPerformanceInPercentage: 0.12184460284330327256, netPerformanceInPercentageWithCurrencyEffect: 0.12184460284330327256, netPerformanceWithCurrencyEffect: 17.68, + totalInvestment: 75.8, totalInvestmentValueWithCurrencyEffect: 75.8 }) ); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts index adbb5c3ff..c79fdef58 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts @@ -241,6 +241,7 @@ describe('PortfolioCalculator', () => { netPerformanceInPercentage: 0.13100263852242744063, netPerformanceInPercentageWithCurrencyEffect: 0.13100263852242744063, netPerformanceWithCurrencyEffect: 19.86, + totalInvestment: 0, totalInvestmentValueWithCurrencyEffect: 0 }) ); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts index 6fc94622f..e518a5994 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts @@ -162,6 +162,7 @@ describe('PortfolioCalculator', () => { netPerformanceInPercentage: 0, netPerformanceInPercentageWithCurrencyEffect: 0, netPerformanceWithCurrencyEffect: 0, + totalInvestment: 500000, totalInvestmentValueWithCurrencyEffect: 500000 }) ); diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index b8aefe0ac..5ed3c0009 100644 --- a/apps/api/src/app/portfolio/portfolio.controller.ts +++ b/apps/api/src/app/portfolio/portfolio.controller.ts @@ -206,6 +206,7 @@ export class PortfolioController { 'netPerformanceWithCurrencyEffect', 'totalBuy', 'totalInvestment', + 'totalInvestmentValueWithCurrencyEffect', 'totalSell', 'totalValueInBaseCurrency' ]); diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 7be375473..a7cee0bc0 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -1007,7 +1007,8 @@ export class PortfolioService { netPerformancePercentage: 0, netPerformancePercentageWithCurrencyEffect: 0, netPerformanceWithCurrencyEffect: 0, - totalInvestment: 0 + totalInvestment: 0, + totalInvestmentValueWithCurrencyEffect: 0 } }; } @@ -1038,6 +1039,7 @@ export class PortfolioService { netPerformanceWithCurrencyEffect, netWorth, totalInvestment, + totalInvestmentValueWithCurrencyEffect, valueWithCurrencyEffect } = chart?.at(-1) ?? { netPerformance: 0, @@ -1058,6 +1060,7 @@ export class PortfolioService { netPerformance, netPerformanceWithCurrencyEffect, totalInvestment, + totalInvestmentValueWithCurrencyEffect, currentNetWorth: netWorth, currentValueInBaseCurrency: valueWithCurrencyEffect, netPerformancePercentage: netPerformanceInPercentage, @@ -1860,8 +1863,11 @@ export class PortfolioService { } } - const { currentValueInBaseCurrency, totalInvestment } = - await portfolioCalculator.getSnapshot(); + const { + currentValueInBaseCurrency, + totalInvestment, + totalInvestmentWithCurrencyEffect + } = await portfolioCalculator.getSnapshot(); const { performance } = await this.getPerformance({ impersonationId, @@ -2004,6 +2010,8 @@ export class PortfolioService { interestInBaseCurrency: interest.toNumber(), liabilitiesInBaseCurrency: liabilities.toNumber(), totalInvestment: totalInvestment.toNumber(), + totalInvestmentValueWithCurrencyEffect: + totalInvestmentWithCurrencyEffect.toNumber(), totalValueInBaseCurrency: netWorth }; } diff --git a/apps/api/src/helper/object.helper.spec.ts b/apps/api/src/helper/object.helper.spec.ts index ed821390f..eed261f3e 100644 --- a/apps/api/src/helper/object.helper.spec.ts +++ b/apps/api/src/helper/object.helper.spec.ts @@ -1554,6 +1554,7 @@ describe('redactAttributes', () => { items: null, liabilities: null, totalInvestment: null, + totalInvestmentValueWithCurrencyEffect: null, totalValueInBaseCurrency: null, currentNetWorth: null } @@ -3030,6 +3031,7 @@ describe('redactAttributes', () => { items: null, liabilities: null, totalInvestment: null, + totalInvestmentValueWithCurrencyEffect: null, totalValueInBaseCurrency: null, currentNetWorth: null } diff --git a/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html b/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html index 46eb2845c..99e0c9a53 100644 --- a/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html +++ b/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -65,7 +65,11 @@ [locale]="locale" [precision]="precision" [unit]="baseCurrency" - [value]="isLoading ? undefined : summary?.committedFunds" + [value]=" + isLoading + ? undefined + : summary?.totalInvestmentValueWithCurrencyEffect + " /> diff --git a/libs/common/src/lib/interfaces/portfolio-performance.interface.ts b/libs/common/src/lib/interfaces/portfolio-performance.interface.ts index c0c3802d8..0698004d5 100644 --- a/libs/common/src/lib/interfaces/portfolio-performance.interface.ts +++ b/libs/common/src/lib/interfaces/portfolio-performance.interface.ts @@ -7,4 +7,5 @@ export interface PortfolioPerformance { netPerformancePercentageWithCurrencyEffect: number; netPerformanceWithCurrencyEffect: number; totalInvestment: number; + totalInvestmentValueWithCurrencyEffect: number; } diff --git a/libs/common/src/lib/interfaces/portfolio-summary.interface.ts b/libs/common/src/lib/interfaces/portfolio-summary.interface.ts index ccf94dcf7..79fbf8707 100644 --- a/libs/common/src/lib/interfaces/portfolio-summary.interface.ts +++ b/libs/common/src/lib/interfaces/portfolio-summary.interface.ts @@ -6,7 +6,10 @@ export interface PortfolioSummary extends PortfolioPerformance { annualizedPerformancePercent: number; annualizedPerformancePercentWithCurrencyEffect: number; cash: number; + + /** @deprecated use totalInvestmentValueWithCurrencyEffect instead */ committedFunds: number; + dateOfFirstActivity: Date; dividendInBaseCurrency: number; emergencyFund: {