charantejapolavarapu's picture
Update app.py
4eca991 verified
import gradio as gr
import pandas as pd
import os
from datetime import datetime
DB_FILE = "medical_db.csv"
# --- DATABASE ---
def init_db():
if not os.path.exists(DB_FILE):
df = pd.DataFrame(columns=["Date", "Name", "Plan_Type", "Subscription", "Dependents", "Premium", "Income", "Currency"])
df.to_csv(DB_FILE, index=False)
def save_enrollment(name, plan_type, sub_plan, dependents, premium, income, currency):
init_db()
new_entry = {
"Date": datetime.now().strftime("%Y-%m-%d"),
"Name": name,
"Plan_Type": plan_type,
"Subscription": sub_plan,
"Dependents": dependents,
"Premium": premium,
"Income": income,
"Currency": currency
}
df = pd.read_csv(DB_FILE)
df = pd.concat([df, pd.DataFrame([new_entry])], ignore_index=True)
df.to_csv(DB_FILE, index=False)
return f"✅ Enrollment Successful for {name}!"
def search_db(name_query):
if not os.path.exists(DB_FILE):
return pd.DataFrame()
df = pd.read_csv(DB_FILE)
if not name_query:
return df
result = df[df['Name'].str.contains(name_query, case=False, na=False)]
return result
# --- LOGIC ---
CURRENCIES = {"USD ($)": 1.0, "EUR (€)": 0.92, "INR (₹)": 83.0, "GBP (£)": 0.79}
SUB_MULTIPLIERS = {"Normal": 1.0, "Medium": 1.5, "High": 2.2}
CATEGORY_MULT = {"Individual": 1.0, "Family": 1.8, "Senior Citizen": 2.0, "Student": 0.7}
def process_insurance(name, age, income, currency, plan_type, sub_plan, dependents, smoker, enroll):
if not name or income is None:
return "⚠️ Name and Income are required."
rate = CURRENCIES.get(currency, 1.0)
symbol = currency.split("(")[1].replace(")", "")
base = (1500 + (age * 15))
risk_m = 3.5 if smoker == "Yes" else 1.0
final_premium = (
base
* risk_m
* CATEGORY_MULT[plan_type]
* SUB_MULTIPLIERS[sub_plan]
* (1 + (dependents * 0.25))
* rate
)
report = f"""
## Quote for {name}
**Plan:** {sub_plan} {plan_type}
**Premium:** {symbol}{final_premium:,.2f}
"""
if enroll == "Yes":
msg = save_enrollment(name, plan_type, sub_plan, dependents,
f"{symbol}{final_premium:,.2f}", income, currency)
report += f"\n{msg}"
return report
# --- UI ---
with gr.Blocks() as demo:
gr.Markdown("# 🏥 MEDICAL INSURANCE SYSTEM")
with gr.Tabs():
with gr.TabItem("REGISTER & QUOTE"):
name = gr.Textbox(label="Name")
age = gr.Number(label="Age", value=25)
income = gr.Number(label="Income")
currency = gr.Dropdown(list(CURRENCIES.keys()), value="USD ($)", label="Currency")
plan = gr.Dropdown(list(CATEGORY_MULT.keys()), value="Individual", label="Plan Type")
sub = gr.Dropdown(list(SUB_MULTIPLIERS.keys()), value="Normal", label="Subscription")
dep = gr.Slider(0, 10, value=0, step=1, label="Dependents")
smoker = gr.Dropdown(["No", "Yes"], value="No", label="Smoker")
enroll = gr.Dropdown(["No", "Yes"], value="No", label="Enroll")
btn = gr.Button("Calculate")
output = gr.Markdown()
btn.click(process_insurance,
inputs=[name, age, income, currency, plan, sub, dep, smoker, enroll],
outputs=output)
with gr.TabItem("SEARCH"):
search = gr.Textbox(label="Search Name")
btn2 = gr.Button("Search")
table = gr.Dataframe()
btn2.click(search_db, inputs=search, outputs=table)
# IMPORTANT
demo.queue()
demo.launch()