diff --git a/apps/api/src/models/rule.ts b/apps/api/src/models/rule.ts index 916cc9231..0870be03e 100644 --- a/apps/api/src/models/rule.ts +++ b/apps/api/src/models/rule.ts @@ -16,23 +16,19 @@ import { RuleInterface } from './interfaces/rule.interface'; export abstract class Rule implements RuleInterface { private key: string; private languageCode: string; - private name: string; public constructor( protected exchangeRateDataService: ExchangeRateDataService, { key, - languageCode = DEFAULT_LANGUAGE_CODE, - name + languageCode = DEFAULT_LANGUAGE_CODE }: { key: string; languageCode?: string; // TODO: Make mandatory - name: string; } ) { this.key = key; this.languageCode = languageCode; - this.name = name; } public getKey() { @@ -43,10 +39,6 @@ export abstract class Rule implements RuleInterface { return this.languageCode; } - public getName() { - return this.name; - } - public groupCurrentHoldingsByAttribute( holdings: PortfolioPosition[], attribute: keyof PortfolioPosition, @@ -82,5 +74,7 @@ export abstract class Rule implements RuleInterface { PortfolioReportRule['configuration'] >; + public abstract getName(): string; + public abstract getSettings(aUserSettings: UserSettings): T; } diff --git a/apps/api/src/models/rules/account-cluster-risk/current-investment.ts b/apps/api/src/models/rules/account-cluster-risk/current-investment.ts index 564af935d..76b7e2f94 100644 --- a/apps/api/src/models/rules/account-cluster-risk/current-investment.ts +++ b/apps/api/src/models/rules/account-cluster-risk/current-investment.ts @@ -15,8 +15,7 @@ export class AccountClusterRiskCurrentInvestment extends Rule { accounts: PortfolioDetails['accounts'] ) { super(exchangeRateDataService, { - key: AccountClusterRiskCurrentInvestment.name, - name: 'Investment' + key: AccountClusterRiskCurrentInvestment.name }); this.accounts = accounts; @@ -88,6 +87,10 @@ export class AccountClusterRiskCurrentInvestment extends Rule { }; } + public getName() { + return 'Investment'; + } + public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, diff --git a/apps/api/src/models/rules/account-cluster-risk/single-account.ts b/apps/api/src/models/rules/account-cluster-risk/single-account.ts index ef549e579..50f49efab 100644 --- a/apps/api/src/models/rules/account-cluster-risk/single-account.ts +++ b/apps/api/src/models/rules/account-cluster-risk/single-account.ts @@ -11,8 +11,7 @@ export class AccountClusterRiskSingleAccount extends Rule { accounts: PortfolioDetails['accounts'] ) { super(exchangeRateDataService, { - key: AccountClusterRiskSingleAccount.name, - name: 'Single Account' + key: AccountClusterRiskSingleAccount.name }); this.accounts = accounts; @@ -38,6 +37,10 @@ export class AccountClusterRiskSingleAccount extends Rule { return undefined; } + public getName() { + return 'Single Account'; + } + public getSettings({ xRayRules }: UserSettings): RuleSettings { return { isActive: xRayRules?.[this.getKey()].isActive ?? true diff --git a/apps/api/src/models/rules/asset-class-cluster-risk/equity.ts b/apps/api/src/models/rules/asset-class-cluster-risk/equity.ts index b67e01e61..b386f3e18 100644 --- a/apps/api/src/models/rules/asset-class-cluster-risk/equity.ts +++ b/apps/api/src/models/rules/asset-class-cluster-risk/equity.ts @@ -11,8 +11,7 @@ export class AssetClassClusterRiskEquity extends Rule { holdings: PortfolioPosition[] ) { super(exchangeRateDataService, { - key: AssetClassClusterRiskEquity.name, - name: 'Equity' + key: AssetClassClusterRiskEquity.name }); this.holdings = holdings; @@ -78,6 +77,10 @@ export class AssetClassClusterRiskEquity extends Rule { }; } + public getName() { + return 'Equity'; + } + public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, diff --git a/apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts b/apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts index eb744a143..918856c45 100644 --- a/apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts +++ b/apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts @@ -11,8 +11,7 @@ export class AssetClassClusterRiskFixedIncome extends Rule { holdings: PortfolioPosition[] ) { super(exchangeRateDataService, { - key: AssetClassClusterRiskFixedIncome.name, - name: 'Fixed Income' + key: AssetClassClusterRiskFixedIncome.name }); this.holdings = holdings; @@ -78,6 +77,10 @@ export class AssetClassClusterRiskFixedIncome extends Rule { }; } + public getName() { + return 'Fixed Income'; + } + public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, diff --git a/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts b/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts index 90ee29c54..6de686a9e 100644 --- a/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts +++ b/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts @@ -11,8 +11,7 @@ export class CurrencyClusterRiskBaseCurrencyCurrentInvestment extends Rule { holdings: PortfolioPosition[] ) { super(exchangeRateDataService, { - key: CurrencyClusterRiskCurrentInvestment.name, - name: 'Investment' + key: CurrencyClusterRiskCurrentInvestment.name }); this.holdings = holdings; @@ -73,6 +72,10 @@ export class CurrencyClusterRiskCurrentInvestment extends Rule { }; } + public getName() { + return 'Investment'; + } + public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, diff --git a/apps/api/src/models/rules/economic-market-cluster-risk/developed-markets.ts b/apps/api/src/models/rules/economic-market-cluster-risk/developed-markets.ts index 15e113927..8f3ef0d65 100644 --- a/apps/api/src/models/rules/economic-market-cluster-risk/developed-markets.ts +++ b/apps/api/src/models/rules/economic-market-cluster-risk/developed-markets.ts @@ -13,8 +13,7 @@ export class EconomicMarketClusterRiskDevelopedMarkets extends Rule { developedMarketsValueInBaseCurrency: number ) { super(exchangeRateDataService, { - key: EconomicMarketClusterRiskDevelopedMarkets.name, - name: 'Developed Markets' + key: EconomicMarketClusterRiskDevelopedMarkets.name }); this.currentValueInBaseCurrency = currentValueInBaseCurrency; @@ -67,6 +66,10 @@ export class EconomicMarketClusterRiskDevelopedMarkets extends Rule { }; } + public getName() { + return 'Developed Markets'; + } + public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, diff --git a/apps/api/src/models/rules/economic-market-cluster-risk/emerging-markets.ts b/apps/api/src/models/rules/economic-market-cluster-risk/emerging-markets.ts index 8fccdf1d8..48eff22cf 100644 --- a/apps/api/src/models/rules/economic-market-cluster-risk/emerging-markets.ts +++ b/apps/api/src/models/rules/economic-market-cluster-risk/emerging-markets.ts @@ -13,8 +13,7 @@ export class EconomicMarketClusterRiskEmergingMarkets extends Rule { emergingMarketsValueInBaseCurrency: number ) { super(exchangeRateDataService, { - key: EconomicMarketClusterRiskEmergingMarkets.name, - name: 'Emerging Markets' + key: EconomicMarketClusterRiskEmergingMarkets.name }); this.currentValueInBaseCurrency = currentValueInBaseCurrency; @@ -67,6 +66,10 @@ export class EconomicMarketClusterRiskEmergingMarkets extends Rule { }; } + public getName() { + return 'Emerging Markets'; + } + public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, diff --git a/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts b/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts index d13f2ffc5..8b53e6799 100644 --- a/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts +++ b/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts @@ -11,8 +11,7 @@ export class EmergencyFundSetup extends Rule { emergencyFund: number ) { super(exchangeRateDataService, { - key: EmergencyFundSetup.name, - name: 'Emergency Fund: Set up' + key: EmergencyFundSetup.name }); this.emergencyFund = emergencyFund; @@ -36,6 +35,10 @@ export class EmergencyFundSetup extends Rule { return undefined; } + public getName() { + return 'Emergency Fund: Set up'; + } + public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, diff --git a/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts b/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts index 608b6956f..4298eed44 100644 --- a/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts +++ b/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts @@ -17,8 +17,7 @@ export class FeeRatioInitialInvestment extends Rule { ) { super(exchangeRateDataService, { languageCode, - key: FeeRatioInitialInvestment.name, - name: 'Fee Ratio' + key: FeeRatioInitialInvestment.name }); this.fees = fees; @@ -69,6 +68,13 @@ export class FeeRatioInitialInvestment extends Rule { }; } + public getName() { + return this.i18nService.getTranslation({ + id: 'rule.feeRatioInitialInvestment', + languageCode: this.getLanguageCode() + }); + } + public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, diff --git a/apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts b/apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts index d49849d54..823da9e27 100644 --- a/apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts +++ b/apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts @@ -14,8 +14,7 @@ export class RegionalMarketClusterRiskAsiaPacific extends Rule { asiaPacificValueInBaseCurrency: number ) { super(exchangeRateDataService, { - key: RegionalMarketClusterRiskAsiaPacific.name, - name: 'Asia-Pacific' + key: RegionalMarketClusterRiskAsiaPacific.name }); this.asiaPacificValueInBaseCurrency = asiaPacificValueInBaseCurrency; @@ -66,6 +65,10 @@ export class RegionalMarketClusterRiskAsiaPacific extends Rule { }; } + public getName() { + return 'Asia-Pacific'; + } + public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, diff --git a/apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts b/apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts index 2d9a3b394..b1ab74e1f 100644 --- a/apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts +++ b/apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts @@ -14,8 +14,7 @@ export class RegionalMarketClusterRiskEmergingMarkets extends Rule { emergingMarketsValueInBaseCurrency: number ) { super(exchangeRateDataService, { - key: RegionalMarketClusterRiskEmergingMarkets.name, - name: 'Emerging Markets' + key: RegionalMarketClusterRiskEmergingMarkets.name }); this.currentValueInBaseCurrency = currentValueInBaseCurrency; @@ -68,6 +67,10 @@ export class RegionalMarketClusterRiskEmergingMarkets extends Rule { }; } + public getName() { + return 'Emerging Markets'; + } + public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, diff --git a/apps/api/src/models/rules/regional-market-cluster-risk/europe.ts b/apps/api/src/models/rules/regional-market-cluster-risk/europe.ts index d33190ceb..3b069cf57 100644 --- a/apps/api/src/models/rules/regional-market-cluster-risk/europe.ts +++ b/apps/api/src/models/rules/regional-market-cluster-risk/europe.ts @@ -14,8 +14,7 @@ export class RegionalMarketClusterRiskEurope extends Rule { europeValueInBaseCurrency: number ) { super(exchangeRateDataService, { - key: RegionalMarketClusterRiskEurope.name, - name: 'Europe' + key: RegionalMarketClusterRiskEurope.name }); this.currentValueInBaseCurrency = currentValueInBaseCurrency; @@ -66,6 +65,10 @@ export class RegionalMarketClusterRiskEurope extends Rule { }; } + public getName() { + return 'Europe'; + } + public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, diff --git a/apps/api/src/models/rules/regional-market-cluster-risk/japan.ts b/apps/api/src/models/rules/regional-market-cluster-risk/japan.ts index 4694b0006..511393cfb 100644 --- a/apps/api/src/models/rules/regional-market-cluster-risk/japan.ts +++ b/apps/api/src/models/rules/regional-market-cluster-risk/japan.ts @@ -14,8 +14,7 @@ export class RegionalMarketClusterRiskJapan extends Rule { japanValueInBaseCurrency: number ) { super(exchangeRateDataService, { - key: RegionalMarketClusterRiskJapan.name, - name: 'Japan' + key: RegionalMarketClusterRiskJapan.name }); this.currentValueInBaseCurrency = currentValueInBaseCurrency; @@ -66,6 +65,10 @@ export class RegionalMarketClusterRiskJapan extends Rule { }; } + public getName() { + return 'Japan'; + } + public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, diff --git a/apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts b/apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts index 4563b7c54..5bea57db1 100644 --- a/apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts +++ b/apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts @@ -14,8 +14,7 @@ export class RegionalMarketClusterRiskNorthAmerica extends Rule { northAmericaValueInBaseCurrency: number ) { super(exchangeRateDataService, { - key: RegionalMarketClusterRiskNorthAmerica.name, - name: 'North America' + key: RegionalMarketClusterRiskNorthAmerica.name }); this.currentValueInBaseCurrency = currentValueInBaseCurrency; @@ -66,6 +65,10 @@ export class RegionalMarketClusterRiskNorthAmerica extends Rule { }; } + public getName() { + return 'North America'; + } + public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, diff --git a/apps/client/src/app/pages/i18n/i18n-page.html b/apps/client/src/app/pages/i18n/i18n-page.html index fb6da2694..e1c244265 100644 --- a/apps/client/src/app/pages/i18n/i18n-page.html +++ b/apps/client/src/app/pages/i18n/i18n-page.html @@ -11,6 +11,7 @@ performance, portfolio, software, stock, trading, wealth, web3
  • My Account
  • +
  • Fee Ratio
  • The fees do exceed {thresholdMax}% of your initial investment ({feeRatio}%)