From 7754864419365eace376603e2458b8cb10c04274 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 9 Aug 2026 18:35:49 +0200 Subject: [PATCH] Bugfix/handle unknown country names in data enhancer for asset profile data (#7574) * Handle unknown country names * Update changelog --- CHANGELOG.md | 5 +++++ apps/api/src/helper/country.helper.ts | 7 +++++++ .../trackinsight/trackinsight.service.ts | 14 ++++++++------ .../financial-modeling-prep.service.ts | 6 +++--- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 40cf134c2..e402c4c70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the language localization for German (`de`) +### Fixed + +- Resolved an issue with unknown country names in the country weightings of the _Financial Modeling Prep_ service +- Resolved an issue with unknown country names in the data enhancer for asset profile data via _Trackinsight_ + ## 3.45.0 - 2026-08-08 ### Added diff --git a/apps/api/src/helper/country.helper.ts b/apps/api/src/helper/country.helper.ts index 1d9f8f99a..ecb28b8d3 100644 --- a/apps/api/src/helper/country.helper.ts +++ b/apps/api/src/helper/country.helper.ts @@ -1,3 +1,4 @@ +import { Logger } from '@nestjs/common'; import { countries } from 'countries-list'; export function getCountryCodeByName({ @@ -17,5 +18,11 @@ export function getCountryCodeByName({ } } + if (name) { + const logger = new Logger('getCountryCodeByName'); + + logger.warn(`Could not map the country "${name}" to a code`); + } + return undefined; } diff --git a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts index 29e4e5129..7f58448b7 100644 --- a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts @@ -16,6 +16,7 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { private static baseUrl = 'https://www.trackinsight.com'; private static countriesMapping = { + 'Czech Republic': 'CZ', 'Republic of Korea': 'KR', 'Russian Federation': 'RU', Turkey: 'TR', @@ -125,13 +126,14 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { for (const [name, value] of Object.entries( holdings?.countries ?? {} )) { - response.countries.push({ - code: getCountryCodeByName({ - name, - aliases: TrackinsightDataEnhancerService.countriesMapping - }), - weight: value.weight + const code = getCountryCodeByName({ + name, + aliases: TrackinsightDataEnhancerService.countriesMapping }); + + if (code) { + response.countries.push({ code, weight: value.weight }); + } } } diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index f7f2e7eb9..f4c36d256 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -169,9 +169,6 @@ export class FinancialModelingPrepService .then((res) => res.json()); response.countries = etfCountryWeightings - .filter(({ country: countryName }) => { - return countryName.toLowerCase() !== 'other'; - }) .map(({ country: countryName, weightPercentage }) => { return { code: getCountryCodeByName({ @@ -180,6 +177,9 @@ export class FinancialModelingPrepService }), weight: parseFloat(`${weightPercentage}`) / 100 }; + }) + .filter(({ code }) => { + return !!code; }); const etfHoldings = await this.fetchService