compliance / app /api /endpoints.py
lucifer7210's picture
Upload 12 files
4b46b44 verified
import io
from fastapi.responses import StreamingResponse
from datetime import datetime
from fastapi import APIRouter, HTTPException
from app.core.data_provider import IndianDataProvider
from app.core.swarms_client import create_indian_compliance_swarm
from app.models.schemas import (
StockDataRequest, StockDataResponse,
ComplianceAnalysisRequest, ComplianceAnalysisResponse, GenerateCSVRequest
)
from app.utils.helpers import create_comprehensive_csv_data
router = APIRouter()
data_provider = IndianDataProvider()
@router.post("/stock-data", response_model=StockDataResponse)
async def get_stock_data(request: StockDataRequest):
"""Fetch NSE stock data for a given symbol"""
try:
stock_data = data_provider.get_nse_stock_data(request.symbol)
if not stock_data.get('success'):
return StockDataResponse(
success=False,
error=stock_data.get('error', 'Unknown error')
)
formatted_data = data_provider.format_stock_data_for_analysis(stock_data)
return StockDataResponse(
success=True,
data=stock_data,
formatted_data=formatted_data
)
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error fetching stock data: {str(e)}")
@router.post("/compliance-analysis", response_model=ComplianceAnalysisResponse)
async def run_compliance_analysis(request: ComplianceAnalysisRequest):
"""Run compliance analysis on financial data"""
try:
result = create_indian_compliance_swarm(
request.financial_data,
request.company_info
)
if "error" in result:
return ComplianceAnalysisResponse(
success=False,
error=result["error"]
)
return ComplianceAnalysisResponse(
success=True,
result=result
)
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error running compliance analysis: {str(e)}")
# Update the generate-csv endpoint
@router.post("/generate-csv")
async def generate_csv_report(request: GenerateCSVRequest):
"""Generate CSV report for compliance analysis and return as downloadable file"""
try:
df = create_comprehensive_csv_data(
request.data_source,
request.company_info,
request.accounting_standards,
request.regulatory_frameworks,
request.result
)
# Create a stream for the CSV data
stream = io.StringIO()
df.to_csv(stream, index=False)
# Create a response that will download the CSV file
response = StreamingResponse(
iter([stream.getvalue()]),
media_type="text/csv",
headers={
"Content-Disposition": f"attachment; filename=compliance_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"
}
)
return response
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error generating CSV: {str(e)}")
@router.get("/popular-stocks")
async def get_popular_stocks():
"""Get list of popular NSE stocks"""
popular_stocks = [
'ADANIENT', 'ADANIPORTS', 'APOLLOHOSP', 'ASIANPAINT',
'AXISBANK', 'BAJAJ-AUTO', 'BAJFINANCE', 'BAJAJFINSV',
'BEL', 'BHARTIARTL', 'CIPL', 'COALINDIA', 'DRREDDY',
'EICHERMOT', 'GRASIM', 'HCLTECH', 'HDFCBANK', 'HDFCLIFE',
'HINDALCO', 'HINDUNILVR', 'ICICIBANK', 'INFY', 'ITC',
'JIOFIN', 'JSWSTEEL', 'KOTAKBANK', 'LT', 'M&M', 'MARUTI',
'MAXHEALTH', 'NESTLEIND', 'NTPC', 'ONGC', 'POWERGRID',
'RELIANCE', 'SBILIFE', 'SBIN', 'SHRIRAMFIN', 'SUNPHARMA',
'TATACONSUM', 'TCS', 'TATAMOTORS', 'TATASTEEL', 'TECHM',
'TITAN', 'TRENT', 'ULTRACEMCO', 'WIPRO', 'INDIGO','ETERNAL',
'HINDPETRO', 'TATAPOWER', 'BAJAJHLDNG', 'HEROMOTOCO', 'INDUSINDBK'
]
return {"stocks": popular_stocks}