|
|
import gradio as gr |
|
|
import pandas as pd |
|
|
import os |
|
|
import csv |
|
|
|
|
|
|
|
|
appointments_file_path = "appointments.csv" |
|
|
patients_file_path = "patients.csv" |
|
|
|
|
|
def initialize_csv(file_path, headers): |
|
|
"""Initialize the CSV file with headers if it doesn't exist.""" |
|
|
if not os.path.exists(file_path): |
|
|
with open(file_path, mode='w', newline='') as file: |
|
|
writer = csv.writer(file) |
|
|
writer.writerow(headers) |
|
|
|
|
|
|
|
|
initialize_csv(appointments_file_path, ["Patient ID", "Patient Name", "Doctor Name", "Appointment Date", "Appointment Time"]) |
|
|
initialize_csv(patients_file_path, ["Patient ID", "Patient Name", "Age", "Gender", "Contact Number"]) |
|
|
|
|
|
def get_patient_details(patient_id): |
|
|
"""Get patient details by Patient ID.""" |
|
|
patient_id = patient_id.strip() |
|
|
with open(patients_file_path, mode='r') as file: |
|
|
reader = csv.DictReader(file) |
|
|
for row in reader: |
|
|
if row["Patient ID"].strip() == patient_id: |
|
|
return row["Patient Name"] |
|
|
return "" |
|
|
|
|
|
def get_appointment_details(patient_id): |
|
|
"""Retrieve appointment details for a given Patient ID.""" |
|
|
patient_id = str(patient_id).strip() |
|
|
|
|
|
if not os.path.exists(appointments_file_path): |
|
|
return "Appointments file not found." |
|
|
|
|
|
try: |
|
|
appointments_df = pd.read_csv(appointments_file_path) |
|
|
except pd.errors.EmptyDataError: |
|
|
return "Appointments file is empty." |
|
|
except pd.errors.ParserError: |
|
|
return "Error parsing the appointments file." |
|
|
|
|
|
|
|
|
appointment = appointments_df[appointments_df["Patient ID"].astype(str).str.strip() == patient_id] |
|
|
|
|
|
if appointment.empty: |
|
|
return f"No appointment records found for Patient ID: {patient_id}." |
|
|
|
|
|
details = [] |
|
|
for _, row in appointment.iterrows(): |
|
|
detail = ( |
|
|
f"Patient Name: {row['Patient Name']}\n" |
|
|
f"Doctor Name: {row['Doctor Name']}\n" |
|
|
f"Appointment Date: {row['Appointment Date']}\n" |
|
|
f"Appointment Time: {row['Appointment Time']}\n" |
|
|
) |
|
|
details.append(detail) |
|
|
|
|
|
return "\n\n".join(details) |
|
|
|
|
|
def gradio_interface(): |
|
|
"""Create Gradio interface for viewing appointment details.""" |
|
|
with gr.Blocks() as demo: |
|
|
with gr.Row(): |
|
|
with gr.Column(scale=1): |
|
|
|
|
|
patient_id_input = gr.Number(label="Patient ID", precision=0) |
|
|
|
|
|
with gr.Column(scale=3): |
|
|
|
|
|
patient_name_output = gr.Textbox(label="Patient Name", interactive=False) |
|
|
|
|
|
|
|
|
appointment_output = gr.Textbox(label="Appointment Details", interactive=False, lines=15) |
|
|
|
|
|
def update_details(patient_id): |
|
|
patient_name = get_patient_details(str(patient_id)) |
|
|
appointment_details = get_appointment_details(str(patient_id)) |
|
|
return patient_name, appointment_details |
|
|
|
|
|
|
|
|
patient_id_input.change( |
|
|
fn=update_details, |
|
|
inputs=patient_id_input, |
|
|
outputs=[patient_name_output, appointment_output] |
|
|
) |
|
|
|
|
|
return demo |
|
|
|
|
|
|
|
|
demo = gradio_interface() |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo.launch() |
|
|
|