File size: 1,559 Bytes
eb606e1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from pydantic import BaseModel, Field, field_validator
from typing import List, Dict, Optional, Any
from datetime import datetime

class FundMeta(BaseModel):
    fund_house: Optional[str] = None
    scheme_type: Optional[str] = None
    scheme_category: Optional[str] = None
    scheme_code: Optional[str] = None
    
    @field_validator('scheme_code', mode='before')
    @classmethod
    def convert_scheme_code_to_str(cls, v):
        if v is not None:
            return str(v)
        return v

class NAVData(BaseModel):
    date: datetime
    nav: float

class FundNAVResponse(BaseModel):
    meta: FundMeta
    data: List[NAVData]

class MarketIndex(BaseModel):
    name: str
    symbol: str
    current_price: float
    change: float
    change_pct: float

class MarketIndicesResponse(BaseModel):
    indices: List[MarketIndex]
    last_updated: datetime

class FundAnalysisRequest(BaseModel):
    fund_names: List[str]
    investment_amount: float = Field(gt=0)
    start_date: datetime
    end_date: datetime

class FundReturn(BaseModel):
    start_nav: float
    end_nav: float
    units: float
    final_value: float
    total_return: float
    investment_amount: float

class FundAnalysisResult(BaseModel):
    fund_name: str
    category: str
    scheme_code: str
    fund_house: str
    returns_data: FundReturn
    nav_data: List[NAVData]
    fund_meta: FundMeta

class FundAnalysisResponse(BaseModel):
    results: List[FundAnalysisResult]
    comparison_data: List[Dict[str, Any]]