Browse Source

Merge branch 'main' into #3955-Extend-notification-service-by-prompt-functionality

pull/4117/head
Thomas Kaul 8 months ago
committed by GitHub
parent
commit
a57b99e420
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 15
      CHANGELOG.md
  2. 6
      apps/api/src/app/admin/admin.controller.ts
  3. 2
      apps/api/src/app/app.module.ts
  4. 136
      apps/api/src/app/endpoints/market-data/market-data.controller.ts
  5. 13
      apps/api/src/app/endpoints/market-data/market-data.module.ts
  6. 24
      apps/api/src/app/endpoints/market-data/update-bulk-market-data.dto.ts
  7. 10
      apps/api/src/app/import/import.service.ts
  8. 3
      apps/api/src/app/order/order.service.ts
  9. 9
      apps/api/src/app/portfolio/portfolio.controller.ts
  10. 32
      apps/api/src/app/portfolio/portfolio.service.ts
  11. 30
      apps/api/src/app/user/user.service.ts
  12. 95
      apps/api/src/models/rules/asset-class-cluster-risk/equity.ts
  13. 95
      apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts
  14. 17
      apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts
  15. 2
      apps/client/project.json
  16. 4
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
  17. 2
      apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts
  18. 2
      apps/client/src/app/core/auth.guard.ts
  19. 63
      apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
  20. 8
      apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.ts
  21. 2
      apps/client/src/app/pages/webauthn/webauthn-page.component.ts
  22. 39
      apps/client/src/app/services/admin.service.ts
  23. 39
      apps/client/src/app/services/data.service.ts
  24. 52
      apps/client/src/locales/messages.ca.xlf
  25. 52
      apps/client/src/locales/messages.de.xlf
  26. 52
      apps/client/src/locales/messages.es.xlf
  27. 52
      apps/client/src/locales/messages.fr.xlf
  28. 52
      apps/client/src/locales/messages.it.xlf
  29. 52
      apps/client/src/locales/messages.nl.xlf
  30. 52
      apps/client/src/locales/messages.pl.xlf
  31. 52
      apps/client/src/locales/messages.pt.xlf
  32. 52
      apps/client/src/locales/messages.tr.xlf
  33. 50
      apps/client/src/locales/messages.xlf
  34. 52
      apps/client/src/locales/messages.zh.xlf
  35. 1
      libs/common/src/lib/interfaces/enhanced-symbol-profile.interface.ts
  36. 2
      libs/common/src/lib/interfaces/index.ts
  37. 8
      libs/common/src/lib/interfaces/responses/market-data-details-response.interface.ts
  38. 2
      libs/common/src/lib/interfaces/x-ray-rules-settings.interface.ts
  39. 15
      libs/common/src/lib/permissions.ts
  40. 4
      libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts
  41. 6
      libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts
  42. 12
      package-lock.json
  43. 4
      package.json
  44. 15
      prisma/migrations/20241214091912_added_user_to_symbol_profile/migration.sql
  45. 17
      prisma/schema.prisma

15
CHANGELOG.md

@ -9,11 +9,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- Added a new static portfolio analysis rule: _Asset Class Cluster Risk_ (Equity)
- Added a new static portfolio analysis rule: _Asset Class Cluster Risk_ (Fixed Income)
- Set up a notification service for prompt dialogs
### Changed
- Improved the usability to edit the emergency fund
- Extracted the market data management from the admin control panel endpoint to a dedicated endpoint
- Upgraded `big.js` from version `6.2.1` to `6.2.2`
## 2.129.0 - 2024-12-14
### Added
- Added `userId` to the `SymbolProfile` database schema
### Changed
- Improved the usability of the _X-ray_ page by hiding empty rule categories
- Improved the language localization for German (`de`)
## 2.128.0 - 2024-12-12

6
apps/api/src/app/admin/admin.controller.ts

@ -214,6 +214,9 @@ export class AdminController {
});
}
/**
* @deprecated
*/
@Get('market-data/:dataSource/:symbol')
@HasPermission(permissions.accessAdminControl)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
@ -250,6 +253,9 @@ export class AdminController {
}
}
/**
* @deprecated
*/
@HasPermission(permissions.accessAdminControl)
@Post('market-data/:dataSource/:symbol')
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)

2
apps/api/src/app/app.module.ts

@ -33,6 +33,7 @@ import { BenchmarkModule } from './benchmark/benchmark.module';
import { CacheModule } from './cache/cache.module';
import { ApiKeysModule } from './endpoints/api-keys/api-keys.module';
import { GhostfolioModule } from './endpoints/data-providers/ghostfolio/ghostfolio.module';
import { MarketDataModule } from './endpoints/market-data/market-data.module';
import { PublicModule } from './endpoints/public/public.module';
import { ExchangeRateModule } from './exchange-rate/exchange-rate.module';
import { ExportModule } from './export/export.module';
@ -84,6 +85,7 @@ import { UserModule } from './user/user.module';
ImportModule,
InfoModule,
LogoModule,
MarketDataModule,
OrderModule,
PlatformModule,
PortfolioModule,

136
apps/api/src/app/endpoints/market-data/market-data.controller.ts

@ -0,0 +1,136 @@
import { AdminService } from '@ghostfolio/api/app/admin/admin.service';
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
import { MarketDataDetailsResponse } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { RequestWithUser } from '@ghostfolio/common/types';
import {
Body,
Controller,
Get,
HttpException,
Inject,
Param,
Post,
UseGuards
} from '@nestjs/common';
import { REQUEST } from '@nestjs/core';
import { AuthGuard } from '@nestjs/passport';
import { DataSource, Prisma } from '@prisma/client';
import { parseISO } from 'date-fns';
import { getReasonPhrase, StatusCodes } from 'http-status-codes';
import { UpdateBulkMarketDataDto } from './update-bulk-market-data.dto';
@Controller('market-data')
export class MarketDataController {
public constructor(
private readonly adminService: AdminService,
private readonly marketDataService: MarketDataService,
@Inject(REQUEST) private readonly request: RequestWithUser,
private readonly symbolProfileService: SymbolProfileService
) {}
@Get(':dataSource/:symbol')
@UseGuards(AuthGuard('jwt'))
public async getMarketDataBySymbol(
@Param('dataSource') dataSource: DataSource,
@Param('symbol') symbol: string
): Promise<MarketDataDetailsResponse> {
const [assetProfile] = await this.symbolProfileService.getSymbolProfiles([
{ dataSource, symbol }
]);
if (!assetProfile) {
throw new HttpException(
getReasonPhrase(StatusCodes.NOT_FOUND),
StatusCodes.NOT_FOUND
);
}
const canReadAllAssetProfiles = hasPermission(
this.request.user.permissions,
permissions.readMarketData
);
const canReadOwnAssetProfile =
assetProfile.userId === this.request.user.id &&
hasPermission(
this.request.user.permissions,
permissions.readMarketDataOfOwnAssetProfile
);
if (!canReadAllAssetProfiles && !canReadOwnAssetProfile) {
throw new HttpException(
assetProfile.userId
? getReasonPhrase(StatusCodes.NOT_FOUND)
: getReasonPhrase(StatusCodes.FORBIDDEN),
assetProfile.userId ? StatusCodes.NOT_FOUND : StatusCodes.FORBIDDEN
);
}
return this.adminService.getMarketDataBySymbol({ dataSource, symbol });
}
@Post(':dataSource/:symbol')
@UseGuards(AuthGuard('jwt'))
public async updateMarketData(
@Body() data: UpdateBulkMarketDataDto,
@Param('dataSource') dataSource: DataSource,
@Param('symbol') symbol: string
) {
const [assetProfile] = await this.symbolProfileService.getSymbolProfiles([
{ dataSource, symbol }
]);
if (!assetProfile) {
throw new HttpException(
getReasonPhrase(StatusCodes.NOT_FOUND),
StatusCodes.NOT_FOUND
);
}
const canUpsertAllAssetProfiles =
hasPermission(
this.request.user.permissions,
permissions.createMarketData
) &&
hasPermission(
this.request.user.permissions,
permissions.updateMarketData
);
const canUpsertOwnAssetProfile =
assetProfile.userId === this.request.user.id &&
hasPermission(
this.request.user.permissions,
permissions.createMarketDataOfOwnAssetProfile
) &&
hasPermission(
this.request.user.permissions,
permissions.updateMarketDataOfOwnAssetProfile
);
if (!canUpsertAllAssetProfiles && !canUpsertOwnAssetProfile) {
throw new HttpException(
getReasonPhrase(StatusCodes.FORBIDDEN),
StatusCodes.FORBIDDEN
);
}
const dataBulkUpdate: Prisma.MarketDataUpdateInput[] = data.marketData.map(
({ date, marketPrice }) => ({
dataSource,
marketPrice,
symbol,
date: parseISO(date),
state: 'CLOSE'
})
);
return this.marketDataService.updateMany({
data: dataBulkUpdate
});
}
}

13
apps/api/src/app/endpoints/market-data/market-data.module.ts

