diff --git a/CHANGELOG.md b/CHANGELOG.md index b81b3e0bc1..a03fdc09a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,11 +10,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Improved the get quotes functionality of the _Manual_ service +- Upgraded `chartjs-chart-treemap` from version `4.2.0` to `4.2.2` ### Fixed - Fixed an issue where holdings without a quote have been valued at the unit price of the latest activity instead of the latest market price +## 3.74.0 - 2026-09-27 + +### Added + +- Added the dividend performance to the analysis page (experimental) + +### Changed + +- Simplified the portfolio summary by hiding the currency on mobile +- Improved the performance of the logo endpoints by enabling the browser cache +- Improved the language localization for Catalan (`ca`) +- Improved the language localization for German (`de`) + +### Fixed + +- Fixed the wrapping of the name column in the accounts table component on mobile +- Fixed the sorting of the watchlist for asset profiles without a name + ## 3.73.0 - 2026-09-26 ### Changed diff --git a/README.md b/README.md index c98c163c40..b9352e3bd3 100644 --- a/README.md +++ b/README.md @@ -173,7 +173,7 @@ docker compose -f docker/docker-compose.build.yml up -d ### Home Server Systems (Community) -Ghostfolio is available for various home server systems, including [CasaOS](https://github.com/bigbeartechworld/big-bear-casaos), [Home Assistant](https://github.com/lildude/ha-addon-ghostfolio), [Runtipi](https://www.runtipi.io/docs/apps-available), [TrueCharts](https://truecharts.org/charts/stable/ghostfolio), [Umbrel](https://apps.umbrel.com/app/ghostfolio), and [Unraid](https://unraid.net/community/apps?q=ghostfolio). +Ghostfolio is available for various home server systems, including [CasaOS](https://github.com/bigbeartechworld/big-bear-casaos), [Easypanel](https://easypanel.io/templates/ghostfolio), [Home Assistant](https://github.com/lildude/ha-addon-ghostfolio), [Runtipi](https://www.runtipi.io/docs/apps-available), [TrueCharts](https://truecharts.org/charts/stable/ghostfolio), [Umbrel](https://apps.umbrel.com/app/ghostfolio), and [Unraid](https://unraid.net/community/apps?q=ghostfolio). ## Development diff --git a/apps/api/src/app/endpoints/watchlist/watchlist.service.ts b/apps/api/src/app/endpoints/watchlist/watchlist.service.ts index ccdd04e27c..c69a31df82 100644 --- a/apps/api/src/app/endpoints/watchlist/watchlist.service.ts +++ b/apps/api/src/app/endpoints/watchlist/watchlist.service.ts @@ -151,7 +151,7 @@ export class WatchlistService { ); return watchlist.sort((a, b) => { - return a.name.localeCompare(b.name); + return (a.name ?? '').localeCompare(b.name ?? ''); }); } diff --git a/apps/api/src/app/logo/logo.controller.ts b/apps/api/src/app/logo/logo.controller.ts index 47bd1fc750..30c85e585e 100644 --- a/apps/api/src/app/logo/logo.controller.ts +++ b/apps/api/src/app/logo/logo.controller.ts @@ -11,12 +11,15 @@ import { } from '@nestjs/common'; import { DataSource } from '@prisma/client'; import { Response } from 'express'; +import ms from 'ms'; import { GetLogoDto } from './get-logo.dto'; import { LogoService } from './logo.service'; @Controller('logo') export class LogoController { + private static readonly CACHE_MAX_AGE_IN_SECONDS = ms('7 days') / 1000; + public constructor(private readonly logoService: LogoService) {} @Get(':dataSource/:symbol') @@ -34,6 +37,12 @@ export class LogoController { }); response.contentType(type); + + response.setHeader( + 'Cache-Control', + `public, max-age=${LogoController.CACHE_MAX_AGE_IN_SECONDS}` + ); + response.send(buffer); } catch { response.status(HttpStatus.NOT_FOUND).send(); @@ -49,6 +58,12 @@ export class LogoController { const { buffer, type } = await this.logoService.getLogoByUrl(url); response.contentType(type); + + response.setHeader( + 'Cache-Control', + `public, max-age=${LogoController.CACHE_MAX_AGE_IN_SECONDS}` + ); + response.send(buffer); } catch { response.status(HttpStatus.NOT_FOUND).send(); diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index d9efa9f86c..d868b65b3f 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -223,15 +223,19 @@ export abstract class PortfolioCalculator { ): PortfolioSnapshot; protected abstract calculatePerformancePercentages({ - accumulatedValuesByDate + accumulatedValuesByDate, + holdings }: { accumulatedValuesByDate: { [date: string]: AccumulatedValues }; + holdings: PortfolioSnapshotHolding[]; }): { [date: string]: PerformancePercentages }; protected abstract calculatePerformancePercentagesForDateRange({ - historicalDataItems + historicalDataItems, + holdings }: { historicalDataItems: HistoricalDataItem[]; + holdings: PortfolioSnapshotHolding[]; }): { [date: string]: PerformancePercentages }; @LogPerformance @@ -544,6 +548,13 @@ export abstract class PortfolioCalculator { } } + const totalDividendValueWithCurrencyEffectByDate = + this.getTotalDividendValueWithCurrencyEffectByDate({ + chartDates, + exchangeRatesByCurrency, + holdings: positions + }); + const assetProfileIdentifiers = Object.keys(valuesByAssetProfileIdentifier); for (const dateString of chartDates) { @@ -620,6 +631,8 @@ export abstract class PortfolioCalculator { accumulatedValuesByDate[dateString] ?.totalCurrentValueWithCurrencyEffect ?? new Big(0) ).add(currentValueWithCurrencyEffect), + totalDividendValueWithCurrencyEffect: + totalDividendValueWithCurrencyEffectByDate[dateString], totalInvestmentValue: ( accumulatedValuesByDate[dateString]?.totalInvestmentValue ?? new Big(0) @@ -644,8 +657,18 @@ export abstract class PortfolioCalculator { } } + const positionsIncludedInHoldings = positions + .filter(({ includeInHoldings }) => { + return includeInHoldings; + }) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + .map(({ includeInHoldings, includeInPerformance, ...rest }) => { + return rest; + }); + const performancePercentagesByDate = this.calculatePerformancePercentages({ - accumulatedValuesByDate + accumulatedValuesByDate, + holdings: positionsIncludedInHoldings }); const historicalData: HistoricalDataItem[] = Object.entries( @@ -656,6 +679,7 @@ export abstract class PortfolioCalculator { totalCashValueWithCurrencyEffect, totalCurrentValue, totalCurrentValueWithCurrencyEffect, + totalDividendValueWithCurrencyEffect, totalInvestmentValue, totalInvestmentValueWithCurrencyEffect, totalNetPerformanceValue, @@ -666,6 +690,7 @@ export abstract class PortfolioCalculator { return { ...performancePercentagesByDate[date], date, + dividendInBaseCurrency: totalDividendValueWithCurrencyEffect.toNumber(), investmentValueWithCurrencyEffect: investmentValueWithCurrencyEffect.toNumber(), netPerformance: totalNetPerformanceValue.toNumber(), @@ -683,15 +708,6 @@ export abstract class PortfolioCalculator { const overall = this.calculateOverallPerformance(positions); - const positionsIncludedInHoldings = positions - .filter(({ includeInHoldings }) => { - return includeInHoldings; - }) - // eslint-disable-next-line @typescript-eslint/no-unused-vars - .map(({ includeInHoldings, includeInPerformance, ...rest }) => { - return rest; - }); - return { ...overall, errors, @@ -1343,6 +1359,7 @@ export abstract class PortfolioCalculator { const historicalDataItemsOfDateRange: HistoricalDataItem[] = []; + let dividendInBaseCurrencyAtStartDate: number; let netPerformanceAtStartDate: number; let netPerformanceWithCurrencyEffectAtStartDate: number; @@ -1353,6 +1370,11 @@ export abstract class PortfolioCalculator { // Take the values at the start date from the first day of the date // range if (historicalDataItemsOfDateRange.length === 0) { + // TODO: Remove the fallback to 0 with the next release, when each + // cached portfolio snapshot contains the dividend + dividendInBaseCurrencyAtStartDate = + historicalDataItem.dividendInBaseCurrency ?? 0; + netPerformanceAtStartDate = historicalDataItem.netPerformance; netPerformanceWithCurrencyEffectAtStartDate = @@ -1361,6 +1383,11 @@ export abstract class PortfolioCalculator { historicalDataItemsOfDateRange.push({ ...historicalDataItem, + // TODO: Remove the fallback to 0 with the next release, when each + // cached portfolio snapshot contains the dividend + dividendInBaseCurrency: + (historicalDataItem.dividendInBaseCurrency ?? 0) - + dividendInBaseCurrencyAtStartDate, netPerformance: historicalDataItem.netPerformance - netPerformanceAtStartDate, netPerformanceWithCurrencyEffect: @@ -1372,7 +1399,8 @@ export abstract class PortfolioCalculator { const performancePercentagesByDate = this.calculatePerformancePercentagesForDateRange({ - historicalDataItems: historicalDataItemsOfDateRange + historicalDataItems: historicalDataItemsOfDateRange, + holdings: this.snapshot.positions }); const chart = historicalDataItemsOfDateRange.map((historicalDataItem) => { @@ -1734,6 +1762,77 @@ export abstract class PortfolioCalculator { return chartDateMap; } + private getTotalDividendValueWithCurrencyEffectByDate({ + chartDates, + exchangeRatesByCurrency, + holdings + }: { + chartDates: string[]; + exchangeRatesByCurrency: { + [currencyPair: string]: { [dateString: string]: number }; + }; + holdings: PortfolioCalculatorHolding[]; + }): { [date: string]: Big } { + // Take the dividend from the same holdings as the portfolio summary, so + // that the response shows one dividend only + const assetProfileIdentifiersIncludedInHoldings = new Set( + holdings + .filter(({ includeInHoldings }) => { + return includeInHoldings; + }) + .map(({ dataSource, symbol }) => { + return getAssetProfileIdentifier({ dataSource, symbol }); + }) + ); + + const dividendActivities = this.activities.filter( + ({ assetProfile, type }) => { + return ( + type === 'DIVIDEND' && + assetProfileIdentifiersIncludedInHoldings.has( + getAssetProfileIdentifier(assetProfile) + ) + ); + } + ); + + const totalDividendValueWithCurrencyEffectByDate: { [date: string]: Big } = + {}; + + let index = 0; + let totalDividendValueWithCurrencyEffect = new Big(0); + + // The activities and the chart dates are sorted by date, so one pass over + // both gives the dividends received up to each chart date + for (const chartDate of chartDates) { + while ( + index < dividendActivities.length && + dividendActivities[index].date <= chartDate + ) { + const { assetProfile, date, quantity, unitPrice } = + dividendActivities[index]; + + totalDividendValueWithCurrencyEffect = + totalDividendValueWithCurrencyEffect.plus( + quantity + .mul(unitPrice) + .mul( + exchangeRatesByCurrency[ + `${assetProfile.currency}${this.currency}` + ]?.[date] ?? 1 + ) + ); + + index++; + } + + totalDividendValueWithCurrencyEffectByDate[chartDate] = + totalDividendValueWithCurrencyEffect; + } + + return totalDividendValueWithCurrencyEffectByDate; + } + @LogPerformance private async initialize(attempt = 1) { const startTimeTotal = performance.now(); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts index aadf2e23a0..ed8841b167 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts @@ -142,6 +142,8 @@ describe('PortfolioCalculator', () => { expect(portfolioSnapshot.historicalData[0]).toEqual({ date: '2021-12-11', + dividendInBaseCurrency: 0, + dividendInPercentageWithCurrencyEffect: 0, investmentValueWithCurrencyEffect: 0, netPerformance: 0, netPerformanceInPercentage: 0, @@ -160,6 +162,8 @@ describe('PortfolioCalculator', () => { */ expect(portfolioSnapshot.historicalData[1]).toEqual({ date: '2021-12-12', + dividendInBaseCurrency: 0, + dividendInPercentageWithCurrencyEffect: 0, investmentValueWithCurrencyEffect: 44558.42, netPerformance: 5535.42, // 1 * (50098.3 - 44558.42) - 4.46 = 5535.42 netPerformanceInPercentage: 0.12422837255001412, // 5535.42 ÷ 44558.42 = 0.12422837255001412 @@ -179,6 +183,8 @@ describe('PortfolioCalculator', () => { ] ).toEqual({ date: '2022-01-14', + dividendInBaseCurrency: 0, + dividendInPercentageWithCurrencyEffect: 0, investmentValueWithCurrencyEffect: 0, netPerformance: -1463.18, netPerformanceInPercentage: -0.032837340282712, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts index fe86d9d457..e0cfeb8227 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts @@ -142,6 +142,8 @@ describe('PortfolioCalculator', () => { expect(portfolioSnapshot.historicalData[0]).toEqual({ date: '2021-12-11', + dividendInBaseCurrency: 0, + dividendInPercentageWithCurrencyEffect: 0, investmentValueWithCurrencyEffect: 0, netPerformance: 0, netPerformanceInPercentage: 0, @@ -160,6 +162,8 @@ describe('PortfolioCalculator', () => { */ expect(portfolioSnapshot.historicalData[1]).toEqual({ date: '2021-12-12', + dividendInBaseCurrency: 0, + dividendInPercentageWithCurrencyEffect: 0, investmentValueWithCurrencyEffect: 44558.42, netPerformance: 5535.42, // 1 * (50098.3 - 44558.42) - 4.46 = 5535.42 netPerformanceInPercentage: 0.12422837255001412, // 5535.42 ÷ 44558.42 = 0.12422837255001412 @@ -179,6 +183,8 @@ describe('PortfolioCalculator', () => { ] ).toEqual({ date: '2022-01-14', + dividendInBaseCurrency: 0, + dividendInPercentageWithCurrencyEffect: 0, investmentValueWithCurrencyEffect: 0, netPerformance: -1463.18, netPerformanceInPercentage: -0.032837340282712, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts index 23c806483c..b98aa9e5f2 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts @@ -321,6 +321,8 @@ describe('PortfolioCalculator', () => { */ expect(portfolioSnapshot.historicalData.at(-1)).toEqual({ date: '2025-01-01', + dividendInBaseCurrency: 0, + dividendInPercentageWithCurrencyEffect: 0, investmentValueWithCurrencyEffect: 0, netPerformance: 0, netPerformanceInPercentage: 0, @@ -459,6 +461,8 @@ describe('PortfolioCalculator', () => { */ expect(portfolioSnapshot.historicalData.at(-1)).toEqual({ date: '2025-01-01', + dividendInBaseCurrency: 0, + dividendInPercentageWithCurrencyEffect: 0, investmentValueWithCurrencyEffect: 0, netPerformance: 0, netPerformanceInPercentage: 0, @@ -601,6 +605,8 @@ describe('PortfolioCalculator', () => { */ expect(portfolioSnapshot.historicalData.at(-1)).toEqual({ date: '2025-01-01', + dividendInBaseCurrency: 0, + dividendInPercentageWithCurrencyEffect: 0, investmentValueWithCurrencyEffect: 0, netPerformance: 0, netPerformanceInPercentage: 0, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-fee-and-dividend.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-fee-and-dividend.spec.ts new file mode 100644 index 0000000000..ab9c24b4fb --- /dev/null +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-fee-and-dividend.spec.ts @@ -0,0 +1,362 @@ +import { + activityDummyData, + assetProfileDummyData, + getPerformanceByDateRange, + userDummyData +} from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator-test-utils'; +import { PortfolioCalculatorFactory } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator.factory'; +import { CurrentRateService } from '@ghostfolio/api/app/portfolio/current-rate.service'; +import { CurrentRateServiceMock } from '@ghostfolio/api/app/portfolio/current-rate.service.mock'; +import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service'; +import { RedisCacheServiceMock } from '@ghostfolio/api/app/redis-cache/redis-cache.service.mock'; +import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; +import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; +import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; +import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; +import { parseDate } from '@ghostfolio/common/helper'; +import { Activity } from '@ghostfolio/common/interfaces'; +import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; + +import { Big } from 'big.js'; + +jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { + return { + CurrentRateService: jest.fn().mockImplementation(() => { + return CurrentRateServiceMock; + }) + }; +}); + +jest.mock( + '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', + () => { + return { + PortfolioSnapshotService: jest.fn().mockImplementation(() => { + return PortfolioSnapshotServiceMock; + }) + }; + } +); + +jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { + return { + RedisCacheService: jest.fn().mockImplementation(() => { + return RedisCacheServiceMock; + }) + }; +}); + +describe('PortfolioCalculator', () => { + let configurationService: ConfigurationService; + let currentRateService: CurrentRateService; + let exchangeRateDataService: ExchangeRateDataService; + let portfolioCalculatorFactory: PortfolioCalculatorFactory; + let portfolioSnapshotService: PortfolioSnapshotService; + let redisCacheService: RedisCacheService; + + beforeEach(() => { + PortfolioSnapshotServiceMock.reset(); + RedisCacheServiceMock.reset(); + + configurationService = new ConfigurationService(); + + currentRateService = new CurrentRateService(null, null, null); + + exchangeRateDataService = new ExchangeRateDataService( + null, + null, + null, + null + ); + + portfolioSnapshotService = new PortfolioSnapshotService(null, null); + + redisCacheService = new RedisCacheService(null, null); + + portfolioCalculatorFactory = new PortfolioCalculatorFactory( + configurationService, + currentRateService, + exchangeRateDataService, + portfolioSnapshotService, + redisCacheService + ); + }); + + describe('get current positions', () => { + it('with GOOGL fee and dividend', async () => { + jest.useFakeTimers().setSystemTime(parseDate('2023-07-10').getTime()); + + const activities: Activity[] = [ + { + ...activityDummyData, + assetProfile: { + ...assetProfileDummyData, + currency: 'USD', + dataSource: 'YAHOO', + name: 'Microsoft Inc.', + symbol: 'MSFT' + }, + date: new Date('2021-09-16'), + feeInAssetProfileCurrency: 19, + feeInBaseCurrency: 19, + quantity: 1, + type: 'BUY', + unitPriceInAssetProfileCurrency: 298.58 + }, + { + ...activityDummyData, + assetProfile: { + ...assetProfileDummyData, + currency: 'USD', + dataSource: 'YAHOO', + name: 'Microsoft Inc.', + symbol: 'MSFT' + }, + date: new Date('2021-11-16'), + feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, + quantity: 1, + type: 'DIVIDEND', + unitPriceInAssetProfileCurrency: 0.62 + }, + { + // The first activity of this asset profile is a fee, which is not an + // investment activity. Thus the holding is not included in the + // holdings of the portfolio summary, and its dividend must not be + // included in the chart + ...activityDummyData, + assetProfile: { + ...assetProfileDummyData, + currency: 'USD', + dataSource: 'YAHOO', + name: 'Alphabet Inc.', + symbol: 'GOOGL' + }, + date: new Date('2023-01-03'), + feeInAssetProfileCurrency: 1, + feeInBaseCurrency: 1, + quantity: 0, + type: 'FEE', + unitPriceInAssetProfileCurrency: 0 + }, + { + ...activityDummyData, + assetProfile: { + ...assetProfileDummyData, + currency: 'USD', + dataSource: 'YAHOO', + name: 'Alphabet Inc.', + symbol: 'GOOGL' + }, + date: new Date('2023-07-10'), + feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, + quantity: 1, + type: 'DIVIDEND', + unitPriceInAssetProfileCurrency: 5 + } + ]; + + const portfolioCalculator = portfolioCalculatorFactory.createCalculator({ + activities, + calculationType: PerformanceCalculationType.ROAI, + currency: 'USD', + usePortfolioSnapshotCache: false, + userId: userDummyData.id + }); + + const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); + + const dividendInBaseCurrency = + await portfolioCalculator.getDividendInBaseCurrency(); + + expect( + portfolioSnapshot.positions.map(({ symbol }) => { + return symbol; + }) + ).toEqual(['MSFT']); + + // The chart and the portfolio summary must show the same dividend + expect(dividendInBaseCurrency).toEqual(new Big('0.62')); + + expect( + portfolioSnapshot.historicalData.at(-1).dividendInBaseCurrency + ).toEqual(0.62); + }); + + it('with GOOGL dividend without investment', async () => { + jest.useFakeTimers().setSystemTime(parseDate('2023-07-10').getTime()); + + const activities: Activity[] = [ + { + ...activityDummyData, + assetProfile: { + ...assetProfileDummyData, + currency: 'USD', + dataSource: 'YAHOO', + name: 'Microsoft Inc.', + symbol: 'MSFT' + }, + date: new Date('2021-09-16'), + feeInAssetProfileCurrency: 19, + feeInBaseCurrency: 19, + quantity: 1, + type: 'BUY', + unitPriceInAssetProfileCurrency: 298.58 + }, + { + ...activityDummyData, + assetProfile: { + ...assetProfileDummyData, + currency: 'USD', + dataSource: 'YAHOO', + name: 'Microsoft Inc.', + symbol: 'MSFT' + }, + date: new Date('2021-11-16'), + feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, + quantity: 1, + type: 'DIVIDEND', + unitPriceInAssetProfileCurrency: 0.62 + }, + { + // The holding has a dividend, but no average investment. Thus the + // dividend percentage stays 0, like the dividend yield + ...activityDummyData, + assetProfile: { + ...assetProfileDummyData, + currency: 'USD', + dataSource: 'YAHOO', + name: 'Alphabet Inc.', + symbol: 'GOOGL' + }, + date: new Date('2023-07-10'), + feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, + quantity: 1, + type: 'DIVIDEND', + unitPriceInAssetProfileCurrency: 5 + } + ]; + + const portfolioCalculator = portfolioCalculatorFactory.createCalculator({ + activities, + calculationType: PerformanceCalculationType.ROAI, + currency: 'USD', + usePortfolioSnapshotCache: false, + userId: userDummyData.id + }); + + const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); + + const performanceByDateRange = await getPerformanceByDateRange({ + portfolioCalculator, + dateRanges: ['max'] + }); + + expect(portfolioSnapshot).toMatchObject({ + dividendYieldPercentWithCurrencyEffect: new Big(0) + }); + + expect(portfolioSnapshot.historicalData.at(-1)).toMatchObject({ + dividendInBaseCurrency: 5.62, + dividendInPercentageWithCurrencyEffect: 0 + }); + + expect(performanceByDateRange).toMatchObject({ + max: { + dividendInBaseCurrency: 5.62, + dividendInPercentageWithCurrencyEffect: 0 + } + }); + }); + + it('with MSFT dividend before and in the date range', async () => { + jest.useFakeTimers().setSystemTime(parseDate('2023-07-10').getTime()); + + const activities: Activity[] = [ + { + ...activityDummyData, + assetProfile: { + ...assetProfileDummyData, + currency: 'USD', + dataSource: 'YAHOO', + name: 'Microsoft Inc.', + symbol: 'MSFT' + }, + date: new Date('2021-09-16'), + feeInAssetProfileCurrency: 19, + feeInBaseCurrency: 19, + quantity: 1, + type: 'BUY', + unitPriceInAssetProfileCurrency: 298.58 + }, + { + ...activityDummyData, + assetProfile: { + ...assetProfileDummyData, + currency: 'USD', + dataSource: 'YAHOO', + name: 'Microsoft Inc.', + symbol: 'MSFT' + }, + date: new Date('2021-11-16'), + feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, + quantity: 1, + type: 'DIVIDEND', + unitPriceInAssetProfileCurrency: 0.62 + }, + { + ...activityDummyData, + assetProfile: { + ...assetProfileDummyData, + currency: 'USD', + dataSource: 'YAHOO', + name: 'Microsoft Inc.', + symbol: 'MSFT' + }, + date: new Date('2023-07-10'), + feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, + quantity: 1, + type: 'DIVIDEND', + unitPriceInAssetProfileCurrency: 0.68 + } + ]; + + const portfolioCalculator = portfolioCalculatorFactory.createCalculator({ + activities, + calculationType: PerformanceCalculationType.ROAI, + currency: 'USD', + usePortfolioSnapshotCache: false, + userId: userDummyData.id + }); + + await portfolioCalculator.computeSnapshot(); + + const performanceByDateRange = await getPerformanceByDateRange({ + portfolioCalculator, + dateRanges: ['1d', 'max', 'ytd'] + }); + + // The dividend before the date range is subtracted, so that the date + // range shows the dividend in the date range only + expect(performanceByDateRange).toMatchObject({ + '1d': { + dividendInBaseCurrency: 0.68, + dividendInPercentageWithCurrencyEffect: 0.002016487752802325 + }, + max: { + dividendInBaseCurrency: 1.3, + dividendInPercentageWithCurrencyEffect: 0.004353941992095899 + }, + ytd: { + dividendInBaseCurrency: 0.68, + dividendInPercentageWithCurrencyEffect: 0.002002886512915673 + } + }); + }); + }); +}); 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 18dc5ab246..2c6ff79b6d 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 @@ -198,6 +198,8 @@ describe('PortfolioCalculator', () => { expect(performanceByDateRange).toMatchObject({ '1d': { date: '2023-07-10', + dividendInBaseCurrency: 0, + dividendInPercentageWithCurrencyEffect: 0, netPerformance: -5.390000000000001, netPerformanceInPercentage: -0.015983630864124312, netPerformanceInPercentageWithCurrencyEffect: -0.015983630864124312, @@ -207,6 +209,8 @@ describe('PortfolioCalculator', () => { }, max: { date: '2023-07-10', + dividendInBaseCurrency: 0.62, + dividendInPercentageWithCurrencyEffect: 0.002076495411614967, netPerformance: 14.25, netPerformanceInPercentage: 0.04772590260566659, netPerformanceInPercentageWithCurrencyEffect: 0.04772590260566659, @@ -216,6 +220,8 @@ describe('PortfolioCalculator', () => { }, ytd: { date: '2023-07-10', + dividendInBaseCurrency: 0, + dividendInPercentageWithCurrencyEffect: 0, netPerformance: -7.68, netPerformanceInPercentage: -0.022620835910577012, netPerformanceInPercentageWithCurrencyEffect: -0.022620835910577012, 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 feb9a3c20e..46e1b14aa4 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 @@ -139,6 +139,8 @@ describe('PortfolioCalculator', () => { expect(portfolioSnapshot.historicalData[0]).toEqual({ date: '2022-03-06', + dividendInBaseCurrency: 0, + dividendInPercentageWithCurrencyEffect: 0, investmentValueWithCurrencyEffect: 0, netPerformance: 0, netPerformanceInPercentage: 0, @@ -158,6 +160,8 @@ describe('PortfolioCalculator', () => { */ expect(portfolioSnapshot.historicalData[1]).toEqual({ date: '2022-03-07', + dividendInBaseCurrency: 0, + dividendInPercentageWithCurrencyEffect: 0, investmentValueWithCurrencyEffect: 151.6, netPerformance: 0, // 2 * (75.8 - 75.8) = 0 netPerformanceInPercentage: 0, // 0 ÷ 151.6 = 0 @@ -177,6 +181,8 @@ describe('PortfolioCalculator', () => { ] ).toEqual({ date: '2022-04-11', + dividendInBaseCurrency: 0, + dividendInPercentageWithCurrencyEffect: 0, investmentValueWithCurrencyEffect: 0, netPerformance: 19.86, netPerformanceInPercentage: 0.13100263852242744, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts index 39a1b4188b..2b7b4e6dce 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts @@ -17,7 +17,10 @@ import { AssetProfileIdentifier, HistoricalDataItem } from '@ghostfolio/common/interfaces'; -import { PortfolioSnapshot } from '@ghostfolio/common/models'; +import { + PortfolioSnapshot, + PortfolioSnapshotHolding +} from '@ghostfolio/common/models'; import { DateRange } from '@ghostfolio/common/types'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; @@ -165,10 +168,15 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { } protected calculatePerformancePercentages({ - accumulatedValuesByDate + accumulatedValuesByDate, + holdings }: { accumulatedValuesByDate: { [date: string]: AccumulatedValues }; + holdings: PortfolioSnapshotHolding[]; }): { [date: string]: PerformancePercentages } { + const hasDividendWithoutAverageInvestment = + this.hasDividendWithoutAverageInvestment(holdings); + const performancePercentagesByDate: { [date: string]: PerformancePercentages; } = {}; @@ -178,11 +186,19 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { { totalAverageInvestmentValue, totalAverageInvestmentValueWithCurrencyEffect, + totalDividendValueWithCurrencyEffect, totalNetPerformanceValue, totalNetPerformanceValueWithCurrencyEffect } ] of Object.entries(accumulatedValuesByDate)) { performancePercentagesByDate[date] = { + dividendInPercentageWithCurrencyEffect: + hasDividendWithoutAverageInvestment || + totalAverageInvestmentValueWithCurrencyEffect.eq(0) + ? 0 + : totalDividendValueWithCurrencyEffect + .div(totalAverageInvestmentValueWithCurrencyEffect) + .toNumber(), netPerformanceInPercentage: totalAverageInvestmentValue.eq(0) ? 0 : totalNetPerformanceValue @@ -201,10 +217,15 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { } protected calculatePerformancePercentagesForDateRange({ - historicalDataItems + historicalDataItems, + holdings }: { historicalDataItems: HistoricalDataItem[]; + holdings: PortfolioSnapshotHolding[]; }): { [date: string]: PerformancePercentages } { + const hasDividendWithoutAverageInvestment = + this.hasDividendWithoutAverageInvestment(holdings); + const averageInvestmentValues: number[] = []; const averageInvestmentValuesWithCurrencyEffect: number[] = []; let grossPerformanceAtStartDate: number; @@ -254,6 +275,12 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { : 0; performancePercentagesByDate[historicalDataItem.date] = { + dividendInPercentageWithCurrencyEffect: + !hasDividendWithoutAverageInvestment && + averageInvestmentValueWithCurrencyEffect > 0 + ? historicalDataItem.dividendInBaseCurrency / + averageInvestmentValueWithCurrencyEffect + : 0, netPerformanceInPercentage: averageInvestmentValue > 0 ? historicalDataItem.netPerformance / averageInvestmentValue @@ -741,4 +768,21 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { protected getPerformanceCalculationType() { return PerformanceCalculationType.ROAI; } + + private hasDividendWithoutAverageInvestment( + holdings: PortfolioSnapshotHolding[] + ) { + // A holding with a dividend only (without a buy activity), and a holding + // without a market price, gives a dividend but no average investment. + // Such a holding makes the dividend percentage too high. Therefore the + // dividend percentage stays 0 in this case, like the dividend yield. + return holdings.some( + ({ averageInvestmentWithCurrencyEffect, dividendInBaseCurrency }) => { + return ( + !dividendInBaseCurrency.eq(0) && + averageInvestmentWithCurrencyEffect.eq(0) + ); + } + ); + } } diff --git a/apps/api/src/app/portfolio/interfaces/accumulated-values.interface.ts b/apps/api/src/app/portfolio/interfaces/accumulated-values.interface.ts index 919dccc227..3810cbdeca 100644 --- a/apps/api/src/app/portfolio/interfaces/accumulated-values.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/accumulated-values.interface.ts @@ -7,6 +7,7 @@ export interface AccumulatedValues { totalCashValueWithCurrencyEffect: Big; totalCurrentValue: Big; totalCurrentValueWithCurrencyEffect: Big; + totalDividendValueWithCurrencyEffect: Big; totalInvestmentValue: Big; totalInvestmentValueWithCurrencyEffect: Big; totalNetPerformanceValue: Big; diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index a65186100a..45b7477e8b 100644 --- a/apps/api/src/app/portfolio/portfolio.controller.ts +++ b/apps/api/src/app/portfolio/portfolio.controller.ts @@ -565,6 +565,7 @@ export class PortfolioController { [ 'currentNetWorth', 'currentValueInBaseCurrency', + 'dividendInBaseCurrency', 'grossPerformance', 'grossPerformanceWithCurrencyEffect', 'netPerformance', @@ -580,12 +581,16 @@ export class PortfolioController { ) { performanceInformation.chart = performanceInformation.chart.map( (item) => { - return nullifyValuesInObject(item, ['totalInvestment', 'value']); + return nullifyValuesInObject(item, [ + 'dividendInBaseCurrency', + 'totalInvestment', + 'value' + ]); } ); performanceInformation.performance = nullifyValuesInObject( performanceInformation.performance, - ['netPerformance'] + ['dividendInBaseCurrency', 'netPerformance'] ); } diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index c368d72c46..21e615bc21 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -1225,6 +1225,8 @@ export class PortfolioService { performance: { currentNetWorth: 0, currentValueInBaseCurrency: 0, + dividendInBaseCurrency: 0, + dividendPercentageWithCurrencyEffect: 0, netPerformance: 0, netPerformancePercentage: 0, netPerformancePercentageWithCurrencyEffect: 0, @@ -1256,6 +1258,8 @@ export class PortfolioService { }); const { + dividendInBaseCurrency, + dividendInPercentageWithCurrencyEffect, netPerformance, netPerformanceInPercentage, netPerformanceInPercentageWithCurrencyEffect, @@ -1265,6 +1269,8 @@ export class PortfolioService { totalInvestmentValueWithCurrencyEffect, valueWithCurrencyEffect } = chart?.at(-1) ?? { + dividendInBaseCurrency: 0, + dividendInPercentageWithCurrencyEffect: 0, netPerformance: 0, netPerformanceInPercentage: 0, netPerformanceInPercentageWithCurrencyEffect: 0, @@ -1280,12 +1286,15 @@ export class PortfolioService { hasErrors, dateOfFirstActivity: parseDate(historicalData[0]?.date), performance: { + dividendInBaseCurrency, netPerformance, netPerformanceWithCurrencyEffect, totalInvestment, totalInvestmentValueWithCurrencyEffect, currentNetWorth: netWorth, currentValueInBaseCurrency: valueWithCurrencyEffect, + dividendPercentageWithCurrencyEffect: + dividendInPercentageWithCurrencyEffect, netPerformancePercentage: netPerformanceInPercentage, netPerformancePercentageWithCurrencyEffect: netPerformanceInPercentageWithCurrencyEffect diff --git a/apps/api/src/app/portfolio/types/performance-percentages.type.ts b/apps/api/src/app/portfolio/types/performance-percentages.type.ts index 99521e516e..590e25895a 100644 --- a/apps/api/src/app/portfolio/types/performance-percentages.type.ts +++ b/apps/api/src/app/portfolio/types/performance-percentages.type.ts @@ -3,6 +3,7 @@ import { HistoricalDataItem } from '@ghostfolio/common/interfaces'; export type PerformancePercentages = Required< Pick< HistoricalDataItem, + | 'dividendInPercentageWithCurrencyEffect' | 'netPerformanceInPercentage' | 'netPerformanceInPercentageWithCurrencyEffect' > 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 ea408c17d8..8846c14a7c 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 @@ -48,7 +48,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.totalBuy" /> @@ -62,7 +62,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.totalSell" /> @@ -79,7 +79,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.totalInvestmentValueWithCurrencyEffect" /> @@ -93,7 +93,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.grossPerformanceWithCurrencyEffect" /> @@ -110,7 +110,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.fees" /> @@ -127,7 +127,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.netPerformanceWithCurrencyEffect" /> @@ -171,7 +171,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.totalAssetsInBaseCurrency" /> @@ -217,7 +217,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="holdingsInBaseCurrency" /> @@ -233,7 +233,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="investmentsInBaseCurrency" /> @@ -248,7 +248,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.emergencyFund?.assets" /> @@ -295,7 +295,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.totalCashInBaseCurrency" /> @@ -311,7 +311,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.cash" /> @@ -326,7 +326,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.emergencyFund?.cash" /> @@ -356,7 +356,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.excludedAccountsAndActivities" /> @@ -379,7 +379,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.liabilitiesInBaseCurrency" /> @@ -396,7 +396,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.totalValueInBaseCurrency" /> @@ -469,7 +469,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.emergencyFund?.total" /> @@ -483,7 +483,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.interestInBaseCurrency" /> @@ -497,7 +497,7 @@ [isLoading]="isLoading" [locale]="locale" [precision]="precision" - [unit]="baseCurrency" + [unit]="displayedCurrency" [value]="summary?.dividendInBaseCurrency" /> diff --git a/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts b/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts index ea68713189..dec65ddad9 100644 --- a/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts +++ b/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts @@ -79,6 +79,10 @@ export class GfPortfolioSummaryComponent implements OnChanges { : 0; } + protected get displayedCurrency() { + return this.deviceType === 'mobile' ? undefined : this.baseCurrency; + } + protected get emergencyFundPercentage() { return this.summary?.totalValueInBaseCurrency ? (this.summary.emergencyFund?.total || 0) / diff --git a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html index 59478d3cfa..7d5776d0ca 100644 --- a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html +++ b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html @@ -30,7 +30,7 @@ systems, including CasaOS, + >, Easypanel, Home Assistant, Runtipi, diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html index abf2de00ee..94a0328755 100644 --- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html +++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -279,6 +279,46 @@ /> + @if (user?.settings?.isExperimentalFeatures) { +

