Omkar008's picture
Create app.py
40da58c verified
raw
history blame
No virus
3.99 kB
from fastapi import FastAPI, HTTPException
from supabase import create_client, Client
from typing import List, Dict
from datetime import datetime
import os
from dotenv import load_dotenv
import json
load_dotenv()
import logging
app = FastAPI()
# Initialize Supabase client
url: str = os.getenv('SUPABASE_URL')
key: str = os.getenv('SUPABASE_KEY')
supabase: Client = create_client(url, key)
@app.get("/insurance-analytics")
async def get_insurance_analytics():
# Fetch data from Supabase
response = supabase.table("insurance_data").select("*").eq("hushh_id","4b7fa719-244e-4ae8-9025-651a9a41e43f").execute()
receipts = response.data
print(receipts)
analytics = {
"policy_overview": {
"types_of_policies": {},
"total_coverage_amount": 0,
"premium_payments": {
"total": 0,
"frequency_distribution": {}
}
},
"claim_patterns": {
"total_claims": 0,
"total_claim_amount": 0
},
"policy_renewal": {
"total_policies": len(receipts),
"active_policies": 0,
"lapsed_policies": 0
}
}
current_date = datetime.now()
for receipt in receipts:
metadata = json.loads(receipt['metadata'])
print("printing metadata")
print(metadata)
# Policy overview
policy_type = metadata.get('policy_type')
analytics['policy_overview']['types_of_policies'][policy_type] = analytics['policy_overview']['types_of_policies'].get(policy_type, 0) + 1
coverage_amount = float(metadata.get('coverage_amount', 0))
analytics['policy_overview']['total_coverage_amount'] += coverage_amount
premium_amount = float(metadata.get('premium_amount', 0))
analytics['policy_overview']['premium_payments']['total'] += premium_amount
premium_frequency = metadata.get('premium_frequency')
analytics['policy_overview']['premium_payments']['frequency_distribution'][premium_frequency] = analytics['policy_overview']['premium_payments']['frequency_distribution'].get(premium_frequency, 0) + 1
# Claim patterns
if metadata.get('claim_number'):
analytics['claim_patterns']['total_claims'] += 1
claim_amount = metadata.get('claim_amount')
if claim_amount is not None:
try:
claim_amount = float(claim_amount)
analytics['claim_patterns']['total_claim_amount'] += claim_amount
except:
logging.warning(f"Invalid claim amount: {claim_amount}")
# Policy renewal
# Policy renewal
try:
policy_end_date = datetime.strptime(metadata.get('policy_end_date'), "%m-%d-%Y")
if policy_end_date > current_date:
analytics['policy_renewal']['active_policies'] += 1
else:
analytics['policy_renewal']['lapsed_policies'] += 1
except (ValueError, TypeError):
logging.error(f"Invalid date format for policy_end_date: {metadata.get('policy_end_date')}")
# Calculate percentage distribution for premium frequency
total_policies = sum(analytics['policy_overview']['premium_payments']['frequency_distribution'].values())
if total_policies > 0:
analytics['policy_overview']['premium_payments']['frequency_percentage'] = {
freq: (count / total_policies) * 100
for freq, count in analytics['policy_overview']['premium_payments']['frequency_distribution'].items()
}
else:
logging.warning("No valid policies found for frequency percentage calculation")
logging.debug(f"Final analytics: {analytics}")
return analytics