File size: 4,503 Bytes
0d0b10e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

import streamlit as st
from virtualhealth import handle_user_query, book_appointment  # Import functions

st.set_page_config(page_title="AI Health Assistant", page_icon="🩺")

st.title("🩺 AI Health Assistant")
st.write("Ask any medical-related questions below:")

# Predefined responses for common medical queries
basic_queries = {
    "what is diabetes": "Diabetes is a chronic disease that affects how your body turns food into energy.",
    "what are the symptoms of flu": "Common flu symptoms include fever, cough, sore throat, and body aches.",
    "how to reduce fever": "Drink plenty of fluids, rest, and take fever-reducing medications like paracetamol.",
    "what is hypertension": "Hypertension, or high blood pressure, is when the force of blood against your artery walls is too high.",
}

# Symptom-Based Advice
symptom_advice = {
    "i have a fever": "Drink fluids, rest, and take paracetamol if needed. If fever persists for more than 3 days, consult a doctor.",
    "i feel feverish": "Monitor your temperature, drink water, and rest. If it gets worse, see a doctor.",
    "i have a cough": "Stay hydrated, avoid cold drinks, and try honey with warm water. If severe, consult a doctor.",
    "i have a headache": "Rest, drink water, and try a mild pain reliever if necessary. Persistent headaches need medical attention.",
    "i feel dizzy": "Sit down, drink water, and take deep breaths. If dizziness continues, consult a doctor.",
    "i have stomach pain": "Avoid spicy food, drink warm water, and rest. Severe pain may require a doctor's check-up.",
}

# Critical Symptoms Mapping
critical_symptoms = {
    "I feel heart pain": "Cardiologist",
    "I have chest pain and shortness of breath": "Cardiologist",
    "I am experiencing severe headache and dizziness": "Neurologist",
    "I have slurred speech and numbness on one side": "Neurologist",
    "I have severe abdominal pain and vomiting blood": "General Physician",
}

# Appointment Booking Data
doctor_specialties = {
    "General Physician": {"doctor": "Dr. Smith", "available_slots": ["2025-03-10 10:00:00", "2025-03-11 14:00:00"]},
    "Cardiologist": {"doctor": "Dr. Johnson", "available_slots": ["2025-03-12 09:30:00"]},
    "Dermatologist": {"doctor": "Dr. Lee", "available_slots": ["2025-03-10 11:00:00", "2025-03-11 15:00:00"]},
    "Neurologist": {"doctor": "Dr. Brown", "available_slots": ["2025-03-13 11:00:00"]},
    "Pediatrician": {"doctor": "Dr. Wilson", "available_slots": ["2025-03-14 10:00:00"]},
    "Dentist": {"doctor": "Dr. Davis", "available_slots": ["2025-03-15 12:00:00"]},
}

# User Input
user_input = st.text_input("Your Question or Symptoms:")

if st.button("Ask", key="ask_button"):
    user_input_lower = user_input.lower().strip()

    # Check if the query matches predefined questions
    if user_input_lower in basic_queries:
        st.markdown(f"**πŸ€– Bot:** {basic_queries[user_input_lower]}")
    
    # Check if the input matches known symptoms
    elif user_input_lower in symptom_advice:
        st.markdown(f"**🩺 Health Advice:** {symptom_advice[user_input_lower]}")
    
    # Check if it's a critical symptom
    elif user_input in critical_symptoms:
        specialty = critical_symptoms[user_input]
        st.warning(f"🚨 This may be a serious condition! Consider consulting a {specialty}.")
    
    # Otherwise, use AI response
    else:
        bot_response = handle_user_query(user_input)  
        st.markdown(f"**πŸ€– Bot:** {bot_response}")

# Doctor Appointment Booking
st.subheader("πŸ“… Book a Doctor's Appointment")

selected_specialty = st.selectbox("Select Doctor Specialty", list(doctor_specialties.keys()))
appt_date = st.date_input("Select Appointment Date")
appt_time = st.time_input("Select Appointment Time")

if st.button("Book Appointment"):
    doctor_info = doctor_specialties[selected_specialty]
    doctor_name = doctor_info["doctor"]
    requested_slot = f"{appt_date} {appt_time}"

    if requested_slot in doctor_info["available_slots"]:
        booking_details = f"{selected_specialty} (Dr. {doctor_name}) on {requested_slot}"
        book_appointment(booking_details)  
        st.success(f"βœ… Appointment confirmed with {doctor_name} on {requested_slot}.")
    else:
        nearest_slot = doctor_info["available_slots"][0]
        st.error(f"❌ No available doctors at that time. Nearest available slot: {nearest_slot} with {doctor_name}.")