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()