|  |  | @ -6,6 +6,7 @@ import { | 
			
		
	
		
			
				
					|  |  |  |   IDataProviderHistoricalResponse, | 
			
		
	
		
			
				
					|  |  |  |   IDataProviderResponse | 
			
		
	
		
			
				
					|  |  |  | } from '@ghostfolio/api/services/interfaces/interfaces'; | 
			
		
	
		
			
				
					|  |  |  | import { UNKNOWN_KEY } from '@ghostfolio/common/config'; | 
			
		
	
		
			
				
					|  |  |  | import { DATE_FORMAT, isCurrency } from '@ghostfolio/common/helper'; | 
			
		
	
		
			
				
					|  |  |  | import { Granularity } from '@ghostfolio/common/types'; | 
			
		
	
		
			
				
					|  |  |  | import { Injectable, Logger } from '@nestjs/common'; | 
			
		
	
	
		
			
				
					|  |  | @ -90,7 +91,7 @@ export class YahooFinanceService implements DataProviderInterface { | 
			
		
	
		
			
				
					|  |  |  |     try { | 
			
		
	
		
			
				
					|  |  |  |       const symbol = this.convertToYahooFinanceSymbol(aSymbol); | 
			
		
	
		
			
				
					|  |  |  |       const assetProfile = await yahooFinance.quoteSummary(symbol, { | 
			
		
	
		
			
				
					|  |  |  |         modules: ['price', 'summaryProfile'] | 
			
		
	
		
			
				
					|  |  |  |         modules: ['price', 'summaryProfile', 'topHoldings'] | 
			
		
	
		
			
				
					|  |  |  |       }); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |       const { assetClass, assetSubClass } = this.parseAssetClass( | 
			
		
	
	
		
			
				
					|  |  | @ -109,7 +110,16 @@ export class YahooFinanceService implements DataProviderInterface { | 
			
		
	
		
			
				
					|  |  |  |       }); | 
			
		
	
		
			
				
					|  |  |  |       response.symbol = aSymbol; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |       if ( | 
			
		
	
		
			
				
					|  |  |  |       if (assetSubClass === AssetSubClass.MUTUALFUND) { | 
			
		
	
		
			
				
					|  |  |  |         response.sectors = []; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         for (const sectorWeighting of assetProfile.topHoldings | 
			
		
	
		
			
				
					|  |  |  |           ?.sectorWeightings ?? []) { | 
			
		
	
		
			
				
					|  |  |  |           for (const [sector, weight] of Object.entries(sectorWeighting)) { | 
			
		
	
		
			
				
					|  |  |  |             response.sectors.push({ weight, name: this.parseSector(sector) }); | 
			
		
	
		
			
				
					|  |  |  |           } | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |       } else if ( | 
			
		
	
		
			
				
					|  |  |  |         assetSubClass === AssetSubClass.STOCK && | 
			
		
	
		
			
				
					|  |  |  |         assetProfile.summaryProfile?.country | 
			
		
	
		
			
				
					|  |  |  |       ) { | 
			
		
	
	
		
			
				
					|  |  | @ -437,4 +447,46 @@ export class YahooFinanceService implements DataProviderInterface { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     return { assetClass, assetSubClass }; | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   private parseSector(aString: string): string { | 
			
		
	
		
			
				
					|  |  |  |     let sector = UNKNOWN_KEY; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     switch (aString) { | 
			
		
	
		
			
				
					|  |  |  |       case 'basic_materials': | 
			
		
	
		
			
				
					|  |  |  |         sector = 'Basic Materials'; | 
			
		
	
		
			
				
					|  |  |  |         break; | 
			
		
	
		
			
				
					|  |  |  |       case 'communication_services': | 
			
		
	
		
			
				
					|  |  |  |         sector = 'Communication Services'; | 
			
		
	
		
			
				
					|  |  |  |         break; | 
			
		
	
		
			
				
					|  |  |  |       case 'consumer_cyclical': | 
			
		
	
		
			
				
					|  |  |  |         sector = 'Consumer Cyclical'; | 
			
		
	
		
			
				
					|  |  |  |         break; | 
			
		
	
		
			
				
					|  |  |  |       case 'consumer_defensive': | 
			
		
	
		
			
				
					|  |  |  |         sector = 'Consumer Staples'; | 
			
		
	
		
			
				
					|  |  |  |         break; | 
			
		
	
		
			
				
					|  |  |  |       case 'energy': | 
			
		
	
		
			
				
					|  |  |  |         sector = 'Energy'; | 
			
		
	
		
			
				
					|  |  |  |         break; | 
			
		
	
		
			
				
					|  |  |  |       case 'financial_services': | 
			
		
	
		
			
				
					|  |  |  |         sector = 'Financial Services'; | 
			
		
	
		
			
				
					|  |  |  |         break; | 
			
		
	
		
			
				
					|  |  |  |       case 'healthcare': | 
			
		
	
		
			
				
					|  |  |  |         sector = 'Healthcare'; | 
			
		
	
		
			
				
					|  |  |  |         break; | 
			
		
	
		
			
				
					|  |  |  |       case 'industrials': | 
			
		
	
		
			
				
					|  |  |  |         sector = 'Industrials'; | 
			
		
	
		
			
				
					|  |  |  |         break; | 
			
		
	
		
			
				
					|  |  |  |       case 'realestate': | 
			
		
	
		
			
				
					|  |  |  |         sector = 'Real Estate'; | 
			
		
	
		
			
				
					|  |  |  |         break; | 
			
		
	
		
			
				
					|  |  |  |       case 'technology': | 
			
		
	
		
			
				
					|  |  |  |         sector = 'Technology'; | 
			
		
	
		
			
				
					|  |  |  |         break; | 
			
		
	
		
			
				
					|  |  |  |       case 'utilities': | 
			
		
	
		
			
				
					|  |  |  |         sector = 'Utilities'; | 
			
		
	
		
			
				
					|  |  |  |         break; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     return sector; | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
	
		
			
				
					|  |  | 
 |