|
|
|
@ -1126,6 +1126,8 @@ export class PortfolioService { |
|
|
|
withSummary: true |
|
|
|
}); |
|
|
|
|
|
|
|
const hasOpenHoldings = Object.keys(holdings).length > 0; |
|
|
|
|
|
|
|
const marketsAdvancedTotalInBaseCurrency = getSum( |
|
|
|
Object.values(marketsAdvanced).map(({ valueInBaseCurrency }) => { |
|
|
|
return new Big(valueInBaseCurrency); |
|
|
|
@ -1185,26 +1187,25 @@ export class PortfolioService { |
|
|
|
id: 'rule.currencyClusterRisk.category', |
|
|
|
languageCode: userSettings.language |
|
|
|
}), |
|
|
|
rules: |
|
|
|
summary.activityCount > 0 |
|
|
|
? await this.rulesService.evaluate( |
|
|
|
[ |
|
|
|
new CurrencyClusterRiskBaseCurrencyCurrentInvestment( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
Object.values(holdings), |
|
|
|
userSettings.language |
|
|
|
), |
|
|
|
new CurrencyClusterRiskCurrentInvestment( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
Object.values(holdings), |
|
|
|
userSettings.language |
|
|
|
) |
|
|
|
], |
|
|
|
userSettings |
|
|
|
) |
|
|
|
: undefined |
|
|
|
rules: hasOpenHoldings |
|
|
|
? await this.rulesService.evaluate( |
|
|
|
[ |
|
|
|
new CurrencyClusterRiskBaseCurrencyCurrentInvestment( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
Object.values(holdings), |
|
|
|
userSettings.language |
|
|
|
), |
|
|
|
new CurrencyClusterRiskCurrentInvestment( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
Object.values(holdings), |
|
|
|
userSettings.language |
|
|
|
) |
|
|
|
], |
|
|
|
userSettings |
|
|
|
) |
|
|
|
: undefined |
|
|
|
}, |
|
|
|
{ |
|
|
|
key: 'assetClassClusterRisk', |
|
|
|
@ -1212,26 +1213,25 @@ export class PortfolioService { |
|
|
|
id: 'rule.assetClassClusterRisk.category', |
|
|
|
languageCode: userSettings.language |
|
|
|
}), |
|
|
|
rules: |
|
|
|
summary.activityCount > 0 |
|
|
|
? await this.rulesService.evaluate( |
|
|
|
[ |
|
|
|
new AssetClassClusterRiskEquity( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
userSettings.language, |
|
|
|
Object.values(holdings) |
|
|
|
), |
|
|
|
new AssetClassClusterRiskFixedIncome( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
userSettings.language, |
|
|
|
Object.values(holdings) |
|
|
|
) |
|
|
|
], |
|
|
|
userSettings |
|
|
|
) |
|
|
|
: undefined |
|
|
|
rules: hasOpenHoldings |
|
|
|
? await this.rulesService.evaluate( |
|
|
|
[ |
|
|
|
new AssetClassClusterRiskEquity( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
userSettings.language, |
|
|
|
Object.values(holdings) |
|
|
|
), |
|
|
|
new AssetClassClusterRiskFixedIncome( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
userSettings.language, |
|
|
|
Object.values(holdings) |
|
|
|
) |
|
|
|
], |
|
|
|
userSettings |
|
|
|
) |
|
|
|
: undefined |
|
|
|
}, |
|
|
|
{ |
|
|
|
key: 'accountClusterRisk', |
|
|
|
@ -1266,28 +1266,27 @@ export class PortfolioService { |
|
|
|
id: 'rule.economicMarketClusterRisk.category', |
|
|
|
languageCode: userSettings.language |
|
|
|
}), |
|
|
|
rules: |
|
|
|
summary.activityCount > 0 |
|
|
|
? await this.rulesService.evaluate( |
|
|
|
[ |
|
|
|
new EconomicMarketClusterRiskDevelopedMarkets( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
marketsTotalInBaseCurrency, |
|
|
|
markets.developedMarkets.valueInBaseCurrency, |
|
|
|
userSettings.language |
|
|
|
), |
|
|
|
new EconomicMarketClusterRiskEmergingMarkets( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
marketsTotalInBaseCurrency, |
|
|
|
markets.emergingMarkets.valueInBaseCurrency, |
|
|
|
userSettings.language |
|
|
|
) |
|
|
|
], |
|
|
|
userSettings |
|
|
|
) |
|
|
|
: undefined |
|
|
|
rules: hasOpenHoldings |
|
|
|
? await this.rulesService.evaluate( |
|
|
|
[ |
|
|
|
new EconomicMarketClusterRiskDevelopedMarkets( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
marketsTotalInBaseCurrency, |
|
|
|
markets.developedMarkets.valueInBaseCurrency, |
|
|
|
userSettings.language |
|
|
|
), |
|
|
|
new EconomicMarketClusterRiskEmergingMarkets( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
marketsTotalInBaseCurrency, |
|
|
|
markets.emergingMarkets.valueInBaseCurrency, |
|
|
|
userSettings.language |
|
|
|
) |
|
|
|
], |
|
|
|
userSettings |
|
|
|
) |
|
|
|
: undefined |
|
|
|
}, |
|
|
|
{ |
|
|
|
key: 'regionalMarketClusterRisk', |
|
|
|
@ -1295,49 +1294,48 @@ export class PortfolioService { |
|
|
|
id: 'rule.regionalMarketClusterRisk.category', |
|
|
|
languageCode: userSettings.language |
|
|
|
}), |
|
|
|
rules: |
|
|
|
summary.activityCount > 0 |
|
|
|
? await this.rulesService.evaluate( |
|
|
|
[ |
|
|
|
new RegionalMarketClusterRiskAsiaPacific( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
userSettings.language, |
|
|
|
marketsAdvancedTotalInBaseCurrency, |
|
|
|
marketsAdvanced.asiaPacific.valueInBaseCurrency |
|
|
|
), |
|
|
|
new RegionalMarketClusterRiskEmergingMarkets( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
userSettings.language, |
|
|
|
marketsAdvancedTotalInBaseCurrency, |
|
|
|
marketsAdvanced.emergingMarkets.valueInBaseCurrency |
|
|
|
), |
|
|
|
new RegionalMarketClusterRiskEurope( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
userSettings.language, |
|
|
|
marketsAdvancedTotalInBaseCurrency, |
|
|
|
marketsAdvanced.europe.valueInBaseCurrency |
|
|
|
), |
|
|
|
new RegionalMarketClusterRiskJapan( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
userSettings.language, |
|
|
|
marketsAdvancedTotalInBaseCurrency, |
|
|
|
marketsAdvanced.japan.valueInBaseCurrency |
|
|
|
), |
|
|
|
new RegionalMarketClusterRiskNorthAmerica( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
userSettings.language, |
|
|
|
marketsAdvancedTotalInBaseCurrency, |
|
|
|
marketsAdvanced.northAmerica.valueInBaseCurrency |
|
|
|
) |
|
|
|
], |
|
|
|
userSettings |
|
|
|
) |
|
|
|
: undefined |
|
|
|
rules: hasOpenHoldings |
|
|
|
? await this.rulesService.evaluate( |
|
|
|
[ |
|
|
|
new RegionalMarketClusterRiskAsiaPacific( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
userSettings.language, |
|
|
|
marketsAdvancedTotalInBaseCurrency, |
|
|
|
marketsAdvanced.asiaPacific.valueInBaseCurrency |
|
|
|
), |
|
|
|
new RegionalMarketClusterRiskEmergingMarkets( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
userSettings.language, |
|
|
|
marketsAdvancedTotalInBaseCurrency, |
|
|
|
marketsAdvanced.emergingMarkets.valueInBaseCurrency |
|
|
|
), |
|
|
|
new RegionalMarketClusterRiskEurope( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
userSettings.language, |
|
|
|
marketsAdvancedTotalInBaseCurrency, |
|
|
|
marketsAdvanced.europe.valueInBaseCurrency |
|
|
|
), |
|
|
|
new RegionalMarketClusterRiskJapan( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
userSettings.language, |
|
|
|
marketsAdvancedTotalInBaseCurrency, |
|
|
|
marketsAdvanced.japan.valueInBaseCurrency |
|
|
|
), |
|
|
|
new RegionalMarketClusterRiskNorthAmerica( |
|
|
|
this.exchangeRateDataService, |
|
|
|
this.i18nService, |
|
|
|
userSettings.language, |
|
|
|
marketsAdvancedTotalInBaseCurrency, |
|
|
|
marketsAdvanced.northAmerica.valueInBaseCurrency |
|
|
|
) |
|
|
|
], |
|
|
|
userSettings |
|
|
|
) |
|
|
|
: undefined |
|
|
|
}, |
|
|
|
{ |
|
|
|
key: 'fees', |
|
|
|
|