@ -0,0 +1,13 @@
import { AdminModule } from '@ghostfolio/api/app/admin/admin.module';
import { MarketDataModule as MarketDataServiceModule } from '@ghostfolio/api/services/market-data/market-data.module';
import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module';
import { Module } from '@nestjs/common';
import { MarketDataController } from './market-data.controller';
@Module({
controllers: [MarketDataController],
imports: [AdminModule, MarketDataServiceModule, SymbolProfileModule]
})
export class MarketDataModule {}

24
apps/api/src/app/endpoints/market-data/update-bulk-market-data.dto.ts

@ -0,0 +1,24 @@
import { Type } from 'class-transformer';
import {
ArrayNotEmpty,
IsArray,
IsISO8601,
IsNumber,
IsOptional
} from 'class-validator';
export class UpdateBulkMarketDataDto {
@ArrayNotEmpty()
@IsArray()
@Type(() => UpdateMarketDataDto)
marketData: UpdateMarketDataDto[];
}
class UpdateMarketDataDto {
@IsISO8601()
@IsOptional()
date?: string;
@IsNumber()
marketPrice: number;
}

10
apps/api/src/app/import/import.service.ts

@ -224,7 +224,7 @@ export class ImportService {
for (const activity of activitiesDto) {
if (!activity.dataSource) {
if (activity.type === 'ITEM' || activity.type === 'LIABILITY') {
if (['FEE', 'INTEREST', 'ITEM', 'LIABILITY'].includes(activity.type)) {
activity.dataSource = DataSource.MANUAL;
} else {
activity.dataSource =
@ -356,6 +356,7 @@ export class ImportService {
quantity,
type,
unitPrice,
Account: validatedAccount,
accountId: validatedAccount?.id,
accountUserId: undefined,
createdAt: new Date(),
@ -380,10 +381,10 @@ export class ImportService {
symbolMapping,
updatedAt,
url,
comment: assetProfile.comment,
currency: assetProfile.currency,
comment: assetProfile.comment
userId: dataSource === 'MANUAL' ? user.id : undefined
},
Account: validatedAccount,
symbolProfileId: undefined,
updatedAt: new Date(),
userId: user.id
@ -406,7 +407,8 @@ export class ImportService {
create: {
dataSource,
symbol,
currency: assetProfile.currency
currency: assetProfile.currency,
userId: dataSource === 'MANUAL' ? user.id : undefined
},
where: {
dataSource_symbol: {

3
apps/api/src/app/order/order.service.ts

@ -93,7 +93,7 @@ export class OrderService {
userId: string;
}
): Promise<Order> {
let Account;
let Account: Prisma.AccountCreateNestedOneWithoutOrderInput;
if (data.accountId) {
Account = {
@ -124,6 +124,7 @@ export class OrderService {
data.SymbolProfile.connectOrCreate.create.dataSource = dataSource;
data.SymbolProfile.connectOrCreate.create.name = name;
data.SymbolProfile.connectOrCreate.create.symbol = id;
data.SymbolProfile.connectOrCreate.create.userId = userId;
data.SymbolProfile.connectOrCreate.where.dataSource_symbol = {
dataSource,
symbol: id

9
apps/api/src/app/portfolio/portfolio.controller.ts

@ -619,10 +619,13 @@ export class PortfolioController {
this.request.user.subscription.type === 'Basic'
) {
for (const rule in report.rules) {
if (report.rules[rule]) {
report.rules[rule] = [];
}
report.rules[rule] = null;
}
report.statistics = {
rulesActiveCount: 0,
rulesFulfilledCount: 0
};
}
return report;

32
apps/api/src/app/portfolio/portfolio.service.ts

@ -7,6 +7,8 @@ import { UserService } from '@ghostfolio/api/app/user/user.service';
import { getFactor } from '@ghostfolio/api/helper/portfolio.helper';
import { AccountClusterRiskCurrentInvestment } from '@ghostfolio/api/models/rules/account-cluster-risk/current-investment';
import { AccountClusterRiskSingleAccount } from '@ghostfolio/api/models/rules/account-cluster-risk/single-account';
import { AssetClassClusterRiskEquity } from '@ghostfolio/api/models/rules/asset-class-cluster-risk/equity';
import { AssetClassClusterRiskFixedIncome } from '@ghostfolio/api/models/rules/asset-class-cluster-risk/fixed-income';
import { CurrencyClusterRiskBaseCurrencyCurrentInvestment } from '@ghostfolio/api/models/rules/currency-cluster-risk/base-currency-current-investment';
import { CurrencyClusterRiskCurrentInvestment } from '@ghostfolio/api/models/rules/currency-cluster-risk/current-investment';
import { EconomicMarketClusterRiskDevelopedMarkets } from '@ghostfolio/api/models/rules/economic-market-cluster-risk/developed-markets';
@ -1198,19 +1200,17 @@ export class PortfolioService {
userSettings
)
: undefined,
economicMarketClusterRisk:
assetClassClusterRisk:
summary.ordersCount > 0
? await this.rulesService.evaluate(
[
new EconomicMarketClusterRiskDevelopedMarkets(
new AssetClassClusterRiskEquity(
this.exchangeRateDataService,
marketsTotalInBaseCurrency,
markets.developedMarkets.valueInBaseCurrency
Object.values(holdings)
),
new EconomicMarketClusterRiskEmergingMarkets(
new AssetClassClusterRiskFixedIncome(
this.exchangeRateDataService,
marketsTotalInBaseCurrency,
markets.emergingMarkets.valueInBaseCurrency
Object.values(holdings)
)
],
userSettings
@ -1232,6 +1232,24 @@ export class PortfolioService {
userSettings
)
: undefined,
economicMarketClusterRisk:
summary.ordersCount > 0
? await this.rulesService.evaluate(
[
new EconomicMarketClusterRiskDevelopedMarkets(
this.exchangeRateDataService,
marketsTotalInBaseCurrency,
markets.developedMarkets.valueInBaseCurrency
),
new EconomicMarketClusterRiskEmergingMarkets(
this.exchangeRateDataService,
marketsTotalInBaseCurrency,
markets.emergingMarkets.valueInBaseCurrency
)
],
userSettings
)
: undefined,
emergencyFund: await this.rulesService.evaluate(
[
new EmergencyFundSetup(

30
apps/api/src/app/user/user.service.ts

@ -5,6 +5,8 @@ import { PortfolioChangedEvent } from '@ghostfolio/api/events/portfolio-changed.
import { getRandomString } from '@ghostfolio/api/helper/string.helper';
import { AccountClusterRiskCurrentInvestment } from '@ghostfolio/api/models/rules/account-cluster-risk/current-investment';
import { AccountClusterRiskSingleAccount } from '@ghostfolio/api/models/rules/account-cluster-risk/single-account';
import { AssetClassClusterRiskEquity } from '@ghostfolio/api/models/rules/asset-class-cluster-risk/equity';
import { AssetClassClusterRiskFixedIncome } from '@ghostfolio/api/models/rules/asset-class-cluster-risk/fixed-income';
import { CurrencyClusterRiskBaseCurrencyCurrentInvestment } from '@ghostfolio/api/models/rules/currency-cluster-risk/base-currency-current-investment';
import { CurrencyClusterRiskCurrentInvestment } from '@ghostfolio/api/models/rules/currency-cluster-risk/current-investment';
import { EconomicMarketClusterRiskDevelopedMarkets } from '@ghostfolio/api/models/rules/economic-market-cluster-risk/developed-markets';
@ -226,25 +228,33 @@ export class UserService {
undefined,
{}
).getSettings(user.Settings.settings),
EconomicMarketClusterRiskDevelopedMarkets:
new EconomicMarketClusterRiskDevelopedMarkets(
undefined,
AssetClassClusterRiskEquity: new AssetClassClusterRiskEquity(
undefined,
undefined
).getSettings(user.Settings.settings),
AssetClassClusterRiskFixedIncome: new AssetClassClusterRiskFixedIncome(
undefined,
undefined
).getSettings(user.Settings.settings),
CurrencyClusterRiskBaseCurrencyCurrentInvestment:
new CurrencyClusterRiskBaseCurrencyCurrentInvestment(
undefined,
undefined
).getSettings(user.Settings.settings),
EconomicMarketClusterRiskEmergingMarkets:
new EconomicMarketClusterRiskEmergingMarkets(
undefined,
CurrencyClusterRiskCurrentInvestment:
new CurrencyClusterRiskCurrentInvestment(
undefined,
undefined
).getSettings(user.Settings.settings),
CurrencyClusterRiskBaseCurrencyCurrentInvestment:
new CurrencyClusterRiskBaseCurrencyCurrentInvestment(
EconomicMarketClusterRiskDevelopedMarkets:
new EconomicMarketClusterRiskDevelopedMarkets(
undefined,
undefined,
undefined
).getSettings(user.Settings.settings),
CurrencyClusterRiskCurrentInvestment:
new CurrencyClusterRiskCurrentInvestment(
EconomicMarketClusterRiskEmergingMarkets:
new EconomicMarketClusterRiskEmergingMarkets(
undefined,
undefined,
undefined
).getSettings(user.Settings.settings),

95
apps/api/src/models/rules/asset-class-cluster-risk/equity.ts

@ -0,0 +1,95 @@
import { RuleSettings } from '@ghostfolio/api/models/interfaces/rule-settings.interface';
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { PortfolioPosition, UserSettings } from '@ghostfolio/common/interfaces';
export class AssetClassClusterRiskEquity extends Rule<Settings> {
private holdings: PortfolioPosition[];
public constructor(
protected exchangeRateDataService: ExchangeRateDataService,
holdings: PortfolioPosition[]
) {
super(exchangeRateDataService, {
key: AssetClassClusterRiskEquity.name,
name: 'Equity'
});
this.holdings = holdings;
}
public evaluate(ruleSettings: Settings) {
const holdingsGroupedByAssetClass = this.groupCurrentHoldingsByAttribute(
this.holdings,
'assetClass',
ruleSettings.baseCurrency
);
let totalValue = 0;
const equityValueInBaseCurrency =
holdingsGroupedByAssetClass.find(({ groupKey }) => {
return groupKey === 'EQUITY';
})?.value ?? 0;
for (const { value } of holdingsGroupedByAssetClass) {
totalValue += value;
}
const equityValueRatio = totalValue
? equityValueInBaseCurrency / totalValue
: 0;
if (equityValueRatio > ruleSettings.thresholdMax) {
return {
evaluation: `The equity contribution of your current investment (${(equityValueRatio * 100).toPrecision(3)}%) exceeds ${(
ruleSettings.thresholdMax * 100
).toPrecision(3)}%`,
value: false
};
} else if (equityValueRatio < ruleSettings.thresholdMin) {
return {
evaluation: `The equity contribution of your current investment (${(equityValueRatio * 100).toPrecision(3)}%) is below ${(
ruleSettings.thresholdMin * 100
).toPrecision(3)}%`,
value: false
};
}
return {
evaluation: `The equity contribution of your current investment (${(equityValueRatio * 100).toPrecision(3)}%) is within the range of ${(
ruleSettings.thresholdMin * 100
).toPrecision(
3
)}% and ${(ruleSettings.thresholdMax * 100).toPrecision(3)}%`,
value: true
};
}
public getConfiguration() {
return {
threshold: {
max: 1,
min: 0,
step: 0.01,
unit: '%'
},
thresholdMax: true,
thresholdMin: true
};
}
public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings {
return {
baseCurrency,
isActive: xRayRules?.[this.getKey()]?.isActive ?? true,
thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.82,
thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.78
};
}
}
interface Settings extends RuleSettings {
baseCurrency: string;
thresholdMin: number;
thresholdMax: number;
}

95
apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts

@ -0,0 +1,95 @@
import { RuleSettings } from '@ghostfolio/api/models/interfaces/rule-settings.interface';
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { PortfolioPosition, UserSettings } from '@ghostfolio/common/interfaces';
export class AssetClassClusterRiskFixedIncome extends Rule<Settings> {
private holdings: PortfolioPosition[];
public constructor(
protected exchangeRateDataService: ExchangeRateDataService,
holdings: PortfolioPosition[]
) {
super(exchangeRateDataService, {
key: AssetClassClusterRiskFixedIncome.name,
name: 'Fixed Income'
});
this.holdings = holdings;
}
public evaluate(ruleSettings: Settings) {
const holdingsGroupedByAssetClass = this.groupCurrentHoldingsByAttribute(
this.holdings,
'assetClass',
ruleSettings.baseCurrency
);
let totalValue = 0;
const fixedIncomeValueInBaseCurrency =
holdingsGroupedByAssetClass.find(({ groupKey }) => {
return groupKey === 'FIXED_INCOME';
})?.value ?? 0;
for (const { value } of holdingsGroupedByAssetClass) {
totalValue += value;
}
const fixedIncomeValueRatio = totalValue
? fixedIncomeValueInBaseCurrency / totalValue
: 0;
if (fixedIncomeValueRatio > ruleSettings.thresholdMax) {
return {
evaluation: `The fixed income contribution of your current investment (${(fixedIncomeValueRatio * 100).toPrecision(3)}%) exceeds ${(
ruleSettings.thresholdMax * 100
).toPrecision(3)}%`,
value: false
};
} else if (fixedIncomeValueRatio < ruleSettings.thresholdMin) {
return {
evaluation: `The fixed income contribution of your current investment (${(fixedIncomeValueRatio * 100).toPrecision(3)}%) is below ${(
ruleSettings.thresholdMin * 100
).toPrecision(3)}%`,
value: false
};
}
return {
evaluation: `The fixed income contribution of your current investment (${(fixedIncomeValueRatio * 100).toPrecision(3)}%) is within the range of ${(
ruleSettings.thresholdMin * 100
).toPrecision(
3
)}% and ${(ruleSettings.thresholdMax * 100).toPrecision(3)}%`,
value: true
};
}
public getConfiguration() {
return {
threshold: {
max: 1,
min: 0,
step: 0.01,
unit: '%'
},
thresholdMax: true,
thresholdMin: true
};
}
public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings {
return {
baseCurrency,
isActive: xRayRules?.[this.getKey()]?.isActive ?? true,
thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.22,
thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.18
};
}
}
interface Settings extends RuleSettings {
baseCurrency: string;
thresholdMin: number;
thresholdMax: number;
}

17
apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts

@ -28,7 +28,12 @@ export class CurrencyClusterRiskBaseCurrencyCurrentInvestment extends Rule<Setti
let maxItem = holdingsGroupedByCurrency[0];
let totalValue = 0;
holdingsGroupedByCurrency.forEach((groupItem) => {
const baseCurrencyValue =
holdingsGroupedByCurrency.find(({ groupKey }) => {
return groupKey === ruleSettings.baseCurrency;
})?.value ?? 0;
for (const groupItem of holdingsGroupedByCurrency) {
// Calculate total value
totalValue += groupItem.value;
@ -36,13 +41,11 @@ export class CurrencyClusterRiskBaseCurrencyCurrentInvestment extends Rule<Setti
if (groupItem.investment > maxItem.investment) {
maxItem = groupItem;
}
});
const baseCurrencyItem = holdingsGroupedByCurrency.find((item) => {
return item.groupKey === ruleSettings.baseCurrency;
});
}
const baseCurrencyValueRatio = baseCurrencyItem?.value / totalValue || 0;
const baseCurrencyValueRatio = totalValue
? baseCurrencyValue / totalValue
: 0;
if (maxItem?.groupKey !== ruleSettings.baseCurrency) {
return {

2
apps/client/project.json

@ -212,7 +212,7 @@
"extract-i18n": {
"executor": "ng-extract-i18n-merge:ng-extract-i18n-merge",
"options": {
"browserTarget": "client:build",
"buildTarget": "client:build",
"includeContext": true,
"outputPath": "src/locales",
"targetFiles": [

4
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts

@ -121,8 +121,8 @@ export class AssetProfileDialog implements OnDestroy, OnInit {
}
});
this.adminService
.fetchAdminMarketDataBySymbol({
this.dataService
.fetchMarketDataBySymbol({
dataSource: this.data.dataSource,
symbol: this.data.symbol
})

2
apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts

@ -38,7 +38,7 @@ export class CreateOrUpdateAccessDialog implements OnDestroy {
private notificationService: NotificationService
) {}
ngOnInit() {
public ngOnInit() {
this.accessForm = this.formBuilder.group({
alias: [this.data.access.alias],
permissions: [this.data.access.permissions[0], Validators.required],

2
apps/client/src/app/core/auth.guard.ts

@ -29,7 +29,7 @@ export class AuthGuard {
`/${paths.resources}`
];
constructor(
public constructor(
private dataService: DataService,
private router: Router,
private settingsStorageService: SettingsStorageService,

63
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html

@ -19,12 +19,17 @@
/>
} @else {
{{ statistics?.rulesFulfilledCount }}
<ng-container i18n>of</ng-container>
<ng-container i18n>out of</ng-container>
{{ statistics?.rulesActiveCount }}
<ng-container i18n>rules are currently fulfilled.</ng-container>
<ng-container i18n>rules align with your portfolio.</ng-container>
}
</p>
<div class="mb-4">
<div
class="mb-4"
[ngClass]="{
'd-none': emergencyFundRules?.length === 0
}"
>
<h4 class="align-items-center d-flex m-0">
<span i18n>Emergency Fund</span>
@if (user?.subscription?.type === 'Basic') {
@ -43,7 +48,12 @@
(rulesUpdated)="onRulesUpdated($event)"
/>
</div>
<div class="mb-4">
<div
class="mb-4"
[ngClass]="{
'd-none': currencyClusterRiskRules?.length === 0
}"
>
<h4 class="align-items-center d-flex m-0">
<span i18n>Currency Cluster Risks</span>
@if (user?.subscription?.type === 'Basic') {
@ -62,7 +72,36 @@
(rulesUpdated)="onRulesUpdated($event)"
/>
</div>
<div class="mb-4">
<div
class="mb-4"
[ngClass]="{
'd-none': assetClassClusterRiskRules?.length === 0
}"
>
<h4 class="align-items-center d-flex m-0">
<span i18n>Asset Class Cluster Risks</span>
@if (user?.subscription?.type === 'Basic') {
<gf-premium-indicator class="ml-1" />
}
</h4>
<gf-rules
[hasPermissionToUpdateUserSettings]="
!hasImpersonationId &&
hasPermissionToUpdateUserSettings &&
user?.settings?.isExperimentalFeatures
"
[isLoading]="isLoading"
[rules]="assetClassClusterRiskRules"
[settings]="user?.settings?.xRayRules"
(rulesUpdated)="onRulesUpdated($event)"
/>
</div>
<div
class="mb-4"
[ngClass]="{
'd-none': accountClusterRiskRules?.length === 0
}"
>
<h4 class="align-items-center d-flex m-0">
<span i18n>Account Cluster Risks</span>
@if (user?.subscription?.type === 'Basic') {
@ -81,7 +120,12 @@
(rulesUpdated)="onRulesUpdated($event)"
/>
</div>
<div class="mb-4">
<div
class="mb-4"
[ngClass]="{
'd-none': economicMarketClusterRiskRules?.length === 0
}"
>
<h4 class="align-items-center d-flex m-0">
<span i18n>Economic Market Cluster Risks</span>
@if (user?.subscription?.type === 'Basic') {
@ -100,7 +144,12 @@
(rulesUpdated)="onRulesUpdated($event)"
/>
</div>
<div class="mb-4">
<div
class="mb-4"
[ngClass]="{
'd-none': feeRules?.length === 0
}"
>
<h4 class="align-items-center d-flex m-0">
<span i18n>Fees</span>
@if (user?.subscription?.type === 'Basic') {

8
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.ts

@ -19,6 +19,7 @@ import { Subject, takeUntil } from 'rxjs';
})
export class XRayPageComponent {
public accountClusterRiskRules: PortfolioReportRule[];
public assetClassClusterRiskRules: PortfolioReportRule[];
public currencyClusterRiskRules: PortfolioReportRule[];
public economicMarketClusterRiskRules: PortfolioReportRule[];
public emergencyFundRules: PortfolioReportRule[];
@ -102,6 +103,11 @@ export class XRayPageComponent {
return isActive;
}) ?? null;
this.assetClassClusterRiskRules =
rules['assetClassClusterRisk']?.filter(({ isActive }) => {
return isActive;
}) ?? null;
this.currencyClusterRiskRules =
rules['currencyClusterRisk']?.filter(({ isActive }) => {
return isActive;
@ -134,7 +140,7 @@ export class XRayPageComponent {
let inactiveRules: PortfolioReportRule[] = [];
for (const category in rules) {
const rulesArray = rules[category];
const rulesArray = rules[category] || [];
inactiveRules = inactiveRules.concat(
rulesArray.filter(({ isActive }) => {

2
apps/client/src/app/pages/webauthn/webauthn-page.component.ts

@ -22,7 +22,7 @@ export class GfWebauthnPageComponent implements OnDestroy, OnInit {
private unsubscribeSubject = new Subject<void>();
constructor(
public constructor(
private changeDetectorRef: ChangeDetectorRef,
private router: Router,
private tokenStorageService: TokenStorageService,

39
apps/client/src/app/services/admin.service.ts

@ -1,5 +1,4 @@
import { UpdateAssetProfileDto } from '@ghostfolio/api/app/admin/update-asset-profile.dto';
import { UpdateBulkMarketDataDto } from '@ghostfolio/api/app/admin/update-bulk-market-data.dto';
import { CreatePlatformDto } from '@ghostfolio/api/app/platform/create-platform.dto';
import { UpdatePlatformDto } from '@ghostfolio/api/app/platform/update-platform.dto';
import { CreateTagDto } from '@ghostfolio/api/app/tag/create-tag.dto';
@ -17,7 +16,6 @@ import {
AdminData,
AdminJobs,
AdminMarketData,
AdminMarketDataDetails,
AdminUsers,
DataProviderGhostfolioStatusResponse,
EnhancedSymbolProfile,
@ -29,8 +27,8 @@ import { Injectable } from '@angular/core';
import { SortDirection } from '@angular/material/sort';
import { DataSource, MarketData, Platform, Tag } from '@prisma/client';
import { JobStatus } from 'bull';
import { format, parseISO } from 'date-fns';
import { Observable, map, switchMap } from 'rxjs';
import { format } from 'date-fns';
import { switchMap } from 'rxjs';
import { environment } from '../../environments/environment';
import { DataService } from './data.service';
@ -125,25 +123,6 @@ export class AdminService {
});
}
public fetchAdminMarketDataBySymbol({
dataSource,
symbol
}: {
dataSource: DataSource;
symbol: string;
}): Observable<AdminMarketDataDetails> {
return this.http
.get<any>(`/api/v1/admin/market-data/${dataSource}/${symbol}`)
.pipe(
map((data) => {
for (const item of data.marketData) {
item.date = parseISO(item.date);
}
return data;
})
);
}
public fetchGhostfolioDataProviderStatus() {
return this.fetchAdminData().pipe(
switchMap(({ settings }) => {
@ -278,20 +257,6 @@ export class AdminService {
);
}
public postMarketData({
dataSource,
marketData,
symbol
}: {
dataSource: DataSource;
marketData: UpdateBulkMarketDataDto;
symbol: string;
}) {
const url = `/api/v1/admin/market-data/${dataSource}/${symbol}`;
return this.http.post<MarketData>(url, marketData);
}
public postPlatform(aPlatform: CreatePlatformDto) {
return this.http.post<Platform>(`/api/v1/platform`, aPlatform);
}

39
apps/client/src/app/services/data.service.ts

@ -3,6 +3,7 @@ import { CreateAccountBalanceDto } from '@ghostfolio/api/app/account-balance/cre
import { CreateAccountDto } from '@ghostfolio/api/app/account/create-account.dto';
import { TransferBalanceDto } from '@ghostfolio/api/app/account/transfer-balance.dto';
import { UpdateAccountDto } from '@ghostfolio/api/app/account/update-account.dto';
import { UpdateBulkMarketDataDto } from '@ghostfolio/api/app/admin/update-bulk-market-data.dto';
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
import {
Activities,
@ -21,7 +22,6 @@ import {
Access,
AccountBalancesResponse,
Accounts,
AdminMarketDataDetails,
ApiKeyResponse,
AssetProfileIdentifier,
BenchmarkMarketDataDetails,
@ -31,6 +31,7 @@ import {
ImportResponse,
InfoItem,
LookupResponse,
MarketDataDetailsResponse,
OAuthResponse,
PortfolioDetails,
PortfolioDividends,
@ -51,6 +52,7 @@ import { SortDirection } from '@angular/material/sort';
import {
AccountBalance,
DataSource,
MarketData,
Order as OrderModel,
Tag
} from '@prisma/client';
@ -316,7 +318,7 @@ export class DataService {
public fetchAsset({
dataSource,
symbol
}: AssetProfileIdentifier): Observable<AdminMarketDataDetails> {
}: AssetProfileIdentifier): Observable<MarketDataDetailsResponse> {
return this.http.get<any>(`/api/v1/asset/${dataSource}/${symbol}`).pipe(
map((data) => {
for (const item of data.marketData) {
@ -431,6 +433,25 @@ export class DataService {
);
}
public fetchMarketDataBySymbol({
dataSource,
symbol
}: {
dataSource: DataSource;
symbol: string;
}): Observable<MarketDataDetailsResponse> {
return this.http
.get<any>(`/api/v1/market-data/${dataSource}/${symbol}`)
.pipe(
map((data) => {
for (const item of data.marketData) {
item.date = parseISO(item.date);
}
return data;
})
);
}
public fetchSymbolItem({
dataSource,
includeHistoricalData,
@ -665,6 +686,20 @@ export class DataService {
return this.http.post('/api/v1/benchmark', benchmark);
}
public postMarketData({
dataSource,
marketData,
symbol
}: {
dataSource: DataSource;
marketData: UpdateBulkMarketDataDto;
symbol: string;
}) {
const url = `/api/v1/market-data/${dataSource}/${symbol}`;
return this.http.post<MarketData>(url, marketData);
}
public postOrder(aOrder: CreateOrderDto) {
return this.http.post<OrderModel>('/api/v1/order', aOrder);
}

52
apps/client/src/locales/messages.ca.xlf

@ -2619,7 +2619,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">105</context>
</context-group>
</trans-unit>
<trans-unit id="f2005fa461c06dc2e04d8918bbabedf23604b5b7" datatype="html">
@ -2991,7 +2991,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="311828ec96f91f6f530219b07d5531a8aa507d64" datatype="html">
@ -3207,7 +3207,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">223</context>
<context context-type="linenumber">221</context>
</context-group>
</trans-unit>
<trans-unit id="7377728350294749129" datatype="html">
@ -3219,7 +3219,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="8768104874317770689" datatype="html">
@ -3231,7 +3231,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7304247106520037555" datatype="html">
@ -3243,7 +3243,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="3667949571823271511" datatype="html">
@ -3255,7 +3255,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="2570446216260149991" datatype="html">
@ -5255,7 +5255,7 @@
<target state="new">Currency Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5263,7 +5263,7 @@
<target state="new">Account Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="5080775557941296581" datatype="html">
@ -6059,7 +6059,7 @@
<target state="new">Week to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="7451343426685730864" datatype="html">
@ -6067,7 +6067,7 @@
<target state="new">WTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="358501326846847310" datatype="html">
@ -6075,7 +6075,7 @@
<target state="new">Month to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="399380803601269035" datatype="html">
@ -6083,7 +6083,7 @@
<target state="new">MTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="2593751087640318641" datatype="html">
@ -6091,7 +6091,7 @@
<target state="new">Year to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="6479044529603381727" datatype="html">
@ -6099,7 +6099,7 @@
<target state="new">year</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7658073495909471632" datatype="html">
@ -6107,7 +6107,7 @@
<target state="new">years</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="cd206f0509271d9e611747bef0713c7df048d3af" datatype="html">
@ -7047,7 +7047,7 @@
<target state="new">Inactive</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">107</context>
<context context-type="linenumber">124</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7457,7 +7457,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">69</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7584,6 +7584,22 @@
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="e232c3b25e76f260c7801bfacb60eda70dd44efc" datatype="html">
<source>out of</source>
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
<source>rules align with your portfolio.</source>
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

52
apps/client/src/locales/messages.de.xlf

@ -1254,7 +1254,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="8cce9d03787606e0052d19c2ae7e7fa5ff785e94" datatype="html">
@ -1422,7 +1422,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">223</context>
<context context-type="linenumber">221</context>
</context-group>
</trans-unit>
<trans-unit id="7377728350294749129" datatype="html">
@ -1434,7 +1434,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="8768104874317770689" datatype="html">
@ -1446,7 +1446,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7304247106520037555" datatype="html">
@ -1458,7 +1458,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="3667949571823271511" datatype="html">
@ -1470,7 +1470,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="1579692722565712588" datatype="html">
@ -3766,7 +3766,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">105</context>
</context-group>
</trans-unit>
<trans-unit id="a6f322a22d0ae0b95dd9c70d43ba2c92de7ed49b" datatype="html">
@ -5907,7 +5907,7 @@
<target state="translated">Währungsklumpenrisiken</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5915,7 +5915,7 @@
<target state="translated">Kontoklumpenrisiken</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="4b00337456de4a757f7abc8224d8b391f5d0634a" datatype="html">
@ -6375,7 +6375,7 @@
<target state="translated">Seit Wochenbeginn</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="7451343426685730864" datatype="html">
@ -6383,7 +6383,7 @@
<target state="translated">WTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="358501326846847310" datatype="html">
@ -6391,7 +6391,7 @@
<target state="translated">Seit Monatsbeginn</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="399380803601269035" datatype="html">
@ -6399,7 +6399,7 @@
<target state="translated">MTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="2593751087640318641" datatype="html">
@ -6407,7 +6407,7 @@
<target state="translated">Seit Jahresbeginn</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html">
@ -6451,7 +6451,7 @@
<target state="translated">Jahr</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7658073495909471632" datatype="html">
@ -6459,7 +6459,7 @@
<target state="translated">Jahre</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="73864299814955e733ade6e3e7204548b7b9adae" datatype="html">
@ -7047,7 +7047,7 @@
<target state="translated">Inaktiv</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">107</context>
<context context-type="linenumber">124</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7457,7 +7457,7 @@
<target state="translated">Wirtschaftsraumklumpenrisiken</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">69</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7584,6 +7584,22 @@
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="e232c3b25e76f260c7801bfacb60eda70dd44efc" datatype="html">
<source>out of</source>
<target state="translated">von</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
<source>rules align with your portfolio.</source>
<target state="translated">Regeln werden von Ihrem Portfolio erfüllt.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

52
apps/client/src/locales/messages.es.xlf

@ -1255,7 +1255,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="8cce9d03787606e0052d19c2ae7e7fa5ff785e94" datatype="html">
@ -1423,7 +1423,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">223</context>
<context context-type="linenumber">221</context>
</context-group>
</trans-unit>
<trans-unit id="7377728350294749129" datatype="html">
@ -1435,7 +1435,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="8768104874317770689" datatype="html">
@ -1447,7 +1447,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7304247106520037555" datatype="html">
@ -1459,7 +1459,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="3667949571823271511" datatype="html">
@ -1471,7 +1471,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="1579692722565712588" datatype="html">
@ -3767,7 +3767,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">105</context>
</context-group>
</trans-unit>
<trans-unit id="a6f322a22d0ae0b95dd9c70d43ba2c92de7ed49b" datatype="html">
@ -5908,7 +5908,7 @@
<target state="new">Currency Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5916,7 +5916,7 @@
<target state="new">Account Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="4b00337456de4a757f7abc8224d8b391f5d0634a" datatype="html">
@ -6376,7 +6376,7 @@
<target state="new">Week to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="7451343426685730864" datatype="html">
@ -6384,7 +6384,7 @@
<target state="new">WTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="358501326846847310" datatype="html">
@ -6392,7 +6392,7 @@
<target state="new">Month to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="399380803601269035" datatype="html">
@ -6400,7 +6400,7 @@
<target state="new">MTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="2593751087640318641" datatype="html">
@ -6408,7 +6408,7 @@
<target state="new">Year to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html">
@ -6452,7 +6452,7 @@
<target state="translated">año</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7658073495909471632" datatype="html">
@ -6460,7 +6460,7 @@
<target state="translated">años</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="73864299814955e733ade6e3e7204548b7b9adae" datatype="html">
@ -7048,7 +7048,7 @@
<target state="new">Inactive</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">107</context>
<context context-type="linenumber">124</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7458,7 +7458,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">69</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7585,6 +7585,22 @@
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="e232c3b25e76f260c7801bfacb60eda70dd44efc" datatype="html">
<source>out of</source>
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
<source>rules align with your portfolio.</source>
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

52
apps/client/src/locales/messages.fr.xlf

@ -1602,7 +1602,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="8cce9d03787606e0052d19c2ae7e7fa5ff785e94" datatype="html">
@ -1734,7 +1734,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">223</context>
<context context-type="linenumber">221</context>
</context-group>
</trans-unit>
<trans-unit id="7377728350294749129" datatype="html">
@ -1746,7 +1746,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="8768104874317770689" datatype="html">
@ -1758,7 +1758,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7304247106520037555" datatype="html">
@ -1770,7 +1770,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="3667949571823271511" datatype="html">
@ -1782,7 +1782,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="4190182554887994764" datatype="html">
@ -3766,7 +3766,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">105</context>
</context-group>
</trans-unit>
<trans-unit id="a6f322a22d0ae0b95dd9c70d43ba2c92de7ed49b" datatype="html">
@ -5907,7 +5907,7 @@
<target state="translated">Risques de change</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5915,7 +5915,7 @@
<target state="translated">Risques liés aux regroupements de comptes</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="4b00337456de4a757f7abc8224d8b391f5d0634a" datatype="html">
@ -6375,7 +6375,7 @@
<target state="translated">Week to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="7451343426685730864" datatype="html">
@ -6383,7 +6383,7 @@
<target state="translated">WTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="358501326846847310" datatype="html">
@ -6391,7 +6391,7 @@
<target state="translated">Month to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="399380803601269035" datatype="html">
@ -6399,7 +6399,7 @@
<target state="translated">MTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="2593751087640318641" datatype="html">
@ -6407,7 +6407,7 @@
<target state="translated">Year to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html">
@ -6451,7 +6451,7 @@
<target state="translated">année</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7658073495909471632" datatype="html">
@ -6459,7 +6459,7 @@
<target state="translated">années</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="73864299814955e733ade6e3e7204548b7b9adae" datatype="html">
@ -7047,7 +7047,7 @@
<target state="translated">Inactif</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">107</context>
<context context-type="linenumber">124</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7457,7 +7457,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">69</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7584,6 +7584,22 @@
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="e232c3b25e76f260c7801bfacb60eda70dd44efc" datatype="html">
<source>out of</source>
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
<source>rules align with your portfolio.</source>
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

52
apps/client/src/locales/messages.it.xlf

@ -1255,7 +1255,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="8cce9d03787606e0052d19c2ae7e7fa5ff785e94" datatype="html">
@ -1423,7 +1423,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">223</context>
<context context-type="linenumber">221</context>
</context-group>
</trans-unit>
<trans-unit id="7377728350294749129" datatype="html">
@ -1435,7 +1435,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="8768104874317770689" datatype="html">
@ -1447,7 +1447,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7304247106520037555" datatype="html">
@ -1459,7 +1459,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="3667949571823271511" datatype="html">
@ -1471,7 +1471,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="1579692722565712588" datatype="html">
@ -3767,7 +3767,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">105</context>
</context-group>
</trans-unit>
<trans-unit id="a6f322a22d0ae0b95dd9c70d43ba2c92de7ed49b" datatype="html">
@ -5908,7 +5908,7 @@
<target state="translated">Rischio di Concentrazione Valutario</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5916,7 +5916,7 @@
<target state="translated">Rischi di Concentrazione dei Conti</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="4b00337456de4a757f7abc8224d8b391f5d0634a" datatype="html">
@ -6376,7 +6376,7 @@
<target state="translated">Da inizio settimana</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="7451343426685730864" datatype="html">
@ -6384,7 +6384,7 @@
<target state="translated">Settimana corrente</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="358501326846847310" datatype="html">
@ -6392,7 +6392,7 @@
<target state="translated">Da inizio mese</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="399380803601269035" datatype="html">
@ -6400,7 +6400,7 @@
<target state="translated">Mese corrente</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="2593751087640318641" datatype="html">
@ -6408,7 +6408,7 @@
<target state="translated">Da inizio anno</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html">
@ -6452,7 +6452,7 @@
<target state="translated">anno</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7658073495909471632" datatype="html">
@ -6460,7 +6460,7 @@
<target state="translated">anni</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="73864299814955e733ade6e3e7204548b7b9adae" datatype="html">
@ -7048,7 +7048,7 @@
<target state="translated">Inattivo</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">107</context>
<context context-type="linenumber">124</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7458,7 +7458,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">69</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7585,6 +7585,22 @@
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="e232c3b25e76f260c7801bfacb60eda70dd44efc" datatype="html">
<source>out of</source>
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
<source>rules align with your portfolio.</source>
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

52
apps/client/src/locales/messages.nl.xlf

@ -1254,7 +1254,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="8cce9d03787606e0052d19c2ae7e7fa5ff785e94" datatype="html">
@ -1422,7 +1422,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">223</context>
<context context-type="linenumber">221</context>
</context-group>
</trans-unit>
<trans-unit id="7377728350294749129" datatype="html">
@ -1434,7 +1434,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="8768104874317770689" datatype="html">
@ -1446,7 +1446,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7304247106520037555" datatype="html">
@ -1458,7 +1458,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="3667949571823271511" datatype="html">
@ -1470,7 +1470,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="1579692722565712588" datatype="html">
@ -3766,7 +3766,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">105</context>
</context-group>
</trans-unit>
<trans-unit id="a6f322a22d0ae0b95dd9c70d43ba2c92de7ed49b" datatype="html">
@ -5907,7 +5907,7 @@
<target state="new">Currency Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5915,7 +5915,7 @@
<target state="new">Account Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="4b00337456de4a757f7abc8224d8b391f5d0634a" datatype="html">
@ -6375,7 +6375,7 @@
<target state="new">Week to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="7451343426685730864" datatype="html">
@ -6383,7 +6383,7 @@
<target state="new">WTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="358501326846847310" datatype="html">
@ -6391,7 +6391,7 @@
<target state="new">Month to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="399380803601269035" datatype="html">
@ -6399,7 +6399,7 @@
<target state="new">MTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="2593751087640318641" datatype="html">
@ -6407,7 +6407,7 @@
<target state="new">Year to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html">
@ -6451,7 +6451,7 @@
<target state="new">year</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7658073495909471632" datatype="html">
@ -6459,7 +6459,7 @@
<target state="new">years</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="73864299814955e733ade6e3e7204548b7b9adae" datatype="html">
@ -7047,7 +7047,7 @@
<target state="new">Inactive</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">107</context>
<context context-type="linenumber">124</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7457,7 +7457,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">69</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7584,6 +7584,22 @@
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="e232c3b25e76f260c7801bfacb60eda70dd44efc" datatype="html">
<source>out of</source>
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
<source>rules align with your portfolio.</source>
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

52
apps/client/src/locales/messages.pl.xlf

@ -2595,7 +2595,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">105</context>
</context-group>
</trans-unit>
<trans-unit id="de518fa0cd3a454e84102c0d9984c4a3cfdb590d" datatype="html">
@ -2643,7 +2643,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="311828ec96f91f6f530219b07d5531a8aa507d64" datatype="html">
@ -2959,7 +2959,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">223</context>
<context context-type="linenumber">221</context>
</context-group>
</trans-unit>
<trans-unit id="7377728350294749129" datatype="html">
@ -2971,7 +2971,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="8768104874317770689" datatype="html">
@ -2983,7 +2983,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7304247106520037555" datatype="html">
@ -2995,7 +2995,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="3667949571823271511" datatype="html">
@ -3007,7 +3007,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="5e41f1b4c46ad9e0a9bc83fa36445483aa5cc324" datatype="html">
@ -4783,7 +4783,7 @@
<target state="new">Currency Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -4791,7 +4791,7 @@
<target state="new">Account Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="4945c8e3bbf650f8dc6d03b16553f2c0bac42b11" datatype="html">
@ -6375,7 +6375,7 @@
<target state="new">Week to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="7451343426685730864" datatype="html">
@ -6383,7 +6383,7 @@
<target state="new">WTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="358501326846847310" datatype="html">
@ -6391,7 +6391,7 @@
<target state="new">Month to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="399380803601269035" datatype="html">
@ -6399,7 +6399,7 @@
<target state="new">MTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="2593751087640318641" datatype="html">
@ -6407,7 +6407,7 @@
<target state="new">Year to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html">
@ -6451,7 +6451,7 @@
<target state="new">year</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7658073495909471632" datatype="html">
@ -6459,7 +6459,7 @@
<target state="new">years</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="73864299814955e733ade6e3e7204548b7b9adae" datatype="html">
@ -7047,7 +7047,7 @@
<target state="translated">Nieaktywny</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">107</context>
<context context-type="linenumber">124</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7457,7 +7457,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">69</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7584,6 +7584,22 @@
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="e232c3b25e76f260c7801bfacb60eda70dd44efc" datatype="html">
<source>out of</source>
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
<source>rules align with your portfolio.</source>
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

52
apps/client/src/locales/messages.pt.xlf

@ -1478,7 +1478,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="8cce9d03787606e0052d19c2ae7e7fa5ff785e94" datatype="html">
@ -1718,7 +1718,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">223</context>
<context context-type="linenumber">221</context>
</context-group>
</trans-unit>
<trans-unit id="7377728350294749129" datatype="html">
@ -1730,7 +1730,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="8768104874317770689" datatype="html">
@ -1742,7 +1742,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7304247106520037555" datatype="html">
@ -1754,7 +1754,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="3667949571823271511" datatype="html">
@ -1766,7 +1766,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="4190182554887994764" datatype="html">
@ -3766,7 +3766,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">105</context>
</context-group>
</trans-unit>
<trans-unit id="a6f322a22d0ae0b95dd9c70d43ba2c92de7ed49b" datatype="html">
@ -5907,7 +5907,7 @@
<target state="new">Currency Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5915,7 +5915,7 @@
<target state="new">Account Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="4b00337456de4a757f7abc8224d8b391f5d0634a" datatype="html">
@ -6375,7 +6375,7 @@
<target state="new">Week to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="7451343426685730864" datatype="html">
@ -6383,7 +6383,7 @@
<target state="new">WTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="358501326846847310" datatype="html">
@ -6391,7 +6391,7 @@
<target state="new">Month to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="399380803601269035" datatype="html">
@ -6399,7 +6399,7 @@
<target state="new">MTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="2593751087640318641" datatype="html">
@ -6407,7 +6407,7 @@
<target state="new">Year to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html">
@ -6451,7 +6451,7 @@
<target state="new">year</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7658073495909471632" datatype="html">
@ -6459,7 +6459,7 @@
<target state="new">years</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="73864299814955e733ade6e3e7204548b7b9adae" datatype="html">
@ -7047,7 +7047,7 @@
<target state="new">Inactive</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">107</context>
<context context-type="linenumber">124</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7457,7 +7457,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">69</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7584,6 +7584,22 @@
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="e232c3b25e76f260c7801bfacb60eda70dd44efc" datatype="html">
<source>out of</source>
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
<source>rules align with your portfolio.</source>
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

52
apps/client/src/locales/messages.tr.xlf

@ -2479,7 +2479,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="311828ec96f91f6f530219b07d5531a8aa507d64" datatype="html">
@ -2635,7 +2635,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">105</context>
</context-group>
</trans-unit>
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
@ -2803,7 +2803,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">223</context>
<context context-type="linenumber">221</context>
</context-group>
</trans-unit>
<trans-unit id="7377728350294749129" datatype="html">
@ -2815,7 +2815,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="8768104874317770689" datatype="html">
@ -2827,7 +2827,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7304247106520037555" datatype="html">
@ -2839,7 +2839,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="3667949571823271511" datatype="html">
@ -2851,7 +2851,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="4190182554887994764" datatype="html">
@ -5907,7 +5907,7 @@
<target state="translated">Kur Kümelenme Riskleri (Currency Cluster Risks)</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -5915,7 +5915,7 @@
<target state="translated">Hesap Kümelenme Riski (Account Cluster Risks)</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="4b00337456de4a757f7abc8224d8b391f5d0634a" datatype="html">
@ -6375,7 +6375,7 @@
<target state="new">Week to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="7451343426685730864" datatype="html">
@ -6383,7 +6383,7 @@
<target state="new">WTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="358501326846847310" datatype="html">
@ -6391,7 +6391,7 @@
<target state="new">Month to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="399380803601269035" datatype="html">
@ -6399,7 +6399,7 @@
<target state="new">MTD</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="2593751087640318641" datatype="html">
@ -6407,7 +6407,7 @@
<target state="new">Year to date</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html">
@ -6451,7 +6451,7 @@
<target state="new">year</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7658073495909471632" datatype="html">
@ -6459,7 +6459,7 @@
<target state="new">years</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="73864299814955e733ade6e3e7204548b7b9adae" datatype="html">
@ -7047,7 +7047,7 @@
<target state="new">Inactive</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">107</context>
<context context-type="linenumber">124</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7457,7 +7457,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">69</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7584,6 +7584,22 @@
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="e232c3b25e76f260c7801bfacb60eda70dd44efc" datatype="html">
<source>out of</source>
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
<source>rules align with your portfolio.</source>
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

50
apps/client/src/locales/messages.xlf

@ -2436,7 +2436,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">105</context>
</context-group>
</trans-unit>
<trans-unit id="de518fa0cd3a454e84102c0d9984c4a3cfdb590d" datatype="html">
@ -2479,7 +2479,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="311828ec96f91f6f530219b07d5531a8aa507d64" datatype="html">
@ -2767,7 +2767,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">223</context>
<context context-type="linenumber">221</context>
</context-group>
</trans-unit>
<trans-unit id="7377728350294749129" datatype="html">
@ -2778,7 +2778,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="8768104874317770689" datatype="html">
@ -2789,7 +2789,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7304247106520037555" datatype="html">
@ -2800,7 +2800,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="3667949571823271511" datatype="html">
@ -2811,7 +2811,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="5e41f1b4c46ad9e0a9bc83fa36445483aa5cc324" datatype="html">
@ -4395,14 +4395,14 @@
<source>Currency Cluster Risks</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
<source>Account Cluster Risks</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="4945c8e3bbf650f8dc6d03b16553f2c0bac42b11" datatype="html">
@ -5800,35 +5800,35 @@
<source>Year to date</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="3105754554141014845" datatype="html">
<source>Week to date</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="358501326846847310" datatype="html">
<source>Month to date</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="399380803601269035" datatype="html">
<source>MTD</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="7451343426685730864" datatype="html">
<source>WTD</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="051f7201e65df238102b8f33aeb2f993bba280bb" datatype="html">
@ -5867,14 +5867,14 @@
<source>year</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7658073495909471632" datatype="html">
<source>years</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="73864299814955e733ade6e3e7204548b7b9adae" datatype="html">
@ -6390,7 +6390,7 @@
<source>Inactive</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">107</context>
<context context-type="linenumber">124</context>
</context-group>
</trans-unit>
<trans-unit id="7819314041543176992" datatype="html">
@ -6744,7 +6744,7 @@
<source>Economic Market Cluster Risks</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">69</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="f907cfe9cf0c373052ff3964f941a5b784c57f06" datatype="html">
@ -6863,6 +6863,20 @@
<context context-type="linenumber">153</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
<source>rules align with your portfolio.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
<trans-unit id="e232c3b25e76f260c7801bfacb60eda70dd44efc" datatype="html">
<source>out of</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

52
apps/client/src/locales/messages.zh.xlf

@ -2612,7 +2612,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">88</context>
<context context-type="linenumber">105</context>
</context-group>
</trans-unit>
<trans-unit id="de518fa0cd3a454e84102c0d9984c4a3cfdb590d" datatype="html">
@ -2660,7 +2660,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">12</context>
<context context-type="linenumber">29</context>
</context-group>
</trans-unit>
<trans-unit id="311828ec96f91f6f530219b07d5531a8aa507d64" datatype="html">
@ -2976,7 +2976,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">223</context>
<context context-type="linenumber">221</context>
</context-group>
</trans-unit>
<trans-unit id="7377728350294749129" datatype="html">
@ -2988,7 +2988,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="8768104874317770689" datatype="html">
@ -3000,7 +3000,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7304247106520037555" datatype="html">
@ -3012,7 +3012,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="3667949571823271511" datatype="html">
@ -3024,7 +3024,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">262</context>
<context context-type="linenumber">260</context>
</context-group>
</trans-unit>
<trans-unit id="5e41f1b4c46ad9e0a9bc83fa36445483aa5cc324" datatype="html">
@ -4800,7 +4800,7 @@
<target state="translated">货币集群风险</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">31</context>
<context context-type="linenumber">48</context>
</context-group>
</trans-unit>
<trans-unit id="c7b797e5df289241021db16010efb6ac3c6cfb86" datatype="html">
@ -4808,7 +4808,7 @@
<target state="translated">账户集群风险</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">50</context>
<context context-type="linenumber">67</context>
</context-group>
</trans-unit>
<trans-unit id="4945c8e3bbf650f8dc6d03b16553f2c0bac42b11" datatype="html">
@ -6376,7 +6376,7 @@
<target state="translated">今年迄今为止</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">233</context>
<context context-type="linenumber">231</context>
</context-group>
</trans-unit>
<trans-unit id="3105754554141014845" datatype="html">
@ -6384,7 +6384,7 @@
<target state="translated">本周至今</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="358501326846847310" datatype="html">
@ -6392,7 +6392,7 @@
<target state="translated">本月至今</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="399380803601269035" datatype="html">
@ -6400,7 +6400,7 @@
<target state="translated">最大输运量</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">229</context>
<context context-type="linenumber">227</context>
</context-group>
</trans-unit>
<trans-unit id="7451343426685730864" datatype="html">
@ -6408,7 +6408,7 @@
<target state="translated">世界贸易组织</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">225</context>
<context context-type="linenumber">223</context>
</context-group>
</trans-unit>
<trans-unit id="051f7201e65df238102b8f33aeb2f993bba280bb" datatype="html">
@ -6452,7 +6452,7 @@
<target state="translated">年</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">237</context>
<context context-type="linenumber">235</context>
</context-group>
</trans-unit>
<trans-unit id="7658073495909471632" datatype="html">
@ -6460,7 +6460,7 @@
<target state="translated">年</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">259</context>
<context context-type="linenumber">257</context>
</context-group>
</trans-unit>
<trans-unit id="73864299814955e733ade6e3e7204548b7b9adae" datatype="html">
@ -7048,7 +7048,7 @@
<target state="new">Inactive</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">107</context>
<context context-type="linenumber">124</context>
</context-group>
</trans-unit>
<trans-unit id="2159130950882492111" datatype="html">
@ -7458,7 +7458,7 @@
<target state="new">Economic Market Cluster Risks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">69</context>
<context context-type="linenumber">86</context>
</context-group>
</trans-unit>
<trans-unit id="169eed2bc3e08e1bea977bcc5d799379f6b8a758" datatype="html">
@ -7585,6 +7585,22 @@
<context context-type="linenumber">26</context>
</context-group>
</trans-unit>
<trans-unit id="e232c3b25e76f260c7801bfacb60eda70dd44efc" datatype="html">
<source>out of</source>
<target state="new">out of</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
</trans-unit>
<trans-unit id="8508033bf4a7ba848a54b1606283d2f38679ede9" datatype="html">
<source>rules align with your portfolio.</source>
<target state="new">rules align with your portfolio.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html</context>
<context context-type="linenumber">24</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

1
libs/common/src/lib/interfaces/enhanced-symbol-profile.interface.ts

@ -30,4 +30,5 @@ export interface EnhancedSymbolProfile {
symbolMapping?: { [key: string]: string };
updatedAt: Date;
url?: string;
userId?: string;
}

2
libs/common/src/lib/interfaces/index.ts

@ -46,6 +46,7 @@ import type { ResponseError } from './responses/errors.interface';
import type { HistoricalResponse } from './responses/historical-response.interface';
import type { ImportResponse } from './responses/import-response.interface';
import type { LookupResponse } from './responses/lookup-response.interface';
import type { MarketDataDetailsResponse } from './responses/market-data-details-response.interface';
import type { OAuthResponse } from './responses/oauth-response.interface';
import type { PortfolioHoldingsResponse } from './responses/portfolio-holdings-response.interface';
import type { PortfolioPerformanceResponse } from './responses/portfolio-performance-response.interface';
@ -97,6 +98,7 @@ export {
LineChartItem,
LookupItem,
LookupResponse,
MarketDataDetailsResponse,
OAuthResponse,
PortfolioChart,
PortfolioDetails,

8
libs/common/src/lib/interfaces/responses/market-data-details-response.interface.ts

@ -0,0 +1,8 @@
import { MarketData } from '@prisma/client';
import { EnhancedSymbolProfile } from '../enhanced-symbol-profile.interface';
export interface MarketDataDetailsResponse {
assetProfile: Partial<EnhancedSymbolProfile>;
marketData: MarketData[];
}

2
libs/common/src/lib/interfaces/x-ray-rules-settings.interface.ts

@ -1,6 +1,8 @@
export interface XRayRulesSettings {
AccountClusterRiskCurrentInvestment?: RuleSettings;
AccountClusterRiskSingleAccount?: RuleSettings;
AssetClassClusterRiskEquity?: RuleSettings;
AssetClassClusterRiskFixedIncome?: RuleSettings;
CurrencyClusterRiskBaseCurrencyCurrentInvestment?: RuleSettings;
CurrencyClusterRiskCurrentInvestment?: RuleSettings;
EconomicMarketClusterRiskDevelopedMarkets?: RuleSettings;

15
libs/common/src/lib/permissions.ts

@ -10,6 +10,8 @@ export const permissions = {
createAccount: 'createAccount',
createAccountBalance: 'createAccountBalance',
createApiKey: 'createApiKey',
createMarketData: 'createMarketData',
createMarketDataOfOwnAssetProfile: 'createMarketDataOfOwnAssetProfile',
createOrder: 'createOrder',
createPlatform: 'createPlatform',
createTag: 'createTag',
@ -33,12 +35,16 @@ export const permissions = {
enableSubscriptionInterstitial: 'enableSubscriptionInterstitial',
enableSystemMessage: 'enableSystemMessage',
impersonateAllUsers: 'impersonateAllUsers',
readMarketData: 'readMarketData',
readMarketDataOfOwnAssetProfile: 'readMarketDataOfOwnAssetProfile',
readPlatforms: 'readPlatforms',
readTags: 'readTags',
reportDataGlitch: 'reportDataGlitch',
toggleReadOnlyMode: 'toggleReadOnlyMode',
updateAccount: 'updateAccount',
updateAuthDevice: 'updateAuthDevice',
updateMarketData: 'updateMarketData',
updateMarketDataOfOwnAssetProfile: 'updateMarketDataOfOwnAssetProfile',
updateOrder: 'updateOrder',
updatePlatform: 'updatePlatform',
updateTag: 'updateTag',
@ -57,6 +63,8 @@ export function getPermissions(aRole: Role): string[] {
permissions.createAccount,
permissions.createAccountBalance,
permissions.deleteAccountBalance,
permissions.createMarketData,
permissions.createMarketDataOfOwnAssetProfile,
permissions.createOrder,
permissions.createPlatform,
permissions.createTag,
@ -68,10 +76,14 @@ export function getPermissions(aRole: Role): string[] {
permissions.deletePlatform,
permissions.deleteTag,
permissions.deleteUser,
permissions.readMarketData,
permissions.readMarketDataOfOwnAssetProfile,
permissions.readPlatforms,
permissions.readTags,
permissions.updateAccount,
permissions.updateAuthDevice,
permissions.updateMarketData,
permissions.updateMarketDataOfOwnAssetProfile,
permissions.updateOrder,
permissions.updatePlatform,
permissions.updateTag,
@ -93,6 +105,7 @@ export function getPermissions(aRole: Role): string[] {
permissions.createAccess,
permissions.createAccount,
permissions.createAccountBalance,
permissions.createMarketDataOfOwnAssetProfile,
permissions.createOrder,
permissions.deleteAccess,
permissions.deleteAccount,
@ -100,8 +113,10 @@ export function getPermissions(aRole: Role): string[] {
permissions.deleteAuthDevice,
permissions.deleteOrder,
permissions.deleteOwnUser,
permissions.readMarketDataOfOwnAssetProfile,
permissions.updateAccount,
permissions.updateAuthDevice,
permissions.updateMarketDataOfOwnAssetProfile,
permissions.updateOrder,
permissions.updateUserSettings,
permissions.updateViewMode

4
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts

@ -1,4 +1,5 @@
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { CommonModule } from '@angular/common';
import {
@ -51,6 +52,7 @@ export class GfHistoricalMarketDataEditorDialogComponent implements OnDestroy {
private changeDetectorRef: ChangeDetectorRef,
@Inject(MAT_DIALOG_DATA)
public data: HistoricalMarketDataEditorDialogParams,
private dataService: DataService,
private dateAdapter: DateAdapter<any>,
public dialogRef: MatDialogRef<GfHistoricalMarketDataEditorDialogComponent>,
@Inject(MAT_DATE_LOCALE) private locale: string
@ -81,7 +83,7 @@ export class GfHistoricalMarketDataEditorDialogComponent implements OnDestroy {
}
public onUpdate() {
this.adminService
this.dataService
.postMarketData({
dataSource: this.data.dataSource,
marketData: {

6
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts

@ -1,5 +1,5 @@
import { UpdateMarketDataDto } from '@ghostfolio/api/app/admin/update-market-data.dto';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import {
DATE_FORMAT,
getDateFormatString,
@ -90,7 +90,7 @@ export class GfHistoricalMarketDataEditorComponent
private unsubscribeSubject = new Subject<void>();
public constructor(
private adminService: AdminService,
private dataService: DataService,
private deviceService: DeviceDetectorService,
private dialog: MatDialog,
private formBuilder: FormBuilder,
@ -236,7 +236,7 @@ export class GfHistoricalMarketDataEditorComponent
}
).data as UpdateMarketDataDto[];
this.adminService
this.dataService
.postMarketData({
dataSource: this.dataSource,
marketData: {

12
package-lock.json

@ -1,12 +1,12 @@
{
"name": "ghostfolio",
"version": "2.128.0",
"version": "2.129.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ghostfolio",
"version": "2.128.0",
"version": "2.129.0",
"hasInstallScript": true,
"license": "AGPL-3.0",
"dependencies": {
@ -45,7 +45,7 @@
"@simplewebauthn/server": "9.0.3",
"@stripe/stripe-js": "4.9.0",
"alphavantage": "2.2.0",
"big.js": "6.2.1",
"big.js": "6.2.2",
"body-parser": "1.20.2",
"bootstrap": "4.6.0",
"bull": "4.16.2",
@ -13519,9 +13519,9 @@
}
},
"node_modules/big.js": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz",
"integrity": "sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==",
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.2.tgz",
"integrity": "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==",
"license": "MIT",
"engines": {
"node": "*"

4
package.json

@ -1,6 +1,6 @@
{
"name": "ghostfolio",
"version": "2.128.0",
"version": "2.129.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
@ -91,7 +91,7 @@
"@simplewebauthn/server": "9.0.3",
"@stripe/stripe-js": "4.9.0",
"alphavantage": "2.2.0",
"big.js": "6.2.1",
"big.js": "6.2.2",
"body-parser": "1.20.2",
"bootstrap": "4.6.0",
"bull": "4.16.2",

15
prisma/migrations/20241214091912_added_user_to_symbol_profile/migration.sql

@ -0,0 +1,15 @@
-- AlterTable
ALTER TABLE "SymbolProfile" ADD COLUMN "userId" TEXT;
-- AddForeignKey
ALTER TABLE "SymbolProfile" ADD CONSTRAINT "SymbolProfile_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- Set userIds in SymbolProfile for 'MANUAL' data source
UPDATE "SymbolProfile"
SET "userId" = (
SELECT "userId"
FROM "Order"
WHERE "Order"."symbolProfileId" = "SymbolProfile"."id"
LIMIT 1
)
WHERE "dataSource" = 'MANUAL';

17
prisma/schema.prisma

@ -188,8 +188,10 @@ model SymbolProfile {
symbol String
symbolMapping Json?
url String?
userId String?
Order Order[]
SymbolProfileOverrides SymbolProfileOverrides?
User User? @relation(fields: [userId], onDelete: Cascade, references: [id])
@@unique([dataSource, symbol])
@@index([assetClass])
@ -239,14 +241,14 @@ model Tag {
model User {
accessToken String?
authChallenge String?
createdAt DateTime @default(now())
id String @id @default(uuid())
provider Provider @default(ANONYMOUS)
role Role @default(USER)
createdAt DateTime @default(now())
id String @id @default(uuid())
provider Provider @default(ANONYMOUS)
role Role @default(USER)
thirdPartyId String?
updatedAt DateTime @updatedAt
Access Access[] @relation("accessGet")
AccessGive Access[] @relation("accessGive")
updatedAt DateTime @updatedAt
Access Access[] @relation("accessGet")
AccessGive Access[] @relation("accessGive")
Account Account[]
Analytics Analytics?
ApiKey ApiKey[]
@ -254,6 +256,7 @@ model User {
Order Order[]
Settings Settings?
Subscription Subscription[]
SymbolProfile SymbolProfile[]
Tag Tag[]
@@index([accessToken])

Loading…
Cancel
Save