Omkar008 commited on
Commit
40da58c
1 Parent(s): be372d1

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +99 -0
app.py ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI, HTTPException
2
+ from supabase import create_client, Client
3
+ from typing import List, Dict
4
+ from datetime import datetime
5
+ import os
6
+ from dotenv import load_dotenv
7
+ import json
8
+ load_dotenv()
9
+ import logging
10
+ app = FastAPI()
11
+
12
+ # Initialize Supabase client
13
+ url: str = os.getenv('SUPABASE_URL')
14
+ key: str = os.getenv('SUPABASE_KEY')
15
+ supabase: Client = create_client(url, key)
16
+
17
+ @app.get("/insurance-analytics")
18
+ async def get_insurance_analytics():
19
+
20
+ # Fetch data from Supabase
21
+ response = supabase.table("insurance_data").select("*").eq("hushh_id","4b7fa719-244e-4ae8-9025-651a9a41e43f").execute()
22
+ receipts = response.data
23
+ print(receipts)
24
+ analytics = {
25
+ "policy_overview": {
26
+ "types_of_policies": {},
27
+ "total_coverage_amount": 0,
28
+ "premium_payments": {
29
+ "total": 0,
30
+ "frequency_distribution": {}
31
+ }
32
+ },
33
+ "claim_patterns": {
34
+ "total_claims": 0,
35
+ "total_claim_amount": 0
36
+ },
37
+ "policy_renewal": {
38
+ "total_policies": len(receipts),
39
+ "active_policies": 0,
40
+ "lapsed_policies": 0
41
+ }
42
+ }
43
+
44
+ current_date = datetime.now()
45
+
46
+ for receipt in receipts:
47
+ metadata = json.loads(receipt['metadata'])
48
+ print("printing metadata")
49
+ print(metadata)
50
+
51
+ # Policy overview
52
+ policy_type = metadata.get('policy_type')
53
+ analytics['policy_overview']['types_of_policies'][policy_type] = analytics['policy_overview']['types_of_policies'].get(policy_type, 0) + 1
54
+
55
+ coverage_amount = float(metadata.get('coverage_amount', 0))
56
+ analytics['policy_overview']['total_coverage_amount'] += coverage_amount
57
+
58
+ premium_amount = float(metadata.get('premium_amount', 0))
59
+ analytics['policy_overview']['premium_payments']['total'] += premium_amount
60
+
61
+ premium_frequency = metadata.get('premium_frequency')
62
+ analytics['policy_overview']['premium_payments']['frequency_distribution'][premium_frequency] = analytics['policy_overview']['premium_payments']['frequency_distribution'].get(premium_frequency, 0) + 1
63
+
64
+ # Claim patterns
65
+ if metadata.get('claim_number'):
66
+ analytics['claim_patterns']['total_claims'] += 1
67
+ claim_amount = metadata.get('claim_amount')
68
+ if claim_amount is not None:
69
+ try:
70
+ claim_amount = float(claim_amount)
71
+ analytics['claim_patterns']['total_claim_amount'] += claim_amount
72
+ except:
73
+ logging.warning(f"Invalid claim amount: {claim_amount}")
74
+ # Policy renewal
75
+ # Policy renewal
76
+ try:
77
+ policy_end_date = datetime.strptime(metadata.get('policy_end_date'), "%m-%d-%Y")
78
+ if policy_end_date > current_date:
79
+ analytics['policy_renewal']['active_policies'] += 1
80
+ else:
81
+ analytics['policy_renewal']['lapsed_policies'] += 1
82
+ except (ValueError, TypeError):
83
+ logging.error(f"Invalid date format for policy_end_date: {metadata.get('policy_end_date')}")
84
+
85
+ # Calculate percentage distribution for premium frequency
86
+ total_policies = sum(analytics['policy_overview']['premium_payments']['frequency_distribution'].values())
87
+ if total_policies > 0:
88
+ analytics['policy_overview']['premium_payments']['frequency_percentage'] = {
89
+ freq: (count / total_policies) * 100
90
+ for freq, count in analytics['policy_overview']['premium_payments']['frequency_distribution'].items()
91
+ }
92
+ else:
93
+ logging.warning("No valid policies found for frequency percentage calculation")
94
+
95
+ logging.debug(f"Final analytics: {analytics}")
96
+
97
+ return analytics
98
+
99
+