|  | @ -28,36 +28,6 @@ const HOLDINGS_TABLE_COLUMNS: ({ key: string } & ColumnDescriptor)[] = [ | 
			
		
	
		
		
			
				
					|  |  |   { key: 'ASSET_SUB_CLASS', name: 'Asset Sub Class' } |  |  |   { key: 'ASSET_SUB_CLASS', name: 'Asset Sub Class' } | 
			
		
	
		
		
			
				
					|  |  | ]; |  |  | ]; | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | // Helper function to get column value for holdings table
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  | const getColumnValue = ( |  |  |  | 
			
		
	
		
		
			
				
					|  |  |   key: string, |  |  |  | 
			
		
	
		
		
			
				
					|  |  |   holding: { |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     currency: string; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     name: string; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     symbol: string; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     assetClass?: string; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     allocationInPercentage: number; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     assetSubClass?: string; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |   } |  |  |  | 
			
		
	
		
		
			
				
					|  |  | ) => { |  |  |  | 
			
		
	
		
		
			
				
					|  |  |   switch (key) { |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     case 'CURRENCY': |  |  |  | 
			
		
	
		
		
			
				
					|  |  |       return holding.currency; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     case 'NAME': |  |  |  | 
			
		
	
		
		
			
				
					|  |  |       return holding.name; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     case 'SYMBOL': |  |  |  | 
			
		
	
		
		
			
				
					|  |  |       return holding.symbol; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     case 'ASSET_CLASS': |  |  |  | 
			
		
	
		
		
			
				
					|  |  |       return holding.assetClass ?? ''; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     case 'ALLOCATION_PERCENTAGE': |  |  |  | 
			
		
	
		
		
			
				
					|  |  |       return `${(holding.allocationInPercentage * 100).toFixed(3)}%`; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     case 'ASSET_SUB_CLASS': |  |  |  | 
			
		
	
		
		
			
				
					|  |  |       return holding.assetSubClass ?? ''; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     default: |  |  |  | 
			
		
	
		
		
			
				
					|  |  |       return ''; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |   } |  |  |  | 
			
		
	
		
		
			
				
					|  |  | }; |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  | @Injectable() |  |  | @Injectable() | 
			
		
	
		
		
			
				
					|  |  | export class AiService { |  |  | export class AiService { | 
			
		
	
		
		
			
				
					|  |  |   public constructor( |  |  |   public constructor( | 
			
		
	
	
		
		
			
				
					|  | @ -106,7 +76,7 @@ export class AiService { | 
			
		
	
		
		
			
				
					|  |  |     }); |  |  |     }); | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |     const holdingsTableColumns: ColumnDescriptor[] = HOLDINGS_TABLE_COLUMNS.map( |  |  |     const holdingsTableColumns: ColumnDescriptor[] = HOLDINGS_TABLE_COLUMNS.map( | 
			
		
	
		
		
			
				
					
					|  |  |       ({ name, align }) => { |  |  |       ({ align, name }) => { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |         return { name, align: align ?? 'left' }; |  |  |         return { name, align: align ?? 'left' }; | 
			
		
	
		
		
			
				
					|  |  |       } |  |  |       } | 
			
		
	
		
		
			
				
					|  |  |     ); |  |  |     ); | 
			
		
	
	
		
		
			
				
					|  | @ -118,7 +88,30 @@ export class AiService { | 
			
		
	
		
		
			
				
					|  |  |       .map((holding) => { |  |  |       .map((holding) => { | 
			
		
	
		
		
			
				
					|  |  |         return HOLDINGS_TABLE_COLUMNS.reduce( |  |  |         return HOLDINGS_TABLE_COLUMNS.reduce( | 
			
		
	
		
		
			
				
					|  |  |           (row, { key, name }) => { |  |  |           (row, { key, name }) => { | 
			
		
	
		
		
			
				
					
					|  |  |             row[name] = getColumnValue(key, holding); |  |  |             switch (key) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  |               case 'CURRENCY': | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 row[name] = holding.currency; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 break; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |               case 'NAME': | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 row[name] = holding.name; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 break; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |               case 'SYMBOL': | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 row[name] = holding.symbol; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 break; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |               case 'ASSET_CLASS': | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 row[name] = holding.assetClass ?? ''; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 break; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |               case 'ALLOCATION_PERCENTAGE': | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 row[name] = | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                   `${(holding.allocationInPercentage * 100).toFixed(3)}%`; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 break; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |               case 'ASSET_SUB_CLASS': | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 row[name] = holding.assetSubClass ?? ''; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 break; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |               default: | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 row[name] = ''; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 break; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					|  |  |             return row; |  |  |             return row; | 
			
		
	
		
		
			
				
					|  |  |           }, |  |  |           }, | 
			
		
	
		
		
			
				
					|  |  |           {} as Record<string, string> |  |  |           {} as Record<string, string> | 
			
		
	
	
		
		
			
				
					|  | 
 |