+
+
+ Absolute Dividend Performance + @if (user?.subscription?.type === 'Basic') { + + } +
+
+ +
+
+
+
+ Dividend Performance +
+
+ +
+
+ } diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 610cca4ca3..409ba1247c 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -324,7 +324,7 @@ Date must be in the future. - Date must be in the future. + La data ha de ser futura. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 70 @@ -332,7 +332,7 @@ Fetch market price - Fetch market price + Recupera el preu de mercat libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html 40 @@ -372,7 +372,7 @@ Any person who has the link can view the data. - Any person who has the link can view the data. + Qualsevol persona que tingui l’enllaç pot veure les dades. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 42 @@ -399,7 +399,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 161 + 163 @@ -415,7 +415,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 92 + 94 @@ -495,7 +495,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 34 + 35 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -511,7 +511,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 61 + 63 @@ -547,7 +547,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 71 + 73 libs/ui/src/lib/activities-table/activities-table.component.html @@ -579,11 +579,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 196 + 198 libs/ui/src/lib/accounts-table/accounts-table.component.html - 231 + 233 libs/ui/src/lib/activities-table/activities-table.component.html @@ -595,7 +595,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 112 + 113 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -627,7 +627,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 348 + 350 libs/ui/src/lib/activities-table/activities-table.component.html @@ -675,7 +675,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 361 + 363 libs/ui/src/lib/activities-table/activities-table.component.html @@ -696,7 +696,7 @@ Paid - Paid + De pagament apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts 136 @@ -804,7 +804,7 @@ View and manage - View and manage + Veure i gestionar libs/ui/src/lib/access-level-icon/access-level-icon.component.html 9 @@ -1039,7 +1039,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 63 + 64 @@ -1052,7 +1052,7 @@ Data Gathering Frequency - Data Gathering Frequency + Freqüència de recollida de dades apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 477 @@ -1088,7 +1088,7 @@ Apply current market price - Apply current market price + Aplica el preu de mercat actual apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 221 @@ -1096,7 +1096,7 @@ Subscription History - Subscription History + Historial de subscripcions apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 156 @@ -1144,7 +1144,7 @@ Healthcare - Healthcare + Salut libs/ui/src/lib/i18n.ts 98 @@ -1276,7 +1276,7 @@ Technology - Technology + Tecnologia libs/ui/src/lib/i18n.ts 102 @@ -1298,6 +1298,14 @@ 175 + + Financial Advisor + Financial Advisor + + libs/ui/src/lib/i18n.ts + 110 + + Scraper Configuration Configuració del Proveïdor de Dades @@ -1344,7 +1352,7 @@ Asset profile has been saved - Asset profile has been saved + El perfil de l’actiu s’ha desat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 754 @@ -1367,7 +1375,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 305 + 307 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1512,7 +1520,7 @@ Update Account - Update Account + Actualitza el compte libs/common/src/lib/routes/routes.ts 120 @@ -1660,7 +1668,7 @@ Cache has been flushed. - Cache has been flushed. + La memòria cau s’ha buidat. apps/client/src/app/components/admin-overview/admin-overview.component.ts 281 @@ -1955,7 +1963,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 141 + 143 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1963,7 +1971,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 87 + 88 @@ -2212,7 +2220,7 @@ Code - Code + Codi apps/client/src/app/components/admin-overview/admin-overview.html 165 @@ -2312,7 +2320,7 @@ Energy - Energy + Energia libs/ui/src/lib/i18n.ts 96 @@ -2447,7 +2455,7 @@ Definiu l’import del vostre fons d’emergència. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 169 + 173 @@ -2676,7 +2684,7 @@ The value has been copied to the clipboard - The value has been copied to the clipboard + El valor s’ha copiat al porta-retalls libs/ui/src/lib/notifications/alert-dialog/alert-dialog.component.ts 46 @@ -2752,7 +2760,7 @@ Add Account - Add Account + Afegeix un compte libs/common/src/lib/routes/routes.ts 101 @@ -2848,7 +2856,7 @@ Clone Activity - Clone Activity + Clona l’activitat libs/common/src/lib/routes/routes.ts 190 @@ -3347,7 +3355,7 @@ Financial Planning libs/ui/src/lib/i18n.ts - 110 + 111 @@ -3849,7 +3857,7 @@ Creation - Creation + Creació apps/client/src/app/components/admin-overview/admin-overview.html 191 @@ -4664,7 +4672,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 124 + 126 @@ -4847,6 +4855,14 @@ 71 + + Dividend Performance + Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 307 + + Choose or drop a file here Trieu o deixeu anar un fitxer aquí @@ -5248,7 +5264,7 @@ A dalt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 292 + 332 @@ -5256,7 +5272,7 @@ A baix apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 343 + 383 @@ -5264,7 +5280,7 @@ Evolució de la cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 438 @@ -5272,7 +5288,7 @@ Cronologia de la inversió apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 465 @@ -5280,7 +5296,7 @@ Ratxa actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 446 + 486 @@ -5288,7 +5304,7 @@ Ratxa més llarga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 495 @@ -5296,7 +5312,7 @@ Cronologia de dividends apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 482 + 522 @@ -5921,7 +5937,7 @@ Stock Tracking libs/ui/src/lib/i18n.ts - 113 + 114 @@ -5945,7 +5961,7 @@ Web libs/ui/src/lib/i18n.ts - 122 + 123 @@ -6413,15 +6429,15 @@ Assignació libs/ui/src/lib/accounts-table/accounts-table.component.html - 266 + 268 libs/ui/src/lib/holdings-table/holdings-table.component.html - 137 + 138 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 139 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6441,7 +6457,7 @@ Mostra-ho tot libs/ui/src/lib/holdings-table/holdings-table.component.html - 242 + 243 @@ -6758,14 +6774,14 @@ View Details - View Details + Veure els detalls apps/client/src/app/components/admin-users/admin-users.html 220 libs/ui/src/lib/accounts-table/accounts-table.component.html - 337 + 339 @@ -6880,6 +6896,14 @@ 74 + + Absolute Dividend Performance + Absolute Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 288 + + Africa Àfrica @@ -7241,7 +7265,7 @@ Wealth Management libs/ui/src/lib/i18n.ts - 115 + 116 @@ -7445,7 +7469,7 @@ Tax Reporting libs/ui/src/lib/i18n.ts - 114 + 115 @@ -7749,7 +7773,7 @@ Investment Research libs/ui/src/lib/i18n.ts - 111 + 112 @@ -7975,7 +7999,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 167 + 171 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8031,7 +8055,7 @@ Net Worth Tracking libs/ui/src/lib/i18n.ts - 112 + 113 @@ -8159,7 +8183,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 159 + 160 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8195,11 +8219,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 184 + 185 libs/ui/src/lib/holdings-table/holdings-table.component.html - 185 + 186 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 54369efe59..58da7dc525 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -166,7 +166,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 34 + 35 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -182,7 +182,7 @@ Gesamt libs/ui/src/lib/accounts-table/accounts-table.component.html - 61 + 63 @@ -210,11 +210,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 196 + 198 libs/ui/src/lib/accounts-table/accounts-table.component.html - 231 + 233 libs/ui/src/lib/activities-table/activities-table.component.html @@ -226,7 +226,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 112 + 113 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -258,7 +258,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 348 + 350 libs/ui/src/lib/activities-table/activities-table.component.html @@ -306,7 +306,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 361 + 363 libs/ui/src/lib/activities-table/activities-table.component.html @@ -566,7 +566,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 63 + 64 @@ -1098,7 +1098,7 @@ Bitte setze den Betrag deines Notfallfonds. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 169 + 173 @@ -1166,15 +1166,15 @@ Allokation libs/ui/src/lib/accounts-table/accounts-table.component.html - 266 + 268 libs/ui/src/lib/holdings-table/holdings-table.component.html - 137 + 138 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 139 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1194,7 +1194,7 @@ Alle anzeigen libs/ui/src/lib/holdings-table/holdings-table.component.html - 242 + 243 @@ -1638,7 +1638,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 71 + 73 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1658,7 +1658,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 161 + 163 @@ -1674,7 +1674,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 92 + 94 @@ -1690,7 +1690,7 @@ Finanzplanung libs/ui/src/lib/i18n.ts - 110 + 111 @@ -2082,7 +2082,7 @@ Zeitstrahl der Investitionen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 465 @@ -2090,7 +2090,7 @@ Gewinner apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 292 + 332 @@ -2098,7 +2098,7 @@ Verlierer apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 343 + 383 @@ -2242,7 +2242,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 141 + 143 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2250,7 +2250,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 87 + 88 @@ -2282,7 +2282,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 305 + 307 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2338,7 +2338,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 124 + 126 @@ -3066,7 +3066,7 @@ Portfolio Wertentwicklung apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 438 @@ -3293,6 +3293,14 @@ 79 + + Absolute Dividend Performance + Absolute Dividendenperformance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 288 + + Africa Afrika @@ -3454,7 +3462,7 @@ Zeitstrahl der Dividenden apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 482 + 522 @@ -3637,6 +3645,14 @@ 71 + + Dividend Performance + Dividendenperformance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 307 + + Yearly Jährlich @@ -4454,7 +4470,7 @@ Aktueller Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 446 + 486 @@ -4462,7 +4478,7 @@ Längster Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 495 @@ -4506,7 +4522,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 337 + 339 @@ -4697,6 +4713,14 @@ 175 + + Financial Advisor + Finanzberatung + + libs/ui/src/lib/i18n.ts + 110 + + Scraper Configuration Scraper Konfiguration @@ -4902,7 +4926,7 @@ Web libs/ui/src/lib/i18n.ts - 122 + 123 @@ -5864,7 +5888,7 @@ Aktien-Tracking libs/ui/src/lib/i18n.ts - 113 + 114 @@ -7265,7 +7289,7 @@ Vermögensverwaltung libs/ui/src/lib/i18n.ts - 115 + 116 @@ -7469,7 +7493,7 @@ Steuerreporting libs/ui/src/lib/i18n.ts - 114 + 115 @@ -7773,7 +7797,7 @@ Investment Research libs/ui/src/lib/i18n.ts - 111 + 112 @@ -7999,7 +8023,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 167 + 171 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8055,7 +8079,7 @@ Vermögens-Tracking libs/ui/src/lib/i18n.ts - 112 + 113 @@ -8183,7 +8207,7 @@ Änderung libs/ui/src/lib/holdings-table/holdings-table.component.html - 159 + 160 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8219,11 +8243,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 184 + 185 libs/ui/src/lib/holdings-table/holdings-table.component.html - 185 + 186 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 2d48ddf15d..858a5309bb 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -167,7 +167,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 34 + 35 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -183,7 +183,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 61 + 63 @@ -211,11 +211,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 196 + 198 libs/ui/src/lib/accounts-table/accounts-table.component.html - 231 + 233 libs/ui/src/lib/activities-table/activities-table.component.html @@ -227,7 +227,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 112 + 113 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -259,7 +259,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 348 + 350 libs/ui/src/lib/activities-table/activities-table.component.html @@ -307,7 +307,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 361 + 363 libs/ui/src/lib/activities-table/activities-table.component.html @@ -567,7 +567,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 63 + 64 @@ -1083,7 +1083,7 @@ Por favor, ingresa la cantidad de tu fondo de emergencia. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 169 + 173 @@ -1151,15 +1151,15 @@ Distribución libs/ui/src/lib/accounts-table/accounts-table.component.html - 266 + 268 libs/ui/src/lib/holdings-table/holdings-table.component.html - 137 + 138 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 139 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1179,7 +1179,7 @@ Mostrar todos libs/ui/src/lib/holdings-table/holdings-table.component.html - 242 + 243 @@ -1623,7 +1623,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 71 + 73 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1643,7 +1643,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 161 + 163 @@ -1659,7 +1659,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 92 + 94 @@ -1675,7 +1675,7 @@ Planificación financiera libs/ui/src/lib/i18n.ts - 110 + 111 @@ -2067,7 +2067,7 @@ Cronología de la inversión apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 465 @@ -2075,7 +2075,7 @@ Mejores apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 292 + 332 @@ -2083,7 +2083,7 @@ Peores apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 343 + 383 @@ -2227,7 +2227,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 141 + 143 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2235,7 +2235,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 87 + 88 @@ -2267,7 +2267,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 305 + 307 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2323,7 +2323,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 124 + 126 @@ -3051,7 +3051,7 @@ Evolución de la cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 438 @@ -3278,6 +3278,14 @@ 79 + + Absolute Dividend Performance + Absolute Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 288 + + Africa África @@ -3487,7 +3495,7 @@ Calendario de dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 482 + 522 @@ -3622,6 +3630,14 @@ 71 + + Dividend Performance + Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 307 + + Yearly Anual @@ -4431,7 +4447,7 @@ Racha actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 446 + 486 @@ -4439,7 +4455,7 @@ Racha más larga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 495 @@ -4483,7 +4499,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 337 + 339 @@ -4674,6 +4690,14 @@ 175 + + Financial Advisor + Financial Advisor + + libs/ui/src/lib/i18n.ts + 110 + + Scraper Configuration Configuración del scraper @@ -4879,7 +4903,7 @@ Web libs/ui/src/lib/i18n.ts - 122 + 123 @@ -5841,7 +5865,7 @@ Seguimiento de acciones libs/ui/src/lib/i18n.ts - 113 + 114 @@ -7242,7 +7266,7 @@ Gestión de patrimonios libs/ui/src/lib/i18n.ts - 115 + 116 @@ -7446,7 +7470,7 @@ Informes fiscales libs/ui/src/lib/i18n.ts - 114 + 115 @@ -7750,7 +7774,7 @@ Investigación de inversiones libs/ui/src/lib/i18n.ts - 111 + 112 @@ -7976,7 +8000,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 167 + 171 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8032,7 +8056,7 @@ Seguimiento del patrimonio neto libs/ui/src/lib/i18n.ts - 112 + 113 @@ -8160,7 +8184,7 @@ Cambio libs/ui/src/lib/holdings-table/holdings-table.component.html - 159 + 160 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8196,11 +8220,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 184 + 185 libs/ui/src/lib/holdings-table/holdings-table.component.html - 185 + 186 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 6a329a5421..130ede7174 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -118,7 +118,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 92 + 94 @@ -174,7 +174,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 34 + 35 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -190,7 +190,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 61 + 63 @@ -226,7 +226,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 71 + 73 libs/ui/src/lib/activities-table/activities-table.component.html @@ -246,7 +246,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 161 + 163 @@ -274,11 +274,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 196 + 198 libs/ui/src/lib/accounts-table/accounts-table.component.html - 231 + 233 libs/ui/src/lib/activities-table/activities-table.component.html @@ -290,7 +290,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 112 + 113 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -322,7 +322,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 348 + 350 libs/ui/src/lib/activities-table/activities-table.component.html @@ -370,7 +370,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 361 + 363 libs/ui/src/lib/activities-table/activities-table.component.html @@ -638,7 +638,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 63 + 64 @@ -830,7 +830,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 305 + 307 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1418,7 +1418,7 @@ Veuillez entrer le montant de votre fonds d’urgence : apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 169 + 173 @@ -1450,7 +1450,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 141 + 143 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1458,7 +1458,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 87 + 88 @@ -2006,7 +2006,7 @@ Planification Financière libs/ui/src/lib/i18n.ts - 110 + 111 @@ -2386,7 +2386,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 124 + 126 @@ -2794,7 +2794,7 @@ Haut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 292 + 332 @@ -2802,7 +2802,7 @@ Bas apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 343 + 383 @@ -2810,7 +2810,7 @@ Évolution du Portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 438 @@ -2818,7 +2818,7 @@ Historique des Investissements apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 465 @@ -2826,7 +2826,7 @@ Historique des Dividendes apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 482 + 522 @@ -3254,15 +3254,15 @@ Part libs/ui/src/lib/accounts-table/accounts-table.component.html - 266 + 268 libs/ui/src/lib/holdings-table/holdings-table.component.html - 137 + 138 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 139 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3282,7 +3282,7 @@ Montrer tout libs/ui/src/lib/holdings-table/holdings-table.component.html - 242 + 243 @@ -3485,6 +3485,14 @@ 74 + + Absolute Dividend Performance + Absolute Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 288 + + Africa Afrique @@ -3621,6 +3629,14 @@ 71 + + Dividend Performance + Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 307 + + Yearly Annuel @@ -4430,7 +4446,7 @@ Série en cours apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 446 + 486 @@ -4438,7 +4454,7 @@ Série la plus longue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 495 @@ -4482,7 +4498,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 337 + 339 @@ -4673,6 +4689,14 @@ 175 + + Financial Advisor + Financial Advisor + + libs/ui/src/lib/i18n.ts + 110 + + Scraper Configuration Configuration du Scraper @@ -4878,7 +4902,7 @@ Web libs/ui/src/lib/i18n.ts - 122 + 123 @@ -5840,7 +5864,7 @@ Suivi des Actions libs/ui/src/lib/i18n.ts - 113 + 114 @@ -7241,7 +7265,7 @@ Gestion de Patrimoine libs/ui/src/lib/i18n.ts - 115 + 116 @@ -7445,7 +7469,7 @@ Déclaration Fiscale libs/ui/src/lib/i18n.ts - 114 + 115 @@ -7749,7 +7773,7 @@ Recherche d’Investissement libs/ui/src/lib/i18n.ts - 111 + 112 @@ -7975,7 +7999,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 167 + 171 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8031,7 +8055,7 @@ Suivi du Patrimoine Net libs/ui/src/lib/i18n.ts - 112 + 113 @@ -8159,7 +8183,7 @@ Variation libs/ui/src/lib/holdings-table/holdings-table.component.html - 159 + 160 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8195,11 +8219,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 184 + 185 libs/ui/src/lib/holdings-table/holdings-table.component.html - 185 + 186 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 13d58ae069..496900f288 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -167,7 +167,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 34 + 35 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -183,7 +183,7 @@ Totale libs/ui/src/lib/accounts-table/accounts-table.component.html - 61 + 63 @@ -211,11 +211,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 196 + 198 libs/ui/src/lib/accounts-table/accounts-table.component.html - 231 + 233 libs/ui/src/lib/activities-table/activities-table.component.html @@ -227,7 +227,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 112 + 113 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -259,7 +259,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 348 + 350 libs/ui/src/lib/activities-table/activities-table.component.html @@ -307,7 +307,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 361 + 363 libs/ui/src/lib/activities-table/activities-table.component.html @@ -567,7 +567,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 63 + 64 @@ -1083,7 +1083,7 @@ Inserisci l’importo del tuo fondo di emergenza: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 169 + 173 @@ -1151,15 +1151,15 @@ Allocazione libs/ui/src/lib/accounts-table/accounts-table.component.html - 266 + 268 libs/ui/src/lib/holdings-table/holdings-table.component.html - 137 + 138 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 139 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1179,7 +1179,7 @@ Mostra tutti libs/ui/src/lib/holdings-table/holdings-table.component.html - 242 + 243 @@ -1623,7 +1623,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 71 + 73 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1643,7 +1643,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 161 + 163 @@ -1659,7 +1659,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 92 + 94 @@ -1675,7 +1675,7 @@ Financial Planning libs/ui/src/lib/i18n.ts - 110 + 111 @@ -2067,7 +2067,7 @@ Cronologia degli investimenti apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 465 @@ -2075,7 +2075,7 @@ In alto apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 292 + 332 @@ -2083,7 +2083,7 @@ In basso apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 343 + 383 @@ -2227,7 +2227,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 141 + 143 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2235,7 +2235,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 87 + 88 @@ -2267,7 +2267,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 305 + 307 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2323,7 +2323,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 124 + 126 @@ -3051,7 +3051,7 @@ Evoluzione del portafoglio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 438 @@ -3278,6 +3278,14 @@ 79 + + Absolute Dividend Performance + Absolute Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 288 + + Africa Africa @@ -3487,7 +3495,7 @@ Cronologia dei dividendi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 482 + 522 @@ -3622,6 +3630,14 @@ 71 + + Dividend Performance + Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 307 + + Yearly Annuale @@ -4431,7 +4447,7 @@ Serie attuale apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 446 + 486 @@ -4439,7 +4455,7 @@ Serie più lunga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 495 @@ -4483,7 +4499,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 337 + 339 @@ -4674,6 +4690,14 @@ 175 + + Financial Advisor + Financial Advisor + + libs/ui/src/lib/i18n.ts + 110 + + Scraper Configuration Configurazione dello scraper @@ -4879,7 +4903,7 @@ Web libs/ui/src/lib/i18n.ts - 122 + 123 @@ -5841,7 +5865,7 @@ Stock Tracking libs/ui/src/lib/i18n.ts - 113 + 114 @@ -7242,7 +7266,7 @@ Gestione Patrimoniale libs/ui/src/lib/i18n.ts - 115 + 116 @@ -7446,7 +7470,7 @@ Tax Reporting libs/ui/src/lib/i18n.ts - 114 + 115 @@ -7750,7 +7774,7 @@ Investment Research libs/ui/src/lib/i18n.ts - 111 + 112 @@ -7976,7 +8000,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 167 + 171 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8032,7 +8056,7 @@ Net Worth Tracking libs/ui/src/lib/i18n.ts - 112 + 113 @@ -8160,7 +8184,7 @@ Cambia libs/ui/src/lib/holdings-table/holdings-table.component.html - 159 + 160 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8196,11 +8220,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 184 + 185 libs/ui/src/lib/holdings-table/holdings-table.component.html - 185 + 186 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts diff --git a/apps/client/src/locales/messages.ja.xlf b/apps/client/src/locales/messages.ja.xlf index e64d0ce7b4..7cc567ca40 100644 --- a/apps/client/src/locales/messages.ja.xlf +++ b/apps/client/src/locales/messages.ja.xlf @@ -328,7 +328,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 161 + 163 @@ -344,7 +344,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 92 + 94 @@ -424,7 +424,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 34 + 35 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -440,7 +440,7 @@ 合計 libs/ui/src/lib/accounts-table/accounts-table.component.html - 61 + 63 @@ -476,7 +476,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 71 + 73 libs/ui/src/lib/activities-table/activities-table.component.html @@ -508,11 +508,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 196 + 198 libs/ui/src/lib/accounts-table/accounts-table.component.html - 231 + 233 libs/ui/src/lib/activities-table/activities-table.component.html @@ -524,7 +524,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 112 + 113 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -556,7 +556,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 348 + 350 libs/ui/src/lib/activities-table/activities-table.component.html @@ -604,7 +604,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 361 + 363 libs/ui/src/lib/activities-table/activities-table.component.html @@ -928,7 +928,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 63 + 64 @@ -1191,6 +1191,14 @@ 175 + + Financial Advisor + Financial Advisor + + libs/ui/src/lib/i18n.ts + 110 + + Scraper Configuration スクレイパーの設定 @@ -1216,7 +1224,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 305 + 307 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2164,7 +2172,7 @@ 緊急用資金の金額を設定してください。 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 169 + 173 @@ -2196,7 +2204,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 141 + 143 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2204,7 +2212,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 87 + 88 @@ -3028,7 +3036,7 @@ Financial Planning libs/ui/src/lib/i18n.ts - 110 + 111 @@ -4308,7 +4316,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 124 + 126 @@ -4491,6 +4499,14 @@ 71 + + Dividend Performance + Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 307 + + Choose or drop a file here ここでファイルを選択またはドロップ @@ -4824,7 +4840,7 @@ トップ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 292 + 332 @@ -4832,7 +4848,7 @@ ボトム apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 343 + 383 @@ -4840,7 +4856,7 @@ ポートフォリオ進化 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 438 @@ -4848,7 +4864,7 @@ 投資タイムライン apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 465 @@ -4856,7 +4872,7 @@ 現在のストリーク apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 446 + 486 @@ -4864,7 +4880,7 @@ 最長のストリーク apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 495 @@ -4872,7 +4888,7 @@ 配当金タイムライン apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 482 + 522 @@ -5485,7 +5501,7 @@ Stock Tracking libs/ui/src/lib/i18n.ts - 113 + 114 @@ -5509,7 +5525,7 @@ Web libs/ui/src/lib/i18n.ts - 122 + 123 @@ -5869,15 +5885,15 @@ 配分 libs/ui/src/lib/accounts-table/accounts-table.component.html - 266 + 268 libs/ui/src/lib/holdings-table/holdings-table.component.html - 137 + 138 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 139 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5897,7 +5913,7 @@ すべて表示 libs/ui/src/lib/holdings-table/holdings-table.component.html - 242 + 243 @@ -6205,7 +6221,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 337 + 339 @@ -6320,6 +6336,14 @@ 74 + + Absolute Dividend Performance + Absolute Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 288 + + Africa アフリカ @@ -7194,7 +7218,7 @@ Wealth Management libs/ui/src/lib/i18n.ts - 115 + 116 @@ -7526,7 +7550,7 @@ Tax Reporting libs/ui/src/lib/i18n.ts - 114 + 115 @@ -7774,7 +7798,7 @@ Investment Research libs/ui/src/lib/i18n.ts - 111 + 112 @@ -8000,7 +8024,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 167 + 171 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8056,7 +8080,7 @@ Net Worth Tracking libs/ui/src/lib/i18n.ts - 112 + 113 @@ -8184,7 +8208,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 159 + 160 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8220,11 +8244,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 184 + 185 libs/ui/src/lib/holdings-table/holdings-table.component.html - 185 + 186 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf index 99649ef133..49d9aff787 100644 --- a/apps/client/src/locales/messages.ko.xlf +++ b/apps/client/src/locales/messages.ko.xlf @@ -328,7 +328,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 161 + 163 @@ -344,7 +344,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 92 + 94 @@ -424,7 +424,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 34 + 35 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -440,7 +440,7 @@ 합계 libs/ui/src/lib/accounts-table/accounts-table.component.html - 61 + 63 @@ -476,7 +476,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 71 + 73 libs/ui/src/lib/activities-table/activities-table.component.html @@ -508,11 +508,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 196 + 198 libs/ui/src/lib/accounts-table/accounts-table.component.html - 231 + 233 libs/ui/src/lib/activities-table/activities-table.component.html @@ -524,7 +524,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 112 + 113 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -556,7 +556,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 348 + 350 libs/ui/src/lib/activities-table/activities-table.component.html @@ -604,7 +604,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 361 + 363 libs/ui/src/lib/activities-table/activities-table.component.html @@ -928,7 +928,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 63 + 64 @@ -1191,6 +1191,14 @@ 175 + + Financial Advisor + Financial Advisor + + libs/ui/src/lib/i18n.ts + 110 + + Scraper Configuration 스크래퍼 설정 @@ -1216,7 +1224,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 305 + 307 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2164,7 +2172,7 @@ 비상금 금액을 설정해 주세요. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 169 + 173 @@ -2196,7 +2204,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 141 + 143 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2204,7 +2212,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 87 + 88 @@ -3028,7 +3036,7 @@ 재무 설계 libs/ui/src/lib/i18n.ts - 110 + 111 @@ -4300,7 +4308,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 124 + 126 @@ -4483,6 +4491,14 @@ 71 + + Dividend Performance + Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 307 + + Choose or drop a file here 여기에 파일을 선택하거나 드롭하세요. @@ -4816,7 +4832,7 @@ 상위 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 292 + 332 @@ -4824,7 +4840,7 @@ 하위 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 343 + 383 @@ -4832,7 +4848,7 @@ 포트폴리오 진화 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 438 @@ -4840,7 +4856,7 @@ 투자 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 465 @@ -4848,7 +4864,7 @@ 현재 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 446 + 486 @@ -4856,7 +4872,7 @@ 최장 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 495 @@ -4864,7 +4880,7 @@ 배당 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 482 + 522 @@ -5477,7 +5493,7 @@ 주식 추적 libs/ui/src/lib/i18n.ts - 113 + 114 @@ -5501,7 +5517,7 @@ 웹 libs/ui/src/lib/i18n.ts - 122 + 123 @@ -5861,15 +5877,15 @@ 자산 배분 libs/ui/src/lib/accounts-table/accounts-table.component.html - 266 + 268 libs/ui/src/lib/holdings-table/holdings-table.component.html - 137 + 138 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 139 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5889,7 +5905,7 @@ 모두 표시 libs/ui/src/lib/holdings-table/holdings-table.component.html - 242 + 243 @@ -6205,7 +6221,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 337 + 339 @@ -6320,6 +6336,14 @@ 74 + + Absolute Dividend Performance + Absolute Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 288 + + Africa 아프리카 @@ -7194,7 +7218,7 @@ 자산관리 libs/ui/src/lib/i18n.ts - 115 + 116 @@ -7526,7 +7550,7 @@ 세금 보고 libs/ui/src/lib/i18n.ts - 114 + 115 @@ -7774,7 +7798,7 @@ 투자 리서치 libs/ui/src/lib/i18n.ts - 111 + 112 @@ -8000,7 +8024,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 167 + 171 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8056,7 +8080,7 @@ 순자산 추적 libs/ui/src/lib/i18n.ts - 112 + 113 @@ -8184,7 +8208,7 @@ 변동 libs/ui/src/lib/holdings-table/holdings-table.component.html - 159 + 160 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8220,11 +8244,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 184 + 185 libs/ui/src/lib/holdings-table/holdings-table.component.html - 185 + 186 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index b9fb3ecbcb..431207b54d 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -166,7 +166,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 34 + 35 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -182,7 +182,7 @@ Totaal libs/ui/src/lib/accounts-table/accounts-table.component.html - 61 + 63 @@ -210,11 +210,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 196 + 198 libs/ui/src/lib/accounts-table/accounts-table.component.html - 231 + 233 libs/ui/src/lib/activities-table/activities-table.component.html @@ -226,7 +226,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 112 + 113 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -258,7 +258,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 348 + 350 libs/ui/src/lib/activities-table/activities-table.component.html @@ -306,7 +306,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 361 + 363 libs/ui/src/lib/activities-table/activities-table.component.html @@ -566,7 +566,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 63 + 64 @@ -1082,7 +1082,7 @@ Voer het bedrag van je noodfonds in: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 169 + 173 @@ -1150,15 +1150,15 @@ Allocatie libs/ui/src/lib/accounts-table/accounts-table.component.html - 266 + 268 libs/ui/src/lib/holdings-table/holdings-table.component.html - 137 + 138 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 139 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1178,7 +1178,7 @@ Toon alle libs/ui/src/lib/holdings-table/holdings-table.component.html - 242 + 243 @@ -1622,7 +1622,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 71 + 73 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1642,7 +1642,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 161 + 163 @@ -1658,7 +1658,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 92 + 94 @@ -1674,7 +1674,7 @@ Financiële planning libs/ui/src/lib/i18n.ts - 110 + 111 @@ -2066,7 +2066,7 @@ Tijdlijn investeringen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 465 @@ -2074,7 +2074,7 @@ Winnaars apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 292 + 332 @@ -2082,7 +2082,7 @@ Verliezers apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 343 + 383 @@ -2226,7 +2226,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 141 + 143 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2234,7 +2234,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 87 + 88 @@ -2266,7 +2266,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 305 + 307 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2322,7 +2322,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 124 + 126 @@ -3050,7 +3050,7 @@ Waardeontwikkeling van portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 438 @@ -3277,6 +3277,14 @@ 79 + + Absolute Dividend Performance + Absolute Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 288 + + Africa Afrika @@ -3486,7 +3494,7 @@ Tijdlijn dividend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 482 + 522 @@ -3621,6 +3629,14 @@ 71 + + Dividend Performance + Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 307 + + Yearly Jaarlijks @@ -4430,7 +4446,7 @@ Huidige reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 446 + 486 @@ -4438,7 +4454,7 @@ Langste reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 495 @@ -4482,7 +4498,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 337 + 339 @@ -4673,6 +4689,14 @@ 175 + + Financial Advisor + Financial Advisor + + libs/ui/src/lib/i18n.ts + 110 + + Scraper Configuration Scraper instellingen @@ -4878,7 +4902,7 @@ Web libs/ui/src/lib/i18n.ts - 122 + 123 @@ -5840,7 +5864,7 @@ Aandelen volgen libs/ui/src/lib/i18n.ts - 113 + 114 @@ -7241,7 +7265,7 @@ Vermogensbeheer libs/ui/src/lib/i18n.ts - 115 + 116 @@ -7445,7 +7469,7 @@ Belastingrapportage libs/ui/src/lib/i18n.ts - 114 + 115 @@ -7749,7 +7773,7 @@ Beleggingsonderzoek libs/ui/src/lib/i18n.ts - 111 + 112 @@ -7975,7 +7999,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 167 + 171 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8031,7 +8055,7 @@ Netto waarde volgen libs/ui/src/lib/i18n.ts - 112 + 113 @@ -8159,7 +8183,7 @@ Aanpassen libs/ui/src/lib/holdings-table/holdings-table.component.html - 159 + 160 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8195,11 +8219,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 184 + 185 libs/ui/src/lib/holdings-table/holdings-table.component.html - 185 + 186 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 9a2921ec5e..cb7519a70e 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -327,7 +327,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 161 + 163 @@ -343,7 +343,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 92 + 94 @@ -415,7 +415,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 34 + 35 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -431,7 +431,7 @@ Suma libs/ui/src/lib/accounts-table/accounts-table.component.html - 61 + 63 @@ -467,7 +467,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 71 + 73 libs/ui/src/lib/activities-table/activities-table.component.html @@ -499,11 +499,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 196 + 198 libs/ui/src/lib/accounts-table/accounts-table.component.html - 231 + 233 libs/ui/src/lib/activities-table/activities-table.component.html @@ -515,7 +515,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 112 + 113 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -547,7 +547,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 348 + 350 libs/ui/src/lib/activities-table/activities-table.component.html @@ -595,7 +595,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 361 + 363 libs/ui/src/lib/activities-table/activities-table.component.html @@ -919,7 +919,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 63 + 64 @@ -1158,6 +1158,14 @@ 175 + + Financial Advisor + Financial Advisor + + libs/ui/src/lib/i18n.ts + 110 + + Scraper Configuration Konfiguracja Scrapera @@ -1183,7 +1191,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 305 + 307 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2131,7 +2139,7 @@ Wprowadź wysokość funduszu rezerwowego: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 169 + 173 @@ -2163,7 +2171,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 141 + 143 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2171,7 +2179,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 87 + 88 @@ -2995,7 +3003,7 @@ Financial Planning libs/ui/src/lib/i18n.ts - 110 + 111 @@ -4267,7 +4275,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 124 + 126 @@ -4450,6 +4458,14 @@ 71 + + Dividend Performance + Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 307 + + Choose or drop a file here Wybierz lub przeciągnij plik tutaj @@ -4783,7 +4799,7 @@ Największe wzrosty apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 292 + 332 @@ -4791,7 +4807,7 @@ Największy spadek apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 343 + 383 @@ -4799,7 +4815,7 @@ Rozwój portfela apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 438 @@ -4807,7 +4823,7 @@ Oś czasu inwestycji apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 465 @@ -4815,7 +4831,7 @@ Obecna passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 446 + 486 @@ -4823,7 +4839,7 @@ Najdłuższa passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 495 @@ -4831,7 +4847,7 @@ Oś czasu dywidend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 482 + 522 @@ -5432,7 +5448,7 @@ Stock Tracking libs/ui/src/lib/i18n.ts - 113 + 114 @@ -5456,7 +5472,7 @@ Web libs/ui/src/lib/i18n.ts - 122 + 123 @@ -5784,15 +5800,15 @@ Podział libs/ui/src/lib/accounts-table/accounts-table.component.html - 266 + 268 libs/ui/src/lib/holdings-table/holdings-table.component.html - 137 + 138 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 139 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5812,7 +5828,7 @@ Pokaż wszystko libs/ui/src/lib/holdings-table/holdings-table.component.html - 242 + 243 @@ -6128,7 +6144,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 337 + 339 @@ -6243,6 +6259,14 @@ 74 + + Absolute Dividend Performance + Absolute Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 288 + + Africa Afryka @@ -7241,7 +7265,7 @@ Zarządzanie Majątkiem libs/ui/src/lib/i18n.ts - 115 + 116 @@ -7445,7 +7469,7 @@ Tax Reporting libs/ui/src/lib/i18n.ts - 114 + 115 @@ -7749,7 +7773,7 @@ Investment Research libs/ui/src/lib/i18n.ts - 111 + 112 @@ -7975,7 +7999,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 167 + 171 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8031,7 +8055,7 @@ Net Worth Tracking libs/ui/src/lib/i18n.ts - 112 + 113 @@ -8159,7 +8183,7 @@ Zmiana libs/ui/src/lib/holdings-table/holdings-table.component.html - 159 + 160 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8195,11 +8219,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 184 + 185 libs/ui/src/lib/holdings-table/holdings-table.component.html - 185 + 186 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 3960bda31b..d89c725518 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -118,7 +118,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 92 + 94 @@ -174,7 +174,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 34 + 35 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -190,7 +190,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 61 + 63 @@ -226,7 +226,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 71 + 73 libs/ui/src/lib/activities-table/activities-table.component.html @@ -246,7 +246,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 161 + 163 @@ -274,11 +274,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 196 + 198 libs/ui/src/lib/accounts-table/accounts-table.component.html - 231 + 233 libs/ui/src/lib/activities-table/activities-table.component.html @@ -290,7 +290,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 112 + 113 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -322,7 +322,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 348 + 350 libs/ui/src/lib/activities-table/activities-table.component.html @@ -370,7 +370,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 361 + 363 libs/ui/src/lib/activities-table/activities-table.component.html @@ -638,7 +638,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 63 + 64 @@ -1262,7 +1262,7 @@ Por favor, insira o valor do seu fundo de emergência: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 169 + 173 @@ -1294,7 +1294,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 141 + 143 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1302,7 +1302,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 87 + 88 @@ -1410,15 +1410,15 @@ Alocação libs/ui/src/lib/accounts-table/accounts-table.component.html - 266 + 268 libs/ui/src/lib/holdings-table/holdings-table.component.html - 137 + 138 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 139 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1438,7 +1438,7 @@ Mostrar tudo libs/ui/src/lib/holdings-table/holdings-table.component.html - 242 + 243 @@ -1990,7 +1990,7 @@ Financial Planning libs/ui/src/lib/i18n.ts - 110 + 111 @@ -2322,7 +2322,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 124 + 126 @@ -2430,7 +2430,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 305 + 307 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2674,7 +2674,7 @@ Topo apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 292 + 332 @@ -2682,7 +2682,7 @@ Fundo apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 343 + 383 @@ -2690,7 +2690,7 @@ Evolução do Portefólio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 438 @@ -2698,7 +2698,7 @@ Cronograma de Investimento apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 465 @@ -3289,6 +3289,14 @@ 74 + + Absolute Dividend Performance + Absolute Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 288 + + Africa África @@ -3570,7 +3578,7 @@ Cronograma de Dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 482 + 522 @@ -3621,6 +3629,14 @@ 71 + + Dividend Performance + Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 307 + + Yearly Anualmente @@ -4430,7 +4446,7 @@ Série Atual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 446 + 486 @@ -4438,7 +4454,7 @@ Série mais Longa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 495 @@ -4482,7 +4498,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 337 + 339 @@ -4673,6 +4689,14 @@ 175 + + Financial Advisor + Financial Advisor + + libs/ui/src/lib/i18n.ts + 110 + + Scraper Configuration Configuração do raspador @@ -4878,7 +4902,7 @@ Web libs/ui/src/lib/i18n.ts - 122 + 123 @@ -5840,7 +5864,7 @@ Stock Tracking libs/ui/src/lib/i18n.ts - 113 + 114 @@ -7241,7 +7265,7 @@ Gestão de patrimônio libs/ui/src/lib/i18n.ts - 115 + 116 @@ -7445,7 +7469,7 @@ Tax Reporting libs/ui/src/lib/i18n.ts - 114 + 115 @@ -7749,7 +7773,7 @@ Investment Research libs/ui/src/lib/i18n.ts - 111 + 112 @@ -7975,7 +7999,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 167 + 171 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8031,7 +8055,7 @@ Net Worth Tracking libs/ui/src/lib/i18n.ts - 112 + 113 @@ -8159,7 +8183,7 @@ Mudar libs/ui/src/lib/holdings-table/holdings-table.component.html - 159 + 160 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8195,11 +8219,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 184 + 185 libs/ui/src/lib/holdings-table/holdings-table.component.html - 185 + 186 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index d5308a8cf0..27af34b080 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -299,7 +299,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 161 + 163 @@ -315,7 +315,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 92 + 94 @@ -371,7 +371,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 34 + 35 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -387,7 +387,7 @@ Toplam libs/ui/src/lib/accounts-table/accounts-table.component.html - 61 + 63 @@ -423,7 +423,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 71 + 73 libs/ui/src/lib/activities-table/activities-table.component.html @@ -455,11 +455,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 196 + 198 libs/ui/src/lib/accounts-table/accounts-table.component.html - 231 + 233 libs/ui/src/lib/activities-table/activities-table.component.html @@ -471,7 +471,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 112 + 113 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -503,7 +503,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 348 + 350 libs/ui/src/lib/activities-table/activities-table.component.html @@ -551,7 +551,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 361 + 363 libs/ui/src/lib/activities-table/activities-table.component.html @@ -863,7 +863,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 63 + 64 @@ -1070,6 +1070,14 @@ 175 + + Financial Advisor + Financial Advisor + + libs/ui/src/lib/i18n.ts + 110 + + Scraper Configuration Veri Toplayıcı Yapılandırması @@ -1095,7 +1103,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 305 + 307 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1959,7 +1967,7 @@ Lütfen acil durum yedeği meblağını giriniz: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 169 + 173 @@ -1991,7 +1999,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 141 + 143 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1999,7 +2007,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 87 + 88 @@ -2491,7 +2499,7 @@ Financial Planning libs/ui/src/lib/i18n.ts - 110 + 111 @@ -3523,7 +3531,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 124 + 126 @@ -3682,6 +3690,14 @@ 71 + + Dividend Performance + Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 307 + + The following file formats are supported: Aşağıdaki dosya formatları desteklenmektedir: @@ -4023,7 +4039,7 @@ Üst apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 292 + 332 @@ -4031,7 +4047,7 @@ Alt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 343 + 383 @@ -4039,7 +4055,7 @@ Portföyün Gelişimi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 438 @@ -4047,7 +4063,7 @@ Yatırım Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 465 @@ -4055,7 +4071,7 @@ Güncel Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 446 + 486 @@ -4063,7 +4079,7 @@ En Uzun Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 495 @@ -4071,7 +4087,7 @@ Temettü Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 482 + 522 @@ -4684,7 +4700,7 @@ Stock Tracking libs/ui/src/lib/i18n.ts - 113 + 114 @@ -4708,7 +4724,7 @@ Web libs/ui/src/lib/i18n.ts - 122 + 123 @@ -5320,15 +5336,15 @@ Dağılım libs/ui/src/lib/accounts-table/accounts-table.component.html - 266 + 268 libs/ui/src/lib/holdings-table/holdings-table.component.html - 137 + 138 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 139 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5348,7 +5364,7 @@ Tümünü göster libs/ui/src/lib/holdings-table/holdings-table.component.html - 242 + 243 @@ -5664,7 +5680,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 337 + 339 @@ -5763,6 +5779,14 @@ 74 + + Absolute Dividend Performance + Absolute Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 288 + + Africa Afrika @@ -7241,7 +7265,7 @@ Zenginlik Yönetimi libs/ui/src/lib/i18n.ts - 115 + 116 @@ -7445,7 +7469,7 @@ Tax Reporting libs/ui/src/lib/i18n.ts - 114 + 115 @@ -7749,7 +7773,7 @@ Investment Research libs/ui/src/lib/i18n.ts - 111 + 112 @@ -7975,7 +7999,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 167 + 171 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8031,7 +8055,7 @@ Net Worth Tracking libs/ui/src/lib/i18n.ts - 112 + 113 @@ -8159,7 +8183,7 @@ Değişim libs/ui/src/lib/holdings-table/holdings-table.component.html - 159 + 160 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8195,11 +8219,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 184 + 185 libs/ui/src/lib/holdings-table/holdings-table.component.html - 185 + 186 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index ea186767f2..6943517691 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -367,7 +367,7 @@ Податкова звітність libs/ui/src/lib/i18n.ts - 114 + 115 @@ -423,7 +423,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 161 + 163 @@ -439,7 +439,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 92 + 94 @@ -519,7 +519,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 34 + 35 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -535,7 +535,7 @@ Загалом libs/ui/src/lib/accounts-table/accounts-table.component.html - 61 + 63 @@ -571,7 +571,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 71 + 73 libs/ui/src/lib/activities-table/activities-table.component.html @@ -603,11 +603,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 196 + 198 libs/ui/src/lib/accounts-table/accounts-table.component.html - 231 + 233 libs/ui/src/lib/activities-table/activities-table.component.html @@ -619,7 +619,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 112 + 113 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -651,7 +651,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 348 + 350 libs/ui/src/lib/activities-table/activities-table.component.html @@ -699,7 +699,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 361 + 363 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1027,7 +1027,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 63 + 64 @@ -1278,6 +1278,14 @@ 175 + + Financial Advisor + Financial Advisor + + libs/ui/src/lib/i18n.ts + 110 + + Scraper Configuration Конфігурація скребка @@ -1347,7 +1355,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 305 + 307 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1743,7 +1751,7 @@ Відстеження чистого капіталу libs/ui/src/lib/i18n.ts - 112 + 113 @@ -2103,7 +2111,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 141 + 143 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2111,7 +2119,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 87 + 88 @@ -2567,7 +2575,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 167 + 171 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -2595,7 +2603,7 @@ Будь ласка, встановіть суму вашого резервного фонду. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 169 + 173 @@ -2807,7 +2815,7 @@ Інвестиційні дослідження libs/ui/src/lib/i18n.ts - 111 + 112 @@ -3643,7 +3651,7 @@ Фінансове планування libs/ui/src/lib/i18n.ts - 110 + 111 @@ -4968,7 +4976,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 124 + 126 @@ -5187,6 +5195,14 @@ 71 + + Dividend Performance + Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 307 + + Choose or drop a file here Виберіть або перетягніть файл сюди @@ -5604,7 +5620,7 @@ Топ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 292 + 332 @@ -5612,7 +5628,7 @@ Низ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 343 + 383 @@ -5620,7 +5636,7 @@ Еволюція портфеля apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 438 @@ -5628,7 +5644,7 @@ Інвестиційний графік apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 465 @@ -5636,7 +5652,7 @@ Поточна серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 446 + 486 @@ -5644,7 +5660,7 @@ Найдовша серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 495 @@ -5652,7 +5668,7 @@ Графік дивідендів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 482 + 522 @@ -6371,7 +6387,7 @@ Управління багатством libs/ui/src/lib/i18n.ts - 115 + 116 @@ -6755,7 +6771,7 @@ Відстеження акцій libs/ui/src/lib/i18n.ts - 113 + 114 @@ -6779,7 +6795,7 @@ Веб libs/ui/src/lib/i18n.ts - 122 + 123 @@ -7271,15 +7287,15 @@ Розподіл libs/ui/src/lib/accounts-table/accounts-table.component.html - 266 + 268 libs/ui/src/lib/holdings-table/holdings-table.component.html - 137 + 138 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 139 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7299,7 +7315,7 @@ Показати все libs/ui/src/lib/holdings-table/holdings-table.component.html - 242 + 243 @@ -7739,7 +7755,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 337 + 339 @@ -7870,6 +7886,14 @@ 74 + + Absolute Dividend Performance + Absolute Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 288 + + Africa Африка @@ -8159,7 +8183,7 @@ Змінити libs/ui/src/lib/holdings-table/holdings-table.component.html - 159 + 160 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8195,11 +8219,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 184 + 185 libs/ui/src/lib/holdings-table/holdings-table.component.html - 185 + 186 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 726b23d4b5..bf03ea0e6c 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -305,7 +305,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 161 + 163 @@ -320,7 +320,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 92 + 94 @@ -397,7 +397,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 34 + 35 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -412,7 +412,7 @@ Total libs/ui/src/lib/accounts-table/accounts-table.component.html - 61 + 63 @@ -446,7 +446,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 71 + 73 libs/ui/src/lib/activities-table/activities-table.component.html @@ -477,11 +477,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 196 + 198 libs/ui/src/lib/accounts-table/accounts-table.component.html - 231 + 233 libs/ui/src/lib/activities-table/activities-table.component.html @@ -493,7 +493,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 112 + 113 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -524,7 +524,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 348 + 350 libs/ui/src/lib/activities-table/activities-table.component.html @@ -571,7 +571,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 361 + 363 libs/ui/src/lib/activities-table/activities-table.component.html @@ -865,7 +865,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 63 + 64 @@ -1102,6 +1102,13 @@ 175 + + Financial Advisor + + libs/ui/src/lib/i18n.ts + 110 + + Scraper Configuration @@ -1125,7 +1132,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 305 + 307 libs/ui/src/lib/activities-table/activities-table.component.html @@ -1978,7 +1985,7 @@ Please set the amount of your emergency fund. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 169 + 173 @@ -2007,7 +2014,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 141 + 143 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2015,7 +2022,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 87 + 88 @@ -2765,7 +2772,7 @@ Financial Planning libs/ui/src/lib/i18n.ts - 110 + 111 @@ -3928,7 +3935,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 124 + 126 @@ -4092,6 +4099,13 @@ 71 + + Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 307 + + Choose or drop a file here @@ -4390,49 +4404,49 @@ Top apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 292 + 332 Bottom apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 343 + 383 Portfolio Evolution apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 438 Investment Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 465 Current Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 446 + 486 Longest Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 495 Dividend Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 482 + 522 @@ -4986,7 +5000,7 @@ Stock Tracking libs/ui/src/lib/i18n.ts - 113 + 114 @@ -5007,7 +5021,7 @@ Web libs/ui/src/lib/i18n.ts - 122 + 123 @@ -5330,15 +5344,15 @@ Allocation libs/ui/src/lib/accounts-table/accounts-table.component.html - 266 + 268 libs/ui/src/lib/holdings-table/holdings-table.component.html - 137 + 138 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 139 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5357,7 +5371,7 @@ Show all libs/ui/src/lib/holdings-table/holdings-table.component.html - 242 + 243 @@ -5640,7 +5654,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 337 + 339 @@ -5743,6 +5757,13 @@ 74 + + Absolute Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 288 + + Africa @@ -6525,7 +6546,7 @@ Wealth Management libs/ui/src/lib/i18n.ts - 115 + 116 @@ -6829,7 +6850,7 @@ Tax Reporting libs/ui/src/lib/i18n.ts - 114 + 115 @@ -7051,7 +7072,7 @@ Investment Research libs/ui/src/lib/i18n.ts - 111 + 112 @@ -7255,7 +7276,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 167 + 171 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -7307,7 +7328,7 @@ Net Worth Tracking libs/ui/src/lib/i18n.ts - 112 + 113 @@ -7419,7 +7440,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 159 + 160 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7452,11 +7473,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 184 + 185 libs/ui/src/lib/holdings-table/holdings-table.component.html - 185 + 186 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 853f9dcc1f..8c43c4a725 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -328,7 +328,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 161 + 163 @@ -344,7 +344,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 92 + 94 @@ -424,7 +424,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 34 + 35 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -440,7 +440,7 @@ 总计 libs/ui/src/lib/accounts-table/accounts-table.component.html - 61 + 63 @@ -476,7 +476,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 71 + 73 libs/ui/src/lib/activities-table/activities-table.component.html @@ -508,11 +508,11 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 196 + 198 libs/ui/src/lib/accounts-table/accounts-table.component.html - 231 + 233 libs/ui/src/lib/activities-table/activities-table.component.html @@ -524,7 +524,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 112 + 113 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -556,7 +556,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 348 + 350 libs/ui/src/lib/activities-table/activities-table.component.html @@ -604,7 +604,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 361 + 363 libs/ui/src/lib/activities-table/activities-table.component.html @@ -928,7 +928,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 63 + 64 @@ -1167,6 +1167,14 @@ 175 + + Financial Advisor + Financial Advisor + + libs/ui/src/lib/i18n.ts + 110 + + Scraper Configuration 刮削配置 @@ -1192,7 +1200,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 305 + 307 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2140,7 +2148,7 @@ 请输入您的应急基金金额。 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 169 + 173 @@ -2172,7 +2180,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 141 + 143 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2180,7 +2188,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 87 + 88 @@ -3004,7 +3012,7 @@ 财务规划 libs/ui/src/lib/i18n.ts - 110 + 111 @@ -4284,7 +4292,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 124 + 126 @@ -4467,6 +4475,14 @@ 71 + + Dividend Performance + Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 307 + + Choose or drop a file here 在此处选择或放置文件 @@ -4800,7 +4816,7 @@ 顶部 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 292 + 332 @@ -4808,7 +4824,7 @@ 底部 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 343 + 383 @@ -4816,7 +4832,7 @@ 投资组合演变 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 398 + 438 @@ -4824,7 +4840,7 @@ 投资时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 425 + 465 @@ -4832,7 +4848,7 @@ 当前连胜 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 446 + 486 @@ -4840,7 +4856,7 @@ 最长连续纪录 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 495 @@ -4848,7 +4864,7 @@ 股息时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 482 + 522 @@ -5461,7 +5477,7 @@ 股票追踪 libs/ui/src/lib/i18n.ts - 113 + 114 @@ -5485,7 +5501,7 @@ 网页 libs/ui/src/lib/i18n.ts - 122 + 123 @@ -5845,15 +5861,15 @@ 分配 libs/ui/src/lib/accounts-table/accounts-table.component.html - 266 + 268 libs/ui/src/lib/holdings-table/holdings-table.component.html - 137 + 138 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 139 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5873,7 +5889,7 @@ 显示所有 libs/ui/src/lib/holdings-table/holdings-table.component.html - 242 + 243 @@ -6181,7 +6197,7 @@ libs/ui/src/lib/accounts-table/accounts-table.component.html - 337 + 339 @@ -6296,6 +6312,14 @@ 74 + + Absolute Dividend Performance + Absolute Dividend Performance + + apps/client/src/app/pages/portfolio/analysis/analysis-page.html + 288 + + Africa 非洲 @@ -7242,7 +7266,7 @@ 财富管理 libs/ui/src/lib/i18n.ts - 115 + 116 @@ -7446,7 +7470,7 @@ 税务报告 libs/ui/src/lib/i18n.ts - 114 + 115 @@ -7750,7 +7774,7 @@ 投资研究 libs/ui/src/lib/i18n.ts - 111 + 112 @@ -7976,7 +8000,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 167 + 171 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8032,7 +8056,7 @@ 净资产追踪 libs/ui/src/lib/i18n.ts - 112 + 113 @@ -8160,7 +8184,7 @@ 涨跌 libs/ui/src/lib/holdings-table/holdings-table.component.html - 159 + 160 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8196,11 +8220,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 184 + 185 libs/ui/src/lib/holdings-table/holdings-table.component.html - 185 + 186 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts diff --git a/libs/common/src/lib/interfaces/historical-data-item.interface.ts b/libs/common/src/lib/interfaces/historical-data-item.interface.ts index adb5b7e655..a733837d52 100644 --- a/libs/common/src/lib/interfaces/historical-data-item.interface.ts +++ b/libs/common/src/lib/interfaces/historical-data-item.interface.ts @@ -1,6 +1,8 @@ export interface HistoricalDataItem { averagePrice?: number; date: string; + dividendInBaseCurrency?: number; + dividendInPercentageWithCurrencyEffect?: number; grossPerformancePercent?: number; investmentValueWithCurrencyEffect?: number; marketPrice?: number; diff --git a/libs/common/src/lib/interfaces/portfolio-performance.interface.ts b/libs/common/src/lib/interfaces/portfolio-performance.interface.ts index 0698004d53..da0bb04f40 100644 --- a/libs/common/src/lib/interfaces/portfolio-performance.interface.ts +++ b/libs/common/src/lib/interfaces/portfolio-performance.interface.ts @@ -2,6 +2,8 @@ export interface PortfolioPerformance { annualizedPerformancePercent?: number; currentNetWorth?: number; currentValueInBaseCurrency: number; + dividendInBaseCurrency: number; + dividendPercentageWithCurrencyEffect?: number; netPerformance: number; netPerformancePercentage: number; netPerformancePercentageWithCurrencyEffect: number; diff --git a/libs/common/src/lib/interfaces/portfolio-summary.interface.ts b/libs/common/src/lib/interfaces/portfolio-summary.interface.ts index 4e6402d162..d9bd435b1b 100644 --- a/libs/common/src/lib/interfaces/portfolio-summary.interface.ts +++ b/libs/common/src/lib/interfaces/portfolio-summary.interface.ts @@ -7,7 +7,6 @@ export interface PortfolioSummary extends PortfolioPerformance { annualizedPerformancePercentWithCurrencyEffect: number; cash: number; dateOfFirstActivity?: Date; - dividendInBaseCurrency: number; dividendYieldPercent: number; dividendYieldPercentWithCurrencyEffect: number; emergencyFund: { diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index f713871dc8..9f891d3818 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -2,6 +2,21 @@ import { Product } from '@ghostfolio/common/interfaces'; export const personalFinanceTools: Product[] = ( [ + { + categories: [ + 'FAMILY_OFFICE', + 'FINANCIAL_ADVISOR', + 'NET_WORTH_TRACKING', + 'WEALTH_MANAGEMENT' + ], + key: '1fs-wealth', + name: '1fs Wealth', + origin: 'GB', + platforms: ['WEB'], + slogan: 'A single platform for all of your wealth.', + updatedAt: '2026-09-24', + url: 'https://www.1fs.co' + }, { categories: [ 'FAMILY_OFFICE', @@ -44,7 +59,6 @@ export const personalFinanceTools: Product[] = ( url: 'https://addepar.com' }, { - alias: 'APX', categories: ['FAMILY_OFFICE', 'FINANCIAL_ADVISOR', 'WEALTH_MANAGEMENT'], hasSelfHostingAbility: true, key: 'advent-portfolio-exchange', @@ -77,6 +91,22 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-09', url: 'https://akkuro.com' }, + { + categories: [ + 'FAMILY_OFFICE', + 'FINANCIAL_ADVISOR', + 'NET_WORTH_TRACKING', + 'WEALTH_MANAGEMENT' + ], + hasSelfHostingAbility: false, + key: 'aleta', + name: 'Aleta', + origin: 'US', + platforms: ['ANDROID', 'IOS', 'WEB'], + slogan: 'Family Office Software for Forward-Thinking Families', + updatedAt: '2026-09-24', + url: 'https://aleta.io' + }, { categories: ['ETF_TRACKING', 'STOCK_TRACKING'], founded: 2023, @@ -174,6 +204,26 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://altruist.com' }, + { + categories: ['BUDGETING', 'FINANCIAL_ADVISOR', 'WEALTH_MANAGEMENT'], + hasFreePlan: true, + key: 'alwy', + languages: [ + 'Dansk', + 'Deutsch', + 'English', + 'Nederlands', + 'Norsk', + 'Suomi', + 'Svenska' + ], + name: 'Alwy', + origin: 'SE', + platforms: ['IOS', 'WEB'], + slogan: 'Future-proof your business', + updatedAt: '2026-09-24', + url: 'https://alwy.se' + }, { categories: ['INVESTMENT_RESEARCH', 'STOCK_TRACKING'], founded: 2023, @@ -215,6 +265,21 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://anlage.app' }, + { + categories: [ + 'FAMILY_OFFICE', + 'FINANCIAL_ADVISOR', + 'TAX_REPORTING', + 'WEALTH_MANAGEMENT' + ], + key: 'arch', + name: 'Arch', + origin: 'US', + platforms: ['WEB'], + slogan: 'Private Markets. Simplified.', + updatedAt: '2026-09-24', + url: 'https://arch.com' + }, { categories: ['FAMILY_OFFICE', 'WEALTH_MANAGEMENT'], founded: 2002, @@ -240,6 +305,39 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-09-23', url: 'https://asignal.io' }, + { + categories: ['FAMILY_OFFICE', 'NET_WORTH_TRACKING', 'WEALTH_MANAGEMENT'], + founded: 2021, + hasFreePlan: false, + hasSelfHostingAbility: false, + key: 'asora', + name: 'Asora', + origin: 'IE', + platforms: ['ANDROID', 'IOS', 'WEB'], + pricingPerYear: '$10800', + slogan: 'Software for the modern family office', + updatedAt: '2026-09-24', + url: 'https://www.asora.com' + }, + { + categories: [ + 'FAMILY_OFFICE', + 'FINANCIAL_ADVISOR', + 'NET_WORTH_TRACKING', + 'WEALTH_MANAGEMENT' + ], + founded: 2011, + hasFreePlan: false, + hasSelfHostingAbility: false, + key: 'asset-vantage', + name: 'Asset Vantage', + platforms: ['ANDROID', 'IOS', 'WEB'], + pricingPerYear: '$30000', + slogan: + 'The Financial Operating System for Modern Family Offices and Their Advisors', + updatedAt: '2026-09-24', + url: 'https://www.assetvantage.com' + }, { categories: ['FAMILY_OFFICE'], founded: 2022, @@ -253,6 +351,33 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://www.asseta.ai' }, + { + categories: ['FAMILY_OFFICE', 'WEALTH_MANAGEMENT'], + key: 'atalaya', + languages: ['English', 'Español'], + name: 'Atalaya', + origin: 'ES', + slogan: 'Software for Family Offices', + updatedAt: '2026-09-24', + url: 'https://www.atalaya.ai' + }, + { + categories: [ + 'FAMILY_OFFICE', + 'FINANCIAL_ADVISOR', + 'NET_WORTH_TRACKING', + 'TAX_REPORTING', + 'WEALTH_MANAGEMENT' + ], + hasSelfHostingAbility: false, + key: 'atlasfive', + languages: ['English'], + name: 'AtlasFive®', + origin: 'US', + slogan: 'Experience Wealth Intelligence', + updatedAt: '2026-09-24', + url: 'https://eton-solutions.com' + }, { categories: ['WEALTH_MANAGEMENT'], founded: 2016, @@ -263,6 +388,20 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://www.atominvest.co' }, + { + categories: [ + 'FAMILY_OFFICE', + 'FINANCIAL_ADVISOR', + 'NET_WORTH_TRACKING', + 'WEALTH_MANAGEMENT' + ], + key: 'auria', + name: 'Auria', + platforms: ['WEB'], + slogan: 'Simplify the complexities of wealth with a unified solution', + updatedAt: '2026-09-24', + url: 'https://auriaplatform.com' + }, { categories: ['BUDGETING'], founded: 2020, @@ -506,6 +645,41 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-09', url: 'https://www.buxfer.com' }, + { + categories: [ + 'FAMILY_OFFICE', + 'FINANCIAL_ADVISOR', + 'NET_WORTH_TRACKING', + 'WEALTH_MANAGEMENT' + ], + founded: 2017, + hasSelfHostingAbility: false, + key: 'canopy', + languages: [ + 'Bahasa Indonesia', + 'Bahasa Melayu', + 'Deutsch', + 'English', + 'Español', + 'Français', + 'Italiano', + 'Português', + 'Tiếng Việt', + 'Русский', + 'العربية', + 'ภาษาไทย', + '日本語', + '简体中文', + '繁體中文', + '한국어' + ], + name: 'Canopy', + origin: 'SG', + platforms: ['ANDROID', 'IOS', 'WEB'], + slogan: 'All your wealth, finally understood.', + updatedAt: '2026-09-24', + url: 'https://www.canopy.cloud' + }, { categories: ['NET_WORTH_TRACKING'], hasFreePlan: true, @@ -557,6 +731,19 @@ export const personalFinanceTools: Product[] = ( slogan: 'Toma el control total de tus finanzas.', updatedAt: '2025-07-27' }, + { + categories: ['FAMILY_OFFICE', 'FINANCIAL_ADVISOR', 'WEALTH_MANAGEMENT'], + founded: 2016, + hasFreePlan: false, + key: 'clockwork', + name: 'Clockwork', + origin: 'US', + platforms: ['WEB'], + slogan: + 'Manage your alternative investments, and everything else, with Clockwork.', + updatedAt: '2026-09-24', + url: 'https://www.clockwork.app' + }, { categories: ['WEALTH_MANAGEMENT'], founded: 2011, @@ -882,6 +1069,22 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-08-16', url: 'https://www.donkycapital.com' }, + { + categories: [ + 'FAMILY_OFFICE', + 'NET_WORTH_TRACKING', + 'TAX_REPORTING', + 'WEALTH_MANAGEMENT' + ], + founded: 2006, + key: 'elysys', + name: 'Elysys', + origin: 'MC', + slogan: + 'Complete front-to-back investment accounting and portfolio management on Business Central', + updatedAt: '2026-09-24', + url: 'https://www.elysys.com' + }, { categories: ['BUDGETING', 'FINANCIAL_ADVISOR', 'FINANCIAL_PLANNING'], hasSelfHostingAbility: false, @@ -1116,6 +1319,17 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-08-16', url: 'https://extraetf.com' }, + { + categories: ['FAMILY_OFFICE', 'FINANCIAL_ADVISOR', 'WEALTH_MANAGEMENT'], + hasSelfHostingAbility: false, + key: 'fa-platform', + languages: ['English'], + name: 'FA Platform', + origin: 'FI', + slogan: 'Empowering Investment Management with Innovation', + updatedAt: '2026-09-24', + url: 'https://fasolutions.com' + }, { categories: ['INVESTMENT_RESEARCH'], key: 'factorstoday', @@ -1442,6 +1656,20 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://www.fundmanagersoftware.com' }, + { + categories: ['FAMILY_OFFICE', 'TAX_REPORTING', 'WEALTH_MANAGEMENT'], + founded: 1999, + hasFreePlan: false, + hasSelfHostingAbility: true, + key: 'fundcount', + name: 'FundCount', + origin: 'BB', + platforms: ['LINUX', 'MACOS', 'WEB', 'WINDOWS'], + pricingPerYear: '$14450', + slogan: 'One source of truth for every entity, fund, and asset class.', + updatedAt: '2026-09-24', + url: 'https://fundcount.com' + }, { categories: ['BUDGETING'], hasFreePlan: true, @@ -1626,6 +1854,16 @@ export const personalFinanceTools: Product[] = ( pricingPerYear: '$120', updatedAt: '2025-08-27' }, + { + categories: ['FAMILY_OFFICE', 'FINANCIAL_ADVISOR', 'WEALTH_MANAGEMENT'], + key: 'infront', + name: 'Infront', + origin: 'NO', + platforms: ['WEB'], + slogan: 'Built for Complex Wealth. Made for Family Offices', + updatedAt: '2026-09-24', + url: 'https://www.infront.co/global/en/your-industry/wealth/family-offices.html' + }, { categories: ['INVESTMENT_RESEARCH'], hasFreePlan: true, @@ -1760,6 +1998,18 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-09-23', url: 'https://istfin.com' }, + { + categories: ['FAMILY_OFFICE', 'FINANCIAL_ADVISOR', 'WEALTH_MANAGEMENT'], + hasSelfHostingAbility: false, + key: 'j-ray', + languages: ['English'], + name: 'J-Ray', + origin: 'FI', + platforms: ['WEB'], + slogan: 'The Guiding Light for Complex Wealth', + updatedAt: '2026-09-24', + url: 'https://jaysolutions.com' + }, { categories: ['ETF_TRACKING'], founded: 2011, @@ -1774,6 +2024,18 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://www.justetf.com' }, + { + categories: ['FAMILY_OFFICE', 'FINANCIAL_ADVISOR', 'WEALTH_MANAGEMENT'], + founded: 2004, + hasSelfHostingAbility: true, + key: 'keesense', + languages: ['English', 'Français'], + name: 'KeeSense', + origin: 'MC', + slogan: 'Augmented Wealth Management', + updatedAt: '2026-09-24', + url: 'https://www.keesystem.com' + }, { categories: ['CRYPTOCURRENCY', 'TAX_REPORTING'], founded: 2018, @@ -2233,6 +2495,23 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://myfinancetools.io' }, + { + categories: [ + 'FAMILY_OFFICE', + 'FINANCIAL_ADVISOR', + 'NET_WORTH_TRACKING', + 'WEALTH_MANAGEMENT' + ], + hasSelfHostingAbility: false, + key: 'myfo', + languages: ['English'], + name: 'MYFO', + origin: 'CA', + platforms: ['WEB'], + slogan: 'The First Full Family Office Operating System', + updatedAt: '2026-09-24', + url: 'https://www.myfotech.com' + }, { categories: ['CRYPTOCURRENCY', 'NET_WORTH_TRACKING', 'STOCK_TRACKING'], hasFreePlan: true, @@ -2499,6 +2778,19 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://www.getpennies.com' }, + { + categories: ['FAMILY_OFFICE', 'FINANCIAL_ADVISOR', 'WEALTH_MANAGEMENT'], + founded: 2020, + hasSelfHostingAbility: false, + key: 'performativ', + languages: ['Deutsch', 'English', 'Nederlands'], + name: 'Performativ', + origin: 'DK', + platforms: ['WEB'], + slogan: 'The Operating System Powering Tomorrow’s Wealth Management', + updatedAt: '2026-09-24', + url: 'https://www.performativ.com' + }, { categories: ['FAMILY_OFFICE'], hasFreePlan: true, @@ -2552,6 +2844,22 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://www.plannix.co' }, + { + categories: [ + 'CRYPTOCURRENCY', + 'FAMILY_OFFICE', + 'FINANCIAL_ADVISOR', + 'WEALTH_MANAGEMENT' + ], + founded: 2012, + hasSelfHostingAbility: true, + key: 'pmplus', + name: 'PMplus®', + origin: 'CH', + platforms: ['WEB'], + updatedAt: '2026-09-24', + url: 'https://www.suissetechpartners.com' + }, { categories: ['BUDGETING'], founded: 2015, @@ -2582,6 +2890,17 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://www.pocketsmith.com' }, + { + categories: ['FAMILY_OFFICE', 'FINANCIAL_ADVISOR', 'WEALTH_MANAGEMENT'], + founded: 2017, + key: 'point', + languages: ['English'], + name: 'Point', + origin: 'GB', + slogan: 'AI-Ready Investment Data', + updatedAt: '2026-09-24', + url: 'https://pointgroup.io' + }, { categories: ['FINANCIAL_PLANNING', 'WEALTH_MANAGEMENT'], hasFreePlan: false, @@ -2775,6 +3094,16 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://www.portseido.com' }, + { + categories: ['FAMILY_OFFICE', 'FINANCIAL_ADVISOR', 'WEALTH_MANAGEMENT'], + key: 'private-wealth-systems', + name: 'Private Wealth Systems', + origin: 'US', + platforms: ['WEB'], + slogan: 'Portfolio Management & Reporting Software', + updatedAt: '2026-09-24', + url: 'https://privatewealthsystems.com' + }, { categories: ['FINANCIAL_PLANNING'], founded: 2021, @@ -2815,6 +3144,23 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-09-23', url: 'https://www.assetbook.com' }, + { + categories: [ + 'FAMILY_OFFICE', + 'FINANCIAL_ADVISOR', + 'TAX_REPORTING', + 'WEALTH_MANAGEMENT' + ], + founded: 2012, + key: 'qplix', + languages: ['Deutsch', 'English'], + name: 'QPLIX', + origin: 'DE', + platforms: ['IOS', 'WEB'], + slogan: 'Your Software to Master Wealth Management.', + updatedAt: '2026-09-24', + url: 'https://www.qplix.com' + }, { categories: ['NET_WORTH_TRACKING'], hasSelfHostingAbility: false, @@ -2963,6 +3309,20 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://www.segmio.com' }, + { + categories: ['FAMILY_OFFICE', 'FINANCIAL_ADVISOR', 'WEALTH_MANAGEMENT'], + founded: 2019, + hasFreePlan: false, + hasSelfHostingAbility: false, + key: 'sesame-one', + name: 'Sesame One', + origin: 'GB', + platforms: ['WEB'], + pricingPerYear: '£20000', + slogan: 'Spend more time building investment value, not spreadsheets', + updatedAt: '2026-09-24', + url: 'https://www.landytech.com' + }, { categories: ['INVESTMENT_RESEARCH', 'STOCK_TRACKING'], key: 'sharescope', @@ -3360,6 +3720,30 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://www.sumio.app' }, + { + categories: ['FAMILY_OFFICE'], + hasFreePlan: false, + hasSelfHostingAbility: false, + key: 'sumit', + languages: ['English'], + name: 'SumIt', + platforms: ['WEB'], + slogan: 'Powerfully simple family office accounting.', + updatedAt: '2026-09-24', + url: 'https://getsumit.com' + }, + { + categories: ['FAMILY_OFFICE', 'WEALTH_MANAGEMENT'], + hasSelfHostingAbility: true, + key: 'swimbird', + languages: ['English'], + name: 'Swimbird', + origin: 'SE', + platforms: ['ANDROID', 'IOS'], + slogan: 'Wealth Management Software', + updatedAt: '2026-09-24', + url: 'https://www.swimbird.com' + }, { categories: ['INVESTMENT_RESEARCH'], key: 'tc2000', @@ -3408,6 +3792,22 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://tiller.com' }, + { + categories: [ + 'FINANCIAL_ADVISOR', + 'INVESTMENT_RESEARCH', + 'WEALTH_MANAGEMENT' + ], + founded: 2010, + hasFreePlan: false, + key: 'tindeco', + languages: ['English'], + name: 'Tindeco', + origin: 'CH', + slogan: 'Scalable Investing Made Simple', + updatedAt: '2026-09-24', + url: 'https://tindecofs.com' + }, { categories: ['CRYPTOCURRENCY', 'DIVIDEND_TRACKING', 'STOCK_TRACKING'], hasFreePlan: true, @@ -3858,6 +4258,17 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://www.wallstreetzen.com' }, + { + categories: ['FINANCIAL_ADVISOR', 'FINANCIAL_PLANNING'], + key: 'wealth-wizards', + languages: ['English'], + name: 'Wealth Wizards', + origin: 'GB', + regions: ['GB'], + slogan: 'Get new regime ready.', + updatedAt: '2026-09-24', + url: 'https://www.wealthwizards.com' + }, { categories: ['FAMILY_OFFICE', 'TAX_REPORTING'], founded: 2001, @@ -3940,6 +4351,18 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-07-05', url: 'https://www.wealthposition.com' }, + { + categories: ['FAMILY_OFFICE', 'FINANCIAL_ADVISOR', 'WEALTH_MANAGEMENT'], + hasSelfHostingAbility: true, + key: 'wealthspectrum', + languages: ['English'], + name: 'WealthSpectrum', + origin: 'IN', + platforms: ['WEB'], + slogan: 'Powering smart investment operations', + updatedAt: '2026-09-24', + url: 'https://www.wealthspectrum.com' + }, { categories: ['STOCK_TRACKING'], founded: 2018, @@ -3970,6 +4393,18 @@ export const personalFinanceTools: Product[] = ( updatedAt: '2026-08-28', url: 'https://www.wisesheets.io' }, + { + categories: ['FAMILY_OFFICE', 'FINANCIAL_ADVISOR', 'WEALTH_MANAGEMENT'], + founded: 2010, + hasSelfHostingAbility: true, + key: 'wize', + languages: ['English'], + name: 'WIZE', + origin: 'CH', + slogan: 'The all-in-one Wealth & Asset management IT platform', + updatedAt: '2026-09-24', + url: 'https://www.wize.net' + }, { categories: [ 'FINANCIAL_ADVISOR', diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.html b/libs/ui/src/lib/accounts-table/accounts-table.component.html index a01abff1a8..60be93ad8a 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.html +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -50,13 +50,15 @@ Name - - {{ element.name }} +
+ + {{ element.name }} +
Total diff --git a/package-lock.json b/package-lock.json index b3eae247c2..0bccf99a2b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "3.73.0", + "version": "3.74.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "3.73.0", + "version": "3.74.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { @@ -59,7 +59,7 @@ "bull": "4.16.5", "chart.js": "4.5.1", "chartjs-adapter-date-fns": "3.0.0", - "chartjs-chart-treemap": "4.2.0", + "chartjs-chart-treemap": "4.2.2", "chartjs-plugin-annotation": "3.1.0", "chartjs-plugin-datalabels": "2.2.0", "cheerio": "1.2.0", @@ -18249,9 +18249,9 @@ } }, "node_modules/chartjs-chart-treemap": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chartjs-chart-treemap/-/chartjs-chart-treemap-4.2.0.tgz", - "integrity": "sha512-2ghdKHbknLYEzqD2fRTbACOzEhuH/f7zI5t6dbQ3cAOS+ric4mLjll6Sxsaugy/HFU0KUftJEszYOvtay3wFSQ==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/chartjs-chart-treemap/-/chartjs-chart-treemap-4.2.2.tgz", + "integrity": "sha512-gmOVr5bokdhs0RsHqrnj1oQu9ybaRjdlXubzLhmRB9DsRnpY51WmyqxUd8JCCKbnFVru1yjdeOTXyqeMIFhxlg==", "license": "MIT", "peerDependencies": { "chart.js": ">=3.0.0" diff --git a/package.json b/package.json index 5648ac6693..bb1c66a955 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "3.73.0", + "version": "3.74.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", @@ -103,7 +103,7 @@ "bull": "4.16.5", "chart.js": "4.5.1", "chartjs-adapter-date-fns": "3.0.0", - "chartjs-chart-treemap": "4.2.0", + "chartjs-chart-treemap": "4.2.2", "chartjs-plugin-annotation": "3.1.0", "chartjs-plugin-datalabels": "2.2.0", "cheerio": "1.2.0",