Data_request / app.py
Rathapoom's picture
Update app.py
c0d20a2 verified
raw
history blame
6.34 kB
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()