-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_scheduler.py
124 lines (117 loc) · 4.73 KB
/
test_scheduler.py
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
from datetime import datetime, timedelta
from schedule_optimizer import SurgeryScheduleOptimizer
def create_surgery_list(start_date):
"""Create a list of surgeries with proper scheduling information."""
return [
{
'Patient Age': 75,
'BMI': 30.5,
'Surgery Type': 'Hip Replacement',
'Surgeon': 'Dr. Smith',
'Anesthesiologist': 'Dr. Brown',
'Nurse': 'Nurse A',
'Day of Week': 'Monday',
'Pre-op Prep Time (min)': 45,
'Transfer to OR Time (min)': 15,
'Anesthesia Time (min)': 30,
'Positioning Time (min)': 20,
'Comorbidities': 'Hypertension',
'Instrument Ready (Y/N)': 'Y',
'PACU Bed Ready (Y/N)': 'Y',
'Scheduled Start': start_date.strftime('%Y-%m-%d 09:00:00'),
'Actual Start': start_date.strftime('%Y-%m-%d 09:15:00'), # 15 min delay
'Total OR Time (min)': 180
},
{
'Patient Age': 45,
'BMI': 24.5,
'Surgery Type': 'ACL Repair',
'Surgeon': 'Dr. Johnson',
'Anesthesiologist': 'Dr. Davis',
'Nurse': 'Nurse B',
'Day of Week': 'Monday',
'Pre-op Prep Time (min)': 30,
'Transfer to OR Time (min)': 10,
'Anesthesia Time (min)': 25,
'Positioning Time (min)': 15,
'Comorbidities': 'None',
'Instrument Ready (Y/N)': 'Y',
'PACU Bed Ready (Y/N)': 'Y',
'Scheduled Start': start_date.strftime('%Y-%m-%d 11:00:00'),
'Actual Start': start_date.strftime('%Y-%m-%d 11:00:00'), # On time
'Total OR Time (min)': 120
},
{
'Patient Age': 68,
'BMI': 27.8,
'Surgery Type': 'Knee Replacement',
'Surgeon': 'Dr. Smith',
'Anesthesiologist': 'Dr. Brown',
'Nurse': 'Nurse C',
'Day of Week': 'Tuesday',
'Pre-op Prep Time (min)': 40,
'Transfer to OR Time (min)': 15,
'Anesthesia Time (min)': 30,
'Positioning Time (min)': 20,
'Comorbidities': 'Diabetes',
'Instrument Ready (Y/N)': 'Y',
'PACU Bed Ready (Y/N)': 'Y',
'Scheduled Start': (start_date + timedelta(days=1)).strftime('%Y-%m-%d 09:00:00'),
'Actual Start': (start_date + timedelta(days=1)).strftime('%Y-%m-%d 09:05:00'), # 5 min delay
'Total OR Time (min)': 150
},
{
'Patient Age': 35,
'BMI': 22.1,
'Surgery Type': 'Arthroscopy',
'Surgeon': 'Dr. Johnson',
'Anesthesiologist': 'Dr. Davis',
'Nurse': 'Nurse D',
'Day of Week': 'Wednesday',
'Pre-op Prep Time (min)': 25,
'Transfer to OR Time (min)': 10,
'Anesthesia Time (min)': 20,
'Positioning Time (min)': 10,
'Comorbidities': 'None',
'Instrument Ready (Y/N)': 'Y',
'PACU Bed Ready (Y/N)': 'Y',
'Scheduled Start': (start_date + timedelta(days=2)).strftime('%Y-%m-%d 10:00:00'),
'Actual Start': (start_date + timedelta(days=2)).strftime('%Y-%m-%d 10:00:00'), # On time
'Total OR Time (min)': 90
},
{
'Patient Age': 82,
'BMI': 26.4,
'Surgery Type': 'Cataract Surgery',
'Surgeon': 'Dr. Wilson',
'Anesthesiologist': 'Dr. Brown',
'Nurse': 'Nurse E',
'Day of Week': 'Thursday',
'Pre-op Prep Time (min)': 20,
'Transfer to OR Time (min)': 10,
'Anesthesia Time (min)': 15,
'Positioning Time (min)': 10,
'Comorbidities': 'Hypertension,Heart Disease',
'Instrument Ready (Y/N)': 'Y',
'PACU Bed Ready (Y/N)': 'Y',
'Scheduled Start': (start_date + timedelta(days=3)).strftime('%Y-%m-%d 08:00:00'),
'Actual Start': (start_date + timedelta(days=3)).strftime('%Y-%m-%d 08:10:00'), # 10 min delay
'Total OR Time (min)': 60
}
]
def main():
# Create scheduler instance
scheduler = SurgeryScheduleOptimizer()
# Get next Monday as start date
today = datetime.now()
days_until_monday = (7 - today.weekday()) % 7
next_monday = today + timedelta(days=days_until_monday)
print(f"Scheduling surgeries starting from {next_monday.strftime('%A, %B %d, %Y')}")
print("=" * 100)
# Create schedule
example_surgeries = create_surgery_list(next_monday)
schedule = scheduler.create_weekly_schedule(example_surgeries, next_monday)
# Print schedule
scheduler.print_schedule(schedule)
if __name__ == "__main__":
main()