Spaces:
Sleeping
Sleeping
File size: 6,344 Bytes
5925eac 842fce5 5925eac 842fce5 5925eac 842fce5 5925eac c0d20a2 5925eac 842fce5 5925eac 842fce5 5925eac c0d20a2 5925eac c0d20a2 5925eac |
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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
import gradio as gr
import os
import json
import pandas as pd
from data_service import DataAssessmentService
from datetime import datetime
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from sheets_integration import SheetsLogger
# Initialize services
service = DataAssessmentService(api_key=os.environ.get("OPENAI_API_KEY"))
sheets_logger = SheetsLogger()
EXAMPLE_REQUESTS = """
### Example 1: Clinical Data Request
I need OPD patient statistics for the Cardiology department from January to June 2024, including daily patient volume, types of cardiac conditions (ICD-10 codes), average waiting times, and number of follow-up vs. new cases. This data will be used for department capacity planning and resource allocation.
### Example 2: Quality Improvement Request
Requesting waiting time analysis for all OPD clinics for Q1 2024, including:
- Registration to first nurse contact time
- Nurse station to doctor examination time
- Doctor examination duration
- Time at pharmacy
- Total visit duration
Break down by day of week and time slots (morning/afternoon). This data will help identify service bottlenecks.
### Example 3: Department Performance Analysis
Need Emergency Department performance data for March 2024:
- Daily patient volume by triage level
- Door-to-doctor times
- Length of stay in ED
- Admission rates
- Transfer rates to other departments
Purpose: Monthly performance review and staff allocation planning.
"""
# Department mapping from abbreviations to full names
DEPARTMENTS = {
"Executive Management": "บริหาร ผอ รอง ผู้ช่วย",
"Education Support": "สนับสนุนการศึกษา",
"Medicine": "MED",
"Cardiology": "Cardio",
"Gastroenterology": "GI",
"Medical Oncology": "Onco MED",
"Hematology": "Hematology",
"Operating Room": "OR",
"Surgery": "Sx",
"Orthopedics": "Ortho",
"Obstetrics and Gynecology": "OBgyne",
"Ophthalmology": "Oph",
"Ear, Nose, and Throat": "ENT",
"Anesthesiology": "Anes",
"Emergency Medicine & EMS": "ER and EMS",
"Pediatrics": "PED",
"Family Medicine & Preventive Medicine": "GP Fammed preventive med",
"Psychiatry": "Psych",
"Physical Medicine & Rehabilitation": "PM&R Physiotherapy",
"Pathology": "Patho",
"Radiology": "Xray",
"Radiation Oncology": "Onco radiology",
"Cyclotron": "Cyclotron",
"Inpatient Department": "IPD",
"Outpatient Department": "OPD",
"Pharmacy": "Pharmacy",
"Dentistry": "dentistry",
"Nutrition": "Nutrition",
"Medical Records": "เวชระเบียน",
"Finance": "การเงิน",
"Other": "Other"
}
# Frequency options
FREQUENCIES = ["One-time request", "Weekly", "Monthly"]
# Urgency options
URGENCY = ["Within a week", "Within a month", "Within a year"]
def save_to_sheet(data):
"""Save request data to Google Sheet"""
# TODO: Implement Google Sheets integration
pass
def process_request(name, employee_id, email, department, other_dept, request_details, frequency, urgency):
# Combine department info
final_department = other_dept if department == "Other" else department
# Process the request through GPT
result = service.assess_request(request_details)
# Prepare data for logging
request_data = {
"name": name,
"employee_id": employee_id,
"email": email,
"department": final_department,
"request_details": request_details,
"frequency": frequency,
"urgency": urgency,
"system_response": json.dumps(result, ensure_ascii=False)
}
# Log to Google Sheets
sheets_logger.log_request(request_data)
return result
# Create Gradio interface
with gr.Blocks() as demo:
gr.Markdown("# Hospital Data Request System")
gr.Markdown("Please fill in the following information to request data access.")
with gr.Row():
with gr.Column():
name = gr.Textbox(label="Full Name", placeholder="Enter your full name")
employee_id = gr.Textbox(label="Employee ID", placeholder="Enter your employee ID")
email = gr.Textbox(label="Email", placeholder="Enter your email for contact")
with gr.Row():
with gr.Column():
department = gr.Dropdown(
choices=list(DEPARTMENTS.keys()) + ["Other"],
label="Department",
info="Select your department"
)
other_dept = gr.Textbox(
label="Other Department",
placeholder="Specify your department if not in the list",
visible=False
)
department.change(
fn=lambda x: gr.update(visible=x=="Other"),
inputs=[department],
outputs=[other_dept]
)
# Add collapsible examples section
with gr.Accordion("📝 Click here to see example requests", open=False):
gr.Markdown(EXAMPLE_REQUESTS)
with gr.Row():
request_details = gr.Textbox(
label="Request Details",
placeholder="Please describe in detail what data you need, including time period, specific parameters, etc.",
lines=5
)
with gr.Row():
with gr.Column():
frequency = gr.Dropdown(
choices=FREQUENCIES,
label="Request Frequency",
info="How often do you need this data?"
)
urgency = gr.Dropdown(
choices=URGENCY,
label="Urgency Level",
info="How urgent is your request?"
)
submit_btn = gr.Button("Submit Request")
output = gr.JSON(label="Analysis Result")
submit_btn.click(
fn=process_request,
inputs=[name, employee_id, email, department, other_dept,
request_details, frequency, urgency],
outputs=[output]
)
gr.Markdown("""
### Notes:
- Please provide detailed information about the data you need
- Include specific time periods and parameters
- Clearly state the purpose of your request
- All communications will be sent to the provided email
""")
if __name__ == "__main__":
demo.launch() |